@titan-design/react-ui 0.1.1 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -1
- package/dist/{chunk-MGW37MPO.mjs → chunk-UXVRPOME.mjs} +173 -3
- package/dist/chunk-UXVRPOME.mjs.map +1 -0
- package/dist/index.d.mts +101 -12
- package/dist/index.d.ts +101 -12
- package/dist/index.js +1267 -468
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +734 -112
- package/dist/index.mjs.map +1 -1
- package/dist/theme/index.d.mts +86 -1
- package/dist/theme/index.d.ts +86 -1
- package/dist/theme/index.js +166 -0
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/index.mjs +1 -1
- package/docs/WEB_SETUP.md +217 -0
- package/package.json +14 -2
- package/src/components/custom/Workout/RestTimer.stories.tsx +71 -0
- package/src/components/custom/Workout/RestTimer.test.tsx +145 -0
- package/src/components/custom/Workout/RestTimer.tsx +172 -0
- package/src/components/custom/Workout/SupersetWrapper.stories.tsx +144 -0
- package/src/components/custom/Workout/SupersetWrapper.test.tsx +130 -0
- package/src/components/custom/Workout/SupersetWrapper.tsx +63 -0
- package/src/components/custom/Workout/index.ts +2 -0
- package/src/components/custom/index.ts +1 -0
- package/src/components/custom/stepper/index.ts +2 -2
- package/src/components/ui/avatar/Avatar.test.tsx +17 -0
- package/src/components/ui/avatar/Avatar.tsx +13 -5
- package/src/components/ui/badge/Badge.test.tsx +17 -0
- package/src/components/ui/badge/Badge.tsx +14 -0
- package/src/components/ui/badge/index.ts +1 -0
- package/src/components/ui/button/Button.tsx +55 -0
- package/src/components/ui/card/Card.test.tsx +29 -0
- package/src/components/ui/card/Card.tsx +32 -11
- package/src/components/ui/index.ts +2 -0
- package/src/components/ui/indicator/Indicator.stories.tsx +74 -0
- package/src/components/ui/indicator/Indicator.test.tsx +55 -0
- package/src/components/ui/indicator/Indicator.tsx +73 -0
- package/src/components/ui/indicator/index.ts +2 -0
- package/src/components/ui/pill/Pill.stories.tsx +71 -0
- package/src/components/ui/pill/Pill.test.tsx +69 -0
- package/src/components/ui/pill/Pill.tsx +104 -0
- package/src/components/ui/pill/index.ts +2 -0
- package/src/components/ui/popover/Popover.test.tsx +144 -2
- package/src/components/ui/popover/Popover.tsx +81 -6
- package/src/components/ui/progress/Progress.test.tsx +29 -0
- package/src/components/ui/progress/Progress.tsx +54 -35
- package/src/components/ui/select/Select.test.tsx +20 -0
- package/src/components/ui/select/Select.tsx +9 -2
- package/src/components/ui/toast/index.ts +1 -0
- package/src/components/ui/tooltip/Tooltip.test.tsx +83 -0
- package/src/components/ui/tooltip/Tooltip.tsx +117 -26
- package/src/stories/PresetShowcase.stories.tsx +462 -0
- package/src/stories/ThemePresets.stories.tsx +85 -0
- package/src/theme/global.css +129 -1
- package/src/theme/index.ts +1 -0
- package/src/theme/presets/apply.ts +97 -0
- package/src/theme/presets/audiobook.ts +93 -0
- package/src/theme/presets/default.ts +6 -0
- package/src/theme/presets/index.ts +4 -0
- package/src/theme/presets/presets.test.ts +51 -0
- package/src/theme/presets/types.ts +76 -0
- package/src/utils/avatar-color.test.ts +30 -0
- package/src/utils/avatar-color.ts +20 -0
- package/src/web-jsx/jsx-dev-runtime.ts +28 -0
- package/src/web-jsx/jsx-runtime.ts +41 -0
- package/tailwind.config.js +53 -3
- package/dist/chunk-MGW37MPO.mjs.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cn.ts","../src/components/ui/alert/Alert.tsx","../src/theme/tokens/primitives.ts","../src/theme/tokens/semantic.ts","../src/components/ui/button/Button.tsx","../src/components/ui/input/Input.tsx","../src/theme/config.ts","../src/theme/shadows.ts","../src/theme/elevation.ts","../src/utils/useTheme.ts","../src/components/ui/card/Card.tsx","../src/components/ui/badge/Badge.tsx","../src/components/ui/spinner/Spinner.tsx","../src/components/ui/avatar/Avatar.tsx","../src/components/ui/divider/Divider.tsx","../src/components/ui/checkbox/Checkbox.tsx","../src/components/ui/switch/Switch.tsx","../src/components/ui/modal/Modal.tsx","../src/components/ui/skeleton/Skeleton.tsx","../src/components/ui/tabs/Tabs.tsx","../src/components/ui/chip/Chip.tsx","../src/components/ui/link/Link.tsx","../src/components/ui/tooltip/Tooltip.tsx","../src/components/ui/collapse/Collapse.tsx","../src/components/ui/breadcrumbs/Breadcrumbs.tsx","../src/components/ui/popover/Popover.tsx","../src/components/ui/menu/Menu.tsx","../src/components/ui/select/Select.tsx","../src/components/ui/toolbar-button/ToolbarButton.tsx","../src/components/ui/radio/Radio.tsx","../src/components/ui/drawer/Drawer.tsx","../src/components/ui/progress/Progress.tsx","../src/components/ui/toast/Toast.tsx","../src/components/ui/autocomplete/Autocomplete.tsx","../src/components/ui/help-tip/HelpTip.tsx","../src/components/ui/form-field/FormField.tsx","../src/components/ui/stack/Stack.tsx","../src/components/ui/section/Section.tsx","../src/components/ui/data-row/DataRow.tsx","../src/components/ui/icon-box/IconBox.tsx","../src/components/ui/surface/Surface.tsx","../src/components/ui/list-item/ListItem.tsx","../src/components/custom/Typography/Typography.tsx","../src/components/custom/Sidebar/Sidebar.tsx","../src/components/custom/Table/Table.tsx","../src/components/custom/EmptyState/EmptyState.tsx","../src/components/custom/stepper/Stepper.tsx","../src/components/custom/DateTime/DateTime.tsx","../src/components/custom/Metric/Metric.tsx","../src/utils/colors.ts","../src/utils/form.ts"],"names":["twMerge","clsx","jsxs","View","jsx","Text","Pressable","forwardRef","Button","ActivityIndicator","sizeStyles","variantStyles","Input","useState","TextInput","PasswordInput","Platform","intensityConfig","useSyncExternalStore","useMemo","Fragment","styles","Image","React","Checkbox","Switch","createContext","RNModal","ScrollView","useContext","colorStyles","useRef","arrowStyles","placementStyles","textSizeStyles","useCallback","StyleSheet","gapStyles","Modal","useEffect","alignStyles","statusStyles","sizeConfig"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Utility function to merge Tailwind CSS classes with proper conflict resolution.\n * Combines clsx for conditional classes with tailwind-merge for deduplication.\n *\n * @example\n * cn('p-4 bg-red-500', isActive && 'bg-blue-500', className)\n * // If isActive is true, returns 'p-4 bg-blue-500' (not 'p-4 bg-red-500 bg-blue-500')\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs))\n}\n","import React from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type AlertStatus = 'success' | 'info' | 'warning' | 'error'\nexport type AlertVariant = 'subtle' | 'outline' | 'solid'\n\nexport interface AlertProps extends ViewProps {\n /** Alert status type */\n status?: AlertStatus\n /** Visual variant */\n variant?: AlertVariant\n /** Custom icon element */\n icon?: React.ReactNode\n /** Whether to show the default icon */\n showIcon?: boolean\n /** Callback when close button is pressed */\n onClose?: () => void\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst statusColors: Record<AlertStatus, {\n subtle: string\n outline: string\n solid: string\n icon: string\n text: string\n}> = {\n success: {\n subtle: 'bg-status-success-subtle',\n outline: 'border-2 border-status-success bg-transparent',\n solid: 'bg-status-success',\n icon: 'text-status-success',\n text: 'text-status-success',\n },\n info: {\n subtle: 'bg-status-info-subtle',\n outline: 'border-2 border-status-info bg-transparent',\n solid: 'bg-status-info',\n icon: 'text-status-info',\n text: 'text-status-info',\n },\n warning: {\n subtle: 'bg-status-warning-subtle',\n outline: 'border-2 border-status-warning bg-transparent',\n solid: 'bg-status-warning',\n icon: 'text-status-warning',\n text: 'text-status-warning',\n },\n error: {\n subtle: 'bg-status-error-subtle',\n outline: 'border-2 border-status-error bg-transparent',\n solid: 'bg-status-error',\n icon: 'text-status-error',\n text: 'text-status-error',\n },\n}\n\n// Default icons for each status\nconst defaultIcons: Record<AlertStatus, string> = {\n success: '✓',\n info: 'ℹ',\n warning: '⚠',\n error: '✕',\n}\n\n/**\n * Alert component for displaying status messages.\n *\n * @example\n * <Alert status=\"success\">\n * <AlertTitle>Success!</AlertTitle>\n * <AlertDescription>Your changes have been saved.</AlertDescription>\n * </Alert>\n *\n * <Alert status=\"error\" variant=\"solid\" onClose={() => {}}>\n * <AlertDescription>Something went wrong.</AlertDescription>\n * </Alert>\n */\nexport function Alert({\n status = 'info',\n variant = 'subtle',\n icon,\n showIcon = true,\n onClose,\n className,\n children,\n ...props\n}: AlertProps) {\n const colors = statusColors[status]\n const isSolid = variant === 'solid'\n\n return (\n <View\n accessibilityRole=\"alert\"\n className={cn(\n 'flex-row items-start p-4 rounded-lg',\n colors[variant],\n className\n )}\n {...props}\n >\n {showIcon && (\n <View className=\"mr-3 mt-0.5\">\n {icon || (\n <Text\n className={cn(\n 'text-lg font-bold',\n isSolid ? 'text-white' : colors.icon\n )}\n >\n {defaultIcons[status]}\n </Text>\n )}\n </View>\n )}\n\n <View className=\"flex-1\">\n {children}\n </View>\n\n {onClose && (\n <Pressable\n onPress={onClose}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close alert\"\n className=\"ml-2 p-1 rounded web:hover:bg-black/10 active:bg-black/20\"\n >\n <Text className={cn('text-lg', isSolid ? 'text-white/70' : 'text-text-secondary')}>\n ×\n </Text>\n </Pressable>\n )}\n </View>\n )\n}\n\nexport interface AlertTitleProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Title for Alert component.\n */\nexport function AlertTitle({ children, className }: AlertTitleProps) {\n return (\n <Text className={cn('font-semibold text-text-primary mb-1', className)}>\n {children}\n </Text>\n )\n}\n\nexport interface AlertDescriptionProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Description for Alert component.\n */\nexport function AlertDescription({ children, className }: AlertDescriptionProps) {\n return (\n <Text className={cn('text-sm text-text-secondary', className)}>\n {children}\n </Text>\n )\n}\n","/**\n * Primitive Design Tokens\n *\n * Raw values with no semantic meaning. These are the foundation of the design system\n * and should rarely be used directly in components. Use semantic tokens instead.\n */\n\nexport const primitiveColors = {\n // Blue scale (primary brand)\n blue: {\n 50: '#EFF6FF',\n 100: '#DBEAFE',\n 200: '#BFDBFE',\n 300: '#93C5FD',\n 400: '#60A5FA',\n 500: '#3B82F6',\n 600: '#5048E5', // Primary main\n 700: '#3832A0', // Primary dark\n 800: '#1E40AF',\n 900: '#1E3A8A',\n },\n\n // Green scale (secondary brand)\n green: {\n 50: '#ECFDF5',\n 100: '#D1FAE5',\n 200: '#A7F3D0',\n 300: '#6EE7B7',\n 400: '#3FC79A', // Secondary light\n 500: '#10B981', // Secondary main\n 600: '#059669',\n 700: '#0B815A', // Secondary dark\n 800: '#065F46',\n 900: '#064E3B',\n },\n\n // Teal scale (success)\n teal: {\n 50: '#F0FDFA',\n 100: '#CCFBF1',\n 200: '#99F6E4',\n 300: '#5EEAD4',\n 400: '#43C6B7', // Success light\n 500: '#14B8A6', // Success main\n 600: '#0D9488',\n 700: '#0E8074', // Success dark\n 800: '#115E59',\n 900: '#134E4A',\n },\n\n // Red scale (error)\n red: {\n 50: '#FEF2F2',\n 100: '#FEE2E2',\n 200: '#FECACA',\n 300: '#FCA5A5',\n 400: '#DA6868', // Error light\n 500: '#EF4444',\n 600: '#D14343', // Error main\n 700: '#922E2E', // Error dark\n 800: '#991B1B',\n 900: '#7F1D1D',\n },\n\n // Amber scale (warning)\n amber: {\n 50: '#FFFBEB',\n 100: '#FEF3C7',\n 200: '#FDE68A',\n 300: '#FCD34D',\n 400: '#FFBF4C', // Warning light\n 500: '#FFB020', // Warning main\n 600: '#B27B16', // Warning dark\n 700: '#B45309',\n 800: '#92400E',\n 900: '#78350F',\n },\n\n // Sky/Blue scale (info)\n sky: {\n 50: '#F0F9FF',\n 100: '#E0F2FE',\n 200: '#BAE6FD',\n 300: '#7DD3FC',\n 400: '#64B6F7', // Info light\n 500: '#2196F3', // Info main\n 600: '#0284C7',\n 700: '#0B79D0', // Info dark\n 800: '#075985',\n 900: '#0C4A6E',\n },\n\n // Neutral/Gray scale\n neutral: {\n 50: '#FAFAFA',\n 100: '#F3F4F6',\n 200: '#E5E7EB',\n 300: '#D1D5DB',\n 400: '#9CA3AF',\n 500: '#6B7280',\n 600: '#4B5563',\n 700: '#374151',\n 800: '#1F2937',\n 900: '#111827',\n 950: '#030712',\n },\n\n // Orange scale (accent/brand color)\n accent: {\n 100: '#FFA860',\n 200: '#FF9630',\n 300: '#FF8500',\n 400: '#FF7900',\n 500: '#F56C00',\n 600: '#E06D10',\n 700: '#D0620C',\n 800: '#B75500',\n 900: '#A34900',\n },\n\n // Charcoal scale (dark backgrounds)\n charcoal: {\n 0: '#6E6E6E',\n 50: '#5D5D5D',\n 100: '#4C4C4C',\n 200: '#3C3C3C',\n 300: '#2C2C2C',\n 400: '#1F1F1F',\n 500: '#1C1C1C',\n 600: '#191919',\n 700: '#161616',\n 800: '#131313',\n 900: '#101010',\n },\n\n // Steel scale (cool accent)\n steel: {\n 100: '#8AA4B8',\n 200: '#7894A8',\n 300: '#678498',\n 400: '#557488',\n 500: '#406D87',\n 600: '#39617A',\n 700: '#32556D',\n 800: '#243D53',\n 900: '#1D3146',\n },\n\n // Pure colors\n white: '#FFFFFF',\n black: '#000000',\n transparent: 'transparent',\n} as const\n\n/**\n * Discrete rainbow palette for data visualization\n * Based on Paul Tol's color schemes: https://personal.sron.nl/~pault/#fig:scheme_rainbow_discrete\n */\nexport const discreteRainbow = [\n '#E8ECFB',\n '#D9CCE3',\n '#D1BBD7',\n '#CAACCB',\n '#BA8DB4',\n '#AE76A3',\n '#AA6F9E',\n '#994F88',\n '#882E72',\n '#1965B0',\n '#437DBF',\n '#5289C7',\n '#6195CF',\n '#7BAFDE',\n '#4EB265',\n '#90C987',\n '#CAE0AB',\n '#F7F056',\n '#F7CB45',\n '#F6C141',\n '#F4A736',\n '#F1932D',\n '#EE8026',\n '#E8601C',\n '#E65518',\n '#DC050C',\n '#A5170E',\n '#72190E',\n '#42150A',\n] as const\n\n/**\n * Palette indices for discrete rainbow colors at different palette sizes.\n * For a given palette size (index + 1), returns the indices of colors to use.\n */\nconst discreteRainbowPalettes: number[][] = [\n [10],\n [10, 26],\n [10, 18, 26],\n [10, 15, 18, 26],\n [10, 14, 15, 18, 26],\n [10, 14, 15, 17, 18, 26],\n [9, 10, 14, 15, 17, 18, 26],\n [9, 10, 14, 15, 17, 18, 23, 26],\n [9, 10, 14, 15, 17, 18, 23, 26, 28],\n [9, 10, 14, 15, 17, 18, 21, 24, 26, 28],\n [9, 10, 12, 14, 15, 17, 18, 21, 24, 26, 28],\n [3, 6, 9, 10, 12, 14, 15, 17, 18, 21, 24, 26],\n [3, 6, 9, 10, 12, 14, 15, 16, 17, 18, 21, 24, 26],\n [3, 6, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26],\n [3, 6, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 28],\n [3, 5, 7, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 28],\n [3, 5, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 28],\n [3, 5, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 27, 28],\n [2, 4, 5, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 27, 28],\n [2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 20, 22, 24, 26, 27, 28],\n [2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 26, 27, 28],\n [2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 26, 27, 28, 29],\n [1, 2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 26, 27, 28, 29],\n]\n\n/**\n * Get a color from the discrete rainbow palette for a given index and palette size.\n * Colors are optimized for visual distinction at each palette size.\n *\n * @param index - The index of the color in the series (0-based)\n * @param size - The total number of colors needed (1-23)\n * @returns The hex color string\n */\nexport function getDiscreteRainbowColor(index: number, size: number): string {\n index = Math.max(0, index)\n size = Math.min(Math.max(1, size), discreteRainbowPalettes.length)\n\n const palette = discreteRainbowPalettes[size - 1]\n if (index >= palette.length) index = index % palette.length\n\n return discreteRainbow[palette[index] - 1]\n}\n\nexport const primitiveTypography = {\n fontFamilies: {\n sans: ['Inter', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Helvetica', 'Arial', 'sans-serif'],\n body: ['Nunito Sans', 'sans-serif'],\n heading: ['Space Grotesk', 'sans-serif'],\n mono: ['SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', 'Droid Sans Mono', 'Source Code Pro', 'monospace'],\n },\n fontSizes: {\n xs: '0.75rem', // 12px\n sm: '0.875rem', // 14px\n base: '1rem', // 16px\n lg: '1.125rem', // 18px\n xl: '1.5rem', // 24px\n '2xl': '2rem', // 32px\n '3xl': '2.25rem', // 36px\n '4xl': '3rem', // 48px\n '5xl': '3.5rem', // 56px\n },\n fontWeights: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeights: {\n none: 1,\n tight: 1.375,\n snug: 1.5,\n normal: 1.57,\n relaxed: 1.66,\n loose: 1.75,\n },\n letterSpacing: {\n tighter: '-0.05em',\n tight: '-0.025em',\n normal: '0em',\n wide: '0.025em',\n wider: '0.05em',\n widest: '0.5px',\n },\n} as const\n\nexport const primitiveSpacing = {\n 0: '0',\n px: '1px',\n 0.5: '0.125rem', // 2px\n 1: '0.25rem', // 4px\n 1.5: '0.375rem', // 6px\n 2: '0.5rem', // 8px\n 2.5: '0.625rem', // 10px\n 3: '0.75rem', // 12px\n 3.5: '0.875rem', // 14px\n 4: '1rem', // 16px\n 5: '1.25rem', // 20px\n 6: '1.5rem', // 24px\n 7: '1.75rem', // 28px\n 8: '2rem', // 32px\n 9: '2.25rem', // 36px\n 10: '2.5rem', // 40px\n 11: '2.75rem', // 44px\n 12: '3rem', // 48px\n 14: '3.5rem', // 56px\n 16: '4rem', // 64px\n 20: '5rem', // 80px\n 24: '6rem', // 96px\n 28: '7rem', // 112px\n 32: '8rem', // 128px\n} as const\n\nexport const primitiveBorderRadius = {\n none: '0',\n sm: '4px',\n DEFAULT: '8px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n '2xl': '24px',\n full: '9999px',\n} as const\n\nexport const primitiveShadows = {\n none: 'none',\n sm: '0px 1px 2px rgba(100, 116, 139, 0.12)',\n DEFAULT: '0px 1px 3px rgba(100, 116, 139, 0.12), 0px 1px 2px rgba(100, 116, 139, 0.24)',\n md: '0px 4px 6px rgba(100, 116, 139, 0.12)',\n lg: '0px 10px 15px rgba(100, 116, 139, 0.12)',\n xl: '0px 20px 25px rgba(100, 116, 139, 0.12)',\n '2xl': '0px 25px 50px rgba(100, 116, 139, 0.25)',\n inner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)',\n} as const\n\nexport const primitiveBreakpoints = {\n xs: 0,\n sm: 600,\n md: 1000,\n lg: 1200,\n xl: 1920,\n} as const\n\nexport const primitiveZIndex = {\n hide: -1,\n auto: 'auto',\n base: 0,\n docked: 10,\n dropdown: 1000,\n sticky: 1100,\n drawer: 1100,\n banner: 1200,\n appBar: 1200,\n overlay: 1300,\n modal: 1400,\n popover: 1500,\n skipLink: 1600,\n toast: 1700,\n tooltip: 1800,\n} as const\n","/**\n * Semantic Design Tokens\n *\n * Meaningful tokens following DTCG (Design Tokens Community Group) naming conventions.\n * Pattern: {category}-{intent}-{variant?}-{state?}\n *\n * Categories:\n * - brand-* : Brand colors (primary, secondary, accent)\n * - status-* : Feedback colors (success, error, warning, info)\n * - result-* : Outcome indicators (improve, degrade, inconclusive, neutral)\n * - data-* : Data visualization colors (chart series)\n * - on-* : Text on colored backgrounds\n * - surface-* : Elevated containers (NOT \"paper\")\n * - background-* : Page backgrounds\n * - text-* : Text colors\n * - border-* : Border colors\n * - interactive-* : Hover/focus/active/disabled states\n */\n\nimport { primitiveColors as p, discreteRainbow } from './primitives'\n\n// Light mode semantic colors (default)\nexport const semanticColorsLight = {\n // Brand colors (brand-*)\n 'brand-primary': p.accent[400], // #FF7900\n 'brand-primary-light': p.accent[200], // #FF9630\n 'brand-primary-dark': p.accent[700], // #D0620C\n 'brand-primary-subtle': 'rgba(255, 121, 0, 0.08)',\n 'brand-primary-hover': p.accent[500],\n 'brand-primary-active': p.accent[600],\n\n 'brand-secondary': p.steel[500], // #406D87\n 'brand-secondary-light': p.steel[300], // #678498\n 'brand-secondary-dark': p.steel[700], // #32556D\n 'brand-secondary-subtle': 'rgba(64, 109, 135, 0.08)',\n 'brand-secondary-hover': p.steel[600],\n 'brand-secondary-active': p.steel[700],\n\n // Text on brand backgrounds (on-*)\n 'on-brand-primary': p.white,\n 'on-brand-secondary': p.white,\n\n // Status colors (status-*)\n 'status-success': p.teal[500], // #14B8A6\n 'status-success-light': p.teal[400], // #43C6B7\n 'status-success-dark': p.teal[700], // #0E8074\n 'status-success-subtle': p.teal[50],\n\n 'status-error': p.red[600], // #D14343\n 'status-error-light': p.red[400], // #DA6868\n 'status-error-dark': p.red[700], // #922E2E\n 'status-error-subtle': p.red[50],\n\n 'status-warning': p.amber[500], // #FFB020\n 'status-warning-light': p.amber[400], // #FFBF4C\n 'status-warning-dark': p.amber[600], // #B27B16\n 'status-warning-subtle': p.amber[50],\n\n 'status-info': p.sky[500], // #2196F3\n 'status-info-light': p.sky[400], // #64B6F7\n 'status-info-dark': p.sky[700], // #0B79D0\n 'status-info-subtle': p.sky[50],\n\n // Text on status backgrounds (on-status-*)\n 'on-status-success': p.white,\n 'on-status-error': p.white,\n 'on-status-warning': p.white,\n 'on-status-info': p.white,\n\n // Result/outcome indicators (result-*)\n 'result-improve': '#4caf50', // Green - positive outcome\n 'result-improve-light': 'rgba(76, 175, 80, 0.12)',\n 'result-improve-dark': '#248a24',\n 'result-degrade': '#ef5350', // Red - negative outcome\n 'result-degrade-light': 'rgba(239, 83, 80, 0.12)',\n 'result-degrade-dark': '#b30000',\n 'result-inconclusive': '#9E9A97', // Gray - no clear result\n 'result-inconclusive-light': 'rgba(158, 154, 151, 0.12)',\n 'result-neutral': p.neutral[500], // Neutral baseline\n\n // Text on result backgrounds (on-result-*)\n 'on-result-improve': p.white,\n 'on-result-degrade': p.white,\n 'on-result-inconclusive': p.white,\n\n // Data visualization colors (data-*)\n // First 10 colors from discrete rainbow optimized for charts\n 'data-1': discreteRainbow[9], // #1965B0 - Blue\n 'data-2': discreteRainbow[14], // #4EB265 - Green\n 'data-3': discreteRainbow[17], // #F7F056 - Yellow\n 'data-4': discreteRainbow[25], // #DC050C - Red\n 'data-5': discreteRainbow[8], // #882E72 - Purple\n 'data-6': discreteRainbow[20], // #F4A736 - Orange\n 'data-7': discreteRainbow[13], // #7BAFDE - Light Blue\n 'data-8': discreteRainbow[15], // #90C987 - Light Green\n 'data-9': discreteRainbow[3], // #CAACCB - Lavender\n 'data-10': discreteRainbow[22], // #EE8026 - Dark Orange\n\n // Text colors (text-*)\n 'text-primary': '#121828',\n 'text-secondary': '#65748B',\n 'text-tertiary': p.neutral[400],\n 'text-disabled': 'rgba(55, 65, 81, 0.48)',\n 'text-inverse': p.white,\n 'text-link': p.blue[600],\n 'text-link-hover': p.blue[700],\n\n // Surface colors (surface-*) - for elevated containers\n 'surface-base': p.white,\n 'surface-elevated': p.neutral[50], // #FAFAFA - slightly off-white for elevated cards\n 'surface-raised': p.neutral[100], // #F3F4F6 - light gray for raised cards\n 'surface-overlay': p.white,\n 'surface-input': p.neutral[50], // Input field background (filled variant)\n\n // Background colors (background-*)\n 'background-base': '#EBEBEB',\n 'background-default': p.white,\n 'background-subtle': p.neutral[50],\n\n // Border colors (border-*)\n 'border-default': '#E8E9EB',\n 'border-subtle': p.neutral[100],\n 'border-strong': p.neutral[300],\n 'border-focus': p.blue[600],\n 'border-input': p.neutral[300], // Input field border\n 'border-input-hover': p.neutral[400], // Input field border on hover\n 'border-input-focus': p.blue[600], // Input field border on focus\n 'border-input-error': p.red[600], // Input field border on error\n\n // Interactive states (interactive-*)\n 'interactive-hover': 'rgba(55, 65, 81, 0.04)',\n 'interactive-focus': 'rgba(55, 65, 81, 0.12)',\n 'interactive-active': 'rgba(55, 65, 81, 0.16)',\n 'interactive-selected': 'rgba(55, 65, 81, 0.08)',\n 'interactive-disabled': 'rgba(55, 65, 81, 0.12)',\n 'interactive-disabled-text': 'rgba(55, 65, 81, 0.26)',\n\n // Divider\n 'divider': '#E8E9EB',\n\n // Avatar default\n 'avatar-background': p.neutral[500],\n 'avatar-text': p.white,\n} as const\n\n// Dark mode semantic colors\nexport const semanticColorsDark = {\n // Brand colors stay the same in dark mode\n 'brand-primary': p.accent[400],\n 'brand-primary-light': p.accent[200],\n 'brand-primary-dark': p.accent[700],\n 'brand-primary-subtle': 'rgba(255, 121, 0, 0.12)',\n 'brand-primary-hover': p.accent[300],\n 'brand-primary-active': p.accent[200],\n\n 'brand-secondary': p.steel[500],\n 'brand-secondary-light': p.steel[300],\n 'brand-secondary-dark': p.steel[700],\n 'brand-secondary-subtle': 'rgba(64, 109, 135, 0.12)',\n 'brand-secondary-hover': p.steel[400],\n 'brand-secondary-active': p.steel[300],\n\n // Text on brand backgrounds\n 'on-brand-primary': p.white,\n 'on-brand-secondary': p.white,\n\n // Status colors\n 'status-success': p.teal[500],\n 'status-success-light': p.teal[400],\n 'status-success-dark': p.teal[700],\n 'status-success-subtle': 'rgba(20, 184, 166, 0.12)',\n\n 'status-error': p.red[600],\n 'status-error-light': p.red[400],\n 'status-error-dark': p.red[700],\n 'status-error-subtle': 'rgba(209, 67, 67, 0.12)',\n\n 'status-warning': p.amber[500],\n 'status-warning-light': p.amber[400],\n 'status-warning-dark': p.amber[600],\n 'status-warning-subtle': 'rgba(255, 176, 32, 0.12)',\n\n 'status-info': p.sky[500],\n 'status-info-light': p.sky[400],\n 'status-info-dark': p.sky[700],\n 'status-info-subtle': 'rgba(33, 150, 243, 0.12)',\n\n // Text on status backgrounds\n 'on-status-success': p.white,\n 'on-status-error': p.white,\n 'on-status-warning': p.white,\n 'on-status-info': p.white,\n\n // Result/outcome indicators (result-*)\n 'result-improve': '#4caf50',\n 'result-improve-light': 'rgba(76, 175, 80, 0.16)',\n 'result-improve-dark': '#248a24',\n 'result-degrade': '#ef5350',\n 'result-degrade-light': 'rgba(239, 83, 80, 0.16)',\n 'result-degrade-dark': '#b30000',\n 'result-inconclusive': '#9E9A97',\n 'result-inconclusive-light': 'rgba(158, 154, 151, 0.16)',\n 'result-neutral': p.neutral[400],\n\n // Text on result backgrounds\n 'on-result-improve': p.white,\n 'on-result-degrade': p.white,\n 'on-result-inconclusive': p.white,\n\n // Data visualization colors (same in dark mode for consistency)\n 'data-1': discreteRainbow[9],\n 'data-2': discreteRainbow[14],\n 'data-3': discreteRainbow[17],\n 'data-4': discreteRainbow[25],\n 'data-5': discreteRainbow[8],\n 'data-6': discreteRainbow[20],\n 'data-7': discreteRainbow[13],\n 'data-8': discreteRainbow[15],\n 'data-9': discreteRainbow[3],\n 'data-10': discreteRainbow[22],\n\n // Text colors - inverted for dark mode\n 'text-primary': p.neutral[100],\n 'text-secondary': p.neutral[400],\n 'text-tertiary': p.neutral[500],\n 'text-disabled': 'rgba(255, 255, 255, 0.38)',\n 'text-inverse': p.neutral[900],\n 'text-link': '#828DF8',\n 'text-link-hover': p.blue[400],\n\n // Surface colors - dark backgrounds\n 'surface-base': p.charcoal[700], // #161616 - main surface\n 'surface-elevated': p.charcoal[600], // #191919 - elevated surface\n 'surface-raised': p.charcoal[500], // #1C1C1C - raised surface\n 'surface-overlay': p.charcoal[600], // #191919 - overlay surface\n 'surface-input': p.charcoal[600], // #191919 - input surface\n\n // Background colors\n 'background-base': p.charcoal[900], // #101010 - darkest charcoal\n 'background-default': p.charcoal[700], // #161616 - main background\n 'background-subtle': p.charcoal[500], // #1C1C1C - subtle background\n\n // Border colors\n 'border-default': p.charcoal[400], // #1F1F1F - default border\n 'border-subtle': p.charcoal[500], // #1C1C1C - subtle border\n 'border-strong': p.charcoal[300], // #2C2C2C - strong border\n 'border-focus': '#828DF8',\n 'border-input': p.neutral[600],\n 'border-input-hover': p.neutral[500],\n 'border-input-focus': '#828DF8',\n 'border-input-error': p.red[500],\n\n // Interactive states\n 'interactive-hover': 'rgba(255, 255, 255, 0.04)',\n 'interactive-focus': 'rgba(255, 255, 255, 0.12)',\n 'interactive-active': 'rgba(255, 255, 255, 0.16)',\n 'interactive-selected': 'rgba(255, 255, 255, 0.08)',\n 'interactive-disabled': 'rgba(255, 255, 255, 0.12)',\n 'interactive-disabled-text': 'rgba(255, 255, 255, 0.26)',\n\n // Divider\n 'divider': p.charcoal[400], // #1F1F1F - divider color\n\n // Avatar default\n 'avatar-background': p.neutral[600],\n 'avatar-text': p.white,\n} as const\n\n// Typography tokens matching existing app\nexport const semanticTypography = {\n // Headings (Space Grotesk)\n h1: {\n fontFamily: 'heading',\n fontSize: '3.5rem',\n fontWeight: 700,\n lineHeight: 1.375,\n },\n h2: {\n fontFamily: 'heading',\n fontSize: '3rem',\n fontWeight: 700,\n lineHeight: 1.375,\n },\n h3: {\n fontFamily: 'heading',\n fontSize: '2.25rem',\n fontWeight: 700,\n lineHeight: 1.375,\n },\n h4: {\n fontFamily: 'heading',\n fontSize: '2rem',\n fontWeight: 700,\n lineHeight: 1.375,\n },\n h5: {\n fontFamily: 'heading',\n fontSize: '1.5rem',\n fontWeight: 600,\n lineHeight: 1.375,\n },\n h6: {\n fontFamily: 'heading',\n fontSize: '1.125rem',\n fontWeight: 600,\n lineHeight: 1.375,\n },\n\n // Body text (Nunito Sans)\n body1: {\n fontFamily: 'body',\n fontSize: '1rem',\n fontWeight: 400,\n lineHeight: 1.5,\n },\n body2: {\n fontFamily: 'body',\n fontSize: '0.875rem',\n fontWeight: 400,\n lineHeight: 1.57,\n },\n subtitle1: {\n fontFamily: 'body',\n fontSize: '1rem',\n fontWeight: 500,\n lineHeight: 1.75,\n },\n subtitle2: {\n fontFamily: 'body',\n fontSize: '0.875rem',\n fontWeight: 500,\n lineHeight: 1.57,\n },\n caption: {\n fontFamily: 'body',\n fontSize: '0.75rem',\n fontWeight: 400,\n lineHeight: 1.66,\n },\n overline: {\n fontFamily: 'body',\n fontSize: '0.75rem',\n fontWeight: 600,\n lineHeight: 2.5,\n letterSpacing: '0.5px',\n textTransform: 'uppercase' as const,\n },\n button: {\n fontFamily: 'sans',\n fontSize: '0.875rem',\n fontWeight: 600,\n lineHeight: 1.75,\n },\n} as const\n\n// Button size tokens\nexport const buttonSizes = {\n sm: {\n paddingX: '16px',\n paddingY: '6px',\n fontSize: '0.875rem',\n },\n md: {\n paddingX: '20px',\n paddingY: '8px',\n fontSize: '0.875rem',\n },\n lg: {\n paddingX: '24px',\n paddingY: '11px',\n fontSize: '1rem',\n },\n} as const\n\n// Export type for theme mode\nexport type ThemeMode = 'light' | 'dark'\n\n// Helper to get semantic colors based on mode\nexport function getSemanticColors(mode: ThemeMode) {\n return mode === 'dark' ? semanticColorsDark : semanticColorsLight\n}\n","import React, { forwardRef } from 'react'\nimport { Pressable, Text, View, ActivityIndicator, type PressableProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\nimport { semanticColorsDark } from '../../../theme/tokens/semantic'\n\nexport type ButtonVariant = 'solid' | 'outline' | 'ghost' | 'link'\nexport type ButtonSize = 'sm' | 'md' | 'lg'\nexport type ButtonColor = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info'\n\nexport interface ButtonProps extends Omit<PressableProps, 'children'> {\n /** Visual style variant */\n variant?: ButtonVariant\n /** Size of the button */\n size?: ButtonSize\n /** Color scheme */\n color?: ButtonColor\n /** Whether this is an icon-only button (square aspect ratio) */\n isIconButton?: boolean\n /** Whether the button is disabled */\n isDisabled?: boolean\n /** Whether the button is in a loading state */\n isLoading?: boolean\n /** Loading text to display */\n loadingText?: string\n /** Whether the button should take full width */\n fullWidth?: boolean\n /** Additional className for styling */\n className?: string\n /** Button content */\n children?: React.ReactNode\n}\n\nconst variantStyles: Record<ButtonVariant, Record<ButtonColor, string>> = {\n solid: {\n primary: 'bg-brand-primary active:bg-brand-primary-dark active:scale-[0.98] web:hover:bg-brand-primary-dark web:active:scale-[0.98]',\n secondary: 'bg-brand-secondary active:bg-brand-secondary-dark active:scale-[0.98] web:hover:bg-brand-secondary-dark web:active:scale-[0.98]',\n success: 'bg-status-success active:opacity-90 active:scale-[0.98] web:hover:opacity-90 web:active:scale-[0.98]',\n error: 'bg-status-error active:opacity-90 active:scale-[0.98] web:hover:opacity-90 web:active:scale-[0.98]',\n warning: 'bg-status-warning active:opacity-90 active:scale-[0.98] web:hover:opacity-90 web:active:scale-[0.98]',\n info: 'bg-status-info active:opacity-90 active:scale-[0.98] web:hover:opacity-90 web:active:scale-[0.98]',\n },\n outline: {\n primary: 'border-2 border-brand-primary bg-transparent active:bg-brand-primary-subtle active:scale-[0.98] web:hover:bg-brand-primary-subtle web:active:scale-[0.98]',\n secondary: 'border-2 border-brand-secondary bg-transparent active:bg-brand-secondary-subtle active:scale-[0.98] web:hover:bg-brand-secondary-subtle web:active:scale-[0.98]',\n success: 'border-2 border-status-success bg-transparent active:bg-status-success-subtle active:scale-[0.98] web:hover:bg-status-success-subtle web:active:scale-[0.98]',\n error: 'border-2 border-status-error bg-transparent active:bg-status-error-subtle active:scale-[0.98] web:hover:bg-status-error-subtle web:active:scale-[0.98]',\n warning: 'border-2 border-status-warning bg-transparent active:bg-status-warning-subtle active:scale-[0.98] web:hover:bg-status-warning-subtle web:active:scale-[0.98]',\n info: 'border-2 border-status-info bg-transparent active:bg-status-info-subtle active:scale-[0.98] web:hover:bg-status-info-subtle web:active:scale-[0.98]',\n },\n ghost: {\n primary: 'bg-transparent active:bg-brand-primary-subtle active:scale-[0.98] web:hover:bg-brand-primary-subtle web:active:scale-[0.98]',\n secondary: 'bg-transparent active:bg-brand-secondary-subtle active:scale-[0.98] web:hover:bg-brand-secondary-subtle web:active:scale-[0.98]',\n success: 'bg-transparent active:bg-status-success-subtle active:scale-[0.98] web:hover:bg-status-success-subtle web:active:scale-[0.98]',\n error: 'bg-transparent active:bg-status-error-subtle active:scale-[0.98] web:hover:bg-status-error-subtle web:active:scale-[0.98]',\n warning: 'bg-transparent active:bg-status-warning-subtle active:scale-[0.98] web:hover:bg-status-warning-subtle web:active:scale-[0.98]',\n info: 'bg-transparent active:bg-status-info-subtle active:scale-[0.98] web:hover:bg-status-info-subtle web:active:scale-[0.98]',\n },\n link: {\n primary: 'bg-transparent',\n secondary: 'bg-transparent',\n success: 'bg-transparent',\n error: 'bg-transparent',\n warning: 'bg-transparent',\n info: 'bg-transparent',\n },\n}\n\nconst textStyles: Record<ButtonVariant, Record<ButtonColor, string>> = {\n solid: {\n primary: 'text-white',\n secondary: 'text-white',\n success: 'text-white',\n error: 'text-white',\n warning: 'text-white',\n info: 'text-white',\n },\n outline: {\n primary: 'text-brand-primary',\n secondary: 'text-brand-secondary',\n success: 'text-status-success',\n error: 'text-status-error',\n warning: 'text-status-warning',\n info: 'text-status-info',\n },\n ghost: {\n primary: 'text-brand-primary',\n secondary: 'text-brand-secondary',\n success: 'text-status-success',\n error: 'text-status-error',\n warning: 'text-status-warning',\n info: 'text-status-info',\n },\n link: {\n primary: 'text-brand-primary web:hover:underline',\n secondary: 'text-brand-secondary web:hover:underline',\n success: 'text-status-success web:hover:underline',\n error: 'text-status-error web:hover:underline',\n warning: 'text-status-warning web:hover:underline',\n info: 'text-status-info web:hover:underline',\n },\n}\n\nconst sizeStyles: Record<ButtonSize, string> = {\n sm: 'px-4 py-1.5 min-h-[32px]',\n md: 'px-5 py-2 min-h-[40px]',\n lg: 'px-6 py-2.5 min-h-[48px]',\n}\n\n// Icon button sizes (square aspect ratio)\nconst iconButtonSizeStyles: Record<ButtonSize, string> = {\n sm: 'w-8 h-8 p-0',\n md: 'w-10 h-10 p-0',\n lg: 'w-12 h-12 p-0',\n}\n\nconst textSizeStyles: Record<ButtonSize, string> = {\n sm: 'text-sm',\n md: 'text-sm',\n lg: 'text-base',\n}\n\n/**\n * Button component following compound component pattern.\n *\n * @example\n * <Button variant=\"solid\" color=\"primary\">\n * <ButtonText>Click me</ButtonText>\n * </Button>\n *\n * // Or with icon\n * <Button variant=\"outline\" color=\"secondary\">\n * <ButtonIcon as={PlusIcon} />\n * <ButtonText>Add item</ButtonText>\n * </Button>\n */\nexport const Button = forwardRef<View, ButtonProps>(function Button(\n {\n variant = 'solid',\n size = 'md',\n color = 'primary',\n isIconButton = false,\n isDisabled = false,\n isLoading = false,\n loadingText,\n fullWidth = false,\n className,\n children,\n ...props\n },\n ref\n) {\n const disabled = isDisabled || isLoading\n\n return (\n <Pressable\n ref={ref}\n disabled={disabled}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled }}\n className={cn(\n // Base styles\n 'flex-row items-center justify-center rounded-md transition-all duration-150',\n // Variant + color styles\n variantStyles[variant][color],\n // Size styles (icon button vs regular)\n isIconButton ? iconButtonSizeStyles[size] : sizeStyles[size],\n // Full width\n fullWidth && 'w-full',\n // Disabled styles - more refined\n disabled && 'opacity-40 cursor-not-allowed active:scale-100 web:active:scale-100',\n // Link variant has no padding\n variant === 'link' && 'px-0 py-0 min-h-0',\n className\n )}\n {...props}\n >\n {isLoading && (\n <ActivityIndicator\n size=\"small\"\n color={variant === 'solid' ? semanticColorsDark['on-brand-primary'] : undefined}\n className=\"mr-2\"\n />\n )}\n {isLoading && loadingText ? (\n <Text\n className={cn(\n 'font-semibold',\n textSizeStyles[size],\n textStyles[variant][color]\n )}\n >\n {loadingText}\n </Text>\n ) : (\n children\n )}\n </Pressable>\n )\n})\n\nexport interface ButtonTextProps {\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Text component for Button. Use inside Button for consistent styling.\n */\nexport function ButtonText({ children, className }: ButtonTextProps) {\n return (\n <Text className={cn('font-semibold text-inherit', className)}>\n {children}\n </Text>\n )\n}\n\nexport interface ButtonIconProps {\n /** Icon component to render */\n as: React.ComponentType<{ size?: number; color?: string; className?: string }>\n /** Icon size */\n size?: number\n /** Additional className */\n className?: string\n}\n\n/**\n * Icon component for Button. Use inside Button for icons.\n */\nexport function ButtonIcon({ as: Icon, size = 16, className }: ButtonIconProps) {\n return <Icon size={size} className={cn('text-inherit', className)} />\n}\n\nexport interface ButtonSpinnerProps {\n className?: string\n}\n\n/**\n * Spinner component for Button loading state.\n */\nexport function ButtonSpinner({ className }: ButtonSpinnerProps) {\n return <ActivityIndicator size=\"small\" className={cn('text-inherit', className)} />\n}\n","import React, { forwardRef, useState } from 'react'\nimport { TextInput, View, Text, Pressable, type TextInputProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type InputSize = 'sm' | 'md' | 'lg'\nexport type InputVariant = 'outline' | 'filled' | 'underline'\n\nexport interface InputProps extends Omit<TextInputProps, 'editable'> {\n /** Input size */\n size?: InputSize\n /** Visual variant */\n variant?: InputVariant\n /** Whether the input is disabled */\n isDisabled?: boolean\n /** Whether the input has an error */\n isInvalid?: boolean\n /** Whether the input is read-only */\n isReadOnly?: boolean\n /** Whether the input is required */\n isRequired?: boolean\n /** Whether this is a multiline textarea */\n multiline?: boolean\n /** Number of visible lines for multiline */\n numberOfLines?: number\n /** Label text */\n label?: string\n /** Helper text shown below input */\n helperText?: string\n /** Error message (shown when isInvalid is true) */\n errorMessage?: string\n /** Left element/icon */\n leftElement?: React.ReactNode\n /** Right element/icon */\n rightElement?: React.ReactNode\n /** Additional className for the container */\n className?: string\n /** Additional className for the input */\n inputClassName?: string\n}\n\nconst sizeStyles: Record<InputSize, string> = {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-4 text-base',\n lg: 'h-12 px-4 text-lg',\n}\n\nconst multilineSizeStyles: Record<InputSize, string> = {\n sm: 'min-h-[80px] px-3 py-2 text-sm',\n md: 'min-h-[100px] px-4 py-3 text-base',\n lg: 'min-h-[120px] px-4 py-3 text-lg',\n}\n\nconst variantStyles: Record<InputVariant, { base: string; focus: string; hover: string; error: string }> = {\n outline: {\n base: 'border border-border-input rounded-md bg-transparent',\n hover: 'web:hover:border-border-input-hover',\n focus: 'border-border-input-focus',\n error: 'border-border-input-error',\n },\n filled: {\n base: 'border border-transparent rounded-md bg-surface-input',\n hover: 'web:hover:border-border-input-hover',\n focus: 'border-border-input-focus bg-transparent',\n error: 'border-border-input-error',\n },\n underline: {\n base: 'border-b border-border-input rounded-none bg-transparent',\n hover: 'web:hover:border-border-input-hover',\n focus: 'border-border-input-focus',\n error: 'border-border-input-error',\n },\n}\n\n/**\n * Input component for text entry.\n *\n * @example\n * <Input\n * label=\"Email\"\n * placeholder=\"Enter your email\"\n * helperText=\"We'll never share your email\"\n * />\n *\n * // With error state\n * <Input\n * label=\"Password\"\n * isInvalid\n * errorMessage=\"Password is required\"\n * />\n */\nexport const Input = forwardRef<TextInput, InputProps>(function Input(\n {\n size = 'md',\n variant = 'outline',\n isDisabled = false,\n isInvalid = false,\n isReadOnly = false,\n isRequired = false,\n multiline = false,\n numberOfLines = 4,\n label,\n helperText,\n errorMessage,\n leftElement,\n rightElement,\n className,\n inputClassName,\n onFocus,\n onBlur,\n ...props\n },\n ref\n) {\n const [isFocused, setIsFocused] = useState(false)\n\n const handleFocus = (e: any) => {\n setIsFocused(true)\n onFocus?.(e)\n }\n\n const handleBlur = (e: any) => {\n setIsFocused(false)\n onBlur?.(e)\n }\n\n const showError = isInvalid && errorMessage\n const showHelper = !showError && helperText\n\n return (\n <View className={cn('w-full', className)}>\n {label && (\n <Text className=\"mb-1.5 text-sm font-medium text-text-primary\">\n {label}\n {isRequired && <Text className=\"text-status-error ml-0.5\">*</Text>}\n </Text>\n )}\n\n <View\n className={cn(\n 'flex-row transition-colors duration-150',\n multiline ? 'items-start' : 'items-center',\n variantStyles[variant].base,\n !isDisabled && !isInvalid && variantStyles[variant].hover,\n isFocused && variantStyles[variant].focus,\n isInvalid && variantStyles[variant].error,\n isDisabled && 'opacity-40 cursor-not-allowed'\n )}\n >\n {leftElement && (\n <View className={cn('pl-3 pr-1', multiline && 'pt-3')}>\n {leftElement}\n </View>\n )}\n\n <TextInput\n ref={ref}\n editable={!isDisabled && !isReadOnly}\n accessibilityLabel={label}\n accessibilityState={{\n disabled: isDisabled,\n }}\n multiline={multiline}\n numberOfLines={multiline ? numberOfLines : 1}\n textAlignVertical={multiline ? 'top' : 'center'}\n placeholderTextColor=\"var(--color-text-tertiary)\"\n onFocus={handleFocus}\n onBlur={handleBlur}\n className={cn(\n 'flex-1 text-text-primary',\n multiline ? multilineSizeStyles[size] : sizeStyles[size],\n leftElement && 'pl-1',\n rightElement && 'pr-1',\n inputClassName\n )}\n {...props}\n />\n\n {rightElement && (\n <View className={cn('pl-1 pr-3', multiline && 'pt-3')}>\n {rightElement}\n </View>\n )}\n </View>\n\n {showHelper && (\n <Text className=\"mt-1.5 text-xs text-text-secondary\">\n {helperText}\n </Text>\n )}\n\n {showError && (\n <Text className=\"mt-1.5 text-xs text-status-error\">\n {errorMessage}\n </Text>\n )}\n </View>\n )\n})\n\nexport interface InputGroupProps {\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Container for grouping related inputs.\n */\nexport function InputGroup({ children, className }: InputGroupProps) {\n return (\n <View className={cn('flex-col gap-4', className)}>\n {children}\n </View>\n )\n}\n\nexport interface PasswordInputProps extends Omit<InputProps, 'secureTextEntry' | 'rightElement'> {\n /** Custom show password icon */\n showIcon?: React.ReactNode\n /** Custom hide password icon */\n hideIcon?: React.ReactNode\n}\n\n/**\n * Password input with visibility toggle.\n *\n * @example\n * <PasswordInput\n * label=\"Password\"\n * placeholder=\"Enter your password\"\n * />\n */\nexport const PasswordInput = forwardRef<TextInput, PasswordInputProps>(function PasswordInput(\n { showIcon, hideIcon, ...props },\n ref\n) {\n const [isVisible, setIsVisible] = useState(false)\n\n const toggleVisibility = () => setIsVisible(!isVisible)\n\n // Default eye icons (simple SVG-like views)\n const defaultShowIcon = (\n <View className=\"w-5 h-5 items-center justify-center\">\n <View className=\"w-3 h-3 rounded-full border-2 border-text-secondary\" />\n <View className=\"absolute w-1.5 h-1.5 rounded-full bg-text-secondary\" />\n </View>\n )\n\n const defaultHideIcon = (\n <View className=\"w-5 h-5 items-center justify-center\">\n <View className=\"w-3 h-3 rounded-full border-2 border-text-secondary\" />\n <View className=\"absolute w-1.5 h-1.5 rounded-full bg-text-secondary\" />\n <View className=\"absolute w-5 h-0.5 bg-text-secondary rotate-45\" />\n </View>\n )\n\n return (\n <Input\n ref={ref}\n secureTextEntry={!isVisible}\n rightElement={\n <Pressable\n onPress={toggleVisibility}\n accessibilityRole=\"button\"\n accessibilityLabel={isVisible ? 'Hide password' : 'Show password'}\n className=\"p-1 rounded active:opacity-70\"\n >\n {isVisible ? (hideIcon || defaultHideIcon) : (showIcon || defaultShowIcon)}\n </Pressable>\n }\n {...props}\n />\n )\n})\n","/**\n * Theme Configuration\n *\n * Maps semantic tokens to CSS custom properties for runtime theming.\n * Dark mode is the default theme.\n */\n\nimport { semanticColorsLight, semanticColorsDark, type ThemeMode } from './tokens/semantic'\n\n// CSS custom properties for light mode\nexport const lightThemeCSSVars = {\n '--color-brand-primary': semanticColorsLight['brand-primary'],\n '--color-brand-primary-light': semanticColorsLight['brand-primary-light'],\n '--color-brand-primary-dark': semanticColorsLight['brand-primary-dark'],\n '--color-brand-primary-subtle': semanticColorsLight['brand-primary-subtle'],\n '--color-brand-secondary': semanticColorsLight['brand-secondary'],\n '--color-brand-secondary-light': semanticColorsLight['brand-secondary-light'],\n '--color-brand-secondary-dark': semanticColorsLight['brand-secondary-dark'],\n '--color-brand-secondary-subtle': semanticColorsLight['brand-secondary-subtle'],\n\n '--color-on-brand-primary': semanticColorsLight['on-brand-primary'],\n '--color-on-brand-secondary': semanticColorsLight['on-brand-secondary'],\n\n '--color-status-success': semanticColorsLight['status-success'],\n '--color-status-success-subtle': semanticColorsLight['status-success-subtle'],\n '--color-status-error': semanticColorsLight['status-error'],\n '--color-status-error-subtle': semanticColorsLight['status-error-subtle'],\n '--color-status-warning': semanticColorsLight['status-warning'],\n '--color-status-warning-subtle': semanticColorsLight['status-warning-subtle'],\n '--color-status-info': semanticColorsLight['status-info'],\n '--color-status-info-subtle': semanticColorsLight['status-info-subtle'],\n\n '--color-text-primary': semanticColorsLight['text-primary'],\n '--color-text-secondary': semanticColorsLight['text-secondary'],\n '--color-text-tertiary': semanticColorsLight['text-tertiary'],\n '--color-text-disabled': semanticColorsLight['text-disabled'],\n '--color-text-inverse': semanticColorsLight['text-inverse'],\n '--color-text-link': semanticColorsLight['text-link'],\n\n '--color-surface-base': semanticColorsLight['surface-base'],\n '--color-surface-elevated': semanticColorsLight['surface-elevated'],\n '--color-surface-raised': semanticColorsLight['surface-raised'],\n\n '--color-background-base': semanticColorsLight['background-base'],\n '--color-background-default': semanticColorsLight['background-default'],\n '--color-background-subtle': semanticColorsLight['background-subtle'],\n\n '--color-border-default': semanticColorsLight['border-default'],\n '--color-border-subtle': semanticColorsLight['border-subtle'],\n '--color-border-strong': semanticColorsLight['border-strong'],\n '--color-border-focus': semanticColorsLight['border-focus'],\n\n '--color-interactive-hover': semanticColorsLight['interactive-hover'],\n '--color-interactive-focus': semanticColorsLight['interactive-focus'],\n '--color-interactive-active': semanticColorsLight['interactive-active'],\n '--color-interactive-selected': semanticColorsLight['interactive-selected'],\n '--color-interactive-disabled': semanticColorsLight['interactive-disabled'],\n\n '--color-divider': semanticColorsLight['divider'],\n} as const\n\n// CSS custom properties for dark mode (default)\nexport const darkThemeCSSVars = {\n '--color-brand-primary': semanticColorsDark['brand-primary'],\n '--color-brand-primary-light': semanticColorsDark['brand-primary-light'],\n '--color-brand-primary-dark': semanticColorsDark['brand-primary-dark'],\n '--color-brand-primary-subtle': semanticColorsDark['brand-primary-subtle'],\n '--color-brand-secondary': semanticColorsDark['brand-secondary'],\n '--color-brand-secondary-light': semanticColorsDark['brand-secondary-light'],\n '--color-brand-secondary-dark': semanticColorsDark['brand-secondary-dark'],\n '--color-brand-secondary-subtle': semanticColorsDark['brand-secondary-subtle'],\n\n '--color-on-brand-primary': semanticColorsDark['on-brand-primary'],\n '--color-on-brand-secondary': semanticColorsDark['on-brand-secondary'],\n\n '--color-status-success': semanticColorsDark['status-success'],\n '--color-status-success-subtle': semanticColorsDark['status-success-subtle'],\n '--color-status-error': semanticColorsDark['status-error'],\n '--color-status-error-subtle': semanticColorsDark['status-error-subtle'],\n '--color-status-warning': semanticColorsDark['status-warning'],\n '--color-status-warning-subtle': semanticColorsDark['status-warning-subtle'],\n '--color-status-info': semanticColorsDark['status-info'],\n '--color-status-info-subtle': semanticColorsDark['status-info-subtle'],\n\n '--color-text-primary': semanticColorsDark['text-primary'],\n '--color-text-secondary': semanticColorsDark['text-secondary'],\n '--color-text-tertiary': semanticColorsDark['text-tertiary'],\n '--color-text-disabled': semanticColorsDark['text-disabled'],\n '--color-text-inverse': semanticColorsDark['text-inverse'],\n '--color-text-link': semanticColorsDark['text-link'],\n\n '--color-surface-base': semanticColorsDark['surface-base'],\n '--color-surface-elevated': semanticColorsDark['surface-elevated'],\n '--color-surface-raised': semanticColorsDark['surface-raised'],\n\n '--color-background-base': semanticColorsDark['background-base'],\n '--color-background-default': semanticColorsDark['background-default'],\n '--color-background-subtle': semanticColorsDark['background-subtle'],\n\n '--color-border-default': semanticColorsDark['border-default'],\n '--color-border-subtle': semanticColorsDark['border-subtle'],\n '--color-border-strong': semanticColorsDark['border-strong'],\n '--color-border-focus': semanticColorsDark['border-focus'],\n\n '--color-interactive-hover': semanticColorsDark['interactive-hover'],\n '--color-interactive-focus': semanticColorsDark['interactive-focus'],\n '--color-interactive-active': semanticColorsDark['interactive-active'],\n '--color-interactive-selected': semanticColorsDark['interactive-selected'],\n '--color-interactive-disabled': semanticColorsDark['interactive-disabled'],\n\n '--color-divider': semanticColorsDark['divider'],\n} as const\n\n// Helper to get CSS vars for a theme mode\nexport function getThemeCSSVars(mode: ThemeMode) {\n return mode === 'dark' ? darkThemeCSSVars : lightThemeCSSVars\n}\n\n// Gluestack UI theme configuration\nexport const gluestackConfig = {\n tokens: {\n colors: {\n // Map to our semantic colors via CSS vars\n primary500: 'var(--color-brand-primary)',\n primary600: 'var(--color-brand-primary-dark)',\n primary400: 'var(--color-brand-primary-light)',\n\n secondary500: 'var(--color-brand-secondary)',\n secondary600: 'var(--color-brand-secondary-dark)',\n secondary400: 'var(--color-brand-secondary-light)',\n\n success500: 'var(--color-status-success)',\n error500: 'var(--color-status-error)',\n warning500: 'var(--color-status-warning)',\n info500: 'var(--color-status-info)',\n\n textLight: 'var(--color-text-primary)',\n textDark: 'var(--color-text-inverse)',\n\n backgroundLight: 'var(--color-background-default)',\n backgroundDark: 'var(--color-surface-base)',\n },\n space: {\n '0': 0,\n '1': 4,\n '2': 8,\n '3': 12,\n '4': 16,\n '5': 20,\n '6': 24,\n '8': 32,\n '10': 40,\n '12': 48,\n '16': 64,\n '20': 80,\n '24': 96,\n },\n radii: {\n none: 0,\n sm: 4,\n md: 8,\n lg: 12,\n xl: 16,\n '2xl': 24,\n full: 9999,\n },\n fontSizes: {\n xs: 12,\n sm: 14,\n md: 16,\n lg: 18,\n xl: 20,\n '2xl': 24,\n '3xl': 30,\n '4xl': 36,\n '5xl': 48,\n },\n },\n aliases: {\n bg: 'backgroundColor',\n p: 'padding',\n px: 'paddingHorizontal',\n py: 'paddingVertical',\n m: 'margin',\n mx: 'marginHorizontal',\n my: 'marginVertical',\n h: 'height',\n w: 'width',\n rounded: 'borderRadius',\n },\n} as const\n\nexport type ThemeConfig = typeof gluestackConfig\n","/**\n * Neumorphic Shadow Utilities\n * \n * Neumorphism creates soft, extruded UI using dual opposing shadows.\n * - Light source assumed from top-left\n * - Raised elements: dark shadow bottom-right, light highlight top-left\n * - Pressed elements: inverted with `inset` shadows\n */\n\nimport { Platform, type ViewStyle } from 'react-native'\n\n// ============================================================================\n// Color Math Utilities\n// ============================================================================\n\n/**\n * Parse a hex color to RGB values (0-255).\n * Supports both #RGB and #RRGGBB formats.\n */\nexport function hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const cleaned = hex.replace('#', '')\n \n let r: number, g: number, b: number\n \n if (cleaned.length === 3) {\n r = parseInt(cleaned[0] + cleaned[0], 16)\n g = parseInt(cleaned[1] + cleaned[1], 16)\n b = parseInt(cleaned[2] + cleaned[2], 16)\n } else if (cleaned.length === 6) {\n r = parseInt(cleaned.slice(0, 2), 16)\n g = parseInt(cleaned.slice(2, 4), 16)\n b = parseInt(cleaned.slice(4, 6), 16)\n } else {\n return null\n }\n \n return { r, g, b }\n}\n\n/**\n * Convert RGB (0-255) to HSV (h: 0-360, s: 0-1, v: 0-1).\n */\nexport function rgbToHsv(r: number, g: number, b: number): { h: number; s: number; v: number } {\n const rNorm = r / 255\n const gNorm = g / 255\n const bNorm = b / 255\n \n const max = Math.max(rNorm, gNorm, bNorm)\n const min = Math.min(rNorm, gNorm, bNorm)\n const delta = max - min\n \n // Value\n const v = max\n \n // Saturation\n const s = max === 0 ? 0 : delta / max\n \n // Hue\n let h = 0\n if (delta !== 0) {\n if (max === rNorm) {\n h = 60 * (((gNorm - bNorm) / delta) % 6)\n } else if (max === gNorm) {\n h = 60 * ((bNorm - rNorm) / delta + 2)\n } else {\n h = 60 * ((rNorm - gNorm) / delta + 4)\n }\n }\n if (h < 0) h += 360\n \n return { h, s, v }\n}\n\n/**\n * Convert HSV (h: 0-360, s: 0-1, v: 0-1) to RGB (0-255).\n */\nexport function hsvToRgb(h: number, s: number, v: number): { r: number; g: number; b: number } {\n const c = v * s\n const x = c * (1 - Math.abs((h / 60) % 2 - 1))\n const m = v - c\n \n let rPrime: number, gPrime: number, bPrime: number\n\n if (h >= 0 && h < 60) {\n rPrime = c; gPrime = x; bPrime = 0\n } else if (h >= 60 && h < 120) {\n rPrime = x; gPrime = c; bPrime = 0\n } else if (h >= 120 && h < 180) {\n rPrime = 0; gPrime = c; bPrime = x\n } else if (h >= 180 && h < 240) {\n rPrime = 0; gPrime = x; bPrime = c\n } else if (h >= 240 && h < 300) {\n rPrime = x; gPrime = 0; bPrime = c\n } else {\n rPrime = c; gPrime = 0; bPrime = x\n }\n \n return {\n r: Math.round((rPrime + m) * 255),\n g: Math.round((gPrime + m) * 255),\n b: Math.round((bPrime + m) * 255),\n }\n}\n\n/**\n * Convert RGB values to hex string.\n */\nexport function rgbToHex(r: number, g: number, b: number): string {\n const toHex = (n: number) => {\n const clamped = Math.max(0, Math.min(255, Math.round(n)))\n return clamped.toString(16).padStart(2, '0')\n }\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`\n}\n\n/**\n * Lighten a color by increasing its HSV Value component.\n * \n * @param hex - The hex color to lighten\n * @param amount - Amount to increase V by (0-1)\n */\nexport function lighten(hex: string, amount: number = 0.1): string {\n const rgb = hexToRgb(hex)\n if (!rgb) return hex\n \n const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b)\n const newV = Math.min(1, hsv.v + amount)\n \n const newRgb = hsvToRgb(hsv.h, hsv.s, newV)\n return rgbToHex(newRgb.r, newRgb.g, newRgb.b)\n}\n\n/**\n * Darken a color by decreasing its HSV Value component.\n * \n * @param hex - The hex color to darken\n * @param amount - Amount to decrease V by (0-1)\n */\nexport function darken(hex: string, amount: number = 0.1): string {\n const rgb = hexToRgb(hex)\n if (!rgb) return hex\n \n const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b)\n const newV = Math.max(0, hsv.v - amount)\n \n const newRgb = hsvToRgb(hsv.h, hsv.s, newV)\n return rgbToHex(newRgb.r, newRgb.g, newRgb.b)\n}\n\n/**\n * Get hover colors for a button based on its background color.\n * Automatically adapts intensity based on the color's luminance.\n * \n * @param bgColor - The button's background color (hex)\n * @param intensity - How strong the hover effect should be ('subtle' | 'medium' | 'strong')\n */\nexport function getHoverColors(\n bgColor: string, \n intensity: 'subtle' | 'medium' | 'strong' = 'medium'\n): { raised: string; pressed: string } {\n const amounts = {\n subtle: 0.01,\n medium: 0.02,\n strong: 0.03,\n }\n \n const amount = amounts[intensity]\n \n return {\n raised: lighten(bgColor, amount), // Raised hover: lighten (lifting up)\n pressed: darken(bgColor, amount), // Pressed hover: darken (pressing down)\n }\n}\n\n/**\n * Check if a color is considered \"dark\" (for choosing text color).\n * Uses HSV Value component for simplicity.\n */\nexport function isDark(hex: string): boolean {\n const rgb = hexToRgb(hex)\n if (!rgb) return true\n const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b)\n return hsv.v < 0.6\n}\n\n/**\n * Shadow configuration for different surface colors.\n * Each surface needs calibrated light/dark shadow colors.\n * \n * - dark: soft shadow for depth (bottom-right)\n * - light: sharp rim highlight (top-left) - higher opacity for crisp edge\n * - darker: deeper shadow for pressed/inset states\n */\nexport const shadowColors = {\n // For charcoal surfaces (~#2C2C2C to #3C3C3C)\n charcoal: {\n dark: 'rgba(0, 0, 0, 0.5)',\n light: 'rgba(255, 255, 255, 0.12)', // brighter for crisp rim light\n darker: 'rgba(0, 0, 0, 0.6)',\n },\n // For neutral dark surfaces (~#1F2937)\n neutralDark: {\n dark: 'rgba(0, 0, 0, 0.4)',\n light: 'rgba(255, 255, 255, 0.08)',\n darker: 'rgba(0, 0, 0, 0.5)',\n },\n // For light surfaces (white/light gray backgrounds)\n neutralLight: {\n dark: 'rgba(0, 0, 0, 0.15)', // Visible dark shadow for depth on light backgrounds\n light: 'rgba(255, 255, 255, 1)', // Bright highlight for raised effect (visible on light gray)\n darker: 'rgba(0, 0, 0, 0.2)', // Deeper shadow for pressed states\n },\n}\n\nexport type ShadowIntensity = 'subtle' | 'medium' | 'strong'\nexport type ShadowSurface = keyof typeof shadowColors\n\ninterface ShadowConfig {\n offset: number\n blur: number\n}\n\nconst intensityConfig: Record<ShadowIntensity, ShadowConfig> = {\n subtle: { offset: 1, blur: 2 }, // very light, barely visible\n medium: { offset: 2, blur: 4 }, // noticeable but restrained\n strong: { offset: 2, blur: 5 }, // slightly deeper blur, same offset as medium\n}\n\n/**\n * Creates a raised (elevated) neumorphic shadow.\n * Element appears to float above the surface.\n * \n * Uses a soft dark shadow (bottom-right) and a sharp rim light (top-left).\n */\nexport function createRaisedShadow(\n surface: ShadowSurface = 'charcoal',\n intensity: ShadowIntensity = 'medium'\n): ViewStyle {\n const colors = shadowColors[surface]\n const { offset, blur } = intensityConfig[intensity]\n \n // Rim light is sharper: same offset as shadow, but minimal blur for crisp edge\n const rimBlur = 1 // Very tight blur for crisp rim\n \n return Platform.select({\n web: {\n boxShadow: `${offset}px ${offset}px ${blur}px ${colors.dark}, -${offset}px -${offset}px ${rimBlur}px ${colors.light}`,\n } as any,\n default: {\n // React Native shadow approximation (limited compared to web)\n shadowColor: '#000',\n shadowOffset: { width: offset, height: offset },\n shadowOpacity: 0.3,\n shadowRadius: blur / 2,\n elevation: offset,\n },\n }) as ViewStyle\n}\n\n/**\n * Creates a pressed (inset) neumorphic shadow.\n * Element appears pushed into the surface.\n * \n * Uses a soft dark inset shadow (top-left) and a thin sharp rim light (bottom-right).\n */\nexport function createPressedShadow(\n surface: ShadowSurface = 'charcoal',\n intensity: ShadowIntensity = 'medium'\n): ViewStyle {\n const colors = shadowColors[surface]\n const { offset, blur } = intensityConfig[intensity]\n \n // Rim light is always thin and subtle for pressed states\n const rimOffset = 1 // Fixed thin rim\n const rimBlur = 1 // Very tight blur for crisp edge\n \n return Platform.select({\n web: {\n boxShadow: `inset ${offset}px ${offset}px ${blur}px ${colors.darker}, inset -${rimOffset}px -${rimOffset}px ${rimBlur}px ${colors.light}`,\n } as any,\n default: {\n // React Native doesn't support inset shadows, approximate with darker bg\n shadowOpacity: 0,\n elevation: 0,\n },\n }) as ViewStyle\n}\n\n/**\n * Creates a flat (no shadow) style for hover states.\n */\nexport function createFlatShadow(): ViewStyle {\n return Platform.select({\n web: {\n boxShadow: 'none',\n } as any,\n default: {\n shadowOpacity: 0,\n elevation: 0,\n },\n }) as ViewStyle\n}\n\n/**\n * Creates a hover shadow for raised elements.\n * Reduces shadow depth but keeps a subtle rim light to maintain visual boundary.\n */\nexport function createRaisedHoverShadow(\n surface: ShadowSurface = 'charcoal',\n intensity: ShadowIntensity = 'medium'\n): ViewStyle {\n const colors = shadowColors[surface]\n const { offset, blur } = intensityConfig[intensity]\n \n // Reduce shadow depth by half for hover, keep minimal rim light\n const hoverOffset = Math.max(1, Math.round(offset / 2))\n const hoverBlur = Math.max(1, Math.round(blur / 2))\n const rimBlur = 1\n \n return Platform.select({\n web: {\n // Keep same offsets as normal state for rim to prevent \"shrinking\" effect\n boxShadow: `${hoverOffset}px ${hoverOffset}px ${hoverBlur}px ${colors.dark}, -${offset}px -${offset}px ${rimBlur}px ${colors.light}`,\n } as any,\n default: {\n shadowColor: '#000',\n shadowOffset: { width: hoverOffset, height: hoverOffset },\n shadowOpacity: 0.2,\n shadowRadius: hoverBlur / 2,\n elevation: hoverOffset,\n },\n }) as ViewStyle\n}\n\n/**\n * Creates a hover shadow for pressed elements.\n * Reduces shadow depth but keeps a subtle rim light to maintain visual boundary.\n */\nexport function createPressedHoverShadow(\n surface: ShadowSurface = 'charcoal',\n intensity: ShadowIntensity = 'medium'\n): ViewStyle {\n const colors = shadowColors[surface]\n const { offset, blur } = intensityConfig[intensity]\n \n // Reduce shadow depth by half for hover, keep minimal rim light\n const hoverOffset = Math.max(1, Math.round(offset / 2))\n const hoverBlur = Math.max(1, Math.round(blur / 2))\n const rimBlur = 1\n \n return Platform.select({\n web: {\n // Keep rim offset at 1px (same as pressed normal) to prevent \"shrinking\" effect\n boxShadow: `inset ${hoverOffset}px ${hoverOffset}px ${hoverBlur}px ${colors.darker}, inset -1px -1px ${rimBlur}px ${colors.light}`,\n } as any,\n default: {\n shadowOpacity: 0,\n elevation: 0,\n },\n }) as ViewStyle\n}\n\n/**\n * Pre-built shadow presets for common use cases.\n */\nexport const neumorphicShadows = {\n // Charcoal surface shadows (for dark toolbars, cards)\n charcoal: {\n raised: {\n subtle: createRaisedShadow('charcoal', 'subtle'),\n medium: createRaisedShadow('charcoal', 'medium'),\n strong: createRaisedShadow('charcoal', 'strong'),\n },\n raisedHover: {\n subtle: createRaisedHoverShadow('charcoal', 'subtle'),\n medium: createRaisedHoverShadow('charcoal', 'medium'),\n strong: createRaisedHoverShadow('charcoal', 'strong'),\n },\n pressed: {\n subtle: createPressedShadow('charcoal', 'subtle'),\n medium: createPressedShadow('charcoal', 'medium'),\n strong: createPressedShadow('charcoal', 'strong'),\n },\n pressedHover: {\n subtle: createPressedHoverShadow('charcoal', 'subtle'),\n medium: createPressedHoverShadow('charcoal', 'medium'),\n strong: createPressedHoverShadow('charcoal', 'strong'),\n },\n flat: createFlatShadow(),\n },\n // Neutral dark surface shadows\n neutralDark: {\n raised: {\n subtle: createRaisedShadow('neutralDark', 'subtle'),\n medium: createRaisedShadow('neutralDark', 'medium'),\n strong: createRaisedShadow('neutralDark', 'strong'),\n },\n raisedHover: {\n subtle: createRaisedHoverShadow('neutralDark', 'subtle'),\n medium: createRaisedHoverShadow('neutralDark', 'medium'),\n strong: createRaisedHoverShadow('neutralDark', 'strong'),\n },\n pressed: {\n subtle: createPressedShadow('neutralDark', 'subtle'),\n medium: createPressedShadow('neutralDark', 'medium'),\n strong: createPressedShadow('neutralDark', 'strong'),\n },\n pressedHover: {\n subtle: createPressedHoverShadow('neutralDark', 'subtle'),\n medium: createPressedHoverShadow('neutralDark', 'medium'),\n strong: createPressedHoverShadow('neutralDark', 'strong'),\n },\n flat: createFlatShadow(),\n },\n // Neutral light surface shadows\n neutralLight: {\n raised: {\n subtle: createRaisedShadow('neutralLight', 'subtle'),\n medium: createRaisedShadow('neutralLight', 'medium'),\n strong: createRaisedShadow('neutralLight', 'strong'),\n },\n raisedHover: {\n subtle: createRaisedHoverShadow('neutralLight', 'subtle'),\n medium: createRaisedHoverShadow('neutralLight', 'medium'),\n strong: createRaisedHoverShadow('neutralLight', 'strong'),\n },\n pressed: {\n subtle: createPressedShadow('neutralLight', 'subtle'),\n medium: createPressedShadow('neutralLight', 'medium'),\n strong: createPressedShadow('neutralLight', 'strong'),\n },\n pressedHover: {\n subtle: createPressedHoverShadow('neutralLight', 'subtle'),\n medium: createPressedHoverShadow('neutralLight', 'medium'),\n strong: createPressedHoverShadow('neutralLight', 'strong'),\n },\n flat: createFlatShadow(),\n },\n}\n","/**\n * Elevation System\n * \n * A unified depth system where each elevation level corresponds to:\n * - Calculated surface color (derived from base using lighten)\n * - Shadow intensity and style (raised/pressed)\n * - Dynamically calculated shadow colors (derived from surface color)\n * - Semantic name for reference\n * \n * Elevation range: -2 (deep inset) to +5 (floating overlay)\n * \n * Negative elevations: Inset/pressed elements (sunken into surface)\n * Zero elevation: Base surface (background/page level)\n * Positive elevations: Raised elements (floating above surface)\n * \n * All colors are calculated dynamically from a base surface color,\n * allowing for custom surfaces and consistent color relationships.\n * \n * Lighting Model: Light source from upper-right corner\n * - Raised elements are always lighter than base (consistent across themes)\n * - Base colors must allow sufficient lightening in both themes\n */\n\nimport { Platform, type ViewStyle } from 'react-native'\nimport { lighten, darken, hexToRgb, rgbToHsv, hsvToRgb, rgbToHex } from './shadows'\nimport { semanticColorsLight, semanticColorsDark } from './tokens/semantic'\n\nexport type ElevationLevel = -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5\n\nexport interface ElevationConfig {\n /** Semantic name for this elevation level */\n name: string\n /** Amount to lighten base color (0-1) */\n colorAdjustment: number\n /** Shadow intensity */\n shadowIntensity: 'subtle' | 'medium' | 'strong'\n /** Shadow style: raised (floating) or pressed (inset) */\n shadowStyle: 'raised' | 'pressed'\n /** Description of use case */\n description: string\n}\n\nexport const elevationSystem: Record<ElevationLevel, ElevationConfig> = {\n // Deep inset (recessed input fields, deeply pressed buttons)\n [-2]: {\n name: 'deep-inset',\n colorAdjustment: 0,\n shadowIntensity: 'strong',\n shadowStyle: 'pressed',\n description: 'Deeply recessed elements (e.g., input fields, deeply pressed buttons)',\n },\n \n // Shallow inset (pressed buttons, sunken panels)\n [-1]: {\n name: 'inset',\n colorAdjustment: 0,\n shadowIntensity: 'medium',\n shadowStyle: 'pressed',\n description: 'Shallow inset elements (e.g., pressed buttons, sunken panels within cards)',\n },\n \n // Base level (page background, default surface)\n [0]: {\n name: 'base',\n colorAdjustment: 0,\n shadowIntensity: 'subtle',\n shadowStyle: 'raised',\n description: 'Base surface level (page background, default containers)',\n },\n \n // Level 1: Subtle elevation (outline cards, subtle containers)\n [1]: {\n name: 'subtle',\n colorAdjustment: 0.01,\n shadowIntensity: 'subtle',\n shadowStyle: 'raised',\n description: 'Subtle elevation (outline cards, subtle containers)',\n },\n \n // Level 2: Standard elevation (default cards, buttons)\n [2]: {\n name: 'standard',\n colorAdjustment: 0.02,\n shadowIntensity: 'medium',\n shadowStyle: 'raised',\n description: 'Standard elevation (default cards, raised buttons)',\n },\n \n // Level 3: Prominent elevation (important cards, modals)\n [3]: {\n name: 'prominent',\n colorAdjustment: 0.04,\n shadowIntensity: 'strong',\n shadowStyle: 'raised',\n description: 'Prominent elevation (important cards, modals, dropdowns)',\n },\n \n // Level 4: High elevation (overlays, popovers)\n [4]: {\n name: 'high',\n colorAdjustment: 0.06,\n shadowIntensity: 'strong',\n shadowStyle: 'raised',\n description: 'High elevation (overlays, popovers, tooltips)',\n },\n \n // Level 5: Floating (toasts, floating action buttons)\n [5]: {\n name: 'floating',\n colorAdjustment: 0.08,\n shadowIntensity: 'strong',\n shadowStyle: 'raised',\n description: 'Floating elevation (toasts, floating action buttons, highest z-index)',\n },\n}\n\n/**\n * Calculate rim light color from the BASE color.\n * Creates a consistent bright highlight with opacity that scales with elevation.\n * \n * The rim light represents light hitting the edge of raised elements from a \n * consistent light source. Uses ABSOLUTE HSV value (not relative lightening)\n * for consistent intensity across all surface colors.\n * \n * For colored surfaces: preserves hue/saturation, sets value to fixed bright level\n * For gray surfaces: uses white with appropriate opacity\n * \n * @param baseColor - The base surface color (hex)\n * @param level - Elevation level (used to scale opacity)\n */\nfunction calculateRimLightColor(baseColor: string, level: ElevationLevel): string {\n const rgb = hexToRgb(baseColor)\n if (!rgb) {\n return 'rgba(255, 255, 255, 0.5)'\n }\n \n const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b)\n const isLight = hsv.v > 0.6\n const isSaturated = hsv.s > 0.3 // Colored (not gray)\n \n // Opacity scales with elevation to compensate for lighter surfaces at higher levels\n // Range: +0% at level 1 to +20% at level 5\n const absLevel = Math.abs(level)\n const opacityBoost = Math.max(0, (absLevel - 1) * 0.05) // +5% per level above 1 (0% to 20%)\n \n if (isSaturated) {\n // For colored surfaces, preserve hue and saturation but set value to fixed bright level\n // This ensures consistent rim light intensity across all colored surfaces\n const rimLightValue = 0.95 // Fixed bright value for rim light\n const rimLightRgb = hsvToRgb(hsv.h, hsv.s * 0.3, rimLightValue) // Reduce saturation for brighter appearance\n \n // Base opacity + elevation boost, capped at 1.0\n const baseOpacity = isLight ? 0.9 : 0.5\n const finalOpacity = Math.min(1, baseOpacity + opacityBoost)\n return `rgba(${rimLightRgb.r}, ${rimLightRgb.g}, ${rimLightRgb.b}, ${finalOpacity.toFixed(2)})`\n } else {\n // For gray/neutral surfaces, use white with appropriate opacity\n const baseOpacity = isLight ? 0.9 : 0.12\n const finalOpacity = Math.min(1, baseOpacity + opacityBoost)\n return `rgba(255, 255, 255, ${finalOpacity.toFixed(2)})`\n }\n}\n\n/**\n * Calculate dark shadow colors from the surface color.\n * The dark shadow is cast BY the element, so it should match the surface color.\n * \n * Uses ABSOLUTE HSV value (not relative darkening) for consistent shadow intensity\n * across all surface colors - simulating a consistent light source.\n * \n * For colored surfaces: preserves hue/saturation, sets value to fixed dark level\n * For gray surfaces: uses black with appropriate opacity\n */\nfunction calculateDarkShadowColors(surfaceColor: string): {\n dark: string\n darker: string\n} {\n const rgb = hexToRgb(surfaceColor)\n if (!rgb) {\n return {\n dark: 'rgba(0, 0, 0, 0.3)',\n darker: 'rgba(0, 0, 0, 0.4)',\n }\n }\n \n const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b)\n const isLight = hsv.v > 0.6\n const isSaturated = hsv.s > 0.3\n \n if (isSaturated) {\n // For colored surfaces, preserve hue and saturation but set value to fixed dark level\n // This ensures consistent shadow intensity across all colored surfaces\n const darkShadowValue = 0.15 // Fixed dark value for shadows\n const darkShadowRgb = hsvToRgb(hsv.h, hsv.s, darkShadowValue)\n \n if (isLight) {\n return {\n dark: `rgba(${darkShadowRgb.r}, ${darkShadowRgb.g}, ${darkShadowRgb.b}, 0.3)`,\n darker: `rgba(${darkShadowRgb.r}, ${darkShadowRgb.g}, ${darkShadowRgb.b}, 0.4)`,\n }\n } else {\n return {\n dark: `rgba(${darkShadowRgb.r}, ${darkShadowRgb.g}, ${darkShadowRgb.b}, 0.5)`,\n darker: `rgba(${darkShadowRgb.r}, ${darkShadowRgb.g}, ${darkShadowRgb.b}, 0.6)`,\n }\n }\n } else {\n // For gray surfaces, use standard black shadows\n if (isLight) {\n return {\n dark: 'rgba(0, 0, 0, 0.2)',\n darker: 'rgba(0, 0, 0, 0.3)',\n }\n } else {\n return {\n dark: 'rgba(0, 0, 0, 0.5)',\n darker: 'rgba(0, 0, 0, 0.6)',\n }\n }\n }\n}\n\n/**\n * Get rim light size config.\n * Fixed 1px offset and blur for a consistent, crisp rim highlight.\n * Opacity scaling (in calculateRimLightColor) handles elevation differences.\n */\nfunction getRimLightConfig(): { offset: number; blur: number } {\n return {\n offset: 1, // Fixed 1px for crisp rim\n blur: 1, // Tight blur for crisp edge\n }\n}\n\n/**\n * Get elevation configuration for a given level\n */\nexport function getElevationConfig(level: ElevationLevel): ElevationConfig {\n return elevationSystem[level]\n}\n\n// Simple cache for elevation surface colors\nconst elevationSurfaceCache = new Map<string, string>()\nconst MAX_CACHE_SIZE = 100\n\nfunction getCacheKey(baseColor: string, level: ElevationLevel, theme: 'light' | 'dark'): string {\n return `${baseColor}-${level}-${theme}`\n}\n\nfunction calculateElevationSurface(\n baseColor: string,\n level: ElevationLevel,\n theme: 'light' | 'dark'\n): string {\n const config = elevationSystem[level]\n \n if (config.colorAdjustment === 0) {\n return baseColor\n }\n \n // For raised elevations (positive), always lighten (consistent lighting model)\n // Light source is from upper-right, so raised elements are always lighter\n // For inset elevations (negative), we keep base color (shadow creates depth)\n if (level < 0) {\n return baseColor // Inset elements use base color\n }\n \n // Always lighten for raised elements (consistent across themes)\n // Base colors must be chosen to allow sufficient lightening in dark mode\n return lighten(baseColor, config.colorAdjustment)\n}\n\n/**\n * Calculate surface color for an elevation level from a base color.\n * Results are cached to avoid redundant calculations.\n * \n * @param baseColor - Base surface color (hex)\n * @param level - Elevation level\n * @param theme - Current theme ('light' or 'dark')\n * @returns Calculated surface color (hex)\n */\nexport function getElevationSurface(\n baseColor: string,\n level: ElevationLevel,\n theme: 'light' | 'dark'\n): string {\n const cacheKey = getCacheKey(baseColor, level, theme)\n \n // Check cache\n if (elevationSurfaceCache.has(cacheKey)) {\n return elevationSurfaceCache.get(cacheKey)!\n }\n \n // Calculate\n const result = calculateElevationSurface(baseColor, level, theme)\n \n // Cache result (with size limit to prevent memory leaks)\n if (elevationSurfaceCache.size >= MAX_CACHE_SIZE) {\n // Remove oldest entry (simple FIFO)\n const firstKey = elevationSurfaceCache.keys().next().value!\n elevationSurfaceCache.delete(firstKey)\n }\n elevationSurfaceCache.set(cacheKey, result)\n \n return result\n}\n\n// Cache for shadow styles (less frequently used, smaller cache)\nconst elevationShadowCache = new Map<string, ViewStyle>()\nconst MAX_SHADOW_CACHE_SIZE = 50\n\nfunction getShadowCacheKey(baseColor: string, level: ElevationLevel, theme: 'light' | 'dark', isHovered: boolean): string {\n return `${baseColor}-${level}-${theme}-${isHovered}`\n}\n\nfunction calculateElevationShadow(\n baseColor: string,\n level: ElevationLevel,\n theme: 'light' | 'dark',\n isHovered: boolean = false\n): ViewStyle {\n const config = elevationSystem[level]\n \n // Base level has no shadow\n if (level === 0) {\n return {}\n }\n \n // Calculate the actual elevated surface color\n const elevatedSurfaceColor = calculateElevationSurface(baseColor, level, theme)\n \n // Rim light: calculated from BASE color (consistent across all elevations)\n // This represents a consistent light source - only size changes with elevation\n const rimLightColor = calculateRimLightColor(baseColor, level)\n \n // Dark shadow: calculated from ELEVATED surface color\n // The shadow is cast by the element, so it should match the surface\n const darkShadowColors = calculateDarkShadowColors(elevatedSurfaceColor)\n \n // Get shadow intensity config (for dark shadow)\n const intensityConfig = {\n subtle: { offset: 1, blur: 2 },\n medium: { offset: 2, blur: 4 },\n strong: { offset: 2, blur: 5 },\n }\n \n const { offset, blur } = intensityConfig[config.shadowIntensity]\n \n // Get rim light config (scales with elevation level)\n const rimConfig = getRimLightConfig()\n \n if (config.shadowStyle === 'pressed') {\n // Inset shadow (pressed elements)\n if (isHovered) {\n // Reduce shadow depth for hover\n const hoverOffset = Math.max(1, Math.round(offset / 2))\n const hoverBlur = Math.max(1, Math.round(blur / 2))\n return Platform.select({\n web: {\n boxShadow: `inset ${hoverOffset}px ${hoverOffset}px ${hoverBlur}px ${darkShadowColors.darker}, inset -${rimConfig.offset}px -${rimConfig.offset}px ${rimConfig.blur}px ${rimLightColor}`,\n } as any,\n default: {\n shadowOpacity: 0,\n elevation: 0,\n },\n }) as ViewStyle\n }\n \n return Platform.select({\n web: {\n boxShadow: `inset ${offset}px ${offset}px ${blur}px ${darkShadowColors.darker}, inset -${rimConfig.offset}px -${rimConfig.offset}px ${rimConfig.blur}px ${rimLightColor}`,\n } as any,\n default: {\n shadowOpacity: 0,\n elevation: 0,\n },\n }) as ViewStyle\n } else {\n // Raised shadow (floating elements)\n if (isHovered) {\n // Reduce shadow depth for hover\n const hoverOffset = Math.max(1, Math.round(offset / 2))\n const hoverBlur = Math.max(1, Math.round(blur / 2))\n return Platform.select({\n web: {\n boxShadow: `${hoverOffset}px ${hoverOffset}px ${hoverBlur}px ${darkShadowColors.dark}, -${rimConfig.offset}px -${rimConfig.offset}px ${rimConfig.blur}px ${rimLightColor}`,\n } as any,\n default: {\n shadowColor: '#000',\n shadowOffset: { width: hoverOffset, height: hoverOffset },\n shadowOpacity: 0.2,\n shadowRadius: hoverBlur / 2,\n elevation: hoverOffset,\n },\n }) as ViewStyle\n }\n \n return Platform.select({\n web: {\n boxShadow: `${offset}px ${offset}px ${blur}px ${darkShadowColors.dark}, -${rimConfig.offset}px -${rimConfig.offset}px ${rimConfig.blur}px ${rimLightColor}`,\n } as any,\n default: {\n shadowColor: '#000',\n shadowOffset: { width: offset, height: offset },\n shadowOpacity: 0.3,\n shadowRadius: blur / 2,\n elevation: offset,\n },\n }) as ViewStyle\n }\n}\n\n/**\n * Get shadow style for an elevation level, calculated dynamically from surface color.\n * Results are cached to avoid redundant calculations.\n * \n * @param baseColor - Base surface color (hex)\n * @param level - Elevation level\n * @param theme - Current theme ('light' or 'dark')\n * @param isHovered - Whether element is hovered\n * @returns ViewStyle with shadow properties\n */\nexport function getElevationShadow(\n baseColor: string,\n level: ElevationLevel,\n theme: 'light' | 'dark',\n isHovered: boolean = false\n): ViewStyle {\n const cacheKey = getShadowCacheKey(baseColor, level, theme, isHovered)\n \n // Check cache\n if (elevationShadowCache.has(cacheKey)) {\n return elevationShadowCache.get(cacheKey)!\n }\n \n // Calculate shadow\n const result = calculateElevationShadow(baseColor, level, theme, isHovered)\n \n // Cache result\n if (elevationShadowCache.size >= MAX_SHADOW_CACHE_SIZE) {\n const firstKey = elevationShadowCache.keys().next().value!\n elevationShadowCache.delete(firstKey)\n }\n elevationShadowCache.set(cacheKey, result)\n \n return result\n}\n\n/**\n * Get base surface color from theme.\n * This is the foundation color that all elevations are calculated from.\n * \n * IMPORTANT: Base colors must be chosen to allow sufficient lightening.\n * \n * **Light Mode**: Cannot use `#FFFFFF` (white) - cannot lighten white!\n * - Use `#F3F4F6` (neutral[100]) - can lighten to `#FAFAFA` → `#FFFFFF`\n * - This allows raised elevations to be lighter (closer to white)\n * \n * **Dark Mode**: Need lighter base to allow sufficient lightening\n * - Use `#191919` (charcoal[600]) - allows lightening to `#2A2A2A` at max elevation\n * \n * Can be overridden to use custom base colors for special cases.\n */\nexport function getBaseSurfaceColor(theme: 'light' | 'dark'): string {\n // Use semantic token values so elevation colors stay in sync with the token pipeline.\n // Light mode: surface-raised (#F3F4F6 / neutral[100]) - NOT white, so we can lighten it\n // Dark mode: surface-elevated (#191919 / charcoal[600]) - allows sufficient lightening\n\n return theme === 'light'\n ? semanticColorsLight['surface-raised']\n : semanticColorsDark['surface-elevated']\n}\n\n/**\n * Component-specific elevation ranges\n * Defines which elevation levels each component type can use\n */\nexport const componentElevationRanges = {\n button: {\n allowed: [2] as const,\n default: 2 as const,\n hover: 3 as const,\n },\n card: {\n allowed: [1, 2, 3] as const,\n default: 2 as const,\n hover: 3 as const,\n },\n input: {\n allowed: [-2, -1, 0] as const,\n default: -1 as const,\n },\n overlay: {\n allowed: [4, 5] as const,\n default: 4 as const,\n },\n} as const\n\nexport type ComponentType = keyof typeof componentElevationRanges\n\n/**\n * Validate and clamp elevation to component's allowed range\n */\nexport function getValidatedElevation(\n component: ComponentType,\n requested: ElevationLevel\n): ElevationLevel {\n const range = componentElevationRanges[component]\n if ((range.allowed as readonly ElevationLevel[]).includes(requested)) {\n return requested\n }\n // Clamp to nearest allowed elevation\n const sorted = [...range.allowed].sort((a, b) => a - b)\n if (requested < sorted[0]) return sorted[0]\n if (requested > sorted[sorted.length - 1]) return sorted[sorted.length - 1]\n // Find closest\n return sorted.reduce((prev, curr) =>\n Math.abs(curr - requested) < Math.abs(prev - requested) ? curr : prev\n ) as ElevationLevel\n}\n\n// =============================================================================\n// Glow Shadow Support\n// =============================================================================\n\nexport type GlowIntensity = 'subtle' | 'medium' | 'strong'\n\nconst glowConfig: Record<GlowIntensity, { blur: number; spread: number; opacity: number }> = {\n subtle: { blur: 12, spread: 0, opacity: 0.25 },\n medium: { blur: 20, spread: 2, opacity: 0.4 },\n strong: { blur: 30, spread: 4, opacity: 0.55 },\n}\n\n/**\n * Get a glow shadow style for emphasis/active states.\n *\n * Creates a colored radial glow around an element, useful for:\n * - Active recording indicators (orange glow)\n * - Success states (green glow)\n * - Error/danger indicators (red glow)\n * - Focus rings and attention-drawing elements\n *\n * @param color - Glow color (hex string, e.g. '#FF7900')\n * @param intensity - Glow intensity level\n * @returns ViewStyle with platform-specific shadow properties\n */\nexport function getGlowShadow(\n color: string,\n intensity: GlowIntensity = 'medium'\n): ViewStyle {\n const config = glowConfig[intensity]\n const rgb = hexToRgb(color)\n if (!rgb) return {}\n\n return Platform.select({\n web: {\n boxShadow: `0 0 ${config.blur}px ${config.spread}px rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${config.opacity})`,\n } as any,\n default: {\n shadowColor: color,\n shadowOffset: { width: 0, height: 0 },\n shadowOpacity: config.opacity,\n shadowRadius: config.blur / 2,\n elevation: 0,\n },\n }) as ViewStyle\n}\n","import { useSyncExternalStore } from 'react'\n\n/**\n * Utility function to detect the current theme.\n * Checks for the 'light' class on the html element (set by Storybook's theme addon).\n * \n * NOTE: This function reads the theme at call time. For reactive theme detection\n * that re-renders when the theme changes, use the `useTheme` hook instead.\n * \n * @returns 'light' if light theme is active, 'dark' otherwise\n */\nexport function getTheme(): 'light' | 'dark' {\n if (typeof document === 'undefined') return 'dark'\n return document.documentElement.classList.contains('light') ? 'light' : 'dark'\n}\n\n// Subscribers for theme changes\nlet listeners: Array<() => void> = []\n\nfunction subscribe(listener: () => void) {\n listeners = [...listeners, listener]\n \n // Set up MutationObserver to watch for class changes on html element\n if (typeof document !== 'undefined' && listeners.length === 1) {\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n // Notify all listeners when class changes\n listeners.forEach(l => l())\n }\n }\n })\n \n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n })\n \n // Store observer for cleanup\n ;(subscribe as any)._observer = observer\n }\n \n return () => {\n listeners = listeners.filter(l => l !== listener)\n \n // Clean up observer when no more listeners\n if (listeners.length === 0 && (subscribe as any)._observer) {\n ;(subscribe as any)._observer.disconnect()\n ;(subscribe as any)._observer = null\n }\n }\n}\n\nfunction getSnapshot(): 'light' | 'dark' {\n return getTheme()\n}\n\nfunction getServerSnapshot(): 'light' | 'dark' {\n return 'dark'\n}\n\n/**\n * React hook for reactive theme detection.\n * Automatically re-renders when the theme changes (via class changes on html element).\n * \n * Uses useSyncExternalStore for proper React 18 concurrent mode support.\n * \n * @returns 'light' if light theme is active, 'dark' otherwise\n */\nexport function useTheme(): 'light' | 'dark' {\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot)\n}\n","import React, { useMemo, useState } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\nimport { \n getElevationSurface, \n getElevationShadow, \n getBaseSurfaceColor,\n getValidatedElevation,\n type ElevationLevel \n} from '../../../theme'\nimport { useTheme } from '../../../utils/useTheme'\n\nexport type CardVariant = 'elevated' | 'outline' | 'filled'\nexport type CardElevation = 1 | 2 | 3 // subtle, standard, prominent\n\nexport interface CardProps extends ViewProps {\n /** Visual variant */\n variant?: CardVariant\n /** Elevation level (1=subtle, 2=standard, 3=prominent) */\n elevation?: CardElevation\n /** Whether the card is interactive (hoverable/pressable) */\n isInteractive?: boolean\n /** Whether the card is in a loading state (renders skeleton) */\n isLoading?: boolean\n /** Callback when card is pressed (makes card interactive) */\n onPress?: () => void\n /** Custom border color (hex, rgb, or CSS color). Useful for status cards. */\n borderColor?: string\n /** Custom background color (hex, rgb, or CSS color). Useful for colored cards. */\n bgColor?: string\n /** Additional className */\n className?: string\n children?: React.ReactNode\n /** Show header skeleton when loading (default: true) */\n skeletonHasHeader?: boolean\n /** Show footer skeleton when loading (default: false) */\n skeletonHasFooter?: boolean\n /** Number of content lines in skeleton when loading (default: 3) */\n skeletonContentLines?: number\n}\n\nconst variantStyles: Record<CardVariant, string> = {\n elevated: '', // Will be set dynamically via elevation system\n outline: 'border-2 border-border-strong', // Thicker border with stronger contrast\n filled: '', // Will be set dynamically via elevation system\n}\n\n/**\n * Card component for containing related content.\n *\n * @example\n * <Card>\n * <CardHeader>\n * <CardTitle>Card Title</CardTitle>\n * <CardDescription>Card description</CardDescription>\n * </CardHeader>\n * <CardContent>\n * <Text>Card content goes here</Text>\n * </CardContent>\n * <CardFooter>\n * <Button>Action</Button>\n * </CardFooter>\n * </Card>\n *\n * // Interactive card\n * <Card isInteractive onPress={() => console.log('pressed')}>\n * <CardContent>Click me</CardContent>\n * </Card>\n */\nexport function Card({\n variant = 'elevated',\n elevation = 2,\n isInteractive = false,\n isLoading = false,\n onPress,\n borderColor,\n bgColor,\n className,\n children,\n style,\n skeletonHasHeader = true,\n skeletonHasFooter = false,\n skeletonContentLines = 3,\n ...props\n}: CardProps) {\n const isClickable = isInteractive || !!onPress\n const [isHovered, setIsHovered] = useState(false)\n const theme = useTheme()\n\n // Get elevation level (validate and clamp to card's allowed range)\n const elevationLevel = useMemo(() => {\n const validated = getValidatedElevation('card', elevation as ElevationLevel)\n // Map variant to elevation if needed\n if (variant === 'outline') {\n return 1 as ElevationLevel // Outline uses subtle elevation\n }\n return validated\n }, [variant, elevation])\n\n // Get base surface color for theme\n const baseColor = useMemo(() => getBaseSurfaceColor(theme), [theme])\n\n // Calculate surface color and shadow from elevation\n const surfaceColor = useMemo(() => {\n // Outline variant in light mode uses a specific off-white for clear visibility\n if (variant === 'outline' && theme === 'light') {\n return '#FAFAFA' // Matches --color-surface-elevated in light mode\n }\n return getElevationSurface(baseColor, elevationLevel, theme)\n }, [baseColor, elevationLevel, theme, variant])\n\n const shadowStyle = useMemo(() => {\n // Only apply hover shadow if card is actually clickable\n const shouldHover = isHovered && isClickable\n return getElevationShadow(baseColor, elevationLevel, theme, shouldHover)\n }, [baseColor, elevationLevel, theme, isHovered, isClickable])\n\n // Render skeleton content when loading, otherwise render children\n const cardContent = isLoading ? (\n <>\n {skeletonHasHeader && (\n <CardHeader>\n <View className=\"h-5 w-1/3 bg-interactive-disabled rounded\" />\n <View className=\"mt-2 h-4 w-2/3 bg-interactive-disabled rounded\" />\n </CardHeader>\n )}\n <CardContent>\n {Array.from({ length: skeletonContentLines }).map((_, i) => (\n <View\n key={i}\n className={cn(\n 'h-4 bg-interactive-disabled rounded',\n i < skeletonContentLines - 1 ? 'mb-2 w-full' : 'w-4/5'\n )}\n />\n ))}\n </CardContent>\n {skeletonHasFooter && (\n <CardFooter>\n <View className=\"h-9 w-24 bg-interactive-disabled rounded\" />\n </CardFooter>\n )}\n </>\n ) : (\n children\n )\n\n const baseClassName = cn(\n 'rounded-lg overflow-hidden relative',\n // Apply variant styles, but only use default border color if no custom borderColor\n variant === 'outline' \n ? borderColor \n ? 'border-2' // Just the border width, color via style\n : variantStyles[variant] // Full variant styles including color\n : variantStyles[variant],\n // Remove Tailwind shadow classes - we're using elevation shadows via style prop\n isClickable && 'web:cursor-pointer web:transition-all web:duration-150',\n isClickable && 'web:hover:-translate-y-0.5 active:scale-[0.99]',\n isLoading && 'pointer-events-none animate-pulse',\n className\n )\n\n // Merge styles: background color from elevation + shadow style + custom colors + custom style\n const mergedStyle = useMemo(() => {\n const elevationStyle: Record<string, any> = {\n backgroundColor: bgColor || surfaceColor,\n ...shadowStyle,\n }\n \n // Add custom border color if provided\n if (borderColor) {\n elevationStyle.borderColor = borderColor\n }\n \n if (!style) return elevationStyle\n // Merge styles, with elevation style taking precedence for background/shadow\n return [style, elevationStyle]\n }, [style, surfaceColor, shadowStyle, borderColor, bgColor])\n\n if (isClickable) {\n return (\n <Pressable\n onPress={onPress}\n onHoverIn={() => setIsHovered(true)}\n onHoverOut={() => setIsHovered(false)}\n accessibilityRole=\"button\"\n className={baseClassName}\n style={mergedStyle}\n {...props}\n >\n {cardContent}\n </Pressable>\n )\n }\n\n return (\n <View className={baseClassName} style={mergedStyle} {...props}>\n {cardContent}\n </View>\n )\n}\n\nexport interface CardHeaderProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Header section of a Card.\n */\nexport function CardHeader({ children, className }: CardHeaderProps) {\n return (\n <View className={cn('px-6 py-6', className)}>\n {children}\n </View>\n )\n}\n\nexport interface CardTitleProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Title for CardHeader.\n */\nexport function CardTitle({ children, className }: CardTitleProps) {\n return (\n <Text\n accessibilityRole=\"header\"\n className={cn('text-lg font-semibold text-text-primary font-heading', className)}\n >\n {children}\n </Text>\n )\n}\n\nexport interface CardDescriptionProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Description for CardHeader.\n */\nexport function CardDescription({ children, className }: CardDescriptionProps) {\n return (\n <Text className={cn('mt-1.5 text-sm text-text-secondary', className)}>\n {children}\n </Text>\n )\n}\n\nexport interface CardContentProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Content section of a Card.\n */\nexport function CardContent({ children, className }: CardContentProps) {\n return (\n <View className={cn('px-6 py-4', className)}>\n {children}\n </View>\n )\n}\n\nexport interface CardFooterProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Footer section of a Card.\n */\nexport function CardFooter({ children, className }: CardFooterProps) {\n return (\n <View className={cn('px-6 py-4 flex-row items-center gap-2', className)}>\n {children}\n </View>\n )\n}\n\nexport interface CardSkeletonProps {\n /** Whether to show header skeleton */\n hasHeader?: boolean\n /** Whether to show footer skeleton */\n hasFooter?: boolean\n /** Number of content lines */\n contentLines?: number\n /** Additional className */\n className?: string\n}\n\n/**\n * Skeleton placeholder for Card loading state.\n */\nexport function CardSkeleton({\n hasHeader = true,\n hasFooter = false,\n contentLines = 3,\n className,\n}: CardSkeletonProps) {\n return (\n <Card variant=\"elevated\" elevation={2} className={cn('animate-pulse', className)}>\n {hasHeader && (\n <CardHeader>\n <View className=\"h-5 w-1/3 bg-interactive-disabled rounded\" />\n <View className=\"mt-2 h-4 w-2/3 bg-interactive-disabled rounded\" />\n </CardHeader>\n )}\n <CardContent>\n {Array.from({ length: contentLines }).map((_, i) => (\n <View\n key={i}\n className={cn(\n 'h-4 bg-interactive-disabled rounded',\n i < contentLines - 1 ? 'mb-2 w-full' : 'w-4/5'\n )}\n />\n ))}\n </CardContent>\n {hasFooter && (\n <CardFooter>\n <View className=\"h-9 w-24 bg-interactive-disabled rounded\" />\n </CardFooter>\n )}\n </Card>\n )\n}\n\nexport interface CardInsetProps extends ViewProps {\n /** Elevation level for inset (-2=deep, -1=shallow) */\n elevation?: -2 | -1\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Inset element within a Card. Applies pressed neumorphic shadow\n * to create a sunken/recessed appearance.\n * \n * @example\n * <Card elevation={2}>\n * <CardContent>\n * <CardInset elevation={-1}>\n * <Text>This content appears inset/sunken</Text>\n * </CardInset>\n * </CardContent>\n * </Card>\n */\nexport function CardInset({\n elevation = -1,\n className,\n children,\n style,\n ...props\n}: CardInsetProps) {\n const theme = useTheme()\n const baseColor = useMemo(() => getBaseSurfaceColor(theme), [theme])\n const surfaceColor = useMemo(() => {\n return getElevationSurface(baseColor, elevation as ElevationLevel, theme)\n }, [baseColor, elevation, theme])\n const shadowStyle = useMemo(() => {\n return getElevationShadow(baseColor, elevation as ElevationLevel, theme)\n }, [baseColor, elevation, theme])\n \n return (\n <View\n className={cn('rounded', className)}\n style={[{ backgroundColor: surfaceColor }, shadowStyle, style]}\n {...props}\n >\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type BadgeVariant = 'solid' | 'subtle' | 'outline'\nexport type BadgeColor = 'default' | 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info'\nexport type BadgeSize = 'sm' | 'md' | 'lg'\n\nexport interface BadgeProps extends ViewProps {\n /** Visual variant */\n variant?: BadgeVariant\n /** Color scheme */\n color?: BadgeColor\n /** Size */\n size?: BadgeSize\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst variantColorStyles: Record<BadgeVariant, Record<BadgeColor, string>> = {\n solid: {\n default: 'bg-border-strong text-text-inverse',\n primary: 'bg-brand-primary text-text-inverse',\n secondary: 'bg-brand-secondary text-text-inverse',\n success: 'bg-status-success text-text-inverse',\n error: 'bg-status-error text-text-inverse',\n warning: 'bg-status-warning text-text-inverse',\n info: 'bg-status-info text-text-inverse',\n },\n subtle: {\n default: 'bg-surface-raised text-text-secondary',\n primary: 'bg-brand-primary-subtle text-brand-primary',\n secondary: 'bg-brand-secondary-subtle text-brand-secondary',\n success: 'bg-status-success-subtle text-status-success',\n error: 'bg-status-error-subtle text-status-error',\n warning: 'bg-status-warning-subtle text-status-warning',\n info: 'bg-status-info-subtle text-status-info',\n },\n outline: {\n default: 'border border-border-strong text-text-secondary',\n primary: 'border border-brand-primary text-brand-primary',\n secondary: 'border border-brand-secondary text-brand-secondary',\n success: 'border border-status-success text-status-success',\n error: 'border border-status-error text-status-error',\n warning: 'border border-status-warning text-status-warning',\n info: 'border border-status-info text-status-info',\n },\n}\n\nconst sizeStyles: Record<BadgeSize, string> = {\n sm: 'px-1.5 py-0.5 text-xs',\n md: 'px-2 py-0.5 text-xs',\n lg: 'px-2.5 py-1 text-sm',\n}\n\n/**\n * Badge component for status indicators and labels.\n *\n * @example\n * <Badge color=\"success\">Active</Badge>\n * <Badge variant=\"outline\" color=\"warning\">Pending</Badge>\n */\nexport function Badge({\n variant = 'subtle',\n color = 'default',\n size = 'md',\n className,\n children,\n ...props\n}: BadgeProps) {\n return (\n <View\n className={cn(\n 'inline-flex items-center justify-center rounded-full font-medium',\n variantColorStyles[variant][color],\n sizeStyles[size],\n className\n )}\n {...props}\n >\n {typeof children === 'string' ? (\n <Text className=\"text-inherit font-medium\">{children}</Text>\n ) : (\n children\n )}\n </View>\n )\n}\n\nexport interface BadgeTextProps {\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Text component for Badge content.\n */\nexport function BadgeText({ children, className }: BadgeTextProps) {\n return (\n <Text className={cn('text-inherit font-medium', className)}>\n {children}\n </Text>\n )\n}\n","import React from 'react'\nimport { ActivityIndicator, View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg' | 'xl'\nexport type SpinnerColor = 'primary' | 'secondary' | 'white' | 'default'\n\nexport interface SpinnerProps extends ViewProps {\n /** Spinner size */\n size?: SpinnerSize\n /** Color scheme */\n color?: SpinnerColor\n /** Accessibility label */\n label?: string\n /** Additional className */\n className?: string\n}\n\nconst sizeMap: Record<SpinnerSize, 'small' | 'large'> = {\n sm: 'small',\n md: 'small',\n lg: 'large',\n xl: 'large',\n}\n\nconst colorMap: Record<SpinnerColor, string> = {\n primary: '#5048E5',\n secondary: '#10B981',\n white: '#FFFFFF',\n default: '#6B7280',\n}\n\nconst containerSizes: Record<SpinnerSize, string> = {\n sm: 'w-4 h-4',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n xl: 'w-12 h-12',\n}\n\n/**\n * Spinner component for loading states.\n *\n * @example\n * <Spinner size=\"md\" color=\"primary\" />\n *\n * // In a button\n * <Button isLoading>\n * <Spinner size=\"sm\" color=\"white\" />\n * <ButtonText>Loading...</ButtonText>\n * </Button>\n */\nexport function Spinner({\n size = 'md',\n color = 'primary',\n label = 'Loading',\n className,\n ...props\n}: SpinnerProps) {\n return (\n <View\n accessibilityRole=\"progressbar\"\n accessibilityLabel={label}\n className={cn('items-center justify-center', containerSizes[size], className)}\n {...props}\n >\n <ActivityIndicator\n size={sizeMap[size]}\n color={colorMap[color]}\n />\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, Image, type ViewProps, type ImageSourcePropType } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nexport interface AvatarProps extends ViewProps {\n /** Avatar size */\n size?: AvatarSize\n /** Image source */\n source?: ImageSourcePropType\n /** Fallback text (usually initials) */\n fallback?: string\n /** Alt text for accessibility */\n alt?: string\n /** Additional className */\n className?: string\n}\n\nconst sizeStyles: Record<AvatarSize, { container: string; text: string; image: string }> = {\n xs: { container: 'w-6 h-6', text: 'text-xs', image: 'w-6 h-6' },\n sm: { container: 'w-8 h-8', text: 'text-xs', image: 'w-8 h-8' },\n md: { container: 'w-10 h-10', text: 'text-sm', image: 'w-10 h-10' },\n lg: { container: 'w-12 h-12', text: 'text-base', image: 'w-12 h-12' },\n xl: { container: 'w-16 h-16', text: 'text-lg', image: 'w-16 h-16' },\n '2xl': { container: 'w-20 h-20', text: 'text-xl', image: 'w-20 h-20' },\n}\n\n/**\n * Avatar component for user/entity representation.\n *\n * @example\n * // With image\n * <Avatar source={{ uri: 'https://example.com/avatar.jpg' }} alt=\"User\" />\n *\n * // With fallback initials\n * <Avatar fallback=\"JD\" />\n *\n * // With badge\n * <AvatarGroup>\n * <Avatar source={source1} />\n * <Avatar source={source2} />\n * <AvatarBadge />\n * </AvatarGroup>\n */\nexport function Avatar({\n size = 'md',\n source,\n fallback,\n alt,\n className,\n ...props\n}: AvatarProps) {\n const styles = sizeStyles[size]\n const hasImage = source !== undefined\n\n return (\n <View\n accessibilityRole=\"image\"\n accessibilityLabel={alt || fallback || 'Avatar'}\n className={cn(\n 'items-center justify-center rounded-full overflow-hidden',\n 'bg-border-strong',\n styles.container,\n className\n )}\n {...props}\n >\n {hasImage ? (\n <Image\n source={source}\n className={cn('rounded-full', styles.image)}\n accessibilityLabel={alt}\n />\n ) : fallback ? (\n <Text className={cn('font-semibold text-text-primary', styles.text)}>\n {fallback}\n </Text>\n ) : (\n <View className=\"w-full h-full bg-surface-raised\" />\n )}\n </View>\n )\n}\n\nexport interface AvatarBadgeProps {\n /** Badge color */\n color?: 'success' | 'error' | 'warning' | 'default'\n /** Additional className */\n className?: string\n}\n\nconst badgeColors: Record<string, string> = {\n success: 'bg-status-success',\n error: 'bg-status-error',\n warning: 'bg-status-warning',\n default: 'bg-border-strong',\n}\n\n/**\n * Status badge for Avatar (e.g., online indicator).\n */\nexport function AvatarBadge({ color = 'success', className }: AvatarBadgeProps) {\n return (\n <View\n className={cn(\n 'absolute bottom-0 right-0 w-3 h-3 rounded-full border-2 border-surface-base',\n badgeColors[color],\n className\n )}\n />\n )\n}\n\nexport interface AvatarGroupProps {\n children: React.ReactNode\n /** Maximum avatars to show before +N indicator */\n max?: number\n /** Size of avatars */\n size?: AvatarSize\n /** Additional className */\n className?: string\n}\n\n/**\n * Group of avatars with stacking effect.\n */\nexport function AvatarGroup({\n children,\n max,\n size = 'md',\n className,\n}: AvatarGroupProps) {\n const childArray = React.Children.toArray(children)\n const visibleChildren = max ? childArray.slice(0, max) : childArray\n const remainingCount = max ? Math.max(0, childArray.length - max) : 0\n\n return (\n <View className={cn('flex-row', className)}>\n {visibleChildren.map((child, index) => (\n <View\n key={index}\n className={cn(\n 'border-2 border-surface-base rounded-full',\n index > 0 && '-ml-2'\n )}\n >\n {React.isValidElement(child)\n ? React.cloneElement(child as React.ReactElement<any>, { size })\n : child}\n </View>\n ))}\n {remainingCount > 0 && (\n <View\n className={cn(\n 'border-2 border-surface-base rounded-full -ml-2',\n 'items-center justify-center bg-surface-raised',\n sizeStyles[size].container\n )}\n >\n <Text className={cn('font-semibold text-text-secondary', sizeStyles[size].text)}>\n +{remainingCount}\n </Text>\n </View>\n )}\n </View>\n )\n}\n","import React from 'react'\nimport { View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\n\nexport interface DividerProps extends ViewProps {\n /** Divider orientation */\n orientation?: DividerOrientation\n /** Additional className */\n className?: string\n}\n\n/**\n * Divider component for visual separation of content.\n *\n * @example\n * <Divider />\n * <Divider orientation=\"vertical\" />\n */\nexport function Divider({\n orientation = 'horizontal',\n className,\n ...props\n}: DividerProps) {\n return (\n <View\n accessibilityRole=\"none\"\n className={cn(\n 'bg-divider',\n orientation === 'horizontal' ? 'h-px w-full' : 'w-px h-full',\n className\n )}\n {...props}\n />\n )\n}\n","import React, { forwardRef } from 'react'\nimport { Pressable, View, Text, type PressableProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type CheckboxSize = 'sm' | 'md' | 'lg'\n\nexport interface CheckboxProps extends Omit<PressableProps, 'children'> {\n /** Whether the checkbox is checked */\n isChecked?: boolean\n /** Whether the checkbox is in indeterminate state */\n isIndeterminate?: boolean\n /** Whether the checkbox is disabled */\n isDisabled?: boolean\n /** Whether the checkbox is invalid */\n isInvalid?: boolean\n /** Checkbox size */\n size?: CheckboxSize\n /** Label text */\n label?: string\n /** Helper text */\n helperText?: string\n /** Value for forms */\n value?: string\n /** Callback when checked state changes */\n onCheckedChange?: (checked: boolean) => void\n /** Additional className */\n className?: string\n}\n\nconst sizeStyles: Record<CheckboxSize, { box: string; icon: string; label: string }> = {\n sm: { box: 'w-4 h-4', icon: 'w-2.5 h-2.5', label: 'text-sm' },\n md: { box: 'w-5 h-5', icon: 'w-3 h-3', label: 'text-base' },\n lg: { box: 'w-6 h-6', icon: 'w-3.5 h-3.5', label: 'text-lg' },\n}\n\n/**\n * Checkbox component for boolean inputs.\n *\n * @example\n * <Checkbox\n * isChecked={checked}\n * onCheckedChange={setChecked}\n * label=\"Accept terms and conditions\"\n * />\n */\nexport const Checkbox = forwardRef<View, CheckboxProps>(function Checkbox(\n {\n isChecked = false,\n isIndeterminate = false,\n isDisabled = false,\n isInvalid = false,\n size = 'md',\n label,\n helperText,\n value,\n onCheckedChange,\n className,\n ...props\n },\n ref\n) {\n const styles = sizeStyles[size]\n\n const handlePress = () => {\n if (!isDisabled) {\n onCheckedChange?.(!isChecked)\n }\n }\n\n return (\n <Pressable\n ref={ref}\n disabled={isDisabled}\n onPress={handlePress}\n accessibilityRole=\"checkbox\"\n accessibilityState={{\n checked: isIndeterminate ? 'mixed' : isChecked,\n disabled: isDisabled,\n }}\n accessibilityLabel={label}\n className={cn(\n 'flex-row items-start gap-2',\n isDisabled && 'opacity-50',\n className\n )}\n {...props}\n >\n <View\n className={cn(\n 'items-center justify-center rounded border-2 transition-colors',\n styles.box,\n isChecked || isIndeterminate\n ? 'bg-brand-primary border-brand-primary'\n : 'bg-transparent border-border-default',\n isInvalid && 'border-status-error',\n !isDisabled && 'web:hover:border-brand-primary'\n )}\n >\n {isChecked && !isIndeterminate && (\n <View className={cn('bg-white rounded-sm', styles.icon)}>\n {/* Checkmark icon - using a simple view as placeholder */}\n <Text className=\"text-brand-primary font-bold text-center leading-none\">✓</Text>\n </View>\n )}\n {isIndeterminate && (\n <View className={cn('bg-white h-0.5 w-2/3 rounded')} />\n )}\n </View>\n\n {(label || helperText) && (\n <View className=\"flex-1\">\n {label && (\n <Text className={cn('text-text-primary font-medium', styles.label)}>\n {label}\n </Text>\n )}\n {helperText && (\n <Text className=\"text-xs text-text-secondary mt-0.5\">\n {helperText}\n </Text>\n )}\n </View>\n )}\n </Pressable>\n )\n})\n\nexport interface CheckboxGroupProps {\n children: React.ReactNode\n /** Label for the group */\n label?: string\n /** Orientation of checkboxes */\n orientation?: 'horizontal' | 'vertical'\n /** Additional className */\n className?: string\n}\n\n/**\n * Container for grouping related checkboxes.\n */\nexport function CheckboxGroup({\n children,\n label,\n orientation = 'vertical',\n className,\n}: CheckboxGroupProps) {\n return (\n <View className={cn('gap-1', className)}>\n {label && (\n <Text className=\"text-sm font-medium text-text-primary mb-2\">\n {label}\n </Text>\n )}\n <View\n className={cn(\n orientation === 'vertical' ? 'flex-col gap-2' : 'flex-row gap-4'\n )}\n >\n {children}\n </View>\n </View>\n )\n}\n","import React, { forwardRef } from 'react'\nimport { Pressable, View, Text, type PressableProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type SwitchSize = 'sm' | 'md' | 'lg'\n\nexport interface SwitchProps extends Omit<PressableProps, 'children'> {\n /** Whether the switch is on */\n isChecked?: boolean\n /** Whether the switch is disabled */\n isDisabled?: boolean\n /** Switch size */\n size?: SwitchSize\n /** Label text */\n label?: string\n /** Label position */\n labelPosition?: 'left' | 'right'\n /** Callback when switch state changes */\n onCheckedChange?: (checked: boolean) => void\n /** Additional className */\n className?: string\n}\n\nconst sizeStyles: Record<SwitchSize, { track: string; thumb: string; translate: string }> = {\n sm: { track: 'w-8 h-4', thumb: 'w-3 h-3', translate: 'translate-x-4' },\n md: { track: 'w-10 h-5', thumb: 'w-4 h-4', translate: 'translate-x-5' },\n lg: { track: 'w-12 h-6', thumb: 'w-5 h-5', translate: 'translate-x-6' },\n}\n\n/**\n * Switch component for toggling boolean values.\n *\n * @example\n * <Switch\n * isChecked={enabled}\n * onCheckedChange={setEnabled}\n * label=\"Enable notifications\"\n * />\n */\nexport const Switch = forwardRef<View, SwitchProps>(function Switch(\n {\n isChecked = false,\n isDisabled = false,\n size = 'md',\n label,\n labelPosition = 'right',\n onCheckedChange,\n className,\n ...props\n },\n ref\n) {\n const styles = sizeStyles[size]\n\n const handlePress = () => {\n if (!isDisabled) {\n onCheckedChange?.(!isChecked)\n }\n }\n\n const switchElement = (\n <View\n className={cn(\n 'rounded-full p-0.5 transition-colors',\n styles.track,\n isChecked ? 'bg-brand-primary' : 'bg-border-strong'\n )}\n >\n <View\n className={cn(\n 'rounded-full bg-white shadow-sm transition-transform',\n styles.thumb,\n isChecked && styles.translate\n )}\n />\n </View>\n )\n\n return (\n <Pressable\n ref={ref}\n disabled={isDisabled}\n onPress={handlePress}\n accessibilityRole=\"switch\"\n accessibilityState={{ checked: isChecked, disabled: isDisabled }}\n accessibilityLabel={label}\n className={cn(\n 'flex-row items-center gap-2',\n isDisabled && 'opacity-50',\n className\n )}\n {...props}\n >\n {label && labelPosition === 'left' && (\n <Text className=\"text-text-primary font-medium\">{label}</Text>\n )}\n {switchElement}\n {label && labelPosition === 'right' && (\n <Text className=\"text-text-primary font-medium\">{label}</Text>\n )}\n </Pressable>\n )\n})\n","import React, { createContext, useContext } from 'react'\nimport { Modal as RNModal, View, Text, Pressable, ScrollView, type ModalProps as RNModalProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type ModalSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full'\nexport type ModalScrollBehavior = 'inside' | 'outside'\n\ninterface ModalContextType {\n onClose?: () => void\n size: ModalSize\n scrollBehavior: ModalScrollBehavior\n}\n\nconst ModalContext = createContext<ModalContextType>({ size: 'md', scrollBehavior: 'outside' })\n\nexport interface ModalProps extends Omit<RNModalProps, 'visible'> {\n /** Whether the modal is open */\n isOpen: boolean\n /** Callback when modal should close */\n onClose?: () => void\n /** Modal size */\n size?: ModalSize\n /** Where scrolling happens: inside modal body or whole modal */\n scrollBehavior?: ModalScrollBehavior\n /** Whether clicking backdrop closes modal */\n closeOnOverlayClick?: boolean\n /** Whether to blur the backdrop */\n backdropBlur?: boolean\n /** Additional className for backdrop */\n backdropClassName?: string\n /** Animation type */\n animationType?: 'none' | 'fade' | 'slide'\n children?: React.ReactNode\n}\n\nconst sizeStyles: Record<ModalSize, string> = {\n xs: 'max-w-xs',\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n full: 'max-w-full m-4',\n}\n\n/**\n * Modal component for dialogs and overlays.\n *\n * @example\n * <Modal isOpen={isOpen} onClose={() => setIsOpen(false)}>\n * <ModalContent>\n * <ModalHeader>\n * <ModalTitle>Modal Title</ModalTitle>\n * <ModalCloseButton />\n * </ModalHeader>\n * <ModalBody>\n * <Text>Modal content</Text>\n * </ModalBody>\n * <ModalFooter>\n * <Button onPress={() => setIsOpen(false)}>Close</Button>\n * </ModalFooter>\n * </ModalContent>\n * </Modal>\n */\nexport function Modal({\n isOpen,\n onClose,\n size = 'md',\n scrollBehavior = 'outside',\n closeOnOverlayClick = true,\n backdropBlur = false,\n backdropClassName,\n animationType = 'fade',\n children,\n ...props\n}: ModalProps) {\n const handleBackdropPress = () => {\n if (closeOnOverlayClick && onClose) {\n onClose()\n }\n }\n\n const backdropContent = (\n <Pressable\n onPress={handleBackdropPress}\n className={cn(\n 'flex-1 items-center justify-center',\n backdropBlur ? 'bg-black/30 web:backdrop-blur-sm' : 'bg-black/50',\n backdropClassName\n )}\n >\n {children}\n </Pressable>\n )\n\n return (\n <ModalContext.Provider value={{ onClose, size, scrollBehavior }}>\n <RNModal\n visible={isOpen}\n transparent\n animationType={animationType}\n onRequestClose={onClose}\n {...props}\n >\n {scrollBehavior === 'outside' ? (\n <ScrollView\n contentContainerStyle={{ flexGrow: 1 }}\n keyboardShouldPersistTaps=\"handled\"\n >\n {backdropContent}\n </ScrollView>\n ) : (\n backdropContent\n )}\n </RNModal>\n </ModalContext.Provider>\n )\n}\n\nexport interface ModalContentProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Container for modal content.\n */\nexport function ModalContent({ children, className }: ModalContentProps) {\n const { size } = useContext(ModalContext)\n\n return (\n <Pressable\n // Prevent backdrop click from propagating\n onPress={(e) => e.stopPropagation()}\n >\n <View\n className={cn(\n 'bg-surface-elevated rounded-lg shadow-xl w-full',\n sizeStyles[size],\n className\n )}\n >\n {children}\n </View>\n </Pressable>\n )\n}\n\nexport interface ModalHeaderProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Header section of modal.\n */\nexport function ModalHeader({ children, className }: ModalHeaderProps) {\n return (\n <View className={cn('flex-row items-center justify-between px-6 py-4 border-b border-divider', className)}>\n {children}\n </View>\n )\n}\n\nexport interface ModalTitleProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Title for modal header.\n */\nexport function ModalTitle({ children, className }: ModalTitleProps) {\n return (\n <Text\n accessibilityRole=\"header\"\n className={cn('text-lg font-semibold text-text-primary font-heading', className)}\n >\n {children}\n </Text>\n )\n}\n\nexport interface ModalCloseButtonProps {\n className?: string\n}\n\n/**\n * Close button for modal header.\n */\nexport function ModalCloseButton({ className }: ModalCloseButtonProps) {\n const { onClose } = useContext(ModalContext)\n\n return (\n <Pressable\n onPress={onClose}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close modal\"\n className={cn(\n 'p-1 rounded-md web:hover:bg-interactive-hover active:bg-interactive-active',\n className\n )}\n >\n <Text className=\"text-text-secondary text-xl leading-none\">×</Text>\n </Pressable>\n )\n}\n\nexport interface ModalBodyProps {\n children?: React.ReactNode\n /** Maximum height for scrollable content (when scrollBehavior=\"inside\") */\n maxHeight?: number\n className?: string\n}\n\n/**\n * Body section of modal.\n */\nexport function ModalBody({ children, maxHeight, className }: ModalBodyProps) {\n const { scrollBehavior } = useContext(ModalContext)\n\n if (scrollBehavior === 'inside') {\n return (\n <ScrollView\n className={cn('px-6 py-4', className)}\n style={maxHeight ? { maxHeight } : undefined}\n showsVerticalScrollIndicator\n >\n {children}\n </ScrollView>\n )\n }\n\n return (\n <View className={cn('px-6 py-4', className)}>\n {children}\n </View>\n )\n}\n\nexport interface ModalFooterProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Footer section of modal.\n */\nexport function ModalFooter({ children, className }: ModalFooterProps) {\n return (\n <View className={cn('flex-row items-center justify-end gap-2 px-6 py-4 border-t border-divider', className)}>\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type SkeletonVariant = 'text' | 'circle' | 'rect' | 'rounded'\nexport type SkeletonAnimation = 'pulse' | 'shimmer' | 'none'\n\nexport interface SkeletonProps extends ViewProps {\n /** Shape variant */\n variant?: SkeletonVariant\n /** Animation type */\n animation?: SkeletonAnimation\n /** Width (number for pixels, string for percentages/other) */\n width?: number | string\n /** Height (number for pixels, string for percentages/other) */\n height?: number | string\n /** Border radius (only for 'rect' variant) */\n borderRadius?: number\n /** Additional className */\n className?: string\n}\n\n/**\n * Skeleton component for loading placeholders.\n *\n * @example\n * // Text skeleton\n * <Skeleton variant=\"text\" width=\"60%\" />\n *\n * // Avatar skeleton\n * <Skeleton variant=\"circle\" width={48} height={48} />\n *\n * // Card skeleton\n * <Skeleton variant=\"rounded\" width=\"100%\" height={200} />\n */\nexport function Skeleton({\n variant = 'text',\n animation = 'pulse',\n width,\n height,\n borderRadius,\n className,\n style,\n ...props\n}: SkeletonProps) {\n const variantStyles = {\n text: 'h-4 rounded',\n circle: 'rounded-full',\n rect: '',\n rounded: 'rounded-lg',\n }\n\n const animationStyles = {\n pulse: 'animate-pulse',\n shimmer: 'animate-shimmer', // Note: requires custom animation in Tailwind config\n none: '',\n }\n\n // For circle variant, if only one dimension is provided, make it square\n let finalWidth = width\n let finalHeight = height\n if (variant === 'circle') {\n if (width && !height) finalHeight = width\n if (height && !width) finalWidth = height\n }\n\n return (\n <View\n accessibilityRole=\"none\"\n accessibilityLabel=\"Loading...\"\n className={cn(\n 'bg-interactive-disabled',\n variantStyles[variant],\n animationStyles[animation],\n className\n )}\n style={[\n {\n ...(finalWidth !== undefined && { width: finalWidth as number }),\n ...(finalHeight !== undefined && { height: finalHeight as number }),\n ...(borderRadius !== undefined && { borderRadius }),\n },\n style,\n ]}\n {...props}\n />\n )\n}\n\n// Convenience components for common patterns\n\nexport interface SkeletonTextProps {\n /** Number of lines */\n lines?: number\n /** Last line width (percentage) */\n lastLineWidth?: string\n /** Gap between lines */\n gap?: number\n /** Animation type */\n animation?: SkeletonAnimation\n className?: string\n}\n\n/**\n * Multi-line text skeleton.\n */\nexport function SkeletonText({\n lines = 3,\n lastLineWidth = '60%',\n gap = 8,\n animation = 'pulse',\n className,\n}: SkeletonTextProps) {\n return (\n <View className={cn('gap-2', className)} style={{ gap }}>\n {Array.from({ length: lines }).map((_, i) => (\n <Skeleton\n key={i}\n variant=\"text\"\n animation={animation}\n width={i === lines - 1 ? lastLineWidth : '100%'}\n />\n ))}\n </View>\n )\n}\n\nexport interface SkeletonCircleProps {\n /** Size in pixels */\n size?: number\n /** Animation type */\n animation?: SkeletonAnimation\n className?: string\n}\n\n/**\n * Circle skeleton for avatars.\n */\nexport function SkeletonCircle({\n size = 40,\n animation = 'pulse',\n className,\n}: SkeletonCircleProps) {\n return (\n <Skeleton\n variant=\"circle\"\n width={size}\n height={size}\n animation={animation}\n className={className}\n />\n )\n}\n\n// Composed skeleton patterns\n\nexport interface SkeletonCardProps {\n /** Show image area */\n hasImage?: boolean\n /** Image height */\n imageHeight?: number\n /** Number of text lines */\n lines?: number\n /** Animation type */\n animation?: SkeletonAnimation\n className?: string\n}\n\n/**\n * Card skeleton pattern.\n */\nexport function SkeletonCard({\n hasImage = true,\n imageHeight = 160,\n lines = 3,\n animation = 'pulse',\n className,\n}: SkeletonCardProps) {\n return (\n <View className={cn('rounded-lg overflow-hidden bg-surface-elevated', className)}>\n {hasImage && (\n <Skeleton\n variant=\"rect\"\n width=\"100%\"\n height={imageHeight}\n animation={animation}\n />\n )}\n <View className=\"p-4 gap-3\">\n <Skeleton variant=\"text\" width=\"70%\" animation={animation} />\n <SkeletonText lines={lines} animation={animation} />\n </View>\n </View>\n )\n}\n\nexport interface SkeletonListItemProps {\n /** Show avatar */\n hasAvatar?: boolean\n /** Avatar size */\n avatarSize?: number\n /** Number of text lines */\n lines?: number\n /** Animation type */\n animation?: SkeletonAnimation\n className?: string\n}\n\n/**\n * List item skeleton pattern.\n */\nexport function SkeletonListItem({\n hasAvatar = true,\n avatarSize = 40,\n lines = 2,\n animation = 'pulse',\n className,\n}: SkeletonListItemProps) {\n return (\n <View className={cn('flex-row items-center gap-3 p-3', className)}>\n {hasAvatar && (\n <SkeletonCircle size={avatarSize} animation={animation} />\n )}\n <View className=\"flex-1\">\n <SkeletonText lines={lines} animation={animation} />\n </View>\n </View>\n )\n}\n","import React, { createContext, useContext, useState } from 'react'\nimport { View, Text, Pressable, ScrollView, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type TabsVariant = 'line' | 'enclosed' | 'soft-rounded'\nexport type TabsOrientation = 'horizontal' | 'vertical'\n\ninterface TabsContextType {\n activeIndex: number\n setActiveIndex: (index: number) => void\n variant: TabsVariant\n orientation: TabsOrientation\n}\n\nconst TabsContext = createContext<TabsContextType>({\n activeIndex: 0,\n setActiveIndex: () => {},\n variant: 'line',\n orientation: 'horizontal',\n})\n\nexport interface TabsProps extends ViewProps {\n /** Currently active tab index */\n defaultIndex?: number\n /** Controlled active index */\n index?: number\n /** Callback when tab changes */\n onChange?: (index: number) => void\n /** Visual variant */\n variant?: TabsVariant\n /** Tab orientation */\n orientation?: TabsOrientation\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Tabs component for tabbed navigation.\n *\n * @example\n * <Tabs defaultIndex={0} onChange={(i) => console.log(i)}>\n * <TabList>\n * <Tab>Tab 1</Tab>\n * <Tab>Tab 2</Tab>\n * <Tab>Tab 3</Tab>\n * </TabList>\n * <TabPanels>\n * <TabPanel>Content 1</TabPanel>\n * <TabPanel>Content 2</TabPanel>\n * <TabPanel>Content 3</TabPanel>\n * </TabPanels>\n * </Tabs>\n */\nexport function Tabs({\n defaultIndex = 0,\n index,\n onChange,\n variant = 'line',\n orientation = 'horizontal',\n className,\n children,\n ...props\n}: TabsProps) {\n const [internalIndex, setInternalIndex] = useState(defaultIndex)\n const activeIndex = index ?? internalIndex\n\n const setActiveIndex = (newIndex: number) => {\n if (index === undefined) {\n setInternalIndex(newIndex)\n }\n onChange?.(newIndex)\n }\n\n return (\n <TabsContext.Provider value={{ activeIndex, setActiveIndex, variant, orientation }}>\n <View\n className={cn(\n orientation === 'vertical' ? 'flex-row' : 'flex-col',\n className\n )}\n {...props}\n >\n {children}\n </View>\n </TabsContext.Provider>\n )\n}\n\nexport interface TabListProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Container for Tab components.\n */\nexport function TabList({ children, className }: TabListProps) {\n const { variant, orientation } = useContext(TabsContext)\n\n const variantStyles = {\n line: orientation === 'horizontal'\n ? 'border-b border-border-default'\n : 'border-r border-border-default',\n enclosed: 'bg-surface-raised rounded-lg p-1',\n 'soft-rounded': 'bg-surface-raised rounded-full p-1',\n }\n\n const content = (\n <View\n className={cn(\n orientation === 'horizontal' ? 'flex-row' : 'flex-col',\n variantStyles[variant],\n className\n )}\n >\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child as React.ReactElement<any>, { index })\n }\n return child\n })}\n </View>\n )\n\n if (orientation === 'horizontal') {\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={{ flexGrow: 1 }}\n >\n {content}\n </ScrollView>\n )\n }\n\n return content\n}\n\nexport interface TabProps {\n /** Tab index (injected by TabList) */\n index?: number\n /** Whether the tab is disabled */\n isDisabled?: boolean\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Individual tab button.\n */\nexport function Tab({\n index = 0,\n isDisabled = false,\n className,\n children,\n}: TabProps) {\n const { activeIndex, setActiveIndex, variant, orientation } = useContext(TabsContext)\n const isActive = activeIndex === index\n\n const baseStyles = 'font-medium text-sm transition-colors'\n\n const variantStyles = {\n line: cn(\n 'px-4 py-2',\n orientation === 'horizontal' ? '-mb-px border-b-2' : '-mr-px border-r-2',\n isActive\n ? 'border-brand-primary text-brand-primary'\n : 'border-transparent text-text-secondary web:hover:text-text-primary'\n ),\n enclosed: cn(\n 'px-4 py-2 rounded-md',\n isActive\n ? 'bg-surface-elevated text-text-primary shadow-sm'\n : 'text-text-secondary web:hover:text-text-primary'\n ),\n 'soft-rounded': cn(\n 'px-4 py-2 rounded-full',\n isActive\n ? 'bg-brand-primary text-white'\n : 'text-text-secondary web:hover:text-text-primary'\n ),\n }\n\n return (\n <Pressable\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: isActive, disabled: isDisabled }}\n disabled={isDisabled}\n onPress={() => setActiveIndex(index)}\n className={cn(\n baseStyles,\n variantStyles[variant],\n isDisabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n >\n <Text\n className={cn(\n 'font-medium',\n isActive\n ? variant === 'soft-rounded'\n ? 'text-white'\n : 'text-text-primary'\n : 'text-text-secondary'\n )}\n >\n {children}\n </Text>\n </Pressable>\n )\n}\n\nexport interface TabPanelsProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Container for TabPanel components.\n */\nexport function TabPanels({ children, className }: TabPanelsProps) {\n const { activeIndex } = useContext(TabsContext)\n\n return (\n <View className={cn('flex-1', className)}>\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && index === activeIndex) {\n return child\n }\n return null\n })}\n </View>\n )\n}\n\nexport interface TabPanelProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Individual tab panel content.\n */\nexport function TabPanel({ children, className }: TabPanelProps) {\n return (\n <View className={cn('py-4', className)}>\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type ChipVariant = 'solid' | 'subtle' | 'outline'\nexport type ChipColor = 'default' | 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info'\nexport type ChipSize = 'sm' | 'md' | 'lg'\n\nexport interface ChipProps extends ViewProps {\n /** Visual variant */\n variant?: ChipVariant\n /** Color scheme */\n color?: ChipColor\n /** Size */\n size?: ChipSize\n /** Left element (icon, avatar) */\n leftElement?: React.ReactNode\n /** Whether the chip is dismissible */\n onDelete?: () => void\n /** Whether the chip is clickable */\n onPress?: () => void\n /** Whether the chip is disabled */\n isDisabled?: boolean\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst colorStyles: Record<ChipColor, Record<ChipVariant, string>> = {\n default: {\n solid: 'bg-neutral-600 text-white',\n subtle: 'bg-neutral-100 text-neutral-700 dark:bg-neutral-800 dark:text-neutral-200',\n outline: 'border border-neutral-300 dark:border-neutral-600 text-neutral-700 dark:text-neutral-200',\n },\n primary: {\n solid: 'bg-brand-primary text-white',\n subtle: 'bg-brand-primary-subtle text-brand-primary',\n outline: 'border border-brand-primary text-brand-primary',\n },\n secondary: {\n solid: 'bg-brand-secondary text-white',\n subtle: 'bg-brand-secondary-subtle text-brand-secondary',\n outline: 'border border-brand-secondary text-brand-secondary',\n },\n success: {\n solid: 'bg-status-success text-white',\n subtle: 'bg-status-success-subtle text-status-success',\n outline: 'border border-status-success text-status-success',\n },\n error: {\n solid: 'bg-status-error text-white',\n subtle: 'bg-status-error-subtle text-status-error',\n outline: 'border border-status-error text-status-error',\n },\n warning: {\n solid: 'bg-status-warning text-white',\n subtle: 'bg-status-warning-subtle text-status-warning',\n outline: 'border border-status-warning text-status-warning',\n },\n info: {\n solid: 'bg-status-info text-white',\n subtle: 'bg-status-info-subtle text-status-info',\n outline: 'border border-status-info text-status-info',\n },\n}\n\nconst sizeStyles: Record<ChipSize, { container: string; text: string; deleteButton: string }> = {\n sm: { container: 'px-2 py-0.5 rounded', text: 'text-xs', deleteButton: 'ml-1 -mr-0.5' },\n md: { container: 'px-3 py-1 rounded-md', text: 'text-sm', deleteButton: 'ml-1.5 -mr-1' },\n lg: { container: 'px-4 py-1.5 rounded-md', text: 'text-base', deleteButton: 'ml-2 -mr-1' },\n}\n\n/**\n * Chip component for tags, labels, and filters.\n *\n * @example\n * <Chip>Default</Chip>\n * <Chip color=\"primary\" variant=\"subtle\">Primary Subtle</Chip>\n * <Chip onDelete={() => {}}>Dismissible</Chip>\n * <Chip onPress={() => {}}>Clickable</Chip>\n */\nexport function Chip({\n variant = 'subtle',\n color = 'default',\n size = 'md',\n leftElement,\n onDelete,\n onPress,\n isDisabled = false,\n className,\n children,\n ...props\n}: ChipProps) {\n const sizes = sizeStyles[size]\n const isClickable = !!onPress\n\n const content = (\n <>\n {leftElement && <View className=\"mr-1.5\">{leftElement}</View>}\n <Text className={cn('font-medium', sizes.text)}>\n {children}\n </Text>\n {onDelete && (\n <Pressable\n onPress={(e) => {\n e.stopPropagation?.()\n onDelete()\n }}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Remove\"\n disabled={isDisabled}\n className={cn(\n sizes.deleteButton,\n 'rounded-full p-0.5 web:hover:bg-black/10 active:bg-black/20'\n )}\n >\n <Text className=\"text-xs leading-none\">×</Text>\n </Pressable>\n )}\n </>\n )\n\n const baseClassName = cn(\n 'flex-row items-center',\n sizes.container,\n colorStyles[color][variant],\n isClickable && 'web:cursor-pointer web:hover:opacity-80 active:opacity-70',\n isDisabled && 'opacity-50 cursor-not-allowed',\n className\n )\n\n if (isClickable) {\n return (\n <Pressable\n onPress={onPress}\n disabled={isDisabled}\n accessibilityRole=\"button\"\n className={baseClassName}\n {...props}\n >\n {content}\n </Pressable>\n )\n }\n\n return (\n <View className={baseClassName} {...props}>\n {content}\n </View>\n )\n}\n","import React from 'react'\nimport { Text, Pressable, type TextProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type LinkUnderline = 'always' | 'hover' | 'none'\nexport type LinkColor = 'default' | 'primary' | 'secondary' | 'inherit'\n\nexport interface LinkProps extends Omit<TextProps, 'onPress'> {\n /** URL to navigate to (for accessibility) */\n href?: string\n /** Underline behavior */\n underline?: LinkUnderline\n /** Link color */\n color?: LinkColor\n /** Whether the link opens in a new tab/window */\n isExternal?: boolean\n /** Press handler */\n onPress?: () => void\n /** Whether the link is disabled */\n isDisabled?: boolean\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst colorStyles: Record<LinkColor, string> = {\n default: 'text-text-link',\n primary: 'text-brand-primary',\n secondary: 'text-brand-secondary',\n inherit: '',\n}\n\nconst underlineStyles: Record<LinkUnderline, string> = {\n always: 'underline',\n hover: 'no-underline web:hover:underline',\n none: 'no-underline',\n}\n\n/**\n * Link component for navigation.\n *\n * @example\n * <Link href=\"https://example.com\">Visit Site</Link>\n * <Link href=\"https://example.com\" isExternal>External Link ↗</Link>\n * <Link onPress={() => navigate('/page')}>Go to Page</Link>\n */\nexport function Link({\n href,\n underline = 'hover',\n color = 'default',\n isExternal = false,\n onPress,\n isDisabled = false,\n className,\n children,\n ...props\n}: LinkProps) {\n const handlePress = () => {\n if (isDisabled) return\n onPress?.()\n }\n\n return (\n <Pressable\n onPress={handlePress}\n disabled={isDisabled}\n accessibilityRole=\"link\"\n accessibilityHint={isExternal ? 'Opens in new window' : undefined}\n >\n <Text\n className={cn(\n 'font-medium',\n colorStyles[color],\n underlineStyles[underline],\n isDisabled && 'opacity-50 cursor-not-allowed',\n 'web:cursor-pointer active:opacity-70',\n className\n )}\n {...props}\n >\n {children}\n {isExternal && ' ↗'}\n </Text>\n </Pressable>\n )\n}\n","import React, { useState, useRef } from 'react'\nimport { View, Text, Pressable, Modal, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type TooltipPlacement =\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'right'\n\nexport interface TooltipProps extends ViewProps {\n /** Tooltip content */\n label: string\n /** Trigger element */\n children: React.ReactNode\n /** Tooltip placement */\n placement?: TooltipPlacement\n /** Delay before showing (ms) */\n openDelay?: number\n /** Delay before hiding (ms) */\n closeDelay?: number\n /** Whether tooltip has an arrow */\n hasArrow?: boolean\n /** Whether tooltip is disabled */\n isDisabled?: boolean\n /** Additional className for tooltip */\n className?: string\n}\n\n/**\n * Tooltip component for showing additional information on hover/press.\n *\n * Note: On native, tooltips appear on long press. On web, they appear on hover.\n *\n * @example\n * <Tooltip label=\"This is a tooltip\">\n * <Button><ButtonText>Hover me</ButtonText></Button>\n * </Tooltip>\n */\nexport function Tooltip({\n label,\n children,\n placement = 'top',\n openDelay = 0,\n closeDelay = 0,\n hasArrow = true,\n isDisabled = false,\n className,\n ...props\n}: TooltipProps) {\n const [isVisible, setIsVisible] = useState(false)\n const openTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const clearTimeouts = () => {\n if (openTimeoutRef.current) clearTimeout(openTimeoutRef.current)\n if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current)\n }\n\n const show = () => {\n if (isDisabled) return\n clearTimeouts()\n if (openDelay > 0) {\n openTimeoutRef.current = setTimeout(() => setIsVisible(true), openDelay)\n } else {\n setIsVisible(true)\n }\n }\n\n const hide = () => {\n clearTimeouts()\n if (closeDelay > 0) {\n closeTimeoutRef.current = setTimeout(() => setIsVisible(false), closeDelay)\n } else {\n setIsVisible(false)\n }\n }\n\n // Arrow positioning\n const arrowStyles = {\n top: 'bottom-0 left-1/2 -translate-x-1/2 translate-y-full border-l-transparent border-r-transparent border-b-transparent border-t-neutral-800',\n 'top-start': 'bottom-0 left-4 translate-y-full border-l-transparent border-r-transparent border-b-transparent border-t-neutral-800',\n 'top-end': 'bottom-0 right-4 translate-y-full border-l-transparent border-r-transparent border-b-transparent border-t-neutral-800',\n bottom: 'top-0 left-1/2 -translate-x-1/2 -translate-y-full border-l-transparent border-r-transparent border-t-transparent border-b-neutral-800',\n 'bottom-start': 'top-0 left-4 -translate-y-full border-l-transparent border-r-transparent border-t-transparent border-b-neutral-800',\n 'bottom-end': 'top-0 right-4 -translate-y-full border-l-transparent border-r-transparent border-t-transparent border-b-neutral-800',\n left: 'right-0 top-1/2 translate-x-full -translate-y-1/2 border-t-transparent border-b-transparent border-r-transparent border-l-neutral-800',\n right: 'left-0 top-1/2 -translate-x-full -translate-y-1/2 border-t-transparent border-b-transparent border-l-transparent border-r-neutral-800',\n }\n\n // Tooltip positioning\n const tooltipPositionStyles = {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n 'top-start': 'bottom-full left-0 mb-2',\n 'top-end': 'bottom-full right-0 mb-2',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n 'bottom-start': 'top-full left-0 mt-2',\n 'bottom-end': 'top-full right-0 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n }\n\n return (\n <View className=\"relative\" {...props}>\n <Pressable\n onHoverIn={show}\n onHoverOut={hide}\n onLongPress={show}\n onPressOut={hide}\n delayLongPress={500}\n >\n {children}\n </Pressable>\n\n {isVisible && (\n <View\n className={cn(\n 'absolute z-50',\n tooltipPositionStyles[placement],\n className\n )}\n pointerEvents=\"none\"\n >\n <View className=\"bg-neutral-800 px-3 py-2 rounded-md shadow-lg max-w-xs\">\n <Text className=\"text-white text-sm\">{label}</Text>\n {hasArrow && (\n <View\n className={cn(\n 'absolute w-0 h-0 border-4',\n arrowStyles[placement]\n )}\n />\n )}\n </View>\n </View>\n )}\n </View>\n )\n}\n","import React, { useState, createContext, useContext } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface CollapseProps extends ViewProps {\n /** Whether the collapse is initially open */\n defaultIsOpen?: boolean\n /** Controlled open state */\n isOpen?: boolean\n /** Callback when state changes */\n onToggle?: (isOpen: boolean) => void\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\ninterface CollapseContextType {\n isOpen: boolean\n toggle: () => void\n}\n\nconst CollapseContext = createContext<CollapseContextType>({\n isOpen: false,\n toggle: () => {},\n})\n\n/**\n * Collapsible content container.\n *\n * @example\n * <Collapse>\n * <CollapseButton>\n * <Text>Click to expand</Text>\n * </CollapseButton>\n * <CollapseContent>\n * <Text>Hidden content</Text>\n * </CollapseContent>\n * </Collapse>\n */\nexport function Collapse({\n defaultIsOpen = false,\n isOpen: controlledIsOpen,\n onToggle,\n className,\n children,\n ...props\n}: CollapseProps) {\n const [internalIsOpen, setInternalIsOpen] = useState(defaultIsOpen)\n const isOpen = controlledIsOpen ?? internalIsOpen\n\n const toggle = () => {\n const newState = !isOpen\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(newState)\n }\n onToggle?.(newState)\n }\n\n return (\n <CollapseContext.Provider value={{ isOpen, toggle }}>\n <View className={cn('w-full', className)} {...props}>\n {children}\n </View>\n </CollapseContext.Provider>\n )\n}\n\nexport interface CollapseButtonProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Button to toggle collapse state.\n */\nexport function CollapseButton({ children, className }: CollapseButtonProps) {\n const { isOpen, toggle } = useContext(CollapseContext)\n\n return (\n <Pressable\n onPress={toggle}\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: isOpen }}\n className={cn(\n 'flex-row items-center justify-between py-3 px-4',\n 'web:hover:bg-interactive-hover active:bg-interactive-active rounded-lg',\n className\n )}\n >\n {children}\n <Text className={cn('text-text-secondary transition-transform', isOpen && 'rotate-180')}>\n ▼\n </Text>\n </Pressable>\n )\n}\n\nexport interface CollapseContentProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Collapsible content area.\n */\nexport function CollapseContent({ children, className }: CollapseContentProps) {\n const { isOpen } = useContext(CollapseContext)\n\n if (!isOpen) return null\n\n return (\n <View className={cn('overflow-hidden', className)}>\n {children}\n </View>\n )\n}\n\n// Accordion component\n\nexport interface AccordionProps extends ViewProps {\n /** Allow multiple items to be open */\n allowMultiple?: boolean\n /** Default open item indices */\n defaultIndex?: number[]\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\ninterface AccordionContextType {\n openIndices: Set<number>\n toggleIndex: (index: number) => void\n allowMultiple: boolean\n}\n\nconst AccordionContext = createContext<AccordionContextType>({\n openIndices: new Set(),\n toggleIndex: () => {},\n allowMultiple: false,\n})\n\n/**\n * Accordion component for multiple collapsible sections.\n *\n * @example\n * <Accordion>\n * <AccordionItem>\n * <AccordionButton>Section 1</AccordionButton>\n * <AccordionPanel>Content 1</AccordionPanel>\n * </AccordionItem>\n * <AccordionItem>\n * <AccordionButton>Section 2</AccordionButton>\n * <AccordionPanel>Content 2</AccordionPanel>\n * </AccordionItem>\n * </Accordion>\n */\nexport function Accordion({\n allowMultiple = false,\n defaultIndex = [],\n className,\n children,\n ...props\n}: AccordionProps) {\n const [openIndices, setOpenIndices] = useState<Set<number>>(new Set(defaultIndex))\n\n const toggleIndex = (index: number) => {\n setOpenIndices((prev) => {\n const newSet = new Set(prev)\n if (newSet.has(index)) {\n newSet.delete(index)\n } else {\n if (!allowMultiple) {\n newSet.clear()\n }\n newSet.add(index)\n }\n return newSet\n })\n }\n\n return (\n <AccordionContext.Provider value={{ openIndices, toggleIndex, allowMultiple }}>\n <View className={cn('w-full divide-y divide-border-default', className)} {...props}>\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child as React.ReactElement<any>, { index })\n }\n return child\n })}\n </View>\n </AccordionContext.Provider>\n )\n}\n\nexport interface AccordionItemProps {\n index?: number\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Individual accordion item.\n */\nexport function AccordionItem({ index = 0, children, className }: AccordionItemProps) {\n const { openIndices, toggleIndex } = useContext(AccordionContext)\n const isOpen = openIndices.has(index)\n\n return (\n <View className={className}>\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child as React.ReactElement<any>, {\n isOpen,\n onToggle: () => toggleIndex(index),\n })\n }\n return child\n })}\n </View>\n )\n}\n\nexport interface AccordionButtonProps {\n isOpen?: boolean\n onToggle?: () => void\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Accordion item toggle button.\n */\nexport function AccordionButton({\n isOpen = false,\n onToggle,\n children,\n className,\n}: AccordionButtonProps) {\n return (\n <Pressable\n onPress={onToggle}\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: isOpen }}\n className={cn(\n 'flex-row items-center justify-between py-4 px-1',\n 'web:hover:bg-interactive-hover active:bg-interactive-active',\n className\n )}\n >\n <Text className=\"text-text-primary font-medium\">{children}</Text>\n <Text className={cn('text-text-secondary transition-transform', isOpen && 'rotate-180')}>\n ▼\n </Text>\n </Pressable>\n )\n}\n\nexport interface AccordionPanelProps {\n isOpen?: boolean\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Accordion item content panel.\n */\nexport function AccordionPanel({ isOpen = false, children, className }: AccordionPanelProps) {\n if (!isOpen) return null\n\n return (\n <View className={cn('pb-4 px-1', className)}>\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface BreadcrumbsProps extends ViewProps {\n /** Custom separator */\n separator?: React.ReactNode\n /** Maximum items to show (with collapse) */\n maxItems?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Breadcrumbs navigation component.\n *\n * @example\n * <Breadcrumbs>\n * <BreadcrumbItem href=\"/\">Home</BreadcrumbItem>\n * <BreadcrumbItem href=\"/products\">Products</BreadcrumbItem>\n * <BreadcrumbItem isCurrentPage>Widget</BreadcrumbItem>\n * </Breadcrumbs>\n */\nexport function Breadcrumbs({\n separator = '/',\n maxItems,\n className,\n children,\n ...props\n}: BreadcrumbsProps) {\n const items = React.Children.toArray(children)\n let displayItems = items\n\n // Handle max items with ellipsis\n if (maxItems && items.length > maxItems) {\n const firstItem = items[0]\n const lastItems = items.slice(-Math.floor(maxItems / 2))\n displayItems = [\n firstItem,\n <BreadcrumbEllipsis key=\"ellipsis\" />,\n ...lastItems,\n ]\n }\n\n return (\n <View\n accessibilityRole=\"none\"\n className={cn('flex-row items-center flex-wrap', className)}\n {...props}\n >\n {displayItems.map((child, index) => (\n <View key={index} className=\"flex-row items-center\">\n {child}\n {index < displayItems.length - 1 && (\n <Text className=\"mx-2 text-text-tertiary text-sm\">\n {separator}\n </Text>\n )}\n </View>\n ))}\n </View>\n )\n}\n\nexport interface BreadcrumbItemProps {\n /** Navigation URL */\n href?: string\n /** Whether this is the current page */\n isCurrentPage?: boolean\n /** Press handler */\n onPress?: () => void\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Individual breadcrumb item.\n */\nexport function BreadcrumbItem({\n href,\n isCurrentPage = false,\n onPress,\n className,\n children,\n}: BreadcrumbItemProps) {\n if (isCurrentPage) {\n return (\n <Text\n accessibilityRole=\"text\"\n aria-current=\"page\"\n className={cn('text-sm font-medium text-text-primary', className)}\n >\n {children}\n </Text>\n )\n }\n\n return (\n <Pressable\n onPress={onPress}\n accessibilityRole=\"link\"\n accessibilityHint={href}\n >\n <Text\n className={cn(\n 'text-sm text-text-secondary',\n 'web:hover:text-text-primary web:hover:underline',\n 'active:opacity-70',\n className\n )}\n >\n {children}\n </Text>\n </Pressable>\n )\n}\n\n/**\n * Ellipsis for collapsed breadcrumbs.\n */\nfunction BreadcrumbEllipsis() {\n return (\n <Text className=\"text-sm text-text-tertiary\">...</Text>\n )\n}\n","import React, { useState, createContext, useContext } from 'react'\nimport { View, Pressable, Modal, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type PopoverPlacement = 'top' | 'bottom' | 'left' | 'right'\n\ninterface PopoverContextType {\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n placement: PopoverPlacement\n}\n\nconst PopoverContext = createContext<PopoverContextType>({\n isOpen: false,\n setIsOpen: () => {},\n placement: 'bottom',\n})\n\nexport interface PopoverProps extends ViewProps {\n /** Placement of the popover */\n placement?: PopoverPlacement\n /** Controlled open state */\n isOpen?: boolean\n /** Callback when open state changes */\n onOpenChange?: (isOpen: boolean) => void\n /** Whether clicking outside closes the popover */\n closeOnClickOutside?: boolean\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Popover component for displaying floating content.\n *\n * @example\n * <Popover>\n * <PopoverTrigger>\n * <Button><ButtonText>Open</ButtonText></Button>\n * </PopoverTrigger>\n * <PopoverContent>\n * <Text>Popover content</Text>\n * </PopoverContent>\n * </Popover>\n */\nexport function Popover({\n placement = 'bottom',\n isOpen: controlledIsOpen,\n onOpenChange,\n closeOnClickOutside = true,\n className,\n children,\n ...props\n}: PopoverProps) {\n const [internalIsOpen, setInternalIsOpen] = useState(false)\n const isOpen = controlledIsOpen ?? internalIsOpen\n\n const setIsOpen = (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open)\n }\n onOpenChange?.(open)\n }\n\n return (\n <PopoverContext.Provider value={{ isOpen, setIsOpen, placement }}>\n <View className={cn('relative', className)} {...props}>\n {children}\n </View>\n </PopoverContext.Provider>\n )\n}\n\nexport interface PopoverTriggerProps {\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Trigger element for the popover.\n */\nexport function PopoverTrigger({ children, className }: PopoverTriggerProps) {\n const { isOpen, setIsOpen } = useContext(PopoverContext)\n\n return (\n <Pressable\n onPress={() => setIsOpen(!isOpen)}\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: isOpen }}\n className={className}\n >\n {children}\n </Pressable>\n )\n}\n\nexport interface PopoverContentProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Content container for the popover.\n */\nexport function PopoverContent({ children, className }: PopoverContentProps) {\n const { isOpen, setIsOpen, placement } = useContext(PopoverContext)\n\n if (!isOpen) return null\n\n const placementStyles = {\n top: 'bottom-full left-0 mb-2',\n bottom: 'top-full left-0 mt-2',\n left: 'right-full top-0 mr-2',\n right: 'left-full top-0 ml-2',\n }\n\n return (\n <>\n {/* Backdrop */}\n <Pressable\n onPress={() => setIsOpen(false)}\n className=\"fixed inset-0 z-40\"\n style={{ position: 'absolute' }}\n />\n {/* Content */}\n <View\n className={cn(\n 'absolute z-50 min-w-[200px]',\n 'bg-surface-elevated rounded-lg shadow-lg border border-border-default',\n 'p-4',\n placementStyles[placement],\n className\n )}\n >\n {children}\n </View>\n </>\n )\n}\n\nexport interface PopoverCloseButtonProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Button to close the popover.\n */\nexport function PopoverCloseButton({ children, className }: PopoverCloseButtonProps) {\n const { setIsOpen } = useContext(PopoverContext)\n\n return (\n <Pressable\n onPress={() => setIsOpen(false)}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close popover\"\n className={cn('p-1', className)}\n >\n {children}\n </Pressable>\n )\n}\n","import React, { useState, createContext, useContext } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\ninterface MenuContextType {\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n closeMenu: () => void\n}\n\nconst MenuContext = createContext<MenuContextType>({\n isOpen: false,\n setIsOpen: () => {},\n closeMenu: () => {},\n})\n\nexport interface MenuProps extends ViewProps {\n /** Controlled open state */\n isOpen?: boolean\n /** Callback when open state changes */\n onOpenChange?: (isOpen: boolean) => void\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Menu component for dropdown menus.\n *\n * @example\n * <Menu>\n * <MenuTrigger>\n * <Button><ButtonText>Options</ButtonText></Button>\n * </MenuTrigger>\n * <MenuList>\n * <MenuItem onPress={() => {}}>Edit</MenuItem>\n * <MenuItem onPress={() => {}}>Delete</MenuItem>\n * <MenuDivider />\n * <MenuItem onPress={() => {}} isDestructive>Remove</MenuItem>\n * </MenuList>\n * </Menu>\n */\nexport function Menu({\n isOpen: controlledIsOpen,\n onOpenChange,\n className,\n children,\n ...props\n}: MenuProps) {\n const [internalIsOpen, setInternalIsOpen] = useState(false)\n const isOpen = controlledIsOpen ?? internalIsOpen\n\n const setIsOpen = (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open)\n }\n onOpenChange?.(open)\n }\n\n const closeMenu = () => setIsOpen(false)\n\n return (\n <MenuContext.Provider value={{ isOpen, setIsOpen, closeMenu }}>\n <View className={cn('relative', className)} {...props}>\n {children}\n </View>\n </MenuContext.Provider>\n )\n}\n\nexport interface MenuTriggerProps {\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Trigger element for the menu.\n */\nexport function MenuTrigger({ children, className }: MenuTriggerProps) {\n const { isOpen, setIsOpen } = useContext(MenuContext)\n\n return (\n <Pressable\n onPress={() => setIsOpen(!isOpen)}\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: isOpen }}\n className={className}\n >\n {children}\n </Pressable>\n )\n}\n\nexport interface MenuListProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Container for menu items.\n */\nexport function MenuList({ children, className }: MenuListProps) {\n const { isOpen, setIsOpen } = useContext(MenuContext)\n\n if (!isOpen) return null\n\n return (\n <>\n {/* Backdrop */}\n <Pressable\n onPress={() => setIsOpen(false)}\n className=\"fixed inset-0 z-40\"\n style={{ position: 'absolute' }}\n />\n {/* Menu */}\n <View\n className={cn(\n 'absolute z-50 top-full left-0 mt-1 min-w-[160px]',\n 'bg-surface-elevated rounded-lg shadow-lg border border-border-default',\n 'py-1 overflow-hidden',\n className\n )}\n accessibilityRole=\"menu\"\n >\n {children}\n </View>\n </>\n )\n}\n\nexport interface MenuItemProps {\n /** Press handler */\n onPress?: () => void\n /** Whether the item is disabled */\n isDisabled?: boolean\n /** Whether the item is destructive (shows in red) */\n isDestructive?: boolean\n /** Icon element */\n icon?: React.ReactNode\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Individual menu item.\n */\nexport function MenuItem({\n onPress,\n isDisabled = false,\n isDestructive = false,\n icon,\n className,\n children,\n}: MenuItemProps) {\n const { closeMenu } = useContext(MenuContext)\n\n const handlePress = () => {\n if (isDisabled) return\n onPress?.()\n closeMenu()\n }\n\n return (\n <Pressable\n onPress={handlePress}\n disabled={isDisabled}\n accessibilityRole=\"menuitem\"\n accessibilityState={{ disabled: isDisabled }}\n className={cn(\n 'flex-row items-center px-4 py-2',\n 'web:hover:bg-interactive-hover active:bg-interactive-active',\n isDisabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n >\n {icon && <View className=\"mr-3\">{icon}</View>}\n <Text\n className={cn(\n 'text-sm',\n isDestructive ? 'text-status-error' : 'text-text-primary'\n )}\n >\n {children}\n </Text>\n </Pressable>\n )\n}\n\nexport interface MenuDividerProps {\n className?: string\n}\n\n/**\n * Divider between menu items.\n */\nexport function MenuDivider({ className }: MenuDividerProps) {\n return <View className={cn('h-px bg-border-default my-1', className)} />\n}\n\nexport interface MenuGroupProps {\n /** Group label */\n label?: string\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Group of menu items with optional label.\n */\nexport function MenuGroup({ label, children, className }: MenuGroupProps) {\n return (\n <View className={className}>\n {label && (\n <Text className=\"px-4 py-2 text-xs font-semibold text-text-secondary uppercase\">\n {label}\n </Text>\n )}\n {children}\n </View>\n )\n}\n","import React, { useState, createContext, useContext } from 'react'\nimport { View, Text, Pressable, ScrollView, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface SelectOption<T = string> {\n value: T\n label: string\n isDisabled?: boolean\n}\n\ninterface SelectContextType<T = string> {\n value: T | T[] | null\n isMulti: boolean\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n selectValue: (val: T) => void\n isSelected: (val: T) => boolean\n}\n\nconst SelectContext = createContext<SelectContextType<any>>({\n value: null,\n isMulti: false,\n isOpen: false,\n setIsOpen: () => {},\n selectValue: () => {},\n isSelected: () => false,\n})\n\nexport interface SelectProps<T = string> extends ViewProps {\n /** Selected value (single mode) */\n value?: T | null\n /** Selected values (multi mode) */\n values?: T[]\n /** Callback when value changes (single mode) */\n onChange?: (value: T | null) => void\n /** Callback when values change (multi mode) */\n onChangeMulti?: (values: T[]) => void\n /** Enable multi-select */\n isMulti?: boolean\n /** Placeholder text */\n placeholder?: string\n /** Whether the select is disabled */\n isDisabled?: boolean\n /** Whether the select has an error */\n isInvalid?: boolean\n /** Options to display */\n options: SelectOption<T>[]\n /** Additional className */\n className?: string\n}\n\n/**\n * Select component for single or multi-selection.\n *\n * @example\n * // Single select\n * <Select\n * value={value}\n * onChange={setValue}\n * options={[\n * { value: '1', label: 'Option 1' },\n * { value: '2', label: 'Option 2' },\n * ]}\n * />\n *\n * // Multi select\n * <Select\n * isMulti\n * values={values}\n * onChangeMulti={setValues}\n * options={options}\n * />\n */\nexport function Select<T extends string = string>({\n value,\n values = [],\n onChange,\n onChangeMulti,\n isMulti = false,\n placeholder = 'Select...',\n isDisabled = false,\n isInvalid = false,\n options,\n className,\n ...props\n}: SelectProps<T>) {\n const [isOpen, setIsOpen] = useState(false)\n\n const selectValue = (val: T) => {\n if (isMulti) {\n const newValues = values.includes(val)\n ? values.filter((v) => v !== val)\n : [...values, val]\n onChangeMulti?.(newValues)\n } else {\n onChange?.(val)\n setIsOpen(false)\n }\n }\n\n const isSelected = (val: T) => {\n if (isMulti) {\n return values.includes(val)\n }\n return value === val\n }\n\n const getDisplayValue = () => {\n if (isMulti) {\n if (values.length === 0) return placeholder\n if (values.length === 1) {\n return options.find((o) => o.value === values[0])?.label || placeholder\n }\n return `${values.length} selected`\n }\n if (value === null || value === undefined) return placeholder\n return options.find((o) => o.value === value)?.label || placeholder\n }\n\n const clearValue = () => {\n if (isMulti) {\n onChangeMulti?.([])\n } else {\n onChange?.(null)\n }\n }\n\n const hasValue = isMulti ? values.length > 0 : value !== null && value !== undefined\n\n return (\n <SelectContext.Provider value={{ value, isMulti, isOpen, setIsOpen, selectValue, isSelected }}>\n <View className={cn('relative w-full', className)} {...props}>\n {/* Trigger */}\n <Pressable\n onPress={() => !isDisabled && setIsOpen(!isOpen)}\n disabled={isDisabled}\n accessibilityRole=\"combobox\"\n accessibilityState={{ expanded: isOpen, disabled: isDisabled }}\n className={cn(\n 'flex-row items-center justify-between px-4 py-2.5 rounded-md border',\n 'bg-surface-base',\n isInvalid ? 'border-border-input-error' : 'border-border-input',\n !isDisabled && !isInvalid && 'web:hover:border-border-input-hover',\n isOpen && 'border-border-input-focus',\n isDisabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <Text\n className={cn(\n 'flex-1',\n hasValue ? 'text-text-primary' : 'text-text-tertiary'\n )}\n >\n {getDisplayValue()}\n </Text>\n <View className=\"flex-row items-center gap-2\">\n {hasValue && (\n <Pressable\n onPress={(e) => {\n e.stopPropagation?.()\n clearValue()\n }}\n className=\"p-1\"\n >\n <Text className=\"text-text-secondary text-xs\">×</Text>\n </Pressable>\n )}\n <Text className={cn('text-text-secondary', isOpen && 'rotate-180')}>▼</Text>\n </View>\n </Pressable>\n\n {/* Dropdown */}\n {isOpen && (\n <>\n <Pressable\n onPress={() => setIsOpen(false)}\n className=\"fixed inset-0 z-40\"\n style={{ position: 'absolute' }}\n />\n <View\n className={cn(\n 'absolute z-50 top-full left-0 right-0 mt-1',\n 'bg-surface-elevated rounded-md shadow-lg border border-border-default',\n 'max-h-60 overflow-hidden'\n )}\n >\n <ScrollView className=\"py-1\">\n {options.map((option) => (\n <SelectOption key={option.value} option={option} />\n ))}\n </ScrollView>\n </View>\n </>\n )}\n </View>\n </SelectContext.Provider>\n )\n}\n\ninterface SelectOptionComponentProps<T> {\n option: SelectOption<T>\n}\n\nfunction SelectOption<T>({ option }: SelectOptionComponentProps<T>) {\n const { selectValue, isSelected, isMulti } = useContext(SelectContext)\n const selected = isSelected(option.value)\n\n return (\n <Pressable\n onPress={() => !option.isDisabled && selectValue(option.value)}\n disabled={option.isDisabled}\n accessibilityRole={isMulti ? 'checkbox' : ('option' as any)}\n accessibilityState={{ selected, disabled: option.isDisabled }}\n className={cn(\n 'flex-row items-center px-4 py-2',\n 'web:hover:bg-interactive-hover active:bg-interactive-active',\n selected && 'bg-interactive-selected',\n option.isDisabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n {isMulti && (\n <View\n className={cn(\n 'w-4 h-4 mr-3 rounded border',\n selected ? 'bg-brand-primary border-brand-primary' : 'border-border-strong'\n )}\n >\n {selected && <Text className=\"text-white text-xs text-center\">✓</Text>}\n </View>\n )}\n <Text className={cn('text-sm', selected && !isMulti ? 'text-brand-primary font-medium' : 'text-text-primary')}>\n {option.label}\n </Text>\n </Pressable>\n )\n}\n","import React, { useState, useCallback, createContext, useContext } from 'react'\nimport { View, Text, Pressable, type ViewProps, StyleSheet, Platform } from 'react-native'\nimport { cn } from '../../../utils/cn'\nimport { neumorphicShadows, getHoverColors } from '../../../theme'\n\nexport type ToolbarButtonVariant = 'default' | 'neumorphic'\nexport type ToolbarButtonSize = 'sm' | 'md' | 'lg'\n\ninterface ToolbarButtonContextType {\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n}\n\nconst ToolbarButtonContext = createContext<ToolbarButtonContextType>({\n isOpen: false,\n setIsOpen: () => {},\n})\n\nexport interface ToolbarButtonProps extends ViewProps {\n /** Button label */\n label: string\n /** Icon component */\n icon?: React.ReactNode\n /** \n * Whether the button is in active/selected state.\n * - `true`: pressed/active appearance (darker, white text, orange icon)\n * - `undefined`: pressed appearance (darker, white text/icon)\n * - `false`: raised/inactive appearance (lighter, gray text/icon)\n */\n isActive?: boolean\n /** Whether the button is disabled */\n isDisabled?: boolean\n /** Size of the button */\n size?: ToolbarButtonSize\n /** Visual variant */\n variant?: ToolbarButtonVariant\n /** Tooltip text (shown when label is hidden) */\n tooltip?: string\n /** Whether to show label (false = icon only) */\n showLabel?: boolean\n /** Press handler */\n onPress?: () => void\n /** Menu content (renders in popover) */\n menuContent?: React.ReactNode\n /** Additional className */\n className?: string\n}\n\n// Base button color\nconst BUTTON_BG = '#3C3C3C'\nconst MENU_BG = '#2C2C2C'\n\n// Calculate hover colors using color math\nconst hoverColors = getHoverColors(BUTTON_BG, 'medium')\n\n// Size style maps\nconst sizeStyles: Record<ToolbarButtonSize, string> = {\n sm: 'px-2 py-1 min-h-[26px]',\n md: 'px-2.5 py-1 min-h-[30px]',\n lg: 'px-3 py-1.5 min-h-[36px]',\n}\n\nconst textSizeStyles: Record<ToolbarButtonSize, string> = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n}\n\n/**\n * ToolbarButton component for toolbar actions with toggle state support.\n *\n * Features:\n * - Neumorphic styling with inset shadows for pressed/raised 3D effect\n * - Active (pressed) state is the default visual appearance\n * - Set isActive={false} explicitly for the raised/inactive appearance\n * - Orange accent color on icon when isActive={true}\n * - Hover states that lighten background and remove shadows\n *\n * @example\n * // Toggle button - orange icon when active\n * <ToolbarButton\n * label=\"Settings\"\n * icon={<SettingsIcon />}\n * isActive={isSettingsOpen}\n * onPress={() => setIsSettingsOpen(!isSettingsOpen)}\n * />\n *\n * @example\n * // Explicitly inactive (raised appearance)\n * <ToolbarButton\n * label=\"Filter\"\n * icon={<FilterIcon />}\n * isActive={false}\n * />\n */\nexport function ToolbarButton({\n label,\n icon,\n isActive,\n isDisabled = false,\n size = 'md',\n variant = 'neumorphic',\n tooltip,\n showLabel = true,\n onPress,\n menuContent,\n className,\n children,\n ...props\n}: ToolbarButtonProps) {\n const [isOpen, setIsOpen] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n\n const handlePress = useCallback(() => {\n if (isDisabled) return\n if (menuContent) {\n setIsOpen((prev) => !prev)\n }\n onPress?.()\n }, [isDisabled, menuContent, onPress])\n\n const handleClose = useCallback(() => {\n setIsOpen(false)\n }, [])\n\n // Match original logic: active !== false means \"active\" (sunken) appearance\n const selected = isActive === undefined ? isOpen : isActive\n const showActive = isActive !== false\n\n // Determine icon color based on state\n const getIconColor = () => {\n if (isActive === true) return '#FF7900' // brand-primary\n return showActive ? '#FFFFFF' : '#D1D1D1'\n }\n\n // Get shadow and background styles for neumorphic variant\n const getNeumorphicStyle = () => {\n if (isDisabled) {\n return styles.disabledBg\n }\n \n const shadows = neumorphicShadows.charcoal\n \n if (showActive) {\n // Active = pressed/sunken appearance\n return {\n backgroundColor: isHovered ? hoverColors.pressed : BUTTON_BG,\n ...(isHovered ? shadows.pressedHover.subtle : shadows.pressed.subtle),\n }\n } else {\n // Inactive = raised/elevated appearance\n return {\n backgroundColor: isHovered ? hoverColors.raised : BUTTON_BG,\n ...(isHovered ? shadows.raisedHover.subtle : shadows.raised.subtle),\n }\n }\n }\n\n return (\n <ToolbarButtonContext.Provider value={{ isOpen, setIsOpen }}>\n <View className=\"relative\" {...props}>\n <Pressable\n onPress={handlePress}\n onHoverIn={() => setIsHovered(true)}\n onHoverOut={() => setIsHovered(false)}\n disabled={isDisabled}\n accessibilityRole=\"button\"\n accessibilityState={{ selected, disabled: isDisabled }}\n accessibilityLabel={label}\n accessibilityHint={tooltip}\n className={cn(\n // Base styles\n 'flex-row items-center justify-center rounded',\n 'web:transition-all web:duration-150 web:cursor-pointer',\n // Size\n sizeStyles[size],\n // Disabled\n isDisabled && 'opacity-40 web:cursor-default web:pointer-events-none',\n className\n )}\n style={[\n variant === 'neumorphic' && getNeumorphicStyle(),\n variant === 'default' && {\n backgroundColor: showActive ? BUTTON_BG : '#6E6E6E',\n },\n ]}\n >\n {icon && (\n <View className=\"w-5 h-5 items-center justify-center\">\n {React.isValidElement(icon) \n ? React.cloneElement(icon as React.ReactElement<any>, {\n size: 20,\n width: 20,\n height: 20,\n color: getIconColor(),\n style: { \n color: getIconColor(),\n width: 20,\n height: 20,\n },\n })\n : icon\n }\n </View>\n )}\n {showLabel && (\n <Text\n className={cn(\n 'font-bold',\n textSizeStyles[size],\n icon && 'ml-2',\n showActive ? 'text-white' : 'text-[#D1D1D1]'\n )}\n numberOfLines={1}\n >\n {label}\n </Text>\n )}\n </Pressable>\n\n {/* Popover Menu */}\n {menuContent && isOpen && (\n <>\n {/* Backdrop */}\n <Pressable\n onPress={handleClose}\n style={StyleSheet.absoluteFill}\n className=\"z-40\"\n />\n {/* Menu Content */}\n <View\n className={cn(\n 'absolute z-50 top-full left-0 mt-1',\n 'rounded-lg shadow-lg border border-border-default',\n 'min-w-[150px] overflow-hidden',\n `bg-[${MENU_BG}]`\n )}\n >\n {menuContent}\n </View>\n </>\n )}\n </View>\n </ToolbarButtonContext.Provider>\n )\n}\n\n// Styles that can't be easily expressed in Tailwind\nconst styles = StyleSheet.create({\n // Disabled - flat gray background, no shadows\n disabledBg: {\n backgroundColor: 'rgba(255, 255, 255, 0.12)',\n ...Platform.select({\n web: { boxShadow: 'none' } as any,\n default: { shadowOpacity: 0, elevation: 0 },\n }),\n },\n})\n\nexport interface ToolbarButtonGroupProps extends ViewProps {\n /** Orientation of the button group */\n orientation?: 'horizontal' | 'vertical'\n /** Gap between buttons */\n gap?: 'none' | 'sm' | 'md'\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst gapStyles: Record<string, string> = {\n none: 'gap-0',\n sm: 'gap-1',\n md: 'gap-2',\n}\n\n/**\n * Container for grouping toolbar buttons together.\n */\nexport function ToolbarButtonGroup({\n orientation = 'horizontal',\n gap = 'sm',\n className,\n children,\n ...props\n}: ToolbarButtonGroupProps) {\n return (\n <View\n className={cn(\n orientation === 'horizontal' ? 'flex-row' : 'flex-col',\n gapStyles[gap],\n 'items-center',\n className\n )}\n accessibilityRole=\"toolbar\"\n {...props}\n >\n {children}\n </View>\n )\n}\n\n/**\n * Hook to access toolbar button context (for custom menu content)\n */\nexport function useToolbarButton() {\n return useContext(ToolbarButtonContext)\n}\n","import React, { createContext, useContext } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type RadioSize = 'sm' | 'md' | 'lg'\nexport type RadioColor = 'primary' | 'secondary' | 'success' | 'error'\n\ninterface RadioGroupContextType {\n value: string | null\n onChange: (value: string) => void\n name?: string\n isDisabled?: boolean\n size?: RadioSize\n color?: RadioColor\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextType | null>(null)\n\nexport interface RadioGroupProps extends ViewProps {\n /** Current selected value */\n value: string | null\n /** Callback when value changes */\n onChange: (value: string) => void\n /** Group name for form submission */\n name?: string\n /** Whether all radios are disabled */\n isDisabled?: boolean\n /** Size for all radios */\n size?: RadioSize\n /** Color for all radios */\n color?: RadioColor\n /** Orientation of the group */\n orientation?: 'horizontal' | 'vertical'\n /** Gap between items */\n gap?: 'sm' | 'md' | 'lg'\n /** Label for the group */\n label?: string\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst gapStyles = {\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n}\n\n/**\n * RadioGroup component for grouping radio buttons.\n *\n * @example\n * <RadioGroup value={selected} onChange={setSelected}>\n * <Radio value=\"option1\">Option 1</Radio>\n * <Radio value=\"option2\">Option 2</Radio>\n * <Radio value=\"option3\">Option 3</Radio>\n * </RadioGroup>\n */\nexport function RadioGroup({\n value,\n onChange,\n name,\n isDisabled = false,\n size = 'md',\n color = 'primary',\n orientation = 'vertical',\n gap = 'md',\n label,\n className,\n children,\n ...props\n}: RadioGroupProps) {\n return (\n <RadioGroupContext.Provider value={{ value, onChange, name, isDisabled, size, color }}>\n <View\n className={cn(className)}\n accessibilityRole=\"radiogroup\"\n accessibilityLabel={label}\n {...props}\n >\n {label && (\n <Text className=\"text-sm font-medium text-text-primary mb-2\">\n {label}\n </Text>\n )}\n <View\n className={cn(\n orientation === 'horizontal' ? 'flex-row flex-wrap' : 'flex-col',\n gapStyles[gap]\n )}\n >\n {children}\n </View>\n </View>\n </RadioGroupContext.Provider>\n )\n}\n\nexport interface RadioProps extends ViewProps {\n /** Value of this radio option */\n value: string\n /** Whether this radio is disabled */\n isDisabled?: boolean\n /** Size override */\n size?: RadioSize\n /** Color override */\n color?: RadioColor\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst sizeConfig: Record<RadioSize, { outer: string; inner: string; text: string }> = {\n sm: { outer: 'w-4 h-4', inner: 'w-2 h-2', text: 'text-sm' },\n md: { outer: 'w-5 h-5', inner: 'w-2.5 h-2.5', text: 'text-base' },\n lg: { outer: 'w-6 h-6', inner: 'w-3 h-3', text: 'text-lg' },\n}\n\nconst colorStyles: Record<RadioColor, { checked: string; unchecked: string }> = {\n primary: { checked: 'border-brand-primary bg-brand-primary', unchecked: 'border-border-strong' },\n secondary: { checked: 'border-brand-secondary bg-brand-secondary', unchecked: 'border-border-strong' },\n success: { checked: 'border-status-success bg-status-success', unchecked: 'border-border-strong' },\n error: { checked: 'border-status-error bg-status-error', unchecked: 'border-border-strong' },\n}\n\n/**\n * Radio button component.\n *\n * @example\n * <Radio value=\"option1\">Option 1</Radio>\n */\nexport function Radio({\n value,\n isDisabled: radioDisabled,\n size: radioSize,\n color: radioColor,\n className,\n children,\n ...props\n}: RadioProps) {\n const context = useContext(RadioGroupContext)\n\n if (!context) {\n throw new Error('Radio must be used within a RadioGroup')\n }\n\n const { value: selectedValue, onChange, isDisabled: groupDisabled, size: groupSize, color: groupColor } = context\n\n const isDisabled = radioDisabled ?? groupDisabled ?? false\n const size = radioSize ?? groupSize ?? 'md'\n const color = radioColor ?? groupColor ?? 'primary'\n const isChecked = selectedValue === value\n\n const { outer, inner, text } = sizeConfig[size]\n const { checked, unchecked } = colorStyles[color]\n\n const handlePress = () => {\n if (!isDisabled) {\n onChange(value)\n }\n }\n\n return (\n <Pressable\n onPress={handlePress}\n disabled={isDisabled}\n accessibilityRole=\"radio\"\n accessibilityState={{ checked: isChecked, disabled: isDisabled }}\n className={cn(\n 'flex-row items-center',\n isDisabled && 'opacity-50',\n className\n )}\n {...props}\n >\n {/* Radio circle */}\n <View\n className={cn(\n 'rounded-full border-2 items-center justify-center',\n 'transition-colors duration-150',\n outer,\n isChecked ? checked : unchecked,\n !isDisabled && !isChecked && 'web:hover:border-brand-primary'\n )}\n >\n {/* Inner dot */}\n {isChecked && (\n <View className={cn('rounded-full bg-white', inner)} />\n )}\n </View>\n\n {/* Label */}\n {children && (\n <Text className={cn('ml-2 text-text-primary', text)}>\n {children}\n </Text>\n )}\n </Pressable>\n )\n}\n","import React from 'react'\nimport { View, Text, Pressable, Modal, ScrollView, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type DrawerPlacement = 'left' | 'right' | 'top' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\nexport interface DrawerProps extends ViewProps {\n /** Whether the drawer is open */\n isOpen: boolean\n /** Callback when drawer should close */\n onClose: () => void\n /** Placement of the drawer */\n placement?: DrawerPlacement\n /** Size of the drawer */\n size?: DrawerSize\n /** Whether clicking the backdrop closes the drawer */\n closeOnOverlayClick?: boolean\n /** Whether to show the close button */\n showCloseButton?: boolean\n /** Title for the drawer header */\n title?: string\n /** Additional className for the drawer content */\n className?: string\n children?: React.ReactNode\n}\n\nconst sizeStyles: Record<DrawerPlacement, Record<DrawerSize, string>> = {\n left: {\n sm: 'w-64',\n md: 'w-80',\n lg: 'w-96',\n xl: 'w-[480px]',\n full: 'w-full',\n },\n right: {\n sm: 'w-64',\n md: 'w-80',\n lg: 'w-96',\n xl: 'w-[480px]',\n full: 'w-full',\n },\n top: {\n sm: 'h-32',\n md: 'h-48',\n lg: 'h-64',\n xl: 'h-96',\n full: 'h-full',\n },\n bottom: {\n sm: 'h-32',\n md: 'h-48',\n lg: 'h-64',\n xl: 'h-96',\n full: 'h-full',\n },\n}\n\nconst placementStyles: Record<DrawerPlacement, string> = {\n left: 'left-0 top-0 bottom-0 h-full',\n right: 'right-0 top-0 bottom-0 h-full',\n top: 'top-0 left-0 right-0 w-full',\n bottom: 'bottom-0 left-0 right-0 w-full',\n}\n\n/**\n * Drawer component for side panel overlays.\n *\n * @example\n * <Drawer\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Settings\"\n * placement=\"right\"\n * >\n * <DrawerBody>\n * <Text>Drawer content</Text>\n * </DrawerBody>\n * </Drawer>\n */\nexport function Drawer({\n isOpen,\n onClose,\n placement = 'right',\n size = 'md',\n closeOnOverlayClick = true,\n showCloseButton = true,\n title,\n className,\n children,\n ...props\n}: DrawerProps) {\n if (!isOpen) return null\n\n const handleOverlayPress = () => {\n if (closeOnOverlayClick) {\n onClose()\n }\n }\n\n return (\n <Modal\n visible={isOpen}\n transparent\n animationType=\"fade\"\n onRequestClose={onClose}\n >\n <View className=\"flex-1\">\n {/* Backdrop */}\n <Pressable\n onPress={handleOverlayPress}\n className=\"absolute inset-0 bg-black/50\"\n />\n\n {/* Drawer Panel */}\n <View\n className={cn(\n 'absolute bg-surface-elevated shadow-2xl',\n placementStyles[placement],\n sizeStyles[placement][size],\n className\n )}\n accessibilityRole={'dialog' as any}\n {...props}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <View className=\"flex-row items-center justify-between px-4 py-3 border-b border-border-default\">\n {title && (\n <Text className=\"text-lg font-semibold text-text-primary\">\n {title}\n </Text>\n )}\n {showCloseButton && (\n <Pressable\n onPress={onClose}\n className=\"p-2 -m-2 rounded-full web:hover:bg-interactive-hover\"\n accessibilityLabel=\"Close drawer\"\n >\n <Text className=\"text-text-secondary text-xl\">×</Text>\n </Pressable>\n )}\n </View>\n )}\n\n {/* Content */}\n <View className=\"flex-1\">\n {children}\n </View>\n </View>\n </View>\n </Modal>\n )\n}\n\nexport interface DrawerHeaderProps extends ViewProps {\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Header section for the drawer.\n */\nexport function DrawerHeader({ className, children, ...props }: DrawerHeaderProps) {\n return (\n <View\n className={cn('px-4 py-3 border-b border-border-default', className)}\n {...props}\n >\n {children}\n </View>\n )\n}\n\nexport interface DrawerBodyProps extends ViewProps {\n /** Whether the body should scroll */\n scrollable?: boolean\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Body/content section for the drawer.\n */\nexport function DrawerBody({ scrollable = true, className, children, ...props }: DrawerBodyProps) {\n if (scrollable) {\n return (\n <ScrollView\n className={cn('flex-1 p-4', className)}\n {...props}\n >\n {children}\n </ScrollView>\n )\n }\n\n return (\n <View className={cn('flex-1 p-4', className)} {...props}>\n {children}\n </View>\n )\n}\n\nexport interface DrawerFooterProps extends ViewProps {\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Footer section for the drawer, typically for action buttons.\n */\nexport function DrawerFooter({ className, children, ...props }: DrawerFooterProps) {\n return (\n <View\n className={cn(\n 'flex-row items-center justify-end gap-3',\n 'px-4 py-3 border-t border-border-default',\n className\n )}\n {...props}\n >\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type ProgressSize = 'sm' | 'md' | 'lg'\nexport type ProgressColor = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info'\nexport type ProgressVariant = 'linear' | 'circular'\n\n/** Maps the color prop to a CSS variable reference for inline styles */\nconst colorVarMap: Record<ProgressColor, string> = {\n primary: 'var(--color-brand-primary)',\n secondary: 'var(--color-brand-secondary)',\n success: 'var(--color-status-success)',\n error: 'var(--color-status-error)',\n warning: 'var(--color-status-warning)',\n info: 'var(--color-status-info)',\n}\n\nexport interface ProgressProps extends ViewProps {\n /** Current value (0-100) */\n value?: number\n /** Maximum value */\n max?: number\n /** Whether the progress is indeterminate */\n isIndeterminate?: boolean\n /** Size of the progress bar */\n size?: ProgressSize\n /** Color of the progress */\n color?: ProgressColor\n /** Whether to show the value label */\n showValue?: boolean\n /** Custom value format function */\n formatValue?: (value: number, max: number) => string\n /** Label text */\n label?: string\n /** Additional className */\n className?: string\n}\n\nconst sizeStyles: Record<ProgressSize, string> = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n}\n\nconst colorStyles: Record<ProgressColor, string> = {\n primary: 'bg-brand-primary',\n secondary: 'bg-brand-secondary',\n success: 'bg-status-success',\n error: 'bg-status-error',\n warning: 'bg-status-warning',\n info: 'bg-status-info',\n}\n\nconst trackColorStyles: Record<ProgressColor, string> = {\n primary: 'bg-brand-primary/20',\n secondary: 'bg-brand-secondary/20',\n success: 'bg-status-success/20',\n error: 'bg-status-error/20',\n warning: 'bg-status-warning/20',\n info: 'bg-status-info/20',\n}\n\n/**\n * Linear progress bar component.\n *\n * @example\n * // Determinate progress\n * <Progress value={75} />\n *\n * @example\n * // With label and value\n * <Progress value={45} label=\"Uploading...\" showValue />\n *\n * @example\n * // Indeterminate progress\n * <Progress isIndeterminate />\n */\nexport function Progress({\n value = 0,\n max = 100,\n isIndeterminate = false,\n size = 'md',\n color = 'primary',\n showValue = false,\n formatValue = (v, m) => `${Math.round((v / m) * 100)}%`,\n label,\n className,\n ...props\n}: ProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100)\n\n return (\n <View className={cn('w-full', className)} {...props}>\n {/* Label and Value Row */}\n {(label || showValue) && (\n <View className=\"flex-row justify-between items-center mb-1\">\n {label && (\n <Text className=\"text-sm text-text-secondary\">{label}</Text>\n )}\n {showValue && !isIndeterminate && (\n <Text className=\"text-sm font-medium text-text-primary\">\n {formatValue(value, max)}\n </Text>\n )}\n </View>\n )}\n\n {/* Progress Track */}\n <View\n className={cn(\n 'w-full rounded-full overflow-hidden',\n trackColorStyles[color],\n sizeStyles[size]\n )}\n accessibilityRole=\"progressbar\"\n accessibilityValue={{\n min: 0,\n max: max,\n now: isIndeterminate ? undefined : value,\n }}\n >\n {/* Progress Fill */}\n <View\n className={cn(\n 'h-full rounded-full',\n colorStyles[color],\n isIndeterminate && 'animate-pulse w-1/3'\n )}\n style={isIndeterminate ? undefined : { width: `${percentage}%` }}\n />\n </View>\n </View>\n )\n}\n\nexport interface CircularProgressProps extends ViewProps {\n /** Current value (0-100) */\n value?: number\n /** Maximum value */\n max?: number\n /** Whether the progress is indeterminate */\n isIndeterminate?: boolean\n /** Size of the progress circle (diameter) */\n size?: number\n /** Stroke width */\n strokeWidth?: number\n /** Color of the progress */\n color?: ProgressColor\n /** Whether to show the value in center */\n showValue?: boolean\n /** Custom value format function */\n formatValue?: (value: number, max: number) => string\n /** Additional className */\n className?: string\n}\n\n/**\n * Circular progress indicator component.\n *\n * @example\n * <CircularProgress value={75} showValue />\n */\nexport function CircularProgress({\n value = 0,\n max = 100,\n isIndeterminate = false,\n size = 48,\n strokeWidth = 4,\n color = 'primary',\n showValue = false,\n formatValue = (v, m) => `${Math.round((v / m) * 100)}%`,\n className,\n ...props\n}: CircularProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100)\n const radius = (size - strokeWidth) / 2\n const circumference = 2 * Math.PI * radius\n const strokeDashoffset = circumference - (percentage / 100) * circumference\n\n // For web, we use SVG. For native, we use a simplified view-based approach.\n return (\n <View\n className={cn('items-center justify-center', className)}\n style={{ width: size, height: size }}\n accessibilityRole=\"progressbar\"\n accessibilityValue={{\n min: 0,\n max: max,\n now: isIndeterminate ? undefined : value,\n }}\n {...props}\n >\n {/* Background circle */}\n <View\n className={cn(\n 'absolute rounded-full border-4',\n 'border-border-default'\n )}\n style={{\n width: size,\n height: size,\n borderWidth: strokeWidth,\n }}\n />\n\n {/* Progress arc (simplified) */}\n <View\n className={cn(\n 'absolute rounded-full',\n colorStyles[color],\n isIndeterminate && 'animate-spin'\n )}\n style={{\n width: size,\n height: size,\n borderWidth: strokeWidth,\n borderColor: 'transparent',\n borderTopColor: colorVarMap[color],\n borderRightColor: percentage > 25 ? colorVarMap[color] : 'transparent',\n borderBottomColor: percentage > 50 ? colorVarMap[color] : 'transparent',\n borderLeftColor: percentage > 75 ? colorVarMap[color] : 'transparent',\n }}\n />\n\n {/* Center value */}\n {showValue && !isIndeterminate && (\n <Text className=\"text-xs font-semibold text-text-primary\">\n {formatValue(value, max)}\n </Text>\n )}\n </View>\n )\n}\n\nexport interface ProgressStepsProps extends ViewProps {\n /** Current step (0-indexed) */\n currentStep: number\n /** Total number of steps */\n totalSteps: number\n /** Color of completed steps */\n color?: ProgressColor\n /** Size of step indicators */\n size?: ProgressSize\n /** Labels for each step */\n labels?: string[]\n /** Additional className */\n className?: string\n}\n\nconst stepSizeStyles: Record<ProgressSize, { dot: string; connector: string }> = {\n sm: { dot: 'w-2 h-2', connector: 'h-0.5' },\n md: { dot: 'w-3 h-3', connector: 'h-1' },\n lg: { dot: 'w-4 h-4', connector: 'h-1.5' },\n}\n\n/**\n * Step-based progress indicator.\n *\n * @example\n * <ProgressSteps currentStep={2} totalSteps={4} labels={['Cart', 'Shipping', 'Payment', 'Done']} />\n */\nexport function ProgressSteps({\n currentStep,\n totalSteps,\n color = 'primary',\n size = 'md',\n labels,\n className,\n ...props\n}: ProgressStepsProps) {\n const { dot, connector } = stepSizeStyles[size]\n\n return (\n <View className={cn('w-full', className)} {...props}>\n <View className=\"flex-row items-center\">\n {Array.from({ length: totalSteps }).map((_, index) => (\n <React.Fragment key={index}>\n {/* Step dot */}\n <View\n className={cn(\n 'rounded-full',\n dot,\n index <= currentStep ? colorStyles[color] : 'bg-border-strong'\n )}\n />\n\n {/* Connector line */}\n {index < totalSteps - 1 && (\n <View\n className={cn(\n 'flex-1 mx-1',\n connector,\n index < currentStep ? colorStyles[color] : 'bg-border-strong'\n )}\n />\n )}\n </React.Fragment>\n ))}\n </View>\n\n {/* Labels */}\n {labels && labels.length > 0 && (\n <View className=\"flex-row mt-2\">\n {labels.map((label, index) => (\n <Text\n key={index}\n className={cn(\n 'flex-1 text-xs text-center',\n index <= currentStep ? 'text-text-primary font-medium' : 'text-text-tertiary'\n )}\n >\n {label}\n </Text>\n ))}\n </View>\n )}\n </View>\n )\n}\n","import React, { createContext, useContext, useState, useCallback, useEffect } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type ToastStatus = 'success' | 'error' | 'warning' | 'info'\nexport type ToastPosition = 'top' | 'top-right' | 'top-left' | 'bottom' | 'bottom-right' | 'bottom-left'\n\nexport interface ToastConfig {\n /** Unique ID for the toast */\n id: string\n /** Title text */\n title: string\n /** Description text */\n description?: string\n /** Status/type of the toast */\n status?: ToastStatus\n /** Duration in milliseconds (0 = no auto-dismiss) */\n duration?: number\n /** Whether the toast can be dismissed */\n isClosable?: boolean\n /** Callback when toast is closed */\n onClose?: () => void\n}\n\ninterface ToastContextType {\n toasts: ToastConfig[]\n addToast: (config: Omit<ToastConfig, 'id'>) => string\n removeToast: (id: string) => void\n removeAllToasts: () => void\n}\n\nconst ToastContext = createContext<ToastContextType | null>(null)\n\nlet toastIdCounter = 0\n\nexport interface ToastProviderProps {\n /** Position of toasts on screen */\n position?: ToastPosition\n /** Default duration for toasts */\n defaultDuration?: number\n /** Maximum number of visible toasts */\n maxToasts?: number\n children?: React.ReactNode\n}\n\nconst positionStyles: Record<ToastPosition, string> = {\n 'top': 'top-4 left-1/2 -translate-x-1/2',\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'bottom': 'bottom-4 left-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n}\n\n/**\n * Provider component for the toast notification system.\n *\n * @example\n * // Wrap your app with ToastProvider\n * <ToastProvider position=\"top-right\">\n * <App />\n * </ToastProvider>\n *\n * // Then use the useToast hook in any component\n * const { addToast } = useToast()\n * addToast({ title: 'Success!', status: 'success' })\n */\nexport function ToastProvider({\n position = 'top-right',\n defaultDuration = 5000,\n maxToasts = 5,\n children,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastConfig[]>([])\n\n const addToast = useCallback((config: Omit<ToastConfig, 'id'>) => {\n const id = `toast-${++toastIdCounter}`\n const newToast: ToastConfig = {\n id,\n duration: defaultDuration,\n isClosable: true,\n status: 'info',\n ...config,\n }\n\n setToasts((prev) => {\n const updated = [newToast, ...prev]\n return updated.slice(0, maxToasts)\n })\n\n return id\n }, [defaultDuration, maxToasts])\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n const removeAllToasts = useCallback(() => {\n setToasts([])\n }, [])\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast, removeAllToasts }}>\n {children}\n {/* Toast Container */}\n <View\n className={cn(\n 'fixed z-[9999] flex flex-col gap-2',\n positionStyles[position]\n )}\n pointerEvents=\"box-none\"\n >\n {toasts.map((toast) => (\n <ToastItem\n key={toast.id}\n {...toast}\n onClose={() => {\n removeToast(toast.id)\n toast.onClose?.()\n }}\n />\n ))}\n </View>\n </ToastContext.Provider>\n )\n}\n\n/**\n * Hook to access toast functions.\n *\n * @example\n * const { addToast, removeAllToasts } = useToast()\n *\n * // Show a success toast\n * addToast({\n * title: 'Saved!',\n * description: 'Your changes have been saved.',\n * status: 'success'\n * })\n */\nexport function useToast() {\n const context = useContext(ToastContext)\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider')\n }\n return context\n}\n\ninterface ToastItemProps extends ToastConfig {\n onClose: () => void\n}\n\nconst statusStyles: Record<ToastStatus, { bg: string; border: string; icon: string }> = {\n success: {\n bg: 'bg-status-success/10',\n border: 'border-status-success',\n icon: '✓',\n },\n error: {\n bg: 'bg-status-error/10',\n border: 'border-status-error',\n icon: '✕',\n },\n warning: {\n bg: 'bg-status-warning/10',\n border: 'border-status-warning',\n icon: '⚠',\n },\n info: {\n bg: 'bg-status-info/10',\n border: 'border-status-info',\n icon: 'ℹ',\n },\n}\n\nconst iconColors: Record<ToastStatus, string> = {\n success: 'text-status-success',\n error: 'text-status-error',\n warning: 'text-status-warning',\n info: 'text-status-info',\n}\n\nfunction ToastItem({\n id,\n title,\n description,\n status = 'info',\n duration = 5000,\n isClosable = true,\n onClose,\n}: ToastItemProps) {\n const { bg, border, icon } = statusStyles[status]\n\n // Auto-dismiss\n useEffect(() => {\n if (duration > 0) {\n const timer = setTimeout(onClose, duration)\n return () => clearTimeout(timer)\n }\n }, [duration, onClose])\n\n return (\n <View\n className={cn(\n 'min-w-[280px] max-w-[400px] rounded-lg border-l-4 shadow-lg',\n 'bg-surface-elevated',\n border\n )}\n accessibilityRole=\"alert\"\n >\n <View className={cn('flex-row items-start p-3', bg)}>\n {/* Icon */}\n <View className={cn('w-6 h-6 items-center justify-center mr-3')}>\n <Text className={cn('text-lg', iconColors[status])}>{icon}</Text>\n </View>\n\n {/* Content */}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold text-text-primary\">\n {title}\n </Text>\n {description && (\n <Text className=\"text-sm text-text-secondary mt-0.5\">\n {description}\n </Text>\n )}\n </View>\n\n {/* Close button */}\n {isClosable && (\n <Pressable\n onPress={onClose}\n className=\"p-1 -m-1 rounded web:hover:bg-interactive-hover\"\n accessibilityLabel=\"Close toast\"\n >\n <Text className=\"text-text-tertiary text-lg\">×</Text>\n </Pressable>\n )}\n </View>\n </View>\n )\n}\n\nexport interface ToastProps extends ViewProps {\n /** Title text */\n title: string\n /** Description text */\n description?: string\n /** Status/type of the toast */\n status?: ToastStatus\n /** Whether to show the icon */\n showIcon?: boolean\n /** Whether the toast can be dismissed */\n isClosable?: boolean\n /** Callback when close button is clicked */\n onClose?: () => void\n /** Additional className */\n className?: string\n}\n\n/**\n * Standalone Toast component (for static rendering without provider).\n *\n * @example\n * <Toast\n * title=\"Success!\"\n * description=\"Your changes have been saved.\"\n * status=\"success\"\n * />\n */\nexport function Toast({\n title,\n description,\n status = 'info',\n showIcon = true,\n isClosable = false,\n onClose,\n className,\n ...props\n}: ToastProps) {\n const { bg, border, icon } = statusStyles[status]\n\n return (\n <View\n className={cn(\n 'min-w-[280px] max-w-[400px] rounded-lg border-l-4 shadow-lg',\n 'bg-surface-elevated',\n border,\n className\n )}\n accessibilityRole=\"alert\"\n {...props}\n >\n <View className={cn('flex-row items-start p-3', bg)}>\n {/* Icon */}\n {showIcon && (\n <View className=\"w-6 h-6 items-center justify-center mr-3\">\n <Text className={cn('text-lg', iconColors[status])}>{icon}</Text>\n </View>\n )}\n\n {/* Content */}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold text-text-primary\">\n {title}\n </Text>\n {description && (\n <Text className=\"text-sm text-text-secondary mt-0.5\">\n {description}\n </Text>\n )}\n </View>\n\n {/* Close button */}\n {isClosable && onClose && (\n <Pressable\n onPress={onClose}\n className=\"p-1 -m-1 rounded web:hover:bg-interactive-hover\"\n accessibilityLabel=\"Close toast\"\n >\n <Text className=\"text-text-tertiary text-lg\">×</Text>\n </Pressable>\n )}\n </View>\n </View>\n )\n}\n","import React, { useState, useCallback, useMemo } from 'react'\nimport { View, Text, TextInput, Pressable, ScrollView, type ViewProps, type TextInputProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface AutocompleteOption<T = string> {\n value: T\n label: string\n description?: string\n isDisabled?: boolean\n}\n\nexport interface AutocompleteProps<T = string> extends ViewProps {\n /** Available options */\n options: AutocompleteOption<T>[]\n /** Current selected value */\n value?: T | null\n /** Callback when value changes */\n onChange?: (value: T | null) => void\n /** Callback when input text changes (for async loading) */\n onInputChange?: (inputValue: string) => void\n /** Minimum characters before showing options */\n minChars?: number\n /** Placeholder text */\n placeholder?: string\n /** Label text */\n label?: string\n /** Helper text */\n helperText?: string\n /** Error message */\n errorMessage?: string\n /** Whether the field is required */\n isRequired?: boolean\n /** Whether the field is disabled */\n isDisabled?: boolean\n /** Whether the field is loading */\n isLoading?: boolean\n /** Whether to allow clearing the value */\n isClearable?: boolean\n /** Custom filter function */\n filterFn?: (option: AutocompleteOption<T>, inputValue: string) => boolean\n /** Custom render function for options */\n renderOption?: (option: AutocompleteOption<T>, isHighlighted: boolean) => React.ReactNode\n /** Text to show when no options match */\n noOptionsText?: string\n /** Text to show when loading */\n loadingText?: string\n /** Text to show when min chars not met */\n minCharsText?: string\n /** Additional className */\n className?: string\n /** Input props */\n inputProps?: Partial<TextInputProps>\n}\n\nconst defaultFilterFn = <T,>(option: AutocompleteOption<T>, inputValue: string) => {\n const searchLower = inputValue.toLowerCase()\n return (\n option.label.toLowerCase().includes(searchLower) ||\n (option.description?.toLowerCase().includes(searchLower) ?? false)\n )\n}\n\n/**\n * Autocomplete component for searchable dropdown selection.\n *\n * @example\n * // Basic usage\n * <Autocomplete\n * options={[\n * { value: '1', label: 'Option 1' },\n * { value: '2', label: 'Option 2' },\n * ]}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Search...\"\n * />\n *\n * @example\n * // With descriptions\n * <Autocomplete\n * options={[\n * { value: 'user1', label: 'John Doe', description: 'john@example.com' },\n * { value: 'user2', label: 'Jane Smith', description: 'jane@example.com' },\n * ]}\n * label=\"Select User\"\n * value={selectedUser}\n * onChange={setSelectedUser}\n * />\n */\nexport function Autocomplete<T extends string = string>({\n options,\n value,\n onChange,\n onInputChange,\n minChars = 0,\n placeholder = 'Search...',\n label,\n helperText,\n errorMessage,\n isRequired = false,\n isDisabled = false,\n isLoading = false,\n isClearable = true,\n filterFn = defaultFilterFn,\n renderOption,\n noOptionsText = 'No options found',\n loadingText = 'Loading...',\n minCharsText,\n className,\n inputProps,\n ...props\n}: AutocompleteProps<T>) {\n const [inputValue, setInputValue] = useState('')\n const [isOpen, setIsOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n\n // Get the label for the selected value\n const selectedOption = useMemo(\n () => options.find((o) => o.value === value),\n [options, value]\n )\n\n // Filter options based on input\n const filteredOptions = useMemo(() => {\n if (inputValue.length < minChars) return []\n return options.filter((option) => filterFn(option, inputValue))\n }, [options, inputValue, minChars, filterFn])\n\n const handleInputChange = useCallback(\n (text: string) => {\n setInputValue(text)\n setIsOpen(true)\n setHighlightedIndex(-1)\n onInputChange?.(text)\n },\n [onInputChange]\n )\n\n const handleSelectOption = useCallback(\n (option: AutocompleteOption<T>) => {\n if (option.isDisabled) return\n onChange?.(option.value)\n setInputValue(option.label)\n setIsOpen(false)\n },\n [onChange]\n )\n\n const handleClear = useCallback(() => {\n onChange?.(null)\n setInputValue('')\n setIsOpen(false)\n }, [onChange])\n\n const handleFocus = useCallback(() => {\n setIsOpen(true)\n // If there's a selected value, populate the input\n if (selectedOption && !inputValue) {\n setInputValue(selectedOption.label)\n }\n }, [selectedOption, inputValue])\n\n const handleBlur = useCallback(() => {\n // Delay to allow click on options\n setTimeout(() => {\n setIsOpen(false)\n // Reset input to selected value if nothing new selected\n if (selectedOption) {\n setInputValue(selectedOption.label)\n } else {\n setInputValue('')\n }\n }, 200)\n }, [selectedOption])\n\n const isInvalid = !!errorMessage\n const showMinCharsMessage = inputValue.length > 0 && inputValue.length < minChars\n const showNoResults = !isLoading && inputValue.length >= minChars && filteredOptions.length === 0\n const showOptions = isOpen && !showMinCharsMessage && filteredOptions.length > 0\n\n return (\n <View className={cn('w-full', className)} {...props}>\n {/* Label */}\n {label && (\n <Text className=\"text-sm font-medium text-text-primary mb-1\">\n {label}\n {isRequired && <Text className=\"text-status-error ml-0.5\">*</Text>}\n </Text>\n )}\n\n {/* Input Container */}\n <View className=\"relative\">\n <View\n className={cn(\n 'flex-row items-center border rounded-md',\n 'bg-surface-input',\n isInvalid ? 'border-border-input-error' : 'border-border-input',\n !isDisabled && !isInvalid && 'focus-within:border-border-input-focus',\n isDisabled && 'opacity-50'\n )}\n >\n <TextInput\n value={inputValue}\n onChangeText={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n editable={!isDisabled}\n className={cn(\n 'flex-1 px-3 py-2 text-text-primary',\n 'placeholder:text-text-tertiary'\n )}\n accessibilityLabel={label}\n {...inputProps}\n />\n\n {/* Clear button */}\n {isClearable && value && !isDisabled && (\n <Pressable\n onPress={handleClear}\n className=\"p-2\"\n accessibilityLabel=\"Clear selection\"\n >\n <Text className=\"text-text-tertiary\">×</Text>\n </Pressable>\n )}\n\n {/* Loading indicator */}\n {isLoading && (\n <View className=\"p-2\">\n <Text className=\"text-text-tertiary animate-spin\">⟳</Text>\n </View>\n )}\n </View>\n\n {/* Dropdown */}\n {isOpen && (\n <View\n className={cn(\n 'absolute z-50 top-full left-0 right-0 mt-1',\n 'bg-surface-elevated rounded-md shadow-lg border border-border-default',\n 'max-h-60 overflow-hidden'\n )}\n >\n <ScrollView className=\"py-1\">\n {/* Min chars message */}\n {showMinCharsMessage && (\n <Text className=\"px-3 py-2 text-sm text-text-tertiary\">\n {minCharsText || `Type at least ${minChars} characters`}\n </Text>\n )}\n\n {/* Loading message */}\n {isLoading && (\n <Text className=\"px-3 py-2 text-sm text-text-tertiary\">\n {loadingText}\n </Text>\n )}\n\n {/* No results */}\n {showNoResults && (\n <Text className=\"px-3 py-2 text-sm text-text-tertiary\">\n {noOptionsText}\n </Text>\n )}\n\n {/* Options */}\n {showOptions &&\n filteredOptions.map((option, index) => {\n const isHighlighted = index === highlightedIndex\n const isSelected = option.value === value\n\n if (renderOption) {\n return (\n <Pressable\n key={String(option.value)}\n onPress={() => handleSelectOption(option)}\n disabled={option.isDisabled}\n >\n {renderOption(option, isHighlighted)}\n </Pressable>\n )\n }\n\n return (\n <Pressable\n key={String(option.value)}\n onPress={() => handleSelectOption(option)}\n disabled={option.isDisabled}\n className={cn(\n 'px-3 py-2',\n isHighlighted && 'bg-interactive-hover',\n isSelected && 'bg-interactive-selected',\n option.isDisabled && 'opacity-50',\n !option.isDisabled && 'web:hover:bg-interactive-hover'\n )}\n >\n <Text\n className={cn(\n 'text-sm',\n isSelected ? 'text-brand-primary font-medium' : 'text-text-primary'\n )}\n >\n {option.label}\n </Text>\n {option.description && (\n <Text className=\"text-xs text-text-tertiary mt-0.5\">\n {option.description}\n </Text>\n )}\n </Pressable>\n )\n })}\n </ScrollView>\n </View>\n )}\n </View>\n\n {/* Helper/Error text */}\n {(helperText || errorMessage) && (\n <Text\n className={cn(\n 'text-xs mt-1',\n isInvalid ? 'text-status-error' : 'text-text-tertiary'\n )}\n >\n {errorMessage || helperText}\n </Text>\n )}\n </View>\n )\n}\n","import React, { useState } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type HelpTipSize = 'sm' | 'md' | 'lg'\nexport type HelpTipPlacement = 'top' | 'bottom' | 'left' | 'right'\nexport type HelpTipIcon = 'help' | 'info' | 'warning'\n\nexport interface HelpTipProps extends ViewProps {\n /** Tooltip content */\n content: React.ReactNode\n /** Size of the icon */\n size?: HelpTipSize\n /** Placement of the tooltip */\n placement?: HelpTipPlacement\n /** Icon type */\n icon?: HelpTipIcon\n /** Icon color */\n color?: 'default' | 'primary' | 'secondary' | 'muted'\n /** Whether the tooltip is always visible (controlled) */\n isOpen?: boolean\n /** Whether to show an arrow */\n hasArrow?: boolean\n /** Max width of the tooltip */\n maxWidth?: number\n /** Additional className for the icon */\n iconClassName?: string\n /** Additional className for the tooltip */\n tooltipClassName?: string\n}\n\nconst sizeStyles: Record<HelpTipSize, { icon: string; text: string }> = {\n sm: { icon: 'w-3.5 h-3.5 text-xs', text: 'text-xs' },\n md: { icon: 'w-4 h-4 text-sm', text: 'text-sm' },\n lg: { icon: 'w-5 h-5 text-base', text: 'text-base' },\n}\n\nconst colorStyles: Record<string, string> = {\n default: 'text-text-tertiary',\n primary: 'text-brand-primary',\n secondary: 'text-text-secondary',\n muted: 'text-text-tertiary opacity-60',\n}\n\nconst iconMap: Record<HelpTipIcon, string> = {\n help: '?',\n info: 'ℹ',\n warning: '⚠',\n}\n\nconst placementStyles: Record<HelpTipPlacement, string> = {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n}\n\nconst arrowStyles: Record<HelpTipPlacement, string> = {\n top: 'bottom-0 left-1/2 -translate-x-1/2 translate-y-full border-t-surface-elevated border-x-transparent border-b-transparent',\n bottom: 'top-0 left-1/2 -translate-x-1/2 -translate-y-full border-b-surface-elevated border-x-transparent border-t-transparent',\n left: 'right-0 top-1/2 -translate-y-1/2 translate-x-full border-l-surface-elevated border-y-transparent border-r-transparent',\n right: 'left-0 top-1/2 -translate-y-1/2 -translate-x-full border-r-surface-elevated border-y-transparent border-l-transparent',\n}\n\n/**\n * HelpTip component for displaying contextual help information.\n *\n * A small icon (typically a question mark or info icon) that shows\n * a tooltip with helpful information when hovered or pressed.\n *\n * @example\n * // Basic usage\n * <HelpTip content=\"This field is required for form submission.\" />\n *\n * @example\n * // With custom icon and placement\n * <HelpTip\n * content=\"API rate limits apply to this endpoint.\"\n * icon=\"warning\"\n * placement=\"right\"\n * color=\"primary\"\n * />\n *\n * @example\n * // Inline with label\n * <View className=\"flex-row items-center gap-1\">\n * <Text>Email Address</Text>\n * <HelpTip content=\"We'll never share your email with anyone.\" size=\"sm\" />\n * </View>\n */\nexport function HelpTip({\n content,\n size = 'md',\n placement = 'top',\n icon = 'help',\n color = 'default',\n isOpen: controlledIsOpen,\n hasArrow = true,\n maxWidth = 250,\n iconClassName,\n tooltipClassName,\n className,\n ...props\n}: HelpTipProps) {\n const [internalIsOpen, setInternalIsOpen] = useState(false)\n const isOpen = controlledIsOpen ?? internalIsOpen\n\n const { icon: iconSize, text: textSize } = sizeStyles[size]\n\n const handlePress = () => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen((prev) => !prev)\n }\n }\n\n const handleHoverIn = () => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(true)\n }\n }\n\n const handleHoverOut = () => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(false)\n }\n }\n\n return (\n <View className={cn('relative inline-flex', className)} {...props}>\n {/* Icon button */}\n <Pressable\n onPress={handlePress}\n onHoverIn={handleHoverIn}\n onHoverOut={handleHoverOut}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Show help information\"\n accessibilityHint={typeof content === 'string' ? content : undefined}\n className={cn(\n 'items-center justify-center rounded-full',\n 'border border-current',\n colorStyles[color],\n iconSize,\n 'web:hover:opacity-80 web:cursor-help',\n iconClassName\n )}\n >\n <Text className={cn('font-semibold', iconSize, colorStyles[color])}>\n {iconMap[icon]}\n </Text>\n </Pressable>\n\n {/* Tooltip */}\n {isOpen && (\n <View\n className={cn(\n 'absolute z-50',\n 'bg-surface-elevated rounded-lg shadow-lg',\n 'border border-border-default',\n 'px-3 py-2',\n placementStyles[placement],\n tooltipClassName\n )}\n style={{ maxWidth }}\n >\n {typeof content === 'string' ? (\n <Text className={cn('text-text-primary', textSize)}>\n {content}\n </Text>\n ) : (\n content\n )}\n\n {/* Arrow */}\n {hasArrow && (\n <View\n className={cn(\n 'absolute w-0 h-0',\n 'border-4',\n arrowStyles[placement]\n )}\n />\n )}\n </View>\n )}\n </View>\n )\n}\n\nexport interface LabelWithHelpProps extends ViewProps {\n /** Label text */\n label: string\n /** Help content */\n helpContent: React.ReactNode\n /** Whether the field is required */\n isRequired?: boolean\n /** Size of the help icon */\n helpSize?: HelpTipSize\n /** Additional className */\n className?: string\n}\n\n/**\n * Convenience component combining a label with a help tip.\n *\n * @example\n * <LabelWithHelp\n * label=\"API Key\"\n * helpContent=\"Your API key can be found in the developer settings.\"\n * isRequired\n * />\n */\nexport function LabelWithHelp({\n label,\n helpContent,\n isRequired = false,\n helpSize = 'sm',\n className,\n ...props\n}: LabelWithHelpProps) {\n return (\n <View className={cn('flex-row items-center gap-1', className)} {...props}>\n <Text className=\"text-sm font-medium text-text-primary\">\n {label}\n {isRequired && <Text className=\"text-status-error ml-0.5\">*</Text>}\n </Text>\n <HelpTip content={helpContent} size={helpSize} />\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface FormFieldProps extends ViewProps {\n /** Label text */\n label?: string\n /** Whether the field is required */\n isRequired?: boolean\n /** Helper text shown below the input */\n helperText?: string\n /** Error message (replaces helper text when present) */\n errorMessage?: string\n /** Whether the field is disabled */\n isDisabled?: boolean\n /** Whether the field is read-only */\n isReadOnly?: boolean\n /** Help tooltip content */\n helpContent?: React.ReactNode\n /** Size of the label */\n labelSize?: 'sm' | 'md' | 'lg'\n /** Direction of the layout */\n orientation?: 'vertical' | 'horizontal'\n /** Label width (for horizontal layout) */\n labelWidth?: number | string\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst labelSizeStyles = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n}\n\n/**\n * FormField component for wrapping form inputs with label, help text, and error states.\n *\n * @example\n * // Basic usage\n * <FormField label=\"Email\" isRequired>\n * <Input placeholder=\"Enter your email\" />\n * </FormField>\n *\n * @example\n * // With error\n * <FormField\n * label=\"Password\"\n * isRequired\n * errorMessage=\"Password must be at least 8 characters\"\n * >\n * <Input type=\"password\" />\n * </FormField>\n *\n * @example\n * // Horizontal layout\n * <FormField label=\"Name\" orientation=\"horizontal\" labelWidth={100}>\n * <Input />\n * </FormField>\n */\nexport function FormField({\n label,\n isRequired = false,\n helperText,\n errorMessage,\n isDisabled = false,\n isReadOnly = false,\n helpContent,\n labelSize = 'sm',\n orientation = 'vertical',\n labelWidth,\n className,\n children,\n ...props\n}: FormFieldProps) {\n const isInvalid = !!errorMessage\n const isHorizontal = orientation === 'horizontal'\n\n // Generate unique IDs for accessibility\n const fieldId = React.useId()\n const helperId = `${fieldId}-helper`\n const errorId = `${fieldId}-error`\n\n return (\n <View\n className={cn(\n 'w-full',\n isHorizontal && 'flex-row items-start',\n isDisabled && 'opacity-50',\n className\n )}\n {...props}\n >\n {/* Label Section */}\n {label && (\n <View\n className={cn(\n 'flex-row items-center',\n isHorizontal ? 'pt-2' : 'mb-1.5'\n )}\n style={isHorizontal && labelWidth ? { width: labelWidth as number } : undefined}\n >\n <Text\n className={cn(\n 'font-medium text-text-primary',\n labelSizeStyles[labelSize]\n )}\n >\n {label}\n {isRequired && (\n <Text className=\"text-status-error ml-0.5\">*</Text>\n )}\n </Text>\n\n {helpContent && (\n <View className=\"ml-1\">\n {/* Inline help indicator - could use HelpTip here */}\n <Text className=\"text-text-tertiary text-xs\">ℹ</Text>\n </View>\n )}\n </View>\n )}\n\n {/* Input Section */}\n <View className={cn(isHorizontal && 'flex-1')}>\n {/* Clone children to pass accessibility props */}\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n const childProps = child.props as Record<string, any>\n return React.cloneElement(child as React.ReactElement<any>, {\n accessibilityHint: errorMessage || helperText || childProps.accessibilityHint,\n accessibilityState: {\n ...childProps.accessibilityState,\n disabled: isDisabled || childProps.accessibilityState?.disabled,\n ...(isInvalid ? { invalid: true } : {}),\n },\n isDisabled: isDisabled || childProps.isDisabled,\n isReadOnly: isReadOnly || childProps.isReadOnly,\n isInvalid: isInvalid || childProps.isInvalid,\n })\n }\n return child\n })}\n\n {/* Helper/Error Text */}\n {(helperText || errorMessage) && (\n <Text\n id={isInvalid ? errorId : helperId}\n className={cn(\n 'text-xs mt-1.5',\n isInvalid ? 'text-status-error' : 'text-text-tertiary'\n )}\n >\n {errorMessage || helperText}\n </Text>\n )}\n </View>\n </View>\n )\n}\n\nexport interface FormSectionProps extends ViewProps {\n /** Section title */\n title?: string\n /** Section description */\n description?: string\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * FormSection component for grouping related form fields.\n *\n * @example\n * <FormSection title=\"Personal Information\" description=\"Enter your basic details\">\n * <FormField label=\"Name\">\n * <Input />\n * </FormField>\n * <FormField label=\"Email\">\n * <Input />\n * </FormField>\n * </FormSection>\n */\nexport function FormSection({\n title,\n description,\n className,\n children,\n ...props\n}: FormSectionProps) {\n return (\n <View\n className={cn('w-full', className)}\n accessibilityRole={'group' as any}\n accessibilityLabel={title}\n {...props}\n >\n {(title || description) && (\n <View className=\"mb-4\">\n {title && (\n <Text className=\"text-lg font-semibold text-text-primary\">\n {title}\n </Text>\n )}\n {description && (\n <Text className=\"text-sm text-text-secondary mt-1\">\n {description}\n </Text>\n )}\n </View>\n )}\n\n <View className=\"gap-4\">\n {children}\n </View>\n </View>\n )\n}\n\nexport interface FormActionsProps extends ViewProps {\n /** Alignment of actions */\n align?: 'left' | 'center' | 'right' | 'between'\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst alignStyles = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n between: 'justify-between',\n}\n\n/**\n * FormActions component for form action buttons.\n *\n * @example\n * <FormActions align=\"right\">\n * <Button variant=\"ghost\">Cancel</Button>\n * <Button>Submit</Button>\n * </FormActions>\n */\nexport function FormActions({\n align = 'right',\n className,\n children,\n ...props\n}: FormActionsProps) {\n return (\n <View\n className={cn(\n 'flex-row items-center gap-3 pt-4',\n 'border-t border-border-default mt-4',\n alignStyles[align],\n className\n )}\n {...props}\n >\n {children}\n </View>\n )\n}\n\nexport interface FormRowProps extends ViewProps {\n /** Gap between items */\n gap?: 'sm' | 'md' | 'lg'\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst gapStyles = {\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n}\n\n/**\n * FormRow component for laying out multiple form fields horizontally.\n *\n * @example\n * <FormRow>\n * <FormField label=\"First Name\" className=\"flex-1\">\n * <Input />\n * </FormField>\n * <FormField label=\"Last Name\" className=\"flex-1\">\n * <Input />\n * </FormField>\n * </FormRow>\n */\nexport function FormRow({\n gap = 'md',\n className,\n children,\n ...props\n}: FormRowProps) {\n return (\n <View\n className={cn('flex-row items-start', gapStyles[gap], className)}\n {...props}\n >\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\ntype Gap = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12\n\nconst gapClasses: Record<Gap, string> = {\n 0: 'gap-0',\n 1: 'gap-1',\n 2: 'gap-2',\n 3: 'gap-3',\n 4: 'gap-4',\n 5: 'gap-5',\n 6: 'gap-6',\n 8: 'gap-8',\n 10: 'gap-10',\n 12: 'gap-12',\n}\n\nexport interface StackProps extends ViewProps {\n gap?: Gap\n align?: 'start' | 'center' | 'end' | 'stretch'\n justify?: 'start' | 'center' | 'end' | 'between' | 'around'\n wrap?: boolean\n className?: string\n children: React.ReactNode\n}\n\nconst alignMap = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n}\n\nconst justifyMap = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n}\n\nexport function Stack({\n gap = 0,\n align,\n justify,\n wrap,\n className,\n children,\n ...props\n}: StackProps) {\n return (\n <View\n className={cn(\n 'flex',\n gapClasses[gap],\n align && alignMap[align],\n justify && justifyMap[justify],\n wrap && 'flex-wrap',\n className,\n )}\n {...props}\n >\n {children}\n </View>\n )\n}\n\nexport function HStack(props: StackProps) {\n return <Stack {...props} className={cn('flex-row', props.className)} />\n}\n\nexport function VStack(props: StackProps) {\n return <Stack {...props} className={cn('flex-col', props.className)} />\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface SectionProps extends ViewProps {\n className?: string\n children: React.ReactNode\n}\n\nexport function Section({ className, children, ...props }: SectionProps) {\n return (\n <View className={cn('mb-6', className)} {...props}>\n {children}\n </View>\n )\n}\n\nexport interface SectionHeaderProps {\n title: string\n subtitle?: string\n trailing?: React.ReactNode\n className?: string\n}\n\nexport function SectionHeader({ title, subtitle, trailing, className }: SectionHeaderProps) {\n return (\n <View className={cn('flex-row items-center justify-between mb-3 px-1', className)}>\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold text-text-secondary uppercase tracking-wider\">\n {title}\n </Text>\n {subtitle && (\n <Text className=\"text-xs text-text-tertiary mt-0.5\">{subtitle}</Text>\n )}\n </View>\n {trailing && <View>{trailing}</View>}\n </View>\n )\n}\n\nexport interface SectionContentProps extends ViewProps {\n className?: string\n children: React.ReactNode\n}\n\nexport function SectionContent({ className, children, ...props }: SectionContentProps) {\n return (\n <View className={cn(className)} {...props}>\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface DataRowProps extends ViewProps {\n /** Descriptive label shown on the left */\n label: string\n /** Value shown on the right -- string renders as Text, ReactNode renders inside a View */\n value: React.ReactNode\n /** Additional className applied to the value element */\n valueClassName?: string\n /** Additional className applied to the root container */\n className?: string\n}\n\nexport function DataRow({ label, value, valueClassName, className, ...props }: DataRowProps) {\n return (\n <View className={cn('flex-row items-center justify-between py-2', className)} {...props}>\n <Text className=\"text-sm text-text-secondary\">{label}</Text>\n {typeof value === 'string' ? (\n <Text className={cn('text-sm font-medium text-text-primary', valueClassName)}>\n {value}\n </Text>\n ) : (\n <View className={cn(valueClassName)}>{value}</View>\n )}\n </View>\n )\n}\n","import React from 'react'\nimport { View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\ntype IconBoxColor =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'neutral'\n\ntype IconBoxSize = 'sm' | 'md' | 'lg'\n\nexport interface IconBoxProps extends ViewProps {\n icon: React.ComponentType<{ size?: number; className?: string }>\n color?: IconBoxColor\n size?: IconBoxSize\n className?: string\n}\n\nconst colorClasses: Record<IconBoxColor, { bg: string; icon: string }> = {\n primary: { bg: 'bg-brand-primary/10', icon: 'text-brand-primary' },\n secondary: { bg: 'bg-brand-secondary/10', icon: 'text-brand-secondary' },\n success: { bg: 'bg-status-success/10', icon: 'text-status-success' },\n error: { bg: 'bg-status-error/10', icon: 'text-status-error' },\n warning: { bg: 'bg-status-warning/10', icon: 'text-status-warning' },\n info: { bg: 'bg-status-info/10', icon: 'text-status-info' },\n neutral: { bg: 'bg-surface-elevated', icon: 'text-text-secondary' },\n}\n\nconst sizeClasses: Record<IconBoxSize, { box: string; iconSize: number }> = {\n sm: { box: 'w-8 h-8 rounded-lg', iconSize: 16 },\n md: { box: 'w-10 h-10 rounded-xl', iconSize: 20 },\n lg: { box: 'w-12 h-12 rounded-xl', iconSize: 24 },\n}\n\nexport function IconBox({\n icon: Icon,\n color = 'neutral',\n size = 'md',\n className,\n ...props\n}: IconBoxProps) {\n const colors = colorClasses[color]\n const sizes = sizeClasses[size]\n\n return (\n <View\n className={cn('items-center justify-center', colors.bg, sizes.box, className)}\n {...props}\n >\n <Icon size={sizes.iconSize} className={colors.icon} />\n </View>\n )\n}\n","import React from 'react'\nimport { View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\nimport {\n type ElevationLevel,\n getElevationSurface,\n getElevationShadow,\n getBaseSurfaceColor,\n type GlowIntensity,\n getGlowShadow,\n} from '../../../theme/elevation'\n\nexport interface SurfaceProps extends ViewProps {\n elevation?: ElevationLevel\n glowColor?: string\n glowIntensity?: GlowIntensity\n theme?: 'light' | 'dark'\n className?: string\n children: React.ReactNode\n}\n\nexport function Surface({\n elevation = 0,\n glowColor,\n glowIntensity,\n theme = 'dark',\n className,\n style,\n children,\n ...props\n}: SurfaceProps) {\n const baseColor = getBaseSurfaceColor(theme)\n const surfaceColor = getElevationSurface(baseColor, elevation, theme)\n const shadowStyle = getElevationShadow(baseColor, elevation, theme)\n const glowStyle = glowColor ? getGlowShadow(glowColor, glowIntensity) : {}\n\n return (\n <View\n className={cn('rounded-2xl', className)}\n style={[\n { backgroundColor: surfaceColor },\n shadowStyle,\n glowStyle,\n style,\n ]}\n {...props}\n >\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, Pressable, type ViewProps, type PressableProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\n// --- ListItem (container) ---\n\nexport interface ListItemProps extends PressableProps {\n className?: string\n children: React.ReactNode\n}\n\nexport function ListItem({ className, children, onPress, ...props }: ListItemProps) {\n const Container = onPress ? Pressable : View\n const containerProps = onPress ? { onPress, ...props } : props\n\n return (\n <Container\n className={cn('flex-row items-center py-3 px-4 min-h-[48px]', className)}\n {...(containerProps as any)}\n >\n {children}\n </Container>\n )\n}\n\n// --- ListItemIcon (leading slot) ---\n\nexport interface ListItemIconProps extends ViewProps {\n icon: React.ComponentType<{ size?: number; className?: string }>\n className?: string\n}\n\nexport function ListItemIcon({ icon: Icon, className, ...props }: ListItemIconProps) {\n return (\n <View className={cn('mr-3 items-center justify-center', className)} {...props}>\n <Icon size={20} className=\"text-text-secondary\" />\n </View>\n )\n}\n\n// --- ListItemContent (title + subtitle) ---\n\nexport interface ListItemContentProps extends ViewProps {\n title: string\n subtitle?: string\n className?: string\n}\n\nexport function ListItemContent({ title, subtitle, className, ...props }: ListItemContentProps) {\n return (\n <View className={cn('flex-1 justify-center', className)} {...props}>\n <Text className=\"text-sm font-medium text-text-primary\">{title}</Text>\n {subtitle && (\n <Text className=\"text-xs text-text-secondary mt-0.5\">{subtitle}</Text>\n )}\n </View>\n )\n}\n\n// --- ListItemTrailing (right-side slot) ---\n\nexport interface ListItemTrailingProps extends ViewProps {\n className?: string\n children: React.ReactNode\n}\n\nexport function ListItemTrailing({ className, children, ...props }: ListItemTrailingProps) {\n return (\n <View className={cn('ml-3 items-center justify-center', className)} {...props}>\n {children}\n </View>\n )\n}\n\n// --- ListItemDivider ---\n\nexport interface ListItemDividerProps extends ViewProps {\n inset?: boolean\n className?: string\n}\n\nexport function ListItemDivider({ inset = true, className, ...props }: ListItemDividerProps) {\n return (\n <View\n className={cn('h-px bg-divider', inset ? 'ml-14' : '', className)}\n {...props}\n />\n )\n}\n","import React from 'react'\nimport { Text, type TextProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type TypographyVariant =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'body1'\n | 'body2'\n | 'subtitle1'\n | 'subtitle2'\n | 'caption'\n | 'overline'\n | 'button'\n\nexport type TypographyColor =\n | 'primary'\n | 'secondary'\n | 'tertiary'\n | 'disabled'\n | 'inverse'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'inherit'\n\nexport type TypographyAlign = 'left' | 'center' | 'right' | 'justify'\n\nexport type TypographyMarginBottom = 'none' | 'sm' | 'md' | 'lg'\n\nexport interface TypographyProps extends TextProps {\n /** Typography variant */\n variant?: TypographyVariant\n /** Text color */\n color?: TypographyColor\n /** Text alignment */\n align?: TypographyAlign\n /** Whether text should truncate with ellipsis */\n truncate?: boolean\n /** @deprecated Use truncate instead */\n noWrap?: boolean\n /** Margin bottom spacing */\n marginBottom?: TypographyMarginBottom\n /** @deprecated Use marginBottom instead */\n gutterBottom?: boolean\n /** Maximum number of lines before truncating */\n maxLines?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n// Variant styles matching the existing theme\nconst variantStyles: Record<TypographyVariant, string> = {\n h1: 'font-heading text-5xl font-bold leading-tight',\n h2: 'font-heading text-4xl font-bold leading-tight',\n h3: 'font-heading text-3xl font-bold leading-tight',\n h4: 'font-heading text-2xl font-bold leading-tight',\n h5: 'font-heading text-xl font-semibold leading-tight',\n h6: 'font-heading text-lg font-semibold leading-tight',\n body1: 'font-body text-base font-normal leading-normal',\n body2: 'font-body text-sm font-normal leading-normal',\n subtitle1: 'font-body text-base font-medium leading-relaxed',\n subtitle2: 'font-body text-sm font-medium leading-normal',\n caption: 'font-body text-xs font-normal leading-loose',\n overline: 'font-body text-xs font-semibold uppercase tracking-widest leading-relaxed',\n button: 'font-sans text-sm font-semibold leading-relaxed',\n}\n\nconst colorStyles: Record<TypographyColor, string> = {\n primary: 'text-text-primary',\n secondary: 'text-text-secondary',\n tertiary: 'text-text-tertiary',\n disabled: 'text-text-disabled',\n inverse: 'text-text-inverse',\n success: 'text-status-success',\n error: 'text-status-error',\n warning: 'text-status-warning',\n info: 'text-status-info',\n inherit: '', // No color class, inherit from parent\n}\n\nconst alignStyles: Record<TypographyAlign, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify',\n}\n\n// Heading variants for accessibility role\nconst headingVariants: TypographyVariant[] = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']\n\nconst marginBottomStyles: Record<TypographyMarginBottom, string> = {\n none: '',\n sm: 'mb-1',\n md: 'mb-2',\n lg: 'mb-4',\n}\n\n/**\n * Typography component for consistent text styling.\n *\n * @example\n * <Typography variant=\"h1\">Page Title</Typography>\n * <Typography variant=\"body1\" color=\"secondary\">Body text content</Typography>\n * <Typography variant=\"caption\" marginBottom=\"md\">Small caption text</Typography>\n * <Typography truncate maxLines={2}>Long text that will truncate...</Typography>\n */\nexport function Typography({\n variant = 'body1',\n color = 'primary',\n align,\n truncate = false,\n noWrap = false, // deprecated, kept for backward compatibility\n marginBottom,\n gutterBottom = false, // deprecated, kept for backward compatibility\n maxLines,\n className,\n children,\n ...props\n}: TypographyProps) {\n const isHeading = headingVariants.includes(variant)\n const shouldTruncate = truncate || noWrap\n const mb = marginBottom || (gutterBottom ? 'md' : 'none')\n\n // Determine number of lines\n let numLines: number | undefined\n if (maxLines) {\n numLines = maxLines\n } else if (shouldTruncate) {\n numLines = 1\n }\n\n return (\n <Text\n accessibilityRole={isHeading ? 'header' : 'text'}\n numberOfLines={numLines}\n className={cn(\n variantStyles[variant],\n color !== 'inherit' && colorStyles[color],\n align && alignStyles[align],\n shouldTruncate && 'truncate',\n marginBottomStyles[mb],\n className\n )}\n {...props}\n >\n {children}\n </Text>\n )\n}\n\n// Convenience components for common typography patterns\n\nexport interface HeadingProps extends Omit<TypographyProps, 'variant'> {\n /** Heading level (1-6) */\n level?: 1 | 2 | 3 | 4 | 5 | 6\n}\n\n/**\n * Heading component - convenience wrapper for Typography with heading variants.\n *\n * @example\n * <Heading level={1}>Page Title</Heading>\n * <Heading level={2} gutterBottom>Section Title</Heading>\n */\nexport function Heading({ level = 1, ...props }: HeadingProps) {\n const variant = `h${level}` as TypographyVariant\n return <Typography variant={variant} {...props} />\n}\n\nexport interface ParagraphProps extends Omit<TypographyProps, 'variant'> {\n /** Use smaller body2 variant */\n small?: boolean\n}\n\n/**\n * Paragraph component - convenience wrapper for body text.\n *\n * @example\n * <Paragraph>This is body text content.</Paragraph>\n * <Paragraph small>This is smaller body text.</Paragraph>\n */\nexport function Paragraph({ small = false, ...props }: ParagraphProps) {\n return <Typography variant={small ? 'body2' : 'body1'} {...props} />\n}\n\nexport interface CaptionProps extends Omit<TypographyProps, 'variant'> {}\n\n/**\n * Caption component - for small helper/secondary text.\n */\nexport function Caption(props: CaptionProps) {\n return <Typography variant=\"caption\" color=\"secondary\" {...props} />\n}\n\nexport interface LabelProps extends Omit<TypographyProps, 'variant'> {}\n\n/**\n * Label component - for form labels and similar.\n */\nexport function Label(props: LabelProps) {\n return <Typography variant=\"subtitle2\" {...props} />\n}\n\nexport interface OverlineProps extends Omit<TypographyProps, 'variant'> {}\n\n/**\n * Overline component - for section labels, categories.\n */\nexport function Overline(props: OverlineProps) {\n return <Typography variant=\"overline\" color=\"secondary\" {...props} />\n}\n","import React, { createContext, useContext } from 'react'\nimport { View, Text, Pressable, ScrollView, type ViewProps, type PressableProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\ninterface SidebarContextType {\n isCollapsed: boolean\n activeItem?: string\n onItemSelect?: (id: string) => void\n}\n\nconst SidebarContext = createContext<SidebarContextType>({\n isCollapsed: false,\n})\n\nexport interface SidebarProps extends ViewProps {\n /** Whether sidebar is collapsed (icon-only mode) */\n isCollapsed?: boolean\n /** Currently active item ID */\n activeItem?: string\n /** Callback when an item is selected */\n onItemSelect?: (id: string) => void\n /** Width when expanded */\n width?: number\n /** Width when collapsed */\n collapsedWidth?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Sidebar navigation component.\n *\n * @example\n * <Sidebar activeItem={activeNav} onItemSelect={setActiveNav}>\n * <SidebarHeader>\n * <Logo />\n * </SidebarHeader>\n * <SidebarContent>\n * <SidebarSection title=\"Main\">\n * <SidebarItem id=\"home\" icon={HomeIcon} label=\"Home\" />\n * <SidebarItem id=\"dashboard\" icon={DashboardIcon} label=\"Dashboard\" />\n * </SidebarSection>\n * </SidebarContent>\n * <SidebarFooter>\n * <SidebarItem id=\"settings\" icon={SettingsIcon} label=\"Settings\" />\n * </SidebarFooter>\n * </Sidebar>\n */\nexport function Sidebar({\n isCollapsed = false,\n activeItem,\n onItemSelect,\n width = 256,\n collapsedWidth = 64,\n className,\n children,\n ...props\n}: SidebarProps) {\n const currentWidth = isCollapsed ? collapsedWidth : width\n\n return (\n <SidebarContext.Provider value={{ isCollapsed, activeItem, onItemSelect }}>\n <View\n style={{ width: currentWidth }}\n className={cn(\n 'h-full flex-col bg-surface-base border-r border-border-default transition-all duration-200',\n className\n )}\n {...props}\n >\n {children}\n </View>\n </SidebarContext.Provider>\n )\n}\n\nexport interface SidebarHeaderProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Header section of sidebar (typically contains logo).\n */\nexport function SidebarHeader({ children, className }: SidebarHeaderProps) {\n return (\n <View className={cn('px-4 py-4 border-b border-border-subtle', className)}>\n {children}\n </View>\n )\n}\n\nexport interface SidebarContentProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Scrollable content area of sidebar.\n */\nexport function SidebarContent({ children, className }: SidebarContentProps) {\n return (\n <ScrollView\n className={cn('flex-1', className)}\n showsVerticalScrollIndicator={false}\n >\n {children}\n </ScrollView>\n )\n}\n\nexport interface SidebarFooterProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Footer section of sidebar.\n */\nexport function SidebarFooter({ children, className }: SidebarFooterProps) {\n return (\n <View className={cn('px-2 py-4 border-t border-border-subtle', className)}>\n {children}\n </View>\n )\n}\n\nexport interface SidebarSectionProps {\n /** Section title */\n title?: string\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Section grouping for sidebar items.\n */\nexport function SidebarSection({ title, children, className }: SidebarSectionProps) {\n const { isCollapsed } = useContext(SidebarContext)\n\n return (\n <View className={cn('px-2 py-2', className)}>\n {title && !isCollapsed && (\n <Text className=\"px-3 py-2 text-xs font-semibold uppercase tracking-wider text-text-tertiary\">\n {title}\n </Text>\n )}\n <View className=\"gap-0.5\">\n {children}\n </View>\n </View>\n )\n}\n\nexport interface SidebarItemProps extends Omit<PressableProps, 'children'> {\n /** Unique identifier for the item */\n id: string\n /** Icon component */\n icon?: React.ComponentType<{ size?: number; className?: string }>\n /** Label text */\n label: string\n /** Badge content (e.g., notification count) */\n badge?: React.ReactNode\n /** Whether this item has nested items */\n hasChildren?: boolean\n /** Whether nested items are expanded */\n isExpanded?: boolean\n /** Additional className */\n className?: string\n}\n\n/**\n * Individual navigation item in sidebar.\n */\nexport function SidebarItem({\n id,\n icon: Icon,\n label,\n badge,\n hasChildren,\n isExpanded,\n className,\n onPress,\n ...props\n}: SidebarItemProps) {\n const { isCollapsed, activeItem, onItemSelect } = useContext(SidebarContext)\n const isActive = activeItem === id\n\n const handlePress = (e: any) => {\n onItemSelect?.(id)\n onPress?.(e)\n }\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ selected: isActive }}\n accessibilityLabel={label}\n onPress={handlePress}\n className={cn(\n 'flex-row items-center gap-3 px-3 py-2.5 rounded-md transition-colors',\n isActive\n ? 'bg-brand-primary-subtle text-brand-primary'\n : 'text-text-secondary web:hover:bg-interactive-hover active:bg-interactive-active',\n isCollapsed && 'justify-center px-2',\n className\n )}\n {...props}\n >\n {Icon && (\n <Icon\n size={20}\n className={cn(\n isActive ? 'text-brand-primary' : 'text-text-secondary'\n )}\n />\n )}\n {!isCollapsed && (\n <>\n <Text\n numberOfLines={1}\n className={cn(\n 'flex-1 text-sm font-medium',\n isActive ? 'text-brand-primary' : 'text-text-primary'\n )}\n >\n {label}\n </Text>\n {badge && (\n <View className=\"ml-auto\">\n {badge}\n </View>\n )}\n {hasChildren && (\n <Text className=\"text-text-tertiary ml-1\">\n {isExpanded ? '▼' : '▶'}\n </Text>\n )}\n </>\n )}\n </Pressable>\n )\n}\n\nexport interface SidebarDividerProps {\n className?: string\n}\n\n/**\n * Divider between sidebar sections.\n */\nexport function SidebarDivider({ className }: SidebarDividerProps) {\n return (\n <View className={cn('h-px mx-4 my-2 bg-border-subtle', className)} />\n )\n}\n","import React, { createContext, useContext, useState, useMemo } from 'react'\nimport { View, Text, Pressable, ScrollView, type ViewProps, type PressableProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type SortDirection = 'asc' | 'desc' | null\n\ninterface TableContextType {\n sortColumn?: string\n sortDirection: SortDirection\n onSort?: (column: string) => void\n selectedRows: Set<string>\n onSelectRow?: (id: string, selected: boolean) => void\n onSelectAll?: (selected: boolean) => void\n selectable: boolean\n allRowIds: string[]\n}\n\nconst TableContext = createContext<TableContextType>({\n sortDirection: null,\n selectedRows: new Set(),\n selectable: false,\n allRowIds: [],\n})\n\nexport interface TableProps extends ViewProps {\n /** Currently sorted column */\n sortColumn?: string\n /** Sort direction */\n sortDirection?: SortDirection\n /** Callback when sort changes */\n onSort?: (column: string) => void\n /** Selected row IDs (controlled) */\n selectedRows?: Set<string>\n /** Callback when row selection changes */\n onSelectRow?: (id: string, selected: boolean) => void\n /** Callback when select all changes */\n onSelectAll?: (selected: boolean) => void\n /** Enable row selection */\n selectable?: boolean\n /** All row IDs for select all functionality */\n rowIds?: string[]\n /** Whether the table is loading */\n isLoading?: boolean\n /** Number of skeleton rows to show when loading */\n loadingRowCount?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Table component with sorting support.\n *\n * @example\n * <Table sortColumn={sortCol} sortDirection={sortDir} onSort={handleSort}>\n * <TableHeader>\n * <TableRow>\n * <TableHeaderCell sortKey=\"name\">Name</TableHeaderCell>\n * <TableHeaderCell sortKey=\"email\">Email</TableHeaderCell>\n * <TableHeaderCell sortKey=\"status\">Status</TableHeaderCell>\n * </TableRow>\n * </TableHeader>\n * <TableBody>\n * {data.map(row => (\n * <TableRow key={row.id}>\n * <TableCell>{row.name}</TableCell>\n * <TableCell>{row.email}</TableCell>\n * <TableCell>{row.status}</TableCell>\n * </TableRow>\n * ))}\n * </TableBody>\n * </Table>\n */\nexport function Table({\n sortColumn,\n sortDirection = null,\n onSort,\n selectedRows = new Set(),\n onSelectRow,\n onSelectAll,\n selectable = false,\n rowIds = [],\n isLoading = false,\n loadingRowCount = 5,\n className,\n children,\n ...props\n}: TableProps) {\n return (\n <TableContext.Provider\n value={{\n sortColumn,\n sortDirection,\n onSort,\n selectedRows,\n onSelectRow,\n onSelectAll,\n selectable,\n allRowIds: rowIds,\n }}\n >\n <View className={cn('w-full', className)} {...props}>\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <View className=\"w-full min-w-full\">\n {isLoading ? (\n <TableLoadingSkeleton rowCount={loadingRowCount} />\n ) : (\n children\n )}\n </View>\n </ScrollView>\n </View>\n </TableContext.Provider>\n )\n}\n\nexport interface TableHeaderProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Table header container.\n */\nexport function TableHeader({ children, className }: TableHeaderProps) {\n return (\n <View\n accessibilityRole=\"none\"\n className={cn('bg-background-subtle rounded-t-lg', className)}\n >\n {children}\n </View>\n )\n}\n\nexport interface TableBodyProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Table body container.\n */\nexport function TableBody({ children, className }: TableBodyProps) {\n return (\n <View accessibilityRole=\"none\" className={className}>\n {children}\n </View>\n )\n}\n\nexport interface TableRowProps extends ViewProps {\n /** Whether the row is selected */\n isSelected?: boolean\n /** Whether the row is hoverable */\n isHoverable?: boolean\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Table row.\n */\nexport function TableRow({\n isSelected = false,\n isHoverable = true,\n className,\n children,\n ...props\n}: TableRowProps) {\n return (\n <View\n accessibilityRole=\"none\"\n className={cn(\n 'flex-row border-b border-divider',\n isHoverable && 'web:hover:bg-interactive-hover',\n isSelected && 'bg-interactive-selected',\n className\n )}\n {...props}\n >\n {children}\n </View>\n )\n}\n\nexport interface TableHeaderCellProps extends Omit<PressableProps, 'children'> {\n /** Sort key for this column */\n sortKey?: string\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Cell width in pixels */\n width?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Table header cell with optional sorting.\n */\nexport function TableHeaderCell({\n sortKey,\n align = 'left',\n width,\n className,\n children,\n onPress,\n ...props\n}: TableHeaderCellProps) {\n const { sortColumn, sortDirection, onSort } = useContext(TableContext)\n const isSorted = sortKey && sortColumn === sortKey\n const isSortable = !!sortKey && !!onSort\n\n const handlePress = (e: any) => {\n if (isSortable && sortKey) {\n onSort(sortKey)\n }\n onPress?.(e)\n }\n\n const alignStyles = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n }\n\n const content = (\n <>\n <Text\n className={cn(\n 'text-xs font-semibold uppercase tracking-wider text-text-secondary',\n isSorted && 'text-text-primary'\n )}\n >\n {children}\n </Text>\n {isSortable && (\n <Text className={cn('ml-1 text-xs', isSorted ? 'text-text-primary' : 'text-text-tertiary')}>\n {isSorted ? (sortDirection === 'asc' ? '↑' : '↓') : '↕'}\n </Text>\n )}\n </>\n )\n\n if (isSortable) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Sort by ${children}`}\n onPress={handlePress}\n style={width ? { width } : { flex: 1 }}\n className={cn(\n 'flex-row items-center px-4 py-3',\n alignStyles[align],\n 'web:hover:bg-interactive-hover active:bg-interactive-active',\n className\n )}\n {...props}\n >\n {content}\n </Pressable>\n )\n }\n\n return (\n <View\n style={width ? { width } : { flex: 1 }}\n className={cn(\n 'flex-row items-center px-4 py-3',\n alignStyles[align],\n className\n )}\n >\n {content}\n </View>\n )\n}\n\nexport interface TableCellProps extends ViewProps {\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Cell width in pixels */\n width?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Table data cell.\n */\nexport function TableCell({\n align = 'left',\n width,\n className,\n children,\n ...props\n}: TableCellProps) {\n const alignStyles = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n }\n\n return (\n <View\n style={width ? { width } : { flex: 1 }}\n className={cn(\n 'justify-center px-4 py-3.5',\n alignStyles[align],\n className\n )}\n {...props}\n >\n {typeof children === 'string' ? (\n <Text className=\"text-sm text-text-primary\">{children}</Text>\n ) : (\n children\n )}\n </View>\n )\n}\n\n// Pagination component\n\nexport interface TablePaginationProps {\n /** Current page (0-indexed) */\n page: number\n /** Items per page */\n pageSize: number\n /** Total number of items */\n totalItems: number\n /** Available page size options */\n pageSizeOptions?: number[]\n /** Callback when page changes */\n onPageChange: (page: number) => void\n /** Callback when page size changes */\n onPageSizeChange?: (pageSize: number) => void\n /** Additional className */\n className?: string\n}\n\n/**\n * Pagination controls for table.\n *\n * @example\n * <TablePagination\n * page={page}\n * pageSize={pageSize}\n * totalItems={100}\n * onPageChange={setPage}\n * onPageSizeChange={setPageSize}\n * />\n */\nexport function TablePagination({\n page,\n pageSize,\n totalItems,\n pageSizeOptions = [10, 25, 50, 100],\n onPageChange,\n onPageSizeChange,\n className,\n}: TablePaginationProps) {\n const totalPages = Math.ceil(totalItems / pageSize)\n const startItem = page * pageSize + 1\n const endItem = Math.min((page + 1) * pageSize, totalItems)\n\n const canGoPrevious = page > 0\n const canGoNext = page < totalPages - 1\n\n return (\n <View\n className={cn(\n 'flex-row items-center justify-between px-4 py-3 border-t border-divider',\n className\n )}\n >\n <View className=\"flex-row items-center gap-2\">\n <Text className=\"text-sm text-text-secondary\">\n Rows per page:\n </Text>\n <View className=\"flex-row gap-1\">\n {pageSizeOptions.map((size) => (\n <Pressable\n key={size}\n onPress={() => onPageSizeChange?.(size)}\n className={cn(\n 'px-2 py-1 rounded',\n pageSize === size\n ? 'bg-brand-primary-subtle text-brand-primary'\n : 'text-text-secondary web:hover:bg-interactive-hover'\n )}\n >\n <Text\n className={cn(\n 'text-sm font-medium',\n pageSize === size ? 'text-brand-primary' : 'text-text-secondary'\n )}\n >\n {size}\n </Text>\n </Pressable>\n ))}\n </View>\n </View>\n\n <View className=\"flex-row items-center gap-4\">\n <Text className=\"text-sm text-text-secondary\">\n {startItem}-{endItem} of {totalItems}\n </Text>\n\n <View className=\"flex-row gap-1\">\n <Pressable\n disabled={!canGoPrevious}\n onPress={() => onPageChange(page - 1)}\n accessibilityLabel=\"Previous page\"\n className={cn(\n 'p-2 rounded',\n canGoPrevious\n ? 'web:hover:bg-interactive-hover active:bg-interactive-active'\n : 'opacity-50'\n )}\n >\n <Text className=\"text-text-secondary\">←</Text>\n </Pressable>\n\n <Pressable\n disabled={!canGoNext}\n onPress={() => onPageChange(page + 1)}\n accessibilityLabel=\"Next page\"\n className={cn(\n 'p-2 rounded',\n canGoNext\n ? 'web:hover:bg-interactive-hover active:bg-interactive-active'\n : 'opacity-50'\n )}\n >\n <Text className=\"text-text-secondary\">→</Text>\n </Pressable>\n </View>\n </View>\n </View>\n )\n}\n\n// Helper hook for managing table state\n\nexport interface UseTableOptions<T> {\n data: T[]\n defaultPageSize?: number\n defaultSortColumn?: string\n defaultSortDirection?: SortDirection\n}\n\nexport interface UseTableReturn<T> {\n sortedData: T[]\n paginatedData: T[]\n page: number\n pageSize: number\n totalItems: number\n sortColumn?: string\n sortDirection: SortDirection\n setPage: (page: number) => void\n setPageSize: (size: number) => void\n handleSort: (column: string) => void\n}\n\n/**\n * Hook for managing table sorting and pagination state.\n *\n * @example\n * const {\n * paginatedData,\n * page, pageSize, totalItems,\n * sortColumn, sortDirection,\n * setPage, setPageSize, handleSort\n * } = useTable({\n * data: users,\n * defaultPageSize: 10,\n * })\n */\nexport function useTable<T extends Record<string, any>>({\n data,\n defaultPageSize = 10,\n defaultSortColumn,\n defaultSortDirection = null,\n}: UseTableOptions<T>): UseTableReturn<T> {\n const [page, setPage] = useState(0)\n const [pageSize, setPageSize] = useState(defaultPageSize)\n const [sortColumn, setSortColumn] = useState<string | undefined>(defaultSortColumn)\n const [sortDirection, setSortDirection] = useState<SortDirection>(defaultSortDirection)\n\n const sortedData = useMemo(() => {\n if (!sortColumn || !sortDirection) return data\n\n return [...data].sort((a, b) => {\n const aVal = a[sortColumn]\n const bVal = b[sortColumn]\n\n if (aVal === bVal) return 0\n if (aVal === null || aVal === undefined) return 1\n if (bVal === null || bVal === undefined) return -1\n\n const comparison = aVal < bVal ? -1 : 1\n return sortDirection === 'asc' ? comparison : -comparison\n })\n }, [data, sortColumn, sortDirection])\n\n const paginatedData = useMemo(() => {\n const start = page * pageSize\n return sortedData.slice(start, start + pageSize)\n }, [sortedData, page, pageSize])\n\n const handleSort = (column: string) => {\n if (sortColumn === column) {\n // Cycle: asc -> desc -> null\n setSortDirection((prev) =>\n prev === 'asc' ? 'desc' : prev === 'desc' ? null : 'asc'\n )\n } else {\n setSortColumn(column)\n setSortDirection('asc')\n }\n setPage(0) // Reset to first page on sort change\n }\n\n const handlePageSizeChange = (newSize: number) => {\n setPageSize(newSize)\n setPage(0) // Reset to first page on page size change\n }\n\n return {\n sortedData,\n paginatedData,\n page,\n pageSize,\n totalItems: data.length,\n sortColumn,\n sortDirection,\n setPage,\n setPageSize: handlePageSizeChange,\n handleSort,\n }\n}\n\n// Selection components\n\nexport interface TableSelectAllCellProps {\n className?: string\n}\n\n/**\n * Checkbox cell for selecting all rows in header.\n */\nexport function TableSelectAllCell({ className }: TableSelectAllCellProps) {\n const { selectedRows, onSelectAll, allRowIds, selectable } = useContext(TableContext)\n\n if (!selectable) return null\n\n const allSelected = allRowIds.length > 0 && allRowIds.every((id) => selectedRows.has(id))\n const someSelected = allRowIds.some((id) => selectedRows.has(id)) && !allSelected\n\n return (\n <View className={cn('w-12 px-4 py-3 items-center justify-center', className)}>\n <Pressable\n accessibilityRole=\"checkbox\"\n accessibilityState={{ checked: allSelected ? true : someSelected ? 'mixed' : false }}\n onPress={() => onSelectAll?.(!allSelected)}\n className={cn(\n 'w-5 h-5 rounded border-2 items-center justify-center',\n allSelected\n ? 'bg-brand-primary border-brand-primary'\n : someSelected\n ? 'bg-brand-primary-subtle border-brand-primary'\n : 'border-border-strong bg-transparent'\n )}\n >\n {(allSelected || someSelected) && (\n <Text className=\"text-white text-xs font-bold\">\n {allSelected ? '✓' : '−'}\n </Text>\n )}\n </Pressable>\n </View>\n )\n}\n\nexport interface TableSelectCellProps {\n /** Row ID for selection */\n rowId: string\n className?: string\n}\n\n/**\n * Checkbox cell for selecting individual rows.\n */\nexport function TableSelectCell({ rowId, className }: TableSelectCellProps) {\n const { selectedRows, onSelectRow, selectable } = useContext(TableContext)\n\n if (!selectable) return null\n\n const isSelected = selectedRows.has(rowId)\n\n return (\n <View className={cn('w-12 px-4 py-3.5 items-center justify-center', className)}>\n <Pressable\n accessibilityRole=\"checkbox\"\n accessibilityState={{ checked: isSelected }}\n onPress={() => onSelectRow?.(rowId, !isSelected)}\n className={cn(\n 'w-5 h-5 rounded border-2 items-center justify-center',\n isSelected\n ? 'bg-brand-primary border-brand-primary'\n : 'border-border-strong bg-transparent web:hover:border-brand-primary'\n )}\n >\n {isSelected && (\n <Text className=\"text-white text-xs font-bold\">✓</Text>\n )}\n </Pressable>\n </View>\n )\n}\n\n// Loading skeleton\n\ninterface TableLoadingSkeletonProps {\n rowCount: number\n}\n\nfunction TableLoadingSkeleton({ rowCount }: TableLoadingSkeletonProps) {\n return (\n <>\n <TableHeader>\n <TableRow isHoverable={false}>\n {[1, 2, 3, 4].map((i) => (\n <View key={i} className=\"flex-1 px-4 py-3\">\n <View className=\"h-4 w-20 bg-interactive-disabled rounded animate-pulse\" />\n </View>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {Array.from({ length: rowCount }).map((_, rowIndex) => (\n <TableRow key={rowIndex} isHoverable={false}>\n {[1, 2, 3, 4].map((colIndex) => (\n <View key={colIndex} className=\"flex-1 px-4 py-3.5\">\n <View\n className=\"h-4 bg-interactive-disabled rounded animate-pulse\"\n style={{ width: `${50 + Math.random() * 40}%` }}\n />\n </View>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </>\n )\n}\n\n// Empty state\n\nexport interface TableEmptyStateProps {\n /** Title for empty state */\n title?: string\n /** Description for empty state */\n description?: string\n /** Action button/element */\n action?: React.ReactNode\n /** Custom icon */\n icon?: React.ReactNode\n /** Additional className */\n className?: string\n}\n\n/**\n * Empty state component for tables with no data.\n */\nexport function TableEmptyState({\n title = 'No data',\n description = 'There are no items to display.',\n action,\n icon,\n className,\n}: TableEmptyStateProps) {\n return (\n <View className={cn('items-center justify-center py-12 px-4', className)}>\n {icon && <View className=\"mb-4\">{icon}</View>}\n <Text className=\"text-lg font-semibold text-text-primary mb-1\">{title}</Text>\n <Text className=\"text-sm text-text-secondary text-center mb-4\">{description}</Text>\n {action}\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface EmptyStateProps extends ViewProps {\n /** Icon component to display */\n icon?: React.ComponentType<{ size?: number; className?: string }>\n /** Title text */\n title: string\n /** Description text */\n description?: string\n /** Action element (usually a button) */\n action?: React.ReactNode\n /** Additional className */\n className?: string\n}\n\n/**\n * Empty state component for when there's no data to display.\n *\n * @example\n * <EmptyState\n * icon={InboxIcon}\n * title=\"No messages\"\n * description=\"You don't have any messages yet.\"\n * action={<Button>Compose</Button>}\n * />\n */\nexport function EmptyState({\n icon: Icon,\n title,\n description,\n action,\n className,\n ...props\n}: EmptyStateProps) {\n return (\n <View\n className={cn(\n 'items-center justify-center py-12 px-6',\n className\n )}\n {...props}\n >\n {Icon && (\n <View className=\"mb-4 p-4 rounded-full bg-background-subtle\">\n <Icon size={32} className=\"text-text-tertiary\" />\n </View>\n )}\n\n <Text className=\"text-lg font-semibold text-text-primary text-center mb-2\">\n {title}\n </Text>\n\n {description && (\n <Text className=\"text-sm text-text-secondary text-center max-w-xs mb-6\">\n {description}\n </Text>\n )}\n\n {action && (\n <View className=\"mt-2\">\n {action}\n </View>\n )}\n </View>\n )\n}\n","import React, { createContext, useContext } from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type StepStatus = 'completed' | 'active' | 'upcoming' | 'error'\nexport type StepperOrientation = 'horizontal' | 'vertical'\n\ninterface StepperContextType {\n activeStep: number\n orientation: StepperOrientation\n}\n\nconst StepperContext = createContext<StepperContextType>({\n activeStep: 0,\n orientation: 'horizontal',\n})\n\nexport interface StepperProps extends ViewProps {\n /** Current active step (0-indexed) */\n activeStep: number\n /** Stepper orientation */\n orientation?: StepperOrientation\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Stepper component for multi-step flows.\n *\n * @example\n * <Stepper activeStep={1}>\n * <Step>\n * <StepIndicator />\n * <StepLabel>Account</StepLabel>\n * </Step>\n * <Step>\n * <StepIndicator />\n * <StepLabel>Profile</StepLabel>\n * </Step>\n * <Step>\n * <StepIndicator />\n * <StepLabel>Review</StepLabel>\n * </Step>\n * </Stepper>\n */\nexport function Stepper({\n activeStep,\n orientation = 'horizontal',\n className,\n children,\n ...props\n}: StepperProps) {\n return (\n <StepperContext.Provider value={{ activeStep, orientation }}>\n <View\n className={cn(\n orientation === 'horizontal' ? 'flex-row items-center' : 'flex-col',\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n return (\n <>\n {React.cloneElement(child as React.ReactElement<any>, { index })}\n {index < React.Children.count(children) - 1 && (\n <StepConnector index={index} />\n )}\n </>\n )\n }\n return child\n })}\n </View>\n </StepperContext.Provider>\n )\n}\n\ninterface StepConnectorProps {\n index: number\n}\n\nfunction StepConnector({ index }: StepConnectorProps) {\n const { activeStep, orientation } = useContext(StepperContext)\n const isCompleted = index < activeStep\n\n if (orientation === 'horizontal') {\n return (\n <View\n className={cn(\n 'flex-1 h-0.5 mx-2',\n isCompleted ? 'bg-brand-primary' : 'bg-border-default'\n )}\n />\n )\n }\n\n return (\n <View\n className={cn(\n 'w-0.5 h-8 ml-4 my-1',\n isCompleted ? 'bg-brand-primary' : 'bg-border-default'\n )}\n />\n )\n}\n\nexport interface StepProps {\n /** Step index (injected by Stepper) */\n index?: number\n /** Override step status */\n status?: StepStatus\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Individual step in the stepper.\n */\nexport function Step({ index = 0, status, className, children }: StepProps) {\n const { activeStep, orientation } = useContext(StepperContext)\n\n const derivedStatus: StepStatus = status || (\n index < activeStep ? 'completed' :\n index === activeStep ? 'active' : 'upcoming'\n )\n\n return (\n <View\n className={cn(\n orientation === 'horizontal' ? 'items-center' : 'flex-row items-start',\n className\n )}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child as React.ReactElement<any>, {\n status: derivedStatus,\n index,\n })\n }\n return child\n })}\n </View>\n )\n}\n\nexport interface StepIndicatorProps {\n /** Step status (injected by Step) */\n status?: StepStatus\n /** Step index (injected by Step) */\n index?: number\n /** Custom icon */\n icon?: React.ReactNode\n /** Additional className */\n className?: string\n}\n\n/**\n * Visual indicator for step status.\n */\nexport function StepIndicator({\n status = 'upcoming',\n index = 0,\n icon,\n className,\n}: StepIndicatorProps) {\n const statusStyles: Record<StepStatus, string> = {\n completed: 'bg-brand-primary border-brand-primary',\n active: 'bg-brand-primary border-brand-primary',\n upcoming: 'bg-surface-base border-border-strong',\n error: 'bg-status-error border-status-error',\n }\n\n return (\n <View\n className={cn(\n 'w-8 h-8 rounded-full border-2 items-center justify-center',\n statusStyles[status],\n className\n )}\n >\n {icon || (\n <Text\n className={cn(\n 'text-sm font-semibold',\n status === 'upcoming' ? 'text-text-secondary' : 'text-white'\n )}\n >\n {status === 'completed' ? '✓' : index + 1}\n </Text>\n )}\n </View>\n )\n}\n\nexport interface StepLabelProps {\n /** Step status (injected by Step) */\n status?: StepStatus\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Label for a step.\n */\nexport function StepLabel({ status = 'upcoming', className, children }: StepLabelProps) {\n const { orientation } = useContext(StepperContext)\n\n return (\n <Text\n className={cn(\n 'text-sm font-medium',\n orientation === 'horizontal' ? 'mt-2' : 'ml-3',\n status === 'active' ? 'text-text-primary' :\n status === 'completed' ? 'text-brand-primary' :\n status === 'error' ? 'text-status-error' :\n 'text-text-secondary',\n className\n )}\n >\n {children}\n </Text>\n )\n}\n\nexport interface StepContentProps {\n /** Step status (injected by Step) */\n status?: StepStatus\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Content area for vertical stepper.\n */\nexport function StepContent({ status = 'upcoming', className, children }: StepContentProps) {\n if (status !== 'active') return null\n\n return (\n <View className={cn('ml-11 mt-2 pb-4', className)}>\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { Text, type TextProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type DateTimeFormat = \n | 'date' // 2024-01-15\n | 'time' // 14:30\n | 'datetime' // 2024-01-15 14:30\n | 'relative' // 2 hours ago\n | 'short' // Jan 15\n | 'medium' // Jan 15, 2024\n | 'long' // January 15, 2024\n | 'full' // Monday, January 15, 2024\n\nexport interface DateTimeProps extends TextProps {\n /** Date value (timestamp in ms, Date object, or ISO string) */\n value: number | Date | string | null | undefined\n /** Display format */\n format?: DateTimeFormat\n /** Custom format string (overrides format) */\n customFormat?: string\n /** Whether to show in UTC */\n isUTC?: boolean\n /** Fallback text when value is null/undefined */\n fallback?: string\n /** Text color */\n color?: 'primary' | 'secondary' | 'tertiary' | 'inherit'\n /** Additional className */\n className?: string\n}\n\nconst colorStyles = {\n primary: 'text-text-primary',\n secondary: 'text-text-secondary',\n tertiary: 'text-text-tertiary',\n inherit: '',\n}\n\n/**\n * Formats a date value to a readable string.\n */\nfunction formatDate(\n value: number | Date | string,\n format: DateTimeFormat,\n isUTC: boolean\n): string {\n const date = value instanceof Date ? value : new Date(value)\n \n if (isNaN(date.getTime())) {\n return 'Invalid Date'\n }\n\n // For relative time\n if (format === 'relative') {\n return getRelativeTime(date)\n }\n\n // Use Intl.DateTimeFormat for locale-aware formatting\n const options: Intl.DateTimeFormatOptions = {}\n \n switch (format) {\n case 'date':\n options.year = 'numeric'\n options.month = '2-digit'\n options.day = '2-digit'\n break\n case 'time':\n options.hour = '2-digit'\n options.minute = '2-digit'\n break\n case 'datetime':\n options.year = 'numeric'\n options.month = '2-digit'\n options.day = '2-digit'\n options.hour = '2-digit'\n options.minute = '2-digit'\n break\n case 'short':\n options.month = 'short'\n options.day = 'numeric'\n break\n case 'medium':\n options.month = 'short'\n options.day = 'numeric'\n options.year = 'numeric'\n break\n case 'long':\n options.month = 'long'\n options.day = 'numeric'\n options.year = 'numeric'\n break\n case 'full':\n options.weekday = 'long'\n options.month = 'long'\n options.day = 'numeric'\n options.year = 'numeric'\n break\n }\n\n if (isUTC) {\n options.timeZone = 'UTC'\n }\n\n return new Intl.DateTimeFormat(undefined, options).format(date)\n}\n\n/**\n * Gets relative time string (e.g., \"2 hours ago\", \"in 3 days\")\n */\nfunction getRelativeTime(date: Date): string {\n const now = new Date()\n const diffMs = date.getTime() - now.getTime()\n const diffSecs = Math.round(diffMs / 1000)\n const diffMins = Math.round(diffSecs / 60)\n const diffHours = Math.round(diffMins / 60)\n const diffDays = Math.round(diffHours / 24)\n const diffWeeks = Math.round(diffDays / 7)\n const diffMonths = Math.round(diffDays / 30)\n const diffYears = Math.round(diffDays / 365)\n\n // Use Intl.RelativeTimeFormat if available\n if (typeof Intl !== 'undefined' && Intl.RelativeTimeFormat) {\n const rtf = new Intl.RelativeTimeFormat(undefined, { numeric: 'auto' })\n \n if (Math.abs(diffSecs) < 60) {\n return rtf.format(diffSecs, 'second')\n }\n if (Math.abs(diffMins) < 60) {\n return rtf.format(diffMins, 'minute')\n }\n if (Math.abs(diffHours) < 24) {\n return rtf.format(diffHours, 'hour')\n }\n if (Math.abs(diffDays) < 7) {\n return rtf.format(diffDays, 'day')\n }\n if (Math.abs(diffWeeks) < 4) {\n return rtf.format(diffWeeks, 'week')\n }\n if (Math.abs(diffMonths) < 12) {\n return rtf.format(diffMonths, 'month')\n }\n return rtf.format(diffYears, 'year')\n }\n\n // Fallback for environments without Intl.RelativeTimeFormat\n const absSeconds = Math.abs(diffSecs)\n const isFuture = diffMs > 0\n const prefix = isFuture ? 'in ' : ''\n const suffix = isFuture ? '' : ' ago'\n\n if (absSeconds < 60) {\n return 'just now'\n }\n if (Math.abs(diffMins) < 60) {\n const mins = Math.abs(diffMins)\n return `${prefix}${mins} minute${mins === 1 ? '' : 's'}${suffix}`\n }\n if (Math.abs(diffHours) < 24) {\n const hours = Math.abs(diffHours)\n return `${prefix}${hours} hour${hours === 1 ? '' : 's'}${suffix}`\n }\n if (Math.abs(diffDays) < 7) {\n const days = Math.abs(diffDays)\n return `${prefix}${days} day${days === 1 ? '' : 's'}${suffix}`\n }\n if (Math.abs(diffWeeks) < 4) {\n const weeks = Math.abs(diffWeeks)\n return `${prefix}${weeks} week${weeks === 1 ? '' : 's'}${suffix}`\n }\n if (Math.abs(diffMonths) < 12) {\n const months = Math.abs(diffMonths)\n return `${prefix}${months} month${months === 1 ? '' : 's'}${suffix}`\n }\n const years = Math.abs(diffYears)\n return `${prefix}${years} year${years === 1 ? '' : 's'}${suffix}`\n}\n\n/**\n * DateTime component for displaying formatted dates and times.\n *\n * @example\n * // Basic usage\n * <DateTime value={Date.now()} />\n *\n * @example\n * // Different formats\n * <DateTime value={date} format=\"relative\" />\n * <DateTime value={date} format=\"long\" />\n *\n * @example\n * // UTC time\n * <DateTime value={timestamp} format=\"datetime\" isUTC />\n */\nexport function DateTime({\n value,\n format = 'datetime',\n customFormat,\n isUTC = false,\n fallback = '-',\n color = 'inherit',\n className,\n ...props\n}: DateTimeProps) {\n if (value === null || value === undefined) {\n return (\n <Text className={cn(colorStyles[color], className)} {...props}>\n {fallback}\n </Text>\n )\n }\n\n const formattedDate = formatDate(value, format, isUTC)\n\n return (\n <Text className={cn(colorStyles[color], className)} {...props}>\n {formattedDate}\n </Text>\n )\n}\n\n/**\n * Utility function to format dates outside of React components.\n */\nexport function formatDateTime(\n value: number | Date | string | null | undefined,\n format: DateTimeFormat = 'datetime',\n isUTC: boolean = false,\n fallback: string = '-'\n): string {\n if (value === null || value === undefined) {\n return fallback\n }\n return formatDate(value, format, isUTC)\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type MetricTrend = 'up' | 'down' | 'neutral'\n\nexport interface MetricProps extends ViewProps {\n value: string\n label: string\n unit?: string\n trend?: MetricTrend\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}\n\nconst sizeConfig = {\n sm: { value: 'text-lg font-bold', label: 'text-xs', unit: 'text-xs' },\n md: { value: 'text-2xl font-bold', label: 'text-xs', unit: 'text-sm' },\n lg: { value: 'text-4xl font-bold', label: 'text-sm', unit: 'text-base' },\n}\n\nconst trendColors: Record<MetricTrend, string> = {\n up: 'text-result-improve',\n down: 'text-result-degrade',\n neutral: 'text-result-inconclusive',\n}\n\nconst trendArrows: Record<MetricTrend, string> = {\n up: '\\u2191',\n down: '\\u2193',\n neutral: '\\u2192',\n}\n\nexport function Metric({\n value,\n label,\n unit,\n trend,\n size = 'md',\n className,\n ...props\n}: MetricProps) {\n const styles = sizeConfig[size]\n\n return (\n <View className={cn('items-center', className)} {...props}>\n <View className=\"flex-row items-baseline gap-1\">\n <Text className={cn(styles.value, 'text-text-primary')}>{value}</Text>\n {unit && (\n <Text className={cn(styles.unit, 'text-text-tertiary')}>{unit}</Text>\n )}\n {trend && (\n <Text className={cn(styles.unit, trendColors[trend])}>\n {trendArrows[trend]}\n </Text>\n )}\n </View>\n <Text className={cn(styles.label, 'text-text-secondary mt-1')}>\n {label}\n </Text>\n </View>\n )\n}\n\nexport interface MetricGroupProps extends ViewProps {\n className?: string\n children: React.ReactNode\n}\n\nexport function MetricGroup({\n className,\n children,\n ...props\n}: MetricGroupProps) {\n const items = React.Children.toArray(children)\n\n return (\n <View className={cn('flex-row items-center', className)} {...props}>\n {items.map((child, i) => (\n <React.Fragment key={i}>\n <View className=\"flex-1 items-center\">{child}</View>\n {i < items.length - 1 && (\n <View\n className=\"w-px h-8 bg-divider mx-2\"\n testID=\"metric-divider\"\n />\n )}\n </React.Fragment>\n ))}\n </View>\n )\n}\n","/**\n * Color utility functions for the design system\n *\n * lighten/darken are re-exported from shadows.ts which uses HSV-based\n * color math for more perceptually consistent results across hues.\n */\n\nexport { lighten, darken } from '../theme/shadows'\n\nexport type StatusType = 'success' | 'error' | 'warning' | 'info'\nexport type ResultType = 'improve' | 'degrade' | 'inconclusive' | 'neutral'\n\n/**\n * Get the semantic color token for a status type.\n *\n * @param status - The status type\n * @returns The CSS variable reference for the status color\n *\n * @example\n * const color = getStatusColor('success') // 'var(--color-status-success)'\n */\nexport function getStatusColor(status: StatusType): string {\n return `var(--color-status-${status})`\n}\n\n/**\n * Get the semantic color token for a result type.\n *\n * @param result - The result type\n * @returns The CSS variable reference for the result color\n *\n * @example\n * const color = getResultColor('improve') // 'var(--color-result-improve)'\n */\nexport function getResultColor(result: ResultType): string {\n return `var(--color-result-${result})`\n}\n\n/**\n * Apply alpha/opacity to a color.\n * Works with hex colors and rgb values.\n *\n * @param color - The color value (hex or rgb)\n * @param opacity - Opacity value between 0 and 1\n * @returns The color with alpha applied\n *\n * @example\n * alpha('#5048E5', 0.5) // 'rgba(80, 72, 229, 0.5)'\n * alpha('rgb(80, 72, 229)', 0.5) // 'rgba(80, 72, 229, 0.5)'\n */\nexport function alpha(color: string, opacity: number): string {\n // Clamp opacity between 0 and 1\n const clampedOpacity = Math.max(0, Math.min(1, opacity))\n\n // Handle hex colors\n if (color.startsWith('#')) {\n const hex = color.slice(1)\n let r: number, g: number, b: number\n\n if (hex.length === 3) {\n r = parseInt(hex[0] + hex[0], 16)\n g = parseInt(hex[1] + hex[1], 16)\n b = parseInt(hex[2] + hex[2], 16)\n } else if (hex.length === 6) {\n r = parseInt(hex.slice(0, 2), 16)\n g = parseInt(hex.slice(2, 4), 16)\n b = parseInt(hex.slice(4, 6), 16)\n } else {\n return color\n }\n\n return `rgba(${r}, ${g}, ${b}, ${clampedOpacity})`\n }\n\n // Handle rgb colors\n const rgbMatch = color.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/)\n if (rgbMatch) {\n const [, r, g, b] = rgbMatch\n return `rgba(${r}, ${g}, ${b}, ${clampedOpacity})`\n }\n\n // Handle rgba colors - replace the alpha value\n const rgbaMatch = color.match(/rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*[\\d.]+\\)/)\n if (rgbaMatch) {\n const [, r, g, b] = rgbaMatch\n return `rgba(${r}, ${g}, ${b}, ${clampedOpacity})`\n }\n\n return color\n}\n\n/**\n * Determine if a color is light or dark.\n * Useful for determining text color contrast.\n *\n * @param color - Hex color value\n * @returns 'light' or 'dark'\n *\n * @example\n * getLuminance('#FFFFFF') // 'light'\n * getLuminance('#000000') // 'dark'\n */\nexport function getLuminance(color: string): 'light' | 'dark' {\n if (!color.startsWith('#')) return 'dark'\n\n const hex = color.slice(1)\n let r: number, g: number, b: number\n\n if (hex.length === 3) {\n r = parseInt(hex[0] + hex[0], 16)\n g = parseInt(hex[1] + hex[1], 16)\n b = parseInt(hex[2] + hex[2], 16)\n } else if (hex.length === 6) {\n r = parseInt(hex.slice(0, 2), 16)\n g = parseInt(hex.slice(2, 4), 16)\n b = parseInt(hex.slice(4, 6), 16)\n } else {\n return 'dark'\n }\n\n // Calculate relative luminance using sRGB\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255\n\n return luminance > 0.5 ? 'light' : 'dark'\n}\n\n/**\n * Get a contrasting text color for a given background.\n *\n * @param backgroundColor - The background color (hex)\n * @returns 'white' or 'black' for contrast\n *\n * @example\n * getContrastText('#5048E5') // 'white'\n * getContrastText('#FFFFFF') // 'black'\n */\nexport function getContrastText(backgroundColor: string): string {\n return getLuminance(backgroundColor) === 'light' ? '#000000' : '#FFFFFF'\n}\n\n","/**\n * Form utility functions for consistent form field handling\n */\n\nimport React from 'react'\n\nexport interface FieldState {\n /** Whether the field has been touched */\n touched: boolean\n /** Whether the field has an error */\n hasError: boolean\n /** Error message if any */\n errorMessage?: string\n /** Whether the field is required */\n isRequired?: boolean\n}\n\nexport interface FieldWrapperProps {\n /** Field label */\n label?: string\n /** Helper text */\n helperText?: string\n /** Error message */\n errorMessage?: string\n /** Whether the field is required */\n isRequired?: boolean\n /** Whether the field is disabled */\n isDisabled?: boolean\n /** Whether to show error state */\n isInvalid?: boolean\n}\n\n/**\n * Get validation state props from field state\n */\nexport function getFieldValidationProps(state: FieldState): {\n isInvalid: boolean\n errorMessage?: string\n} {\n return {\n isInvalid: state.touched && state.hasError,\n errorMessage: state.touched && state.hasError ? state.errorMessage : undefined,\n }\n}\n\n/**\n * Create a field ID from label text\n */\nexport function createFieldId(label: string): string {\n return label\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '')\n}\n\n/**\n * Get aria attributes for form field\n */\nexport function getFieldAriaProps(props: FieldWrapperProps & { id: string }): {\n 'aria-invalid'?: boolean\n 'aria-required'?: boolean\n 'aria-describedby'?: string\n} {\n const describedBy: string[] = []\n\n if (props.helperText) {\n describedBy.push(`${props.id}-helper`)\n }\n\n if (props.isInvalid && props.errorMessage) {\n describedBy.push(`${props.id}-error`)\n }\n\n return {\n 'aria-invalid': props.isInvalid || undefined,\n 'aria-required': props.isRequired || undefined,\n 'aria-describedby': describedBy.length > 0 ? describedBy.join(' ') : undefined,\n }\n}\n\n/**\n * Validate email format\n */\nexport function isValidEmail(email: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n}\n\n/**\n * Validate minimum length\n */\nexport function hasMinLength(value: string, minLength: number): boolean {\n return value.length >= minLength\n}\n\n/**\n * Validate maximum length\n */\nexport function hasMaxLength(value: string, maxLength: number): boolean {\n return value.length <= maxLength\n}\n\n/**\n * Check if value is empty (null, undefined, or empty string)\n */\nexport function isEmpty(value: unknown): boolean {\n if (value === null || value === undefined) return true\n if (typeof value === 'string') return value.trim() === ''\n if (Array.isArray(value)) return value.length === 0\n return false\n}\n\n/**\n * Common validation rules\n */\nexport const validationRules = {\n required: (value: unknown) => {\n if (isEmpty(value)) {\n return 'This field is required'\n }\n return undefined\n },\n\n email: (value: string) => {\n if (value && !isValidEmail(value)) {\n return 'Please enter a valid email address'\n }\n return undefined\n },\n\n minLength: (min: number) => (value: string) => {\n if (value && !hasMinLength(value, min)) {\n return `Must be at least ${min} characters`\n }\n return undefined\n },\n\n maxLength: (max: number) => (value: string) => {\n if (value && !hasMaxLength(value, max)) {\n return `Must be no more than ${max} characters`\n }\n return undefined\n },\n\n pattern: (regex: RegExp, message: string) => (value: string) => {\n if (value && !regex.test(value)) {\n return message\n }\n return undefined\n },\n\n match: (otherValue: string, fieldName: string) => (value: string) => {\n if (value !== otherValue) {\n return `Must match ${fieldName}`\n }\n return undefined\n },\n}\n\n/**\n * Compose multiple validation functions\n */\nexport function composeValidators(\n ...validators: Array<(value: any) => string | undefined>\n) {\n return (value: any): string | undefined => {\n for (const validator of validators) {\n const error = validator(value)\n if (error) return error\n }\n return undefined\n }\n}\n\n/**\n * Type for form values\n */\nexport type FormValues = Record<string, unknown>\n\n/**\n * Type for form errors\n */\nexport type FormErrors<T extends FormValues> = Partial<Record<keyof T, string>>\n\n/**\n * Type for form touched state\n */\nexport type FormTouched<T extends FormValues> = Partial<Record<keyof T, boolean>>\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/cn.ts","../src/web-jsx/jsx-runtime.ts","../src/components/ui/alert/Alert.tsx","../src/theme/tokens/primitives.ts","../src/theme/tokens/semantic.ts","../src/components/ui/button/Button.tsx","../src/components/ui/input/Input.tsx","../src/theme/config.ts","../src/theme/shadows.ts","../src/theme/elevation.ts","../src/theme/presets/apply.ts","../src/theme/presets/default.ts","../src/theme/presets/audiobook.ts","../src/utils/useTheme.ts","../src/components/ui/card/Card.tsx","../src/components/ui/indicator/Indicator.tsx","../src/components/ui/badge/Badge.tsx","../src/components/ui/spinner/Spinner.tsx","../src/utils/avatar-color.ts","../src/components/ui/avatar/Avatar.tsx","../src/components/ui/divider/Divider.tsx","../src/components/ui/checkbox/Checkbox.tsx","../src/components/ui/switch/Switch.tsx","../src/components/ui/modal/Modal.tsx","../src/components/ui/skeleton/Skeleton.tsx","../src/components/ui/tabs/Tabs.tsx","../src/components/ui/chip/Chip.tsx","../src/components/ui/link/Link.tsx","../src/components/ui/tooltip/Tooltip.tsx","../src/components/ui/collapse/Collapse.tsx","../src/components/ui/breadcrumbs/Breadcrumbs.tsx","../src/components/ui/popover/Popover.tsx","../src/components/ui/menu/Menu.tsx","../src/components/ui/select/Select.tsx","../src/components/ui/toolbar-button/ToolbarButton.tsx","../src/components/ui/radio/Radio.tsx","../src/components/ui/drawer/Drawer.tsx","../src/components/ui/progress/Progress.tsx","../src/components/ui/toast/Toast.tsx","../src/components/ui/autocomplete/Autocomplete.tsx","../src/components/ui/help-tip/HelpTip.tsx","../src/components/ui/form-field/FormField.tsx","../src/components/ui/stack/Stack.tsx","../src/components/ui/section/Section.tsx","../src/components/ui/data-row/DataRow.tsx","../src/components/ui/icon-box/IconBox.tsx","../src/components/ui/surface/Surface.tsx","../src/components/ui/list-item/ListItem.tsx","../src/components/ui/pill/Pill.tsx","../src/components/custom/Typography/Typography.tsx","../src/components/custom/Sidebar/Sidebar.tsx","../src/components/custom/Table/Table.tsx","../src/components/custom/EmptyState/EmptyState.tsx","../src/components/custom/stepper/Stepper.tsx","../src/components/custom/DateTime/DateTime.tsx","../src/components/custom/Metric/Metric.tsx","../src/components/custom/Workout/RestTimer.tsx","../src/components/custom/Workout/SupersetWrapper.tsx","../src/utils/colors.ts","../src/utils/form.ts"],"names":["twMerge","clsx","cn","reactJsx","reactJsxs","View","Text","Pressable","forwardRef","Button","ActivityIndicator","sizeStyles","variantStyles","Input","useState","TextInput","PasswordInput","Platform","intensityConfig","useSyncExternalStore","useMemo","Fragment","styles","Image","React","Checkbox","Switch","createContext","RNModal","ScrollView","useContext","colorStyles","useRef","useEffect","arrowStyles","useCallback","placementStyles","textSizeStyles","StyleSheet","gapStyles","Modal","variantColorStyles","alignStyles","statusStyles","sizeConfig"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Utility function to merge Tailwind CSS classes with proper conflict resolution.\n * Combines clsx for conditional classes with tailwind-merge for deduplication.\n *\n * @example\n * cn('p-4 bg-red-500', isActive && 'bg-blue-500', className)\n * // If isActive is true, returns 'p-4 bg-blue-500' (not 'p-4 bg-red-500 bg-blue-500')\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs))\n}\n","/**\n * Custom JSX runtime for titan-design's web distribution.\n *\n * Converts className props to $$css style objects at build time,\n * eliminating the need for NativeWind's runtime interopComponents\n * Map lookup. RNW's styleq recognizes $$css objects and applies\n * their values as CSS class names on DOM elements.\n *\n * This file is NOT used by source builds (specimen, storybook,\n * native Metro). It is only inlined into the dist by tsup via\n * an esbuild onResolve plugin.\n */\nimport {\n jsx as reactJsx,\n jsxs as reactJsxs,\n Fragment,\n} from 'react/jsx-runtime'\nimport type { StyleProp } from 'react-native'\n\ntype JsxFn = typeof reactJsx\n\nfunction wrapJsx(fn: JsxFn): JsxFn {\n return function (type, props: Record<string, any>, ...rest) {\n if (props && typeof props.className === 'string' && props.className) {\n const cn = props.className\n const cssStyle = { $$css: true, [cn]: cn } as unknown as StyleProp<any>\n const existing = props.style\n props = {\n ...props,\n style: existing ? [cssStyle, existing] : cssStyle,\n }\n delete props.className\n }\n return fn(type, props, ...rest)\n } as JsxFn\n}\n\nconst jsx = wrapJsx(reactJsx)\nconst jsxs = wrapJsx(reactJsxs)\n\nexport { jsx, jsxs, Fragment }\n","import React from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type AlertStatus = 'success' | 'info' | 'warning' | 'error'\nexport type AlertVariant = 'subtle' | 'outline' | 'solid'\n\nexport interface AlertProps extends ViewProps {\n /** Alert status type */\n status?: AlertStatus\n /** Visual variant */\n variant?: AlertVariant\n /** Custom icon element */\n icon?: React.ReactNode\n /** Whether to show the default icon */\n showIcon?: boolean\n /** Callback when close button is pressed */\n onClose?: () => void\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst statusColors: Record<AlertStatus, {\n subtle: string\n outline: string\n solid: string\n icon: string\n text: string\n}> = {\n success: {\n subtle: 'bg-status-success-subtle',\n outline: 'border-2 border-status-success bg-transparent',\n solid: 'bg-status-success',\n icon: 'text-status-success',\n text: 'text-status-success',\n },\n info: {\n subtle: 'bg-status-info-subtle',\n outline: 'border-2 border-status-info bg-transparent',\n solid: 'bg-status-info',\n icon: 'text-status-info',\n text: 'text-status-info',\n },\n warning: {\n subtle: 'bg-status-warning-subtle',\n outline: 'border-2 border-status-warning bg-transparent',\n solid: 'bg-status-warning',\n icon: 'text-status-warning',\n text: 'text-status-warning',\n },\n error: {\n subtle: 'bg-status-error-subtle',\n outline: 'border-2 border-status-error bg-transparent',\n solid: 'bg-status-error',\n icon: 'text-status-error',\n text: 'text-status-error',\n },\n}\n\n// Default icons for each status\nconst defaultIcons: Record<AlertStatus, string> = {\n success: '✓',\n info: 'ℹ',\n warning: '⚠',\n error: '✕',\n}\n\n/**\n * Alert component for displaying status messages.\n *\n * @example\n * <Alert status=\"success\">\n * <AlertTitle>Success!</AlertTitle>\n * <AlertDescription>Your changes have been saved.</AlertDescription>\n * </Alert>\n *\n * <Alert status=\"error\" variant=\"solid\" onClose={() => {}}>\n * <AlertDescription>Something went wrong.</AlertDescription>\n * </Alert>\n */\nexport function Alert({\n status = 'info',\n variant = 'subtle',\n icon,\n showIcon = true,\n onClose,\n className,\n children,\n ...props\n}: AlertProps) {\n const colors = statusColors[status]\n const isSolid = variant === 'solid'\n\n return (\n <View\n accessibilityRole=\"alert\"\n className={cn(\n 'flex-row items-start p-4 rounded-lg',\n colors[variant],\n className\n )}\n {...props}\n >\n {showIcon && (\n <View className=\"mr-3 mt-0.5\">\n {icon || (\n <Text\n className={cn(\n 'text-lg font-bold',\n isSolid ? 'text-white' : colors.icon\n )}\n >\n {defaultIcons[status]}\n </Text>\n )}\n </View>\n )}\n\n <View className=\"flex-1\">\n {children}\n </View>\n\n {onClose && (\n <Pressable\n onPress={onClose}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close alert\"\n className=\"ml-2 p-1 rounded web:hover:bg-black/10 active:bg-black/20\"\n >\n <Text className={cn('text-lg', isSolid ? 'text-white/70' : 'text-text-secondary')}>\n ×\n </Text>\n </Pressable>\n )}\n </View>\n )\n}\n\nexport interface AlertTitleProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Title for Alert component.\n */\nexport function AlertTitle({ children, className }: AlertTitleProps) {\n return (\n <Text className={cn('font-semibold text-text-primary mb-1', className)}>\n {children}\n </Text>\n )\n}\n\nexport interface AlertDescriptionProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Description for Alert component.\n */\nexport function AlertDescription({ children, className }: AlertDescriptionProps) {\n return (\n <Text className={cn('text-sm text-text-secondary', className)}>\n {children}\n </Text>\n )\n}\n","/**\n * Primitive Design Tokens\n *\n * Raw values with no semantic meaning. These are the foundation of the design system\n * and should rarely be used directly in components. Use semantic tokens instead.\n */\n\nexport const primitiveColors = {\n // Blue scale (primary brand)\n blue: {\n 50: '#EFF6FF',\n 100: '#DBEAFE',\n 200: '#BFDBFE',\n 300: '#93C5FD',\n 400: '#60A5FA',\n 500: '#3B82F6',\n 600: '#5048E5', // Primary main\n 700: '#3832A0', // Primary dark\n 800: '#1E40AF',\n 900: '#1E3A8A',\n },\n\n // Green scale (secondary brand)\n green: {\n 50: '#ECFDF5',\n 100: '#D1FAE5',\n 200: '#A7F3D0',\n 300: '#6EE7B7',\n 400: '#3FC79A', // Secondary light\n 500: '#10B981', // Secondary main\n 600: '#059669',\n 700: '#0B815A', // Secondary dark\n 800: '#065F46',\n 900: '#064E3B',\n },\n\n // Teal scale (success)\n teal: {\n 50: '#F0FDFA',\n 100: '#CCFBF1',\n 200: '#99F6E4',\n 300: '#5EEAD4',\n 400: '#43C6B7', // Success light\n 500: '#14B8A6', // Success main\n 600: '#0D9488',\n 700: '#0E8074', // Success dark\n 800: '#115E59',\n 900: '#134E4A',\n },\n\n // Red scale (error)\n red: {\n 50: '#FEF2F2',\n 100: '#FEE2E2',\n 200: '#FECACA',\n 300: '#FCA5A5',\n 400: '#DA6868', // Error light\n 500: '#EF4444',\n 600: '#D14343', // Error main\n 700: '#922E2E', // Error dark\n 800: '#991B1B',\n 900: '#7F1D1D',\n },\n\n // Amber scale (warning)\n amber: {\n 50: '#FFFBEB',\n 100: '#FEF3C7',\n 200: '#FDE68A',\n 300: '#FCD34D',\n 400: '#FFBF4C', // Warning light\n 500: '#FFB020', // Warning main\n 600: '#B27B16', // Warning dark\n 700: '#B45309',\n 800: '#92400E',\n 900: '#78350F',\n },\n\n // Sky/Blue scale (info)\n sky: {\n 50: '#F0F9FF',\n 100: '#E0F2FE',\n 200: '#BAE6FD',\n 300: '#7DD3FC',\n 400: '#64B6F7', // Info light\n 500: '#2196F3', // Info main\n 600: '#0284C7',\n 700: '#0B79D0', // Info dark\n 800: '#075985',\n 900: '#0C4A6E',\n },\n\n // Neutral/Gray scale\n neutral: {\n 50: '#FAFAFA',\n 100: '#F3F4F6',\n 200: '#E5E7EB',\n 300: '#D1D5DB',\n 400: '#9CA3AF',\n 500: '#6B7280',\n 600: '#4B5563',\n 700: '#374151',\n 800: '#1F2937',\n 900: '#111827',\n 950: '#030712',\n },\n\n // Orange scale (accent/brand color)\n accent: {\n 100: '#FFA860',\n 200: '#FF9630',\n 300: '#FF8500',\n 400: '#FF7900',\n 500: '#F56C00',\n 600: '#E06D10',\n 700: '#D0620C',\n 800: '#B75500',\n 900: '#A34900',\n },\n\n // Charcoal scale (dark backgrounds)\n charcoal: {\n 0: '#6E6E6E',\n 50: '#5D5D5D',\n 100: '#4C4C4C',\n 200: '#3C3C3C',\n 300: '#2C2C2C',\n 400: '#1F1F1F',\n 500: '#1C1C1C',\n 600: '#191919',\n 700: '#161616',\n 800: '#131313',\n 900: '#101010',\n },\n\n // Steel scale (cool accent)\n steel: {\n 100: '#8AA4B8',\n 200: '#7894A8',\n 300: '#678498',\n 400: '#557488',\n 500: '#406D87',\n 600: '#39617A',\n 700: '#32556D',\n 800: '#243D53',\n 900: '#1D3146',\n },\n\n // Pure colors\n white: '#FFFFFF',\n black: '#000000',\n transparent: 'transparent',\n} as const\n\n/**\n * Discrete rainbow palette for data visualization\n * Based on Paul Tol's color schemes: https://personal.sron.nl/~pault/#fig:scheme_rainbow_discrete\n */\nexport const discreteRainbow = [\n '#E8ECFB',\n '#D9CCE3',\n '#D1BBD7',\n '#CAACCB',\n '#BA8DB4',\n '#AE76A3',\n '#AA6F9E',\n '#994F88',\n '#882E72',\n '#1965B0',\n '#437DBF',\n '#5289C7',\n '#6195CF',\n '#7BAFDE',\n '#4EB265',\n '#90C987',\n '#CAE0AB',\n '#F7F056',\n '#F7CB45',\n '#F6C141',\n '#F4A736',\n '#F1932D',\n '#EE8026',\n '#E8601C',\n '#E65518',\n '#DC050C',\n '#A5170E',\n '#72190E',\n '#42150A',\n] as const\n\n/**\n * Palette indices for discrete rainbow colors at different palette sizes.\n * For a given palette size (index + 1), returns the indices of colors to use.\n */\nconst discreteRainbowPalettes: number[][] = [\n [10],\n [10, 26],\n [10, 18, 26],\n [10, 15, 18, 26],\n [10, 14, 15, 18, 26],\n [10, 14, 15, 17, 18, 26],\n [9, 10, 14, 15, 17, 18, 26],\n [9, 10, 14, 15, 17, 18, 23, 26],\n [9, 10, 14, 15, 17, 18, 23, 26, 28],\n [9, 10, 14, 15, 17, 18, 21, 24, 26, 28],\n [9, 10, 12, 14, 15, 17, 18, 21, 24, 26, 28],\n [3, 6, 9, 10, 12, 14, 15, 17, 18, 21, 24, 26],\n [3, 6, 9, 10, 12, 14, 15, 16, 17, 18, 21, 24, 26],\n [3, 6, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26],\n [3, 6, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 28],\n [3, 5, 7, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 28],\n [3, 5, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 28],\n [3, 5, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 27, 28],\n [2, 4, 5, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 27, 28],\n [2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 20, 22, 24, 26, 27, 28],\n [2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 26, 27, 28],\n [2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 26, 27, 28, 29],\n [1, 2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 26, 27, 28, 29],\n]\n\n/**\n * Get a color from the discrete rainbow palette for a given index and palette size.\n * Colors are optimized for visual distinction at each palette size.\n *\n * @param index - The index of the color in the series (0-based)\n * @param size - The total number of colors needed (1-23)\n * @returns The hex color string\n */\nexport function getDiscreteRainbowColor(index: number, size: number): string {\n index = Math.max(0, index)\n size = Math.min(Math.max(1, size), discreteRainbowPalettes.length)\n\n const palette = discreteRainbowPalettes[size - 1]\n if (index >= palette.length) index = index % palette.length\n\n return discreteRainbow[palette[index] - 1]\n}\n\nexport const primitiveTypography = {\n fontFamilies: {\n sans: ['Inter', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Helvetica', 'Arial', 'sans-serif'],\n body: ['Nunito Sans', 'sans-serif'],\n heading: ['Space Grotesk', 'sans-serif'],\n mono: ['SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', 'Droid Sans Mono', 'Source Code Pro', 'monospace'],\n },\n fontSizes: {\n xs: '0.75rem', // 12px\n sm: '0.875rem', // 14px\n base: '1rem', // 16px\n lg: '1.125rem', // 18px\n xl: '1.5rem', // 24px\n '2xl': '2rem', // 32px\n '3xl': '2.25rem', // 36px\n '4xl': '3rem', // 48px\n '5xl': '3.5rem', // 56px\n },\n fontWeights: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeights: {\n none: 1,\n tight: 1.375,\n snug: 1.5,\n normal: 1.57,\n relaxed: 1.66,\n loose: 1.75,\n },\n letterSpacing: {\n tighter: '-0.05em',\n tight: '-0.025em',\n normal: '0em',\n wide: '0.025em',\n wider: '0.05em',\n widest: '0.5px',\n },\n} as const\n\nexport const primitiveSpacing = {\n 0: '0',\n px: '1px',\n 0.5: '0.125rem', // 2px\n 1: '0.25rem', // 4px\n 1.5: '0.375rem', // 6px\n 2: '0.5rem', // 8px\n 2.5: '0.625rem', // 10px\n 3: '0.75rem', // 12px\n 3.5: '0.875rem', // 14px\n 4: '1rem', // 16px\n 5: '1.25rem', // 20px\n 6: '1.5rem', // 24px\n 7: '1.75rem', // 28px\n 8: '2rem', // 32px\n 9: '2.25rem', // 36px\n 10: '2.5rem', // 40px\n 11: '2.75rem', // 44px\n 12: '3rem', // 48px\n 14: '3.5rem', // 56px\n 16: '4rem', // 64px\n 20: '5rem', // 80px\n 24: '6rem', // 96px\n 28: '7rem', // 112px\n 32: '8rem', // 128px\n} as const\n\nexport const primitiveBorderRadius = {\n none: '0',\n sm: '4px',\n DEFAULT: '8px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n '2xl': '24px',\n full: '9999px',\n} as const\n\nexport const primitiveShadows = {\n none: 'none',\n sm: '0px 1px 2px rgba(100, 116, 139, 0.12)',\n DEFAULT: '0px 1px 3px rgba(100, 116, 139, 0.12), 0px 1px 2px rgba(100, 116, 139, 0.24)',\n md: '0px 4px 6px rgba(100, 116, 139, 0.12)',\n lg: '0px 10px 15px rgba(100, 116, 139, 0.12)',\n xl: '0px 20px 25px rgba(100, 116, 139, 0.12)',\n '2xl': '0px 25px 50px rgba(100, 116, 139, 0.25)',\n inner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)',\n} as const\n\nexport const primitiveBreakpoints = {\n xs: 0,\n sm: 600,\n md: 1000,\n lg: 1200,\n xl: 1920,\n} as const\n\nexport const primitiveZIndex = {\n hide: -1,\n auto: 'auto',\n base: 0,\n docked: 10,\n dropdown: 1000,\n sticky: 1100,\n drawer: 1100,\n banner: 1200,\n appBar: 1200,\n overlay: 1300,\n modal: 1400,\n popover: 1500,\n skipLink: 1600,\n toast: 1700,\n tooltip: 1800,\n} as const\n","/**\n * Semantic Design Tokens\n *\n * Meaningful tokens following DTCG (Design Tokens Community Group) naming conventions.\n * Pattern: {category}-{intent}-{variant?}-{state?}\n *\n * Categories:\n * - brand-* : Brand colors (primary, secondary, accent)\n * - status-* : Feedback colors (success, error, warning, info)\n * - result-* : Outcome indicators (improve, degrade, inconclusive, neutral)\n * - data-* : Data visualization colors (chart series)\n * - on-* : Text on colored backgrounds\n * - surface-* : Elevated containers (NOT \"paper\")\n * - background-* : Page backgrounds\n * - text-* : Text colors\n * - border-* : Border colors\n * - interactive-* : Hover/focus/active/disabled states\n */\n\nimport { primitiveColors as p, discreteRainbow } from './primitives'\n\n// Light mode semantic colors (default)\nexport const semanticColorsLight = {\n // Brand colors (brand-*)\n 'brand-primary': p.accent[400], // #FF7900\n 'brand-primary-light': p.accent[200], // #FF9630\n 'brand-primary-dark': p.accent[700], // #D0620C\n 'brand-primary-subtle': 'rgba(255, 121, 0, 0.08)',\n 'brand-primary-hover': p.accent[500],\n 'brand-primary-active': p.accent[600],\n\n 'brand-secondary': p.steel[500], // #406D87\n 'brand-secondary-light': p.steel[300], // #678498\n 'brand-secondary-dark': p.steel[700], // #32556D\n 'brand-secondary-subtle': 'rgba(64, 109, 135, 0.08)',\n 'brand-secondary-hover': p.steel[600],\n 'brand-secondary-active': p.steel[700],\n\n // Text on brand backgrounds (on-*)\n 'on-brand-primary': p.white,\n 'on-brand-secondary': p.white,\n\n // Status colors (status-*)\n 'status-success': p.teal[500], // #14B8A6\n 'status-success-light': p.teal[400], // #43C6B7\n 'status-success-dark': p.teal[700], // #0E8074\n 'status-success-subtle': p.teal[50],\n\n 'status-error': p.red[600], // #D14343\n 'status-error-light': p.red[400], // #DA6868\n 'status-error-dark': p.red[700], // #922E2E\n 'status-error-subtle': p.red[50],\n\n 'status-warning': p.amber[500], // #FFB020\n 'status-warning-light': p.amber[400], // #FFBF4C\n 'status-warning-dark': p.amber[600], // #B27B16\n 'status-warning-subtle': p.amber[50],\n\n 'status-info': p.sky[500], // #2196F3\n 'status-info-light': p.sky[400], // #64B6F7\n 'status-info-dark': p.sky[700], // #0B79D0\n 'status-info-subtle': p.sky[50],\n\n // Text on status backgrounds (on-status-*)\n 'on-status-success': p.white,\n 'on-status-error': p.white,\n 'on-status-warning': p.white,\n 'on-status-info': p.white,\n\n // Result/outcome indicators (result-*)\n 'result-improve': '#4caf50', // Green - positive outcome\n 'result-improve-light': 'rgba(76, 175, 80, 0.12)',\n 'result-improve-dark': '#248a24',\n 'result-degrade': '#ef5350', // Red - negative outcome\n 'result-degrade-light': 'rgba(239, 83, 80, 0.12)',\n 'result-degrade-dark': '#b30000',\n 'result-inconclusive': '#9E9A97', // Gray - no clear result\n 'result-inconclusive-light': 'rgba(158, 154, 151, 0.12)',\n 'result-neutral': p.neutral[500], // Neutral baseline\n\n // Text on result backgrounds (on-result-*)\n 'on-result-improve': p.white,\n 'on-result-degrade': p.white,\n 'on-result-inconclusive': p.white,\n\n // Data visualization colors (data-*)\n // First 10 colors from discrete rainbow optimized for charts\n 'data-1': discreteRainbow[9], // #1965B0 - Blue\n 'data-2': discreteRainbow[14], // #4EB265 - Green\n 'data-3': discreteRainbow[17], // #F7F056 - Yellow\n 'data-4': discreteRainbow[25], // #DC050C - Red\n 'data-5': discreteRainbow[8], // #882E72 - Purple\n 'data-6': discreteRainbow[20], // #F4A736 - Orange\n 'data-7': discreteRainbow[13], // #7BAFDE - Light Blue\n 'data-8': discreteRainbow[15], // #90C987 - Light Green\n 'data-9': discreteRainbow[3], // #CAACCB - Lavender\n 'data-10': discreteRainbow[22], // #EE8026 - Dark Orange\n\n // Text colors (text-*)\n 'text-primary': '#121828',\n 'text-secondary': '#65748B',\n 'text-tertiary': p.neutral[400],\n 'text-disabled': 'rgba(55, 65, 81, 0.48)',\n 'text-inverse': p.white,\n 'text-link': p.blue[600],\n 'text-link-hover': p.blue[700],\n\n // Surface colors (surface-*) - for elevated containers\n 'surface-base': p.white,\n 'surface-elevated': p.neutral[50], // #FAFAFA - slightly off-white for elevated cards\n 'surface-raised': p.neutral[100], // #F3F4F6 - light gray for raised cards\n 'surface-overlay': p.white,\n 'surface-input': p.neutral[50], // Input field background (filled variant)\n\n // Background colors (background-*)\n 'background-base': '#EBEBEB',\n 'background-default': p.white,\n 'background-subtle': p.neutral[50],\n\n // Border colors (border-*)\n 'border-default': '#E8E9EB',\n 'border-subtle': p.neutral[100],\n 'border-strong': p.neutral[300],\n 'border-focus': p.blue[600],\n 'border-input': p.neutral[300], // Input field border\n 'border-input-hover': p.neutral[400], // Input field border on hover\n 'border-input-focus': p.blue[600], // Input field border on focus\n 'border-input-error': p.red[600], // Input field border on error\n\n // Interactive states (interactive-*)\n 'interactive-hover': 'rgba(55, 65, 81, 0.04)',\n 'interactive-focus': 'rgba(55, 65, 81, 0.12)',\n 'interactive-active': 'rgba(55, 65, 81, 0.16)',\n 'interactive-selected': 'rgba(55, 65, 81, 0.08)',\n 'interactive-disabled': 'rgba(55, 65, 81, 0.12)',\n 'interactive-disabled-text': 'rgba(55, 65, 81, 0.26)',\n\n // Divider\n 'divider': '#E8E9EB',\n\n // Avatar default\n 'avatar-background': p.neutral[500],\n 'avatar-text': p.white,\n} as const\n\n// Dark mode semantic colors\nexport const semanticColorsDark = {\n // Brand colors stay the same in dark mode\n 'brand-primary': p.accent[400],\n 'brand-primary-light': p.accent[200],\n 'brand-primary-dark': p.accent[700],\n 'brand-primary-subtle': 'rgba(255, 121, 0, 0.12)',\n 'brand-primary-hover': p.accent[300],\n 'brand-primary-active': p.accent[200],\n\n 'brand-secondary': p.steel[500],\n 'brand-secondary-light': p.steel[300],\n 'brand-secondary-dark': p.steel[700],\n 'brand-secondary-subtle': 'rgba(64, 109, 135, 0.12)',\n 'brand-secondary-hover': p.steel[400],\n 'brand-secondary-active': p.steel[300],\n\n // Text on brand backgrounds\n 'on-brand-primary': p.white,\n 'on-brand-secondary': p.white,\n\n // Status colors\n 'status-success': p.teal[500],\n 'status-success-light': p.teal[400],\n 'status-success-dark': p.teal[700],\n 'status-success-subtle': 'rgba(20, 184, 166, 0.12)',\n\n 'status-error': p.red[600],\n 'status-error-light': p.red[400],\n 'status-error-dark': p.red[700],\n 'status-error-subtle': 'rgba(209, 67, 67, 0.12)',\n\n 'status-warning': p.amber[500],\n 'status-warning-light': p.amber[400],\n 'status-warning-dark': p.amber[600],\n 'status-warning-subtle': 'rgba(255, 176, 32, 0.12)',\n\n 'status-info': p.sky[500],\n 'status-info-light': p.sky[400],\n 'status-info-dark': p.sky[700],\n 'status-info-subtle': 'rgba(33, 150, 243, 0.12)',\n\n // Text on status backgrounds\n 'on-status-success': p.white,\n 'on-status-error': p.white,\n 'on-status-warning': p.white,\n 'on-status-info': p.white,\n\n // Result/outcome indicators (result-*)\n 'result-improve': '#4caf50',\n 'result-improve-light': 'rgba(76, 175, 80, 0.16)',\n 'result-improve-dark': '#248a24',\n 'result-degrade': '#ef5350',\n 'result-degrade-light': 'rgba(239, 83, 80, 0.16)',\n 'result-degrade-dark': '#b30000',\n 'result-inconclusive': '#9E9A97',\n 'result-inconclusive-light': 'rgba(158, 154, 151, 0.16)',\n 'result-neutral': p.neutral[400],\n\n // Text on result backgrounds\n 'on-result-improve': p.white,\n 'on-result-degrade': p.white,\n 'on-result-inconclusive': p.white,\n\n // Data visualization colors (same in dark mode for consistency)\n 'data-1': discreteRainbow[9],\n 'data-2': discreteRainbow[14],\n 'data-3': discreteRainbow[17],\n 'data-4': discreteRainbow[25],\n 'data-5': discreteRainbow[8],\n 'data-6': discreteRainbow[20],\n 'data-7': discreteRainbow[13],\n 'data-8': discreteRainbow[15],\n 'data-9': discreteRainbow[3],\n 'data-10': discreteRainbow[22],\n\n // Text colors - inverted for dark mode\n 'text-primary': p.neutral[100],\n 'text-secondary': p.neutral[400],\n 'text-tertiary': p.neutral[500],\n 'text-disabled': 'rgba(255, 255, 255, 0.38)',\n 'text-inverse': p.neutral[900],\n 'text-link': '#828DF8',\n 'text-link-hover': p.blue[400],\n\n // Surface colors - dark backgrounds\n 'surface-base': p.charcoal[700], // #161616 - main surface\n 'surface-elevated': p.charcoal[600], // #191919 - elevated surface\n 'surface-raised': p.charcoal[500], // #1C1C1C - raised surface\n 'surface-overlay': p.charcoal[600], // #191919 - overlay surface\n 'surface-input': p.charcoal[600], // #191919 - input surface\n\n // Background colors\n 'background-base': p.charcoal[900], // #101010 - darkest charcoal\n 'background-default': p.charcoal[700], // #161616 - main background\n 'background-subtle': p.charcoal[500], // #1C1C1C - subtle background\n\n // Border colors\n 'border-default': p.charcoal[400], // #1F1F1F - default border\n 'border-subtle': p.charcoal[500], // #1C1C1C - subtle border\n 'border-strong': p.charcoal[300], // #2C2C2C - strong border\n 'border-focus': '#828DF8',\n 'border-input': p.neutral[600],\n 'border-input-hover': p.neutral[500],\n 'border-input-focus': '#828DF8',\n 'border-input-error': p.red[500],\n\n // Interactive states\n 'interactive-hover': 'rgba(255, 255, 255, 0.04)',\n 'interactive-focus': 'rgba(255, 255, 255, 0.12)',\n 'interactive-active': 'rgba(255, 255, 255, 0.16)',\n 'interactive-selected': 'rgba(255, 255, 255, 0.08)',\n 'interactive-disabled': 'rgba(255, 255, 255, 0.12)',\n 'interactive-disabled-text': 'rgba(255, 255, 255, 0.26)',\n\n // Divider\n 'divider': p.charcoal[400], // #1F1F1F - divider color\n\n // Avatar default\n 'avatar-background': p.neutral[600],\n 'avatar-text': p.white,\n} as const\n\n// Typography tokens matching existing app\nexport const semanticTypography = {\n // Headings (Space Grotesk)\n h1: {\n fontFamily: 'heading',\n fontSize: '3.5rem',\n fontWeight: 700,\n lineHeight: 1.375,\n },\n h2: {\n fontFamily: 'heading',\n fontSize: '3rem',\n fontWeight: 700,\n lineHeight: 1.375,\n },\n h3: {\n fontFamily: 'heading',\n fontSize: '2.25rem',\n fontWeight: 700,\n lineHeight: 1.375,\n },\n h4: {\n fontFamily: 'heading',\n fontSize: '2rem',\n fontWeight: 700,\n lineHeight: 1.375,\n },\n h5: {\n fontFamily: 'heading',\n fontSize: '1.5rem',\n fontWeight: 600,\n lineHeight: 1.375,\n },\n h6: {\n fontFamily: 'heading',\n fontSize: '1.125rem',\n fontWeight: 600,\n lineHeight: 1.375,\n },\n\n // Body text (Nunito Sans)\n body1: {\n fontFamily: 'body',\n fontSize: '1rem',\n fontWeight: 400,\n lineHeight: 1.5,\n },\n body2: {\n fontFamily: 'body',\n fontSize: '0.875rem',\n fontWeight: 400,\n lineHeight: 1.57,\n },\n subtitle1: {\n fontFamily: 'body',\n fontSize: '1rem',\n fontWeight: 500,\n lineHeight: 1.75,\n },\n subtitle2: {\n fontFamily: 'body',\n fontSize: '0.875rem',\n fontWeight: 500,\n lineHeight: 1.57,\n },\n caption: {\n fontFamily: 'body',\n fontSize: '0.75rem',\n fontWeight: 400,\n lineHeight: 1.66,\n },\n overline: {\n fontFamily: 'body',\n fontSize: '0.75rem',\n fontWeight: 600,\n lineHeight: 2.5,\n letterSpacing: '0.5px',\n textTransform: 'uppercase' as const,\n },\n button: {\n fontFamily: 'sans',\n fontSize: '0.875rem',\n fontWeight: 600,\n lineHeight: 1.75,\n },\n} as const\n\n// Button size tokens\nexport const buttonSizes = {\n sm: {\n paddingX: '16px',\n paddingY: '6px',\n fontSize: '0.875rem',\n },\n md: {\n paddingX: '20px',\n paddingY: '8px',\n fontSize: '0.875rem',\n },\n lg: {\n paddingX: '24px',\n paddingY: '11px',\n fontSize: '1rem',\n },\n} as const\n\n// Export type for theme mode\nexport type ThemeMode = 'light' | 'dark'\n\n// Helper to get semantic colors based on mode\nexport function getSemanticColors(mode: ThemeMode) {\n return mode === 'dark' ? semanticColorsDark : semanticColorsLight\n}\n","import React, { forwardRef } from 'react'\nimport { Pressable, Text, View, ActivityIndicator, type PressableProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\nimport { semanticColorsDark } from '../../../theme/tokens/semantic'\n\nexport type ButtonVariant = 'solid' | 'outline' | 'ghost' | 'link'\nexport type ButtonSize = 'sm' | 'md' | 'lg'\nexport type ButtonColor = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info'\n\n/** Inline color map for RNW where Tailwind text classes get dropped */\nconst textColorMap: Record<ButtonVariant, Record<ButtonColor, string>> = {\n solid: {\n primary: '#FFFFFF',\n secondary: '#FFFFFF',\n success: '#FFFFFF',\n error: '#FFFFFF',\n warning: '#FFFFFF',\n info: '#FFFFFF',\n },\n outline: {\n primary: semanticColorsDark['brand-primary'],\n secondary: semanticColorsDark['brand-secondary'],\n success: semanticColorsDark['status-success'],\n error: semanticColorsDark['status-error'],\n warning: semanticColorsDark['status-warning'],\n info: semanticColorsDark['status-info'],\n },\n ghost: {\n primary: semanticColorsDark['brand-primary'],\n secondary: semanticColorsDark['brand-secondary'],\n success: semanticColorsDark['status-success'],\n error: semanticColorsDark['status-error'],\n warning: semanticColorsDark['status-warning'],\n info: semanticColorsDark['status-info'],\n },\n link: {\n primary: semanticColorsDark['brand-primary'],\n secondary: semanticColorsDark['brand-secondary'],\n success: semanticColorsDark['status-success'],\n error: semanticColorsDark['status-error'],\n warning: semanticColorsDark['status-warning'],\n info: semanticColorsDark['status-info'],\n },\n}\n\n/** Inline border color map for outline variant */\nconst borderColorMap: Record<ButtonColor, string> = {\n primary: semanticColorsDark['brand-primary'],\n secondary: semanticColorsDark['brand-secondary'],\n success: semanticColorsDark['status-success'],\n error: semanticColorsDark['status-error'],\n warning: semanticColorsDark['status-warning'],\n info: semanticColorsDark['status-info'],\n}\n\nexport interface ButtonProps extends Omit<PressableProps, 'children'> {\n /** Visual style variant */\n variant?: ButtonVariant\n /** Size of the button */\n size?: ButtonSize\n /** Color scheme */\n color?: ButtonColor\n /** Whether this is an icon-only button (square aspect ratio) */\n isIconButton?: boolean\n /** Whether the button is disabled */\n isDisabled?: boolean\n /** Whether the button is in a loading state */\n isLoading?: boolean\n /** Loading text to display */\n loadingText?: string\n /** Whether the button should take full width */\n fullWidth?: boolean\n /** Additional className for styling */\n className?: string\n /** Button content */\n children?: React.ReactNode\n}\n\nconst variantStyles: Record<ButtonVariant, Record<ButtonColor, string>> = {\n solid: {\n primary: 'bg-brand-primary active:bg-brand-primary-dark active:scale-[0.98] web:hover:bg-brand-primary-dark web:active:scale-[0.98]',\n secondary: 'bg-brand-secondary active:bg-brand-secondary-dark active:scale-[0.98] web:hover:bg-brand-secondary-dark web:active:scale-[0.98]',\n success: 'bg-status-success active:opacity-90 active:scale-[0.98] web:hover:opacity-90 web:active:scale-[0.98]',\n error: 'bg-status-error active:opacity-90 active:scale-[0.98] web:hover:opacity-90 web:active:scale-[0.98]',\n warning: 'bg-status-warning active:opacity-90 active:scale-[0.98] web:hover:opacity-90 web:active:scale-[0.98]',\n info: 'bg-status-info active:opacity-90 active:scale-[0.98] web:hover:opacity-90 web:active:scale-[0.98]',\n },\n outline: {\n primary: 'border-2 border-brand-primary bg-transparent active:bg-brand-primary-subtle active:scale-[0.98] web:hover:bg-brand-primary-subtle web:active:scale-[0.98]',\n secondary: 'border-2 border-brand-secondary bg-transparent active:bg-brand-secondary-subtle active:scale-[0.98] web:hover:bg-brand-secondary-subtle web:active:scale-[0.98]',\n success: 'border-2 border-status-success bg-transparent active:bg-status-success-subtle active:scale-[0.98] web:hover:bg-status-success-subtle web:active:scale-[0.98]',\n error: 'border-2 border-status-error bg-transparent active:bg-status-error-subtle active:scale-[0.98] web:hover:bg-status-error-subtle web:active:scale-[0.98]',\n warning: 'border-2 border-status-warning bg-transparent active:bg-status-warning-subtle active:scale-[0.98] web:hover:bg-status-warning-subtle web:active:scale-[0.98]',\n info: 'border-2 border-status-info bg-transparent active:bg-status-info-subtle active:scale-[0.98] web:hover:bg-status-info-subtle web:active:scale-[0.98]',\n },\n ghost: {\n primary: 'bg-transparent active:bg-brand-primary-subtle active:scale-[0.98] web:hover:bg-brand-primary-subtle web:active:scale-[0.98]',\n secondary: 'bg-transparent active:bg-brand-secondary-subtle active:scale-[0.98] web:hover:bg-brand-secondary-subtle web:active:scale-[0.98]',\n success: 'bg-transparent active:bg-status-success-subtle active:scale-[0.98] web:hover:bg-status-success-subtle web:active:scale-[0.98]',\n error: 'bg-transparent active:bg-status-error-subtle active:scale-[0.98] web:hover:bg-status-error-subtle web:active:scale-[0.98]',\n warning: 'bg-transparent active:bg-status-warning-subtle active:scale-[0.98] web:hover:bg-status-warning-subtle web:active:scale-[0.98]',\n info: 'bg-transparent active:bg-status-info-subtle active:scale-[0.98] web:hover:bg-status-info-subtle web:active:scale-[0.98]',\n },\n link: {\n primary: 'bg-transparent',\n secondary: 'bg-transparent',\n success: 'bg-transparent',\n error: 'bg-transparent',\n warning: 'bg-transparent',\n info: 'bg-transparent',\n },\n}\n\nconst textStyles: Record<ButtonVariant, Record<ButtonColor, string>> = {\n solid: {\n primary: 'text-white',\n secondary: 'text-white',\n success: 'text-white',\n error: 'text-white',\n warning: 'text-white',\n info: 'text-white',\n },\n outline: {\n primary: 'text-brand-primary',\n secondary: 'text-brand-secondary',\n success: 'text-status-success',\n error: 'text-status-error',\n warning: 'text-status-warning',\n info: 'text-status-info',\n },\n ghost: {\n primary: 'text-brand-primary',\n secondary: 'text-brand-secondary',\n success: 'text-status-success',\n error: 'text-status-error',\n warning: 'text-status-warning',\n info: 'text-status-info',\n },\n link: {\n primary: 'text-brand-primary web:hover:underline',\n secondary: 'text-brand-secondary web:hover:underline',\n success: 'text-status-success web:hover:underline',\n error: 'text-status-error web:hover:underline',\n warning: 'text-status-warning web:hover:underline',\n info: 'text-status-info web:hover:underline',\n },\n}\n\nconst sizeStyles: Record<ButtonSize, string> = {\n sm: 'px-4 py-1.5 min-h-[32px]',\n md: 'px-5 py-2 min-h-[40px]',\n lg: 'px-6 py-2.5 min-h-[48px]',\n}\n\n// Icon button sizes (square aspect ratio)\nconst iconButtonSizeStyles: Record<ButtonSize, string> = {\n sm: 'w-8 h-8 p-0',\n md: 'w-10 h-10 p-0',\n lg: 'w-12 h-12 p-0',\n}\n\nconst textSizeStyles: Record<ButtonSize, string> = {\n sm: 'text-sm',\n md: 'text-sm',\n lg: 'text-base',\n}\n\n/**\n * Button component following compound component pattern.\n *\n * @example\n * <Button variant=\"solid\" color=\"primary\">\n * <ButtonText>Click me</ButtonText>\n * </Button>\n *\n * // Or with icon\n * <Button variant=\"outline\" color=\"secondary\">\n * <ButtonIcon as={PlusIcon} />\n * <ButtonText>Add item</ButtonText>\n * </Button>\n */\nexport const Button = forwardRef<View, ButtonProps>(function Button(\n {\n variant = 'solid',\n size = 'md',\n color = 'primary',\n isIconButton = false,\n isDisabled = false,\n isLoading = false,\n loadingText,\n fullWidth = false,\n className,\n children,\n ...props\n },\n ref\n) {\n const disabled = isDisabled || isLoading\n\n const inlineStyle: Record<string, string> = {\n color: textColorMap[variant][color],\n }\n if (variant === 'outline') {\n inlineStyle.borderColor = borderColorMap[color]\n }\n\n return (\n <Pressable\n ref={ref}\n disabled={disabled}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled }}\n className={cn(\n // Base styles\n 'flex-row items-center justify-center rounded-md transition-all duration-150',\n // Variant + color styles\n variantStyles[variant][color],\n // Size styles (icon button vs regular)\n isIconButton ? iconButtonSizeStyles[size] : sizeStyles[size],\n // Full width\n fullWidth && 'w-full',\n // Disabled styles - more refined\n disabled && 'opacity-40 cursor-not-allowed active:scale-100 web:active:scale-100',\n // Link variant has no padding\n variant === 'link' && 'px-0 py-0 min-h-0',\n className\n )}\n style={inlineStyle}\n {...props}\n >\n {isLoading && (\n <ActivityIndicator\n size=\"small\"\n color={variant === 'solid' ? semanticColorsDark['on-brand-primary'] : undefined}\n className=\"mr-2\"\n />\n )}\n {isLoading && loadingText ? (\n <Text\n className={cn(\n 'font-semibold',\n textSizeStyles[size],\n textStyles[variant][color]\n )}\n style={{ color: textColorMap[variant][color] }}\n >\n {loadingText}\n </Text>\n ) : (\n children\n )}\n </Pressable>\n )\n})\n\nexport interface ButtonTextProps {\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Text component for Button. Use inside Button for consistent styling.\n */\nexport function ButtonText({ children, className }: ButtonTextProps) {\n return (\n <Text className={cn('font-semibold text-inherit', className)}>\n {children}\n </Text>\n )\n}\n\nexport interface ButtonIconProps {\n /** Icon component to render */\n as: React.ComponentType<{ size?: number; color?: string; className?: string }>\n /** Icon size */\n size?: number\n /** Additional className */\n className?: string\n}\n\n/**\n * Icon component for Button. Use inside Button for icons.\n */\nexport function ButtonIcon({ as: Icon, size = 16, className }: ButtonIconProps) {\n return <Icon size={size} className={cn('text-inherit', className)} />\n}\n\nexport interface ButtonSpinnerProps {\n className?: string\n}\n\n/**\n * Spinner component for Button loading state.\n */\nexport function ButtonSpinner({ className }: ButtonSpinnerProps) {\n return <ActivityIndicator size=\"small\" className={cn('text-inherit', className)} />\n}\n","import React, { forwardRef, useState } from 'react'\nimport { TextInput, View, Text, Pressable, type TextInputProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type InputSize = 'sm' | 'md' | 'lg'\nexport type InputVariant = 'outline' | 'filled' | 'underline'\n\nexport interface InputProps extends Omit<TextInputProps, 'editable'> {\n /** Input size */\n size?: InputSize\n /** Visual variant */\n variant?: InputVariant\n /** Whether the input is disabled */\n isDisabled?: boolean\n /** Whether the input has an error */\n isInvalid?: boolean\n /** Whether the input is read-only */\n isReadOnly?: boolean\n /** Whether the input is required */\n isRequired?: boolean\n /** Whether this is a multiline textarea */\n multiline?: boolean\n /** Number of visible lines for multiline */\n numberOfLines?: number\n /** Label text */\n label?: string\n /** Helper text shown below input */\n helperText?: string\n /** Error message (shown when isInvalid is true) */\n errorMessage?: string\n /** Left element/icon */\n leftElement?: React.ReactNode\n /** Right element/icon */\n rightElement?: React.ReactNode\n /** Additional className for the container */\n className?: string\n /** Additional className for the input */\n inputClassName?: string\n}\n\nconst sizeStyles: Record<InputSize, string> = {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-4 text-base',\n lg: 'h-12 px-4 text-lg',\n}\n\nconst multilineSizeStyles: Record<InputSize, string> = {\n sm: 'min-h-[80px] px-3 py-2 text-sm',\n md: 'min-h-[100px] px-4 py-3 text-base',\n lg: 'min-h-[120px] px-4 py-3 text-lg',\n}\n\nconst variantStyles: Record<InputVariant, { base: string; focus: string; hover: string; error: string }> = {\n outline: {\n base: 'border border-border-input rounded-md bg-transparent',\n hover: 'web:hover:border-border-input-hover',\n focus: 'border-border-input-focus',\n error: 'border-border-input-error',\n },\n filled: {\n base: 'border border-transparent rounded-md bg-surface-input',\n hover: 'web:hover:border-border-input-hover',\n focus: 'border-border-input-focus bg-transparent',\n error: 'border-border-input-error',\n },\n underline: {\n base: 'border-b border-border-input rounded-none bg-transparent',\n hover: 'web:hover:border-border-input-hover',\n focus: 'border-border-input-focus',\n error: 'border-border-input-error',\n },\n}\n\n/**\n * Input component for text entry.\n *\n * @example\n * <Input\n * label=\"Email\"\n * placeholder=\"Enter your email\"\n * helperText=\"We'll never share your email\"\n * />\n *\n * // With error state\n * <Input\n * label=\"Password\"\n * isInvalid\n * errorMessage=\"Password is required\"\n * />\n */\nexport const Input = forwardRef<TextInput, InputProps>(function Input(\n {\n size = 'md',\n variant = 'outline',\n isDisabled = false,\n isInvalid = false,\n isReadOnly = false,\n isRequired = false,\n multiline = false,\n numberOfLines = 4,\n label,\n helperText,\n errorMessage,\n leftElement,\n rightElement,\n className,\n inputClassName,\n onFocus,\n onBlur,\n ...props\n },\n ref\n) {\n const [isFocused, setIsFocused] = useState(false)\n\n const handleFocus = (e: any) => {\n setIsFocused(true)\n onFocus?.(e)\n }\n\n const handleBlur = (e: any) => {\n setIsFocused(false)\n onBlur?.(e)\n }\n\n const showError = isInvalid && errorMessage\n const showHelper = !showError && helperText\n\n return (\n <View className={cn('w-full', className)}>\n {label && (\n <Text className=\"mb-1.5 text-sm font-medium text-text-primary\">\n {label}\n {isRequired && <Text className=\"text-status-error ml-0.5\">*</Text>}\n </Text>\n )}\n\n <View\n className={cn(\n 'flex-row transition-colors duration-150',\n multiline ? 'items-start' : 'items-center',\n variantStyles[variant].base,\n !isDisabled && !isInvalid && variantStyles[variant].hover,\n isFocused && variantStyles[variant].focus,\n isInvalid && variantStyles[variant].error,\n isDisabled && 'opacity-40 cursor-not-allowed'\n )}\n >\n {leftElement && (\n <View className={cn('pl-3 pr-1', multiline && 'pt-3')}>\n {leftElement}\n </View>\n )}\n\n <TextInput\n ref={ref}\n editable={!isDisabled && !isReadOnly}\n accessibilityLabel={label}\n accessibilityState={{\n disabled: isDisabled,\n }}\n multiline={multiline}\n numberOfLines={multiline ? numberOfLines : 1}\n textAlignVertical={multiline ? 'top' : 'center'}\n placeholderTextColor=\"var(--color-text-tertiary)\"\n onFocus={handleFocus}\n onBlur={handleBlur}\n className={cn(\n 'flex-1 text-text-primary',\n multiline ? multilineSizeStyles[size] : sizeStyles[size],\n leftElement && 'pl-1',\n rightElement && 'pr-1',\n inputClassName\n )}\n {...props}\n />\n\n {rightElement && (\n <View className={cn('pl-1 pr-3', multiline && 'pt-3')}>\n {rightElement}\n </View>\n )}\n </View>\n\n {showHelper && (\n <Text className=\"mt-1.5 text-xs text-text-secondary\">\n {helperText}\n </Text>\n )}\n\n {showError && (\n <Text className=\"mt-1.5 text-xs text-status-error\">\n {errorMessage}\n </Text>\n )}\n </View>\n )\n})\n\nexport interface InputGroupProps {\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Container for grouping related inputs.\n */\nexport function InputGroup({ children, className }: InputGroupProps) {\n return (\n <View className={cn('flex-col gap-4', className)}>\n {children}\n </View>\n )\n}\n\nexport interface PasswordInputProps extends Omit<InputProps, 'secureTextEntry' | 'rightElement'> {\n /** Custom show password icon */\n showIcon?: React.ReactNode\n /** Custom hide password icon */\n hideIcon?: React.ReactNode\n}\n\n/**\n * Password input with visibility toggle.\n *\n * @example\n * <PasswordInput\n * label=\"Password\"\n * placeholder=\"Enter your password\"\n * />\n */\nexport const PasswordInput = forwardRef<TextInput, PasswordInputProps>(function PasswordInput(\n { showIcon, hideIcon, ...props },\n ref\n) {\n const [isVisible, setIsVisible] = useState(false)\n\n const toggleVisibility = () => setIsVisible(!isVisible)\n\n // Default eye icons (simple SVG-like views)\n const defaultShowIcon = (\n <View className=\"w-5 h-5 items-center justify-center\">\n <View className=\"w-3 h-3 rounded-full border-2 border-text-secondary\" />\n <View className=\"absolute w-1.5 h-1.5 rounded-full bg-text-secondary\" />\n </View>\n )\n\n const defaultHideIcon = (\n <View className=\"w-5 h-5 items-center justify-center\">\n <View className=\"w-3 h-3 rounded-full border-2 border-text-secondary\" />\n <View className=\"absolute w-1.5 h-1.5 rounded-full bg-text-secondary\" />\n <View className=\"absolute w-5 h-0.5 bg-text-secondary rotate-45\" />\n </View>\n )\n\n return (\n <Input\n ref={ref}\n secureTextEntry={!isVisible}\n rightElement={\n <Pressable\n onPress={toggleVisibility}\n accessibilityRole=\"button\"\n accessibilityLabel={isVisible ? 'Hide password' : 'Show password'}\n className=\"p-1 rounded active:opacity-70\"\n >\n {isVisible ? (hideIcon || defaultHideIcon) : (showIcon || defaultShowIcon)}\n </Pressable>\n }\n {...props}\n />\n )\n})\n","/**\n * Theme Configuration\n *\n * Maps semantic tokens to CSS custom properties for runtime theming.\n * Dark mode is the default theme.\n */\n\nimport { semanticColorsLight, semanticColorsDark, type ThemeMode } from './tokens/semantic'\n\n// CSS custom properties for light mode\nexport const lightThemeCSSVars = {\n '--color-brand-primary': semanticColorsLight['brand-primary'],\n '--color-brand-primary-light': semanticColorsLight['brand-primary-light'],\n '--color-brand-primary-dark': semanticColorsLight['brand-primary-dark'],\n '--color-brand-primary-subtle': semanticColorsLight['brand-primary-subtle'],\n '--color-brand-secondary': semanticColorsLight['brand-secondary'],\n '--color-brand-secondary-light': semanticColorsLight['brand-secondary-light'],\n '--color-brand-secondary-dark': semanticColorsLight['brand-secondary-dark'],\n '--color-brand-secondary-subtle': semanticColorsLight['brand-secondary-subtle'],\n\n '--color-on-brand-primary': semanticColorsLight['on-brand-primary'],\n '--color-on-brand-secondary': semanticColorsLight['on-brand-secondary'],\n\n '--color-status-success': semanticColorsLight['status-success'],\n '--color-status-success-subtle': semanticColorsLight['status-success-subtle'],\n '--color-status-error': semanticColorsLight['status-error'],\n '--color-status-error-subtle': semanticColorsLight['status-error-subtle'],\n '--color-status-warning': semanticColorsLight['status-warning'],\n '--color-status-warning-subtle': semanticColorsLight['status-warning-subtle'],\n '--color-status-info': semanticColorsLight['status-info'],\n '--color-status-info-subtle': semanticColorsLight['status-info-subtle'],\n\n '--color-text-primary': semanticColorsLight['text-primary'],\n '--color-text-secondary': semanticColorsLight['text-secondary'],\n '--color-text-tertiary': semanticColorsLight['text-tertiary'],\n '--color-text-disabled': semanticColorsLight['text-disabled'],\n '--color-text-inverse': semanticColorsLight['text-inverse'],\n '--color-text-link': semanticColorsLight['text-link'],\n\n '--color-surface-base': semanticColorsLight['surface-base'],\n '--color-surface-elevated': semanticColorsLight['surface-elevated'],\n '--color-surface-raised': semanticColorsLight['surface-raised'],\n\n '--color-background-base': semanticColorsLight['background-base'],\n '--color-background-default': semanticColorsLight['background-default'],\n '--color-background-subtle': semanticColorsLight['background-subtle'],\n\n '--color-border-default': semanticColorsLight['border-default'],\n '--color-border-subtle': semanticColorsLight['border-subtle'],\n '--color-border-strong': semanticColorsLight['border-strong'],\n '--color-border-focus': semanticColorsLight['border-focus'],\n\n '--color-interactive-hover': semanticColorsLight['interactive-hover'],\n '--color-interactive-focus': semanticColorsLight['interactive-focus'],\n '--color-interactive-active': semanticColorsLight['interactive-active'],\n '--color-interactive-selected': semanticColorsLight['interactive-selected'],\n '--color-interactive-disabled': semanticColorsLight['interactive-disabled'],\n\n '--color-divider': semanticColorsLight['divider'],\n} as const\n\n// CSS custom properties for dark mode (default)\nexport const darkThemeCSSVars = {\n '--color-brand-primary': semanticColorsDark['brand-primary'],\n '--color-brand-primary-light': semanticColorsDark['brand-primary-light'],\n '--color-brand-primary-dark': semanticColorsDark['brand-primary-dark'],\n '--color-brand-primary-subtle': semanticColorsDark['brand-primary-subtle'],\n '--color-brand-secondary': semanticColorsDark['brand-secondary'],\n '--color-brand-secondary-light': semanticColorsDark['brand-secondary-light'],\n '--color-brand-secondary-dark': semanticColorsDark['brand-secondary-dark'],\n '--color-brand-secondary-subtle': semanticColorsDark['brand-secondary-subtle'],\n\n '--color-on-brand-primary': semanticColorsDark['on-brand-primary'],\n '--color-on-brand-secondary': semanticColorsDark['on-brand-secondary'],\n\n '--color-status-success': semanticColorsDark['status-success'],\n '--color-status-success-subtle': semanticColorsDark['status-success-subtle'],\n '--color-status-error': semanticColorsDark['status-error'],\n '--color-status-error-subtle': semanticColorsDark['status-error-subtle'],\n '--color-status-warning': semanticColorsDark['status-warning'],\n '--color-status-warning-subtle': semanticColorsDark['status-warning-subtle'],\n '--color-status-info': semanticColorsDark['status-info'],\n '--color-status-info-subtle': semanticColorsDark['status-info-subtle'],\n\n '--color-text-primary': semanticColorsDark['text-primary'],\n '--color-text-secondary': semanticColorsDark['text-secondary'],\n '--color-text-tertiary': semanticColorsDark['text-tertiary'],\n '--color-text-disabled': semanticColorsDark['text-disabled'],\n '--color-text-inverse': semanticColorsDark['text-inverse'],\n '--color-text-link': semanticColorsDark['text-link'],\n\n '--color-surface-base': semanticColorsDark['surface-base'],\n '--color-surface-elevated': semanticColorsDark['surface-elevated'],\n '--color-surface-raised': semanticColorsDark['surface-raised'],\n\n '--color-background-base': semanticColorsDark['background-base'],\n '--color-background-default': semanticColorsDark['background-default'],\n '--color-background-subtle': semanticColorsDark['background-subtle'],\n\n '--color-border-default': semanticColorsDark['border-default'],\n '--color-border-subtle': semanticColorsDark['border-subtle'],\n '--color-border-strong': semanticColorsDark['border-strong'],\n '--color-border-focus': semanticColorsDark['border-focus'],\n\n '--color-interactive-hover': semanticColorsDark['interactive-hover'],\n '--color-interactive-focus': semanticColorsDark['interactive-focus'],\n '--color-interactive-active': semanticColorsDark['interactive-active'],\n '--color-interactive-selected': semanticColorsDark['interactive-selected'],\n '--color-interactive-disabled': semanticColorsDark['interactive-disabled'],\n\n '--color-divider': semanticColorsDark['divider'],\n} as const\n\n// Helper to get CSS vars for a theme mode\nexport function getThemeCSSVars(mode: ThemeMode) {\n return mode === 'dark' ? darkThemeCSSVars : lightThemeCSSVars\n}\n\n// Gluestack UI theme configuration\nexport const gluestackConfig = {\n tokens: {\n colors: {\n // Map to our semantic colors via CSS vars\n primary500: 'var(--color-brand-primary)',\n primary600: 'var(--color-brand-primary-dark)',\n primary400: 'var(--color-brand-primary-light)',\n\n secondary500: 'var(--color-brand-secondary)',\n secondary600: 'var(--color-brand-secondary-dark)',\n secondary400: 'var(--color-brand-secondary-light)',\n\n success500: 'var(--color-status-success)',\n error500: 'var(--color-status-error)',\n warning500: 'var(--color-status-warning)',\n info500: 'var(--color-status-info)',\n\n textLight: 'var(--color-text-primary)',\n textDark: 'var(--color-text-inverse)',\n\n backgroundLight: 'var(--color-background-default)',\n backgroundDark: 'var(--color-surface-base)',\n },\n space: {\n '0': 0,\n '1': 4,\n '2': 8,\n '3': 12,\n '4': 16,\n '5': 20,\n '6': 24,\n '8': 32,\n '10': 40,\n '12': 48,\n '16': 64,\n '20': 80,\n '24': 96,\n },\n radii: {\n none: 0,\n sm: 4,\n md: 8,\n lg: 12,\n xl: 16,\n '2xl': 24,\n full: 9999,\n },\n fontSizes: {\n xs: 12,\n sm: 14,\n md: 16,\n lg: 18,\n xl: 20,\n '2xl': 24,\n '3xl': 30,\n '4xl': 36,\n '5xl': 48,\n },\n },\n aliases: {\n bg: 'backgroundColor',\n p: 'padding',\n px: 'paddingHorizontal',\n py: 'paddingVertical',\n m: 'margin',\n mx: 'marginHorizontal',\n my: 'marginVertical',\n h: 'height',\n w: 'width',\n rounded: 'borderRadius',\n },\n} as const\n\nexport type ThemeConfig = typeof gluestackConfig\n","/**\n * Neumorphic Shadow Utilities\n * \n * Neumorphism creates soft, extruded UI using dual opposing shadows.\n * - Light source assumed from top-left\n * - Raised elements: dark shadow bottom-right, light highlight top-left\n * - Pressed elements: inverted with `inset` shadows\n */\n\nimport { Platform, type ViewStyle } from 'react-native'\n\n// ============================================================================\n// Color Math Utilities\n// ============================================================================\n\n/**\n * Parse a hex color to RGB values (0-255).\n * Supports both #RGB and #RRGGBB formats.\n */\nexport function hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const cleaned = hex.replace('#', '')\n \n let r: number, g: number, b: number\n \n if (cleaned.length === 3) {\n r = parseInt(cleaned[0] + cleaned[0], 16)\n g = parseInt(cleaned[1] + cleaned[1], 16)\n b = parseInt(cleaned[2] + cleaned[2], 16)\n } else if (cleaned.length === 6) {\n r = parseInt(cleaned.slice(0, 2), 16)\n g = parseInt(cleaned.slice(2, 4), 16)\n b = parseInt(cleaned.slice(4, 6), 16)\n } else {\n return null\n }\n \n return { r, g, b }\n}\n\n/**\n * Convert RGB (0-255) to HSV (h: 0-360, s: 0-1, v: 0-1).\n */\nexport function rgbToHsv(r: number, g: number, b: number): { h: number; s: number; v: number } {\n const rNorm = r / 255\n const gNorm = g / 255\n const bNorm = b / 255\n \n const max = Math.max(rNorm, gNorm, bNorm)\n const min = Math.min(rNorm, gNorm, bNorm)\n const delta = max - min\n \n // Value\n const v = max\n \n // Saturation\n const s = max === 0 ? 0 : delta / max\n \n // Hue\n let h = 0\n if (delta !== 0) {\n if (max === rNorm) {\n h = 60 * (((gNorm - bNorm) / delta) % 6)\n } else if (max === gNorm) {\n h = 60 * ((bNorm - rNorm) / delta + 2)\n } else {\n h = 60 * ((rNorm - gNorm) / delta + 4)\n }\n }\n if (h < 0) h += 360\n \n return { h, s, v }\n}\n\n/**\n * Convert HSV (h: 0-360, s: 0-1, v: 0-1) to RGB (0-255).\n */\nexport function hsvToRgb(h: number, s: number, v: number): { r: number; g: number; b: number } {\n const c = v * s\n const x = c * (1 - Math.abs((h / 60) % 2 - 1))\n const m = v - c\n \n let rPrime: number, gPrime: number, bPrime: number\n\n if (h >= 0 && h < 60) {\n rPrime = c; gPrime = x; bPrime = 0\n } else if (h >= 60 && h < 120) {\n rPrime = x; gPrime = c; bPrime = 0\n } else if (h >= 120 && h < 180) {\n rPrime = 0; gPrime = c; bPrime = x\n } else if (h >= 180 && h < 240) {\n rPrime = 0; gPrime = x; bPrime = c\n } else if (h >= 240 && h < 300) {\n rPrime = x; gPrime = 0; bPrime = c\n } else {\n rPrime = c; gPrime = 0; bPrime = x\n }\n \n return {\n r: Math.round((rPrime + m) * 255),\n g: Math.round((gPrime + m) * 255),\n b: Math.round((bPrime + m) * 255),\n }\n}\n\n/**\n * Convert RGB values to hex string.\n */\nexport function rgbToHex(r: number, g: number, b: number): string {\n const toHex = (n: number) => {\n const clamped = Math.max(0, Math.min(255, Math.round(n)))\n return clamped.toString(16).padStart(2, '0')\n }\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`\n}\n\n/**\n * Lighten a color by increasing its HSV Value component.\n * \n * @param hex - The hex color to lighten\n * @param amount - Amount to increase V by (0-1)\n */\nexport function lighten(hex: string, amount: number = 0.1): string {\n const rgb = hexToRgb(hex)\n if (!rgb) return hex\n \n const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b)\n const newV = Math.min(1, hsv.v + amount)\n \n const newRgb = hsvToRgb(hsv.h, hsv.s, newV)\n return rgbToHex(newRgb.r, newRgb.g, newRgb.b)\n}\n\n/**\n * Darken a color by decreasing its HSV Value component.\n * \n * @param hex - The hex color to darken\n * @param amount - Amount to decrease V by (0-1)\n */\nexport function darken(hex: string, amount: number = 0.1): string {\n const rgb = hexToRgb(hex)\n if (!rgb) return hex\n \n const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b)\n const newV = Math.max(0, hsv.v - amount)\n \n const newRgb = hsvToRgb(hsv.h, hsv.s, newV)\n return rgbToHex(newRgb.r, newRgb.g, newRgb.b)\n}\n\n/**\n * Get hover colors for a button based on its background color.\n * Automatically adapts intensity based on the color's luminance.\n * \n * @param bgColor - The button's background color (hex)\n * @param intensity - How strong the hover effect should be ('subtle' | 'medium' | 'strong')\n */\nexport function getHoverColors(\n bgColor: string, \n intensity: 'subtle' | 'medium' | 'strong' = 'medium'\n): { raised: string; pressed: string } {\n const amounts = {\n subtle: 0.01,\n medium: 0.02,\n strong: 0.03,\n }\n \n const amount = amounts[intensity]\n \n return {\n raised: lighten(bgColor, amount), // Raised hover: lighten (lifting up)\n pressed: darken(bgColor, amount), // Pressed hover: darken (pressing down)\n }\n}\n\n/**\n * Check if a color is considered \"dark\" (for choosing text color).\n * Uses HSV Value component for simplicity.\n */\nexport function isDark(hex: string): boolean {\n const rgb = hexToRgb(hex)\n if (!rgb) return true\n const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b)\n return hsv.v < 0.6\n}\n\n/**\n * Shadow configuration for different surface colors.\n * Each surface needs calibrated light/dark shadow colors.\n * \n * - dark: soft shadow for depth (bottom-right)\n * - light: sharp rim highlight (top-left) - higher opacity for crisp edge\n * - darker: deeper shadow for pressed/inset states\n */\nexport const shadowColors = {\n // For charcoal surfaces (~#2C2C2C to #3C3C3C)\n charcoal: {\n dark: 'rgba(0, 0, 0, 0.5)',\n light: 'rgba(255, 255, 255, 0.12)', // brighter for crisp rim light\n darker: 'rgba(0, 0, 0, 0.6)',\n },\n // For neutral dark surfaces (~#1F2937)\n neutralDark: {\n dark: 'rgba(0, 0, 0, 0.4)',\n light: 'rgba(255, 255, 255, 0.08)',\n darker: 'rgba(0, 0, 0, 0.5)',\n },\n // For light surfaces (white/light gray backgrounds)\n neutralLight: {\n dark: 'rgba(0, 0, 0, 0.15)', // Visible dark shadow for depth on light backgrounds\n light: 'rgba(255, 255, 255, 1)', // Bright highlight for raised effect (visible on light gray)\n darker: 'rgba(0, 0, 0, 0.2)', // Deeper shadow for pressed states\n },\n}\n\nexport type ShadowIntensity = 'subtle' | 'medium' | 'strong'\nexport type ShadowSurface = keyof typeof shadowColors\n\ninterface ShadowConfig {\n offset: number\n blur: number\n}\n\nconst intensityConfig: Record<ShadowIntensity, ShadowConfig> = {\n subtle: { offset: 1, blur: 2 }, // very light, barely visible\n medium: { offset: 2, blur: 4 }, // noticeable but restrained\n strong: { offset: 2, blur: 5 }, // slightly deeper blur, same offset as medium\n}\n\n/**\n * Creates a raised (elevated) neumorphic shadow.\n * Element appears to float above the surface.\n * \n * Uses a soft dark shadow (bottom-right) and a sharp rim light (top-left).\n */\nexport function createRaisedShadow(\n surface: ShadowSurface = 'charcoal',\n intensity: ShadowIntensity = 'medium'\n): ViewStyle {\n const colors = shadowColors[surface]\n const { offset, blur } = intensityConfig[intensity]\n \n // Rim light is sharper: same offset as shadow, but minimal blur for crisp edge\n const rimBlur = 1 // Very tight blur for crisp rim\n \n return Platform.select({\n web: {\n boxShadow: `${offset}px ${offset}px ${blur}px ${colors.dark}, -${offset}px -${offset}px ${rimBlur}px ${colors.light}`,\n } as any,\n default: {\n // React Native shadow approximation (limited compared to web)\n shadowColor: '#000',\n shadowOffset: { width: offset, height: offset },\n shadowOpacity: 0.3,\n shadowRadius: blur / 2,\n elevation: offset,\n },\n }) as ViewStyle\n}\n\n/**\n * Creates a pressed (inset) neumorphic shadow.\n * Element appears pushed into the surface.\n * \n * Uses a soft dark inset shadow (top-left) and a thin sharp rim light (bottom-right).\n */\nexport function createPressedShadow(\n surface: ShadowSurface = 'charcoal',\n intensity: ShadowIntensity = 'medium'\n): ViewStyle {\n const colors = shadowColors[surface]\n const { offset, blur } = intensityConfig[intensity]\n \n // Rim light is always thin and subtle for pressed states\n const rimOffset = 1 // Fixed thin rim\n const rimBlur = 1 // Very tight blur for crisp edge\n \n return Platform.select({\n web: {\n boxShadow: `inset ${offset}px ${offset}px ${blur}px ${colors.darker}, inset -${rimOffset}px -${rimOffset}px ${rimBlur}px ${colors.light}`,\n } as any,\n default: {\n // React Native doesn't support inset shadows, approximate with darker bg\n shadowOpacity: 0,\n elevation: 0,\n },\n }) as ViewStyle\n}\n\n/**\n * Creates a flat (no shadow) style for hover states.\n */\nexport function createFlatShadow(): ViewStyle {\n return Platform.select({\n web: {\n boxShadow: 'none',\n } as any,\n default: {\n shadowOpacity: 0,\n elevation: 0,\n },\n }) as ViewStyle\n}\n\n/**\n * Creates a hover shadow for raised elements.\n * Reduces shadow depth but keeps a subtle rim light to maintain visual boundary.\n */\nexport function createRaisedHoverShadow(\n surface: ShadowSurface = 'charcoal',\n intensity: ShadowIntensity = 'medium'\n): ViewStyle {\n const colors = shadowColors[surface]\n const { offset, blur } = intensityConfig[intensity]\n \n // Reduce shadow depth by half for hover, keep minimal rim light\n const hoverOffset = Math.max(1, Math.round(offset / 2))\n const hoverBlur = Math.max(1, Math.round(blur / 2))\n const rimBlur = 1\n \n return Platform.select({\n web: {\n // Keep same offsets as normal state for rim to prevent \"shrinking\" effect\n boxShadow: `${hoverOffset}px ${hoverOffset}px ${hoverBlur}px ${colors.dark}, -${offset}px -${offset}px ${rimBlur}px ${colors.light}`,\n } as any,\n default: {\n shadowColor: '#000',\n shadowOffset: { width: hoverOffset, height: hoverOffset },\n shadowOpacity: 0.2,\n shadowRadius: hoverBlur / 2,\n elevation: hoverOffset,\n },\n }) as ViewStyle\n}\n\n/**\n * Creates a hover shadow for pressed elements.\n * Reduces shadow depth but keeps a subtle rim light to maintain visual boundary.\n */\nexport function createPressedHoverShadow(\n surface: ShadowSurface = 'charcoal',\n intensity: ShadowIntensity = 'medium'\n): ViewStyle {\n const colors = shadowColors[surface]\n const { offset, blur } = intensityConfig[intensity]\n \n // Reduce shadow depth by half for hover, keep minimal rim light\n const hoverOffset = Math.max(1, Math.round(offset / 2))\n const hoverBlur = Math.max(1, Math.round(blur / 2))\n const rimBlur = 1\n \n return Platform.select({\n web: {\n // Keep rim offset at 1px (same as pressed normal) to prevent \"shrinking\" effect\n boxShadow: `inset ${hoverOffset}px ${hoverOffset}px ${hoverBlur}px ${colors.darker}, inset -1px -1px ${rimBlur}px ${colors.light}`,\n } as any,\n default: {\n shadowOpacity: 0,\n elevation: 0,\n },\n }) as ViewStyle\n}\n\n/**\n * Pre-built shadow presets for common use cases.\n */\nexport const neumorphicShadows = {\n // Charcoal surface shadows (for dark toolbars, cards)\n charcoal: {\n raised: {\n subtle: createRaisedShadow('charcoal', 'subtle'),\n medium: createRaisedShadow('charcoal', 'medium'),\n strong: createRaisedShadow('charcoal', 'strong'),\n },\n raisedHover: {\n subtle: createRaisedHoverShadow('charcoal', 'subtle'),\n medium: createRaisedHoverShadow('charcoal', 'medium'),\n strong: createRaisedHoverShadow('charcoal', 'strong'),\n },\n pressed: {\n subtle: createPressedShadow('charcoal', 'subtle'),\n medium: createPressedShadow('charcoal', 'medium'),\n strong: createPressedShadow('charcoal', 'strong'),\n },\n pressedHover: {\n subtle: createPressedHoverShadow('charcoal', 'subtle'),\n medium: createPressedHoverShadow('charcoal', 'medium'),\n strong: createPressedHoverShadow('charcoal', 'strong'),\n },\n flat: createFlatShadow(),\n },\n // Neutral dark surface shadows\n neutralDark: {\n raised: {\n subtle: createRaisedShadow('neutralDark', 'subtle'),\n medium: createRaisedShadow('neutralDark', 'medium'),\n strong: createRaisedShadow('neutralDark', 'strong'),\n },\n raisedHover: {\n subtle: createRaisedHoverShadow('neutralDark', 'subtle'),\n medium: createRaisedHoverShadow('neutralDark', 'medium'),\n strong: createRaisedHoverShadow('neutralDark', 'strong'),\n },\n pressed: {\n subtle: createPressedShadow('neutralDark', 'subtle'),\n medium: createPressedShadow('neutralDark', 'medium'),\n strong: createPressedShadow('neutralDark', 'strong'),\n },\n pressedHover: {\n subtle: createPressedHoverShadow('neutralDark', 'subtle'),\n medium: createPressedHoverShadow('neutralDark', 'medium'),\n strong: createPressedHoverShadow('neutralDark', 'strong'),\n },\n flat: createFlatShadow(),\n },\n // Neutral light surface shadows\n neutralLight: {\n raised: {\n subtle: createRaisedShadow('neutralLight', 'subtle'),\n medium: createRaisedShadow('neutralLight', 'medium'),\n strong: createRaisedShadow('neutralLight', 'strong'),\n },\n raisedHover: {\n subtle: createRaisedHoverShadow('neutralLight', 'subtle'),\n medium: createRaisedHoverShadow('neutralLight', 'medium'),\n strong: createRaisedHoverShadow('neutralLight', 'strong'),\n },\n pressed: {\n subtle: createPressedShadow('neutralLight', 'subtle'),\n medium: createPressedShadow('neutralLight', 'medium'),\n strong: createPressedShadow('neutralLight', 'strong'),\n },\n pressedHover: {\n subtle: createPressedHoverShadow('neutralLight', 'subtle'),\n medium: createPressedHoverShadow('neutralLight', 'medium'),\n strong: createPressedHoverShadow('neutralLight', 'strong'),\n },\n flat: createFlatShadow(),\n },\n}\n","/**\n * Elevation System\n * \n * A unified depth system where each elevation level corresponds to:\n * - Calculated surface color (derived from base using lighten)\n * - Shadow intensity and style (raised/pressed)\n * - Dynamically calculated shadow colors (derived from surface color)\n * - Semantic name for reference\n * \n * Elevation range: -2 (deep inset) to +5 (floating overlay)\n * \n * Negative elevations: Inset/pressed elements (sunken into surface)\n * Zero elevation: Base surface (background/page level)\n * Positive elevations: Raised elements (floating above surface)\n * \n * All colors are calculated dynamically from a base surface color,\n * allowing for custom surfaces and consistent color relationships.\n * \n * Lighting Model: Light source from upper-right corner\n * - Raised elements are always lighter than base (consistent across themes)\n * - Base colors must allow sufficient lightening in both themes\n */\n\nimport { Platform, type ViewStyle } from 'react-native'\nimport { lighten, darken, hexToRgb, rgbToHsv, hsvToRgb, rgbToHex } from './shadows'\nimport { semanticColorsLight, semanticColorsDark } from './tokens/semantic'\n\nexport type ElevationLevel = -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5\n\nexport interface ElevationConfig {\n /** Semantic name for this elevation level */\n name: string\n /** Amount to lighten base color (0-1) */\n colorAdjustment: number\n /** Shadow intensity */\n shadowIntensity: 'subtle' | 'medium' | 'strong'\n /** Shadow style: raised (floating) or pressed (inset) */\n shadowStyle: 'raised' | 'pressed'\n /** Description of use case */\n description: string\n}\n\nexport const elevationSystem: Record<ElevationLevel, ElevationConfig> = {\n // Deep inset (recessed input fields, deeply pressed buttons)\n [-2]: {\n name: 'deep-inset',\n colorAdjustment: 0,\n shadowIntensity: 'strong',\n shadowStyle: 'pressed',\n description: 'Deeply recessed elements (e.g., input fields, deeply pressed buttons)',\n },\n \n // Shallow inset (pressed buttons, sunken panels)\n [-1]: {\n name: 'inset',\n colorAdjustment: 0,\n shadowIntensity: 'medium',\n shadowStyle: 'pressed',\n description: 'Shallow inset elements (e.g., pressed buttons, sunken panels within cards)',\n },\n \n // Base level (page background, default surface)\n [0]: {\n name: 'base',\n colorAdjustment: 0,\n shadowIntensity: 'subtle',\n shadowStyle: 'raised',\n description: 'Base surface level (page background, default containers)',\n },\n \n // Level 1: Subtle elevation (outline cards, subtle containers)\n [1]: {\n name: 'subtle',\n colorAdjustment: 0.01,\n shadowIntensity: 'subtle',\n shadowStyle: 'raised',\n description: 'Subtle elevation (outline cards, subtle containers)',\n },\n \n // Level 2: Standard elevation (default cards, buttons)\n [2]: {\n name: 'standard',\n colorAdjustment: 0.02,\n shadowIntensity: 'medium',\n shadowStyle: 'raised',\n description: 'Standard elevation (default cards, raised buttons)',\n },\n \n // Level 3: Prominent elevation (important cards, modals)\n [3]: {\n name: 'prominent',\n colorAdjustment: 0.04,\n shadowIntensity: 'strong',\n shadowStyle: 'raised',\n description: 'Prominent elevation (important cards, modals, dropdowns)',\n },\n \n // Level 4: High elevation (overlays, popovers)\n [4]: {\n name: 'high',\n colorAdjustment: 0.06,\n shadowIntensity: 'strong',\n shadowStyle: 'raised',\n description: 'High elevation (overlays, popovers, tooltips)',\n },\n \n // Level 5: Floating (toasts, floating action buttons)\n [5]: {\n name: 'floating',\n colorAdjustment: 0.08,\n shadowIntensity: 'strong',\n shadowStyle: 'raised',\n description: 'Floating elevation (toasts, floating action buttons, highest z-index)',\n },\n}\n\n/**\n * Calculate rim light color from the BASE color.\n * Creates a consistent bright highlight with opacity that scales with elevation.\n * \n * The rim light represents light hitting the edge of raised elements from a \n * consistent light source. Uses ABSOLUTE HSV value (not relative lightening)\n * for consistent intensity across all surface colors.\n * \n * For colored surfaces: preserves hue/saturation, sets value to fixed bright level\n * For gray surfaces: uses white with appropriate opacity\n * \n * @param baseColor - The base surface color (hex)\n * @param level - Elevation level (used to scale opacity)\n */\nfunction calculateRimLightColor(baseColor: string, level: ElevationLevel): string {\n const rgb = hexToRgb(baseColor)\n if (!rgb) {\n return 'rgba(255, 255, 255, 0.5)'\n }\n \n const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b)\n const isLight = hsv.v > 0.6\n const isSaturated = hsv.s > 0.3 // Colored (not gray)\n \n // Opacity scales with elevation to compensate for lighter surfaces at higher levels\n // Range: +0% at level 1 to +20% at level 5\n const absLevel = Math.abs(level)\n const opacityBoost = Math.max(0, (absLevel - 1) * 0.05) // +5% per level above 1 (0% to 20%)\n \n if (isSaturated) {\n // For colored surfaces, preserve hue and saturation but set value to fixed bright level\n // This ensures consistent rim light intensity across all colored surfaces\n const rimLightValue = 0.95 // Fixed bright value for rim light\n const rimLightRgb = hsvToRgb(hsv.h, hsv.s * 0.3, rimLightValue) // Reduce saturation for brighter appearance\n \n // Base opacity + elevation boost, capped at 1.0\n const baseOpacity = isLight ? 0.9 : 0.5\n const finalOpacity = Math.min(1, baseOpacity + opacityBoost)\n return `rgba(${rimLightRgb.r}, ${rimLightRgb.g}, ${rimLightRgb.b}, ${finalOpacity.toFixed(2)})`\n } else {\n // For gray/neutral surfaces, use white with appropriate opacity\n const baseOpacity = isLight ? 0.9 : 0.12\n const finalOpacity = Math.min(1, baseOpacity + opacityBoost)\n return `rgba(255, 255, 255, ${finalOpacity.toFixed(2)})`\n }\n}\n\n/**\n * Calculate dark shadow colors from the surface color.\n * The dark shadow is cast BY the element, so it should match the surface color.\n * \n * Uses ABSOLUTE HSV value (not relative darkening) for consistent shadow intensity\n * across all surface colors - simulating a consistent light source.\n * \n * For colored surfaces: preserves hue/saturation, sets value to fixed dark level\n * For gray surfaces: uses black with appropriate opacity\n */\nfunction calculateDarkShadowColors(surfaceColor: string): {\n dark: string\n darker: string\n} {\n const rgb = hexToRgb(surfaceColor)\n if (!rgb) {\n return {\n dark: 'rgba(0, 0, 0, 0.3)',\n darker: 'rgba(0, 0, 0, 0.4)',\n }\n }\n \n const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b)\n const isLight = hsv.v > 0.6\n const isSaturated = hsv.s > 0.3\n \n if (isSaturated) {\n // For colored surfaces, preserve hue and saturation but set value to fixed dark level\n // This ensures consistent shadow intensity across all colored surfaces\n const darkShadowValue = 0.15 // Fixed dark value for shadows\n const darkShadowRgb = hsvToRgb(hsv.h, hsv.s, darkShadowValue)\n \n if (isLight) {\n return {\n dark: `rgba(${darkShadowRgb.r}, ${darkShadowRgb.g}, ${darkShadowRgb.b}, 0.3)`,\n darker: `rgba(${darkShadowRgb.r}, ${darkShadowRgb.g}, ${darkShadowRgb.b}, 0.4)`,\n }\n } else {\n return {\n dark: `rgba(${darkShadowRgb.r}, ${darkShadowRgb.g}, ${darkShadowRgb.b}, 0.5)`,\n darker: `rgba(${darkShadowRgb.r}, ${darkShadowRgb.g}, ${darkShadowRgb.b}, 0.6)`,\n }\n }\n } else {\n // For gray surfaces, use standard black shadows\n if (isLight) {\n return {\n dark: 'rgba(0, 0, 0, 0.2)',\n darker: 'rgba(0, 0, 0, 0.3)',\n }\n } else {\n return {\n dark: 'rgba(0, 0, 0, 0.5)',\n darker: 'rgba(0, 0, 0, 0.6)',\n }\n }\n }\n}\n\n/**\n * Get rim light size config.\n * Fixed 1px offset and blur for a consistent, crisp rim highlight.\n * Opacity scaling (in calculateRimLightColor) handles elevation differences.\n */\nfunction getRimLightConfig(): { offset: number; blur: number } {\n return {\n offset: 1, // Fixed 1px for crisp rim\n blur: 1, // Tight blur for crisp edge\n }\n}\n\n/**\n * Get elevation configuration for a given level\n */\nexport function getElevationConfig(level: ElevationLevel): ElevationConfig {\n return elevationSystem[level]\n}\n\n// Simple cache for elevation surface colors\nconst elevationSurfaceCache = new Map<string, string>()\nconst MAX_CACHE_SIZE = 100\n\nfunction getCacheKey(baseColor: string, level: ElevationLevel, theme: 'light' | 'dark'): string {\n return `${baseColor}-${level}-${theme}`\n}\n\nfunction calculateElevationSurface(\n baseColor: string,\n level: ElevationLevel,\n theme: 'light' | 'dark'\n): string {\n const config = elevationSystem[level]\n \n if (config.colorAdjustment === 0) {\n return baseColor\n }\n \n // For raised elevations (positive), always lighten (consistent lighting model)\n // Light source is from upper-right, so raised elements are always lighter\n // For inset elevations (negative), we keep base color (shadow creates depth)\n if (level < 0) {\n return baseColor // Inset elements use base color\n }\n \n // Always lighten for raised elements (consistent across themes)\n // Base colors must be chosen to allow sufficient lightening in dark mode\n return lighten(baseColor, config.colorAdjustment)\n}\n\n/**\n * Calculate surface color for an elevation level from a base color.\n * Results are cached to avoid redundant calculations.\n * \n * @param baseColor - Base surface color (hex)\n * @param level - Elevation level\n * @param theme - Current theme ('light' or 'dark')\n * @returns Calculated surface color (hex)\n */\nexport function getElevationSurface(\n baseColor: string,\n level: ElevationLevel,\n theme: 'light' | 'dark'\n): string {\n const cacheKey = getCacheKey(baseColor, level, theme)\n \n // Check cache\n if (elevationSurfaceCache.has(cacheKey)) {\n return elevationSurfaceCache.get(cacheKey)!\n }\n \n // Calculate\n const result = calculateElevationSurface(baseColor, level, theme)\n \n // Cache result (with size limit to prevent memory leaks)\n if (elevationSurfaceCache.size >= MAX_CACHE_SIZE) {\n // Remove oldest entry (simple FIFO)\n const firstKey = elevationSurfaceCache.keys().next().value!\n elevationSurfaceCache.delete(firstKey)\n }\n elevationSurfaceCache.set(cacheKey, result)\n \n return result\n}\n\n// Cache for shadow styles (less frequently used, smaller cache)\nconst elevationShadowCache = new Map<string, ViewStyle>()\nconst MAX_SHADOW_CACHE_SIZE = 50\n\nfunction getShadowCacheKey(baseColor: string, level: ElevationLevel, theme: 'light' | 'dark', isHovered: boolean): string {\n return `${baseColor}-${level}-${theme}-${isHovered}`\n}\n\nfunction calculateElevationShadow(\n baseColor: string,\n level: ElevationLevel,\n theme: 'light' | 'dark',\n isHovered: boolean = false\n): ViewStyle {\n const config = elevationSystem[level]\n \n // Base level has no shadow\n if (level === 0) {\n return {}\n }\n \n // Calculate the actual elevated surface color\n const elevatedSurfaceColor = calculateElevationSurface(baseColor, level, theme)\n \n // Rim light: calculated from BASE color (consistent across all elevations)\n // This represents a consistent light source - only size changes with elevation\n const rimLightColor = calculateRimLightColor(baseColor, level)\n \n // Dark shadow: calculated from ELEVATED surface color\n // The shadow is cast by the element, so it should match the surface\n const darkShadowColors = calculateDarkShadowColors(elevatedSurfaceColor)\n \n // Get shadow intensity config (for dark shadow)\n const intensityConfig = {\n subtle: { offset: 1, blur: 2 },\n medium: { offset: 2, blur: 4 },\n strong: { offset: 2, blur: 5 },\n }\n \n const { offset, blur } = intensityConfig[config.shadowIntensity]\n \n // Get rim light config (scales with elevation level)\n const rimConfig = getRimLightConfig()\n \n if (config.shadowStyle === 'pressed') {\n // Inset shadow (pressed elements)\n if (isHovered) {\n // Reduce shadow depth for hover\n const hoverOffset = Math.max(1, Math.round(offset / 2))\n const hoverBlur = Math.max(1, Math.round(blur / 2))\n return Platform.select({\n web: {\n boxShadow: `inset ${hoverOffset}px ${hoverOffset}px ${hoverBlur}px ${darkShadowColors.darker}, inset -${rimConfig.offset}px -${rimConfig.offset}px ${rimConfig.blur}px ${rimLightColor}`,\n } as any,\n default: {\n shadowOpacity: 0,\n elevation: 0,\n },\n }) as ViewStyle\n }\n \n return Platform.select({\n web: {\n boxShadow: `inset ${offset}px ${offset}px ${blur}px ${darkShadowColors.darker}, inset -${rimConfig.offset}px -${rimConfig.offset}px ${rimConfig.blur}px ${rimLightColor}`,\n } as any,\n default: {\n shadowOpacity: 0,\n elevation: 0,\n },\n }) as ViewStyle\n } else {\n // Raised shadow (floating elements)\n if (isHovered) {\n // Reduce shadow depth for hover\n const hoverOffset = Math.max(1, Math.round(offset / 2))\n const hoverBlur = Math.max(1, Math.round(blur / 2))\n return Platform.select({\n web: {\n boxShadow: `${hoverOffset}px ${hoverOffset}px ${hoverBlur}px ${darkShadowColors.dark}, -${rimConfig.offset}px -${rimConfig.offset}px ${rimConfig.blur}px ${rimLightColor}`,\n } as any,\n default: {\n shadowColor: '#000',\n shadowOffset: { width: hoverOffset, height: hoverOffset },\n shadowOpacity: 0.2,\n shadowRadius: hoverBlur / 2,\n elevation: hoverOffset,\n },\n }) as ViewStyle\n }\n \n return Platform.select({\n web: {\n boxShadow: `${offset}px ${offset}px ${blur}px ${darkShadowColors.dark}, -${rimConfig.offset}px -${rimConfig.offset}px ${rimConfig.blur}px ${rimLightColor}`,\n } as any,\n default: {\n shadowColor: '#000',\n shadowOffset: { width: offset, height: offset },\n shadowOpacity: 0.3,\n shadowRadius: blur / 2,\n elevation: offset,\n },\n }) as ViewStyle\n }\n}\n\n/**\n * Get shadow style for an elevation level, calculated dynamically from surface color.\n * Results are cached to avoid redundant calculations.\n * \n * @param baseColor - Base surface color (hex)\n * @param level - Elevation level\n * @param theme - Current theme ('light' or 'dark')\n * @param isHovered - Whether element is hovered\n * @returns ViewStyle with shadow properties\n */\nexport function getElevationShadow(\n baseColor: string,\n level: ElevationLevel,\n theme: 'light' | 'dark',\n isHovered: boolean = false\n): ViewStyle {\n const cacheKey = getShadowCacheKey(baseColor, level, theme, isHovered)\n \n // Check cache\n if (elevationShadowCache.has(cacheKey)) {\n return elevationShadowCache.get(cacheKey)!\n }\n \n // Calculate shadow\n const result = calculateElevationShadow(baseColor, level, theme, isHovered)\n \n // Cache result\n if (elevationShadowCache.size >= MAX_SHADOW_CACHE_SIZE) {\n const firstKey = elevationShadowCache.keys().next().value!\n elevationShadowCache.delete(firstKey)\n }\n elevationShadowCache.set(cacheKey, result)\n \n return result\n}\n\n/**\n * Get base surface color from theme.\n * This is the foundation color that all elevations are calculated from.\n * \n * IMPORTANT: Base colors must be chosen to allow sufficient lightening.\n * \n * **Light Mode**: Cannot use `#FFFFFF` (white) - cannot lighten white!\n * - Use `#F3F4F6` (neutral[100]) - can lighten to `#FAFAFA` → `#FFFFFF`\n * - This allows raised elevations to be lighter (closer to white)\n * \n * **Dark Mode**: Need lighter base to allow sufficient lightening\n * - Use `#191919` (charcoal[600]) - allows lightening to `#2A2A2A` at max elevation\n * \n * Can be overridden to use custom base colors for special cases.\n */\nexport function getBaseSurfaceColor(theme: 'light' | 'dark'): string {\n // Use semantic token values so elevation colors stay in sync with the token pipeline.\n // Light mode: surface-raised (#F3F4F6 / neutral[100]) - NOT white, so we can lighten it\n // Dark mode: surface-elevated (#191919 / charcoal[600]) - allows sufficient lightening\n\n return theme === 'light'\n ? semanticColorsLight['surface-raised']\n : semanticColorsDark['surface-elevated']\n}\n\n/**\n * Component-specific elevation ranges\n * Defines which elevation levels each component type can use\n */\nexport const componentElevationRanges = {\n button: {\n allowed: [2] as const,\n default: 2 as const,\n hover: 3 as const,\n },\n card: {\n allowed: [1, 2, 3] as const,\n default: 2 as const,\n hover: 3 as const,\n },\n input: {\n allowed: [-2, -1, 0] as const,\n default: -1 as const,\n },\n overlay: {\n allowed: [4, 5] as const,\n default: 4 as const,\n },\n} as const\n\nexport type ComponentType = keyof typeof componentElevationRanges\n\n/**\n * Validate and clamp elevation to component's allowed range\n */\nexport function getValidatedElevation(\n component: ComponentType,\n requested: ElevationLevel\n): ElevationLevel {\n const range = componentElevationRanges[component]\n if ((range.allowed as readonly ElevationLevel[]).includes(requested)) {\n return requested\n }\n // Clamp to nearest allowed elevation\n const sorted = [...range.allowed].sort((a, b) => a - b)\n if (requested < sorted[0]) return sorted[0]\n if (requested > sorted[sorted.length - 1]) return sorted[sorted.length - 1]\n // Find closest\n return sorted.reduce((prev, curr) =>\n Math.abs(curr - requested) < Math.abs(prev - requested) ? curr : prev\n ) as ElevationLevel\n}\n\n// =============================================================================\n// Glow Shadow Support\n// =============================================================================\n\nexport type GlowIntensity = 'subtle' | 'medium' | 'strong'\n\nconst glowConfig: Record<GlowIntensity, { blur: number; spread: number; opacity: number }> = {\n subtle: { blur: 12, spread: 0, opacity: 0.25 },\n medium: { blur: 20, spread: 2, opacity: 0.4 },\n strong: { blur: 30, spread: 4, opacity: 0.55 },\n}\n\n/**\n * Get a glow shadow style for emphasis/active states.\n *\n * Creates a colored radial glow around an element, useful for:\n * - Active recording indicators (orange glow)\n * - Success states (green glow)\n * - Error/danger indicators (red glow)\n * - Focus rings and attention-drawing elements\n *\n * @param color - Glow color (hex string, e.g. '#FF7900')\n * @param intensity - Glow intensity level\n * @returns ViewStyle with platform-specific shadow properties\n */\nexport function getGlowShadow(\n color: string,\n intensity: GlowIntensity = 'medium'\n): ViewStyle {\n const config = glowConfig[intensity]\n const rgb = hexToRgb(color)\n if (!rgb) return {}\n\n return Platform.select({\n web: {\n boxShadow: `0 0 ${config.blur}px ${config.spread}px rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${config.opacity})`,\n } as any,\n default: {\n shadowColor: color,\n shadowOffset: { width: 0, height: 0 },\n shadowOpacity: config.opacity,\n shadowRadius: config.blur / 2,\n elevation: 0,\n },\n }) as ViewStyle\n}\n","import type { ThemePreset } from './types'\n\nfunction colorKeyToVar(key: string): string {\n return `--color-${key}`\n}\n\nfunction applyColorOverrides(colors: Record<string, string | undefined>, root: HTMLElement) {\n for (const [key, value] of Object.entries(colors)) {\n if (value !== undefined) {\n root.style.setProperty(colorKeyToVar(key), value)\n }\n }\n}\n\nfunction applyFontOverrides(fonts: Record<string, string | undefined>, root: HTMLElement) {\n const fontVarMap: Record<string, string> = {\n sans: '--font-family-sans',\n body: '--font-family-body',\n heading: '--font-family-heading',\n mono: '--font-family-mono',\n }\n for (const [key, value] of Object.entries(fonts)) {\n if (value !== undefined && fontVarMap[key]) {\n root.style.setProperty(fontVarMap[key], value)\n }\n }\n}\n\nfunction injectFontImport(url: string) {\n if (typeof document === 'undefined') return\n const existing = document.querySelector(`link[href=\"${url}\"]`)\n if (existing) return\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = url\n document.head.appendChild(link)\n}\n\nexport function applyThemePreset(preset: ThemePreset): () => void {\n if (typeof document === 'undefined') {\n return () => {}\n }\n\n const root = document.documentElement\n const removals: (() => void)[] = []\n\n // Inject font import if specified\n if (preset.fontImport) {\n injectFontImport(preset.fontImport)\n }\n\n // Determine current theme mode\n const isLight = root.classList.contains('light')\n const modeColors = isLight ? preset.colors?.light : preset.colors?.dark\n\n // Apply color overrides\n if (modeColors) {\n const previousValues: Record<string, string | null> = {}\n for (const key of Object.keys(modeColors)) {\n previousValues[colorKeyToVar(key)] = root.style.getPropertyValue(colorKeyToVar(key)) || null\n }\n applyColorOverrides(modeColors, root)\n removals.push(() => {\n for (const [varName, prev] of Object.entries(previousValues)) {\n if (prev === null) {\n root.style.removeProperty(varName)\n } else {\n root.style.setProperty(varName, prev)\n }\n }\n })\n }\n\n // Apply font overrides\n if (preset.fonts) {\n applyFontOverrides(preset.fonts as Record<string, string | undefined>, root)\n }\n\n // Apply root classes\n if (preset.rootClasses) {\n for (const cls of preset.rootClasses) {\n root.classList.add(cls)\n }\n removals.push(() => {\n for (const cls of preset.rootClasses!) {\n root.classList.remove(cls)\n }\n })\n }\n\n // Return cleanup function\n return () => {\n for (const remove of removals) {\n remove()\n }\n }\n}\n","import type { ThemePreset } from './types'\n\nexport const defaultPreset: ThemePreset = {\n name: 'default',\n description: 'Titan Design System default theme — orange accent, steel secondary',\n}\n","import type { ThemePreset } from './types'\n\n/**\n * Audiobook Studio preset.\n *\n * Warm copper/patina aesthetic inspired by vintage audio equipment\n * and reading lounges. Dark-mode only design with editorial typography.\n */\nexport const audiobookPreset: ThemePreset = {\n name: 'audiobook',\n description: 'Warm copper/patina theme with editorial typography',\n fontImport:\n \"https://fonts.googleapis.com/css2?family=Newsreader:ital,wght@0,400;0,600;0,700;1,400&family=Outfit:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap\",\n fonts: {\n sans: \"'Outfit', 'Avenir', 'Avenir Next', system-ui, sans-serif\",\n body: \"'Outfit', 'Avenir', 'Avenir Next', system-ui, sans-serif\",\n heading: \"'Newsreader', 'Libre Baskerville', Georgia, serif\",\n mono: \"'JetBrains Mono', 'SF Mono', 'Fira Code', monospace\",\n },\n colors: {\n dark: {\n // Brand: Copper accent\n 'brand-primary': '#d4782a',\n 'brand-primary-light': '#e8944a',\n 'brand-primary-dark': '#9a4a15',\n 'brand-primary-subtle': 'rgba(212, 120, 42, 0.12)',\n 'brand-primary-hover': '#e8944a',\n 'brand-primary-active': '#f5b070',\n\n // Brand secondary: Patina/verdigris\n 'brand-secondary': '#3a9b8a',\n 'brand-secondary-light': '#55baa7',\n 'brand-secondary-dark': '#1f5c52',\n 'brand-secondary-subtle': 'rgba(58, 155, 138, 0.12)',\n 'brand-secondary-hover': '#55baa7',\n 'brand-secondary-active': '#7ed4c4',\n\n 'on-brand-primary': '#FFFFFF',\n 'on-brand-secondary': '#FFFFFF',\n\n // Status colors (audiobook's warmer status palette)\n 'status-success': '#5fb870',\n 'status-error': '#d85c4a',\n 'status-warning': '#d4a43a',\n 'status-info': '#5a8fd4',\n\n // Text: warm off-whites\n 'text-primary': '#f4f3f1',\n 'text-secondary': '#b5b3af',\n 'text-tertiary': '#7a7875',\n\n // Surfaces: warm charcoals (not pure gray)\n 'surface-base': '#101114',\n 'surface-elevated': '#15171c',\n 'surface-raised': '#1a1d24',\n 'surface-overlay': '#15171c',\n 'surface-input': '#15171c',\n\n // Backgrounds\n 'background-base': '#0a0b0d',\n 'background-default': '#101114',\n 'background-subtle': '#1a1d24',\n\n // Borders\n 'border-default': 'rgba(255, 255, 255, 0.06)',\n 'border-subtle': 'rgba(255, 255, 255, 0.03)',\n 'border-strong': '#2d323d',\n 'border-focus': '#d4782a',\n 'border-input': '#2d323d',\n 'border-input-hover': '#454c5c',\n 'border-input-focus': '#d4782a',\n 'border-input-error': '#d85c4a',\n\n // Interactive\n 'interactive-hover': 'rgba(255, 255, 255, 0.04)',\n 'interactive-focus': 'rgba(255, 255, 255, 0.12)',\n 'interactive-active': 'rgba(255, 255, 255, 0.16)',\n 'interactive-selected': 'rgba(255, 255, 255, 0.08)',\n\n 'divider': 'rgba(255, 255, 255, 0.06)',\n\n // Glow RGB values for shadow utilities\n 'brand-primary-rgb': '212, 120, 42',\n 'brand-secondary-rgb': '58, 155, 138',\n 'status-success-rgb': '95, 184, 112',\n 'status-error-rgb': '216, 92, 74',\n 'status-warning-rgb': '212, 164, 58',\n 'status-info-rgb': '90, 143, 212',\n 'background-base-rgb': '10, 11, 13',\n },\n },\n rootClasses: ['atmosphere-warm', 'grain'],\n}\n","import { useSyncExternalStore } from 'react'\n\n/**\n * Utility function to detect the current theme.\n * Checks for the 'light' class on the html element (set by Storybook's theme addon).\n * \n * NOTE: This function reads the theme at call time. For reactive theme detection\n * that re-renders when the theme changes, use the `useTheme` hook instead.\n * \n * @returns 'light' if light theme is active, 'dark' otherwise\n */\nexport function getTheme(): 'light' | 'dark' {\n if (typeof document === 'undefined') return 'dark'\n return document.documentElement.classList.contains('light') ? 'light' : 'dark'\n}\n\n// Subscribers for theme changes\nlet listeners: Array<() => void> = []\n\nfunction subscribe(listener: () => void) {\n listeners = [...listeners, listener]\n \n // Set up MutationObserver to watch for class changes on html element\n if (typeof document !== 'undefined' && listeners.length === 1) {\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n // Notify all listeners when class changes\n listeners.forEach(l => l())\n }\n }\n })\n \n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n })\n \n // Store observer for cleanup\n ;(subscribe as any)._observer = observer\n }\n \n return () => {\n listeners = listeners.filter(l => l !== listener)\n \n // Clean up observer when no more listeners\n if (listeners.length === 0 && (subscribe as any)._observer) {\n ;(subscribe as any)._observer.disconnect()\n ;(subscribe as any)._observer = null\n }\n }\n}\n\nfunction getSnapshot(): 'light' | 'dark' {\n return getTheme()\n}\n\nfunction getServerSnapshot(): 'light' | 'dark' {\n return 'dark'\n}\n\n/**\n * React hook for reactive theme detection.\n * Automatically re-renders when the theme changes (via class changes on html element).\n * \n * Uses useSyncExternalStore for proper React 18 concurrent mode support.\n * \n * @returns 'light' if light theme is active, 'dark' otherwise\n */\nexport function useTheme(): 'light' | 'dark' {\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot)\n}\n","import React, { useMemo, useState } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\nimport { \n getElevationSurface, \n getElevationShadow, \n getBaseSurfaceColor,\n getValidatedElevation,\n type ElevationLevel \n} from '../../../theme'\nimport { useTheme } from '../../../utils/useTheme'\n\nexport type CardVariant = 'elevated' | 'outline' | 'filled' | 'accent' | 'subtle'\nexport type CardElevation = 1 | 2 | 3 // subtle, standard, prominent\n\nexport interface CardProps extends ViewProps {\n /** Visual variant */\n variant?: CardVariant\n /** Elevation level (1=subtle, 2=standard, 3=prominent) */\n elevation?: CardElevation\n /** Whether the card is interactive (hoverable/pressable) */\n isInteractive?: boolean\n /** Whether the card is in a loading state (renders skeleton) */\n isLoading?: boolean\n /** Callback when card is pressed (makes card interactive) */\n onPress?: () => void\n /** Custom border color (hex, rgb, or CSS color). Useful for status cards. */\n borderColor?: string\n /** Custom background color (hex, rgb, or CSS color). Useful for colored cards. */\n bgColor?: string\n /** Accent stripe color for accent variant (CSS color or hex) */\n accentColor?: string\n /** Accent stripe width for accent variant in pixels (default: 3) */\n accentWidth?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n /** Show header skeleton when loading (default: true) */\n skeletonHasHeader?: boolean\n /** Show footer skeleton when loading (default: false) */\n skeletonHasFooter?: boolean\n /** Number of content lines in skeleton when loading (default: 3) */\n skeletonContentLines?: number\n}\n\nconst variantStyles: Record<CardVariant, string> = {\n elevated: '', // Will be set dynamically via elevation system\n outline: 'border-2 border-border-strong', // Thicker border with stronger contrast\n filled: '', // Will be set dynamically via elevation system\n accent: 'border border-border-default',\n subtle: 'border border-border-subtle',\n}\n\n/**\n * Card component for containing related content.\n *\n * @example\n * <Card>\n * <CardHeader>\n * <CardTitle>Card Title</CardTitle>\n * <CardDescription>Card description</CardDescription>\n * </CardHeader>\n * <CardContent>\n * <Text>Card content goes here</Text>\n * </CardContent>\n * <CardFooter>\n * <Button>Action</Button>\n * </CardFooter>\n * </Card>\n *\n * // Interactive card\n * <Card isInteractive onPress={() => console.log('pressed')}>\n * <CardContent>Click me</CardContent>\n * </Card>\n */\nexport function Card({\n variant = 'elevated',\n elevation = 2,\n isInteractive = false,\n isLoading = false,\n onPress,\n borderColor,\n bgColor,\n accentColor,\n accentWidth,\n className,\n children,\n style,\n skeletonHasHeader = true,\n skeletonHasFooter = false,\n skeletonContentLines = 3,\n ...props\n}: CardProps) {\n const isClickable = isInteractive || !!onPress\n const [isHovered, setIsHovered] = useState(false)\n const theme = useTheme()\n\n // Get elevation level (validate and clamp to card's allowed range)\n const elevationLevel = useMemo(() => {\n const validated = getValidatedElevation('card', elevation as ElevationLevel)\n // Map variant to elevation if needed\n if (variant === 'outline' || variant === 'accent' || variant === 'subtle') {\n return 1 as ElevationLevel // These border variants use subtle elevation\n }\n return validated\n }, [variant, elevation])\n\n // Get base surface color for theme\n const baseColor = useMemo(() => getBaseSurfaceColor(theme), [theme])\n\n // Calculate surface color and shadow from elevation\n const surfaceColor = useMemo(() => {\n // Outline variant in light mode uses a specific off-white for clear visibility\n if ((variant === 'outline' || variant === 'accent') && theme === 'light') {\n return '#FAFAFA' // Matches --color-surface-elevated in light mode\n }\n // Subtle variant uses the base surface color without elevation lift\n if (variant === 'subtle') {\n return getElevationSurface(baseColor, 0 as ElevationLevel, theme)\n }\n return getElevationSurface(baseColor, elevationLevel, theme)\n }, [baseColor, elevationLevel, theme, variant])\n\n const shadowStyle = useMemo(() => {\n // Only apply hover shadow if card is actually clickable\n const shouldHover = isHovered && isClickable\n return getElevationShadow(baseColor, elevationLevel, theme, shouldHover)\n }, [baseColor, elevationLevel, theme, isHovered, isClickable])\n\n // Render skeleton content when loading, otherwise render children\n const cardContent = isLoading ? (\n <>\n {skeletonHasHeader && (\n <CardHeader>\n <View className=\"h-5 w-1/3 bg-interactive-disabled rounded\" />\n <View className=\"mt-2 h-4 w-2/3 bg-interactive-disabled rounded\" />\n </CardHeader>\n )}\n <CardContent>\n {Array.from({ length: skeletonContentLines }).map((_, i) => (\n <View\n key={i}\n className={cn(\n 'h-4 bg-interactive-disabled rounded',\n i < skeletonContentLines - 1 ? 'mb-2 w-full' : 'w-4/5'\n )}\n />\n ))}\n </CardContent>\n {skeletonHasFooter && (\n <CardFooter>\n <View className=\"h-9 w-24 bg-interactive-disabled rounded\" />\n </CardFooter>\n )}\n </>\n ) : (\n children\n )\n\n const baseClassName = cn(\n 'rounded-lg overflow-hidden relative',\n // Apply variant styles, but only use default border color if no custom borderColor\n variant === 'outline'\n ? borderColor\n ? 'border-2' // Just the border width, color via style\n : variantStyles[variant] // Full variant styles including color\n : variantStyles[variant],\n // Remove Tailwind shadow classes - we're using elevation shadows via style prop\n isClickable && 'web:cursor-pointer web:transition-all web:duration-150',\n isClickable && 'web:hover:-translate-y-0.5 active:scale-[0.99]',\n isLoading && 'pointer-events-none animate-pulse',\n className\n )\n\n // Accent variant: left stripe via borderLeft override\n const accentStyle = useMemo(() => variant === 'accent' ? {\n borderLeftWidth: accentWidth ?? 3,\n borderLeftColor: accentColor ?? 'var(--color-brand-primary)',\n } : {}, [variant, accentWidth, accentColor])\n\n // Merge styles: background color from elevation + shadow style + custom colors + custom style\n const mergedStyle = useMemo(() => {\n const elevationStyle: Record<string, any> = {\n backgroundColor: bgColor || surfaceColor,\n borderRadius: 8,\n overflow: 'hidden' as const,\n ...shadowStyle,\n ...accentStyle,\n }\n\n // Add custom border color if provided\n if (borderColor) {\n elevationStyle.borderColor = borderColor\n }\n\n if (!style) return elevationStyle\n // User style takes precedence over elevation defaults (e.g. maxWidth, custom bg)\n return [elevationStyle, style]\n }, [style, surfaceColor, shadowStyle, borderColor, bgColor, accentStyle])\n\n if (isClickable) {\n return (\n <Pressable\n onPress={onPress}\n onHoverIn={() => setIsHovered(true)}\n onHoverOut={() => setIsHovered(false)}\n accessibilityRole=\"button\"\n className={baseClassName}\n style={mergedStyle}\n {...props}\n >\n {cardContent}\n </Pressable>\n )\n }\n\n return (\n <View className={baseClassName} style={mergedStyle} {...props}>\n {cardContent}\n </View>\n )\n}\n\nexport interface CardHeaderProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Header section of a Card.\n */\nexport function CardHeader({ children, className }: CardHeaderProps) {\n return (\n <View className={cn('px-6 py-6', className)}>\n {children}\n </View>\n )\n}\n\nexport interface CardTitleProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Title for CardHeader.\n */\nexport function CardTitle({ children, className }: CardTitleProps) {\n return (\n <Text\n accessibilityRole=\"header\"\n className={cn('text-lg font-semibold text-text-primary font-heading', className)}\n >\n {children}\n </Text>\n )\n}\n\nexport interface CardDescriptionProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Description for CardHeader.\n */\nexport function CardDescription({ children, className }: CardDescriptionProps) {\n return (\n <Text className={cn('mt-1.5 text-sm text-text-secondary', className)}>\n {children}\n </Text>\n )\n}\n\nexport interface CardContentProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Content section of a Card.\n */\nexport function CardContent({ children, className }: CardContentProps) {\n return (\n <View className={cn('px-6 py-4', className)}>\n {children}\n </View>\n )\n}\n\nexport interface CardFooterProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Footer section of a Card.\n */\nexport function CardFooter({ children, className }: CardFooterProps) {\n return (\n <View className={cn('px-6 py-4 flex-row items-center gap-2', className)}>\n {children}\n </View>\n )\n}\n\nexport interface CardSkeletonProps {\n /** Whether to show header skeleton */\n hasHeader?: boolean\n /** Whether to show footer skeleton */\n hasFooter?: boolean\n /** Number of content lines */\n contentLines?: number\n /** Additional className */\n className?: string\n}\n\n/**\n * Skeleton placeholder for Card loading state.\n */\nexport function CardSkeleton({\n hasHeader = true,\n hasFooter = false,\n contentLines = 3,\n className,\n}: CardSkeletonProps) {\n return (\n <Card variant=\"elevated\" elevation={2} className={cn('animate-pulse', className)}>\n {hasHeader && (\n <CardHeader>\n <View className=\"h-5 w-1/3 bg-interactive-disabled rounded\" />\n <View className=\"mt-2 h-4 w-2/3 bg-interactive-disabled rounded\" />\n </CardHeader>\n )}\n <CardContent>\n {Array.from({ length: contentLines }).map((_, i) => (\n <View\n key={i}\n className={cn(\n 'h-4 bg-interactive-disabled rounded',\n i < contentLines - 1 ? 'mb-2 w-full' : 'w-4/5'\n )}\n />\n ))}\n </CardContent>\n {hasFooter && (\n <CardFooter>\n <View className=\"h-9 w-24 bg-interactive-disabled rounded\" />\n </CardFooter>\n )}\n </Card>\n )\n}\n\nexport interface CardInsetProps extends ViewProps {\n /** Elevation level for inset (-2=deep, -1=shallow) */\n elevation?: -2 | -1\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Inset element within a Card. Applies pressed neumorphic shadow\n * to create a sunken/recessed appearance.\n * \n * @example\n * <Card elevation={2}>\n * <CardContent>\n * <CardInset elevation={-1}>\n * <Text>This content appears inset/sunken</Text>\n * </CardInset>\n * </CardContent>\n * </Card>\n */\nexport function CardInset({\n elevation = -1,\n className,\n children,\n style,\n ...props\n}: CardInsetProps) {\n const theme = useTheme()\n const baseColor = useMemo(() => getBaseSurfaceColor(theme), [theme])\n const surfaceColor = useMemo(() => {\n return getElevationSurface(baseColor, elevation as ElevationLevel, theme)\n }, [baseColor, elevation, theme])\n const shadowStyle = useMemo(() => {\n return getElevationShadow(baseColor, elevation as ElevationLevel, theme)\n }, [baseColor, elevation, theme])\n \n return (\n <View\n className={cn('rounded', className)}\n style={[{ backgroundColor: surfaceColor }, shadowStyle, style]}\n {...props}\n >\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type IndicatorSize = 'xs' | 'sm' | 'md' | 'lg'\nexport type IndicatorColor = 'default' | 'primary' | 'success' | 'error' | 'warning' | 'info'\n\nexport interface IndicatorProps extends ViewProps {\n /** Dot size */\n size?: IndicatorSize\n /** Semantic color */\n color?: IndicatorColor\n /** Custom hex color (overrides color prop) */\n customColor?: string\n /** Add a glow shadow effect */\n glow?: boolean\n /** Add a ring border */\n ring?: boolean\n /** Additional className */\n className?: string\n}\n\nconst sizeStyles: Record<IndicatorSize, string> = {\n xs: 'w-1 h-1',\n sm: 'w-1.5 h-1.5',\n md: 'w-2 h-2',\n lg: 'w-2.5 h-2.5',\n}\n\nconst colorStyles: Record<IndicatorColor, string> = {\n default: 'bg-text-tertiary',\n primary: 'bg-brand-primary',\n success: 'bg-status-success',\n error: 'bg-status-error',\n warning: 'bg-status-warning',\n info: 'bg-status-info',\n}\n\nexport function Indicator({\n size = 'sm',\n color = 'default',\n customColor,\n glow = false,\n ring = false,\n className,\n style,\n ...props\n}: IndicatorProps) {\n const dynamicStyle = {\n ...(typeof style === 'object' ? style : {}),\n ...(customColor ? { backgroundColor: customColor } : {}),\n ...(glow && !customColor ? {} : {}),\n ...(glow && customColor ? { boxShadow: `0 0 6px ${customColor}` } : {}),\n }\n\n return (\n <View\n className={cn(\n 'rounded-full shrink-0',\n sizeStyles[size],\n !customColor && colorStyles[color],\n ring && 'border-2 border-background-base',\n glow && !customColor && color === 'success' && 'shadow-[0_0_6px_rgba(20,184,166,0.6)]',\n glow && !customColor && color === 'error' && 'shadow-[0_0_6px_rgba(239,68,68,0.6)]',\n glow && !customColor && color === 'warning' && 'shadow-[0_0_6px_rgba(245,158,11,0.6)]',\n glow && !customColor && color === 'primary' && 'shadow-[0_0_6px_rgba(255,121,0,0.6)]',\n className\n )}\n style={Object.keys(dynamicStyle).length > 0 ? dynamicStyle : style}\n {...props}\n />\n )\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\nimport { Indicator, type IndicatorColor } from '../indicator'\n\nexport type BadgeVariant = 'solid' | 'subtle' | 'outline'\nexport type BadgeColor = 'default' | 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info'\nexport type BadgeSize = 'sm' | 'md' | 'lg'\n\nexport interface BadgeProps extends ViewProps {\n /** Visual variant */\n variant?: BadgeVariant\n /** Color scheme */\n color?: BadgeColor\n /** Size */\n size?: BadgeSize\n /** Show a leading indicator dot */\n dot?: boolean\n /** Color for the dot indicator (defaults to match badge color) */\n dotColor?: IndicatorColor\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst variantColorStyles: Record<BadgeVariant, Record<BadgeColor, string>> = {\n solid: {\n default: 'bg-border-strong text-text-inverse',\n primary: 'bg-brand-primary text-text-inverse',\n secondary: 'bg-brand-secondary text-text-inverse',\n success: 'bg-status-success text-text-inverse',\n error: 'bg-status-error text-text-inverse',\n warning: 'bg-status-warning text-text-inverse',\n info: 'bg-status-info text-text-inverse',\n },\n subtle: {\n default: 'bg-surface-raised text-text-secondary',\n primary: 'bg-brand-primary-subtle text-brand-primary',\n secondary: 'bg-brand-secondary-subtle text-brand-secondary',\n success: 'bg-status-success-subtle text-status-success',\n error: 'bg-status-error-subtle text-status-error',\n warning: 'bg-status-warning-subtle text-status-warning',\n info: 'bg-status-info-subtle text-status-info',\n },\n outline: {\n default: 'border border-border-strong text-text-secondary',\n primary: 'border border-brand-primary text-brand-primary',\n secondary: 'border border-brand-secondary text-brand-secondary',\n success: 'border border-status-success text-status-success',\n error: 'border border-status-error text-status-error',\n warning: 'border border-status-warning text-status-warning',\n info: 'border border-status-info text-status-info',\n },\n}\n\nconst sizeStyles: Record<BadgeSize, string> = {\n sm: 'px-1.5 py-0.5 text-xs',\n md: 'px-2 py-0.5 text-xs',\n lg: 'px-2.5 py-1 text-sm',\n}\n\n/**\n * Badge component for status indicators and labels.\n *\n * @example\n * <Badge color=\"success\">Active</Badge>\n * <Badge variant=\"outline\" color=\"warning\">Pending</Badge>\n */\nexport function Badge({\n variant = 'subtle',\n color = 'default',\n size = 'md',\n dot,\n dotColor,\n className,\n children,\n ...props\n}: BadgeProps) {\n return (\n <View\n className={cn(\n 'inline-flex items-center justify-center rounded-full font-medium',\n variantColorStyles[variant][color],\n sizeStyles[size],\n className\n )}\n {...props}\n >\n {dot && (\n <Indicator\n size=\"xs\"\n color={dotColor ?? (color === 'default' || color === 'secondary' ? 'default' : color as IndicatorColor)}\n className=\"mr-0.5\"\n />\n )}\n {typeof children === 'string' ? (\n <Text className=\"text-inherit font-medium\">{children}</Text>\n ) : (\n children\n )}\n </View>\n )\n}\n\nexport interface BadgeTextProps {\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Text component for Badge content.\n */\nexport function BadgeText({ children, className }: BadgeTextProps) {\n return (\n <Text className={cn('text-inherit font-medium', className)}>\n {children}\n </Text>\n )\n}\n","import React from 'react'\nimport { ActivityIndicator, View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg' | 'xl'\nexport type SpinnerColor = 'primary' | 'secondary' | 'white' | 'default'\n\nexport interface SpinnerProps extends ViewProps {\n /** Spinner size */\n size?: SpinnerSize\n /** Color scheme */\n color?: SpinnerColor\n /** Accessibility label */\n label?: string\n /** Additional className */\n className?: string\n}\n\nconst sizeMap: Record<SpinnerSize, 'small' | 'large'> = {\n sm: 'small',\n md: 'small',\n lg: 'large',\n xl: 'large',\n}\n\nconst colorMap: Record<SpinnerColor, string> = {\n primary: '#5048E5',\n secondary: '#10B981',\n white: '#FFFFFF',\n default: '#6B7280',\n}\n\nconst containerSizes: Record<SpinnerSize, string> = {\n sm: 'w-4 h-4',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n xl: 'w-12 h-12',\n}\n\n/**\n * Spinner component for loading states.\n *\n * @example\n * <Spinner size=\"md\" color=\"primary\" />\n *\n * // In a button\n * <Button isLoading>\n * <Spinner size=\"sm\" color=\"white\" />\n * <ButtonText>Loading...</ButtonText>\n * </Button>\n */\nexport function Spinner({\n size = 'md',\n color = 'primary',\n label = 'Loading',\n className,\n ...props\n}: SpinnerProps) {\n return (\n <View\n accessibilityRole=\"progressbar\"\n accessibilityLabel={label}\n className={cn('items-center justify-center', containerSizes[size], className)}\n {...props}\n >\n <ActivityIndicator\n size={sizeMap[size]}\n color={colorMap[color]}\n />\n </View>\n )\n}\n","const AVATAR_COLORS = [\n '#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7', '#DDA0DD', '#98D8C8'\n]\n\nexport function avatarColor(name: string): string {\n let hash = 0\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash)\n }\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length]\n}\n\nexport function getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/)\n if (parts.length === 0) return '?'\n if (parts.length === 1) return parts[0][0]?.toUpperCase() ?? '?'\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase()\n}\n\nexport { AVATAR_COLORS }\n","import React from 'react'\nimport { View, Text, Image, type ViewProps, type ImageSourcePropType } from 'react-native'\nimport { cn } from '../../../utils/cn'\nimport { avatarColor, getInitials } from '../../../utils/avatar-color'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nexport interface AvatarProps extends ViewProps {\n /** Avatar size */\n size?: AvatarSize\n /** Image source */\n source?: ImageSourcePropType\n /** Fallback text (usually initials) */\n fallback?: string\n /** Alt text for accessibility */\n alt?: string\n /** Generate background color and initials from a name */\n colorFromName?: string\n /** Additional className */\n className?: string\n}\n\nconst sizeStyles: Record<AvatarSize, { container: string; text: string; image: string }> = {\n xs: { container: 'w-6 h-6', text: 'text-xs', image: 'w-6 h-6' },\n sm: { container: 'w-8 h-8', text: 'text-xs', image: 'w-8 h-8' },\n md: { container: 'w-10 h-10', text: 'text-sm', image: 'w-10 h-10' },\n lg: { container: 'w-12 h-12', text: 'text-base', image: 'w-12 h-12' },\n xl: { container: 'w-16 h-16', text: 'text-lg', image: 'w-16 h-16' },\n '2xl': { container: 'w-20 h-20', text: 'text-xl', image: 'w-20 h-20' },\n}\n\n/**\n * Avatar component for user/entity representation.\n *\n * @example\n * // With image\n * <Avatar source={{ uri: 'https://example.com/avatar.jpg' }} alt=\"User\" />\n *\n * // With fallback initials\n * <Avatar fallback=\"JD\" />\n *\n * // With badge\n * <AvatarGroup>\n * <Avatar source={source1} />\n * <Avatar source={source2} />\n * <AvatarBadge />\n * </AvatarGroup>\n */\nexport function Avatar({\n size = 'md',\n source,\n fallback,\n alt,\n colorFromName,\n className,\n ...props\n}: AvatarProps) {\n const styles = sizeStyles[size]\n const hasImage = source !== undefined\n\n const resolvedFallback = fallback ?? (colorFromName ? getInitials(colorFromName) : undefined)\n const nameColor = colorFromName ? avatarColor(colorFromName) : undefined\n\n return (\n <View\n accessibilityRole=\"image\"\n accessibilityLabel={alt || resolvedFallback || 'Avatar'}\n className={cn(\n 'items-center justify-center rounded-full overflow-hidden',\n !nameColor && 'bg-border-strong',\n styles.container,\n className\n )}\n style={nameColor ? { backgroundColor: nameColor } : undefined}\n {...props}\n >\n {hasImage ? (\n <Image\n source={source}\n className={cn('rounded-full', styles.image)}\n accessibilityLabel={alt}\n />\n ) : resolvedFallback ? (\n <Text className={cn('font-semibold text-text-inverse', styles.text)}>\n {resolvedFallback}\n </Text>\n ) : (\n <View className=\"w-full h-full bg-surface-raised\" />\n )}\n </View>\n )\n}\n\nexport interface AvatarBadgeProps {\n /** Badge color */\n color?: 'success' | 'error' | 'warning' | 'default'\n /** Additional className */\n className?: string\n}\n\nconst badgeColors: Record<string, string> = {\n success: 'bg-status-success',\n error: 'bg-status-error',\n warning: 'bg-status-warning',\n default: 'bg-border-strong',\n}\n\n/**\n * Status badge for Avatar (e.g., online indicator).\n */\nexport function AvatarBadge({ color = 'success', className }: AvatarBadgeProps) {\n return (\n <View\n className={cn(\n 'absolute bottom-0 right-0 w-3 h-3 rounded-full border-2 border-surface-base',\n badgeColors[color],\n className\n )}\n />\n )\n}\n\nexport interface AvatarGroupProps {\n children: React.ReactNode\n /** Maximum avatars to show before +N indicator */\n max?: number\n /** Size of avatars */\n size?: AvatarSize\n /** Additional className */\n className?: string\n}\n\n/**\n * Group of avatars with stacking effect.\n */\nexport function AvatarGroup({\n children,\n max,\n size = 'md',\n className,\n}: AvatarGroupProps) {\n const childArray = React.Children.toArray(children)\n const visibleChildren = max ? childArray.slice(0, max) : childArray\n const remainingCount = max ? Math.max(0, childArray.length - max) : 0\n\n return (\n <View className={cn('flex-row', className)}>\n {visibleChildren.map((child, index) => (\n <View\n key={index}\n className={cn(\n 'border-2 border-surface-base rounded-full',\n index > 0 && '-ml-2'\n )}\n >\n {React.isValidElement(child)\n ? React.cloneElement(child as React.ReactElement<any>, { size })\n : child}\n </View>\n ))}\n {remainingCount > 0 && (\n <View\n className={cn(\n 'border-2 border-surface-base rounded-full -ml-2',\n 'items-center justify-center bg-surface-raised',\n sizeStyles[size].container\n )}\n >\n <Text className={cn('font-semibold text-text-secondary', sizeStyles[size].text)}>\n +{remainingCount}\n </Text>\n </View>\n )}\n </View>\n )\n}\n","import React from 'react'\nimport { View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\n\nexport interface DividerProps extends ViewProps {\n /** Divider orientation */\n orientation?: DividerOrientation\n /** Additional className */\n className?: string\n}\n\n/**\n * Divider component for visual separation of content.\n *\n * @example\n * <Divider />\n * <Divider orientation=\"vertical\" />\n */\nexport function Divider({\n orientation = 'horizontal',\n className,\n ...props\n}: DividerProps) {\n return (\n <View\n accessibilityRole=\"none\"\n className={cn(\n 'bg-divider',\n orientation === 'horizontal' ? 'h-px w-full' : 'w-px h-full',\n className\n )}\n {...props}\n />\n )\n}\n","import React, { forwardRef } from 'react'\nimport { Pressable, View, Text, type PressableProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type CheckboxSize = 'sm' | 'md' | 'lg'\n\nexport interface CheckboxProps extends Omit<PressableProps, 'children'> {\n /** Whether the checkbox is checked */\n isChecked?: boolean\n /** Whether the checkbox is in indeterminate state */\n isIndeterminate?: boolean\n /** Whether the checkbox is disabled */\n isDisabled?: boolean\n /** Whether the checkbox is invalid */\n isInvalid?: boolean\n /** Checkbox size */\n size?: CheckboxSize\n /** Label text */\n label?: string\n /** Helper text */\n helperText?: string\n /** Value for forms */\n value?: string\n /** Callback when checked state changes */\n onCheckedChange?: (checked: boolean) => void\n /** Additional className */\n className?: string\n}\n\nconst sizeStyles: Record<CheckboxSize, { box: string; icon: string; label: string }> = {\n sm: { box: 'w-4 h-4', icon: 'w-2.5 h-2.5', label: 'text-sm' },\n md: { box: 'w-5 h-5', icon: 'w-3 h-3', label: 'text-base' },\n lg: { box: 'w-6 h-6', icon: 'w-3.5 h-3.5', label: 'text-lg' },\n}\n\n/**\n * Checkbox component for boolean inputs.\n *\n * @example\n * <Checkbox\n * isChecked={checked}\n * onCheckedChange={setChecked}\n * label=\"Accept terms and conditions\"\n * />\n */\nexport const Checkbox = forwardRef<View, CheckboxProps>(function Checkbox(\n {\n isChecked = false,\n isIndeterminate = false,\n isDisabled = false,\n isInvalid = false,\n size = 'md',\n label,\n helperText,\n value,\n onCheckedChange,\n className,\n ...props\n },\n ref\n) {\n const styles = sizeStyles[size]\n\n const handlePress = () => {\n if (!isDisabled) {\n onCheckedChange?.(!isChecked)\n }\n }\n\n return (\n <Pressable\n ref={ref}\n disabled={isDisabled}\n onPress={handlePress}\n accessibilityRole=\"checkbox\"\n accessibilityState={{\n checked: isIndeterminate ? 'mixed' : isChecked,\n disabled: isDisabled,\n }}\n accessibilityLabel={label}\n className={cn(\n 'flex-row items-start gap-2',\n isDisabled && 'opacity-50',\n className\n )}\n {...props}\n >\n <View\n className={cn(\n 'items-center justify-center rounded border-2 transition-colors',\n styles.box,\n isChecked || isIndeterminate\n ? 'bg-brand-primary border-brand-primary'\n : 'bg-transparent border-border-default',\n isInvalid && 'border-status-error',\n !isDisabled && 'web:hover:border-brand-primary'\n )}\n >\n {isChecked && !isIndeterminate && (\n <View className={cn('bg-white rounded-sm', styles.icon)}>\n {/* Checkmark icon - using a simple view as placeholder */}\n <Text className=\"text-brand-primary font-bold text-center leading-none\">✓</Text>\n </View>\n )}\n {isIndeterminate && (\n <View className={cn('bg-white h-0.5 w-2/3 rounded')} />\n )}\n </View>\n\n {(label || helperText) && (\n <View className=\"flex-1\">\n {label && (\n <Text className={cn('text-text-primary font-medium', styles.label)}>\n {label}\n </Text>\n )}\n {helperText && (\n <Text className=\"text-xs text-text-secondary mt-0.5\">\n {helperText}\n </Text>\n )}\n </View>\n )}\n </Pressable>\n )\n})\n\nexport interface CheckboxGroupProps {\n children: React.ReactNode\n /** Label for the group */\n label?: string\n /** Orientation of checkboxes */\n orientation?: 'horizontal' | 'vertical'\n /** Additional className */\n className?: string\n}\n\n/**\n * Container for grouping related checkboxes.\n */\nexport function CheckboxGroup({\n children,\n label,\n orientation = 'vertical',\n className,\n}: CheckboxGroupProps) {\n return (\n <View className={cn('gap-1', className)}>\n {label && (\n <Text className=\"text-sm font-medium text-text-primary mb-2\">\n {label}\n </Text>\n )}\n <View\n className={cn(\n orientation === 'vertical' ? 'flex-col gap-2' : 'flex-row gap-4'\n )}\n >\n {children}\n </View>\n </View>\n )\n}\n","import React, { forwardRef } from 'react'\nimport { Pressable, View, Text, type PressableProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type SwitchSize = 'sm' | 'md' | 'lg'\n\nexport interface SwitchProps extends Omit<PressableProps, 'children'> {\n /** Whether the switch is on */\n isChecked?: boolean\n /** Whether the switch is disabled */\n isDisabled?: boolean\n /** Switch size */\n size?: SwitchSize\n /** Label text */\n label?: string\n /** Label position */\n labelPosition?: 'left' | 'right'\n /** Callback when switch state changes */\n onCheckedChange?: (checked: boolean) => void\n /** Additional className */\n className?: string\n}\n\nconst sizeStyles: Record<SwitchSize, { track: string; thumb: string; translate: string }> = {\n sm: { track: 'w-8 h-4', thumb: 'w-3 h-3', translate: 'translate-x-4' },\n md: { track: 'w-10 h-5', thumb: 'w-4 h-4', translate: 'translate-x-5' },\n lg: { track: 'w-12 h-6', thumb: 'w-5 h-5', translate: 'translate-x-6' },\n}\n\n/**\n * Switch component for toggling boolean values.\n *\n * @example\n * <Switch\n * isChecked={enabled}\n * onCheckedChange={setEnabled}\n * label=\"Enable notifications\"\n * />\n */\nexport const Switch = forwardRef<View, SwitchProps>(function Switch(\n {\n isChecked = false,\n isDisabled = false,\n size = 'md',\n label,\n labelPosition = 'right',\n onCheckedChange,\n className,\n ...props\n },\n ref\n) {\n const styles = sizeStyles[size]\n\n const handlePress = () => {\n if (!isDisabled) {\n onCheckedChange?.(!isChecked)\n }\n }\n\n const switchElement = (\n <View\n className={cn(\n 'rounded-full p-0.5 transition-colors',\n styles.track,\n isChecked ? 'bg-brand-primary' : 'bg-border-strong'\n )}\n >\n <View\n className={cn(\n 'rounded-full bg-white shadow-sm transition-transform',\n styles.thumb,\n isChecked && styles.translate\n )}\n />\n </View>\n )\n\n return (\n <Pressable\n ref={ref}\n disabled={isDisabled}\n onPress={handlePress}\n accessibilityRole=\"switch\"\n accessibilityState={{ checked: isChecked, disabled: isDisabled }}\n accessibilityLabel={label}\n className={cn(\n 'flex-row items-center gap-2',\n isDisabled && 'opacity-50',\n className\n )}\n {...props}\n >\n {label && labelPosition === 'left' && (\n <Text className=\"text-text-primary font-medium\">{label}</Text>\n )}\n {switchElement}\n {label && labelPosition === 'right' && (\n <Text className=\"text-text-primary font-medium\">{label}</Text>\n )}\n </Pressable>\n )\n})\n","import React, { createContext, useContext } from 'react'\nimport { Modal as RNModal, View, Text, Pressable, ScrollView, type ModalProps as RNModalProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type ModalSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full'\nexport type ModalScrollBehavior = 'inside' | 'outside'\n\ninterface ModalContextType {\n onClose?: () => void\n size: ModalSize\n scrollBehavior: ModalScrollBehavior\n}\n\nconst ModalContext = createContext<ModalContextType>({ size: 'md', scrollBehavior: 'outside' })\n\nexport interface ModalProps extends Omit<RNModalProps, 'visible'> {\n /** Whether the modal is open */\n isOpen: boolean\n /** Callback when modal should close */\n onClose?: () => void\n /** Modal size */\n size?: ModalSize\n /** Where scrolling happens: inside modal body or whole modal */\n scrollBehavior?: ModalScrollBehavior\n /** Whether clicking backdrop closes modal */\n closeOnOverlayClick?: boolean\n /** Whether to blur the backdrop */\n backdropBlur?: boolean\n /** Additional className for backdrop */\n backdropClassName?: string\n /** Animation type */\n animationType?: 'none' | 'fade' | 'slide'\n children?: React.ReactNode\n}\n\nconst sizeStyles: Record<ModalSize, string> = {\n xs: 'max-w-xs',\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n full: 'max-w-full m-4',\n}\n\n/**\n * Modal component for dialogs and overlays.\n *\n * @example\n * <Modal isOpen={isOpen} onClose={() => setIsOpen(false)}>\n * <ModalContent>\n * <ModalHeader>\n * <ModalTitle>Modal Title</ModalTitle>\n * <ModalCloseButton />\n * </ModalHeader>\n * <ModalBody>\n * <Text>Modal content</Text>\n * </ModalBody>\n * <ModalFooter>\n * <Button onPress={() => setIsOpen(false)}>Close</Button>\n * </ModalFooter>\n * </ModalContent>\n * </Modal>\n */\nexport function Modal({\n isOpen,\n onClose,\n size = 'md',\n scrollBehavior = 'outside',\n closeOnOverlayClick = true,\n backdropBlur = false,\n backdropClassName,\n animationType = 'fade',\n children,\n ...props\n}: ModalProps) {\n const handleBackdropPress = () => {\n if (closeOnOverlayClick && onClose) {\n onClose()\n }\n }\n\n const backdropContent = (\n <Pressable\n onPress={handleBackdropPress}\n className={cn(\n 'flex-1 items-center justify-center',\n backdropBlur ? 'bg-black/30 web:backdrop-blur-sm' : 'bg-black/50',\n backdropClassName\n )}\n >\n {children}\n </Pressable>\n )\n\n return (\n <ModalContext.Provider value={{ onClose, size, scrollBehavior }}>\n <RNModal\n visible={isOpen}\n transparent\n animationType={animationType}\n onRequestClose={onClose}\n {...props}\n >\n {scrollBehavior === 'outside' ? (\n <ScrollView\n contentContainerStyle={{ flexGrow: 1 }}\n keyboardShouldPersistTaps=\"handled\"\n >\n {backdropContent}\n </ScrollView>\n ) : (\n backdropContent\n )}\n </RNModal>\n </ModalContext.Provider>\n )\n}\n\nexport interface ModalContentProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Container for modal content.\n */\nexport function ModalContent({ children, className }: ModalContentProps) {\n const { size } = useContext(ModalContext)\n\n return (\n <Pressable\n // Prevent backdrop click from propagating\n onPress={(e) => e.stopPropagation()}\n >\n <View\n className={cn(\n 'bg-surface-elevated rounded-lg shadow-xl w-full',\n sizeStyles[size],\n className\n )}\n >\n {children}\n </View>\n </Pressable>\n )\n}\n\nexport interface ModalHeaderProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Header section of modal.\n */\nexport function ModalHeader({ children, className }: ModalHeaderProps) {\n return (\n <View className={cn('flex-row items-center justify-between px-6 py-4 border-b border-divider', className)}>\n {children}\n </View>\n )\n}\n\nexport interface ModalTitleProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Title for modal header.\n */\nexport function ModalTitle({ children, className }: ModalTitleProps) {\n return (\n <Text\n accessibilityRole=\"header\"\n className={cn('text-lg font-semibold text-text-primary font-heading', className)}\n >\n {children}\n </Text>\n )\n}\n\nexport interface ModalCloseButtonProps {\n className?: string\n}\n\n/**\n * Close button for modal header.\n */\nexport function ModalCloseButton({ className }: ModalCloseButtonProps) {\n const { onClose } = useContext(ModalContext)\n\n return (\n <Pressable\n onPress={onClose}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close modal\"\n className={cn(\n 'p-1 rounded-md web:hover:bg-interactive-hover active:bg-interactive-active',\n className\n )}\n >\n <Text className=\"text-text-secondary text-xl leading-none\">×</Text>\n </Pressable>\n )\n}\n\nexport interface ModalBodyProps {\n children?: React.ReactNode\n /** Maximum height for scrollable content (when scrollBehavior=\"inside\") */\n maxHeight?: number\n className?: string\n}\n\n/**\n * Body section of modal.\n */\nexport function ModalBody({ children, maxHeight, className }: ModalBodyProps) {\n const { scrollBehavior } = useContext(ModalContext)\n\n if (scrollBehavior === 'inside') {\n return (\n <ScrollView\n className={cn('px-6 py-4', className)}\n style={maxHeight ? { maxHeight } : undefined}\n showsVerticalScrollIndicator\n >\n {children}\n </ScrollView>\n )\n }\n\n return (\n <View className={cn('px-6 py-4', className)}>\n {children}\n </View>\n )\n}\n\nexport interface ModalFooterProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Footer section of modal.\n */\nexport function ModalFooter({ children, className }: ModalFooterProps) {\n return (\n <View className={cn('flex-row items-center justify-end gap-2 px-6 py-4 border-t border-divider', className)}>\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type SkeletonVariant = 'text' | 'circle' | 'rect' | 'rounded'\nexport type SkeletonAnimation = 'pulse' | 'shimmer' | 'none'\n\nexport interface SkeletonProps extends ViewProps {\n /** Shape variant */\n variant?: SkeletonVariant\n /** Animation type */\n animation?: SkeletonAnimation\n /** Width (number for pixels, string for percentages/other) */\n width?: number | string\n /** Height (number for pixels, string for percentages/other) */\n height?: number | string\n /** Border radius (only for 'rect' variant) */\n borderRadius?: number\n /** Additional className */\n className?: string\n}\n\n/**\n * Skeleton component for loading placeholders.\n *\n * @example\n * // Text skeleton\n * <Skeleton variant=\"text\" width=\"60%\" />\n *\n * // Avatar skeleton\n * <Skeleton variant=\"circle\" width={48} height={48} />\n *\n * // Card skeleton\n * <Skeleton variant=\"rounded\" width=\"100%\" height={200} />\n */\nexport function Skeleton({\n variant = 'text',\n animation = 'pulse',\n width,\n height,\n borderRadius,\n className,\n style,\n ...props\n}: SkeletonProps) {\n const variantStyles = {\n text: 'h-4 rounded',\n circle: 'rounded-full',\n rect: '',\n rounded: 'rounded-lg',\n }\n\n const animationStyles = {\n pulse: 'animate-pulse',\n shimmer: 'animate-shimmer', // Note: requires custom animation in Tailwind config\n none: '',\n }\n\n // For circle variant, if only one dimension is provided, make it square\n let finalWidth = width\n let finalHeight = height\n if (variant === 'circle') {\n if (width && !height) finalHeight = width\n if (height && !width) finalWidth = height\n }\n\n return (\n <View\n accessibilityRole=\"none\"\n accessibilityLabel=\"Loading...\"\n className={cn(\n 'bg-interactive-disabled',\n variantStyles[variant],\n animationStyles[animation],\n className\n )}\n style={[\n {\n ...(finalWidth !== undefined && { width: finalWidth as number }),\n ...(finalHeight !== undefined && { height: finalHeight as number }),\n ...(borderRadius !== undefined && { borderRadius }),\n },\n style,\n ]}\n {...props}\n />\n )\n}\n\n// Convenience components for common patterns\n\nexport interface SkeletonTextProps {\n /** Number of lines */\n lines?: number\n /** Last line width (percentage) */\n lastLineWidth?: string\n /** Gap between lines */\n gap?: number\n /** Animation type */\n animation?: SkeletonAnimation\n className?: string\n}\n\n/**\n * Multi-line text skeleton.\n */\nexport function SkeletonText({\n lines = 3,\n lastLineWidth = '60%',\n gap = 8,\n animation = 'pulse',\n className,\n}: SkeletonTextProps) {\n return (\n <View className={cn('gap-2', className)} style={{ gap }}>\n {Array.from({ length: lines }).map((_, i) => (\n <Skeleton\n key={i}\n variant=\"text\"\n animation={animation}\n width={i === lines - 1 ? lastLineWidth : '100%'}\n />\n ))}\n </View>\n )\n}\n\nexport interface SkeletonCircleProps {\n /** Size in pixels */\n size?: number\n /** Animation type */\n animation?: SkeletonAnimation\n className?: string\n}\n\n/**\n * Circle skeleton for avatars.\n */\nexport function SkeletonCircle({\n size = 40,\n animation = 'pulse',\n className,\n}: SkeletonCircleProps) {\n return (\n <Skeleton\n variant=\"circle\"\n width={size}\n height={size}\n animation={animation}\n className={className}\n />\n )\n}\n\n// Composed skeleton patterns\n\nexport interface SkeletonCardProps {\n /** Show image area */\n hasImage?: boolean\n /** Image height */\n imageHeight?: number\n /** Number of text lines */\n lines?: number\n /** Animation type */\n animation?: SkeletonAnimation\n className?: string\n}\n\n/**\n * Card skeleton pattern.\n */\nexport function SkeletonCard({\n hasImage = true,\n imageHeight = 160,\n lines = 3,\n animation = 'pulse',\n className,\n}: SkeletonCardProps) {\n return (\n <View className={cn('rounded-lg overflow-hidden bg-surface-elevated', className)}>\n {hasImage && (\n <Skeleton\n variant=\"rect\"\n width=\"100%\"\n height={imageHeight}\n animation={animation}\n />\n )}\n <View className=\"p-4 gap-3\">\n <Skeleton variant=\"text\" width=\"70%\" animation={animation} />\n <SkeletonText lines={lines} animation={animation} />\n </View>\n </View>\n )\n}\n\nexport interface SkeletonListItemProps {\n /** Show avatar */\n hasAvatar?: boolean\n /** Avatar size */\n avatarSize?: number\n /** Number of text lines */\n lines?: number\n /** Animation type */\n animation?: SkeletonAnimation\n className?: string\n}\n\n/**\n * List item skeleton pattern.\n */\nexport function SkeletonListItem({\n hasAvatar = true,\n avatarSize = 40,\n lines = 2,\n animation = 'pulse',\n className,\n}: SkeletonListItemProps) {\n return (\n <View className={cn('flex-row items-center gap-3 p-3', className)}>\n {hasAvatar && (\n <SkeletonCircle size={avatarSize} animation={animation} />\n )}\n <View className=\"flex-1\">\n <SkeletonText lines={lines} animation={animation} />\n </View>\n </View>\n )\n}\n","import React, { createContext, useContext, useState } from 'react'\nimport { View, Text, Pressable, ScrollView, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type TabsVariant = 'line' | 'enclosed' | 'soft-rounded'\nexport type TabsOrientation = 'horizontal' | 'vertical'\n\ninterface TabsContextType {\n activeIndex: number\n setActiveIndex: (index: number) => void\n variant: TabsVariant\n orientation: TabsOrientation\n}\n\nconst TabsContext = createContext<TabsContextType>({\n activeIndex: 0,\n setActiveIndex: () => {},\n variant: 'line',\n orientation: 'horizontal',\n})\n\nexport interface TabsProps extends ViewProps {\n /** Currently active tab index */\n defaultIndex?: number\n /** Controlled active index */\n index?: number\n /** Callback when tab changes */\n onChange?: (index: number) => void\n /** Visual variant */\n variant?: TabsVariant\n /** Tab orientation */\n orientation?: TabsOrientation\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Tabs component for tabbed navigation.\n *\n * @example\n * <Tabs defaultIndex={0} onChange={(i) => console.log(i)}>\n * <TabList>\n * <Tab>Tab 1</Tab>\n * <Tab>Tab 2</Tab>\n * <Tab>Tab 3</Tab>\n * </TabList>\n * <TabPanels>\n * <TabPanel>Content 1</TabPanel>\n * <TabPanel>Content 2</TabPanel>\n * <TabPanel>Content 3</TabPanel>\n * </TabPanels>\n * </Tabs>\n */\nexport function Tabs({\n defaultIndex = 0,\n index,\n onChange,\n variant = 'line',\n orientation = 'horizontal',\n className,\n children,\n ...props\n}: TabsProps) {\n const [internalIndex, setInternalIndex] = useState(defaultIndex)\n const activeIndex = index ?? internalIndex\n\n const setActiveIndex = (newIndex: number) => {\n if (index === undefined) {\n setInternalIndex(newIndex)\n }\n onChange?.(newIndex)\n }\n\n return (\n <TabsContext.Provider value={{ activeIndex, setActiveIndex, variant, orientation }}>\n <View\n className={cn(\n orientation === 'vertical' ? 'flex-row' : 'flex-col',\n className\n )}\n {...props}\n >\n {children}\n </View>\n </TabsContext.Provider>\n )\n}\n\nexport interface TabListProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Container for Tab components.\n */\nexport function TabList({ children, className }: TabListProps) {\n const { variant, orientation } = useContext(TabsContext)\n\n const variantStyles = {\n line: orientation === 'horizontal'\n ? 'border-b border-border-default'\n : 'border-r border-border-default',\n enclosed: 'bg-surface-raised rounded-lg p-1',\n 'soft-rounded': 'bg-surface-raised rounded-full p-1',\n }\n\n const content = (\n <View\n className={cn(\n orientation === 'horizontal' ? 'flex-row' : 'flex-col',\n variantStyles[variant],\n className\n )}\n >\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child as React.ReactElement<any>, { index })\n }\n return child\n })}\n </View>\n )\n\n if (orientation === 'horizontal') {\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={{ flexGrow: 1 }}\n >\n {content}\n </ScrollView>\n )\n }\n\n return content\n}\n\nexport interface TabProps {\n /** Tab index (injected by TabList) */\n index?: number\n /** Whether the tab is disabled */\n isDisabled?: boolean\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Individual tab button.\n */\nexport function Tab({\n index = 0,\n isDisabled = false,\n className,\n children,\n}: TabProps) {\n const { activeIndex, setActiveIndex, variant, orientation } = useContext(TabsContext)\n const isActive = activeIndex === index\n\n const baseStyles = 'font-medium text-sm transition-colors'\n\n const variantStyles = {\n line: cn(\n 'px-4 py-2',\n orientation === 'horizontal' ? '-mb-px border-b-2' : '-mr-px border-r-2',\n isActive\n ? 'border-brand-primary text-brand-primary'\n : 'border-transparent text-text-secondary web:hover:text-text-primary'\n ),\n enclosed: cn(\n 'px-4 py-2 rounded-md',\n isActive\n ? 'bg-surface-elevated text-text-primary shadow-sm'\n : 'text-text-secondary web:hover:text-text-primary'\n ),\n 'soft-rounded': cn(\n 'px-4 py-2 rounded-full',\n isActive\n ? 'bg-brand-primary text-white'\n : 'text-text-secondary web:hover:text-text-primary'\n ),\n }\n\n return (\n <Pressable\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: isActive, disabled: isDisabled }}\n disabled={isDisabled}\n onPress={() => setActiveIndex(index)}\n className={cn(\n baseStyles,\n variantStyles[variant],\n isDisabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n >\n <Text\n className={cn(\n 'font-medium',\n isActive\n ? variant === 'soft-rounded'\n ? 'text-white'\n : 'text-text-primary'\n : 'text-text-secondary'\n )}\n >\n {children}\n </Text>\n </Pressable>\n )\n}\n\nexport interface TabPanelsProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Container for TabPanel components.\n */\nexport function TabPanels({ children, className }: TabPanelsProps) {\n const { activeIndex } = useContext(TabsContext)\n\n return (\n <View className={cn('flex-1', className)}>\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && index === activeIndex) {\n return child\n }\n return null\n })}\n </View>\n )\n}\n\nexport interface TabPanelProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Individual tab panel content.\n */\nexport function TabPanel({ children, className }: TabPanelProps) {\n return (\n <View className={cn('py-4', className)}>\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type ChipVariant = 'solid' | 'subtle' | 'outline'\nexport type ChipColor = 'default' | 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info'\nexport type ChipSize = 'sm' | 'md' | 'lg'\n\nexport interface ChipProps extends ViewProps {\n /** Visual variant */\n variant?: ChipVariant\n /** Color scheme */\n color?: ChipColor\n /** Size */\n size?: ChipSize\n /** Left element (icon, avatar) */\n leftElement?: React.ReactNode\n /** Whether the chip is dismissible */\n onDelete?: () => void\n /** Whether the chip is clickable */\n onPress?: () => void\n /** Whether the chip is disabled */\n isDisabled?: boolean\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst colorStyles: Record<ChipColor, Record<ChipVariant, string>> = {\n default: {\n solid: 'bg-neutral-600 text-white',\n subtle: 'bg-neutral-100 text-neutral-700 dark:bg-neutral-800 dark:text-neutral-200',\n outline: 'border border-neutral-300 dark:border-neutral-600 text-neutral-700 dark:text-neutral-200',\n },\n primary: {\n solid: 'bg-brand-primary text-white',\n subtle: 'bg-brand-primary-subtle text-brand-primary',\n outline: 'border border-brand-primary text-brand-primary',\n },\n secondary: {\n solid: 'bg-brand-secondary text-white',\n subtle: 'bg-brand-secondary-subtle text-brand-secondary',\n outline: 'border border-brand-secondary text-brand-secondary',\n },\n success: {\n solid: 'bg-status-success text-white',\n subtle: 'bg-status-success-subtle text-status-success',\n outline: 'border border-status-success text-status-success',\n },\n error: {\n solid: 'bg-status-error text-white',\n subtle: 'bg-status-error-subtle text-status-error',\n outline: 'border border-status-error text-status-error',\n },\n warning: {\n solid: 'bg-status-warning text-white',\n subtle: 'bg-status-warning-subtle text-status-warning',\n outline: 'border border-status-warning text-status-warning',\n },\n info: {\n solid: 'bg-status-info text-white',\n subtle: 'bg-status-info-subtle text-status-info',\n outline: 'border border-status-info text-status-info',\n },\n}\n\nconst sizeStyles: Record<ChipSize, { container: string; text: string; deleteButton: string }> = {\n sm: { container: 'px-2 py-0.5 rounded', text: 'text-xs', deleteButton: 'ml-1 -mr-0.5' },\n md: { container: 'px-3 py-1 rounded-md', text: 'text-sm', deleteButton: 'ml-1.5 -mr-1' },\n lg: { container: 'px-4 py-1.5 rounded-md', text: 'text-base', deleteButton: 'ml-2 -mr-1' },\n}\n\n/**\n * Chip component for tags, labels, and filters.\n *\n * @example\n * <Chip>Default</Chip>\n * <Chip color=\"primary\" variant=\"subtle\">Primary Subtle</Chip>\n * <Chip onDelete={() => {}}>Dismissible</Chip>\n * <Chip onPress={() => {}}>Clickable</Chip>\n */\nexport function Chip({\n variant = 'subtle',\n color = 'default',\n size = 'md',\n leftElement,\n onDelete,\n onPress,\n isDisabled = false,\n className,\n children,\n ...props\n}: ChipProps) {\n const sizes = sizeStyles[size]\n const isClickable = !!onPress\n\n const content = (\n <>\n {leftElement && <View className=\"mr-1.5\">{leftElement}</View>}\n <Text className={cn('font-medium', sizes.text)}>\n {children}\n </Text>\n {onDelete && (\n <Pressable\n onPress={(e) => {\n e.stopPropagation?.()\n onDelete()\n }}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Remove\"\n disabled={isDisabled}\n className={cn(\n sizes.deleteButton,\n 'rounded-full p-0.5 web:hover:bg-black/10 active:bg-black/20'\n )}\n >\n <Text className=\"text-xs leading-none\">×</Text>\n </Pressable>\n )}\n </>\n )\n\n const baseClassName = cn(\n 'flex-row items-center',\n sizes.container,\n colorStyles[color][variant],\n isClickable && 'web:cursor-pointer web:hover:opacity-80 active:opacity-70',\n isDisabled && 'opacity-50 cursor-not-allowed',\n className\n )\n\n if (isClickable) {\n return (\n <Pressable\n onPress={onPress}\n disabled={isDisabled}\n accessibilityRole=\"button\"\n className={baseClassName}\n {...props}\n >\n {content}\n </Pressable>\n )\n }\n\n return (\n <View className={baseClassName} {...props}>\n {content}\n </View>\n )\n}\n","import React from 'react'\nimport { Text, Pressable, type TextProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type LinkUnderline = 'always' | 'hover' | 'none'\nexport type LinkColor = 'default' | 'primary' | 'secondary' | 'inherit'\n\nexport interface LinkProps extends Omit<TextProps, 'onPress'> {\n /** URL to navigate to (for accessibility) */\n href?: string\n /** Underline behavior */\n underline?: LinkUnderline\n /** Link color */\n color?: LinkColor\n /** Whether the link opens in a new tab/window */\n isExternal?: boolean\n /** Press handler */\n onPress?: () => void\n /** Whether the link is disabled */\n isDisabled?: boolean\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst colorStyles: Record<LinkColor, string> = {\n default: 'text-text-link',\n primary: 'text-brand-primary',\n secondary: 'text-brand-secondary',\n inherit: '',\n}\n\nconst underlineStyles: Record<LinkUnderline, string> = {\n always: 'underline',\n hover: 'no-underline web:hover:underline',\n none: 'no-underline',\n}\n\n/**\n * Link component for navigation.\n *\n * @example\n * <Link href=\"https://example.com\">Visit Site</Link>\n * <Link href=\"https://example.com\" isExternal>External Link ↗</Link>\n * <Link onPress={() => navigate('/page')}>Go to Page</Link>\n */\nexport function Link({\n href,\n underline = 'hover',\n color = 'default',\n isExternal = false,\n onPress,\n isDisabled = false,\n className,\n children,\n ...props\n}: LinkProps) {\n const handlePress = () => {\n if (isDisabled) return\n onPress?.()\n }\n\n return (\n <Pressable\n onPress={handlePress}\n disabled={isDisabled}\n accessibilityRole=\"link\"\n accessibilityHint={isExternal ? 'Opens in new window' : undefined}\n >\n <Text\n className={cn(\n 'font-medium',\n colorStyles[color],\n underlineStyles[underline],\n isDisabled && 'opacity-50 cursor-not-allowed',\n 'web:cursor-pointer active:opacity-70',\n className\n )}\n {...props}\n >\n {children}\n {isExternal && ' ↗'}\n </Text>\n </Pressable>\n )\n}\n","import React, { useState, useRef, useEffect } from 'react'\nimport { View, Text, Pressable, Platform, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nlet createPortal: typeof import('react-dom').createPortal | undefined\nif (Platform.OS === 'web') {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n createPortal = require('react-dom').createPortal\n } catch {\n // react-dom unavailable\n }\n}\n\ntype PortalPosition = { top: number; left: number; transform: string }\n\nexport type TooltipPlacement =\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'right'\n\nexport interface TooltipProps extends ViewProps {\n /** Plain-text tooltip content */\n label?: string\n /** Rich tooltip content (takes precedence over label) */\n content?: React.ReactNode\n /** Trigger element */\n children: React.ReactNode\n /** Tooltip placement */\n placement?: TooltipPlacement\n /** Delay before showing (ms) */\n openDelay?: number\n /** Delay before hiding (ms) */\n closeDelay?: number\n /** Whether tooltip has an arrow */\n hasArrow?: boolean\n /** Whether tooltip is disabled */\n isDisabled?: boolean\n /** Additional className for tooltip */\n className?: string\n /** Render tooltip via portal to escape overflow:hidden ancestors (web only) */\n usePortal?: boolean\n}\n\n/**\n * Tooltip component for showing additional information on hover/press.\n *\n * Note: On native, tooltips appear on long press. On web, they appear on hover.\n *\n * @example\n * // String-only tooltip\n * <Tooltip label=\"This is a tooltip\">\n * <Button><ButtonText>Hover me</ButtonText></Button>\n * </Tooltip>\n *\n * // Rich content tooltip\n * <Tooltip content={<View><Text>Bold tip</Text><Text>with details</Text></View>}>\n * <Button><ButtonText>Hover me</ButtonText></Button>\n * </Tooltip>\n */\nexport function Tooltip({\n label,\n content,\n children,\n placement = 'top',\n openDelay = 0,\n closeDelay = 0,\n hasArrow = true,\n isDisabled = false,\n className,\n usePortal: usePortalProp = false,\n ...props\n}: TooltipProps) {\n const [isVisible, setIsVisible] = useState(false)\n const [portalPos, setPortalPos] = useState<PortalPosition | null>(null)\n const openTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const triggerRef = useRef<View>(null)\n\n const isPortalMode = usePortalProp && Platform.OS === 'web' && !!createPortal\n\n useEffect(() => {\n if (!isVisible || !isPortalMode || !triggerRef.current) return\n const node = triggerRef.current as unknown as HTMLElement\n const id = requestAnimationFrame(() => {\n const rect = node.getBoundingClientRect()\n const gap = 8\n const cardinal = placement.split('-')[0] as 'top' | 'bottom' | 'left' | 'right'\n\n const positions: Record<string, PortalPosition> = {\n top: {\n top: rect.top - gap,\n left: rect.left + rect.width / 2,\n transform: 'translate(-50%, -100%)',\n },\n bottom: {\n top: rect.bottom + gap,\n left: rect.left + rect.width / 2,\n transform: 'translate(-50%, 0%)',\n },\n left: {\n top: rect.top + rect.height / 2,\n left: rect.left - gap,\n transform: 'translate(-100%, -50%)',\n },\n right: {\n top: rect.top + rect.height / 2,\n left: rect.right + gap,\n transform: 'translate(0%, -50%)',\n },\n }\n\n setPortalPos(positions[cardinal] ?? positions.top)\n })\n return () => cancelAnimationFrame(id)\n }, [isVisible, isPortalMode, placement])\n\n const clearTimeouts = () => {\n if (openTimeoutRef.current) clearTimeout(openTimeoutRef.current)\n if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current)\n }\n\n const show = () => {\n if (isDisabled) return\n clearTimeouts()\n if (openDelay > 0) {\n openTimeoutRef.current = setTimeout(() => setIsVisible(true), openDelay)\n } else {\n setIsVisible(true)\n }\n }\n\n const hide = () => {\n clearTimeouts()\n if (closeDelay > 0) {\n closeTimeoutRef.current = setTimeout(() => setIsVisible(false), closeDelay)\n } else {\n setIsVisible(false)\n }\n }\n\n // Arrow positioning\n const arrowStyles = {\n top: 'bottom-0 left-1/2 -translate-x-1/2 translate-y-full border-l-transparent border-r-transparent border-b-transparent border-t-neutral-800',\n 'top-start': 'bottom-0 left-4 translate-y-full border-l-transparent border-r-transparent border-b-transparent border-t-neutral-800',\n 'top-end': 'bottom-0 right-4 translate-y-full border-l-transparent border-r-transparent border-b-transparent border-t-neutral-800',\n bottom: 'top-0 left-1/2 -translate-x-1/2 -translate-y-full border-l-transparent border-r-transparent border-t-transparent border-b-neutral-800',\n 'bottom-start': 'top-0 left-4 -translate-y-full border-l-transparent border-r-transparent border-t-transparent border-b-neutral-800',\n 'bottom-end': 'top-0 right-4 -translate-y-full border-l-transparent border-r-transparent border-t-transparent border-b-neutral-800',\n left: 'right-0 top-1/2 translate-x-full -translate-y-1/2 border-t-transparent border-b-transparent border-r-transparent border-l-neutral-800',\n right: 'left-0 top-1/2 -translate-x-full -translate-y-1/2 border-t-transparent border-b-transparent border-l-transparent border-r-neutral-800',\n }\n\n // Tooltip positioning\n const tooltipPositionStyles = {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n 'top-start': 'bottom-full left-0 mb-2',\n 'top-end': 'bottom-full right-0 mb-2',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n 'bottom-start': 'top-full left-0 mt-2',\n 'bottom-end': 'top-full right-0 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n }\n\n const tooltipContent = (\n <View className=\"bg-neutral-800 px-3 py-2 rounded-md shadow-lg max-w-xs\">\n {content ?? <Text className=\"text-white text-sm\">{label}</Text>}\n {hasArrow && (\n <View\n className={cn(\n 'absolute w-0 h-0 border-4',\n arrowStyles[placement]\n )}\n />\n )}\n </View>\n )\n\n const renderPortalTooltip = () => {\n if (!isVisible || !isPortalMode || !createPortal) return null\n return createPortal(\n <div\n style={{\n position: 'fixed',\n top: portalPos?.top ?? 0,\n left: portalPos?.left ?? 0,\n transform: portalPos?.transform ?? 'translate(-50%, -100%)',\n zIndex: 10000,\n pointerEvents: 'none',\n }}\n data-testid=\"tooltip-portal\"\n className={className}\n >\n {tooltipContent}\n </div>,\n document.body\n )\n }\n\n return (\n <View className=\"relative\" ref={triggerRef} {...props}>\n <Pressable\n onHoverIn={show}\n onHoverOut={hide}\n onLongPress={show}\n onPressOut={hide}\n delayLongPress={500}\n >\n {children}\n </Pressable>\n\n {isPortalMode\n ? renderPortalTooltip()\n : isVisible && (\n <View\n className={cn(\n 'absolute z-50 web:animate-fade-in',\n tooltipPositionStyles[placement],\n className\n )}\n pointerEvents=\"none\"\n >\n {tooltipContent}\n </View>\n )}\n </View>\n )\n}\n","import React, { useState, createContext, useContext } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface CollapseProps extends ViewProps {\n /** Whether the collapse is initially open */\n defaultIsOpen?: boolean\n /** Controlled open state */\n isOpen?: boolean\n /** Callback when state changes */\n onToggle?: (isOpen: boolean) => void\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\ninterface CollapseContextType {\n isOpen: boolean\n toggle: () => void\n}\n\nconst CollapseContext = createContext<CollapseContextType>({\n isOpen: false,\n toggle: () => {},\n})\n\n/**\n * Collapsible content container.\n *\n * @example\n * <Collapse>\n * <CollapseButton>\n * <Text>Click to expand</Text>\n * </CollapseButton>\n * <CollapseContent>\n * <Text>Hidden content</Text>\n * </CollapseContent>\n * </Collapse>\n */\nexport function Collapse({\n defaultIsOpen = false,\n isOpen: controlledIsOpen,\n onToggle,\n className,\n children,\n ...props\n}: CollapseProps) {\n const [internalIsOpen, setInternalIsOpen] = useState(defaultIsOpen)\n const isOpen = controlledIsOpen ?? internalIsOpen\n\n const toggle = () => {\n const newState = !isOpen\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(newState)\n }\n onToggle?.(newState)\n }\n\n return (\n <CollapseContext.Provider value={{ isOpen, toggle }}>\n <View className={cn('w-full', className)} {...props}>\n {children}\n </View>\n </CollapseContext.Provider>\n )\n}\n\nexport interface CollapseButtonProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Button to toggle collapse state.\n */\nexport function CollapseButton({ children, className }: CollapseButtonProps) {\n const { isOpen, toggle } = useContext(CollapseContext)\n\n return (\n <Pressable\n onPress={toggle}\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: isOpen }}\n className={cn(\n 'flex-row items-center justify-between py-3 px-4',\n 'web:hover:bg-interactive-hover active:bg-interactive-active rounded-lg',\n className\n )}\n >\n {children}\n <Text className={cn('text-text-secondary transition-transform', isOpen && 'rotate-180')}>\n ▼\n </Text>\n </Pressable>\n )\n}\n\nexport interface CollapseContentProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Collapsible content area.\n */\nexport function CollapseContent({ children, className }: CollapseContentProps) {\n const { isOpen } = useContext(CollapseContext)\n\n if (!isOpen) return null\n\n return (\n <View className={cn('overflow-hidden', className)}>\n {children}\n </View>\n )\n}\n\n// Accordion component\n\nexport interface AccordionProps extends ViewProps {\n /** Allow multiple items to be open */\n allowMultiple?: boolean\n /** Default open item indices */\n defaultIndex?: number[]\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\ninterface AccordionContextType {\n openIndices: Set<number>\n toggleIndex: (index: number) => void\n allowMultiple: boolean\n}\n\nconst AccordionContext = createContext<AccordionContextType>({\n openIndices: new Set(),\n toggleIndex: () => {},\n allowMultiple: false,\n})\n\n/**\n * Accordion component for multiple collapsible sections.\n *\n * @example\n * <Accordion>\n * <AccordionItem>\n * <AccordionButton>Section 1</AccordionButton>\n * <AccordionPanel>Content 1</AccordionPanel>\n * </AccordionItem>\n * <AccordionItem>\n * <AccordionButton>Section 2</AccordionButton>\n * <AccordionPanel>Content 2</AccordionPanel>\n * </AccordionItem>\n * </Accordion>\n */\nexport function Accordion({\n allowMultiple = false,\n defaultIndex = [],\n className,\n children,\n ...props\n}: AccordionProps) {\n const [openIndices, setOpenIndices] = useState<Set<number>>(new Set(defaultIndex))\n\n const toggleIndex = (index: number) => {\n setOpenIndices((prev) => {\n const newSet = new Set(prev)\n if (newSet.has(index)) {\n newSet.delete(index)\n } else {\n if (!allowMultiple) {\n newSet.clear()\n }\n newSet.add(index)\n }\n return newSet\n })\n }\n\n return (\n <AccordionContext.Provider value={{ openIndices, toggleIndex, allowMultiple }}>\n <View className={cn('w-full divide-y divide-border-default', className)} {...props}>\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child as React.ReactElement<any>, { index })\n }\n return child\n })}\n </View>\n </AccordionContext.Provider>\n )\n}\n\nexport interface AccordionItemProps {\n index?: number\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Individual accordion item.\n */\nexport function AccordionItem({ index = 0, children, className }: AccordionItemProps) {\n const { openIndices, toggleIndex } = useContext(AccordionContext)\n const isOpen = openIndices.has(index)\n\n return (\n <View className={className}>\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child as React.ReactElement<any>, {\n isOpen,\n onToggle: () => toggleIndex(index),\n })\n }\n return child\n })}\n </View>\n )\n}\n\nexport interface AccordionButtonProps {\n isOpen?: boolean\n onToggle?: () => void\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Accordion item toggle button.\n */\nexport function AccordionButton({\n isOpen = false,\n onToggle,\n children,\n className,\n}: AccordionButtonProps) {\n return (\n <Pressable\n onPress={onToggle}\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: isOpen }}\n className={cn(\n 'flex-row items-center justify-between py-4 px-1',\n 'web:hover:bg-interactive-hover active:bg-interactive-active',\n className\n )}\n >\n <Text className=\"text-text-primary font-medium\">{children}</Text>\n <Text className={cn('text-text-secondary transition-transform', isOpen && 'rotate-180')}>\n ▼\n </Text>\n </Pressable>\n )\n}\n\nexport interface AccordionPanelProps {\n isOpen?: boolean\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Accordion item content panel.\n */\nexport function AccordionPanel({ isOpen = false, children, className }: AccordionPanelProps) {\n if (!isOpen) return null\n\n return (\n <View className={cn('pb-4 px-1', className)}>\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface BreadcrumbsProps extends ViewProps {\n /** Custom separator */\n separator?: React.ReactNode\n /** Maximum items to show (with collapse) */\n maxItems?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Breadcrumbs navigation component.\n *\n * @example\n * <Breadcrumbs>\n * <BreadcrumbItem href=\"/\">Home</BreadcrumbItem>\n * <BreadcrumbItem href=\"/products\">Products</BreadcrumbItem>\n * <BreadcrumbItem isCurrentPage>Widget</BreadcrumbItem>\n * </Breadcrumbs>\n */\nexport function Breadcrumbs({\n separator = '/',\n maxItems,\n className,\n children,\n ...props\n}: BreadcrumbsProps) {\n const items = React.Children.toArray(children)\n let displayItems = items\n\n // Handle max items with ellipsis\n if (maxItems && items.length > maxItems) {\n const firstItem = items[0]\n const lastItems = items.slice(-Math.floor(maxItems / 2))\n displayItems = [\n firstItem,\n <BreadcrumbEllipsis key=\"ellipsis\" />,\n ...lastItems,\n ]\n }\n\n return (\n <View\n accessibilityRole=\"none\"\n className={cn('flex-row items-center flex-wrap', className)}\n {...props}\n >\n {displayItems.map((child, index) => (\n <View key={index} className=\"flex-row items-center\">\n {child}\n {index < displayItems.length - 1 && (\n <Text className=\"mx-2 text-text-tertiary text-sm\">\n {separator}\n </Text>\n )}\n </View>\n ))}\n </View>\n )\n}\n\nexport interface BreadcrumbItemProps {\n /** Navigation URL */\n href?: string\n /** Whether this is the current page */\n isCurrentPage?: boolean\n /** Press handler */\n onPress?: () => void\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Individual breadcrumb item.\n */\nexport function BreadcrumbItem({\n href,\n isCurrentPage = false,\n onPress,\n className,\n children,\n}: BreadcrumbItemProps) {\n if (isCurrentPage) {\n return (\n <Text\n accessibilityRole=\"text\"\n aria-current=\"page\"\n className={cn('text-sm font-medium text-text-primary', className)}\n >\n {children}\n </Text>\n )\n }\n\n return (\n <Pressable\n onPress={onPress}\n accessibilityRole=\"link\"\n accessibilityHint={href}\n >\n <Text\n className={cn(\n 'text-sm text-text-secondary',\n 'web:hover:text-text-primary web:hover:underline',\n 'active:opacity-70',\n className\n )}\n >\n {children}\n </Text>\n </Pressable>\n )\n}\n\n/**\n * Ellipsis for collapsed breadcrumbs.\n */\nfunction BreadcrumbEllipsis() {\n return (\n <Text className=\"text-sm text-text-tertiary\">...</Text>\n )\n}\n","import React, { useState, useRef, useCallback, createContext, useContext } from 'react'\nimport { View, Pressable, Modal, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type PopoverPlacement = 'top' | 'bottom' | 'left' | 'right'\n\ninterface PopoverContextType {\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n placement: PopoverPlacement\n triggerMode: 'click' | 'hover'\n handleHoverIn: () => void\n handleHoverOut: () => void\n}\n\nconst PopoverContext = createContext<PopoverContextType>({\n isOpen: false,\n setIsOpen: () => {},\n placement: 'bottom',\n triggerMode: 'click',\n handleHoverIn: () => {},\n handleHoverOut: () => {},\n})\n\nexport interface PopoverProps extends ViewProps {\n /** Placement of the popover */\n placement?: PopoverPlacement\n /** Controlled open state */\n isOpen?: boolean\n /** Callback when open state changes */\n onOpenChange?: (isOpen: boolean) => void\n /** Whether clicking outside closes the popover */\n closeOnClickOutside?: boolean\n /** Trigger mode: 'click' opens on click, 'hover' opens on hover */\n triggerMode?: 'click' | 'hover'\n /** Delay in ms before closing in hover mode (default 150) */\n closeDelay?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Popover component for displaying floating content.\n *\n * @example\n * <Popover>\n * <PopoverTrigger>\n * <Button><ButtonText>Open</ButtonText></Button>\n * </PopoverTrigger>\n * <PopoverContent>\n * <Text>Popover content</Text>\n * </PopoverContent>\n * </Popover>\n */\nexport function Popover({\n placement = 'bottom',\n isOpen: controlledIsOpen,\n onOpenChange,\n closeOnClickOutside = true,\n triggerMode = 'click',\n closeDelay = 150,\n className,\n children,\n ...props\n}: PopoverProps) {\n const [internalIsOpen, setInternalIsOpen] = useState(false)\n const isOpen = controlledIsOpen ?? internalIsOpen\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const setIsOpen = useCallback((open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open)\n }\n onOpenChange?.(open)\n }, [controlledIsOpen, onOpenChange])\n\n const handleHoverIn = useCallback(() => {\n if (triggerMode !== 'hover') return\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current)\n closeTimerRef.current = null\n }\n setIsOpen(true)\n }, [triggerMode, setIsOpen])\n\n const handleHoverOut = useCallback(() => {\n if (triggerMode !== 'hover') return\n closeTimerRef.current = setTimeout(() => {\n setIsOpen(false)\n closeTimerRef.current = null\n }, closeDelay)\n }, [triggerMode, closeDelay, setIsOpen])\n\n return (\n <PopoverContext.Provider\n value={{ isOpen, setIsOpen, placement, triggerMode, handleHoverIn, handleHoverOut }}\n >\n <View className={cn('relative', className)} {...props}>\n {children}\n </View>\n </PopoverContext.Provider>\n )\n}\n\nexport interface PopoverTriggerProps {\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Trigger element for the popover.\n */\nexport function PopoverTrigger({ children, className }: PopoverTriggerProps) {\n const { isOpen, setIsOpen, triggerMode, handleHoverIn, handleHoverOut } =\n useContext(PopoverContext)\n\n const hoverProps =\n triggerMode === 'hover'\n ? {\n onHoverIn: handleHoverIn,\n onHoverOut: handleHoverOut,\n onMouseEnter: handleHoverIn,\n onMouseLeave: handleHoverOut,\n }\n : {}\n\n return (\n <Pressable\n onPress={() => setIsOpen(!isOpen)}\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: isOpen }}\n className={className}\n {...hoverProps}\n >\n {children}\n </Pressable>\n )\n}\n\nexport interface PopoverContentProps {\n children?: React.ReactNode\n className?: string\n}\n\nconst SPACER_STYLES: Record<PopoverPlacement, React.CSSProperties> = {\n top: { left: 0, right: 0, bottom: 0, height: 8, transform: 'translateY(100%)' },\n bottom: { left: 0, right: 0, top: 0, height: 8, transform: 'translateY(-100%)' },\n left: { top: 0, bottom: 0, right: 0, width: 8, transform: 'translateX(100%)' },\n right: { top: 0, bottom: 0, left: 0, width: 8, transform: 'translateX(-100%)' },\n}\n\n/**\n * Content container for the popover.\n */\nexport function PopoverContent({ children, className }: PopoverContentProps) {\n const { isOpen, setIsOpen, placement, triggerMode, handleHoverIn, handleHoverOut } =\n useContext(PopoverContext)\n\n if (!isOpen) return null\n\n const placementStyles = {\n top: 'bottom-full left-0 mb-2',\n bottom: 'top-full left-0 mt-2',\n left: 'right-full top-0 mr-2',\n right: 'left-full top-0 ml-2',\n }\n\n const hoverProps =\n triggerMode === 'hover'\n ? {\n onHoverIn: handleHoverIn,\n onHoverOut: handleHoverOut,\n onMouseEnter: handleHoverIn,\n onMouseLeave: handleHoverOut,\n }\n : {}\n\n return (\n <>\n {/* Backdrop */}\n <Pressable\n onPress={() => setIsOpen(false)}\n className=\"fixed inset-0 z-40\"\n style={{ position: 'absolute' }}\n />\n {/* Content */}\n <View\n className={cn(\n 'absolute z-50 min-w-[200px]',\n 'bg-surface-elevated rounded-lg shadow-lg border border-border-default',\n 'p-4',\n placementStyles[placement],\n className\n )}\n {...hoverProps}\n >\n {triggerMode === 'hover' && (\n <div\n style={{\n position: 'absolute',\n pointerEvents: 'auto',\n background: 'transparent',\n ...SPACER_STYLES[placement],\n }}\n onMouseEnter={handleHoverIn}\n onMouseLeave={handleHoverOut}\n />\n )}\n {children}\n </View>\n </>\n )\n}\n\nexport interface PopoverCloseButtonProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Button to close the popover.\n */\nexport function PopoverCloseButton({ children, className }: PopoverCloseButtonProps) {\n const { setIsOpen } = useContext(PopoverContext)\n\n return (\n <Pressable\n onPress={() => setIsOpen(false)}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close popover\"\n className={cn('p-1', className)}\n >\n {children}\n </Pressable>\n )\n}\n","import React, { useState, createContext, useContext } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\ninterface MenuContextType {\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n closeMenu: () => void\n}\n\nconst MenuContext = createContext<MenuContextType>({\n isOpen: false,\n setIsOpen: () => {},\n closeMenu: () => {},\n})\n\nexport interface MenuProps extends ViewProps {\n /** Controlled open state */\n isOpen?: boolean\n /** Callback when open state changes */\n onOpenChange?: (isOpen: boolean) => void\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Menu component for dropdown menus.\n *\n * @example\n * <Menu>\n * <MenuTrigger>\n * <Button><ButtonText>Options</ButtonText></Button>\n * </MenuTrigger>\n * <MenuList>\n * <MenuItem onPress={() => {}}>Edit</MenuItem>\n * <MenuItem onPress={() => {}}>Delete</MenuItem>\n * <MenuDivider />\n * <MenuItem onPress={() => {}} isDestructive>Remove</MenuItem>\n * </MenuList>\n * </Menu>\n */\nexport function Menu({\n isOpen: controlledIsOpen,\n onOpenChange,\n className,\n children,\n ...props\n}: MenuProps) {\n const [internalIsOpen, setInternalIsOpen] = useState(false)\n const isOpen = controlledIsOpen ?? internalIsOpen\n\n const setIsOpen = (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open)\n }\n onOpenChange?.(open)\n }\n\n const closeMenu = () => setIsOpen(false)\n\n return (\n <MenuContext.Provider value={{ isOpen, setIsOpen, closeMenu }}>\n <View className={cn('relative', className)} {...props}>\n {children}\n </View>\n </MenuContext.Provider>\n )\n}\n\nexport interface MenuTriggerProps {\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Trigger element for the menu.\n */\nexport function MenuTrigger({ children, className }: MenuTriggerProps) {\n const { isOpen, setIsOpen } = useContext(MenuContext)\n\n return (\n <Pressable\n onPress={() => setIsOpen(!isOpen)}\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: isOpen }}\n className={className}\n >\n {children}\n </Pressable>\n )\n}\n\nexport interface MenuListProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Container for menu items.\n */\nexport function MenuList({ children, className }: MenuListProps) {\n const { isOpen, setIsOpen } = useContext(MenuContext)\n\n if (!isOpen) return null\n\n return (\n <>\n {/* Backdrop */}\n <Pressable\n onPress={() => setIsOpen(false)}\n className=\"fixed inset-0 z-40\"\n style={{ position: 'absolute' }}\n />\n {/* Menu */}\n <View\n className={cn(\n 'absolute z-50 top-full left-0 mt-1 min-w-[160px]',\n 'bg-surface-elevated rounded-lg shadow-lg border border-border-default',\n 'py-1 overflow-hidden',\n className\n )}\n accessibilityRole=\"menu\"\n >\n {children}\n </View>\n </>\n )\n}\n\nexport interface MenuItemProps {\n /** Press handler */\n onPress?: () => void\n /** Whether the item is disabled */\n isDisabled?: boolean\n /** Whether the item is destructive (shows in red) */\n isDestructive?: boolean\n /** Icon element */\n icon?: React.ReactNode\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Individual menu item.\n */\nexport function MenuItem({\n onPress,\n isDisabled = false,\n isDestructive = false,\n icon,\n className,\n children,\n}: MenuItemProps) {\n const { closeMenu } = useContext(MenuContext)\n\n const handlePress = () => {\n if (isDisabled) return\n onPress?.()\n closeMenu()\n }\n\n return (\n <Pressable\n onPress={handlePress}\n disabled={isDisabled}\n accessibilityRole=\"menuitem\"\n accessibilityState={{ disabled: isDisabled }}\n className={cn(\n 'flex-row items-center px-4 py-2',\n 'web:hover:bg-interactive-hover active:bg-interactive-active',\n isDisabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n >\n {icon && <View className=\"mr-3\">{icon}</View>}\n <Text\n className={cn(\n 'text-sm',\n isDestructive ? 'text-status-error' : 'text-text-primary'\n )}\n >\n {children}\n </Text>\n </Pressable>\n )\n}\n\nexport interface MenuDividerProps {\n className?: string\n}\n\n/**\n * Divider between menu items.\n */\nexport function MenuDivider({ className }: MenuDividerProps) {\n return <View className={cn('h-px bg-border-default my-1', className)} />\n}\n\nexport interface MenuGroupProps {\n /** Group label */\n label?: string\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Group of menu items with optional label.\n */\nexport function MenuGroup({ label, children, className }: MenuGroupProps) {\n return (\n <View className={className}>\n {label && (\n <Text className=\"px-4 py-2 text-xs font-semibold text-text-secondary uppercase\">\n {label}\n </Text>\n )}\n {children}\n </View>\n )\n}\n","import React, { useState, createContext, useContext } from 'react'\nimport { View, Text, Pressable, ScrollView, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface SelectOption<T = string> {\n value: T\n label: string\n isDisabled?: boolean\n}\n\ninterface SelectContextType<T = string> {\n value: T | T[] | null\n isMulti: boolean\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n selectValue: (val: T) => void\n isSelected: (val: T) => boolean\n}\n\nconst SelectContext = createContext<SelectContextType<any>>({\n value: null,\n isMulti: false,\n isOpen: false,\n setIsOpen: () => {},\n selectValue: () => {},\n isSelected: () => false,\n})\n\nexport interface SelectProps<T = string> extends ViewProps {\n /** Selected value (single mode) */\n value?: T | null\n /** Selected values (multi mode) */\n values?: T[]\n /** Callback when value changes (single mode) */\n onChange?: (value: T | null) => void\n /** Callback when values change (multi mode) */\n onChangeMulti?: (values: T[]) => void\n /** Enable multi-select */\n isMulti?: boolean\n /** Placeholder text */\n placeholder?: string\n /** Whether the select is disabled */\n isDisabled?: boolean\n /** Whether the select has an error */\n isInvalid?: boolean\n /** Options to display */\n options: SelectOption<T>[]\n /** Visual variant — use 'filled' on dark/elevated surfaces */\n variant?: 'default' | 'filled'\n /** Additional className */\n className?: string\n}\n\n/**\n * Select component for single or multi-selection.\n *\n * @example\n * // Single select\n * <Select\n * value={value}\n * onChange={setValue}\n * options={[\n * { value: '1', label: 'Option 1' },\n * { value: '2', label: 'Option 2' },\n * ]}\n * />\n *\n * // Multi select\n * <Select\n * isMulti\n * values={values}\n * onChangeMulti={setValues}\n * options={options}\n * />\n */\nexport function Select<T extends string = string>({\n value,\n values = [],\n onChange,\n onChangeMulti,\n isMulti = false,\n placeholder = 'Select...',\n isDisabled = false,\n isInvalid = false,\n options,\n variant = 'default',\n className,\n ...props\n}: SelectProps<T>) {\n const [isOpen, setIsOpen] = useState(false)\n\n const selectValue = (val: T) => {\n if (isMulti) {\n const newValues = values.includes(val)\n ? values.filter((v) => v !== val)\n : [...values, val]\n onChangeMulti?.(newValues)\n } else {\n onChange?.(val)\n setIsOpen(false)\n }\n }\n\n const isSelected = (val: T) => {\n if (isMulti) {\n return values.includes(val)\n }\n return value === val\n }\n\n const getDisplayValue = () => {\n if (isMulti) {\n if (values.length === 0) return placeholder\n if (values.length === 1) {\n return options.find((o) => o.value === values[0])?.label || placeholder\n }\n return `${values.length} selected`\n }\n if (value === null || value === undefined) return placeholder\n return options.find((o) => o.value === value)?.label || placeholder\n }\n\n const clearValue = () => {\n if (isMulti) {\n onChangeMulti?.([])\n } else {\n onChange?.(null)\n }\n }\n\n const hasValue = isMulti ? values.length > 0 : value !== null && value !== undefined\n\n return (\n <SelectContext.Provider value={{ value, isMulti, isOpen, setIsOpen, selectValue, isSelected }}>\n <View className={cn('relative w-full', className)} {...props}>\n {/* Trigger */}\n <Pressable\n onPress={() => !isDisabled && setIsOpen(!isOpen)}\n disabled={isDisabled}\n accessibilityRole=\"combobox\"\n accessibilityState={{ expanded: isOpen, disabled: isDisabled }}\n className={cn(\n 'flex-row items-center justify-between px-4 py-2.5 rounded-md border',\n variant === 'filled' ? 'bg-black/30' : 'bg-surface-base',\n isInvalid\n ? 'border-border-input-error'\n : variant === 'filled'\n ? 'border-border-subtle'\n : 'border-border-input',\n !isDisabled && !isInvalid && 'web:hover:border-border-input-hover',\n isOpen && 'border-border-input-focus',\n isDisabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <Text\n className={cn(\n 'flex-1',\n hasValue ? 'text-text-primary' : 'text-text-tertiary'\n )}\n >\n {getDisplayValue()}\n </Text>\n <View className=\"flex-row items-center gap-2\">\n {hasValue && (\n <Pressable\n onPress={(e) => {\n e.stopPropagation?.()\n clearValue()\n }}\n className=\"p-1\"\n >\n <Text className=\"text-text-secondary text-xs\">×</Text>\n </Pressable>\n )}\n <Text className={cn('text-text-secondary', isOpen && 'rotate-180')}>▼</Text>\n </View>\n </Pressable>\n\n {/* Dropdown */}\n {isOpen && (\n <>\n <Pressable\n onPress={() => setIsOpen(false)}\n className=\"fixed inset-0 z-40\"\n style={{ position: 'absolute' }}\n />\n <View\n className={cn(\n 'absolute z-50 top-full left-0 right-0 mt-1',\n 'bg-surface-elevated rounded-md shadow-lg border border-border-default',\n 'max-h-60 overflow-hidden'\n )}\n >\n <ScrollView className=\"py-1\">\n {options.map((option) => (\n <SelectOption key={option.value} option={option} />\n ))}\n </ScrollView>\n </View>\n </>\n )}\n </View>\n </SelectContext.Provider>\n )\n}\n\ninterface SelectOptionComponentProps<T> {\n option: SelectOption<T>\n}\n\nfunction SelectOption<T>({ option }: SelectOptionComponentProps<T>) {\n const { selectValue, isSelected, isMulti } = useContext(SelectContext)\n const selected = isSelected(option.value)\n\n return (\n <Pressable\n onPress={() => !option.isDisabled && selectValue(option.value)}\n disabled={option.isDisabled}\n accessibilityRole={isMulti ? 'checkbox' : ('option' as any)}\n accessibilityState={{ selected, disabled: option.isDisabled }}\n className={cn(\n 'flex-row items-center px-4 py-2',\n 'web:hover:bg-interactive-hover active:bg-interactive-active',\n selected && 'bg-interactive-selected',\n option.isDisabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n {isMulti && (\n <View\n className={cn(\n 'w-4 h-4 mr-3 rounded border',\n selected ? 'bg-brand-primary border-brand-primary' : 'border-border-strong'\n )}\n >\n {selected && <Text className=\"text-white text-xs text-center\">✓</Text>}\n </View>\n )}\n <Text className={cn('text-sm', selected && !isMulti ? 'text-brand-primary font-medium' : 'text-text-primary')}>\n {option.label}\n </Text>\n </Pressable>\n )\n}\n","import React, { useState, useCallback, createContext, useContext } from 'react'\nimport { View, Text, Pressable, type ViewProps, StyleSheet, Platform } from 'react-native'\nimport { cn } from '../../../utils/cn'\nimport { neumorphicShadows, getHoverColors } from '../../../theme'\n\nexport type ToolbarButtonVariant = 'default' | 'neumorphic'\nexport type ToolbarButtonSize = 'sm' | 'md' | 'lg'\n\ninterface ToolbarButtonContextType {\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n}\n\nconst ToolbarButtonContext = createContext<ToolbarButtonContextType>({\n isOpen: false,\n setIsOpen: () => {},\n})\n\nexport interface ToolbarButtonProps extends ViewProps {\n /** Button label */\n label: string\n /** Icon component */\n icon?: React.ReactNode\n /** \n * Whether the button is in active/selected state.\n * - `true`: pressed/active appearance (darker, white text, orange icon)\n * - `undefined`: pressed appearance (darker, white text/icon)\n * - `false`: raised/inactive appearance (lighter, gray text/icon)\n */\n isActive?: boolean\n /** Whether the button is disabled */\n isDisabled?: boolean\n /** Size of the button */\n size?: ToolbarButtonSize\n /** Visual variant */\n variant?: ToolbarButtonVariant\n /** Tooltip text (shown when label is hidden) */\n tooltip?: string\n /** Whether to show label (false = icon only) */\n showLabel?: boolean\n /** Press handler */\n onPress?: () => void\n /** Menu content (renders in popover) */\n menuContent?: React.ReactNode\n /** Additional className */\n className?: string\n}\n\n// Base button color\nconst BUTTON_BG = '#3C3C3C'\nconst MENU_BG = '#2C2C2C'\n\n// Calculate hover colors using color math\nconst hoverColors = getHoverColors(BUTTON_BG, 'medium')\n\n// Size style maps\nconst sizeStyles: Record<ToolbarButtonSize, string> = {\n sm: 'px-2 py-1 min-h-[26px]',\n md: 'px-2.5 py-1 min-h-[30px]',\n lg: 'px-3 py-1.5 min-h-[36px]',\n}\n\nconst textSizeStyles: Record<ToolbarButtonSize, string> = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n}\n\n/**\n * ToolbarButton component for toolbar actions with toggle state support.\n *\n * Features:\n * - Neumorphic styling with inset shadows for pressed/raised 3D effect\n * - Active (pressed) state is the default visual appearance\n * - Set isActive={false} explicitly for the raised/inactive appearance\n * - Orange accent color on icon when isActive={true}\n * - Hover states that lighten background and remove shadows\n *\n * @example\n * // Toggle button - orange icon when active\n * <ToolbarButton\n * label=\"Settings\"\n * icon={<SettingsIcon />}\n * isActive={isSettingsOpen}\n * onPress={() => setIsSettingsOpen(!isSettingsOpen)}\n * />\n *\n * @example\n * // Explicitly inactive (raised appearance)\n * <ToolbarButton\n * label=\"Filter\"\n * icon={<FilterIcon />}\n * isActive={false}\n * />\n */\nexport function ToolbarButton({\n label,\n icon,\n isActive,\n isDisabled = false,\n size = 'md',\n variant = 'neumorphic',\n tooltip,\n showLabel = true,\n onPress,\n menuContent,\n className,\n children,\n ...props\n}: ToolbarButtonProps) {\n const [isOpen, setIsOpen] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n\n const handlePress = useCallback(() => {\n if (isDisabled) return\n if (menuContent) {\n setIsOpen((prev) => !prev)\n }\n onPress?.()\n }, [isDisabled, menuContent, onPress])\n\n const handleClose = useCallback(() => {\n setIsOpen(false)\n }, [])\n\n // Match original logic: active !== false means \"active\" (sunken) appearance\n const selected = isActive === undefined ? isOpen : isActive\n const showActive = isActive !== false\n\n // Determine icon color based on state\n const getIconColor = () => {\n if (isActive === true) return '#FF7900' // brand-primary\n return showActive ? '#FFFFFF' : '#D1D1D1'\n }\n\n // Get shadow and background styles for neumorphic variant\n const getNeumorphicStyle = () => {\n if (isDisabled) {\n return styles.disabledBg\n }\n \n const shadows = neumorphicShadows.charcoal\n \n if (showActive) {\n // Active = pressed/sunken appearance\n return {\n backgroundColor: isHovered ? hoverColors.pressed : BUTTON_BG,\n ...(isHovered ? shadows.pressedHover.subtle : shadows.pressed.subtle),\n }\n } else {\n // Inactive = raised/elevated appearance\n return {\n backgroundColor: isHovered ? hoverColors.raised : BUTTON_BG,\n ...(isHovered ? shadows.raisedHover.subtle : shadows.raised.subtle),\n }\n }\n }\n\n return (\n <ToolbarButtonContext.Provider value={{ isOpen, setIsOpen }}>\n <View className=\"relative\" {...props}>\n <Pressable\n onPress={handlePress}\n onHoverIn={() => setIsHovered(true)}\n onHoverOut={() => setIsHovered(false)}\n disabled={isDisabled}\n accessibilityRole=\"button\"\n accessibilityState={{ selected, disabled: isDisabled }}\n accessibilityLabel={label}\n accessibilityHint={tooltip}\n className={cn(\n // Base styles\n 'flex-row items-center justify-center rounded',\n 'web:transition-all web:duration-150 web:cursor-pointer',\n // Size\n sizeStyles[size],\n // Disabled\n isDisabled && 'opacity-40 web:cursor-default web:pointer-events-none',\n className\n )}\n style={[\n variant === 'neumorphic' && getNeumorphicStyle(),\n variant === 'default' && {\n backgroundColor: showActive ? BUTTON_BG : '#6E6E6E',\n },\n ]}\n >\n {icon && (\n <View className=\"w-5 h-5 items-center justify-center\">\n {React.isValidElement(icon) \n ? React.cloneElement(icon as React.ReactElement<any>, {\n size: 20,\n width: 20,\n height: 20,\n color: getIconColor(),\n style: { \n color: getIconColor(),\n width: 20,\n height: 20,\n },\n })\n : icon\n }\n </View>\n )}\n {showLabel && (\n <Text\n className={cn(\n 'font-bold',\n textSizeStyles[size],\n icon && 'ml-2',\n showActive ? 'text-white' : 'text-[#D1D1D1]'\n )}\n numberOfLines={1}\n >\n {label}\n </Text>\n )}\n </Pressable>\n\n {/* Popover Menu */}\n {menuContent && isOpen && (\n <>\n {/* Backdrop */}\n <Pressable\n onPress={handleClose}\n style={StyleSheet.absoluteFill}\n className=\"z-40\"\n />\n {/* Menu Content */}\n <View\n className={cn(\n 'absolute z-50 top-full left-0 mt-1',\n 'rounded-lg shadow-lg border border-border-default',\n 'min-w-[150px] overflow-hidden',\n `bg-[${MENU_BG}]`\n )}\n >\n {menuContent}\n </View>\n </>\n )}\n </View>\n </ToolbarButtonContext.Provider>\n )\n}\n\n// Styles that can't be easily expressed in Tailwind\nconst styles = StyleSheet.create({\n // Disabled - flat gray background, no shadows\n disabledBg: {\n backgroundColor: 'rgba(255, 255, 255, 0.12)',\n ...Platform.select({\n web: { boxShadow: 'none' } as any,\n default: { shadowOpacity: 0, elevation: 0 },\n }),\n },\n})\n\nexport interface ToolbarButtonGroupProps extends ViewProps {\n /** Orientation of the button group */\n orientation?: 'horizontal' | 'vertical'\n /** Gap between buttons */\n gap?: 'none' | 'sm' | 'md'\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst gapStyles: Record<string, string> = {\n none: 'gap-0',\n sm: 'gap-1',\n md: 'gap-2',\n}\n\n/**\n * Container for grouping toolbar buttons together.\n */\nexport function ToolbarButtonGroup({\n orientation = 'horizontal',\n gap = 'sm',\n className,\n children,\n ...props\n}: ToolbarButtonGroupProps) {\n return (\n <View\n className={cn(\n orientation === 'horizontal' ? 'flex-row' : 'flex-col',\n gapStyles[gap],\n 'items-center',\n className\n )}\n accessibilityRole=\"toolbar\"\n {...props}\n >\n {children}\n </View>\n )\n}\n\n/**\n * Hook to access toolbar button context (for custom menu content)\n */\nexport function useToolbarButton() {\n return useContext(ToolbarButtonContext)\n}\n","import React, { createContext, useContext } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type RadioSize = 'sm' | 'md' | 'lg'\nexport type RadioColor = 'primary' | 'secondary' | 'success' | 'error'\n\ninterface RadioGroupContextType {\n value: string | null\n onChange: (value: string) => void\n name?: string\n isDisabled?: boolean\n size?: RadioSize\n color?: RadioColor\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextType | null>(null)\n\nexport interface RadioGroupProps extends ViewProps {\n /** Current selected value */\n value: string | null\n /** Callback when value changes */\n onChange: (value: string) => void\n /** Group name for form submission */\n name?: string\n /** Whether all radios are disabled */\n isDisabled?: boolean\n /** Size for all radios */\n size?: RadioSize\n /** Color for all radios */\n color?: RadioColor\n /** Orientation of the group */\n orientation?: 'horizontal' | 'vertical'\n /** Gap between items */\n gap?: 'sm' | 'md' | 'lg'\n /** Label for the group */\n label?: string\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst gapStyles = {\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n}\n\n/**\n * RadioGroup component for grouping radio buttons.\n *\n * @example\n * <RadioGroup value={selected} onChange={setSelected}>\n * <Radio value=\"option1\">Option 1</Radio>\n * <Radio value=\"option2\">Option 2</Radio>\n * <Radio value=\"option3\">Option 3</Radio>\n * </RadioGroup>\n */\nexport function RadioGroup({\n value,\n onChange,\n name,\n isDisabled = false,\n size = 'md',\n color = 'primary',\n orientation = 'vertical',\n gap = 'md',\n label,\n className,\n children,\n ...props\n}: RadioGroupProps) {\n return (\n <RadioGroupContext.Provider value={{ value, onChange, name, isDisabled, size, color }}>\n <View\n className={cn(className)}\n accessibilityRole=\"radiogroup\"\n accessibilityLabel={label}\n {...props}\n >\n {label && (\n <Text className=\"text-sm font-medium text-text-primary mb-2\">\n {label}\n </Text>\n )}\n <View\n className={cn(\n orientation === 'horizontal' ? 'flex-row flex-wrap' : 'flex-col',\n gapStyles[gap]\n )}\n >\n {children}\n </View>\n </View>\n </RadioGroupContext.Provider>\n )\n}\n\nexport interface RadioProps extends ViewProps {\n /** Value of this radio option */\n value: string\n /** Whether this radio is disabled */\n isDisabled?: boolean\n /** Size override */\n size?: RadioSize\n /** Color override */\n color?: RadioColor\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst sizeConfig: Record<RadioSize, { outer: string; inner: string; text: string }> = {\n sm: { outer: 'w-4 h-4', inner: 'w-2 h-2', text: 'text-sm' },\n md: { outer: 'w-5 h-5', inner: 'w-2.5 h-2.5', text: 'text-base' },\n lg: { outer: 'w-6 h-6', inner: 'w-3 h-3', text: 'text-lg' },\n}\n\nconst colorStyles: Record<RadioColor, { checked: string; unchecked: string }> = {\n primary: { checked: 'border-brand-primary bg-brand-primary', unchecked: 'border-border-strong' },\n secondary: { checked: 'border-brand-secondary bg-brand-secondary', unchecked: 'border-border-strong' },\n success: { checked: 'border-status-success bg-status-success', unchecked: 'border-border-strong' },\n error: { checked: 'border-status-error bg-status-error', unchecked: 'border-border-strong' },\n}\n\n/**\n * Radio button component.\n *\n * @example\n * <Radio value=\"option1\">Option 1</Radio>\n */\nexport function Radio({\n value,\n isDisabled: radioDisabled,\n size: radioSize,\n color: radioColor,\n className,\n children,\n ...props\n}: RadioProps) {\n const context = useContext(RadioGroupContext)\n\n if (!context) {\n throw new Error('Radio must be used within a RadioGroup')\n }\n\n const { value: selectedValue, onChange, isDisabled: groupDisabled, size: groupSize, color: groupColor } = context\n\n const isDisabled = radioDisabled ?? groupDisabled ?? false\n const size = radioSize ?? groupSize ?? 'md'\n const color = radioColor ?? groupColor ?? 'primary'\n const isChecked = selectedValue === value\n\n const { outer, inner, text } = sizeConfig[size]\n const { checked, unchecked } = colorStyles[color]\n\n const handlePress = () => {\n if (!isDisabled) {\n onChange(value)\n }\n }\n\n return (\n <Pressable\n onPress={handlePress}\n disabled={isDisabled}\n accessibilityRole=\"radio\"\n accessibilityState={{ checked: isChecked, disabled: isDisabled }}\n className={cn(\n 'flex-row items-center',\n isDisabled && 'opacity-50',\n className\n )}\n {...props}\n >\n {/* Radio circle */}\n <View\n className={cn(\n 'rounded-full border-2 items-center justify-center',\n 'transition-colors duration-150',\n outer,\n isChecked ? checked : unchecked,\n !isDisabled && !isChecked && 'web:hover:border-brand-primary'\n )}\n >\n {/* Inner dot */}\n {isChecked && (\n <View className={cn('rounded-full bg-white', inner)} />\n )}\n </View>\n\n {/* Label */}\n {children && (\n <Text className={cn('ml-2 text-text-primary', text)}>\n {children}\n </Text>\n )}\n </Pressable>\n )\n}\n","import React from 'react'\nimport { View, Text, Pressable, Modal, ScrollView, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type DrawerPlacement = 'left' | 'right' | 'top' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\nexport interface DrawerProps extends ViewProps {\n /** Whether the drawer is open */\n isOpen: boolean\n /** Callback when drawer should close */\n onClose: () => void\n /** Placement of the drawer */\n placement?: DrawerPlacement\n /** Size of the drawer */\n size?: DrawerSize\n /** Whether clicking the backdrop closes the drawer */\n closeOnOverlayClick?: boolean\n /** Whether to show the close button */\n showCloseButton?: boolean\n /** Title for the drawer header */\n title?: string\n /** Additional className for the drawer content */\n className?: string\n children?: React.ReactNode\n}\n\nconst sizeStyles: Record<DrawerPlacement, Record<DrawerSize, string>> = {\n left: {\n sm: 'w-64',\n md: 'w-80',\n lg: 'w-96',\n xl: 'w-[480px]',\n full: 'w-full',\n },\n right: {\n sm: 'w-64',\n md: 'w-80',\n lg: 'w-96',\n xl: 'w-[480px]',\n full: 'w-full',\n },\n top: {\n sm: 'h-32',\n md: 'h-48',\n lg: 'h-64',\n xl: 'h-96',\n full: 'h-full',\n },\n bottom: {\n sm: 'h-32',\n md: 'h-48',\n lg: 'h-64',\n xl: 'h-96',\n full: 'h-full',\n },\n}\n\nconst placementStyles: Record<DrawerPlacement, string> = {\n left: 'left-0 top-0 bottom-0 h-full',\n right: 'right-0 top-0 bottom-0 h-full',\n top: 'top-0 left-0 right-0 w-full',\n bottom: 'bottom-0 left-0 right-0 w-full',\n}\n\n/**\n * Drawer component for side panel overlays.\n *\n * @example\n * <Drawer\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Settings\"\n * placement=\"right\"\n * >\n * <DrawerBody>\n * <Text>Drawer content</Text>\n * </DrawerBody>\n * </Drawer>\n */\nexport function Drawer({\n isOpen,\n onClose,\n placement = 'right',\n size = 'md',\n closeOnOverlayClick = true,\n showCloseButton = true,\n title,\n className,\n children,\n ...props\n}: DrawerProps) {\n if (!isOpen) return null\n\n const handleOverlayPress = () => {\n if (closeOnOverlayClick) {\n onClose()\n }\n }\n\n return (\n <Modal\n visible={isOpen}\n transparent\n animationType=\"fade\"\n onRequestClose={onClose}\n >\n <View className=\"flex-1\">\n {/* Backdrop */}\n <Pressable\n onPress={handleOverlayPress}\n className=\"absolute inset-0 bg-black/50\"\n />\n\n {/* Drawer Panel */}\n <View\n className={cn(\n 'absolute bg-surface-elevated shadow-2xl',\n placementStyles[placement],\n sizeStyles[placement][size],\n className\n )}\n accessibilityRole={'dialog' as any}\n {...props}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <View className=\"flex-row items-center justify-between px-4 py-3 border-b border-border-default\">\n {title && (\n <Text className=\"text-lg font-semibold text-text-primary\">\n {title}\n </Text>\n )}\n {showCloseButton && (\n <Pressable\n onPress={onClose}\n className=\"p-2 -m-2 rounded-full web:hover:bg-interactive-hover\"\n accessibilityLabel=\"Close drawer\"\n >\n <Text className=\"text-text-secondary text-xl\">×</Text>\n </Pressable>\n )}\n </View>\n )}\n\n {/* Content */}\n <View className=\"flex-1\">\n {children}\n </View>\n </View>\n </View>\n </Modal>\n )\n}\n\nexport interface DrawerHeaderProps extends ViewProps {\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Header section for the drawer.\n */\nexport function DrawerHeader({ className, children, ...props }: DrawerHeaderProps) {\n return (\n <View\n className={cn('px-4 py-3 border-b border-border-default', className)}\n {...props}\n >\n {children}\n </View>\n )\n}\n\nexport interface DrawerBodyProps extends ViewProps {\n /** Whether the body should scroll */\n scrollable?: boolean\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Body/content section for the drawer.\n */\nexport function DrawerBody({ scrollable = true, className, children, ...props }: DrawerBodyProps) {\n if (scrollable) {\n return (\n <ScrollView\n className={cn('flex-1 p-4', className)}\n {...props}\n >\n {children}\n </ScrollView>\n )\n }\n\n return (\n <View className={cn('flex-1 p-4', className)} {...props}>\n {children}\n </View>\n )\n}\n\nexport interface DrawerFooterProps extends ViewProps {\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Footer section for the drawer, typically for action buttons.\n */\nexport function DrawerFooter({ className, children, ...props }: DrawerFooterProps) {\n return (\n <View\n className={cn(\n 'flex-row items-center justify-end gap-3',\n 'px-4 py-3 border-t border-border-default',\n className\n )}\n {...props}\n >\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type ProgressSize = 'sm' | 'md' | 'lg'\nexport type ProgressColor = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info'\nexport type ProgressVariant = 'linear' | 'circular'\n\n/** Maps the color prop to a CSS variable reference for inline styles */\nconst colorVarMap: Record<ProgressColor, string> = {\n primary: 'var(--color-brand-primary)',\n secondary: 'var(--color-brand-secondary)',\n success: 'var(--color-status-success)',\n error: 'var(--color-status-error)',\n warning: 'var(--color-status-warning)',\n info: 'var(--color-status-info)',\n}\n\nexport interface ProgressProps extends ViewProps {\n /** Current value (0-100) */\n value?: number\n /** Maximum value */\n max?: number\n /** Whether the progress is indeterminate */\n isIndeterminate?: boolean\n /** Size of the progress bar */\n size?: ProgressSize\n /** Color of the progress */\n color?: ProgressColor\n /** Whether to show the value label */\n showValue?: boolean\n /** Custom value format function */\n formatValue?: (value: number, max: number) => string\n /** Label text */\n label?: string\n /** Fixed track width in pixels (default: full width) */\n trackWidth?: number\n /** Custom hex color override for the fill bar */\n customColor?: string\n /** Additional className */\n className?: string\n}\n\nconst sizeStyles: Record<ProgressSize, string> = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n}\n\nconst colorStyles: Record<ProgressColor, string> = {\n primary: 'bg-brand-primary',\n secondary: 'bg-brand-secondary',\n success: 'bg-status-success',\n error: 'bg-status-error',\n warning: 'bg-status-warning',\n info: 'bg-status-info',\n}\n\nconst trackColorStyles: Record<ProgressColor, string> = {\n primary: 'bg-brand-primary/20',\n secondary: 'bg-brand-secondary/20',\n success: 'bg-status-success/20',\n error: 'bg-status-error/20',\n warning: 'bg-status-warning/20',\n info: 'bg-status-info/20',\n}\n\n/**\n * Linear progress bar component.\n *\n * @example\n * // Determinate progress\n * <Progress value={75} />\n *\n * @example\n * // With label and value\n * <Progress value={45} label=\"Uploading...\" showValue />\n *\n * @example\n * // Indeterminate progress\n * <Progress isIndeterminate />\n */\nexport function Progress({\n value = 0,\n max = 100,\n isIndeterminate = false,\n size = 'md',\n color = 'primary',\n showValue = false,\n formatValue = (v, m) => `${Math.round((v / m) * 100)}%`,\n label,\n trackWidth,\n customColor,\n className,\n ...props\n}: ProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100)\n\n return (\n <View className={cn('w-full', className)} {...props}>\n {/* Label and Value Row */}\n {(label || showValue) && (\n <View className=\"flex-row justify-between items-center mb-1\">\n {label && (\n <Text className=\"text-sm text-text-secondary\">{label}</Text>\n )}\n {showValue && !isIndeterminate && (\n <Text className=\"text-sm font-medium text-text-primary\">\n {formatValue(value, max)}\n </Text>\n )}\n </View>\n )}\n\n {/* Progress Track */}\n <View\n className={cn(\n 'rounded-full overflow-hidden',\n trackWidth ? undefined : 'w-full',\n trackColorStyles[color],\n sizeStyles[size]\n )}\n style={trackWidth ? { width: trackWidth } : undefined}\n accessibilityRole=\"progressbar\"\n accessibilityValue={{\n min: 0,\n max: max,\n now: isIndeterminate ? undefined : value,\n }}\n >\n {/* Progress Fill */}\n <View\n className={cn(\n 'h-full rounded-full',\n !customColor && colorStyles[color],\n isIndeterminate && 'animate-pulse w-1/3'\n )}\n style={{\n ...(isIndeterminate ? {} : { width: `${percentage}%` }),\n ...(customColor ? { backgroundColor: customColor } : {}),\n }}\n />\n </View>\n </View>\n )\n}\n\nexport interface CircularProgressProps extends ViewProps {\n /** Current value (0-100) */\n value?: number\n /** Maximum value */\n max?: number\n /** Whether the progress is indeterminate */\n isIndeterminate?: boolean\n /** Size of the progress circle (diameter) */\n size?: number\n /** Stroke width */\n strokeWidth?: number\n /** Color of the progress */\n color?: ProgressColor\n /** Whether to show the value in center */\n showValue?: boolean\n /** Custom value format function */\n formatValue?: (value: number, max: number) => string\n /** Additional className */\n className?: string\n}\n\n/**\n * Circular progress indicator component.\n *\n * @example\n * <CircularProgress value={75} showValue />\n */\nexport function CircularProgress({\n value = 0,\n max = 100,\n isIndeterminate = false,\n size = 48,\n strokeWidth = 4,\n color = 'primary',\n showValue = false,\n formatValue = (v, m) => `${Math.round((v / m) * 100)}%`,\n className,\n ...props\n}: CircularProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100)\n const radius = (size - strokeWidth) / 2\n const circumference = 2 * Math.PI * radius\n const strokeDashoffset = circumference - (percentage / 100) * circumference\n const center = size / 2\n\n return (\n <View\n className={cn('items-center justify-center', className)}\n style={{ width: size, height: size }}\n accessibilityRole=\"progressbar\"\n accessibilityValue={{\n min: 0,\n max: max,\n now: isIndeterminate ? undefined : value,\n }}\n {...props}\n >\n {/* SVG implementation for web */}\n <View\n className={cn(isIndeterminate && 'animate-spin')}\n style={{ width: size, height: size }}\n >\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n style={{ position: 'absolute' }}\n >\n {/* Background track */}\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n stroke=\"var(--color-border-default)\"\n strokeWidth={strokeWidth}\n />\n {/* Progress arc */}\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n stroke={colorVarMap[color]}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={isIndeterminate ? circumference * 0.75 : strokeDashoffset}\n transform={`rotate(-90 ${center} ${center})`}\n style={{ transition: 'stroke-dashoffset 300ms cubic-bezier(0.22, 1, 0.36, 1)' }}\n />\n </svg>\n </View>\n\n {/* Center value */}\n {showValue && !isIndeterminate && (\n <Text\n className=\"text-xs font-semibold text-text-primary absolute\"\n style={{ fontSize: Math.max(size * 0.22, 10) }}\n >\n {formatValue(value, max)}\n </Text>\n )}\n </View>\n )\n}\n\nexport interface ProgressStepsProps extends ViewProps {\n /** Current step (0-indexed) */\n currentStep: number\n /** Total number of steps */\n totalSteps: number\n /** Color of completed steps */\n color?: ProgressColor\n /** Size of step indicators */\n size?: ProgressSize\n /** Labels for each step */\n labels?: string[]\n /** Additional className */\n className?: string\n}\n\nconst stepSizeStyles: Record<ProgressSize, { dot: string; connector: string }> = {\n sm: { dot: 'w-2 h-2', connector: 'h-0.5' },\n md: { dot: 'w-3 h-3', connector: 'h-1' },\n lg: { dot: 'w-4 h-4', connector: 'h-1.5' },\n}\n\n/**\n * Step-based progress indicator.\n *\n * @example\n * <ProgressSteps currentStep={2} totalSteps={4} labels={['Cart', 'Shipping', 'Payment', 'Done']} />\n */\nexport function ProgressSteps({\n currentStep,\n totalSteps,\n color = 'primary',\n size = 'md',\n labels,\n className,\n ...props\n}: ProgressStepsProps) {\n const { dot, connector } = stepSizeStyles[size]\n\n return (\n <View className={cn('w-full', className)} {...props}>\n <View className=\"flex-row items-center\">\n {Array.from({ length: totalSteps }).map((_, index) => (\n <React.Fragment key={index}>\n {/* Step dot */}\n <View\n className={cn(\n 'rounded-full',\n dot,\n index <= currentStep ? colorStyles[color] : 'bg-border-strong'\n )}\n />\n\n {/* Connector line */}\n {index < totalSteps - 1 && (\n <View\n className={cn(\n 'flex-1 mx-1',\n connector,\n index < currentStep ? colorStyles[color] : 'bg-border-strong'\n )}\n />\n )}\n </React.Fragment>\n ))}\n </View>\n\n {/* Labels */}\n {labels && labels.length > 0 && (\n <View className=\"flex-row mt-2\">\n {labels.map((label, index) => (\n <Text\n key={index}\n className={cn(\n 'flex-1 text-xs text-center',\n index <= currentStep ? 'text-text-primary font-medium' : 'text-text-tertiary'\n )}\n >\n {label}\n </Text>\n ))}\n </View>\n )}\n </View>\n )\n}\n","import React, { createContext, useContext, useState, useCallback, useEffect } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type ToastStatus = 'success' | 'error' | 'warning' | 'info'\nexport type ToastPosition = 'top' | 'top-right' | 'top-left' | 'bottom' | 'bottom-right' | 'bottom-left'\n\nexport interface ToastConfig {\n /** Unique ID for the toast */\n id: string\n /** Title text */\n title: string\n /** Description text */\n description?: string\n /** Status/type of the toast */\n status?: ToastStatus\n /** Duration in milliseconds (0 = no auto-dismiss) */\n duration?: number\n /** Whether the toast can be dismissed */\n isClosable?: boolean\n /** Callback when toast is closed */\n onClose?: () => void\n}\n\ninterface ToastContextType {\n toasts: ToastConfig[]\n addToast: (config: Omit<ToastConfig, 'id'>) => string\n removeToast: (id: string) => void\n removeAllToasts: () => void\n}\n\nconst ToastContext = createContext<ToastContextType | null>(null)\n\nlet toastIdCounter = 0\n\nexport interface ToastProviderProps {\n /** Position of toasts on screen */\n position?: ToastPosition\n /** Default duration for toasts */\n defaultDuration?: number\n /** Maximum number of visible toasts */\n maxToasts?: number\n children?: React.ReactNode\n}\n\nconst positionStyles: Record<ToastPosition, string> = {\n 'top': 'top-4 left-1/2 -translate-x-1/2',\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'bottom': 'bottom-4 left-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n}\n\n/**\n * Provider component for the toast notification system.\n *\n * @example\n * // Wrap your app with ToastProvider\n * <ToastProvider position=\"top-right\">\n * <App />\n * </ToastProvider>\n *\n * // Then use the useToast hook in any component\n * const { addToast } = useToast()\n * addToast({ title: 'Success!', status: 'success' })\n */\nexport function ToastProvider({\n position = 'top-right',\n defaultDuration = 5000,\n maxToasts = 5,\n children,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastConfig[]>([])\n\n const addToast = useCallback((config: Omit<ToastConfig, 'id'>) => {\n const id = `toast-${++toastIdCounter}`\n const newToast: ToastConfig = {\n id,\n duration: defaultDuration,\n isClosable: true,\n status: 'info',\n ...config,\n }\n\n setToasts((prev) => {\n const updated = [newToast, ...prev]\n return updated.slice(0, maxToasts)\n })\n\n return id\n }, [defaultDuration, maxToasts])\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n const removeAllToasts = useCallback(() => {\n setToasts([])\n }, [])\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast, removeAllToasts }}>\n {children}\n {/* Toast Container */}\n <View\n className={cn(\n 'fixed z-[9999] flex flex-col gap-2',\n positionStyles[position]\n )}\n pointerEvents=\"box-none\"\n >\n {toasts.map((toast) => (\n <ToastItem\n key={toast.id}\n {...toast}\n onClose={() => {\n removeToast(toast.id)\n toast.onClose?.()\n }}\n />\n ))}\n </View>\n </ToastContext.Provider>\n )\n}\n\n/**\n * Hook to access toast functions.\n *\n * @example\n * const { addToast, removeAllToasts } = useToast()\n *\n * // Show a success toast\n * addToast({\n * title: 'Saved!',\n * description: 'Your changes have been saved.',\n * status: 'success'\n * })\n */\nexport function useToast() {\n const context = useContext(ToastContext)\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider')\n }\n return context\n}\n\ninterface ToastItemProps extends ToastConfig {\n onClose: () => void\n}\n\nconst statusStyles: Record<ToastStatus, { bg: string; border: string; icon: string }> = {\n success: {\n bg: 'bg-status-success/10',\n border: 'border-status-success',\n icon: '✓',\n },\n error: {\n bg: 'bg-status-error/10',\n border: 'border-status-error',\n icon: '✕',\n },\n warning: {\n bg: 'bg-status-warning/10',\n border: 'border-status-warning',\n icon: '⚠',\n },\n info: {\n bg: 'bg-status-info/10',\n border: 'border-status-info',\n icon: 'ℹ',\n },\n}\n\nconst iconColors: Record<ToastStatus, string> = {\n success: 'text-status-success',\n error: 'text-status-error',\n warning: 'text-status-warning',\n info: 'text-status-info',\n}\n\nfunction ToastItem({\n id,\n title,\n description,\n status = 'info',\n duration = 5000,\n isClosable = true,\n onClose,\n}: ToastItemProps) {\n const { bg, border, icon } = statusStyles[status]\n\n // Auto-dismiss\n useEffect(() => {\n if (duration > 0) {\n const timer = setTimeout(onClose, duration)\n return () => clearTimeout(timer)\n }\n }, [duration, onClose])\n\n return (\n <View\n className={cn(\n 'min-w-[280px] max-w-[400px] rounded-lg border-l-4 shadow-lg',\n 'bg-surface-elevated',\n border\n )}\n accessibilityRole=\"alert\"\n >\n <View className={cn('flex-row items-start p-3', bg)}>\n {/* Icon */}\n <View className={cn('w-6 h-6 items-center justify-center mr-3')}>\n <Text className={cn('text-lg', iconColors[status])}>{icon}</Text>\n </View>\n\n {/* Content */}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold text-text-primary\">\n {title}\n </Text>\n {description && (\n <Text className=\"text-sm text-text-secondary mt-0.5\">\n {description}\n </Text>\n )}\n </View>\n\n {/* Close button */}\n {isClosable && (\n <Pressable\n onPress={onClose}\n className=\"p-1 -m-1 rounded web:hover:bg-interactive-hover\"\n accessibilityLabel=\"Close toast\"\n >\n <Text className=\"text-text-tertiary text-lg\">×</Text>\n </Pressable>\n )}\n </View>\n </View>\n )\n}\n\nexport interface ToastProps extends ViewProps {\n /** Title text */\n title: string\n /** Description text */\n description?: string\n /** Status/type of the toast */\n status?: ToastStatus\n /** Whether to show the icon */\n showIcon?: boolean\n /** Whether the toast can be dismissed */\n isClosable?: boolean\n /** Callback when close button is clicked */\n onClose?: () => void\n /** Additional className */\n className?: string\n}\n\n/**\n * Standalone Toast component (for static rendering without provider).\n *\n * @example\n * <Toast\n * title=\"Success!\"\n * description=\"Your changes have been saved.\"\n * status=\"success\"\n * />\n */\nexport function Toast({\n title,\n description,\n status = 'info',\n showIcon = true,\n isClosable = false,\n onClose,\n className,\n ...props\n}: ToastProps) {\n const { bg, border, icon } = statusStyles[status]\n\n return (\n <View\n className={cn(\n 'min-w-[280px] max-w-[400px] rounded-lg border-l-4 shadow-lg',\n 'bg-surface-elevated',\n border,\n className\n )}\n accessibilityRole=\"alert\"\n {...props}\n >\n <View className={cn('flex-row items-start p-3', bg)}>\n {/* Icon */}\n {showIcon && (\n <View className=\"w-6 h-6 items-center justify-center mr-3\">\n <Text className={cn('text-lg', iconColors[status])}>{icon}</Text>\n </View>\n )}\n\n {/* Content */}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold text-text-primary\">\n {title}\n </Text>\n {description && (\n <Text className=\"text-sm text-text-secondary mt-0.5\">\n {description}\n </Text>\n )}\n </View>\n\n {/* Close button */}\n {isClosable && onClose && (\n <Pressable\n onPress={onClose}\n className=\"p-1 -m-1 rounded web:hover:bg-interactive-hover\"\n accessibilityLabel=\"Close toast\"\n >\n <Text className=\"text-text-tertiary text-lg\">×</Text>\n </Pressable>\n )}\n </View>\n </View>\n )\n}\n","import React, { useState, useCallback, useMemo } from 'react'\nimport { View, Text, TextInput, Pressable, ScrollView, type ViewProps, type TextInputProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface AutocompleteOption<T = string> {\n value: T\n label: string\n description?: string\n isDisabled?: boolean\n}\n\nexport interface AutocompleteProps<T = string> extends ViewProps {\n /** Available options */\n options: AutocompleteOption<T>[]\n /** Current selected value */\n value?: T | null\n /** Callback when value changes */\n onChange?: (value: T | null) => void\n /** Callback when input text changes (for async loading) */\n onInputChange?: (inputValue: string) => void\n /** Minimum characters before showing options */\n minChars?: number\n /** Placeholder text */\n placeholder?: string\n /** Label text */\n label?: string\n /** Helper text */\n helperText?: string\n /** Error message */\n errorMessage?: string\n /** Whether the field is required */\n isRequired?: boolean\n /** Whether the field is disabled */\n isDisabled?: boolean\n /** Whether the field is loading */\n isLoading?: boolean\n /** Whether to allow clearing the value */\n isClearable?: boolean\n /** Custom filter function */\n filterFn?: (option: AutocompleteOption<T>, inputValue: string) => boolean\n /** Custom render function for options */\n renderOption?: (option: AutocompleteOption<T>, isHighlighted: boolean) => React.ReactNode\n /** Text to show when no options match */\n noOptionsText?: string\n /** Text to show when loading */\n loadingText?: string\n /** Text to show when min chars not met */\n minCharsText?: string\n /** Additional className */\n className?: string\n /** Input props */\n inputProps?: Partial<TextInputProps>\n}\n\nconst defaultFilterFn = <T,>(option: AutocompleteOption<T>, inputValue: string) => {\n const searchLower = inputValue.toLowerCase()\n return (\n option.label.toLowerCase().includes(searchLower) ||\n (option.description?.toLowerCase().includes(searchLower) ?? false)\n )\n}\n\n/**\n * Autocomplete component for searchable dropdown selection.\n *\n * @example\n * // Basic usage\n * <Autocomplete\n * options={[\n * { value: '1', label: 'Option 1' },\n * { value: '2', label: 'Option 2' },\n * ]}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Search...\"\n * />\n *\n * @example\n * // With descriptions\n * <Autocomplete\n * options={[\n * { value: 'user1', label: 'John Doe', description: 'john@example.com' },\n * { value: 'user2', label: 'Jane Smith', description: 'jane@example.com' },\n * ]}\n * label=\"Select User\"\n * value={selectedUser}\n * onChange={setSelectedUser}\n * />\n */\nexport function Autocomplete<T extends string = string>({\n options,\n value,\n onChange,\n onInputChange,\n minChars = 0,\n placeholder = 'Search...',\n label,\n helperText,\n errorMessage,\n isRequired = false,\n isDisabled = false,\n isLoading = false,\n isClearable = true,\n filterFn = defaultFilterFn,\n renderOption,\n noOptionsText = 'No options found',\n loadingText = 'Loading...',\n minCharsText,\n className,\n inputProps,\n ...props\n}: AutocompleteProps<T>) {\n const [inputValue, setInputValue] = useState('')\n const [isOpen, setIsOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n\n // Get the label for the selected value\n const selectedOption = useMemo(\n () => options.find((o) => o.value === value),\n [options, value]\n )\n\n // Filter options based on input\n const filteredOptions = useMemo(() => {\n if (inputValue.length < minChars) return []\n return options.filter((option) => filterFn(option, inputValue))\n }, [options, inputValue, minChars, filterFn])\n\n const handleInputChange = useCallback(\n (text: string) => {\n setInputValue(text)\n setIsOpen(true)\n setHighlightedIndex(-1)\n onInputChange?.(text)\n },\n [onInputChange]\n )\n\n const handleSelectOption = useCallback(\n (option: AutocompleteOption<T>) => {\n if (option.isDisabled) return\n onChange?.(option.value)\n setInputValue(option.label)\n setIsOpen(false)\n },\n [onChange]\n )\n\n const handleClear = useCallback(() => {\n onChange?.(null)\n setInputValue('')\n setIsOpen(false)\n }, [onChange])\n\n const handleFocus = useCallback(() => {\n setIsOpen(true)\n // If there's a selected value, populate the input\n if (selectedOption && !inputValue) {\n setInputValue(selectedOption.label)\n }\n }, [selectedOption, inputValue])\n\n const handleBlur = useCallback(() => {\n // Delay to allow click on options\n setTimeout(() => {\n setIsOpen(false)\n // Reset input to selected value if nothing new selected\n if (selectedOption) {\n setInputValue(selectedOption.label)\n } else {\n setInputValue('')\n }\n }, 200)\n }, [selectedOption])\n\n const isInvalid = !!errorMessage\n const showMinCharsMessage = inputValue.length > 0 && inputValue.length < minChars\n const showNoResults = !isLoading && inputValue.length >= minChars && filteredOptions.length === 0\n const showOptions = isOpen && !showMinCharsMessage && filteredOptions.length > 0\n\n return (\n <View className={cn('w-full', className)} {...props}>\n {/* Label */}\n {label && (\n <Text className=\"text-sm font-medium text-text-primary mb-1\">\n {label}\n {isRequired && <Text className=\"text-status-error ml-0.5\">*</Text>}\n </Text>\n )}\n\n {/* Input Container */}\n <View className=\"relative\">\n <View\n className={cn(\n 'flex-row items-center border rounded-md',\n 'bg-surface-input',\n isInvalid ? 'border-border-input-error' : 'border-border-input',\n !isDisabled && !isInvalid && 'focus-within:border-border-input-focus',\n isDisabled && 'opacity-50'\n )}\n >\n <TextInput\n value={inputValue}\n onChangeText={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n editable={!isDisabled}\n className={cn(\n 'flex-1 px-3 py-2 text-text-primary',\n 'placeholder:text-text-tertiary'\n )}\n accessibilityLabel={label}\n {...inputProps}\n />\n\n {/* Clear button */}\n {isClearable && value && !isDisabled && (\n <Pressable\n onPress={handleClear}\n className=\"p-2\"\n accessibilityLabel=\"Clear selection\"\n >\n <Text className=\"text-text-tertiary\">×</Text>\n </Pressable>\n )}\n\n {/* Loading indicator */}\n {isLoading && (\n <View className=\"p-2\">\n <Text className=\"text-text-tertiary animate-spin\">⟳</Text>\n </View>\n )}\n </View>\n\n {/* Dropdown */}\n {isOpen && (\n <View\n className={cn(\n 'absolute z-50 top-full left-0 right-0 mt-1',\n 'bg-surface-elevated rounded-md shadow-lg border border-border-default',\n 'max-h-60 overflow-hidden'\n )}\n >\n <ScrollView className=\"py-1\">\n {/* Min chars message */}\n {showMinCharsMessage && (\n <Text className=\"px-3 py-2 text-sm text-text-tertiary\">\n {minCharsText || `Type at least ${minChars} characters`}\n </Text>\n )}\n\n {/* Loading message */}\n {isLoading && (\n <Text className=\"px-3 py-2 text-sm text-text-tertiary\">\n {loadingText}\n </Text>\n )}\n\n {/* No results */}\n {showNoResults && (\n <Text className=\"px-3 py-2 text-sm text-text-tertiary\">\n {noOptionsText}\n </Text>\n )}\n\n {/* Options */}\n {showOptions &&\n filteredOptions.map((option, index) => {\n const isHighlighted = index === highlightedIndex\n const isSelected = option.value === value\n\n if (renderOption) {\n return (\n <Pressable\n key={String(option.value)}\n onPress={() => handleSelectOption(option)}\n disabled={option.isDisabled}\n >\n {renderOption(option, isHighlighted)}\n </Pressable>\n )\n }\n\n return (\n <Pressable\n key={String(option.value)}\n onPress={() => handleSelectOption(option)}\n disabled={option.isDisabled}\n className={cn(\n 'px-3 py-2',\n isHighlighted && 'bg-interactive-hover',\n isSelected && 'bg-interactive-selected',\n option.isDisabled && 'opacity-50',\n !option.isDisabled && 'web:hover:bg-interactive-hover'\n )}\n >\n <Text\n className={cn(\n 'text-sm',\n isSelected ? 'text-brand-primary font-medium' : 'text-text-primary'\n )}\n >\n {option.label}\n </Text>\n {option.description && (\n <Text className=\"text-xs text-text-tertiary mt-0.5\">\n {option.description}\n </Text>\n )}\n </Pressable>\n )\n })}\n </ScrollView>\n </View>\n )}\n </View>\n\n {/* Helper/Error text */}\n {(helperText || errorMessage) && (\n <Text\n className={cn(\n 'text-xs mt-1',\n isInvalid ? 'text-status-error' : 'text-text-tertiary'\n )}\n >\n {errorMessage || helperText}\n </Text>\n )}\n </View>\n )\n}\n","import React, { useState } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type HelpTipSize = 'sm' | 'md' | 'lg'\nexport type HelpTipPlacement = 'top' | 'bottom' | 'left' | 'right'\nexport type HelpTipIcon = 'help' | 'info' | 'warning'\n\nexport interface HelpTipProps extends ViewProps {\n /** Tooltip content */\n content: React.ReactNode\n /** Size of the icon */\n size?: HelpTipSize\n /** Placement of the tooltip */\n placement?: HelpTipPlacement\n /** Icon type */\n icon?: HelpTipIcon\n /** Icon color */\n color?: 'default' | 'primary' | 'secondary' | 'muted'\n /** Whether the tooltip is always visible (controlled) */\n isOpen?: boolean\n /** Whether to show an arrow */\n hasArrow?: boolean\n /** Max width of the tooltip */\n maxWidth?: number\n /** Additional className for the icon */\n iconClassName?: string\n /** Additional className for the tooltip */\n tooltipClassName?: string\n}\n\nconst sizeStyles: Record<HelpTipSize, { icon: string; text: string }> = {\n sm: { icon: 'w-3.5 h-3.5 text-xs', text: 'text-xs' },\n md: { icon: 'w-4 h-4 text-sm', text: 'text-sm' },\n lg: { icon: 'w-5 h-5 text-base', text: 'text-base' },\n}\n\nconst colorStyles: Record<string, string> = {\n default: 'text-text-tertiary',\n primary: 'text-brand-primary',\n secondary: 'text-text-secondary',\n muted: 'text-text-tertiary opacity-60',\n}\n\nconst iconMap: Record<HelpTipIcon, string> = {\n help: '?',\n info: 'ℹ',\n warning: '⚠',\n}\n\nconst placementStyles: Record<HelpTipPlacement, string> = {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n}\n\nconst arrowStyles: Record<HelpTipPlacement, string> = {\n top: 'bottom-0 left-1/2 -translate-x-1/2 translate-y-full border-t-surface-elevated border-x-transparent border-b-transparent',\n bottom: 'top-0 left-1/2 -translate-x-1/2 -translate-y-full border-b-surface-elevated border-x-transparent border-t-transparent',\n left: 'right-0 top-1/2 -translate-y-1/2 translate-x-full border-l-surface-elevated border-y-transparent border-r-transparent',\n right: 'left-0 top-1/2 -translate-y-1/2 -translate-x-full border-r-surface-elevated border-y-transparent border-l-transparent',\n}\n\n/**\n * HelpTip component for displaying contextual help information.\n *\n * A small icon (typically a question mark or info icon) that shows\n * a tooltip with helpful information when hovered or pressed.\n *\n * @example\n * // Basic usage\n * <HelpTip content=\"This field is required for form submission.\" />\n *\n * @example\n * // With custom icon and placement\n * <HelpTip\n * content=\"API rate limits apply to this endpoint.\"\n * icon=\"warning\"\n * placement=\"right\"\n * color=\"primary\"\n * />\n *\n * @example\n * // Inline with label\n * <View className=\"flex-row items-center gap-1\">\n * <Text>Email Address</Text>\n * <HelpTip content=\"We'll never share your email with anyone.\" size=\"sm\" />\n * </View>\n */\nexport function HelpTip({\n content,\n size = 'md',\n placement = 'top',\n icon = 'help',\n color = 'default',\n isOpen: controlledIsOpen,\n hasArrow = true,\n maxWidth = 250,\n iconClassName,\n tooltipClassName,\n className,\n ...props\n}: HelpTipProps) {\n const [internalIsOpen, setInternalIsOpen] = useState(false)\n const isOpen = controlledIsOpen ?? internalIsOpen\n\n const { icon: iconSize, text: textSize } = sizeStyles[size]\n\n const handlePress = () => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen((prev) => !prev)\n }\n }\n\n const handleHoverIn = () => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(true)\n }\n }\n\n const handleHoverOut = () => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(false)\n }\n }\n\n return (\n <View className={cn('relative inline-flex', className)} {...props}>\n {/* Icon button */}\n <Pressable\n onPress={handlePress}\n onHoverIn={handleHoverIn}\n onHoverOut={handleHoverOut}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Show help information\"\n accessibilityHint={typeof content === 'string' ? content : undefined}\n className={cn(\n 'items-center justify-center rounded-full',\n 'border border-current',\n colorStyles[color],\n iconSize,\n 'web:hover:opacity-80 web:cursor-help',\n iconClassName\n )}\n >\n <Text className={cn('font-semibold', iconSize, colorStyles[color])}>\n {iconMap[icon]}\n </Text>\n </Pressable>\n\n {/* Tooltip */}\n {isOpen && (\n <View\n className={cn(\n 'absolute z-50',\n 'bg-surface-elevated rounded-lg shadow-lg',\n 'border border-border-default',\n 'px-3 py-2',\n placementStyles[placement],\n tooltipClassName\n )}\n style={{ maxWidth }}\n >\n {typeof content === 'string' ? (\n <Text className={cn('text-text-primary', textSize)}>\n {content}\n </Text>\n ) : (\n content\n )}\n\n {/* Arrow */}\n {hasArrow && (\n <View\n className={cn(\n 'absolute w-0 h-0',\n 'border-4',\n arrowStyles[placement]\n )}\n />\n )}\n </View>\n )}\n </View>\n )\n}\n\nexport interface LabelWithHelpProps extends ViewProps {\n /** Label text */\n label: string\n /** Help content */\n helpContent: React.ReactNode\n /** Whether the field is required */\n isRequired?: boolean\n /** Size of the help icon */\n helpSize?: HelpTipSize\n /** Additional className */\n className?: string\n}\n\n/**\n * Convenience component combining a label with a help tip.\n *\n * @example\n * <LabelWithHelp\n * label=\"API Key\"\n * helpContent=\"Your API key can be found in the developer settings.\"\n * isRequired\n * />\n */\nexport function LabelWithHelp({\n label,\n helpContent,\n isRequired = false,\n helpSize = 'sm',\n className,\n ...props\n}: LabelWithHelpProps) {\n return (\n <View className={cn('flex-row items-center gap-1', className)} {...props}>\n <Text className=\"text-sm font-medium text-text-primary\">\n {label}\n {isRequired && <Text className=\"text-status-error ml-0.5\">*</Text>}\n </Text>\n <HelpTip content={helpContent} size={helpSize} />\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface FormFieldProps extends ViewProps {\n /** Label text */\n label?: string\n /** Whether the field is required */\n isRequired?: boolean\n /** Helper text shown below the input */\n helperText?: string\n /** Error message (replaces helper text when present) */\n errorMessage?: string\n /** Whether the field is disabled */\n isDisabled?: boolean\n /** Whether the field is read-only */\n isReadOnly?: boolean\n /** Help tooltip content */\n helpContent?: React.ReactNode\n /** Size of the label */\n labelSize?: 'sm' | 'md' | 'lg'\n /** Direction of the layout */\n orientation?: 'vertical' | 'horizontal'\n /** Label width (for horizontal layout) */\n labelWidth?: number | string\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst labelSizeStyles = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n}\n\n/**\n * FormField component for wrapping form inputs with label, help text, and error states.\n *\n * @example\n * // Basic usage\n * <FormField label=\"Email\" isRequired>\n * <Input placeholder=\"Enter your email\" />\n * </FormField>\n *\n * @example\n * // With error\n * <FormField\n * label=\"Password\"\n * isRequired\n * errorMessage=\"Password must be at least 8 characters\"\n * >\n * <Input type=\"password\" />\n * </FormField>\n *\n * @example\n * // Horizontal layout\n * <FormField label=\"Name\" orientation=\"horizontal\" labelWidth={100}>\n * <Input />\n * </FormField>\n */\nexport function FormField({\n label,\n isRequired = false,\n helperText,\n errorMessage,\n isDisabled = false,\n isReadOnly = false,\n helpContent,\n labelSize = 'sm',\n orientation = 'vertical',\n labelWidth,\n className,\n children,\n ...props\n}: FormFieldProps) {\n const isInvalid = !!errorMessage\n const isHorizontal = orientation === 'horizontal'\n\n // Generate unique IDs for accessibility\n const fieldId = React.useId()\n const helperId = `${fieldId}-helper`\n const errorId = `${fieldId}-error`\n\n return (\n <View\n className={cn(\n 'w-full',\n isHorizontal && 'flex-row items-start',\n isDisabled && 'opacity-50',\n className\n )}\n {...props}\n >\n {/* Label Section */}\n {label && (\n <View\n className={cn(\n 'flex-row items-center',\n isHorizontal ? 'pt-2' : 'mb-1.5'\n )}\n style={isHorizontal && labelWidth ? { width: labelWidth as number } : undefined}\n >\n <Text\n className={cn(\n 'font-medium text-text-primary',\n labelSizeStyles[labelSize]\n )}\n >\n {label}\n {isRequired && (\n <Text className=\"text-status-error ml-0.5\">*</Text>\n )}\n </Text>\n\n {helpContent && (\n <View className=\"ml-1\">\n {/* Inline help indicator - could use HelpTip here */}\n <Text className=\"text-text-tertiary text-xs\">ℹ</Text>\n </View>\n )}\n </View>\n )}\n\n {/* Input Section */}\n <View className={cn(isHorizontal && 'flex-1')}>\n {/* Clone children to pass accessibility props */}\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n const childProps = child.props as Record<string, any>\n return React.cloneElement(child as React.ReactElement<any>, {\n accessibilityHint: errorMessage || helperText || childProps.accessibilityHint,\n accessibilityState: {\n ...childProps.accessibilityState,\n disabled: isDisabled || childProps.accessibilityState?.disabled,\n ...(isInvalid ? { invalid: true } : {}),\n },\n isDisabled: isDisabled || childProps.isDisabled,\n isReadOnly: isReadOnly || childProps.isReadOnly,\n isInvalid: isInvalid || childProps.isInvalid,\n })\n }\n return child\n })}\n\n {/* Helper/Error Text */}\n {(helperText || errorMessage) && (\n <Text\n id={isInvalid ? errorId : helperId}\n className={cn(\n 'text-xs mt-1.5',\n isInvalid ? 'text-status-error' : 'text-text-tertiary'\n )}\n >\n {errorMessage || helperText}\n </Text>\n )}\n </View>\n </View>\n )\n}\n\nexport interface FormSectionProps extends ViewProps {\n /** Section title */\n title?: string\n /** Section description */\n description?: string\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * FormSection component for grouping related form fields.\n *\n * @example\n * <FormSection title=\"Personal Information\" description=\"Enter your basic details\">\n * <FormField label=\"Name\">\n * <Input />\n * </FormField>\n * <FormField label=\"Email\">\n * <Input />\n * </FormField>\n * </FormSection>\n */\nexport function FormSection({\n title,\n description,\n className,\n children,\n ...props\n}: FormSectionProps) {\n return (\n <View\n className={cn('w-full', className)}\n accessibilityRole={'group' as any}\n accessibilityLabel={title}\n {...props}\n >\n {(title || description) && (\n <View className=\"mb-4\">\n {title && (\n <Text className=\"text-lg font-semibold text-text-primary\">\n {title}\n </Text>\n )}\n {description && (\n <Text className=\"text-sm text-text-secondary mt-1\">\n {description}\n </Text>\n )}\n </View>\n )}\n\n <View className=\"gap-4\">\n {children}\n </View>\n </View>\n )\n}\n\nexport interface FormActionsProps extends ViewProps {\n /** Alignment of actions */\n align?: 'left' | 'center' | 'right' | 'between'\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst alignStyles = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n between: 'justify-between',\n}\n\n/**\n * FormActions component for form action buttons.\n *\n * @example\n * <FormActions align=\"right\">\n * <Button variant=\"ghost\">Cancel</Button>\n * <Button>Submit</Button>\n * </FormActions>\n */\nexport function FormActions({\n align = 'right',\n className,\n children,\n ...props\n}: FormActionsProps) {\n return (\n <View\n className={cn(\n 'flex-row items-center gap-3 pt-4',\n 'border-t border-border-default mt-4',\n alignStyles[align],\n className\n )}\n {...props}\n >\n {children}\n </View>\n )\n}\n\nexport interface FormRowProps extends ViewProps {\n /** Gap between items */\n gap?: 'sm' | 'md' | 'lg'\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\nconst gapStyles = {\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n}\n\n/**\n * FormRow component for laying out multiple form fields horizontally.\n *\n * @example\n * <FormRow>\n * <FormField label=\"First Name\" className=\"flex-1\">\n * <Input />\n * </FormField>\n * <FormField label=\"Last Name\" className=\"flex-1\">\n * <Input />\n * </FormField>\n * </FormRow>\n */\nexport function FormRow({\n gap = 'md',\n className,\n children,\n ...props\n}: FormRowProps) {\n return (\n <View\n className={cn('flex-row items-start', gapStyles[gap], className)}\n {...props}\n >\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\ntype Gap = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12\n\nconst gapClasses: Record<Gap, string> = {\n 0: 'gap-0',\n 1: 'gap-1',\n 2: 'gap-2',\n 3: 'gap-3',\n 4: 'gap-4',\n 5: 'gap-5',\n 6: 'gap-6',\n 8: 'gap-8',\n 10: 'gap-10',\n 12: 'gap-12',\n}\n\nexport interface StackProps extends ViewProps {\n gap?: Gap\n align?: 'start' | 'center' | 'end' | 'stretch'\n justify?: 'start' | 'center' | 'end' | 'between' | 'around'\n wrap?: boolean\n className?: string\n children: React.ReactNode\n}\n\nconst alignMap = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n}\n\nconst justifyMap = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n}\n\nexport function Stack({\n gap = 0,\n align,\n justify,\n wrap,\n className,\n children,\n ...props\n}: StackProps) {\n return (\n <View\n className={cn(\n 'flex',\n gapClasses[gap],\n align && alignMap[align],\n justify && justifyMap[justify],\n wrap && 'flex-wrap',\n className,\n )}\n {...props}\n >\n {children}\n </View>\n )\n}\n\nexport function HStack(props: StackProps) {\n return <Stack {...props} className={cn('flex-row', props.className)} />\n}\n\nexport function VStack(props: StackProps) {\n return <Stack {...props} className={cn('flex-col', props.className)} />\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface SectionProps extends ViewProps {\n className?: string\n children: React.ReactNode\n}\n\nexport function Section({ className, children, ...props }: SectionProps) {\n return (\n <View className={cn('mb-6', className)} {...props}>\n {children}\n </View>\n )\n}\n\nexport interface SectionHeaderProps {\n title: string\n subtitle?: string\n trailing?: React.ReactNode\n className?: string\n}\n\nexport function SectionHeader({ title, subtitle, trailing, className }: SectionHeaderProps) {\n return (\n <View className={cn('flex-row items-center justify-between mb-3 px-1', className)}>\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold text-text-secondary uppercase tracking-wider\">\n {title}\n </Text>\n {subtitle && (\n <Text className=\"text-xs text-text-tertiary mt-0.5\">{subtitle}</Text>\n )}\n </View>\n {trailing && <View>{trailing}</View>}\n </View>\n )\n}\n\nexport interface SectionContentProps extends ViewProps {\n className?: string\n children: React.ReactNode\n}\n\nexport function SectionContent({ className, children, ...props }: SectionContentProps) {\n return (\n <View className={cn(className)} {...props}>\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface DataRowProps extends ViewProps {\n /** Descriptive label shown on the left */\n label: string\n /** Value shown on the right -- string renders as Text, ReactNode renders inside a View */\n value: React.ReactNode\n /** Additional className applied to the value element */\n valueClassName?: string\n /** Additional className applied to the root container */\n className?: string\n}\n\nexport function DataRow({ label, value, valueClassName, className, ...props }: DataRowProps) {\n return (\n <View className={cn('flex-row items-center justify-between py-2', className)} {...props}>\n <Text className=\"text-sm text-text-secondary\">{label}</Text>\n {typeof value === 'string' ? (\n <Text className={cn('text-sm font-medium text-text-primary', valueClassName)}>\n {value}\n </Text>\n ) : (\n <View className={cn(valueClassName)}>{value}</View>\n )}\n </View>\n )\n}\n","import React from 'react'\nimport { View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\ntype IconBoxColor =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'neutral'\n\ntype IconBoxSize = 'sm' | 'md' | 'lg'\n\nexport interface IconBoxProps extends ViewProps {\n icon: React.ComponentType<{ size?: number; className?: string }>\n color?: IconBoxColor\n size?: IconBoxSize\n className?: string\n}\n\nconst colorClasses: Record<IconBoxColor, { bg: string; icon: string }> = {\n primary: { bg: 'bg-brand-primary/10', icon: 'text-brand-primary' },\n secondary: { bg: 'bg-brand-secondary/10', icon: 'text-brand-secondary' },\n success: { bg: 'bg-status-success/10', icon: 'text-status-success' },\n error: { bg: 'bg-status-error/10', icon: 'text-status-error' },\n warning: { bg: 'bg-status-warning/10', icon: 'text-status-warning' },\n info: { bg: 'bg-status-info/10', icon: 'text-status-info' },\n neutral: { bg: 'bg-surface-elevated', icon: 'text-text-secondary' },\n}\n\nconst sizeClasses: Record<IconBoxSize, { box: string; iconSize: number }> = {\n sm: { box: 'w-8 h-8 rounded-lg', iconSize: 16 },\n md: { box: 'w-10 h-10 rounded-xl', iconSize: 20 },\n lg: { box: 'w-12 h-12 rounded-xl', iconSize: 24 },\n}\n\nexport function IconBox({\n icon: Icon,\n color = 'neutral',\n size = 'md',\n className,\n ...props\n}: IconBoxProps) {\n const colors = colorClasses[color]\n const sizes = sizeClasses[size]\n\n return (\n <View\n className={cn('items-center justify-center', colors.bg, sizes.box, className)}\n {...props}\n >\n <Icon size={sizes.iconSize} className={colors.icon} />\n </View>\n )\n}\n","import React from 'react'\nimport { View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\nimport {\n type ElevationLevel,\n getElevationSurface,\n getElevationShadow,\n getBaseSurfaceColor,\n type GlowIntensity,\n getGlowShadow,\n} from '../../../theme/elevation'\n\nexport interface SurfaceProps extends ViewProps {\n elevation?: ElevationLevel\n glowColor?: string\n glowIntensity?: GlowIntensity\n theme?: 'light' | 'dark'\n className?: string\n children: React.ReactNode\n}\n\nexport function Surface({\n elevation = 0,\n glowColor,\n glowIntensity,\n theme = 'dark',\n className,\n style,\n children,\n ...props\n}: SurfaceProps) {\n const baseColor = getBaseSurfaceColor(theme)\n const surfaceColor = getElevationSurface(baseColor, elevation, theme)\n const shadowStyle = getElevationShadow(baseColor, elevation, theme)\n const glowStyle = glowColor ? getGlowShadow(glowColor, glowIntensity) : {}\n\n return (\n <View\n className={cn('rounded-2xl', className)}\n style={[\n { backgroundColor: surfaceColor },\n shadowStyle,\n glowStyle,\n style,\n ]}\n {...props}\n >\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, Pressable, type ViewProps, type PressableProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\n// --- ListItem (container) ---\n\nexport interface ListItemProps extends PressableProps {\n className?: string\n children: React.ReactNode\n}\n\nexport function ListItem({ className, children, onPress, ...props }: ListItemProps) {\n const Container = onPress ? Pressable : View\n const containerProps = onPress ? { onPress, ...props } : props\n\n return (\n <Container\n className={cn('flex-row items-center py-3 px-4 min-h-[48px]', className)}\n {...(containerProps as any)}\n >\n {children}\n </Container>\n )\n}\n\n// --- ListItemIcon (leading slot) ---\n\nexport interface ListItemIconProps extends ViewProps {\n icon: React.ComponentType<{ size?: number; className?: string }>\n className?: string\n}\n\nexport function ListItemIcon({ icon: Icon, className, ...props }: ListItemIconProps) {\n return (\n <View className={cn('mr-3 items-center justify-center', className)} {...props}>\n <Icon size={20} className=\"text-text-secondary\" />\n </View>\n )\n}\n\n// --- ListItemContent (title + subtitle) ---\n\nexport interface ListItemContentProps extends ViewProps {\n title: string\n subtitle?: string\n className?: string\n}\n\nexport function ListItemContent({ title, subtitle, className, ...props }: ListItemContentProps) {\n return (\n <View className={cn('flex-1 justify-center', className)} {...props}>\n <Text className=\"text-sm font-medium text-text-primary\">{title}</Text>\n {subtitle && (\n <Text className=\"text-xs text-text-secondary mt-0.5\">{subtitle}</Text>\n )}\n </View>\n )\n}\n\n// --- ListItemTrailing (right-side slot) ---\n\nexport interface ListItemTrailingProps extends ViewProps {\n className?: string\n children: React.ReactNode\n}\n\nexport function ListItemTrailing({ className, children, ...props }: ListItemTrailingProps) {\n return (\n <View className={cn('ml-3 items-center justify-center', className)} {...props}>\n {children}\n </View>\n )\n}\n\n// --- ListItemDivider ---\n\nexport interface ListItemDividerProps extends ViewProps {\n inset?: boolean\n className?: string\n}\n\nexport function ListItemDivider({ inset = true, className, ...props }: ListItemDividerProps) {\n return (\n <View\n className={cn('h-px bg-divider', inset ? 'ml-14' : '', className)}\n {...props}\n />\n )\n}\n","import React from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type PillVariant = 'subtle' | 'outline'\nexport type PillColor = 'default' | 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info'\nexport type PillSize = 'xs' | 'sm' | 'md'\n\nexport interface PillProps extends ViewProps {\n /** Pill content */\n children: React.ReactNode\n /** Visual variant */\n variant?: PillVariant\n /** Color scheme */\n color?: PillColor\n /** Size */\n size?: PillSize\n /** Fully rounded (default true) or slight radius */\n rounded?: boolean\n /** Element before the label (e.g., Indicator dot) */\n leftElement?: React.ReactNode\n /** Press handler (makes pill interactive) */\n onPress?: () => void\n /** Additional className */\n className?: string\n}\n\nconst variantColorStyles: Record<PillVariant, Record<PillColor, string>> = {\n subtle: {\n default: 'bg-surface-raised border-border-subtle text-text-secondary',\n primary: 'bg-brand-primary/10 border-brand-primary/25 text-brand-primary',\n secondary: 'bg-brand-secondary/10 border-brand-secondary/25 text-brand-secondary',\n success: 'bg-status-success/10 border-status-success/25 text-status-success',\n error: 'bg-status-error/10 border-status-error/25 text-status-error',\n warning: 'bg-status-warning/10 border-status-warning/25 text-status-warning',\n info: 'bg-status-info/10 border-status-info/25 text-status-info',\n },\n outline: {\n default: 'border-border-default text-text-secondary',\n primary: 'border-brand-primary text-brand-primary',\n secondary: 'border-brand-secondary text-brand-secondary',\n success: 'border-status-success text-status-success',\n error: 'border-status-error text-status-error',\n warning: 'border-status-warning text-status-warning',\n info: 'border-status-info text-status-info',\n },\n}\n\nconst sizeStyles: Record<PillSize, { container: string; text: string }> = {\n xs: { container: 'px-1 py-px', text: 'text-[9px]' },\n sm: { container: 'px-2 py-0.5', text: 'text-[10px]' },\n md: { container: 'px-2 py-1', text: 'text-[10px]' },\n}\n\nexport function Pill({\n children,\n variant = 'subtle',\n color = 'default',\n size = 'sm',\n rounded = true,\n leftElement,\n onPress,\n className,\n ...props\n}: PillProps) {\n const containerClasses = cn(\n 'flex-row items-center gap-1 border self-start shrink-0',\n rounded ? 'rounded-full' : 'rounded',\n variantColorStyles[variant][color],\n sizeStyles[size].container,\n className\n )\n\n const textClasses = cn(\n 'font-heading font-semibold',\n sizeStyles[size].text,\n 'text-inherit'\n )\n\n const content = (\n <>\n {leftElement}\n {typeof children === 'string' ? (\n <Text className={textClasses}>{children}</Text>\n ) : (\n children\n )}\n </>\n )\n\n if (onPress) {\n return (\n <Pressable onPress={onPress} className={containerClasses} {...props}>\n {content}\n </Pressable>\n )\n }\n\n return (\n <View className={containerClasses} {...props}>\n {content}\n </View>\n )\n}\n","import React from 'react'\nimport { Text, type TextProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type TypographyVariant =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'body1'\n | 'body2'\n | 'subtitle1'\n | 'subtitle2'\n | 'caption'\n | 'overline'\n | 'button'\n\nexport type TypographyColor =\n | 'primary'\n | 'secondary'\n | 'tertiary'\n | 'disabled'\n | 'inverse'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'inherit'\n\nexport type TypographyAlign = 'left' | 'center' | 'right' | 'justify'\n\nexport type TypographyMarginBottom = 'none' | 'sm' | 'md' | 'lg'\n\nexport interface TypographyProps extends TextProps {\n /** Typography variant */\n variant?: TypographyVariant\n /** Text color */\n color?: TypographyColor\n /** Text alignment */\n align?: TypographyAlign\n /** Whether text should truncate with ellipsis */\n truncate?: boolean\n /** @deprecated Use truncate instead */\n noWrap?: boolean\n /** Margin bottom spacing */\n marginBottom?: TypographyMarginBottom\n /** @deprecated Use marginBottom instead */\n gutterBottom?: boolean\n /** Maximum number of lines before truncating */\n maxLines?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n// Variant styles matching the existing theme\nconst variantStyles: Record<TypographyVariant, string> = {\n h1: 'font-heading text-5xl font-bold leading-tight',\n h2: 'font-heading text-4xl font-bold leading-tight',\n h3: 'font-heading text-3xl font-bold leading-tight',\n h4: 'font-heading text-2xl font-bold leading-tight',\n h5: 'font-heading text-xl font-semibold leading-tight',\n h6: 'font-heading text-lg font-semibold leading-tight',\n body1: 'font-body text-base font-normal leading-normal',\n body2: 'font-body text-sm font-normal leading-normal',\n subtitle1: 'font-body text-base font-medium leading-relaxed',\n subtitle2: 'font-body text-sm font-medium leading-normal',\n caption: 'font-body text-xs font-normal leading-loose',\n overline: 'font-body text-xs font-semibold uppercase tracking-widest leading-relaxed',\n button: 'font-sans text-sm font-semibold leading-relaxed',\n}\n\nconst colorStyles: Record<TypographyColor, string> = {\n primary: 'text-text-primary',\n secondary: 'text-text-secondary',\n tertiary: 'text-text-tertiary',\n disabled: 'text-text-disabled',\n inverse: 'text-text-inverse',\n success: 'text-status-success',\n error: 'text-status-error',\n warning: 'text-status-warning',\n info: 'text-status-info',\n inherit: '', // No color class, inherit from parent\n}\n\nconst alignStyles: Record<TypographyAlign, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify',\n}\n\n// Heading variants for accessibility role\nconst headingVariants: TypographyVariant[] = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']\n\nconst marginBottomStyles: Record<TypographyMarginBottom, string> = {\n none: '',\n sm: 'mb-1',\n md: 'mb-2',\n lg: 'mb-4',\n}\n\n/**\n * Typography component for consistent text styling.\n *\n * @example\n * <Typography variant=\"h1\">Page Title</Typography>\n * <Typography variant=\"body1\" color=\"secondary\">Body text content</Typography>\n * <Typography variant=\"caption\" marginBottom=\"md\">Small caption text</Typography>\n * <Typography truncate maxLines={2}>Long text that will truncate...</Typography>\n */\nexport function Typography({\n variant = 'body1',\n color = 'primary',\n align,\n truncate = false,\n noWrap = false, // deprecated, kept for backward compatibility\n marginBottom,\n gutterBottom = false, // deprecated, kept for backward compatibility\n maxLines,\n className,\n children,\n ...props\n}: TypographyProps) {\n const isHeading = headingVariants.includes(variant)\n const shouldTruncate = truncate || noWrap\n const mb = marginBottom || (gutterBottom ? 'md' : 'none')\n\n // Determine number of lines\n let numLines: number | undefined\n if (maxLines) {\n numLines = maxLines\n } else if (shouldTruncate) {\n numLines = 1\n }\n\n return (\n <Text\n accessibilityRole={isHeading ? 'header' : 'text'}\n numberOfLines={numLines}\n className={cn(\n variantStyles[variant],\n color !== 'inherit' && colorStyles[color],\n align && alignStyles[align],\n shouldTruncate && 'truncate',\n marginBottomStyles[mb],\n className\n )}\n {...props}\n >\n {children}\n </Text>\n )\n}\n\n// Convenience components for common typography patterns\n\nexport interface HeadingProps extends Omit<TypographyProps, 'variant'> {\n /** Heading level (1-6) */\n level?: 1 | 2 | 3 | 4 | 5 | 6\n}\n\n/**\n * Heading component - convenience wrapper for Typography with heading variants.\n *\n * @example\n * <Heading level={1}>Page Title</Heading>\n * <Heading level={2} gutterBottom>Section Title</Heading>\n */\nexport function Heading({ level = 1, ...props }: HeadingProps) {\n const variant = `h${level}` as TypographyVariant\n return <Typography variant={variant} {...props} />\n}\n\nexport interface ParagraphProps extends Omit<TypographyProps, 'variant'> {\n /** Use smaller body2 variant */\n small?: boolean\n}\n\n/**\n * Paragraph component - convenience wrapper for body text.\n *\n * @example\n * <Paragraph>This is body text content.</Paragraph>\n * <Paragraph small>This is smaller body text.</Paragraph>\n */\nexport function Paragraph({ small = false, ...props }: ParagraphProps) {\n return <Typography variant={small ? 'body2' : 'body1'} {...props} />\n}\n\nexport interface CaptionProps extends Omit<TypographyProps, 'variant'> {}\n\n/**\n * Caption component - for small helper/secondary text.\n */\nexport function Caption(props: CaptionProps) {\n return <Typography variant=\"caption\" color=\"secondary\" {...props} />\n}\n\nexport interface LabelProps extends Omit<TypographyProps, 'variant'> {}\n\n/**\n * Label component - for form labels and similar.\n */\nexport function Label(props: LabelProps) {\n return <Typography variant=\"subtitle2\" {...props} />\n}\n\nexport interface OverlineProps extends Omit<TypographyProps, 'variant'> {}\n\n/**\n * Overline component - for section labels, categories.\n */\nexport function Overline(props: OverlineProps) {\n return <Typography variant=\"overline\" color=\"secondary\" {...props} />\n}\n","import React, { createContext, useContext } from 'react'\nimport { View, Text, Pressable, ScrollView, type ViewProps, type PressableProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\ninterface SidebarContextType {\n isCollapsed: boolean\n activeItem?: string\n onItemSelect?: (id: string) => void\n}\n\nconst SidebarContext = createContext<SidebarContextType>({\n isCollapsed: false,\n})\n\nexport interface SidebarProps extends ViewProps {\n /** Whether sidebar is collapsed (icon-only mode) */\n isCollapsed?: boolean\n /** Currently active item ID */\n activeItem?: string\n /** Callback when an item is selected */\n onItemSelect?: (id: string) => void\n /** Width when expanded */\n width?: number\n /** Width when collapsed */\n collapsedWidth?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Sidebar navigation component.\n *\n * @example\n * <Sidebar activeItem={activeNav} onItemSelect={setActiveNav}>\n * <SidebarHeader>\n * <Logo />\n * </SidebarHeader>\n * <SidebarContent>\n * <SidebarSection title=\"Main\">\n * <SidebarItem id=\"home\" icon={HomeIcon} label=\"Home\" />\n * <SidebarItem id=\"dashboard\" icon={DashboardIcon} label=\"Dashboard\" />\n * </SidebarSection>\n * </SidebarContent>\n * <SidebarFooter>\n * <SidebarItem id=\"settings\" icon={SettingsIcon} label=\"Settings\" />\n * </SidebarFooter>\n * </Sidebar>\n */\nexport function Sidebar({\n isCollapsed = false,\n activeItem,\n onItemSelect,\n width = 256,\n collapsedWidth = 64,\n className,\n children,\n ...props\n}: SidebarProps) {\n const currentWidth = isCollapsed ? collapsedWidth : width\n\n return (\n <SidebarContext.Provider value={{ isCollapsed, activeItem, onItemSelect }}>\n <View\n style={{ width: currentWidth }}\n className={cn(\n 'h-full flex-col bg-surface-base border-r border-border-default transition-all duration-200',\n className\n )}\n {...props}\n >\n {children}\n </View>\n </SidebarContext.Provider>\n )\n}\n\nexport interface SidebarHeaderProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Header section of sidebar (typically contains logo).\n */\nexport function SidebarHeader({ children, className }: SidebarHeaderProps) {\n return (\n <View className={cn('px-4 py-4 border-b border-border-subtle', className)}>\n {children}\n </View>\n )\n}\n\nexport interface SidebarContentProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Scrollable content area of sidebar.\n */\nexport function SidebarContent({ children, className }: SidebarContentProps) {\n return (\n <ScrollView\n className={cn('flex-1', className)}\n showsVerticalScrollIndicator={false}\n >\n {children}\n </ScrollView>\n )\n}\n\nexport interface SidebarFooterProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Footer section of sidebar.\n */\nexport function SidebarFooter({ children, className }: SidebarFooterProps) {\n return (\n <View className={cn('px-2 py-4 border-t border-border-subtle', className)}>\n {children}\n </View>\n )\n}\n\nexport interface SidebarSectionProps {\n /** Section title */\n title?: string\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Section grouping for sidebar items.\n */\nexport function SidebarSection({ title, children, className }: SidebarSectionProps) {\n const { isCollapsed } = useContext(SidebarContext)\n\n return (\n <View className={cn('px-2 py-2', className)}>\n {title && !isCollapsed && (\n <Text className=\"px-3 py-2 text-xs font-semibold uppercase tracking-wider text-text-tertiary\">\n {title}\n </Text>\n )}\n <View className=\"gap-0.5\">\n {children}\n </View>\n </View>\n )\n}\n\nexport interface SidebarItemProps extends Omit<PressableProps, 'children'> {\n /** Unique identifier for the item */\n id: string\n /** Icon component */\n icon?: React.ComponentType<{ size?: number; className?: string }>\n /** Label text */\n label: string\n /** Badge content (e.g., notification count) */\n badge?: React.ReactNode\n /** Whether this item has nested items */\n hasChildren?: boolean\n /** Whether nested items are expanded */\n isExpanded?: boolean\n /** Additional className */\n className?: string\n}\n\n/**\n * Individual navigation item in sidebar.\n */\nexport function SidebarItem({\n id,\n icon: Icon,\n label,\n badge,\n hasChildren,\n isExpanded,\n className,\n onPress,\n ...props\n}: SidebarItemProps) {\n const { isCollapsed, activeItem, onItemSelect } = useContext(SidebarContext)\n const isActive = activeItem === id\n\n const handlePress = (e: any) => {\n onItemSelect?.(id)\n onPress?.(e)\n }\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ selected: isActive }}\n accessibilityLabel={label}\n onPress={handlePress}\n className={cn(\n 'flex-row items-center gap-3 px-3 py-2.5 rounded-md transition-colors',\n isActive\n ? 'bg-brand-primary-subtle text-brand-primary'\n : 'text-text-secondary web:hover:bg-interactive-hover active:bg-interactive-active',\n isCollapsed && 'justify-center px-2',\n className\n )}\n {...props}\n >\n {Icon && (\n <Icon\n size={20}\n className={cn(\n isActive ? 'text-brand-primary' : 'text-text-secondary'\n )}\n />\n )}\n {!isCollapsed && (\n <>\n <Text\n numberOfLines={1}\n className={cn(\n 'flex-1 text-sm font-medium',\n isActive ? 'text-brand-primary' : 'text-text-primary'\n )}\n >\n {label}\n </Text>\n {badge && (\n <View className=\"ml-auto\">\n {badge}\n </View>\n )}\n {hasChildren && (\n <Text className=\"text-text-tertiary ml-1\">\n {isExpanded ? '▼' : '▶'}\n </Text>\n )}\n </>\n )}\n </Pressable>\n )\n}\n\nexport interface SidebarDividerProps {\n className?: string\n}\n\n/**\n * Divider between sidebar sections.\n */\nexport function SidebarDivider({ className }: SidebarDividerProps) {\n return (\n <View className={cn('h-px mx-4 my-2 bg-border-subtle', className)} />\n )\n}\n","import React, { createContext, useContext, useState, useMemo } from 'react'\nimport { View, Text, Pressable, ScrollView, type ViewProps, type PressableProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type SortDirection = 'asc' | 'desc' | null\n\ninterface TableContextType {\n sortColumn?: string\n sortDirection: SortDirection\n onSort?: (column: string) => void\n selectedRows: Set<string>\n onSelectRow?: (id: string, selected: boolean) => void\n onSelectAll?: (selected: boolean) => void\n selectable: boolean\n allRowIds: string[]\n}\n\nconst TableContext = createContext<TableContextType>({\n sortDirection: null,\n selectedRows: new Set(),\n selectable: false,\n allRowIds: [],\n})\n\nexport interface TableProps extends ViewProps {\n /** Currently sorted column */\n sortColumn?: string\n /** Sort direction */\n sortDirection?: SortDirection\n /** Callback when sort changes */\n onSort?: (column: string) => void\n /** Selected row IDs (controlled) */\n selectedRows?: Set<string>\n /** Callback when row selection changes */\n onSelectRow?: (id: string, selected: boolean) => void\n /** Callback when select all changes */\n onSelectAll?: (selected: boolean) => void\n /** Enable row selection */\n selectable?: boolean\n /** All row IDs for select all functionality */\n rowIds?: string[]\n /** Whether the table is loading */\n isLoading?: boolean\n /** Number of skeleton rows to show when loading */\n loadingRowCount?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Table component with sorting support.\n *\n * @example\n * <Table sortColumn={sortCol} sortDirection={sortDir} onSort={handleSort}>\n * <TableHeader>\n * <TableRow>\n * <TableHeaderCell sortKey=\"name\">Name</TableHeaderCell>\n * <TableHeaderCell sortKey=\"email\">Email</TableHeaderCell>\n * <TableHeaderCell sortKey=\"status\">Status</TableHeaderCell>\n * </TableRow>\n * </TableHeader>\n * <TableBody>\n * {data.map(row => (\n * <TableRow key={row.id}>\n * <TableCell>{row.name}</TableCell>\n * <TableCell>{row.email}</TableCell>\n * <TableCell>{row.status}</TableCell>\n * </TableRow>\n * ))}\n * </TableBody>\n * </Table>\n */\nexport function Table({\n sortColumn,\n sortDirection = null,\n onSort,\n selectedRows = new Set(),\n onSelectRow,\n onSelectAll,\n selectable = false,\n rowIds = [],\n isLoading = false,\n loadingRowCount = 5,\n className,\n children,\n ...props\n}: TableProps) {\n return (\n <TableContext.Provider\n value={{\n sortColumn,\n sortDirection,\n onSort,\n selectedRows,\n onSelectRow,\n onSelectAll,\n selectable,\n allRowIds: rowIds,\n }}\n >\n <View className={cn('w-full', className)} {...props}>\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <View className=\"w-full min-w-full\">\n {isLoading ? (\n <TableLoadingSkeleton rowCount={loadingRowCount} />\n ) : (\n children\n )}\n </View>\n </ScrollView>\n </View>\n </TableContext.Provider>\n )\n}\n\nexport interface TableHeaderProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Table header container.\n */\nexport function TableHeader({ children, className }: TableHeaderProps) {\n return (\n <View\n accessibilityRole=\"none\"\n className={cn('bg-background-subtle rounded-t-lg', className)}\n >\n {children}\n </View>\n )\n}\n\nexport interface TableBodyProps {\n children?: React.ReactNode\n className?: string\n}\n\n/**\n * Table body container.\n */\nexport function TableBody({ children, className }: TableBodyProps) {\n return (\n <View accessibilityRole=\"none\" className={className}>\n {children}\n </View>\n )\n}\n\nexport interface TableRowProps extends ViewProps {\n /** Whether the row is selected */\n isSelected?: boolean\n /** Whether the row is hoverable */\n isHoverable?: boolean\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Table row.\n */\nexport function TableRow({\n isSelected = false,\n isHoverable = true,\n className,\n children,\n ...props\n}: TableRowProps) {\n return (\n <View\n accessibilityRole=\"none\"\n className={cn(\n 'flex-row border-b border-divider',\n isHoverable && 'web:hover:bg-interactive-hover',\n isSelected && 'bg-interactive-selected',\n className\n )}\n {...props}\n >\n {children}\n </View>\n )\n}\n\nexport interface TableHeaderCellProps extends Omit<PressableProps, 'children'> {\n /** Sort key for this column */\n sortKey?: string\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Cell width in pixels */\n width?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Table header cell with optional sorting.\n */\nexport function TableHeaderCell({\n sortKey,\n align = 'left',\n width,\n className,\n children,\n onPress,\n ...props\n}: TableHeaderCellProps) {\n const { sortColumn, sortDirection, onSort } = useContext(TableContext)\n const isSorted = sortKey && sortColumn === sortKey\n const isSortable = !!sortKey && !!onSort\n\n const handlePress = (e: any) => {\n if (isSortable && sortKey) {\n onSort(sortKey)\n }\n onPress?.(e)\n }\n\n const alignStyles = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n }\n\n const content = (\n <>\n <Text\n className={cn(\n 'text-xs font-semibold uppercase tracking-wider text-text-secondary',\n isSorted && 'text-text-primary'\n )}\n >\n {children}\n </Text>\n {isSortable && (\n <Text className={cn('ml-1 text-xs', isSorted ? 'text-text-primary' : 'text-text-tertiary')}>\n {isSorted ? (sortDirection === 'asc' ? '↑' : '↓') : '↕'}\n </Text>\n )}\n </>\n )\n\n if (isSortable) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Sort by ${children}`}\n onPress={handlePress}\n style={width ? { width } : { flex: 1 }}\n className={cn(\n 'flex-row items-center px-4 py-3',\n alignStyles[align],\n 'web:hover:bg-interactive-hover active:bg-interactive-active',\n className\n )}\n {...props}\n >\n {content}\n </Pressable>\n )\n }\n\n return (\n <View\n style={width ? { width } : { flex: 1 }}\n className={cn(\n 'flex-row items-center px-4 py-3',\n alignStyles[align],\n className\n )}\n >\n {content}\n </View>\n )\n}\n\nexport interface TableCellProps extends ViewProps {\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Cell width in pixels */\n width?: number\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Table data cell.\n */\nexport function TableCell({\n align = 'left',\n width,\n className,\n children,\n ...props\n}: TableCellProps) {\n const alignStyles = {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n }\n\n return (\n <View\n style={width ? { width } : { flex: 1 }}\n className={cn(\n 'justify-center px-4 py-3.5',\n alignStyles[align],\n className\n )}\n {...props}\n >\n {typeof children === 'string' ? (\n <Text className=\"text-sm text-text-primary\">{children}</Text>\n ) : (\n children\n )}\n </View>\n )\n}\n\n// Pagination component\n\nexport interface TablePaginationProps {\n /** Current page (0-indexed) */\n page: number\n /** Items per page */\n pageSize: number\n /** Total number of items */\n totalItems: number\n /** Available page size options */\n pageSizeOptions?: number[]\n /** Callback when page changes */\n onPageChange: (page: number) => void\n /** Callback when page size changes */\n onPageSizeChange?: (pageSize: number) => void\n /** Additional className */\n className?: string\n}\n\n/**\n * Pagination controls for table.\n *\n * @example\n * <TablePagination\n * page={page}\n * pageSize={pageSize}\n * totalItems={100}\n * onPageChange={setPage}\n * onPageSizeChange={setPageSize}\n * />\n */\nexport function TablePagination({\n page,\n pageSize,\n totalItems,\n pageSizeOptions = [10, 25, 50, 100],\n onPageChange,\n onPageSizeChange,\n className,\n}: TablePaginationProps) {\n const totalPages = Math.ceil(totalItems / pageSize)\n const startItem = page * pageSize + 1\n const endItem = Math.min((page + 1) * pageSize, totalItems)\n\n const canGoPrevious = page > 0\n const canGoNext = page < totalPages - 1\n\n return (\n <View\n className={cn(\n 'flex-row items-center justify-between px-4 py-3 border-t border-divider',\n className\n )}\n >\n <View className=\"flex-row items-center gap-2\">\n <Text className=\"text-sm text-text-secondary\">\n Rows per page:\n </Text>\n <View className=\"flex-row gap-1\">\n {pageSizeOptions.map((size) => (\n <Pressable\n key={size}\n onPress={() => onPageSizeChange?.(size)}\n className={cn(\n 'px-2 py-1 rounded',\n pageSize === size\n ? 'bg-brand-primary-subtle text-brand-primary'\n : 'text-text-secondary web:hover:bg-interactive-hover'\n )}\n >\n <Text\n className={cn(\n 'text-sm font-medium',\n pageSize === size ? 'text-brand-primary' : 'text-text-secondary'\n )}\n >\n {size}\n </Text>\n </Pressable>\n ))}\n </View>\n </View>\n\n <View className=\"flex-row items-center gap-4\">\n <Text className=\"text-sm text-text-secondary\">\n {startItem}-{endItem} of {totalItems}\n </Text>\n\n <View className=\"flex-row gap-1\">\n <Pressable\n disabled={!canGoPrevious}\n onPress={() => onPageChange(page - 1)}\n accessibilityLabel=\"Previous page\"\n className={cn(\n 'p-2 rounded',\n canGoPrevious\n ? 'web:hover:bg-interactive-hover active:bg-interactive-active'\n : 'opacity-50'\n )}\n >\n <Text className=\"text-text-secondary\">←</Text>\n </Pressable>\n\n <Pressable\n disabled={!canGoNext}\n onPress={() => onPageChange(page + 1)}\n accessibilityLabel=\"Next page\"\n className={cn(\n 'p-2 rounded',\n canGoNext\n ? 'web:hover:bg-interactive-hover active:bg-interactive-active'\n : 'opacity-50'\n )}\n >\n <Text className=\"text-text-secondary\">→</Text>\n </Pressable>\n </View>\n </View>\n </View>\n )\n}\n\n// Helper hook for managing table state\n\nexport interface UseTableOptions<T> {\n data: T[]\n defaultPageSize?: number\n defaultSortColumn?: string\n defaultSortDirection?: SortDirection\n}\n\nexport interface UseTableReturn<T> {\n sortedData: T[]\n paginatedData: T[]\n page: number\n pageSize: number\n totalItems: number\n sortColumn?: string\n sortDirection: SortDirection\n setPage: (page: number) => void\n setPageSize: (size: number) => void\n handleSort: (column: string) => void\n}\n\n/**\n * Hook for managing table sorting and pagination state.\n *\n * @example\n * const {\n * paginatedData,\n * page, pageSize, totalItems,\n * sortColumn, sortDirection,\n * setPage, setPageSize, handleSort\n * } = useTable({\n * data: users,\n * defaultPageSize: 10,\n * })\n */\nexport function useTable<T extends Record<string, any>>({\n data,\n defaultPageSize = 10,\n defaultSortColumn,\n defaultSortDirection = null,\n}: UseTableOptions<T>): UseTableReturn<T> {\n const [page, setPage] = useState(0)\n const [pageSize, setPageSize] = useState(defaultPageSize)\n const [sortColumn, setSortColumn] = useState<string | undefined>(defaultSortColumn)\n const [sortDirection, setSortDirection] = useState<SortDirection>(defaultSortDirection)\n\n const sortedData = useMemo(() => {\n if (!sortColumn || !sortDirection) return data\n\n return [...data].sort((a, b) => {\n const aVal = a[sortColumn]\n const bVal = b[sortColumn]\n\n if (aVal === bVal) return 0\n if (aVal === null || aVal === undefined) return 1\n if (bVal === null || bVal === undefined) return -1\n\n const comparison = aVal < bVal ? -1 : 1\n return sortDirection === 'asc' ? comparison : -comparison\n })\n }, [data, sortColumn, sortDirection])\n\n const paginatedData = useMemo(() => {\n const start = page * pageSize\n return sortedData.slice(start, start + pageSize)\n }, [sortedData, page, pageSize])\n\n const handleSort = (column: string) => {\n if (sortColumn === column) {\n // Cycle: asc -> desc -> null\n setSortDirection((prev) =>\n prev === 'asc' ? 'desc' : prev === 'desc' ? null : 'asc'\n )\n } else {\n setSortColumn(column)\n setSortDirection('asc')\n }\n setPage(0) // Reset to first page on sort change\n }\n\n const handlePageSizeChange = (newSize: number) => {\n setPageSize(newSize)\n setPage(0) // Reset to first page on page size change\n }\n\n return {\n sortedData,\n paginatedData,\n page,\n pageSize,\n totalItems: data.length,\n sortColumn,\n sortDirection,\n setPage,\n setPageSize: handlePageSizeChange,\n handleSort,\n }\n}\n\n// Selection components\n\nexport interface TableSelectAllCellProps {\n className?: string\n}\n\n/**\n * Checkbox cell for selecting all rows in header.\n */\nexport function TableSelectAllCell({ className }: TableSelectAllCellProps) {\n const { selectedRows, onSelectAll, allRowIds, selectable } = useContext(TableContext)\n\n if (!selectable) return null\n\n const allSelected = allRowIds.length > 0 && allRowIds.every((id) => selectedRows.has(id))\n const someSelected = allRowIds.some((id) => selectedRows.has(id)) && !allSelected\n\n return (\n <View className={cn('w-12 px-4 py-3 items-center justify-center', className)}>\n <Pressable\n accessibilityRole=\"checkbox\"\n accessibilityState={{ checked: allSelected ? true : someSelected ? 'mixed' : false }}\n onPress={() => onSelectAll?.(!allSelected)}\n className={cn(\n 'w-5 h-5 rounded border-2 items-center justify-center',\n allSelected\n ? 'bg-brand-primary border-brand-primary'\n : someSelected\n ? 'bg-brand-primary-subtle border-brand-primary'\n : 'border-border-strong bg-transparent'\n )}\n >\n {(allSelected || someSelected) && (\n <Text className=\"text-white text-xs font-bold\">\n {allSelected ? '✓' : '−'}\n </Text>\n )}\n </Pressable>\n </View>\n )\n}\n\nexport interface TableSelectCellProps {\n /** Row ID for selection */\n rowId: string\n className?: string\n}\n\n/**\n * Checkbox cell for selecting individual rows.\n */\nexport function TableSelectCell({ rowId, className }: TableSelectCellProps) {\n const { selectedRows, onSelectRow, selectable } = useContext(TableContext)\n\n if (!selectable) return null\n\n const isSelected = selectedRows.has(rowId)\n\n return (\n <View className={cn('w-12 px-4 py-3.5 items-center justify-center', className)}>\n <Pressable\n accessibilityRole=\"checkbox\"\n accessibilityState={{ checked: isSelected }}\n onPress={() => onSelectRow?.(rowId, !isSelected)}\n className={cn(\n 'w-5 h-5 rounded border-2 items-center justify-center',\n isSelected\n ? 'bg-brand-primary border-brand-primary'\n : 'border-border-strong bg-transparent web:hover:border-brand-primary'\n )}\n >\n {isSelected && (\n <Text className=\"text-white text-xs font-bold\">✓</Text>\n )}\n </Pressable>\n </View>\n )\n}\n\n// Loading skeleton\n\ninterface TableLoadingSkeletonProps {\n rowCount: number\n}\n\nfunction TableLoadingSkeleton({ rowCount }: TableLoadingSkeletonProps) {\n return (\n <>\n <TableHeader>\n <TableRow isHoverable={false}>\n {[1, 2, 3, 4].map((i) => (\n <View key={i} className=\"flex-1 px-4 py-3\">\n <View className=\"h-4 w-20 bg-interactive-disabled rounded animate-pulse\" />\n </View>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {Array.from({ length: rowCount }).map((_, rowIndex) => (\n <TableRow key={rowIndex} isHoverable={false}>\n {[1, 2, 3, 4].map((colIndex) => (\n <View key={colIndex} className=\"flex-1 px-4 py-3.5\">\n <View\n className=\"h-4 bg-interactive-disabled rounded animate-pulse\"\n style={{ width: `${50 + Math.random() * 40}%` }}\n />\n </View>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </>\n )\n}\n\n// Empty state\n\nexport interface TableEmptyStateProps {\n /** Title for empty state */\n title?: string\n /** Description for empty state */\n description?: string\n /** Action button/element */\n action?: React.ReactNode\n /** Custom icon */\n icon?: React.ReactNode\n /** Additional className */\n className?: string\n}\n\n/**\n * Empty state component for tables with no data.\n */\nexport function TableEmptyState({\n title = 'No data',\n description = 'There are no items to display.',\n action,\n icon,\n className,\n}: TableEmptyStateProps) {\n return (\n <View className={cn('items-center justify-center py-12 px-4', className)}>\n {icon && <View className=\"mb-4\">{icon}</View>}\n <Text className=\"text-lg font-semibold text-text-primary mb-1\">{title}</Text>\n <Text className=\"text-sm text-text-secondary text-center mb-4\">{description}</Text>\n {action}\n </View>\n )\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface EmptyStateProps extends ViewProps {\n /** Icon component to display */\n icon?: React.ComponentType<{ size?: number; className?: string }>\n /** Title text */\n title: string\n /** Description text */\n description?: string\n /** Action element (usually a button) */\n action?: React.ReactNode\n /** Additional className */\n className?: string\n}\n\n/**\n * Empty state component for when there's no data to display.\n *\n * @example\n * <EmptyState\n * icon={InboxIcon}\n * title=\"No messages\"\n * description=\"You don't have any messages yet.\"\n * action={<Button>Compose</Button>}\n * />\n */\nexport function EmptyState({\n icon: Icon,\n title,\n description,\n action,\n className,\n ...props\n}: EmptyStateProps) {\n return (\n <View\n className={cn(\n 'items-center justify-center py-12 px-6',\n className\n )}\n {...props}\n >\n {Icon && (\n <View className=\"mb-4 p-4 rounded-full bg-background-subtle\">\n <Icon size={32} className=\"text-text-tertiary\" />\n </View>\n )}\n\n <Text className=\"text-lg font-semibold text-text-primary text-center mb-2\">\n {title}\n </Text>\n\n {description && (\n <Text className=\"text-sm text-text-secondary text-center max-w-xs mb-6\">\n {description}\n </Text>\n )}\n\n {action && (\n <View className=\"mt-2\">\n {action}\n </View>\n )}\n </View>\n )\n}\n","import React, { createContext, useContext } from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type StepStatus = 'completed' | 'active' | 'upcoming' | 'error'\nexport type StepperOrientation = 'horizontal' | 'vertical'\n\ninterface StepperContextType {\n activeStep: number\n orientation: StepperOrientation\n}\n\nconst StepperContext = createContext<StepperContextType>({\n activeStep: 0,\n orientation: 'horizontal',\n})\n\nexport interface StepperProps extends ViewProps {\n /** Current active step (0-indexed) */\n activeStep: number\n /** Stepper orientation */\n orientation?: StepperOrientation\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Stepper component for multi-step flows.\n *\n * @example\n * <Stepper activeStep={1}>\n * <Step>\n * <StepIndicator />\n * <StepLabel>Account</StepLabel>\n * </Step>\n * <Step>\n * <StepIndicator />\n * <StepLabel>Profile</StepLabel>\n * </Step>\n * <Step>\n * <StepIndicator />\n * <StepLabel>Review</StepLabel>\n * </Step>\n * </Stepper>\n */\nexport function Stepper({\n activeStep,\n orientation = 'horizontal',\n className,\n children,\n ...props\n}: StepperProps) {\n return (\n <StepperContext.Provider value={{ activeStep, orientation }}>\n <View\n className={cn(\n orientation === 'horizontal' ? 'flex-row items-center' : 'flex-col',\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n return (\n <>\n {React.cloneElement(child as React.ReactElement<any>, { index })}\n {index < React.Children.count(children) - 1 && (\n <StepConnector index={index} />\n )}\n </>\n )\n }\n return child\n })}\n </View>\n </StepperContext.Provider>\n )\n}\n\ninterface StepConnectorProps {\n index: number\n}\n\nfunction StepConnector({ index }: StepConnectorProps) {\n const { activeStep, orientation } = useContext(StepperContext)\n const isCompleted = index < activeStep\n\n if (orientation === 'horizontal') {\n return (\n <View\n className={cn(\n 'flex-1 h-0.5 mx-2',\n isCompleted ? 'bg-brand-primary' : 'bg-border-default'\n )}\n />\n )\n }\n\n return (\n <View\n className={cn(\n 'w-0.5 h-8 ml-4 my-1',\n isCompleted ? 'bg-brand-primary' : 'bg-border-default'\n )}\n />\n )\n}\n\nexport interface StepProps {\n /** Step index (injected by Stepper) */\n index?: number\n /** Override step status */\n status?: StepStatus\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Individual step in the stepper.\n */\nexport function Step({ index = 0, status, className, children }: StepProps) {\n const { activeStep, orientation } = useContext(StepperContext)\n\n const derivedStatus: StepStatus = status || (\n index < activeStep ? 'completed' :\n index === activeStep ? 'active' : 'upcoming'\n )\n\n return (\n <View\n className={cn(\n orientation === 'horizontal' ? 'items-center' : 'flex-row items-start',\n className\n )}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child as React.ReactElement<any>, {\n status: derivedStatus,\n index,\n })\n }\n return child\n })}\n </View>\n )\n}\n\nexport interface StepIndicatorProps {\n /** Step status (injected by Step) */\n status?: StepStatus\n /** Step index (injected by Step) */\n index?: number\n /** Custom icon */\n icon?: React.ReactNode\n /** Additional className */\n className?: string\n}\n\n/**\n * Visual indicator for step status.\n */\nexport function StepIndicator({\n status = 'upcoming',\n index = 0,\n icon,\n className,\n}: StepIndicatorProps) {\n const statusStyles: Record<StepStatus, string> = {\n completed: 'bg-brand-primary border-brand-primary',\n active: 'bg-brand-primary border-brand-primary',\n upcoming: 'bg-surface-base border-border-strong',\n error: 'bg-status-error border-status-error',\n }\n\n return (\n <View\n className={cn(\n 'w-8 h-8 rounded-full border-2 items-center justify-center',\n statusStyles[status],\n className\n )}\n >\n {icon || (\n <Text\n className={cn(\n 'text-sm font-semibold',\n status === 'upcoming' ? 'text-text-secondary' : 'text-white'\n )}\n >\n {status === 'completed' ? '✓' : index + 1}\n </Text>\n )}\n </View>\n )\n}\n\nexport interface StepLabelProps {\n /** Step status (injected by Step) */\n status?: StepStatus\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Label for a step.\n */\nexport function StepLabel({ status = 'upcoming', className, children }: StepLabelProps) {\n const { orientation } = useContext(StepperContext)\n\n return (\n <Text\n className={cn(\n 'text-sm font-medium',\n orientation === 'horizontal' ? 'mt-2' : 'ml-3',\n status === 'active' ? 'text-text-primary' :\n status === 'completed' ? 'text-brand-primary' :\n status === 'error' ? 'text-status-error' :\n 'text-text-secondary',\n className\n )}\n >\n {children}\n </Text>\n )\n}\n\nexport interface StepContentProps {\n /** Step status (injected by Step) */\n status?: StepStatus\n /** Additional className */\n className?: string\n children?: React.ReactNode\n}\n\n/**\n * Content area for vertical stepper.\n */\nexport function StepContent({ status = 'upcoming', className, children }: StepContentProps) {\n if (status !== 'active') return null\n\n return (\n <View className={cn('ml-11 mt-2 pb-4', className)}>\n {children}\n </View>\n )\n}\n","import React from 'react'\nimport { Text, type TextProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type DateTimeFormat = \n | 'date' // 2024-01-15\n | 'time' // 14:30\n | 'datetime' // 2024-01-15 14:30\n | 'relative' // 2 hours ago\n | 'short' // Jan 15\n | 'medium' // Jan 15, 2024\n | 'long' // January 15, 2024\n | 'full' // Monday, January 15, 2024\n\nexport interface DateTimeProps extends TextProps {\n /** Date value (timestamp in ms, Date object, or ISO string) */\n value: number | Date | string | null | undefined\n /** Display format */\n format?: DateTimeFormat\n /** Custom format string (overrides format) */\n customFormat?: string\n /** Whether to show in UTC */\n isUTC?: boolean\n /** Fallback text when value is null/undefined */\n fallback?: string\n /** Text color */\n color?: 'primary' | 'secondary' | 'tertiary' | 'inherit'\n /** Additional className */\n className?: string\n}\n\nconst colorStyles = {\n primary: 'text-text-primary',\n secondary: 'text-text-secondary',\n tertiary: 'text-text-tertiary',\n inherit: '',\n}\n\n/**\n * Formats a date value to a readable string.\n */\nfunction formatDate(\n value: number | Date | string,\n format: DateTimeFormat,\n isUTC: boolean\n): string {\n const date = value instanceof Date ? value : new Date(value)\n \n if (isNaN(date.getTime())) {\n return 'Invalid Date'\n }\n\n // For relative time\n if (format === 'relative') {\n return getRelativeTime(date)\n }\n\n // Use Intl.DateTimeFormat for locale-aware formatting\n const options: Intl.DateTimeFormatOptions = {}\n \n switch (format) {\n case 'date':\n options.year = 'numeric'\n options.month = '2-digit'\n options.day = '2-digit'\n break\n case 'time':\n options.hour = '2-digit'\n options.minute = '2-digit'\n break\n case 'datetime':\n options.year = 'numeric'\n options.month = '2-digit'\n options.day = '2-digit'\n options.hour = '2-digit'\n options.minute = '2-digit'\n break\n case 'short':\n options.month = 'short'\n options.day = 'numeric'\n break\n case 'medium':\n options.month = 'short'\n options.day = 'numeric'\n options.year = 'numeric'\n break\n case 'long':\n options.month = 'long'\n options.day = 'numeric'\n options.year = 'numeric'\n break\n case 'full':\n options.weekday = 'long'\n options.month = 'long'\n options.day = 'numeric'\n options.year = 'numeric'\n break\n }\n\n if (isUTC) {\n options.timeZone = 'UTC'\n }\n\n return new Intl.DateTimeFormat(undefined, options).format(date)\n}\n\n/**\n * Gets relative time string (e.g., \"2 hours ago\", \"in 3 days\")\n */\nfunction getRelativeTime(date: Date): string {\n const now = new Date()\n const diffMs = date.getTime() - now.getTime()\n const diffSecs = Math.round(diffMs / 1000)\n const diffMins = Math.round(diffSecs / 60)\n const diffHours = Math.round(diffMins / 60)\n const diffDays = Math.round(diffHours / 24)\n const diffWeeks = Math.round(diffDays / 7)\n const diffMonths = Math.round(diffDays / 30)\n const diffYears = Math.round(diffDays / 365)\n\n // Use Intl.RelativeTimeFormat if available\n if (typeof Intl !== 'undefined' && Intl.RelativeTimeFormat) {\n const rtf = new Intl.RelativeTimeFormat(undefined, { numeric: 'auto' })\n \n if (Math.abs(diffSecs) < 60) {\n return rtf.format(diffSecs, 'second')\n }\n if (Math.abs(diffMins) < 60) {\n return rtf.format(diffMins, 'minute')\n }\n if (Math.abs(diffHours) < 24) {\n return rtf.format(diffHours, 'hour')\n }\n if (Math.abs(diffDays) < 7) {\n return rtf.format(diffDays, 'day')\n }\n if (Math.abs(diffWeeks) < 4) {\n return rtf.format(diffWeeks, 'week')\n }\n if (Math.abs(diffMonths) < 12) {\n return rtf.format(diffMonths, 'month')\n }\n return rtf.format(diffYears, 'year')\n }\n\n // Fallback for environments without Intl.RelativeTimeFormat\n const absSeconds = Math.abs(diffSecs)\n const isFuture = diffMs > 0\n const prefix = isFuture ? 'in ' : ''\n const suffix = isFuture ? '' : ' ago'\n\n if (absSeconds < 60) {\n return 'just now'\n }\n if (Math.abs(diffMins) < 60) {\n const mins = Math.abs(diffMins)\n return `${prefix}${mins} minute${mins === 1 ? '' : 's'}${suffix}`\n }\n if (Math.abs(diffHours) < 24) {\n const hours = Math.abs(diffHours)\n return `${prefix}${hours} hour${hours === 1 ? '' : 's'}${suffix}`\n }\n if (Math.abs(diffDays) < 7) {\n const days = Math.abs(diffDays)\n return `${prefix}${days} day${days === 1 ? '' : 's'}${suffix}`\n }\n if (Math.abs(diffWeeks) < 4) {\n const weeks = Math.abs(diffWeeks)\n return `${prefix}${weeks} week${weeks === 1 ? '' : 's'}${suffix}`\n }\n if (Math.abs(diffMonths) < 12) {\n const months = Math.abs(diffMonths)\n return `${prefix}${months} month${months === 1 ? '' : 's'}${suffix}`\n }\n const years = Math.abs(diffYears)\n return `${prefix}${years} year${years === 1 ? '' : 's'}${suffix}`\n}\n\n/**\n * DateTime component for displaying formatted dates and times.\n *\n * @example\n * // Basic usage\n * <DateTime value={Date.now()} />\n *\n * @example\n * // Different formats\n * <DateTime value={date} format=\"relative\" />\n * <DateTime value={date} format=\"long\" />\n *\n * @example\n * // UTC time\n * <DateTime value={timestamp} format=\"datetime\" isUTC />\n */\nexport function DateTime({\n value,\n format = 'datetime',\n customFormat,\n isUTC = false,\n fallback = '-',\n color = 'inherit',\n className,\n ...props\n}: DateTimeProps) {\n if (value === null || value === undefined) {\n return (\n <Text className={cn(colorStyles[color], className)} {...props}>\n {fallback}\n </Text>\n )\n }\n\n const formattedDate = formatDate(value, format, isUTC)\n\n return (\n <Text className={cn(colorStyles[color], className)} {...props}>\n {formattedDate}\n </Text>\n )\n}\n\n/**\n * Utility function to format dates outside of React components.\n */\nexport function formatDateTime(\n value: number | Date | string | null | undefined,\n format: DateTimeFormat = 'datetime',\n isUTC: boolean = false,\n fallback: string = '-'\n): string {\n if (value === null || value === undefined) {\n return fallback\n }\n return formatDate(value, format, isUTC)\n}\n","import React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport type MetricTrend = 'up' | 'down' | 'neutral'\n\nexport interface MetricProps extends ViewProps {\n value: string\n label: string\n unit?: string\n trend?: MetricTrend\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}\n\nconst sizeConfig = {\n sm: { value: 'text-lg font-bold', label: 'text-xs', unit: 'text-xs' },\n md: { value: 'text-2xl font-bold', label: 'text-xs', unit: 'text-sm' },\n lg: { value: 'text-4xl font-bold', label: 'text-sm', unit: 'text-base' },\n}\n\nconst trendColors: Record<MetricTrend, string> = {\n up: 'text-result-improve',\n down: 'text-result-degrade',\n neutral: 'text-result-inconclusive',\n}\n\nconst trendArrows: Record<MetricTrend, string> = {\n up: '\\u2191',\n down: '\\u2193',\n neutral: '\\u2192',\n}\n\nexport function Metric({\n value,\n label,\n unit,\n trend,\n size = 'md',\n className,\n ...props\n}: MetricProps) {\n const styles = sizeConfig[size]\n\n return (\n <View className={cn('items-center', className)} {...props}>\n <View className=\"flex-row items-baseline gap-1\">\n <Text className={cn(styles.value, 'text-text-primary')}>{value}</Text>\n {unit && (\n <Text className={cn(styles.unit, 'text-text-tertiary')}>{unit}</Text>\n )}\n {trend && (\n <Text className={cn(styles.unit, trendColors[trend])}>\n {trendArrows[trend]}\n </Text>\n )}\n </View>\n <Text className={cn(styles.label, 'text-text-secondary mt-1')}>\n {label}\n </Text>\n </View>\n )\n}\n\nexport interface MetricGroupProps extends ViewProps {\n className?: string\n children: React.ReactNode\n}\n\nexport function MetricGroup({\n className,\n children,\n ...props\n}: MetricGroupProps) {\n const items = React.Children.toArray(children)\n\n return (\n <View className={cn('flex-row items-center', className)} {...props}>\n {items.map((child, i) => (\n <React.Fragment key={i}>\n <View className=\"flex-1 items-center\">{child}</View>\n {i < items.length - 1 && (\n <View\n className=\"w-px h-8 bg-divider mx-2\"\n testID=\"metric-divider\"\n />\n )}\n </React.Fragment>\n ))}\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport React from 'react'\nimport { View, Text, Pressable } from 'react-native'\n\nexport interface RestTimerProps {\n totalSeconds: number\n elapsedMs: number\n onSkip: () => void\n onAddTime: () => void\n nextSetInfo?: string\n visible: boolean\n}\n\nexport function RestTimer({\n totalSeconds,\n elapsedMs,\n onSkip,\n onAddTime,\n nextSetInfo,\n visible,\n}: RestTimerProps) {\n if (!visible) return null\n\n const remainingMs = Math.max(0, totalSeconds * 1000 - elapsedMs)\n const remainingSec = Math.ceil(remainingMs / 1000)\n const minutes = Math.floor(remainingSec / 60)\n const seconds = remainingSec % 60\n const timeDisplay = `${minutes}:${String(seconds).padStart(2, '0')}`\n const progressPct = Math.min(100, (elapsedMs / (totalSeconds * 1000)) * 100)\n\n return (\n <View\n style={{\n width: '100%',\n backgroundColor: '#1C1C1C',\n borderTopWidth: 1,\n borderTopColor: '#1F1F1F',\n paddingVertical: 12,\n paddingHorizontal: 16,\n }}\n accessibilityRole=\"timer\"\n accessibilityLabel={`Rest timer, ${remainingSec} seconds remaining`}\n testID=\"rest-timer\"\n >\n {/* Top row */}\n <View\n style={{\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: 8,\n }}\n >\n {/* Left side */}\n <View style={{ flexDirection: 'column' }}>\n <Text\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n textTransform: 'uppercase',\n letterSpacing: 1,\n color: '#9CA3AF',\n }}\n testID=\"rest-timer-label\"\n >\n REST\n </Text>\n {nextSetInfo != null && (\n <Text\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n color: '#6B7280',\n marginTop: 2,\n }}\n testID=\"rest-timer-next-set\"\n >\n {nextSetInfo}\n </Text>\n )}\n </View>\n\n {/* Right side - time display */}\n <Text\n style={{\n fontSize: 28,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: '#F3F4F6',\n fontVariant: ['tabular-nums'],\n letterSpacing: -0.5,\n }}\n testID=\"rest-timer-time\"\n >\n {timeDisplay}\n </Text>\n </View>\n\n {/* Progress bar */}\n <View\n style={{\n height: 3,\n backgroundColor: '#1F1F1F',\n borderRadius: 2,\n marginBottom: 12,\n }}\n testID=\"rest-timer-progress-track\"\n >\n <View\n style={{\n height: '100%',\n backgroundColor: '#FF7900',\n borderRadius: 2,\n width: `${progressPct}%`,\n }}\n testID=\"rest-timer-progress-fill\"\n />\n </View>\n\n {/* Actions row */}\n <View style={{ flexDirection: 'row', gap: 8 }}>\n <Pressable\n onPress={onAddTime}\n style={{\n backgroundColor: 'rgba(255,255,255,0.06)',\n paddingVertical: 8,\n paddingHorizontal: 20,\n borderRadius: 8,\n }}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Add 30 seconds\"\n testID=\"rest-timer-add-time\"\n >\n <Text\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n color: '#9CA3AF',\n }}\n >\n +30s\n </Text>\n </Pressable>\n <Pressable\n onPress={onSkip}\n style={{\n backgroundColor: 'rgba(255,121,0,0.12)',\n paddingVertical: 8,\n paddingHorizontal: 20,\n borderRadius: 8,\n }}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Skip rest\"\n testID=\"rest-timer-skip\"\n >\n <Text\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n color: '#FF7900',\n }}\n >\n Skip\n </Text>\n </Pressable>\n </View>\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport React from 'react'\nimport { View, Text } from 'react-native'\n\nexport interface SupersetWrapperProps {\n label?: string\n color?: string\n children: React.ReactNode\n syncExpansion?: boolean\n}\n\nconst DEFAULTS = {\n label: 'SS',\n color: '#FF7900',\n bgBase: '#101010',\n} as const\n\nexport function SupersetWrapper({\n label = DEFAULTS.label,\n color = DEFAULTS.color,\n children,\n}: SupersetWrapperProps) {\n return (\n <View\n style={{\n position: 'relative',\n borderLeftWidth: 3,\n borderLeftColor: color,\n paddingLeft: 8,\n marginHorizontal: 12,\n marginBottom: 8,\n overflow: 'visible',\n }}\n accessibilityRole={\"group\" as any}\n accessibilityLabel={`Superset: ${label}`}\n testID=\"superset-wrapper\"\n >\n <Text\n style={{\n position: 'absolute',\n top: -1,\n left: -3,\n fontSize: 9,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '700',\n backgroundColor: color,\n color: DEFAULTS.bgBase,\n paddingVertical: 2,\n paddingHorizontal: 6,\n borderBottomRightRadius: 4,\n letterSpacing: 0.5,\n zIndex: 2,\n }}\n testID=\"superset-label\"\n >\n {label}\n </Text>\n <View style={{ gap: 2 }} testID=\"superset-children\">\n {children}\n </View>\n </View>\n )\n}\n","/**\n * Color utility functions for the design system\n *\n * lighten/darken are re-exported from shadows.ts which uses HSV-based\n * color math for more perceptually consistent results across hues.\n */\n\nexport { lighten, darken } from '../theme/shadows'\n\nexport type StatusType = 'success' | 'error' | 'warning' | 'info'\nexport type ResultType = 'improve' | 'degrade' | 'inconclusive' | 'neutral'\n\n/**\n * Get the semantic color token for a status type.\n *\n * @param status - The status type\n * @returns The CSS variable reference for the status color\n *\n * @example\n * const color = getStatusColor('success') // 'var(--color-status-success)'\n */\nexport function getStatusColor(status: StatusType): string {\n return `var(--color-status-${status})`\n}\n\n/**\n * Get the semantic color token for a result type.\n *\n * @param result - The result type\n * @returns The CSS variable reference for the result color\n *\n * @example\n * const color = getResultColor('improve') // 'var(--color-result-improve)'\n */\nexport function getResultColor(result: ResultType): string {\n return `var(--color-result-${result})`\n}\n\n/**\n * Apply alpha/opacity to a color.\n * Works with hex colors and rgb values.\n *\n * @param color - The color value (hex or rgb)\n * @param opacity - Opacity value between 0 and 1\n * @returns The color with alpha applied\n *\n * @example\n * alpha('#5048E5', 0.5) // 'rgba(80, 72, 229, 0.5)'\n * alpha('rgb(80, 72, 229)', 0.5) // 'rgba(80, 72, 229, 0.5)'\n */\nexport function alpha(color: string, opacity: number): string {\n // Clamp opacity between 0 and 1\n const clampedOpacity = Math.max(0, Math.min(1, opacity))\n\n // Handle hex colors\n if (color.startsWith('#')) {\n const hex = color.slice(1)\n let r: number, g: number, b: number\n\n if (hex.length === 3) {\n r = parseInt(hex[0] + hex[0], 16)\n g = parseInt(hex[1] + hex[1], 16)\n b = parseInt(hex[2] + hex[2], 16)\n } else if (hex.length === 6) {\n r = parseInt(hex.slice(0, 2), 16)\n g = parseInt(hex.slice(2, 4), 16)\n b = parseInt(hex.slice(4, 6), 16)\n } else {\n return color\n }\n\n return `rgba(${r}, ${g}, ${b}, ${clampedOpacity})`\n }\n\n // Handle rgb colors\n const rgbMatch = color.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/)\n if (rgbMatch) {\n const [, r, g, b] = rgbMatch\n return `rgba(${r}, ${g}, ${b}, ${clampedOpacity})`\n }\n\n // Handle rgba colors - replace the alpha value\n const rgbaMatch = color.match(/rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*[\\d.]+\\)/)\n if (rgbaMatch) {\n const [, r, g, b] = rgbaMatch\n return `rgba(${r}, ${g}, ${b}, ${clampedOpacity})`\n }\n\n return color\n}\n\n/**\n * Determine if a color is light or dark.\n * Useful for determining text color contrast.\n *\n * @param color - Hex color value\n * @returns 'light' or 'dark'\n *\n * @example\n * getLuminance('#FFFFFF') // 'light'\n * getLuminance('#000000') // 'dark'\n */\nexport function getLuminance(color: string): 'light' | 'dark' {\n if (!color.startsWith('#')) return 'dark'\n\n const hex = color.slice(1)\n let r: number, g: number, b: number\n\n if (hex.length === 3) {\n r = parseInt(hex[0] + hex[0], 16)\n g = parseInt(hex[1] + hex[1], 16)\n b = parseInt(hex[2] + hex[2], 16)\n } else if (hex.length === 6) {\n r = parseInt(hex.slice(0, 2), 16)\n g = parseInt(hex.slice(2, 4), 16)\n b = parseInt(hex.slice(4, 6), 16)\n } else {\n return 'dark'\n }\n\n // Calculate relative luminance using sRGB\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255\n\n return luminance > 0.5 ? 'light' : 'dark'\n}\n\n/**\n * Get a contrasting text color for a given background.\n *\n * @param backgroundColor - The background color (hex)\n * @returns 'white' or 'black' for contrast\n *\n * @example\n * getContrastText('#5048E5') // 'white'\n * getContrastText('#FFFFFF') // 'black'\n */\nexport function getContrastText(backgroundColor: string): string {\n return getLuminance(backgroundColor) === 'light' ? '#000000' : '#FFFFFF'\n}\n\n","/**\n * Form utility functions for consistent form field handling\n */\n\nimport React from 'react'\n\nexport interface FieldState {\n /** Whether the field has been touched */\n touched: boolean\n /** Whether the field has an error */\n hasError: boolean\n /** Error message if any */\n errorMessage?: string\n /** Whether the field is required */\n isRequired?: boolean\n}\n\nexport interface FieldWrapperProps {\n /** Field label */\n label?: string\n /** Helper text */\n helperText?: string\n /** Error message */\n errorMessage?: string\n /** Whether the field is required */\n isRequired?: boolean\n /** Whether the field is disabled */\n isDisabled?: boolean\n /** Whether to show error state */\n isInvalid?: boolean\n}\n\n/**\n * Get validation state props from field state\n */\nexport function getFieldValidationProps(state: FieldState): {\n isInvalid: boolean\n errorMessage?: string\n} {\n return {\n isInvalid: state.touched && state.hasError,\n errorMessage: state.touched && state.hasError ? state.errorMessage : undefined,\n }\n}\n\n/**\n * Create a field ID from label text\n */\nexport function createFieldId(label: string): string {\n return label\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '')\n}\n\n/**\n * Get aria attributes for form field\n */\nexport function getFieldAriaProps(props: FieldWrapperProps & { id: string }): {\n 'aria-invalid'?: boolean\n 'aria-required'?: boolean\n 'aria-describedby'?: string\n} {\n const describedBy: string[] = []\n\n if (props.helperText) {\n describedBy.push(`${props.id}-helper`)\n }\n\n if (props.isInvalid && props.errorMessage) {\n describedBy.push(`${props.id}-error`)\n }\n\n return {\n 'aria-invalid': props.isInvalid || undefined,\n 'aria-required': props.isRequired || undefined,\n 'aria-describedby': describedBy.length > 0 ? describedBy.join(' ') : undefined,\n }\n}\n\n/**\n * Validate email format\n */\nexport function isValidEmail(email: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n}\n\n/**\n * Validate minimum length\n */\nexport function hasMinLength(value: string, minLength: number): boolean {\n return value.length >= minLength\n}\n\n/**\n * Validate maximum length\n */\nexport function hasMaxLength(value: string, maxLength: number): boolean {\n return value.length <= maxLength\n}\n\n/**\n * Check if value is empty (null, undefined, or empty string)\n */\nexport function isEmpty(value: unknown): boolean {\n if (value === null || value === undefined) return true\n if (typeof value === 'string') return value.trim() === ''\n if (Array.isArray(value)) return value.length === 0\n return false\n}\n\n/**\n * Common validation rules\n */\nexport const validationRules = {\n required: (value: unknown) => {\n if (isEmpty(value)) {\n return 'This field is required'\n }\n return undefined\n },\n\n email: (value: string) => {\n if (value && !isValidEmail(value)) {\n return 'Please enter a valid email address'\n }\n return undefined\n },\n\n minLength: (min: number) => (value: string) => {\n if (value && !hasMinLength(value, min)) {\n return `Must be at least ${min} characters`\n }\n return undefined\n },\n\n maxLength: (max: number) => (value: string) => {\n if (value && !hasMaxLength(value, max)) {\n return `Must be no more than ${max} characters`\n }\n return undefined\n },\n\n pattern: (regex: RegExp, message: string) => (value: string) => {\n if (value && !regex.test(value)) {\n return message\n }\n return undefined\n },\n\n match: (otherValue: string, fieldName: string) => (value: string) => {\n if (value !== otherValue) {\n return `Must match ${fieldName}`\n }\n return undefined\n },\n}\n\n/**\n * Compose multiple validation functions\n */\nexport function composeValidators(\n ...validators: Array<(value: any) => string | undefined>\n) {\n return (value: any): string | undefined => {\n for (const validator of validators) {\n const error = validator(value)\n if (error) return error\n }\n return undefined\n }\n}\n\n/**\n * Type for form values\n */\nexport type FormValues = Record<string, unknown>\n\n/**\n * Type for form errors\n */\nexport type FormErrors<T extends FormValues> = Partial<Record<keyof T, string>>\n\n/**\n * Type for form touched state\n */\nexport type FormTouched<T extends FormValues> = Partial<Record<keyof T, boolean>>\n"]}
|