@hyddenlabs/hydn-ui 0.3.0-alpha.184 → 0.3.0-alpha.185
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +132 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +53 -1
- package/dist/index.d.ts +53 -1
- package/dist/index.js +132 -1
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/system/theme-provider/theme-provider.tsx","../src/components/system/color-mode-toggle/color-mode-toggle.tsx","../src/theme/tokens.ts","../src/theme/size-tokens.ts","../src/components/system/icon/icon.tsx","../src/components/system/auth-provider/auth-provider.tsx","../src/components/system/auth-provider/auth-utils.ts","../src/components/branding/hydden-logo.tsx","../src/components/branding/google-logo.tsx","../src/components/branding/microsoft-logo.tsx","../src/components/layout/container/container.tsx","../src/components/layout/grid/grid.tsx","../src/components/layout/page/page.tsx","../src/components/typography/heading/heading.tsx","../src/components/typography/text/text.tsx","../src/components/layout/page-header/page-header.tsx","../src/components/layout/section/section.tsx","../src/components/layout/section-header/section-header.tsx","../src/components/layout/stack/stack.tsx","../src/components/layout/accordion/accordion.tsx","../src/components/layout/divider/divider.tsx","../src/components/feedback/overlay/useOverlay.ts","../src/components/layout/drawer/drawer.tsx","../src/components/layout/card/card.tsx","../src/components/layout/card/card-header.tsx","../src/components/layout/card/card-body.tsx","../src/components/layout/card/card-footer.tsx","../src/components/layout/card/card-actions.tsx","../src/components/layout/card/card-figure.tsx","../src/components/layout/card/card-title.tsx","../src/components/forms/button/button.tsx","../src/components/forms/button/button-with-icon.tsx","../src/components/layout/action-card/action-card.tsx","../src/hooks/useScrollReset.ts","../src/components/forms/button/icon-button.tsx","../src/components/layout/left-nav-layout/left-nav-layout.tsx","../src/components/feedback/tooltip/tooltip.tsx","../src/components/layout/left-nav-layout/left-nav-item.tsx","../src/components/layout/left-nav-layout/left-nav-section.tsx","../src/components/layout/hero/hero.tsx","../src/components/layout/feature-section/feature-section.tsx","../src/components/typography/link/link.tsx","../src/components/layout/footer/footer.tsx","../src/components/layout/page-transition/page-transition.tsx","../src/components/navigation/breadcrumbs/breadcrumbs.tsx","../src/components/navigation/dropdown/dropdown.tsx","../src/components/navigation/nav/nav.tsx","../src/components/navigation/sidebar/sidebar.tsx","../src/components/navigation/stepper/stepper.tsx","../src/components/navigation/tabs/tabs.tsx","../src/components/navigation/pagination/pagination.tsx","../src/components/navigation/navbar/navbar.tsx","../src/components/navigation/navbar/navbar-brand.tsx","../src/components/navigation/navbar/navbar-link.tsx","../src/components/navigation/navbar/navbar-toggle.tsx","../src/components/navigation/nav-dropdown/nav-dropdown.tsx","../src/components/navigation/nav-dropdown/nav-dropdown-item.tsx","../src/components/navigation/scroll-nav/scroll-nav.tsx","../src/components/data-display/avatar/avatar.tsx","../src/components/data-display/badge/badge.tsx","../src/components/data-display/badge/status-label.tsx","../src/components/data-display/chip/chip.tsx","../src/components/data-display/code-block/code-block.tsx","../src/components/data-display/table/table.tsx","../src/components/forms/checkbox/checkbox.tsx","../src/components/data-display/empty-state/empty-state.tsx","../src/components/data-display/data-table/use-table.ts","../src/components/data-display/data-table/data-table.tsx","../src/components/data-display/list/list.tsx","../src/components/data-display/timeline/timeline.tsx","../src/components/feedback/alert/alert.tsx","../src/components/feedback/modal/modal.tsx","../src/components/feedback/dialog/dialog.tsx","../src/components/feedback/dialog/delete-dialog.tsx","../src/components/feedback/popover/popover.tsx","../src/components/feedback/progress-bar/progress-bar.tsx","../src/components/feedback/skeleton/skeleton.tsx","../src/components/feedback/smooth-transition/smooth-transition.tsx","../src/components/feedback/spinner/spinner.tsx","../src/components/feedback/toast/toast.tsx","../src/components/forms/button-group/button-group.tsx","../src/components/forms/calendar/calendar.tsx","../src/components/forms/date-picker/date-picker.tsx","../src/components/forms/code/code.tsx","../src/components/forms/fieldset/fieldset.tsx","../src/components/forms/form/form.tsx","../src/components/forms/form-field/form-field.tsx","../src/components/forms/input/input.tsx","../src/components/forms/form-input/form-input.tsx","../src/components/forms/select/select.tsx","../src/components/forms/form-select/form-select.tsx","../src/components/forms/textarea/textarea.tsx","../src/components/forms/form-textarea/form-textarea.tsx","../src/components/forms/input-group/input-group.tsx","../src/components/forms/multi-select/multi-select.tsx","../src/components/forms/radio-group/radio-group.tsx","../src/components/forms/radio/radio.tsx","../src/components/forms/select/select-item.tsx","../src/components/forms/slider/slider.tsx","../src/components/forms/switch/switch.tsx","../src/components/typography/code/code.tsx","../src/utils/debounce.ts","../src/hooks/useDebounce.ts"],"names":["jsx","createContext","useState","useEffect","error","useContext","jsxs","marginX","alignClasses","createElement","useCallback","React","Fragment","resolved","useRef","createPortal","navElement","RouterLink","itemEls","useLayoutEffect","Link","NavLink","scrollLeft","useMemo","justifyClasses","isValidElement","cloneElement","useId","Code","code_default"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext, useEffect, useState, useMemo, ReactNode, useCallback } from 'react';\n\n/**\n * hydn UI Theme System\n * - Supports light and dark themes\n * - Themes are applied via className on the <html> element\n * - Define new themes in globals.css following the CSS variable pattern\n */\n\nexport type Theme = 'light' | 'dark';\n\nexport type ThemeContextType = {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n availableThemes: Theme[];\n};\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport type ThemeProviderProps = {\n /** React children to be wrapped with theme context */\n children: ReactNode;\n /** Initial theme to use if none is stored\n * @default 'light'\n */\n defaultTheme?: Theme;\n /** LocalStorage key for persisting theme selection\n * @default 'hydn-theme'\n */\n storageKey?: string;\n /**\n * List of available theme names.\n * Defaults to ['light', 'dark']\n */\n themes?: Theme[];\n};\n\n/**\n * ThemeProvider - Context for managing light/dark themes\n */\nexport function ThemeProvider({\n children,\n defaultTheme = 'light',\n storageKey = 'hydn-theme',\n themes = ['light', 'dark']\n}: Readonly<ThemeProviderProps>) {\n const [theme, setThemeState] = useState<Theme>(() => {\n if (typeof window !== 'undefined') {\n const stored = localStorage.getItem(storageKey) as Theme;\n return stored && themes.includes(stored) ? stored : defaultTheme;\n }\n return defaultTheme;\n });\n\n useEffect(() => {\n const root = window.document.documentElement;\n\n // Remove all possible theme classes\n root.classList.remove(...themes);\n\n // Apply the theme class to <html>\n root.classList.add(theme);\n }, [theme, themes]);\n\n const setTheme = useCallback(\n (newTheme: Theme) => {\n if (themes.includes(newTheme)) {\n localStorage.setItem(storageKey, newTheme);\n setThemeState(newTheme);\n } else {\n /* eslint-disable-next-line no-console */\n console.warn(`Theme \"${newTheme}\" is not in availableThemes. Add it to the themes prop.`);\n }\n },\n [themes, storageKey]\n );\n\n const value = useMemo(\n () => ({\n theme,\n setTheme,\n availableThemes: themes\n }),\n [theme, themes, setTheme]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\n/**\n * useTheme - Hook to access theme context\n */\nexport function useTheme() {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n}\n\nexport default ThemeProvider;\n","import { useTheme } from '../theme-provider';\n\nexport type ColorModeToggleProps = {\n /** Additional CSS classes for custom styling */\n className?: string;\n};\n\n/**\n * ColorModeToggle - Simple light/dark theme switcher\n */\nfunction ColorModeToggle({ className = '' }: Readonly<ColorModeToggleProps>) {\n const { theme, setTheme } = useTheme();\n\n const toggleTheme = () => {\n setTheme(theme === 'light' ? 'dark' : 'light');\n };\n\n const isDark = theme === 'dark';\n const label = `Switch to ${theme === 'light' ? 'dark' : 'light'} theme`;\n\n return (\n <button\n onClick={toggleTheme}\n className={`relative p-2 rounded-md hover:bg-accent hover:text-accent-foreground transition-colors cursor-pointer ${className}`}\n aria-label={label}\n title={label}\n >\n {/* Sun icon - visible in light mode */}\n <svg\n className={`w-5 h-5 absolute inset-0 m-auto transition-all duration-300 ${\n isDark ? 'rotate-90 scale-0 opacity-0' : 'rotate-0 scale-100 opacity-100'\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=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\"\n />\n </svg>\n\n {/* Moon icon - visible in dark mode */}\n <svg\n className={`w-5 h-5 transition-all duration-300 ${\n isDark ? 'rotate-0 scale-100 opacity-100' : '-rotate-90 scale-0 opacity-0'\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=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\"\n />\n </svg>\n </button>\n );\n}\n\nColorModeToggle.displayName = 'ColorModeToggle';\n\nexport default ColorModeToggle;\n","export const colors = {\n background: 'hsl(var(--background))',\n foreground: 'hsl(var(--foreground))',\n card: 'hsl(var(--card))',\n 'card-foreground': 'hsl(var(--card-foreground))',\n popover: 'hsl(var(--popover))',\n 'popover-foreground': 'hsl(var(--popover-foreground))',\n primary: 'hsl(var(--primary))',\n 'primary-hover': 'hsl(var(--primary-hover))',\n 'primary-active': 'hsl(var(--primary-active))',\n 'primary-foreground': 'hsl(var(--primary-foreground))',\n secondary: 'hsl(var(--secondary))',\n 'secondary-hover': 'hsl(var(--secondary-hover))',\n 'secondary-active': 'hsl(var(--secondary-active))',\n 'secondary-foreground': 'hsl(var(--secondary-foreground))',\n accent: 'hsl(var(--accent))',\n 'accent-hover': 'hsl(var(--accent-hover))',\n 'accent-active': 'hsl(var(--accent-active))',\n 'accent-foreground': 'hsl(var(--accent-foreground))',\n neutral: 'hsl(var(--neutral))',\n 'neutral-hover': 'hsl(var(--neutral-hover))',\n 'neutral-active': 'hsl(var(--neutral-active))',\n 'neutral-foreground': 'hsl(var(--neutral-foreground))',\n muted: 'hsl(var(--muted))',\n 'muted-hover': 'hsl(var(--muted-hover))',\n 'muted-active': 'hsl(var(--muted-active))',\n 'muted-foreground': 'hsl(var(--muted-foreground))',\n destructive: 'hsl(var(--destructive))',\n 'destructive-hover': 'hsl(var(--destructive-hover))',\n 'destructive-active': 'hsl(var(--destructive-active))',\n 'destructive-foreground': 'hsl(var(--destructive-foreground))',\n success: 'hsl(var(--success))',\n 'success-hover': 'hsl(var(--success-hover))',\n 'success-active': 'hsl(var(--success-active))',\n 'success-foreground': 'hsl(var(--success-foreground))',\n warning: 'hsl(var(--warning))',\n 'warning-hover': 'hsl(var(--warning-hover))',\n 'warning-active': 'hsl(var(--warning-active))',\n 'warning-foreground': 'hsl(var(--warning-foreground))',\n info: 'hsl(var(--info))',\n 'info-hover': 'hsl(var(--info-hover))',\n 'info-active': 'hsl(var(--info-active))',\n 'info-foreground': 'hsl(var(--info-foreground))',\n border: 'hsl(var(--border))',\n input: 'hsl(var(--input))',\n ring: 'hsl(var(--ring))'\n};\n\nexport type ThemeColor = keyof typeof colors;\nexport const themeColorNames = Object.keys(colors) as ThemeColor[];\n\nexport const colorClassPrefixes = ['text', 'bg', 'border', 'ring', 'outline', 'decoration', 'fill', 'stroke'] as const;\nexport type ColorClassPrefix = (typeof colorClassPrefixes)[number];\nexport type ThemeColorClass = `${ColorClassPrefix}-${ThemeColor}`;\n\nexport const themeColorClasses = colorClassPrefixes.flatMap((prefix) =>\n themeColorNames.map((color) => `${prefix}-${color}` as ThemeColorClass)\n);\n\nexport type ThemeColorProp = ThemeColor | ThemeColorClass;\n\nexport type StatusColorProp = 'default' | 'primary' | 'success' | 'warning' | 'error';\n\nconst outlineBaseClasses =\n 'border-2 bg-transparent transition-colors transition-shadow duration-200 ease-out focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-transparent' as const;\n\n/**\n * Standardized color variant classes for consistent component styling\n * All variants support: neutral, primary, secondary, accent, info, success, warning, error\n */\nexport const colorVariants = {\n // Solid buttons/elements - filled background\n solid: {\n neutral: 'bg-neutral text-neutral-foreground hover:bg-neutral-hover active:bg-neutral-active',\n primary: 'bg-primary text-primary-foreground hover:bg-primary-hover active:bg-primary-active',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary-hover active:bg-secondary-active',\n accent: 'bg-accent text-accent-foreground hover:bg-accent-hover active:bg-accent-active',\n info: 'bg-info text-info-foreground hover:bg-info-hover active:bg-info-active',\n success: 'bg-success text-success-foreground hover:bg-success-hover active:bg-success-active',\n warning: 'bg-warning text-warning-foreground hover:bg-warning-hover active:bg-warning-active',\n error: 'bg-destructive text-destructive-foreground hover:bg-destructive-hover active:bg-destructive-active'\n },\n\n // Outline style - transparent with border\n outline: {\n neutral: `${outlineBaseClasses} border-neutral text-neutral hover:border-neutral-hover hover:text-neutral-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--neutral))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--neutral))] focus-visible:outline-neutral/35`,\n primary: `${outlineBaseClasses} border-primary text-primary hover:border-primary-hover hover:text-primary-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--primary))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--primary))] focus-visible:outline-primary/35`,\n secondary: `${outlineBaseClasses} border-secondary text-secondary hover:border-secondary-hover hover:text-secondary-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--secondary))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--secondary))] focus-visible:outline-secondary/35`,\n accent: `${outlineBaseClasses} border-accent text-accent hover:border-accent-hover hover:text-accent-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--accent))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--accent))] focus-visible:outline-accent/35`,\n info: `${outlineBaseClasses} border-info text-info hover:border-info-hover hover:text-info-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--info))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--info))] focus-visible:outline-info/35`,\n success: `${outlineBaseClasses} border-success text-success hover:border-success-hover hover:text-success-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--success))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--success))] focus-visible:outline-success/35`,\n warning: `${outlineBaseClasses} border-warning text-warning hover:border-warning-hover hover:text-warning-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--warning))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--warning))] focus-visible:outline-warning/35`,\n error: `${outlineBaseClasses} border-destructive text-destructive hover:border-destructive-hover hover:text-destructive-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--destructive))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--destructive))] focus-visible:outline-destructive/35`\n },\n\n // Ghost style - transparent with subtle hover\n ghost: {\n neutral: 'bg-transparent text-foreground hover:bg-neutral/10 active:bg-neutral/20',\n primary: 'bg-transparent text-primary hover:bg-primary/10 active:bg-primary/20',\n secondary: 'bg-transparent text-secondary hover:bg-secondary/10 active:bg-secondary/20',\n accent: 'bg-transparent text-accent hover:bg-accent/10 active:bg-accent/20',\n info: 'bg-transparent text-info hover:bg-info/10 active:bg-info/20',\n success: 'bg-transparent text-success hover:bg-success/10 active:bg-success/20',\n warning: 'bg-transparent text-warning hover:bg-warning/10 active:bg-warning/20',\n error: 'bg-transparent text-destructive hover:bg-destructive/10 active:bg-destructive/20'\n },\n\n // Soft style - subtle background\n soft: {\n neutral: 'bg-neutral/20 text-foreground hover:bg-neutral/30 active:bg-neutral/40',\n primary: 'bg-primary/20 text-primary hover:bg-primary/30 active:bg-primary/40',\n secondary: 'bg-secondary/20 text-secondary hover:bg-secondary/30 active:bg-secondary/40',\n accent: 'bg-accent/20 text-accent hover:bg-accent/30 active:bg-accent/40',\n info: 'bg-info/20 text-info hover:bg-info/30 active:bg-info/40',\n success: 'bg-success/20 text-success hover:bg-success/30 active:bg-success/40',\n warning: 'bg-warning/20 text-warning hover:bg-warning/30 active:bg-warning/40',\n error: 'bg-destructive/20 text-destructive hover:bg-destructive/30 active:bg-destructive/40'\n },\n\n // Link style - text only with underline on hover\n link: {\n neutral: 'bg-transparent text-foreground underline-offset-4 hover:underline',\n primary: 'bg-transparent text-primary underline-offset-4 hover:underline',\n secondary: 'bg-transparent text-secondary underline-offset-4 hover:underline',\n accent: 'bg-transparent text-accent underline-offset-4 hover:underline',\n info: 'bg-transparent text-info underline-offset-4 hover:underline',\n success: 'bg-transparent text-success underline-offset-4 hover:underline',\n warning: 'bg-transparent text-warning underline-offset-4 hover:underline',\n error: 'bg-transparent text-destructive underline-offset-4 hover:underline'\n },\n\n // Badge/Chip style - subtle filled background with border\n badge: {\n default: 'bg-muted text-muted-foreground border border-border',\n primary: 'bg-primary/10 text-primary border border-primary/20',\n success: 'bg-success/10 text-success border border-success/20',\n warning: 'bg-warning/10 text-warning border border-warning/20',\n error: 'bg-destructive/10 text-destructive border border-destructive/20',\n info: 'bg-info/10 text-info border border-info/20'\n },\n\n // Alert style - translucent background with border\n alert: {\n info: 'bg-info/20 text-foreground border-info/50 backdrop-blur-sm',\n success: 'bg-success/20 text-foreground border-success/50 backdrop-blur-sm',\n warning: 'bg-warning/20 text-foreground border-warning/50 backdrop-blur-sm',\n error: 'bg-destructive/20 text-foreground border-destructive/50 backdrop-blur-sm'\n }\n} as const;\n\nexport type ColorVariantStyle = keyof typeof colorVariants;\nexport type ColorVariantKey<T extends ColorVariantStyle> = keyof (typeof colorVariants)[T];\n\nexport const radii = {\n sm: '0.25rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem'\n};\n\nexport const fonts = {\n sans: \"'Inter', system-ui, sans-serif\",\n mono: \"'JetBrains Mono', monospace\"\n};\n\nexport const alignments = ['left', 'center', 'right'] as const;\nexport type Alignment = (typeof alignments)[number];\n\nexport const inputAlignClasses: Record<Alignment, string> = {\n left: 'mr-auto',\n center: 'mx-auto',\n right: 'ml-auto'\n};\n\n/**\n * HTML autocomplete attribute values for form inputs\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n */\nexport const autocompleteOptions = [\n 'on',\n 'off',\n 'address-line1',\n 'address-line2',\n 'address-line3',\n 'address-level1',\n 'address-level2',\n 'address-level3',\n 'address-level4',\n 'street-address',\n 'country',\n 'country-name',\n 'postal-code',\n 'name',\n 'additional-name',\n 'family-name',\n 'given-name',\n 'honoric-prefix',\n 'honoric-suffix',\n 'nickname',\n 'organization-title',\n 'username',\n 'new-password',\n 'current-password',\n 'bday',\n 'bday-day',\n 'bday-month',\n 'bday-year',\n 'sex',\n 'one-time-code',\n 'organization',\n 'cc-name',\n 'cc-given-name',\n 'cc-additional-name',\n 'cc-family-name',\n 'cc-number',\n 'cc-exp',\n 'cc-exp-month',\n 'cc-exp-year',\n 'cc-csc',\n 'cc-type',\n 'transaction-currency',\n 'transaction-amount',\n 'language',\n 'url',\n 'email',\n 'photo',\n 'tel',\n 'tel-country-code',\n 'tel-national',\n 'tel-area-code',\n 'tel-local',\n 'tel-local-prefix',\n 'tel-local-suffix',\n 'tel-extension',\n 'impp'\n] as const;\n\nexport type AutocompleteOption = (typeof autocompleteOptions)[number];\n","/**\n * Unified Size System for hydn-ui\n *\n * All sizes use Tailwind classes and are responsive (mobile-first).\n * Mobile sizes are larger for touch targets, desktop sizes are smaller.\n *\n * SIZE SCALE: xs → sm → md → lg → xl → 2xl → 3xl\n */\n\n// =============================================================================\n// VISUAL ELEMENT SIZES (Icons, Spinners, Logos)\n// Responsive: slightly larger on mobile for visibility\n// =============================================================================\n\n/**\n * Icon/Spinner/Visual element sizes\n * Uses Tailwind classes with responsive adjustments\n */\nexport const visualSizes = {\n xs: {\n classes: 'w-3.5 h-3.5 sm:w-3 sm:h-3', // 20px mobile, 16px desktop\n pixels: { mobile: 20, desktop: 16 }\n },\n sm: {\n classes: 'w-5 h-5 sm:w-4 sm:h-4', // 24px mobile, 20px desktop\n pixels: { mobile: 24, desktop: 20 }\n },\n md: {\n classes: 'w-6 h-6 sm:w-5 sm:h-5', // 28px mobile, 24px desktop\n pixels: { mobile: 28, desktop: 24 }\n },\n lg: {\n classes: 'w-7 h-7 sm:w-6 sm:h-6', // 32px mobile, 28px desktop\n pixels: { mobile: 32, desktop: 28 }\n },\n xl: {\n classes: 'w-8 h-8 sm:w-7 sm:h-7', // 36px mobile, 32px desktop\n pixels: { mobile: 36, desktop: 32 }\n },\n '2xl': {\n classes: 'w-9 h-9 sm:w-8 sm:h-8', // 40px mobile, 36px desktop\n pixels: { mobile: 40, desktop: 36 }\n },\n '3xl': {\n classes: 'w-12 h-12 sm:w-10 sm:h-10', // 52px mobile, 44px desktop\n pixels: { mobile: 52, desktop: 44 }\n }\n} as const;\n\n/** Core size type - derived from visualSizes */\nexport type Size = keyof typeof visualSizes;\n\n/**\n * Spinner sizes - extends visual sizes with border widths\n */\nconst spinnerBorderWidths: Record<Size, string> = {\n xs: 'border',\n sm: 'border-2',\n md: 'border-2',\n lg: 'border-2',\n xl: 'border-[3px]',\n '2xl': 'border-[3px]',\n '3xl': 'border-4'\n};\n\ntype SpinnerSizeDefinition = (typeof visualSizes)[Size] & { border: string };\n\nexport const spinnerSizes: Record<Size, SpinnerSizeDefinition> = (Object.keys(visualSizes) as Size[]).reduce(\n (acc, size) => {\n acc[size] = {\n ...visualSizes[size],\n border: spinnerBorderWidths[size]\n };\n return acc;\n },\n {} as Record<Size, SpinnerSizeDefinition>\n);\n\n/**\n * Avatar sizes - larger scale for displaying faces/initials\n * Responsive: comfortable touch targets on mobile\n */\nexport const avatarSizes = {\n xs: {\n classes: 'w-8 h-8 sm:w-6 sm:h-6',\n text: 'text-sm sm:text-xs'\n },\n sm: {\n classes: 'w-10 h-10 sm:w-8 sm:h-8',\n text: 'text-base sm:text-sm'\n },\n md: {\n classes: 'w-12 h-12 sm:w-10 sm:h-10',\n text: 'text-lg sm:text-base'\n },\n lg: {\n classes: 'w-14 h-14 sm:w-12 sm:h-12',\n text: 'text-xl sm:text-lg'\n },\n xl: {\n classes: 'w-20 h-20 sm:w-16 sm:h-16',\n text: 'text-2xl sm:text-xl'\n },\n '2xl': {\n classes: 'w-24 h-24 sm:w-20 sm:h-20',\n text: 'text-3xl sm:text-2xl'\n },\n '3xl': {\n classes: 'w-28 h-28 sm:w-24 sm:h-24',\n text: 'text-4xl sm:text-3xl'\n }\n} as const;\n\n/**\n * Logo sizes - brand element sizing\n */\nexport const logoSizes = {\n xs: { classes: 'h-5 w-5 sm:h-4 sm:w-4' },\n sm: { classes: 'h-7 w-7 sm:h-6 sm:w-6' },\n md: { classes: 'h-9 w-9 sm:h-8 sm:w-8' },\n lg: { classes: 'h-12 w-12 sm:h-10 sm:w-10' },\n xl: { classes: 'h-14 w-14 sm:h-12 sm:w-12' },\n '2xl': { classes: 'h-20 w-20 sm:h-16 sm:w-16' },\n '3xl': { classes: 'h-24 w-24 sm:h-20 sm:w-20' }\n} as const;\n\n// =============================================================================\n// INTERACTIVE ELEMENT SIZES (Buttons, Inputs, Selects)\n// Responsive: larger touch targets on mobile (44px+ recommended)\n// =============================================================================\nexport const interactiveSizes = {\n xs: {\n height: 'h-8 sm:h-6 min-h-8 sm:min-h-6',\n padding: 'px-3 sm:px-2',\n text: 'text-sm sm:text-xs',\n icon: visualSizes.xs\n },\n sm: {\n height: 'h-10 sm:h-8 min-h-10 sm:min-h-8',\n padding: 'px-4 sm:px-3',\n text: 'text-base sm:text-sm',\n icon: visualSizes.sm\n },\n md: {\n height: 'h-12 sm:h-10 min-h-12 sm:min-h-10',\n padding: 'px-5 sm:px-4',\n text: 'text-base sm:text-sm',\n icon: visualSizes.md\n },\n lg: {\n height: 'h-14 sm:h-12 min-h-14 sm:min-h-12',\n padding: 'px-7 sm:px-6',\n text: 'text-lg sm:text-base',\n icon: visualSizes.lg\n },\n xl: {\n height: 'h-16 sm:h-14 min-h-16 sm:min-h-14',\n padding: 'px-9 sm:px-8',\n text: 'text-xl sm:text-lg',\n icon: visualSizes.xl\n }\n} as const;\n\nexport type InteractiveSize = keyof typeof interactiveSizes;\n\n// =============================================================================\n// INPUT WIDTH SIZES\n// Semantic width options for input fields\n// =============================================================================\nexport const inputWidthSizes = {\n xs: 'w-14 sm:w-16', // ~4 chars - ZIP codes, years\n sm: 'w-20 sm:w-24', // ~6-8 chars - short codes, area codes\n md: 'w-40 sm:w-48', // ~12-16 chars - medium text (default)\n lg: 'w-56 sm:w-64', // ~20-24 chars - names, emails\n xl: 'w-72 sm:w-80', // ~28-32 chars - long text\n '2xl': 'w-80 sm:w-96', // ~36-40 chars - very long text\n '1/4': 'w-1/4', // 25% of container\n '1/2': 'w-1/2', // 50% of container\n '3/4': 'w-3/4', // 75% of container\n full: 'w-full', // 100% of container\n fit: 'w-fit', // intrinsic width based on content (shrink-to-fit)\n auto: 'w-auto' // default width behavior (layout-dependent)\n} as const;\n\nexport type InputWidth = keyof typeof inputWidthSizes;\n\n// =============================================================================\n// INLINE ELEMENT SIZES (Badges, Chips, Tags)\n// =============================================================================\nexport const badgeSizes = {\n sm: {\n classes: 'px-2.5 sm:px-2 py-1 sm:py-0.5 text-sm sm:text-xs',\n icon: visualSizes.xs\n },\n md: {\n classes: 'px-3 sm:px-2.5 py-1 sm:py-0.5 text-sm sm:text-xs font-semibold',\n icon: visualSizes.sm\n },\n lg: {\n classes: 'px-4 sm:px-3 py-1.5 sm:py-1 text-base sm:text-sm font-semibold',\n icon: visualSizes.md\n }\n} as const;\n\nexport const chipSizes = {\n xs: {\n classes: 'px-2 sm:px-1.5 py-1 sm:py-0.5 text-sm sm:text-xs gap-1 sm:gap-0.5',\n icon: visualSizes.xs\n },\n sm: {\n classes: 'px-2.5 sm:px-2 py-1.5 sm:py-1 text-sm sm:text-xs gap-1.5 sm:gap-1',\n icon: visualSizes.sm\n },\n md: {\n classes: 'px-3.5 sm:px-3 py-2 sm:py-1.5 text-base sm:text-sm gap-2 sm:gap-1.5',\n icon: visualSizes.md\n },\n lg: {\n classes: 'px-5 sm:px-4 py-2.5 sm:py-2 text-lg sm:text-base gap-2.5 sm:gap-2',\n icon: visualSizes.lg\n },\n xl: {\n classes: 'px-6 sm:px-5 py-3 sm:py-2.5 text-xl sm:text-lg gap-3 sm:gap-2.5',\n icon: visualSizes.xl\n },\n '2xl': {\n classes: 'px-7 sm:px-6 py-3.5 sm:py-3 text-2xl sm:text-xl gap-3.5 sm:gap-3',\n icon: visualSizes['2xl']\n },\n '3xl': {\n classes: 'px-8 sm:px-7 py-4 sm:py-3.5 text-3xl sm:text-2xl gap-4 sm:gap-3.5',\n icon: visualSizes['3xl']\n }\n} as const;\n\n/**\n * Inline code sizes - for code snippets\n */\nexport const codeSizes = {\n sm: 'text-xs px-1 py-0.5',\n md: 'text-sm px-1.5 py-0.5',\n lg: 'text-base px-2 py-1'\n} as const;\n\nexport type CodeSize = keyof typeof codeSizes;\n\n/**\n * Status label sizes - for status indicators with dots\n */\nexport const statusLabelSizes = {\n sm: {\n container: 'px-2 py-0.5 text-xs gap-1.5',\n dot: 'w-1.5 h-1.5'\n },\n md: {\n container: 'px-2.5 py-0.5 text-sm gap-2',\n dot: 'w-2 h-2'\n },\n lg: {\n container: 'px-3 py-1 text-base gap-2',\n dot: 'w-2.5 h-2.5'\n }\n} as const;\n\nexport type StatusLabelSize = keyof typeof statusLabelSizes;\n\n// =============================================================================\n// TYPOGRAPHY SIZES\n// Responsive text scaling\n// =============================================================================\nexport const textSizes = {\n xs: 'text-sm sm:text-xs',\n sm: 'text-base sm:text-sm',\n base: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl sm:text-lg',\n '2xl': 'text-2xl sm:text-xl',\n '3xl': 'text-3xl sm:text-2xl',\n '4xl': 'text-4xl sm:text-3xl',\n '5xl': 'text-5xl sm:text-4xl'\n} as const;\n\nexport type TextSize = keyof typeof textSizes;\n\n/**\n * Heading/title sizes - for headings with font weight\n */\nexport const headingSizes = {\n sm: 'text-base font-semibold',\n md: 'text-lg font-bold',\n lg: 'text-xl font-bold',\n xl: 'text-2xl font-bold',\n '2xl': 'text-3xl font-bold sm:text-2xl',\n '3xl': 'text-4xl font-bold sm:text-3xl',\n '4xl': 'text-5xl font-bold sm:text-4xl'\n} as const;\n\nexport type HeadingSize = keyof typeof headingSizes;\n\n/**\n * Card sizes - max-width for cards\n */\nexport const cardSizes = {\n xs: 'w-full sm:max-w-36',\n sm: 'w-full sm:max-w-64',\n md: 'w-full sm:max-w-96',\n lg: 'w-full sm:max-w-[28rem]',\n xl: 'w-full sm:max-w-[32rem]',\n '2xl': 'w-full sm:max-w-[36rem]',\n full: 'w-full'\n} as const;\n\nexport type CardSize = keyof typeof cardSizes;\n\n// =============================================================================\n// SPACING / GAP SIZES\n// Responsive gaps (larger on mobile for touch)\n// =============================================================================\nexport const gapSizes = {\n none: 'gap-0',\n xs: 'gap-2 sm:gap-1',\n sm: 'gap-3 sm:gap-2',\n md: 'gap-5 sm:gap-4',\n lg: 'gap-7 sm:gap-6',\n xl: 'gap-10 sm:gap-8',\n '2xl': 'gap-14 sm:gap-12',\n '3xl': 'gap-20 sm:gap-16'\n} as const;\n\nexport type GapSize = keyof typeof gapSizes;\n\n// =============================================================================\n// CONTAINER / LAYOUT SIZES\n// =============================================================================\nexport const containerWidth = {\n sm: 'max-w-screen-sm',\n md: 'max-w-screen-md',\n lg: 'max-w-screen-lg',\n xl: 'max-w-screen-xl',\n '2xl': 'max-w-screen-2xl',\n '3xl': 'max-w-[1920px]',\n full: 'max-w-full',\n screen: 'max-w-[100vw]',\n none: ''\n} as const;\n\nexport type ContainerWidthSize = keyof typeof containerWidth;\n\nexport const containerHeight = {\n xs: 'h-[10rem]', // 160px\n sm: 'h-[15rem]', // 240px\n md: 'h-[20rem]', // 320px\n lg: 'h-[25rem]', // 400px\n xl: 'h-[30rem]', // 480px\n '2xl': 'h-[35rem]', // 560px\n '3xl': 'h-[40rem]', // 640px\n full: 'h-full',\n screen: 'h-screen',\n none: ''\n} as const;\n\nexport type ContainerHeightSize = keyof typeof containerHeight;\n\n/**\n * Container min-width options\n */\nexport const containerMinWidths = {\n xs: 'min-w-[20rem]', // 320px\n sm: 'min-w-[24rem]', // 384px\n md: 'min-w-[28rem]', // 448px\n lg: 'min-w-[32rem]', // 512px\n xl: 'min-w-[36rem]', // 576px\n '2xl': 'min-w-[42rem]', // 672px\n '3xl': 'min-w-[48rem]', // 768px\n full: 'min-w-full',\n screen: 'min-w-screen',\n none: ''\n} as const;\n\nexport type ContainerMinWidthSize = keyof typeof containerMinWidths;\n\nexport const containerMaxWidths = {\n xs: 'max-w-[20rem]', // 320px\n sm: 'max-w-[24rem]', // 384px\n md: 'max-w-[28rem]', // 448px\n lg: 'max-w-[32rem]', // 512px\n xl: 'max-w-[36rem]', // 576px\n '2xl': 'max-w-[42rem]', // 672px\n '3xl': 'max-w-[48rem]', // 768px\n full: 'max-w-full',\n screen: 'max-w-screen',\n none: ''\n} as const;\n\nexport type ContainerMaxWidthSize = keyof typeof containerMaxWidths;\n\n/**\n * Container min-height options\n */\nexport const containerMinHeights = {\n xs: 'min-h-[10rem]', // 160px\n sm: 'min-h-[15rem]', // 240px\n md: 'min-h-[20rem]', // 320px\n lg: 'min-h-[25rem]', // 400px\n xl: 'min-h-[30rem]', // 480px\n '2xl': 'min-h-[35rem]', // 560px\n '3xl': 'min-h-[40rem]', // 640px\n full: 'min-h-full',\n screen: 'min-h-screen',\n none: ''\n} as const;\n\nexport type ContainerMinHeightSize = keyof typeof containerMinHeights;\n\nexport const containerMaxHeights = {\n xs: 'max-h-[10rem]', // 160px\n sm: 'max-h-[15rem]', // 240px\n md: 'max-h-[20rem]', // 320px\n lg: 'max-h-[25rem]', // 400px\n xl: 'max-h-[30rem]', // 480px\n '2xl': 'max-h-[35rem]', // 560px\n '3xl': 'max-h-[40rem]', // 640px\n full: 'max-h-full',\n screen: 'max-h-screen',\n none: ''\n} as const;\n\nexport type ContainerMaxHeightSize = keyof typeof containerMaxHeights;\n\nexport const stackWidths = {\n sm: 'w-screen-sm',\n md: 'w-screen-md',\n lg: 'w-screen-lg',\n xl: 'w-screen-xl',\n '2xl': 'w-screen-2xl',\n '3xl': 'w-[1920px]',\n '1/4': 'w-1/4',\n '1/2': 'w-1/2',\n '3/4': 'w-3/4',\n full: 'w-full',\n screen: 'w-[100vw]',\n auto: 'w-auto',\n none: ''\n} as const;\n\nexport type StackWidthSize = keyof typeof stackWidths;\n\nexport const stackHeights = {\n xs: 'h-[10rem]', // 160px\n sm: 'h-[15rem]', // 240px\n md: 'h-[20rem]', // 320px\n lg: 'h-[25rem]', // 400px\n xl: 'h-[30rem]', // 480px\n '2xl': 'h-[35rem]', // 560px\n '3xl': 'h-[40rem]', // 640px\n '1/4': 'h-1/4',\n '1/2': 'h-1/2',\n '3/4': 'h-3/4',\n full: 'h-full',\n screen: 'h-screen',\n auto: 'h-auto',\n none: ''\n} as const;\n\nexport type StackHeightSize = keyof typeof stackHeights;\n\nexport const stackMinWidths = {\n xs: 'min-w-[20rem]', // 320px\n sm: 'min-w-[24rem]', // 384px\n md: 'min-w-[28rem]', // 448px\n lg: 'min-w-[32rem]', // 512px\n xl: 'min-w-[36rem]', // 576px\n '2xl': 'min-w-[42rem]', // 672px\n '3xl': 'min-w-[48rem]', // 768px\n '1/4': 'min-w-1/4',\n '1/2': 'min-w-1/2',\n '3/4': 'min-w-3/4',\n full: 'min-w-full',\n screen: 'min-w-screen',\n none: ''\n} as const;\n\nexport type StackMinWidthSize = keyof typeof stackMinWidths;\n\nexport const stackMaxWidths = {\n xs: 'max-w-[20rem]', // 320px\n sm: 'max-w-[24rem]', // 384px\n md: 'max-w-[28rem]', // 448px\n lg: 'max-w-[32rem]', // 512px\n xl: 'max-w-[36rem]', // 576px\n '2xl': 'max-w-[42rem]', // 672px\n '3xl': 'max-w-[48rem]', // 768px\n '1/4': 'max-w-1/4',\n '1/2': 'max-w-1/2',\n '3/4': 'max-w-3/4',\n full: 'max-w-full',\n screen: 'max-w-screen',\n none: ''\n} as const;\n\nexport type StackMaxWidthSize = keyof typeof stackMaxWidths;\n\nexport const stackMinHeights = {\n xs: 'min-h-[10rem]', // 160px\n sm: 'min-h-[15rem]', // 240px\n md: 'min-h-[20rem]', // 320px\n lg: 'min-h-[25rem]', // 400px\n xl: 'min-h-[30rem]', // 480px\n '2xl': 'min-h-[35rem]', // 560px\n '3xl': 'min-h-[40rem]', // 640px\n '1/4': 'min-h-1/4',\n '1/2': 'min-h-1/2',\n '3/4': 'min-h-3/4',\n full: 'min-h-full',\n screen: 'min-h-screen',\n none: ''\n} as const;\n\nexport type StackMinHeightSize = keyof typeof stackMinHeights;\n\nexport const stackMaxHeights = {\n xs: 'max-h-[10rem]', // 160px\n sm: 'max-h-[15rem]', // 240px\n md: 'max-h-[20rem]', // 320px\n lg: 'max-h-[25rem]', // 400px\n xl: 'max-h-[30rem]', // 480px\n '2xl': 'max-h-[35rem]', // 560px\n '3xl': 'max-h-[40rem]', // 640px\n '1/4': 'max-h-1/4',\n '1/2': 'max-h-1/2',\n '3/4': 'max-h-3/4',\n full: 'max-h-full',\n screen: 'max-h-screen',\n none: ''\n} as const;\n\n// =============================================================================\n// PADDING SIZES FOR SECTIONS AND CARDS\n// =============================================================================\n\nexport const sectionPadding = {\n none: 'py-0',\n xs: 'py-6 sm:py-4',\n sm: 'py-10 sm:py-8',\n md: 'py-16 sm:py-12',\n lg: 'py-20 sm:py-16',\n xl: 'py-28 sm:py-24',\n '2xl': 'py-36 sm:py-32'\n} as const;\n\nexport type SectionPaddingSize = keyof typeof sectionPadding;\n\nexport const cardPadding = {\n none: 'p-0',\n xs: 'p-3 sm:p-2',\n sm: 'p-5 sm:p-4',\n md: 'p-7 sm:p-6',\n lg: 'p-9 sm:p-8',\n xl: 'p-12 sm:p-10',\n '2xl': 'p-14 sm:p-12'\n} as const;\n\nexport type CardPaddingSize = keyof typeof cardPadding;\n\nexport const cardMargin = {\n none: 'm-0',\n xs: 'm-3 sm:m-2',\n sm: 'm-5 sm:m-4',\n md: 'm-7 sm:m-6',\n lg: 'm-9 sm:m-8',\n xl: 'm-12 sm:m-10',\n '2xl': 'm-14 sm:m-12'\n} as const;\n\nexport type CardMarginSize = keyof typeof cardMargin;\n\n// =============================================================================\n// MARGIN SIZES (Axis-specific)\n// =============================================================================\n\nexport const marginX = {\n none: '',\n auto: 'mx-auto',\n xs: 'mx-3 sm:mx-2',\n sm: 'mx-5 sm:mx-4',\n md: 'mx-7 sm:mx-6',\n lg: 'mx-9 sm:mx-8',\n xl: 'mx-12 sm:mx-10',\n '2xl': 'mx-14 sm:mx-12'\n} as const;\n\nexport type MarginXSize = keyof typeof marginX;\n\nexport const marginY = {\n none: '',\n auto: 'my-auto',\n xs: 'my-3 sm:my-2',\n sm: 'my-5 sm:my-4',\n md: 'my-7 sm:my-6',\n lg: 'my-9 sm:my-8',\n xl: 'my-12 sm:my-10',\n '2xl': 'my-14 sm:my-12'\n} as const;\n\nexport type MarginYSize = keyof typeof marginY;\n\n// =============================================================================\n// OVERLAY SIZES (Modals, Drawers)\n// Full width on mobile, constrained on desktop\n// =============================================================================\nexport const overlaySizes = {\n xs: 'w-full sm:w-64',\n sm: 'w-full sm:w-80',\n md: 'w-full sm:w-96',\n lg: 'w-full sm:w-[28rem]',\n xl: 'w-full sm:w-[32rem]',\n '2xl': 'w-full sm:w-[40rem]',\n '3xl': 'w-full sm:w-[48rem]',\n full: 'w-full max-w-2xl'\n} as const;\n\nexport type OverlaySize = keyof typeof overlaySizes;\n\n// =============================================================================\n// BORDER RADIUS\n// =============================================================================\nexport const borderRadius = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n '3xl': 'rounded-3xl',\n full: 'rounded-full'\n} as const;\n\nexport type BorderRadiusSize = keyof typeof borderRadius;\n\n// =============================================================================\n// FORM INPUT TOKENS\n// Centralized styling for form inputs (Input, Select, Textarea)\n// =============================================================================\n\n/** Validation states for form inputs */\nexport type ValidationState = 'default' | 'error' | 'success' | 'warning';\n\n/** Border classes for each validation state */\nexport const validationBorderClasses: Record<ValidationState, string> = {\n default: 'border-input focus:border-ring',\n error: 'border-destructive focus:border-destructive',\n success: 'border-success focus:border-success',\n warning: 'border-warning focus:border-warning'\n};\n\n/** Ring/focus classes for each validation state */\nexport const validationRingClasses: Record<ValidationState, string> = {\n default: 'focus:ring-ring/20',\n error: 'focus:ring-destructive/20',\n success: 'focus:ring-success/20',\n warning: 'focus:ring-warning/20'\n};\n\n/** Text color classes for validation messages */\nexport const validationTextClasses: Record<ValidationState, string> = {\n default: 'text-muted-foreground',\n error: 'text-destructive',\n success: 'text-success',\n warning: 'text-warning'\n};\n\n/** Base input classes shared by Input, Select, Textarea */\nexport const inputBaseClasses =\n 'flex rounded-lg border bg-background shadow-sm transition-all duration-200 placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-muted/50';\n\n/** Get complete input classes for a given size and validation state */\nexport function getInputClasses(size: InteractiveSize, validationState: ValidationState): string {\n const sizeConfig = interactiveSizes[size];\n return `${inputBaseClasses} ${sizeConfig.height} px-4 sm:px-3 overflow-visible ${sizeConfig.text} ${validationBorderClasses[validationState]} ${validationRingClasses[validationState]}`;\n}\n\n/** Form spacing options */\nexport const formSpacing = {\n none: 'gap-0',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8'\n} as const;\n\nexport type FormSpacing = keyof typeof formSpacing;\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Get icon size in pixels for SVG components (like Tabler icons)\n * Returns desktop size by default, or you can specify 'mobile'\n */\nexport function getIconPixels(size: Size | number, variant: 'mobile' | 'desktop' = 'desktop'): number {\n if (typeof size === 'number') return size;\n return visualSizes?.[size]?.pixels?.[variant] ?? 0;\n}\n\n/**\n * Get Tailwind classes for a visual element size\n */\nexport function getVisualClasses(size: Size): string {\n return visualSizes[size].classes;\n}\n\n// =============================================================================\n// SIZE REFERENCE TABLE\n// =============================================================================\n/**\n * Visual Size Reference (mobile / desktop):\n *\n * | Size | Visual | Avatar | Interactive Height | Text |\n * |------|---------|----------|-------------------|---------------|\n * | xs | 14/12px | 32/24px | 32/24px | text-sm/xs |\n * | sm | 20/16px | 40/32px | 40/32px | text-base/sm |\n * | md | 24/20px | 48/40px | 48/40px | text-base/sm |\n * | lg | 28/24px | 56/48px | 56/48px | text-lg/base |\n * | xl | 32/28px | 80/64px | 64/56px | text-xl/lg |\n * | 2xl | 36/32px | 96/80px | - | text-2xl/xl |\n * | 3xl | 48/40px | 112/96px | - | text-3xl/2xl |\n */\n","import * as TablerIcons from '@tabler/icons-react';\nimport * as React from 'react';\nimport {\n StatusColorProp,\n colors as themeColors,\n colorClassPrefixes,\n ThemeColor,\n ThemeColorClass\n} from '../../../theme/tokens';\n\nimport { Size, getIconPixels } from '../../../theme/size-tokens';\n\nexport type IconSize = Size;\n\nexport interface IconProps {\n /** Dynamic icon name from Tabler Icons (e.g. \"home\", \"user\", \"arrow-right\") */\n name: string;\n /** Icon size using unified size system\n * @default 'md'\n */\n size?: IconSize;\n /** Color variant or 'currentColor' to inherit text color\n * @default 'currentColor'\n */\n color?: StatusColorProp | 'currentColor';\n /** Opacity level (0-1)\n * @default 1\n */\n opacity?: number;\n /** SVG stroke width\n * @default 2\n */\n strokeWidth?: number;\n /** Additional CSS classes for custom styling */\n className?: string;\n /** Optional click handler */\n onClick?: () => void;\n}\n\nconst STATUS_COLOR_MAP: Record<StatusColorProp, ThemeColor | 'currentColor'> = {\n default: 'foreground',\n primary: 'primary',\n success: 'success',\n warning: 'warning',\n error: 'destructive'\n};\n\nconst hasThemeColor = (token: string): token is ThemeColor => Object.prototype.hasOwnProperty.call(themeColors, token);\n\nconst isThemeColor = (value: unknown): value is ThemeColor => typeof value === 'string' && hasThemeColor(value);\n\nconst isThemeColorClass = (value: unknown): value is ThemeColorClass => {\n if (typeof value !== 'string') return false;\n for (const prefix of colorClassPrefixes) {\n if (value.startsWith(`${prefix}-`)) {\n const token = value.slice(prefix.length + 1);\n return hasThemeColor(token);\n }\n }\n return false;\n};\n\nconst isStatusColor = (value: unknown): value is StatusColorProp =>\n typeof value === 'string' && value in STATUS_COLOR_MAP;\n\nconst warnInvalidIconName = (value: unknown) => {\n if (process.env.NODE_ENV === 'production') return;\n // eslint-disable-next-line no-console\n console.error('[Icon] Expected `name` to be a non-empty string. Received:', value);\n};\n\n/**\n * Dynamic Icon component — resolves any Tabler icon by name.\n * Uses semantic size variants and supports all icons without manual mapping.\n */\nexport const Icon: React.FC<IconProps> = ({\n name,\n size = 'md',\n color = 'currentColor',\n opacity = 1,\n strokeWidth = 2,\n className = '',\n onClick\n}) => {\n if (typeof name !== 'string') {\n warnInvalidIconName(name);\n return null;\n }\n\n const normalizedName = name.trim();\n\n if (!normalizedName) {\n warnInvalidIconName(name);\n return null;\n }\n\n // Convert kebab or lowercase to PascalCase (e.g. \"arrow-right\" → \"IconArrowRight\")\n const pascalName = normalizedName\n .split(/[-_]/)\n .filter((s) => s)\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join('');\n\n const componentName = pascalName.startsWith('Icon') ? pascalName : 'Icon' + pascalName;\n\n // Use ComponentType to support both function and forwardRef components\n // Tabler icon components accept standard SVG props plus a few extras\n type TablerIconComponent = React.ComponentType<\n React.SVGProps<SVGSVGElement> & { size?: number | string; strokeWidth?: number }\n >;\n\n const IconComponent = (TablerIcons as unknown as Record<string, TablerIconComponent>)[componentName];\n\n if (!IconComponent) return null;\n\n // Use desktop size for pixel-based SVG rendering\n const pixelSize = getIconPixels(size, 'desktop');\n\n let resolvedColor: string = color;\n let resolvedClassName = className;\n\n if (isStatusColor(color)) {\n const mapped = STATUS_COLOR_MAP[color];\n resolvedColor = mapped === 'currentColor' ? 'currentColor' : themeColors[mapped];\n } else if (isThemeColor(color)) {\n resolvedColor = themeColors[color];\n } else if (isThemeColorClass(color)) {\n resolvedClassName = [className, color].filter(Boolean).join(' ');\n resolvedColor = 'currentColor';\n }\n\n return (\n <IconComponent\n size={pixelSize}\n color={resolvedColor}\n strokeWidth={strokeWidth}\n className={resolvedClassName}\n opacity={opacity}\n onClick={onClick}\n aria-hidden=\"true\"\n />\n );\n};\n\nIcon.displayName = 'Icon';\n\n// Provide a default export for backwards compatibility with existing imports\nexport default Icon;\n","import { createContext, useContext, useState, useEffect, ReactNode } from 'react';\n\n/**\n * Base user type - extend this in your app\n */\nexport interface AuthUser {\n id: string;\n [key: string]: unknown;\n}\n\n/**\n * Authentication state\n */\nexport interface AuthState {\n user: AuthUser | null;\n isLoading: boolean;\n isAuthenticated: boolean;\n error: Error | null;\n}\n\n/**\n * Authentication actions\n */\nexport interface AuthActions {\n login: (credentials: unknown) => Promise<void>;\n logout: () => Promise<void>;\n refresh: () => Promise<void>;\n clearError: () => void;\n updateUser: (updates: Partial<AuthUser>) => void;\n}\n\n/**\n * Complete auth context type\n */\nexport type AuthContextType = AuthState & AuthActions;\n\n/**\n * Auth provider configuration\n */\nexport interface AuthProviderConfig {\n /** Custom login handler - implement your auth logic */\n onLogin: (credentials: unknown) => Promise<AuthUser>;\n /** Custom logout handler */\n onLogout?: () => Promise<void>;\n /** Custom refresh handler - restore user from storage/API */\n onRefresh?: () => Promise<AuthUser | null>;\n /** Storage key for persisting user */\n storageKey?: string;\n /** Use sessionStorage instead of localStorage */\n useSessionStorage?: boolean;\n /** Auto-refresh on mount */\n autoRefresh?: boolean;\n /** External auth URL (e.g., auth server on different port) */\n authUrl?: string;\n /** Enable credentials for cross-origin requests */\n withCredentials?: boolean;\n}\n\n/**\n * Auth provider props\n */\nexport interface AuthProviderProps {\n /** Authentication configuration object containing handlers and options */\n config: AuthProviderConfig;\n /** React children to be wrapped with authentication context */\n children: ReactNode;\n}\n\nconst AuthContext = createContext<AuthContextType | undefined>(undefined);\n\n/**\n * AuthProvider - Flexible authentication context provider\n *\n * @example\n * ```tsx\n * <AuthProvider\n * config={{\n * onLogin: async (credentials) => {\n * const res = await fetch('/api/login', {\n * method: 'POST',\n * body: JSON.stringify(credentials)\n * });\n * return await res.json();\n * },\n * onLogout: async () => {\n * await fetch('/api/logout', { method: 'POST' });\n * }\n * }}\n * >\n * <App />\n * </AuthProvider>\n * ```\n */\nexport default function AuthProvider({ config, children }: Readonly<AuthProviderProps>) {\n const {\n onLogin,\n onLogout,\n onRefresh,\n storageKey = 'auth_user',\n useSessionStorage = false,\n autoRefresh = true\n } = config;\n\n const [user, setUser] = useState<AuthUser | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const storage = useSessionStorage ? sessionStorage : localStorage;\n\n // Load user from storage on mount\n useEffect(() => {\n const loadUser = async () => {\n try {\n if (onRefresh && autoRefresh) {\n const refreshedUser = await onRefresh();\n setUser(refreshedUser);\n } else {\n const storedUser = storage.getItem(storageKey);\n if (storedUser) {\n setUser(JSON.parse(storedUser));\n }\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to load user'));\n } finally {\n setIsLoading(false);\n }\n };\n\n loadUser();\n }, [storageKey, storage, onRefresh, autoRefresh]);\n\n // Persist user to storage when it changes\n useEffect(() => {\n if (user) {\n storage.setItem(storageKey, JSON.stringify(user));\n } else {\n storage.removeItem(storageKey);\n }\n }, [user, storageKey, storage]);\n\n const login = async (credentials: unknown) => {\n setIsLoading(true);\n setError(null);\n try {\n const loggedInUser = await onLogin(credentials);\n setUser(loggedInUser);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Login failed');\n setError(error);\n throw error;\n } finally {\n setIsLoading(false);\n }\n };\n\n const logout = async () => {\n setIsLoading(true);\n setError(null);\n try {\n if (onLogout) {\n await onLogout();\n }\n setUser(null);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Logout failed');\n setError(error);\n throw error;\n } finally {\n setIsLoading(false);\n }\n };\n\n const refresh = async () => {\n if (!onRefresh) return;\n\n setIsLoading(true);\n setError(null);\n try {\n const refreshedUser = await onRefresh();\n setUser(refreshedUser);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Refresh failed');\n setError(error);\n throw error;\n } finally {\n setIsLoading(false);\n }\n };\n\n const clearError = () => setError(null);\n\n const updateUser = (updates: Partial<AuthUser>) => {\n if (!user) return;\n setUser({ ...user, ...updates });\n };\n\n const value: AuthContextType = {\n user,\n isLoading,\n isAuthenticated: !!user,\n error,\n login,\n logout,\n refresh,\n clearError,\n updateUser\n };\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n\n/**\n * useAuth hook - Access authentication context\n *\n * @example\n * ```tsx\n * function ProtectedPage() {\n * const { user, isAuthenticated, logout } = useAuth();\n *\n * if (!isAuthenticated) {\n * return <Navigate to=\"/login\" />;\n * }\n *\n * return <div>Welcome, {user.name}</div>;\n * }\n * ```\n */\nexport function useAuth(): AuthContextType {\n const context = useContext(AuthContext);\n if (!context) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n return context;\n}\n","/**\n * Auth utilities for cross-origin authentication\n */\n\n/**\n * Fetch with credentials for cross-origin requests\n */\nexport async function authFetch(url: string, options: RequestInit = {}, withCredentials = true): Promise<Response> {\n const config: RequestInit = {\n ...options,\n credentials: withCredentials ? 'include' : 'same-origin',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n };\n\n return fetch(url, config);\n}\n\n/**\n * Check if user is authenticated via external auth server\n */\nexport async function checkAuthStatus(authUrl: string): Promise<boolean> {\n try {\n const response = await authFetch(`${authUrl}/api/auth/status`, {\n method: 'GET'\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Get current user from external auth server\n */\nexport async function getCurrentUser(authUrl: string): Promise<unknown | null> {\n try {\n const response = await authFetch(`${authUrl}/api/auth/me`, {\n method: 'GET'\n });\n\n if (response.ok) {\n return await response.json();\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Login via external auth server\n */\nexport async function loginExternal(authUrl: string, credentials: unknown): Promise<unknown> {\n const response = await authFetch(`${authUrl}/api/auth/login`, {\n method: 'POST',\n body: JSON.stringify(credentials)\n });\n\n if (!response.ok) {\n throw new Error('Login failed');\n }\n\n return await response.json();\n}\n\n/**\n * Logout via external auth server\n */\nexport async function logoutExternal(authUrl: string): Promise<void> {\n await authFetch(`${authUrl}/api/auth/logout`, {\n method: 'POST'\n });\n}\n\n/**\n * Redirect to external login page\n */\nexport function redirectToLogin(authUrl: string, returnUrl?: string): void {\n const url = new URL(`${authUrl}/login`);\n if (returnUrl) {\n url.searchParams.set('returnUrl', returnUrl);\n }\n window.location.href = url.toString();\n}\n\n/**\n * Open external login in popup window\n */\nexport function openLoginPopup(authUrl: string, onSuccess?: () => void): Window | null {\n const width = 500;\n const height = 600;\n const left = window.screenX + (window.outerWidth - width) / 2;\n const top = window.screenY + (window.outerHeight - height) / 2;\n\n const popup = window.open(`${authUrl}/login`, 'Login', `width=${width},height=${height},left=${left},top=${top}`);\n\n // Listen for message from popup\n if (popup && onSuccess) {\n const messageHandler = (event: MessageEvent) => {\n if (event.origin === new URL(authUrl).origin && event.data === 'login-success') {\n onSuccess();\n window.removeEventListener('message', messageHandler);\n }\n };\n window.addEventListener('message', messageHandler);\n }\n\n return popup;\n}\n","/**\n * Hydden logo component.\n *\n * Renders the Hydden brand logo image.\n *\n * @returns The Hydden logo image element\n *\n * @example\n * ```tsx\n * <HyddenLogo />\n * ```\n */\nexport function HyddenLogo() {\n return <img src=\"/logo.png\" alt=\"Hydden\" className=\"h-10 w-auto\" loading=\"lazy\" />;\n}\n","/**\n * Google logo SVG component.\n *\n * Renders the official Google \"G\" logo with correct brand colors.\n *\n * @returns The Google logo SVG element\n *\n * @example\n * ```tsx\n * <GoogleLogo />\n * ```\n */\nexport function GoogleLogo() {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Google logo\"\n role=\"img\"\n >\n <path\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n fill=\"#EA4335\"\n />\n </svg>\n );\n}\n","/**\n * Microsoft logo SVG component.\n *\n * Renders the official Microsoft four-square logo with correct brand colors.\n *\n * @returns The Microsoft logo SVG element\n *\n * @example\n * ```tsx\n * <MicrosoftLogo />\n * ```\n */\nexport function MicrosoftLogo() {\n return (\n <svg\n width=\"21\"\n height=\"21\"\n viewBox=\"0 0 21 21\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Microsoft logo\"\n role=\"img\"\n >\n <rect width=\"10\" height=\"10\" fill=\"#F25022\" />\n <rect x=\"11\" width=\"10\" height=\"10\" fill=\"#7FBA00\" />\n <rect y=\"11\" width=\"10\" height=\"10\" fill=\"#00A4EF\" />\n <rect x=\"11\" y=\"11\" width=\"10\" height=\"10\" fill=\"#FFB900\" />\n </svg>\n );\n}\n","import React from 'react';\nimport {\n sectionPadding,\n type SectionPaddingSize,\n marginX as marginXTokens,\n type MarginXSize\n} from '../../../theme/size-tokens';\n\nexport type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\n\nexport type ContainerProps = {\n /** Container content */\n children: React.ReactNode;\n /** Additional CSS classes applied to the container */\n className?: string;\n /** Maximum content width - controls responsive centering breakpoint */\n size?: ContainerSize;\n /** Horizontal page margins (gutters) - applied to inner container */\n marginX?: MarginXSize;\n /** Vertical page padding */\n paddingY?: 'none' | SectionPaddingSize;\n /** HTML id attribute for the container element */\n id?: string;\n /** Horizontal alignment of the container within its parent */\n align?: 'start' | 'center' | 'end';\n};\n\nconst containerSizes: Record<ContainerSize, string> = {\n sm: 'max-w-screen-sm',\n md: 'max-w-screen-md',\n lg: 'max-w-screen-lg',\n xl: 'max-w-screen-xl',\n '2xl': 'max-w-screen-2xl',\n full: 'max-w-full'\n};\n\nconst alignClasses = {\n start: 'mr-auto',\n center: 'mx-auto',\n end: 'ml-auto'\n};\n\n/**\n * Page-level layout wrapper for content centering and spacing\n *\n * Container is the outermost layout component that wraps page content.\n * Use it to control max-width, horizontal margins (gutters), and vertical padding.\n *\n * For arranging content inside Container, use Stack, Grid, or other layout primitives.\n */\nfunction Container({\n children,\n className = '',\n size = 'lg',\n marginX = 'none',\n paddingY = 'none',\n align = 'center',\n id\n}: Readonly<ContainerProps>) {\n const sizeClass = containerSizes[size];\n const horizontalSpacingClass = marginX !== 'none' ? marginXTokens[marginX] : '';\n const paddingYClass = paddingY === 'none' ? '' : sectionPadding[paddingY];\n\n // Outer container controls max-width and horizontal alignment via the `align` prop\n const outerClasses = ['w-auto', sizeClass, alignClasses[align]].filter(Boolean).join(' ');\n\n // Inner wrapper applies horizontal spacing (via marginX) and vertical spacing (via paddingY)\n const innerClasses = [horizontalSpacingClass, paddingYClass, className].filter(Boolean).join(' ');\n\n return (\n <div className={outerClasses} id={id}>\n <div className={innerClasses}>{children}</div>\n </div>\n );\n}\n\nContainer.displayName = 'Container';\n\nexport default Container;\n","import React from 'react';\n\nimport { gapSizes } from '../../../theme/size-tokens';\n\nexport type GridProps = {\n /** Grid items to be laid out in responsive columns */\n children: React.ReactNode;\n /** Additional CSS classes applied to the grid container */\n className?: string;\n /** Size of grid items (controls minimum width before wrapping) */\n itemSize?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Maximum number of columns (optional constraint) */\n maxCols?: number;\n /** Gap between grid items - uses unified size system */\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Responsive column configuration for different breakpoints */\n responsive?: {\n sm?: number; // min-width: 640px\n md?: number; // min-width: 768px\n lg?: number; // min-width: 1024px\n xl?: number; // min-width: 1280px\n };\n /** Align items vertically */\n alignItems?: 'start' | 'center' | 'end' | 'stretch';\n /** Justify items horizontally */\n justifyItems?: 'start' | 'center' | 'end' | 'stretch';\n};\n\n/**\n * Grid - Responsive grid layout component\n *\n * Features:\n * - Auto-responsive grid using CSS Grid auto-fit/auto-fill\n * - Configurable minimum item width (items wrap when too narrow)\n * - Optional responsive column overrides for specific breakpoints\n * - Flexible gap spacing\n * - Alignment controls\n *\n * @example\n * ```tsx\n * // Auto-responsive grid with md (250px) item size\n * <Grid itemSize=\"md\" gap=\"md\">\n * <Card>Item 1</Card>\n * <Card>Item 2</Card>\n * <Card>Item 3</Card>\n * </Grid>\n *\n * // Responsive grid with breakpoint overrides\n * <Grid\n * itemSize=\"sm\"\n * responsive={{ sm: 1, md: 2, lg: 3, xl: 4 }}\n * gap=\"lg\"\n * >\n * <Card>Item 1</Card>\n * <Card>Item 2</Card>\n * </Grid>\n *\n * // Fixed max columns with auto-fit\n * <Grid itemSize=\"xs\" maxCols={4} gap=\"md\">\n * <Card>Item 1</Card>\n * <Card>Item 2</Card>\n * </Grid>\n * ```\n */\nfunction Grid({\n children,\n className = '',\n itemSize = 'md',\n maxCols,\n gap = 'md',\n responsive,\n alignItems = 'stretch',\n justifyItems = 'stretch'\n}: Readonly<GridProps>) {\n const itemSizeValues = {\n xs: '150px',\n sm: '200px',\n md: '250px',\n lg: '300px',\n xl: '350px',\n '2xl': '400px'\n };\n\n // Use unified gap sizes\n const gapClass = gapSizes[gap];\n\n const alignItemsClasses = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch'\n };\n\n const justifyItemsClasses = {\n start: 'justify-items-start',\n center: 'justify-items-center',\n end: 'justify-items-end',\n stretch: 'justify-items-stretch'\n };\n\n // Build responsive column classes if provided\n const responsiveClasses = responsive\n ? Object.entries(responsive)\n .map(([breakpoint, cols]) => {\n const breakpointPrefix =\n breakpoint === 'sm' ? 'sm:' : breakpoint === 'md' ? 'md:' : breakpoint === 'lg' ? 'lg:' : 'xl:';\n return `${breakpointPrefix}grid-cols-${cols}`;\n })\n .join(' ')\n : '';\n\n // Get minimum width value from variant\n const minWidth = itemSizeValues[itemSize];\n\n // Build grid template columns style\n // If responsive classes are provided, use them via Tailwind\n // Otherwise, use CSS custom property for auto-fit/auto-fill\n const gridStyle = !responsive\n ? {\n gridTemplateColumns: maxCols\n ? `repeat(auto-fit, minmax(min(${minWidth}, 100%), 1fr))`\n : `repeat(auto-fill, minmax(min(${minWidth}, 100%), 1fr))`\n }\n : undefined;\n\n return (\n <div\n className={`\n grid\n ${!responsive ? '' : responsiveClasses}\n ${gapClass}\n ${alignItemsClasses[alignItems]}\n ${justifyItemsClasses[justifyItems]}\n ${className}\n `.trim()}\n style={gridStyle}\n >\n {children}\n </div>\n );\n}\n\nGrid.displayName = 'Grid';\n\nexport default Grid;\n","import React from 'react';\n\nexport type PageProps = {\n /** Page content */\n children: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n};\n\n/**\n * Page - Semantic wrapper for page-level content\n * Provides consistent structure with main element and background styling\n */\nfunction Page({ children, className = '' }: Readonly<PageProps>) {\n return <main className={`min-h-screen bg-background ${className}`}>{children}</main>;\n}\n\nPage.displayName = 'Page';\n\nexport default Page;\n","import { ReactNode, createElement } from 'react';\n\nexport type HeadingProps = {\n /** Content to be rendered within the heading element */\n children: ReactNode;\n /** Semantic heading level (h1-h6)\n * @default 1\n */\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * Text alignment\n * @default 'left'\n */\n align?: 'left' | 'center' | 'right' | 'justify';\n /** Additional CSS classes for custom styling */\n className?: string;\n /** Whether to include default bottom margin spacing\n * @default false\n */\n hasMargin?: boolean;\n};\n\n/**\n * Heading - Consistent typography scale (H1-H6)\n * Includes sensible default margins for spacing and responsive font sizes\n */\nfunction Heading({ children, level = 1, align, className = '', hasMargin = false }: Readonly<HeadingProps>) {\n const levelClasses = {\n 1: 'text-3xl sm:text-4xl lg:text-5xl font-bold',\n 2: 'text-2xl sm:text-3xl lg:text-4xl font-bold',\n 3: 'text-xl sm:text-2xl lg:text-3xl font-semibold',\n 4: 'text-lg sm:text-xl font-semibold',\n 5: 'text-base sm:text-lg font-medium',\n 6: 'text-sm sm:text-base font-medium'\n };\n\n const marginClasses = {\n 1: 'mb-3 sm:mb-4',\n 2: 'mb-2 sm:mb-3',\n 3: 'mb-2 sm:mb-3',\n 4: 'mb-1 sm:mb-2',\n 5: 'mb-1 sm:mb-2',\n 6: 'mb-1 sm:mb-2'\n };\n\n const alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify'\n };\n\n const margin = hasMargin ? marginClasses[level] : '';\n const alignment = align ? alignClasses[align] : '';\n\n return createElement(\n `h${level}`,\n {\n className: `text-foreground ${levelClasses[level]} ${margin} ${alignment} ${className}`\n },\n children\n );\n}\n\nHeading.displayName = 'Heading';\n\nexport default Heading;\n","import { ReactNode, createElement } from 'react';\nimport { textSizes, type TextSize } from '../../../theme/size-tokens';\n\nexport type TextProps = {\n /** Content to be rendered within the text element */\n children: ReactNode;\n\n /**\n * Semantic HTML element to render\n * @default 'p'\n */\n as?:\n | 'p'\n | 'span'\n | 'label'\n | 'strong'\n | 'em'\n | 'small'\n | 'mark'\n | 'del'\n | 'ins'\n | 'sub'\n | 'sup'\n | 'abbr'\n | 'cite'\n | 'q';\n\n /**\n * Color variant\n * @default 'body'\n */\n variant?: 'body' | 'muted' | 'small' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'inherit';\n\n /**\n * Text size - uses unified size system\n * @default based on variant\n */\n size?: TextSize;\n\n /**\n * Font weight\n * @default 'semibold'\n */\n weight?: 'light' | 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold';\n\n /**\n * Text alignment\n * @default 'left'\n */\n align?: 'left' | 'center' | 'right' | 'justify';\n\n /**\n * Line height / leading\n * @default 'normal'\n */\n leading?: 'none' | 'tight' | 'snug' | 'normal' | 'relaxed' | 'loose';\n\n /**\n * Letter spacing / tracking\n * @default 'normal'\n */\n tracking?: 'tighter' | 'tight' | 'normal' | 'wide' | 'wider' | 'widest';\n\n /**\n * Text transform\n */\n transform?: 'uppercase' | 'lowercase' | 'capitalize' | 'normal';\n\n /**\n * Text decoration\n */\n decoration?: 'underline' | 'line-through' | 'none';\n\n /**\n * Font style\n */\n italic?: boolean;\n\n /**\n * Truncate text with ellipsis\n */\n truncate?: boolean;\n\n /**\n * Limit text to specified number of lines (uses line-clamp)\n */\n lineClamp?: 1 | 2 | 3 | 4 | 5 | 6;\n\n /**\n * Text wrapping behavior\n */\n wrap?: 'wrap' | 'nowrap' | 'balance' | 'pretty';\n\n /**\n * Word break behavior\n */\n wordBreak?: 'normal' | 'words' | 'all' | 'keep';\n\n /**\n * Text opacity (0-100)\n */\n opacity?: 0 | 25 | 50 | 75 | 100;\n\n /**\n * Add bottom margin\n * @default false\n */\n hasMargin?: boolean;\n\n /**\n * Make text selectable or not\n */\n selectable?: boolean;\n\n /**\n * Additional CSS classes (use as last resort)\n */\n className?: string;\n\n /**\n * ID for the element\n */\n id?: string;\n\n /**\n * HTML for attribute (useful when as=\"label\")\n */\n htmlFor?: string;\n};\n\n/**\n * Text - Versatile typography component for body text\n * Handles all common text styling needs through props\n */\nfunction Text({\n children,\n as = 'p',\n variant = 'body',\n size,\n weight = 'semibold',\n align,\n leading,\n tracking,\n transform,\n decoration,\n italic = false,\n truncate = false,\n lineClamp,\n wrap,\n wordBreak,\n opacity,\n hasMargin = false,\n selectable,\n className = '',\n id,\n htmlFor\n}: Readonly<TextProps>) {\n const variantClasses = {\n body: 'text-foreground',\n muted: 'text-muted-foreground',\n small: 'text-muted-foreground',\n primary: 'text-primary',\n secondary: 'text-secondary-foreground',\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-destructive',\n inherit: 'text-inherit'\n };\n\n const sizeClasses = textSizes;\n\n const weightClasses = {\n light: 'font-light',\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n extrabold: 'font-extrabold'\n };\n\n const alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify'\n };\n\n const leadingClasses = {\n none: 'leading-none',\n tight: 'leading-tight',\n snug: 'leading-snug',\n normal: 'leading-normal',\n relaxed: 'leading-relaxed',\n loose: 'leading-loose'\n };\n\n const trackingClasses = {\n tighter: 'tracking-tighter',\n tight: 'tracking-tight',\n normal: 'tracking-normal',\n wide: 'tracking-wide',\n wider: 'tracking-wider',\n widest: 'tracking-widest'\n };\n\n const transformClasses = {\n uppercase: 'uppercase',\n lowercase: 'lowercase',\n capitalize: 'capitalize',\n normal: 'normal-case'\n };\n\n const decorationClasses = {\n underline: 'underline',\n 'line-through': 'line-through',\n none: 'no-underline'\n };\n\n const wrapClasses = {\n wrap: 'text-wrap',\n nowrap: 'text-nowrap',\n balance: 'text-balance',\n pretty: 'text-pretty'\n };\n\n const wordBreakClasses = {\n normal: 'break-normal',\n words: 'break-words',\n all: 'break-all',\n keep: 'break-keep'\n };\n\n const opacityClasses = {\n 0: 'opacity-0',\n 25: 'opacity-25',\n 50: 'opacity-50',\n 75: 'opacity-75',\n 100: 'opacity-100'\n };\n\n const lineClampClasses = {\n 1: 'line-clamp-1',\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n 5: 'line-clamp-5',\n 6: 'line-clamp-6'\n };\n\n const defaultSizes = {\n body: 'lg',\n muted: 'base',\n small: 'sm',\n primary: 'base',\n secondary: 'base',\n success: 'base',\n warning: 'base',\n error: 'base',\n inherit: 'base'\n } as const;\n\n const finalSize = size || defaultSizes[variant];\n const margin = hasMargin ? 'mb-3 sm:mb-4' : '';\n\n const classes = [\n variantClasses[variant],\n sizeClasses[finalSize],\n weightClasses[weight],\n margin,\n align && alignClasses[align],\n leading && leadingClasses[leading],\n tracking && trackingClasses[tracking],\n transform && transformClasses[transform],\n decoration && decorationClasses[decoration],\n italic && 'italic',\n truncate && 'truncate',\n lineClamp && lineClampClasses[lineClamp],\n wrap && wrapClasses[wrap],\n wordBreak && wordBreakClasses[wordBreak],\n opacity !== undefined && opacityClasses[opacity],\n selectable === true && 'select-all',\n selectable === false && 'select-none',\n className\n ]\n .filter(Boolean)\n .join(' ');\n\n const elementProps: Record<string, unknown> = {\n className: classes,\n ...(id && { id }),\n ...(htmlFor && as === 'label' && { htmlFor })\n };\n\n return createElement(as, elementProps, children);\n}\n\nText.displayName = 'Text';\n\nexport default Text;\n","import React from 'react';\n\nimport Heading from '../../typography/heading/heading';\nimport Text from '../../typography/text/text';\n\nexport type PageHeaderProps = {\n /** Page title text */\n title: string;\n /** Optional description text displayed below the title */\n description?: string;\n /** Optional badge or label component displayed next to the title */\n badge?: React.ReactNode;\n /** Additional CSS classes applied to the header container */\n className?: string;\n};\n\n/**\n * PageHeader - Standard page title and description layout\n * Used at the top of demo/showcase pages\n */\nfunction PageHeader({ title, description, badge, className = '' }: Readonly<PageHeaderProps>) {\n return (\n <div className={`mb-8 sm:mb-12 ${className}`}>\n <Heading level={1} hasMargin>\n {title} {badge}\n </Heading>\n {description && (\n <Text hasMargin variant=\"muted\" className=\"mt-2\">\n {description}\n </Text>\n )}\n </div>\n );\n}\n\nPageHeader.displayName = 'PageHeader';\n\nexport default PageHeader;\n","import { sectionPadding, SectionPaddingSize } from '../../../theme/size-tokens';\n\nexport interface SectionProps {\n /**\n * Content to render inside the section\n */\n children: React.ReactNode;\n\n /**\n * Background variant\n * @default 'default'\n */\n variant?: 'default' | 'muted' | 'primary' | 'dark';\n\n /**\n * Vertical padding size - uses unified size system\n * @default 'lg'\n */\n padding?: SectionPaddingSize;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * HTML id attribute\n */\n id?: string;\n}\n\n/**\n * Section component for page layout sections\n * Uses unified size system from theme/size-tokens\n */\nfunction Section({ children, variant = 'default', padding = 'none', className, id }: SectionProps) {\n const paddingClasses = sectionPadding[padding];\n\n // Build variant classes\n const variantClasses = {\n default: 'bg-background',\n muted: 'bg-muted/20',\n primary: 'bg-primary text-primary-foreground',\n dark: 'bg-background-dark text-foreground-dark'\n };\n\n const classes = ['w-full', paddingClasses, variantClasses[variant], className].filter(Boolean).join(' ');\n\n return (\n <section id={id} className={classes}>\n {children}\n </section>\n );\n}\n\nSection.displayName = 'Section';\n\nexport default Section;\n","import React from 'react';\n\nimport Heading from '../../typography/heading/heading';\nimport Text from '../../typography/text/text';\n\nexport type SectionHeaderProps = {\n /** Section heading text */\n title: string;\n /** Optional description text displayed below the title */\n description?: string;\n /** Optional badge or label component displayed next to the title */\n badge?: React.ReactNode;\n /** HTML heading level (h2, h3, or h4) */\n level?: 2 | 3 | 4;\n /** Additional CSS classes applied to the header container */\n className?: string;\n};\n\n/**\n * SectionHeader - Standard section title and description layout\n * Used for section headings within demo/showcase pages\n */\nfunction SectionHeader({ title, description, badge, level = 2, className = '' }: Readonly<SectionHeaderProps>) {\n return (\n <div className={className}>\n <Heading level={level} hasMargin>\n {title} {badge}\n </Heading>\n {description && <Text hasMargin>{description}</Text>}\n </div>\n );\n}\n\nSectionHeader.displayName = 'SectionHeader';\n\nexport default SectionHeader;\n","import React from 'react';\n\nimport { gapSizes, type GapSize } from '../../../theme/size-tokens';\n\ntype StackDirection = 'vertical' | 'horizontal';\ntype StackAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline';\ntype StackJustify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n\nconst alignClasses: Record<StackAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline'\n};\n\nconst justifyClasses: Record<StackJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly'\n};\n\nexport type StackProps = {\n /** Stack content - typically a list of child elements to be arranged */\n children: React.ReactNode;\n /** Additional CSS classes applied to the stack */\n className?: string;\n /** Flex direction - vertical stacks by default */\n direction?: StackDirection;\n /** Gap between children using the shared spacing scale */\n spacing?: GapSize;\n /** Cross-axis alignment of children */\n align?: StackAlign;\n /** Main-axis distribution of children */\n justify?: StackJustify;\n /** Allows items to wrap onto multiple lines */\n wrap?: boolean;\n /** Switches between flex and inline-flex */\n inline?: boolean;\n} & Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'className'>;\n\n/**\n * Stack layout primitive\n * Provides a flex container with direction, spacing, and alignment controls.\n */\nfunction Stack({\n children,\n className = '',\n direction = 'vertical',\n spacing = 'md',\n align = 'stretch',\n justify,\n wrap = false,\n inline = false,\n ...props\n}: Readonly<StackProps>) {\n const classes = [\n inline ? 'inline-flex' : 'flex',\n direction === 'horizontal' ? 'flex-row' : 'flex-col',\n gapSizes[spacing],\n alignClasses[align],\n justify && justifyClasses[justify],\n wrap ? 'flex-wrap' : 'flex-nowrap',\n className\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div data-component=\"Stack\" className={classes} {...props}>\n {children}\n </div>\n );\n}\n\nStack.displayName = 'Stack';\n\nexport default Stack;\n","import { ReactNode, useState } from 'react';\n\nexport type AccordionItemProps = {\n /** Title text displayed in the accordion header button */\n title: string;\n /** Content displayed when the accordion item is expanded */\n children: ReactNode;\n /** Whether the accordion item is initially expanded on mount */\n defaultOpen?: boolean;\n};\n\nexport type AccordionProps = {\n /** Accordion items (typically AccordionItem components) */\n children: ReactNode;\n /** Additional CSS classes applied to the accordion container */\n className?: string;\n /** Whether multiple accordion items can be open simultaneously (not implemented) */\n allowMultiple?: boolean;\n};\n\n/**\n * AccordionItem - Single expandable section\n */\nexport function AccordionItem({ title, children, defaultOpen = false }: Readonly<AccordionItemProps>) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n return (\n <article className=\"border-b border-border\">\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-full flex items-center justify-between py-4 px-2 text-left text-foreground hover:bg-muted/50 active:bg-muted transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-sm\"\n aria-expanded={isOpen}\n >\n <span className=\"font-medium\">{title}</span>\n <svg\n className={`w-5 h-5 transition-transform ${isOpen ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n {isOpen && <section className=\"px-2 pb-4 text-muted-foreground\">{children}</section>}\n </article>\n );\n}\n\n/**\n * Accordion - Expandable sections for FAQs, filters, etc.\n */\nfunction Accordion({ children, className = '' }: Readonly<AccordionProps>) {\n return <div className={`divide-y divide-border ${className}`}>{children}</div>;\n}\n\nAccordion.displayName = 'Accordion';\n\nexport default Accordion;\n","export type DividerProps = {\n /** Direction of the divider line */\n orientation?: 'horizontal' | 'vertical';\n /** Additional CSS classes applied to the divider */\n className?: string;\n} & React.HTMLAttributes<HTMLHRElement>;\n\n/**\n * Divider - Visual section break\n */\nfunction Divider({ orientation = 'horizontal', className = '', ...props }: Readonly<DividerProps>) {\n const orientationClasses = orientation === 'horizontal' ? 'w-full h-px' : 'h-full w-px';\n\n return (\n <hr className={`border-0 bg-border ${orientationClasses} ${className}`} aria-orientation={orientation} {...props} />\n );\n}\n\nDivider.displayName = 'Divider';\n\nexport default Divider;\n","import { useCallback, useLayoutEffect, useEffect, useRef, useState } from 'react';\n\nexport type OverlayPhase = 'mount' | 'animating-in' | 'visible' | 'animating-out';\n\nexport interface UseOverlayOptions {\n isOpen: boolean;\n onClose?: () => void; // reserved for future outside-click/escape wiring\n focusTrap?: boolean;\n lockScroll?: boolean;\n animationFrames?: number; // number of rAF hops before visible (default 2)\n restoreFocus?: boolean;\n exitDuration?: number; // ms matching CSS transition duration for animating-out\n unmountOnExit?: boolean; // default true\n}\n\nexport interface UseOverlayResult<T extends HTMLElement> {\n phase: OverlayPhase;\n shouldRender: boolean;\n ref: React.RefObject<T>;\n getPhaseClass: (openClass: string, closedClass: string) => string;\n}\n\n/**\n * useOverlay - shared lifecycle for animated overlays (Modal, Drawer, Popover, etc.)\n * Handles phased mounting, focus trap, scroll locking, and focus restoration.\n */\nexport function useOverlay<T extends HTMLElement>(options: UseOverlayOptions): UseOverlayResult<T> {\n const {\n isOpen,\n focusTrap = true,\n lockScroll = true,\n animationFrames = 2,\n restoreFocus = true,\n exitDuration = 300,\n unmountOnExit = true\n } = options;\n const previouslyFocusedRef = useRef<HTMLElement | null>(null);\n // Cast so consumer sees RefObject<T>; internal null checks still done.\n const containerRef = useRef<T>(null as unknown as T);\n const [shouldRender, setShouldRender] = useState(isOpen);\n const [phase, setPhase] = useState<OverlayPhase>('mount');\n\n // Mount / animation phases\n useLayoutEffect(() => {\n if (isOpen && !shouldRender) {\n // Opening: mount first\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setShouldRender(true);\n setPhase('mount');\n } else if (isOpen && shouldRender && phase === 'mount') {\n // Already mounted, start animation\n requestAnimationFrame(() => {\n setPhase('animating-in');\n let frame = 0;\n const step = () => {\n frame += 1;\n if (frame >= animationFrames) {\n setPhase('visible');\n } else {\n requestAnimationFrame(step);\n }\n };\n if (animationFrames > 0) {\n requestAnimationFrame(step);\n } else {\n setPhase('visible');\n }\n });\n } else if (!isOpen && shouldRender && phase !== 'animating-out') {\n // Closing: start exit animation\n setPhase('animating-out');\n }\n }, [isOpen, shouldRender, phase, animationFrames]);\n\n // Handle exit unmount timing aligned with CSS duration\n useEffect(() => {\n if (phase === 'animating-out' && unmountOnExit) {\n const timeout = setTimeout(() => {\n setShouldRender(false);\n setPhase('mount');\n }, exitDuration);\n return () => clearTimeout(timeout);\n }\n return undefined;\n }, [phase, exitDuration, unmountOnExit]);\n\n // Scroll lock & focus capture\n useEffect(() => {\n if (isOpen) {\n if (typeof document !== 'undefined') {\n if (restoreFocus) previouslyFocusedRef.current = document.activeElement as HTMLElement;\n if (lockScroll) document.body.style.overflow = 'hidden';\n }\n }\n return () => {\n if (typeof document !== 'undefined') {\n if (lockScroll) document.body.style.overflow = '';\n if (!isOpen && restoreFocus && previouslyFocusedRef.current) {\n previouslyFocusedRef.current.focus();\n }\n }\n };\n }, [isOpen, lockScroll, restoreFocus]);\n\n // Focus dialog/panel when visible without scrolling document\n useEffect(() => {\n if (phase === 'visible' && containerRef.current) {\n const el = containerRef.current as unknown as HTMLElement;\n try {\n // preventScroll supported in modern browsers; fallback to normal focus\n el.focus?.({ preventScroll: true } as FocusOptions);\n } catch {\n el.focus?.();\n }\n }\n }, [phase]);\n\n // Focus trap\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!focusTrap || phase !== 'visible' || e.key !== 'Tab' || !containerRef.current) return;\n const node = containerRef.current as unknown as HTMLElement;\n const focusable = node.querySelectorAll<HTMLElement>(\n 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex=\"-1\"])'\n );\n if (!focusable.length) return;\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (e.shiftKey) {\n if (document.activeElement === first || document.activeElement === node) {\n e.preventDefault();\n last.focus();\n }\n } else if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n },\n [focusTrap, phase]\n );\n\n useEffect(() => {\n if (focusTrap && phase === 'visible') {\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }\n return undefined;\n }, [phase, focusTrap, handleKeyDown]);\n\n const getPhaseClass = useCallback(\n (openClass: string, closedClass: string) => {\n // mount: closed (initial state before animation)\n // animating-in: open (CSS transition from closed to open)\n // visible: open (fully open)\n // animating-out: closed (CSS transition from open to closed)\n return phase === 'animating-in' || phase === 'visible' ? openClass : closedClass;\n },\n [phase]\n );\n\n return { phase, shouldRender, ref: containerRef, getPhaseClass };\n}\n\nexport default useOverlay;\n","import { ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport useOverlay from '../../feedback/overlay/useOverlay';\n\nimport { overlaySizes, OverlaySize } from '../../../theme/size-tokens';\n\nexport type DrawerProps = {\n /** Controls drawer visibility */\n isOpen: boolean;\n /** Callback fired when drawer should close */\n onClose: () => void;\n /** Drawer content */\n children: ReactNode;\n /** Side of the screen from which drawer slides in */\n position?: 'left' | 'right' | 'top' | 'bottom';\n /** Additional CSS classes applied to the drawer panel */\n className?: string;\n /** Optional header title displayed at the top of the drawer */\n title?: string;\n /** Size - uses unified overlay sizes */\n size?: OverlaySize;\n /** Close drawer when Escape key is pressed */\n closeOnEscape?: boolean;\n /** Close drawer when clicking outside the panel (on backdrop) */\n closeOnOutside?: boolean;\n /** Unmount drawer from DOM after exit animation completes */\n unmountOnExit?: boolean;\n /** Disable slide animation for instant open/close */\n noAnimation?: boolean;\n};\n\n/**\n * Drawer - Simple, reliable slide-in panel\n */\nfunction Drawer({\n isOpen,\n onClose,\n children,\n position = 'right',\n className = '',\n title,\n size = 'md',\n closeOnEscape = true,\n closeOnOutside = true,\n unmountOnExit = true,\n noAnimation = false\n}: Readonly<DrawerProps>) {\n const { phase, shouldRender, ref, getPhaseClass } = useOverlay<HTMLDivElement>({\n isOpen,\n lockScroll: true,\n restoreFocus: true,\n focusTrap: true,\n unmountOnExit,\n exitDuration: noAnimation ? 0 : 250,\n animationFrames: noAnimation ? 0 : 0\n });\n\n // If closed & unmounting, skip render\n if (!shouldRender) return null;\n\n const sizeClasses = overlaySizes[size];\n\n const edgeClasses: Record<string, string> = {\n left: 'left-0 top-0 bottom-0',\n right: 'right-0 top-0 bottom-0',\n top: 'top-0 left-0 right-0 h-96',\n bottom: 'bottom-0 left-0 right-0 h-96'\n };\n\n const closedTransform: Record<string, string> = {\n left: '-translate-x-full',\n right: 'translate-x-full',\n top: '-translate-y-full',\n bottom: 'translate-y-full'\n };\n\n const openTransform = 'translate-x-0 translate-y-0';\n const panelTransform = noAnimation ? '' : getPhaseClass(openTransform, closedTransform[position]);\n const overlayOpacity = noAnimation ? 'opacity-100' : getPhaseClass('opacity-100', 'opacity-0');\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape' && closeOnEscape) {\n e.stopPropagation();\n onClose();\n }\n };\n\n const panel = (\n <>\n {/* Overlay */}\n <button\n type=\"button\"\n className={`fixed inset-0 z-999 bg-black/50 backdrop-blur-sm transition-opacity duration-250 ease-in-out ${overlayOpacity} border-0 p-0 m-0`}\n aria-label={closeOnOutside ? 'Close overlay' : undefined}\n aria-hidden={!closeOnOutside}\n tabIndex={closeOnOutside ? 0 : -1}\n onClick={() => closeOnOutside && onClose()}\n onKeyDown={(e) => {\n if (!closeOnOutside) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClose();\n }\n }}\n data-phase={phase}\n />\n {/* Panel */}\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- This <div> is used as a dialog with role=\"dialog\" and appropriate ARIA attributes. Keyboard interactions are handled for accessibility compliance. */}\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title || 'Drawer'}\n tabIndex={-1}\n data-phase={phase}\n data-position={position}\n className={`fixed ${edgeClasses[position]} ${position === 'left' || position === 'right' ? sizeClasses : ''} bg-card text-card-foreground shadow-2xl z-1000 flex flex-col outline-none ${panelTransform} ${noAnimation ? '' : 'transition-transform duration-250 ease-out will-change-transform'} ${className}`}\n onKeyDown={handleKeyDown}\n >\n {title && (\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-border/60 bg-card/95 backdrop-blur-sm\">\n <h2 className=\"text-base font-semibold tracking-tight\">{title}</h2>\n <button\n type=\"button\"\n aria-label=\"Close drawer\"\n onClick={onClose}\n className=\"cursor-pointer w-8 h-8 inline-flex items-center justify-center rounded-md hover:bg-muted focus:outline-none focus:ring-2 focus:ring-ring\"\n >\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 >\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 <div className=\"flex-1 overflow-y-auto p-5 flex flex-col gap-4\">{children}</div>\n </div>\n </>\n );\n\n return createPortal(panel, document.body);\n}\n\nDrawer.displayName = 'Drawer';\n\nexport default Drawer;\n","import React from 'react';\nimport { cardSizes, marginX, MarginXSize, marginY, MarginYSize, type CardSize } from '../../../theme/size-tokens';\n\nexport type CardProps = {\n /** Card content - typically CardHeader, CardBody, CardFooter, or CardFigure components */\n children: React.ReactNode;\n /** Additional CSS classes applied to the card */\n className?: string;\n /** Visual style variant */\n variant?: 'default' | 'bordered' | 'ghost' | 'filled';\n /** Size of the card (sets fixed width) - uses unified size system */\n size?: CardSize;\n /** Width behavior - 'auto' uses size prop, 'full' stretches to container, 'fit' fits content */\n width?: 'auto' | 'full' | 'fit';\n /** Makes the card hoverable with transition effects */\n hoverable?: boolean;\n /** Card image position (when using figure element) */\n imagePosition?: 'top' | 'bottom' | 'side' | 'overlay';\n /** Centers the card content */\n centered?: boolean;\n /** Compact mode with reduced padding */\n compact?: boolean;\n /** Horizontal margin spacing */\n marginX?: MarginXSize;\n /** Vertical margin spacing */\n marginY?: MarginYSize;\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Card - Modern card component with flexible layouts\n *\n * Features:\n * - Multiple visual variants (default, bordered, ghost, filled)\n * - Flexible image positioning (top, bottom, side, overlay)\n * - Size variants from xs to xl\n * - Hover effects and transitions\n * - Centered content option\n * - Works with CardTitle, CardBody, CardActions, and CardFigure sub-components\n *\n * @example\n * ```tsx\n * // Basic card\n * <Card>\n * <CardBody>Content</CardBody>\n * </Card>\n *\n * // Card in Grid - stretches to fill grid cell\n * <Grid>\n * <Card width=\"full\">\n * <CardBody>Grid Item</CardBody>\n * </Card>\n * </Grid>\n *\n * // Fixed size card\n * <Card size=\"lg\">\n * <CardBody>Fixed width card</CardBody>\n * </Card>\n *\n * // Card with image and content\n * <Card hoverable width=\"full\">\n * <CardFigure>\n * <img src=\"...\" alt=\"...\" />\n * </CardFigure>\n * <CardBody>\n * <CardTitle>Product Name</CardTitle>\n * <Text>Description</Text>\n * </CardBody>\n * </Card>\n * ```\n */\nfunction Card({\n children,\n className = '',\n variant = 'default',\n size = 'md',\n width = 'auto',\n hoverable = false,\n imagePosition = 'top',\n centered = false,\n compact = false,\n marginX: mX = 'none',\n marginY: mY = 'none',\n ...props\n}: Readonly<CardProps>) {\n const variantClasses = {\n default: 'bg-card text-card-foreground border border-border shadow-md',\n bordered: 'bg-card text-card-foreground border-2 border-border',\n ghost: 'bg-transparent',\n filled: 'bg-muted text-foreground'\n };\n\n const widthClasses = {\n auto: size ? cardSizes[size] : 'max-w-full',\n full: 'w-full',\n fit: 'w-fit'\n };\n\n const marginXClass = mX !== 'none' ? marginX[mX] : '';\n const marginYClass = mY !== 'none' ? marginY[mY] : '';\n\n const hoverClasses = hoverable\n ? 'transition-all duration-300 hover:shadow-xl hover:-translate-y-1'\n : 'transition-shadow duration-200';\n\n const imagePositionClasses = {\n top: 'flex-col',\n bottom: 'flex-col-reverse',\n side: 'flex-row',\n overlay: 'relative'\n };\n\n const centerClasses = centered ? 'text-center items-center' : '';\n\n return (\n <div\n className={`\n rounded-2xl\n overflow-hidden\n ${variantClasses[variant]}\n ${widthClasses[width]}\n ${hoverClasses}\n ${imagePositionClasses[imagePosition]}\n ${centerClasses}\n ${compact ? 'p-4' : ''}\n ${imagePosition === 'side' ? 'flex' : 'flex'}\n ${marginXClass}\n ${marginYClass}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nCard.displayName = 'Card';\n\nexport default Card;\n","import { ReactNode } from 'react';\n\nexport type CardHeaderProps = {\n /** Header content (typically heading or metadata) */\n children: ReactNode;\n /** Additional CSS classes applied to the header container */\n className?: string;\n /**\n * Add border to bottom of header\n * @default true\n */\n bordered?: boolean;\n /**\n * Padding size\n * @default 'md'\n */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n};\n\n/**\n * CardHeader - Header section for Card\n *\n * Displays a header section at the top of a card, typically used for titles or metadata.\n * Can be used with or without CardBody.\n *\n * @example\n * ```tsx\n * <Card>\n * <CardHeader>\n * <h3>Card Header</h3>\n * </CardHeader>\n * <CardBody>\n * <p>Content</p>\n * </CardBody>\n * </Card>\n * ```\n */\nfunction CardHeader({ children, className = '', bordered = true, padding = 'md' }: Readonly<CardHeaderProps>) {\n const paddingClasses = {\n none: 'p-0',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8'\n };\n\n return (\n <div\n className={`\n card-header\n flex items-center justify-between gap-3\n ${paddingClasses[padding]}\n ${bordered ? 'border-b border-border' : ''}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n >\n {children}\n </div>\n );\n}\n\nCardHeader.displayName = 'CardHeader';\n\nexport default CardHeader;\n","import { cardPadding, CardPaddingSize } from '../../../theme/size-tokens';\n\nexport interface CardBodyProps {\n /**\n * Content to render inside the card body\n */\n children: React.ReactNode;\n\n /**\n * Padding size - uses unified size system\n * @default 'md'\n */\n padding?: CardPaddingSize;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * CardBody - Content container for Card component\n * Uses unified size system from theme/size-tokens\n */\nfunction CardBody({ children, padding = 'md', className = '' }: CardBodyProps) {\n const paddingClasses = cardPadding[padding];\n\n return (\n <div\n className={`\n card-body\n flex flex-col gap-2\n ${paddingClasses}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n >\n {children}\n </div>\n );\n}\n\nCardBody.displayName = 'CardBody';\n\nexport default CardBody;\n","import { ReactNode } from 'react';\n\nexport type CardFooterProps = {\n /** Footer content (typically buttons or metadata) */\n children: ReactNode;\n /** Additional CSS classes applied to the footer container */\n className?: string;\n /**\n * Add border to top of footer\n * @default true\n */\n bordered?: boolean;\n /**\n * Padding size\n * @default 'md'\n */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /**\n * Alignment of footer content\n * @default 'start'\n */\n align?: 'start' | 'center' | 'end';\n};\n\n/**\n * CardFooter - Footer section for Card\n *\n * Displays a footer section at the bottom of a card, typically used for actions or metadata.\n *\n * @example\n * ```tsx\n * <Card>\n * <CardBody>\n * <CardTitle>Title</CardTitle>\n * <p>Content</p>\n * </CardBody>\n * <CardFooter align=\"end\">\n * <Button>Action</Button>\n * </CardFooter>\n * </Card>\n * ```\n */\nfunction CardFooter({\n children,\n className = '',\n bordered = true,\n padding = 'md',\n align = 'start'\n}: Readonly<CardFooterProps>) {\n const paddingClasses = {\n none: 'p-0',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8'\n };\n\n const alignClasses = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end'\n };\n\n return (\n <div\n className={`\n card-footer\n flex items-center gap-1\n ${paddingClasses[padding]}\n ${bordered ? 'border-t border-border' : ''}\n ${alignClasses[align]}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n >\n {children}\n </div>\n );\n}\n\nCardFooter.displayName = 'CardFooter';\n\nexport default CardFooter;\n","import { ReactNode } from 'react';\n\nexport type CardActionsProps = {\n /**\n * Action buttons or elements\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * Alignment of actions\n * @default 'end'\n */\n align?: 'start' | 'center' | 'end' | 'stretch';\n\n /**\n * Direction of actions\n * @default 'row'\n */\n direction?: 'row' | 'column';\n};\n\n/**\n * CardActions - Action buttons container for Card (DaisyUI aesthetic with pure Tailwind)\n *\n * Container for buttons and other interactive elements within a card.\n * Place after CardBody for proper spacing and alignment.\n *\n * @example\n * ```tsx\n * <Card>\n * <CardBody>\n * <CardTitle>Product</CardTitle>\n * <p>Description</p>\n * </CardBody>\n * <CardActions align=\"end\">\n * <Button style=\"ghost\">Cancel</Button>\n * <Button>Buy Now</Button>\n * </CardActions>\n * </Card>\n * ```\n */\nfunction CardActions({ children, className = '', align = 'end', direction = 'row' }: Readonly<CardActionsProps>) {\n const alignClasses = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n stretch: 'justify-stretch'\n };\n\n const directionClasses = {\n row: 'flex-row',\n column: 'flex-col'\n };\n\n return (\n <div\n className={`\n flex gap-2 px-6 pb-6 pt-2\n ${directionClasses[direction]}\n ${alignClasses[align]}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n >\n {children}\n </div>\n );\n}\n\nCardActions.displayName = 'CardActions';\n\nexport default CardActions;\n","import { ReactNode } from 'react';\n\nexport type CardFigureProps = {\n /**\n * Image or media content\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * Aspect ratio for the image\n */\n aspectRatio?: 'square' | 'video' | 'wide' | 'portrait' | 'auto';\n};\n\n/**\n * CardFigure - Image/media container for Card\n *\n * Container for images or other media content within a card.\n * Automatically handles aspect ratios and positioning based on parent Card's imagePosition.\n *\n * @example\n * ```tsx\n * // Basic card with image\n * <Card>\n * <CardFigure>\n * <img src=\"product.jpg\" alt=\"Product\" />\n * </CardFigure>\n * <CardBody>\n * <CardTitle>Product Name</CardTitle>\n * </CardBody>\n * </Card>\n *\n * // Card with custom aspect ratio\n * <Card>\n * <CardFigure aspectRatio=\"wide\">\n * <img src=\"banner.jpg\" alt=\"Banner\" />\n * </CardFigure>\n * <CardBody>\n * <CardTitle>Wide Image</CardTitle>\n * </CardBody>\n * </Card>\n * ```\n */\nfunction CardFigure({ children, className = '', aspectRatio = 'auto' }: Readonly<CardFigureProps>) {\n const aspectRatioClasses = {\n square: 'aspect-square',\n video: 'aspect-video',\n wide: 'aspect-[21/9]',\n portrait: 'aspect-[3/4]',\n auto: ''\n };\n\n return (\n <figure\n className={`\n card-figure\n relative overflow-hidden\n ${aspectRatioClasses[aspectRatio]}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n >\n {children}\n </figure>\n );\n}\n\nCardFigure.displayName = 'CardFigure';\n\nexport default CardFigure;\n","import { ReactNode } from 'react';\nimport { headingSizes, type HeadingSize } from '../../../theme/size-tokens';\n\nexport type CardTitleProps = {\n /**\n * Title content\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * HTML heading level\n * @default 'h2'\n */\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n /**\n * Size of the title - uses unified size system\n * @default 'md'\n */\n size?: HeadingSize;\n};\n\n/**\n * CardTitle - Title component for Card\n *\n * Displays a prominent title within a card, typically used at the top of CardBody.\n *\n * @example\n * ```tsx\n * <Card>\n * <CardBody>\n * <CardTitle>My Card Title</CardTitle>\n * <p>Card content goes here</p>\n * </CardBody>\n * </Card>\n * ```\n */\nfunction CardTitle({ children, className = '', as: Component = 'h2', size = 'md' }: Readonly<CardTitleProps>) {\n const sizeClasses = headingSizes[size];\n\n return (\n <Component\n className={`\n card-title\n ${sizeClasses}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n >\n {children}\n </Component>\n );\n}\n\nCardTitle.displayName = 'CardTitle';\n\nexport default CardTitle;\n","import React from 'react';\n\nimport { interactiveSizes, InteractiveSize, InputWidth, inputWidthSizes } from '../../../theme/size-tokens';\nimport { Alignment, colorVariants, inputAlignClasses } from '../../../theme/tokens';\n\nexport type ButtonProps = {\n /** Button label content - text, icons, or other elements */\n children?: React.ReactNode;\n /** Click event handler */\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /** Accessible label for icon-only buttons (required when no children) */\n ariaLabel?: string;\n /** Disables button interaction and applies disabled styling */\n disabled?: boolean;\n /** HTML button type attribute */\n type?: 'button' | 'submit' | 'reset';\n /** Additional CSS classes applied to the button */\n className?: string;\n /** Icon element to display alongside button text */\n icon?: React.ReactNode;\n /** Position of the icon relative to button text */\n iconPosition?: 'left' | 'right';\n /** Color variant affecting button appearance */\n variant?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\n /** Visual style modifier - solid (filled), outline (bordered), ghost (transparent), link (text-only), or soft (subtle background) */\n style?: 'solid' | 'outline' | 'ghost' | 'link' | 'soft';\n /** Size variant - uses unified size system (xs, sm, md, lg, xl) */\n size?: InteractiveSize;\n /** Border radius style - default (rounded), pill (fully rounded), square (sharp corners), circle (for icon-only buttons) */\n rounded?: 'default' | 'pill' | 'square' | 'circle';\n /** Shows loading spinner and disables interaction */\n loading?: boolean;\n /** Width of the button */\n width?: InputWidth;\n /** Aligns the button within its container: left, center, or right */\n align?: Alignment;\n /** Applies active/pressed state styling */\n active?: boolean;\n};\n\n/**\n * Accessible Button component\n * - Color variants: neutral, primary, secondary, accent, info, success, warning, error\n * - Style modifiers: solid (default), outline, ghost, link, soft\n * - Sizes: xs, sm, md (default), lg, xl\n * - Supports icons with flexible positioning (left/right)\n * - Icon-only buttons require `ariaLabel` for accessibility\n */\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n children,\n onClick,\n ariaLabel,\n disabled = false,\n type = 'button',\n className = '',\n icon,\n iconPosition = 'left',\n variant = 'neutral',\n style = 'solid',\n size = 'md',\n rounded = 'default',\n loading = false,\n width = 'auto',\n align,\n active = false\n },\n ref\n ) => {\n const isIconOnly = icon && !children;\n\n // Icon-only buttons MUST have an aria-label for accessibility\n if (isIconOnly && !ariaLabel) {\n // eslint-disable-next-line no-console\n console.warn('Button: Icon-only buttons require an ariaLabel for accessibility');\n }\n\n // Style modifiers\n const getStyleClasses = () => {\n const variantKey = variant as keyof typeof colorVariants.solid;\n\n switch (style) {\n case 'outline':\n return `${colorVariants.outline[variantKey]} active:scale-95`;\n case 'ghost':\n return colorVariants.ghost[variantKey];\n case 'link':\n return colorVariants.link[variantKey];\n case 'soft':\n return colorVariants.soft[variantKey];\n case 'solid':\n default:\n return `${colorVariants.solid[variantKey]} shadow-sm hover:shadow-md`;\n }\n };\n\n // Sizes - from unified size system\n const sizeConfig = interactiveSizes[size];\n const sizeClasses = `${sizeConfig.height} ${sizeConfig.padding} ${sizeConfig.text}`;\n\n const roundedClasses = {\n default: 'rounded-md',\n pill: 'rounded-full',\n square: 'rounded-none aspect-square',\n circle: 'rounded-full aspect-square'\n };\n\n // Show loading spinner or icon\n const displayIcon = loading ? (\n <svg className=\"animate-spin h-4 w-4\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\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 ></path>\n </svg>\n ) : (\n icon\n );\n\n const styleClasses = getStyleClasses();\n const widthClasses = inputWidthSizes[width];\n const alignmentClass = align ? inputAlignClasses[align] : '';\n const activeClasses = active ? 'active:scale-95' : '';\n\n const shouldRenderIconSlots = !isIconOnly && Boolean(displayIcon);\n const cloneIcon = () => {\n if (!displayIcon) return null;\n if (React.isValidElement(displayIcon)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return React.cloneElement(displayIcon as React.ReactElement<any>, { 'aria-hidden': false });\n }\n return displayIcon;\n };\n\n const showLeftIcon = shouldRenderIconSlots && iconPosition === 'left';\n const showRightIcon = shouldRenderIconSlots && iconPosition === 'right';\n\n // Check if className contains display utilities to avoid conflicts\n const hasDisplayOverride =\n className.includes('hidden') ||\n className.includes('inline') ||\n className.includes('block') ||\n className.includes('flex');\n const baseDisplayClass = hasDisplayOverride ? '' : 'inline-flex';\n\n return (\n <button\n ref={ref}\n type={type}\n onClick={onClick}\n aria-label={ariaLabel}\n disabled={disabled || loading}\n className={`${baseDisplayClass} items-center justify-center ${alignmentClass} ${roundedClasses[rounded]} font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50 ${styleClasses} ${sizeClasses} ${\n isIconOnly ? 'p-0' : ''\n } ${widthClasses} ${activeClasses} ${className}`}\n >\n {showLeftIcon && <span className=\"flex shrink-0 items-center mr-2\">{cloneIcon()}</span>}\n {isIconOnly ? (\n <span className=\"inline-flex items-center justify-center\">{displayIcon}</span>\n ) : (\n <span className=\"inline-flex flex-1 justify-center text-center\">{children}</span>\n )}\n {showRightIcon && <span className=\"flex shrink-0 items-center ml-2\">{cloneIcon()}</span>}\n </button>\n );\n }\n);\n\nButton.displayName = 'Button';\n\nexport default Button;\n","import React from 'react';\nimport { Icon, IconSize } from '../../system/icon';\nimport Button, { ButtonProps as BaseButtonProps } from './button';\nimport { StatusColorProp } from '../../../theme/tokens';\n\nexport interface ButtonWithIconProps extends Omit<BaseButtonProps, 'icon' | 'style'> {\n icon?: string;\n iconSize?: IconSize;\n iconColor?: StatusColorProp | 'currentColor';\n buttonStyle?: BaseButtonProps['style'];\n children?: React.ReactNode;\n}\n\n/**\n * ButtonWithIcon - Button using Icon wrapper for consistent icon sizing\n * Usage: <ButtonWithIcon icon=\"plus\" iconSize=\"md\">Add</ButtonWithIcon>\n */\nconst ButtonWithIcon = React.forwardRef<HTMLButtonElement, ButtonWithIconProps>(\n (\n { icon, iconSize = 'md', iconColor = 'currentColor', iconPosition = 'left', buttonStyle, children, ...rest },\n ref\n ) => {\n const iconNode = icon ? <Icon name={icon} size={iconSize} color={iconColor} /> : null;\n return (\n <Button ref={ref} icon={iconNode} iconPosition={iconPosition} style={buttonStyle} {...rest}>\n {children}\n </Button>\n );\n }\n);\n\nButtonWithIcon.displayName = 'ButtonWithIcon';\n\nexport default ButtonWithIcon;\n","import type { ComponentProps, ReactNode } from 'react';\nimport { Fragment } from 'react';\n\nimport Button from '../../forms/button/button';\nimport ButtonWithIcon from '../../forms/button/button-with-icon';\nimport Icon from '../../system/icon/icon';\nimport Text from '../../typography/text/text';\nimport Card from '../card/card';\nimport CardBody from '../card/card-body';\nimport Divider from '../divider/divider';\nimport Stack from '../stack/stack';\nimport CardHeader from '../card/card-header';\n\nexport type ActionCardButton = Omit<ComponentProps<typeof ButtonWithIcon>, 'children'> & {\n label: string;\n};\n\nexport type ActionCardItemAction = Omit<ComponentProps<typeof Button>, 'children'> & {\n label: string;\n};\n\nexport type ActionCardItem = {\n id: string;\n icon?: ComponentProps<typeof Icon>['name'];\n label: string;\n description?: string;\n action?: ActionCardItemAction;\n};\n\nexport type ActionCardProps = {\n icon?: ComponentProps<typeof Icon>['name'];\n title: string;\n description?: string;\n children?: ReactNode;\n primaryAction?: ActionCardButton;\n secondaryAction?: ActionCardButton;\n align?: 'start' | 'center';\n bodyPadding?: ComponentProps<typeof CardBody>['padding'];\n items?: ActionCardItem[];\n showItemDividers?: boolean;\n itemSpacing?: ComponentProps<typeof Stack>['spacing'];\n statusContent?: ReactNode;\n footerContent?: ReactNode;\n 'data-testid'?: string;\n};\n\nconst stackAlignMap: Record<'start' | 'center', ComponentProps<typeof Stack>['align']> = {\n start: 'start',\n center: 'center'\n};\n\nconst stackJustifyMap: Record<'start' | 'center', ComponentProps<typeof Stack>['justify']> = {\n start: 'start',\n center: 'center'\n};\n\nfunction renderItems(\n items?: ActionCardItem[],\n options?: {\n showDividers?: boolean;\n spacing?: ComponentProps<typeof Stack>['spacing'];\n }\n) {\n if (!items?.length) return null;\n\n const { showDividers = false, spacing = 'sm' } = options ?? {};\n\n return (\n <Stack direction=\"vertical\" spacing={spacing} className=\"w-full\">\n {items.map((item, index) => (\n <Fragment key={item.id}>\n <Stack direction=\"vertical\" spacing=\"xs\" className=\"w-full\">\n <Stack direction=\"horizontal\" align=\"center\" spacing=\"sm\" className=\"w-full\">\n <Stack direction=\"horizontal\" align=\"center\" spacing=\"sm\" className=\"flex-1\">\n {item.icon && <Icon name={item.icon} />}\n <Text weight=\"medium\">{item.label}</Text>\n </Stack>\n\n {item.action && (\n <ButtonWithIcon\n {...item.action}\n icon={typeof item.action.icon === 'string' ? item.action.icon : ''}\n iconPosition={item.action.iconPosition ?? 'right'}\n >\n {item.action.label}\n </ButtonWithIcon>\n )}\n </Stack>\n\n {item.description && (\n <Text size=\"sm\" variant=\"muted\">\n {item.description}\n </Text>\n )}\n </Stack>\n\n {showDividers && index < items.length - 1 && <Divider />}\n </Fragment>\n ))}\n </Stack>\n );\n}\n\nfunction renderAction(\n action?: ActionCardButton,\n fallbackVariant: ComponentProps<typeof ButtonWithIcon>['variant'] = 'primary'\n) {\n if (!action) return null;\n\n return (\n <ButtonWithIcon\n {...action}\n variant={action.variant ?? fallbackVariant}\n iconPosition={action.iconPosition ?? 'right'}\n icon={action.icon ?? ''}\n >\n {action.label}\n </ButtonWithIcon>\n );\n}\n\nexport function ActionCard({\n icon,\n title,\n description,\n children,\n primaryAction,\n secondaryAction,\n align = 'center',\n items,\n showItemDividers = true,\n itemSpacing = 'sm',\n statusContent,\n footerContent,\n 'data-testid': dataTestId\n}: ActionCardProps) {\n const stackAlign = stackAlignMap[align];\n const stackJustify = stackJustifyMap[align];\n const hasItems = Boolean(items?.length);\n const hasChildren = Boolean(children);\n const hasStatus = Boolean(statusContent);\n const hasFooter = Boolean(footerContent);\n\n return (\n <Card variant=\"default\" width=\"full\" data-testid={dataTestId}>\n <CardHeader padding=\"sm\">\n <Stack direction=\"vertical\" spacing=\"sm\">\n <Stack direction=\"horizontal\" spacing=\"sm\" align={align}>\n {icon && <Icon name={icon} />}\n <Text size=\"lg\" weight=\"semibold\">\n {title}\n </Text>\n </Stack>\n {description && (\n <Text variant=\"muted\" size=\"sm\">\n {description}\n </Text>\n )}\n </Stack>\n </CardHeader>\n <CardBody padding=\"sm\">\n <Stack direction=\"vertical\" spacing=\"md\" align={stackAlign}>\n {hasStatus && (\n <Stack direction=\"vertical\" className=\"w-full\">\n {statusContent}\n </Stack>\n )}\n\n {hasItems &&\n renderItems(items, {\n showDividers: showItemDividers,\n spacing: itemSpacing\n })}\n\n {hasChildren && (\n <Stack direction=\"vertical\" spacing=\"sm\" className=\"w-full\">\n {children}\n </Stack>\n )}\n\n {hasFooter && (\n <Stack direction=\"vertical\" className=\"w-full\">\n {footerContent}\n </Stack>\n )}\n\n {(primaryAction ?? secondaryAction) && (\n <Stack direction=\"horizontal\" spacing=\"sm\" justify={stackJustify} className=\"w-full flex-wrap\">\n {renderAction(primaryAction)}\n {renderAction(secondaryAction, 'secondary')}\n </Stack>\n )}\n </Stack>\n </CardBody>\n </Card>\n );\n}\n","import { useEffect, RefObject } from 'react';\n\n/**\n * Robust scroll reset on key changes (e.g., route changes).\n * Attempts multiple strategies to ensure scroll position returns to top.\n */\nexport function useScrollReset(deps: unknown[], container?: HTMLElement | null | RefObject<HTMLElement | null>) {\n useEffect(() => {\n let cancelled = false;\n const maxRaf = 6;\n let rafCount = 0;\n\n const isRef = (obj: unknown): obj is RefObject<HTMLElement | null> => {\n return typeof obj === 'object' && obj !== null && 'current' in obj;\n };\n\n const setAllScrollTop = () => {\n if (cancelled) return;\n\n // Handle hash navigation if applicable\n try {\n const hash = typeof window !== 'undefined' ? window.location.hash : '';\n if (hash && hash.startsWith('#')) {\n const id = decodeURIComponent(hash.slice(1));\n // Resolve container whether caller passed HTMLElement or RefObject\n const resolved: HTMLElement | null | undefined = isRef(container)\n ? container.current\n : (container as HTMLElement | null | undefined);\n\n // Search within container first, then fallback to document\n const root = resolved ?? document;\n const target = (root as Document | HTMLElement).querySelector\n ? (root as Document | HTMLElement).querySelector(`#${CSS.escape(id)}`)\n : null;\n\n if (target) {\n try {\n (target as HTMLElement).scrollIntoView({ block: 'start' });\n } catch {\n // ignore errors and fall back to not resetting\n }\n\n return;\n }\n }\n } catch {\n // CSS.escape may throw in very old environments; fall back to default behavior\n }\n\n window.scrollTo(0, 0);\n // Resolve container whether caller passed HTMLElement or RefObject\n const resolved: HTMLElement | null | undefined = isRef(container)\n ? container.current\n : (container as HTMLElement | null | undefined);\n if (resolved) resolved.scrollTop = 0;\n document.documentElement.scrollTop = 0;\n document.body.scrollTop = 0;\n };\n\n // Immediate\n setAllScrollTop();\n\n // Microtask flush\n Promise.resolve().then(() => setAllScrollTop());\n\n // Timeout after potential layout shift\n const timeoutId = setTimeout(() => setAllScrollTop(), 0);\n\n // A few RAF retries to combat async mounts\n const loop = () => {\n if (cancelled) return;\n setAllScrollTop();\n rafCount += 1;\n if (rafCount < maxRaf) requestAnimationFrame(loop);\n };\n requestAnimationFrame(loop);\n\n return () => {\n cancelled = true;\n clearTimeout(timeoutId);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}\n\nexport default useScrollReset;\n","import React from 'react';\nimport { Icon, IconSize } from '../../system/icon';\nimport Button, { ButtonProps as BaseButtonProps } from './button';\nimport { StatusColorProp } from '../../../theme/tokens';\n\nexport interface IconButtonProps extends Omit<BaseButtonProps, 'icon' | 'style' | 'children'> {\n icon: string;\n ariaLabel: string;\n iconSize?: IconSize;\n iconColor?: StatusColorProp | 'currentColor';\n buttonStyle?: BaseButtonProps['style'];\n children?: never;\n}\n\n/**\n * IconButton - Icon-only button using Icon wrapper for consistent icon sizing\n * Usage: <IconButton icon=\"plus\" iconSize=\"md\" ariaLabel=\"Add item\" />\n */\nconst IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(\n ({ icon, iconSize = 'md', iconColor = 'currentColor', buttonStyle, ariaLabel, ...rest }, ref) => {\n const iconNode = icon ? <Icon name={icon} size={iconSize} color={iconColor} /> : null;\n return <Button ref={ref} icon={iconNode} style={buttonStyle} ariaLabel={ariaLabel} {...rest} />;\n }\n);\n\nIconButton.displayName = 'IconButton';\n\nexport default IconButton;\n","import { ReactNode, useState, useRef, useEffect } from 'react';\nimport useScrollReset from '@/hooks/useScrollReset';\nimport IconButton from '../../forms/button/icon-button';\n\nexport type LeftNavLayoutProps = {\n /** Navigation sidebar content */\n nav: ReactNode;\n /** Main content area */\n children: ReactNode;\n /** Whether sidebar is collapsed (icon-only mode) */\n collapsed?: boolean;\n /** Callback when collapse state changes */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Whether to show collapse toggle button */\n showToggle?: boolean;\n /** Custom className for the layout container */\n className?: string;\n /** Custom className for the nav sidebar */\n navClassName?: string;\n /** Custom className for the content area */\n contentClassName?: string;\n /** Width of the sidebar when expanded */\n navWidth?: string;\n /** Width of the sidebar when collapsed */\n navWidthCollapsed?: string;\n /** Whether sidebar is collapsible on mobile (becomes overlay) */\n mobileCollapsible?: boolean;\n /** Mobile menu open state (controlled) */\n mobileMenuOpen?: boolean;\n /** Callback when mobile menu state changes */\n onMobileMenuOpenChange?: (open: boolean) => void;\n /** Embedded demo mode (no fixed positioning, constrained height) */\n embedded?: boolean;\n /** Ref for the main content scrollable element */\n mainContentRef?: React.RefObject<HTMLDivElement>;\n /** Optional header text for the navigation sidebar */\n header?: string;\n};\n\n/**\n * LeftNavLayout - Full-featured responsive left navigation layout\n *\n * Provides a robust sidebar navigation with:\n * - Full and collapsed (icon-only) states\n * - Smooth transitions without janky spacing\n * - Proper scroll handling\n * - Responsive mobile behavior\n * - Accessible keyboard navigation\n *\n * @example\n * ```tsx\n * <LeftNavLayout\n * collapsed={isCollapsed}\n * onCollapsedChange={setIsCollapsed}\n * nav={\n * <>\n * <LeftNavSection>\n * <LeftNavItem icon={<HomeIcon />} href=\"/\" active>Home</LeftNavItem>\n * <LeftNavItem icon={<DashboardIcon />} href=\"/dashboard\">Dashboard</LeftNavItem>\n * </LeftNavSection>\n * </>\n * }\n * >\n * <main>Your content here</main>\n * </LeftNavLayout>\n * ```\n */\nfunction LeftNavLayout({\n nav,\n children,\n collapsed: controlledCollapsed,\n onCollapsedChange,\n showToggle = true,\n className = '',\n navClassName = '',\n contentClassName = '',\n navWidth = '16rem',\n navWidthCollapsed = '4.5rem',\n mobileCollapsible = true,\n mobileMenuOpen: controlledMobileMenuOpen,\n embedded = false,\n header = 'Navigation',\n mainContentRef\n}: Readonly<LeftNavLayoutProps>) {\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const navRef = useRef<HTMLDivElement | null>(null);\n const scrollPosRef = useRef<number>(0);\n const internalContentRef = useRef<HTMLElement | null>(null);\n const contentRef = mainContentRef || internalContentRef;\n\n // Use controlled or uncontrolled collapsed state\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const setCollapsed = (value: boolean) => {\n if (onCollapsedChange) {\n onCollapsedChange(value);\n } else {\n setInternalCollapsed(value);\n }\n };\n\n // Mobile menu state is controlled by parent\n const mobileMenuOpen = controlledMobileMenuOpen ?? false;\n\n const toggleCollapsed = () => setCollapsed(!collapsed);\n\n // Restore nav scroll position after children change (route switch) & reset scroll\n useEffect(() => {\n if (navRef.current) {\n navRef.current.scrollTop = scrollPosRef.current;\n }\n }, [children]);\n\n // Robust scroll reset for main content area on children change\n // Pass the ref object (not .current) to avoid reading ref during render\n useScrollReset([children], contentRef as React.RefObject<HTMLElement | null>);\n\n const containerClasses = embedded\n ? 'flex bg-background border border-border rounded-lg overflow-hidden'\n : 'flex h-[calc(100vh-3.5rem)] md:h-[calc(100vh-4rem)] bg-background';\n\n return (\n <div className={`${containerClasses} ${className}`}>\n {/* Sidebar Navigation */}\n <aside\n className={`\n ${embedded ? 'relative flex flex-col h-full' : 'fixed lg:relative top-14 md:top-16 lg:top-0 left-0 z-40 lg:z-10 h-[calc(100vh-3.5rem)] md:h-[calc(100vh-4rem)] lg:h-full'}\n flex flex-col shrink-0\n bg-background border-r border-border\n transition-all duration-300 ease-in-out\n ${!embedded && mobileCollapsible && !mobileMenuOpen ? '-translate-x-full lg:translate-x-0' : 'translate-x-0'}\n ${collapsed ? 'w-18' : 'w-64'}\n ${navClassName}\n `}\n style={\n (!collapsed && navWidth !== '16rem') || (collapsed && navWidthCollapsed !== '4.5rem')\n ? ({\n width: collapsed ? navWidthCollapsed : navWidth\n } as React.CSSProperties)\n : undefined\n }\n aria-label=\"Main navigation\"\n >\n {/* Nav Header with Toggle */}\n\n {/* Nav Content - Scrollable */}\n <nav\n ref={navRef}\n className=\"flex-1 overflow-y-auto overflow-x-hidden scrollbar-thin\"\n data-collapsed={collapsed}\n onScroll={(e) => {\n scrollPosRef.current = (e.currentTarget as HTMLDivElement).scrollTop;\n }}\n >\n {showToggle && (\n <div\n className={`\n relative flex items-center h-12 shrink-0\n px-3 mx-2 border-b border-border\n `}\n >\n <h2\n className={`\n text-sm font-semibold text-foreground\n transition-all duration-300 ease-in-out\n ${collapsed ? 'opacity-0 w-0 overflow-hidden' : 'opacity-100'}\n `}\n aria-hidden={collapsed}\n >\n {header}\n </h2>\n <IconButton\n icon={collapsed ? 'chevron-right' : 'chevron-left'}\n ariaLabel={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n buttonStyle=\"ghost\"\n variant=\"neutral\"\n size=\"sm\"\n iconSize=\"sm\"\n className={`\n ${collapsed ? 'absolute left-1/2 -translate-x-1/2' : 'absolute right-0'}\n `}\n onClick={toggleCollapsed}\n />\n </div>\n )}\n {nav}\n </nav>\n </aside>\n\n {/* Main Content Area */}\n <main\n ref={contentRef as React.RefObject<HTMLDivElement>}\n className={`flex-1 overflow-y-auto ${embedded ? 'h-60' : ''} ${contentClassName}`}\n >\n {children}\n </main>\n </div>\n );\n}\n\nLeftNavLayout.displayName = 'LeftNavLayout';\n\nexport default LeftNavLayout;\n","import { ReactNode, useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport type TooltipProps = {\n /** The element that triggers the tooltip */\n children: ReactNode;\n /** Tooltip text content */\n content: string | ReactNode;\n /** Position of the tooltip relative to the trigger element */\n position?: 'top' | 'bottom' | 'left' | 'right';\n /** Color variant of the tooltip */\n variant?: 'default' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral';\n /** Delay before showing tooltip in ms */\n delayDuration?: number;\n /** Additional CSS classes */\n className?: string;\n};\n\n/**\n * Tooltip - Simple CSS-based tooltip component\n *\n * Displays a tooltip message on hover. Uses CSS for positioning with\n * portal rendering to escape overflow constraints.\n *\n * @example\n * ```tsx\n * <Tooltip content=\"Hello\">\n * <Button>Hover me</Button>\n * </Tooltip>\n *\n * <Tooltip content=\"Success!\" position=\"right\" variant=\"success\">\n * <Button>Submit</Button>\n * </Tooltip>\n * ```\n */\nfunction Tooltip({\n children,\n content,\n position = 'top',\n variant = 'default',\n delayDuration = 200,\n className = ''\n}: Readonly<TooltipProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const [coords, setCoords] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLSpanElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<number | undefined>(undefined);\n\n const calculatePosition = useCallback(() => {\n if (!triggerRef.current || !tooltipRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\n const offset = 8;\n\n let top = 0;\n let left = 0;\n\n switch (position) {\n case 'top':\n top = triggerRect.top - tooltipRect.height - offset;\n left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;\n break;\n case 'bottom':\n top = triggerRect.bottom + offset;\n left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;\n break;\n case 'left':\n top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;\n left = triggerRect.left - tooltipRect.width - offset;\n break;\n case 'right':\n top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;\n left = triggerRect.right + offset;\n break;\n }\n\n // Simple viewport clamping\n const padding = 8;\n if (left < padding) left = padding;\n if (left + tooltipRect.width > window.innerWidth - padding) {\n left = window.innerWidth - tooltipRect.width - padding;\n }\n if (top < padding) top = padding;\n if (top + tooltipRect.height > window.innerHeight - padding) {\n top = window.innerHeight - tooltipRect.height - padding;\n }\n\n setCoords({ top, left });\n }, [position]);\n\n const handleMouseEnter = () => {\n timeoutRef.current = window.setTimeout(() => {\n setIsOpen(true);\n }, delayDuration);\n };\n\n const handleMouseLeave = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsOpen(false);\n };\n\n useEffect(() => {\n if (isOpen) {\n requestAnimationFrame(() => {\n calculatePosition();\n });\n\n const handleScroll = () => calculatePosition();\n const handleResize = () => calculatePosition();\n\n window.addEventListener('scroll', handleScroll, true);\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('scroll', handleScroll, true);\n window.removeEventListener('resize', handleResize);\n };\n }\n return undefined;\n }, [isOpen, calculatePosition]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n const variantClasses = {\n default: 'bg-popover text-popover-foreground border border-border',\n primary: 'bg-primary text-primary-foreground',\n secondary: 'bg-secondary text-secondary-foreground',\n accent: 'bg-accent text-accent-foreground',\n info: 'bg-info text-info-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n error: 'bg-destructive text-destructive-foreground',\n neutral: 'bg-muted text-muted-foreground'\n };\n\n const tooltip = isOpen ? (\n <div\n ref={tooltipRef}\n role=\"tooltip\"\n className={`fixed z-9999 px-3 py-1.5 text-xs font-medium rounded-md shadow-md max-w-xs animate-in fade-in-0 zoom-in-95 ${variantClasses[variant]} ${className}`}\n style={{\n top: `${coords.top}px`,\n left: `${coords.left}px`\n }}\n >\n {content}\n </div>\n ) : null;\n\n return (\n <>\n <span\n ref={triggerRef}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onFocus={handleMouseEnter}\n onBlur={handleMouseLeave}\n className=\"inline-flex\"\n >\n {children}\n </span>\n {tooltip && createPortal(tooltip, document.body)}\n </>\n );\n}\n\nTooltip.displayName = 'Tooltip';\n\nexport default Tooltip;\n","import Icon from '../../system/icon/icon';\nimport { ReactNode, MouseEvent, useRef, useState, useEffect } from 'react';\nimport { NavLink } from 'react-router-dom';\n\nimport Tooltip from '../../feedback/tooltip/tooltip';\nimport { Size } from '@/theme/size-tokens';\n\nexport type LeftNavItemProps = {\n /** Icon identifier string to display (uses Icon component) */\n icon?: string;\n /** Icon size from unified size system */\n iconSize?: Size;\n /** Link label text (visible when expanded, hidden when collapsed) */\n children: ReactNode;\n /** Whether this item is currently active (highlighted state) */\n active?: boolean;\n /** Additional CSS classes applied to the navigation link */\n className?: string;\n /** Badge or count component to display on the right side */\n badge?: ReactNode;\n /** Destination URL for the navigation link */\n href?: string;\n /** Accessible label override (used for tooltip in collapsed mode) */\n title?: string;\n /** Prevent actual navigation for demo/showcase mode */\n preventNavigation?: boolean;\n};\n\n/**\n * LeftNavItem - Navigation link item for LeftNavLayout\n *\n * Features:\n * - Icon support with proper alignment\n * - Active state styling\n * - Tooltip on hover in collapsed mode (using Tooltip component with Portal)\n * - Badge/count support\n * - Accessible keyboard navigation\n *\n * @example\n * ```tsx\n * <LeftNavItem\n * icon=\"home\"\n * href=\"/\"\n * active\n * title=\"Home\"\n * >\n * Home\n * </LeftNavItem>\n * ```\n */\nfunction LeftNavItem({\n icon,\n iconSize = 'sm',\n children,\n active = false,\n className = '',\n badge,\n href = '#',\n title,\n preventNavigation = false\n}: Readonly<LeftNavItemProps>) {\n const navRef = useRef<HTMLAnchorElement>(null);\n const [isCollapsed, setIsCollapsed] = useState(() => {\n // Try to get initial collapsed state from nav element if it exists\n if (typeof window !== 'undefined') {\n const navElement = document.querySelector('nav[data-collapsed]');\n return navElement?.getAttribute('data-collapsed') === 'true';\n }\n return false;\n });\n\n // Check if nav is collapsed by looking at parent nav element\n useEffect(() => {\n const checkCollapsed = () => {\n const navElement = navRef.current?.closest('nav');\n if (navElement) {\n setIsCollapsed(navElement.getAttribute('data-collapsed') === 'true');\n }\n };\n\n checkCollapsed();\n\n // Create observer to watch for attribute changes\n const navElement = navRef.current?.closest('nav');\n if (navElement) {\n const observer = new MutationObserver(checkCollapsed);\n observer.observe(navElement, {\n attributes: true,\n attributeFilter: ['data-collapsed']\n });\n return () => observer.disconnect();\n }\n\n return undefined;\n }, []);\n\n // Use children as fallback title for accessibility\n const itemTitle = title || (typeof children === 'string' ? children : undefined);\n\n const navLink = (\n <NavLink\n ref={navRef}\n to={href}\n onClick={(e: MouseEvent) => {\n if (preventNavigation) {\n e.preventDefault();\n }\n }}\n className={({ isActive }) => `\n group relative flex items-center gap-3\n px-3 py-2.5 rounded-lg\n mx-2\n [nav[data-collapsed='true']_&]:mx-2\n [nav[data-collapsed='true']_&]:px-0\n [nav[data-collapsed='true']_&]:w-12\n [nav[data-collapsed='true']_&]:justify-center\n text-sm font-medium\n transition-colors duration-200\n \n ${\n isActive || active\n ? 'bg-primary text-primary-foreground shadow-sm'\n : 'text-foreground hover:bg-muted hover:text-foreground'\n }\n ${className}\n `}\n aria-current={active ? 'page' : undefined}\n aria-label={itemTitle}\n end\n >\n {/* Icon */}\n {icon && (\n <span className=\"shrink-0\" aria-hidden=\"true\">\n <Icon name={icon} size={iconSize} />\n </span>\n )}\n\n {/* Label - Hidden in collapsed mode via parent's data-collapsed selector */}\n <span\n className=\"\n flex-1 truncate\n [nav[data-collapsed='true']_&]:hidden\n \"\n >\n {children}\n </span>\n\n {/* Badge - Hidden in collapsed mode */}\n {badge && (\n <span\n className=\"\n shrink-0\n [nav[data-collapsed='true']_&]:hidden\n \"\n >\n {badge}\n </span>\n )}\n </NavLink>\n );\n\n // Only show tooltip when collapsed\n if (!isCollapsed) {\n return navLink;\n }\n\n // Get tooltip content\n const tooltipContent = typeof children === 'string' ? children : itemTitle || 'Menu Item';\n\n return (\n <Tooltip content={tooltipContent} position=\"right\" variant=\"default\" className=\"w-fit\">\n {navLink}\n </Tooltip>\n );\n}\n\nLeftNavItem.displayName = 'LeftNavItem';\n\nexport default LeftNavItem;\n","import { ReactNode } from 'react';\n\nexport type LeftNavSectionProps = {\n /** Section content (typically LeftNavItem components) */\n children: ReactNode;\n /** Optional section header label (hidden in collapsed mode) */\n label?: string;\n /** Additional CSS classes applied to the section container */\n className?: string;\n};\n\n/**\n * LeftNavSection - Section grouping for LeftNavLayout navigation items\n *\n * Groups related navigation items together with an optional label.\n * In collapsed mode, the label is hidden but the grouping is preserved.\n *\n * @example\n * ```tsx\n * <LeftNavSection label=\"Main\">\n * <LeftNavItem icon={<HomeIcon />} href=\"/\">Home</LeftNavItem>\n * <LeftNavItem icon={<DashboardIcon />} href=\"/dashboard\">Dashboard</LeftNavItem>\n * </LeftNavSection>\n *\n * <LeftNavSection label=\"Settings\">\n * <LeftNavItem icon={<SettingsIcon />} href=\"/settings\">Settings</LeftNavItem>\n * </LeftNavSection>\n * ```\n */\nfunction LeftNavSection({ children, label, className = '' }: Readonly<LeftNavSectionProps>) {\n return (\n <div className={`py-2 ${className}`}>\n {/* Section Label - Hidden in collapsed mode */}\n {label && (\n <h3\n className=\"\n px-5 mb-2 mt-2\n text-xs font-semibold uppercase tracking-wider\n text-muted-foreground\n [nav[data-collapsed='true']_&]:hidden\n \"\n >\n {label}\n </h3>\n )}\n\n {/* Section Items */}\n <div className=\"space-y-1\">{children}</div>\n\n {/* Divider - Subtle separator between sections */}\n <div className=\"h-px bg-border mx-3 mt-2\" aria-hidden=\"true\" />\n </div>\n );\n}\n\nLeftNavSection.displayName = 'LeftNavSection';\n\nexport default LeftNavSection;\n","import { ReactNode } from 'react';\n\nimport Container from '../container/container';\nimport Heading from '../../typography/heading/heading';\nimport Text from '../../typography/text/text';\nimport Stack from '../stack/stack';\nimport Button from '../../forms/button/button';\nimport { sectionPadding } from '../../../theme/size-tokens';\n\nexport type HeroAction = {\n /** Button label text */\n label: string;\n /** Click handler for the button */\n onClick: () => void;\n /** Button color variant */\n variant?: 'primary' | 'secondary' | 'neutral' | 'error' | 'accent';\n /** Button style variant */\n style?: 'solid' | 'outline' | 'ghost';\n /** Whether the button shows a loading state */\n loading?: boolean;\n /** Optional icon to display in the button */\n icon?: ReactNode;\n};\n\nexport type HeroProps = {\n /** Main hero heading text */\n title: string;\n /** Optional subtitle displayed above the title */\n subtitle?: string;\n /** Optional description text displayed below the title */\n description?: string;\n /** Primary call-to-action button configuration */\n primaryAction?: HeroAction;\n /** Secondary call-to-action button configuration */\n secondaryAction?: HeroAction;\n /** Optional custom content to display below actions */\n children?: ReactNode;\n /** Additional CSS classes applied to the hero section */\n className?: string;\n /** Visual background variant */\n variant?: 'gradient' | 'solid' | 'minimal';\n /** Whether content is centered horizontally */\n centered?: boolean;\n /** Size preset controlling padding and typography scale */\n size?: 'sm' | 'md' | 'lg';\n};\n\n/**\n * Hero Component - Eye-catching hero section\n *\n * @example\n * ```tsx\n * <Hero\n * title=\"Build Amazing Products\"\n * subtitle=\"The modern way to ship\"\n * description=\"Start building with our component library.\"\n * primaryAction={{\n * label: 'Get Started',\n * onClick: () => {},\n * variant: 'primary'\n * }}\n * variant=\"gradient\"\n * />\n * ```\n */\nfunction Hero({\n title,\n subtitle,\n description,\n primaryAction,\n secondaryAction,\n children,\n className = '',\n variant = 'gradient',\n centered = true,\n size = 'lg'\n}: Readonly<HeroProps>) {\n // Hero-specific size classes (extends sectionPadding)\n const sizeClasses = {\n sm: sectionPadding.md,\n md: sectionPadding.lg,\n lg: 'pt-32 pb-20 md:pt-36 md:pb-28' // Custom hero-specific padding\n };\n\n const titleSizes = {\n sm: 'text-3xl md:text-4xl',\n md: 'text-4xl md:text-5xl',\n lg: 'text-5xl md:text-6xl lg:text-7xl'\n };\n\n const variantClasses = {\n gradient: 'bg-gradient-to-b from-primary/10 via-primary/5 to-background',\n solid: 'bg-muted/30',\n minimal: 'bg-background'\n };\n\n return (\n <section className={`relative ${sizeClasses[size]} ${variantClasses[variant]} ${className}`}>\n {/* Top border with subtle glow */}\n {variant === 'gradient' && (\n <div className=\"absolute inset-x-0 top-0 h-px bg-linear-to-r from-transparent via-primary/20 to-transparent\" />\n )}\n\n {/* Bottom shadow fade */}\n <div className=\"absolute inset-x-0 bottom-0 h-32 bg-linear-to-t from-background to-transparent pointer-events-none\" />\n\n <Container marginX=\"sm\">\n <div className={centered ? 'text-center mx-auto max-w-4xl' : 'max-w-4xl'}>\n {subtitle && (\n <Text hasMargin className=\"text-lg md:text-xl font-semibold text-primary\" weight=\"semibold\">\n {subtitle}\n </Text>\n )}\n\n <Heading level={1} className={`${titleSizes[size]} font-extrabold mb-6 tracking-tight`}>\n {title}\n </Heading>\n\n {description && (\n <Text hasMargin className=\"text-lg md:text-xl mb-8 text-muted-foreground max-w-2xl mx-auto\">\n {description}\n </Text>\n )}\n\n {(primaryAction || secondaryAction) && (\n <Stack direction=\"horizontal\" spacing=\"md\" justify={centered ? 'center' : 'start'}>\n {primaryAction && (\n <Button\n size=\"lg\"\n variant={primaryAction.variant || 'primary'}\n style={primaryAction.style}\n onClick={primaryAction.onClick}\n loading={primaryAction.loading}\n icon={primaryAction.icon}\n className=\"shadow-lg shadow-primary/20 hover:shadow-xl hover:shadow-primary/30 transition-all\"\n >\n {primaryAction.label}\n </Button>\n )}\n {secondaryAction && (\n <Button\n size=\"lg\"\n variant={secondaryAction.variant || 'neutral'}\n style={secondaryAction.style || 'outline'}\n onClick={secondaryAction.onClick}\n loading={secondaryAction.loading}\n icon={secondaryAction.icon}\n className=\"hover:shadow-md transition-all\"\n >\n {secondaryAction.label}\n </Button>\n )}\n </Stack>\n )}\n\n {children && <div className=\"mt-10\">{children}</div>}\n </div>\n </Container>\n </section>\n );\n}\n\nHero.displayName = 'Hero';\n\nexport default Hero;\n","import { ReactNode } from 'react';\n\nimport Container from '../container/container';\nimport Grid from '../grid/grid';\nimport Heading from '../../typography/heading/heading';\nimport Text from '../../typography/text/text';\nimport Stack from '../stack/stack';\n\nexport type Feature = {\n /** Icon component to display for the feature */\n icon: ReactNode;\n /** Feature title text */\n title: string;\n /** Feature description text */\n description: string;\n};\n\nexport type FeatureSectionProps = {\n /** Optional section title displayed above features */\n title?: string;\n /** Optional section description displayed below title */\n description?: string;\n /** Array of feature objects to display in the grid */\n features: Feature[];\n /** Maximum number of columns in the feature grid */\n columns?: 2 | 3 | 4;\n /** Whether feature content is centered horizontally */\n centered?: boolean;\n /** Additional CSS classes applied to the section */\n className?: string;\n};\n\n/**\n * FeatureSection Component - Features grid\n * - Display features with icons in a responsive grid\n * - Configurable column count\n * - Optional section title and description\n * - Icon-first design pattern\n */\nfunction FeatureSection({\n title,\n description,\n features,\n columns = 3,\n centered = true,\n className = ''\n}: Readonly<FeatureSectionProps>) {\n return (\n <section className={`py-16 md:py-20 ${className}`}>\n <Container marginX=\"sm\">\n {(title || description) && (\n <Stack spacing=\"md\" className={`mb-12 md:mb-16 ${centered ? 'text-center max-w-3xl mx-auto' : 'max-w-3xl'}`}>\n {title && (\n <Heading level={2} hasMargin>\n {title}\n </Heading>\n )}\n {description && <Text className=\"text-lg md:text-xl\">{description}</Text>}\n </Stack>\n )}\n\n <Grid itemSize=\"md\" maxCols={columns} gap=\"lg\">\n {features.map((feature, index) => (\n <article key={index} className={centered ? 'text-center' : ''}>\n <span\n className={`inline-flex items-center justify-center w-12 h-12 md:w-16 md:h-16 rounded-lg md:rounded-xl bg-primary/10 text-primary mb-4 md:mb-6 ${\n centered ? '' : 'mr-auto'\n }`}\n >\n {feature.icon}\n </span>\n <Heading level={3} className=\"text-xl font-semibold mb-2 md:mb-3\">\n {feature.title}\n </Heading>\n <Text variant=\"muted\" className=\"text-sm md:text-base\">\n {feature.description}\n </Text>\n </article>\n ))}\n </Grid>\n </Container>\n </section>\n );\n}\n\nFeatureSection.displayName = 'FeatureSection';\n\nexport default FeatureSection;\n","import { ReactNode } from 'react';\nimport { Link as RouterLink } from 'react-router-dom';\n\nimport { textSizes } from '../../../theme/size-tokens';\n\nexport type LinkProps = {\n children: ReactNode;\n href: string;\n\n /**\n * Whether this is an external link (opens in new tab with icon)\n * @default false\n */\n external?: boolean;\n\n /**\n * Visual variant\n * @default 'default'\n */\n variant?: 'default' | 'muted' | 'secondary' | 'inherit';\n\n /**\n * When to show underline\n * @default 'hover'\n */\n underline?: 'hover' | 'always' | 'none';\n\n /**\n * Text size\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg';\n\n /**\n * Display behavior\n * @default 'inline'\n */\n display?: 'inline' | 'block';\n\n /**\n * Additional CSS classes (use as last resort)\n */\n className?: string;\n};\n\n/**\n * Link - Themed anchor with hover state\n * Automatically uses React Router for internal links\n */\nfunction Link({\n children,\n href,\n external = false,\n variant = 'default',\n underline = 'hover',\n size = 'md',\n display = 'inline',\n className = ''\n}: Readonly<LinkProps>) {\n // Build variant classes\n const variantClasses = {\n default: 'text-primary hover:text-primary/80',\n muted: 'text-muted-foreground hover:text-foreground',\n secondary: 'text-secondary hover:text-secondary/80',\n inherit: 'text-inherit hover:opacity-80'\n };\n\n // Build underline classes\n const underlineClasses = {\n hover: 'hover:underline',\n always: 'underline',\n none: 'no-underline'\n };\n\n // Build size classes from unified system\n const sizeClasses = {\n sm: textSizes.sm,\n md: textSizes.base,\n lg: textSizes.lg\n };\n\n // Build display classes\n const displayClasses = {\n inline: 'inline',\n block: 'block'\n };\n\n const linkClassName = [\n variantClasses[variant],\n underlineClasses[underline],\n sizeClasses[size],\n displayClasses[display],\n 'cursor-pointer transition-colors',\n className\n ]\n .filter(Boolean)\n .join(' ');\n\n // External links use regular anchor tag\n if (external) {\n return (\n <a href={href} className={linkClassName} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n <svg\n className=\"inline-block w-4 h-4 ml-1\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n />\n </svg>\n </a>\n );\n }\n\n // Internal links use React Router Link\n return (\n <RouterLink to={href} className={linkClassName}>\n {children}\n </RouterLink>\n );\n}\n\nLink.displayName = 'Link';\n\nexport default Link;\n","import { ReactNode } from 'react';\n\nimport Container from '../container/container';\nimport Grid from '../grid/grid';\nimport Text from '../../typography/text/text';\nimport Link from '../../typography/link/link';\nimport { MarginXSize } from '@/theme/size-tokens';\n\nexport type FooterSection = {\n /** Section heading text */\n title: string;\n /** Array of links with label, href, and optional external flag */\n links: Array<{ label: string; href: string; external?: boolean }>;\n};\n\nexport type FooterProps = {\n /** Array of footer sections containing grouped links */\n sections?: FooterSection[];\n /** Copyright text displayed at the bottom */\n copyright?: string;\n /** Social media icons or links to display */\n social?: ReactNode;\n /** Additional CSS classes applied to the footer element */\n className?: string;\n /** Horizontal margin spacing using unified size system */\n marginX?: MarginXSize;\n};\n\n/**\n * Footer Component - Site footer\n * - Multi-column link sections\n * - Copyright text\n * - Social media icons\n * - Responsive layout\n */\nfunction Footer({ sections, copyright, social, className = '', marginX = 'sm' }: Readonly<FooterProps>) {\n return (\n <footer className={`border-t border-border bg-muted/20 ${className}`}>\n <Container marginX={marginX}>\n {sections && sections.length > 0 && (\n <div className=\"py-12 md:py-16\">\n <Grid itemSize=\"xs\" maxCols={4} gap=\"lg\">\n {sections.map((section, index) => (\n <div key={index}>\n <h3 className=\"font-semibold text-foreground mb-4\">{section.title}</h3>\n <ul className=\"space-y-3\">\n {section.links.map((link, linkIndex) => (\n <li key={linkIndex}>\n <Link\n href={link.href}\n external={link.external}\n className=\"text-sm text-muted hover:text-foreground transition-colors\"\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </Grid>\n </div>\n )}\n\n <div\n className={`${sections && sections.length > 0 ? 'border-t border-border' : ''} py-6 flex flex-col md:flex-row items-center justify-between gap-4`}\n >\n {copyright && (\n <Text hasMargin variant=\"muted\" className=\"text-sm text-center md:text-left\">\n {copyright}\n </Text>\n )}\n {social && <div className=\"flex items-center space-x-4\">{social}</div>}\n </div>\n </Container>\n </footer>\n );\n}\n\nFooter.displayName = 'Footer';\n\nexport default Footer;\n","/**\n * PageTransition Component\n *\n * ARCHITECTURE NOTE:\n * This is the centralized transition component for Hydn UI.\n * It replaces custom CSS transitions and ensures consistency across the library.\n *\n * Components using PageTransition:\n * - Tabs component (for tab content switching)\n * - App layouts (for page route transitions)\n *\n * ❌ DON'T: Create new custom transition CSS classes\n * ✅ DO: Use this component for any transition needs\n */\n\nimport React from 'react';\n\nexport interface PageTransitionProps {\n /** Page content */\n children: React.ReactNode;\n /** Animation duration in milliseconds */\n duration?: number;\n /** Animation type */\n type?: 'fade' | 'slide' | 'scale' | 'none';\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * PageTransition - Centralized transition component for smooth animations\n *\n * The standard way to add animated transitions in Hydn UI.\n * Use this component instead of custom CSS animations for consistency.\n *\n * Features:\n * - Multiple animation types (fade, slide, scale)\n * - Customizable duration\n * - Lightweight CSS animations using Tailwind's animate-in utilities\n * - Accessible (respects prefers-reduced-motion)\n * - Already used internally by Tabs component\n *\n * @example\n * ```tsx\n * // Basic fade transition\n * <PageTransition>\n * <YourPageContent />\n * </PageTransition>\n *\n * // Slide animation\n * <PageTransition type=\"slide\">\n * <YourPageContent />\n * </PageTransition>\n *\n * // Custom duration\n * <PageTransition type=\"fade\" duration={500}>\n * <YourPageContent />\n * </PageTransition>\n *\n * // With React Router\n * <Route path=\"/about\" element={\n * <PageTransition>\n * <AboutPage />\n * </PageTransition>\n * } />\n * ```\n */\nexport const PageTransition: React.FC<PageTransitionProps> = ({\n children,\n duration = 300,\n type = 'fade',\n className = ''\n}) => {\n const [isVisible, setIsVisible] = React.useState(false);\n\n // Trigger animation on mount with slight delay for smoother effect\n React.useEffect(() => {\n // Double RAF for better reliability and smoother start\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setIsVisible(true);\n });\n });\n }, []);\n\n // Animation class mapping - using standard CSS transitions for reliability\n const getAnimationStyles = () => {\n if (type === 'none') return '';\n\n // Use ease-out for smoother, more natural animation\n const baseClasses = 'transition-all ease-out';\n const durationClass = `duration-[${duration}ms]`;\n\n if (!isVisible) {\n // Initial state (hidden)\n switch (type) {\n case 'fade':\n return `${baseClasses} ${durationClass} opacity-0 translate-y-1`;\n case 'slide':\n return `${baseClasses} ${durationClass} opacity-0 translate-y-3`;\n case 'scale':\n return `${baseClasses} ${durationClass} opacity-0 scale-[0.99]`;\n default:\n return `${baseClasses} ${durationClass} opacity-0 translate-y-1`;\n }\n } else {\n // Animated state (visible)\n return `${baseClasses} ${durationClass} opacity-100 translate-y-0 scale-100`;\n }\n };\n\n return <div className={`${getAnimationStyles()} ${className}`.trim()}>{children}</div>;\n};\n\nPageTransition.displayName = 'PageTransition';\n\nexport default PageTransition;\n","import { ReactNode } from 'react';\n\nexport type BreadcrumbItem = {\n /** Display text for the breadcrumb */\n label: string;\n /** Optional navigation link (last item typically has no href) */\n href?: string;\n};\n\nexport type BreadcrumbsProps = {\n /** Array of breadcrumb items to display in hierarchical order */\n items: BreadcrumbItem[];\n /** Custom separator to display between items (defaults to '/') */\n separator?: ReactNode;\n /** Additional CSS classes for the breadcrumb container */\n className?: string;\n};\n\n/**\n * Breadcrumbs - Hierarchical path display\n */\nfunction Breadcrumbs({ items, separator = '/', className = '' }: Readonly<BreadcrumbsProps>) {\n return (\n <nav aria-label=\"Breadcrumb\" className={className}>\n <ol className=\"flex items-center space-x-2 text-sm\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const key = item.href || item.label;\n\n return (\n <li key={key} className=\"flex items-center\">\n {item.href && !isLast ? (\n <a\n href={item.href}\n className=\"text-primary hover:text-primary/80 hover:underline cursor-pointer transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-ring rounded px-1 -mx-1\"\n >\n {item.label}\n </a>\n ) : (\n <span className={isLast ? 'text-foreground font-medium' : 'text-muted-foreground'}>{item.label}</span>\n )}\n {!isLast && (\n <span className=\"mx-2 text-muted-foreground select-none\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n\nBreadcrumbs.displayName = 'Breadcrumbs';\n\nexport default Breadcrumbs;\n","import React, { useState, useRef, useEffect, useLayoutEffect, useCallback, createContext, useContext } from 'react';\nimport Button, { type ButtonProps } from '../../forms/button/button';\nimport { Icon } from '@/components/system/icon';\nimport { gapSizes, Size } from '@/theme/size-tokens';\n\nexport type DropdownTriggerProps = {\n /** Main label text */\n title: string;\n /** Optional secondary text shown below the title */\n subtitle?: string;\n /** Optional leading icon */\n icon?: string;\n /** Size of the leading icon */\n iconSize?: Size;\n /** Hide the dropdown chevron indicator */\n hideChevron?: boolean;\n /** Size variant for the trigger button */\n triggerSize?: ButtonProps['size'];\n};\n\nexport type DropdownProps = {\n /** Trigger configuration - rendered as an accessible Button */\n trigger: DropdownTriggerProps;\n children: React.ReactNode;\n className?: string;\n align?: 'start' | 'center' | 'end';\n autoClose?: boolean; // close on item select\n /** Size of the dropdown panel and items */\n size?: ButtonProps['size'];\n /** Button variant for the trigger */\n variant?: ButtonProps['variant'];\n /** Button style for the trigger */\n buttonStyle?: ButtonProps['style'];\n /** Minimum width for the dropdown menu and all items (e.g., '200px', '16rem') */\n minWidth?: string;\n /** Maximum width for the dropdown menu (e.g., '400px', '24rem') */\n maxWidth?: string;\n /** Additional styles for the dropdown menu */\n menuClassName?: string;\n};\n\ntype DropdownContextValue = {\n requestClose: () => void;\n autoClose: boolean;\n registerItem?: (el: HTMLButtonElement | null, index?: number) => void;\n minWidth?: string;\n};\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null);\n\nexport function useDropdown() {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error('useDropdown must be used within <Dropdown>');\n return ctx;\n}\n\n/**\n * Dropdown component with click-outside handling\n */\nfunction Dropdown({\n trigger,\n children,\n className = '',\n align = 'start',\n autoClose = true,\n size = 'md',\n variant = 'neutral',\n buttonStyle = 'solid',\n minWidth,\n maxWidth,\n menuClassName = ''\n}: Readonly<DropdownProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const itemsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n\n const close = useCallback(() => setIsOpen(false), []);\n const open = useCallback(() => setIsOpen(true), []);\n\n // Handle keyboard navigation\n useEffect(() => {\n if (!isOpen) return;\n const handleKey = (e: KeyboardEvent) => {\n if (!menuRef.current) return;\n const itemEls = itemsRef.current.filter(Boolean);\n if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {\n e.preventDefault();\n if (itemEls.length === 0) return;\n let nextIndex = activeIndex;\n if (e.key === 'ArrowDown') nextIndex = (activeIndex + 1) % itemEls.length;\n if (e.key === 'ArrowUp') nextIndex = (activeIndex - 1 + itemEls.length) % itemEls.length;\n if (e.key === 'Home') nextIndex = 0;\n if (e.key === 'End') nextIndex = itemEls.length - 1;\n setActiveIndex(nextIndex);\n itemEls[nextIndex]?.focus();\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n close();\n triggerRef.current?.focus();\n }\n if (e.key === 'Tab') {\n // trap focus\n e.preventDefault();\n const itemEls = itemsRef.current.filter(Boolean);\n if (itemEls.length === 0) return;\n const dir = e.shiftKey ? -1 : 1;\n const nextIndex = (activeIndex + dir + itemEls.length) % itemEls.length;\n setActiveIndex(nextIndex);\n itemEls[nextIndex]?.focus();\n }\n };\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [isOpen, activeIndex, close]);\n\n // Outside click close\n useEffect(() => {\n if (!isOpen) return;\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n close();\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, close]);\n\n // Auto-focus first item on open (useLayoutEffect to avoid cascading re-renders)\n useLayoutEffect(() => {\n let raf: number | undefined;\n if (isOpen) {\n const itemEls = itemsRef.current.filter(Boolean);\n if (itemEls.length) {\n // schedule the focus and state update to avoid cascading synchronous renders\n raf = requestAnimationFrame(() => {\n setActiveIndex(0);\n itemEls[0]?.focus();\n });\n }\n } else {\n raf = requestAnimationFrame(() => setActiveIndex(-1));\n }\n return () => {\n if (raf) cancelAnimationFrame(raf);\n };\n }, [isOpen]);\n\n const registerItem = useCallback((el: HTMLButtonElement | null, index?: number) => {\n // If index provided, set at index; otherwise push/remove based on presence\n if (typeof index === 'number' && index >= 0) {\n itemsRef.current[index] = el;\n return;\n }\n if (el === null) {\n // remove element references\n itemsRef.current = itemsRef.current.filter((x) => x !== el && x != null);\n return;\n }\n // Push new element at the end if not already present\n if (!itemsRef.current.includes(el)) itemsRef.current.push(el);\n }, []);\n\n const { title, subtitle, icon, iconSize = 'md', hideChevron, triggerSize = 'md' } = trigger;\n\n const iconNode = icon ? <Icon name={icon} size={iconSize} color=\"currentColor\" /> : null;\n\n return (\n <div ref={dropdownRef} className={`relative ${className}`}>\n <Button\n ref={triggerRef}\n variant={variant}\n style={buttonStyle}\n onClick={() => (isOpen ? close() : open())}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n aria-controls={isOpen ? 'dropdown-menu' : undefined}\n size={triggerSize}\n >\n <span className={`flex items-center ${gapSizes[iconSize]}`}>\n {iconNode && <span className=\"shrink-0\">{iconNode}</span>}\n {(title || subtitle) && (\n <span className={subtitle ? 'text-left' : ''}>\n <span className={subtitle ? 'block font-semibold' : ''}>{title}</span>\n {subtitle && <span className=\"block text-xs text-muted-foreground font-normal\">{subtitle}</span>}\n </span>\n )}\n </span>\n {!hideChevron && (\n <Icon\n name=\"chevron-down\"\n size=\"xs\"\n className={`ml-1 transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}\n />\n )}\n </Button>\n {isOpen && (\n <DropdownContext.Provider value={{ requestClose: close, autoClose, registerItem, minWidth }}>\n <div\n id=\"dropdown-menu\"\n ref={menuRef}\n className={`absolute mt-2 bg-popover text-popover-foreground border border-border rounded-md shadow-lg z-50 ${size === 'sm' ? 'min-w-[140px] text-xs py-1' : 'min-w-[180px]'} max-h-80 overflow-y-auto origin-top animate-scaleIn focus:outline-none ${align === 'start' ? 'left-0' : align === 'end' ? 'right-0' : 'left-1/2 -translate-x-1/2'} ${menuClassName}`}\n style={{\n minWidth: minWidth || undefined,\n maxWidth: maxWidth || undefined\n }}\n role=\"menu\"\n aria-orientation=\"vertical\"\n tabIndex={-1}\n >\n {children}\n </div>\n </DropdownContext.Provider>\n )}\n </div>\n );\n}\n\nDropdown.displayName = 'Dropdown';\n\nexport default Dropdown;\n\n// DropdownItem component (simple abstraction)\nexport type DropdownItemProps = {\n children: React.ReactNode;\n onSelect?: () => void;\n /** Semantic color variant */\n variant?: 'default' | 'destructive' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\n disabled?: boolean;\n className?: string;\n /** Optional muted description below main label */\n description?: string;\n /** Leading icon */\n icon?: string;\n iconSize?: Size;\n /** Trailing icon (e.g., checkmark for selected items) */\n endIcon?: string;\n /** Inherit size from dropdown or override */\n size?: 'sm' | 'md';\n __dropdownIndex?: number; // injected\n __registerItem?: (el: HTMLButtonElement | null, index: number) => void; // injected (deprecated)\n};\n\nexport function DropdownItem({\n children,\n onSelect,\n variant = 'default',\n disabled = false,\n className = '',\n description,\n icon,\n iconSize = 'md',\n endIcon,\n size = 'md'\n}: Readonly<DropdownItemProps>) {\n const ctx = useContext(DropdownContext);\n const base = `${size === 'sm' ? 'text-[11px] leading-tight px-2.5 py-1.5 rounded-md' : 'px-3.5 py-2 rounded-md'} w-full text-left select-none transition-colors outline-none disabled:opacity-40 disabled:pointer-events-none`;\n const focus =\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-popover';\n const palette: Record<string, string> = {\n default: 'text-foreground/90 hover:bg-muted active:bg-muted/80',\n primary: 'text-primary hover:bg-primary/15 active:bg-primary/25 focus-visible:ring-primary',\n secondary: 'text-secondary hover:bg-secondary/15 active:bg-secondary/25 focus-visible:ring-secondary',\n accent: 'text-accent hover:bg-accent/15 active:bg-accent/25 focus-visible:ring-accent',\n info: 'text-info hover:bg-info/15 active:bg-info/25 focus-visible:ring-info',\n success: 'text-success hover:bg-success/15 active:bg-success/25 focus-visible:ring-success',\n warning: 'text-warning hover:bg-warning/18 active:bg-warning/28 focus-visible:ring-warning',\n error: 'text-error hover:bg-error/15 active:bg-error/25 focus-visible:ring-error',\n destructive: 'text-destructive hover:bg-destructive/15 active:bg-destructive/25 focus-visible:ring-destructive'\n };\n const variantClasses = palette[variant] || palette.default;\n\n // Determine layout: if we have icons, use horizontal layout, otherwise vertical\n const hasIcons = icon || endIcon;\n const iconNode = icon ? <Icon name={icon} size={iconSize} color=\"currentColor\" /> : null;\n const endIconNode = endIcon ? <Icon name={endIcon} size={iconSize} color=\"currentColor\" /> : null;\n\n return (\n <button\n ref={(el) => ctx?.registerItem?.(el)}\n role=\"menuitem\"\n type=\"button\"\n disabled={disabled}\n onClick={() => {\n if (disabled) return;\n onSelect?.();\n if (ctx?.autoClose) ctx.requestClose();\n }}\n className={`${base} ${focus} ${variantClasses} ${hasIcons ? 'flex flex-row items-center gap-2.5' : 'flex flex-col'} ${className} cursor-pointer`}\n >\n {iconNode && <span className={`shrink-0 ${size === 'sm' ? 'text-[14px]' : 'text-[16px]'}`}>{iconNode}</span>}\n <span className=\"flex-1 min-w-0\">\n <span className={`block ${size === 'sm' ? 'font-medium' : 'font-medium'} leading-snug`}>{children}</span>\n {description && (\n <span className={`block ${size === 'sm' ? 'text-[10px]' : 'text-xs'} text-foreground/60 mt-0.5 line-clamp-2`}>\n {description}\n </span>\n )}\n </span>\n {endIconNode && (\n <span className={`shrink-0 ${size === 'sm' ? 'text-[14px]' : 'text-[16px]'}`}>{endIconNode}</span>\n )}\n </button>\n );\n}\n","import React from 'react';\n\nexport type NavProps = {\n /** Navigation items to render (typically NavbarLink or other nav elements) */\n children: React.ReactNode;\n /** Additional CSS classes (kept for backward compatibility) */\n className?: string;\n /** Accessibility label */\n ariaLabel?: string;\n /** Layout direction for the nav - horizontal (default) or vertical */\n direction?: 'horizontal' | 'vertical';\n /** Spacing variant between children */\n spacing?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n /** Alignment of items along cross axis */\n align?: 'start' | 'center' | 'end' | 'stretch';\n};\n\n/**\n * Accessible navigation component\n */\nfunction Nav({\n children,\n className = '',\n ariaLabel = 'Main navigation',\n direction = 'horizontal',\n spacing = 'md',\n align = 'center'\n}: Readonly<NavProps>) {\n const spacingClasses: Record<NonNullable<NavProps['spacing']>, string> = {\n none: 'gap-0',\n sm: 'gap-3 sm:gap-2',\n md: 'gap-5 sm:gap-4',\n lg: 'gap-7 sm:gap-6',\n xl: 'gap-10 sm:gap-8'\n };\n\n const alignClasses: Record<NonNullable<NavProps['align']>, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch'\n };\n\n const directionClass = direction === 'horizontal' ? 'flex-row' : 'flex-col';\n const spacingClass = spacingClasses[spacing];\n const alignClass = alignClasses[align as NonNullable<NavProps['align']>];\n\n return (\n <nav aria-label={ariaLabel} className={`flex ${directionClass} ${spacingClass} ${alignClass} ${className}`}>\n {children}\n </nav>\n );\n}\n\nNav.displayName = 'Nav';\n\nexport default Nav;\n","import React, { ReactNode, ReactElement } from 'react';\n\nexport type SidebarProps = {\n /** Navigation items to render (typically NavbarLink or anchor elements) */\n children: ReactNode;\n /** Additional CSS classes for the sidebar container */\n className?: string;\n /** Width of the sidebar (e.g., '16rem', '4rem') */\n width?: string;\n};\n\n/**\n * Sidebar - Vertical navigation with sections\n */\nfunction Sidebar({ children, className = '', width = '16rem' }: Readonly<SidebarProps>) {\n const widthClass = width === '16rem' ? 'w-64' : width === '4rem' ? 'w-16' : '';\n // Enhance children that look like navigation links (have `href`) by\n // cloning them and adding sidebar-specific item classes so showcase\n // pages don't need to set `className` manually.\n const enhancedChildren = React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) return child;\n\n // If the child has an `href` prop (NavbarLink or anchor), append sidebar item classes\n const childProps = (child.props || {}) as Record<string, unknown>;\n if ('href' in childProps) {\n const existing = typeof childProps.className === 'string' ? (childProps.className as string) : '';\n // Ensure sidebar links are full-width and laid out as flex rows with icon+label\n const sidebarItemClasses = 'flex items-center w-full justify-start gap-2 px-2 py-1.5 rounded hover:bg-muted';\n // Wrap the child's content in a flex container so icon + text line up,\n // and set item-level classes (without forcing display:flex on the root link,\n // because NavbarLink includes a 'block' class). This avoids conflicting\n // display utilities while ensuring the visual layout.\n const childInner = (child.props as Record<string, unknown>).children as React.ReactNode;\n // Always wrap the child's content to ensure icon + text are inline\n const wrappedChildren = <span className=\"flex items-center gap-2\">{childInner}</span>;\n\n const newProps = {\n ...(child.props as Record<string, unknown>),\n className: `${existing} ${sidebarItemClasses}`.trim()\n };\n return React.cloneElement(child as ReactElement, newProps as unknown as Record<string, unknown>, wrappedChildren);\n }\n\n return child;\n });\n\n return (\n <nav\n className={`\n ${widthClass || ''}\n bg-card border-r border-border\n flex flex-col\n overflow-hidden\n ${className}\n `.replace(/\\s+/g, ' ')}\n style={!widthClass ? ({ width } as React.CSSProperties) : undefined}\n aria-label=\"Sidebar navigation\"\n >\n <div className=\"flex-1 px-4 py-3 flex flex-col gap-2\">{enhancedChildren}</div>\n </nav>\n );\n}\n\nSidebar.displayName = 'Sidebar';\n\nexport default Sidebar;\n","import { ReactNode } from 'react';\nimport Icon from '../../system/icon/icon';\n\nexport type StepProps = {\n /** Primary text label for the step */\n title: string;\n /** Optional secondary description text */\n description?: string;\n /** Custom icon to display instead of step number */\n icon?: ReactNode;\n /** Current status of the step (auto-determined from currentStep if not set) */\n status?: 'pending' | 'current' | 'completed' | 'error';\n /** Whether this step can be skipped */\n optional?: boolean;\n};\n\nexport type StepperProps = {\n /** Array of step configurations */\n steps: StepProps[];\n /** Zero-based index of the currently active step */\n currentStep: number;\n /** Additional CSS classes for the stepper container */\n className?: string;\n /** Layout direction for the stepper */\n orientation?: 'horizontal' | 'vertical';\n /** Callback fired when a step is clicked (only when clickable is true) */\n onStepClick?: (step: number) => void;\n /** Enable clicking on steps for navigation */\n clickable?: boolean;\n};\n\n/**\n * Stepper - Multi-step progress indicator\n *\n * Features:\n * - Horizontal and vertical orientations\n * - Current, completed, and pending states\n * - Optional steps\n * - Custom icons\n * - Clickable steps (for navigation)\n * - Error states\n *\n * Common uses:\n * - Multi-step forms\n * - Checkout processes\n * - Onboarding flows\n * - Wizards\n */\nfunction Stepper({\n steps,\n currentStep,\n className = '',\n orientation = 'horizontal',\n onStepClick,\n clickable = false\n}: Readonly<StepperProps>) {\n const getStepStatus = (index: number): StepProps['status'] => {\n const step = steps[index];\n if (step.status) return step.status;\n if (index < currentStep) return 'completed';\n if (index === currentStep) return 'current';\n return 'pending';\n };\n\n const renderStep = (step: StepProps, index: number) => {\n const status = getStepStatus(index) || 'pending';\n const isClickable = clickable; // allow clicking any step when clickable enabled\n\n // Status-based styles\n const statusStyles: Record<\n NonNullable<StepProps['status']>,\n {\n circle: string;\n title: string;\n description: string;\n }\n > = {\n pending: {\n circle: 'bg-muted text-muted-foreground border-2 border-muted',\n title: 'text-muted-foreground',\n description: 'text-muted-foreground'\n },\n current: {\n circle: 'bg-primary text-primary-foreground border-2 border-primary',\n title: 'text-foreground font-semibold',\n description: 'text-muted-foreground'\n },\n completed: {\n circle: 'bg-success text-success-foreground border-2 border-success',\n title: 'text-foreground',\n description: 'text-muted-foreground'\n },\n error: {\n circle: 'bg-destructive text-destructive-foreground border-2 border-destructive',\n title: 'text-destructive',\n description: 'text-destructive'\n }\n };\n\n const styles = statusStyles[status];\n\n const handleClick = () => {\n if (isClickable && onStepClick) {\n onStepClick(index);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (isClickable && onStepClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onStepClick(index);\n }\n };\n\n if (orientation === 'horizontal') {\n return (\n <div\n key={index}\n className={`flex-1 flex flex-col items-center ${isClickable ? 'cursor-pointer' : ''}`}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role={isClickable ? 'button' : undefined}\n tabIndex={isClickable ? 0 : undefined}\n aria-label={`Step ${index + 1}: ${step.title}`}\n aria-current={status === 'current' ? 'step' : undefined}\n >\n {/* Step Number/Icon */}\n <div className=\"relative flex items-center w-full\">\n {/* Connector Line (Left) */}\n {index > 0 && (\n <div\n className={`h-0.5 flex-1 ${status === 'completed' || status === 'current' ? 'bg-success' : 'bg-muted'}`}\n />\n )}\n\n {/* Circle */}\n <div\n className={`\n relative z-10 flex items-center justify-center\n w-10 h-10 rounded-full\n transition-[background-color,border-color] duration-300 ease-in-out\n ${styles.circle}\n `}\n >\n {status === 'completed' ? (\n <Icon name=\"check\" size=\"sm\" />\n ) : step.icon ? (\n step.icon\n ) : (\n <span className=\"text-sm font-semibold\">{index + 1}</span>\n )}\n </div>\n\n {/* Connector Line (Right) */}\n {index < steps.length - 1 && (\n <div\n className={`h-0.5 flex-1 transition-colors duration-300 ease-in-out ${status === 'completed' ? 'bg-success' : 'bg-muted'}`}\n />\n )}\n </div>\n\n {/* Label */}\n <div className={`mt-3 text-center text-sm transition-colors duration-300 ease-in-out ${styles.title}`}>\n {step.title}\n {step.optional && <span className=\"ml-1 text-xs text-muted-foreground\">(Optional)</span>}\n {step.description && (\n <p className={`text-xs mt-1 transition-colors duration-300 ease-in-out ${styles.description}`}>\n {step.description}\n </p>\n )}\n </div>\n </div>\n );\n }\n\n // Vertical orientation\n return (\n <div\n key={index}\n className={`flex gap-4 ${index < steps.length - 1 ? 'pb-8' : ''} ${isClickable ? 'cursor-pointer' : ''}`}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role={isClickable ? 'button' : undefined}\n tabIndex={isClickable ? 0 : undefined}\n aria-label={`Step ${index + 1}: ${step.title}`}\n aria-current={status === 'current' ? 'step' : undefined}\n >\n {/* Icon Column */}\n <div className=\"flex flex-col items-center\">\n {/* Circle */}\n <div\n className={`\n flex items-center justify-center\n w-10 h-10 rounded-full shrink-0\n transition-[background-color,border-color] duration-300 ease-in-out\n ${styles.circle}\n `}\n >\n {status === 'completed' ? (\n <Icon name=\"check\" size=\"sm\" />\n ) : step.icon ? (\n step.icon\n ) : (\n <span className=\"text-sm font-semibold\">{index + 1}</span>\n )}\n </div>\n\n {/* Connector Line */}\n {index < steps.length - 1 && (\n <div\n className={`w-0.5 flex-1 mt-2 transition-colors duration-300 ease-in-out ${status === 'completed' ? 'bg-success' : 'bg-muted'}`}\n />\n )}\n </div>\n\n {/* Content Column */}\n <div className={`flex-1 pt-2 text-base transition-colors duration-300 ease-in-out ${styles.title}`}>\n {step.title}\n {step.optional && <span className=\"ml-2 text-xs text-muted-foreground\">(Optional)</span>}\n {step.description && (\n <p className={`text-sm mt-1 transition-colors duration-300 ease-in-out ${styles.description}`}>\n {step.description}\n </p>\n )}\n </div>\n </div>\n );\n };\n\n return (\n <div\n className={`\n ${orientation === 'horizontal' ? 'flex items-start' : 'flex flex-col'}\n ${className}\n `}\n >\n {steps.map((step, index) => renderStep(step, index))}\n </div>\n );\n}\n\nStepper.displayName = 'Stepper';\n\nexport default Stepper;\n","import React, { useState } from 'react';\nimport PageTransition from '../../layout/page-transition/page-transition';\n\nexport type Tab = {\n /** Unique identifier for the tab */\n id: string;\n /** Display text shown in the tab button */\n label: string;\n /** Content to render when this tab is active */\n content: React.ReactNode;\n};\n\nexport type TabsProps = {\n /** Array of tab configurations with id, label, and content */\n tabs: Tab[];\n /** ID of the tab to display initially (defaults to first tab) */\n defaultTab?: string;\n /** Additional CSS classes for the tabs container */\n className?: string;\n /** Accessibility label for the tab list */\n ariaLabel?: string;\n /** Remove the bottom border from the tab list */\n noBorder?: boolean;\n};\n\n/**\n * Accessible Tabs component with animated tab switching using PageTransition\n */\nfunction Tabs({ tabs, defaultTab, className = '', ariaLabel = 'Tabs', noBorder = false }: Readonly<TabsProps>) {\n const [activeTab, setActiveTab] = useState(defaultTab || tabs[0]?.id);\n\n return (\n <div className={className}>\n <div role=\"tablist\" aria-label={ariaLabel} className={`flex ${noBorder ? '' : 'border-b-2 border-border/50'}`}>\n {tabs.map((tab) => (\n <button\n key={tab.id}\n role=\"tab\"\n aria-selected={activeTab === tab.id}\n aria-controls={`panel-${tab.id}`}\n id={`tab-${tab.id}`}\n onClick={() => setActiveTab(tab.id)}\n className={`px-4 py-3 font-medium cursor-pointer transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 relative ${\n activeTab === tab.id\n ? 'text-primary after:absolute after:bottom-0 after:left-0 after:right-0 after:h-0.5 after:bg-primary after:rounded-t after:transition-all after:duration-200'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted/50'\n }`}\n >\n {tab.label}\n </button>\n ))}\n </div>\n {tabs.map((tab) => (\n <div\n key={tab.id}\n role=\"tabpanel\"\n id={`panel-${tab.id}`}\n aria-labelledby={`tab-${tab.id}`}\n hidden={activeTab !== tab.id}\n >\n {activeTab === tab.id && (\n <PageTransition type=\"fade\" duration={150}>\n <div className=\"pt-6\">{tab.content}</div>\n </PageTransition>\n )}\n </div>\n ))}\n </div>\n );\n}\n\nTabs.displayName = 'Tabs';\n\nexport default Tabs;\n","export type PaginationProps = {\n /** The currently active page number */\n currentPage: number;\n /** Total number of pages available */\n totalPages: number;\n /** Callback fired when a page is selected */\n onPageChange: (page: number) => void;\n /** Number of page buttons to show on each side of current page (defaults to 1) */\n siblingCount?: number;\n /** Additional CSS classes for the pagination container */\n className?: string;\n};\n\n/**\n * Pagination - Page controls with active state\n */\nfunction Pagination({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n className = ''\n}: Readonly<PaginationProps>) {\n const getPageNumbers = () => {\n const pages: (number | string)[] = [];\n const leftSibling = Math.max(currentPage - siblingCount, 1);\n const rightSibling = Math.min(currentPage + siblingCount, totalPages);\n\n if (leftSibling > 2) {\n pages.push(1, '...');\n } else {\n for (let i = 1; i < leftSibling; i++) {\n pages.push(i);\n }\n }\n\n for (let i = leftSibling; i <= rightSibling; i++) {\n pages.push(i);\n }\n\n if (rightSibling < totalPages - 1) {\n pages.push('...', totalPages);\n } else {\n for (let i = rightSibling + 1; i <= totalPages; i++) {\n pages.push(i);\n }\n }\n\n return pages;\n };\n\n return (\n <nav aria-label=\"Pagination\" className={className}>\n <ul className=\"flex items-center space-x-1\">\n <li>\n <button\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage === 1}\n className=\"px-3 py-2 rounded-lg border border-border hover:bg-accent hover:text-accent-foreground transition-colors duration-200 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-ring\"\n aria-label=\"Previous page\"\n >\n ←\n </button>\n </li>\n {getPageNumbers().map((page, index) => {\n const key = typeof page === 'number' ? `page-${page}` : `ellipsis-${index}`;\n return (\n <li key={key}>\n {typeof page === 'number' ? (\n <button\n onClick={() => onPageChange(page)}\n className={`px-3 py-2 rounded-lg border cursor-pointer transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-ring ${\n page === currentPage\n ? 'bg-primary text-primary-foreground border-primary shadow-sm'\n : 'border-border hover:bg-accent hover:text-accent-foreground hover:border-accent'\n }`}\n aria-label={`Page ${page}`}\n aria-current={page === currentPage ? 'page' : undefined}\n >\n {page}\n </button>\n ) : (\n <span className=\"px-3 py-2 text-muted-foreground\">...</span>\n )}\n </li>\n );\n })}\n <li>\n <button\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n className=\"px-3 py-2 rounded-lg border border-border hover:bg-accent hover:text-accent-foreground transition-colors duration-200 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-ring\"\n aria-label=\"Next page\"\n >\n →\n </button>\n </li>\n </ul>\n </nav>\n );\n}\n\nPagination.displayName = 'Pagination';\n\nexport default Pagination;\n","import { ReactNode } from 'react';\n\nimport Container from '../../layout/container/container';\n\nexport type NavbarProps = {\n /** Brand logo or text to display on the left side */\n brand?: ReactNode;\n /** Navigation links or items to display in the center */\n children: ReactNode;\n /** Enable sticky positioning at the top of viewport */\n sticky?: boolean;\n /** Additional CSS classes for the navbar container */\n className?: string;\n /** Action buttons or elements to display on the right side */\n actions?: ReactNode;\n /** Visual style variant for the navbar background */\n appearance?: 'solid' | 'blur' | 'transparent';\n /** Border configuration for top and/or bottom edges */\n border?: 'none' | 'bottom' | 'top' | 'both';\n};\n\n/**\n * Navbar Component - Responsive navigation\n * - Sticky positioning option\n * - Brand logo section\n * - Action buttons area\n * - Fully responsive\n * - Configurable container size\n * - Appearance modes: solid, blur (frosted glass), transparent\n * - Configurable borders: none, bottom, top, or both\n */\nfunction Navbar({\n brand,\n children,\n sticky = true,\n className = '',\n actions,\n appearance = 'solid',\n border = 'none'\n}: Readonly<NavbarProps>) {\n // Appearance styles\n const appearanceClasses = {\n solid: 'bg-background shadow-sm',\n blur: 'bg-background/70 backdrop-blur-md supports-[backdrop-filter]:bg-background/60 border border-border/60',\n transparent: 'bg-transparent'\n } as const;\n\n const borderClasses = {\n none: '',\n bottom: 'border-b border-border',\n top: 'border-t border-border',\n both: 'border-y border-border'\n };\n\n return (\n <nav\n data-appearance={appearance}\n className={`${sticky ? 'sticky top-0 z-50' : ''} ${appearanceClasses[appearance]} ${borderClasses[border]} ${className}`}\n >\n <Container marginX=\"sm\" size=\"full\">\n <div className=\"flex items-center justify-between h-14 md:h-16 px-3 md:px-0\">\n {/* Brand */}\n {brand && <div className=\"shrink-0\">{brand}</div>}\n\n {/* Navigation */}\n <div className=\"hidden md:flex md:items-center md:space-x-6 md:flex-1 md:ml-10\">{children}</div>\n\n {/* Actions */}\n {actions && <div className=\"flex items-center gap-1 md:gap-2 lg:gap-4\">{actions}</div>}\n </div>\n </Container>\n </nav>\n );\n}\n\nNavbar.displayName = 'Navbar';\n\nexport default Navbar;\n","import { ReactNode } from 'react';\nimport { Link } from 'react-router-dom';\n\nexport type NavbarBrandProps = {\n /** Brand content (typically logo image or text) */\n children: ReactNode;\n /** Optional navigation link URL */\n href?: string;\n /** Whether the link points to an external site */\n external?: boolean;\n /** Click handler for interactive brand (when not using href) */\n onClick?: () => void;\n /** Additional CSS classes for the brand text */\n className?: string;\n};\n\n/**\n * NavbarBrand Component - Brand/logo section for Navbar\n * Uses React Router Link for internal navigation\n */\nfunction NavbarBrand({ children, href, external = false, onClick, className = '' }: Readonly<NavbarBrandProps>) {\n const content = <span className={`text-lg md:text-xl font-bold ${className}`}>{children}</span>;\n\n const linkClassName = 'no-underline text-foreground hover:text-primary transition-colors';\n\n if (href) {\n // External links use regular anchor tag\n if (external) {\n return (\n <a href={href} className={linkClassName} target=\"_blank\" rel=\"noopener noreferrer\">\n {content}\n </a>\n );\n }\n\n // Internal links use React Router Link\n return (\n <Link to={href} className={linkClassName}>\n {content}\n </Link>\n );\n }\n\n if (onClick) {\n return (\n <button onClick={onClick} className={linkClassName}>\n {content}\n </button>\n );\n }\n\n return content;\n}\n\nNavbarBrand.displayName = 'NavbarBrand';\n\nexport default NavbarBrand;\n","import { ReactNode } from 'react';\nimport { NavLink } from 'react-router-dom';\n\nexport type NavbarLinkProps = {\n /** Navigation destination URL */\n href: string;\n /** Link text or content */\n children: ReactNode;\n /** Whether the link points to an external site */\n external?: boolean;\n /** Additional CSS classes for the link */\n className?: string;\n /** Match only exact path for active state (React Router NavLink prop) */\n end?: boolean;\n};\n\n/**\n * NavbarLink Component - Navigation link for Navbar\n * Uses React Router's NavLink for automatic active state management\n */\nfunction NavbarLink({ href, children, external = false, className = '', end = false }: Readonly<NavbarLinkProps>) {\n const baseClassName = `block md:inline-block py-2 md:py-0 font-medium transition-colors no-underline ${className}`;\n\n // External links use regular anchor tag\n if (external) {\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`${baseClassName} text-foreground hover:text-primary`}\n >\n {children}\n </a>\n );\n }\n\n // Hash anchors should be plain anchors (in-page navigation), not NavLink\n if (href.startsWith('#')) {\n return (\n <a href={href} className={`${baseClassName} text-foreground hover:text-primary`}>\n {children}\n </a>\n );\n }\n\n // Internal links use React Router NavLink with automatic active state\n return (\n <NavLink\n to={href}\n end={end}\n className={({ isActive }) =>\n `${baseClassName} ${\n isActive ? 'text-primary font-semibold border-b-2 border-primary' : 'text-foreground hover:text-primary'\n }`\n }\n >\n {children}\n </NavLink>\n );\n}\n\nNavbarLink.displayName = 'NavbarLink';\n\nexport default NavbarLink;\n","import Icon from '../../system/icon/icon';\n\nexport interface NavbarToggleProps {\n /**\n * Whether the mobile menu is open (for mobile view)\n */\n mobileMenuOpen?: boolean;\n /**\n * Whether the sidebar is collapsed (for desktop sidebar view)\n */\n sidebarCollapsed?: boolean;\n /**\n * Click handler for mobile menu toggle (mobile view)\n */\n onMobileMenuToggle?: () => void;\n /**\n * Click handler for sidebar toggle (desktop view)\n */\n onSidebarToggle?: () => void;\n /**\n * Optional custom className\n */\n className?: string;\n}\n\n/**\n * NavbarToggle - A responsive toggle button that switches between mobile menu and sidebar collapse icons\n *\n * On mobile (< lg): Shows hamburger menu / close icon and calls onMobileMenuToggle\n * On desktop (>= lg): Shows sidebar expand / collapse icon and calls onSidebarToggle\n */\nfunction NavbarToggle({\n mobileMenuOpen = false,\n sidebarCollapsed = false,\n onMobileMenuToggle,\n onSidebarToggle,\n className = ''\n}: NavbarToggleProps) {\n return (\n <>\n {/* Mobile toggle - visible on lg breakpoint and below */}\n <button\n onClick={onMobileMenuToggle}\n className={`lg:hidden flex items-center justify-center w-9 h-9 md:w-8 md:h-8 rounded text-foreground/70 hover:text-foreground hover:bg-muted transition-colors focus:outline-none focus:ring-2 focus:ring-ring ${className}`.trim()}\n aria-label={mobileMenuOpen ? 'Close menu' : 'Open menu'}\n type=\"button\"\n >\n {mobileMenuOpen ? <Icon name=\"x\" size=\"sm\" /> : <Icon name=\"menu-2\" size=\"sm\" />}\n </button>\n\n {/* Desktop toggle - visible on lg breakpoint and above */}\n <button\n onClick={onSidebarToggle}\n className={`hidden lg:flex items-center justify-center w-8 h-8 rounded text-foreground/70 hover:text-foreground hover:bg-muted transition-colors focus:outline-none focus:ring-2 focus:ring-ring ${className}`.trim()}\n aria-label={sidebarCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n type=\"button\"\n >\n {sidebarCollapsed ? (\n <Icon name=\"layout-sidebar-right-expand\" size=\"sm\" />\n ) : (\n <Icon name=\"layout-sidebar-right-collapse\" size=\"sm\" />\n )}\n </button>\n </>\n );\n}\n\nNavbarToggle.displayName = 'NavbarToggle';\n\nexport default NavbarToggle;\n","import { useLocation } from 'react-router-dom';\nimport Dropdown from '../dropdown/dropdown';\n\nexport type NavDropdownProps = {\n /** The label text for the dropdown trigger */\n label: string;\n /** The path prefix to match for active state (e.g., '/showcase') */\n activePathPrefix: string;\n /** The dropdown menu items */\n children: React.ReactNode;\n /** Optional additional className for the wrapper */\n className?: string;\n};\n\n/**\n * Navigation dropdown with smart active state detection\n * Displays a labeled trigger that highlights when any child route is active\n */\nfunction NavDropdown({ label, activePathPrefix, children, className = '' }: Readonly<NavDropdownProps>) {\n const location = useLocation();\n const isActive = location.pathname.startsWith(activePathPrefix);\n\n return (\n <Dropdown\n trigger={{\n title: label,\n hideChevron: false\n }}\n buttonStyle=\"link\"\n className={`${isActive ? 'text-primary font-semibold' : 'text-foreground hover:text-primary'} ${className}`}\n >\n <div className=\"py-2 flex flex-col\">{children}</div>\n </Dropdown>\n );\n}\n\nNavDropdown.displayName = 'NavDropdown';\n\nexport default NavDropdown;\n","import { NavLink } from 'react-router-dom';\n\nexport type NavDropdownItemProps = {\n /** The route path */\n to: string;\n /** The label text or content */\n children: React.ReactNode;\n /** Additional CSS classes for the menu item */\n className?: string;\n};\n\n/**\n * Navigation dropdown menu item with consistent styling\n */\nfunction NavDropdownItem({ to, children, className = '' }: Readonly<NavDropdownItemProps>) {\n return (\n <NavLink\n to={to}\n className={({ isActive }) =>\n `block px-4 py-2 hover:bg-muted/50 no-underline transition-colors ${\n isActive ? 'text-primary font-semibold bg-muted/30' : 'text-foreground'\n } ${className}`\n }\n >\n {children}\n </NavLink>\n );\n}\n\nNavDropdownItem.displayName = 'NavDropdownItem';\n\nexport default NavDropdownItem;\n","import { useEffect, useState, useCallback, useRef, ReactNode } from 'react';\nimport { gapSizes } from '../../../theme/size-tokens';\n\nexport type ScrollNavItem = {\n id: string;\n label: string;\n};\n\nexport type ScrollNavProps = {\n /** Array of navigation items with id and label */\n items: ScrollNavItem[];\n /** Whether the nav should stick to the top when scrolling */\n sticky?: boolean;\n /** Custom CSS class name for the container */\n className?: string;\n /** Custom CSS class name for the scroll container */\n scrollContainerClassName?: string;\n /** Show border on the bottom */\n showBorder?: boolean;\n /** Background blur effect */\n blur?: boolean;\n /** Spacing between nav items */\n spacing?: 'xs' | 'sm' | 'md' | 'lg';\n /** Custom render function for nav items */\n renderItem?: (item: ScrollNavItem, isActive: boolean, onClick: () => void) => ReactNode;\n /** Callback when active item changes */\n onActiveChange?: (activeId: string) => void;\n /** Root margin for IntersectionObserver (controls when sections are considered \"active\") */\n observerRootMargin?: string;\n /** Threshold for IntersectionObserver */\n observerThreshold?: number;\n};\n\n/**\n * ScrollNav - Scrollable navigation with scroll-spy highlighting\n *\n * A horizontal navigation component that automatically highlights the active section\n * based on scroll position. Includes visual indicators when content overflows.\n *\n * @example\n * ```tsx\n * <ScrollNav\n * items={[\n * { id: 'overview', label: 'Overview' },\n * { id: 'features', label: 'Features' },\n * { id: 'pricing', label: 'Pricing' },\n * ]}\n * sticky\n * />\n * ```\n */\nfunction ScrollNav({\n items,\n sticky = true,\n className = '',\n scrollContainerClassName = '',\n showBorder = true,\n blur = true,\n spacing = 'sm',\n renderItem,\n onActiveChange,\n observerRootMargin = '-100px 0px -50% 0px',\n observerThreshold = 0\n}: Readonly<ScrollNavProps>) {\n const [activeId, setActiveId] = useState<string>(items[0]?.id || '');\n const [showLeftShadow, setShowLeftShadow] = useState(false);\n const [showRightShadow, setShowRightShadow] = useState(false);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n\n const handleClick = useCallback((id: string) => {\n const element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n }, []);\n\n const scrollLeft = useCallback(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n container.scrollBy({ left: -container.clientWidth * 0.75, behavior: 'smooth' });\n }, []);\n\n const scrollRight = useCallback(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n container.scrollBy({ left: container.clientWidth * 0.75, behavior: 'smooth' });\n }, []);\n\n const updateScrollShadows = useCallback(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const { scrollLeft, scrollWidth, clientWidth } = container;\n const isScrollable = scrollWidth > clientWidth;\n\n setShowLeftShadow(isScrollable && scrollLeft > 0);\n setShowRightShadow(isScrollable && scrollLeft < scrollWidth - clientWidth - 20);\n }, []);\n\n // Initial check and on resize\n useEffect(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const resizeObserver = new ResizeObserver(updateScrollShadows);\n resizeObserver.observe(container);\n\n return () => resizeObserver.disconnect();\n }, [updateScrollShadows]);\n\n // Run initial check after mount\n useEffect(() => {\n // Use setTimeout to defer until after paint\n const timer = setTimeout(updateScrollShadows, 0);\n return () => clearTimeout(timer);\n }, [updateScrollShadows]);\n\n // Listen to scroll events\n useEffect(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n container.addEventListener('scroll', updateScrollShadows);\n return () => container.removeEventListener('scroll', updateScrollShadows);\n }, [updateScrollShadows]);\n\n // Scroll spy: update active item based on visible sections\n useEffect(() => {\n const observer = new IntersectionObserver(\n (entries) => {\n // Find the first visible section\n const visibleEntries = entries.filter((entry) => entry.isIntersecting);\n if (visibleEntries.length > 0) {\n // Sort by their position in the items array to get the topmost visible one\n const sortedVisible = visibleEntries.sort((a, b) => {\n const aIndex = items.findIndex((item) => item.id === a.target.id);\n const bIndex = items.findIndex((item) => item.id === b.target.id);\n return aIndex - bIndex;\n });\n const newActiveId = sortedVisible[0].target.id;\n setActiveId(newActiveId);\n onActiveChange?.(newActiveId);\n }\n },\n {\n rootMargin: observerRootMargin,\n threshold: observerThreshold\n }\n );\n\n // Observe all sections\n items.forEach(({ id }) => {\n const element = document.getElementById(id);\n if (element) {\n observer.observe(element);\n }\n });\n\n return () => observer.disconnect();\n }, [items, observerRootMargin, observerThreshold, onActiveChange]);\n\n if (items.length === 0) return null;\n\n const baseClasses = [\n 'relative',\n sticky && 'sticky top-0 z-99',\n blur && 'bg-background/95 backdrop-blur-sm',\n !blur && 'bg-background',\n showBorder && 'border-b border-border',\n className\n ]\n .filter(Boolean)\n .join(' ');\n\n const scrollClasses = [\n 'flex flex-row flex-nowrap items-stretch',\n gapSizes[spacing],\n 'overflow-x-auto scrollbar-thin scrollbar-thumb-border scrollbar-track-transparent',\n scrollContainerClassName\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={baseClasses}>\n {showLeftShadow && (\n <button\n onClick={scrollLeft}\n className={`absolute left-0 top-0 bottom-0 w-8 flex items-center justify-center cursor-pointer ${\n blur ? 'bg-background/95' : 'bg-background'\n } hover:bg-muted transition-colors z-10 border-r border-border`}\n aria-label=\"Scroll left\"\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 className=\"text-foreground/70\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n )}\n\n {/* Left shadow indicator */}\n {showLeftShadow && (\n <div\n className={`absolute left-8 top-0 bottom-0 w-8 ${\n blur ? 'bg-linear-to-r from-background/95' : 'bg-linear-to-r from-background'\n } to-transparent pointer-events-none z-10`}\n />\n )}\n\n {/* Right shadow indicator */}\n {showRightShadow && (\n <div\n className={`absolute right-8 top-0 bottom-0 w-8 ${\n blur ? 'bg-linear-to-l from-background/95' : 'bg-linear-to-l from-background'\n } to-transparent pointer-events-none z-10`}\n />\n )}\n\n {/* Right scroll button */}\n {showRightShadow && (\n <button\n onClick={scrollRight}\n className={`absolute right-0 top-0 bottom-0 w-8 flex items-center justify-center cursor-pointer ${\n blur ? 'bg-background/95' : 'bg-background'\n } hover:bg-muted transition-colors z-10 border-l border-border`}\n aria-label=\"Scroll right\"\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 className=\"text-foreground/70\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n )}\n\n <div ref={scrollContainerRef} className={scrollClasses}>\n {items.map((item) => {\n const isActive = activeId === item.id;\n const onClick = () => handleClick(item.id);\n\n if (renderItem) {\n return <div key={item.id}>{renderItem(item, isActive, onClick)}</div>;\n }\n\n // Default rendering\n return (\n <button\n key={item.id}\n onClick={onClick}\n className={`px-3 py-2 text-sm font-medium whitespace-nowrap rounded-md transition-colors ${\n isActive ? 'bg-primary text-primary-fg' : 'text-foreground/70 hover:text-foreground hover:bg-muted'\n }`}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nScrollNav.displayName = 'ScrollNav';\n\nexport default ScrollNav;\n","import { ReactNode } from 'react';\n\nimport { Size, avatarSizes } from '../../../theme/size-tokens';\n\nexport type AvatarProps = {\n /** URL of the image to display */\n src?: string;\n /** Alternative text for the image (also used for single-character fallback) */\n alt?: string;\n /** Custom fallback content when image is not available */\n fallback?: ReactNode;\n /** Size variant - uses unified size system */\n size?: Size;\n /** Additional CSS classes to apply */\n className?: string;\n};\n\n/**\n * Avatar - User or profile image display\n * Uses unified size system from theme/size-tokens\n */\nfunction Avatar({ src, alt = '', fallback, size = 'md', className = '' }: Readonly<AvatarProps>) {\n const sizeConfig = avatarSizes[size];\n\n let content;\n if (src) {\n content = <img src={src} alt={alt} className=\"w-full h-full object-cover\" />;\n } else if (fallback) {\n content = fallback;\n } else {\n content = <span>{alt.charAt(0).toUpperCase()}</span>;\n }\n\n return (\n <div\n className={`inline-flex items-center justify-center rounded-full bg-muted text-muted-foreground font-medium overflow-hidden ${sizeConfig.classes} ${sizeConfig.text} ${className}`}\n >\n {content}\n </div>\n );\n}\n\nAvatar.displayName = 'Avatar';\n\nexport default Avatar;\n","import { ReactNode } from 'react';\n\nimport { badgeSizes } from '../../../theme/size-tokens';\nimport { StatusColorProp, colorVariants } from '../../../theme/tokens';\n\nexport type BadgeProps = {\n /** Content to display inside the badge */\n children: ReactNode;\n /** Color variant for the badge (default, primary, success, warning, error) */\n variant?: StatusColorProp;\n /** Size - uses unified size system */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS classes to apply */\n className?: string;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\n/**\n * Badge - Small color label for status or categorization\n * Uses unified size system from theme/size-tokens\n */\nfunction Badge({ children, variant = 'default', size = 'md', className = '', ...props }: Readonly<BadgeProps>) {\n const sizeClasses = badgeSizes[size].classes;\n\n return (\n <span\n className={`inline-flex items-center font-medium rounded-full transition-colors ${colorVariants.badge[variant]} ${sizeClasses} ${className}`}\n {...props}\n >\n {children}\n </span>\n );\n}\n\nBadge.displayName = 'Badge';\n\nexport default Badge;\n","import { ReactNode } from 'react';\nimport { statusLabelSizes, type StatusLabelSize } from '../../../theme/size-tokens';\n\nexport type StatusLabelProps = {\n children: ReactNode;\n status?: 'active' | 'inactive' | 'pending' | 'success' | 'error' | 'warning' | 'info';\n size?: StatusLabelSize;\n variant?: 'filled' | 'outlined';\n className?: string;\n};\n\n/**\n * StatusLabel - Badge with a status indicator dot\n *\n * @example\n * ```tsx\n * <StatusLabel status=\"active\">Active</StatusLabel>\n * <StatusLabel status=\"pending\" size=\"sm\">Pending</StatusLabel>\n * <StatusLabel status=\"error\" variant=\"outlined\">Error</StatusLabel>\n * ```\n */\nfunction StatusLabel({\n children,\n status = 'info',\n size = 'md',\n variant = 'filled',\n className = ''\n}: Readonly<StatusLabelProps>) {\n const statusConfig = {\n active: {\n filled: 'bg-success/10 text-success border-success/20',\n outlined: 'bg-transparent text-success border-success',\n dot: 'bg-success'\n },\n inactive: {\n filled: 'bg-muted text-muted-foreground border-border',\n outlined: 'bg-transparent text-muted-foreground border-muted-foreground',\n dot: 'bg-muted-foreground'\n },\n pending: {\n filled: 'bg-warning/10 text-warning border-warning/20',\n outlined: 'bg-transparent text-warning border-warning',\n dot: 'bg-warning'\n },\n success: {\n filled: 'bg-success/10 text-success border-success/20',\n outlined: 'bg-transparent text-success border-success',\n dot: 'bg-success'\n },\n error: {\n filled: 'bg-destructive/10 text-destructive border-destructive/20',\n outlined: 'bg-transparent text-destructive border-destructive',\n dot: 'bg-destructive'\n },\n warning: {\n filled: 'bg-warning/10 text-warning border-warning/20',\n outlined: 'bg-transparent text-warning border-warning',\n dot: 'bg-warning'\n },\n info: {\n filled: 'bg-primary/10 text-primary border-primary/20',\n outlined: 'bg-transparent text-primary border-primary',\n dot: 'bg-primary'\n }\n };\n\n const sizeClasses = statusLabelSizes[size];\n\n return (\n <span\n className={`inline-flex items-center font-medium rounded-full border ${statusConfig[status][variant]} ${sizeClasses.container} ${className}`}\n >\n <span className={`rounded-full ${statusConfig[status].dot} ${sizeClasses.dot}`} />\n {children}\n </span>\n );\n}\n\nStatusLabel.displayName = 'StatusLabel';\n\nexport default StatusLabel;\n","import { ReactNode, MouseEvent } from 'react';\nimport { Icon } from '../../system/icon/icon';\n\nimport { chipSizes, Size } from '../../../theme/size-tokens';\nimport { StatusColorProp, colorVariants } from '../../../theme/tokens';\n\nexport type ChipProps = {\n /** Content to display inside the chip */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Color variant for the chip (default, primary, success, warning, error) */\n variant?: StatusColorProp;\n /** Size - uses unified size system */\n size?: Size;\n /** Callback when the remove/delete button is clicked */\n onRemove?: (e: MouseEvent<HTMLButtonElement>) => void;\n /** Icon name to display at the start of the chip */\n icon?: string;\n /** Whether the chip is disabled */\n disabled?: boolean;\n /** Whether the chip is clickable */\n clickable?: boolean;\n /** Callback when the chip is clicked (requires clickable=true) */\n onClick?: (e: MouseEvent<HTMLDivElement>) => void;\n};\n\n/**\n * Chip - Compact element for tags, filters, and selections\n *\n * Features:\n * - Color variants (default, primary, success, warning, error)\n * - Sizes (sm, md, lg)\n * - Optional remove button\n * - Optional icon\n * - Clickable state\n * - Disabled state\n *\n * Similar to Badge but with interaction (remove, click)\n */\nfunction Chip({\n children,\n className = '',\n variant = 'default',\n size = 'md',\n onRemove,\n icon,\n disabled = false,\n clickable = false,\n onClick\n}: Readonly<ChipProps>) {\n // Size classes from unified system\n const sizeClasses = chipSizes[size].classes;\n\n // Hover/active classes\n const interactiveClasses =\n clickable && !disabled ? 'cursor-pointer hover:opacity-80 active:opacity-60 transition-opacity' : '';\n\n const disabledClasses = disabled ? 'opacity-50 cursor-not-allowed' : '';\n\n const handleClick = (e: MouseEvent<HTMLDivElement>) => {\n if (!disabled && clickable && onClick) {\n onClick(e);\n }\n };\n\n const handleRemove = (e: MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation(); // Don't trigger chip onClick\n if (!disabled && onRemove) {\n onRemove(e);\n }\n };\n\n return (\n <div\n className={`\n inline-flex items-center justify-center\n rounded-full font-medium\n ${sizeClasses}\n ${colorVariants.badge[variant]}\n ${interactiveClasses}\n ${disabledClasses}\n ${className}\n `}\n onClick={handleClick}\n role={clickable ? 'button' : undefined}\n tabIndex={clickable && !disabled ? 0 : undefined}\n onKeyDown={\n clickable && !disabled\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.(e as unknown as MouseEvent<HTMLDivElement>);\n }\n }\n : undefined\n }\n >\n {/* Icon */}\n {icon && (\n <span className=\"shrink-0 flex items-center\">\n <Icon name={icon} size={size} />\n </span>\n )}\n\n {/* Content */}\n <span className=\"truncate\">{children}</span>\n\n {/* Remove button */}\n {onRemove && (\n <button\n type=\"button\"\n onClick={handleRemove}\n disabled={disabled}\n className={`\n shrink-0 flex items-center justify-center\n rounded-full hover:bg-foreground/10\n transition-colors\n ${size === 'sm' ? 'w-3 h-3' : size === 'md' ? 'w-4 h-4' : 'w-5 h-5'}\n ${disabled ? 'cursor-not-allowed' : 'cursor-pointer'}\n `}\n aria-label=\"Remove\"\n >\n <Icon name=\"x\" size={size} />\n </button>\n )}\n </div>\n );\n}\n\nChip.displayName = 'Chip';\n\nexport default Chip;\n","import { useState } from 'react';\n\nimport Button from '../../forms/button/button';\n\nexport type CodeBlockProps = {\n /** Code content to display */\n code: string;\n /** Additional CSS classes to apply */\n className?: string;\n /** Whether to show the copy-to-clipboard button */\n showCopy?: boolean;\n};\n\n/**\n * CodeBlock - Displays formatted code with syntax highlighting and copy functionality\n */\nfunction CodeBlock({ code, className = '', showCopy = true }: Readonly<CodeBlockProps>) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Failed to copy code:', err);\n }\n };\n\n return (\n <div className={`relative group ${className}`}>\n {showCopy && (\n <div className=\"absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <Button\n variant=\"neutral\"\n style=\"ghost\"\n size=\"sm\"\n onClick={handleCopy}\n className=\"text-xs bg-background/80 hover:bg-background\"\n >\n {copied ? '✓ Copied' : 'Copy'}\n </Button>\n </div>\n )}\n <pre className={`bg-muted/50 border rounded-lg p-4 overflow-x-auto text-sm ${showCopy ? 'pr-24' : ''}`}>\n <code className=\"font-mono text-foreground\">{code}</code>\n </pre>\n </div>\n );\n}\n\nCodeBlock.displayName = 'CodeBlock';\n\nexport default CodeBlock;\n","import { ReactNode, HTMLAttributes } from 'react';\n\nexport type TableProps = {\n /** Table rows and sections (TableHeader, TableBody, TableFooter) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Whether to apply striped row styling (alternating background) */\n striped?: boolean;\n /** Whether to show borders around the table */\n bordered?: boolean;\n /** Whether rows have hover effects */\n hoverable?: boolean;\n /** Whether to use compact spacing for dense data */\n compact?: boolean;\n /** Screen-reader accessible caption for the table */\n caption?: string;\n} & HTMLAttributes<HTMLTableElement>;\n\nexport type TableHeaderProps = {\n /** Table header rows (TableRow with TableHeadCell) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n} & HTMLAttributes<HTMLTableSectionElement>;\n\nexport type TableBodyProps = {\n /** Table body rows (TableRow with TableCell) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n} & HTMLAttributes<HTMLTableSectionElement>;\n\nexport type TableFooterProps = {\n /** Table footer rows (TableRow with TableCell) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n} & HTMLAttributes<HTMLTableSectionElement>;\n\nexport type TableRowProps = {\n /** Table cells (TableCell or TableHeadCell) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Whether the row is in a selected state */\n selected?: boolean;\n} & HTMLAttributes<HTMLTableRowElement>;\n\nexport type TableHeadCellProps = {\n /** Content of the header cell */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Text alignment within the cell */\n align?: 'left' | 'center' | 'right';\n /** Scope attribute for accessibility (col for column headers, row for row headers) */\n scope?: 'col' | 'row';\n /** Whether text should wrap instead of truncating */\n wrapText?: boolean;\n} & HTMLAttributes<HTMLTableCellElement>;\n\nexport type TableCellProps = {\n /** Content of the cell */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Text alignment within the cell */\n align?: 'left' | 'center' | 'right';\n /** Whether text should wrap instead of truncating */\n wrapText?: boolean;\n} & HTMLAttributes<HTMLTableCellElement>;\n\n/**\n * Table - Semantic HTML table with consistent styling\n * - Responsive with horizontal scroll\n * - Optional striped rows, borders, and hover effects\n * - Compact mode for dense data\n * - Proper semantic structure with thead, tbody, tfoot\n */\nexport function Table({\n children,\n className = '',\n striped = false,\n bordered = false,\n hoverable = false,\n compact = false,\n caption,\n ...props\n}: Readonly<TableProps>) {\n const baseClasses = 'w-full text-sm text-left';\n const stripedClasses = striped ? 'striped' : '';\n const borderedClasses = bordered ? 'border border-border' : '';\n const compactClasses = compact ? 'table-compact' : '';\n\n return (\n <div className=\"overflow-x-auto rounded-lg\">\n <table\n className={`${baseClasses} ${stripedClasses} ${borderedClasses} ${compactClasses} ${className}`}\n {...props}\n >\n {caption && <caption className=\"sr-only\">{caption}</caption>}\n {children}\n </table>\n <style>{`\n .striped tbody tr:nth-child(even) {\n background-color: hsl(var(--muted) / 0.3);\n }\n ${\n hoverable\n ? `\n table tbody tr:hover {\n background-color: hsl(var(--muted) / 0.6) !important;\n }\n `\n : ''\n }\n .table-compact td,\n .table-compact th {\n padding: 0.5rem;\n }\n `}</style>\n </div>\n );\n}\n\n/**\n * TableHeader - Table header section (thead)\n */\nexport function TableHeader({ children, className = '', ...props }: Readonly<TableHeaderProps>) {\n return (\n <thead className={`text-xs text-muted-foreground uppercase bg-muted/50 ${className}`} {...props}>\n {children}\n </thead>\n );\n}\n\n/**\n * TableBody - Table body section (tbody)\n */\nexport function TableBody({ children, className = '', ...props }: Readonly<TableBodyProps>) {\n return (\n <tbody className={`divide-y divide-border ${className}`} {...props}>\n {children}\n </tbody>\n );\n}\n\n/**\n * TableFooter - Table footer section (tfoot)\n */\nexport function TableFooter({ children, className = '', ...props }: Readonly<TableFooterProps>) {\n return (\n <tfoot className={`text-xs font-semibold text-foreground bg-muted/30 ${className}`} {...props}>\n {children}\n </tfoot>\n );\n}\n\n/**\n * TableRow - Table row (tr)\n */\nexport function TableRow({ children, className = '', selected = false, ...props }: Readonly<TableRowProps>) {\n const selectedClasses = selected ? 'bg-primary/10' : '';\n\n return (\n <tr className={`${selectedClasses} ${className}`} {...props}>\n {children}\n </tr>\n );\n}\n\n/**\n * TableHeadCell - Table header cell (th)\n * - Includes proper scope attribute for accessibility\n * - Default scope is 'col' for column headers\n */\nexport function TableHeadCell({\n children,\n className = '',\n align = 'left',\n scope = 'col',\n wrapText = false,\n ...props\n}: Readonly<TableHeadCellProps>) {\n const alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right'\n };\n\n const wrapClasses = wrapText ? 'whitespace-normal break-words' : 'whitespace-nowrap';\n\n return (\n <th scope={scope} className={`px-6 py-3 font-medium ${alignClasses[align]} ${wrapClasses} ${className}`} {...props}>\n {children}\n </th>\n );\n}\n\n/**\n * TableCell - Table data cell (td)\n */\nexport function TableCell({\n children,\n className = '',\n align = 'left',\n wrapText = false,\n ...props\n}: Readonly<TableCellProps>) {\n const alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right'\n };\n\n const wrapClasses = wrapText ? 'whitespace-normal break-words' : 'whitespace-nowrap';\n\n return (\n <td className={`px-6 py-4 ${wrapClasses} ${alignClasses[align]} ${className}`} {...props}>\n {children}\n </td>\n );\n}\n\nexport default Table;\n","import React from 'react';\n\nexport type ValidationState = 'default' | 'error' | 'success' | 'warning';\n\nexport type CheckboxProps = {\n /** Checked state (controlled) */\n checked?: boolean;\n /** Change event handler for controlled checkbox */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** Disables checkbox interaction and applies disabled styling */\n disabled?: boolean;\n /** Additional CSS classes applied to the checkbox */\n className?: string;\n /** Accessible label for screen readers */\n ariaLabel?: string;\n /** HTML id attribute for the checkbox */\n id?: string;\n /** HTML name attribute for form submission */\n name?: string;\n /** Visual validation state affecting border and focus ring color */\n validationState?: ValidationState;\n};\n\n/**\n * Accessible Checkbox component\n */\nfunction Checkbox({\n checked,\n onChange,\n disabled = false,\n className = '',\n ariaLabel,\n id,\n name,\n validationState = 'default'\n}: Readonly<CheckboxProps>) {\n const validationClasses = {\n default: 'border-input focus:ring-ring',\n error: 'border-destructive focus:ring-destructive',\n success: 'border-success focus:ring-success',\n warning: 'border-warning focus:ring-warning'\n };\n\n return (\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-invalid={validationState === 'error'}\n id={id}\n name={name}\n className={`h-5 w-5 sm:h-4 sm:w-4 rounded border-2 bg-background text-primary-foreground transition-all duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-muted/50 checked:bg-primary checked:border-primary checked:hover:bg-primary/90 hover:border-primary/50 hover:shadow-sm cursor-pointer accent-primary ${validationClasses[validationState]} ${className}`}\n />\n );\n}\n\nCheckbox.displayName = 'Checkbox';\n\nexport default Checkbox;\n","import { ReactNode } from 'react';\nimport { Icon } from '../../system/icon/icon';\n\nexport type EmptyStateProps = {\n /** Main heading text for the empty state */\n title: string;\n /** Optional description or helper text */\n description?: string;\n /** Optional icon name to display above the title */\n icon?: string;\n /** Optional action button or element to render */\n action?: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n};\n\n/**\n * EmptyState - Placeholder for no-data scenarios\n */\nfunction EmptyState({ title, description, icon, action, className = '' }: Readonly<EmptyStateProps>) {\n return (\n <div className={`flex flex-col items-center justify-center text-center py-12 ${className}`}>\n {icon && (\n <div className=\"text-muted-foreground mb-4\">\n <Icon name={icon} size=\"3xl\" />\n </div>\n )}\n <h3 className=\"text-lg font-semibold text-foreground mb-2\">{title}</h3>\n {description && <p className=\"text-muted-foreground mb-6 max-w-sm\">{description}</p>}\n {action}\n </div>\n );\n}\n\nEmptyState.displayName = 'EmptyState';\n\nexport default EmptyState;\n","import { useMemo, useState } from 'react';\n\nexport type SortDirection = 'asc' | 'desc' | null;\n\nexport type SortConfig<T> = {\n key: keyof T;\n direction: SortDirection;\n} | null;\n\nexport type UseTableOptions<T> = {\n data: T[];\n initialSort?: { key: keyof T; direction: 'asc' | 'desc' };\n pageSize?: number;\n};\n\nexport type UseTableReturn<T> = {\n // Data\n currentData: T[];\n sortedData: T[];\n\n // Sorting\n sortConfig: SortConfig<T>;\n handleSort: (key: keyof T) => void;\n\n // Pagination\n currentPage: number;\n totalPages: number;\n setCurrentPage: (page: number) => void;\n nextPage: () => void;\n prevPage: () => void;\n canNextPage: boolean;\n canPrevPage: boolean;\n\n // Selection\n selectedRows: Set<number>;\n toggleRow: (index: number) => void;\n toggleAll: () => void;\n isRowSelected: (index: number) => boolean;\n isAllSelected: boolean;\n clearSelection: () => void;\n};\n\n/**\n * useTable Hook - Client-side table state management\n * Handles sorting, pagination, and selection\n */\nexport function useTable<T>({ data, initialSort, pageSize = 10 }: UseTableOptions<T>): UseTableReturn<T> {\n const [sortConfig, setSortConfig] = useState<SortConfig<T>>(\n initialSort ? { key: initialSort.key, direction: initialSort.direction } : null\n );\n const [currentPage, setCurrentPage] = useState(1);\n const [selectedRows, setSelectedRows] = useState<Set<number>>(new Set());\n\n // Sorting logic\n const sortedData = useMemo(() => {\n if (!sortConfig) return data;\n\n const sorted = [...data].sort((a, b) => {\n const aValue = a[sortConfig.key];\n const bValue = b[sortConfig.key];\n\n if (aValue === bValue) return 0;\n\n // Handle null/undefined\n if (aValue == null) return 1;\n if (bValue == null) return -1;\n\n // Compare values\n if (aValue < bValue) {\n return sortConfig.direction === 'asc' ? -1 : 1;\n }\n return sortConfig.direction === 'asc' ? 1 : -1;\n });\n\n return sorted;\n }, [data, sortConfig]);\n\n // Pagination logic\n const totalPages = Math.ceil(sortedData.length / pageSize);\n const startIndex = (currentPage - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n const currentData = sortedData.slice(startIndex, endIndex);\n\n // Sorting handler\n const handleSort = (key: keyof T) => {\n let direction: SortDirection = 'asc';\n\n if (sortConfig?.key === key) {\n if (sortConfig.direction === 'asc') {\n direction = 'desc';\n } else if (sortConfig.direction === 'desc') {\n direction = null;\n }\n }\n\n setSortConfig(direction ? { key, direction } : null);\n setCurrentPage(1); // Reset to first page on sort\n };\n\n // Pagination handlers\n const nextPage = () => {\n setCurrentPage((prev) => Math.min(prev + 1, totalPages));\n };\n\n const prevPage = () => {\n setCurrentPage((prev) => Math.max(prev - 1, 1));\n };\n\n const canNextPage = currentPage < totalPages;\n const canPrevPage = currentPage > 1;\n\n // Selection handlers\n const toggleRow = (index: number) => {\n setSelectedRows((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(index)) {\n newSet.delete(index);\n } else {\n newSet.add(index);\n }\n return newSet;\n });\n };\n\n const toggleAll = () => {\n if (selectedRows.size === currentData.length) {\n setSelectedRows(new Set());\n } else {\n const allIndices = currentData.map((_, idx) => startIndex + idx);\n setSelectedRows(new Set(allIndices));\n }\n };\n\n const isRowSelected = (index: number) => selectedRows.has(index);\n\n const isAllSelected = currentData.length > 0 && currentData.every((_, idx) => selectedRows.has(startIndex + idx));\n\n const clearSelection = () => setSelectedRows(new Set());\n\n return {\n currentData,\n sortedData,\n sortConfig,\n handleSort,\n currentPage,\n totalPages,\n setCurrentPage,\n nextPage,\n prevPage,\n canNextPage,\n canPrevPage,\n selectedRows,\n toggleRow,\n toggleAll,\n isRowSelected,\n isAllSelected,\n clearSelection\n };\n}\n\nexport default useTable;\n","import { ReactNode } from 'react';\nimport { Icon } from '../../system/icon/icon';\nimport IconButton from '../../forms/button/icon-button';\n\nimport { Table, TableHeader, TableBody, TableRow, TableHeadCell, TableCell } from '../table/table';\nimport Checkbox from '../../forms/checkbox/checkbox';\nimport EmptyState from '../empty-state/empty-state';\nimport Button from '../../forms/button/button';\nimport type { ButtonProps } from '../../forms/button/button';\nimport Stack from '../../layout/stack/stack';\nimport Badge from '../badge/badge';\nimport Chip from '../chip/chip';\nimport { useTable, UseTableOptions } from './use-table';\nimport { Size } from '@/theme/size-tokens';\nimport { StatusColorProp } from '@/theme/tokens';\n\nexport type DataTableAction<T> = {\n /** Icon name for the action button */\n icon: string;\n /** Size of the icon */\n iconSize?: Size;\n /** Color variant for the icon */\n iconColor?: StatusColorProp;\n /** Accessible label for the action (shown in tooltip or screen readers) */\n label: string;\n /** Callback when the action is clicked */\n onClick: (row: T, index: number) => void;\n /** Visual variant for the action button */\n variant?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'error' | 'info';\n};\n\nexport type DataTableActionItem<T> = DataTableAction<T> | ReactNode;\n\nexport type ColumnDef<T> = {\n /** Key of the data property to display in this column */\n key: keyof T;\n /** Column header label */\n label: string;\n /** Whether this column can be sorted */\n sortable?: boolean;\n /** CSS width class or value for the column */\n width?: string;\n /** Text alignment for cells in this column */\n align?: 'left' | 'center' | 'right';\n /** Whether text should wrap instead of truncating (useful for long strings) */\n wrapText?: boolean;\n /** Custom render function for cell content (use as escape hatch when config options don't cover your use case) */\n render?: (value: T[keyof T], row: T, index: number) => ReactNode;\n\n // Config-driven rendering options (preferred over custom render)\n /** Pre-built formatter for common data types */\n format?: 'date' | 'currency' | 'number' | 'percent';\n /** Options for Intl formatters (NumberFormat or DateTimeFormat) */\n formatOptions?: Intl.NumberFormatOptions | Intl.DateTimeFormatOptions;\n /** Map values to badge variants. Unmatched values render with 'default' variant. Use '*' key to override the default fallback. */\n badgeMap?: {\n [key: string]: { variant?: StatusColorProp; label?: string };\n };\n /** Render array values as chips */\n renderAsChips?: boolean;\n /** Variant for chip rendering */\n chipVariant?: StatusColorProp;\n /** Size for badge or chip rendering */\n componentSize?: 'sm' | 'md' | 'lg';\n};\n\nexport type DataTableProps<T> = {\n /** Array of data objects to display in the table */\n data: T[];\n /** Column definitions specifying how to render each column */\n columns: ColumnDef<T>[];\n /** Additional CSS classes to apply */\n className?: string;\n\n // Styling options\n /** Whether to apply striped row styling (alternating background) */\n striped?: boolean;\n /** Whether to show borders around the table */\n bordered?: boolean;\n /** Whether rows have hover effects */\n hoverable?: boolean;\n /** Whether to use compact spacing for dense data */\n compact?: boolean;\n /** Whether the table header should stick to the top on scroll */\n stickyHeader?: boolean;\n\n // Features\n /** Whether columns can be sorted (can be overridden per column) */\n sortable?: boolean;\n /** Whether to enable client-side pagination */\n paginated?: boolean;\n /** Number of rows per page when pagination is enabled */\n pageSize?: number;\n /** Whether to show checkboxes for row selection */\n selectable?: boolean;\n\n // Actions - either array of action configs/components OR function returning actions/render\n /** Action buttons, function returning actions based on row data, or custom render function for the actions column */\n actions?: DataTableActionItem<T>[] | ((row: T, index: number) => DataTableActionItem<T>[] | ReactNode);\n /** Label for the actions column header */\n actionsLabel?: string;\n /** CSS width class for the actions column */\n actionsWidth?: string;\n\n // Callbacks\n /** Callback when a row is clicked */\n onRowClick?: (row: T, index: number) => void;\n /** Callback when row selection changes (provides array of selected row indices) */\n onSelectionChange?: (selectedIndices: number[]) => void;\n\n // Empty state\n /** Message to display when there is no data */\n emptyMessage?: string;\n /** Icon name to display in the empty state */\n emptyIcon?: string;\n\n // Initial state\n /** Initial sort configuration */\n initialSort?: { key: keyof T; direction: 'asc' | 'desc' };\n /** Title displayed above the table (left side of header) */\n title?: string;\n /** Header actions displayed above the table (right side of header). */\n headerActions?: HeaderAction[];\n};\n\nexport type HeaderAction = {\n /** Button text; if omitted and `icon` provided, button will be icon-only */\n label?: string;\n /** Icon name to render inside the button (maps to library `Icon`) */\n icon?: string;\n /** Click handler invoked when the button is clicked */\n onClick?: () => void;\n /** Button variant (maps to Button `variant` prop) */\n variant?: ButtonProps['variant'];\n /** Button style (maps to Button `style` prop) */\n style?: ButtonProps['style'];\n /** Button size (maps to Button `size` prop) */\n size?: ButtonProps['size'];\n /** Additional className forwarded to the Button */\n className?: string;\n};\n\n/**\n * DataTable - High-level data-driven table component\n *\n * Features:\n * - Generic typed data and columns\n * - Client-side sorting\n * - Client-side pagination\n * - Row selection with checkboxes\n * - Custom cell rendering\n * - Flexible actions: simple array config OR custom render function\n * - Empty state handling\n * - Sticky headers\n * - Click handlers\n *\n * Built on top of low-level Table primitives.\n *\n * @example\n * ```tsx\n * // Simple: Pass array of action configs (recommended)\n * <DataTable\n * data={users}\n * columns={columns}\n * title=\"Users\"\n * headerActions={<Button onClick={handleCreate}>New</Button>}\n * actions={[\n * {\n * icon: \"edit\",\n * label: 'Edit user',\n * onClick: (row, index) => handleEdit(row, index),\n * variant: 'neutral'\n * },\n * {\n * icon: \"trash\",\n * label: 'Delete user',\n * onClick: (row, index) => handleDelete(row, index),\n * variant: 'error'\n * }\n * ]}\n * />\n *\n * // Dynamic: Return different actions based on row data\n * <DataTable\n * data={users}\n * columns={columns}\n * actions={(row) => [\n * {\n * icon: \"edit\",\n * label: 'Edit user',\n * onClick: (r, i) => handleEdit(r, i),\n * variant: 'neutral'\n * },\n * // Conditionally include delete action\n * ...(!row.isDefault ? [{\n * icon: \"trash\",\n * label: 'Delete user',\n * onClick: (r, i) => handleDelete(r, i),\n * variant: 'error'\n * }] : [])\n * ]}\n * />\n *\n * // Advanced: Custom render function for full control\n * <DataTable\n * data={users}\n * columns={columns}\n * actions={(row, index) => (\n * <DataTableActions\n * row={row}\n * index={index}\n * onEdit={handleEdit}\n * onDelete={handleDelete}\n * />\n * )}\n * />\n * ```\n */\nfunction DataTable<T>({\n data,\n columns,\n className = '',\n striped = true,\n bordered = false,\n hoverable = true,\n compact = false,\n stickyHeader = false,\n sortable = true,\n paginated = false,\n pageSize = 10,\n selectable = false,\n actions,\n actionsLabel = 'Actions',\n actionsWidth = 'w-32',\n onRowClick,\n onSelectionChange,\n emptyMessage = 'No data available',\n emptyIcon,\n headerActions,\n title,\n initialSort\n}: DataTableProps<T>) {\n // Use table hook for state management\n const tableOptions: UseTableOptions<T> = {\n data,\n initialSort,\n pageSize\n };\n\n const {\n currentData,\n sortedData,\n sortConfig,\n handleSort,\n currentPage,\n totalPages,\n nextPage,\n prevPage,\n canNextPage,\n canPrevPage,\n selectedRows,\n toggleRow,\n toggleAll,\n isRowSelected,\n isAllSelected\n } = useTable(tableOptions);\n\n // Display data (paginated uses currentData, non-paginated uses sortedData)\n const displayData = paginated ? currentData : sortedData;\n\n // Header title and actions\n const hasHeader = Boolean((title && String(title).length > 0) || headerActions);\n\n // Notify parent of selection changes\n const handleToggleRow = (index: number) => {\n toggleRow(index);\n if (onSelectionChange) {\n const newSelection = new Set(selectedRows);\n if (newSelection.has(index)) {\n newSelection.delete(index);\n } else {\n newSelection.add(index);\n }\n onSelectionChange(Array.from(newSelection));\n }\n };\n\n const handleToggleAll = () => {\n toggleAll();\n if (onSelectionChange) {\n if (isAllSelected) {\n onSelectionChange([]);\n } else {\n const startIndex = (currentPage - 1) * pageSize;\n const allIndices = displayData.map((_, idx) => startIndex + idx);\n onSelectionChange(allIndices);\n }\n }\n };\n\n // Format value based on column configuration\n const formatValue = (value: unknown, column: ColumnDef<T>): string => {\n if (value == null) return '';\n\n switch (column.format) {\n case 'date': {\n const dateValue = value instanceof Date ? value : new Date(value as string | number);\n return new Intl.DateTimeFormat('en-US', column.formatOptions as Intl.DateTimeFormatOptions).format(dateValue);\n }\n\n case 'currency':\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n ...column.formatOptions\n } as Intl.NumberFormatOptions).format(Number(value));\n\n case 'number':\n return new Intl.NumberFormat('en-US', column.formatOptions as Intl.NumberFormatOptions).format(Number(value));\n\n case 'percent':\n return new Intl.NumberFormat('en-US', {\n style: 'percent',\n ...column.formatOptions\n } as Intl.NumberFormatOptions).format(Number(value));\n\n default:\n return String(value);\n }\n };\n\n const renderCellContent = (value: unknown, column: ColumnDef<T>, row: T, rowIndex: number): ReactNode => {\n if (column.render) {\n return column.render(value as T[keyof T], row, rowIndex);\n }\n\n if (column.badgeMap) {\n const stringValue = String(value);\n // Try exact match, then fallback ('*'), then default\n const badgeConfig = column.badgeMap[stringValue] || column.badgeMap['*'] || { variant: 'default' };\n\n return (\n <Badge variant={badgeConfig.variant || 'default'} size={column.componentSize || 'md'}>\n {badgeConfig.label || stringValue}\n </Badge>\n );\n }\n\n if (column.renderAsChips && Array.isArray(value)) {\n return (\n <Stack direction=\"horizontal\" spacing=\"xs\" wrap>\n {value.map((item, idx) => (\n <Chip key={idx} variant={column.chipVariant || 'default'} size={column.componentSize || 'md'}>\n {String(item)}\n </Chip>\n ))}\n </Stack>\n );\n }\n\n if (column.format) {\n return formatValue(value, column);\n }\n\n return String(value ?? '');\n };\n\n // Render sort icon\n const renderSortIcon = (columnKey: keyof T) => {\n if (!sortable) return null;\n\n const isSorted = sortConfig?.key === columnKey;\n\n if (!isSorted) {\n return <Icon name=\"selector\" size=\"xs\" color=\"default\" />;\n }\n\n if (sortConfig?.direction === 'asc') {\n return <Icon name=\"chevron-up\" size=\"xs\" color=\"primary\" />;\n }\n\n return <Icon name=\"chevron-down\" size=\"xs\" color=\"primary\" />;\n };\n\n // Empty state\n if (data.length === 0) {\n return (\n <div className=\"border border-border rounded-lg\">\n <EmptyState title={emptyMessage} icon={emptyIcon} className=\"py-12\" />\n </div>\n );\n }\n\n return (\n <div className={className}>\n {hasHeader && (\n <div className=\"flex items-center justify-between mb-3\">\n <h2 className=\"text-lg font-semibold text-foreground\">{title}</h2>\n <div className=\"flex items-center gap-2\">\n {Array.isArray(headerActions) &&\n headerActions.map((act, idx) => (\n <Button\n key={idx}\n onClick={act.onClick}\n variant={act.variant}\n style={act.style}\n size={act.size}\n className={act.className}\n ariaLabel={act.label && act.icon && !act.label ? act.label : undefined}\n >\n {act.icon ? <Icon name={act.icon} size=\"sm\" /> : null}\n {act.label}\n </Button>\n ))}\n </div>\n </div>\n )}\n <div className={`${stickyHeader ? 'overflow-auto max-h-[600px]' : ''} overflow-x-auto`}>\n <Table striped={striped} bordered={bordered} hoverable={hoverable} compact={compact}>\n <TableHeader className={stickyHeader ? 'sticky top-0 z-10 bg-background shadow-sm' : ''}>\n <TableRow>\n {/* Selection column */}\n {selectable && (\n <TableHeadCell className=\"w-12\">\n <Checkbox checked={isAllSelected} onChange={handleToggleAll} ariaLabel=\"Select all rows\" />\n </TableHeadCell>\n )}\n\n {/* Data columns */}\n {columns.map((column) => (\n <TableHeadCell\n key={String(column.key)}\n align={column.align}\n className={column.width ? `w-[${column.width}]` : ''}\n >\n {column.sortable !== false && sortable ? (\n <button\n onClick={() => handleSort(column.key)}\n className=\"flex items-center gap-1 hover:text-foreground transition-colors font-medium\"\n type=\"button\"\n >\n {column.label}\n {renderSortIcon(column.key)}\n </button>\n ) : (\n column.label\n )}\n </TableHeadCell>\n ))}\n\n {/* Actions column */}\n {actions && (\n <TableHeadCell align=\"center\" className={actionsWidth}>\n {actionsLabel}\n </TableHeadCell>\n )}\n </TableRow>\n </TableHeader>\n\n <TableBody>\n {displayData.map((row, rowIndex) => {\n const actualIndex = paginated ? (currentPage - 1) * pageSize + rowIndex : rowIndex;\n const isSelected = isRowSelected(actualIndex);\n\n return (\n <TableRow\n key={actualIndex}\n selected={isSelected}\n onClick={onRowClick ? () => onRowClick(row, actualIndex) : undefined}\n className={onRowClick ? 'cursor-pointer' : ''}\n >\n {/* Selection cell */}\n {selectable && (\n <TableCell onClick={(e) => e.stopPropagation()}>\n <Checkbox\n checked={isSelected}\n onChange={() => handleToggleRow(actualIndex)}\n ariaLabel={`Select row ${actualIndex + 1}`}\n />\n </TableCell>\n )}\n\n {/* Data cells */}\n {columns.map((column) => {\n const value = row[column.key];\n const content = renderCellContent(value, column, row, actualIndex);\n\n return (\n <TableCell key={String(column.key)} align={column.align} wrapText={column.wrapText}>\n {content}\n </TableCell>\n );\n })}\n\n {actions && (\n <TableCell align=\"center\" onClick={(e) => e.stopPropagation()}>\n {(() => {\n let rowActions: DataTableActionItem<T>[] | ReactNode;\n\n if (Array.isArray(actions)) {\n rowActions = actions;\n } else {\n const result = actions(row, actualIndex);\n if (Array.isArray(result)) {\n rowActions = result;\n } else {\n return result;\n }\n }\n\n return (\n <Stack direction=\"horizontal\" spacing=\"sm\" justify=\"center\">\n {(rowActions as DataTableActionItem<T>[]).map((action, actionIndex) => {\n if (action && typeof action === 'object' && 'onClick' in action) {\n const actionConfig = action as DataTableAction<T>;\n return (\n <IconButton\n key={actionIndex}\n icon={actionConfig.icon}\n iconSize={actionConfig.iconSize || 'md'}\n buttonStyle=\"ghost\"\n variant={actionConfig.variant || 'neutral'}\n iconColor={actionConfig.iconColor}\n ariaLabel={actionConfig.label}\n onClick={() => actionConfig.onClick(row, actualIndex)}\n />\n );\n } else {\n return <div key={actionIndex}>{action as ReactNode}</div>;\n }\n })}\n </Stack>\n );\n })()}\n </TableCell>\n )}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </div>\n\n {/* Pagination controls */}\n {paginated && totalPages > 1 && (\n <div className=\"flex items-center justify-between px-4 py-3 border-t border-border\">\n <div className=\"text-sm text-muted-foreground\">\n Page {currentPage} of {totalPages} ({data.length} total rows)\n </div>\n <div className=\"flex gap-2\">\n <Button size=\"sm\" style=\"outline\" onClick={prevPage} disabled={!canPrevPage}>\n Previous\n </Button>\n <Button size=\"sm\" style=\"outline\" onClick={nextPage} disabled={!canNextPage}>\n Next\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nDataTable.displayName = 'DataTable';\n\nexport default DataTable;\n","import { ReactNode } from 'react';\n\nexport type ListProps = {\n /** List items (ListItem components) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Whether to render as ordered list (ol) instead of unordered (ul) */\n ordered?: boolean;\n};\n\nexport type ListItemProps = {\n /** Content of the list item */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n};\n\n/**\n * List - Vertical grouping of items\n */\nexport function List({ children, className = '', ordered = false }: Readonly<ListProps>) {\n const Component = ordered ? 'ol' : 'ul';\n\n return <Component className={`divide-y divide-border ${className}`}>{children}</Component>;\n}\n\nList.displayName = 'List';\n\n/**\n * ListItem - Individual list item\n */\nexport function ListItem({ children, className = '' }: Readonly<ListItemProps>) {\n return <li className={`py-3 ${className}`}>{children}</li>;\n}\n\nListItem.displayName = 'ListItem';\n\nexport default List;\n","import { Size } from '@/theme/size-tokens';\nimport { StatusColorProp } from '../../../theme/tokens';\nimport { ReactNode } from 'react';\nimport Icon from '../../system/icon/icon';\n\nexport type TimelineItemProps = {\n /** Main content of the timeline item */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Icon name to display in the timeline marker (if not provided, shows a dot) */\n icon?: string;\n /** Size of the icon */\n iconSize?: Size;\n /** Color variant for the icon */\n iconColor?: StatusColorProp;\n /** Main title/heading for the timeline event */\n title?: string;\n /** Secondary subtitle text */\n subtitle?: string;\n /** Timestamp or date string to display */\n timestamp?: string;\n /** Whether this is the last item (hides connector line) */\n isLast?: boolean;\n};\n\nexport type TimelineProps = {\n /** Timeline items (TimelineItem components) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Horizontal alignment of the timeline */\n position?: 'left' | 'center' | 'right';\n};\n\n/**\n * TimelineItem - Individual event in timeline\n */\nexport function TimelineItem({\n children,\n className = '',\n icon,\n iconSize = 'sm',\n iconColor = 'default',\n title,\n subtitle,\n timestamp,\n isLast = false\n}: Readonly<TimelineItemProps>) {\n return (\n <div className={`flex gap-4 ${className}`}>\n {/* Icon/Dot Column */}\n <div className=\"flex flex-col items-center\">\n {/* Icon or Dot */}\n <div\n className={`\n flex items-center justify-center\n w-8 h-8 rounded-full\n shrink-0\n `}\n >\n {icon ? (\n <Icon name={icon} size={iconSize} color={iconColor} />\n ) : (\n <div className=\"w-2 h-2 rounded-full bg-current\" />\n )}\n </div>\n\n {/* Connector Line */}\n {!isLast && <div className=\"w-0.5 flex-1 bg-border mt-2\" />}\n </div>\n\n {/* Content Column */}\n <div className={`flex-1 ${!isLast ? 'pb-8' : ''}`}>\n {/* Header */}\n {(title || timestamp) && (\n <div className=\"flex items-start justify-between gap-4 mb-1\">\n {title && <h4 className=\"font-semibold text-foreground\">{title}</h4>}\n {timestamp && <time className=\"text-sm text-muted-foreground whitespace-nowrap\">{timestamp}</time>}\n </div>\n )}\n\n {/* Subtitle */}\n {subtitle && <p className=\"text-sm text-muted-foreground mb-2\">{subtitle}</p>}\n\n {/* Content */}\n {children && <div className=\"text-sm text-foreground\">{children}</div>}\n </div>\n </div>\n );\n}\n\n/**\n * Timeline - Vertical timeline for events, activities, history\n *\n * Features:\n * - Vertical layout with connector lines\n * - Custom icons or default dots\n * - Color-coded events\n * - Titles, subtitles, timestamps\n * - Flexible content\n *\n * Common uses:\n * - Activity feeds\n * - Order tracking\n * - Version history\n * - Process steps\n */\nfunction Timeline({ children, className = '', position = 'left' }: Readonly<TimelineProps>) {\n const positionClasses = {\n left: '',\n center: 'mx-auto max-w-2xl',\n right: 'ml-auto max-w-2xl'\n };\n\n return <div className={`${positionClasses[position]} ${className}`}>{children}</div>;\n}\n\nTimeline.displayName = 'Timeline';\n\nexport default Timeline;\n","import { ReactNode, useEffect, useCallback, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { colorVariants } from '../../../theme/tokens';\n\nexport type AlertProps = {\n /** The content to display inside the alert message */\n children: ReactNode;\n /** Visual style variant indicating the type of message (info, success, warning, or error) */\n type?: 'info' | 'success' | 'warning' | 'error';\n /** Whether the alert can be manually dismissed by the user via a close button */\n dismissible?: boolean;\n /** Callback function invoked when the alert is closed (either manually or via auto-dismiss) */\n onClose?: () => void;\n /** Additional CSS classes to apply to the alert container */\n className?: string;\n /** Position the alert fixed on the screen */\n position?: 'top' | 'bottom' | 'relative';\n /** Auto-dismiss duration in milliseconds (0 to disable) */\n duration?: number;\n};\n\n/**\n * Alert - Dismissible notice for info/success/warning/error messages\n */\nfunction Alert({\n children,\n type = 'info',\n dismissible = false,\n onClose,\n className = '',\n position = 'relative',\n duration = 0\n}: Readonly<AlertProps>) {\n const [isClosing, setIsClosing] = useState(false);\n\n const iconClasses = {\n info: 'text-info',\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-destructive'\n };\n\n // Auto-dismiss functionality\n const handleClose = useCallback(() => {\n setIsClosing(true);\n // Wait for animation to complete before calling onClose\n setTimeout(() => {\n onClose?.();\n }, 300); // Match animation duration\n }, [onClose]);\n\n useEffect(() => {\n if (duration > 0 && onClose) {\n const timer = setTimeout(() => {\n handleClose();\n }, duration);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [duration, onClose, handleClose]);\n\n const icons = {\n info: (\n <svg className=\"w-5 h-5 flex-shrink-0\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n success: (\n <svg className=\"w-5 h-5 flex-shrink-0\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n warning: (\n <svg className=\"w-5 h-5 flex-shrink-0\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n error: (\n <svg className=\"w-5 h-5 flex-shrink-0\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n )\n };\n\n const positionClasses = {\n top: 'fixed top-4 left-1/2 -translate-x-1/2 z-[9999] max-w-2xl w-full mx-4',\n bottom: 'fixed bottom-4 left-1/2 -translate-x-1/2 z-[9999] max-w-2xl w-full mx-4',\n relative: ''\n };\n\n // Animation classes based on position\n const getAnimationClasses = () => {\n if (position === 'top') {\n return isClosing ? 'opacity-0 -translate-y-full' : 'opacity-100 translate-y-0 animate-slideInTop';\n }\n if (position === 'bottom') {\n return isClosing ? 'opacity-0 translate-y-full' : 'opacity-100 translate-y-0 animate-slideInBottom';\n }\n return isClosing ? 'opacity-0' : 'opacity-100';\n };\n\n const alertContent = (\n <div\n role=\"alert\"\n className={`p-4 border rounded-lg flex items-start gap-3 transition-all duration-300 ease-out ${colorVariants.alert[type]} ${positionClasses[position]} ${getAnimationClasses()} ${className}`}\n >\n <span className={iconClasses[type]}>{icons[type]}</span>\n <span className=\"flex-1 text-sm\">{children}</span>\n {dismissible && onClose && (\n <button\n onClick={handleClose}\n className=\"flex-shrink-0 text-current opacity-70 hover:opacity-100 transition-opacity focus:outline-none focus:ring-2 focus:ring-ring rounded p-0.5\"\n aria-label=\"Close alert\"\n >\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n\n // Use portal for fixed positioning to avoid container clipping\n if (position !== 'relative' && typeof document !== 'undefined') {\n return createPortal(alertContent, document.body);\n }\n\n return alertContent;\n}\n\nAlert.displayName = 'Alert';\n\nexport default Alert;\n","import React from 'react';\nimport { createPortal } from 'react-dom';\nimport useOverlay from '../overlay/useOverlay';\n\nexport type ModalProps = {\n /** Controls the visibility state of the modal */\n isOpen: boolean;\n /** Callback function invoked when the modal should close (ESC key or backdrop click) */\n onClose: () => void;\n /** Raw children (ignored if structured props provided) */\n children?: React.ReactNode;\n /** Structured title (string or React) */\n title?: React.ReactNode;\n /** Optional description text */\n description?: React.ReactNode;\n /** Main body content */\n content?: React.ReactNode;\n /** Footer actions (buttons) */\n actions?: React.ReactNode;\n /** Additional CSS classes to apply to the modal dialog container */\n className?: string;\n /** Accessible label for the modal, used for screen readers */\n ariaLabel?: string;\n /** Center vs top alignment */\n align?: 'center' | 'top';\n};\n\n/**\n * Modal - Overlay dialog component using pure Tailwind CSS\n * Achieves DaisyUI modal styling with Tailwind utilities\n */\nfunction Modal({\n isOpen,\n onClose,\n children,\n title,\n description,\n content,\n actions,\n className = '',\n ariaLabel,\n align = 'center'\n}: Readonly<ModalProps>) {\n const {\n phase,\n shouldRender,\n ref: dialogRef,\n getPhaseClass\n } = useOverlay<HTMLDivElement>({\n isOpen,\n focusTrap: true,\n lockScroll: true,\n animationFrames: 2,\n restoreFocus: true\n });\n\n // ESC key handling separate from useOverlay to allow optional close logic\n React.useEffect(() => {\n if (!isOpen) return;\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n onClose();\n }\n };\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen, onClose]);\n\n // Manage mounting phases\n\n // If closed & unmounting, skip render\n if (!shouldRender) return null;\n\n const enteringClasses = 'scale-100 translate-y-0 opacity-100';\n const exitingClasses = 'scale-[0.97] -translate-y-1 opacity-0';\n const scaleClass = getPhaseClass(enteringClasses, exitingClasses);\n // Stagger backdrop fade slightly after panel starts exiting to reduce perceived flicker\n const backdropOpacity =\n phase === 'visible' || phase === 'animating-in' ? 'opacity-100' : 'opacity-0 transition-opacity delay-50';\n\n const hasStructured = title || description || content || actions;\n const alignmentClasses = align === 'center' ? 'grid place-items-center' : 'flex items-start justify-center pt-20';\n\n const panel = (\n <div\n data-phase={phase}\n className={`fixed inset-0 z-[999] ${alignmentClasses} bg-black/40 backdrop-blur-sm p-4 overflow-y-auto overscroll-contain transition-opacity duration-300 will-change-opacity ${backdropOpacity}`}\n onMouseDown={(e) => {\n // close only if clicking backdrop not dialog\n if (e.target === e.currentTarget) onClose();\n }}\n aria-label={ariaLabel || 'Close modal'}\n role=\"presentation\"\n >\n <div\n ref={dialogRef}\n data-phase={phase}\n className={`relative w-11/12 sm:w-full max-w-2xl max-h-[calc(100vh-5em)] sm:max-h-[calc(100vh-8em)] bg-card text-card-foreground rounded-2xl border border-border shadow-2xl focus:outline-none transform transition-[transform,opacity] duration-250 ease-[cubic-bezier(.33,.66,.33,1)] will-change-transform will-change-opacity select-none [backface-visibility:hidden] [transform-style:preserve-3d] overflow-hidden ${scaleClass} ${className}`}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n onTransitionEnd={(e) => {\n if (e.target !== dialogRef.current) return;\n if (phase === 'animating-out') {\n // handled by useOverlay via shouldRender state change upstream; keep minimal here\n }\n }}\n >\n <div className=\"overflow-y-auto max-h-[calc(100vh-5em)] sm:max-h-[calc(100vh-8em)] p-4 sm:p-6\">\n {hasStructured ? (\n <>\n {title && (\n <>\n {typeof title === 'string' ? (\n <h2 className=\"text-xl font-semibold tracking-tight\">{title}</h2>\n ) : (\n title\n )}\n {description && <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>}\n </>\n )}\n {content && <section className=\"text-sm leading-relaxed space-y-3 mt-4\">{content}</section>}\n {actions && (\n <footer className=\"flex justify-end gap-2 pt-2 mt-4 border-t border-border/60\">{actions}</footer>\n )}\n </>\n ) : (\n children\n )}\n </div>\n </div>\n </div>\n );\n\n return createPortal(panel, document.body);\n}\n\nModal.displayName = 'Modal';\n\nexport default Modal;\n","import React from 'react';\n\nimport Modal from '../modal/modal';\n\nexport type DialogProps = {\n /** Controls the visibility state of the dialog */\n isOpen: boolean;\n /** Callback function invoked when the dialog should close */\n onClose: () => void;\n /** Title text displayed at the top of the dialog */\n title: string;\n /** Main content to display in the dialog body */\n children: React.ReactNode;\n /** Optional footer actions (typically buttons) to display at the bottom of the dialog */\n actions?: React.ReactNode;\n /** Additional CSS classes to apply to the dialog container */\n className?: string;\n};\n\n/**\n * Dialog component (built on Modal)\n */\nfunction Dialog({ isOpen, onClose, title, children, actions, className = '' }: Readonly<DialogProps>) {\n return (\n <Modal isOpen={isOpen} onClose={onClose} ariaLabel={title} className={className}>\n <div className=\"flex flex-col p-6 gap-4\">\n <h2 className=\"text-2xl font-bold text-foreground\">{title}</h2>\n <div className=\"text-foreground\">{children}</div>\n {actions && <div className=\"flex justify-end gap-3 pt-2\">{actions}</div>}\n </div>\n </Modal>\n );\n}\n\nDialog.displayName = 'Dialog';\n\nexport default Dialog;\n","import Icon from '../../system/icon/icon';\n\nimport Dialog from './dialog';\nimport Button from '../../forms/button/button';\n\nexport type DeleteDialogProps = {\n /** Controls the visibility state of the delete dialog */\n isOpen: boolean;\n /** Callback function invoked when the dialog is closed or cancelled */\n onClose: () => void;\n /** Callback function invoked when the user confirms the deletion */\n onConfirm: () => void;\n /** Custom title for the dialog (defaults to 'Confirm Deletion') */\n title?: string;\n /** Custom description text (defaults to a generic warning message) */\n description?: string;\n /** Name of the item being deleted, used in the default description */\n itemName?: string;\n /** Whether the deletion operation is in progress, disables buttons and shows loading state */\n isLoading?: boolean;\n /** Custom text for the confirm/delete button (defaults to 'Delete') */\n confirmText?: string;\n /** Custom text for the cancel button (defaults to 'Cancel') */\n cancelText?: string;\n /** Additional CSS classes to apply to the dialog container */\n className?: string;\n};\n\n/**\n * DeleteDialog - Pre-configured dialog for delete confirmations\n *\n * @example\n * ```tsx\n * <DeleteDialog\n * isOpen={showDelete}\n * onClose={() => setShowDelete(false)}\n * onConfirm={handleDelete}\n * itemName=\"user account\"\n * />\n * ```\n */\nfunction DeleteDialog({\n isOpen,\n onClose,\n onConfirm,\n title = 'Confirm Deletion',\n description,\n itemName,\n isLoading = false,\n confirmText = 'Delete',\n cancelText = 'Cancel',\n className = ''\n}: Readonly<DeleteDialogProps>) {\n const defaultDescription = itemName\n ? `Are you sure you want to delete \"${itemName}\"? This action cannot be undone.`\n : 'Are you sure you want to delete this item? This action cannot be undone.';\n\n const finalDescription = description || defaultDescription;\n\n return (\n <Dialog\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n className={className}\n actions={\n <>\n <Button\n onClick={onClose}\n disabled={isLoading}\n className=\"bg-muted hover:bg-muted/80 text-muted-foreground\"\n icon={<Icon name=\"x\" size=\"xs\" />}\n >\n {cancelText}\n </Button>\n <Button\n onClick={onConfirm}\n disabled={isLoading}\n className=\"bg-destructive hover:bg-destructive/90 text-destructive-foreground\"\n icon={<Icon name=\"trash\" size=\"xs\" />}\n >\n {isLoading ? 'Deleting...' : confirmText}\n </Button>\n </>\n }\n >\n <p className=\"text-foreground\">{finalDescription}</p>\n </Dialog>\n );\n}\n\nDeleteDialog.displayName = 'DeleteDialog';\n\nexport default DeleteDialog;\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport type PopoverProps = {\n /** Trigger element to click for opening the popover (alternative to children) */\n trigger?: React.ReactNode;\n /** Trigger element to click for opening the popover (takes precedence over trigger prop) */\n children?: React.ReactNode;\n /** Content to display inside the popover panel when opened */\n content: React.ReactNode;\n /** Position of the popover relative to the trigger element */\n position?: 'top' | 'bottom' | 'left' | 'right';\n /** Additional CSS classes to apply to the popover wrapper container */\n className?: string;\n};\n\n/**\n * Popover - Click-to-open content overlay\n *\n * Displays rich content in a floating panel when clicked.\n * Uses portal rendering to escape overflow constraints.\n */\nfunction Popover({ trigger, children, content, position = 'bottom', className = '' }: Readonly<PopoverProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const [coords, setCoords] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLButtonElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const triggerContent = children || trigger;\n\n const calculatePosition = useCallback(() => {\n if (!triggerRef.current || !popoverRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const popoverRect = popoverRef.current.getBoundingClientRect();\n const offset = 8;\n\n let top = 0;\n let left = 0;\n\n switch (position) {\n case 'top':\n top = triggerRect.top - popoverRect.height - offset;\n left = triggerRect.left + triggerRect.width / 2 - popoverRect.width / 2;\n break;\n case 'bottom':\n top = triggerRect.bottom + offset;\n left = triggerRect.left + triggerRect.width / 2 - popoverRect.width / 2;\n break;\n case 'left':\n top = triggerRect.top + triggerRect.height / 2 - popoverRect.height / 2;\n left = triggerRect.left - popoverRect.width - offset;\n break;\n case 'right':\n top = triggerRect.top + triggerRect.height / 2 - popoverRect.height / 2;\n left = triggerRect.right + offset;\n break;\n }\n\n // Viewport clamping\n const padding = 8;\n if (left < padding) left = padding;\n if (left + popoverRect.width > window.innerWidth - padding) {\n left = window.innerWidth - popoverRect.width - padding;\n }\n if (top < padding) top = padding;\n if (top + popoverRect.height > window.innerHeight - padding) {\n top = window.innerHeight - popoverRect.height - padding;\n }\n\n setCoords({ top, left });\n }, [position]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(event.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n // Position on next frame\n requestAnimationFrame(() => {\n calculatePosition();\n });\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n window.addEventListener('scroll', calculatePosition, true);\n window.addEventListener('resize', calculatePosition);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n window.removeEventListener('scroll', calculatePosition, true);\n window.removeEventListener('resize', calculatePosition);\n };\n }\n return undefined;\n }, [isOpen, calculatePosition]);\n\n const popover = isOpen ? (\n <div\n ref={popoverRef}\n role=\"dialog\"\n aria-modal=\"false\"\n className={`\n fixed z-9999\n min-w-[200px] max-w-sm\n bg-popover text-popover-foreground \n border border-border \n rounded-lg \n shadow-xl \n p-4\n animate-in fade-in-0 zoom-in-95\n ${className}\n `}\n style={{\n top: `${coords.top}px`,\n left: `${coords.left}px`\n }}\n >\n {content}\n </div>\n ) : null;\n\n return (\n <>\n <button\n ref={triggerRef}\n onClick={() => setIsOpen(!isOpen)}\n className=\"inline-flex bg-transparent border-0 p-0 cursor-pointer\"\n type=\"button\"\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n >\n {triggerContent}\n </button>\n {popover && createPortal(popover, document.body)}\n </>\n );\n}\n\nPopover.displayName = 'Popover';\n\nexport default Popover;\n","import Text from '../../typography/text/text';\n\nexport type ProgressBarProps = {\n /** Current progress value */\n value: number;\n /** Maximum value for the progress bar (defaults to 100) */\n max?: number;\n /** Whether to display the percentage label next to the progress bar */\n showLabel?: boolean;\n /** Visual style variant indicating the progress state */\n variant?: 'default' | 'success' | 'warning' | 'error';\n /** Additional CSS classes to apply to the progress bar container */\n className?: string;\n};\n\n/**\n * ProgressBar - Visual representation of completion\n */\nfunction ProgressBar({ value, max = 100, showLabel, variant = 'default', className = '' }: Readonly<ProgressBarProps>) {\n const percentage = Math.min((value / max) * 100, 100);\n\n const variantClasses = {\n default: 'bg-primary',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-destructive'\n };\n\n return (\n <div className={`flex items-center gap-3 ${className}`}>\n <div className=\"flex-1 bg-muted/30 rounded-full h-2.5 overflow-hidden shadow-inner\">\n <div\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n className={`h-full transition-all duration-500 ease-out rounded-full ${variantClasses[variant]}`}\n style={{ width: `${percentage}%` }}\n />\n </div>\n {showLabel && (\n <Text variant=\"muted\" weight=\"medium\" size=\"sm\">\n {Math.round(percentage)}%\n </Text>\n )}\n </div>\n );\n}\n\nProgressBar.displayName = 'ProgressBar';\n\nexport default ProgressBar;\n","export type SkeletonProps = {\n /** Shape variant of the skeleton placeholder */\n variant?: 'text' | 'circular' | 'rectangular';\n /** Width of the skeleton (CSS value, defaults to 100% for text/rectangular, 40px for circular) */\n width?: string;\n /** Height of the skeleton (CSS value, defaults based on variant) */\n height?: string;\n /** Additional CSS classes to apply to the skeleton container */\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Skeleton - Placeholder for loading state\n */\nfunction Skeleton({ variant = 'text', width, height, className = '', ...props }: Readonly<SkeletonProps>) {\n const variantClasses = {\n text: 'rounded h-4',\n circular: 'rounded-full',\n rectangular: 'rounded-md'\n };\n\n const style = {\n width: width || (variant === 'circular' ? '40px' : '100%'),\n height: height || (variant === 'circular' ? '40px' : undefined)\n };\n\n return (\n <div\n className={`bg-muted animate-pulse ${variantClasses[variant]} ${className}`}\n style={style}\n aria-busy=\"true\"\n aria-live=\"polite\"\n {...props}\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n}\n\nSkeleton.displayName = 'Skeleton';\n\nexport default Skeleton;\n","import { ReactNode, CSSProperties } from 'react';\n\nexport type TransitionType =\n | 'fade'\n | 'slide-up'\n | 'slide-down'\n | 'slide-left'\n | 'slide-right'\n | 'scale'\n | 'scale-fade'\n | 'slide-fade-up'\n | 'slide-fade-down'\n | 'zoom';\n\nexport type TransitionDuration = 'fast' | 'normal' | 'slow' | number;\n\nexport type SmoothTransitionProps = {\n /** Content to animate */\n children: ReactNode;\n /** Whether to show the content (controls animation state) */\n show?: boolean;\n /** Type of animation to apply */\n type?: TransitionType;\n /** Duration of the animation ('fast', 'normal', 'slow', or custom milliseconds) */\n duration?: TransitionDuration;\n /** Delay before animation starts (in ms) */\n delay?: number;\n /** Additional CSS classes */\n className?: string;\n /** Additional inline styles */\n style?: CSSProperties;\n /** Apply hover effect (scale and shadow on hover) */\n hover?: boolean;\n /** Apply active effect (scale down on click) */\n active?: boolean;\n};\n\nconst getDurationClass = (duration: TransitionDuration): string => {\n if (typeof duration === 'number') {\n return '';\n }\n switch (duration) {\n case 'fast':\n return 'duration-150';\n case 'slow':\n return 'duration-500';\n case 'normal':\n default:\n return 'duration-300';\n }\n};\n\nconst getTransitionClasses = (type: TransitionType, show: boolean, hover: boolean, active: boolean): string => {\n const baseClasses = 'transition-all';\n let typeClasses = '';\n\n if (!show) {\n switch (type) {\n case 'fade':\n typeClasses = 'opacity-0';\n break;\n case 'slide-up':\n typeClasses = 'translate-y-4 opacity-0';\n break;\n case 'slide-down':\n typeClasses = '-translate-y-4 opacity-0';\n break;\n case 'slide-left':\n typeClasses = 'translate-x-4 opacity-0';\n break;\n case 'slide-right':\n typeClasses = '-translate-x-4 opacity-0';\n break;\n case 'scale':\n typeClasses = 'scale-95 opacity-0';\n break;\n case 'scale-fade':\n typeClasses = 'scale-90 opacity-0';\n break;\n case 'slide-fade-up':\n typeClasses = 'translate-y-2 opacity-0';\n break;\n case 'slide-fade-down':\n typeClasses = '-translate-y-2 opacity-0';\n break;\n case 'zoom':\n typeClasses = 'scale-0 opacity-0';\n break;\n default:\n typeClasses = 'opacity-0';\n }\n } else {\n typeClasses = 'translate-y-0 translate-x-0 scale-100 opacity-100';\n }\n\n const hoverClasses = hover ? 'hover:scale-105 hover:shadow-lg' : '';\n const activeClasses = active ? 'active:scale-95' : '';\n\n return `${baseClasses} ${typeClasses} ${hoverClasses} ${activeClasses}`.trim();\n};\n\n/**\n * SmoothTransition - A reusable component for smooth animations and transitions\n *\n * @example\n * // Fade in/out\n * <SmoothTransition show={isOpen} type=\"fade\">\n * <div>Content</div>\n * </SmoothTransition>\n *\n * @example\n * // Slide up with hover effect\n * <SmoothTransition show={true} type=\"slide-fade-up\" hover>\n * <button>Click me</button>\n * </SmoothTransition>\n *\n * @example\n * // Custom duration\n * <SmoothTransition show={isVisible} type=\"scale-fade\" duration={500}>\n * <div>Animated content</div>\n * </SmoothTransition>\n *\n * @example\n * // Delayed animation\n * <SmoothTransition show={true} type=\"fade\" delay={200}>\n * <div>Appears after 200ms</div>\n * </SmoothTransition>\n */\nfunction SmoothTransition({\n children,\n show = true,\n type = 'fade',\n duration = 'normal',\n delay = 0,\n className = '',\n style = {},\n hover = false,\n active = false\n}: Readonly<SmoothTransitionProps>) {\n const durationClass = getDurationClass(duration);\n const transitionClasses = getTransitionClasses(type, show, hover, active);\n\n const customStyle: CSSProperties = {\n ...style,\n transitionDuration: typeof duration === 'number' ? `${duration}ms` : undefined,\n transitionDelay: delay > 0 ? `${delay}ms` : undefined\n };\n\n return (\n <div className={`${transitionClasses} ${durationClass} ${className}`} style={customStyle}>\n {children}\n </div>\n );\n}\n\nSmoothTransition.displayName = 'SmoothTransition';\n\nexport default SmoothTransition;\n\n/**\n * Hook for creating staggered animations\n *\n * @example\n * const delays = useStaggeredTransition(5, 100);\n * items.map((item, i) => (\n * <SmoothTransition key={i} delay={delays[i]}>\n * {item}\n * </SmoothTransition>\n * ))\n */\nexport function useStaggeredTransition(count: number, baseDelay: number = 50): number[] {\n return Array.from({ length: count }, (_, i) => i * baseDelay);\n}\n","import { Size, spinnerSizes } from '../../../theme/size-tokens';\n\nexport type SpinnerProps = {\n /** Size variant - uses unified size system */\n size?: Size;\n /** Color variant */\n variant?: 'primary' | 'accent' | 'secondary' | 'neutral';\n /** Additional CSS classes to apply to the spinner container */\n className?: string;\n /** Override animation duration (e.g. '0.6s') */\n speed?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Spinner - Loading indicator\n * Uses unified size system from theme/size-tokens\n */\nfunction Spinner({ size = 'xl', variant = 'primary', className = '', speed, ...props }: Readonly<SpinnerProps>) {\n const sizeConfig = spinnerSizes[size];\n\n const variantTopBorder = {\n primary: 'border-t-primary',\n accent: 'border-t-accent',\n secondary: 'border-t-secondary',\n neutral: 'border-t-neutral'\n }[variant];\n\n const duration = speed ? `[animation-duration:${speed}]` : '';\n\n return (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n data-variant={variant}\n className={`inline-block border-muted ${variantTopBorder} rounded-full animate-spin box-border ${duration} ${sizeConfig.classes} ${sizeConfig.border} ${className}`}\n {...props}\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n}\n\nSpinner.displayName = 'Spinner';\n\nexport default Spinner;\n","import { useEffect, useState, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport type ToastProps = {\n /** Text message to display in the toast (alternative to children) */\n message?: string;\n /** React content to display in the toast (takes precedence over message) */\n children?: React.ReactNode;\n /** Visual style variant indicating the type of notification (info, success, warning, or error) */\n type?: 'info' | 'success' | 'warning' | 'error';\n /** Callback function invoked when the toast is closed (either manually or via auto-dismiss) */\n onClose?: () => void;\n /** Additional CSS classes to apply to the toast container */\n className?: string;\n /** Auto-dismiss duration in milliseconds (0 to disable) */\n duration?: number;\n};\n\n/**\n * Toast - Notification popup with slide-in/out animations and auto-dismiss\n */\nfunction Toast({ message, children, type = 'info', onClose, className = '', duration = 5000 }: Readonly<ToastProps>) {\n const [isClosing, setIsClosing] = useState(false);\n\n const typeClasses = {\n info: 'bg-info text-info-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n error: 'bg-destructive text-destructive-foreground'\n };\n\n const handleClose = useCallback(() => {\n setIsClosing(true);\n // Wait for animation to complete before calling onClose\n setTimeout(() => {\n onClose?.();\n }, 300); // Match animation duration\n }, [onClose]);\n\n useEffect(() => {\n if (duration > 0) {\n const timer = setTimeout(() => {\n handleClose();\n }, duration);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [duration, handleClose]);\n\n const toast = (\n <div\n role=\"alert\"\n aria-live=\"polite\"\n className={`fixed bottom-4 right-4 left-4 sm:left-auto sm:max-w-md px-4 py-3 rounded-md shadow-lg z-[9999] ${typeClasses[type]} transition-all duration-300 ease-out ${\n isClosing ? 'opacity-0 translate-x-full' : 'opacity-100 translate-x-0 animate-slideInRight'\n } ${className}`}\n >\n <span>{children || message}</span>\n {onClose && (\n <button onClick={handleClose} className=\"ml-4 font-bold hover:opacity-70 transition-opacity\" aria-label=\"Close\">\n ×\n </button>\n )}\n </div>\n );\n\n return typeof document !== 'undefined' ? createPortal(toast, document.body) : toast;\n}\n\nToast.displayName = 'Toast';\n\nexport default Toast;\n","import { ReactNode } from 'react';\n\nexport type ButtonGroupProps = {\n /** Button components to group together */\n children: ReactNode;\n /** Additional CSS classes applied to the container */\n className?: string;\n /** Grouping style - default merges buttons with shared borders, separated adds gap between buttons */\n variant?: 'default' | 'separated';\n /** Layout direction - horizontal arranges buttons in a row, vertical stacks them */\n orientation?: 'horizontal' | 'vertical';\n};\n\n/**\n * ButtonGroup - Groups related buttons together\n */\nfunction ButtonGroup({\n children,\n className = '',\n variant = 'default',\n orientation = 'horizontal'\n}: Readonly<ButtonGroupProps>) {\n const baseClasses = 'inline-flex';\n const orientationClasses = orientation === 'horizontal' ? 'flex-row' : 'flex-col';\n\n let variantClasses = '';\n if (variant === 'separated') {\n variantClasses = 'gap-2';\n } else if (orientation === 'horizontal') {\n variantClasses =\n '[&>button]:rounded-none [&>button:first-child]:rounded-l-md [&>button:last-child]:rounded-r-md [&>button:not(:last-child)]:border-r-0';\n } else {\n variantClasses =\n '[&>button]:rounded-none [&>button:first-child]:rounded-t-md [&>button:last-child]:rounded-b-md [&>button:not(:last-child)]:border-b-0';\n }\n\n return <div className={`${baseClasses} ${orientationClasses} ${variantClasses} ${className}`}>{children}</div>;\n}\n\nButtonGroup.displayName = 'ButtonGroup';\n\nexport default ButtonGroup;\n","import { useState } from 'react';\n\nexport type CalendarProps = {\n /**\n * The currently selected date\n */\n value?: Date;\n /**\n * Callback when a date is selected\n */\n onChange?: (date: Date) => void;\n /**\n * Minimum selectable date\n */\n minDate?: Date;\n /**\n * Maximum selectable date\n */\n maxDate?: Date;\n /**\n * Disabled state\n */\n disabled?: boolean;\n /**\n * Additional CSS classes\n */\n className?: string;\n};\n\n/**\n * Calendar - A simple date picker component\n *\n * Displays a month view calendar for date selection with keyboard navigation support.\n */\nfunction Calendar({ value, onChange, minDate, maxDate, disabled = false, className = '' }: Readonly<CalendarProps>) {\n const [currentMonth, setCurrentMonth] = useState(value || new Date());\n const [selectedDate, setSelectedDate] = useState<Date | undefined>(value);\n\n const getDaysInMonth = (date: Date) => {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n };\n\n const getFirstDayOfMonth = (date: Date) => {\n return new Date(date.getFullYear(), date.getMonth(), 1).getDay();\n };\n\n const handleDateClick = (day: number) => {\n if (disabled) return;\n\n const newDate = new Date(currentMonth.getFullYear(), currentMonth.getMonth(), day);\n\n // Check min/max date constraints\n if (minDate && newDate < minDate) return;\n if (maxDate && newDate > maxDate) return;\n\n setSelectedDate(newDate);\n onChange?.(newDate);\n };\n\n const handlePreviousMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1));\n };\n\n const handleNextMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1));\n };\n\n const daysInMonth = getDaysInMonth(currentMonth);\n const firstDayOfMonth = getFirstDayOfMonth(currentMonth);\n const monthName = currentMonth.toLocaleDateString('en-US', { month: 'long', year: 'numeric' });\n\n const weekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n const isDateSelected = (day: number) => {\n if (!selectedDate) return false;\n return (\n selectedDate.getDate() === day &&\n selectedDate.getMonth() === currentMonth.getMonth() &&\n selectedDate.getFullYear() === currentMonth.getFullYear()\n );\n };\n\n const isDateDisabled = (day: number) => {\n const date = new Date(currentMonth.getFullYear(), currentMonth.getMonth(), day);\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n };\n\n return (\n <div\n className={`inline-block border border-border rounded-lg bg-card text-card-foreground shadow-sm p-4 ${\n disabled ? 'opacity-50 pointer-events-none' : ''\n } ${className}`.trim()}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n type=\"button\"\n onClick={handlePreviousMonth}\n className=\"p-2 hover:bg-muted rounded-md transition-colors focus:outline-none focus:ring-2 focus:ring-ring\"\n aria-label=\"Previous month\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n <span className=\"font-semibold text-sm\">{monthName}</span>\n <button\n type=\"button\"\n onClick={handleNextMonth}\n className=\"p-2 hover:bg-muted rounded-md transition-colors focus:outline-none focus:ring-2 focus:ring-ring\"\n aria-label=\"Next month\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </div>\n\n {/* Week days */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {weekDays.map((day) => (\n <div key={day} className=\"w-9 h-9 flex items-center justify-center text-xs font-medium text-muted-foreground\">\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar days */}\n <div className=\"grid grid-cols-7 gap-1\">\n {/* Empty cells for days before the first day of the month */}\n {Array.from({ length: firstDayOfMonth }).map((_, index) => (\n <div key={`empty-${index}`} className=\"w-9 h-9\" />\n ))}\n\n {/* Actual days of the month */}\n {Array.from({ length: daysInMonth }).map((_, index) => {\n const day = index + 1;\n const selected = isDateSelected(day);\n const dateDisabled = isDateDisabled(day);\n\n return (\n <button\n key={day}\n type=\"button\"\n onClick={() => handleDateClick(day)}\n disabled={dateDisabled}\n className={`\n w-9 h-9 flex items-center justify-center text-sm rounded-md transition-colors\n focus:outline-none focus:ring-2 focus:ring-ring\n ${selected ? 'bg-primary text-primary-foreground font-semibold' : 'hover:bg-muted'}\n ${dateDisabled ? 'text-muted-foreground cursor-not-allowed opacity-50' : ''}\n `.trim()}\n aria-label={`Select ${day} ${monthName}`}\n aria-pressed={selected}\n >\n {day}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nCalendar.displayName = 'Calendar';\n\nexport default Calendar;\n","import { useState, useRef, useEffect } from 'react';\nimport Calendar from '../calendar/calendar';\nimport Icon from '../../system/icon/icon';\nimport { interactiveSizes, getIconPixels, type InteractiveSize } from '../../../theme/size-tokens';\n\nexport type DatePickerProps = {\n /**\n * The currently selected date\n */\n value?: Date;\n /**\n * Callback when a date is selected\n */\n onChange?: (date: Date | undefined) => void;\n /**\n * Minimum selectable date\n */\n minDate?: Date;\n /**\n * Maximum selectable date\n */\n maxDate?: Date;\n /**\n * Placeholder text when no date is selected\n */\n placeholder?: string;\n /**\n * Disabled state\n */\n disabled?: boolean;\n /**\n * Date format string (default: 'MM/DD/YYYY')\n */\n dateFormat?: string;\n /**\n * Show clear button\n */\n clearable?: boolean;\n /**\n * Additional CSS classes\n */\n className?: string;\n /**\n * Input size - uses unified size system\n */\n size?: InteractiveSize;\n};\n\n/**\n * DatePicker - Input field with calendar popup for date selection\n *\n * Features:\n * - Calendar popup on click\n * - Keyboard navigation (Arrow keys, Enter, Escape)\n * - Date formatting\n * - Min/max date constraints\n * - Clearable option\n * - Accessible with proper ARIA labels\n *\n * @example\n * ```tsx\n * const [date, setDate] = useState<Date>();\n *\n * <DatePicker\n * value={date}\n * onChange={setDate}\n * placeholder=\"Select a date\"\n * clearable\n * />\n * ```\n */\nfunction DatePicker({\n value,\n onChange,\n minDate,\n maxDate,\n placeholder = 'Select date',\n disabled = false,\n dateFormat = 'MM/DD/YYYY',\n clearable = true,\n className = '',\n size = 'md'\n}: Readonly<DatePickerProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedDate, setSelectedDate] = useState<Date | undefined>(value);\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Update internal state when value prop changes\n useEffect(() => {\n setSelectedDate(value);\n }, [value]);\n\n // Close calendar on click outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n return undefined;\n }, [isOpen]);\n\n // Close on Escape key\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n setIsOpen(false);\n inputRef.current?.focus();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n return undefined;\n }, [isOpen]);\n\n const formatDate = (date: Date | undefined): string => {\n if (!date) return '';\n\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const year = date.getFullYear();\n\n // Simple format replacement\n return dateFormat\n .replace('MM', month)\n .replace('DD', day)\n .replace('YYYY', String(year))\n .replace('YY', String(year).slice(-2));\n };\n\n const handleDateSelect = (date: Date) => {\n setSelectedDate(date);\n onChange?.(date);\n setIsOpen(false);\n inputRef.current?.focus();\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n setSelectedDate(undefined);\n onChange?.(undefined);\n inputRef.current?.focus();\n };\n\n const handleInputClick = () => {\n if (!disabled) {\n setIsOpen(!isOpen);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(!isOpen);\n }\n };\n\n // Utility to extract the base (non-responsive) height class\n function getBaseHeightClass(heightClasses: string): string {\n // Match 'h-...' not prefixed by a colon (responsive variant)\n const classes = heightClasses.split(' ');\n const base = classes.find((cls) => /^h-\\d+/.test(cls));\n return base || classes[0] || '';\n }\n\n // Use unified interactive sizes\n const sizeConfig = interactiveSizes[size] || interactiveSizes.md;\n const containerClasses = `${getBaseHeightClass(sizeConfig.height)} ${sizeConfig.padding}`;\n const textClasses = sizeConfig.text;\n const iconSize = getIconPixels(size, 'desktop');\n\n return (\n <div ref={containerRef} className={`relative w-full ${className}`}>\n {/* Input field */}\n <div\n className={`\n w-full flex items-center justify-between gap-2\n border border-input rounded-md\n bg-background text-foreground\n cursor-pointer\n transition-all duration-200\n ${containerClasses}\n ${textClasses}\n ${isOpen ? 'ring-2 ring-ring ring-offset-2' : 'hover:border-ring'}\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n `.trim()}\n onClick={handleInputClick}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-label=\"Date picker\"\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={formatDate(selectedDate)}\n placeholder={placeholder}\n readOnly\n disabled={disabled}\n className={`flex-1 min-w-0 bg-transparent outline-none cursor-pointer placeholder:text-muted-foreground ${textClasses}`}\n aria-label=\"Selected date\"\n />\n\n <div className=\"flex items-center gap-1 shrink-0\">\n {clearable && selectedDate && !disabled ? (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"p-1 hover:bg-muted rounded transition-colors shrink-0\"\n aria-label=\"Clear date\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize - 2}\n height={iconSize - 2}\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 ) : clearable ? (\n <div className=\"w-6 h-6 shrink-0\" />\n ) : null}\n <Icon name=\"calendar\" size={size} className=\"text-muted-foreground shrink-0\" />\n </div>\n </div>\n\n {/* Calendar popup */}\n {isOpen && !disabled && (\n <div\n className=\"absolute left-0 top-full mt-2 z-50 animate-scaleIn origin-top\"\n role=\"dialog\"\n aria-label=\"Calendar\"\n >\n <Calendar value={selectedDate} onChange={handleDateSelect} minDate={minDate} maxDate={maxDate} />\n </div>\n )}\n </div>\n );\n}\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;\n","import { codeSizes, type CodeSize } from '../../../theme/size-tokens';\nimport { StatusColorProp } from '../../../theme/tokens';\n\nexport type CodeProps = {\n /**\n * The code content to display\n */\n children: React.ReactNode;\n /**\n * Size variant - uses unified size system\n */\n size?: CodeSize;\n /**\n * Color variant\n */\n variant?: StatusColorProp;\n /**\n * Additional CSS classes\n */\n className?: string;\n};\n\n/**\n * Code - Inline code display component\n *\n * For displaying short inline code snippets with syntax highlighting.\n * For multi-line code blocks, use the CodeBlock component instead.\n */\nfunction Code({ children, size = 'md', variant = 'default', className = '' }: Readonly<CodeProps>) {\n const sizeClasses = codeSizes[size];\n\n const variantClasses = {\n default: 'bg-muted text-foreground',\n primary: 'bg-primary/10 text-primary',\n success: 'bg-success/10 text-success',\n warning: 'bg-warning/10 text-warning',\n error: 'bg-destructive/10 text-destructive'\n };\n\n return (\n <code\n className={`\n inline-block font-mono rounded border border-border/50\n ${sizeClasses}\n ${variantClasses[variant]}\n ${className}\n `.trim()}\n >\n {children}\n </code>\n );\n}\n\nCode.displayName = 'Code';\n\nexport default Code;\n","import { ReactNode } from 'react';\n\nimport { formSpacing, type FormSpacing } from '../../../theme/size-tokens';\n\nexport type FieldsetProps = {\n /** Form controls to group together - typically FormField components */\n children: ReactNode;\n /** Legend text displayed at top of fieldset */\n legend?: string;\n /** Disables all form controls within the fieldset */\n disabled?: boolean;\n /** HTML id attribute */\n id?: string;\n /** Layout direction for children */\n direction?: 'horizontal' | 'vertical';\n /** Gap spacing between children elements */\n spacing?: FormSpacing;\n /** Cross-axis alignment */\n align?: 'start' | 'center' | 'end' | 'stretch';\n /** Main-axis alignment */\n justify?: 'start' | 'center' | 'end' | 'between' | 'around';\n /** Show border around fieldset */\n bordered?: boolean;\n};\n\nconst alignClasses = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch'\n} as const;\n\nconst justifyClasses = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around'\n} as const;\n\n/**\n * Fieldset - Semantic grouping for related form controls\n *\n * Groups related form fields with an optional legend.\n * All child inputs are disabled when the fieldset is disabled.\n *\n * @example\n * ```tsx\n * <Fieldset legend=\"Personal Information\" spacing=\"md\">\n * <FormField label=\"First Name\">\n * <Input placeholder=\"John\" />\n * </FormField>\n * <FormField label=\"Last Name\">\n * <Input placeholder=\"Doe\" />\n * </FormField>\n * </Fieldset>\n * ```\n */\nfunction Fieldset({\n children,\n legend,\n disabled = false,\n id,\n direction = 'vertical',\n spacing = 'md',\n align = 'stretch',\n justify,\n bordered = true\n}: Readonly<FieldsetProps>) {\n const directionClass = direction === 'horizontal' ? 'flex-row flex-wrap' : 'flex-col';\n const justifyClass = justify ? justifyClasses[justify] : '';\n const borderClass = bordered ? 'border border-border rounded-lg p-4' : '';\n const disabledClass = disabled ? 'opacity-50' : '';\n\n return (\n <fieldset disabled={disabled} id={id} className={`${borderClass} ${disabledClass}`.trim()}>\n {legend && <legend className=\"px-2 text-sm font-semibold text-foreground\">{legend}</legend>}\n <div className={`flex ${directionClass} ${formSpacing[spacing]} ${alignClasses[align]} ${justifyClass}`.trim()}>\n {children}\n </div>\n </fieldset>\n );\n}\n\nFieldset.displayName = 'Fieldset';\n\nexport default Fieldset;\n","import { FormEvent, ReactNode } from 'react';\n\nimport { formSpacing, type FormSpacing } from '../../../theme/size-tokens';\n\nexport type FormProps = {\n /** Form content - typically FormField, Fieldset, or Button components */\n children: ReactNode;\n /** Form submission handler - automatically prevents default */\n onSubmit?: (e: FormEvent<HTMLFormElement>) => void;\n /** HTML form method */\n method?: 'get' | 'post';\n /** Form action URL for native submission */\n action?: string;\n /** Disable browser validation */\n noValidate?: boolean;\n /** HTML id attribute */\n id?: string;\n /** Accessible label for screen readers */\n ariaLabel?: string;\n /** Spacing between form elements */\n spacing?: FormSpacing;\n};\n\n/**\n * Form - Semantic form wrapper with layout support\n *\n * Automatically prevents default on submit when onSubmit is provided.\n * Uses flexbox for layout with configurable direction, spacing, and alignment.\n *\n * @example\n * ```tsx\n * <Form onSubmit={handleSubmit} spacing=\"md\">\n * <FormField label=\"Email\" required>\n * <Input type=\"email\" />\n * </FormField>\n * <Button type=\"submit\">Submit</Button>\n * </Form>\n * ```\n */\n\nfunction Form({\n children,\n onSubmit,\n method,\n action,\n noValidate = false,\n id,\n ariaLabel,\n spacing = 'md'\n}: Readonly<FormProps>) {\n const handleSubmit = (e: FormEvent<HTMLFormElement>) => {\n if (onSubmit) {\n e.preventDefault();\n onSubmit(e);\n }\n };\n\n return (\n <form\n onSubmit={handleSubmit}\n method={method}\n action={action}\n noValidate={noValidate}\n id={id}\n aria-label={ariaLabel}\n className={`flex flex-col ${formSpacing[spacing]}`}\n >\n {children}\n </form>\n );\n}\n\nForm.displayName = 'Form';\n\nexport default Form;\n","import { ReactNode, ReactElement, cloneElement, isValidElement, useId } from 'react';\n\nimport {\n validationTextClasses,\n formSpacing,\n type ValidationState,\n type FormSpacing,\n type InputWidth,\n inputWidthSizes\n} from '../../../theme/size-tokens';\nimport { type Alignment, inputAlignClasses } from '../../../theme/tokens';\n\nexport type { ValidationState };\n\nexport type FormFieldProps = {\n /** Form input component - typically Input, Select, Textarea, etc. */\n children: ReactNode;\n /** Label text displayed above the input */\n label?: string;\n /** Error message to display */\n error?: string;\n /** Helper text displayed below input */\n helperText?: string;\n /** Shows required asterisk next to label */\n required?: boolean;\n /** Spacing between label, input, and helper text */\n spacing?: FormSpacing;\n /** Disables the form field and child input */\n disabled?: boolean;\n /** HTML id for the input - auto-generated if not provided */\n id?: string;\n /** Width of the form field - uses semantic sizing */\n width?: InputWidth;\n /** Aligns the form field - left, center, or right */\n align?: Alignment;\n /** Reserve space for helper/error text to prevent layout shift */\n reserveMessageSpace?: boolean;\n};\n\n/**\n * FormField - Simple wrapper for form inputs with label and error display\n *\n * For most use cases, prefer the unified components:\n * - FormInput - for text inputs\n * - FormSelect - for dropdowns\n * - FormTextarea - for multi-line text\n *\n * Use FormField when you need to wrap custom or third-party inputs.\n *\n * @example\n * ```tsx\n * <FormField label=\"Email\" required error={errors.email}>\n * <Input type=\"email\" placeholder=\"you@example.com\" />\n * </FormField>\n * ```\n */\nfunction FormField({\n children,\n label,\n error,\n helperText,\n required = false,\n spacing = 'sm',\n disabled = false,\n id: providedId,\n width = 'full',\n align = 'center',\n reserveMessageSpace = false\n}: Readonly<FormFieldProps>) {\n const autoId = useId();\n const inputId = providedId ?? autoId;\n\n const validationState: ValidationState = error ? 'error' : 'default';\n const hasMessage = !!(error || helperText);\n\n const enhancedChild = isValidElement(children)\n ? cloneElement(\n children as ReactElement<{\n validationState?: ValidationState;\n disabled?: boolean;\n id?: string;\n 'aria-describedby'?: string;\n }>,\n {\n validationState,\n ...(disabled ? { disabled: true } : {}),\n id: inputId,\n ...(hasMessage ? { 'aria-describedby': `${inputId}-message` } : {})\n }\n )\n : children;\n\n const widthClass = inputWidthSizes[width];\n const alignmentClass = inputAlignClasses[align];\n\n // Only reserve space when there's no helper text but we want to prevent layout shift for errors\n const shouldReserveSpace = reserveMessageSpace && !helperText;\n\n return (\n <div className={`flex flex-col ${widthClass} ${alignmentClass} ${formSpacing[spacing]}`}>\n {label && (\n <label htmlFor={inputId} className=\"text-sm font-semibold text-foreground\">\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n )}\n\n {enhancedChild}\n\n {(helperText || error || shouldReserveSpace) && (\n <p\n id={`${inputId}-message`}\n className={`text-sm ${error ? validationTextClasses.error : validationTextClasses.default}`}\n aria-live=\"polite\"\n >\n {error || helperText || '\\u00A0'}\n </p>\n )}\n </div>\n );\n}\n\nFormField.displayName = 'FormField';\n\nexport default FormField;\n","import React from 'react';\n\nimport {\n getInputClasses,\n inputWidthSizes,\n type InteractiveSize,\n type InputWidth,\n type ValidationState\n} from '../../../theme/size-tokens';\nimport { AutocompleteOption } from '../../../theme/tokens';\n\nexport type { ValidationState };\n\nexport type InputProps = {\n /** Current input value (controlled) */\n value?: string;\n /** Default value for uncontrolled input */\n defaultValue?: string;\n /** Change event handler for controlled input */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** Focus event handler */\n onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;\n /** Blur event handler */\n onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;\n /** Placeholder text displayed when input is empty */\n placeholder?: string;\n /** Disables input interaction and applies disabled styling */\n disabled?: boolean;\n /** HTML input type attribute */\n type?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search';\n /** Accessible label for screen readers */\n ariaLabel?: string;\n /** React ref for the input element */\n ref?: React.Ref<HTMLInputElement>;\n /** HTML id attribute for the input */\n id?: string;\n /** HTML name attribute for form submission */\n name?: string;\n /** Marks input as required for form validation */\n required?: boolean;\n /** Size variant - uses unified size system */\n size?: InteractiveSize;\n /** Width of the input field - uses semantic sizing */\n width?: InputWidth;\n /** Visual validation state affecting border color and styling */\n validationState?: ValidationState;\n /** HTML autocomplete attribute */\n autoComplete?: AutocompleteOption;\n /** Maximum length of input value */\n maxLength?: number;\n /** Minimum length of input value */\n minLength?: number;\n /** Custom validation rule */\n pattern?: string;\n /** Custom validation message */\n title?: string;\n /** Makes input read-only */\n readOnly?: boolean;\n};\n\n/**\n * Input - Accessible text input with validation state support\n *\n * @example\n * ```tsx\n * <Input placeholder=\"Enter email\" type=\"email\" />\n * <Input validationState=\"error\" placeholder=\"Invalid input\" />\n * <Input size=\"lg\" placeholder=\"Large input\" />\n * <Input width=\"sm\" placeholder=\"ZIP\" type=\"text\" />\n * ```\n */\nfunction Input({\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n placeholder,\n disabled = false,\n type = 'text',\n ariaLabel,\n ref,\n id,\n name,\n required = false,\n size = 'md',\n width,\n validationState = 'default',\n autoComplete,\n maxLength,\n minLength,\n pattern,\n title,\n readOnly = false\n}: Readonly<InputProps>) {\n const widthClass = width ? inputWidthSizes[width] : 'w-full';\n const inputClasses = `${getInputClasses(size, validationState)} ${widthClass}`.trim();\n\n return (\n <input\n type={type}\n value={value}\n defaultValue={defaultValue}\n ref={ref}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n autoComplete={autoComplete}\n disabled={disabled}\n aria-label={ariaLabel}\n id={id}\n name={name}\n required={required}\n readOnly={readOnly}\n maxLength={maxLength}\n minLength={minLength}\n pattern={pattern}\n title={title}\n aria-invalid={validationState === 'error'}\n className={inputClasses}\n />\n );\n}\n\nInput.displayName = 'Input';\n\nexport default Input;\n","import FormField from '../form-field/form-field';\nimport Input, { type InputProps } from '../input/input';\nimport type { FormSpacing } from '../../../theme/size-tokens';\n\nexport type FormInputProps = Omit<InputProps, 'validationState'> & {\n /** Label text displayed above the input */\n label?: string;\n /** Helper text displayed below input */\n helperText?: string;\n /** Spacing between label, input, and helper text */\n spacing?: FormSpacing;\n /** Error message to display */\n error?: string;\n /** Custom validation rule */\n pattern?: string;\n /** Custom validation message */\n title?: string;\n /** Input alignment */\n align?: 'left' | 'center' | 'right';\n /** Reserve space for error message to prevent layout shift */\n reserveMessageSpace?: boolean;\n};\n\n/**\n * FormInput - Input wrapped with FormField for label and error display\n *\n * Uses native HTML5 validation. Set `pattern` and `title` for custom validation messages.\n *\n * **Validation State:**\n * - When `error` prop is provided, the validation state is set to 'error', the input displays\n * error styling (red border), and the error message is shown below the input\n * - The `error` prop takes precedence over `helperText` - only one is displayed at a time\n * - Without an error, `helperText` is displayed in default styling\n *\n * @example\n * ```tsx\n * // Simple required email\n * <FormInput label=\"Email\" type=\"email\" required placeholder=\"you@example.com\" />\n *\n * // With error state\n * <FormInput label=\"Email\" error=\"Invalid email address\" helperText=\"We'll never share\" />\n *\n * // With custom validation message\n * <FormInput\n * label=\"Corporate Email\"\n * type=\"email\"\n * required\n * pattern=\".+@company\\.com\"\n * title=\"Please use your company email address\"\n * placeholder=\"you@company.com\"\n * />\n *\n * // Number with range\n * <FormInput label=\"Age\" type=\"number\" min={18} max={120} required />\n *\n * ```\n */\nfunction FormInput({\n // FormField props\n label,\n helperText,\n spacing,\n error,\n required,\n disabled,\n id,\n pattern,\n title,\n width,\n align = 'center',\n reserveMessageSpace = false,\n onChange,\n ...inputProps\n}: Readonly<FormInputProps>) {\n return (\n <FormField\n label={label}\n helperText={helperText}\n spacing={spacing}\n error={error}\n required={required}\n disabled={disabled}\n id={id}\n width={width}\n align={align}\n reserveMessageSpace={reserveMessageSpace}\n >\n <Input\n {...inputProps}\n onChange={onChange}\n required={required}\n disabled={disabled}\n id={id}\n pattern={pattern}\n title={title}\n />\n </FormField>\n );\n}\n\nFormInput.displayName = 'FormInput';\n\nexport default FormInput;\n","import React from 'react';\n\nimport {\n interactiveSizes,\n inputWidthSizes,\n validationBorderClasses,\n validationRingClasses,\n inputBaseClasses,\n type InteractiveSize,\n type InputWidth,\n type ValidationState\n} from '../../../theme/size-tokens';\n\nexport type { ValidationState };\n\nexport type SelectProps = {\n /** Current selected value (controlled) */\n value?: string;\n /** Default value for uncontrolled select */\n defaultValue?: string;\n /** Change event handler for controlled select */\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n /** Focus event handler */\n onFocus?: (e: React.FocusEvent<HTMLSelectElement>) => void;\n /** Blur event handler */\n onBlur?: (e: React.FocusEvent<HTMLSelectElement>) => void;\n /** Disables select interaction and applies disabled styling */\n disabled?: boolean;\n /** Accessible label for screen readers */\n ariaLabel?: string;\n /** HTML id attribute for the select */\n id?: string;\n /** HTML name attribute for form submission */\n name?: string;\n /** SelectItem children defining the available options */\n children: React.ReactNode;\n /** Marks select as required for form validation */\n required?: boolean;\n /** Size variant - uses unified size system */\n size?: InteractiveSize;\n /** Width of the select field - uses semantic sizing */\n width?: InputWidth;\n /** Visual validation state affecting border color and styling */\n validationState?: ValidationState;\n /** Placeholder text shown as disabled, selected, hidden option */\n label?: string;\n};\n\n// Custom dropdown arrow classes\nconst selectArrowClasses =\n \"appearance-none bg-[url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22none%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20stroke%3D%22%236b7280%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%221.5%22%20d%3D%22M6%208l4%204%204-4%22%2F%3E%3C%2Fsvg%3E')] bg-size-[1.5em] bg-position-[right_0.5rem_center] bg-no-repeat pr-10\";\n\n/**\n * Select - Accessible select dropdown with validation state support\n *\n * @example\n * ```tsx\n * <Select>\n * <SelectItem value=\"1\">Option 1</SelectItem>\n * <SelectItem value=\"2\">Option 2</SelectItem>\n * </Select>\n * ```\n */\nfunction Select({\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n disabled = false,\n ariaLabel,\n id,\n name,\n children,\n required = false,\n size = 'md',\n width,\n validationState = 'default',\n label\n}: Readonly<SelectProps>) {\n const sizeConfig = interactiveSizes[size];\n const sizeClasses = `${sizeConfig.height} px-4 sm:px-3 ${sizeConfig.text}`;\n const widthClass = width ? inputWidthSizes[width] : 'w-full';\n const selectClasses =\n `${inputBaseClasses} ${sizeClasses} ${selectArrowClasses} ${validationBorderClasses[validationState]} ${validationRingClasses[validationState]} ${widthClass}`.trim();\n\n return (\n <select\n value={value}\n defaultValue={defaultValue ?? (label ? '' : undefined)}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n disabled={disabled}\n aria-label={ariaLabel}\n id={id}\n name={name}\n required={required}\n aria-invalid={validationState === 'error'}\n className={selectClasses}\n >\n {label && (\n <option value=\"\" disabled>\n {label}\n </option>\n )}\n {children}\n </select>\n );\n}\n\nSelect.displayName = 'Select';\n\nexport default Select;\n","import FormField from '../form-field/form-field';\nimport Select, { type SelectProps } from '../select/select';\nimport type { FormSpacing } from '../../../theme/size-tokens';\n\nexport type FormSelectProps = Omit<SelectProps, 'validationState' | 'label'> & {\n /** Label text displayed above the select */\n label?: string;\n /** Helper text displayed below select */\n helperText?: string;\n /** Spacing between label, select, and helper text */\n spacing?: FormSpacing;\n /** Error message to display */\n error?: string;\n /** Placeholder option text displayed as first disabled option */\n selectLabel?: string;\n};\n\n/**\n * FormSelect - Select wrapped with FormField for label and error display\n *\n * @example\n * ```tsx\n * <FormSelect label=\"Country\" required>\n * <SelectItem value=\"\">Select a country</SelectItem>\n * <SelectItem value=\"us\">United States</SelectItem>\n * <SelectItem value=\"uk\">United Kingdom</SelectItem>\n * </FormSelect>\n * ```\n */\nfunction FormSelect({\n // FormField props\n label,\n helperText,\n spacing,\n error,\n required,\n disabled,\n id,\n selectLabel,\n ...selectProps\n}: Readonly<FormSelectProps>) {\n return (\n <FormField\n label={label}\n helperText={helperText}\n spacing={spacing}\n error={error}\n required={required}\n disabled={disabled}\n id={id}\n >\n <Select {...selectProps} label={selectLabel} required={required} disabled={disabled} id={id} />\n </FormField>\n );\n}\n\nFormSelect.displayName = 'FormSelect';\n\nexport default FormSelect;\n","import React from 'react';\n\nimport {\n validationBorderClasses,\n validationRingClasses,\n inputBaseClasses,\n type ValidationState\n} from '../../../theme/size-tokens';\n\nexport type { ValidationState };\n\nexport type TextareaProps = {\n /** Current textarea value (controlled) */\n value?: string;\n /** Default value for uncontrolled textarea */\n defaultValue?: string;\n /** Change event handler for controlled textarea */\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n /** Focus event handler */\n onFocus?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;\n /** Blur event handler */\n onBlur?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;\n /** Placeholder text displayed when textarea is empty */\n placeholder?: string;\n /** Disables textarea interaction and applies disabled styling */\n disabled?: boolean;\n /** Accessible label for screen readers */\n ariaLabel?: string;\n /** React ref for the textarea element */\n ref?: React.Ref<HTMLTextAreaElement>;\n /** HTML id attribute for the textarea */\n id?: string;\n /** HTML name attribute for form submission */\n name?: string;\n /** Number of visible text rows */\n rows?: number;\n /** Marks textarea as required for form validation */\n required?: boolean;\n /** Visual validation state affecting border color and styling */\n validationState?: ValidationState;\n /** Maximum length of textarea value */\n maxLength?: number;\n /** Makes textarea read-only */\n readOnly?: boolean;\n /** Controls resize behavior */\n resize?: 'none' | 'vertical' | 'horizontal' | 'both';\n};\n\nconst resizeClasses = {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize'\n} as const;\n\n/**\n * Textarea - Accessible multi-line text input with validation state support\n *\n * @example\n * ```tsx\n * <Textarea placeholder=\"Enter description\" rows={4} />\n * <Textarea validationState=\"error\" placeholder=\"Invalid input\" />\n * ```\n */\nfunction Textarea({\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n placeholder,\n disabled = false,\n ariaLabel,\n ref,\n id,\n name,\n rows = 3,\n required = false,\n validationState = 'default',\n maxLength,\n readOnly = false,\n resize = 'vertical'\n}: Readonly<TextareaProps>) {\n return (\n <textarea\n value={value}\n defaultValue={defaultValue}\n ref={ref}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n disabled={disabled}\n aria-label={ariaLabel}\n id={id}\n name={name}\n rows={rows}\n required={required}\n readOnly={readOnly}\n maxLength={maxLength}\n aria-invalid={validationState === 'error'}\n className={`${inputBaseClasses} w-full min-h-[100px] sm:min-h-20 px-4 sm:px-3 py-3 sm:py-2 text-base sm:text-sm ${resizeClasses[resize]} ${validationBorderClasses[validationState]} ${validationRingClasses[validationState]}`}\n />\n );\n}\n\nTextarea.displayName = 'Textarea';\n\nexport default Textarea;\n","import FormField from '../form-field/form-field';\nimport Textarea, { type TextareaProps } from '../textarea/textarea';\nimport type { FormSpacing } from '../../../theme/size-tokens';\n\nexport type FormTextareaProps = Omit<TextareaProps, 'validationState'> & {\n /** Label text displayed above the textarea */\n label?: string;\n /** Helper text displayed below textarea */\n helperText?: string;\n /** Spacing between label, textarea, and helper text */\n spacing?: FormSpacing;\n /** Error message to display */\n error?: string;\n};\n\n/**\n * FormTextarea - Textarea wrapped with FormField for label and error display\n *\n * @example\n * ```tsx\n * <FormTextarea\n * label=\"Description\"\n * placeholder=\"Enter a description...\"\n * required\n * minLength={10}\n * />\n * ```\n */\nfunction FormTextarea({\n // FormField props\n label,\n helperText,\n spacing,\n error,\n required,\n disabled,\n id,\n onChange,\n ...textareaProps\n}: Readonly<FormTextareaProps>) {\n return (\n <FormField\n label={label}\n helperText={helperText}\n spacing={spacing}\n error={error}\n required={required}\n disabled={disabled}\n id={id}\n >\n <Textarea {...textareaProps} onChange={onChange} required={required} disabled={disabled} id={id} />\n </FormField>\n );\n}\n\nFormTextarea.displayName = 'FormTextarea';\n\nexport default FormTextarea;\n","import { ReactNode, ReactElement, cloneElement, isValidElement } from 'react';\n\nimport { type ValidationState, validationBorderClasses } from '../../../theme/size-tokens';\n\nexport type InputGroupProps = {\n /** Input component - typically Input element */\n children: ReactNode;\n /** Element displayed before the input - icons or text */\n prefix?: ReactNode;\n /** Element displayed after the input - text or button */\n suffix?: ReactNode;\n /** Visual validation state */\n validationState?: ValidationState;\n /** Disables the input group */\n disabled?: boolean;\n /** Additional CSS classes for the input group container */\n className?: string;\n};\n\n// Base container styles\nconst containerBaseClasses =\n 'inline-flex items-stretch rounded-lg border shadow-sm bg-background focus-within:ring-2 focus-within:ring-ring/20 transition-colors duration-150 overflow-hidden';\n\n// CSS selectors to style nested inputs without cloning\nconst inputResetClasses = [\n '[&>input]:border-0 [&>input]:shadow-none [&>input]:rounded-none [&>input]:ring-0',\n '[&>input]:focus:ring-0 [&>input]:focus:border-0 [&>input]:bg-transparent',\n '[&>input]:flex-1 [&>input]:min-w-0'\n].join(' ');\n\n// CSS selectors to style nested buttons\nconst buttonResetClasses = [\n '[&_button]:rounded-none [&_button]:border-0 [&_button]:shadow-none [&_button]:m-0',\n '[&_button]:h-full'\n].join(' ');\n\n/**\n * InputGroup - Combines input with prefix/suffix elements\n *\n * Perfect for search inputs, URL inputs, currency inputs, etc.\n * Automatically styles child inputs to remove borders and blend with the group.\n *\n * @example\n * ```tsx\n * <InputGroup prefix={<Icon name=\"search\" />}>\n * <Input placeholder=\"Search...\" />\n * </InputGroup>\n *\n * <InputGroup prefix=\"$\" suffix=\".00\">\n * <Input type=\"number\" placeholder=\"0\" />\n * </InputGroup>\n *\n * <InputGroup suffix={<Button size=\"sm\">Search</Button>}>\n * <Input placeholder=\"Enter search term\" />\n * </InputGroup>\n * ```\n */\nfunction InputGroup({\n children,\n prefix,\n suffix,\n validationState = 'default',\n disabled = false,\n className\n}: Readonly<InputGroupProps>) {\n const isTextPrefix = typeof prefix === 'string' || typeof prefix === 'number';\n const isTextSuffix = typeof suffix === 'string' || typeof suffix === 'number';\n\n // Get border class based on validation state\n const borderClass =\n validationState === 'default'\n ? 'border-input focus-within:border-ring'\n : validationBorderClasses[validationState].split(' ')[0]; // Just the border color\n\n const disabledClass = disabled ? 'opacity-50 cursor-not-allowed' : '';\n\n // Pass disabled state to child input\n const enhancedChild =\n isValidElement(children) && disabled\n ? cloneElement(children as ReactElement<{ disabled?: boolean }>, { disabled: true })\n : children;\n\n return (\n <div\n className={`${containerBaseClasses} ${borderClass} ${inputResetClasses} ${buttonResetClasses} ${disabledClass} ${className ?? ''}`.trim()}\n >\n {prefix && (\n <div\n className={`flex items-center shrink-0 ${isTextPrefix ? 'px-3 bg-muted/50 text-muted-foreground text-sm' : 'px-3 text-muted-foreground'}`}\n >\n {prefix}\n </div>\n )}\n\n {enhancedChild}\n\n {suffix && (\n <div\n className={\n isTextSuffix\n ? 'flex items-center px-3 bg-muted/50 text-muted-foreground text-sm shrink-0'\n : 'flex items-stretch shrink-0'\n }\n >\n {suffix}\n </div>\n )}\n </div>\n );\n}\n\nInputGroup.displayName = 'InputGroup';\n\nexport default InputGroup;\n","import { useState, useRef, useEffect } from 'react';\nimport Icon from '../../system/icon/icon';\nimport { interactiveSizes, chipSizes, getIconPixels, type InteractiveSize } from '../../../theme/size-tokens';\n\nexport type MultiSelectOption = {\n value: string;\n label: string;\n};\n\nexport type MultiSelectProps = {\n /**\n * Available options to select from\n */\n options: MultiSelectOption[];\n /**\n * Currently selected values\n */\n value?: string[];\n /**\n * Callback when selection changes\n */\n onChange?: (values: string[]) => void;\n /**\n * Placeholder text when no selection\n */\n placeholder?: string;\n /**\n * Disabled state\n */\n disabled?: boolean;\n /**\n * Maximum number of selections allowed\n */\n maxSelections?: number;\n /**\n * Size variant - uses unified size system\n */\n size?: InteractiveSize;\n /**\n * Additional CSS classes\n */\n className?: string;\n};\n\n/**\n * MultiSelect - Select multiple options from a dropdown list\n *\n * Features:\n * - Multiple selections with chips\n * - Searchable dropdown\n * - Keyboard navigation\n * - Max selections limit\n * - Clearable\n * - Accessible\n *\n * @example\n * ```tsx\n * const [selected, setSelected] = useState<string[]>([]);\n *\n * <MultiSelect\n * options={[\n * { value: '1', label: 'Option 1' },\n * { value: '2', label: 'Option 2' }\n * ]}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Select options...\"\n * />\n * ```\n */\nfunction MultiSelect({\n options,\n value = [],\n onChange,\n placeholder = 'Select options...',\n disabled = false,\n maxSelections,\n size = 'md',\n className = ''\n}: Readonly<MultiSelectProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const containerRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const selectedValues = value || [];\n\n // Close on click outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setSearchQuery('');\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n return undefined;\n }, [isOpen]);\n\n // Focus search input when opened\n useEffect(() => {\n if (isOpen && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen]);\n\n const filteredOptions = options.filter((option) => option.label.toLowerCase().includes(searchQuery.toLowerCase()));\n\n const handleToggleOption = (optionValue: string) => {\n const isSelected = selectedValues.includes(optionValue);\n let newValues: string[];\n\n if (isSelected) {\n newValues = selectedValues.filter((v) => v !== optionValue);\n } else {\n if (maxSelections && selectedValues.length >= maxSelections) {\n return; // Don't add if max reached\n }\n newValues = [...selectedValues, optionValue];\n }\n\n onChange?.(newValues);\n };\n\n const handleRemoveValue = (valueToRemove: string, e: React.MouseEvent) => {\n e.stopPropagation();\n const newValues = selectedValues.filter((v) => v !== valueToRemove);\n onChange?.(newValues);\n };\n\n const handleClearAll = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.([]);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else if (focusedIndex >= 0 && focusedIndex < filteredOptions.length) {\n handleToggleOption(filteredOptions[focusedIndex].value);\n }\n break;\n case 'Escape':\n e.preventDefault();\n setIsOpen(false);\n setSearchQuery('');\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setFocusedIndex((prev) => (prev < filteredOptions.length - 1 ? prev + 1 : prev));\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n setFocusedIndex((prev) => (prev > 0 ? prev - 1 : 0));\n break;\n }\n };\n\n const sizeClasses = {\n xs: {\n container: interactiveSizes.xs.height.split(' ')[0].replace('h-', 'min-h-') + ' py-0.5 px-1.5',\n text: interactiveSizes.xs.text,\n chip: chipSizes.sm.classes\n .split(' ')\n .filter((c) => !c.includes('gap'))\n .join(' '),\n icon: getIconPixels('xs', 'desktop')\n },\n sm: {\n container: interactiveSizes.sm.height.split(' ')[0].replace('h-', 'min-h-') + ' py-1 px-2',\n text: interactiveSizes.sm.text,\n chip: chipSizes.sm.classes\n .split(' ')\n .filter((c) => !c.includes('gap'))\n .join(' '),\n icon: getIconPixels('sm', 'desktop')\n },\n md: {\n container: interactiveSizes.md.height.split(' ')[0].replace('h-', 'min-h-') + ' py-2 px-3',\n text: interactiveSizes.md.text,\n chip: chipSizes.md.classes\n .split(' ')\n .filter((c) => !c.includes('gap'))\n .join(' '),\n icon: getIconPixels('md', 'desktop')\n },\n lg: {\n container: interactiveSizes.lg.height.split(' ')[0].replace('h-', 'min-h-') + ' py-2 px-4',\n text: interactiveSizes.lg.text,\n chip: chipSizes.lg.classes\n .split(' ')\n .filter((c) => !c.includes('gap'))\n .join(' '),\n icon: getIconPixels('lg', 'desktop')\n },\n xl: {\n container: interactiveSizes.xl.height.split(' ')[0].replace('h-', 'min-h-') + ' py-2.5 px-5',\n text: interactiveSizes.xl.text,\n chip: chipSizes.lg.classes\n .split(' ')\n .filter((c) => !c.includes('gap'))\n .join(' '),\n icon: getIconPixels('xl', 'desktop')\n }\n };\n\n const currentSize = sizeClasses[size];\n\n const getSelectedLabels = () => {\n return selectedValues.map((v) => options.find((opt) => opt.value === v)?.label).filter(Boolean);\n };\n\n return (\n <div ref={containerRef} className={`relative w-full ${className}`}>\n {/* Trigger */}\n <div\n className={`\n w-full flex flex-wrap items-center gap-1.5\n border border-input rounded-md\n bg-background text-foreground\n cursor-pointer\n transition-all duration-200\n ${currentSize.container}\n ${currentSize.text}\n ${isOpen ? 'ring-2 ring-ring ring-offset-2' : 'hover:border-ring'}\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n `.trim()}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n tabIndex={disabled ? -1 : 0}\n role=\"button\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-label=\"Multi-select\"\n >\n {/* Selected items as chips */}\n {selectedValues.length > 0 ? (\n <>\n {getSelectedLabels().map((label, index) => (\n <span\n key={selectedValues[index]}\n className={`\n inline-flex items-center gap-1 \n bg-primary/10 text-primary rounded-md font-medium \n animate-scaleIn origin-left\n transition-all duration-200\n ${currentSize.chip}\n `.trim()}\n >\n {label}\n <button\n type=\"button\"\n onClick={(e) => handleRemoveValue(selectedValues[index], e)}\n className=\"hover:bg-primary/20 rounded-sm transition-colors duration-150\"\n aria-label={`Remove ${label}`}\n tabIndex={-1}\n >\n <Icon name=\"x\" size={size} />\n </button>\n </span>\n ))}\n </>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n\n {/* Right side icons */}\n <div className=\"flex items-center gap-1 ml-auto shrink-0\">\n {selectedValues.length > 0 && !disabled && (\n <button\n type=\"button\"\n onClick={handleClearAll}\n className=\"p-1 hover:bg-muted rounded transition-colors\"\n aria-label=\"Clear all\"\n tabIndex={-1}\n >\n <Icon name=\"x\" size={size} />\n </button>\n )}\n <Icon\n name=\"chevron-down\"\n size={size}\n className={`text-muted-foreground transition-transform ${isOpen ? 'rotate-180' : ''}`}\n />\n </div>\n </div>\n\n {/* Dropdown */}\n {isOpen && !disabled && (\n <div className=\"absolute top-full left-0 right-0 mt-2 z-50 bg-card border border-border rounded-md shadow-lg max-h-64 overflow-hidden flex flex-col animate-scaleIn origin-top\">\n {/* Search input */}\n <div className=\"p-2 border-b border-border\">\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n setFocusedIndex(-1);\n }}\n placeholder=\"Search...\"\n className={`w-full px-3 py-1.5 ${currentSize.text} border border-input rounded-md bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring`}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n\n {/* Options list */}\n <div className=\"overflow-y-auto\" role=\"listbox\">\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option, index) => {\n const isSelected = selectedValues.includes(option.value);\n const isFocused = index === focusedIndex;\n const isDisabled = Boolean(maxSelections && !isSelected && selectedValues.length >= maxSelections);\n\n return (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => !isDisabled && handleToggleOption(option.value)}\n className={`\n w-full px-3 py-2 flex items-center justify-between gap-2\n transition-all duration-200 text-left ${currentSize.text}\n ${isFocused ? 'bg-muted' : ''}\n ${isSelected ? 'bg-primary/10 text-primary font-medium' : 'hover:bg-muted'}\n ${isDisabled ? 'opacity-50 cursor-not-allowed' : ''}\n `.trim()}\n role=\"option\"\n aria-selected={isSelected}\n disabled={isDisabled}\n >\n <span className=\"flex-1 truncate\">{option.label}</span>\n {isSelected && <Icon name=\"check\" size={size} className=\"shrink-0 animate-scaleIn\" />}\n </button>\n );\n })\n ) : (\n <div className=\"px-3 py-6 text-center text-muted-foreground\">No options found</div>\n )}\n </div>\n\n {/* Footer info */}\n {maxSelections && (\n <div className=\"px-3 py-2 border-t border-border bg-muted/30 text-xs text-muted-foreground\">\n {selectedValues.length} / {maxSelections} selected\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nMultiSelect.displayName = 'MultiSelect';\n\nexport default MultiSelect;\n","import { ReactNode, createContext, useContext } from 'react';\n\nexport type RadioGroupProps = {\n /** Radio components - typically multiple Radio components */\n children: ReactNode;\n /** Form input name shared by all child radios for grouping */\n name: string;\n /** Optional legend text displayed above the radio group */\n label?: string;\n /** Layout direction - horizontal arranges radios in a row, vertical stacks them */\n orientation?: 'horizontal' | 'vertical';\n /** Additional CSS classes applied to the fieldset container */\n className?: string;\n /** Controlled value - matches the value prop of the selected Radio */\n value?: string;\n /** Change handler receiving the selected radio's value */\n onChange?: (value: string) => void;\n};\n\ntype RadioGroupContextValue = {\n name: string;\n value?: string;\n onChange?: (value: string) => void;\n};\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nexport const useRadioGroup = () => {\n const context = useContext(RadioGroupContext);\n return context;\n};\n\n/**\n * RadioGroup - Wrapper for radio inputs with consistent spacing and shared name\n */\nfunction RadioGroup({\n children,\n name,\n label,\n orientation = 'vertical',\n className = '',\n value,\n onChange\n}: Readonly<RadioGroupProps>) {\n const orientationClasses = orientation === 'horizontal' ? 'flex flex-row gap-4' : 'flex flex-col gap-2';\n\n return (\n <RadioGroupContext.Provider value={{ name, value, onChange }}>\n <fieldset className={className}>\n {label && <legend className=\"text-sm font-medium text-foreground mb-2\">{label}</legend>}\n <div className={orientationClasses} role=\"radiogroup\">\n {children}\n </div>\n </fieldset>\n </RadioGroupContext.Provider>\n );\n}\n\nRadioGroup.displayName = 'RadioGroup';\n\nexport default RadioGroup;\n","import React, { useId } from 'react';\nimport { useRadioGroup } from '../radio-group/radio-group';\n\nexport type ValidationState = 'default' | 'error' | 'success' | 'warning';\n\nexport type RadioProps = {\n /** Controlled checked state - overridden by RadioGroup context if present */\n checked?: boolean;\n /** Change event handler - called in addition to RadioGroup onChange if both are provided */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** Disables radio interaction and applies disabled styling */\n disabled?: boolean;\n /** Additional CSS classes applied to the radio button indicator */\n className?: string;\n /** Accessible label for screen readers when visual label is not present */\n ariaLabel?: string;\n /** HTML id attribute - auto-generated if not provided */\n id?: string;\n /** Form input name - overridden by RadioGroup context if present */\n name?: string;\n /** Input value submitted with form - required when used in RadioGroup */\n value?: string;\n /** Visual validation state affecting border and ring colors */\n validationState?: ValidationState;\n};\n\n/**\n * Accessible Radio component\n */\nfunction Radio({\n checked,\n onChange,\n disabled = false,\n className = '',\n ariaLabel,\n id,\n name: nameProp,\n value,\n validationState = 'default'\n}: Readonly<RadioProps>) {\n const radioGroup = useRadioGroup();\n\n // Use name from RadioGroup context if available, otherwise use prop\n const name = radioGroup?.name || nameProp;\n\n // Use checked state from RadioGroup if available\n const isChecked = radioGroup?.value !== undefined ? radioGroup.value === value : checked;\n\n // Handle change with RadioGroup callback if available\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (radioGroup?.onChange && value) {\n radioGroup.onChange(value);\n }\n onChange?.(e);\n };\n\n const validationClasses = {\n default: 'border-input focus:ring-ring',\n error: 'border-destructive focus:ring-destructive',\n success: 'border-success focus:ring-success',\n warning: 'border-warning focus:ring-warning'\n };\n\n const generatedId = useId();\n const inputId = id || `radio-${value || generatedId}`;\n\n return (\n <div\n className={`inline-flex items-center justify-center relative ${disabled ? 'opacity-60 cursor-not-allowed' : 'cursor-pointer'}`}\n >\n <input\n type=\"radio\"\n checked={isChecked}\n onChange={handleChange}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-invalid={validationState === 'error' ? 'true' : undefined}\n id={inputId}\n name={name}\n value={value}\n className=\"peer sr-only\"\n />\n <span\n aria-hidden=\"true\"\n onClick={() => !disabled && document.getElementById(inputId)?.click()}\n className={`w-6 h-6 sm:w-5 sm:h-5 rounded-full border-2 flex items-center justify-center transition-all duration-200 ease-out bg-background shadow-sm\n before:content-[''] before:w-3 before:h-3 sm:before:w-2.5 sm:before:h-2.5 before:rounded-full before:scale-0 before:transition-transform before:duration-200 before:ease-out before:bg-primary\n peer-checked:before:scale-100 peer-checked:border-primary\n peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-ring\n peer-disabled:opacity-50 peer-disabled:cursor-not-allowed\n peer-hover:border-primary/60 peer-active:scale-95\n ${validationClasses[validationState]} ${className}`}\n />\n </div>\n );\n}\n\nRadio.displayName = 'Radio';\n\nexport default Radio;\n","import React from 'react';\n\nexport type SelectItemProps = {\n value?: string;\n disabled?: boolean;\n children: React.ReactNode;\n};\n\n/**\n * SelectItem - Option element for Select component\n * Replaces native <option> element with semantic component\n */\nfunction SelectItem({ value, disabled = false, children }: Readonly<SelectItemProps>) {\n return (\n <option value={value} disabled={disabled}>\n {children}\n </option>\n );\n}\n\nSelectItem.displayName = 'SelectItem';\n\nexport default SelectItem;\n","import React from 'react';\n\nexport type SliderProps = {\n /** Controlled numeric value - must be between min and max */\n value?: number;\n /** Change handler receiving the new numeric value */\n onChange?: (value: number) => void;\n /** Minimum allowed value - defaults to 0 */\n min?: number;\n /** Maximum allowed value - defaults to 100 */\n max?: number;\n /** Increment step size - defaults to 1 */\n step?: number;\n /** Disables slider interaction and applies disabled styling */\n disabled?: boolean;\n /** Additional CSS classes applied to the range input */\n className?: string;\n /** Accessible label for screen readers when visual label is not present */\n ariaLabel?: string;\n /** HTML id attribute for the input element */\n id?: string;\n /** Form input name attribute */\n name?: string;\n};\n\n/**\n * Accessible Slider component\n */\nfunction Slider({\n value = 50,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n className = '',\n ariaLabel,\n id,\n name\n}: Readonly<SliderProps>) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(Number(e.target.value));\n };\n\n return (\n <input\n type=\"range\"\n value={value}\n onChange={handleChange}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n aria-label={ariaLabel}\n id={id}\n name={name}\n className={`w-full h-2 bg-muted/30 rounded-lg appearance-none cursor-pointer transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed hover:bg-muted/40 ${className}`}\n style={{\n background: `linear-gradient(to right, hsl(var(--primary)) 0%, hsl(var(--primary)) ${((value - min) / (max - min)) * 100}%, hsl(var(--muted) / 0.3) ${((value - min) / (max - min)) * 100}%, hsl(var(--muted) / 0.3) 100%)`\n }}\n />\n );\n}\n\nSlider.displayName = 'Slider';\n\nexport default Slider;\n","import React from 'react';\n\nexport type SwitchProps = {\n /** Controlled checked state - true for on, false for off */\n checked?: boolean;\n /** Change handler receiving the new boolean checked state */\n onChange?: (checked: boolean) => void;\n /** Disables switch interaction and applies disabled styling */\n disabled?: boolean;\n /** Additional CSS classes applied to the switch container */\n className?: string;\n /** Accessible label for screen readers when visual label is not present */\n ariaLabel?: string;\n /** HTML id attribute for the underlying input element */\n id?: string;\n /** Form input name attribute */\n name?: string;\n /** Size variant affecting switch dimensions - uses unified size system */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** Color variant affecting background when checked - defaults to primary if not specified */\n variant?: 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'info' | 'error' | 'neutral';\n};\n\n/**\n * Accessible Switch/Toggle component - DaisyUI inspired\n * Uses pure Tailwind classes for styling\n */\nfunction Switch({\n checked = false,\n onChange,\n disabled = false,\n className = '',\n ariaLabel,\n id,\n name,\n size = 'md',\n variant\n}: Readonly<SwitchProps>) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.checked);\n };\n\n // Size configurations\n const sizeStyles = {\n xs: {\n container: 'h-4 w-8',\n handle: 'h-3 w-3',\n padding: 'p-0.5',\n translate: checked ? 'translate-x-4' : 'translate-x-0'\n },\n sm: {\n container: 'h-5 w-10',\n handle: 'h-4 w-4',\n padding: 'p-0.5',\n translate: checked ? 'translate-x-5' : 'translate-x-0'\n },\n md: {\n container: 'h-6 w-12',\n handle: 'h-5 w-5',\n padding: 'p-0.5',\n translate: checked ? 'translate-x-6' : 'translate-x-0'\n },\n lg: {\n container: 'h-7 w-14',\n handle: 'h-6 w-6',\n padding: 'p-0.5',\n translate: checked ? 'translate-x-7' : 'translate-x-0'\n },\n xl: {\n container: 'h-8 w-16',\n handle: 'h-7 w-7',\n padding: 'p-0.5',\n translate: checked ? 'translate-x-8' : 'translate-x-0'\n }\n };\n\n // Color variants\n const getVariantColors = () => {\n if (!checked) {\n return 'bg-input border-input';\n }\n\n switch (variant) {\n case 'secondary':\n return 'bg-secondary border-secondary';\n case 'accent':\n return 'bg-accent border-accent';\n case 'success':\n return 'bg-success border-success';\n case 'warning':\n return 'bg-warning border-warning';\n case 'info':\n return 'bg-info border-info';\n case 'error':\n return 'bg-destructive border-destructive';\n case 'neutral':\n return 'bg-neutral border-neutral';\n case 'primary':\n default:\n return 'bg-primary border-primary';\n }\n };\n\n const styles = sizeStyles[size];\n\n return (\n <label\n className={`relative inline-flex ${styles.container} ${styles.padding} items-center rounded-full border transition-all duration-200 cursor-pointer ${\n disabled ? 'opacity-30 cursor-not-allowed' : ''\n } ${getVariantColors()} ${className}`}\n >\n <input\n type=\"checkbox\"\n role=\"switch\"\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n aria-label={ariaLabel}\n id={id}\n name={name}\n className=\"sr-only\"\n />\n <span\n className={`inline-block ${styles.handle} rounded-full bg-background shadow-sm transition-transform duration-200 ${styles.translate}`}\n />\n </label>\n );\n}\n\nSwitch.displayName = 'Switch';\n\nexport default Switch;\n","import { ReactNode } from 'react';\n\nexport type CodeProps = {\n /** Code content to be displayed */\n children: ReactNode;\n /** Whether to render as a code block (pre + code) or inline code\n * @default false\n */\n block?: boolean;\n /** Visual style variant\n * @default 'default'\n */\n variant?: 'default' | 'primary' | 'muted';\n /** Additional CSS classes for custom styling */\n className?: string;\n};\n\n/**\n * Code - Styled code snippets (inline or block)\n */\nfunction Code({ children, block = false, variant = 'default', className = '' }: Readonly<CodeProps>) {\n const variantClasses = {\n default: 'bg-muted text-foreground',\n primary: 'text-primary',\n muted: 'text-muted-foreground'\n };\n\n const baseClasses = `font-mono ${variantClasses[variant]}`;\n\n if (block) {\n return (\n <pre className={`${baseClasses} p-4 rounded-lg overflow-x-auto border border-border ${className}`}>\n <code>{children}</code>\n </pre>\n );\n }\n\n return <code className={`${baseClasses} px-1.5 py-0.5 rounded text-sm ${className}`}>{children}</code>;\n}\n\nCode.displayName = 'Code';\n\nexport default Code;\n","export type Debounced<T extends (...args: unknown[]) => void> = {\n call: (...args: Parameters<T>) => void;\n flush: () => void;\n cancel: () => void;\n};\n\nexport function debounce<T extends (...args: unknown[]) => void>(\n fn: T,\n delayMs: number,\n setTimer: (cb: () => void, ms: number) => ReturnType<typeof setTimeout> = setTimeout,\n clearTimer: (id: ReturnType<typeof setTimeout>) => void = clearTimeout\n): Debounced<T> {\n let timer: ReturnType<typeof setTimeout> | null = null;\n let lastArgs: Parameters<T> | null = null;\n\n const invoke = () => {\n if (lastArgs) {\n fn(...lastArgs);\n lastArgs = null;\n }\n };\n\n return {\n call(...args: Parameters<T>) {\n lastArgs = args;\n\n if (timer != null) {\n clearTimer(timer);\n }\n\n timer = setTimer(() => {\n timer = null;\n invoke();\n }, delayMs);\n },\n\n flush() {\n if (timer != null) {\n clearTimer(timer);\n timer = null;\n invoke();\n }\n },\n\n cancel() {\n if (timer != null) {\n clearTimer(timer);\n timer = null;\n }\n lastArgs = null;\n }\n };\n}\n","import { useMemo, useEffect, useRef } from 'react';\nimport { debounce, Debounced } from '@/utils/debounce';\n\n/**\n * Hook that returns a debounced version of a callback function.\n *\n * @param callback - The function to debounce\n * @param delayMs - Delay in milliseconds before invoking the callback\n * @param deps - Optional dependency array (like useEffect). If not provided, callback must be stable.\n * @returns Debounced function with `call`, `flush`, and `cancel` methods\n *\n * @example\n * // With dependencies (recommended)\n * const debounced = useDebounce(() => {\n * console.log('Searching for:', searchQuery);\n * }, 300, [searchQuery]);\n *\n * const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n * setSearchQuery(e.target.value);\n * debounced.call();\n * };\n *\n * @example\n * // Without dependencies (callback must be wrapped in useCallback)\n * const debounced = useDebounce(() => {\n * console.log('Searching for:', searchQuery);\n * }, 300);\n */\nexport function useDebounce<T extends (...args: unknown[]) => void>(\n callback: T,\n delayMs: number,\n deps?: React.DependencyList\n): Debounced<T> {\n const callbackRef = useRef(callback);\n\n // Update ref with dependencies - use callback as dependency if deps not provided\n useEffect(\n () => {\n callbackRef.current = callback;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n deps !== undefined ? deps : [callback]\n );\n\n // Create the debounced function once\n const debounced = useMemo(() => {\n return debounce(() => callbackRef.current(), delayMs) as Debounced<T>;\n }, [delayMs]);\n\n // Cancel any pending debounced calls when the component unmounts\n useEffect(() => {\n return () => {\n debounced.cancel();\n };\n }, [debounced]);\n\n return debounced;\n}\n\nexport default useDebounce;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/system/theme-provider/theme-provider.tsx","../src/components/system/color-mode-toggle/color-mode-toggle.tsx","../src/theme/tokens.ts","../src/theme/size-tokens.ts","../src/components/system/icon/icon.tsx","../src/components/system/auth-provider/auth-provider.tsx","../src/components/system/auth-provider/auth-utils.ts","../src/components/branding/hydden-logo.tsx","../src/components/branding/google-logo.tsx","../src/components/branding/microsoft-logo.tsx","../src/components/layout/container/container.tsx","../src/components/layout/grid/grid.tsx","../src/components/layout/page/page.tsx","../src/components/typography/heading/heading.tsx","../src/components/typography/text/text.tsx","../src/components/layout/page-header/page-header.tsx","../src/components/layout/section/section.tsx","../src/components/layout/section-header/section-header.tsx","../src/components/layout/stack/stack.tsx","../src/components/layout/accordion/accordion.tsx","../src/components/layout/divider/divider.tsx","../src/components/feedback/overlay/useOverlay.ts","../src/components/layout/drawer/drawer.tsx","../src/components/layout/card/card.tsx","../src/components/layout/card/card-header.tsx","../src/components/layout/card/card-body.tsx","../src/components/layout/card/card-footer.tsx","../src/components/layout/card/card-actions.tsx","../src/components/layout/card/card-figure.tsx","../src/components/layout/card/card-title.tsx","../src/components/forms/button/button.tsx","../src/components/forms/button/button-with-icon.tsx","../src/components/layout/action-card/action-card.tsx","../src/hooks/useScrollReset.ts","../src/components/forms/button/icon-button.tsx","../src/components/layout/left-nav-layout/left-nav-layout.tsx","../src/components/feedback/tooltip/tooltip.tsx","../src/components/layout/left-nav-layout/left-nav-item.tsx","../src/components/layout/left-nav-layout/left-nav-section.tsx","../src/components/layout/hero/hero.tsx","../src/components/layout/feature-section/feature-section.tsx","../src/components/typography/link/link.tsx","../src/components/layout/footer/footer.tsx","../src/components/layout/page-transition/page-transition.tsx","../src/components/navigation/breadcrumbs/breadcrumbs.tsx","../src/components/navigation/dropdown/dropdown.tsx","../src/components/navigation/nav/nav.tsx","../src/components/navigation/sidebar/sidebar.tsx","../src/components/navigation/stepper/stepper.tsx","../src/components/navigation/tabs/tabs.tsx","../src/components/navigation/pagination/pagination.tsx","../src/components/navigation/navbar/navbar.tsx","../src/components/navigation/navbar/navbar-brand.tsx","../src/components/navigation/navbar/navbar-link.tsx","../src/components/navigation/navbar/navbar-toggle.tsx","../src/components/navigation/nav-dropdown/nav-dropdown.tsx","../src/components/navigation/nav-dropdown/nav-dropdown-item.tsx","../src/components/navigation/scroll-nav/scroll-nav.tsx","../src/components/data-display/avatar/avatar.tsx","../src/components/data-display/badge/badge.tsx","../src/components/data-display/badge/status-label.tsx","../src/components/data-display/chip/chip.tsx","../src/components/data-display/code-block/code-block.tsx","../src/components/data-display/table/table.tsx","../src/components/forms/checkbox/checkbox.tsx","../src/components/data-display/empty-state/empty-state.tsx","../src/components/data-display/data-table/use-table.ts","../src/components/data-display/data-table/data-table.tsx","../src/components/data-display/list/list.tsx","../src/components/data-display/timeline/timeline.tsx","../src/components/feedback/alert/alert.tsx","../src/components/feedback/modal/modal.tsx","../src/components/feedback/dialog/dialog.tsx","../src/components/feedback/dialog/delete-dialog.tsx","../src/components/feedback/popover/popover.tsx","../src/components/feedback/progress-bar/progress-bar.tsx","../src/components/feedback/skeleton/skeleton.tsx","../src/components/feedback/smooth-transition/smooth-transition.tsx","../src/components/feedback/spinner/spinner.tsx","../src/components/feedback/toast/toast.tsx","../src/components/forms/button-group/button-group.tsx","../src/components/forms/calendar/calendar.tsx","../src/components/forms/date-picker/date-picker.tsx","../src/components/forms/code/code.tsx","../src/components/forms/editable-text/editable-text.tsx","../src/components/forms/fieldset/fieldset.tsx","../src/components/forms/form/form.tsx","../src/components/forms/form-field/form-field.tsx","../src/components/forms/input/input.tsx","../src/components/forms/form-input/form-input.tsx","../src/components/forms/select/select.tsx","../src/components/forms/form-select/form-select.tsx","../src/components/forms/textarea/textarea.tsx","../src/components/forms/form-textarea/form-textarea.tsx","../src/components/forms/input-group/input-group.tsx","../src/components/forms/multi-select/multi-select.tsx","../src/components/forms/radio-group/radio-group.tsx","../src/components/forms/radio/radio.tsx","../src/components/forms/select/select-item.tsx","../src/components/forms/slider/slider.tsx","../src/components/forms/switch/switch.tsx","../src/components/typography/code/code.tsx","../src/utils/debounce.ts","../src/hooks/useDebounce.ts"],"names":["jsx","createContext","useState","useEffect","error","useContext","jsxs","marginX","alignClasses","createElement","useCallback","React","Fragment","resolved","useRef","createPortal","navElement","RouterLink","itemEls","useLayoutEffect","Link","NavLink","scrollLeft","useMemo","justifyClasses","isValidElement","cloneElement","useId","Code","code_default"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext, useEffect, useState, useMemo, ReactNode, useCallback } from 'react';\n\n/**\n * hydn UI Theme System\n * - Supports light and dark themes\n * - Themes are applied via className on the <html> element\n * - Define new themes in globals.css following the CSS variable pattern\n */\n\nexport type Theme = 'light' | 'dark';\n\nexport type ThemeContextType = {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n availableThemes: Theme[];\n};\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport type ThemeProviderProps = {\n /** React children to be wrapped with theme context */\n children: ReactNode;\n /** Initial theme to use if none is stored\n * @default 'light'\n */\n defaultTheme?: Theme;\n /** LocalStorage key for persisting theme selection\n * @default 'hydn-theme'\n */\n storageKey?: string;\n /**\n * List of available theme names.\n * Defaults to ['light', 'dark']\n */\n themes?: Theme[];\n};\n\n/**\n * ThemeProvider - Context for managing light/dark themes\n */\nexport function ThemeProvider({\n children,\n defaultTheme = 'light',\n storageKey = 'hydn-theme',\n themes = ['light', 'dark']\n}: Readonly<ThemeProviderProps>) {\n const [theme, setThemeState] = useState<Theme>(() => {\n if (typeof window !== 'undefined') {\n const stored = localStorage.getItem(storageKey) as Theme;\n return stored && themes.includes(stored) ? stored : defaultTheme;\n }\n return defaultTheme;\n });\n\n useEffect(() => {\n const root = window.document.documentElement;\n\n // Remove all possible theme classes\n root.classList.remove(...themes);\n\n // Apply the theme class to <html>\n root.classList.add(theme);\n }, [theme, themes]);\n\n const setTheme = useCallback(\n (newTheme: Theme) => {\n if (themes.includes(newTheme)) {\n localStorage.setItem(storageKey, newTheme);\n setThemeState(newTheme);\n } else {\n /* eslint-disable-next-line no-console */\n console.warn(`Theme \"${newTheme}\" is not in availableThemes. Add it to the themes prop.`);\n }\n },\n [themes, storageKey]\n );\n\n const value = useMemo(\n () => ({\n theme,\n setTheme,\n availableThemes: themes\n }),\n [theme, themes, setTheme]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\n/**\n * useTheme - Hook to access theme context\n */\nexport function useTheme() {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n}\n\nexport default ThemeProvider;\n","import { useTheme } from '../theme-provider';\n\nexport type ColorModeToggleProps = {\n /** Additional CSS classes for custom styling */\n className?: string;\n};\n\n/**\n * ColorModeToggle - Simple light/dark theme switcher\n */\nfunction ColorModeToggle({ className = '' }: Readonly<ColorModeToggleProps>) {\n const { theme, setTheme } = useTheme();\n\n const toggleTheme = () => {\n setTheme(theme === 'light' ? 'dark' : 'light');\n };\n\n const isDark = theme === 'dark';\n const label = `Switch to ${theme === 'light' ? 'dark' : 'light'} theme`;\n\n return (\n <button\n onClick={toggleTheme}\n className={`relative p-2 rounded-md hover:bg-accent hover:text-accent-foreground transition-colors cursor-pointer ${className}`}\n aria-label={label}\n title={label}\n >\n {/* Sun icon - visible in light mode */}\n <svg\n className={`w-5 h-5 absolute inset-0 m-auto transition-all duration-300 ${\n isDark ? 'rotate-90 scale-0 opacity-0' : 'rotate-0 scale-100 opacity-100'\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=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\"\n />\n </svg>\n\n {/* Moon icon - visible in dark mode */}\n <svg\n className={`w-5 h-5 transition-all duration-300 ${\n isDark ? 'rotate-0 scale-100 opacity-100' : '-rotate-90 scale-0 opacity-0'\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=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\"\n />\n </svg>\n </button>\n );\n}\n\nColorModeToggle.displayName = 'ColorModeToggle';\n\nexport default ColorModeToggle;\n","export const colors = {\n background: 'hsl(var(--background))',\n foreground: 'hsl(var(--foreground))',\n card: 'hsl(var(--card))',\n 'card-foreground': 'hsl(var(--card-foreground))',\n popover: 'hsl(var(--popover))',\n 'popover-foreground': 'hsl(var(--popover-foreground))',\n primary: 'hsl(var(--primary))',\n 'primary-hover': 'hsl(var(--primary-hover))',\n 'primary-active': 'hsl(var(--primary-active))',\n 'primary-foreground': 'hsl(var(--primary-foreground))',\n secondary: 'hsl(var(--secondary))',\n 'secondary-hover': 'hsl(var(--secondary-hover))',\n 'secondary-active': 'hsl(var(--secondary-active))',\n 'secondary-foreground': 'hsl(var(--secondary-foreground))',\n accent: 'hsl(var(--accent))',\n 'accent-hover': 'hsl(var(--accent-hover))',\n 'accent-active': 'hsl(var(--accent-active))',\n 'accent-foreground': 'hsl(var(--accent-foreground))',\n neutral: 'hsl(var(--neutral))',\n 'neutral-hover': 'hsl(var(--neutral-hover))',\n 'neutral-active': 'hsl(var(--neutral-active))',\n 'neutral-foreground': 'hsl(var(--neutral-foreground))',\n muted: 'hsl(var(--muted))',\n 'muted-hover': 'hsl(var(--muted-hover))',\n 'muted-active': 'hsl(var(--muted-active))',\n 'muted-foreground': 'hsl(var(--muted-foreground))',\n destructive: 'hsl(var(--destructive))',\n 'destructive-hover': 'hsl(var(--destructive-hover))',\n 'destructive-active': 'hsl(var(--destructive-active))',\n 'destructive-foreground': 'hsl(var(--destructive-foreground))',\n success: 'hsl(var(--success))',\n 'success-hover': 'hsl(var(--success-hover))',\n 'success-active': 'hsl(var(--success-active))',\n 'success-foreground': 'hsl(var(--success-foreground))',\n warning: 'hsl(var(--warning))',\n 'warning-hover': 'hsl(var(--warning-hover))',\n 'warning-active': 'hsl(var(--warning-active))',\n 'warning-foreground': 'hsl(var(--warning-foreground))',\n info: 'hsl(var(--info))',\n 'info-hover': 'hsl(var(--info-hover))',\n 'info-active': 'hsl(var(--info-active))',\n 'info-foreground': 'hsl(var(--info-foreground))',\n border: 'hsl(var(--border))',\n input: 'hsl(var(--input))',\n ring: 'hsl(var(--ring))'\n};\n\nexport type ThemeColor = keyof typeof colors;\nexport const themeColorNames = Object.keys(colors) as ThemeColor[];\n\nexport const colorClassPrefixes = ['text', 'bg', 'border', 'ring', 'outline', 'decoration', 'fill', 'stroke'] as const;\nexport type ColorClassPrefix = (typeof colorClassPrefixes)[number];\nexport type ThemeColorClass = `${ColorClassPrefix}-${ThemeColor}`;\n\nexport const themeColorClasses = colorClassPrefixes.flatMap((prefix) =>\n themeColorNames.map((color) => `${prefix}-${color}` as ThemeColorClass)\n);\n\nexport type ThemeColorProp = ThemeColor | ThemeColorClass;\n\nexport type StatusColorProp = 'default' | 'primary' | 'success' | 'warning' | 'error';\n\nconst outlineBaseClasses =\n 'border-2 bg-transparent transition-colors transition-shadow duration-200 ease-out focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-transparent' as const;\n\n/**\n * Standardized color variant classes for consistent component styling\n * All variants support: neutral, primary, secondary, accent, info, success, warning, error\n */\nexport const colorVariants = {\n // Solid buttons/elements - filled background\n solid: {\n neutral: 'bg-neutral text-neutral-foreground hover:bg-neutral-hover active:bg-neutral-active',\n primary: 'bg-primary text-primary-foreground hover:bg-primary-hover active:bg-primary-active',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary-hover active:bg-secondary-active',\n accent: 'bg-accent text-accent-foreground hover:bg-accent-hover active:bg-accent-active',\n info: 'bg-info text-info-foreground hover:bg-info-hover active:bg-info-active',\n success: 'bg-success text-success-foreground hover:bg-success-hover active:bg-success-active',\n warning: 'bg-warning text-warning-foreground hover:bg-warning-hover active:bg-warning-active',\n error: 'bg-destructive text-destructive-foreground hover:bg-destructive-hover active:bg-destructive-active'\n },\n\n // Outline style - transparent with border\n outline: {\n neutral: `${outlineBaseClasses} border-neutral text-neutral hover:border-neutral-hover hover:text-neutral-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--neutral))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--neutral))] focus-visible:outline-neutral/35`,\n primary: `${outlineBaseClasses} border-primary text-primary hover:border-primary-hover hover:text-primary-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--primary))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--primary))] focus-visible:outline-primary/35`,\n secondary: `${outlineBaseClasses} border-secondary text-secondary hover:border-secondary-hover hover:text-secondary-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--secondary))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--secondary))] focus-visible:outline-secondary/35`,\n accent: `${outlineBaseClasses} border-accent text-accent hover:border-accent-hover hover:text-accent-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--accent))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--accent))] focus-visible:outline-accent/35`,\n info: `${outlineBaseClasses} border-info text-info hover:border-info-hover hover:text-info-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--info))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--info))] focus-visible:outline-info/35`,\n success: `${outlineBaseClasses} border-success text-success hover:border-success-hover hover:text-success-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--success))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--success))] focus-visible:outline-success/35`,\n warning: `${outlineBaseClasses} border-warning text-warning hover:border-warning-hover hover:text-warning-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--warning))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--warning))] focus-visible:outline-warning/35`,\n error: `${outlineBaseClasses} border-destructive text-destructive hover:border-destructive-hover hover:text-destructive-hover hover:shadow-[inset_0_0_0_1px_hsl(var(--destructive))] focus-visible:shadow-[inset_0_0_0_1px_hsl(var(--destructive))] focus-visible:outline-destructive/35`\n },\n\n // Ghost style - transparent with subtle hover\n ghost: {\n neutral: 'bg-transparent text-foreground hover:bg-neutral/10 active:bg-neutral/20',\n primary: 'bg-transparent text-primary hover:bg-primary/10 active:bg-primary/20',\n secondary: 'bg-transparent text-secondary hover:bg-secondary/10 active:bg-secondary/20',\n accent: 'bg-transparent text-accent hover:bg-accent/10 active:bg-accent/20',\n info: 'bg-transparent text-info hover:bg-info/10 active:bg-info/20',\n success: 'bg-transparent text-success hover:bg-success/10 active:bg-success/20',\n warning: 'bg-transparent text-warning hover:bg-warning/10 active:bg-warning/20',\n error: 'bg-transparent text-destructive hover:bg-destructive/10 active:bg-destructive/20'\n },\n\n // Soft style - subtle background\n soft: {\n neutral: 'bg-neutral/20 text-foreground hover:bg-neutral/30 active:bg-neutral/40',\n primary: 'bg-primary/20 text-primary hover:bg-primary/30 active:bg-primary/40',\n secondary: 'bg-secondary/20 text-secondary hover:bg-secondary/30 active:bg-secondary/40',\n accent: 'bg-accent/20 text-accent hover:bg-accent/30 active:bg-accent/40',\n info: 'bg-info/20 text-info hover:bg-info/30 active:bg-info/40',\n success: 'bg-success/20 text-success hover:bg-success/30 active:bg-success/40',\n warning: 'bg-warning/20 text-warning hover:bg-warning/30 active:bg-warning/40',\n error: 'bg-destructive/20 text-destructive hover:bg-destructive/30 active:bg-destructive/40'\n },\n\n // Link style - text only with underline on hover\n link: {\n neutral: 'bg-transparent text-foreground underline-offset-4 hover:underline',\n primary: 'bg-transparent text-primary underline-offset-4 hover:underline',\n secondary: 'bg-transparent text-secondary underline-offset-4 hover:underline',\n accent: 'bg-transparent text-accent underline-offset-4 hover:underline',\n info: 'bg-transparent text-info underline-offset-4 hover:underline',\n success: 'bg-transparent text-success underline-offset-4 hover:underline',\n warning: 'bg-transparent text-warning underline-offset-4 hover:underline',\n error: 'bg-transparent text-destructive underline-offset-4 hover:underline'\n },\n\n // Badge/Chip style - subtle filled background with border\n badge: {\n default: 'bg-muted text-muted-foreground border border-border',\n primary: 'bg-primary/10 text-primary border border-primary/20',\n success: 'bg-success/10 text-success border border-success/20',\n warning: 'bg-warning/10 text-warning border border-warning/20',\n error: 'bg-destructive/10 text-destructive border border-destructive/20',\n info: 'bg-info/10 text-info border border-info/20'\n },\n\n // Alert style - translucent background with border\n alert: {\n info: 'bg-info/20 text-foreground border-info/50 backdrop-blur-sm',\n success: 'bg-success/20 text-foreground border-success/50 backdrop-blur-sm',\n warning: 'bg-warning/20 text-foreground border-warning/50 backdrop-blur-sm',\n error: 'bg-destructive/20 text-foreground border-destructive/50 backdrop-blur-sm'\n }\n} as const;\n\nexport type ColorVariantStyle = keyof typeof colorVariants;\nexport type ColorVariantKey<T extends ColorVariantStyle> = keyof (typeof colorVariants)[T];\n\nexport const radii = {\n sm: '0.25rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem'\n};\n\nexport const fonts = {\n sans: \"'Inter', system-ui, sans-serif\",\n mono: \"'JetBrains Mono', monospace\"\n};\n\nexport const alignments = ['left', 'center', 'right'] as const;\nexport type Alignment = (typeof alignments)[number];\n\nexport const inputAlignClasses: Record<Alignment, string> = {\n left: 'mr-auto',\n center: 'mx-auto',\n right: 'ml-auto'\n};\n\n/**\n * HTML autocomplete attribute values for form inputs\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n */\nexport const autocompleteOptions = [\n 'on',\n 'off',\n 'address-line1',\n 'address-line2',\n 'address-line3',\n 'address-level1',\n 'address-level2',\n 'address-level3',\n 'address-level4',\n 'street-address',\n 'country',\n 'country-name',\n 'postal-code',\n 'name',\n 'additional-name',\n 'family-name',\n 'given-name',\n 'honoric-prefix',\n 'honoric-suffix',\n 'nickname',\n 'organization-title',\n 'username',\n 'new-password',\n 'current-password',\n 'bday',\n 'bday-day',\n 'bday-month',\n 'bday-year',\n 'sex',\n 'one-time-code',\n 'organization',\n 'cc-name',\n 'cc-given-name',\n 'cc-additional-name',\n 'cc-family-name',\n 'cc-number',\n 'cc-exp',\n 'cc-exp-month',\n 'cc-exp-year',\n 'cc-csc',\n 'cc-type',\n 'transaction-currency',\n 'transaction-amount',\n 'language',\n 'url',\n 'email',\n 'photo',\n 'tel',\n 'tel-country-code',\n 'tel-national',\n 'tel-area-code',\n 'tel-local',\n 'tel-local-prefix',\n 'tel-local-suffix',\n 'tel-extension',\n 'impp'\n] as const;\n\nexport type AutocompleteOption = (typeof autocompleteOptions)[number];\n","/**\n * Unified Size System for hydn-ui\n *\n * All sizes use Tailwind classes and are responsive (mobile-first).\n * Mobile sizes are larger for touch targets, desktop sizes are smaller.\n *\n * SIZE SCALE: xs → sm → md → lg → xl → 2xl → 3xl\n */\n\n// =============================================================================\n// VISUAL ELEMENT SIZES (Icons, Spinners, Logos)\n// Responsive: slightly larger on mobile for visibility\n// =============================================================================\n\n/**\n * Icon/Spinner/Visual element sizes\n * Uses Tailwind classes with responsive adjustments\n */\nexport const visualSizes = {\n xs: {\n classes: 'w-3.5 h-3.5 sm:w-3 sm:h-3', // 20px mobile, 16px desktop\n pixels: { mobile: 20, desktop: 16 }\n },\n sm: {\n classes: 'w-5 h-5 sm:w-4 sm:h-4', // 24px mobile, 20px desktop\n pixels: { mobile: 24, desktop: 20 }\n },\n md: {\n classes: 'w-6 h-6 sm:w-5 sm:h-5', // 28px mobile, 24px desktop\n pixels: { mobile: 28, desktop: 24 }\n },\n lg: {\n classes: 'w-7 h-7 sm:w-6 sm:h-6', // 32px mobile, 28px desktop\n pixels: { mobile: 32, desktop: 28 }\n },\n xl: {\n classes: 'w-8 h-8 sm:w-7 sm:h-7', // 36px mobile, 32px desktop\n pixels: { mobile: 36, desktop: 32 }\n },\n '2xl': {\n classes: 'w-9 h-9 sm:w-8 sm:h-8', // 40px mobile, 36px desktop\n pixels: { mobile: 40, desktop: 36 }\n },\n '3xl': {\n classes: 'w-12 h-12 sm:w-10 sm:h-10', // 52px mobile, 44px desktop\n pixels: { mobile: 52, desktop: 44 }\n }\n} as const;\n\n/** Core size type - derived from visualSizes */\nexport type Size = keyof typeof visualSizes;\n\n/**\n * Spinner sizes - extends visual sizes with border widths\n */\nconst spinnerBorderWidths: Record<Size, string> = {\n xs: 'border',\n sm: 'border-2',\n md: 'border-2',\n lg: 'border-2',\n xl: 'border-[3px]',\n '2xl': 'border-[3px]',\n '3xl': 'border-4'\n};\n\ntype SpinnerSizeDefinition = (typeof visualSizes)[Size] & { border: string };\n\nexport const spinnerSizes: Record<Size, SpinnerSizeDefinition> = (Object.keys(visualSizes) as Size[]).reduce(\n (acc, size) => {\n acc[size] = {\n ...visualSizes[size],\n border: spinnerBorderWidths[size]\n };\n return acc;\n },\n {} as Record<Size, SpinnerSizeDefinition>\n);\n\n/**\n * Avatar sizes - larger scale for displaying faces/initials\n * Responsive: comfortable touch targets on mobile\n */\nexport const avatarSizes = {\n xs: {\n classes: 'w-8 h-8 sm:w-6 sm:h-6',\n text: 'text-sm sm:text-xs'\n },\n sm: {\n classes: 'w-10 h-10 sm:w-8 sm:h-8',\n text: 'text-base sm:text-sm'\n },\n md: {\n classes: 'w-12 h-12 sm:w-10 sm:h-10',\n text: 'text-lg sm:text-base'\n },\n lg: {\n classes: 'w-14 h-14 sm:w-12 sm:h-12',\n text: 'text-xl sm:text-lg'\n },\n xl: {\n classes: 'w-20 h-20 sm:w-16 sm:h-16',\n text: 'text-2xl sm:text-xl'\n },\n '2xl': {\n classes: 'w-24 h-24 sm:w-20 sm:h-20',\n text: 'text-3xl sm:text-2xl'\n },\n '3xl': {\n classes: 'w-28 h-28 sm:w-24 sm:h-24',\n text: 'text-4xl sm:text-3xl'\n }\n} as const;\n\n/**\n * Logo sizes - brand element sizing\n */\nexport const logoSizes = {\n xs: { classes: 'h-5 w-5 sm:h-4 sm:w-4' },\n sm: { classes: 'h-7 w-7 sm:h-6 sm:w-6' },\n md: { classes: 'h-9 w-9 sm:h-8 sm:w-8' },\n lg: { classes: 'h-12 w-12 sm:h-10 sm:w-10' },\n xl: { classes: 'h-14 w-14 sm:h-12 sm:w-12' },\n '2xl': { classes: 'h-20 w-20 sm:h-16 sm:w-16' },\n '3xl': { classes: 'h-24 w-24 sm:h-20 sm:w-20' }\n} as const;\n\n// =============================================================================\n// INTERACTIVE ELEMENT SIZES (Buttons, Inputs, Selects)\n// Responsive: larger touch targets on mobile (44px+ recommended)\n// =============================================================================\nexport const interactiveSizes = {\n xs: {\n height: 'h-8 sm:h-6 min-h-8 sm:min-h-6',\n padding: 'px-3 sm:px-2',\n text: 'text-sm sm:text-xs',\n icon: visualSizes.xs\n },\n sm: {\n height: 'h-10 sm:h-8 min-h-10 sm:min-h-8',\n padding: 'px-4 sm:px-3',\n text: 'text-base sm:text-sm',\n icon: visualSizes.sm\n },\n md: {\n height: 'h-12 sm:h-10 min-h-12 sm:min-h-10',\n padding: 'px-5 sm:px-4',\n text: 'text-base sm:text-sm',\n icon: visualSizes.md\n },\n lg: {\n height: 'h-14 sm:h-12 min-h-14 sm:min-h-12',\n padding: 'px-7 sm:px-6',\n text: 'text-lg sm:text-base',\n icon: visualSizes.lg\n },\n xl: {\n height: 'h-16 sm:h-14 min-h-16 sm:min-h-14',\n padding: 'px-9 sm:px-8',\n text: 'text-xl sm:text-lg',\n icon: visualSizes.xl\n }\n} as const;\n\nexport type InteractiveSize = keyof typeof interactiveSizes;\n\n// =============================================================================\n// INPUT WIDTH SIZES\n// Semantic width options for input fields\n// =============================================================================\nexport const inputWidthSizes = {\n xs: 'w-14 sm:w-16', // ~4 chars - ZIP codes, years\n sm: 'w-20 sm:w-24', // ~6-8 chars - short codes, area codes\n md: 'w-40 sm:w-48', // ~12-16 chars - medium text (default)\n lg: 'w-56 sm:w-64', // ~20-24 chars - names, emails\n xl: 'w-72 sm:w-80', // ~28-32 chars - long text\n '2xl': 'w-80 sm:w-96', // ~36-40 chars - very long text\n '1/4': 'w-1/4', // 25% of container\n '1/2': 'w-1/2', // 50% of container\n '3/4': 'w-3/4', // 75% of container\n full: 'w-full', // 100% of container\n fit: 'w-fit', // intrinsic width based on content (shrink-to-fit)\n auto: 'w-auto' // default width behavior (layout-dependent)\n} as const;\n\nexport type InputWidth = keyof typeof inputWidthSizes;\n\n// =============================================================================\n// INLINE ELEMENT SIZES (Badges, Chips, Tags)\n// =============================================================================\nexport const badgeSizes = {\n sm: {\n classes: 'px-2.5 sm:px-2 py-1 sm:py-0.5 text-sm sm:text-xs',\n icon: visualSizes.xs\n },\n md: {\n classes: 'px-3 sm:px-2.5 py-1 sm:py-0.5 text-sm sm:text-xs font-semibold',\n icon: visualSizes.sm\n },\n lg: {\n classes: 'px-4 sm:px-3 py-1.5 sm:py-1 text-base sm:text-sm font-semibold',\n icon: visualSizes.md\n }\n} as const;\n\nexport const chipSizes = {\n xs: {\n classes: 'px-2 sm:px-1.5 py-1 sm:py-0.5 text-sm sm:text-xs gap-1 sm:gap-0.5',\n icon: visualSizes.xs\n },\n sm: {\n classes: 'px-2.5 sm:px-2 py-1.5 sm:py-1 text-sm sm:text-xs gap-1.5 sm:gap-1',\n icon: visualSizes.sm\n },\n md: {\n classes: 'px-3.5 sm:px-3 py-2 sm:py-1.5 text-base sm:text-sm gap-2 sm:gap-1.5',\n icon: visualSizes.md\n },\n lg: {\n classes: 'px-5 sm:px-4 py-2.5 sm:py-2 text-lg sm:text-base gap-2.5 sm:gap-2',\n icon: visualSizes.lg\n },\n xl: {\n classes: 'px-6 sm:px-5 py-3 sm:py-2.5 text-xl sm:text-lg gap-3 sm:gap-2.5',\n icon: visualSizes.xl\n },\n '2xl': {\n classes: 'px-7 sm:px-6 py-3.5 sm:py-3 text-2xl sm:text-xl gap-3.5 sm:gap-3',\n icon: visualSizes['2xl']\n },\n '3xl': {\n classes: 'px-8 sm:px-7 py-4 sm:py-3.5 text-3xl sm:text-2xl gap-4 sm:gap-3.5',\n icon: visualSizes['3xl']\n }\n} as const;\n\n/**\n * Inline code sizes - for code snippets\n */\nexport const codeSizes = {\n sm: 'text-xs px-1 py-0.5',\n md: 'text-sm px-1.5 py-0.5',\n lg: 'text-base px-2 py-1'\n} as const;\n\nexport type CodeSize = keyof typeof codeSizes;\n\n/**\n * Status label sizes - for status indicators with dots\n */\nexport const statusLabelSizes = {\n sm: {\n container: 'px-2 py-0.5 text-xs gap-1.5',\n dot: 'w-1.5 h-1.5'\n },\n md: {\n container: 'px-2.5 py-0.5 text-sm gap-2',\n dot: 'w-2 h-2'\n },\n lg: {\n container: 'px-3 py-1 text-base gap-2',\n dot: 'w-2.5 h-2.5'\n }\n} as const;\n\nexport type StatusLabelSize = keyof typeof statusLabelSizes;\n\n// =============================================================================\n// TYPOGRAPHY SIZES\n// Responsive text scaling\n// =============================================================================\nexport const textSizes = {\n xs: 'text-sm sm:text-xs',\n sm: 'text-base sm:text-sm',\n base: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl sm:text-lg',\n '2xl': 'text-2xl sm:text-xl',\n '3xl': 'text-3xl sm:text-2xl',\n '4xl': 'text-4xl sm:text-3xl',\n '5xl': 'text-5xl sm:text-4xl'\n} as const;\n\nexport type TextSize = keyof typeof textSizes;\n\n/**\n * Heading/title sizes - for headings with font weight\n */\nexport const headingSizes = {\n sm: 'text-base font-semibold',\n md: 'text-lg font-bold',\n lg: 'text-xl font-bold',\n xl: 'text-2xl font-bold',\n '2xl': 'text-3xl font-bold sm:text-2xl',\n '3xl': 'text-4xl font-bold sm:text-3xl',\n '4xl': 'text-5xl font-bold sm:text-4xl'\n} as const;\n\nexport type HeadingSize = keyof typeof headingSizes;\n\n/**\n * Card sizes - max-width for cards\n */\nexport const cardSizes = {\n xs: 'w-full sm:max-w-36',\n sm: 'w-full sm:max-w-64',\n md: 'w-full sm:max-w-96',\n lg: 'w-full sm:max-w-[28rem]',\n xl: 'w-full sm:max-w-[32rem]',\n '2xl': 'w-full sm:max-w-[36rem]',\n full: 'w-full'\n} as const;\n\nexport type CardSize = keyof typeof cardSizes;\n\n// =============================================================================\n// SPACING / GAP SIZES\n// Responsive gaps (larger on mobile for touch)\n// =============================================================================\nexport const gapSizes = {\n none: 'gap-0',\n xs: 'gap-2 sm:gap-1',\n sm: 'gap-3 sm:gap-2',\n md: 'gap-5 sm:gap-4',\n lg: 'gap-7 sm:gap-6',\n xl: 'gap-10 sm:gap-8',\n '2xl': 'gap-14 sm:gap-12',\n '3xl': 'gap-20 sm:gap-16'\n} as const;\n\nexport type GapSize = keyof typeof gapSizes;\n\n// =============================================================================\n// CONTAINER / LAYOUT SIZES\n// =============================================================================\nexport const containerWidth = {\n sm: 'max-w-screen-sm',\n md: 'max-w-screen-md',\n lg: 'max-w-screen-lg',\n xl: 'max-w-screen-xl',\n '2xl': 'max-w-screen-2xl',\n '3xl': 'max-w-[1920px]',\n full: 'max-w-full',\n screen: 'max-w-[100vw]',\n none: ''\n} as const;\n\nexport type ContainerWidthSize = keyof typeof containerWidth;\n\nexport const containerHeight = {\n xs: 'h-[10rem]', // 160px\n sm: 'h-[15rem]', // 240px\n md: 'h-[20rem]', // 320px\n lg: 'h-[25rem]', // 400px\n xl: 'h-[30rem]', // 480px\n '2xl': 'h-[35rem]', // 560px\n '3xl': 'h-[40rem]', // 640px\n full: 'h-full',\n screen: 'h-screen',\n none: ''\n} as const;\n\nexport type ContainerHeightSize = keyof typeof containerHeight;\n\n/**\n * Container min-width options\n */\nexport const containerMinWidths = {\n xs: 'min-w-[20rem]', // 320px\n sm: 'min-w-[24rem]', // 384px\n md: 'min-w-[28rem]', // 448px\n lg: 'min-w-[32rem]', // 512px\n xl: 'min-w-[36rem]', // 576px\n '2xl': 'min-w-[42rem]', // 672px\n '3xl': 'min-w-[48rem]', // 768px\n full: 'min-w-full',\n screen: 'min-w-screen',\n none: ''\n} as const;\n\nexport type ContainerMinWidthSize = keyof typeof containerMinWidths;\n\nexport const containerMaxWidths = {\n xs: 'max-w-[20rem]', // 320px\n sm: 'max-w-[24rem]', // 384px\n md: 'max-w-[28rem]', // 448px\n lg: 'max-w-[32rem]', // 512px\n xl: 'max-w-[36rem]', // 576px\n '2xl': 'max-w-[42rem]', // 672px\n '3xl': 'max-w-[48rem]', // 768px\n full: 'max-w-full',\n screen: 'max-w-screen',\n none: ''\n} as const;\n\nexport type ContainerMaxWidthSize = keyof typeof containerMaxWidths;\n\n/**\n * Container min-height options\n */\nexport const containerMinHeights = {\n xs: 'min-h-[10rem]', // 160px\n sm: 'min-h-[15rem]', // 240px\n md: 'min-h-[20rem]', // 320px\n lg: 'min-h-[25rem]', // 400px\n xl: 'min-h-[30rem]', // 480px\n '2xl': 'min-h-[35rem]', // 560px\n '3xl': 'min-h-[40rem]', // 640px\n full: 'min-h-full',\n screen: 'min-h-screen',\n none: ''\n} as const;\n\nexport type ContainerMinHeightSize = keyof typeof containerMinHeights;\n\nexport const containerMaxHeights = {\n xs: 'max-h-[10rem]', // 160px\n sm: 'max-h-[15rem]', // 240px\n md: 'max-h-[20rem]', // 320px\n lg: 'max-h-[25rem]', // 400px\n xl: 'max-h-[30rem]', // 480px\n '2xl': 'max-h-[35rem]', // 560px\n '3xl': 'max-h-[40rem]', // 640px\n full: 'max-h-full',\n screen: 'max-h-screen',\n none: ''\n} as const;\n\nexport type ContainerMaxHeightSize = keyof typeof containerMaxHeights;\n\nexport const stackWidths = {\n sm: 'w-screen-sm',\n md: 'w-screen-md',\n lg: 'w-screen-lg',\n xl: 'w-screen-xl',\n '2xl': 'w-screen-2xl',\n '3xl': 'w-[1920px]',\n '1/4': 'w-1/4',\n '1/2': 'w-1/2',\n '3/4': 'w-3/4',\n full: 'w-full',\n screen: 'w-[100vw]',\n auto: 'w-auto',\n none: ''\n} as const;\n\nexport type StackWidthSize = keyof typeof stackWidths;\n\nexport const stackHeights = {\n xs: 'h-[10rem]', // 160px\n sm: 'h-[15rem]', // 240px\n md: 'h-[20rem]', // 320px\n lg: 'h-[25rem]', // 400px\n xl: 'h-[30rem]', // 480px\n '2xl': 'h-[35rem]', // 560px\n '3xl': 'h-[40rem]', // 640px\n '1/4': 'h-1/4',\n '1/2': 'h-1/2',\n '3/4': 'h-3/4',\n full: 'h-full',\n screen: 'h-screen',\n auto: 'h-auto',\n none: ''\n} as const;\n\nexport type StackHeightSize = keyof typeof stackHeights;\n\nexport const stackMinWidths = {\n xs: 'min-w-[20rem]', // 320px\n sm: 'min-w-[24rem]', // 384px\n md: 'min-w-[28rem]', // 448px\n lg: 'min-w-[32rem]', // 512px\n xl: 'min-w-[36rem]', // 576px\n '2xl': 'min-w-[42rem]', // 672px\n '3xl': 'min-w-[48rem]', // 768px\n '1/4': 'min-w-1/4',\n '1/2': 'min-w-1/2',\n '3/4': 'min-w-3/4',\n full: 'min-w-full',\n screen: 'min-w-screen',\n none: ''\n} as const;\n\nexport type StackMinWidthSize = keyof typeof stackMinWidths;\n\nexport const stackMaxWidths = {\n xs: 'max-w-[20rem]', // 320px\n sm: 'max-w-[24rem]', // 384px\n md: 'max-w-[28rem]', // 448px\n lg: 'max-w-[32rem]', // 512px\n xl: 'max-w-[36rem]', // 576px\n '2xl': 'max-w-[42rem]', // 672px\n '3xl': 'max-w-[48rem]', // 768px\n '1/4': 'max-w-1/4',\n '1/2': 'max-w-1/2',\n '3/4': 'max-w-3/4',\n full: 'max-w-full',\n screen: 'max-w-screen',\n none: ''\n} as const;\n\nexport type StackMaxWidthSize = keyof typeof stackMaxWidths;\n\nexport const stackMinHeights = {\n xs: 'min-h-[10rem]', // 160px\n sm: 'min-h-[15rem]', // 240px\n md: 'min-h-[20rem]', // 320px\n lg: 'min-h-[25rem]', // 400px\n xl: 'min-h-[30rem]', // 480px\n '2xl': 'min-h-[35rem]', // 560px\n '3xl': 'min-h-[40rem]', // 640px\n '1/4': 'min-h-1/4',\n '1/2': 'min-h-1/2',\n '3/4': 'min-h-3/4',\n full: 'min-h-full',\n screen: 'min-h-screen',\n none: ''\n} as const;\n\nexport type StackMinHeightSize = keyof typeof stackMinHeights;\n\nexport const stackMaxHeights = {\n xs: 'max-h-[10rem]', // 160px\n sm: 'max-h-[15rem]', // 240px\n md: 'max-h-[20rem]', // 320px\n lg: 'max-h-[25rem]', // 400px\n xl: 'max-h-[30rem]', // 480px\n '2xl': 'max-h-[35rem]', // 560px\n '3xl': 'max-h-[40rem]', // 640px\n '1/4': 'max-h-1/4',\n '1/2': 'max-h-1/2',\n '3/4': 'max-h-3/4',\n full: 'max-h-full',\n screen: 'max-h-screen',\n none: ''\n} as const;\n\n// =============================================================================\n// PADDING SIZES FOR SECTIONS AND CARDS\n// =============================================================================\n\nexport const sectionPadding = {\n none: 'py-0',\n xs: 'py-6 sm:py-4',\n sm: 'py-10 sm:py-8',\n md: 'py-16 sm:py-12',\n lg: 'py-20 sm:py-16',\n xl: 'py-28 sm:py-24',\n '2xl': 'py-36 sm:py-32'\n} as const;\n\nexport type SectionPaddingSize = keyof typeof sectionPadding;\n\nexport const cardPadding = {\n none: 'p-0',\n xs: 'p-3 sm:p-2',\n sm: 'p-5 sm:p-4',\n md: 'p-7 sm:p-6',\n lg: 'p-9 sm:p-8',\n xl: 'p-12 sm:p-10',\n '2xl': 'p-14 sm:p-12'\n} as const;\n\nexport type CardPaddingSize = keyof typeof cardPadding;\n\nexport const cardMargin = {\n none: 'm-0',\n xs: 'm-3 sm:m-2',\n sm: 'm-5 sm:m-4',\n md: 'm-7 sm:m-6',\n lg: 'm-9 sm:m-8',\n xl: 'm-12 sm:m-10',\n '2xl': 'm-14 sm:m-12'\n} as const;\n\nexport type CardMarginSize = keyof typeof cardMargin;\n\n// =============================================================================\n// MARGIN SIZES (Axis-specific)\n// =============================================================================\n\nexport const marginX = {\n none: '',\n auto: 'mx-auto',\n xs: 'mx-3 sm:mx-2',\n sm: 'mx-5 sm:mx-4',\n md: 'mx-7 sm:mx-6',\n lg: 'mx-9 sm:mx-8',\n xl: 'mx-12 sm:mx-10',\n '2xl': 'mx-14 sm:mx-12'\n} as const;\n\nexport type MarginXSize = keyof typeof marginX;\n\nexport const marginY = {\n none: '',\n auto: 'my-auto',\n xs: 'my-3 sm:my-2',\n sm: 'my-5 sm:my-4',\n md: 'my-7 sm:my-6',\n lg: 'my-9 sm:my-8',\n xl: 'my-12 sm:my-10',\n '2xl': 'my-14 sm:my-12'\n} as const;\n\nexport type MarginYSize = keyof typeof marginY;\n\n// =============================================================================\n// OVERLAY SIZES (Modals, Drawers)\n// Full width on mobile, constrained on desktop\n// =============================================================================\nexport const overlaySizes = {\n xs: 'w-full sm:w-64',\n sm: 'w-full sm:w-80',\n md: 'w-full sm:w-96',\n lg: 'w-full sm:w-[28rem]',\n xl: 'w-full sm:w-[32rem]',\n '2xl': 'w-full sm:w-[40rem]',\n '3xl': 'w-full sm:w-[48rem]',\n full: 'w-full max-w-2xl'\n} as const;\n\nexport type OverlaySize = keyof typeof overlaySizes;\n\n// =============================================================================\n// BORDER RADIUS\n// =============================================================================\nexport const borderRadius = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n '3xl': 'rounded-3xl',\n full: 'rounded-full'\n} as const;\n\nexport type BorderRadiusSize = keyof typeof borderRadius;\n\n// =============================================================================\n// FORM INPUT TOKENS\n// Centralized styling for form inputs (Input, Select, Textarea)\n// =============================================================================\n\n/** Validation states for form inputs */\nexport type ValidationState = 'default' | 'error' | 'success' | 'warning';\n\n/** Border classes for each validation state */\nexport const validationBorderClasses: Record<ValidationState, string> = {\n default: 'border-input focus:border-ring',\n error: 'border-destructive focus:border-destructive',\n success: 'border-success focus:border-success',\n warning: 'border-warning focus:border-warning'\n};\n\n/** Ring/focus classes for each validation state */\nexport const validationRingClasses: Record<ValidationState, string> = {\n default: 'focus:ring-ring/20',\n error: 'focus:ring-destructive/20',\n success: 'focus:ring-success/20',\n warning: 'focus:ring-warning/20'\n};\n\n/** Text color classes for validation messages */\nexport const validationTextClasses: Record<ValidationState, string> = {\n default: 'text-muted-foreground',\n error: 'text-destructive',\n success: 'text-success',\n warning: 'text-warning'\n};\n\n/** Base input classes shared by Input, Select, Textarea */\nexport const inputBaseClasses =\n 'flex rounded-lg border bg-background shadow-sm transition-all duration-200 placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-muted/50';\n\n/** Get complete input classes for a given size and validation state */\nexport function getInputClasses(size: InteractiveSize, validationState: ValidationState): string {\n const sizeConfig = interactiveSizes[size];\n return `${inputBaseClasses} ${sizeConfig.height} px-4 sm:px-3 overflow-visible ${sizeConfig.text} ${validationBorderClasses[validationState]} ${validationRingClasses[validationState]}`;\n}\n\n/** Form spacing options */\nexport const formSpacing = {\n none: 'gap-0',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8'\n} as const;\n\nexport type FormSpacing = keyof typeof formSpacing;\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Get icon size in pixels for SVG components (like Tabler icons)\n * Returns desktop size by default, or you can specify 'mobile'\n */\nexport function getIconPixels(size: Size | number, variant: 'mobile' | 'desktop' = 'desktop'): number {\n if (typeof size === 'number') return size;\n return visualSizes?.[size]?.pixels?.[variant] ?? 0;\n}\n\n/**\n * Get Tailwind classes for a visual element size\n */\nexport function getVisualClasses(size: Size): string {\n return visualSizes[size].classes;\n}\n\n// =============================================================================\n// SIZE REFERENCE TABLE\n// =============================================================================\n/**\n * Visual Size Reference (mobile / desktop):\n *\n * | Size | Visual | Avatar | Interactive Height | Text |\n * |------|---------|----------|-------------------|---------------|\n * | xs | 14/12px | 32/24px | 32/24px | text-sm/xs |\n * | sm | 20/16px | 40/32px | 40/32px | text-base/sm |\n * | md | 24/20px | 48/40px | 48/40px | text-base/sm |\n * | lg | 28/24px | 56/48px | 56/48px | text-lg/base |\n * | xl | 32/28px | 80/64px | 64/56px | text-xl/lg |\n * | 2xl | 36/32px | 96/80px | - | text-2xl/xl |\n * | 3xl | 48/40px | 112/96px | - | text-3xl/2xl |\n */\n","import * as TablerIcons from '@tabler/icons-react';\nimport * as React from 'react';\nimport {\n StatusColorProp,\n colors as themeColors,\n colorClassPrefixes,\n ThemeColor,\n ThemeColorClass\n} from '../../../theme/tokens';\n\nimport { Size, getIconPixels } from '../../../theme/size-tokens';\n\nexport type IconSize = Size;\n\nexport interface IconProps {\n /** Dynamic icon name from Tabler Icons (e.g. \"home\", \"user\", \"arrow-right\") */\n name: string;\n /** Icon size using unified size system\n * @default 'md'\n */\n size?: IconSize;\n /** Color variant or 'currentColor' to inherit text color\n * @default 'currentColor'\n */\n color?: StatusColorProp | 'currentColor';\n /** Opacity level (0-1)\n * @default 1\n */\n opacity?: number;\n /** SVG stroke width\n * @default 2\n */\n strokeWidth?: number;\n /** Additional CSS classes for custom styling */\n className?: string;\n /** Optional click handler */\n onClick?: () => void;\n}\n\nconst STATUS_COLOR_MAP: Record<StatusColorProp, ThemeColor | 'currentColor'> = {\n default: 'foreground',\n primary: 'primary',\n success: 'success',\n warning: 'warning',\n error: 'destructive'\n};\n\nconst hasThemeColor = (token: string): token is ThemeColor => Object.prototype.hasOwnProperty.call(themeColors, token);\n\nconst isThemeColor = (value: unknown): value is ThemeColor => typeof value === 'string' && hasThemeColor(value);\n\nconst isThemeColorClass = (value: unknown): value is ThemeColorClass => {\n if (typeof value !== 'string') return false;\n for (const prefix of colorClassPrefixes) {\n if (value.startsWith(`${prefix}-`)) {\n const token = value.slice(prefix.length + 1);\n return hasThemeColor(token);\n }\n }\n return false;\n};\n\nconst isStatusColor = (value: unknown): value is StatusColorProp =>\n typeof value === 'string' && value in STATUS_COLOR_MAP;\n\nconst warnInvalidIconName = (value: unknown) => {\n if (process.env.NODE_ENV === 'production') return;\n // eslint-disable-next-line no-console\n console.error('[Icon] Expected `name` to be a non-empty string. Received:', value);\n};\n\n/**\n * Dynamic Icon component — resolves any Tabler icon by name.\n * Uses semantic size variants and supports all icons without manual mapping.\n */\nexport const Icon: React.FC<IconProps> = ({\n name,\n size = 'md',\n color = 'currentColor',\n opacity = 1,\n strokeWidth = 2,\n className = '',\n onClick\n}) => {\n if (typeof name !== 'string') {\n warnInvalidIconName(name);\n return null;\n }\n\n const normalizedName = name.trim();\n\n if (!normalizedName) {\n warnInvalidIconName(name);\n return null;\n }\n\n // Convert kebab or lowercase to PascalCase (e.g. \"arrow-right\" → \"IconArrowRight\")\n const pascalName = normalizedName\n .split(/[-_]/)\n .filter((s) => s)\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join('');\n\n const componentName = pascalName.startsWith('Icon') ? pascalName : 'Icon' + pascalName;\n\n // Use ComponentType to support both function and forwardRef components\n // Tabler icon components accept standard SVG props plus a few extras\n type TablerIconComponent = React.ComponentType<\n React.SVGProps<SVGSVGElement> & { size?: number | string; strokeWidth?: number }\n >;\n\n const IconComponent = (TablerIcons as unknown as Record<string, TablerIconComponent>)[componentName];\n\n if (!IconComponent) return null;\n\n // Use desktop size for pixel-based SVG rendering\n const pixelSize = getIconPixels(size, 'desktop');\n\n let resolvedColor: string = color;\n let resolvedClassName = className;\n\n if (isStatusColor(color)) {\n const mapped = STATUS_COLOR_MAP[color];\n resolvedColor = mapped === 'currentColor' ? 'currentColor' : themeColors[mapped];\n } else if (isThemeColor(color)) {\n resolvedColor = themeColors[color];\n } else if (isThemeColorClass(color)) {\n resolvedClassName = [className, color].filter(Boolean).join(' ');\n resolvedColor = 'currentColor';\n }\n\n return (\n <IconComponent\n size={pixelSize}\n color={resolvedColor}\n strokeWidth={strokeWidth}\n className={resolvedClassName}\n opacity={opacity}\n onClick={onClick}\n aria-hidden=\"true\"\n />\n );\n};\n\nIcon.displayName = 'Icon';\n\n// Provide a default export for backwards compatibility with existing imports\nexport default Icon;\n","import { createContext, useContext, useState, useEffect, ReactNode } from 'react';\n\n/**\n * Base user type - extend this in your app\n */\nexport interface AuthUser {\n id: string;\n [key: string]: unknown;\n}\n\n/**\n * Authentication state\n */\nexport interface AuthState {\n user: AuthUser | null;\n isLoading: boolean;\n isAuthenticated: boolean;\n error: Error | null;\n}\n\n/**\n * Authentication actions\n */\nexport interface AuthActions {\n login: (credentials: unknown) => Promise<void>;\n logout: () => Promise<void>;\n refresh: () => Promise<void>;\n clearError: () => void;\n updateUser: (updates: Partial<AuthUser>) => void;\n}\n\n/**\n * Complete auth context type\n */\nexport type AuthContextType = AuthState & AuthActions;\n\n/**\n * Auth provider configuration\n */\nexport interface AuthProviderConfig {\n /** Custom login handler - implement your auth logic */\n onLogin: (credentials: unknown) => Promise<AuthUser>;\n /** Custom logout handler */\n onLogout?: () => Promise<void>;\n /** Custom refresh handler - restore user from storage/API */\n onRefresh?: () => Promise<AuthUser | null>;\n /** Storage key for persisting user */\n storageKey?: string;\n /** Use sessionStorage instead of localStorage */\n useSessionStorage?: boolean;\n /** Auto-refresh on mount */\n autoRefresh?: boolean;\n /** External auth URL (e.g., auth server on different port) */\n authUrl?: string;\n /** Enable credentials for cross-origin requests */\n withCredentials?: boolean;\n}\n\n/**\n * Auth provider props\n */\nexport interface AuthProviderProps {\n /** Authentication configuration object containing handlers and options */\n config: AuthProviderConfig;\n /** React children to be wrapped with authentication context */\n children: ReactNode;\n}\n\nconst AuthContext = createContext<AuthContextType | undefined>(undefined);\n\n/**\n * AuthProvider - Flexible authentication context provider\n *\n * @example\n * ```tsx\n * <AuthProvider\n * config={{\n * onLogin: async (credentials) => {\n * const res = await fetch('/api/login', {\n * method: 'POST',\n * body: JSON.stringify(credentials)\n * });\n * return await res.json();\n * },\n * onLogout: async () => {\n * await fetch('/api/logout', { method: 'POST' });\n * }\n * }}\n * >\n * <App />\n * </AuthProvider>\n * ```\n */\nexport default function AuthProvider({ config, children }: Readonly<AuthProviderProps>) {\n const {\n onLogin,\n onLogout,\n onRefresh,\n storageKey = 'auth_user',\n useSessionStorage = false,\n autoRefresh = true\n } = config;\n\n const [user, setUser] = useState<AuthUser | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const storage = useSessionStorage ? sessionStorage : localStorage;\n\n // Load user from storage on mount\n useEffect(() => {\n const loadUser = async () => {\n try {\n if (onRefresh && autoRefresh) {\n const refreshedUser = await onRefresh();\n setUser(refreshedUser);\n } else {\n const storedUser = storage.getItem(storageKey);\n if (storedUser) {\n setUser(JSON.parse(storedUser));\n }\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to load user'));\n } finally {\n setIsLoading(false);\n }\n };\n\n loadUser();\n }, [storageKey, storage, onRefresh, autoRefresh]);\n\n // Persist user to storage when it changes\n useEffect(() => {\n if (user) {\n storage.setItem(storageKey, JSON.stringify(user));\n } else {\n storage.removeItem(storageKey);\n }\n }, [user, storageKey, storage]);\n\n const login = async (credentials: unknown) => {\n setIsLoading(true);\n setError(null);\n try {\n const loggedInUser = await onLogin(credentials);\n setUser(loggedInUser);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Login failed');\n setError(error);\n throw error;\n } finally {\n setIsLoading(false);\n }\n };\n\n const logout = async () => {\n setIsLoading(true);\n setError(null);\n try {\n if (onLogout) {\n await onLogout();\n }\n setUser(null);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Logout failed');\n setError(error);\n throw error;\n } finally {\n setIsLoading(false);\n }\n };\n\n const refresh = async () => {\n if (!onRefresh) return;\n\n setIsLoading(true);\n setError(null);\n try {\n const refreshedUser = await onRefresh();\n setUser(refreshedUser);\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Refresh failed');\n setError(error);\n throw error;\n } finally {\n setIsLoading(false);\n }\n };\n\n const clearError = () => setError(null);\n\n const updateUser = (updates: Partial<AuthUser>) => {\n if (!user) return;\n setUser({ ...user, ...updates });\n };\n\n const value: AuthContextType = {\n user,\n isLoading,\n isAuthenticated: !!user,\n error,\n login,\n logout,\n refresh,\n clearError,\n updateUser\n };\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n\n/**\n * useAuth hook - Access authentication context\n *\n * @example\n * ```tsx\n * function ProtectedPage() {\n * const { user, isAuthenticated, logout } = useAuth();\n *\n * if (!isAuthenticated) {\n * return <Navigate to=\"/login\" />;\n * }\n *\n * return <div>Welcome, {user.name}</div>;\n * }\n * ```\n */\nexport function useAuth(): AuthContextType {\n const context = useContext(AuthContext);\n if (!context) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n return context;\n}\n","/**\n * Auth utilities for cross-origin authentication\n */\n\n/**\n * Fetch with credentials for cross-origin requests\n */\nexport async function authFetch(url: string, options: RequestInit = {}, withCredentials = true): Promise<Response> {\n const config: RequestInit = {\n ...options,\n credentials: withCredentials ? 'include' : 'same-origin',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n };\n\n return fetch(url, config);\n}\n\n/**\n * Check if user is authenticated via external auth server\n */\nexport async function checkAuthStatus(authUrl: string): Promise<boolean> {\n try {\n const response = await authFetch(`${authUrl}/api/auth/status`, {\n method: 'GET'\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Get current user from external auth server\n */\nexport async function getCurrentUser(authUrl: string): Promise<unknown | null> {\n try {\n const response = await authFetch(`${authUrl}/api/auth/me`, {\n method: 'GET'\n });\n\n if (response.ok) {\n return await response.json();\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Login via external auth server\n */\nexport async function loginExternal(authUrl: string, credentials: unknown): Promise<unknown> {\n const response = await authFetch(`${authUrl}/api/auth/login`, {\n method: 'POST',\n body: JSON.stringify(credentials)\n });\n\n if (!response.ok) {\n throw new Error('Login failed');\n }\n\n return await response.json();\n}\n\n/**\n * Logout via external auth server\n */\nexport async function logoutExternal(authUrl: string): Promise<void> {\n await authFetch(`${authUrl}/api/auth/logout`, {\n method: 'POST'\n });\n}\n\n/**\n * Redirect to external login page\n */\nexport function redirectToLogin(authUrl: string, returnUrl?: string): void {\n const url = new URL(`${authUrl}/login`);\n if (returnUrl) {\n url.searchParams.set('returnUrl', returnUrl);\n }\n window.location.href = url.toString();\n}\n\n/**\n * Open external login in popup window\n */\nexport function openLoginPopup(authUrl: string, onSuccess?: () => void): Window | null {\n const width = 500;\n const height = 600;\n const left = window.screenX + (window.outerWidth - width) / 2;\n const top = window.screenY + (window.outerHeight - height) / 2;\n\n const popup = window.open(`${authUrl}/login`, 'Login', `width=${width},height=${height},left=${left},top=${top}`);\n\n // Listen for message from popup\n if (popup && onSuccess) {\n const messageHandler = (event: MessageEvent) => {\n if (event.origin === new URL(authUrl).origin && event.data === 'login-success') {\n onSuccess();\n window.removeEventListener('message', messageHandler);\n }\n };\n window.addEventListener('message', messageHandler);\n }\n\n return popup;\n}\n","/**\n * Hydden logo component.\n *\n * Renders the Hydden brand logo image.\n *\n * @returns The Hydden logo image element\n *\n * @example\n * ```tsx\n * <HyddenLogo />\n * ```\n */\nexport function HyddenLogo() {\n return <img src=\"/logo.png\" alt=\"Hydden\" className=\"h-10 w-auto\" loading=\"lazy\" />;\n}\n","/**\n * Google logo SVG component.\n *\n * Renders the official Google \"G\" logo with correct brand colors.\n *\n * @returns The Google logo SVG element\n *\n * @example\n * ```tsx\n * <GoogleLogo />\n * ```\n */\nexport function GoogleLogo() {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Google logo\"\n role=\"img\"\n >\n <path\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n fill=\"#EA4335\"\n />\n </svg>\n );\n}\n","/**\n * Microsoft logo SVG component.\n *\n * Renders the official Microsoft four-square logo with correct brand colors.\n *\n * @returns The Microsoft logo SVG element\n *\n * @example\n * ```tsx\n * <MicrosoftLogo />\n * ```\n */\nexport function MicrosoftLogo() {\n return (\n <svg\n width=\"21\"\n height=\"21\"\n viewBox=\"0 0 21 21\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Microsoft logo\"\n role=\"img\"\n >\n <rect width=\"10\" height=\"10\" fill=\"#F25022\" />\n <rect x=\"11\" width=\"10\" height=\"10\" fill=\"#7FBA00\" />\n <rect y=\"11\" width=\"10\" height=\"10\" fill=\"#00A4EF\" />\n <rect x=\"11\" y=\"11\" width=\"10\" height=\"10\" fill=\"#FFB900\" />\n </svg>\n );\n}\n","import React from 'react';\nimport {\n sectionPadding,\n type SectionPaddingSize,\n marginX as marginXTokens,\n type MarginXSize\n} from '../../../theme/size-tokens';\n\nexport type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\n\nexport type ContainerProps = {\n /** Container content */\n children: React.ReactNode;\n /** Additional CSS classes applied to the container */\n className?: string;\n /** Maximum content width - controls responsive centering breakpoint */\n size?: ContainerSize;\n /** Horizontal page margins (gutters) - applied to inner container */\n marginX?: MarginXSize;\n /** Vertical page padding */\n paddingY?: 'none' | SectionPaddingSize;\n /** HTML id attribute for the container element */\n id?: string;\n /** Horizontal alignment of the container within its parent */\n align?: 'start' | 'center' | 'end';\n};\n\nconst containerSizes: Record<ContainerSize, string> = {\n sm: 'max-w-screen-sm',\n md: 'max-w-screen-md',\n lg: 'max-w-screen-lg',\n xl: 'max-w-screen-xl',\n '2xl': 'max-w-screen-2xl',\n full: 'max-w-full'\n};\n\nconst alignClasses = {\n start: 'mr-auto',\n center: 'mx-auto',\n end: 'ml-auto'\n};\n\n/**\n * Page-level layout wrapper for content centering and spacing\n *\n * Container is the outermost layout component that wraps page content.\n * Use it to control max-width, horizontal margins (gutters), and vertical padding.\n *\n * For arranging content inside Container, use Stack, Grid, or other layout primitives.\n */\nfunction Container({\n children,\n className = '',\n size = 'lg',\n marginX = 'none',\n paddingY = 'none',\n align = 'center',\n id\n}: Readonly<ContainerProps>) {\n const sizeClass = containerSizes[size];\n const horizontalSpacingClass = marginX !== 'none' ? marginXTokens[marginX] : '';\n const paddingYClass = paddingY === 'none' ? '' : sectionPadding[paddingY];\n\n // Outer container controls max-width and horizontal alignment via the `align` prop\n const outerClasses = ['w-auto', sizeClass, alignClasses[align]].filter(Boolean).join(' ');\n\n // Inner wrapper applies horizontal spacing (via marginX) and vertical spacing (via paddingY)\n const innerClasses = [horizontalSpacingClass, paddingYClass, className].filter(Boolean).join(' ');\n\n return (\n <div className={outerClasses} id={id}>\n <div className={innerClasses}>{children}</div>\n </div>\n );\n}\n\nContainer.displayName = 'Container';\n\nexport default Container;\n","import React from 'react';\n\nimport { gapSizes } from '../../../theme/size-tokens';\n\nexport type GridProps = {\n /** Grid items to be laid out in responsive columns */\n children: React.ReactNode;\n /** Additional CSS classes applied to the grid container */\n className?: string;\n /** Size of grid items (controls minimum width before wrapping) */\n itemSize?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Maximum number of columns (optional constraint) */\n maxCols?: number;\n /** Gap between grid items - uses unified size system */\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Responsive column configuration for different breakpoints */\n responsive?: {\n sm?: number; // min-width: 640px\n md?: number; // min-width: 768px\n lg?: number; // min-width: 1024px\n xl?: number; // min-width: 1280px\n };\n /** Align items vertically */\n alignItems?: 'start' | 'center' | 'end' | 'stretch';\n /** Justify items horizontally */\n justifyItems?: 'start' | 'center' | 'end' | 'stretch';\n};\n\n/**\n * Grid - Responsive grid layout component\n *\n * Features:\n * - Auto-responsive grid using CSS Grid auto-fit/auto-fill\n * - Configurable minimum item width (items wrap when too narrow)\n * - Optional responsive column overrides for specific breakpoints\n * - Flexible gap spacing\n * - Alignment controls\n *\n * @example\n * ```tsx\n * // Auto-responsive grid with md (250px) item size\n * <Grid itemSize=\"md\" gap=\"md\">\n * <Card>Item 1</Card>\n * <Card>Item 2</Card>\n * <Card>Item 3</Card>\n * </Grid>\n *\n * // Responsive grid with breakpoint overrides\n * <Grid\n * itemSize=\"sm\"\n * responsive={{ sm: 1, md: 2, lg: 3, xl: 4 }}\n * gap=\"lg\"\n * >\n * <Card>Item 1</Card>\n * <Card>Item 2</Card>\n * </Grid>\n *\n * // Fixed max columns with auto-fit\n * <Grid itemSize=\"xs\" maxCols={4} gap=\"md\">\n * <Card>Item 1</Card>\n * <Card>Item 2</Card>\n * </Grid>\n * ```\n */\nfunction Grid({\n children,\n className = '',\n itemSize = 'md',\n maxCols,\n gap = 'md',\n responsive,\n alignItems = 'stretch',\n justifyItems = 'stretch'\n}: Readonly<GridProps>) {\n const itemSizeValues = {\n xs: '150px',\n sm: '200px',\n md: '250px',\n lg: '300px',\n xl: '350px',\n '2xl': '400px'\n };\n\n // Use unified gap sizes\n const gapClass = gapSizes[gap];\n\n const alignItemsClasses = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch'\n };\n\n const justifyItemsClasses = {\n start: 'justify-items-start',\n center: 'justify-items-center',\n end: 'justify-items-end',\n stretch: 'justify-items-stretch'\n };\n\n // Build responsive column classes if provided\n const responsiveClasses = responsive\n ? Object.entries(responsive)\n .map(([breakpoint, cols]) => {\n const breakpointPrefix =\n breakpoint === 'sm' ? 'sm:' : breakpoint === 'md' ? 'md:' : breakpoint === 'lg' ? 'lg:' : 'xl:';\n return `${breakpointPrefix}grid-cols-${cols}`;\n })\n .join(' ')\n : '';\n\n // Get minimum width value from variant\n const minWidth = itemSizeValues[itemSize];\n\n // Build grid template columns style\n // If responsive classes are provided, use them via Tailwind\n // Otherwise, use CSS custom property for auto-fit/auto-fill\n const gridStyle = !responsive\n ? {\n gridTemplateColumns: maxCols\n ? `repeat(auto-fit, minmax(min(${minWidth}, 100%), 1fr))`\n : `repeat(auto-fill, minmax(min(${minWidth}, 100%), 1fr))`\n }\n : undefined;\n\n return (\n <div\n className={`\n grid\n ${!responsive ? '' : responsiveClasses}\n ${gapClass}\n ${alignItemsClasses[alignItems]}\n ${justifyItemsClasses[justifyItems]}\n ${className}\n `.trim()}\n style={gridStyle}\n >\n {children}\n </div>\n );\n}\n\nGrid.displayName = 'Grid';\n\nexport default Grid;\n","import React from 'react';\n\nexport type PageProps = {\n /** Page content */\n children: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n};\n\n/**\n * Page - Semantic wrapper for page-level content\n * Provides consistent structure with main element and background styling\n */\nfunction Page({ children, className = '' }: Readonly<PageProps>) {\n return <main className={`min-h-screen bg-background ${className}`}>{children}</main>;\n}\n\nPage.displayName = 'Page';\n\nexport default Page;\n","import { ReactNode, createElement } from 'react';\n\nexport type HeadingProps = {\n /** Content to be rendered within the heading element */\n children: ReactNode;\n /** Semantic heading level (h1-h6)\n * @default 1\n */\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * Text alignment\n * @default 'left'\n */\n align?: 'left' | 'center' | 'right' | 'justify';\n /** Additional CSS classes for custom styling */\n className?: string;\n /** Whether to include default bottom margin spacing\n * @default false\n */\n hasMargin?: boolean;\n};\n\n/**\n * Heading - Consistent typography scale (H1-H6)\n * Includes sensible default margins for spacing and responsive font sizes\n */\nfunction Heading({ children, level = 1, align, className = '', hasMargin = false }: Readonly<HeadingProps>) {\n const levelClasses = {\n 1: 'text-3xl sm:text-4xl lg:text-5xl font-bold',\n 2: 'text-2xl sm:text-3xl lg:text-4xl font-bold',\n 3: 'text-xl sm:text-2xl lg:text-3xl font-semibold',\n 4: 'text-lg sm:text-xl font-semibold',\n 5: 'text-base sm:text-lg font-medium',\n 6: 'text-sm sm:text-base font-medium'\n };\n\n const marginClasses = {\n 1: 'mb-3 sm:mb-4',\n 2: 'mb-2 sm:mb-3',\n 3: 'mb-2 sm:mb-3',\n 4: 'mb-1 sm:mb-2',\n 5: 'mb-1 sm:mb-2',\n 6: 'mb-1 sm:mb-2'\n };\n\n const alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify'\n };\n\n const margin = hasMargin ? marginClasses[level] : '';\n const alignment = align ? alignClasses[align] : '';\n\n return createElement(\n `h${level}`,\n {\n className: `text-foreground ${levelClasses[level]} ${margin} ${alignment} ${className}`\n },\n children\n );\n}\n\nHeading.displayName = 'Heading';\n\nexport default Heading;\n","import { ReactNode, createElement } from 'react';\nimport { textSizes, type TextSize } from '../../../theme/size-tokens';\n\nexport type TextProps = {\n /** Content to be rendered within the text element */\n children: ReactNode;\n\n /**\n * Semantic HTML element to render\n * @default 'p'\n */\n as?:\n | 'p'\n | 'span'\n | 'label'\n | 'strong'\n | 'em'\n | 'small'\n | 'mark'\n | 'del'\n | 'ins'\n | 'sub'\n | 'sup'\n | 'abbr'\n | 'cite'\n | 'q';\n\n /**\n * Color variant\n * @default 'body'\n */\n variant?: 'body' | 'muted' | 'small' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'inherit';\n\n /**\n * Text size - uses unified size system\n * @default based on variant\n */\n size?: TextSize;\n\n /**\n * Font weight\n * @default 'semibold'\n */\n weight?: 'light' | 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold';\n\n /**\n * Text alignment\n * @default 'left'\n */\n align?: 'left' | 'center' | 'right' | 'justify';\n\n /**\n * Line height / leading\n * @default 'normal'\n */\n leading?: 'none' | 'tight' | 'snug' | 'normal' | 'relaxed' | 'loose';\n\n /**\n * Letter spacing / tracking\n * @default 'normal'\n */\n tracking?: 'tighter' | 'tight' | 'normal' | 'wide' | 'wider' | 'widest';\n\n /**\n * Text transform\n */\n transform?: 'uppercase' | 'lowercase' | 'capitalize' | 'normal';\n\n /**\n * Text decoration\n */\n decoration?: 'underline' | 'line-through' | 'none';\n\n /**\n * Font style\n */\n italic?: boolean;\n\n /**\n * Truncate text with ellipsis\n */\n truncate?: boolean;\n\n /**\n * Limit text to specified number of lines (uses line-clamp)\n */\n lineClamp?: 1 | 2 | 3 | 4 | 5 | 6;\n\n /**\n * Text wrapping behavior\n */\n wrap?: 'wrap' | 'nowrap' | 'balance' | 'pretty';\n\n /**\n * Word break behavior\n */\n wordBreak?: 'normal' | 'words' | 'all' | 'keep';\n\n /**\n * Text opacity (0-100)\n */\n opacity?: 0 | 25 | 50 | 75 | 100;\n\n /**\n * Add bottom margin\n * @default false\n */\n hasMargin?: boolean;\n\n /**\n * Make text selectable or not\n */\n selectable?: boolean;\n\n /**\n * Additional CSS classes (use as last resort)\n */\n className?: string;\n\n /**\n * ID for the element\n */\n id?: string;\n\n /**\n * HTML for attribute (useful when as=\"label\")\n */\n htmlFor?: string;\n};\n\n/**\n * Text - Versatile typography component for body text\n * Handles all common text styling needs through props\n */\nfunction Text({\n children,\n as = 'p',\n variant = 'body',\n size,\n weight = 'semibold',\n align,\n leading,\n tracking,\n transform,\n decoration,\n italic = false,\n truncate = false,\n lineClamp,\n wrap,\n wordBreak,\n opacity,\n hasMargin = false,\n selectable,\n className = '',\n id,\n htmlFor\n}: Readonly<TextProps>) {\n const variantClasses = {\n body: 'text-foreground',\n muted: 'text-muted-foreground',\n small: 'text-muted-foreground',\n primary: 'text-primary',\n secondary: 'text-secondary-foreground',\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-destructive',\n inherit: 'text-inherit'\n };\n\n const sizeClasses = textSizes;\n\n const weightClasses = {\n light: 'font-light',\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n extrabold: 'font-extrabold'\n };\n\n const alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify'\n };\n\n const leadingClasses = {\n none: 'leading-none',\n tight: 'leading-tight',\n snug: 'leading-snug',\n normal: 'leading-normal',\n relaxed: 'leading-relaxed',\n loose: 'leading-loose'\n };\n\n const trackingClasses = {\n tighter: 'tracking-tighter',\n tight: 'tracking-tight',\n normal: 'tracking-normal',\n wide: 'tracking-wide',\n wider: 'tracking-wider',\n widest: 'tracking-widest'\n };\n\n const transformClasses = {\n uppercase: 'uppercase',\n lowercase: 'lowercase',\n capitalize: 'capitalize',\n normal: 'normal-case'\n };\n\n const decorationClasses = {\n underline: 'underline',\n 'line-through': 'line-through',\n none: 'no-underline'\n };\n\n const wrapClasses = {\n wrap: 'text-wrap',\n nowrap: 'text-nowrap',\n balance: 'text-balance',\n pretty: 'text-pretty'\n };\n\n const wordBreakClasses = {\n normal: 'break-normal',\n words: 'break-words',\n all: 'break-all',\n keep: 'break-keep'\n };\n\n const opacityClasses = {\n 0: 'opacity-0',\n 25: 'opacity-25',\n 50: 'opacity-50',\n 75: 'opacity-75',\n 100: 'opacity-100'\n };\n\n const lineClampClasses = {\n 1: 'line-clamp-1',\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n 5: 'line-clamp-5',\n 6: 'line-clamp-6'\n };\n\n const defaultSizes = {\n body: 'lg',\n muted: 'base',\n small: 'sm',\n primary: 'base',\n secondary: 'base',\n success: 'base',\n warning: 'base',\n error: 'base',\n inherit: 'base'\n } as const;\n\n const finalSize = size || defaultSizes[variant];\n const margin = hasMargin ? 'mb-3 sm:mb-4' : '';\n\n const classes = [\n variantClasses[variant],\n sizeClasses[finalSize],\n weightClasses[weight],\n margin,\n align && alignClasses[align],\n leading && leadingClasses[leading],\n tracking && trackingClasses[tracking],\n transform && transformClasses[transform],\n decoration && decorationClasses[decoration],\n italic && 'italic',\n truncate && 'truncate',\n lineClamp && lineClampClasses[lineClamp],\n wrap && wrapClasses[wrap],\n wordBreak && wordBreakClasses[wordBreak],\n opacity !== undefined && opacityClasses[opacity],\n selectable === true && 'select-all',\n selectable === false && 'select-none',\n className\n ]\n .filter(Boolean)\n .join(' ');\n\n const elementProps: Record<string, unknown> = {\n className: classes,\n ...(id && { id }),\n ...(htmlFor && as === 'label' && { htmlFor })\n };\n\n return createElement(as, elementProps, children);\n}\n\nText.displayName = 'Text';\n\nexport default Text;\n","import React from 'react';\n\nimport Heading from '../../typography/heading/heading';\nimport Text from '../../typography/text/text';\n\nexport type PageHeaderProps = {\n /** Page title text */\n title: string;\n /** Optional description text displayed below the title */\n description?: string;\n /** Optional badge or label component displayed next to the title */\n badge?: React.ReactNode;\n /** Additional CSS classes applied to the header container */\n className?: string;\n};\n\n/**\n * PageHeader - Standard page title and description layout\n * Used at the top of demo/showcase pages\n */\nfunction PageHeader({ title, description, badge, className = '' }: Readonly<PageHeaderProps>) {\n return (\n <div className={`mb-8 sm:mb-12 ${className}`}>\n <Heading level={1} hasMargin>\n {title} {badge}\n </Heading>\n {description && (\n <Text hasMargin variant=\"muted\" className=\"mt-2\">\n {description}\n </Text>\n )}\n </div>\n );\n}\n\nPageHeader.displayName = 'PageHeader';\n\nexport default PageHeader;\n","import { sectionPadding, SectionPaddingSize } from '../../../theme/size-tokens';\n\nexport interface SectionProps {\n /**\n * Content to render inside the section\n */\n children: React.ReactNode;\n\n /**\n * Background variant\n * @default 'default'\n */\n variant?: 'default' | 'muted' | 'primary' | 'dark';\n\n /**\n * Vertical padding size - uses unified size system\n * @default 'lg'\n */\n padding?: SectionPaddingSize;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * HTML id attribute\n */\n id?: string;\n}\n\n/**\n * Section component for page layout sections\n * Uses unified size system from theme/size-tokens\n */\nfunction Section({ children, variant = 'default', padding = 'none', className, id }: SectionProps) {\n const paddingClasses = sectionPadding[padding];\n\n // Build variant classes\n const variantClasses = {\n default: 'bg-background',\n muted: 'bg-muted/20',\n primary: 'bg-primary text-primary-foreground',\n dark: 'bg-background-dark text-foreground-dark'\n };\n\n const classes = ['w-full', paddingClasses, variantClasses[variant], className].filter(Boolean).join(' ');\n\n return (\n <section id={id} className={classes}>\n {children}\n </section>\n );\n}\n\nSection.displayName = 'Section';\n\nexport default Section;\n","import React from 'react';\n\nimport Heading from '../../typography/heading/heading';\nimport Text from '../../typography/text/text';\n\nexport type SectionHeaderProps = {\n /** Section heading text */\n title: string;\n /** Optional description text displayed below the title */\n description?: string;\n /** Optional badge or label component displayed next to the title */\n badge?: React.ReactNode;\n /** HTML heading level (h2, h3, or h4) */\n level?: 2 | 3 | 4;\n /** Additional CSS classes applied to the header container */\n className?: string;\n};\n\n/**\n * SectionHeader - Standard section title and description layout\n * Used for section headings within demo/showcase pages\n */\nfunction SectionHeader({ title, description, badge, level = 2, className = '' }: Readonly<SectionHeaderProps>) {\n return (\n <div className={className}>\n <Heading level={level} hasMargin>\n {title} {badge}\n </Heading>\n {description && <Text hasMargin>{description}</Text>}\n </div>\n );\n}\n\nSectionHeader.displayName = 'SectionHeader';\n\nexport default SectionHeader;\n","import React from 'react';\n\nimport { gapSizes, type GapSize } from '../../../theme/size-tokens';\n\ntype StackDirection = 'vertical' | 'horizontal';\ntype StackAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline';\ntype StackJustify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n\nconst alignClasses: Record<StackAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline'\n};\n\nconst justifyClasses: Record<StackJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly'\n};\n\nexport type StackProps = {\n /** Stack content - typically a list of child elements to be arranged */\n children: React.ReactNode;\n /** Additional CSS classes applied to the stack */\n className?: string;\n /** Flex direction - vertical stacks by default */\n direction?: StackDirection;\n /** Gap between children using the shared spacing scale */\n spacing?: GapSize;\n /** Cross-axis alignment of children */\n align?: StackAlign;\n /** Main-axis distribution of children */\n justify?: StackJustify;\n /** Allows items to wrap onto multiple lines */\n wrap?: boolean;\n /** Switches between flex and inline-flex */\n inline?: boolean;\n} & Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'className'>;\n\n/**\n * Stack layout primitive\n * Provides a flex container with direction, spacing, and alignment controls.\n */\nfunction Stack({\n children,\n className = '',\n direction = 'vertical',\n spacing = 'md',\n align = 'stretch',\n justify,\n wrap = false,\n inline = false,\n ...props\n}: Readonly<StackProps>) {\n const classes = [\n inline ? 'inline-flex' : 'flex',\n direction === 'horizontal' ? 'flex-row' : 'flex-col',\n gapSizes[spacing],\n alignClasses[align],\n justify && justifyClasses[justify],\n wrap ? 'flex-wrap' : 'flex-nowrap',\n className\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div data-component=\"Stack\" className={classes} {...props}>\n {children}\n </div>\n );\n}\n\nStack.displayName = 'Stack';\n\nexport default Stack;\n","import { ReactNode, useState } from 'react';\n\nexport type AccordionItemProps = {\n /** Title text displayed in the accordion header button */\n title: string;\n /** Content displayed when the accordion item is expanded */\n children: ReactNode;\n /** Whether the accordion item is initially expanded on mount */\n defaultOpen?: boolean;\n};\n\nexport type AccordionProps = {\n /** Accordion items (typically AccordionItem components) */\n children: ReactNode;\n /** Additional CSS classes applied to the accordion container */\n className?: string;\n /** Whether multiple accordion items can be open simultaneously (not implemented) */\n allowMultiple?: boolean;\n};\n\n/**\n * AccordionItem - Single expandable section\n */\nexport function AccordionItem({ title, children, defaultOpen = false }: Readonly<AccordionItemProps>) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n return (\n <article className=\"border-b border-border\">\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-full flex items-center justify-between py-4 px-2 text-left text-foreground hover:bg-muted/50 active:bg-muted transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-sm\"\n aria-expanded={isOpen}\n >\n <span className=\"font-medium\">{title}</span>\n <svg\n className={`w-5 h-5 transition-transform ${isOpen ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n {isOpen && <section className=\"px-2 pb-4 text-muted-foreground\">{children}</section>}\n </article>\n );\n}\n\n/**\n * Accordion - Expandable sections for FAQs, filters, etc.\n */\nfunction Accordion({ children, className = '' }: Readonly<AccordionProps>) {\n return <div className={`divide-y divide-border ${className}`}>{children}</div>;\n}\n\nAccordion.displayName = 'Accordion';\n\nexport default Accordion;\n","export type DividerProps = {\n /** Direction of the divider line */\n orientation?: 'horizontal' | 'vertical';\n /** Additional CSS classes applied to the divider */\n className?: string;\n} & React.HTMLAttributes<HTMLHRElement>;\n\n/**\n * Divider - Visual section break\n */\nfunction Divider({ orientation = 'horizontal', className = '', ...props }: Readonly<DividerProps>) {\n const orientationClasses = orientation === 'horizontal' ? 'w-full h-px' : 'h-full w-px';\n\n return (\n <hr className={`border-0 bg-border ${orientationClasses} ${className}`} aria-orientation={orientation} {...props} />\n );\n}\n\nDivider.displayName = 'Divider';\n\nexport default Divider;\n","import { useCallback, useLayoutEffect, useEffect, useRef, useState } from 'react';\n\nexport type OverlayPhase = 'mount' | 'animating-in' | 'visible' | 'animating-out';\n\nexport interface UseOverlayOptions {\n isOpen: boolean;\n onClose?: () => void; // reserved for future outside-click/escape wiring\n focusTrap?: boolean;\n lockScroll?: boolean;\n animationFrames?: number; // number of rAF hops before visible (default 2)\n restoreFocus?: boolean;\n exitDuration?: number; // ms matching CSS transition duration for animating-out\n unmountOnExit?: boolean; // default true\n}\n\nexport interface UseOverlayResult<T extends HTMLElement> {\n phase: OverlayPhase;\n shouldRender: boolean;\n ref: React.RefObject<T>;\n getPhaseClass: (openClass: string, closedClass: string) => string;\n}\n\n/**\n * useOverlay - shared lifecycle for animated overlays (Modal, Drawer, Popover, etc.)\n * Handles phased mounting, focus trap, scroll locking, and focus restoration.\n */\nexport function useOverlay<T extends HTMLElement>(options: UseOverlayOptions): UseOverlayResult<T> {\n const {\n isOpen,\n focusTrap = true,\n lockScroll = true,\n animationFrames = 2,\n restoreFocus = true,\n exitDuration = 300,\n unmountOnExit = true\n } = options;\n const previouslyFocusedRef = useRef<HTMLElement | null>(null);\n // Cast so consumer sees RefObject<T>; internal null checks still done.\n const containerRef = useRef<T>(null as unknown as T);\n const [shouldRender, setShouldRender] = useState(isOpen);\n const [phase, setPhase] = useState<OverlayPhase>('mount');\n\n // Mount / animation phases\n useLayoutEffect(() => {\n if (isOpen && !shouldRender) {\n // Opening: mount first\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setShouldRender(true);\n setPhase('mount');\n } else if (isOpen && shouldRender && phase === 'mount') {\n // Already mounted, start animation\n requestAnimationFrame(() => {\n setPhase('animating-in');\n let frame = 0;\n const step = () => {\n frame += 1;\n if (frame >= animationFrames) {\n setPhase('visible');\n } else {\n requestAnimationFrame(step);\n }\n };\n if (animationFrames > 0) {\n requestAnimationFrame(step);\n } else {\n setPhase('visible');\n }\n });\n } else if (!isOpen && shouldRender && phase !== 'animating-out') {\n // Closing: start exit animation\n setPhase('animating-out');\n }\n }, [isOpen, shouldRender, phase, animationFrames]);\n\n // Handle exit unmount timing aligned with CSS duration\n useEffect(() => {\n if (phase === 'animating-out' && unmountOnExit) {\n const timeout = setTimeout(() => {\n setShouldRender(false);\n setPhase('mount');\n }, exitDuration);\n return () => clearTimeout(timeout);\n }\n return undefined;\n }, [phase, exitDuration, unmountOnExit]);\n\n // Scroll lock & focus capture\n useEffect(() => {\n if (isOpen) {\n if (typeof document !== 'undefined') {\n if (restoreFocus) previouslyFocusedRef.current = document.activeElement as HTMLElement;\n if (lockScroll) document.body.style.overflow = 'hidden';\n }\n }\n return () => {\n if (typeof document !== 'undefined') {\n if (lockScroll) document.body.style.overflow = '';\n if (!isOpen && restoreFocus && previouslyFocusedRef.current) {\n previouslyFocusedRef.current.focus();\n }\n }\n };\n }, [isOpen, lockScroll, restoreFocus]);\n\n // Focus dialog/panel when visible without scrolling document\n useEffect(() => {\n if (phase === 'visible' && containerRef.current) {\n const el = containerRef.current as unknown as HTMLElement;\n try {\n // preventScroll supported in modern browsers; fallback to normal focus\n el.focus?.({ preventScroll: true } as FocusOptions);\n } catch {\n el.focus?.();\n }\n }\n }, [phase]);\n\n // Focus trap\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!focusTrap || phase !== 'visible' || e.key !== 'Tab' || !containerRef.current) return;\n const node = containerRef.current as unknown as HTMLElement;\n const focusable = node.querySelectorAll<HTMLElement>(\n 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex=\"-1\"])'\n );\n if (!focusable.length) return;\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (e.shiftKey) {\n if (document.activeElement === first || document.activeElement === node) {\n e.preventDefault();\n last.focus();\n }\n } else if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n },\n [focusTrap, phase]\n );\n\n useEffect(() => {\n if (focusTrap && phase === 'visible') {\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }\n return undefined;\n }, [phase, focusTrap, handleKeyDown]);\n\n const getPhaseClass = useCallback(\n (openClass: string, closedClass: string) => {\n // mount: closed (initial state before animation)\n // animating-in: open (CSS transition from closed to open)\n // visible: open (fully open)\n // animating-out: closed (CSS transition from open to closed)\n return phase === 'animating-in' || phase === 'visible' ? openClass : closedClass;\n },\n [phase]\n );\n\n return { phase, shouldRender, ref: containerRef, getPhaseClass };\n}\n\nexport default useOverlay;\n","import { ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport useOverlay from '../../feedback/overlay/useOverlay';\n\nimport { overlaySizes, OverlaySize } from '../../../theme/size-tokens';\n\nexport type DrawerProps = {\n /** Controls drawer visibility */\n isOpen: boolean;\n /** Callback fired when drawer should close */\n onClose: () => void;\n /** Drawer content */\n children: ReactNode;\n /** Side of the screen from which drawer slides in */\n position?: 'left' | 'right' | 'top' | 'bottom';\n /** Additional CSS classes applied to the drawer panel */\n className?: string;\n /** Optional header title displayed at the top of the drawer */\n title?: string;\n /** Size - uses unified overlay sizes */\n size?: OverlaySize;\n /** Close drawer when Escape key is pressed */\n closeOnEscape?: boolean;\n /** Close drawer when clicking outside the panel (on backdrop) */\n closeOnOutside?: boolean;\n /** Unmount drawer from DOM after exit animation completes */\n unmountOnExit?: boolean;\n /** Disable slide animation for instant open/close */\n noAnimation?: boolean;\n};\n\n/**\n * Drawer - Simple, reliable slide-in panel\n */\nfunction Drawer({\n isOpen,\n onClose,\n children,\n position = 'right',\n className = '',\n title,\n size = 'md',\n closeOnEscape = true,\n closeOnOutside = true,\n unmountOnExit = true,\n noAnimation = false\n}: Readonly<DrawerProps>) {\n const { phase, shouldRender, ref, getPhaseClass } = useOverlay<HTMLDivElement>({\n isOpen,\n lockScroll: true,\n restoreFocus: true,\n focusTrap: true,\n unmountOnExit,\n exitDuration: noAnimation ? 0 : 250,\n animationFrames: noAnimation ? 0 : 0\n });\n\n // If closed & unmounting, skip render\n if (!shouldRender) return null;\n\n const sizeClasses = overlaySizes[size];\n\n const edgeClasses: Record<string, string> = {\n left: 'left-0 top-0 bottom-0',\n right: 'right-0 top-0 bottom-0',\n top: 'top-0 left-0 right-0 h-96',\n bottom: 'bottom-0 left-0 right-0 h-96'\n };\n\n const closedTransform: Record<string, string> = {\n left: '-translate-x-full',\n right: 'translate-x-full',\n top: '-translate-y-full',\n bottom: 'translate-y-full'\n };\n\n const openTransform = 'translate-x-0 translate-y-0';\n const panelTransform = noAnimation ? '' : getPhaseClass(openTransform, closedTransform[position]);\n const overlayOpacity = noAnimation ? 'opacity-100' : getPhaseClass('opacity-100', 'opacity-0');\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape' && closeOnEscape) {\n e.stopPropagation();\n onClose();\n }\n };\n\n const panel = (\n <>\n {/* Overlay */}\n <button\n type=\"button\"\n className={`fixed inset-0 z-999 bg-black/50 backdrop-blur-sm transition-opacity duration-250 ease-in-out ${overlayOpacity} border-0 p-0 m-0`}\n aria-label={closeOnOutside ? 'Close overlay' : undefined}\n aria-hidden={!closeOnOutside}\n tabIndex={closeOnOutside ? 0 : -1}\n onClick={() => closeOnOutside && onClose()}\n onKeyDown={(e) => {\n if (!closeOnOutside) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClose();\n }\n }}\n data-phase={phase}\n />\n {/* Panel */}\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- This <div> is used as a dialog with role=\"dialog\" and appropriate ARIA attributes. Keyboard interactions are handled for accessibility compliance. */}\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title || 'Drawer'}\n tabIndex={-1}\n data-phase={phase}\n data-position={position}\n className={`fixed ${edgeClasses[position]} ${position === 'left' || position === 'right' ? sizeClasses : ''} bg-card text-card-foreground shadow-2xl z-1000 flex flex-col outline-none ${panelTransform} ${noAnimation ? '' : 'transition-transform duration-250 ease-out will-change-transform'} ${className}`}\n onKeyDown={handleKeyDown}\n >\n {title && (\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-border/60 bg-card/95 backdrop-blur-sm\">\n <h2 className=\"text-base font-semibold tracking-tight\">{title}</h2>\n <button\n type=\"button\"\n aria-label=\"Close drawer\"\n onClick={onClose}\n className=\"cursor-pointer w-8 h-8 inline-flex items-center justify-center rounded-md hover:bg-muted focus:outline-none focus:ring-2 focus:ring-ring\"\n >\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 >\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 <div className=\"flex-1 overflow-y-auto p-5 flex flex-col gap-4\">{children}</div>\n </div>\n </>\n );\n\n return createPortal(panel, document.body);\n}\n\nDrawer.displayName = 'Drawer';\n\nexport default Drawer;\n","import React from 'react';\nimport { cardSizes, marginX, MarginXSize, marginY, MarginYSize, type CardSize } from '../../../theme/size-tokens';\n\nexport type CardProps = {\n /** Card content - typically CardHeader, CardBody, CardFooter, or CardFigure components */\n children: React.ReactNode;\n /** Additional CSS classes applied to the card */\n className?: string;\n /** Visual style variant */\n variant?: 'default' | 'bordered' | 'ghost' | 'filled';\n /** Size of the card (sets fixed width) - uses unified size system */\n size?: CardSize;\n /** Width behavior - 'auto' uses size prop, 'full' stretches to container, 'fit' fits content */\n width?: 'auto' | 'full' | 'fit';\n /** Makes the card hoverable with transition effects */\n hoverable?: boolean;\n /** Card image position (when using figure element) */\n imagePosition?: 'top' | 'bottom' | 'side' | 'overlay';\n /** Centers the card content */\n centered?: boolean;\n /** Compact mode with reduced padding */\n compact?: boolean;\n /** Horizontal margin spacing */\n marginX?: MarginXSize;\n /** Vertical margin spacing */\n marginY?: MarginYSize;\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Card - Modern card component with flexible layouts\n *\n * Features:\n * - Multiple visual variants (default, bordered, ghost, filled)\n * - Flexible image positioning (top, bottom, side, overlay)\n * - Size variants from xs to xl\n * - Hover effects and transitions\n * - Centered content option\n * - Works with CardTitle, CardBody, CardActions, and CardFigure sub-components\n *\n * @example\n * ```tsx\n * // Basic card\n * <Card>\n * <CardBody>Content</CardBody>\n * </Card>\n *\n * // Card in Grid - stretches to fill grid cell\n * <Grid>\n * <Card width=\"full\">\n * <CardBody>Grid Item</CardBody>\n * </Card>\n * </Grid>\n *\n * // Fixed size card\n * <Card size=\"lg\">\n * <CardBody>Fixed width card</CardBody>\n * </Card>\n *\n * // Card with image and content\n * <Card hoverable width=\"full\">\n * <CardFigure>\n * <img src=\"...\" alt=\"...\" />\n * </CardFigure>\n * <CardBody>\n * <CardTitle>Product Name</CardTitle>\n * <Text>Description</Text>\n * </CardBody>\n * </Card>\n * ```\n */\nfunction Card({\n children,\n className = '',\n variant = 'default',\n size = 'md',\n width = 'auto',\n hoverable = false,\n imagePosition = 'top',\n centered = false,\n compact = false,\n marginX: mX = 'none',\n marginY: mY = 'none',\n ...props\n}: Readonly<CardProps>) {\n const variantClasses = {\n default: 'bg-card text-card-foreground border border-border shadow-md',\n bordered: 'bg-card text-card-foreground border-2 border-border',\n ghost: 'bg-transparent',\n filled: 'bg-muted text-foreground'\n };\n\n const widthClasses = {\n auto: size ? cardSizes[size] : 'max-w-full',\n full: 'w-full',\n fit: 'w-fit'\n };\n\n const marginXClass = mX !== 'none' ? marginX[mX] : '';\n const marginYClass = mY !== 'none' ? marginY[mY] : '';\n\n const hoverClasses = hoverable\n ? 'transition-all duration-300 hover:shadow-xl hover:-translate-y-1'\n : 'transition-shadow duration-200';\n\n const imagePositionClasses = {\n top: 'flex-col',\n bottom: 'flex-col-reverse',\n side: 'flex-row',\n overlay: 'relative'\n };\n\n const centerClasses = centered ? 'text-center items-center' : '';\n\n return (\n <div\n className={`\n rounded-2xl\n overflow-hidden\n ${variantClasses[variant]}\n ${widthClasses[width]}\n ${hoverClasses}\n ${imagePositionClasses[imagePosition]}\n ${centerClasses}\n ${compact ? 'p-4' : ''}\n ${imagePosition === 'side' ? 'flex' : 'flex'}\n ${marginXClass}\n ${marginYClass}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nCard.displayName = 'Card';\n\nexport default Card;\n","import { ReactNode } from 'react';\n\nexport type CardHeaderProps = {\n /** Header content (typically heading or metadata) */\n children: ReactNode;\n /** Additional CSS classes applied to the header container */\n className?: string;\n /**\n * Add border to bottom of header\n * @default true\n */\n bordered?: boolean;\n /**\n * Padding size\n * @default 'md'\n */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n};\n\n/**\n * CardHeader - Header section for Card\n *\n * Displays a header section at the top of a card, typically used for titles or metadata.\n * Can be used with or without CardBody.\n *\n * @example\n * ```tsx\n * <Card>\n * <CardHeader>\n * <h3>Card Header</h3>\n * </CardHeader>\n * <CardBody>\n * <p>Content</p>\n * </CardBody>\n * </Card>\n * ```\n */\nfunction CardHeader({ children, className = '', bordered = true, padding = 'md' }: Readonly<CardHeaderProps>) {\n const paddingClasses = {\n none: 'p-0',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8'\n };\n\n return (\n <div\n className={`\n card-header\n flex items-center justify-between gap-3\n ${paddingClasses[padding]}\n ${bordered ? 'border-b border-border' : ''}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n >\n {children}\n </div>\n );\n}\n\nCardHeader.displayName = 'CardHeader';\n\nexport default CardHeader;\n","import { cardPadding, CardPaddingSize } from '../../../theme/size-tokens';\n\nexport interface CardBodyProps {\n /**\n * Content to render inside the card body\n */\n children: React.ReactNode;\n\n /**\n * Padding size - uses unified size system\n * @default 'md'\n */\n padding?: CardPaddingSize;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * CardBody - Content container for Card component\n * Uses unified size system from theme/size-tokens\n */\nfunction CardBody({ children, padding = 'md', className = '' }: CardBodyProps) {\n const paddingClasses = cardPadding[padding];\n\n return (\n <div\n className={`\n card-body\n flex flex-col gap-2\n ${paddingClasses}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n >\n {children}\n </div>\n );\n}\n\nCardBody.displayName = 'CardBody';\n\nexport default CardBody;\n","import { ReactNode } from 'react';\n\nexport type CardFooterProps = {\n /** Footer content (typically buttons or metadata) */\n children: ReactNode;\n /** Additional CSS classes applied to the footer container */\n className?: string;\n /**\n * Add border to top of footer\n * @default true\n */\n bordered?: boolean;\n /**\n * Padding size\n * @default 'md'\n */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /**\n * Alignment of footer content\n * @default 'start'\n */\n align?: 'start' | 'center' | 'end';\n};\n\n/**\n * CardFooter - Footer section for Card\n *\n * Displays a footer section at the bottom of a card, typically used for actions or metadata.\n *\n * @example\n * ```tsx\n * <Card>\n * <CardBody>\n * <CardTitle>Title</CardTitle>\n * <p>Content</p>\n * </CardBody>\n * <CardFooter align=\"end\">\n * <Button>Action</Button>\n * </CardFooter>\n * </Card>\n * ```\n */\nfunction CardFooter({\n children,\n className = '',\n bordered = true,\n padding = 'md',\n align = 'start'\n}: Readonly<CardFooterProps>) {\n const paddingClasses = {\n none: 'p-0',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8'\n };\n\n const alignClasses = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end'\n };\n\n return (\n <div\n className={`\n card-footer\n flex items-center gap-1\n ${paddingClasses[padding]}\n ${bordered ? 'border-t border-border' : ''}\n ${alignClasses[align]}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n >\n {children}\n </div>\n );\n}\n\nCardFooter.displayName = 'CardFooter';\n\nexport default CardFooter;\n","import { ReactNode } from 'react';\n\nexport type CardActionsProps = {\n /**\n * Action buttons or elements\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * Alignment of actions\n * @default 'end'\n */\n align?: 'start' | 'center' | 'end' | 'stretch';\n\n /**\n * Direction of actions\n * @default 'row'\n */\n direction?: 'row' | 'column';\n};\n\n/**\n * CardActions - Action buttons container for Card (DaisyUI aesthetic with pure Tailwind)\n *\n * Container for buttons and other interactive elements within a card.\n * Place after CardBody for proper spacing and alignment.\n *\n * @example\n * ```tsx\n * <Card>\n * <CardBody>\n * <CardTitle>Product</CardTitle>\n * <p>Description</p>\n * </CardBody>\n * <CardActions align=\"end\">\n * <Button style=\"ghost\">Cancel</Button>\n * <Button>Buy Now</Button>\n * </CardActions>\n * </Card>\n * ```\n */\nfunction CardActions({ children, className = '', align = 'end', direction = 'row' }: Readonly<CardActionsProps>) {\n const alignClasses = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n stretch: 'justify-stretch'\n };\n\n const directionClasses = {\n row: 'flex-row',\n column: 'flex-col'\n };\n\n return (\n <div\n className={`\n flex gap-2 px-6 pb-6 pt-2\n ${directionClasses[direction]}\n ${alignClasses[align]}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n >\n {children}\n </div>\n );\n}\n\nCardActions.displayName = 'CardActions';\n\nexport default CardActions;\n","import { ReactNode } from 'react';\n\nexport type CardFigureProps = {\n /**\n * Image or media content\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * Aspect ratio for the image\n */\n aspectRatio?: 'square' | 'video' | 'wide' | 'portrait' | 'auto';\n};\n\n/**\n * CardFigure - Image/media container for Card\n *\n * Container for images or other media content within a card.\n * Automatically handles aspect ratios and positioning based on parent Card's imagePosition.\n *\n * @example\n * ```tsx\n * // Basic card with image\n * <Card>\n * <CardFigure>\n * <img src=\"product.jpg\" alt=\"Product\" />\n * </CardFigure>\n * <CardBody>\n * <CardTitle>Product Name</CardTitle>\n * </CardBody>\n * </Card>\n *\n * // Card with custom aspect ratio\n * <Card>\n * <CardFigure aspectRatio=\"wide\">\n * <img src=\"banner.jpg\" alt=\"Banner\" />\n * </CardFigure>\n * <CardBody>\n * <CardTitle>Wide Image</CardTitle>\n * </CardBody>\n * </Card>\n * ```\n */\nfunction CardFigure({ children, className = '', aspectRatio = 'auto' }: Readonly<CardFigureProps>) {\n const aspectRatioClasses = {\n square: 'aspect-square',\n video: 'aspect-video',\n wide: 'aspect-[21/9]',\n portrait: 'aspect-[3/4]',\n auto: ''\n };\n\n return (\n <figure\n className={`\n card-figure\n relative overflow-hidden\n ${aspectRatioClasses[aspectRatio]}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n >\n {children}\n </figure>\n );\n}\n\nCardFigure.displayName = 'CardFigure';\n\nexport default CardFigure;\n","import { ReactNode } from 'react';\nimport { headingSizes, type HeadingSize } from '../../../theme/size-tokens';\n\nexport type CardTitleProps = {\n /**\n * Title content\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * HTML heading level\n * @default 'h2'\n */\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n /**\n * Size of the title - uses unified size system\n * @default 'md'\n */\n size?: HeadingSize;\n};\n\n/**\n * CardTitle - Title component for Card\n *\n * Displays a prominent title within a card, typically used at the top of CardBody.\n *\n * @example\n * ```tsx\n * <Card>\n * <CardBody>\n * <CardTitle>My Card Title</CardTitle>\n * <p>Card content goes here</p>\n * </CardBody>\n * </Card>\n * ```\n */\nfunction CardTitle({ children, className = '', as: Component = 'h2', size = 'md' }: Readonly<CardTitleProps>) {\n const sizeClasses = headingSizes[size];\n\n return (\n <Component\n className={`\n card-title\n ${sizeClasses}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n >\n {children}\n </Component>\n );\n}\n\nCardTitle.displayName = 'CardTitle';\n\nexport default CardTitle;\n","import React from 'react';\n\nimport { interactiveSizes, InteractiveSize, InputWidth, inputWidthSizes } from '../../../theme/size-tokens';\nimport { Alignment, colorVariants, inputAlignClasses } from '../../../theme/tokens';\n\nexport type ButtonProps = {\n /** Button label content - text, icons, or other elements */\n children?: React.ReactNode;\n /** Click event handler */\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /** Accessible label for icon-only buttons (required when no children) */\n ariaLabel?: string;\n /** Disables button interaction and applies disabled styling */\n disabled?: boolean;\n /** HTML button type attribute */\n type?: 'button' | 'submit' | 'reset';\n /** Additional CSS classes applied to the button */\n className?: string;\n /** Icon element to display alongside button text */\n icon?: React.ReactNode;\n /** Position of the icon relative to button text */\n iconPosition?: 'left' | 'right';\n /** Color variant affecting button appearance */\n variant?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\n /** Visual style modifier - solid (filled), outline (bordered), ghost (transparent), link (text-only), or soft (subtle background) */\n style?: 'solid' | 'outline' | 'ghost' | 'link' | 'soft';\n /** Size variant - uses unified size system (xs, sm, md, lg, xl) */\n size?: InteractiveSize;\n /** Border radius style - default (rounded), pill (fully rounded), square (sharp corners), circle (for icon-only buttons) */\n rounded?: 'default' | 'pill' | 'square' | 'circle';\n /** Shows loading spinner and disables interaction */\n loading?: boolean;\n /** Width of the button */\n width?: InputWidth;\n /** Aligns the button within its container: left, center, or right */\n align?: Alignment;\n /** Applies active/pressed state styling */\n active?: boolean;\n};\n\n/**\n * Accessible Button component\n * - Color variants: neutral, primary, secondary, accent, info, success, warning, error\n * - Style modifiers: solid (default), outline, ghost, link, soft\n * - Sizes: xs, sm, md (default), lg, xl\n * - Supports icons with flexible positioning (left/right)\n * - Icon-only buttons require `ariaLabel` for accessibility\n */\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n children,\n onClick,\n ariaLabel,\n disabled = false,\n type = 'button',\n className = '',\n icon,\n iconPosition = 'left',\n variant = 'neutral',\n style = 'solid',\n size = 'md',\n rounded = 'default',\n loading = false,\n width = 'auto',\n align,\n active = false\n },\n ref\n ) => {\n const isIconOnly = icon && !children;\n\n // Icon-only buttons MUST have an aria-label for accessibility\n if (isIconOnly && !ariaLabel) {\n // eslint-disable-next-line no-console\n console.warn('Button: Icon-only buttons require an ariaLabel for accessibility');\n }\n\n // Style modifiers\n const getStyleClasses = () => {\n const variantKey = variant as keyof typeof colorVariants.solid;\n\n switch (style) {\n case 'outline':\n return `${colorVariants.outline[variantKey]} active:scale-95`;\n case 'ghost':\n return colorVariants.ghost[variantKey];\n case 'link':\n return colorVariants.link[variantKey];\n case 'soft':\n return colorVariants.soft[variantKey];\n case 'solid':\n default:\n return `${colorVariants.solid[variantKey]} shadow-sm hover:shadow-md`;\n }\n };\n\n // Sizes - from unified size system\n const sizeConfig = interactiveSizes[size];\n const sizeClasses = `${sizeConfig.height} ${sizeConfig.padding} ${sizeConfig.text}`;\n\n const roundedClasses = {\n default: 'rounded-md',\n pill: 'rounded-full',\n square: 'rounded-none aspect-square',\n circle: 'rounded-full aspect-square'\n };\n\n // Show loading spinner or icon\n const displayIcon = loading ? (\n <svg className=\"animate-spin h-4 w-4\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\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 ></path>\n </svg>\n ) : (\n icon\n );\n\n const styleClasses = getStyleClasses();\n const widthClasses = inputWidthSizes[width];\n const alignmentClass = align ? inputAlignClasses[align] : '';\n const activeClasses = active ? 'active:scale-95' : '';\n\n const shouldRenderIconSlots = !isIconOnly && Boolean(displayIcon);\n const cloneIcon = () => {\n if (!displayIcon) return null;\n if (React.isValidElement(displayIcon)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return React.cloneElement(displayIcon as React.ReactElement<any>, { 'aria-hidden': false });\n }\n return displayIcon;\n };\n\n const showLeftIcon = shouldRenderIconSlots && iconPosition === 'left';\n const showRightIcon = shouldRenderIconSlots && iconPosition === 'right';\n\n // Check if className contains display utilities to avoid conflicts\n const hasDisplayOverride =\n className.includes('hidden') ||\n className.includes('inline') ||\n className.includes('block') ||\n className.includes('flex');\n const baseDisplayClass = hasDisplayOverride ? '' : 'inline-flex';\n\n return (\n <button\n ref={ref}\n type={type}\n onClick={onClick}\n aria-label={ariaLabel}\n disabled={disabled || loading}\n className={`${baseDisplayClass} items-center justify-center ${alignmentClass} ${roundedClasses[rounded]} font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50 ${styleClasses} ${sizeClasses} ${\n isIconOnly ? 'p-0' : ''\n } ${widthClasses} ${activeClasses} ${className}`}\n >\n {showLeftIcon && <span className=\"flex shrink-0 items-center mr-2\">{cloneIcon()}</span>}\n {isIconOnly ? (\n <span className=\"inline-flex items-center justify-center\">{displayIcon}</span>\n ) : (\n <span className=\"inline-flex flex-1 justify-center text-center\">{children}</span>\n )}\n {showRightIcon && <span className=\"flex shrink-0 items-center ml-2\">{cloneIcon()}</span>}\n </button>\n );\n }\n);\n\nButton.displayName = 'Button';\n\nexport default Button;\n","import React from 'react';\nimport { Icon, IconSize } from '../../system/icon';\nimport Button, { ButtonProps as BaseButtonProps } from './button';\nimport { StatusColorProp } from '../../../theme/tokens';\n\nexport interface ButtonWithIconProps extends Omit<BaseButtonProps, 'icon' | 'style'> {\n icon?: string;\n iconSize?: IconSize;\n iconColor?: StatusColorProp | 'currentColor';\n buttonStyle?: BaseButtonProps['style'];\n children?: React.ReactNode;\n}\n\n/**\n * ButtonWithIcon - Button using Icon wrapper for consistent icon sizing\n * Usage: <ButtonWithIcon icon=\"plus\" iconSize=\"md\">Add</ButtonWithIcon>\n */\nconst ButtonWithIcon = React.forwardRef<HTMLButtonElement, ButtonWithIconProps>(\n (\n { icon, iconSize = 'md', iconColor = 'currentColor', iconPosition = 'left', buttonStyle, children, ...rest },\n ref\n ) => {\n const iconNode = icon ? <Icon name={icon} size={iconSize} color={iconColor} /> : null;\n return (\n <Button ref={ref} icon={iconNode} iconPosition={iconPosition} style={buttonStyle} {...rest}>\n {children}\n </Button>\n );\n }\n);\n\nButtonWithIcon.displayName = 'ButtonWithIcon';\n\nexport default ButtonWithIcon;\n","import type { ComponentProps, ReactNode } from 'react';\nimport { Fragment } from 'react';\n\nimport Button from '../../forms/button/button';\nimport ButtonWithIcon from '../../forms/button/button-with-icon';\nimport Icon from '../../system/icon/icon';\nimport Text from '../../typography/text/text';\nimport Card from '../card/card';\nimport CardBody from '../card/card-body';\nimport Divider from '../divider/divider';\nimport Stack from '../stack/stack';\nimport CardHeader from '../card/card-header';\n\nexport type ActionCardButton = Omit<ComponentProps<typeof ButtonWithIcon>, 'children'> & {\n label: string;\n};\n\nexport type ActionCardItemAction = Omit<ComponentProps<typeof Button>, 'children'> & {\n label: string;\n};\n\nexport type ActionCardItem = {\n id: string;\n icon?: ComponentProps<typeof Icon>['name'];\n label: string;\n description?: string;\n action?: ActionCardItemAction;\n};\n\nexport type ActionCardProps = {\n icon?: ComponentProps<typeof Icon>['name'];\n title: string;\n description?: string;\n children?: ReactNode;\n primaryAction?: ActionCardButton;\n secondaryAction?: ActionCardButton;\n align?: 'start' | 'center';\n bodyPadding?: ComponentProps<typeof CardBody>['padding'];\n items?: ActionCardItem[];\n showItemDividers?: boolean;\n itemSpacing?: ComponentProps<typeof Stack>['spacing'];\n statusContent?: ReactNode;\n footerContent?: ReactNode;\n 'data-testid'?: string;\n};\n\nconst stackAlignMap: Record<'start' | 'center', ComponentProps<typeof Stack>['align']> = {\n start: 'start',\n center: 'center'\n};\n\nconst stackJustifyMap: Record<'start' | 'center', ComponentProps<typeof Stack>['justify']> = {\n start: 'start',\n center: 'center'\n};\n\nfunction renderItems(\n items?: ActionCardItem[],\n options?: {\n showDividers?: boolean;\n spacing?: ComponentProps<typeof Stack>['spacing'];\n }\n) {\n if (!items?.length) return null;\n\n const { showDividers = false, spacing = 'sm' } = options ?? {};\n\n return (\n <Stack direction=\"vertical\" spacing={spacing} className=\"w-full\">\n {items.map((item, index) => (\n <Fragment key={item.id}>\n <Stack direction=\"vertical\" spacing=\"xs\" className=\"w-full\">\n <Stack direction=\"horizontal\" align=\"center\" spacing=\"sm\" className=\"w-full\">\n <Stack direction=\"horizontal\" align=\"center\" spacing=\"sm\" className=\"flex-1\">\n {item.icon && <Icon name={item.icon} />}\n <Text weight=\"medium\">{item.label}</Text>\n </Stack>\n\n {item.action && (\n <ButtonWithIcon\n {...item.action}\n icon={typeof item.action.icon === 'string' ? item.action.icon : ''}\n iconPosition={item.action.iconPosition ?? 'right'}\n >\n {item.action.label}\n </ButtonWithIcon>\n )}\n </Stack>\n\n {item.description && (\n <Text size=\"sm\" variant=\"muted\">\n {item.description}\n </Text>\n )}\n </Stack>\n\n {showDividers && index < items.length - 1 && <Divider />}\n </Fragment>\n ))}\n </Stack>\n );\n}\n\nfunction renderAction(\n action?: ActionCardButton,\n fallbackVariant: ComponentProps<typeof ButtonWithIcon>['variant'] = 'primary'\n) {\n if (!action) return null;\n\n return (\n <ButtonWithIcon\n {...action}\n variant={action.variant ?? fallbackVariant}\n iconPosition={action.iconPosition ?? 'right'}\n icon={action.icon ?? ''}\n >\n {action.label}\n </ButtonWithIcon>\n );\n}\n\nexport function ActionCard({\n icon,\n title,\n description,\n children,\n primaryAction,\n secondaryAction,\n align = 'center',\n items,\n showItemDividers = true,\n itemSpacing = 'sm',\n statusContent,\n footerContent,\n 'data-testid': dataTestId\n}: ActionCardProps) {\n const stackAlign = stackAlignMap[align];\n const stackJustify = stackJustifyMap[align];\n const hasItems = Boolean(items?.length);\n const hasChildren = Boolean(children);\n const hasStatus = Boolean(statusContent);\n const hasFooter = Boolean(footerContent);\n\n return (\n <Card variant=\"default\" width=\"full\" data-testid={dataTestId}>\n <CardHeader padding=\"sm\">\n <Stack direction=\"vertical\" spacing=\"sm\">\n <Stack direction=\"horizontal\" spacing=\"sm\" align={align}>\n {icon && <Icon name={icon} />}\n <Text size=\"lg\" weight=\"semibold\">\n {title}\n </Text>\n </Stack>\n {description && (\n <Text variant=\"muted\" size=\"sm\">\n {description}\n </Text>\n )}\n </Stack>\n </CardHeader>\n <CardBody padding=\"sm\">\n <Stack direction=\"vertical\" spacing=\"md\" align={stackAlign}>\n {hasStatus && (\n <Stack direction=\"vertical\" className=\"w-full\">\n {statusContent}\n </Stack>\n )}\n\n {hasItems &&\n renderItems(items, {\n showDividers: showItemDividers,\n spacing: itemSpacing\n })}\n\n {hasChildren && (\n <Stack direction=\"vertical\" spacing=\"sm\" className=\"w-full\">\n {children}\n </Stack>\n )}\n\n {hasFooter && (\n <Stack direction=\"vertical\" className=\"w-full\">\n {footerContent}\n </Stack>\n )}\n\n {(primaryAction ?? secondaryAction) && (\n <Stack direction=\"horizontal\" spacing=\"sm\" justify={stackJustify} className=\"w-full flex-wrap\">\n {renderAction(primaryAction)}\n {renderAction(secondaryAction, 'secondary')}\n </Stack>\n )}\n </Stack>\n </CardBody>\n </Card>\n );\n}\n","import { useEffect, RefObject } from 'react';\n\n/**\n * Robust scroll reset on key changes (e.g., route changes).\n * Attempts multiple strategies to ensure scroll position returns to top.\n */\nexport function useScrollReset(deps: unknown[], container?: HTMLElement | null | RefObject<HTMLElement | null>) {\n useEffect(() => {\n let cancelled = false;\n const maxRaf = 6;\n let rafCount = 0;\n\n const isRef = (obj: unknown): obj is RefObject<HTMLElement | null> => {\n return typeof obj === 'object' && obj !== null && 'current' in obj;\n };\n\n const setAllScrollTop = () => {\n if (cancelled) return;\n\n // Handle hash navigation if applicable\n try {\n const hash = typeof window !== 'undefined' ? window.location.hash : '';\n if (hash && hash.startsWith('#')) {\n const id = decodeURIComponent(hash.slice(1));\n // Resolve container whether caller passed HTMLElement or RefObject\n const resolved: HTMLElement | null | undefined = isRef(container)\n ? container.current\n : (container as HTMLElement | null | undefined);\n\n // Search within container first, then fallback to document\n const root = resolved ?? document;\n const target = (root as Document | HTMLElement).querySelector\n ? (root as Document | HTMLElement).querySelector(`#${CSS.escape(id)}`)\n : null;\n\n if (target) {\n try {\n (target as HTMLElement).scrollIntoView({ block: 'start' });\n } catch {\n // ignore errors and fall back to not resetting\n }\n\n return;\n }\n }\n } catch {\n // CSS.escape may throw in very old environments; fall back to default behavior\n }\n\n window.scrollTo(0, 0);\n // Resolve container whether caller passed HTMLElement or RefObject\n const resolved: HTMLElement | null | undefined = isRef(container)\n ? container.current\n : (container as HTMLElement | null | undefined);\n if (resolved) resolved.scrollTop = 0;\n document.documentElement.scrollTop = 0;\n document.body.scrollTop = 0;\n };\n\n // Immediate\n setAllScrollTop();\n\n // Microtask flush\n Promise.resolve().then(() => setAllScrollTop());\n\n // Timeout after potential layout shift\n const timeoutId = setTimeout(() => setAllScrollTop(), 0);\n\n // A few RAF retries to combat async mounts\n const loop = () => {\n if (cancelled) return;\n setAllScrollTop();\n rafCount += 1;\n if (rafCount < maxRaf) requestAnimationFrame(loop);\n };\n requestAnimationFrame(loop);\n\n return () => {\n cancelled = true;\n clearTimeout(timeoutId);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}\n\nexport default useScrollReset;\n","import React from 'react';\nimport { Icon, IconSize } from '../../system/icon';\nimport Button, { ButtonProps as BaseButtonProps } from './button';\nimport { StatusColorProp } from '../../../theme/tokens';\n\nexport interface IconButtonProps extends Omit<BaseButtonProps, 'icon' | 'style' | 'children'> {\n icon: string;\n ariaLabel: string;\n iconSize?: IconSize;\n iconColor?: StatusColorProp | 'currentColor';\n buttonStyle?: BaseButtonProps['style'];\n children?: never;\n}\n\n/**\n * IconButton - Icon-only button using Icon wrapper for consistent icon sizing\n * Usage: <IconButton icon=\"plus\" iconSize=\"md\" ariaLabel=\"Add item\" />\n */\nconst IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(\n ({ icon, iconSize = 'md', iconColor = 'currentColor', buttonStyle, ariaLabel, ...rest }, ref) => {\n const iconNode = icon ? <Icon name={icon} size={iconSize} color={iconColor} /> : null;\n return <Button ref={ref} icon={iconNode} style={buttonStyle} ariaLabel={ariaLabel} {...rest} />;\n }\n);\n\nIconButton.displayName = 'IconButton';\n\nexport default IconButton;\n","import { ReactNode, useState, useRef, useEffect } from 'react';\nimport useScrollReset from '@/hooks/useScrollReset';\nimport IconButton from '../../forms/button/icon-button';\n\nexport type LeftNavLayoutProps = {\n /** Navigation sidebar content */\n nav: ReactNode;\n /** Main content area */\n children: ReactNode;\n /** Whether sidebar is collapsed (icon-only mode) */\n collapsed?: boolean;\n /** Callback when collapse state changes */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Whether to show collapse toggle button */\n showToggle?: boolean;\n /** Custom className for the layout container */\n className?: string;\n /** Custom className for the nav sidebar */\n navClassName?: string;\n /** Custom className for the content area */\n contentClassName?: string;\n /** Width of the sidebar when expanded */\n navWidth?: string;\n /** Width of the sidebar when collapsed */\n navWidthCollapsed?: string;\n /** Whether sidebar is collapsible on mobile (becomes overlay) */\n mobileCollapsible?: boolean;\n /** Mobile menu open state (controlled) */\n mobileMenuOpen?: boolean;\n /** Callback when mobile menu state changes */\n onMobileMenuOpenChange?: (open: boolean) => void;\n /** Embedded demo mode (no fixed positioning, constrained height) */\n embedded?: boolean;\n /** Ref for the main content scrollable element */\n mainContentRef?: React.RefObject<HTMLDivElement>;\n /** Optional header text for the navigation sidebar */\n header?: string;\n};\n\n/**\n * LeftNavLayout - Full-featured responsive left navigation layout\n *\n * Provides a robust sidebar navigation with:\n * - Full and collapsed (icon-only) states\n * - Smooth transitions without janky spacing\n * - Proper scroll handling\n * - Responsive mobile behavior\n * - Accessible keyboard navigation\n *\n * @example\n * ```tsx\n * <LeftNavLayout\n * collapsed={isCollapsed}\n * onCollapsedChange={setIsCollapsed}\n * nav={\n * <>\n * <LeftNavSection>\n * <LeftNavItem icon={<HomeIcon />} href=\"/\" active>Home</LeftNavItem>\n * <LeftNavItem icon={<DashboardIcon />} href=\"/dashboard\">Dashboard</LeftNavItem>\n * </LeftNavSection>\n * </>\n * }\n * >\n * <main>Your content here</main>\n * </LeftNavLayout>\n * ```\n */\nfunction LeftNavLayout({\n nav,\n children,\n collapsed: controlledCollapsed,\n onCollapsedChange,\n showToggle = true,\n className = '',\n navClassName = '',\n contentClassName = '',\n navWidth = '16rem',\n navWidthCollapsed = '4.5rem',\n mobileCollapsible = true,\n mobileMenuOpen: controlledMobileMenuOpen,\n embedded = false,\n header = 'Navigation',\n mainContentRef\n}: Readonly<LeftNavLayoutProps>) {\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const navRef = useRef<HTMLDivElement | null>(null);\n const scrollPosRef = useRef<number>(0);\n const internalContentRef = useRef<HTMLElement | null>(null);\n const contentRef = mainContentRef || internalContentRef;\n\n // Use controlled or uncontrolled collapsed state\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const setCollapsed = (value: boolean) => {\n if (onCollapsedChange) {\n onCollapsedChange(value);\n } else {\n setInternalCollapsed(value);\n }\n };\n\n // Mobile menu state is controlled by parent\n const mobileMenuOpen = controlledMobileMenuOpen ?? false;\n\n const toggleCollapsed = () => setCollapsed(!collapsed);\n\n // Restore nav scroll position after children change (route switch) & reset scroll\n useEffect(() => {\n if (navRef.current) {\n navRef.current.scrollTop = scrollPosRef.current;\n }\n }, [children]);\n\n // Robust scroll reset for main content area on children change\n // Pass the ref object (not .current) to avoid reading ref during render\n useScrollReset([children], contentRef as React.RefObject<HTMLElement | null>);\n\n const containerClasses = embedded\n ? 'flex bg-background border border-border rounded-lg overflow-hidden'\n : 'flex h-[calc(100vh-3.5rem)] md:h-[calc(100vh-4rem)] bg-background';\n\n return (\n <div className={`${containerClasses} ${className}`}>\n {/* Sidebar Navigation */}\n <aside\n className={`\n ${embedded ? 'relative flex flex-col h-full' : 'fixed lg:relative top-14 md:top-16 lg:top-0 left-0 z-40 lg:z-10 h-[calc(100vh-3.5rem)] md:h-[calc(100vh-4rem)] lg:h-full'}\n flex flex-col shrink-0\n bg-background border-r border-border\n transition-all duration-300 ease-in-out\n ${!embedded && mobileCollapsible && !mobileMenuOpen ? '-translate-x-full lg:translate-x-0' : 'translate-x-0'}\n ${collapsed ? 'w-18' : 'w-64'}\n ${navClassName}\n `}\n style={\n (!collapsed && navWidth !== '16rem') || (collapsed && navWidthCollapsed !== '4.5rem')\n ? ({\n width: collapsed ? navWidthCollapsed : navWidth\n } as React.CSSProperties)\n : undefined\n }\n aria-label=\"Main navigation\"\n >\n {/* Nav Header with Toggle */}\n\n {/* Nav Content - Scrollable */}\n <nav\n ref={navRef}\n className=\"flex-1 overflow-y-auto overflow-x-hidden scrollbar-thin\"\n data-collapsed={collapsed}\n onScroll={(e) => {\n scrollPosRef.current = (e.currentTarget as HTMLDivElement).scrollTop;\n }}\n >\n {showToggle && (\n <div\n className={`\n relative flex items-center h-12 shrink-0\n px-3 mx-2 border-b border-border\n `}\n >\n <h2\n className={`\n text-sm font-semibold text-foreground\n transition-all duration-300 ease-in-out\n ${collapsed ? 'opacity-0 w-0 overflow-hidden' : 'opacity-100'}\n `}\n aria-hidden={collapsed}\n >\n {header}\n </h2>\n <IconButton\n icon={collapsed ? 'chevron-right' : 'chevron-left'}\n ariaLabel={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n buttonStyle=\"ghost\"\n variant=\"neutral\"\n size=\"sm\"\n iconSize=\"sm\"\n className={`\n ${collapsed ? 'absolute left-1/2 -translate-x-1/2' : 'absolute right-0'}\n `}\n onClick={toggleCollapsed}\n />\n </div>\n )}\n {nav}\n </nav>\n </aside>\n\n {/* Main Content Area */}\n <main\n ref={contentRef as React.RefObject<HTMLDivElement>}\n className={`flex-1 overflow-y-auto ${embedded ? 'h-60' : ''} ${contentClassName}`}\n >\n {children}\n </main>\n </div>\n );\n}\n\nLeftNavLayout.displayName = 'LeftNavLayout';\n\nexport default LeftNavLayout;\n","import { ReactNode, useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport type TooltipProps = {\n /** The element that triggers the tooltip */\n children: ReactNode;\n /** Tooltip text content */\n content: string | ReactNode;\n /** Position of the tooltip relative to the trigger element */\n position?: 'top' | 'bottom' | 'left' | 'right';\n /** Color variant of the tooltip */\n variant?: 'default' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral';\n /** Delay before showing tooltip in ms */\n delayDuration?: number;\n /** Additional CSS classes */\n className?: string;\n};\n\n/**\n * Tooltip - Simple CSS-based tooltip component\n *\n * Displays a tooltip message on hover. Uses CSS for positioning with\n * portal rendering to escape overflow constraints.\n *\n * @example\n * ```tsx\n * <Tooltip content=\"Hello\">\n * <Button>Hover me</Button>\n * </Tooltip>\n *\n * <Tooltip content=\"Success!\" position=\"right\" variant=\"success\">\n * <Button>Submit</Button>\n * </Tooltip>\n * ```\n */\nfunction Tooltip({\n children,\n content,\n position = 'top',\n variant = 'default',\n delayDuration = 200,\n className = ''\n}: Readonly<TooltipProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const [coords, setCoords] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLSpanElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<number | undefined>(undefined);\n\n const calculatePosition = useCallback(() => {\n if (!triggerRef.current || !tooltipRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\n const offset = 8;\n\n let top = 0;\n let left = 0;\n\n switch (position) {\n case 'top':\n top = triggerRect.top - tooltipRect.height - offset;\n left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;\n break;\n case 'bottom':\n top = triggerRect.bottom + offset;\n left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;\n break;\n case 'left':\n top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;\n left = triggerRect.left - tooltipRect.width - offset;\n break;\n case 'right':\n top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;\n left = triggerRect.right + offset;\n break;\n }\n\n // Simple viewport clamping\n const padding = 8;\n if (left < padding) left = padding;\n if (left + tooltipRect.width > window.innerWidth - padding) {\n left = window.innerWidth - tooltipRect.width - padding;\n }\n if (top < padding) top = padding;\n if (top + tooltipRect.height > window.innerHeight - padding) {\n top = window.innerHeight - tooltipRect.height - padding;\n }\n\n setCoords({ top, left });\n }, [position]);\n\n const handleMouseEnter = () => {\n timeoutRef.current = window.setTimeout(() => {\n setIsOpen(true);\n }, delayDuration);\n };\n\n const handleMouseLeave = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsOpen(false);\n };\n\n useEffect(() => {\n if (isOpen) {\n requestAnimationFrame(() => {\n calculatePosition();\n });\n\n const handleScroll = () => calculatePosition();\n const handleResize = () => calculatePosition();\n\n window.addEventListener('scroll', handleScroll, true);\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('scroll', handleScroll, true);\n window.removeEventListener('resize', handleResize);\n };\n }\n return undefined;\n }, [isOpen, calculatePosition]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n const variantClasses = {\n default: 'bg-popover text-popover-foreground border border-border',\n primary: 'bg-primary text-primary-foreground',\n secondary: 'bg-secondary text-secondary-foreground',\n accent: 'bg-accent text-accent-foreground',\n info: 'bg-info text-info-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n error: 'bg-destructive text-destructive-foreground',\n neutral: 'bg-muted text-muted-foreground'\n };\n\n const tooltip = isOpen ? (\n <div\n ref={tooltipRef}\n role=\"tooltip\"\n className={`fixed z-9999 px-3 py-1.5 text-xs font-medium rounded-md shadow-md max-w-xs animate-in fade-in-0 zoom-in-95 ${variantClasses[variant]} ${className}`}\n style={{\n top: `${coords.top}px`,\n left: `${coords.left}px`\n }}\n >\n {content}\n </div>\n ) : null;\n\n return (\n <>\n <span\n ref={triggerRef}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onFocus={handleMouseEnter}\n onBlur={handleMouseLeave}\n className=\"inline-flex\"\n >\n {children}\n </span>\n {tooltip && createPortal(tooltip, document.body)}\n </>\n );\n}\n\nTooltip.displayName = 'Tooltip';\n\nexport default Tooltip;\n","import Icon from '../../system/icon/icon';\nimport { ReactNode, MouseEvent, useRef, useState, useEffect } from 'react';\nimport { NavLink } from 'react-router-dom';\n\nimport Tooltip from '../../feedback/tooltip/tooltip';\nimport { Size } from '@/theme/size-tokens';\n\nexport type LeftNavItemProps = {\n /** Icon identifier string to display (uses Icon component) */\n icon?: string;\n /** Icon size from unified size system */\n iconSize?: Size;\n /** Link label text (visible when expanded, hidden when collapsed) */\n children: ReactNode;\n /** Whether this item is currently active (highlighted state) */\n active?: boolean;\n /** Additional CSS classes applied to the navigation link */\n className?: string;\n /** Badge or count component to display on the right side */\n badge?: ReactNode;\n /** Destination URL for the navigation link */\n href?: string;\n /** Accessible label override (used for tooltip in collapsed mode) */\n title?: string;\n /** Prevent actual navigation for demo/showcase mode */\n preventNavigation?: boolean;\n};\n\n/**\n * LeftNavItem - Navigation link item for LeftNavLayout\n *\n * Features:\n * - Icon support with proper alignment\n * - Active state styling\n * - Tooltip on hover in collapsed mode (using Tooltip component with Portal)\n * - Badge/count support\n * - Accessible keyboard navigation\n *\n * @example\n * ```tsx\n * <LeftNavItem\n * icon=\"home\"\n * href=\"/\"\n * active\n * title=\"Home\"\n * >\n * Home\n * </LeftNavItem>\n * ```\n */\nfunction LeftNavItem({\n icon,\n iconSize = 'sm',\n children,\n active = false,\n className = '',\n badge,\n href = '#',\n title,\n preventNavigation = false\n}: Readonly<LeftNavItemProps>) {\n const navRef = useRef<HTMLAnchorElement>(null);\n const [isCollapsed, setIsCollapsed] = useState(() => {\n // Try to get initial collapsed state from nav element if it exists\n if (typeof window !== 'undefined') {\n const navElement = document.querySelector('nav[data-collapsed]');\n return navElement?.getAttribute('data-collapsed') === 'true';\n }\n return false;\n });\n\n // Check if nav is collapsed by looking at parent nav element\n useEffect(() => {\n const checkCollapsed = () => {\n const navElement = navRef.current?.closest('nav');\n if (navElement) {\n setIsCollapsed(navElement.getAttribute('data-collapsed') === 'true');\n }\n };\n\n checkCollapsed();\n\n // Create observer to watch for attribute changes\n const navElement = navRef.current?.closest('nav');\n if (navElement) {\n const observer = new MutationObserver(checkCollapsed);\n observer.observe(navElement, {\n attributes: true,\n attributeFilter: ['data-collapsed']\n });\n return () => observer.disconnect();\n }\n\n return undefined;\n }, []);\n\n // Use children as fallback title for accessibility\n const itemTitle = title || (typeof children === 'string' ? children : undefined);\n\n const navLink = (\n <NavLink\n ref={navRef}\n to={href}\n onClick={(e: MouseEvent) => {\n if (preventNavigation) {\n e.preventDefault();\n }\n }}\n className={({ isActive }) => `\n group relative flex items-center gap-3\n px-3 py-2.5 rounded-lg\n mx-2\n [nav[data-collapsed='true']_&]:mx-2\n [nav[data-collapsed='true']_&]:px-0\n [nav[data-collapsed='true']_&]:w-12\n [nav[data-collapsed='true']_&]:justify-center\n text-sm font-medium\n transition-colors duration-200\n \n ${\n isActive || active\n ? 'bg-primary text-primary-foreground shadow-sm'\n : 'text-foreground hover:bg-muted hover:text-foreground'\n }\n ${className}\n `}\n aria-current={active ? 'page' : undefined}\n aria-label={itemTitle}\n end\n >\n {/* Icon */}\n {icon && (\n <span className=\"shrink-0\" aria-hidden=\"true\">\n <Icon name={icon} size={iconSize} />\n </span>\n )}\n\n {/* Label - Hidden in collapsed mode via parent's data-collapsed selector */}\n <span\n className=\"\n flex-1 truncate\n [nav[data-collapsed='true']_&]:hidden\n \"\n >\n {children}\n </span>\n\n {/* Badge - Hidden in collapsed mode */}\n {badge && (\n <span\n className=\"\n shrink-0\n [nav[data-collapsed='true']_&]:hidden\n \"\n >\n {badge}\n </span>\n )}\n </NavLink>\n );\n\n // Only show tooltip when collapsed\n if (!isCollapsed) {\n return navLink;\n }\n\n // Get tooltip content\n const tooltipContent = typeof children === 'string' ? children : itemTitle || 'Menu Item';\n\n return (\n <Tooltip content={tooltipContent} position=\"right\" variant=\"default\" className=\"w-fit\">\n {navLink}\n </Tooltip>\n );\n}\n\nLeftNavItem.displayName = 'LeftNavItem';\n\nexport default LeftNavItem;\n","import { ReactNode } from 'react';\n\nexport type LeftNavSectionProps = {\n /** Section content (typically LeftNavItem components) */\n children: ReactNode;\n /** Optional section header label (hidden in collapsed mode) */\n label?: string;\n /** Additional CSS classes applied to the section container */\n className?: string;\n};\n\n/**\n * LeftNavSection - Section grouping for LeftNavLayout navigation items\n *\n * Groups related navigation items together with an optional label.\n * In collapsed mode, the label is hidden but the grouping is preserved.\n *\n * @example\n * ```tsx\n * <LeftNavSection label=\"Main\">\n * <LeftNavItem icon={<HomeIcon />} href=\"/\">Home</LeftNavItem>\n * <LeftNavItem icon={<DashboardIcon />} href=\"/dashboard\">Dashboard</LeftNavItem>\n * </LeftNavSection>\n *\n * <LeftNavSection label=\"Settings\">\n * <LeftNavItem icon={<SettingsIcon />} href=\"/settings\">Settings</LeftNavItem>\n * </LeftNavSection>\n * ```\n */\nfunction LeftNavSection({ children, label, className = '' }: Readonly<LeftNavSectionProps>) {\n return (\n <div className={`py-2 ${className}`}>\n {/* Section Label - Hidden in collapsed mode */}\n {label && (\n <h3\n className=\"\n px-5 mb-2 mt-2\n text-xs font-semibold uppercase tracking-wider\n text-muted-foreground\n [nav[data-collapsed='true']_&]:hidden\n \"\n >\n {label}\n </h3>\n )}\n\n {/* Section Items */}\n <div className=\"space-y-1\">{children}</div>\n\n {/* Divider - Subtle separator between sections */}\n <div className=\"h-px bg-border mx-3 mt-2\" aria-hidden=\"true\" />\n </div>\n );\n}\n\nLeftNavSection.displayName = 'LeftNavSection';\n\nexport default LeftNavSection;\n","import { ReactNode } from 'react';\n\nimport Container from '../container/container';\nimport Heading from '../../typography/heading/heading';\nimport Text from '../../typography/text/text';\nimport Stack from '../stack/stack';\nimport Button from '../../forms/button/button';\nimport { sectionPadding } from '../../../theme/size-tokens';\n\nexport type HeroAction = {\n /** Button label text */\n label: string;\n /** Click handler for the button */\n onClick: () => void;\n /** Button color variant */\n variant?: 'primary' | 'secondary' | 'neutral' | 'error' | 'accent';\n /** Button style variant */\n style?: 'solid' | 'outline' | 'ghost';\n /** Whether the button shows a loading state */\n loading?: boolean;\n /** Optional icon to display in the button */\n icon?: ReactNode;\n};\n\nexport type HeroProps = {\n /** Main hero heading text */\n title: string;\n /** Optional subtitle displayed above the title */\n subtitle?: string;\n /** Optional description text displayed below the title */\n description?: string;\n /** Primary call-to-action button configuration */\n primaryAction?: HeroAction;\n /** Secondary call-to-action button configuration */\n secondaryAction?: HeroAction;\n /** Optional custom content to display below actions */\n children?: ReactNode;\n /** Additional CSS classes applied to the hero section */\n className?: string;\n /** Visual background variant */\n variant?: 'gradient' | 'solid' | 'minimal';\n /** Whether content is centered horizontally */\n centered?: boolean;\n /** Size preset controlling padding and typography scale */\n size?: 'sm' | 'md' | 'lg';\n};\n\n/**\n * Hero Component - Eye-catching hero section\n *\n * @example\n * ```tsx\n * <Hero\n * title=\"Build Amazing Products\"\n * subtitle=\"The modern way to ship\"\n * description=\"Start building with our component library.\"\n * primaryAction={{\n * label: 'Get Started',\n * onClick: () => {},\n * variant: 'primary'\n * }}\n * variant=\"gradient\"\n * />\n * ```\n */\nfunction Hero({\n title,\n subtitle,\n description,\n primaryAction,\n secondaryAction,\n children,\n className = '',\n variant = 'gradient',\n centered = true,\n size = 'lg'\n}: Readonly<HeroProps>) {\n // Hero-specific size classes (extends sectionPadding)\n const sizeClasses = {\n sm: sectionPadding.md,\n md: sectionPadding.lg,\n lg: 'pt-32 pb-20 md:pt-36 md:pb-28' // Custom hero-specific padding\n };\n\n const titleSizes = {\n sm: 'text-3xl md:text-4xl',\n md: 'text-4xl md:text-5xl',\n lg: 'text-5xl md:text-6xl lg:text-7xl'\n };\n\n const variantClasses = {\n gradient: 'bg-gradient-to-b from-primary/10 via-primary/5 to-background',\n solid: 'bg-muted/30',\n minimal: 'bg-background'\n };\n\n return (\n <section className={`relative ${sizeClasses[size]} ${variantClasses[variant]} ${className}`}>\n {/* Top border with subtle glow */}\n {variant === 'gradient' && (\n <div className=\"absolute inset-x-0 top-0 h-px bg-linear-to-r from-transparent via-primary/20 to-transparent\" />\n )}\n\n {/* Bottom shadow fade */}\n <div className=\"absolute inset-x-0 bottom-0 h-32 bg-linear-to-t from-background to-transparent pointer-events-none\" />\n\n <Container marginX=\"sm\">\n <div className={centered ? 'text-center mx-auto max-w-4xl' : 'max-w-4xl'}>\n {subtitle && (\n <Text hasMargin className=\"text-lg md:text-xl font-semibold text-primary\" weight=\"semibold\">\n {subtitle}\n </Text>\n )}\n\n <Heading level={1} className={`${titleSizes[size]} font-extrabold mb-6 tracking-tight`}>\n {title}\n </Heading>\n\n {description && (\n <Text hasMargin className=\"text-lg md:text-xl mb-8 text-muted-foreground max-w-2xl mx-auto\">\n {description}\n </Text>\n )}\n\n {(primaryAction || secondaryAction) && (\n <Stack direction=\"horizontal\" spacing=\"md\" justify={centered ? 'center' : 'start'}>\n {primaryAction && (\n <Button\n size=\"lg\"\n variant={primaryAction.variant || 'primary'}\n style={primaryAction.style}\n onClick={primaryAction.onClick}\n loading={primaryAction.loading}\n icon={primaryAction.icon}\n className=\"shadow-lg shadow-primary/20 hover:shadow-xl hover:shadow-primary/30 transition-all\"\n >\n {primaryAction.label}\n </Button>\n )}\n {secondaryAction && (\n <Button\n size=\"lg\"\n variant={secondaryAction.variant || 'neutral'}\n style={secondaryAction.style || 'outline'}\n onClick={secondaryAction.onClick}\n loading={secondaryAction.loading}\n icon={secondaryAction.icon}\n className=\"hover:shadow-md transition-all\"\n >\n {secondaryAction.label}\n </Button>\n )}\n </Stack>\n )}\n\n {children && <div className=\"mt-10\">{children}</div>}\n </div>\n </Container>\n </section>\n );\n}\n\nHero.displayName = 'Hero';\n\nexport default Hero;\n","import { ReactNode } from 'react';\n\nimport Container from '../container/container';\nimport Grid from '../grid/grid';\nimport Heading from '../../typography/heading/heading';\nimport Text from '../../typography/text/text';\nimport Stack from '../stack/stack';\n\nexport type Feature = {\n /** Icon component to display for the feature */\n icon: ReactNode;\n /** Feature title text */\n title: string;\n /** Feature description text */\n description: string;\n};\n\nexport type FeatureSectionProps = {\n /** Optional section title displayed above features */\n title?: string;\n /** Optional section description displayed below title */\n description?: string;\n /** Array of feature objects to display in the grid */\n features: Feature[];\n /** Maximum number of columns in the feature grid */\n columns?: 2 | 3 | 4;\n /** Whether feature content is centered horizontally */\n centered?: boolean;\n /** Additional CSS classes applied to the section */\n className?: string;\n};\n\n/**\n * FeatureSection Component - Features grid\n * - Display features with icons in a responsive grid\n * - Configurable column count\n * - Optional section title and description\n * - Icon-first design pattern\n */\nfunction FeatureSection({\n title,\n description,\n features,\n columns = 3,\n centered = true,\n className = ''\n}: Readonly<FeatureSectionProps>) {\n return (\n <section className={`py-16 md:py-20 ${className}`}>\n <Container marginX=\"sm\">\n {(title || description) && (\n <Stack spacing=\"md\" className={`mb-12 md:mb-16 ${centered ? 'text-center max-w-3xl mx-auto' : 'max-w-3xl'}`}>\n {title && (\n <Heading level={2} hasMargin>\n {title}\n </Heading>\n )}\n {description && <Text className=\"text-lg md:text-xl\">{description}</Text>}\n </Stack>\n )}\n\n <Grid itemSize=\"md\" maxCols={columns} gap=\"lg\">\n {features.map((feature, index) => (\n <article key={index} className={centered ? 'text-center' : ''}>\n <span\n className={`inline-flex items-center justify-center w-12 h-12 md:w-16 md:h-16 rounded-lg md:rounded-xl bg-primary/10 text-primary mb-4 md:mb-6 ${\n centered ? '' : 'mr-auto'\n }`}\n >\n {feature.icon}\n </span>\n <Heading level={3} className=\"text-xl font-semibold mb-2 md:mb-3\">\n {feature.title}\n </Heading>\n <Text variant=\"muted\" className=\"text-sm md:text-base\">\n {feature.description}\n </Text>\n </article>\n ))}\n </Grid>\n </Container>\n </section>\n );\n}\n\nFeatureSection.displayName = 'FeatureSection';\n\nexport default FeatureSection;\n","import { ReactNode } from 'react';\nimport { Link as RouterLink } from 'react-router-dom';\n\nimport { textSizes } from '../../../theme/size-tokens';\n\nexport type LinkProps = {\n children: ReactNode;\n href: string;\n\n /**\n * Whether this is an external link (opens in new tab with icon)\n * @default false\n */\n external?: boolean;\n\n /**\n * Visual variant\n * @default 'default'\n */\n variant?: 'default' | 'muted' | 'secondary' | 'inherit';\n\n /**\n * When to show underline\n * @default 'hover'\n */\n underline?: 'hover' | 'always' | 'none';\n\n /**\n * Text size\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg';\n\n /**\n * Display behavior\n * @default 'inline'\n */\n display?: 'inline' | 'block';\n\n /**\n * Additional CSS classes (use as last resort)\n */\n className?: string;\n};\n\n/**\n * Link - Themed anchor with hover state\n * Automatically uses React Router for internal links\n */\nfunction Link({\n children,\n href,\n external = false,\n variant = 'default',\n underline = 'hover',\n size = 'md',\n display = 'inline',\n className = ''\n}: Readonly<LinkProps>) {\n // Build variant classes\n const variantClasses = {\n default: 'text-primary hover:text-primary/80',\n muted: 'text-muted-foreground hover:text-foreground',\n secondary: 'text-secondary hover:text-secondary/80',\n inherit: 'text-inherit hover:opacity-80'\n };\n\n // Build underline classes\n const underlineClasses = {\n hover: 'hover:underline',\n always: 'underline',\n none: 'no-underline'\n };\n\n // Build size classes from unified system\n const sizeClasses = {\n sm: textSizes.sm,\n md: textSizes.base,\n lg: textSizes.lg\n };\n\n // Build display classes\n const displayClasses = {\n inline: 'inline',\n block: 'block'\n };\n\n const linkClassName = [\n variantClasses[variant],\n underlineClasses[underline],\n sizeClasses[size],\n displayClasses[display],\n 'cursor-pointer transition-colors',\n className\n ]\n .filter(Boolean)\n .join(' ');\n\n // External links use regular anchor tag\n if (external) {\n return (\n <a href={href} className={linkClassName} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n <svg\n className=\"inline-block w-4 h-4 ml-1\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n />\n </svg>\n </a>\n );\n }\n\n // Internal links use React Router Link\n return (\n <RouterLink to={href} className={linkClassName}>\n {children}\n </RouterLink>\n );\n}\n\nLink.displayName = 'Link';\n\nexport default Link;\n","import { ReactNode } from 'react';\n\nimport Container from '../container/container';\nimport Grid from '../grid/grid';\nimport Text from '../../typography/text/text';\nimport Link from '../../typography/link/link';\nimport { MarginXSize } from '@/theme/size-tokens';\n\nexport type FooterSection = {\n /** Section heading text */\n title: string;\n /** Array of links with label, href, and optional external flag */\n links: Array<{ label: string; href: string; external?: boolean }>;\n};\n\nexport type FooterProps = {\n /** Array of footer sections containing grouped links */\n sections?: FooterSection[];\n /** Copyright text displayed at the bottom */\n copyright?: string;\n /** Social media icons or links to display */\n social?: ReactNode;\n /** Additional CSS classes applied to the footer element */\n className?: string;\n /** Horizontal margin spacing using unified size system */\n marginX?: MarginXSize;\n};\n\n/**\n * Footer Component - Site footer\n * - Multi-column link sections\n * - Copyright text\n * - Social media icons\n * - Responsive layout\n */\nfunction Footer({ sections, copyright, social, className = '', marginX = 'sm' }: Readonly<FooterProps>) {\n return (\n <footer className={`border-t border-border bg-muted/20 ${className}`}>\n <Container marginX={marginX}>\n {sections && sections.length > 0 && (\n <div className=\"py-12 md:py-16\">\n <Grid itemSize=\"xs\" maxCols={4} gap=\"lg\">\n {sections.map((section, index) => (\n <div key={index}>\n <h3 className=\"font-semibold text-foreground mb-4\">{section.title}</h3>\n <ul className=\"space-y-3\">\n {section.links.map((link, linkIndex) => (\n <li key={linkIndex}>\n <Link\n href={link.href}\n external={link.external}\n className=\"text-sm text-muted hover:text-foreground transition-colors\"\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </Grid>\n </div>\n )}\n\n <div\n className={`${sections && sections.length > 0 ? 'border-t border-border' : ''} py-6 flex flex-col md:flex-row items-center justify-between gap-4`}\n >\n {copyright && (\n <Text hasMargin variant=\"muted\" className=\"text-sm text-center md:text-left\">\n {copyright}\n </Text>\n )}\n {social && <div className=\"flex items-center space-x-4\">{social}</div>}\n </div>\n </Container>\n </footer>\n );\n}\n\nFooter.displayName = 'Footer';\n\nexport default Footer;\n","/**\n * PageTransition Component\n *\n * ARCHITECTURE NOTE:\n * This is the centralized transition component for Hydn UI.\n * It replaces custom CSS transitions and ensures consistency across the library.\n *\n * Components using PageTransition:\n * - Tabs component (for tab content switching)\n * - App layouts (for page route transitions)\n *\n * ❌ DON'T: Create new custom transition CSS classes\n * ✅ DO: Use this component for any transition needs\n */\n\nimport React from 'react';\n\nexport interface PageTransitionProps {\n /** Page content */\n children: React.ReactNode;\n /** Animation duration in milliseconds */\n duration?: number;\n /** Animation type */\n type?: 'fade' | 'slide' | 'scale' | 'none';\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * PageTransition - Centralized transition component for smooth animations\n *\n * The standard way to add animated transitions in Hydn UI.\n * Use this component instead of custom CSS animations for consistency.\n *\n * Features:\n * - Multiple animation types (fade, slide, scale)\n * - Customizable duration\n * - Lightweight CSS animations using Tailwind's animate-in utilities\n * - Accessible (respects prefers-reduced-motion)\n * - Already used internally by Tabs component\n *\n * @example\n * ```tsx\n * // Basic fade transition\n * <PageTransition>\n * <YourPageContent />\n * </PageTransition>\n *\n * // Slide animation\n * <PageTransition type=\"slide\">\n * <YourPageContent />\n * </PageTransition>\n *\n * // Custom duration\n * <PageTransition type=\"fade\" duration={500}>\n * <YourPageContent />\n * </PageTransition>\n *\n * // With React Router\n * <Route path=\"/about\" element={\n * <PageTransition>\n * <AboutPage />\n * </PageTransition>\n * } />\n * ```\n */\nexport const PageTransition: React.FC<PageTransitionProps> = ({\n children,\n duration = 300,\n type = 'fade',\n className = ''\n}) => {\n const [isVisible, setIsVisible] = React.useState(false);\n\n // Trigger animation on mount with slight delay for smoother effect\n React.useEffect(() => {\n // Double RAF for better reliability and smoother start\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setIsVisible(true);\n });\n });\n }, []);\n\n // Animation class mapping - using standard CSS transitions for reliability\n const getAnimationStyles = () => {\n if (type === 'none') return '';\n\n // Use ease-out for smoother, more natural animation\n const baseClasses = 'transition-all ease-out';\n const durationClass = `duration-[${duration}ms]`;\n\n if (!isVisible) {\n // Initial state (hidden)\n switch (type) {\n case 'fade':\n return `${baseClasses} ${durationClass} opacity-0 translate-y-1`;\n case 'slide':\n return `${baseClasses} ${durationClass} opacity-0 translate-y-3`;\n case 'scale':\n return `${baseClasses} ${durationClass} opacity-0 scale-[0.99]`;\n default:\n return `${baseClasses} ${durationClass} opacity-0 translate-y-1`;\n }\n } else {\n // Animated state (visible)\n return `${baseClasses} ${durationClass} opacity-100 translate-y-0 scale-100`;\n }\n };\n\n return <div className={`${getAnimationStyles()} ${className}`.trim()}>{children}</div>;\n};\n\nPageTransition.displayName = 'PageTransition';\n\nexport default PageTransition;\n","import { ReactNode } from 'react';\n\nexport type BreadcrumbItem = {\n /** Display text for the breadcrumb */\n label: string;\n /** Optional navigation link (last item typically has no href) */\n href?: string;\n};\n\nexport type BreadcrumbsProps = {\n /** Array of breadcrumb items to display in hierarchical order */\n items: BreadcrumbItem[];\n /** Custom separator to display between items (defaults to '/') */\n separator?: ReactNode;\n /** Additional CSS classes for the breadcrumb container */\n className?: string;\n};\n\n/**\n * Breadcrumbs - Hierarchical path display\n */\nfunction Breadcrumbs({ items, separator = '/', className = '' }: Readonly<BreadcrumbsProps>) {\n return (\n <nav aria-label=\"Breadcrumb\" className={className}>\n <ol className=\"flex items-center space-x-2 text-sm\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const key = item.href || item.label;\n\n return (\n <li key={key} className=\"flex items-center\">\n {item.href && !isLast ? (\n <a\n href={item.href}\n className=\"text-primary hover:text-primary/80 hover:underline cursor-pointer transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-ring rounded px-1 -mx-1\"\n >\n {item.label}\n </a>\n ) : (\n <span className={isLast ? 'text-foreground font-medium' : 'text-muted-foreground'}>{item.label}</span>\n )}\n {!isLast && (\n <span className=\"mx-2 text-muted-foreground select-none\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n\nBreadcrumbs.displayName = 'Breadcrumbs';\n\nexport default Breadcrumbs;\n","import React, { useState, useRef, useEffect, useLayoutEffect, useCallback, createContext, useContext } from 'react';\nimport Button, { type ButtonProps } from '../../forms/button/button';\nimport { Icon } from '@/components/system/icon';\nimport { gapSizes, Size } from '@/theme/size-tokens';\n\nexport type DropdownTriggerProps = {\n /** Main label text */\n title: string;\n /** Optional secondary text shown below the title */\n subtitle?: string;\n /** Optional leading icon */\n icon?: string;\n /** Size of the leading icon */\n iconSize?: Size;\n /** Hide the dropdown chevron indicator */\n hideChevron?: boolean;\n /** Size variant for the trigger button */\n triggerSize?: ButtonProps['size'];\n};\n\nexport type DropdownProps = {\n /** Trigger configuration - rendered as an accessible Button */\n trigger: DropdownTriggerProps;\n children: React.ReactNode;\n className?: string;\n align?: 'start' | 'center' | 'end';\n autoClose?: boolean; // close on item select\n /** Size of the dropdown panel and items */\n size?: ButtonProps['size'];\n /** Button variant for the trigger */\n variant?: ButtonProps['variant'];\n /** Button style for the trigger */\n buttonStyle?: ButtonProps['style'];\n /** Minimum width for the dropdown menu and all items (e.g., '200px', '16rem') */\n minWidth?: string;\n /** Maximum width for the dropdown menu (e.g., '400px', '24rem') */\n maxWidth?: string;\n /** Additional styles for the dropdown menu */\n menuClassName?: string;\n};\n\ntype DropdownContextValue = {\n requestClose: () => void;\n autoClose: boolean;\n registerItem?: (el: HTMLButtonElement | null, index?: number) => void;\n minWidth?: string;\n};\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null);\n\nexport function useDropdown() {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error('useDropdown must be used within <Dropdown>');\n return ctx;\n}\n\n/**\n * Dropdown component with click-outside handling\n */\nfunction Dropdown({\n trigger,\n children,\n className = '',\n align = 'start',\n autoClose = true,\n size = 'md',\n variant = 'neutral',\n buttonStyle = 'solid',\n minWidth,\n maxWidth,\n menuClassName = ''\n}: Readonly<DropdownProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const itemsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n\n const close = useCallback(() => setIsOpen(false), []);\n const open = useCallback(() => setIsOpen(true), []);\n\n // Handle keyboard navigation\n useEffect(() => {\n if (!isOpen) return;\n const handleKey = (e: KeyboardEvent) => {\n if (!menuRef.current) return;\n const itemEls = itemsRef.current.filter(Boolean);\n if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {\n e.preventDefault();\n if (itemEls.length === 0) return;\n let nextIndex = activeIndex;\n if (e.key === 'ArrowDown') nextIndex = (activeIndex + 1) % itemEls.length;\n if (e.key === 'ArrowUp') nextIndex = (activeIndex - 1 + itemEls.length) % itemEls.length;\n if (e.key === 'Home') nextIndex = 0;\n if (e.key === 'End') nextIndex = itemEls.length - 1;\n setActiveIndex(nextIndex);\n itemEls[nextIndex]?.focus();\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n close();\n triggerRef.current?.focus();\n }\n if (e.key === 'Tab') {\n // trap focus\n e.preventDefault();\n const itemEls = itemsRef.current.filter(Boolean);\n if (itemEls.length === 0) return;\n const dir = e.shiftKey ? -1 : 1;\n const nextIndex = (activeIndex + dir + itemEls.length) % itemEls.length;\n setActiveIndex(nextIndex);\n itemEls[nextIndex]?.focus();\n }\n };\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [isOpen, activeIndex, close]);\n\n // Outside click close\n useEffect(() => {\n if (!isOpen) return;\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n close();\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, close]);\n\n // Auto-focus first item on open (useLayoutEffect to avoid cascading re-renders)\n useLayoutEffect(() => {\n let raf: number | undefined;\n if (isOpen) {\n const itemEls = itemsRef.current.filter(Boolean);\n if (itemEls.length) {\n // schedule the focus and state update to avoid cascading synchronous renders\n raf = requestAnimationFrame(() => {\n setActiveIndex(0);\n itemEls[0]?.focus();\n });\n }\n } else {\n raf = requestAnimationFrame(() => setActiveIndex(-1));\n }\n return () => {\n if (raf) cancelAnimationFrame(raf);\n };\n }, [isOpen]);\n\n const registerItem = useCallback((el: HTMLButtonElement | null, index?: number) => {\n // If index provided, set at index; otherwise push/remove based on presence\n if (typeof index === 'number' && index >= 0) {\n itemsRef.current[index] = el;\n return;\n }\n if (el === null) {\n // remove element references\n itemsRef.current = itemsRef.current.filter((x) => x !== el && x != null);\n return;\n }\n // Push new element at the end if not already present\n if (!itemsRef.current.includes(el)) itemsRef.current.push(el);\n }, []);\n\n const { title, subtitle, icon, iconSize = 'md', hideChevron, triggerSize = 'md' } = trigger;\n\n const iconNode = icon ? <Icon name={icon} size={iconSize} color=\"currentColor\" /> : null;\n\n return (\n <div ref={dropdownRef} className={`relative ${className}`}>\n <Button\n ref={triggerRef}\n variant={variant}\n style={buttonStyle}\n onClick={() => (isOpen ? close() : open())}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n aria-controls={isOpen ? 'dropdown-menu' : undefined}\n size={triggerSize}\n >\n <span className={`flex items-center ${gapSizes[iconSize]}`}>\n {iconNode && <span className=\"shrink-0\">{iconNode}</span>}\n {(title || subtitle) && (\n <span className={subtitle ? 'text-left' : ''}>\n <span className={subtitle ? 'block font-semibold' : ''}>{title}</span>\n {subtitle && <span className=\"block text-xs text-muted-foreground font-normal\">{subtitle}</span>}\n </span>\n )}\n </span>\n {!hideChevron && (\n <Icon\n name=\"chevron-down\"\n size=\"xs\"\n className={`ml-1 transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}\n />\n )}\n </Button>\n {isOpen && (\n <DropdownContext.Provider value={{ requestClose: close, autoClose, registerItem, minWidth }}>\n <div\n id=\"dropdown-menu\"\n ref={menuRef}\n className={`absolute mt-2 bg-popover text-popover-foreground border border-border rounded-md shadow-lg z-50 ${size === 'sm' ? 'min-w-[140px] text-xs py-1' : 'min-w-[180px]'} max-h-80 overflow-y-auto origin-top animate-scaleIn focus:outline-none ${align === 'start' ? 'left-0' : align === 'end' ? 'right-0' : 'left-1/2 -translate-x-1/2'} ${menuClassName}`}\n style={{\n minWidth: minWidth || undefined,\n maxWidth: maxWidth || undefined\n }}\n role=\"menu\"\n aria-orientation=\"vertical\"\n tabIndex={-1}\n >\n {children}\n </div>\n </DropdownContext.Provider>\n )}\n </div>\n );\n}\n\nDropdown.displayName = 'Dropdown';\n\nexport default Dropdown;\n\n// DropdownItem component (simple abstraction)\nexport type DropdownItemProps = {\n children: React.ReactNode;\n onSelect?: () => void;\n /** Semantic color variant */\n variant?: 'default' | 'destructive' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\n disabled?: boolean;\n className?: string;\n /** Optional muted description below main label */\n description?: string;\n /** Leading icon */\n icon?: string;\n iconSize?: Size;\n /** Trailing icon (e.g., checkmark for selected items) */\n endIcon?: string;\n /** Inherit size from dropdown or override */\n size?: 'sm' | 'md';\n __dropdownIndex?: number; // injected\n __registerItem?: (el: HTMLButtonElement | null, index: number) => void; // injected (deprecated)\n};\n\nexport function DropdownItem({\n children,\n onSelect,\n variant = 'default',\n disabled = false,\n className = '',\n description,\n icon,\n iconSize = 'md',\n endIcon,\n size = 'md'\n}: Readonly<DropdownItemProps>) {\n const ctx = useContext(DropdownContext);\n const base = `${size === 'sm' ? 'text-[11px] leading-tight px-2.5 py-1.5 rounded-md' : 'px-3.5 py-2 rounded-md'} w-full text-left select-none transition-colors outline-none disabled:opacity-40 disabled:pointer-events-none`;\n const focus =\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-popover';\n const palette: Record<string, string> = {\n default: 'text-foreground/90 hover:bg-muted active:bg-muted/80',\n primary: 'text-primary hover:bg-primary/15 active:bg-primary/25 focus-visible:ring-primary',\n secondary: 'text-secondary hover:bg-secondary/15 active:bg-secondary/25 focus-visible:ring-secondary',\n accent: 'text-accent hover:bg-accent/15 active:bg-accent/25 focus-visible:ring-accent',\n info: 'text-info hover:bg-info/15 active:bg-info/25 focus-visible:ring-info',\n success: 'text-success hover:bg-success/15 active:bg-success/25 focus-visible:ring-success',\n warning: 'text-warning hover:bg-warning/18 active:bg-warning/28 focus-visible:ring-warning',\n error: 'text-error hover:bg-error/15 active:bg-error/25 focus-visible:ring-error',\n destructive: 'text-destructive hover:bg-destructive/15 active:bg-destructive/25 focus-visible:ring-destructive'\n };\n const variantClasses = palette[variant] || palette.default;\n\n // Determine layout: if we have icons, use horizontal layout, otherwise vertical\n const hasIcons = icon || endIcon;\n const iconNode = icon ? <Icon name={icon} size={iconSize} color=\"currentColor\" /> : null;\n const endIconNode = endIcon ? <Icon name={endIcon} size={iconSize} color=\"currentColor\" /> : null;\n\n return (\n <button\n ref={(el) => ctx?.registerItem?.(el)}\n role=\"menuitem\"\n type=\"button\"\n disabled={disabled}\n onClick={() => {\n if (disabled) return;\n onSelect?.();\n if (ctx?.autoClose) ctx.requestClose();\n }}\n className={`${base} ${focus} ${variantClasses} ${hasIcons ? 'flex flex-row items-center gap-2.5' : 'flex flex-col'} ${className} cursor-pointer`}\n >\n {iconNode && <span className={`shrink-0 ${size === 'sm' ? 'text-[14px]' : 'text-[16px]'}`}>{iconNode}</span>}\n <span className=\"flex-1 min-w-0\">\n <span className={`block ${size === 'sm' ? 'font-medium' : 'font-medium'} leading-snug`}>{children}</span>\n {description && (\n <span className={`block ${size === 'sm' ? 'text-[10px]' : 'text-xs'} text-foreground/60 mt-0.5 line-clamp-2`}>\n {description}\n </span>\n )}\n </span>\n {endIconNode && (\n <span className={`shrink-0 ${size === 'sm' ? 'text-[14px]' : 'text-[16px]'}`}>{endIconNode}</span>\n )}\n </button>\n );\n}\n","import React from 'react';\n\nexport type NavProps = {\n /** Navigation items to render (typically NavbarLink or other nav elements) */\n children: React.ReactNode;\n /** Additional CSS classes (kept for backward compatibility) */\n className?: string;\n /** Accessibility label */\n ariaLabel?: string;\n /** Layout direction for the nav - horizontal (default) or vertical */\n direction?: 'horizontal' | 'vertical';\n /** Spacing variant between children */\n spacing?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n /** Alignment of items along cross axis */\n align?: 'start' | 'center' | 'end' | 'stretch';\n};\n\n/**\n * Accessible navigation component\n */\nfunction Nav({\n children,\n className = '',\n ariaLabel = 'Main navigation',\n direction = 'horizontal',\n spacing = 'md',\n align = 'center'\n}: Readonly<NavProps>) {\n const spacingClasses: Record<NonNullable<NavProps['spacing']>, string> = {\n none: 'gap-0',\n sm: 'gap-3 sm:gap-2',\n md: 'gap-5 sm:gap-4',\n lg: 'gap-7 sm:gap-6',\n xl: 'gap-10 sm:gap-8'\n };\n\n const alignClasses: Record<NonNullable<NavProps['align']>, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch'\n };\n\n const directionClass = direction === 'horizontal' ? 'flex-row' : 'flex-col';\n const spacingClass = spacingClasses[spacing];\n const alignClass = alignClasses[align as NonNullable<NavProps['align']>];\n\n return (\n <nav aria-label={ariaLabel} className={`flex ${directionClass} ${spacingClass} ${alignClass} ${className}`}>\n {children}\n </nav>\n );\n}\n\nNav.displayName = 'Nav';\n\nexport default Nav;\n","import React, { ReactNode, ReactElement } from 'react';\n\nexport type SidebarProps = {\n /** Navigation items to render (typically NavbarLink or anchor elements) */\n children: ReactNode;\n /** Additional CSS classes for the sidebar container */\n className?: string;\n /** Width of the sidebar (e.g., '16rem', '4rem') */\n width?: string;\n};\n\n/**\n * Sidebar - Vertical navigation with sections\n */\nfunction Sidebar({ children, className = '', width = '16rem' }: Readonly<SidebarProps>) {\n const widthClass = width === '16rem' ? 'w-64' : width === '4rem' ? 'w-16' : '';\n // Enhance children that look like navigation links (have `href`) by\n // cloning them and adding sidebar-specific item classes so showcase\n // pages don't need to set `className` manually.\n const enhancedChildren = React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) return child;\n\n // If the child has an `href` prop (NavbarLink or anchor), append sidebar item classes\n const childProps = (child.props || {}) as Record<string, unknown>;\n if ('href' in childProps) {\n const existing = typeof childProps.className === 'string' ? (childProps.className as string) : '';\n // Ensure sidebar links are full-width and laid out as flex rows with icon+label\n const sidebarItemClasses = 'flex items-center w-full justify-start gap-2 px-2 py-1.5 rounded hover:bg-muted';\n // Wrap the child's content in a flex container so icon + text line up,\n // and set item-level classes (without forcing display:flex on the root link,\n // because NavbarLink includes a 'block' class). This avoids conflicting\n // display utilities while ensuring the visual layout.\n const childInner = (child.props as Record<string, unknown>).children as React.ReactNode;\n // Always wrap the child's content to ensure icon + text are inline\n const wrappedChildren = <span className=\"flex items-center gap-2\">{childInner}</span>;\n\n const newProps = {\n ...(child.props as Record<string, unknown>),\n className: `${existing} ${sidebarItemClasses}`.trim()\n };\n return React.cloneElement(child as ReactElement, newProps as unknown as Record<string, unknown>, wrappedChildren);\n }\n\n return child;\n });\n\n return (\n <nav\n className={`\n ${widthClass || ''}\n bg-card border-r border-border\n flex flex-col\n overflow-hidden\n ${className}\n `.replace(/\\s+/g, ' ')}\n style={!widthClass ? ({ width } as React.CSSProperties) : undefined}\n aria-label=\"Sidebar navigation\"\n >\n <div className=\"flex-1 px-4 py-3 flex flex-col gap-2\">{enhancedChildren}</div>\n </nav>\n );\n}\n\nSidebar.displayName = 'Sidebar';\n\nexport default Sidebar;\n","import { ReactNode } from 'react';\nimport Icon from '../../system/icon/icon';\n\nexport type StepProps = {\n /** Primary text label for the step */\n title: string;\n /** Optional secondary description text */\n description?: string;\n /** Custom icon to display instead of step number */\n icon?: ReactNode;\n /** Current status of the step (auto-determined from currentStep if not set) */\n status?: 'pending' | 'current' | 'completed' | 'error';\n /** Whether this step can be skipped */\n optional?: boolean;\n};\n\nexport type StepperProps = {\n /** Array of step configurations */\n steps: StepProps[];\n /** Zero-based index of the currently active step */\n currentStep: number;\n /** Additional CSS classes for the stepper container */\n className?: string;\n /** Layout direction for the stepper */\n orientation?: 'horizontal' | 'vertical';\n /** Callback fired when a step is clicked (only when clickable is true) */\n onStepClick?: (step: number) => void;\n /** Enable clicking on steps for navigation */\n clickable?: boolean;\n};\n\n/**\n * Stepper - Multi-step progress indicator\n *\n * Features:\n * - Horizontal and vertical orientations\n * - Current, completed, and pending states\n * - Optional steps\n * - Custom icons\n * - Clickable steps (for navigation)\n * - Error states\n *\n * Common uses:\n * - Multi-step forms\n * - Checkout processes\n * - Onboarding flows\n * - Wizards\n */\nfunction Stepper({\n steps,\n currentStep,\n className = '',\n orientation = 'horizontal',\n onStepClick,\n clickable = false\n}: Readonly<StepperProps>) {\n const getStepStatus = (index: number): StepProps['status'] => {\n const step = steps[index];\n if (step.status) return step.status;\n if (index < currentStep) return 'completed';\n if (index === currentStep) return 'current';\n return 'pending';\n };\n\n const renderStep = (step: StepProps, index: number) => {\n const status = getStepStatus(index) || 'pending';\n const isClickable = clickable; // allow clicking any step when clickable enabled\n\n // Status-based styles\n const statusStyles: Record<\n NonNullable<StepProps['status']>,\n {\n circle: string;\n title: string;\n description: string;\n }\n > = {\n pending: {\n circle: 'bg-muted text-muted-foreground border-2 border-muted',\n title: 'text-muted-foreground',\n description: 'text-muted-foreground'\n },\n current: {\n circle: 'bg-primary text-primary-foreground border-2 border-primary',\n title: 'text-foreground font-semibold',\n description: 'text-muted-foreground'\n },\n completed: {\n circle: 'bg-success text-success-foreground border-2 border-success',\n title: 'text-foreground',\n description: 'text-muted-foreground'\n },\n error: {\n circle: 'bg-destructive text-destructive-foreground border-2 border-destructive',\n title: 'text-destructive',\n description: 'text-destructive'\n }\n };\n\n const styles = statusStyles[status];\n\n const handleClick = () => {\n if (isClickable && onStepClick) {\n onStepClick(index);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (isClickable && onStepClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onStepClick(index);\n }\n };\n\n if (orientation === 'horizontal') {\n return (\n <div\n key={index}\n className={`flex-1 flex flex-col items-center ${isClickable ? 'cursor-pointer' : ''}`}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role={isClickable ? 'button' : undefined}\n tabIndex={isClickable ? 0 : undefined}\n aria-label={`Step ${index + 1}: ${step.title}`}\n aria-current={status === 'current' ? 'step' : undefined}\n >\n {/* Step Number/Icon */}\n <div className=\"relative flex items-center w-full\">\n {/* Connector Line (Left) */}\n {index > 0 && (\n <div\n className={`h-0.5 flex-1 ${status === 'completed' || status === 'current' ? 'bg-success' : 'bg-muted'}`}\n />\n )}\n\n {/* Circle */}\n <div\n className={`\n relative z-10 flex items-center justify-center\n w-10 h-10 rounded-full\n transition-[background-color,border-color] duration-300 ease-in-out\n ${styles.circle}\n `}\n >\n {status === 'completed' ? (\n <Icon name=\"check\" size=\"sm\" />\n ) : step.icon ? (\n step.icon\n ) : (\n <span className=\"text-sm font-semibold\">{index + 1}</span>\n )}\n </div>\n\n {/* Connector Line (Right) */}\n {index < steps.length - 1 && (\n <div\n className={`h-0.5 flex-1 transition-colors duration-300 ease-in-out ${status === 'completed' ? 'bg-success' : 'bg-muted'}`}\n />\n )}\n </div>\n\n {/* Label */}\n <div className={`mt-3 text-center text-sm transition-colors duration-300 ease-in-out ${styles.title}`}>\n {step.title}\n {step.optional && <span className=\"ml-1 text-xs text-muted-foreground\">(Optional)</span>}\n {step.description && (\n <p className={`text-xs mt-1 transition-colors duration-300 ease-in-out ${styles.description}`}>\n {step.description}\n </p>\n )}\n </div>\n </div>\n );\n }\n\n // Vertical orientation\n return (\n <div\n key={index}\n className={`flex gap-4 ${index < steps.length - 1 ? 'pb-8' : ''} ${isClickable ? 'cursor-pointer' : ''}`}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role={isClickable ? 'button' : undefined}\n tabIndex={isClickable ? 0 : undefined}\n aria-label={`Step ${index + 1}: ${step.title}`}\n aria-current={status === 'current' ? 'step' : undefined}\n >\n {/* Icon Column */}\n <div className=\"flex flex-col items-center\">\n {/* Circle */}\n <div\n className={`\n flex items-center justify-center\n w-10 h-10 rounded-full shrink-0\n transition-[background-color,border-color] duration-300 ease-in-out\n ${styles.circle}\n `}\n >\n {status === 'completed' ? (\n <Icon name=\"check\" size=\"sm\" />\n ) : step.icon ? (\n step.icon\n ) : (\n <span className=\"text-sm font-semibold\">{index + 1}</span>\n )}\n </div>\n\n {/* Connector Line */}\n {index < steps.length - 1 && (\n <div\n className={`w-0.5 flex-1 mt-2 transition-colors duration-300 ease-in-out ${status === 'completed' ? 'bg-success' : 'bg-muted'}`}\n />\n )}\n </div>\n\n {/* Content Column */}\n <div className={`flex-1 pt-2 text-base transition-colors duration-300 ease-in-out ${styles.title}`}>\n {step.title}\n {step.optional && <span className=\"ml-2 text-xs text-muted-foreground\">(Optional)</span>}\n {step.description && (\n <p className={`text-sm mt-1 transition-colors duration-300 ease-in-out ${styles.description}`}>\n {step.description}\n </p>\n )}\n </div>\n </div>\n );\n };\n\n return (\n <div\n className={`\n ${orientation === 'horizontal' ? 'flex items-start' : 'flex flex-col'}\n ${className}\n `}\n >\n {steps.map((step, index) => renderStep(step, index))}\n </div>\n );\n}\n\nStepper.displayName = 'Stepper';\n\nexport default Stepper;\n","import React, { useState } from 'react';\nimport PageTransition from '../../layout/page-transition/page-transition';\n\nexport type Tab = {\n /** Unique identifier for the tab */\n id: string;\n /** Display text shown in the tab button */\n label: string;\n /** Content to render when this tab is active */\n content: React.ReactNode;\n};\n\nexport type TabsProps = {\n /** Array of tab configurations with id, label, and content */\n tabs: Tab[];\n /** ID of the tab to display initially (defaults to first tab) */\n defaultTab?: string;\n /** Additional CSS classes for the tabs container */\n className?: string;\n /** Accessibility label for the tab list */\n ariaLabel?: string;\n /** Remove the bottom border from the tab list */\n noBorder?: boolean;\n};\n\n/**\n * Accessible Tabs component with animated tab switching using PageTransition\n */\nfunction Tabs({ tabs, defaultTab, className = '', ariaLabel = 'Tabs', noBorder = false }: Readonly<TabsProps>) {\n const [activeTab, setActiveTab] = useState(defaultTab || tabs[0]?.id);\n\n return (\n <div className={className}>\n <div role=\"tablist\" aria-label={ariaLabel} className={`flex ${noBorder ? '' : 'border-b-2 border-border/50'}`}>\n {tabs.map((tab) => (\n <button\n key={tab.id}\n role=\"tab\"\n aria-selected={activeTab === tab.id}\n aria-controls={`panel-${tab.id}`}\n id={`tab-${tab.id}`}\n onClick={() => setActiveTab(tab.id)}\n className={`px-4 py-3 font-medium cursor-pointer transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 relative ${\n activeTab === tab.id\n ? 'text-primary after:absolute after:bottom-0 after:left-0 after:right-0 after:h-0.5 after:bg-primary after:rounded-t after:transition-all after:duration-200'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted/50'\n }`}\n >\n {tab.label}\n </button>\n ))}\n </div>\n {tabs.map((tab) => (\n <div\n key={tab.id}\n role=\"tabpanel\"\n id={`panel-${tab.id}`}\n aria-labelledby={`tab-${tab.id}`}\n hidden={activeTab !== tab.id}\n >\n {activeTab === tab.id && (\n <PageTransition type=\"fade\" duration={150}>\n <div className=\"pt-6\">{tab.content}</div>\n </PageTransition>\n )}\n </div>\n ))}\n </div>\n );\n}\n\nTabs.displayName = 'Tabs';\n\nexport default Tabs;\n","export type PaginationProps = {\n /** The currently active page number */\n currentPage: number;\n /** Total number of pages available */\n totalPages: number;\n /** Callback fired when a page is selected */\n onPageChange: (page: number) => void;\n /** Number of page buttons to show on each side of current page (defaults to 1) */\n siblingCount?: number;\n /** Additional CSS classes for the pagination container */\n className?: string;\n};\n\n/**\n * Pagination - Page controls with active state\n */\nfunction Pagination({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n className = ''\n}: Readonly<PaginationProps>) {\n const getPageNumbers = () => {\n const pages: (number | string)[] = [];\n const leftSibling = Math.max(currentPage - siblingCount, 1);\n const rightSibling = Math.min(currentPage + siblingCount, totalPages);\n\n if (leftSibling > 2) {\n pages.push(1, '...');\n } else {\n for (let i = 1; i < leftSibling; i++) {\n pages.push(i);\n }\n }\n\n for (let i = leftSibling; i <= rightSibling; i++) {\n pages.push(i);\n }\n\n if (rightSibling < totalPages - 1) {\n pages.push('...', totalPages);\n } else {\n for (let i = rightSibling + 1; i <= totalPages; i++) {\n pages.push(i);\n }\n }\n\n return pages;\n };\n\n return (\n <nav aria-label=\"Pagination\" className={className}>\n <ul className=\"flex items-center space-x-1\">\n <li>\n <button\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage === 1}\n className=\"px-3 py-2 rounded-lg border border-border hover:bg-accent hover:text-accent-foreground transition-colors duration-200 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-ring\"\n aria-label=\"Previous page\"\n >\n ←\n </button>\n </li>\n {getPageNumbers().map((page, index) => {\n const key = typeof page === 'number' ? `page-${page}` : `ellipsis-${index}`;\n return (\n <li key={key}>\n {typeof page === 'number' ? (\n <button\n onClick={() => onPageChange(page)}\n className={`px-3 py-2 rounded-lg border cursor-pointer transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-ring ${\n page === currentPage\n ? 'bg-primary text-primary-foreground border-primary shadow-sm'\n : 'border-border hover:bg-accent hover:text-accent-foreground hover:border-accent'\n }`}\n aria-label={`Page ${page}`}\n aria-current={page === currentPage ? 'page' : undefined}\n >\n {page}\n </button>\n ) : (\n <span className=\"px-3 py-2 text-muted-foreground\">...</span>\n )}\n </li>\n );\n })}\n <li>\n <button\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n className=\"px-3 py-2 rounded-lg border border-border hover:bg-accent hover:text-accent-foreground transition-colors duration-200 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-ring\"\n aria-label=\"Next page\"\n >\n →\n </button>\n </li>\n </ul>\n </nav>\n );\n}\n\nPagination.displayName = 'Pagination';\n\nexport default Pagination;\n","import { ReactNode } from 'react';\n\nimport Container from '../../layout/container/container';\n\nexport type NavbarProps = {\n /** Brand logo or text to display on the left side */\n brand?: ReactNode;\n /** Navigation links or items to display in the center */\n children: ReactNode;\n /** Enable sticky positioning at the top of viewport */\n sticky?: boolean;\n /** Additional CSS classes for the navbar container */\n className?: string;\n /** Action buttons or elements to display on the right side */\n actions?: ReactNode;\n /** Visual style variant for the navbar background */\n appearance?: 'solid' | 'blur' | 'transparent';\n /** Border configuration for top and/or bottom edges */\n border?: 'none' | 'bottom' | 'top' | 'both';\n};\n\n/**\n * Navbar Component - Responsive navigation\n * - Sticky positioning option\n * - Brand logo section\n * - Action buttons area\n * - Fully responsive\n * - Configurable container size\n * - Appearance modes: solid, blur (frosted glass), transparent\n * - Configurable borders: none, bottom, top, or both\n */\nfunction Navbar({\n brand,\n children,\n sticky = true,\n className = '',\n actions,\n appearance = 'solid',\n border = 'none'\n}: Readonly<NavbarProps>) {\n // Appearance styles\n const appearanceClasses = {\n solid: 'bg-background shadow-sm',\n blur: 'bg-background/70 backdrop-blur-md supports-[backdrop-filter]:bg-background/60 border border-border/60',\n transparent: 'bg-transparent'\n } as const;\n\n const borderClasses = {\n none: '',\n bottom: 'border-b border-border',\n top: 'border-t border-border',\n both: 'border-y border-border'\n };\n\n return (\n <nav\n data-appearance={appearance}\n className={`${sticky ? 'sticky top-0 z-50' : ''} ${appearanceClasses[appearance]} ${borderClasses[border]} ${className}`}\n >\n <Container marginX=\"sm\" size=\"full\">\n <div className=\"flex items-center justify-between h-14 md:h-16 px-3 md:px-0\">\n {/* Brand */}\n {brand && <div className=\"shrink-0\">{brand}</div>}\n\n {/* Navigation */}\n <div className=\"hidden md:flex md:items-center md:space-x-6 md:flex-1 md:ml-10\">{children}</div>\n\n {/* Actions */}\n {actions && <div className=\"flex items-center gap-1 md:gap-2 lg:gap-4\">{actions}</div>}\n </div>\n </Container>\n </nav>\n );\n}\n\nNavbar.displayName = 'Navbar';\n\nexport default Navbar;\n","import { ReactNode } from 'react';\nimport { Link } from 'react-router-dom';\n\nexport type NavbarBrandProps = {\n /** Brand content (typically logo image or text) */\n children: ReactNode;\n /** Optional navigation link URL */\n href?: string;\n /** Whether the link points to an external site */\n external?: boolean;\n /** Click handler for interactive brand (when not using href) */\n onClick?: () => void;\n /** Additional CSS classes for the brand text */\n className?: string;\n};\n\n/**\n * NavbarBrand Component - Brand/logo section for Navbar\n * Uses React Router Link for internal navigation\n */\nfunction NavbarBrand({ children, href, external = false, onClick, className = '' }: Readonly<NavbarBrandProps>) {\n const content = <span className={`text-lg md:text-xl font-bold ${className}`}>{children}</span>;\n\n const linkClassName = 'no-underline text-foreground hover:text-primary transition-colors';\n\n if (href) {\n // External links use regular anchor tag\n if (external) {\n return (\n <a href={href} className={linkClassName} target=\"_blank\" rel=\"noopener noreferrer\">\n {content}\n </a>\n );\n }\n\n // Internal links use React Router Link\n return (\n <Link to={href} className={linkClassName}>\n {content}\n </Link>\n );\n }\n\n if (onClick) {\n return (\n <button onClick={onClick} className={linkClassName}>\n {content}\n </button>\n );\n }\n\n return content;\n}\n\nNavbarBrand.displayName = 'NavbarBrand';\n\nexport default NavbarBrand;\n","import { ReactNode } from 'react';\nimport { NavLink } from 'react-router-dom';\n\nexport type NavbarLinkProps = {\n /** Navigation destination URL */\n href: string;\n /** Link text or content */\n children: ReactNode;\n /** Whether the link points to an external site */\n external?: boolean;\n /** Additional CSS classes for the link */\n className?: string;\n /** Match only exact path for active state (React Router NavLink prop) */\n end?: boolean;\n};\n\n/**\n * NavbarLink Component - Navigation link for Navbar\n * Uses React Router's NavLink for automatic active state management\n */\nfunction NavbarLink({ href, children, external = false, className = '', end = false }: Readonly<NavbarLinkProps>) {\n const baseClassName = `block md:inline-block py-2 md:py-0 font-medium transition-colors no-underline ${className}`;\n\n // External links use regular anchor tag\n if (external) {\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`${baseClassName} text-foreground hover:text-primary`}\n >\n {children}\n </a>\n );\n }\n\n // Hash anchors should be plain anchors (in-page navigation), not NavLink\n if (href.startsWith('#')) {\n return (\n <a href={href} className={`${baseClassName} text-foreground hover:text-primary`}>\n {children}\n </a>\n );\n }\n\n // Internal links use React Router NavLink with automatic active state\n return (\n <NavLink\n to={href}\n end={end}\n className={({ isActive }) =>\n `${baseClassName} ${\n isActive ? 'text-primary font-semibold border-b-2 border-primary' : 'text-foreground hover:text-primary'\n }`\n }\n >\n {children}\n </NavLink>\n );\n}\n\nNavbarLink.displayName = 'NavbarLink';\n\nexport default NavbarLink;\n","import Icon from '../../system/icon/icon';\n\nexport interface NavbarToggleProps {\n /**\n * Whether the mobile menu is open (for mobile view)\n */\n mobileMenuOpen?: boolean;\n /**\n * Whether the sidebar is collapsed (for desktop sidebar view)\n */\n sidebarCollapsed?: boolean;\n /**\n * Click handler for mobile menu toggle (mobile view)\n */\n onMobileMenuToggle?: () => void;\n /**\n * Click handler for sidebar toggle (desktop view)\n */\n onSidebarToggle?: () => void;\n /**\n * Optional custom className\n */\n className?: string;\n}\n\n/**\n * NavbarToggle - A responsive toggle button that switches between mobile menu and sidebar collapse icons\n *\n * On mobile (< lg): Shows hamburger menu / close icon and calls onMobileMenuToggle\n * On desktop (>= lg): Shows sidebar expand / collapse icon and calls onSidebarToggle\n */\nfunction NavbarToggle({\n mobileMenuOpen = false,\n sidebarCollapsed = false,\n onMobileMenuToggle,\n onSidebarToggle,\n className = ''\n}: NavbarToggleProps) {\n return (\n <>\n {/* Mobile toggle - visible on lg breakpoint and below */}\n <button\n onClick={onMobileMenuToggle}\n className={`lg:hidden flex items-center justify-center w-9 h-9 md:w-8 md:h-8 rounded text-foreground/70 hover:text-foreground hover:bg-muted transition-colors focus:outline-none focus:ring-2 focus:ring-ring ${className}`.trim()}\n aria-label={mobileMenuOpen ? 'Close menu' : 'Open menu'}\n type=\"button\"\n >\n {mobileMenuOpen ? <Icon name=\"x\" size=\"sm\" /> : <Icon name=\"menu-2\" size=\"sm\" />}\n </button>\n\n {/* Desktop toggle - visible on lg breakpoint and above */}\n <button\n onClick={onSidebarToggle}\n className={`hidden lg:flex items-center justify-center w-8 h-8 rounded text-foreground/70 hover:text-foreground hover:bg-muted transition-colors focus:outline-none focus:ring-2 focus:ring-ring ${className}`.trim()}\n aria-label={sidebarCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n type=\"button\"\n >\n {sidebarCollapsed ? (\n <Icon name=\"layout-sidebar-right-expand\" size=\"sm\" />\n ) : (\n <Icon name=\"layout-sidebar-right-collapse\" size=\"sm\" />\n )}\n </button>\n </>\n );\n}\n\nNavbarToggle.displayName = 'NavbarToggle';\n\nexport default NavbarToggle;\n","import { useLocation } from 'react-router-dom';\nimport Dropdown from '../dropdown/dropdown';\n\nexport type NavDropdownProps = {\n /** The label text for the dropdown trigger */\n label: string;\n /** The path prefix to match for active state (e.g., '/showcase') */\n activePathPrefix: string;\n /** The dropdown menu items */\n children: React.ReactNode;\n /** Optional additional className for the wrapper */\n className?: string;\n};\n\n/**\n * Navigation dropdown with smart active state detection\n * Displays a labeled trigger that highlights when any child route is active\n */\nfunction NavDropdown({ label, activePathPrefix, children, className = '' }: Readonly<NavDropdownProps>) {\n const location = useLocation();\n const isActive = location.pathname.startsWith(activePathPrefix);\n\n return (\n <Dropdown\n trigger={{\n title: label,\n hideChevron: false\n }}\n buttonStyle=\"link\"\n className={`${isActive ? 'text-primary font-semibold' : 'text-foreground hover:text-primary'} ${className}`}\n >\n <div className=\"py-2 flex flex-col\">{children}</div>\n </Dropdown>\n );\n}\n\nNavDropdown.displayName = 'NavDropdown';\n\nexport default NavDropdown;\n","import { NavLink } from 'react-router-dom';\n\nexport type NavDropdownItemProps = {\n /** The route path */\n to: string;\n /** The label text or content */\n children: React.ReactNode;\n /** Additional CSS classes for the menu item */\n className?: string;\n};\n\n/**\n * Navigation dropdown menu item with consistent styling\n */\nfunction NavDropdownItem({ to, children, className = '' }: Readonly<NavDropdownItemProps>) {\n return (\n <NavLink\n to={to}\n className={({ isActive }) =>\n `block px-4 py-2 hover:bg-muted/50 no-underline transition-colors ${\n isActive ? 'text-primary font-semibold bg-muted/30' : 'text-foreground'\n } ${className}`\n }\n >\n {children}\n </NavLink>\n );\n}\n\nNavDropdownItem.displayName = 'NavDropdownItem';\n\nexport default NavDropdownItem;\n","import { useEffect, useState, useCallback, useRef, ReactNode } from 'react';\nimport { gapSizes } from '../../../theme/size-tokens';\n\nexport type ScrollNavItem = {\n id: string;\n label: string;\n};\n\nexport type ScrollNavProps = {\n /** Array of navigation items with id and label */\n items: ScrollNavItem[];\n /** Whether the nav should stick to the top when scrolling */\n sticky?: boolean;\n /** Custom CSS class name for the container */\n className?: string;\n /** Custom CSS class name for the scroll container */\n scrollContainerClassName?: string;\n /** Show border on the bottom */\n showBorder?: boolean;\n /** Background blur effect */\n blur?: boolean;\n /** Spacing between nav items */\n spacing?: 'xs' | 'sm' | 'md' | 'lg';\n /** Custom render function for nav items */\n renderItem?: (item: ScrollNavItem, isActive: boolean, onClick: () => void) => ReactNode;\n /** Callback when active item changes */\n onActiveChange?: (activeId: string) => void;\n /** Root margin for IntersectionObserver (controls when sections are considered \"active\") */\n observerRootMargin?: string;\n /** Threshold for IntersectionObserver */\n observerThreshold?: number;\n};\n\n/**\n * ScrollNav - Scrollable navigation with scroll-spy highlighting\n *\n * A horizontal navigation component that automatically highlights the active section\n * based on scroll position. Includes visual indicators when content overflows.\n *\n * @example\n * ```tsx\n * <ScrollNav\n * items={[\n * { id: 'overview', label: 'Overview' },\n * { id: 'features', label: 'Features' },\n * { id: 'pricing', label: 'Pricing' },\n * ]}\n * sticky\n * />\n * ```\n */\nfunction ScrollNav({\n items,\n sticky = true,\n className = '',\n scrollContainerClassName = '',\n showBorder = true,\n blur = true,\n spacing = 'sm',\n renderItem,\n onActiveChange,\n observerRootMargin = '-100px 0px -50% 0px',\n observerThreshold = 0\n}: Readonly<ScrollNavProps>) {\n const [activeId, setActiveId] = useState<string>(items[0]?.id || '');\n const [showLeftShadow, setShowLeftShadow] = useState(false);\n const [showRightShadow, setShowRightShadow] = useState(false);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n\n const handleClick = useCallback((id: string) => {\n const element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n }, []);\n\n const scrollLeft = useCallback(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n container.scrollBy({ left: -container.clientWidth * 0.75, behavior: 'smooth' });\n }, []);\n\n const scrollRight = useCallback(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n container.scrollBy({ left: container.clientWidth * 0.75, behavior: 'smooth' });\n }, []);\n\n const updateScrollShadows = useCallback(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const { scrollLeft, scrollWidth, clientWidth } = container;\n const isScrollable = scrollWidth > clientWidth;\n\n setShowLeftShadow(isScrollable && scrollLeft > 0);\n setShowRightShadow(isScrollable && scrollLeft < scrollWidth - clientWidth - 20);\n }, []);\n\n // Initial check and on resize\n useEffect(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const resizeObserver = new ResizeObserver(updateScrollShadows);\n resizeObserver.observe(container);\n\n return () => resizeObserver.disconnect();\n }, [updateScrollShadows]);\n\n // Run initial check after mount\n useEffect(() => {\n // Use setTimeout to defer until after paint\n const timer = setTimeout(updateScrollShadows, 0);\n return () => clearTimeout(timer);\n }, [updateScrollShadows]);\n\n // Listen to scroll events\n useEffect(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n container.addEventListener('scroll', updateScrollShadows);\n return () => container.removeEventListener('scroll', updateScrollShadows);\n }, [updateScrollShadows]);\n\n // Scroll spy: update active item based on visible sections\n useEffect(() => {\n const observer = new IntersectionObserver(\n (entries) => {\n // Find the first visible section\n const visibleEntries = entries.filter((entry) => entry.isIntersecting);\n if (visibleEntries.length > 0) {\n // Sort by their position in the items array to get the topmost visible one\n const sortedVisible = visibleEntries.sort((a, b) => {\n const aIndex = items.findIndex((item) => item.id === a.target.id);\n const bIndex = items.findIndex((item) => item.id === b.target.id);\n return aIndex - bIndex;\n });\n const newActiveId = sortedVisible[0].target.id;\n setActiveId(newActiveId);\n onActiveChange?.(newActiveId);\n }\n },\n {\n rootMargin: observerRootMargin,\n threshold: observerThreshold\n }\n );\n\n // Observe all sections\n items.forEach(({ id }) => {\n const element = document.getElementById(id);\n if (element) {\n observer.observe(element);\n }\n });\n\n return () => observer.disconnect();\n }, [items, observerRootMargin, observerThreshold, onActiveChange]);\n\n if (items.length === 0) return null;\n\n const baseClasses = [\n 'relative',\n sticky && 'sticky top-0 z-99',\n blur && 'bg-background/95 backdrop-blur-sm',\n !blur && 'bg-background',\n showBorder && 'border-b border-border',\n className\n ]\n .filter(Boolean)\n .join(' ');\n\n const scrollClasses = [\n 'flex flex-row flex-nowrap items-stretch',\n gapSizes[spacing],\n 'overflow-x-auto scrollbar-thin scrollbar-thumb-border scrollbar-track-transparent',\n scrollContainerClassName\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={baseClasses}>\n {showLeftShadow && (\n <button\n onClick={scrollLeft}\n className={`absolute left-0 top-0 bottom-0 w-8 flex items-center justify-center cursor-pointer ${\n blur ? 'bg-background/95' : 'bg-background'\n } hover:bg-muted transition-colors z-10 border-r border-border`}\n aria-label=\"Scroll left\"\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 className=\"text-foreground/70\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n )}\n\n {/* Left shadow indicator */}\n {showLeftShadow && (\n <div\n className={`absolute left-8 top-0 bottom-0 w-8 ${\n blur ? 'bg-linear-to-r from-background/95' : 'bg-linear-to-r from-background'\n } to-transparent pointer-events-none z-10`}\n />\n )}\n\n {/* Right shadow indicator */}\n {showRightShadow && (\n <div\n className={`absolute right-8 top-0 bottom-0 w-8 ${\n blur ? 'bg-linear-to-l from-background/95' : 'bg-linear-to-l from-background'\n } to-transparent pointer-events-none z-10`}\n />\n )}\n\n {/* Right scroll button */}\n {showRightShadow && (\n <button\n onClick={scrollRight}\n className={`absolute right-0 top-0 bottom-0 w-8 flex items-center justify-center cursor-pointer ${\n blur ? 'bg-background/95' : 'bg-background'\n } hover:bg-muted transition-colors z-10 border-l border-border`}\n aria-label=\"Scroll right\"\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 className=\"text-foreground/70\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n )}\n\n <div ref={scrollContainerRef} className={scrollClasses}>\n {items.map((item) => {\n const isActive = activeId === item.id;\n const onClick = () => handleClick(item.id);\n\n if (renderItem) {\n return <div key={item.id}>{renderItem(item, isActive, onClick)}</div>;\n }\n\n // Default rendering\n return (\n <button\n key={item.id}\n onClick={onClick}\n className={`px-3 py-2 text-sm font-medium whitespace-nowrap rounded-md transition-colors ${\n isActive ? 'bg-primary text-primary-fg' : 'text-foreground/70 hover:text-foreground hover:bg-muted'\n }`}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nScrollNav.displayName = 'ScrollNav';\n\nexport default ScrollNav;\n","import { ReactNode } from 'react';\n\nimport { Size, avatarSizes } from '../../../theme/size-tokens';\n\nexport type AvatarProps = {\n /** URL of the image to display */\n src?: string;\n /** Alternative text for the image (also used for single-character fallback) */\n alt?: string;\n /** Custom fallback content when image is not available */\n fallback?: ReactNode;\n /** Size variant - uses unified size system */\n size?: Size;\n /** Additional CSS classes to apply */\n className?: string;\n};\n\n/**\n * Avatar - User or profile image display\n * Uses unified size system from theme/size-tokens\n */\nfunction Avatar({ src, alt = '', fallback, size = 'md', className = '' }: Readonly<AvatarProps>) {\n const sizeConfig = avatarSizes[size];\n\n let content;\n if (src) {\n content = <img src={src} alt={alt} className=\"w-full h-full object-cover\" />;\n } else if (fallback) {\n content = fallback;\n } else {\n content = <span>{alt.charAt(0).toUpperCase()}</span>;\n }\n\n return (\n <div\n className={`inline-flex items-center justify-center rounded-full bg-muted text-muted-foreground font-medium overflow-hidden ${sizeConfig.classes} ${sizeConfig.text} ${className}`}\n >\n {content}\n </div>\n );\n}\n\nAvatar.displayName = 'Avatar';\n\nexport default Avatar;\n","import { ReactNode } from 'react';\n\nimport { badgeSizes } from '../../../theme/size-tokens';\nimport { StatusColorProp, colorVariants } from '../../../theme/tokens';\n\nexport type BadgeProps = {\n /** Content to display inside the badge */\n children: ReactNode;\n /** Color variant for the badge (default, primary, success, warning, error) */\n variant?: StatusColorProp;\n /** Size - uses unified size system */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS classes to apply */\n className?: string;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\n/**\n * Badge - Small color label for status or categorization\n * Uses unified size system from theme/size-tokens\n */\nfunction Badge({ children, variant = 'default', size = 'md', className = '', ...props }: Readonly<BadgeProps>) {\n const sizeClasses = badgeSizes[size].classes;\n\n return (\n <span\n className={`inline-flex items-center font-medium rounded-full transition-colors ${colorVariants.badge[variant]} ${sizeClasses} ${className}`}\n {...props}\n >\n {children}\n </span>\n );\n}\n\nBadge.displayName = 'Badge';\n\nexport default Badge;\n","import { ReactNode } from 'react';\nimport { statusLabelSizes, type StatusLabelSize } from '../../../theme/size-tokens';\n\nexport type StatusLabelProps = {\n children: ReactNode;\n status?: 'active' | 'inactive' | 'pending' | 'success' | 'error' | 'warning' | 'info';\n size?: StatusLabelSize;\n variant?: 'filled' | 'outlined';\n className?: string;\n};\n\n/**\n * StatusLabel - Badge with a status indicator dot\n *\n * @example\n * ```tsx\n * <StatusLabel status=\"active\">Active</StatusLabel>\n * <StatusLabel status=\"pending\" size=\"sm\">Pending</StatusLabel>\n * <StatusLabel status=\"error\" variant=\"outlined\">Error</StatusLabel>\n * ```\n */\nfunction StatusLabel({\n children,\n status = 'info',\n size = 'md',\n variant = 'filled',\n className = ''\n}: Readonly<StatusLabelProps>) {\n const statusConfig = {\n active: {\n filled: 'bg-success/10 text-success border-success/20',\n outlined: 'bg-transparent text-success border-success',\n dot: 'bg-success'\n },\n inactive: {\n filled: 'bg-muted text-muted-foreground border-border',\n outlined: 'bg-transparent text-muted-foreground border-muted-foreground',\n dot: 'bg-muted-foreground'\n },\n pending: {\n filled: 'bg-warning/10 text-warning border-warning/20',\n outlined: 'bg-transparent text-warning border-warning',\n dot: 'bg-warning'\n },\n success: {\n filled: 'bg-success/10 text-success border-success/20',\n outlined: 'bg-transparent text-success border-success',\n dot: 'bg-success'\n },\n error: {\n filled: 'bg-destructive/10 text-destructive border-destructive/20',\n outlined: 'bg-transparent text-destructive border-destructive',\n dot: 'bg-destructive'\n },\n warning: {\n filled: 'bg-warning/10 text-warning border-warning/20',\n outlined: 'bg-transparent text-warning border-warning',\n dot: 'bg-warning'\n },\n info: {\n filled: 'bg-primary/10 text-primary border-primary/20',\n outlined: 'bg-transparent text-primary border-primary',\n dot: 'bg-primary'\n }\n };\n\n const sizeClasses = statusLabelSizes[size];\n\n return (\n <span\n className={`inline-flex items-center font-medium rounded-full border ${statusConfig[status][variant]} ${sizeClasses.container} ${className}`}\n >\n <span className={`rounded-full ${statusConfig[status].dot} ${sizeClasses.dot}`} />\n {children}\n </span>\n );\n}\n\nStatusLabel.displayName = 'StatusLabel';\n\nexport default StatusLabel;\n","import { ReactNode, MouseEvent } from 'react';\nimport { Icon } from '../../system/icon/icon';\n\nimport { chipSizes, Size } from '../../../theme/size-tokens';\nimport { StatusColorProp, colorVariants } from '../../../theme/tokens';\n\nexport type ChipProps = {\n /** Content to display inside the chip */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Color variant for the chip (default, primary, success, warning, error) */\n variant?: StatusColorProp;\n /** Size - uses unified size system */\n size?: Size;\n /** Callback when the remove/delete button is clicked */\n onRemove?: (e: MouseEvent<HTMLButtonElement>) => void;\n /** Icon name to display at the start of the chip */\n icon?: string;\n /** Whether the chip is disabled */\n disabled?: boolean;\n /** Whether the chip is clickable */\n clickable?: boolean;\n /** Callback when the chip is clicked (requires clickable=true) */\n onClick?: (e: MouseEvent<HTMLDivElement>) => void;\n};\n\n/**\n * Chip - Compact element for tags, filters, and selections\n *\n * Features:\n * - Color variants (default, primary, success, warning, error)\n * - Sizes (sm, md, lg)\n * - Optional remove button\n * - Optional icon\n * - Clickable state\n * - Disabled state\n *\n * Similar to Badge but with interaction (remove, click)\n */\nfunction Chip({\n children,\n className = '',\n variant = 'default',\n size = 'md',\n onRemove,\n icon,\n disabled = false,\n clickable = false,\n onClick\n}: Readonly<ChipProps>) {\n // Size classes from unified system\n const sizeClasses = chipSizes[size].classes;\n\n // Hover/active classes\n const interactiveClasses =\n clickable && !disabled ? 'cursor-pointer hover:opacity-80 active:opacity-60 transition-opacity' : '';\n\n const disabledClasses = disabled ? 'opacity-50 cursor-not-allowed' : '';\n\n const handleClick = (e: MouseEvent<HTMLDivElement>) => {\n if (!disabled && clickable && onClick) {\n onClick(e);\n }\n };\n\n const handleRemove = (e: MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation(); // Don't trigger chip onClick\n if (!disabled && onRemove) {\n onRemove(e);\n }\n };\n\n return (\n <div\n className={`\n inline-flex items-center justify-center\n rounded-full font-medium\n ${sizeClasses}\n ${colorVariants.badge[variant]}\n ${interactiveClasses}\n ${disabledClasses}\n ${className}\n `}\n onClick={handleClick}\n role={clickable ? 'button' : undefined}\n tabIndex={clickable && !disabled ? 0 : undefined}\n onKeyDown={\n clickable && !disabled\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.(e as unknown as MouseEvent<HTMLDivElement>);\n }\n }\n : undefined\n }\n >\n {/* Icon */}\n {icon && (\n <span className=\"shrink-0 flex items-center\">\n <Icon name={icon} size={size} />\n </span>\n )}\n\n {/* Content */}\n <span className=\"truncate\">{children}</span>\n\n {/* Remove button */}\n {onRemove && (\n <button\n type=\"button\"\n onClick={handleRemove}\n disabled={disabled}\n className={`\n shrink-0 flex items-center justify-center\n rounded-full hover:bg-foreground/10\n transition-colors\n ${size === 'sm' ? 'w-3 h-3' : size === 'md' ? 'w-4 h-4' : 'w-5 h-5'}\n ${disabled ? 'cursor-not-allowed' : 'cursor-pointer'}\n `}\n aria-label=\"Remove\"\n >\n <Icon name=\"x\" size={size} />\n </button>\n )}\n </div>\n );\n}\n\nChip.displayName = 'Chip';\n\nexport default Chip;\n","import { useState } from 'react';\n\nimport Button from '../../forms/button/button';\n\nexport type CodeBlockProps = {\n /** Code content to display */\n code: string;\n /** Additional CSS classes to apply */\n className?: string;\n /** Whether to show the copy-to-clipboard button */\n showCopy?: boolean;\n};\n\n/**\n * CodeBlock - Displays formatted code with syntax highlighting and copy functionality\n */\nfunction CodeBlock({ code, className = '', showCopy = true }: Readonly<CodeBlockProps>) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Failed to copy code:', err);\n }\n };\n\n return (\n <div className={`relative group ${className}`}>\n {showCopy && (\n <div className=\"absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <Button\n variant=\"neutral\"\n style=\"ghost\"\n size=\"sm\"\n onClick={handleCopy}\n className=\"text-xs bg-background/80 hover:bg-background\"\n >\n {copied ? '✓ Copied' : 'Copy'}\n </Button>\n </div>\n )}\n <pre className={`bg-muted/50 border rounded-lg p-4 overflow-x-auto text-sm ${showCopy ? 'pr-24' : ''}`}>\n <code className=\"font-mono text-foreground\">{code}</code>\n </pre>\n </div>\n );\n}\n\nCodeBlock.displayName = 'CodeBlock';\n\nexport default CodeBlock;\n","import { ReactNode, HTMLAttributes } from 'react';\n\nexport type TableProps = {\n /** Table rows and sections (TableHeader, TableBody, TableFooter) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Whether to apply striped row styling (alternating background) */\n striped?: boolean;\n /** Whether to show borders around the table */\n bordered?: boolean;\n /** Whether rows have hover effects */\n hoverable?: boolean;\n /** Whether to use compact spacing for dense data */\n compact?: boolean;\n /** Screen-reader accessible caption for the table */\n caption?: string;\n} & HTMLAttributes<HTMLTableElement>;\n\nexport type TableHeaderProps = {\n /** Table header rows (TableRow with TableHeadCell) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n} & HTMLAttributes<HTMLTableSectionElement>;\n\nexport type TableBodyProps = {\n /** Table body rows (TableRow with TableCell) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n} & HTMLAttributes<HTMLTableSectionElement>;\n\nexport type TableFooterProps = {\n /** Table footer rows (TableRow with TableCell) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n} & HTMLAttributes<HTMLTableSectionElement>;\n\nexport type TableRowProps = {\n /** Table cells (TableCell or TableHeadCell) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Whether the row is in a selected state */\n selected?: boolean;\n} & HTMLAttributes<HTMLTableRowElement>;\n\nexport type TableHeadCellProps = {\n /** Content of the header cell */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Text alignment within the cell */\n align?: 'left' | 'center' | 'right';\n /** Scope attribute for accessibility (col for column headers, row for row headers) */\n scope?: 'col' | 'row';\n /** Whether text should wrap instead of truncating */\n wrapText?: boolean;\n} & HTMLAttributes<HTMLTableCellElement>;\n\nexport type TableCellProps = {\n /** Content of the cell */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Text alignment within the cell */\n align?: 'left' | 'center' | 'right';\n /** Whether text should wrap instead of truncating */\n wrapText?: boolean;\n} & HTMLAttributes<HTMLTableCellElement>;\n\n/**\n * Table - Semantic HTML table with consistent styling\n * - Responsive with horizontal scroll\n * - Optional striped rows, borders, and hover effects\n * - Compact mode for dense data\n * - Proper semantic structure with thead, tbody, tfoot\n */\nexport function Table({\n children,\n className = '',\n striped = false,\n bordered = false,\n hoverable = false,\n compact = false,\n caption,\n ...props\n}: Readonly<TableProps>) {\n const baseClasses = 'w-full text-sm text-left';\n const stripedClasses = striped ? 'striped' : '';\n const borderedClasses = bordered ? 'border border-border' : '';\n const compactClasses = compact ? 'table-compact' : '';\n\n return (\n <div className=\"overflow-x-auto rounded-lg\">\n <table\n className={`${baseClasses} ${stripedClasses} ${borderedClasses} ${compactClasses} ${className}`}\n {...props}\n >\n {caption && <caption className=\"sr-only\">{caption}</caption>}\n {children}\n </table>\n <style>{`\n .striped tbody tr:nth-child(even) {\n background-color: hsl(var(--muted) / 0.3);\n }\n ${\n hoverable\n ? `\n table tbody tr:hover {\n background-color: hsl(var(--muted) / 0.6) !important;\n }\n `\n : ''\n }\n .table-compact td,\n .table-compact th {\n padding: 0.5rem;\n }\n `}</style>\n </div>\n );\n}\n\n/**\n * TableHeader - Table header section (thead)\n */\nexport function TableHeader({ children, className = '', ...props }: Readonly<TableHeaderProps>) {\n return (\n <thead className={`text-xs text-muted-foreground uppercase bg-muted/50 ${className}`} {...props}>\n {children}\n </thead>\n );\n}\n\n/**\n * TableBody - Table body section (tbody)\n */\nexport function TableBody({ children, className = '', ...props }: Readonly<TableBodyProps>) {\n return (\n <tbody className={`divide-y divide-border ${className}`} {...props}>\n {children}\n </tbody>\n );\n}\n\n/**\n * TableFooter - Table footer section (tfoot)\n */\nexport function TableFooter({ children, className = '', ...props }: Readonly<TableFooterProps>) {\n return (\n <tfoot className={`text-xs font-semibold text-foreground bg-muted/30 ${className}`} {...props}>\n {children}\n </tfoot>\n );\n}\n\n/**\n * TableRow - Table row (tr)\n */\nexport function TableRow({ children, className = '', selected = false, ...props }: Readonly<TableRowProps>) {\n const selectedClasses = selected ? 'bg-primary/10' : '';\n\n return (\n <tr className={`${selectedClasses} ${className}`} {...props}>\n {children}\n </tr>\n );\n}\n\n/**\n * TableHeadCell - Table header cell (th)\n * - Includes proper scope attribute for accessibility\n * - Default scope is 'col' for column headers\n */\nexport function TableHeadCell({\n children,\n className = '',\n align = 'left',\n scope = 'col',\n wrapText = false,\n ...props\n}: Readonly<TableHeadCellProps>) {\n const alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right'\n };\n\n const wrapClasses = wrapText ? 'whitespace-normal break-words' : 'whitespace-nowrap';\n\n return (\n <th scope={scope} className={`px-6 py-3 font-medium ${alignClasses[align]} ${wrapClasses} ${className}`} {...props}>\n {children}\n </th>\n );\n}\n\n/**\n * TableCell - Table data cell (td)\n */\nexport function TableCell({\n children,\n className = '',\n align = 'left',\n wrapText = false,\n ...props\n}: Readonly<TableCellProps>) {\n const alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right'\n };\n\n const wrapClasses = wrapText ? 'whitespace-normal break-words' : 'whitespace-nowrap';\n\n return (\n <td className={`px-6 py-4 ${wrapClasses} ${alignClasses[align]} ${className}`} {...props}>\n {children}\n </td>\n );\n}\n\nexport default Table;\n","import React from 'react';\n\nexport type ValidationState = 'default' | 'error' | 'success' | 'warning';\n\nexport type CheckboxProps = {\n /** Checked state (controlled) */\n checked?: boolean;\n /** Change event handler for controlled checkbox */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** Disables checkbox interaction and applies disabled styling */\n disabled?: boolean;\n /** Additional CSS classes applied to the checkbox */\n className?: string;\n /** Accessible label for screen readers */\n ariaLabel?: string;\n /** HTML id attribute for the checkbox */\n id?: string;\n /** HTML name attribute for form submission */\n name?: string;\n /** Visual validation state affecting border and focus ring color */\n validationState?: ValidationState;\n};\n\n/**\n * Accessible Checkbox component\n */\nfunction Checkbox({\n checked,\n onChange,\n disabled = false,\n className = '',\n ariaLabel,\n id,\n name,\n validationState = 'default'\n}: Readonly<CheckboxProps>) {\n const validationClasses = {\n default: 'border-input focus:ring-ring',\n error: 'border-destructive focus:ring-destructive',\n success: 'border-success focus:ring-success',\n warning: 'border-warning focus:ring-warning'\n };\n\n return (\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-invalid={validationState === 'error'}\n id={id}\n name={name}\n className={`h-5 w-5 sm:h-4 sm:w-4 rounded border-2 bg-background text-primary-foreground transition-all duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-muted/50 checked:bg-primary checked:border-primary checked:hover:bg-primary/90 hover:border-primary/50 hover:shadow-sm cursor-pointer accent-primary ${validationClasses[validationState]} ${className}`}\n />\n );\n}\n\nCheckbox.displayName = 'Checkbox';\n\nexport default Checkbox;\n","import { ReactNode } from 'react';\nimport { Icon } from '../../system/icon/icon';\n\nexport type EmptyStateProps = {\n /** Main heading text for the empty state */\n title: string;\n /** Optional description or helper text */\n description?: string;\n /** Optional icon name to display above the title */\n icon?: string;\n /** Optional action button or element to render */\n action?: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n};\n\n/**\n * EmptyState - Placeholder for no-data scenarios\n */\nfunction EmptyState({ title, description, icon, action, className = '' }: Readonly<EmptyStateProps>) {\n return (\n <div className={`flex flex-col items-center justify-center text-center py-12 ${className}`}>\n {icon && (\n <div className=\"text-muted-foreground mb-4\">\n <Icon name={icon} size=\"3xl\" />\n </div>\n )}\n <h3 className=\"text-lg font-semibold text-foreground mb-2\">{title}</h3>\n {description && <p className=\"text-muted-foreground mb-6 max-w-sm\">{description}</p>}\n {action}\n </div>\n );\n}\n\nEmptyState.displayName = 'EmptyState';\n\nexport default EmptyState;\n","import { useMemo, useState } from 'react';\n\nexport type SortDirection = 'asc' | 'desc' | null;\n\nexport type SortConfig<T> = {\n key: keyof T;\n direction: SortDirection;\n} | null;\n\nexport type UseTableOptions<T> = {\n data: T[];\n initialSort?: { key: keyof T; direction: 'asc' | 'desc' };\n pageSize?: number;\n};\n\nexport type UseTableReturn<T> = {\n // Data\n currentData: T[];\n sortedData: T[];\n\n // Sorting\n sortConfig: SortConfig<T>;\n handleSort: (key: keyof T) => void;\n\n // Pagination\n currentPage: number;\n totalPages: number;\n setCurrentPage: (page: number) => void;\n nextPage: () => void;\n prevPage: () => void;\n canNextPage: boolean;\n canPrevPage: boolean;\n\n // Selection\n selectedRows: Set<number>;\n toggleRow: (index: number) => void;\n toggleAll: () => void;\n isRowSelected: (index: number) => boolean;\n isAllSelected: boolean;\n clearSelection: () => void;\n};\n\n/**\n * useTable Hook - Client-side table state management\n * Handles sorting, pagination, and selection\n */\nexport function useTable<T>({ data, initialSort, pageSize = 10 }: UseTableOptions<T>): UseTableReturn<T> {\n const [sortConfig, setSortConfig] = useState<SortConfig<T>>(\n initialSort ? { key: initialSort.key, direction: initialSort.direction } : null\n );\n const [currentPage, setCurrentPage] = useState(1);\n const [selectedRows, setSelectedRows] = useState<Set<number>>(new Set());\n\n // Sorting logic\n const sortedData = useMemo(() => {\n if (!sortConfig) return data;\n\n const sorted = [...data].sort((a, b) => {\n const aValue = a[sortConfig.key];\n const bValue = b[sortConfig.key];\n\n if (aValue === bValue) return 0;\n\n // Handle null/undefined\n if (aValue == null) return 1;\n if (bValue == null) return -1;\n\n // Compare values\n if (aValue < bValue) {\n return sortConfig.direction === 'asc' ? -1 : 1;\n }\n return sortConfig.direction === 'asc' ? 1 : -1;\n });\n\n return sorted;\n }, [data, sortConfig]);\n\n // Pagination logic\n const totalPages = Math.ceil(sortedData.length / pageSize);\n const startIndex = (currentPage - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n const currentData = sortedData.slice(startIndex, endIndex);\n\n // Sorting handler\n const handleSort = (key: keyof T) => {\n let direction: SortDirection = 'asc';\n\n if (sortConfig?.key === key) {\n if (sortConfig.direction === 'asc') {\n direction = 'desc';\n } else if (sortConfig.direction === 'desc') {\n direction = null;\n }\n }\n\n setSortConfig(direction ? { key, direction } : null);\n setCurrentPage(1); // Reset to first page on sort\n };\n\n // Pagination handlers\n const nextPage = () => {\n setCurrentPage((prev) => Math.min(prev + 1, totalPages));\n };\n\n const prevPage = () => {\n setCurrentPage((prev) => Math.max(prev - 1, 1));\n };\n\n const canNextPage = currentPage < totalPages;\n const canPrevPage = currentPage > 1;\n\n // Selection handlers\n const toggleRow = (index: number) => {\n setSelectedRows((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(index)) {\n newSet.delete(index);\n } else {\n newSet.add(index);\n }\n return newSet;\n });\n };\n\n const toggleAll = () => {\n if (selectedRows.size === currentData.length) {\n setSelectedRows(new Set());\n } else {\n const allIndices = currentData.map((_, idx) => startIndex + idx);\n setSelectedRows(new Set(allIndices));\n }\n };\n\n const isRowSelected = (index: number) => selectedRows.has(index);\n\n const isAllSelected = currentData.length > 0 && currentData.every((_, idx) => selectedRows.has(startIndex + idx));\n\n const clearSelection = () => setSelectedRows(new Set());\n\n return {\n currentData,\n sortedData,\n sortConfig,\n handleSort,\n currentPage,\n totalPages,\n setCurrentPage,\n nextPage,\n prevPage,\n canNextPage,\n canPrevPage,\n selectedRows,\n toggleRow,\n toggleAll,\n isRowSelected,\n isAllSelected,\n clearSelection\n };\n}\n\nexport default useTable;\n","import { ReactNode } from 'react';\nimport { Icon } from '../../system/icon/icon';\nimport IconButton from '../../forms/button/icon-button';\n\nimport { Table, TableHeader, TableBody, TableRow, TableHeadCell, TableCell } from '../table/table';\nimport Checkbox from '../../forms/checkbox/checkbox';\nimport EmptyState from '../empty-state/empty-state';\nimport Button from '../../forms/button/button';\nimport type { ButtonProps } from '../../forms/button/button';\nimport Stack from '../../layout/stack/stack';\nimport Badge from '../badge/badge';\nimport Chip from '../chip/chip';\nimport { useTable, UseTableOptions } from './use-table';\nimport { Size } from '@/theme/size-tokens';\nimport { StatusColorProp } from '@/theme/tokens';\n\nexport type DataTableAction<T> = {\n /** Icon name for the action button */\n icon: string;\n /** Size of the icon */\n iconSize?: Size;\n /** Color variant for the icon */\n iconColor?: StatusColorProp;\n /** Accessible label for the action (shown in tooltip or screen readers) */\n label: string;\n /** Callback when the action is clicked */\n onClick: (row: T, index: number) => void;\n /** Visual variant for the action button */\n variant?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'error' | 'info';\n};\n\nexport type DataTableActionItem<T> = DataTableAction<T> | ReactNode;\n\nexport type ColumnDef<T> = {\n /** Key of the data property to display in this column */\n key: keyof T;\n /** Column header label */\n label: string;\n /** Whether this column can be sorted */\n sortable?: boolean;\n /** CSS width class or value for the column */\n width?: string;\n /** Text alignment for cells in this column */\n align?: 'left' | 'center' | 'right';\n /** Whether text should wrap instead of truncating (useful for long strings) */\n wrapText?: boolean;\n /** Custom render function for cell content (use as escape hatch when config options don't cover your use case) */\n render?: (value: T[keyof T], row: T, index: number) => ReactNode;\n\n // Config-driven rendering options (preferred over custom render)\n /** Pre-built formatter for common data types */\n format?: 'date' | 'currency' | 'number' | 'percent';\n /** Options for Intl formatters (NumberFormat or DateTimeFormat) */\n formatOptions?: Intl.NumberFormatOptions | Intl.DateTimeFormatOptions;\n /** Map values to badge variants. Unmatched values render with 'default' variant. Use '*' key to override the default fallback. */\n badgeMap?: {\n [key: string]: { variant?: StatusColorProp; label?: string };\n };\n /** Render array values as chips */\n renderAsChips?: boolean;\n /** Variant for chip rendering */\n chipVariant?: StatusColorProp;\n /** Size for badge or chip rendering */\n componentSize?: 'sm' | 'md' | 'lg';\n};\n\nexport type DataTableProps<T> = {\n /** Array of data objects to display in the table */\n data: T[];\n /** Column definitions specifying how to render each column */\n columns: ColumnDef<T>[];\n /** Additional CSS classes to apply */\n className?: string;\n\n // Styling options\n /** Whether to apply striped row styling (alternating background) */\n striped?: boolean;\n /** Whether to show borders around the table */\n bordered?: boolean;\n /** Whether rows have hover effects */\n hoverable?: boolean;\n /** Whether to use compact spacing for dense data */\n compact?: boolean;\n /** Whether the table header should stick to the top on scroll */\n stickyHeader?: boolean;\n\n // Features\n /** Whether columns can be sorted (can be overridden per column) */\n sortable?: boolean;\n /** Whether to enable client-side pagination */\n paginated?: boolean;\n /** Number of rows per page when pagination is enabled */\n pageSize?: number;\n /** Whether to show checkboxes for row selection */\n selectable?: boolean;\n\n // Actions - either array of action configs/components OR function returning actions/render\n /** Action buttons, function returning actions based on row data, or custom render function for the actions column */\n actions?: DataTableActionItem<T>[] | ((row: T, index: number) => DataTableActionItem<T>[] | ReactNode);\n /** Label for the actions column header */\n actionsLabel?: string;\n /** CSS width class for the actions column */\n actionsWidth?: string;\n\n // Callbacks\n /** Callback when a row is clicked */\n onRowClick?: (row: T, index: number) => void;\n /** Callback when row selection changes (provides array of selected row indices) */\n onSelectionChange?: (selectedIndices: number[]) => void;\n\n // Empty state\n /** Message to display when there is no data */\n emptyMessage?: string;\n /** Icon name to display in the empty state */\n emptyIcon?: string;\n\n // Initial state\n /** Initial sort configuration */\n initialSort?: { key: keyof T; direction: 'asc' | 'desc' };\n /** Title displayed above the table (left side of header) */\n title?: string;\n /** Header actions displayed above the table (right side of header). */\n headerActions?: HeaderAction[];\n};\n\nexport type HeaderAction = {\n /** Button text; if omitted and `icon` provided, button will be icon-only */\n label?: string;\n /** Icon name to render inside the button (maps to library `Icon`) */\n icon?: string;\n /** Click handler invoked when the button is clicked */\n onClick?: () => void;\n /** Button variant (maps to Button `variant` prop) */\n variant?: ButtonProps['variant'];\n /** Button style (maps to Button `style` prop) */\n style?: ButtonProps['style'];\n /** Button size (maps to Button `size` prop) */\n size?: ButtonProps['size'];\n /** Additional className forwarded to the Button */\n className?: string;\n};\n\n/**\n * DataTable - High-level data-driven table component\n *\n * Features:\n * - Generic typed data and columns\n * - Client-side sorting\n * - Client-side pagination\n * - Row selection with checkboxes\n * - Custom cell rendering\n * - Flexible actions: simple array config OR custom render function\n * - Empty state handling\n * - Sticky headers\n * - Click handlers\n *\n * Built on top of low-level Table primitives.\n *\n * @example\n * ```tsx\n * // Simple: Pass array of action configs (recommended)\n * <DataTable\n * data={users}\n * columns={columns}\n * title=\"Users\"\n * headerActions={<Button onClick={handleCreate}>New</Button>}\n * actions={[\n * {\n * icon: \"edit\",\n * label: 'Edit user',\n * onClick: (row, index) => handleEdit(row, index),\n * variant: 'neutral'\n * },\n * {\n * icon: \"trash\",\n * label: 'Delete user',\n * onClick: (row, index) => handleDelete(row, index),\n * variant: 'error'\n * }\n * ]}\n * />\n *\n * // Dynamic: Return different actions based on row data\n * <DataTable\n * data={users}\n * columns={columns}\n * actions={(row) => [\n * {\n * icon: \"edit\",\n * label: 'Edit user',\n * onClick: (r, i) => handleEdit(r, i),\n * variant: 'neutral'\n * },\n * // Conditionally include delete action\n * ...(!row.isDefault ? [{\n * icon: \"trash\",\n * label: 'Delete user',\n * onClick: (r, i) => handleDelete(r, i),\n * variant: 'error'\n * }] : [])\n * ]}\n * />\n *\n * // Advanced: Custom render function for full control\n * <DataTable\n * data={users}\n * columns={columns}\n * actions={(row, index) => (\n * <DataTableActions\n * row={row}\n * index={index}\n * onEdit={handleEdit}\n * onDelete={handleDelete}\n * />\n * )}\n * />\n * ```\n */\nfunction DataTable<T>({\n data,\n columns,\n className = '',\n striped = true,\n bordered = false,\n hoverable = true,\n compact = false,\n stickyHeader = false,\n sortable = true,\n paginated = false,\n pageSize = 10,\n selectable = false,\n actions,\n actionsLabel = 'Actions',\n actionsWidth = 'w-32',\n onRowClick,\n onSelectionChange,\n emptyMessage = 'No data available',\n emptyIcon,\n headerActions,\n title,\n initialSort\n}: DataTableProps<T>) {\n // Use table hook for state management\n const tableOptions: UseTableOptions<T> = {\n data,\n initialSort,\n pageSize\n };\n\n const {\n currentData,\n sortedData,\n sortConfig,\n handleSort,\n currentPage,\n totalPages,\n nextPage,\n prevPage,\n canNextPage,\n canPrevPage,\n selectedRows,\n toggleRow,\n toggleAll,\n isRowSelected,\n isAllSelected\n } = useTable(tableOptions);\n\n // Display data (paginated uses currentData, non-paginated uses sortedData)\n const displayData = paginated ? currentData : sortedData;\n\n // Header title and actions\n const hasHeader = Boolean((title && String(title).length > 0) || headerActions);\n\n // Notify parent of selection changes\n const handleToggleRow = (index: number) => {\n toggleRow(index);\n if (onSelectionChange) {\n const newSelection = new Set(selectedRows);\n if (newSelection.has(index)) {\n newSelection.delete(index);\n } else {\n newSelection.add(index);\n }\n onSelectionChange(Array.from(newSelection));\n }\n };\n\n const handleToggleAll = () => {\n toggleAll();\n if (onSelectionChange) {\n if (isAllSelected) {\n onSelectionChange([]);\n } else {\n const startIndex = (currentPage - 1) * pageSize;\n const allIndices = displayData.map((_, idx) => startIndex + idx);\n onSelectionChange(allIndices);\n }\n }\n };\n\n // Format value based on column configuration\n const formatValue = (value: unknown, column: ColumnDef<T>): string => {\n if (value == null) return '';\n\n switch (column.format) {\n case 'date': {\n const dateValue = value instanceof Date ? value : new Date(value as string | number);\n return new Intl.DateTimeFormat('en-US', column.formatOptions as Intl.DateTimeFormatOptions).format(dateValue);\n }\n\n case 'currency':\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n ...column.formatOptions\n } as Intl.NumberFormatOptions).format(Number(value));\n\n case 'number':\n return new Intl.NumberFormat('en-US', column.formatOptions as Intl.NumberFormatOptions).format(Number(value));\n\n case 'percent':\n return new Intl.NumberFormat('en-US', {\n style: 'percent',\n ...column.formatOptions\n } as Intl.NumberFormatOptions).format(Number(value));\n\n default:\n return String(value);\n }\n };\n\n const renderCellContent = (value: unknown, column: ColumnDef<T>, row: T, rowIndex: number): ReactNode => {\n if (column.render) {\n return column.render(value as T[keyof T], row, rowIndex);\n }\n\n if (column.badgeMap) {\n const stringValue = String(value);\n // Try exact match, then fallback ('*'), then default\n const badgeConfig = column.badgeMap[stringValue] || column.badgeMap['*'] || { variant: 'default' };\n\n return (\n <Badge variant={badgeConfig.variant || 'default'} size={column.componentSize || 'md'}>\n {badgeConfig.label || stringValue}\n </Badge>\n );\n }\n\n if (column.renderAsChips && Array.isArray(value)) {\n return (\n <Stack direction=\"horizontal\" spacing=\"xs\" wrap>\n {value.map((item, idx) => (\n <Chip key={idx} variant={column.chipVariant || 'default'} size={column.componentSize || 'md'}>\n {String(item)}\n </Chip>\n ))}\n </Stack>\n );\n }\n\n if (column.format) {\n return formatValue(value, column);\n }\n\n return String(value ?? '');\n };\n\n // Render sort icon\n const renderSortIcon = (columnKey: keyof T) => {\n if (!sortable) return null;\n\n const isSorted = sortConfig?.key === columnKey;\n\n if (!isSorted) {\n return <Icon name=\"selector\" size=\"xs\" color=\"default\" />;\n }\n\n if (sortConfig?.direction === 'asc') {\n return <Icon name=\"chevron-up\" size=\"xs\" color=\"primary\" />;\n }\n\n return <Icon name=\"chevron-down\" size=\"xs\" color=\"primary\" />;\n };\n\n // Empty state\n if (data.length === 0) {\n return (\n <div className=\"border border-border rounded-lg\">\n <EmptyState title={emptyMessage} icon={emptyIcon} className=\"py-12\" />\n </div>\n );\n }\n\n return (\n <div className={className}>\n {hasHeader && (\n <div className=\"flex items-center justify-between mb-3\">\n <h2 className=\"text-lg font-semibold text-foreground\">{title}</h2>\n <div className=\"flex items-center gap-2\">\n {Array.isArray(headerActions) &&\n headerActions.map((act, idx) => (\n <Button\n key={idx}\n onClick={act.onClick}\n variant={act.variant}\n style={act.style}\n size={act.size}\n className={act.className}\n ariaLabel={act.label && act.icon && !act.label ? act.label : undefined}\n >\n {act.icon ? <Icon name={act.icon} size=\"sm\" /> : null}\n {act.label}\n </Button>\n ))}\n </div>\n </div>\n )}\n <div className={`${stickyHeader ? 'overflow-auto max-h-[600px]' : ''} overflow-x-auto`}>\n <Table striped={striped} bordered={bordered} hoverable={hoverable} compact={compact}>\n <TableHeader className={stickyHeader ? 'sticky top-0 z-10 bg-background shadow-sm' : ''}>\n <TableRow>\n {/* Selection column */}\n {selectable && (\n <TableHeadCell className=\"w-12\">\n <Checkbox checked={isAllSelected} onChange={handleToggleAll} ariaLabel=\"Select all rows\" />\n </TableHeadCell>\n )}\n\n {/* Data columns */}\n {columns.map((column) => (\n <TableHeadCell\n key={String(column.key)}\n align={column.align}\n className={column.width ? `w-[${column.width}]` : ''}\n >\n {column.sortable !== false && sortable ? (\n <button\n onClick={() => handleSort(column.key)}\n className=\"flex items-center gap-1 hover:text-foreground transition-colors font-medium\"\n type=\"button\"\n >\n {column.label}\n {renderSortIcon(column.key)}\n </button>\n ) : (\n column.label\n )}\n </TableHeadCell>\n ))}\n\n {/* Actions column */}\n {actions && (\n <TableHeadCell align=\"center\" className={actionsWidth}>\n {actionsLabel}\n </TableHeadCell>\n )}\n </TableRow>\n </TableHeader>\n\n <TableBody>\n {displayData.map((row, rowIndex) => {\n const actualIndex = paginated ? (currentPage - 1) * pageSize + rowIndex : rowIndex;\n const isSelected = isRowSelected(actualIndex);\n\n return (\n <TableRow\n key={actualIndex}\n selected={isSelected}\n onClick={onRowClick ? () => onRowClick(row, actualIndex) : undefined}\n className={onRowClick ? 'cursor-pointer' : ''}\n >\n {/* Selection cell */}\n {selectable && (\n <TableCell onClick={(e) => e.stopPropagation()}>\n <Checkbox\n checked={isSelected}\n onChange={() => handleToggleRow(actualIndex)}\n ariaLabel={`Select row ${actualIndex + 1}`}\n />\n </TableCell>\n )}\n\n {/* Data cells */}\n {columns.map((column) => {\n const value = row[column.key];\n const content = renderCellContent(value, column, row, actualIndex);\n\n return (\n <TableCell key={String(column.key)} align={column.align} wrapText={column.wrapText}>\n {content}\n </TableCell>\n );\n })}\n\n {actions && (\n <TableCell align=\"center\" onClick={(e) => e.stopPropagation()}>\n {(() => {\n let rowActions: DataTableActionItem<T>[] | ReactNode;\n\n if (Array.isArray(actions)) {\n rowActions = actions;\n } else {\n const result = actions(row, actualIndex);\n if (Array.isArray(result)) {\n rowActions = result;\n } else {\n return result;\n }\n }\n\n return (\n <Stack direction=\"horizontal\" spacing=\"sm\" justify=\"center\">\n {(rowActions as DataTableActionItem<T>[]).map((action, actionIndex) => {\n if (action && typeof action === 'object' && 'onClick' in action) {\n const actionConfig = action as DataTableAction<T>;\n return (\n <IconButton\n key={actionIndex}\n icon={actionConfig.icon}\n iconSize={actionConfig.iconSize || 'md'}\n buttonStyle=\"ghost\"\n variant={actionConfig.variant || 'neutral'}\n iconColor={actionConfig.iconColor}\n ariaLabel={actionConfig.label}\n onClick={() => actionConfig.onClick(row, actualIndex)}\n />\n );\n } else {\n return <div key={actionIndex}>{action as ReactNode}</div>;\n }\n })}\n </Stack>\n );\n })()}\n </TableCell>\n )}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </div>\n\n {/* Pagination controls */}\n {paginated && totalPages > 1 && (\n <div className=\"flex items-center justify-between px-4 py-3 border-t border-border\">\n <div className=\"text-sm text-muted-foreground\">\n Page {currentPage} of {totalPages} ({data.length} total rows)\n </div>\n <div className=\"flex gap-2\">\n <Button size=\"sm\" style=\"outline\" onClick={prevPage} disabled={!canPrevPage}>\n Previous\n </Button>\n <Button size=\"sm\" style=\"outline\" onClick={nextPage} disabled={!canNextPage}>\n Next\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nDataTable.displayName = 'DataTable';\n\nexport default DataTable;\n","import { ReactNode } from 'react';\n\nexport type ListProps = {\n /** List items (ListItem components) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Whether to render as ordered list (ol) instead of unordered (ul) */\n ordered?: boolean;\n};\n\nexport type ListItemProps = {\n /** Content of the list item */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n};\n\n/**\n * List - Vertical grouping of items\n */\nexport function List({ children, className = '', ordered = false }: Readonly<ListProps>) {\n const Component = ordered ? 'ol' : 'ul';\n\n return <Component className={`divide-y divide-border ${className}`}>{children}</Component>;\n}\n\nList.displayName = 'List';\n\n/**\n * ListItem - Individual list item\n */\nexport function ListItem({ children, className = '' }: Readonly<ListItemProps>) {\n return <li className={`py-3 ${className}`}>{children}</li>;\n}\n\nListItem.displayName = 'ListItem';\n\nexport default List;\n","import { Size } from '@/theme/size-tokens';\nimport { StatusColorProp } from '../../../theme/tokens';\nimport { ReactNode } from 'react';\nimport Icon from '../../system/icon/icon';\n\nexport type TimelineItemProps = {\n /** Main content of the timeline item */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Icon name to display in the timeline marker (if not provided, shows a dot) */\n icon?: string;\n /** Size of the icon */\n iconSize?: Size;\n /** Color variant for the icon */\n iconColor?: StatusColorProp;\n /** Main title/heading for the timeline event */\n title?: string;\n /** Secondary subtitle text */\n subtitle?: string;\n /** Timestamp or date string to display */\n timestamp?: string;\n /** Whether this is the last item (hides connector line) */\n isLast?: boolean;\n};\n\nexport type TimelineProps = {\n /** Timeline items (TimelineItem components) */\n children: ReactNode;\n /** Additional CSS classes to apply */\n className?: string;\n /** Horizontal alignment of the timeline */\n position?: 'left' | 'center' | 'right';\n};\n\n/**\n * TimelineItem - Individual event in timeline\n */\nexport function TimelineItem({\n children,\n className = '',\n icon,\n iconSize = 'sm',\n iconColor = 'default',\n title,\n subtitle,\n timestamp,\n isLast = false\n}: Readonly<TimelineItemProps>) {\n return (\n <div className={`flex gap-4 ${className}`}>\n {/* Icon/Dot Column */}\n <div className=\"flex flex-col items-center\">\n {/* Icon or Dot */}\n <div\n className={`\n flex items-center justify-center\n w-8 h-8 rounded-full\n shrink-0\n `}\n >\n {icon ? (\n <Icon name={icon} size={iconSize} color={iconColor} />\n ) : (\n <div className=\"w-2 h-2 rounded-full bg-current\" />\n )}\n </div>\n\n {/* Connector Line */}\n {!isLast && <div className=\"w-0.5 flex-1 bg-border mt-2\" />}\n </div>\n\n {/* Content Column */}\n <div className={`flex-1 ${!isLast ? 'pb-8' : ''}`}>\n {/* Header */}\n {(title || timestamp) && (\n <div className=\"flex items-start justify-between gap-4 mb-1\">\n {title && <h4 className=\"font-semibold text-foreground\">{title}</h4>}\n {timestamp && <time className=\"text-sm text-muted-foreground whitespace-nowrap\">{timestamp}</time>}\n </div>\n )}\n\n {/* Subtitle */}\n {subtitle && <p className=\"text-sm text-muted-foreground mb-2\">{subtitle}</p>}\n\n {/* Content */}\n {children && <div className=\"text-sm text-foreground\">{children}</div>}\n </div>\n </div>\n );\n}\n\n/**\n * Timeline - Vertical timeline for events, activities, history\n *\n * Features:\n * - Vertical layout with connector lines\n * - Custom icons or default dots\n * - Color-coded events\n * - Titles, subtitles, timestamps\n * - Flexible content\n *\n * Common uses:\n * - Activity feeds\n * - Order tracking\n * - Version history\n * - Process steps\n */\nfunction Timeline({ children, className = '', position = 'left' }: Readonly<TimelineProps>) {\n const positionClasses = {\n left: '',\n center: 'mx-auto max-w-2xl',\n right: 'ml-auto max-w-2xl'\n };\n\n return <div className={`${positionClasses[position]} ${className}`}>{children}</div>;\n}\n\nTimeline.displayName = 'Timeline';\n\nexport default Timeline;\n","import { ReactNode, useEffect, useCallback, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { colorVariants } from '../../../theme/tokens';\n\nexport type AlertProps = {\n /** The content to display inside the alert message */\n children: ReactNode;\n /** Visual style variant indicating the type of message (info, success, warning, or error) */\n type?: 'info' | 'success' | 'warning' | 'error';\n /** Whether the alert can be manually dismissed by the user via a close button */\n dismissible?: boolean;\n /** Callback function invoked when the alert is closed (either manually or via auto-dismiss) */\n onClose?: () => void;\n /** Additional CSS classes to apply to the alert container */\n className?: string;\n /** Position the alert fixed on the screen */\n position?: 'top' | 'bottom' | 'relative';\n /** Auto-dismiss duration in milliseconds (0 to disable) */\n duration?: number;\n};\n\n/**\n * Alert - Dismissible notice for info/success/warning/error messages\n */\nfunction Alert({\n children,\n type = 'info',\n dismissible = false,\n onClose,\n className = '',\n position = 'relative',\n duration = 0\n}: Readonly<AlertProps>) {\n const [isClosing, setIsClosing] = useState(false);\n\n const iconClasses = {\n info: 'text-info',\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-destructive'\n };\n\n // Auto-dismiss functionality\n const handleClose = useCallback(() => {\n setIsClosing(true);\n // Wait for animation to complete before calling onClose\n setTimeout(() => {\n onClose?.();\n }, 300); // Match animation duration\n }, [onClose]);\n\n useEffect(() => {\n if (duration > 0 && onClose) {\n const timer = setTimeout(() => {\n handleClose();\n }, duration);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [duration, onClose, handleClose]);\n\n const icons = {\n info: (\n <svg className=\"w-5 h-5 flex-shrink-0\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n success: (\n <svg className=\"w-5 h-5 flex-shrink-0\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n warning: (\n <svg className=\"w-5 h-5 flex-shrink-0\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n error: (\n <svg className=\"w-5 h-5 flex-shrink-0\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n )\n };\n\n const positionClasses = {\n top: 'fixed top-4 left-1/2 -translate-x-1/2 z-[9999] max-w-2xl w-full mx-4',\n bottom: 'fixed bottom-4 left-1/2 -translate-x-1/2 z-[9999] max-w-2xl w-full mx-4',\n relative: ''\n };\n\n // Animation classes based on position\n const getAnimationClasses = () => {\n if (position === 'top') {\n return isClosing ? 'opacity-0 -translate-y-full' : 'opacity-100 translate-y-0 animate-slideInTop';\n }\n if (position === 'bottom') {\n return isClosing ? 'opacity-0 translate-y-full' : 'opacity-100 translate-y-0 animate-slideInBottom';\n }\n return isClosing ? 'opacity-0' : 'opacity-100';\n };\n\n const alertContent = (\n <div\n role=\"alert\"\n className={`p-4 border rounded-lg flex items-start gap-3 transition-all duration-300 ease-out ${colorVariants.alert[type]} ${positionClasses[position]} ${getAnimationClasses()} ${className}`}\n >\n <span className={iconClasses[type]}>{icons[type]}</span>\n <span className=\"flex-1 text-sm\">{children}</span>\n {dismissible && onClose && (\n <button\n onClick={handleClose}\n className=\"flex-shrink-0 text-current opacity-70 hover:opacity-100 transition-opacity focus:outline-none focus:ring-2 focus:ring-ring rounded p-0.5\"\n aria-label=\"Close alert\"\n >\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n\n // Use portal for fixed positioning to avoid container clipping\n if (position !== 'relative' && typeof document !== 'undefined') {\n return createPortal(alertContent, document.body);\n }\n\n return alertContent;\n}\n\nAlert.displayName = 'Alert';\n\nexport default Alert;\n","import React from 'react';\nimport { createPortal } from 'react-dom';\nimport useOverlay from '../overlay/useOverlay';\n\nexport type ModalProps = {\n /** Controls the visibility state of the modal */\n isOpen: boolean;\n /** Callback function invoked when the modal should close (ESC key or backdrop click) */\n onClose: () => void;\n /** Raw children (ignored if structured props provided) */\n children?: React.ReactNode;\n /** Structured title (string or React) */\n title?: React.ReactNode;\n /** Optional description text */\n description?: React.ReactNode;\n /** Main body content */\n content?: React.ReactNode;\n /** Footer actions (buttons) */\n actions?: React.ReactNode;\n /** Additional CSS classes to apply to the modal dialog container */\n className?: string;\n /** Accessible label for the modal, used for screen readers */\n ariaLabel?: string;\n /** Center vs top alignment */\n align?: 'center' | 'top';\n};\n\n/**\n * Modal - Overlay dialog component using pure Tailwind CSS\n * Achieves DaisyUI modal styling with Tailwind utilities\n */\nfunction Modal({\n isOpen,\n onClose,\n children,\n title,\n description,\n content,\n actions,\n className = '',\n ariaLabel,\n align = 'center'\n}: Readonly<ModalProps>) {\n const {\n phase,\n shouldRender,\n ref: dialogRef,\n getPhaseClass\n } = useOverlay<HTMLDivElement>({\n isOpen,\n focusTrap: true,\n lockScroll: true,\n animationFrames: 2,\n restoreFocus: true\n });\n\n // ESC key handling separate from useOverlay to allow optional close logic\n React.useEffect(() => {\n if (!isOpen) return;\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n onClose();\n }\n };\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen, onClose]);\n\n // Manage mounting phases\n\n // If closed & unmounting, skip render\n if (!shouldRender) return null;\n\n const enteringClasses = 'scale-100 translate-y-0 opacity-100';\n const exitingClasses = 'scale-[0.97] -translate-y-1 opacity-0';\n const scaleClass = getPhaseClass(enteringClasses, exitingClasses);\n // Stagger backdrop fade slightly after panel starts exiting to reduce perceived flicker\n const backdropOpacity =\n phase === 'visible' || phase === 'animating-in' ? 'opacity-100' : 'opacity-0 transition-opacity delay-50';\n\n const hasStructured = title || description || content || actions;\n const alignmentClasses = align === 'center' ? 'grid place-items-center' : 'flex items-start justify-center pt-20';\n\n const panel = (\n <div\n data-phase={phase}\n className={`fixed inset-0 z-[999] ${alignmentClasses} bg-black/40 backdrop-blur-sm p-4 overflow-y-auto overscroll-contain transition-opacity duration-300 will-change-opacity ${backdropOpacity}`}\n onMouseDown={(e) => {\n // close only if clicking backdrop not dialog\n if (e.target === e.currentTarget) onClose();\n }}\n aria-label={ariaLabel || 'Close modal'}\n role=\"presentation\"\n >\n <div\n ref={dialogRef}\n data-phase={phase}\n className={`relative w-11/12 sm:w-full max-w-2xl max-h-[calc(100vh-5em)] sm:max-h-[calc(100vh-8em)] bg-card text-card-foreground rounded-2xl border border-border shadow-2xl focus:outline-none transform transition-[transform,opacity] duration-250 ease-[cubic-bezier(.33,.66,.33,1)] will-change-transform will-change-opacity select-none [backface-visibility:hidden] [transform-style:preserve-3d] overflow-hidden ${scaleClass} ${className}`}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n onTransitionEnd={(e) => {\n if (e.target !== dialogRef.current) return;\n if (phase === 'animating-out') {\n // handled by useOverlay via shouldRender state change upstream; keep minimal here\n }\n }}\n >\n <div className=\"overflow-y-auto max-h-[calc(100vh-5em)] sm:max-h-[calc(100vh-8em)] p-4 sm:p-6\">\n {hasStructured ? (\n <>\n {title && (\n <>\n {typeof title === 'string' ? (\n <h2 className=\"text-xl font-semibold tracking-tight\">{title}</h2>\n ) : (\n title\n )}\n {description && <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>}\n </>\n )}\n {content && <section className=\"text-sm leading-relaxed space-y-3 mt-4\">{content}</section>}\n {actions && (\n <footer className=\"flex justify-end gap-2 pt-2 mt-4 border-t border-border/60\">{actions}</footer>\n )}\n </>\n ) : (\n children\n )}\n </div>\n </div>\n </div>\n );\n\n return createPortal(panel, document.body);\n}\n\nModal.displayName = 'Modal';\n\nexport default Modal;\n","import React from 'react';\n\nimport Modal from '../modal/modal';\n\nexport type DialogProps = {\n /** Controls the visibility state of the dialog */\n isOpen: boolean;\n /** Callback function invoked when the dialog should close */\n onClose: () => void;\n /** Title text displayed at the top of the dialog */\n title: string;\n /** Main content to display in the dialog body */\n children: React.ReactNode;\n /** Optional footer actions (typically buttons) to display at the bottom of the dialog */\n actions?: React.ReactNode;\n /** Additional CSS classes to apply to the dialog container */\n className?: string;\n};\n\n/**\n * Dialog component (built on Modal)\n */\nfunction Dialog({ isOpen, onClose, title, children, actions, className = '' }: Readonly<DialogProps>) {\n return (\n <Modal isOpen={isOpen} onClose={onClose} ariaLabel={title} className={className}>\n <div className=\"flex flex-col p-6 gap-4\">\n <h2 className=\"text-2xl font-bold text-foreground\">{title}</h2>\n <div className=\"text-foreground\">{children}</div>\n {actions && <div className=\"flex justify-end gap-3 pt-2\">{actions}</div>}\n </div>\n </Modal>\n );\n}\n\nDialog.displayName = 'Dialog';\n\nexport default Dialog;\n","import Icon from '../../system/icon/icon';\n\nimport Dialog from './dialog';\nimport Button from '../../forms/button/button';\n\nexport type DeleteDialogProps = {\n /** Controls the visibility state of the delete dialog */\n isOpen: boolean;\n /** Callback function invoked when the dialog is closed or cancelled */\n onClose: () => void;\n /** Callback function invoked when the user confirms the deletion */\n onConfirm: () => void;\n /** Custom title for the dialog (defaults to 'Confirm Deletion') */\n title?: string;\n /** Custom description text (defaults to a generic warning message) */\n description?: string;\n /** Name of the item being deleted, used in the default description */\n itemName?: string;\n /** Whether the deletion operation is in progress, disables buttons and shows loading state */\n isLoading?: boolean;\n /** Custom text for the confirm/delete button (defaults to 'Delete') */\n confirmText?: string;\n /** Custom text for the cancel button (defaults to 'Cancel') */\n cancelText?: string;\n /** Additional CSS classes to apply to the dialog container */\n className?: string;\n};\n\n/**\n * DeleteDialog - Pre-configured dialog for delete confirmations\n *\n * @example\n * ```tsx\n * <DeleteDialog\n * isOpen={showDelete}\n * onClose={() => setShowDelete(false)}\n * onConfirm={handleDelete}\n * itemName=\"user account\"\n * />\n * ```\n */\nfunction DeleteDialog({\n isOpen,\n onClose,\n onConfirm,\n title = 'Confirm Deletion',\n description,\n itemName,\n isLoading = false,\n confirmText = 'Delete',\n cancelText = 'Cancel',\n className = ''\n}: Readonly<DeleteDialogProps>) {\n const defaultDescription = itemName\n ? `Are you sure you want to delete \"${itemName}\"? This action cannot be undone.`\n : 'Are you sure you want to delete this item? This action cannot be undone.';\n\n const finalDescription = description || defaultDescription;\n\n return (\n <Dialog\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n className={className}\n actions={\n <>\n <Button\n onClick={onClose}\n disabled={isLoading}\n className=\"bg-muted hover:bg-muted/80 text-muted-foreground\"\n icon={<Icon name=\"x\" size=\"xs\" />}\n >\n {cancelText}\n </Button>\n <Button\n onClick={onConfirm}\n disabled={isLoading}\n className=\"bg-destructive hover:bg-destructive/90 text-destructive-foreground\"\n icon={<Icon name=\"trash\" size=\"xs\" />}\n >\n {isLoading ? 'Deleting...' : confirmText}\n </Button>\n </>\n }\n >\n <p className=\"text-foreground\">{finalDescription}</p>\n </Dialog>\n );\n}\n\nDeleteDialog.displayName = 'DeleteDialog';\n\nexport default DeleteDialog;\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport type PopoverProps = {\n /** Trigger element to click for opening the popover (alternative to children) */\n trigger?: React.ReactNode;\n /** Trigger element to click for opening the popover (takes precedence over trigger prop) */\n children?: React.ReactNode;\n /** Content to display inside the popover panel when opened */\n content: React.ReactNode;\n /** Position of the popover relative to the trigger element */\n position?: 'top' | 'bottom' | 'left' | 'right';\n /** Additional CSS classes to apply to the popover wrapper container */\n className?: string;\n};\n\n/**\n * Popover - Click-to-open content overlay\n *\n * Displays rich content in a floating panel when clicked.\n * Uses portal rendering to escape overflow constraints.\n */\nfunction Popover({ trigger, children, content, position = 'bottom', className = '' }: Readonly<PopoverProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const [coords, setCoords] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLButtonElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const triggerContent = children || trigger;\n\n const calculatePosition = useCallback(() => {\n if (!triggerRef.current || !popoverRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const popoverRect = popoverRef.current.getBoundingClientRect();\n const offset = 8;\n\n let top = 0;\n let left = 0;\n\n switch (position) {\n case 'top':\n top = triggerRect.top - popoverRect.height - offset;\n left = triggerRect.left + triggerRect.width / 2 - popoverRect.width / 2;\n break;\n case 'bottom':\n top = triggerRect.bottom + offset;\n left = triggerRect.left + triggerRect.width / 2 - popoverRect.width / 2;\n break;\n case 'left':\n top = triggerRect.top + triggerRect.height / 2 - popoverRect.height / 2;\n left = triggerRect.left - popoverRect.width - offset;\n break;\n case 'right':\n top = triggerRect.top + triggerRect.height / 2 - popoverRect.height / 2;\n left = triggerRect.right + offset;\n break;\n }\n\n // Viewport clamping\n const padding = 8;\n if (left < padding) left = padding;\n if (left + popoverRect.width > window.innerWidth - padding) {\n left = window.innerWidth - popoverRect.width - padding;\n }\n if (top < padding) top = padding;\n if (top + popoverRect.height > window.innerHeight - padding) {\n top = window.innerHeight - popoverRect.height - padding;\n }\n\n setCoords({ top, left });\n }, [position]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(event.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n // Position on next frame\n requestAnimationFrame(() => {\n calculatePosition();\n });\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n window.addEventListener('scroll', calculatePosition, true);\n window.addEventListener('resize', calculatePosition);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n window.removeEventListener('scroll', calculatePosition, true);\n window.removeEventListener('resize', calculatePosition);\n };\n }\n return undefined;\n }, [isOpen, calculatePosition]);\n\n const popover = isOpen ? (\n <div\n ref={popoverRef}\n role=\"dialog\"\n aria-modal=\"false\"\n className={`\n fixed z-9999\n min-w-[200px] max-w-sm\n bg-popover text-popover-foreground \n border border-border \n rounded-lg \n shadow-xl \n p-4\n animate-in fade-in-0 zoom-in-95\n ${className}\n `}\n style={{\n top: `${coords.top}px`,\n left: `${coords.left}px`\n }}\n >\n {content}\n </div>\n ) : null;\n\n return (\n <>\n <button\n ref={triggerRef}\n onClick={() => setIsOpen(!isOpen)}\n className=\"inline-flex bg-transparent border-0 p-0 cursor-pointer\"\n type=\"button\"\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n >\n {triggerContent}\n </button>\n {popover && createPortal(popover, document.body)}\n </>\n );\n}\n\nPopover.displayName = 'Popover';\n\nexport default Popover;\n","import Text from '../../typography/text/text';\n\nexport type ProgressBarProps = {\n /** Current progress value */\n value: number;\n /** Maximum value for the progress bar (defaults to 100) */\n max?: number;\n /** Whether to display the percentage label next to the progress bar */\n showLabel?: boolean;\n /** Visual style variant indicating the progress state */\n variant?: 'default' | 'success' | 'warning' | 'error';\n /** Additional CSS classes to apply to the progress bar container */\n className?: string;\n};\n\n/**\n * ProgressBar - Visual representation of completion\n */\nfunction ProgressBar({ value, max = 100, showLabel, variant = 'default', className = '' }: Readonly<ProgressBarProps>) {\n const percentage = Math.min((value / max) * 100, 100);\n\n const variantClasses = {\n default: 'bg-primary',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-destructive'\n };\n\n return (\n <div className={`flex items-center gap-3 ${className}`}>\n <div className=\"flex-1 bg-muted/30 rounded-full h-2.5 overflow-hidden shadow-inner\">\n <div\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n className={`h-full transition-all duration-500 ease-out rounded-full ${variantClasses[variant]}`}\n style={{ width: `${percentage}%` }}\n />\n </div>\n {showLabel && (\n <Text variant=\"muted\" weight=\"medium\" size=\"sm\">\n {Math.round(percentage)}%\n </Text>\n )}\n </div>\n );\n}\n\nProgressBar.displayName = 'ProgressBar';\n\nexport default ProgressBar;\n","export type SkeletonProps = {\n /** Shape variant of the skeleton placeholder */\n variant?: 'text' | 'circular' | 'rectangular';\n /** Width of the skeleton (CSS value, defaults to 100% for text/rectangular, 40px for circular) */\n width?: string;\n /** Height of the skeleton (CSS value, defaults based on variant) */\n height?: string;\n /** Additional CSS classes to apply to the skeleton container */\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Skeleton - Placeholder for loading state\n */\nfunction Skeleton({ variant = 'text', width, height, className = '', ...props }: Readonly<SkeletonProps>) {\n const variantClasses = {\n text: 'rounded h-4',\n circular: 'rounded-full',\n rectangular: 'rounded-md'\n };\n\n const style = {\n width: width || (variant === 'circular' ? '40px' : '100%'),\n height: height || (variant === 'circular' ? '40px' : undefined)\n };\n\n return (\n <div\n className={`bg-muted animate-pulse ${variantClasses[variant]} ${className}`}\n style={style}\n aria-busy=\"true\"\n aria-live=\"polite\"\n {...props}\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n}\n\nSkeleton.displayName = 'Skeleton';\n\nexport default Skeleton;\n","import { ReactNode, CSSProperties } from 'react';\n\nexport type TransitionType =\n | 'fade'\n | 'slide-up'\n | 'slide-down'\n | 'slide-left'\n | 'slide-right'\n | 'scale'\n | 'scale-fade'\n | 'slide-fade-up'\n | 'slide-fade-down'\n | 'zoom';\n\nexport type TransitionDuration = 'fast' | 'normal' | 'slow' | number;\n\nexport type SmoothTransitionProps = {\n /** Content to animate */\n children: ReactNode;\n /** Whether to show the content (controls animation state) */\n show?: boolean;\n /** Type of animation to apply */\n type?: TransitionType;\n /** Duration of the animation ('fast', 'normal', 'slow', or custom milliseconds) */\n duration?: TransitionDuration;\n /** Delay before animation starts (in ms) */\n delay?: number;\n /** Additional CSS classes */\n className?: string;\n /** Additional inline styles */\n style?: CSSProperties;\n /** Apply hover effect (scale and shadow on hover) */\n hover?: boolean;\n /** Apply active effect (scale down on click) */\n active?: boolean;\n};\n\nconst getDurationClass = (duration: TransitionDuration): string => {\n if (typeof duration === 'number') {\n return '';\n }\n switch (duration) {\n case 'fast':\n return 'duration-150';\n case 'slow':\n return 'duration-500';\n case 'normal':\n default:\n return 'duration-300';\n }\n};\n\nconst getTransitionClasses = (type: TransitionType, show: boolean, hover: boolean, active: boolean): string => {\n const baseClasses = 'transition-all';\n let typeClasses = '';\n\n if (!show) {\n switch (type) {\n case 'fade':\n typeClasses = 'opacity-0';\n break;\n case 'slide-up':\n typeClasses = 'translate-y-4 opacity-0';\n break;\n case 'slide-down':\n typeClasses = '-translate-y-4 opacity-0';\n break;\n case 'slide-left':\n typeClasses = 'translate-x-4 opacity-0';\n break;\n case 'slide-right':\n typeClasses = '-translate-x-4 opacity-0';\n break;\n case 'scale':\n typeClasses = 'scale-95 opacity-0';\n break;\n case 'scale-fade':\n typeClasses = 'scale-90 opacity-0';\n break;\n case 'slide-fade-up':\n typeClasses = 'translate-y-2 opacity-0';\n break;\n case 'slide-fade-down':\n typeClasses = '-translate-y-2 opacity-0';\n break;\n case 'zoom':\n typeClasses = 'scale-0 opacity-0';\n break;\n default:\n typeClasses = 'opacity-0';\n }\n } else {\n typeClasses = 'translate-y-0 translate-x-0 scale-100 opacity-100';\n }\n\n const hoverClasses = hover ? 'hover:scale-105 hover:shadow-lg' : '';\n const activeClasses = active ? 'active:scale-95' : '';\n\n return `${baseClasses} ${typeClasses} ${hoverClasses} ${activeClasses}`.trim();\n};\n\n/**\n * SmoothTransition - A reusable component for smooth animations and transitions\n *\n * @example\n * // Fade in/out\n * <SmoothTransition show={isOpen} type=\"fade\">\n * <div>Content</div>\n * </SmoothTransition>\n *\n * @example\n * // Slide up with hover effect\n * <SmoothTransition show={true} type=\"slide-fade-up\" hover>\n * <button>Click me</button>\n * </SmoothTransition>\n *\n * @example\n * // Custom duration\n * <SmoothTransition show={isVisible} type=\"scale-fade\" duration={500}>\n * <div>Animated content</div>\n * </SmoothTransition>\n *\n * @example\n * // Delayed animation\n * <SmoothTransition show={true} type=\"fade\" delay={200}>\n * <div>Appears after 200ms</div>\n * </SmoothTransition>\n */\nfunction SmoothTransition({\n children,\n show = true,\n type = 'fade',\n duration = 'normal',\n delay = 0,\n className = '',\n style = {},\n hover = false,\n active = false\n}: Readonly<SmoothTransitionProps>) {\n const durationClass = getDurationClass(duration);\n const transitionClasses = getTransitionClasses(type, show, hover, active);\n\n const customStyle: CSSProperties = {\n ...style,\n transitionDuration: typeof duration === 'number' ? `${duration}ms` : undefined,\n transitionDelay: delay > 0 ? `${delay}ms` : undefined\n };\n\n return (\n <div className={`${transitionClasses} ${durationClass} ${className}`} style={customStyle}>\n {children}\n </div>\n );\n}\n\nSmoothTransition.displayName = 'SmoothTransition';\n\nexport default SmoothTransition;\n\n/**\n * Hook for creating staggered animations\n *\n * @example\n * const delays = useStaggeredTransition(5, 100);\n * items.map((item, i) => (\n * <SmoothTransition key={i} delay={delays[i]}>\n * {item}\n * </SmoothTransition>\n * ))\n */\nexport function useStaggeredTransition(count: number, baseDelay: number = 50): number[] {\n return Array.from({ length: count }, (_, i) => i * baseDelay);\n}\n","import { Size, spinnerSizes } from '../../../theme/size-tokens';\n\nexport type SpinnerProps = {\n /** Size variant - uses unified size system */\n size?: Size;\n /** Color variant */\n variant?: 'primary' | 'accent' | 'secondary' | 'neutral';\n /** Additional CSS classes to apply to the spinner container */\n className?: string;\n /** Override animation duration (e.g. '0.6s') */\n speed?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Spinner - Loading indicator\n * Uses unified size system from theme/size-tokens\n */\nfunction Spinner({ size = 'xl', variant = 'primary', className = '', speed, ...props }: Readonly<SpinnerProps>) {\n const sizeConfig = spinnerSizes[size];\n\n const variantTopBorder = {\n primary: 'border-t-primary',\n accent: 'border-t-accent',\n secondary: 'border-t-secondary',\n neutral: 'border-t-neutral'\n }[variant];\n\n const duration = speed ? `[animation-duration:${speed}]` : '';\n\n return (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n data-variant={variant}\n className={`inline-block border-muted ${variantTopBorder} rounded-full animate-spin box-border ${duration} ${sizeConfig.classes} ${sizeConfig.border} ${className}`}\n {...props}\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n}\n\nSpinner.displayName = 'Spinner';\n\nexport default Spinner;\n","import { useEffect, useState, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport type ToastProps = {\n /** Text message to display in the toast (alternative to children) */\n message?: string;\n /** React content to display in the toast (takes precedence over message) */\n children?: React.ReactNode;\n /** Visual style variant indicating the type of notification (info, success, warning, or error) */\n type?: 'info' | 'success' | 'warning' | 'error';\n /** Callback function invoked when the toast is closed (either manually or via auto-dismiss) */\n onClose?: () => void;\n /** Additional CSS classes to apply to the toast container */\n className?: string;\n /** Auto-dismiss duration in milliseconds (0 to disable) */\n duration?: number;\n};\n\n/**\n * Toast - Notification popup with slide-in/out animations and auto-dismiss\n */\nfunction Toast({ message, children, type = 'info', onClose, className = '', duration = 5000 }: Readonly<ToastProps>) {\n const [isClosing, setIsClosing] = useState(false);\n\n const typeClasses = {\n info: 'bg-info text-info-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n error: 'bg-destructive text-destructive-foreground'\n };\n\n const handleClose = useCallback(() => {\n setIsClosing(true);\n // Wait for animation to complete before calling onClose\n setTimeout(() => {\n onClose?.();\n }, 300); // Match animation duration\n }, [onClose]);\n\n useEffect(() => {\n if (duration > 0) {\n const timer = setTimeout(() => {\n handleClose();\n }, duration);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [duration, handleClose]);\n\n const toast = (\n <div\n role=\"alert\"\n aria-live=\"polite\"\n className={`fixed bottom-4 right-4 left-4 sm:left-auto sm:max-w-md px-4 py-3 rounded-md shadow-lg z-[9999] ${typeClasses[type]} transition-all duration-300 ease-out ${\n isClosing ? 'opacity-0 translate-x-full' : 'opacity-100 translate-x-0 animate-slideInRight'\n } ${className}`}\n >\n <span>{children || message}</span>\n {onClose && (\n <button onClick={handleClose} className=\"ml-4 font-bold hover:opacity-70 transition-opacity\" aria-label=\"Close\">\n ×\n </button>\n )}\n </div>\n );\n\n return typeof document !== 'undefined' ? createPortal(toast, document.body) : toast;\n}\n\nToast.displayName = 'Toast';\n\nexport default Toast;\n","import { ReactNode } from 'react';\n\nexport type ButtonGroupProps = {\n /** Button components to group together */\n children: ReactNode;\n /** Additional CSS classes applied to the container */\n className?: string;\n /** Grouping style - default merges buttons with shared borders, separated adds gap between buttons */\n variant?: 'default' | 'separated';\n /** Layout direction - horizontal arranges buttons in a row, vertical stacks them */\n orientation?: 'horizontal' | 'vertical';\n};\n\n/**\n * ButtonGroup - Groups related buttons together\n */\nfunction ButtonGroup({\n children,\n className = '',\n variant = 'default',\n orientation = 'horizontal'\n}: Readonly<ButtonGroupProps>) {\n const baseClasses = 'inline-flex';\n const orientationClasses = orientation === 'horizontal' ? 'flex-row' : 'flex-col';\n\n let variantClasses = '';\n if (variant === 'separated') {\n variantClasses = 'gap-2';\n } else if (orientation === 'horizontal') {\n variantClasses =\n '[&>button]:rounded-none [&>button:first-child]:rounded-l-md [&>button:last-child]:rounded-r-md [&>button:not(:last-child)]:border-r-0';\n } else {\n variantClasses =\n '[&>button]:rounded-none [&>button:first-child]:rounded-t-md [&>button:last-child]:rounded-b-md [&>button:not(:last-child)]:border-b-0';\n }\n\n return <div className={`${baseClasses} ${orientationClasses} ${variantClasses} ${className}`}>{children}</div>;\n}\n\nButtonGroup.displayName = 'ButtonGroup';\n\nexport default ButtonGroup;\n","import { useState } from 'react';\n\nexport type CalendarProps = {\n /**\n * The currently selected date\n */\n value?: Date;\n /**\n * Callback when a date is selected\n */\n onChange?: (date: Date) => void;\n /**\n * Minimum selectable date\n */\n minDate?: Date;\n /**\n * Maximum selectable date\n */\n maxDate?: Date;\n /**\n * Disabled state\n */\n disabled?: boolean;\n /**\n * Additional CSS classes\n */\n className?: string;\n};\n\n/**\n * Calendar - A simple date picker component\n *\n * Displays a month view calendar for date selection with keyboard navigation support.\n */\nfunction Calendar({ value, onChange, minDate, maxDate, disabled = false, className = '' }: Readonly<CalendarProps>) {\n const [currentMonth, setCurrentMonth] = useState(value || new Date());\n const [selectedDate, setSelectedDate] = useState<Date | undefined>(value);\n\n const getDaysInMonth = (date: Date) => {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n };\n\n const getFirstDayOfMonth = (date: Date) => {\n return new Date(date.getFullYear(), date.getMonth(), 1).getDay();\n };\n\n const handleDateClick = (day: number) => {\n if (disabled) return;\n\n const newDate = new Date(currentMonth.getFullYear(), currentMonth.getMonth(), day);\n\n // Check min/max date constraints\n if (minDate && newDate < minDate) return;\n if (maxDate && newDate > maxDate) return;\n\n setSelectedDate(newDate);\n onChange?.(newDate);\n };\n\n const handlePreviousMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1));\n };\n\n const handleNextMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1));\n };\n\n const daysInMonth = getDaysInMonth(currentMonth);\n const firstDayOfMonth = getFirstDayOfMonth(currentMonth);\n const monthName = currentMonth.toLocaleDateString('en-US', { month: 'long', year: 'numeric' });\n\n const weekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n const isDateSelected = (day: number) => {\n if (!selectedDate) return false;\n return (\n selectedDate.getDate() === day &&\n selectedDate.getMonth() === currentMonth.getMonth() &&\n selectedDate.getFullYear() === currentMonth.getFullYear()\n );\n };\n\n const isDateDisabled = (day: number) => {\n const date = new Date(currentMonth.getFullYear(), currentMonth.getMonth(), day);\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n };\n\n return (\n <div\n className={`inline-block border border-border rounded-lg bg-card text-card-foreground shadow-sm p-4 ${\n disabled ? 'opacity-50 pointer-events-none' : ''\n } ${className}`.trim()}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n type=\"button\"\n onClick={handlePreviousMonth}\n className=\"p-2 hover:bg-muted rounded-md transition-colors focus:outline-none focus:ring-2 focus:ring-ring\"\n aria-label=\"Previous month\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n <span className=\"font-semibold text-sm\">{monthName}</span>\n <button\n type=\"button\"\n onClick={handleNextMonth}\n className=\"p-2 hover:bg-muted rounded-md transition-colors focus:outline-none focus:ring-2 focus:ring-ring\"\n aria-label=\"Next month\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </div>\n\n {/* Week days */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {weekDays.map((day) => (\n <div key={day} className=\"w-9 h-9 flex items-center justify-center text-xs font-medium text-muted-foreground\">\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar days */}\n <div className=\"grid grid-cols-7 gap-1\">\n {/* Empty cells for days before the first day of the month */}\n {Array.from({ length: firstDayOfMonth }).map((_, index) => (\n <div key={`empty-${index}`} className=\"w-9 h-9\" />\n ))}\n\n {/* Actual days of the month */}\n {Array.from({ length: daysInMonth }).map((_, index) => {\n const day = index + 1;\n const selected = isDateSelected(day);\n const dateDisabled = isDateDisabled(day);\n\n return (\n <button\n key={day}\n type=\"button\"\n onClick={() => handleDateClick(day)}\n disabled={dateDisabled}\n className={`\n w-9 h-9 flex items-center justify-center text-sm rounded-md transition-colors\n focus:outline-none focus:ring-2 focus:ring-ring\n ${selected ? 'bg-primary text-primary-foreground font-semibold' : 'hover:bg-muted'}\n ${dateDisabled ? 'text-muted-foreground cursor-not-allowed opacity-50' : ''}\n `.trim()}\n aria-label={`Select ${day} ${monthName}`}\n aria-pressed={selected}\n >\n {day}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nCalendar.displayName = 'Calendar';\n\nexport default Calendar;\n","import { useState, useRef, useEffect } from 'react';\nimport Calendar from '../calendar/calendar';\nimport Icon from '../../system/icon/icon';\nimport { interactiveSizes, getIconPixels, type InteractiveSize } from '../../../theme/size-tokens';\n\nexport type DatePickerProps = {\n /**\n * The currently selected date\n */\n value?: Date;\n /**\n * Callback when a date is selected\n */\n onChange?: (date: Date | undefined) => void;\n /**\n * Minimum selectable date\n */\n minDate?: Date;\n /**\n * Maximum selectable date\n */\n maxDate?: Date;\n /**\n * Placeholder text when no date is selected\n */\n placeholder?: string;\n /**\n * Disabled state\n */\n disabled?: boolean;\n /**\n * Date format string (default: 'MM/DD/YYYY')\n */\n dateFormat?: string;\n /**\n * Show clear button\n */\n clearable?: boolean;\n /**\n * Additional CSS classes\n */\n className?: string;\n /**\n * Input size - uses unified size system\n */\n size?: InteractiveSize;\n};\n\n/**\n * DatePicker - Input field with calendar popup for date selection\n *\n * Features:\n * - Calendar popup on click\n * - Keyboard navigation (Arrow keys, Enter, Escape)\n * - Date formatting\n * - Min/max date constraints\n * - Clearable option\n * - Accessible with proper ARIA labels\n *\n * @example\n * ```tsx\n * const [date, setDate] = useState<Date>();\n *\n * <DatePicker\n * value={date}\n * onChange={setDate}\n * placeholder=\"Select a date\"\n * clearable\n * />\n * ```\n */\nfunction DatePicker({\n value,\n onChange,\n minDate,\n maxDate,\n placeholder = 'Select date',\n disabled = false,\n dateFormat = 'MM/DD/YYYY',\n clearable = true,\n className = '',\n size = 'md'\n}: Readonly<DatePickerProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedDate, setSelectedDate] = useState<Date | undefined>(value);\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Update internal state when value prop changes\n useEffect(() => {\n setSelectedDate(value);\n }, [value]);\n\n // Close calendar on click outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n return undefined;\n }, [isOpen]);\n\n // Close on Escape key\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n setIsOpen(false);\n inputRef.current?.focus();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n return undefined;\n }, [isOpen]);\n\n const formatDate = (date: Date | undefined): string => {\n if (!date) return '';\n\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const year = date.getFullYear();\n\n // Simple format replacement\n return dateFormat\n .replace('MM', month)\n .replace('DD', day)\n .replace('YYYY', String(year))\n .replace('YY', String(year).slice(-2));\n };\n\n const handleDateSelect = (date: Date) => {\n setSelectedDate(date);\n onChange?.(date);\n setIsOpen(false);\n inputRef.current?.focus();\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n setSelectedDate(undefined);\n onChange?.(undefined);\n inputRef.current?.focus();\n };\n\n const handleInputClick = () => {\n if (!disabled) {\n setIsOpen(!isOpen);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(!isOpen);\n }\n };\n\n // Utility to extract the base (non-responsive) height class\n function getBaseHeightClass(heightClasses: string): string {\n // Match 'h-...' not prefixed by a colon (responsive variant)\n const classes = heightClasses.split(' ');\n const base = classes.find((cls) => /^h-\\d+/.test(cls));\n return base || classes[0] || '';\n }\n\n // Use unified interactive sizes\n const sizeConfig = interactiveSizes[size] || interactiveSizes.md;\n const containerClasses = `${getBaseHeightClass(sizeConfig.height)} ${sizeConfig.padding}`;\n const textClasses = sizeConfig.text;\n const iconSize = getIconPixels(size, 'desktop');\n\n return (\n <div ref={containerRef} className={`relative w-full ${className}`}>\n {/* Input field */}\n <div\n className={`\n w-full flex items-center justify-between gap-2\n border border-input rounded-md\n bg-background text-foreground\n cursor-pointer\n transition-all duration-200\n ${containerClasses}\n ${textClasses}\n ${isOpen ? 'ring-2 ring-ring ring-offset-2' : 'hover:border-ring'}\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n `.trim()}\n onClick={handleInputClick}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-label=\"Date picker\"\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={formatDate(selectedDate)}\n placeholder={placeholder}\n readOnly\n disabled={disabled}\n className={`flex-1 min-w-0 bg-transparent outline-none cursor-pointer placeholder:text-muted-foreground ${textClasses}`}\n aria-label=\"Selected date\"\n />\n\n <div className=\"flex items-center gap-1 shrink-0\">\n {clearable && selectedDate && !disabled ? (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"p-1 hover:bg-muted rounded transition-colors shrink-0\"\n aria-label=\"Clear date\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize - 2}\n height={iconSize - 2}\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 ) : clearable ? (\n <div className=\"w-6 h-6 shrink-0\" />\n ) : null}\n <Icon name=\"calendar\" size={size} className=\"text-muted-foreground shrink-0\" />\n </div>\n </div>\n\n {/* Calendar popup */}\n {isOpen && !disabled && (\n <div\n className=\"absolute left-0 top-full mt-2 z-50 animate-scaleIn origin-top\"\n role=\"dialog\"\n aria-label=\"Calendar\"\n >\n <Calendar value={selectedDate} onChange={handleDateSelect} minDate={minDate} maxDate={maxDate} />\n </div>\n )}\n </div>\n );\n}\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;\n","import { codeSizes, type CodeSize } from '../../../theme/size-tokens';\nimport { StatusColorProp } from '../../../theme/tokens';\n\nexport type CodeProps = {\n /**\n * The code content to display\n */\n children: React.ReactNode;\n /**\n * Size variant - uses unified size system\n */\n size?: CodeSize;\n /**\n * Color variant\n */\n variant?: StatusColorProp;\n /**\n * Additional CSS classes\n */\n className?: string;\n};\n\n/**\n * Code - Inline code display component\n *\n * For displaying short inline code snippets with syntax highlighting.\n * For multi-line code blocks, use the CodeBlock component instead.\n */\nfunction Code({ children, size = 'md', variant = 'default', className = '' }: Readonly<CodeProps>) {\n const sizeClasses = codeSizes[size];\n\n const variantClasses = {\n default: 'bg-muted text-foreground',\n primary: 'bg-primary/10 text-primary',\n success: 'bg-success/10 text-success',\n warning: 'bg-warning/10 text-warning',\n error: 'bg-destructive/10 text-destructive'\n };\n\n return (\n <code\n className={`\n inline-block font-mono rounded border border-border/50\n ${sizeClasses}\n ${variantClasses[variant]}\n ${className}\n `.trim()}\n >\n {children}\n </code>\n );\n}\n\nCode.displayName = 'Code';\n\nexport default Code;\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { InteractiveSize, ValidationState } from '../../../theme/size-tokens';\nimport IconButton from '../button/icon-button';\nimport { Icon } from '../../system/icon';\n\nexport type EditableTextProps = {\n /** Current value (controlled) */\n value?: string;\n /** Default value for uncontrolled mode */\n defaultValue?: string;\n /** Callback when save is clicked - receives the new value */\n onSave?: (value: string) => void;\n /** Callback when value changes - for controlled mode */\n onChange?: (value: string) => void;\n /** Callback when cancel is clicked */\n onCancel?: () => void;\n /** Callback when edit mode is entered */\n onEdit?: () => void;\n /** Placeholder text shown when value is empty */\n placeholder?: string;\n /** Disables editing */\n disabled?: boolean;\n /** Size variant - uses unified size system */\n size?: InteractiveSize;\n /** Validation state */\n validationState?: ValidationState;\n /** Custom CSS classes for the display text */\n className?: string;\n /** HTML id attribute */\n id?: string;\n /** HTML name attribute */\n name?: string;\n /** Required field */\n required?: boolean;\n /** Auto-focus input when entering edit mode */\n autoFocus?: boolean;\n /** Maximum length of input value */\n maxLength?: number;\n /** Save on Enter key (default: true, only for single-line) */\n saveOnEnter?: boolean;\n};\n\n/**\n * EditableText - Click-to-edit text display with save/cancel actions\n *\n * Displays text that becomes editable when clicked.\n *\n * @example\n * ```tsx\n * <EditableText\n * value={name}\n * onSave={(newValue) => updateName(newValue)}\n * placeholder=\"Enter name\"\n * />\n * ```\n */\nexport default function EditableText({\n value: controlledValue,\n defaultValue = '',\n onSave,\n onChange,\n onCancel,\n onEdit,\n placeholder = 'Click to edit',\n disabled = false,\n size = 'md',\n validationState = 'default',\n className = '',\n id,\n name,\n required = false,\n autoFocus = true,\n maxLength,\n saveOnEnter = true\n}: EditableTextProps) {\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [isEditing, setIsEditing] = useState(false);\n const [editValue, setEditValue] = useState('');\n const inputRef = useRef<HTMLInputElement | HTMLTextAreaElement>(null);\n\n const currentValue = isControlled ? controlledValue : internalValue;\n\n useEffect(() => {\n if (isEditing && autoFocus && inputRef.current) {\n inputRef.current.focus();\n // Select all text for easy replacement\n inputRef.current.select();\n }\n }, [isEditing, autoFocus]);\n\n const handleClick = () => {\n if (disabled) return;\n setEditValue(currentValue);\n setIsEditing(true);\n onEdit?.();\n };\n\n const handleSave = () => {\n const trimmedValue = editValue.trim();\n if (!isControlled) {\n setInternalValue(trimmedValue);\n }\n onSave?.(trimmedValue);\n onChange?.(trimmedValue);\n setIsEditing(false);\n };\n\n const handleCancel = () => {\n setEditValue(currentValue);\n setIsEditing(false);\n onCancel?.();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n handleCancel();\n } else if (e.key === 'Enter' && saveOnEnter && !e.shiftKey && !e.ctrlKey && !e.metaKey) {\n e.preventDefault();\n handleSave();\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n // Check if the blur is due to clicking within our container (Save/Cancel buttons)\n // Use setTimeout to let the click event complete first\n setTimeout(() => {\n // If we're still in editing mode and the related target isn't our container, cancel\n const relatedTarget = e.relatedTarget as HTMLElement;\n const isClickingButton = relatedTarget?.closest('[data-editable-actions]');\n if (!isClickingButton) {\n handleCancel();\n }\n }, 0);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setEditValue(e.target.value);\n };\n\n // Get size-based text classes\n const sizeConfig = {\n xs: 'text-sm sm:text-xs',\n sm: 'text-base sm:text-sm',\n md: 'text-base sm:text-sm',\n lg: 'text-lg sm:text-base',\n xl: 'text-xl sm:text-lg'\n }[size];\n\n if (isEditing) {\n const validationBorder = {\n default: 'border-b-foreground/30 focus:border-b-foreground',\n error: 'border-b-destructive focus:border-b-destructive',\n success: 'border-b-success focus:border-b-success',\n warning: 'border-b-warning focus:border-b-warning'\n }[validationState];\n\n const commonProps = {\n ref: inputRef as never,\n value: editValue,\n onChange: handleChange,\n onKeyDown: handleKeyDown,\n onBlur: handleBlur,\n placeholder,\n disabled,\n id,\n name,\n required,\n maxLength,\n className: `${sizeConfig} w-full border-0 border-b ${validationBorder} bg-transparent py-1 outline-none transition-colors placeholder:text-muted-foreground`\n };\n\n return (\n <div className=\"flex items-center gap-2\">\n <input {...commonProps} type=\"text\" />\n\n <div data-editable-actions className=\"flex items-center gap-1\">\n <IconButton icon=\"IconX\" ariaLabel=\"Cancel\" onClick={handleCancel} variant=\"error\" size=\"xs\" />\n <IconButton icon=\"IconCheck\" ariaLabel=\"Save\" onClick={handleSave} variant=\"success\" size=\"xs\" />\n </div>\n </div>\n );\n }\n\n const displayText = currentValue || placeholder;\n const isPlaceholder = !currentValue;\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n className={`group ${sizeConfig} ${className} relative inline-flex items-center gap-2 cursor-text border-b border-transparent py-1 text-left transition-all hover:border-b-foreground/30 focus:outline-none focus:ring-2 focus:ring-ring/20 focus:rounded disabled:cursor-not-allowed disabled:opacity-50 ${isPlaceholder ? 'text-muted-foreground' : 'text-foreground'} w-fit max-w-full`}\n >\n <span className=\"flex-1 truncate\">{displayText}</span>\n <Icon\n name=\"IconPencil\"\n className=\"shrink-0 opacity-0 transition-opacity group-hover:opacity-50 group-focus:opacity-50\"\n size=\"xs\"\n />\n </button>\n );\n}\n","import { ReactNode } from 'react';\n\nimport { formSpacing, type FormSpacing } from '../../../theme/size-tokens';\n\nexport type FieldsetProps = {\n /** Form controls to group together - typically FormField components */\n children: ReactNode;\n /** Legend text displayed at top of fieldset */\n legend?: string;\n /** Disables all form controls within the fieldset */\n disabled?: boolean;\n /** HTML id attribute */\n id?: string;\n /** Layout direction for children */\n direction?: 'horizontal' | 'vertical';\n /** Gap spacing between children elements */\n spacing?: FormSpacing;\n /** Cross-axis alignment */\n align?: 'start' | 'center' | 'end' | 'stretch';\n /** Main-axis alignment */\n justify?: 'start' | 'center' | 'end' | 'between' | 'around';\n /** Show border around fieldset */\n bordered?: boolean;\n};\n\nconst alignClasses = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch'\n} as const;\n\nconst justifyClasses = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around'\n} as const;\n\n/**\n * Fieldset - Semantic grouping for related form controls\n *\n * Groups related form fields with an optional legend.\n * All child inputs are disabled when the fieldset is disabled.\n *\n * @example\n * ```tsx\n * <Fieldset legend=\"Personal Information\" spacing=\"md\">\n * <FormField label=\"First Name\">\n * <Input placeholder=\"John\" />\n * </FormField>\n * <FormField label=\"Last Name\">\n * <Input placeholder=\"Doe\" />\n * </FormField>\n * </Fieldset>\n * ```\n */\nfunction Fieldset({\n children,\n legend,\n disabled = false,\n id,\n direction = 'vertical',\n spacing = 'md',\n align = 'stretch',\n justify,\n bordered = true\n}: Readonly<FieldsetProps>) {\n const directionClass = direction === 'horizontal' ? 'flex-row flex-wrap' : 'flex-col';\n const justifyClass = justify ? justifyClasses[justify] : '';\n const borderClass = bordered ? 'border border-border rounded-lg p-4' : '';\n const disabledClass = disabled ? 'opacity-50' : '';\n\n return (\n <fieldset disabled={disabled} id={id} className={`${borderClass} ${disabledClass}`.trim()}>\n {legend && <legend className=\"px-2 text-sm font-semibold text-foreground\">{legend}</legend>}\n <div className={`flex ${directionClass} ${formSpacing[spacing]} ${alignClasses[align]} ${justifyClass}`.trim()}>\n {children}\n </div>\n </fieldset>\n );\n}\n\nFieldset.displayName = 'Fieldset';\n\nexport default Fieldset;\n","import { FormEvent, ReactNode } from 'react';\n\nimport { formSpacing, type FormSpacing } from '../../../theme/size-tokens';\n\nexport type FormProps = {\n /** Form content - typically FormField, Fieldset, or Button components */\n children: ReactNode;\n /** Form submission handler - automatically prevents default */\n onSubmit?: (e: FormEvent<HTMLFormElement>) => void;\n /** HTML form method */\n method?: 'get' | 'post';\n /** Form action URL for native submission */\n action?: string;\n /** Disable browser validation */\n noValidate?: boolean;\n /** HTML id attribute */\n id?: string;\n /** Accessible label for screen readers */\n ariaLabel?: string;\n /** Spacing between form elements */\n spacing?: FormSpacing;\n};\n\n/**\n * Form - Semantic form wrapper with layout support\n *\n * Automatically prevents default on submit when onSubmit is provided.\n * Uses flexbox for layout with configurable direction, spacing, and alignment.\n *\n * @example\n * ```tsx\n * <Form onSubmit={handleSubmit} spacing=\"md\">\n * <FormField label=\"Email\" required>\n * <Input type=\"email\" />\n * </FormField>\n * <Button type=\"submit\">Submit</Button>\n * </Form>\n * ```\n */\n\nfunction Form({\n children,\n onSubmit,\n method,\n action,\n noValidate = false,\n id,\n ariaLabel,\n spacing = 'md'\n}: Readonly<FormProps>) {\n const handleSubmit = (e: FormEvent<HTMLFormElement>) => {\n if (onSubmit) {\n e.preventDefault();\n onSubmit(e);\n }\n };\n\n return (\n <form\n onSubmit={handleSubmit}\n method={method}\n action={action}\n noValidate={noValidate}\n id={id}\n aria-label={ariaLabel}\n className={`flex flex-col ${formSpacing[spacing]}`}\n >\n {children}\n </form>\n );\n}\n\nForm.displayName = 'Form';\n\nexport default Form;\n","import { ReactNode, ReactElement, cloneElement, isValidElement, useId } from 'react';\n\nimport {\n validationTextClasses,\n formSpacing,\n type ValidationState,\n type FormSpacing,\n type InputWidth,\n inputWidthSizes\n} from '../../../theme/size-tokens';\nimport { type Alignment, inputAlignClasses } from '../../../theme/tokens';\n\nexport type { ValidationState };\n\nexport type FormFieldProps = {\n /** Form input component - typically Input, Select, Textarea, etc. */\n children: ReactNode;\n /** Label text displayed above the input */\n label?: string;\n /** Error message to display */\n error?: string;\n /** Helper text displayed below input */\n helperText?: string;\n /** Shows required asterisk next to label */\n required?: boolean;\n /** Spacing between label, input, and helper text */\n spacing?: FormSpacing;\n /** Disables the form field and child input */\n disabled?: boolean;\n /** HTML id for the input - auto-generated if not provided */\n id?: string;\n /** Width of the form field - uses semantic sizing */\n width?: InputWidth;\n /** Aligns the form field - left, center, or right */\n align?: Alignment;\n /** Reserve space for helper/error text to prevent layout shift */\n reserveMessageSpace?: boolean;\n};\n\n/**\n * FormField - Simple wrapper for form inputs with label and error display\n *\n * For most use cases, prefer the unified components:\n * - FormInput - for text inputs\n * - FormSelect - for dropdowns\n * - FormTextarea - for multi-line text\n *\n * Use FormField when you need to wrap custom or third-party inputs.\n *\n * @example\n * ```tsx\n * <FormField label=\"Email\" required error={errors.email}>\n * <Input type=\"email\" placeholder=\"you@example.com\" />\n * </FormField>\n * ```\n */\nfunction FormField({\n children,\n label,\n error,\n helperText,\n required = false,\n spacing = 'sm',\n disabled = false,\n id: providedId,\n width = 'full',\n align = 'center',\n reserveMessageSpace = false\n}: Readonly<FormFieldProps>) {\n const autoId = useId();\n const inputId = providedId ?? autoId;\n\n const validationState: ValidationState = error ? 'error' : 'default';\n const hasMessage = !!(error || helperText);\n\n const enhancedChild = isValidElement(children)\n ? cloneElement(\n children as ReactElement<{\n validationState?: ValidationState;\n disabled?: boolean;\n id?: string;\n 'aria-describedby'?: string;\n }>,\n {\n validationState,\n ...(disabled ? { disabled: true } : {}),\n id: inputId,\n ...(hasMessage ? { 'aria-describedby': `${inputId}-message` } : {})\n }\n )\n : children;\n\n const widthClass = inputWidthSizes[width];\n const alignmentClass = inputAlignClasses[align];\n\n // Only reserve space when there's no helper text but we want to prevent layout shift for errors\n const shouldReserveSpace = reserveMessageSpace && !helperText;\n\n return (\n <div className={`flex flex-col ${widthClass} ${alignmentClass} ${formSpacing[spacing]}`}>\n {label && (\n <label htmlFor={inputId} className=\"text-sm font-semibold text-foreground\">\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n )}\n\n {enhancedChild}\n\n {(helperText || error || shouldReserveSpace) && (\n <p\n id={`${inputId}-message`}\n className={`text-sm ${error ? validationTextClasses.error : validationTextClasses.default}`}\n aria-live=\"polite\"\n >\n {error || helperText || '\\u00A0'}\n </p>\n )}\n </div>\n );\n}\n\nFormField.displayName = 'FormField';\n\nexport default FormField;\n","import React from 'react';\n\nimport {\n getInputClasses,\n inputWidthSizes,\n type InteractiveSize,\n type InputWidth,\n type ValidationState\n} from '../../../theme/size-tokens';\nimport { AutocompleteOption } from '../../../theme/tokens';\n\nexport type { ValidationState };\n\nexport type InputProps = {\n /** Current input value (controlled) */\n value?: string;\n /** Default value for uncontrolled input */\n defaultValue?: string;\n /** Change event handler for controlled input */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** Focus event handler */\n onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;\n /** Blur event handler */\n onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;\n /** Placeholder text displayed when input is empty */\n placeholder?: string;\n /** Disables input interaction and applies disabled styling */\n disabled?: boolean;\n /** HTML input type attribute */\n type?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search';\n /** Accessible label for screen readers */\n ariaLabel?: string;\n /** React ref for the input element */\n ref?: React.Ref<HTMLInputElement>;\n /** HTML id attribute for the input */\n id?: string;\n /** HTML name attribute for form submission */\n name?: string;\n /** Marks input as required for form validation */\n required?: boolean;\n /** Size variant - uses unified size system */\n size?: InteractiveSize;\n /** Width of the input field - uses semantic sizing */\n width?: InputWidth;\n /** Visual validation state affecting border color and styling */\n validationState?: ValidationState;\n /** HTML autocomplete attribute */\n autoComplete?: AutocompleteOption;\n /** Maximum length of input value */\n maxLength?: number;\n /** Minimum length of input value */\n minLength?: number;\n /** Custom validation rule */\n pattern?: string;\n /** Custom validation message */\n title?: string;\n /** Makes input read-only */\n readOnly?: boolean;\n};\n\n/**\n * Input - Accessible text input with validation state support\n *\n * @example\n * ```tsx\n * <Input placeholder=\"Enter email\" type=\"email\" />\n * <Input validationState=\"error\" placeholder=\"Invalid input\" />\n * <Input size=\"lg\" placeholder=\"Large input\" />\n * <Input width=\"sm\" placeholder=\"ZIP\" type=\"text\" />\n * ```\n */\nfunction Input({\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n placeholder,\n disabled = false,\n type = 'text',\n ariaLabel,\n ref,\n id,\n name,\n required = false,\n size = 'md',\n width,\n validationState = 'default',\n autoComplete,\n maxLength,\n minLength,\n pattern,\n title,\n readOnly = false\n}: Readonly<InputProps>) {\n const widthClass = width ? inputWidthSizes[width] : 'w-full';\n const inputClasses = `${getInputClasses(size, validationState)} ${widthClass}`.trim();\n\n return (\n <input\n type={type}\n value={value}\n defaultValue={defaultValue}\n ref={ref}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n autoComplete={autoComplete}\n disabled={disabled}\n aria-label={ariaLabel}\n id={id}\n name={name}\n required={required}\n readOnly={readOnly}\n maxLength={maxLength}\n minLength={minLength}\n pattern={pattern}\n title={title}\n aria-invalid={validationState === 'error'}\n className={inputClasses}\n />\n );\n}\n\nInput.displayName = 'Input';\n\nexport default Input;\n","import FormField from '../form-field/form-field';\nimport Input, { type InputProps } from '../input/input';\nimport type { FormSpacing } from '../../../theme/size-tokens';\n\nexport type FormInputProps = Omit<InputProps, 'validationState'> & {\n /** Label text displayed above the input */\n label?: string;\n /** Helper text displayed below input */\n helperText?: string;\n /** Spacing between label, input, and helper text */\n spacing?: FormSpacing;\n /** Error message to display */\n error?: string;\n /** Custom validation rule */\n pattern?: string;\n /** Custom validation message */\n title?: string;\n /** Input alignment */\n align?: 'left' | 'center' | 'right';\n /** Reserve space for error message to prevent layout shift */\n reserveMessageSpace?: boolean;\n};\n\n/**\n * FormInput - Input wrapped with FormField for label and error display\n *\n * Uses native HTML5 validation. Set `pattern` and `title` for custom validation messages.\n *\n * **Validation State:**\n * - When `error` prop is provided, the validation state is set to 'error', the input displays\n * error styling (red border), and the error message is shown below the input\n * - The `error` prop takes precedence over `helperText` - only one is displayed at a time\n * - Without an error, `helperText` is displayed in default styling\n *\n * @example\n * ```tsx\n * // Simple required email\n * <FormInput label=\"Email\" type=\"email\" required placeholder=\"you@example.com\" />\n *\n * // With error state\n * <FormInput label=\"Email\" error=\"Invalid email address\" helperText=\"We'll never share\" />\n *\n * // With custom validation message\n * <FormInput\n * label=\"Corporate Email\"\n * type=\"email\"\n * required\n * pattern=\".+@company\\.com\"\n * title=\"Please use your company email address\"\n * placeholder=\"you@company.com\"\n * />\n *\n * // Number with range\n * <FormInput label=\"Age\" type=\"number\" min={18} max={120} required />\n *\n * ```\n */\nfunction FormInput({\n // FormField props\n label,\n helperText,\n spacing,\n error,\n required,\n disabled,\n id,\n pattern,\n title,\n width,\n align = 'center',\n reserveMessageSpace = false,\n onChange,\n ...inputProps\n}: Readonly<FormInputProps>) {\n return (\n <FormField\n label={label}\n helperText={helperText}\n spacing={spacing}\n error={error}\n required={required}\n disabled={disabled}\n id={id}\n width={width}\n align={align}\n reserveMessageSpace={reserveMessageSpace}\n >\n <Input\n {...inputProps}\n onChange={onChange}\n required={required}\n disabled={disabled}\n id={id}\n pattern={pattern}\n title={title}\n />\n </FormField>\n );\n}\n\nFormInput.displayName = 'FormInput';\n\nexport default FormInput;\n","import React from 'react';\n\nimport {\n interactiveSizes,\n inputWidthSizes,\n validationBorderClasses,\n validationRingClasses,\n inputBaseClasses,\n type InteractiveSize,\n type InputWidth,\n type ValidationState\n} from '../../../theme/size-tokens';\n\nexport type { ValidationState };\n\nexport type SelectProps = {\n /** Current selected value (controlled) */\n value?: string;\n /** Default value for uncontrolled select */\n defaultValue?: string;\n /** Change event handler for controlled select */\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n /** Focus event handler */\n onFocus?: (e: React.FocusEvent<HTMLSelectElement>) => void;\n /** Blur event handler */\n onBlur?: (e: React.FocusEvent<HTMLSelectElement>) => void;\n /** Disables select interaction and applies disabled styling */\n disabled?: boolean;\n /** Accessible label for screen readers */\n ariaLabel?: string;\n /** HTML id attribute for the select */\n id?: string;\n /** HTML name attribute for form submission */\n name?: string;\n /** SelectItem children defining the available options */\n children: React.ReactNode;\n /** Marks select as required for form validation */\n required?: boolean;\n /** Size variant - uses unified size system */\n size?: InteractiveSize;\n /** Width of the select field - uses semantic sizing */\n width?: InputWidth;\n /** Visual validation state affecting border color and styling */\n validationState?: ValidationState;\n /** Placeholder text shown as disabled, selected, hidden option */\n label?: string;\n};\n\n// Custom dropdown arrow classes\nconst selectArrowClasses =\n \"appearance-none bg-[url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22none%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20stroke%3D%22%236b7280%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%221.5%22%20d%3D%22M6%208l4%204%204-4%22%2F%3E%3C%2Fsvg%3E')] bg-size-[1.5em] bg-position-[right_0.5rem_center] bg-no-repeat pr-10\";\n\n/**\n * Select - Accessible select dropdown with validation state support\n *\n * @example\n * ```tsx\n * <Select>\n * <SelectItem value=\"1\">Option 1</SelectItem>\n * <SelectItem value=\"2\">Option 2</SelectItem>\n * </Select>\n * ```\n */\nfunction Select({\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n disabled = false,\n ariaLabel,\n id,\n name,\n children,\n required = false,\n size = 'md',\n width,\n validationState = 'default',\n label\n}: Readonly<SelectProps>) {\n const sizeConfig = interactiveSizes[size];\n const sizeClasses = `${sizeConfig.height} px-4 sm:px-3 ${sizeConfig.text}`;\n const widthClass = width ? inputWidthSizes[width] : 'w-full';\n const selectClasses =\n `${inputBaseClasses} ${sizeClasses} ${selectArrowClasses} ${validationBorderClasses[validationState]} ${validationRingClasses[validationState]} ${widthClass}`.trim();\n\n return (\n <select\n value={value}\n defaultValue={defaultValue ?? (label ? '' : undefined)}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n disabled={disabled}\n aria-label={ariaLabel}\n id={id}\n name={name}\n required={required}\n aria-invalid={validationState === 'error'}\n className={selectClasses}\n >\n {label && (\n <option value=\"\" disabled>\n {label}\n </option>\n )}\n {children}\n </select>\n );\n}\n\nSelect.displayName = 'Select';\n\nexport default Select;\n","import FormField from '../form-field/form-field';\nimport Select, { type SelectProps } from '../select/select';\nimport type { FormSpacing } from '../../../theme/size-tokens';\n\nexport type FormSelectProps = Omit<SelectProps, 'validationState' | 'label'> & {\n /** Label text displayed above the select */\n label?: string;\n /** Helper text displayed below select */\n helperText?: string;\n /** Spacing between label, select, and helper text */\n spacing?: FormSpacing;\n /** Error message to display */\n error?: string;\n /** Placeholder option text displayed as first disabled option */\n selectLabel?: string;\n};\n\n/**\n * FormSelect - Select wrapped with FormField for label and error display\n *\n * @example\n * ```tsx\n * <FormSelect label=\"Country\" required>\n * <SelectItem value=\"\">Select a country</SelectItem>\n * <SelectItem value=\"us\">United States</SelectItem>\n * <SelectItem value=\"uk\">United Kingdom</SelectItem>\n * </FormSelect>\n * ```\n */\nfunction FormSelect({\n // FormField props\n label,\n helperText,\n spacing,\n error,\n required,\n disabled,\n id,\n selectLabel,\n ...selectProps\n}: Readonly<FormSelectProps>) {\n return (\n <FormField\n label={label}\n helperText={helperText}\n spacing={spacing}\n error={error}\n required={required}\n disabled={disabled}\n id={id}\n >\n <Select {...selectProps} label={selectLabel} required={required} disabled={disabled} id={id} />\n </FormField>\n );\n}\n\nFormSelect.displayName = 'FormSelect';\n\nexport default FormSelect;\n","import React from 'react';\n\nimport {\n validationBorderClasses,\n validationRingClasses,\n inputBaseClasses,\n type ValidationState\n} from '../../../theme/size-tokens';\n\nexport type { ValidationState };\n\nexport type TextareaProps = {\n /** Current textarea value (controlled) */\n value?: string;\n /** Default value for uncontrolled textarea */\n defaultValue?: string;\n /** Change event handler for controlled textarea */\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n /** Focus event handler */\n onFocus?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;\n /** Blur event handler */\n onBlur?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;\n /** Placeholder text displayed when textarea is empty */\n placeholder?: string;\n /** Disables textarea interaction and applies disabled styling */\n disabled?: boolean;\n /** Accessible label for screen readers */\n ariaLabel?: string;\n /** React ref for the textarea element */\n ref?: React.Ref<HTMLTextAreaElement>;\n /** HTML id attribute for the textarea */\n id?: string;\n /** HTML name attribute for form submission */\n name?: string;\n /** Number of visible text rows */\n rows?: number;\n /** Marks textarea as required for form validation */\n required?: boolean;\n /** Visual validation state affecting border color and styling */\n validationState?: ValidationState;\n /** Maximum length of textarea value */\n maxLength?: number;\n /** Makes textarea read-only */\n readOnly?: boolean;\n /** Controls resize behavior */\n resize?: 'none' | 'vertical' | 'horizontal' | 'both';\n};\n\nconst resizeClasses = {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize'\n} as const;\n\n/**\n * Textarea - Accessible multi-line text input with validation state support\n *\n * @example\n * ```tsx\n * <Textarea placeholder=\"Enter description\" rows={4} />\n * <Textarea validationState=\"error\" placeholder=\"Invalid input\" />\n * ```\n */\nfunction Textarea({\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n placeholder,\n disabled = false,\n ariaLabel,\n ref,\n id,\n name,\n rows = 3,\n required = false,\n validationState = 'default',\n maxLength,\n readOnly = false,\n resize = 'vertical'\n}: Readonly<TextareaProps>) {\n return (\n <textarea\n value={value}\n defaultValue={defaultValue}\n ref={ref}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n disabled={disabled}\n aria-label={ariaLabel}\n id={id}\n name={name}\n rows={rows}\n required={required}\n readOnly={readOnly}\n maxLength={maxLength}\n aria-invalid={validationState === 'error'}\n className={`${inputBaseClasses} w-full min-h-[100px] sm:min-h-20 px-4 sm:px-3 py-3 sm:py-2 text-base sm:text-sm ${resizeClasses[resize]} ${validationBorderClasses[validationState]} ${validationRingClasses[validationState]}`}\n />\n );\n}\n\nTextarea.displayName = 'Textarea';\n\nexport default Textarea;\n","import FormField from '../form-field/form-field';\nimport Textarea, { type TextareaProps } from '../textarea/textarea';\nimport type { FormSpacing } from '../../../theme/size-tokens';\n\nexport type FormTextareaProps = Omit<TextareaProps, 'validationState'> & {\n /** Label text displayed above the textarea */\n label?: string;\n /** Helper text displayed below textarea */\n helperText?: string;\n /** Spacing between label, textarea, and helper text */\n spacing?: FormSpacing;\n /** Error message to display */\n error?: string;\n};\n\n/**\n * FormTextarea - Textarea wrapped with FormField for label and error display\n *\n * @example\n * ```tsx\n * <FormTextarea\n * label=\"Description\"\n * placeholder=\"Enter a description...\"\n * required\n * minLength={10}\n * />\n * ```\n */\nfunction FormTextarea({\n // FormField props\n label,\n helperText,\n spacing,\n error,\n required,\n disabled,\n id,\n onChange,\n ...textareaProps\n}: Readonly<FormTextareaProps>) {\n return (\n <FormField\n label={label}\n helperText={helperText}\n spacing={spacing}\n error={error}\n required={required}\n disabled={disabled}\n id={id}\n >\n <Textarea {...textareaProps} onChange={onChange} required={required} disabled={disabled} id={id} />\n </FormField>\n );\n}\n\nFormTextarea.displayName = 'FormTextarea';\n\nexport default FormTextarea;\n","import { ReactNode, ReactElement, cloneElement, isValidElement } from 'react';\n\nimport { type ValidationState, validationBorderClasses } from '../../../theme/size-tokens';\n\nexport type InputGroupProps = {\n /** Input component - typically Input element */\n children: ReactNode;\n /** Element displayed before the input - icons or text */\n prefix?: ReactNode;\n /** Element displayed after the input - text or button */\n suffix?: ReactNode;\n /** Visual validation state */\n validationState?: ValidationState;\n /** Disables the input group */\n disabled?: boolean;\n /** Additional CSS classes for the input group container */\n className?: string;\n};\n\n// Base container styles\nconst containerBaseClasses =\n 'inline-flex items-stretch rounded-lg border shadow-sm bg-background focus-within:ring-2 focus-within:ring-ring/20 transition-colors duration-150 overflow-hidden';\n\n// CSS selectors to style nested inputs without cloning\nconst inputResetClasses = [\n '[&>input]:border-0 [&>input]:shadow-none [&>input]:rounded-none [&>input]:ring-0',\n '[&>input]:focus:ring-0 [&>input]:focus:border-0 [&>input]:bg-transparent',\n '[&>input]:flex-1 [&>input]:min-w-0'\n].join(' ');\n\n// CSS selectors to style nested buttons\nconst buttonResetClasses = [\n '[&_button]:rounded-none [&_button]:border-0 [&_button]:shadow-none [&_button]:m-0',\n '[&_button]:h-full'\n].join(' ');\n\n/**\n * InputGroup - Combines input with prefix/suffix elements\n *\n * Perfect for search inputs, URL inputs, currency inputs, etc.\n * Automatically styles child inputs to remove borders and blend with the group.\n *\n * @example\n * ```tsx\n * <InputGroup prefix={<Icon name=\"search\" />}>\n * <Input placeholder=\"Search...\" />\n * </InputGroup>\n *\n * <InputGroup prefix=\"$\" suffix=\".00\">\n * <Input type=\"number\" placeholder=\"0\" />\n * </InputGroup>\n *\n * <InputGroup suffix={<Button size=\"sm\">Search</Button>}>\n * <Input placeholder=\"Enter search term\" />\n * </InputGroup>\n * ```\n */\nfunction InputGroup({\n children,\n prefix,\n suffix,\n validationState = 'default',\n disabled = false,\n className\n}: Readonly<InputGroupProps>) {\n const isTextPrefix = typeof prefix === 'string' || typeof prefix === 'number';\n const isTextSuffix = typeof suffix === 'string' || typeof suffix === 'number';\n\n // Get border class based on validation state\n const borderClass =\n validationState === 'default'\n ? 'border-input focus-within:border-ring'\n : validationBorderClasses[validationState].split(' ')[0]; // Just the border color\n\n const disabledClass = disabled ? 'opacity-50 cursor-not-allowed' : '';\n\n // Pass disabled state to child input\n const enhancedChild =\n isValidElement(children) && disabled\n ? cloneElement(children as ReactElement<{ disabled?: boolean }>, { disabled: true })\n : children;\n\n return (\n <div\n className={`${containerBaseClasses} ${borderClass} ${inputResetClasses} ${buttonResetClasses} ${disabledClass} ${className ?? ''}`.trim()}\n >\n {prefix && (\n <div\n className={`flex items-center shrink-0 ${isTextPrefix ? 'px-3 bg-muted/50 text-muted-foreground text-sm' : 'px-3 text-muted-foreground'}`}\n >\n {prefix}\n </div>\n )}\n\n {enhancedChild}\n\n {suffix && (\n <div\n className={\n isTextSuffix\n ? 'flex items-center px-3 bg-muted/50 text-muted-foreground text-sm shrink-0'\n : 'flex items-stretch shrink-0'\n }\n >\n {suffix}\n </div>\n )}\n </div>\n );\n}\n\nInputGroup.displayName = 'InputGroup';\n\nexport default InputGroup;\n","import { useState, useRef, useEffect } from 'react';\nimport Icon from '../../system/icon/icon';\nimport { interactiveSizes, chipSizes, getIconPixels, type InteractiveSize } from '../../../theme/size-tokens';\n\nexport type MultiSelectOption = {\n value: string;\n label: string;\n};\n\nexport type MultiSelectProps = {\n /**\n * Available options to select from\n */\n options: MultiSelectOption[];\n /**\n * Currently selected values\n */\n value?: string[];\n /**\n * Callback when selection changes\n */\n onChange?: (values: string[]) => void;\n /**\n * Placeholder text when no selection\n */\n placeholder?: string;\n /**\n * Disabled state\n */\n disabled?: boolean;\n /**\n * Maximum number of selections allowed\n */\n maxSelections?: number;\n /**\n * Size variant - uses unified size system\n */\n size?: InteractiveSize;\n /**\n * Additional CSS classes\n */\n className?: string;\n};\n\n/**\n * MultiSelect - Select multiple options from a dropdown list\n *\n * Features:\n * - Multiple selections with chips\n * - Searchable dropdown\n * - Keyboard navigation\n * - Max selections limit\n * - Clearable\n * - Accessible\n *\n * @example\n * ```tsx\n * const [selected, setSelected] = useState<string[]>([]);\n *\n * <MultiSelect\n * options={[\n * { value: '1', label: 'Option 1' },\n * { value: '2', label: 'Option 2' }\n * ]}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Select options...\"\n * />\n * ```\n */\nfunction MultiSelect({\n options,\n value = [],\n onChange,\n placeholder = 'Select options...',\n disabled = false,\n maxSelections,\n size = 'md',\n className = ''\n}: Readonly<MultiSelectProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const containerRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const selectedValues = value || [];\n\n // Close on click outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setSearchQuery('');\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n return undefined;\n }, [isOpen]);\n\n // Focus search input when opened\n useEffect(() => {\n if (isOpen && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen]);\n\n const filteredOptions = options.filter((option) => option.label.toLowerCase().includes(searchQuery.toLowerCase()));\n\n const handleToggleOption = (optionValue: string) => {\n const isSelected = selectedValues.includes(optionValue);\n let newValues: string[];\n\n if (isSelected) {\n newValues = selectedValues.filter((v) => v !== optionValue);\n } else {\n if (maxSelections && selectedValues.length >= maxSelections) {\n return; // Don't add if max reached\n }\n newValues = [...selectedValues, optionValue];\n }\n\n onChange?.(newValues);\n };\n\n const handleRemoveValue = (valueToRemove: string, e: React.MouseEvent) => {\n e.stopPropagation();\n const newValues = selectedValues.filter((v) => v !== valueToRemove);\n onChange?.(newValues);\n };\n\n const handleClearAll = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.([]);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else if (focusedIndex >= 0 && focusedIndex < filteredOptions.length) {\n handleToggleOption(filteredOptions[focusedIndex].value);\n }\n break;\n case 'Escape':\n e.preventDefault();\n setIsOpen(false);\n setSearchQuery('');\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setFocusedIndex((prev) => (prev < filteredOptions.length - 1 ? prev + 1 : prev));\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n setFocusedIndex((prev) => (prev > 0 ? prev - 1 : 0));\n break;\n }\n };\n\n const sizeClasses = {\n xs: {\n container: interactiveSizes.xs.height.split(' ')[0].replace('h-', 'min-h-') + ' py-0.5 px-1.5',\n text: interactiveSizes.xs.text,\n chip: chipSizes.sm.classes\n .split(' ')\n .filter((c) => !c.includes('gap'))\n .join(' '),\n icon: getIconPixels('xs', 'desktop')\n },\n sm: {\n container: interactiveSizes.sm.height.split(' ')[0].replace('h-', 'min-h-') + ' py-1 px-2',\n text: interactiveSizes.sm.text,\n chip: chipSizes.sm.classes\n .split(' ')\n .filter((c) => !c.includes('gap'))\n .join(' '),\n icon: getIconPixels('sm', 'desktop')\n },\n md: {\n container: interactiveSizes.md.height.split(' ')[0].replace('h-', 'min-h-') + ' py-2 px-3',\n text: interactiveSizes.md.text,\n chip: chipSizes.md.classes\n .split(' ')\n .filter((c) => !c.includes('gap'))\n .join(' '),\n icon: getIconPixels('md', 'desktop')\n },\n lg: {\n container: interactiveSizes.lg.height.split(' ')[0].replace('h-', 'min-h-') + ' py-2 px-4',\n text: interactiveSizes.lg.text,\n chip: chipSizes.lg.classes\n .split(' ')\n .filter((c) => !c.includes('gap'))\n .join(' '),\n icon: getIconPixels('lg', 'desktop')\n },\n xl: {\n container: interactiveSizes.xl.height.split(' ')[0].replace('h-', 'min-h-') + ' py-2.5 px-5',\n text: interactiveSizes.xl.text,\n chip: chipSizes.lg.classes\n .split(' ')\n .filter((c) => !c.includes('gap'))\n .join(' '),\n icon: getIconPixels('xl', 'desktop')\n }\n };\n\n const currentSize = sizeClasses[size];\n\n const getSelectedLabels = () => {\n return selectedValues.map((v) => options.find((opt) => opt.value === v)?.label).filter(Boolean);\n };\n\n return (\n <div ref={containerRef} className={`relative w-full ${className}`}>\n {/* Trigger */}\n <div\n className={`\n w-full flex flex-wrap items-center gap-1.5\n border border-input rounded-md\n bg-background text-foreground\n cursor-pointer\n transition-all duration-200\n ${currentSize.container}\n ${currentSize.text}\n ${isOpen ? 'ring-2 ring-ring ring-offset-2' : 'hover:border-ring'}\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n `.trim()}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n tabIndex={disabled ? -1 : 0}\n role=\"button\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-label=\"Multi-select\"\n >\n {/* Selected items as chips */}\n {selectedValues.length > 0 ? (\n <>\n {getSelectedLabels().map((label, index) => (\n <span\n key={selectedValues[index]}\n className={`\n inline-flex items-center gap-1 \n bg-primary/10 text-primary rounded-md font-medium \n animate-scaleIn origin-left\n transition-all duration-200\n ${currentSize.chip}\n `.trim()}\n >\n {label}\n <button\n type=\"button\"\n onClick={(e) => handleRemoveValue(selectedValues[index], e)}\n className=\"hover:bg-primary/20 rounded-sm transition-colors duration-150\"\n aria-label={`Remove ${label}`}\n tabIndex={-1}\n >\n <Icon name=\"x\" size={size} />\n </button>\n </span>\n ))}\n </>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n\n {/* Right side icons */}\n <div className=\"flex items-center gap-1 ml-auto shrink-0\">\n {selectedValues.length > 0 && !disabled && (\n <button\n type=\"button\"\n onClick={handleClearAll}\n className=\"p-1 hover:bg-muted rounded transition-colors\"\n aria-label=\"Clear all\"\n tabIndex={-1}\n >\n <Icon name=\"x\" size={size} />\n </button>\n )}\n <Icon\n name=\"chevron-down\"\n size={size}\n className={`text-muted-foreground transition-transform ${isOpen ? 'rotate-180' : ''}`}\n />\n </div>\n </div>\n\n {/* Dropdown */}\n {isOpen && !disabled && (\n <div className=\"absolute top-full left-0 right-0 mt-2 z-50 bg-card border border-border rounded-md shadow-lg max-h-64 overflow-hidden flex flex-col animate-scaleIn origin-top\">\n {/* Search input */}\n <div className=\"p-2 border-b border-border\">\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n setFocusedIndex(-1);\n }}\n placeholder=\"Search...\"\n className={`w-full px-3 py-1.5 ${currentSize.text} border border-input rounded-md bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring`}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n\n {/* Options list */}\n <div className=\"overflow-y-auto\" role=\"listbox\">\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option, index) => {\n const isSelected = selectedValues.includes(option.value);\n const isFocused = index === focusedIndex;\n const isDisabled = Boolean(maxSelections && !isSelected && selectedValues.length >= maxSelections);\n\n return (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => !isDisabled && handleToggleOption(option.value)}\n className={`\n w-full px-3 py-2 flex items-center justify-between gap-2\n transition-all duration-200 text-left ${currentSize.text}\n ${isFocused ? 'bg-muted' : ''}\n ${isSelected ? 'bg-primary/10 text-primary font-medium' : 'hover:bg-muted'}\n ${isDisabled ? 'opacity-50 cursor-not-allowed' : ''}\n `.trim()}\n role=\"option\"\n aria-selected={isSelected}\n disabled={isDisabled}\n >\n <span className=\"flex-1 truncate\">{option.label}</span>\n {isSelected && <Icon name=\"check\" size={size} className=\"shrink-0 animate-scaleIn\" />}\n </button>\n );\n })\n ) : (\n <div className=\"px-3 py-6 text-center text-muted-foreground\">No options found</div>\n )}\n </div>\n\n {/* Footer info */}\n {maxSelections && (\n <div className=\"px-3 py-2 border-t border-border bg-muted/30 text-xs text-muted-foreground\">\n {selectedValues.length} / {maxSelections} selected\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nMultiSelect.displayName = 'MultiSelect';\n\nexport default MultiSelect;\n","import { ReactNode, createContext, useContext } from 'react';\n\nexport type RadioGroupProps = {\n /** Radio components - typically multiple Radio components */\n children: ReactNode;\n /** Form input name shared by all child radios for grouping */\n name: string;\n /** Optional legend text displayed above the radio group */\n label?: string;\n /** Layout direction - horizontal arranges radios in a row, vertical stacks them */\n orientation?: 'horizontal' | 'vertical';\n /** Additional CSS classes applied to the fieldset container */\n className?: string;\n /** Controlled value - matches the value prop of the selected Radio */\n value?: string;\n /** Change handler receiving the selected radio's value */\n onChange?: (value: string) => void;\n};\n\ntype RadioGroupContextValue = {\n name: string;\n value?: string;\n onChange?: (value: string) => void;\n};\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nexport const useRadioGroup = () => {\n const context = useContext(RadioGroupContext);\n return context;\n};\n\n/**\n * RadioGroup - Wrapper for radio inputs with consistent spacing and shared name\n */\nfunction RadioGroup({\n children,\n name,\n label,\n orientation = 'vertical',\n className = '',\n value,\n onChange\n}: Readonly<RadioGroupProps>) {\n const orientationClasses = orientation === 'horizontal' ? 'flex flex-row gap-4' : 'flex flex-col gap-2';\n\n return (\n <RadioGroupContext.Provider value={{ name, value, onChange }}>\n <fieldset className={className}>\n {label && <legend className=\"text-sm font-medium text-foreground mb-2\">{label}</legend>}\n <div className={orientationClasses} role=\"radiogroup\">\n {children}\n </div>\n </fieldset>\n </RadioGroupContext.Provider>\n );\n}\n\nRadioGroup.displayName = 'RadioGroup';\n\nexport default RadioGroup;\n","import React, { useId } from 'react';\nimport { useRadioGroup } from '../radio-group/radio-group';\n\nexport type ValidationState = 'default' | 'error' | 'success' | 'warning';\n\nexport type RadioProps = {\n /** Controlled checked state - overridden by RadioGroup context if present */\n checked?: boolean;\n /** Change event handler - called in addition to RadioGroup onChange if both are provided */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** Disables radio interaction and applies disabled styling */\n disabled?: boolean;\n /** Additional CSS classes applied to the radio button indicator */\n className?: string;\n /** Accessible label for screen readers when visual label is not present */\n ariaLabel?: string;\n /** HTML id attribute - auto-generated if not provided */\n id?: string;\n /** Form input name - overridden by RadioGroup context if present */\n name?: string;\n /** Input value submitted with form - required when used in RadioGroup */\n value?: string;\n /** Visual validation state affecting border and ring colors */\n validationState?: ValidationState;\n};\n\n/**\n * Accessible Radio component\n */\nfunction Radio({\n checked,\n onChange,\n disabled = false,\n className = '',\n ariaLabel,\n id,\n name: nameProp,\n value,\n validationState = 'default'\n}: Readonly<RadioProps>) {\n const radioGroup = useRadioGroup();\n\n // Use name from RadioGroup context if available, otherwise use prop\n const name = radioGroup?.name || nameProp;\n\n // Use checked state from RadioGroup if available\n const isChecked = radioGroup?.value !== undefined ? radioGroup.value === value : checked;\n\n // Handle change with RadioGroup callback if available\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (radioGroup?.onChange && value) {\n radioGroup.onChange(value);\n }\n onChange?.(e);\n };\n\n const validationClasses = {\n default: 'border-input focus:ring-ring',\n error: 'border-destructive focus:ring-destructive',\n success: 'border-success focus:ring-success',\n warning: 'border-warning focus:ring-warning'\n };\n\n const generatedId = useId();\n const inputId = id || `radio-${value || generatedId}`;\n\n return (\n <div\n className={`inline-flex items-center justify-center relative ${disabled ? 'opacity-60 cursor-not-allowed' : 'cursor-pointer'}`}\n >\n <input\n type=\"radio\"\n checked={isChecked}\n onChange={handleChange}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-invalid={validationState === 'error' ? 'true' : undefined}\n id={inputId}\n name={name}\n value={value}\n className=\"peer sr-only\"\n />\n <span\n aria-hidden=\"true\"\n onClick={() => !disabled && document.getElementById(inputId)?.click()}\n className={`w-6 h-6 sm:w-5 sm:h-5 rounded-full border-2 flex items-center justify-center transition-all duration-200 ease-out bg-background shadow-sm\n before:content-[''] before:w-3 before:h-3 sm:before:w-2.5 sm:before:h-2.5 before:rounded-full before:scale-0 before:transition-transform before:duration-200 before:ease-out before:bg-primary\n peer-checked:before:scale-100 peer-checked:border-primary\n peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-ring\n peer-disabled:opacity-50 peer-disabled:cursor-not-allowed\n peer-hover:border-primary/60 peer-active:scale-95\n ${validationClasses[validationState]} ${className}`}\n />\n </div>\n );\n}\n\nRadio.displayName = 'Radio';\n\nexport default Radio;\n","import React from 'react';\n\nexport type SelectItemProps = {\n value?: string;\n disabled?: boolean;\n children: React.ReactNode;\n};\n\n/**\n * SelectItem - Option element for Select component\n * Replaces native <option> element with semantic component\n */\nfunction SelectItem({ value, disabled = false, children }: Readonly<SelectItemProps>) {\n return (\n <option value={value} disabled={disabled}>\n {children}\n </option>\n );\n}\n\nSelectItem.displayName = 'SelectItem';\n\nexport default SelectItem;\n","import React from 'react';\n\nexport type SliderProps = {\n /** Controlled numeric value - must be between min and max */\n value?: number;\n /** Change handler receiving the new numeric value */\n onChange?: (value: number) => void;\n /** Minimum allowed value - defaults to 0 */\n min?: number;\n /** Maximum allowed value - defaults to 100 */\n max?: number;\n /** Increment step size - defaults to 1 */\n step?: number;\n /** Disables slider interaction and applies disabled styling */\n disabled?: boolean;\n /** Additional CSS classes applied to the range input */\n className?: string;\n /** Accessible label for screen readers when visual label is not present */\n ariaLabel?: string;\n /** HTML id attribute for the input element */\n id?: string;\n /** Form input name attribute */\n name?: string;\n};\n\n/**\n * Accessible Slider component\n */\nfunction Slider({\n value = 50,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n className = '',\n ariaLabel,\n id,\n name\n}: Readonly<SliderProps>) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(Number(e.target.value));\n };\n\n return (\n <input\n type=\"range\"\n value={value}\n onChange={handleChange}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n aria-label={ariaLabel}\n id={id}\n name={name}\n className={`w-full h-2 bg-muted/30 rounded-lg appearance-none cursor-pointer transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed hover:bg-muted/40 ${className}`}\n style={{\n background: `linear-gradient(to right, hsl(var(--primary)) 0%, hsl(var(--primary)) ${((value - min) / (max - min)) * 100}%, hsl(var(--muted) / 0.3) ${((value - min) / (max - min)) * 100}%, hsl(var(--muted) / 0.3) 100%)`\n }}\n />\n );\n}\n\nSlider.displayName = 'Slider';\n\nexport default Slider;\n","import React from 'react';\n\nexport type SwitchProps = {\n /** Controlled checked state - true for on, false for off */\n checked?: boolean;\n /** Change handler receiving the new boolean checked state */\n onChange?: (checked: boolean) => void;\n /** Disables switch interaction and applies disabled styling */\n disabled?: boolean;\n /** Additional CSS classes applied to the switch container */\n className?: string;\n /** Accessible label for screen readers when visual label is not present */\n ariaLabel?: string;\n /** HTML id attribute for the underlying input element */\n id?: string;\n /** Form input name attribute */\n name?: string;\n /** Size variant affecting switch dimensions - uses unified size system */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** Color variant affecting background when checked - defaults to primary if not specified */\n variant?: 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'info' | 'error' | 'neutral';\n};\n\n/**\n * Accessible Switch/Toggle component - DaisyUI inspired\n * Uses pure Tailwind classes for styling\n */\nfunction Switch({\n checked = false,\n onChange,\n disabled = false,\n className = '',\n ariaLabel,\n id,\n name,\n size = 'md',\n variant\n}: Readonly<SwitchProps>) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.checked);\n };\n\n // Size configurations\n const sizeStyles = {\n xs: {\n container: 'h-4 w-8',\n handle: 'h-3 w-3',\n padding: 'p-0.5',\n translate: checked ? 'translate-x-4' : 'translate-x-0'\n },\n sm: {\n container: 'h-5 w-10',\n handle: 'h-4 w-4',\n padding: 'p-0.5',\n translate: checked ? 'translate-x-5' : 'translate-x-0'\n },\n md: {\n container: 'h-6 w-12',\n handle: 'h-5 w-5',\n padding: 'p-0.5',\n translate: checked ? 'translate-x-6' : 'translate-x-0'\n },\n lg: {\n container: 'h-7 w-14',\n handle: 'h-6 w-6',\n padding: 'p-0.5',\n translate: checked ? 'translate-x-7' : 'translate-x-0'\n },\n xl: {\n container: 'h-8 w-16',\n handle: 'h-7 w-7',\n padding: 'p-0.5',\n translate: checked ? 'translate-x-8' : 'translate-x-0'\n }\n };\n\n // Color variants\n const getVariantColors = () => {\n if (!checked) {\n return 'bg-input border-input';\n }\n\n switch (variant) {\n case 'secondary':\n return 'bg-secondary border-secondary';\n case 'accent':\n return 'bg-accent border-accent';\n case 'success':\n return 'bg-success border-success';\n case 'warning':\n return 'bg-warning border-warning';\n case 'info':\n return 'bg-info border-info';\n case 'error':\n return 'bg-destructive border-destructive';\n case 'neutral':\n return 'bg-neutral border-neutral';\n case 'primary':\n default:\n return 'bg-primary border-primary';\n }\n };\n\n const styles = sizeStyles[size];\n\n return (\n <label\n className={`relative inline-flex ${styles.container} ${styles.padding} items-center rounded-full border transition-all duration-200 cursor-pointer ${\n disabled ? 'opacity-30 cursor-not-allowed' : ''\n } ${getVariantColors()} ${className}`}\n >\n <input\n type=\"checkbox\"\n role=\"switch\"\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n aria-label={ariaLabel}\n id={id}\n name={name}\n className=\"sr-only\"\n />\n <span\n className={`inline-block ${styles.handle} rounded-full bg-background shadow-sm transition-transform duration-200 ${styles.translate}`}\n />\n </label>\n );\n}\n\nSwitch.displayName = 'Switch';\n\nexport default Switch;\n","import { ReactNode } from 'react';\n\nexport type CodeProps = {\n /** Code content to be displayed */\n children: ReactNode;\n /** Whether to render as a code block (pre + code) or inline code\n * @default false\n */\n block?: boolean;\n /** Visual style variant\n * @default 'default'\n */\n variant?: 'default' | 'primary' | 'muted';\n /** Additional CSS classes for custom styling */\n className?: string;\n};\n\n/**\n * Code - Styled code snippets (inline or block)\n */\nfunction Code({ children, block = false, variant = 'default', className = '' }: Readonly<CodeProps>) {\n const variantClasses = {\n default: 'bg-muted text-foreground',\n primary: 'text-primary',\n muted: 'text-muted-foreground'\n };\n\n const baseClasses = `font-mono ${variantClasses[variant]}`;\n\n if (block) {\n return (\n <pre className={`${baseClasses} p-4 rounded-lg overflow-x-auto border border-border ${className}`}>\n <code>{children}</code>\n </pre>\n );\n }\n\n return <code className={`${baseClasses} px-1.5 py-0.5 rounded text-sm ${className}`}>{children}</code>;\n}\n\nCode.displayName = 'Code';\n\nexport default Code;\n","export type Debounced<T extends (...args: unknown[]) => void> = {\n call: (...args: Parameters<T>) => void;\n flush: () => void;\n cancel: () => void;\n};\n\nexport function debounce<T extends (...args: unknown[]) => void>(\n fn: T,\n delayMs: number,\n setTimer: (cb: () => void, ms: number) => ReturnType<typeof setTimeout> = setTimeout,\n clearTimer: (id: ReturnType<typeof setTimeout>) => void = clearTimeout\n): Debounced<T> {\n let timer: ReturnType<typeof setTimeout> | null = null;\n let lastArgs: Parameters<T> | null = null;\n\n const invoke = () => {\n if (lastArgs) {\n fn(...lastArgs);\n lastArgs = null;\n }\n };\n\n return {\n call(...args: Parameters<T>) {\n lastArgs = args;\n\n if (timer != null) {\n clearTimer(timer);\n }\n\n timer = setTimer(() => {\n timer = null;\n invoke();\n }, delayMs);\n },\n\n flush() {\n if (timer != null) {\n clearTimer(timer);\n timer = null;\n invoke();\n }\n },\n\n cancel() {\n if (timer != null) {\n clearTimer(timer);\n timer = null;\n }\n lastArgs = null;\n }\n };\n}\n","import { useMemo, useEffect, useRef } from 'react';\nimport { debounce, Debounced } from '@/utils/debounce';\n\n/**\n * Hook that returns a debounced version of a callback function.\n *\n * @param callback - The function to debounce\n * @param delayMs - Delay in milliseconds before invoking the callback\n * @param deps - Optional dependency array (like useEffect). If not provided, callback must be stable.\n * @returns Debounced function with `call`, `flush`, and `cancel` methods\n *\n * @example\n * // With dependencies (recommended)\n * const debounced = useDebounce(() => {\n * console.log('Searching for:', searchQuery);\n * }, 300, [searchQuery]);\n *\n * const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n * setSearchQuery(e.target.value);\n * debounced.call();\n * };\n *\n * @example\n * // Without dependencies (callback must be wrapped in useCallback)\n * const debounced = useDebounce(() => {\n * console.log('Searching for:', searchQuery);\n * }, 300);\n */\nexport function useDebounce<T extends (...args: unknown[]) => void>(\n callback: T,\n delayMs: number,\n deps?: React.DependencyList\n): Debounced<T> {\n const callbackRef = useRef(callback);\n\n // Update ref with dependencies - use callback as dependency if deps not provided\n useEffect(\n () => {\n callbackRef.current = callback;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n deps !== undefined ? deps : [callback]\n );\n\n // Create the debounced function once\n const debounced = useMemo(() => {\n return debounce(() => callbackRef.current(), delayMs) as Debounced<T>;\n }, [delayMs]);\n\n // Cancel any pending debounced calls when the component unmounts\n useEffect(() => {\n return () => {\n debounced.cancel();\n };\n }, [debounced]);\n\n return debounced;\n}\n\nexport default useDebounce;\n"]}
|