@titan-design/react-ui 0.2.7 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bodymap-BhG55xHM.d.mts +318 -0
- package/dist/bodymap-BhG55xHM.d.ts +318 -0
- package/dist/bodymap.d.mts +3 -0
- package/dist/bodymap.d.ts +3 -0
- package/dist/bodymap.js +3014 -0
- package/dist/bodymap.js.map +1 -0
- package/dist/bodymap.mjs +1088 -0
- package/dist/bodymap.mjs.map +1 -0
- package/dist/chunk-2SISKTWM.mjs +1027 -0
- package/dist/chunk-2SISKTWM.mjs.map +1 -0
- package/dist/{chunk-5SSKGS6E.mjs → chunk-7XPB4NAO.mjs} +124 -4
- package/dist/chunk-7XPB4NAO.mjs.map +1 -0
- package/dist/{chunk-3VLOBS6O.mjs → chunk-SNVKL5WZ.mjs} +42 -5
- package/dist/chunk-SNVKL5WZ.mjs.map +1 -0
- package/dist/index.d.mts +416 -250
- package/dist/index.d.ts +416 -250
- package/dist/index.js +1567 -1123
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1491 -2201
- package/dist/index.mjs.map +1 -1
- package/dist/theme/index.d.mts +288 -2
- package/dist/theme/index.d.ts +288 -2
- package/dist/theme/index.js +159 -2
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/index.mjs +2 -2
- package/dist/theme/tokens-css.d.mts +5 -3
- package/dist/theme/tokens-css.d.ts +5 -3
- package/dist/theme/tokens-css.js +318 -9
- package/dist/theme/tokens-css.js.map +1 -1
- package/dist/theme/tokens-css.mjs +1 -1
- package/dist/theme/tokens-css.mjs.map +1 -1
- package/package.json +10 -1
- package/src/bodymap.ts +37 -0
- package/src/components/custom/Table/Table.test.tsx +27 -0
- package/src/components/custom/Table/Table.tsx +33 -17
- package/src/components/custom/Workout/ActiveWorkoutPage.stories.tsx +118 -0
- package/src/components/custom/Workout/ActiveWorkoutPage.test.tsx +171 -0
- package/src/components/custom/Workout/ActiveWorkoutPage.tsx +442 -0
- package/src/components/custom/Workout/BodyMap.tsx +7 -9
- package/src/components/custom/Workout/BodyMapDetailPanel.tsx +25 -29
- package/src/components/custom/Workout/CapacityBandChart.tsx +2 -3
- package/src/components/custom/Workout/ExerciseCard.test.tsx +24 -0
- package/src/components/custom/Workout/ExerciseCard.tsx +24 -26
- package/src/components/custom/Workout/ExerciseDetailPage.stories.tsx +225 -0
- package/src/components/custom/Workout/ExerciseDetailPage.test.tsx +128 -0
- package/src/components/custom/Workout/ExerciseDetailPage.tsx +624 -0
- package/src/components/custom/Workout/InputBar.tsx +10 -12
- package/src/components/custom/Workout/MesoCard.tsx +2 -4
- package/src/components/custom/Workout/MesoProgressBar.test.tsx +12 -0
- package/src/components/custom/Workout/MesoProgressBar.tsx +5 -1
- package/src/components/custom/Workout/MesoStatusCard.tsx +17 -15
- package/src/components/custom/Workout/MuscleGroupChip.tsx +2 -4
- package/src/components/custom/Workout/PlaceholderStrip.tsx +2 -4
- package/src/components/custom/Workout/PrHistoryModal.tsx +12 -14
- package/src/components/custom/Workout/ProgramPlanningPage.stories.tsx +257 -0
- package/src/components/custom/Workout/ProgramPlanningPage.test.tsx +142 -0
- package/src/components/custom/Workout/ProgramPlanningPage.tsx +418 -0
- package/src/components/custom/Workout/ReadinessCheck.tsx +13 -12
- package/src/components/custom/Workout/RestTimer.test.tsx +10 -0
- package/src/components/custom/Workout/RestTimer.tsx +12 -9
- package/src/components/custom/Workout/SetRow.tsx +16 -19
- package/src/components/custom/Workout/StatusDot.tsx +1 -0
- package/src/components/custom/Workout/StrengthTrendChart.tsx +15 -17
- package/src/components/custom/Workout/TempoBar.stories.tsx +95 -0
- package/src/components/custom/Workout/TempoBar.test.tsx +103 -0
- package/src/components/custom/Workout/TempoBar.tsx +215 -0
- package/src/components/custom/Workout/TempoDisplay.tsx +3 -1
- package/src/components/custom/Workout/TrainingStatusPage.stories.tsx +212 -0
- package/src/components/custom/Workout/TrainingStatusPage.test.tsx +131 -0
- package/src/components/custom/Workout/TrainingStatusPage.tsx +312 -0
- package/src/components/custom/Workout/VelocityStrip.test.tsx +10 -0
- package/src/components/custom/Workout/VelocityStrip.tsx +19 -16
- package/src/components/custom/Workout/WeekRow.tsx +2 -1
- package/src/components/custom/Workout/WorkoutCard.tsx +3 -6
- package/src/components/custom/Workout/index.ts +80 -32
- package/src/test/nativewind-stub.ts +13 -0
- package/src/theme/ThemeProvider.test.tsx +24 -0
- package/src/theme/ThemeProvider.tsx +50 -0
- package/src/theme/config.completeness.test.ts +77 -0
- package/src/theme/config.ts +151 -0
- package/src/theme/index.ts +2 -0
- package/src/theme/manifest/design-freeze.test.ts +155 -0
- package/src/theme/manifest/extract-css-properties.fixture.html +29 -0
- package/src/theme/manifest/extract-css-properties.test.ts +112 -0
- package/src/theme/resolve-color.ts +19 -0
- package/src/theme/tokens-css.ts +5 -3
- package/src/theme/workout-tokens.ts +12 -14
- package/src/utils/index.ts +10 -0
- package/src/utils/workout-format.test.ts +81 -0
- package/src/utils/workout-format.ts +83 -0
- package/dist/chunk-3VLOBS6O.mjs.map +0 -1
- package/dist/chunk-5SSKGS6E.mjs.map +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cn.ts","../src/web-jsx/jsx-runtime.ts","../src/components/ui/alert/Alert.tsx","../src/components/ui/button/Button.tsx","../src/components/ui/input/Input.tsx","../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/BaseBadge.tsx","../src/components/custom/Workout/WeightBadge.tsx","../src/components/custom/Workout/PrBadge.tsx","../src/components/custom/Workout/StatusDot.tsx","../src/theme/workout-tokens.ts","../src/components/custom/Workout/PlaceholderStrip.tsx","../src/components/custom/Workout/TempoDisplay.tsx","../src/components/custom/Workout/DeviationBar.tsx","../src/components/custom/Workout/IntensityBar.tsx","../src/components/custom/Workout/WorkoutPill.tsx","../src/components/custom/Workout/VelocityStrip.tsx","../src/components/custom/Workout/MuscleGroupChip.tsx","../src/components/custom/Workout/Sparkline.tsx","../src/components/custom/Workout/SetRow.tsx","../src/components/custom/Workout/InputBar.tsx","../src/components/custom/Workout/RestTimer.tsx","../src/components/custom/Workout/ExerciseCard.tsx","../src/components/custom/Workout/SupersetWrapper.tsx","../src/components/custom/Workout/MesoProgressBar.tsx","../src/components/custom/Workout/WeekRow.tsx","../src/components/custom/Workout/WorkoutCard.tsx","../src/components/custom/Workout/MesoCard.tsx","../src/components/custom/Workout/PrHistoryModal.tsx","../src/components/custom/Workout/ReadinessCheck.tsx","../src/components/custom/Workout/MesoStatusCard.tsx","../src/components/custom/Workout/StrengthTrendChart.tsx","../src/components/custom/Workout/CapacityBandChart.tsx","../src/components/custom/Workout/muscleTaxonomy.ts","../src/components/custom/Workout/BodyMap.tsx","../src/components/custom/Workout/BodyMapDetailPanel.tsx","../src/components/custom/Treemap/Treemap.tsx","../src/components/custom/Scatter/Scatter.tsx","../src/components/custom/Gauge/Gauge.tsx","../src/utils/colors.ts","../src/utils/form.ts"],"names":["cn","reactJsx","reactJsxs","Button","Pressable","Text","sizeStyles","variantStyles","forwardRef","Input","View","PasswordInput","useState","ActivityIndicator","styles","React","Checkbox","Switch","RNModal","createContext","useContext","ScrollView","colorStyles","arrowStyles","useRef","placementStyles","textSizeStyles","useCallback","Platform","gapStyles","Modal","formatValue","useEffect","useMemo","TextInput","variantColorStyles","alignStyles","statusStyles","sizeConfig","Animated","iconColors","Easing","BRAND_PRIMARY","TEXT_TERTIARY","formatAccessibilityLabel","COLORS","TEXT_PRIMARY","BORDER_DEFAULT","TEXT_SECONDARY","Star","BRAND_PRIMARY_DARK","BRAND_PRIMARY_LIGHT","ACCENT_STOPS","clamp01","Fragment","STATUS_SUCCESS","STATUS_ERROR","STATUS_WARNING","formatDate","toX","toY","MuscleGroup","SimpleMuscleGroup","SURFACE_RAISED","BORDER_STRONG","PALETTE","GRID_LINE","PLOT_LEFT","Gauge"],"mappings":"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","file":"index.mjs","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","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","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',\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',\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'\n : 'border-r border-border',\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', 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',\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',\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 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',\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',\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\">\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', 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',\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',\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',\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 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 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 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'\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'\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 { useState, type ReactNode } from 'react'\nimport { View, Pressable, Animated, type ViewProps } from 'react-native'\n\nexport type BaseBadgeVariant = 'plain' | 'pr'\nexport type BaseBadgeSize = 'sm' | 'md' | 'lg'\n\nexport interface BaseBadgeProps extends ViewProps {\n /** Visual variant — plain (neutral) or pr (brand-primary-subtle) */\n variant?: BaseBadgeVariant\n /** Size variant */\n size?: BaseBadgeSize\n /** Optional icon rendered left of children; hidden from a11y tree */\n icon?: ReactNode\n onPress?: () => void\n className?: string\n children?: ReactNode\n}\n\nexport const baseBadgeSizeConfig: Record<\n BaseBadgeSize,\n { fontSize: number; paddingH: number; paddingV: number; iconSize: number }\n> = {\n sm: { fontSize: 9, paddingH: 6, paddingV: 2, iconSize: 10 },\n md: { fontSize: 10, paddingH: 8, paddingV: 2, iconSize: 12 },\n lg: { fontSize: 12, paddingH: 10, paddingV: 4, iconSize: 14 },\n}\n\nconst variantColors: Record<\n BaseBadgeVariant,\n { backgroundColor: string; borderColor: string }\n> = {\n plain: { backgroundColor: '#1C1C1C', borderColor: '#1F1F1F' },\n pr: {\n backgroundColor: 'rgba(255, 121, 0, 0.12)',\n borderColor: 'rgba(255, 121, 0, 0.12)',\n },\n}\n\nexport function BaseBadge({\n variant = 'plain',\n size = 'md',\n icon,\n onPress,\n className,\n children,\n ...props\n}: BaseBadgeProps) {\n const [scaleAnim] = useState(() => new Animated.Value(1))\n const config = baseBadgeSizeConfig[size]\n const colors = variantColors[variant]\n\n const handlePressIn = () => {\n Animated.timing(scaleAnim, {\n toValue: 0.97,\n duration: 150,\n useNativeDriver: true,\n }).start()\n }\n\n const handlePressOut = () => {\n Animated.timing(scaleAnim, {\n toValue: 1,\n duration: 150,\n useNativeDriver: true,\n }).start()\n }\n\n const badge = (\n <View\n className={className}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 3,\n // borderRadius 2 is intentional per workout-tokens.ts (squared-off pill)\n borderRadius: 2,\n borderWidth: 1,\n borderColor: colors.borderColor,\n backgroundColor: colors.backgroundColor,\n paddingHorizontal: config.paddingH,\n paddingVertical: config.paddingV,\n }}\n {...props}\n >\n {icon != null && (\n <View accessibilityElementsHidden testID=\"base-badge-icon\">\n {icon}\n </View>\n )}\n {children}\n </View>\n )\n\n if (onPress) {\n return (\n <Animated.View style={{ transform: [{ scale: scaleAnim }] }}>\n <Pressable\n onPress={onPress}\n onPressIn={handlePressIn}\n onPressOut={handlePressOut}\n accessibilityRole=\"button\"\n accessibilityLabel={props.accessibilityLabel}\n testID=\"base-badge-pressable\"\n >\n {badge}\n </Pressable>\n </Animated.View>\n )\n }\n\n return badge\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { Text } from 'react-native'\nimport { Dumbbell } from 'lucide-react'\nimport {\n BaseBadge,\n baseBadgeSizeConfig,\n type BaseBadgeSize,\n type BaseBadgeProps,\n} from './BaseBadge'\n\nexport type WeightBadgeSize = BaseBadgeSize\n\nexport interface WeightBadgeProps\n extends Omit<BaseBadgeProps, 'variant' | 'icon' | 'children'> {\n value: number\n unit?: 'lbs' | 'kg'\n /**\n * When given, this is an N-rep max (e.g. \"5RM\"). When omitted, it is an\n * estimated 1RM / e1RM.\n */\n reps?: number\n /** Percentage delta from previous mesocycle */\n delta?: number\n isPr?: boolean\n /** Show the weight icon */\n showIcon?: boolean\n size?: WeightBadgeSize\n onPress?: () => void\n className?: string\n}\n\nexport function WeightBadge({\n value,\n unit = 'lbs',\n reps,\n delta,\n isPr,\n showIcon = true,\n size = 'md',\n onPress,\n className,\n ...props\n}: WeightBadgeProps) {\n const config = baseBadgeSizeConfig[size]\n const textColor = isPr ? '#FF7900' : '#9CA3AF'\n // Dumbbell reads clearly as a weight/strength metric and is unit-agnostic\n // across estimated-1RM and N-rep-max contexts (vs. TrendingUp which implies\n // change/trend rather than a load value).\n const iconColor = textColor\n\n const repMaxClause = reps != null ? `${reps} rep max` : 'Estimated one rep max'\n const deltaLabel =\n delta != null ? `, ${delta >= 0 ? '+' : ''}${delta}% change` : ''\n const fullLabel = `${repMaxClause}: ${value} ${unit}${deltaLabel}`\n\n return (\n <BaseBadge\n variant={isPr ? 'pr' : 'plain'}\n size={size}\n onPress={onPress}\n className={className}\n icon={\n showIcon ? (\n <Dumbbell size={config.iconSize} color={iconColor} strokeWidth={2} />\n ) : undefined\n }\n accessibilityLabel={fullLabel}\n testID=\"weight-badge\"\n {...props}\n >\n <Text\n style={{\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '600',\n fontSize: config.fontSize,\n color: textColor,\n }}\n >\n {isPr ? '✳ ' : ''}\n {value} {unit}\n </Text>\n {reps != null && (\n <Text\n style={{\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '600',\n fontSize: config.fontSize,\n marginLeft: 2,\n color: textColor,\n opacity: 0.7,\n }}\n testID=\"weight-badge-repmax\"\n >\n {reps}RM\n </Text>\n )}\n {delta != null && (\n <Text\n style={{\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontSize: config.fontSize,\n marginLeft: 4,\n color: delta >= 0 ? '#4caf50' : '#ef5350',\n }}\n testID=\"weight-badge-delta\"\n >\n {delta >= 0 ? '+' : ''}\n {delta}%\n </Text>\n )}\n </BaseBadge>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState } from 'react'\nimport { View, Text, Animated, Easing, type ViewProps } from 'react-native'\nimport { Star } from 'lucide-react'\nimport { BaseBadge } from './BaseBadge'\n\nexport type PRType = 'e1rm' | 'weight' | 'reps' | 'volume' | 'velocity'\n\nexport interface PrBadgeProps extends ViewProps {\n /** PR type determines auto-generated label */\n type?: PRType\n /** Display label (e.g., \"PR e1RM\", \"PR 5RM\"). Auto-generated from type if omitted. */\n label?: string\n /** Show only the star icon, no text label */\n compact?: boolean\n /** Trigger pop animation on mount */\n animate?: boolean\n className?: string\n}\n\nconst typeLabels: Record<PRType, string> = {\n e1rm: 'PR e1RM',\n weight: 'PR Weight',\n reps: 'PR Reps',\n volume: 'PR Volume',\n velocity: 'PR Velocity',\n}\n\nexport function PrBadge({\n type = 'e1rm',\n label: labelProp,\n compact = false,\n animate = true,\n className,\n ...props\n}: PrBadgeProps) {\n const resolvedLabel = labelProp ?? typeLabels[type]\n const [scale] = useState(() => new Animated.Value(animate ? 0.8 : 1))\n const [opacity] = useState(() => new Animated.Value(animate ? 0 : 1))\n\n useEffect(() => {\n if (!animate) return\n\n // HTML demo uses a 3-keyframe sequence; bezier approximation is close enough for native\n Animated.parallel([\n Animated.timing(scale, {\n toValue: 1,\n duration: 400,\n easing: Easing.bezier(0.34, 1.56, 0.64, 1),\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 1,\n duration: 400,\n easing: Easing.bezier(0.34, 1.56, 0.64, 1),\n useNativeDriver: true,\n }),\n ]).start()\n }, [animate, scale, opacity])\n\n const badge = compact ? (\n <View\n className={className}\n accessibilityRole=\"image\"\n accessibilityLabel={`Personal record: ${resolvedLabel}`}\n testID=\"pr-badge-star\"\n {...props}\n >\n <Star size={14} color=\"#FF7900\" fill=\"#FF7900\" strokeWidth={2} />\n </View>\n ) : (\n <BaseBadge\n variant=\"pr\"\n className={className}\n accessibilityLabel={`Personal record: ${resolvedLabel}`}\n {...props}\n >\n <Text\n style={{\n fontSize: 10,\n color: '#FF7900',\n fontWeight: '700',\n fontFamily: 'Inter, sans-serif',\n }}\n >\n {'\\u2605'} {resolvedLabel}\n </Text>\n </BaseBadge>\n )\n\n if (animate) {\n return (\n <Animated.View\n style={{ transform: [{ scale }], opacity }}\n testID=\"pr-badge-animated\"\n >\n {badge}\n </Animated.View>\n )\n }\n\n return badge\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, type ViewProps } from 'react-native'\n\nexport type StatusDotVariant =\n | 'success'\n | 'warning'\n | 'error'\n | 'neutral'\n | 'on-track'\n | 'deviation'\n | 'future'\n\nexport interface StatusDotProps extends ViewProps {\n variant: StatusDotVariant\n icon?: 'check' | 'exclamation' | 'dash'\n size?: 'sm' | 'md'\n /** Adds a subtle glow effect in the variant color */\n glow?: boolean\n label?: string\n className?: string\n}\n\nconst solidVariantColors: Record<string, string> = {\n success: '#14B8A6',\n warning: '#FFB020',\n error: '#D14343',\n neutral: '#6B7280',\n}\n\nconst ringVariantStyles: Record<string, Record<string, unknown>> = {\n 'on-track': {\n backgroundColor: 'rgba(20,184,166,0.15)',\n borderWidth: 1,\n borderColor: 'rgba(20,184,166,0.3)',\n },\n deviation: {\n backgroundColor: 'rgba(245,158,11,0.15)',\n borderWidth: 1,\n borderColor: 'rgba(245,158,11,0.25)',\n },\n future: {\n backgroundColor: 'rgba(107,114,128,0.1)',\n borderWidth: 1,\n borderStyle: 'dashed',\n borderColor: 'rgba(107,114,128,0.2)',\n },\n}\n\nconst glowStyles: Record<StatusDotVariant, Record<string, unknown>> = {\n success: { boxShadow: '0 0 4px rgba(20,184,166,0.4)' },\n warning: { boxShadow: '0 0 4px rgba(245,158,11,0.4)' },\n error: { boxShadow: '0 0 4px rgba(239,68,68,0.4)' },\n neutral: { boxShadow: '0 0 4px rgba(107,114,128,0.4)' },\n 'on-track': { boxShadow: '0 0 4px rgba(20,184,166,0.4)' },\n deviation: { boxShadow: '0 0 4px rgba(245,158,11,0.4)' },\n future: { boxShadow: '0 0 4px rgba(107,114,128,0.4)' },\n}\n\nconst iconChars: Record<string, string> = {\n check: '\\u2713',\n exclamation: '!',\n dash: '\\u2014',\n}\n\n/** Color-matched icon colors: dark on solid bg, light on transparent bg */\nconst iconColors: Record<StatusDotVariant, string> = {\n success: '#0A5C52',\n warning: '#6B4000',\n error: '#5C1A1A',\n neutral: '#D1D5DB',\n 'on-track': '#14B8A6',\n deviation: '#FFB020',\n future: '#6B7280',\n}\n\nconst sizeDimensions = {\n sm: { size: 8, showIcon: false },\n md: { size: 18, showIcon: true },\n}\n\nfunction isSolidVariant(variant: StatusDotVariant): boolean {\n return variant in solidVariantColors\n}\n\nexport function StatusDot({\n variant,\n icon,\n size = 'sm',\n glow,\n label,\n className,\n ...props\n}: StatusDotProps) {\n const config = sizeDimensions[size]\n const solid = isSolidVariant(variant)\n const ring = ringVariantStyles[variant]\n\n const glowStyle = glow ? glowStyles[variant] : null\n\n const dot = (\n <View\n style={[\n {\n width: config.size,\n height: config.size,\n borderRadius: 9999,\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n },\n solid ? { backgroundColor: solidVariantColors[variant] } : undefined,\n ring ? (ring as Record<string, unknown>) : undefined,\n glowStyle ? (glowStyle as Record<string, unknown>) : undefined,\n ]}\n accessibilityRole=\"image\"\n accessibilityLabel={`${variant} status`}\n testID=\"status-dot\"\n >\n {config.showIcon && icon && (\n <Text\n style={{\n fontSize: 11,\n lineHeight: 11,\n fontWeight: '900',\n color: iconColors[variant],\n }}\n accessibilityElementsHidden\n >\n {iconChars[icon]}\n </Text>\n )}\n </View>\n )\n\n if (label) {\n return (\n <View\n className={className}\n style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}\n accessibilityLabel={`${variant} status: ${label}`}\n {...props}\n >\n <View accessibilityElementsHidden>{dot}</View>\n <Text\n style={{ fontSize: 12, lineHeight: 16, color: '#9CA3AF' }}\n accessibilityElementsHidden\n >\n {label}\n </Text>\n </View>\n )\n }\n\n return (\n <View className={className} {...props}>\n {dot}\n </View>\n )\n}\n","/**\n * Workout-specific tokens not yet in the main Tailwind config.\n * Use these inline instead of Tailwind classes.\n */\nexport const WORKOUT_TOKENS = {\n // Velocity zones (not in Tailwind)\n velocity: {\n green: '#2ed573',\n yellow: '#ffd43b',\n orange: '#ffa502',\n red: '#ff4757',\n },\n\n // BodyMap volume heatmap scale (drive dynamic SVG fills, so inline values).\n // Maps weekly-volume status against MEV/MAV/MRV landmarks to a fill color.\n heatmap: {\n none: '#E0E0E0', // gray — no training data\n under: '#4A90D9', // cool blue — below MEV\n maintenance: '#F5C842', // warm yellow — MEV to MAV\n productive: '#4CAF50', // green — MAV to MRV\n approaching: '#FFA502', // orange — near MRV\n over: '#FF6B35', // red-orange — over MRV\n },\n\n // Badge border-radius (rounded-sm is 4px, we need 2px)\n badgeRadius: 2,\n\n // Border colors (use inline to avoid 'border' class pitfall)\n border: {\n default: '#1F1F1F',\n strong: '#2C2C2C',\n subtle: '#1C1C1C',\n },\n\n // Surface colors for inline use\n surface: {\n raised: '#1C1C1C',\n elevated: '#191919',\n },\n\n // Intensity bar specific\n intensity: {\n track: '#333333',\n over1: '#D14343',\n over2: '#A62626',\n over3: '#7A1C1C',\n targetLine: 'rgba(33, 150, 243, 0.5)',\n atTargetGlow:\n '0 0 5px 1px rgba(33, 150, 243, 0.35), 0 0 10px 3px rgba(33, 150, 243, 0.15)',\n },\n\n // Placeholder strip\n placeholder: {\n fill: '#3A3A3A',\n },\n\n // Deviation bar\n deviation: {\n track: '#333333',\n },\n} as const\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\nimport { WORKOUT_TOKENS } from '../../../theme/workout-tokens'\n\nexport interface PlaceholderStripProps extends ViewProps {\n width?: number | string\n /** Render as single solid strip or segmented mini-strip */\n mode?: 'single' | 'segmented'\n /** Number of segments when mode is 'segmented' */\n segments?: number\n className?: string\n}\n\nfunction SingleStrip({\n width,\n className,\n ...props\n}: Omit<PlaceholderStripProps, 'mode' | 'segments'>) {\n return (\n <View\n className={cn(className)}\n style={[\n {\n height: 3,\n backgroundColor: 'transparent',\n borderWidth: 1,\n borderStyle: 'dashed',\n borderColor: WORKOUT_TOKENS.border.strong,\n borderRadius: 1,\n opacity: 0.5,\n },\n width != null ? { width: width as number } : { flex: 1 },\n ]}\n accessibilityRole=\"image\"\n accessibilityLabel=\"Planned set, not yet completed\"\n testID=\"placeholder-strip\"\n {...props}\n />\n )\n}\n\nfunction SegmentedStrip({\n segments = 3,\n width,\n className,\n ...props\n}: Omit<PlaceholderStripProps, 'mode'>) {\n return (\n <View\n className={cn('flex-row', className)}\n style={[\n { height: 3, gap: 2, opacity: 0.5 },\n width != null ? { width: width as number } : { flex: 1 },\n ]}\n accessibilityRole=\"image\"\n accessibilityLabel=\"Planned set, not yet completed\"\n testID=\"placeholder-strip\"\n {...props}\n >\n {Array.from({ length: segments }, (_, i) => (\n <View\n key={i}\n style={{\n flex: 1,\n height: 3,\n backgroundColor: 'transparent',\n borderWidth: 1,\n borderStyle: 'dashed',\n borderColor: WORKOUT_TOKENS.border.strong,\n borderRadius: 1,\n minWidth: 4,\n }}\n accessibilityElementsHidden\n testID=\"placeholder-segment\"\n />\n ))}\n </View>\n )\n}\n\nexport function PlaceholderStrip({\n mode = 'single',\n segments,\n ...props\n}: PlaceholderStripProps) {\n if (mode === 'segmented') {\n return <SegmentedStrip segments={segments} {...props} />\n }\n return <SingleStrip {...props} />\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useState, useCallback } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\n\nexport interface TempoDisplayProps extends ViewProps {\n /** Tempo values: [eccentric, pauseBottom, concentric, pauseTop] in seconds */\n tempo: [number, number, number, number]\n size?: 'sm' | 'md'\n /** Colored phases or mono (all gray) */\n colored?: boolean\n /** Show info tooltip on press */\n showInfo?: boolean\n onPress?: () => void\n className?: string\n}\n\nconst INTER = 'Inter, sans-serif'\nconst TEXT_TERTIARY = '#6B7280'\n\n// Phase colors: [eccentric, pauseBottom, concentric, pauseTop]\nconst phaseColors = {\n eccentric: '#FFB020', // status-warning (amber)\n pauseBottom: TEXT_TERTIARY,\n concentric: '#14B8A6', // status-success (teal)\n pauseTop: TEXT_TERTIARY,\n dash: TEXT_TERTIARY,\n}\n\nfunction TempoValue({\n value,\n color,\n fontSize,\n}: {\n value: number\n color: string\n fontSize: number\n}) {\n return (\n <Text\n style={{\n fontFamily: INTER,\n fontSize,\n color,\n fontWeight: '600',\n letterSpacing: 1,\n }}\n >\n {value}\n </Text>\n )\n}\n\nfunction TempoSeparator({ color, fontSize }: { color: string; fontSize: number }) {\n return (\n <Text\n style={{\n fontFamily: INTER,\n fontSize,\n color,\n fontWeight: '600',\n letterSpacing: 1,\n }}\n >\n -\n </Text>\n )\n}\n\nexport function TempoDisplay({\n tempo,\n size = 'md',\n colored = true,\n showInfo = true,\n onPress,\n className,\n ...props\n}: TempoDisplayProps) {\n const [showTooltip, setShowTooltip] = useState(false)\n const [eccentric, pauseBottom, concentric, pauseTop] = tempo\n const isSm = size === 'sm'\n const fontSize = isSm ? 9 : 11\n const monoColor = TEXT_TERTIARY\n\n const handlePress = useCallback(() => {\n if (onPress) {\n onPress()\n }\n if (showInfo) {\n setShowTooltip((prev) => !prev)\n }\n }, [onPress, showInfo])\n\n const content = (\n <View\n className={className}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: '#1C1C1C',\n paddingHorizontal: isSm ? 6 : 8,\n paddingVertical: 3,\n borderRadius: 4,\n }}\n {...props}\n >\n <Text\n style={{\n fontFamily: INTER,\n fontSize: 9,\n fontWeight: '500',\n color: TEXT_TERTIARY,\n letterSpacing: 0.5,\n textTransform: 'uppercase',\n marginRight: 6,\n }}\n >\n TEMPO\n </Text>\n <View style={{ flexDirection: 'row' }} testID=\"tempo-value\">\n {colored ? (\n <>\n <TempoValue value={eccentric} color={phaseColors.eccentric} fontSize={fontSize} />\n <TempoSeparator color={phaseColors.dash} fontSize={fontSize} />\n <TempoValue value={pauseBottom} color={phaseColors.pauseBottom} fontSize={fontSize} />\n <TempoSeparator color={phaseColors.dash} fontSize={fontSize} />\n <TempoValue value={concentric} color={phaseColors.concentric} fontSize={fontSize} />\n <TempoSeparator color={phaseColors.dash} fontSize={fontSize} />\n <TempoValue value={pauseTop} color={phaseColors.pauseTop} fontSize={fontSize} />\n </>\n ) : (\n <Text\n style={{\n fontFamily: INTER,\n fontSize,\n color: monoColor,\n fontWeight: '600',\n letterSpacing: 1,\n }}\n >\n {eccentric}-{pauseBottom}-{concentric}-{pauseTop}\n </Text>\n )}\n </View>\n </View>\n )\n\n return (\n <Pressable\n accessibilityLabel={`Tempo: ${eccentric} second eccentric, ${pauseBottom} second pause, ${concentric} second concentric, ${pauseTop} second pause`}\n accessibilityRole=\"button\"\n onPress={handlePress}\n testID=\"tempo-display\"\n >\n {content}\n {showTooltip && (\n <View\n style={{\n position: 'absolute',\n bottom: '100%',\n left: '50%',\n transform: [{ translateX: '-50%' as unknown as number }],\n marginBottom: 8,\n zIndex: 20,\n alignItems: 'center',\n }}\n testID=\"tempo-tooltip\"\n >\n <View\n style={{\n backgroundColor: '#191919',\n borderRadius: 6,\n paddingVertical: 8,\n paddingHorizontal: 12,\n borderWidth: 1,\n borderColor: '#2C2C2C',\n }}\n >\n <Text style={{ fontSize: 10, lineHeight: 16, color: '#9CA3AF', fontFamily: INTER }}>\n Eccentric: {eccentric}s\n </Text>\n <Text style={{ fontSize: 10, lineHeight: 16, color: '#9CA3AF', fontFamily: INTER }}>\n Pause (bottom): {pauseBottom}s\n </Text>\n <Text style={{ fontSize: 10, lineHeight: 16, color: '#9CA3AF', fontFamily: INTER }}>\n Concentric: {concentric}s\n </Text>\n <Text style={{ fontSize: 10, lineHeight: 16, color: '#9CA3AF', fontFamily: INTER }}>\n Pause (top): {pauseTop}s\n </Text>\n </View>\n <View\n style={{\n width: 0,\n height: 0,\n borderLeftWidth: 5,\n borderRightWidth: 5,\n borderTopWidth: 5,\n borderLeftColor: 'transparent',\n borderRightColor: 'transparent',\n borderTopColor: '#2C2C2C',\n }}\n />\n </View>\n )}\n </Pressable>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, type ViewProps, type ViewStyle } from 'react-native'\n\nexport interface DeviationBarProps extends ViewProps {\n deviation: number\n width?: number\n className?: string\n}\n\nfunction getDotColor(deviation: number): string {\n const abs = Math.abs(deviation)\n if (deviation < -0.3) return '#14B8A6'\n if (abs <= 0.3) return '#6B7280'\n if (abs <= 0.7) return '#FFB020'\n return '#D14343'\n}\n\nfunction getDeviationDescription(deviation: number): string {\n if (deviation < -0.3) return 'lighter than planned'\n if (deviation > 0.3) return 'harder than planned'\n return 'on plan'\n}\n\nexport function DeviationBar({\n deviation,\n width,\n className,\n ...props\n}: DeviationBarProps) {\n const clamped = Math.max(-1, Math.min(1, deviation))\n const resolvedWidth = width ?? 40\n const dotPosition = ((clamped + 1) / 2) * resolvedWidth\n const dotSize = 8\n const trackHeight = 6\n const containerHeight = 10\n const valueNow = Math.round(clamped * 100)\n\n return (\n <View\n className={className}\n style={{ flexDirection: 'row', alignItems: 'center', height: containerHeight, width: resolvedWidth }}\n accessibilityRole=\"adjustable\"\n accessibilityValue={{ min: -100, max: 100, now: valueNow }}\n accessibilityLabel={`Session deviation: ${getDeviationDescription(clamped)}`}\n testID=\"deviation-bar\"\n aria-valuenow={valueNow}\n aria-valuemin={-100}\n aria-valuemax={100}\n {...props}\n >\n <View\n style={{\n height: trackHeight,\n width: resolvedWidth,\n borderRadius: 3,\n // react-native-web renders backgroundImage at runtime; not in RN ViewStyle types\n backgroundImage:\n 'linear-gradient(90deg, rgba(20,184,166,0.25) 0%, rgba(107,114,128,0.15) 50%, rgba(255,176,32,0.25) 100%)',\n } as ViewStyle}\n />\n <View\n style={{\n position: 'absolute',\n width: dotSize,\n height: dotSize,\n borderRadius: 9999,\n borderWidth: 1.5,\n borderColor: '#F3F4F6',\n boxShadow: '0 0 4px rgba(0,0,0,0.5)',\n backgroundColor: getDotColor(clamped),\n left: Math.max(0, Math.min(dotPosition - dotSize / 2, resolvedWidth - dotSize)),\n top: (containerHeight - dotSize) / 2,\n }}\n testID=\"deviation-dot\"\n />\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState } from 'react'\nimport { View, Text, Animated, type ViewProps, type ViewStyle } from 'react-native'\n\nexport type IntensityBarOrientation = 'vertical' | 'horizontal'\n\nexport interface IntensityBarProps extends ViewProps {\n /** Current intensity level 0-1 */\n level: number\n /** MRV/overexertion threshold position 0-1 */\n threshold?: number\n /** Orientation */\n orientation?: IntensityBarOrientation\n /** Height for vertical (default 24px) or width for horizontal */\n size?: number\n /** Width for vertical (default 6px) or height for horizontal */\n thickness?: number\n /** Show threshold label (\"MRV\") */\n showThresholdLabel?: boolean\n className?: string\n}\n\nconst TRACK_BG = 'rgba(255,255,255,0.06)'\nconst THRESHOLD_COLOR = '#FFFFFF'\nconst LABEL_COLOR = '#6B7280'\n\n/** Fill color by intensity zone: teal 0-0.4, amber 0.4-0.7, red 0.7-1.0. */\nfunction getZoneColor(level: number): string {\n if (level >= 0.7) return '#D14343'\n if (level >= 0.4) return '#FFB020'\n return '#14B8A6'\n}\n\nfunction clamp01(value: number): number {\n if (value < 0) return 0\n if (value > 1) return 1\n return value\n}\n\nexport function IntensityBar({\n level,\n threshold,\n orientation = 'vertical',\n size = 24,\n thickness = 6,\n showThresholdLabel,\n className,\n ...props\n}: IntensityBarProps) {\n const isVertical = orientation === 'vertical'\n const clampedLevel = clamp01(level)\n const percentage = Math.round(clampedLevel * 100)\n const zoneColor = getZoneColor(clampedLevel)\n\n const [fillAnim] = useState(() => new Animated.Value(clampedLevel))\n\n useEffect(() => {\n const animation = Animated.timing(fillAnim, {\n toValue: clampedLevel,\n duration: 250,\n useNativeDriver: false,\n })\n animation.start()\n return () => animation.stop()\n }, [clampedLevel, fillAnim])\n\n const fillSizePercent = fillAnim.interpolate({\n inputRange: [0, 1],\n outputRange: ['0%', '100%'],\n })\n\n const trackStyle = isVertical\n ? { width: thickness, height: size }\n : { width: size, height: thickness }\n\n const fillStyle = isVertical\n ? {\n position: 'absolute' as const,\n bottom: 0,\n left: 0,\n right: 0,\n height: fillSizePercent,\n }\n : {\n position: 'absolute' as const,\n top: 0,\n bottom: 0,\n left: 0,\n width: fillSizePercent,\n }\n\n const thresholdLineStyle: ViewStyle | undefined =\n threshold != null\n ? isVertical\n ? {\n position: 'absolute' as const,\n bottom: `${clamp01(threshold) * 100}%`,\n left: -2,\n right: -2,\n height: 1,\n backgroundColor: THRESHOLD_COLOR,\n zIndex: 4,\n }\n : {\n position: 'absolute' as const,\n left: `${clamp01(threshold) * 100}%`,\n top: -2,\n bottom: -2,\n width: 1,\n backgroundColor: THRESHOLD_COLOR,\n zIndex: 4,\n }\n : undefined\n\n return (\n <View\n className={className}\n style={{ alignItems: 'center' }}\n accessibilityRole=\"progressbar\"\n accessibilityValue={{ min: 0, max: 100, now: percentage }}\n accessibilityLabel={`Intensity level: ${percentage}%`}\n testID=\"intensity-bar\"\n {...props}\n >\n <View\n style={{\n ...trackStyle,\n borderRadius: 3,\n backgroundColor: TRACK_BG,\n position: 'relative',\n overflow: 'visible',\n }}\n accessibilityElementsHidden\n >\n <Animated.View\n style={{\n ...fillStyle,\n borderRadius: 3,\n backgroundColor: zoneColor,\n zIndex: 2,\n }}\n testID=\"intensity-fill\"\n />\n\n {threshold != null && (\n <View style={thresholdLineStyle} testID=\"intensity-threshold\" />\n )}\n </View>\n {showThresholdLabel && threshold != null && (\n <Text\n style={{\n fontSize: 8,\n fontWeight: '500',\n color: LABEL_COLOR,\n fontFamily: 'Inter, sans-serif',\n marginTop: 6,\n }}\n accessibilityElementsHidden\n testID=\"intensity-threshold-label\"\n >\n MRV\n </Text>\n )}\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState } from 'react'\nimport { View, Text, Pressable, Animated, Easing, type ViewProps } from 'react-native'\n\n/**\n * Spec statuses: completed | current | upcoming | deload.\n * `next` and `missed` are additive extras supported by this implementation.\n */\nexport type WorkoutPillStatus = 'completed' | 'current' | 'upcoming' | 'deload' | 'next' | 'missed'\n\nexport interface WorkoutPillProps extends ViewProps {\n name: string\n status: WorkoutPillStatus\n /** Force pulsing animation. Defaults to pulsing only on `current` status. */\n pulse?: boolean\n onPress?: () => void\n highlighted?: boolean\n className?: string\n}\n\nconst statusBgColors: Record<WorkoutPillStatus, string> = {\n completed: 'rgba(20,184,166,0.15)',\n current: 'rgba(255,121,0,0.15)',\n next: 'transparent',\n upcoming: '#1C1C1C',\n missed: 'rgba(209,67,67,0.1)',\n deload: 'rgba(147,51,234,0.15)',\n}\n\nconst statusBorderStyles: Record<WorkoutPillStatus, Record<string, unknown>> = {\n completed: { borderWidth: 1, borderColor: 'rgba(20,184,166,0.3)' },\n current: { borderWidth: 1, borderColor: 'rgba(255,121,0,0.3)' },\n next: { borderWidth: 1, borderColor: 'rgba(255,121,0,0.4)' },\n upcoming: { borderWidth: 1, borderColor: '#1F1F1F' },\n missed: { borderWidth: 1, borderColor: 'rgba(209,67,67,0.25)' },\n deload: { borderWidth: 1, borderColor: 'rgba(147,51,234,0.3)' },\n}\n\nconst textColors: Record<WorkoutPillStatus, string> = {\n completed: '#14B8A6',\n current: '#FF7900',\n next: '#FF7900',\n upcoming: '#6B7280',\n missed: 'rgba(209,67,67,0.7)',\n deload: '#9333ea',\n}\n\nfunction usePulse(enabled: boolean) {\n const [opacity] = useState(() => new Animated.Value(1))\n\n useEffect(() => {\n if (!enabled) {\n opacity.setValue(1)\n return\n }\n\n const animation = Animated.loop(\n Animated.sequence([\n Animated.timing(opacity, {\n toValue: 0.7,\n duration: 1000,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 1,\n duration: 1000,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n ]),\n )\n animation.start()\n\n return () => animation.stop()\n }, [enabled, opacity])\n\n return opacity\n}\n\nexport function WorkoutPill({\n name,\n status,\n pulse,\n onPress,\n highlighted = false,\n className,\n ...props\n}: WorkoutPillProps) {\n const shouldPulse = pulse ?? status === 'current'\n const pulseOpacity = usePulse(shouldPulse)\n const isCompleted = status === 'completed'\n const isMissed = status === 'missed'\n\n const pill = (\n <Animated.View\n style={shouldPulse ? { opacity: pulseOpacity } : undefined}\n testID=\"workout-pill\"\n >\n <View\n className={className}\n style={[\n {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 10,\n paddingVertical: 4,\n borderRadius: 6,\n backgroundColor: statusBgColors[status],\n },\n statusBorderStyles[status] as Record<string, unknown>,\n highlighted ? { borderWidth: 2, transform: [{ scale: 1.02 }] } : undefined,\n ]}\n accessibilityLabel={onPress ? undefined : `${name} workout, ${status}`}\n {...props}\n >\n {isCompleted && (\n <Text\n style={{\n fontWeight: '600',\n fontFamily: '\"Nunito Sans\", sans-serif',\n fontSize: 11,\n color: textColors[status],\n marginRight: 4,\n }}\n accessibilityElementsHidden\n testID=\"workout-pill-check\"\n >\n {'\\u2713'}\n </Text>\n )}\n {isMissed && (\n <Text\n style={{\n fontWeight: '600',\n fontFamily: '\"Nunito Sans\", sans-serif',\n fontSize: 11,\n color: textColors[status],\n marginRight: 4,\n }}\n accessibilityElementsHidden\n testID=\"workout-pill-dash\"\n >\n {'\\u2014'}\n </Text>\n )}\n <Text\n style={{\n fontWeight: '600',\n fontFamily: '\"Nunito Sans\", sans-serif',\n fontSize: 11,\n color: textColors[status],\n }}\n accessibilityElementsHidden={onPress != null}\n testID=\"workout-pill-name\"\n >\n {name}\n </Text>\n </View>\n </Animated.View>\n )\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n accessibilityRole=\"button\"\n accessibilityLabel={`${name} workout, ${status}`}\n testID=\"workout-pill-pressable\"\n >\n {pill}\n </Pressable>\n )\n }\n\n return pill\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState } from 'react'\nimport { View, Text, Pressable, Animated, Easing, type ViewProps } from 'react-native'\n\nexport interface VelocityStripProps extends ViewProps {\n velocities: number[]\n expanded?: boolean\n onToggle?: () => void\n onRepPress?: (index: number, velocity: number) => void\n variant?: 'full' | 'mini'\n showInfo?: boolean\n className?: string\n}\n\nconst VEL_COLORS = {\n green: '#2ed573',\n yellow: '#ffd43b',\n orange: '#ffa502',\n red: '#ff4757',\n}\n\nexport function getVelocityZoneColor(velocity: number): string {\n if (velocity >= 1.0) return 'vel-green'\n if (velocity >= 0.75) return 'vel-yellow'\n if (velocity >= 0.5) return 'vel-orange'\n return 'vel-red'\n}\n\nexport function getVelocityZoneName(velocity: number): string {\n if (velocity >= 1.0) return 'Speed'\n if (velocity >= 0.75) return 'Power'\n if (velocity >= 0.5) return 'Strength-Speed'\n return 'Strength'\n}\n\nexport function calculateVelocityLoss(velocities: number[]): number {\n if (velocities.length < 2) return 0\n const first = velocities[0]\n const last = velocities[velocities.length - 1]\n if (first === 0) return 0\n return Math.round(((first - last) / first) * 100)\n}\n\nexport function calculateMeanVelocity(velocities: number[]): number {\n if (velocities.length === 0) return 0\n const sum = velocities.reduce((acc, v) => acc + v, 0)\n return sum / velocities.length\n}\n\nfunction getBarColor(zone: string): string {\n switch (zone) {\n case 'vel-green': return VEL_COLORS.green\n case 'vel-yellow': return VEL_COLORS.yellow\n case 'vel-orange': return VEL_COLORS.orange\n case 'vel-red': return VEL_COLORS.red\n default: return VEL_COLORS.green\n }\n}\n\nconst zoneHexMap: Record<string, string> = {\n 'vel-green': VEL_COLORS.green,\n 'vel-yellow': VEL_COLORS.yellow,\n 'vel-orange': VEL_COLORS.orange,\n 'vel-red': VEL_COLORS.red,\n}\n\nfunction getLossStyle(loss: number): Record<string, string> | null {\n if (loss > 25) return { color: VEL_COLORS.red }\n if (loss > 20) return { color: VEL_COLORS.orange }\n return null\n}\n\nconst ANIMATION_DURATION = 400\nconst ANIMATION_EASING = Easing.bezier(0.22, 1, 0.36, 1)\n\nexport function VelocityStrip({\n velocities,\n expanded = false,\n onToggle,\n onRepPress,\n variant = 'full',\n showInfo = true,\n className,\n ...props\n}: VelocityStripProps) {\n const maxVelocity = Math.max(...velocities, 0)\n const meanVelocity = calculateMeanVelocity(velocities)\n const loss = calculateVelocityLoss(velocities)\n const meanZone = getVelocityZoneName(meanVelocity)\n\n const [heightAnim] = useState(() => new Animated.Value(expanded ? 60 : 3))\n const [labelOpacity] = useState(() => new Animated.Value(expanded ? 1 : 0))\n const [infoOpacity] = useState(() => new Animated.Value(expanded ? 1 : 0))\n\n useEffect(() => {\n if (variant === 'mini') return\n\n Animated.parallel([\n Animated.timing(heightAnim, {\n toValue: expanded ? 60 : 3,\n duration: ANIMATION_DURATION,\n easing: ANIMATION_EASING,\n useNativeDriver: false,\n }),\n Animated.timing(labelOpacity, {\n toValue: expanded ? 1 : 0,\n duration: 300,\n delay: expanded ? 150 : 0,\n useNativeDriver: false,\n }),\n Animated.timing(infoOpacity, {\n toValue: expanded ? 1 : 0,\n duration: 300,\n delay: expanded ? 200 : 0,\n useNativeDriver: false,\n }),\n ]).start()\n }, [expanded, variant, heightAnim, labelOpacity, infoOpacity])\n\n if (variant === 'mini') {\n const { style: externalStyle, ...restProps } = props\n return (\n <View\n className={className}\n style={[{ flexDirection: 'row', height: 3, gap: 2, borderRadius: 2, overflow: 'hidden' }, externalStyle]}\n accessibilityRole=\"image\"\n accessibilityLabel={`Velocity strip, ${velocities.length} reps`}\n testID=\"velocity-strip-mini\"\n {...restProps}\n >\n {velocities.map((v, i) => (\n <View\n key={i}\n style={{\n flex: 1,\n backgroundColor: getBarColor(getVelocityZoneColor(v)),\n borderRadius: 1,\n minWidth: 4,\n height: '100%' as unknown as number,\n }}\n accessibilityElementsHidden\n testID={`velocity-bar-${i}`}\n />\n ))}\n </View>\n )\n }\n\n const stripLabel = `Velocity chart for set, ${velocities.length} reps, tap to ${expanded ? 'collapse' : 'expand'}`\n // When onToggle wraps the strip or individual reps are interactive, the container itself is not a button\n const hasInteractiveContainer = onToggle != null\n const hasInteractiveReps = onRepPress != null && expanded\n\n const stripContent = (\n <Animated.View\n className={className}\n style={[\n {\n height: heightAnim,\n width: '100%',\n gap: 2,\n borderRadius: expanded ? 6 : 2,\n paddingTop: expanded ? 16 : 0,\n paddingBottom: expanded ? 24 : 0,\n paddingHorizontal: expanded ? 6 : 0,\n paddingVertical: expanded ? undefined : 8,\n backgroundColor: expanded ? '#1C1C1C' : 'transparent',\n overflow: expanded ? 'visible' : 'hidden',\n },\n ]}\n accessibilityRole={hasInteractiveContainer || hasInteractiveReps ? 'none' : 'button'}\n accessibilityLabel={hasInteractiveContainer || hasInteractiveReps ? undefined : stripLabel}\n testID=\"velocity-strip\"\n {...props}\n >\n <View\n style={{ flexDirection: 'row', flex: 1, gap: 2, alignItems: 'flex-end' }}\n >\n {velocities.map((v, i) => {\n const zone = getVelocityZoneColor(v)\n const barHeightPct = Math.round((v / (maxVelocity * 1.15)) * 100)\n\n const bar = (\n <View\n key={i}\n style={{ flex: 1, height: '100%', justifyContent: 'flex-end', position: 'relative' }}\n >\n {expanded && (\n <Animated.View style={{ opacity: labelOpacity, alignItems: 'center', position: 'absolute', top: -13, left: 0, right: 0 }} accessibilityElementsHidden>\n <Text\n style={{ fontSize: 8, fontWeight: '600', color: '#9CA3AF' }}\n testID={`velocity-label-${i}`}\n >\n {v.toFixed(2)}\n </Text>\n </Animated.View>\n )}\n <View\n style={\n expanded\n ? { height: `${barHeightPct}%`, minHeight: 2, borderTopLeftRadius: 2, borderTopRightRadius: 2, backgroundColor: zoneHexMap[zone] }\n : {\n minHeight: '100%' as unknown as number,\n borderTopLeftRadius: 2,\n borderTopRightRadius: 2,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n backgroundColor: zoneHexMap[zone],\n }\n }\n testID={`velocity-bar-${i}`}\n accessibilityRole=\"image\"\n accessibilityLabel={`Rep ${i + 1}: ${v.toFixed(2)} meters per second`}\n />\n </View>\n )\n\n if (onRepPress && expanded) {\n return (\n <Pressable\n key={i}\n style={{ flex: 1, height: '100%' }}\n onPress={() => onRepPress(i, v)}\n accessibilityRole=\"button\"\n accessibilityLabel={`Rep ${i + 1}: ${v.toFixed(2)} meters per second, tap for details`}\n testID={`velocity-bar-pressable-${i}`}\n >\n {bar}\n </Pressable>\n )\n }\n\n return bar\n })}\n </View>\n {expanded && showInfo && (\n <Animated.View\n style={{\n flexDirection: 'row',\n justifyContent: 'space-between',\n opacity: infoOpacity,\n position: 'absolute',\n bottom: 4,\n left: 6,\n right: 6,\n }}\n testID=\"velocity-info-row\"\n >\n <Text\n style={{\n fontSize: 10,\n color: '#9CA3AF',\n fontFamily: 'Inter, sans-serif',\n }}\n >\n {meanZone} {'\\u00B7'} {meanVelocity.toFixed(2)} m/s\n </Text>\n <Text\n style={{\n fontSize: 10,\n color: '#9CA3AF',\n fontFamily: 'Inter, sans-serif',\n ...getLossStyle(loss),\n }}\n >\n Loss: {loss}%\n </Text>\n </Animated.View>\n )}\n </Animated.View>\n )\n\n if (onToggle) {\n return (\n <Pressable\n onPress={onToggle}\n accessibilityRole=\"button\"\n accessibilityLabel={stripLabel}\n testID=\"velocity-strip-pressable\"\n >\n {stripContent}\n </Pressable>\n )\n }\n\n return stripContent\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\n\n// Aliases for spec compatibility: under=behind, maintenance=ontrack, productive=target\nexport type VolumeStatus = 'untrained' | 'behind' | 'ontrack' | 'target' | 'over'\n\nexport interface MuscleGroupChipProps extends ViewProps {\n name: string\n volumeStatus?: VolumeStatus\n onPress?: () => void\n className?: string\n}\n\nconst dotColorMap: Record<VolumeStatus, string> = {\n untrained: '#2C2C2C',\n behind: '#406D87',\n ontrack: '#14B8A6',\n target: '#FF7900',\n over: '#D14343',\n}\n\nexport function MuscleGroupChip({\n name,\n volumeStatus,\n onPress,\n className,\n ...props\n}: MuscleGroupChipProps) {\n const dotColor = volumeStatus\n ? dotColorMap[volumeStatus]\n : '#2C2C2C'\n\n const statusLabel = volumeStatus ?? 'no status'\n\n const content = (\n <View\n className={className}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 9999,\n paddingHorizontal: 9,\n paddingVertical: 3,\n backgroundColor: 'var(--color-surface-raised)',\n borderWidth: 1,\n borderColor: 'var(--color-border-default)',\n }}\n accessibilityLabel={onPress ? undefined : `${name}, volume status: ${statusLabel}`}\n testID=\"muscle-group-chip\"\n {...props}\n >\n <View\n style={{\n width: 6,\n height: 6,\n borderRadius: 9999,\n marginRight: 5,\n flexShrink: 0,\n backgroundColor: dotColor,\n }}\n accessibilityElementsHidden\n testID=\"muscle-group-chip-dot\"\n />\n <Text\n style={{\n fontFamily: 'Inter, sans-serif',\n fontWeight: '500',\n fontSize: 11,\n color: 'var(--color-text-secondary)',\n }}\n accessibilityElementsHidden\n >\n {name}\n </Text>\n </View>\n )\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n accessibilityRole=\"button\"\n accessibilityLabel={`${name}, volume status: ${statusLabel}`}\n testID=\"muscle-group-chip-pressable\"\n >\n {content}\n </Pressable>\n )\n }\n\n return content\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport React from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nconst BRAND_PRIMARY = '#FF7900'\n\nexport interface SparklineProps extends ViewProps {\n data: number[]\n width?: number\n height?: number\n color?: string\n showDots?: boolean\n referenceLines?: Array<{\n value: number\n color: string\n dashed?: boolean\n label?: string\n }>\n highlightLast?: boolean\n className?: string\n}\n\nfunction normalizeData(\n data: number[],\n height: number,\n): number[] {\n if (data.length === 0) return []\n const min = Math.min(...data)\n const max = Math.max(...data)\n const range = max - min || 1\n return data.map((v) => height - ((v - min) / range) * height)\n}\n\nfunction normalizeValue(\n value: number,\n data: number[],\n height: number,\n): number {\n const min = Math.min(...data)\n const max = Math.max(...data)\n const range = max - min || 1\n return height - ((value - min) / range) * height\n}\n\nexport function Sparkline({\n data,\n width = 80,\n height = 30,\n color,\n showDots = false,\n referenceLines,\n highlightLast = false,\n className,\n ...props\n}: SparklineProps) {\n if (data.length === 0) {\n return (\n <View\n style={{ width, height }}\n className={className}\n testID=\"sparkline-empty\"\n accessibilityLabel=\"Sparkline chart, no data\"\n {...props}\n />\n )\n }\n\n const resolvedColor = color ?? BRAND_PRIMARY\n const normalized = normalizeData(data, height)\n const stepX = data.length > 1 ? width / (data.length - 1) : 0\n\n const dotSize = 3\n const highlightSize = 6\n\n return (\n <View\n style={{ width, height, position: 'relative' }}\n className={cn(className)}\n accessibilityRole=\"image\"\n accessibilityLabel={`Sparkline chart with ${data.length} data points`}\n testID=\"sparkline\"\n {...props}\n >\n {referenceLines?.map((line, i) => {\n const y = normalizeValue(line.value, data, height)\n return (\n <View\n key={`ref-${i}`}\n style={[\n {\n position: 'absolute',\n top: y,\n left: 0,\n right: 0,\n opacity: 0.6,\n },\n line.dashed\n ? {\n height: 0,\n borderStyle: 'dashed',\n borderTopWidth: 1,\n borderTopColor: line.color,\n }\n : {\n height: 1,\n backgroundColor: line.color,\n },\n ]}\n accessibilityElementsHidden\n testID={`sparkline-reference-${i}`}\n >\n {line.label && (\n <Text\n style={{\n position: 'absolute',\n right: 0,\n top: -10,\n fontSize: 7,\n color: line.color,\n opacity: 1,\n }}\n testID={`sparkline-reference-label-${i}`}\n >\n {line.label}\n </Text>\n )}\n </View>\n )\n })}\n\n {/* Line segments connecting data points */}\n {normalized.map((y, i) => {\n if (i === 0) return null\n const prevY = normalized[i - 1]\n const x1 = (i - 1) * stepX\n const x2 = i * stepX\n const dx = x2 - x1\n const dy = y - prevY\n const length = Math.sqrt(dx * dx + dy * dy)\n const angle = Math.atan2(dy, dx) * (180 / Math.PI)\n return (\n <View\n key={`line-${i}`}\n style={{\n position: 'absolute',\n left: x1,\n top: prevY,\n width: length,\n height: 1.5,\n backgroundColor: resolvedColor,\n transformOrigin: '0 0',\n transform: [{ rotate: `${angle}deg` }],\n }}\n accessibilityElementsHidden\n testID={`sparkline-segment-${i}`}\n />\n )\n })}\n\n {/* Data point dots */}\n {(showDots || highlightLast) &&\n normalized.map((y, i) => {\n const isLast = i === data.length - 1\n const shouldShow = showDots || (highlightLast && isLast)\n if (!shouldShow) return null\n\n const size = highlightLast && isLast ? highlightSize : dotSize\n return (\n <View\n key={`dot-${i}`}\n style={{\n position: 'absolute',\n left: i * stepX - size / 2,\n top: y - size / 2,\n width: size,\n height: size,\n borderRadius: size / 2,\n backgroundColor: resolvedColor,\n }}\n accessibilityElementsHidden\n testID={`sparkline-dot-${i}`}\n />\n )\n })}\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text } from 'react-native'\nimport { VelocityStrip } from './VelocityStrip'\nimport { PrBadge, type PRType } from './PrBadge'\n\nexport type SetRowMode = 'active' | 'completed' | 'history'\n\nexport interface SetRowProps {\n mode: SetRowMode\n setNumber: number\n previous?: { reps: number; weight: number } | null\n reps: number | null\n weight: number | null\n rpe?: number | null\n unit: 'lbs' | 'kg'\n velocities?: number[]\n velocityExpanded?: boolean\n onVelocityToggle?: () => void\n setType?: string\n prBadges?: Array<{ type: PRType; label: string }>\n isNextSet?: boolean\n targets?: { reps: number; weight: number }\n}\n\nfunction getRPEColor(rpe: number): string {\n if (rpe >= 9.5) return '#ff4757'\n if (rpe >= 8.5) return '#ffa502'\n if (rpe >= 7) return '#ffd43b'\n return '#2ed573'\n}\n\nfunction formatAccessibilityLabel(\n setNumber: number,\n reps: number | null,\n weight: number | null,\n unit: string,\n): string {\n const repsText = reps != null ? `${reps} reps` : 'no reps'\n const weightText = weight != null ? `at ${weight} ${unit}` : ''\n return `Set ${setNumber}: ${repsText}${weightText ? ` ${weightText}` : ''}`\n}\n\nexport function SetRow({\n mode,\n setNumber,\n previous,\n reps,\n weight,\n rpe,\n unit,\n velocities,\n velocityExpanded,\n onVelocityToggle,\n setType,\n prBadges,\n isNextSet,\n targets,\n}: SetRowProps) {\n const isActive = mode === 'active'\n const isCompleted = mode === 'completed'\n\n const rowStyle: Record<string, unknown> = {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n padding: 7,\n paddingHorizontal: 8,\n gap: 8,\n borderRadius: 8,\n }\n\n if (isActive && isNextSet) {\n rowStyle.backgroundColor = 'rgba(255,121,0,0.06)'\n rowStyle.borderWidth = 1\n rowStyle.borderColor = 'rgba(255,121,0,0.15)'\n }\n\n if (isCompleted && !isNextSet) {\n rowStyle.opacity = 0.55\n }\n\n return (\n <View\n style={rowStyle}\n accessibilityLabel={formatAccessibilityLabel(\n setNumber,\n reps,\n weight,\n unit,\n )}\n testID=\"set-row\"\n >\n <View\n style={{ width: 36, alignItems: 'center', justifyContent: 'center' }}\n testID=\"set-row-set-number\"\n >\n {setType ? (\n <Text\n style={{\n fontSize: 10,\n fontWeight: '700',\n fontFamily: 'Inter, sans-serif',\n color: '#ffa502',\n backgroundColor: 'rgba(255,165,2,0.12)',\n paddingVertical: 1,\n paddingHorizontal: 5,\n borderRadius: 3,\n overflow: 'hidden',\n }}\n testID=\"set-row-type-badge\"\n >\n {setType}\n </Text>\n ) : (\n <Text\n style={{\n fontSize: 13,\n fontWeight: '600',\n fontFamily: 'Inter, sans-serif',\n color: '#9CA3AF',\n }}\n >\n {setNumber}\n </Text>\n )}\n </View>\n\n <View\n className=\"flex-1\"\n testID=\"set-row-previous\"\n >\n <Text\n style={{\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n color: '#9CA3AF',\n }}\n >\n {previous\n ? `${previous.reps} x ${previous.weight}`\n : '\\u2014'}\n </Text>\n </View>\n\n <View\n style={{ width: 44, alignItems: 'center', justifyContent: 'center' }}\n testID=\"set-row-reps\"\n >\n {isActive && reps == null && targets ? (\n <Text\n style={{\n fontSize: 13,\n fontStyle: 'italic',\n fontFamily: 'Inter, sans-serif',\n color: '#6B7280',\n }}\n testID=\"set-row-target-reps\"\n >\n {targets.reps}\n </Text>\n ) : (\n <Text\n style={{\n fontSize: 14,\n fontWeight: '600',\n fontFamily: 'Inter, sans-serif',\n color: reps != null ? '#F3F4F6' : '#6B7280',\n }}\n >\n {reps != null ? reps : '\\u2014'}\n </Text>\n )}\n </View>\n\n <View\n style={{ width: 56, alignItems: 'center', justifyContent: 'center' }}\n testID=\"set-row-weight\"\n >\n {isActive && weight == null && targets ? (\n <Text\n style={{\n fontSize: 13,\n fontStyle: 'italic',\n fontFamily: 'Inter, sans-serif',\n color: '#6B7280',\n }}\n testID=\"set-row-target-weight\"\n >\n {targets.weight}\n </Text>\n ) : (\n <Text\n style={{\n fontSize: 14,\n fontWeight: '600',\n fontFamily: 'Inter, sans-serif',\n color: weight != null ? '#F3F4F6' : '#6B7280',\n }}\n >\n {weight != null ? weight : '\\u2014'}\n </Text>\n )}\n </View>\n\n <View\n style={{ width: 36, alignItems: 'center', justifyContent: 'center' }}\n testID=\"set-row-rpe\"\n >\n <Text\n style={{\n fontSize: 13,\n fontWeight: '600',\n fontFamily: 'Inter, sans-serif',\n color: rpe != null ? getRPEColor(rpe) : '#6B7280',\n }}\n >\n {rpe != null ? rpe : '\\u2014'}\n </Text>\n </View>\n\n {prBadges && prBadges.length > 0 && (\n <View\n className=\"flex-row items-center\"\n style={{ gap: 4 }}\n testID=\"set-row-pr-badges\"\n >\n {prBadges.map((badge, i) => (\n <PrBadge\n key={i}\n type={badge.type}\n label={badge.label}\n animate={false}\n compact\n />\n ))}\n </View>\n )}\n\n {velocities && velocities.length > 0 && (\n <View\n style={{ position: 'absolute', bottom: 0, left: 8, right: 8 }}\n testID=\"set-row-velocity-strip\"\n >\n <VelocityStrip\n velocities={velocities}\n expanded={velocityExpanded}\n onToggle={onVelocityToggle}\n variant={onVelocityToggle ? 'full' : 'mini'}\n />\n </View>\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, TextInput } from 'react-native'\nimport { WORKOUT_TOKENS } from '../../../theme/workout-tokens'\n\nexport interface InputBarProps {\n exerciseName: string\n setNumber: number\n totalSets: number | null\n reps: string\n weight: string\n unit: 'lbs' | 'kg'\n onRepsChange: (value: string) => void\n onWeightChange: (value: string) => void\n onRecord: () => void\n canRecord: boolean\n visible: boolean\n}\n\nconst BRAND_PRIMARY = '#FF7900'\nconst TEXT_PRIMARY = '#F3F4F6'\nconst TEXT_TERTIARY = '#6B7280'\n\nconst inputStyle = {\n fontSize: 14,\n fontWeight: '600' as const,\n fontFamily: 'Inter, sans-serif',\n backgroundColor: WORKOUT_TOKENS.surface.raised,\n borderWidth: 1,\n borderColor: WORKOUT_TOKENS.border.strong,\n borderRadius: 6,\n textAlign: 'center' as const,\n color: TEXT_PRIMARY,\n paddingVertical: 5,\n paddingHorizontal: 2,\n}\n\nexport function InputBar({\n exerciseName,\n setNumber,\n totalSets,\n reps,\n weight,\n unit,\n onRepsChange,\n onWeightChange,\n onRecord,\n canRecord,\n visible,\n}: InputBarProps) {\n if (!visible) return null\n\n const setLabel = totalSets != null ? `Set ${setNumber}/${totalSets}` : `Set ${setNumber}`\n\n return (\n <View\n style={{\n width: '100%',\n backgroundColor: WORKOUT_TOKENS.surface.elevated,\n borderTopWidth: 1,\n borderTopColor: WORKOUT_TOKENS.border.default,\n paddingTop: 10,\n paddingHorizontal: 16,\n paddingBottom: 12,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n }}\n accessibilityRole=\"toolbar\"\n testID=\"input-bar\"\n >\n <View style={{ minWidth: 80, flexDirection: 'column' }}>\n <Text\n style={{\n fontSize: 12,\n fontWeight: '700',\n fontFamily: '\"Space Grotesk\", sans-serif',\n color: TEXT_PRIMARY,\n }}\n testID=\"input-bar-exercise-name\"\n numberOfLines={1}\n >\n {exerciseName}\n </Text>\n <Text\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n color: TEXT_TERTIARY,\n }}\n testID=\"input-bar-set-info\"\n >\n {setLabel}\n </Text>\n </View>\n\n <View className=\"flex-1 flex-row items-center\" style={{ gap: 4 }}>\n <TextInput\n value={reps}\n onChangeText={onRepsChange}\n style={{ ...inputStyle, width: 36 }}\n accessibilityLabel=\"Reps\"\n testID=\"input-bar-reps\"\n keyboardType=\"numeric\"\n />\n <Text\n style={{\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n color: TEXT_TERTIARY,\n }}\n >\n {'\\u00D7'}\n </Text>\n <TextInput\n value={weight}\n onChangeText={onWeightChange}\n style={{ ...inputStyle, width: 52 }}\n accessibilityLabel={`Weight in ${unit}`}\n testID=\"input-bar-weight\"\n keyboardType=\"numeric\"\n />\n <Text\n style={{\n fontSize: 12,\n fontWeight: '500',\n fontFamily: 'Inter, sans-serif',\n color: TEXT_TERTIARY,\n }}\n testID=\"input-bar-unit\"\n >\n {unit}\n </Text>\n </View>\n\n <Pressable\n onPress={onRecord}\n disabled={!canRecord}\n style={({ pressed }) => ({\n backgroundColor: BRAND_PRIMARY,\n borderRadius: 8,\n paddingVertical: 10,\n paddingHorizontal: 16,\n opacity: !canRecord ? 0.4 : pressed ? 0.8 : 1,\n })}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Record set\"\n testID=\"input-bar-record\"\n >\n <Text\n style={{\n fontSize: 13,\n fontWeight: '700',\n fontFamily: 'Inter, sans-serif',\n color: '#FFFFFF',\n }}\n >\n Record\n </Text>\n </Pressable>\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, Pressable } from 'react-native'\nimport { WORKOUT_TOKENS } from '../../../theme/workout-tokens'\n\nconst BRAND_PRIMARY = '#FF7900'\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: WORKOUT_TOKENS.surface.raised,\n borderTopWidth: 1,\n borderTopColor: WORKOUT_TOKENS.border.default,\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: WORKOUT_TOKENS.border.default,\n borderRadius: 2,\n marginBottom: 12,\n }}\n testID=\"rest-timer-progress-track\"\n >\n <View\n style={{\n height: '100%',\n backgroundColor: BRAND_PRIMARY,\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: BRAND_PRIMARY,\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 { useState } from 'react'\nimport { View, Text, Pressable } from 'react-native'\nimport { WORKOUT_TOKENS } from '../../../theme/workout-tokens'\nimport { VelocityStrip } from './VelocityStrip'\nimport { PlaceholderStrip } from './PlaceholderStrip'\nimport { WeightBadge } from './WeightBadge'\nimport { PrBadge } from './PrBadge'\nimport { TempoDisplay } from './TempoDisplay'\nimport { SetRow, type SetRowProps } from './SetRow'\n\nexport type ExerciseCardState = 'collapsed' | 'expanded' | 'upcoming'\n\nexport interface ExerciseCardProps {\n name: string\n state: ExerciseCardState\n onToggle: () => void\n onNavigateDetail?: () => void\n summary?: {\n sets: number\n reps: number | string\n weight: number\n unit: 'lbs' | 'kg'\n }\n e1rm?: { value: number; unit: 'lbs' | 'kg' }\n isPR?: boolean\n setVelocities?: number[][]\n totalPlannedSets?: number\n sets?: SetRowProps[]\n tempo?: [number, number, number, number]\n prescription?: string\n previousBest?: string\n supersetPosition?: 'first' | 'last' | 'middle' | null\n supersetColor?: string\n}\n\nconst COLORS = {\n textPrimary: '#F3F4F6',\n textSecondary: '#9CA3AF',\n textTertiary: '#6B7280',\n brandPrimary: '#FF7900',\n}\n\nconst COLUMN_HEADERS = ['SET', 'PREV', 'REPS', 'LBS', 'RPE'] as const\n\nfunction getSupersetBorderRadius(\n position: ExerciseCardProps['supersetPosition'],\n): Record<string, number> {\n switch (position) {\n case 'first':\n return {\n borderTopLeftRadius: 12,\n borderTopRightRadius: 12,\n borderBottomLeftRadius: 8,\n borderBottomRightRadius: 8,\n }\n case 'last':\n return {\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n borderBottomLeftRadius: 12,\n borderBottomRightRadius: 12,\n }\n case 'middle':\n return {\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n borderBottomLeftRadius: 8,\n borderBottomRightRadius: 8,\n }\n default:\n return {\n borderTopLeftRadius: 12,\n borderTopRightRadius: 12,\n borderBottomLeftRadius: 12,\n borderBottomRightRadius: 12,\n }\n }\n}\n\nfunction getSupersetMargin(\n position: ExerciseCardProps['supersetPosition'],\n): Record<string, number> {\n if (position === 'first' || position === 'middle') {\n return { marginBottom: 2 }\n }\n return {}\n}\n\nfunction formatSummary(summary: ExerciseCardProps['summary']): string {\n if (!summary) return ''\n return `${summary.sets}\\u00D7${summary.reps} @ ${summary.weight} ${summary.unit}`\n}\n\nfunction formatAccessibilityLabel(\n name: string,\n summary: ExerciseCardProps['summary'],\n prescription: ExerciseCardProps['prescription'],\n): string {\n if (summary) return `${name}, ${formatSummary(summary)}`\n if (prescription) return `${name}, ${prescription}`\n return name\n}\n\nfunction CollapsedCard({\n name,\n onToggle,\n summary,\n e1rm,\n isPR,\n setVelocities,\n totalPlannedSets,\n supersetPosition,\n}: ExerciseCardProps) {\n const [pressed, setPressed] = useState(false)\n const completedSets = setVelocities?.length ?? 0\n const remaining = Math.max(0, (totalPlannedSets ?? 0) - completedSets)\n const borderRadius = getSupersetBorderRadius(supersetPosition)\n const supersetMargin = getSupersetMargin(supersetPosition)\n\n return (\n <Pressable\n onPress={onToggle}\n onPressIn={() => setPressed(true)}\n onPressOut={() => setPressed(false)}\n accessibilityRole=\"button\"\n accessibilityLabel={formatAccessibilityLabel(name, summary, undefined)}\n testID=\"exercise-card\"\n >\n <View\n style={{\n padding: 12,\n paddingHorizontal: 14,\n cursor: 'pointer',\n backgroundColor: pressed\n ? WORKOUT_TOKENS.surface.raised\n : 'transparent',\n ...borderRadius,\n ...supersetMargin,\n }}\n >\n <View\n className=\"flex-row items-center\"\n testID=\"exercise-card-header\"\n >\n <Text\n style={{\n fontSize: 14,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: COLORS.textPrimary,\n }}\n testID=\"exercise-card-name\"\n >\n {name}\n </Text>\n <View className=\"flex-1\" />\n {summary && (\n <Text\n style={{\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n color: COLORS.textSecondary,\n marginRight: 8,\n }}\n testID=\"exercise-card-summary\"\n >\n {formatSummary(summary)}\n </Text>\n )}\n {e1rm && (\n <WeightBadge\n value={e1rm.value}\n unit={e1rm.unit}\n size=\"sm\"\n showIcon={false}\n testID=\"exercise-card-e1rm\"\n />\n )}\n {isPR && (\n <View style={{ marginLeft: 4 }}>\n <PrBadge type=\"e1rm\" compact animate={false} />\n </View>\n )}\n </View>\n\n {(completedSets > 0 || remaining > 0) && (\n <View\n className=\"flex-row\"\n style={{ marginTop: 6, gap: 4 }}\n testID=\"exercise-card-strips\"\n >\n {setVelocities?.map((velocities, i) => (\n <VelocityStrip\n key={i}\n velocities={velocities}\n variant=\"mini\"\n testID={`exercise-card-velocity-strip-${i}`}\n />\n ))}\n {Array.from({ length: remaining }, (_, i) => (\n <PlaceholderStrip\n key={`placeholder-${i}`}\n testID={`exercise-card-placeholder-${i}`}\n />\n ))}\n </View>\n )}\n </View>\n </Pressable>\n )\n}\n\nfunction ExpandedCard({\n name,\n onToggle,\n summary,\n e1rm,\n isPR,\n sets,\n tempo,\n supersetPosition,\n}: ExerciseCardProps) {\n const borderRadius = getSupersetBorderRadius(supersetPosition)\n const supersetMargin = getSupersetMargin(supersetPosition)\n\n return (\n <View\n style={{\n backgroundColor: WORKOUT_TOKENS.surface.elevated,\n borderWidth: 1,\n borderColor: WORKOUT_TOKENS.border.default,\n ...borderRadius,\n ...supersetMargin,\n }}\n testID=\"exercise-card\"\n >\n <Pressable\n onPress={onToggle}\n accessibilityRole=\"button\"\n accessibilityLabel={formatAccessibilityLabel(name, summary, undefined)}\n aria-expanded={true}\n testID=\"exercise-card-header\"\n >\n <View\n className=\"flex-row items-center\"\n style={{\n padding: 12,\n paddingHorizontal: 14,\n paddingBottom: 10,\n borderBottomWidth: 1,\n borderBottomColor: WORKOUT_TOKENS.border.default,\n }}\n >\n <Text\n style={{\n fontSize: 14,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: COLORS.textPrimary,\n }}\n testID=\"exercise-card-name\"\n >\n {name}\n </Text>\n <View className=\"flex-1\" />\n {summary && (\n <Text\n style={{\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n color: COLORS.textSecondary,\n marginRight: 8,\n }}\n testID=\"exercise-card-summary\"\n >\n {formatSummary(summary)}\n </Text>\n )}\n {e1rm && (\n <WeightBadge\n value={e1rm.value}\n unit={e1rm.unit}\n size=\"sm\"\n showIcon={false}\n testID=\"exercise-card-e1rm\"\n />\n )}\n {isPR && (\n <View style={{ marginLeft: 4 }}>\n <PrBadge type=\"e1rm\" compact animate={false} />\n </View>\n )}\n </View>\n </Pressable>\n\n {tempo && (\n <View style={{ marginTop: 8, paddingHorizontal: 14 }} testID=\"exercise-card-tempo\">\n <TempoDisplay tempo={tempo} size=\"sm\" />\n </View>\n )}\n\n <View\n className=\"flex-row\"\n style={{\n paddingVertical: 8,\n paddingHorizontal: 8,\n paddingBottom: 4,\n }}\n testID=\"exercise-card-column-headers\"\n >\n {COLUMN_HEADERS.map((header, i) => {\n const widths = [36, undefined, 44, 56, 36]\n const width = widths[i]\n const isFlex = width === undefined\n\n return (\n <View\n key={header}\n style={{\n ...(isFlex ? {} : { width }),\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n }}\n {...(isFlex ? { className: 'flex-1' } : {})}\n >\n <Text\n style={{\n fontSize: 10,\n fontWeight: '600',\n fontFamily: 'Inter, sans-serif',\n textTransform: 'uppercase',\n letterSpacing: 0.8,\n color: COLORS.textTertiary,\n }}\n >\n {header}\n </Text>\n </View>\n )\n })}\n </View>\n\n {sets && (\n <View testID=\"exercise-card-sets\">\n {sets.map((setProps, i) => (\n <SetRow key={i} {...setProps} />\n ))}\n </View>\n )}\n </View>\n )\n}\n\nfunction UpcomingCard({\n name,\n prescription,\n previousBest,\n supersetPosition,\n}: ExerciseCardProps) {\n const borderRadius = getSupersetBorderRadius(supersetPosition)\n const supersetMargin = getSupersetMargin(supersetPosition)\n\n return (\n <View\n style={{\n opacity: 0.6,\n padding: 12,\n paddingHorizontal: 14,\n ...borderRadius,\n ...supersetMargin,\n }}\n accessibilityLabel={formatAccessibilityLabel(name, undefined, prescription)}\n testID=\"exercise-card\"\n >\n <View className=\"flex-row items-center\">\n <Text\n style={{\n fontSize: 14,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: COLORS.textPrimary,\n }}\n testID=\"exercise-card-name\"\n >\n {name}\n </Text>\n {prescription && (\n <Text\n style={{\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n color: COLORS.textSecondary,\n marginLeft: 8,\n }}\n testID=\"exercise-card-prescription\"\n >\n {prescription}\n </Text>\n )}\n <View className=\"flex-1\" />\n {previousBest && (\n <Text\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n color: COLORS.textTertiary,\n }}\n testID=\"exercise-card-previous-best\"\n >\n {previousBest}\n </Text>\n )}\n </View>\n </View>\n )\n}\n\nexport function ExerciseCard(props: ExerciseCardProps) {\n switch (props.state) {\n case 'collapsed':\n return <CollapsedCard {...props} />\n case 'expanded':\n return <ExpandedCard {...props} />\n case 'upcoming':\n return <UpcomingCard {...props} />\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}\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 never}\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","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useState } from 'react'\nimport { View, Pressable, Animated, type ViewProps } from 'react-native'\n\nconst BRAND_PRIMARY = '#FF7900'\n\nexport type MesoStatus = 'completed' | 'current' | 'upcoming'\n\nexport interface Meso {\n id: string\n name: string\n weekCount: number\n status: MesoStatus\n /**\n * 1-based week index of progress within a `current` meso.\n * Drives the solid fill width. Ignored for non-current mesos.\n */\n currentWeek?: number\n}\n\nexport interface MesoProgressBarProps extends ViewProps {\n mesos: Meso[]\n activeMesoId: string | null\n onMesoPress: (mesoId: string) => void\n className?: string\n}\n\nconst segmentBgColors: Record<MesoStatus, string> = {\n completed: 'rgba(20,184,166,0.3)',\n current: 'rgba(255,121,0,0.5)',\n upcoming: 'rgba(255,255,255,0.06)',\n}\n\nfunction clampProgress(currentWeek: number | undefined, weekCount: number): number {\n if (currentWeek == null || weekCount <= 0) return 0\n const ratio = currentWeek / weekCount\n return Math.max(0, Math.min(1, ratio))\n}\n\ninterface SegmentProps {\n meso: Meso\n isActive: boolean\n onPress: (id: string) => void\n}\n\nfunction MesoSegment({ meso, isActive, onPress }: SegmentProps) {\n const [pressScale] = useState(() => new Animated.Value(1))\n\n const handlePressIn = () => {\n Animated.timing(pressScale, {\n toValue: 0.98,\n duration: 150,\n useNativeDriver: true,\n }).start()\n }\n\n const handlePressOut = () => {\n Animated.timing(pressScale, {\n toValue: 1,\n duration: 150,\n useNativeDriver: true,\n }).start()\n }\n\n const progress = meso.status === 'current'\n ? clampProgress(meso.currentWeek, meso.weekCount)\n : 0\n\n return (\n <Pressable\n style={{ flex: meso.weekCount }}\n onPress={() => onPress(meso.id)}\n onPressIn={handlePressIn}\n onPressOut={handlePressOut}\n accessibilityRole=\"button\"\n accessibilityLabel={`${meso.name}, ${meso.status}`}\n testID={`meso-segment-${meso.id}`}\n >\n <Animated.View\n style={[\n {\n height: 8,\n borderRadius: 4,\n overflow: 'hidden',\n backgroundColor: segmentBgColors[meso.status],\n transform: [{ scale: pressScale }],\n },\n isActive\n ? {\n borderWidth: 2,\n borderColor: BRAND_PRIMARY,\n transform: [{ scale: 1.02 }, { scale: pressScale }],\n }\n : undefined,\n ]}\n testID={`meso-segment-inner-${meso.id}`}\n >\n {meso.status === 'current' && progress > 0 && (\n <View\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n width: `${progress * 100}%`,\n backgroundColor: BRAND_PRIMARY,\n }}\n testID={`meso-segment-fill-${meso.id}`}\n />\n )}\n </Animated.View>\n </Pressable>\n )\n}\n\n/**\n * Segmented horizontal bar of mesocycles. Each segment is tappable and its\n * flex width is proportional to the meso's `weekCount`. The active segment is\n * highlighted with a 2px brand border to stay in sync with MesoCard selection.\n *\n * @example\n * <MesoProgressBar\n * mesos={[\n * { id: 'm1', name: 'Accumulation', weekCount: 4, status: 'completed' },\n * { id: 'm2', name: 'Intensification', weekCount: 3, status: 'current', currentWeek: 2 },\n * { id: 'm3', name: 'Peak', weekCount: 2, status: 'upcoming' },\n * ]}\n * activeMesoId=\"m2\"\n * onMesoPress={(id) => console.log(id)}\n * />\n */\nexport function MesoProgressBar({\n mesos,\n activeMesoId,\n onMesoPress,\n className,\n ...props\n}: MesoProgressBarProps) {\n return (\n <View\n className={className}\n style={{\n flexDirection: 'row',\n gap: 2,\n paddingHorizontal: 16,\n alignItems: 'center',\n }}\n testID=\"meso-progress-bar\"\n {...props}\n >\n {mesos.map((meso) => (\n <MesoSegment\n key={meso.id}\n meso={meso}\n isActive={meso.id === activeMesoId}\n onPress={onMesoPress}\n />\n ))}\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, type ViewProps } from 'react-native'\nimport { WorkoutPill, type WorkoutPillStatus } from './WorkoutPill'\nimport { IntensityBar } from './IntensityBar'\n\nconst BRAND_PRIMARY = '#FF7900'\n\nexport interface WeekRowWorkout {\n name: string\n status: WorkoutPillStatus\n onPress?: () => void\n}\n\nexport interface WeekRowProps extends ViewProps {\n /** Week index within the mesocycle (1-based) */\n weekNumber: number\n /** Total weeks in the mesocycle */\n totalWeeks: number\n /** Workouts scheduled for this week */\n workouts: WeekRowWorkout[]\n /** Planned intensity for the week, 0-1 */\n intensityLevel: number\n /** Optional MRV/overexertion threshold, 0-1 */\n intensityThreshold?: number\n /** Highlights this row as the active week */\n isCurrent?: boolean\n /** Renders this row as a deload week (purple tint, deload pills) */\n isDeload?: boolean\n className?: string\n}\n\n/**\n * A single week within a mesocycle, showing the week number, its workout pills,\n * and a right-aligned vertical intensity indicator.\n *\n * @example\n * <WeekRow\n * weekNumber={1}\n * totalWeeks={4}\n * workouts={[\n * { name: 'Upper', status: 'completed' },\n * { name: 'Lower', status: 'current' },\n * ]}\n * intensityLevel={0.55}\n * intensityThreshold={0.8}\n * isCurrent\n * />\n */\nexport function WeekRow({\n weekNumber,\n totalWeeks,\n workouts,\n intensityLevel,\n intensityThreshold,\n isCurrent = false,\n isDeload = false,\n className,\n ...props\n}: WeekRowProps) {\n const rowStyle: Record<string, unknown> = {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n paddingVertical: 10,\n paddingHorizontal: 12,\n gap: 12,\n }\n\n if (isDeload) {\n rowStyle.backgroundColor = 'rgba(147,51,234,0.06)'\n }\n\n if (isCurrent) {\n rowStyle.backgroundColor = 'rgba(255,121,0,0.04)'\n rowStyle.borderLeftWidth = 2\n rowStyle.borderLeftColor = BRAND_PRIMARY\n }\n\n return (\n <View\n className={className}\n style={rowStyle}\n accessibilityLabel={`Week ${weekNumber} of ${totalWeeks}, ${workouts.length} workouts`}\n testID=\"week-row\"\n {...props}\n >\n <View\n style={{ flexDirection: 'row', alignItems: 'center', width: 32, gap: 4 }}\n testID=\"week-row-number\"\n >\n {isCurrent && (\n <View\n style={{\n width: 6,\n height: 6,\n borderRadius: 3,\n backgroundColor: BRAND_PRIMARY,\n }}\n accessibilityElementsHidden\n testID=\"week-row-current-dot\"\n />\n )}\n <Text\n style={{\n fontSize: 13,\n fontWeight: '700',\n fontFamily: 'Inter, sans-serif',\n color: isCurrent ? BRAND_PRIMARY : '#F3F4F6',\n }}\n accessibilityElementsHidden\n >\n {`W${weekNumber}`}\n </Text>\n </View>\n\n <View\n style={{ flex: 1, flexDirection: 'row', alignItems: 'center', flexWrap: 'wrap', gap: 6 }}\n testID=\"week-row-pills\"\n >\n {workouts.map((workout, i) => (\n <WorkoutPill\n key={i}\n name={workout.name}\n status={isDeload ? 'deload' : workout.status}\n onPress={workout.onPress}\n />\n ))}\n </View>\n\n <View testID=\"week-row-intensity\">\n <IntensityBar\n level={intensityLevel}\n threshold={intensityThreshold}\n orientation=\"vertical\"\n size={24}\n thickness={6}\n />\n </View>\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, ScrollView, Pressable, type ViewProps } from 'react-native'\nimport { Card } from '../../ui/card'\nimport { ExerciseCard, type ExerciseCardProps } from './ExerciseCard'\nimport {\n MuscleGroupChip,\n type VolumeStatus,\n} from './MuscleGroupChip'\n\nexport type WorkoutStatus = 'completed' | 'today' | 'upcoming'\n\n/** Spec volume-status vocabulary; mapped to MuscleGroupChip's VolumeStatus internally. */\nexport type WorkoutMuscleVolumeStatus =\n | 'under'\n | 'maintenance'\n | 'productive'\n | 'over'\n\nexport interface WorkoutMuscleGroup {\n /** Muscle group identifier (free-form to match plan data). */\n group: string\n /** Display label, may be abbreviated. */\n label: string\n /** Volume status relative to landmarks. */\n volumeStatus?: WorkoutMuscleVolumeStatus\n}\n\nexport interface WorkoutCardProps extends ViewProps {\n name: string\n date: string\n /** e.g. \"45 min\" */\n duration?: string\n status: WorkoutStatus\n muscleGroups: WorkoutMuscleGroup[]\n totalSets: number\n /** Total lbs/kg moved across the workout. */\n totalVolume?: number\n unit: 'lbs' | 'kg'\n exercises?: ExerciseCardProps[]\n expanded?: boolean\n onToggle?: () => void\n className?: string\n}\n\nconst COLORS = {\n textPrimary: '#F3F4F6',\n textSecondary: '#9CA3AF',\n textTertiary: '#6B7280',\n statusSuccess: '#14B8A6',\n brandPrimary: '#FF7900',\n borderDefault: '#1F1F1F',\n brandPrimarySubtle: 'rgba(255,121,0,0.06)',\n}\n\nconst statusBorderColors: Record<WorkoutStatus, string> = {\n completed: COLORS.statusSuccess,\n today: COLORS.brandPrimary,\n upcoming: COLORS.borderDefault,\n}\n\n/** Maps the spec's volume-status vocabulary onto MuscleGroupChip's enum. */\nconst volumeStatusMap: Record<WorkoutMuscleVolumeStatus, VolumeStatus> = {\n under: 'behind',\n maintenance: 'ontrack',\n productive: 'target',\n over: 'over',\n}\n\nfunction formatStats(\n totalSets: number,\n totalVolume: number | undefined,\n unit: 'lbs' | 'kg',\n duration: string | undefined,\n): string {\n const parts = [`${totalSets} sets`]\n if (totalVolume != null) parts.push(`${totalVolume} ${unit}`)\n if (duration) parts.push(duration)\n return parts.join(' · ')\n}\n\n/**\n * A workout within a week: name, date, duration, muscle-group pills, and a\n * stats summary. When expandable it renders contained ExerciseCards on expand.\n * Status drives a colored left border, today adds a brand tint, and upcoming\n * is dimmed.\n *\n * @example\n * <WorkoutCard\n * name=\"Upper A\"\n * date=\"Mon, Jun 23\"\n * duration=\"45 min\"\n * status=\"today\"\n * muscleGroups={[{ group: 'chest', label: 'Chest', volumeStatus: 'productive' }]}\n * totalSets={18}\n * totalVolume={12450}\n * unit=\"lbs\"\n * expanded\n * onToggle={() => {}}\n * exercises={exercises}\n * />\n */\nexport function WorkoutCard({\n name,\n date,\n duration,\n status,\n muscleGroups,\n totalSets,\n totalVolume,\n unit,\n exercises,\n expanded = false,\n onToggle,\n className,\n ...props\n}: WorkoutCardProps) {\n const isExpandable = onToggle != null\n const isUpcoming = status === 'upcoming'\n const isToday = status === 'today'\n\n const summary = (\n <View style={{ padding: 14 }} testID=\"workout-card-body\">\n <View className=\"flex-row items-center\" testID=\"workout-card-header\">\n <Text\n style={{\n fontSize: 15,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: COLORS.textPrimary,\n }}\n testID=\"workout-card-name\"\n >\n {name}\n </Text>\n <View className=\"flex-1\" />\n <Text\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n color: COLORS.textTertiary,\n }}\n testID=\"workout-card-date\"\n >\n {date}\n </Text>\n </View>\n\n <Text\n style={{\n marginTop: 4,\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n color: COLORS.textSecondary,\n }}\n testID=\"workout-card-stats\"\n >\n {formatStats(totalSets, totalVolume, unit, duration)}\n </Text>\n\n {muscleGroups.length > 0 && (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={{ gap: 5 }}\n style={{ marginTop: 8 }}\n testID=\"workout-card-muscle-groups\"\n >\n {muscleGroups.map((muscle) => (\n <MuscleGroupChip\n key={muscle.group}\n name={muscle.label}\n volumeStatus={\n muscle.volumeStatus\n ? volumeStatusMap[muscle.volumeStatus]\n : undefined\n }\n />\n ))}\n </ScrollView>\n )}\n </View>\n )\n\n return (\n <Card\n variant=\"accent\"\n elevation={1}\n accentColor={statusBorderColors[status]}\n bgColor={isToday ? COLORS.brandPrimarySubtle : undefined}\n className={className}\n style={isUpcoming ? { opacity: 0.6 } : undefined}\n testID=\"workout-card\"\n {...props}\n >\n {isExpandable ? (\n <Pressable\n onPress={onToggle}\n accessibilityRole=\"button\"\n accessibilityLabel={`${name} workout, ${date}, ${status}`}\n aria-expanded={expanded}\n testID=\"workout-card-toggle\"\n >\n {summary}\n </Pressable>\n ) : (\n <View\n accessibilityLabel={`${name} workout, ${date}, ${status}`}\n testID=\"workout-card-static\"\n >\n {summary}\n </View>\n )}\n\n {expanded && exercises && exercises.length > 0 && (\n <View\n style={{ paddingHorizontal: 8, paddingBottom: 8, gap: 6 }}\n testID=\"workout-card-exercises\"\n >\n {exercises.map((exercise, i) => (\n <ExerciseCard key={i} {...exercise} />\n ))}\n </View>\n )}\n </Card>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState } from 'react'\nimport { View, Text, Pressable, Animated, Easing, type ViewProps } from 'react-native'\nimport { Card } from '../../ui/card'\nimport { Badge } from '../../ui/badge'\nimport { WeekRow, type WeekRowProps } from './WeekRow'\n\nconst BRAND_PRIMARY = '#FF7900'\nconst BRAND_PRIMARY_DARK = '#C45E00'\nconst BRAND_PRIMARY_LIGHT = '#FFB066'\nconst BORDER_DEFAULT = '#1F1F1F'\nconst TEXT_PRIMARY = '#F3F4F6'\nconst TEXT_SECONDARY = '#9CA3AF'\n\n/** Gradient stops for the 3px top accent: dark -> primary -> light. */\nconst ACCENT_STOPS = [BRAND_PRIMARY_DARK, BRAND_PRIMARY, BRAND_PRIMARY_LIGHT]\n\nexport interface MesoVolumeHeatmapEntry {\n /** Muscle group identifier (free-form to match plan data). */\n group: string\n /** Planned volume intensity for the group, 0-100. */\n percentage: number\n}\n\nexport interface MesoCardProps extends ViewProps {\n /** Mesocycle name, e.g. \"Accumulation\". */\n name: string\n /** Training goal, e.g. \"Hypertrophy\", \"Strength\", \"Peaking\". */\n goal: string\n /** Training split, e.g. \"Upper/Lower\", \"Push/Pull/Legs\". */\n split: string\n /** Week range label, e.g. \"Weeks 1-4\". */\n weekRange: string\n /** Current week within the mesocycle (1-based). */\n currentWeek?: number\n /** Total weeks in the mesocycle. */\n totalWeeks: number\n /** Weeks rendered as a WeekRow list when expanded. */\n weeks: WeekRowProps[]\n /** Whether the card is expanded to reveal the week list. */\n expanded?: boolean\n /** Toggles expansion; makes the header a button when provided. */\n onToggle?: () => void\n /** Whether this meso is highlighted in the MesoProgressBar. */\n highlighted?: boolean\n /** Volume heatmap data per muscle group for the meso. */\n volumeHeatmap?: MesoVolumeHeatmapEntry[]\n className?: string\n}\n\n/**\n * Maps a 0-100 volume percentage onto a brand-primary tint whose opacity\n * tracks intensity, keeping a visible floor so low-volume groups stay legible.\n */\nfunction heatmapColor(percentage: number): string {\n const clamped = Math.max(0, Math.min(100, percentage))\n const opacity = 0.12 + (clamped / 100) * 0.78\n return `rgba(255,121,0,${opacity.toFixed(3)})`\n}\n\n/**\n * A mesocycle card with name, goal, split, week range, an optional volume\n * heatmap strip, and an expandable WeekRow list. Highlighting animates the\n * border toward brand-primary with a subtle glow to stay in sync with the\n * MesoProgressBar.\n *\n * @example\n * <MesoCard\n * name=\"Accumulation\"\n * goal=\"Hypertrophy\"\n * split=\"Upper/Lower\"\n * weekRange=\"Weeks 1-4\"\n * currentWeek={2}\n * totalWeeks={4}\n * weeks={weeks}\n * volumeHeatmap={[{ group: 'chest', percentage: 80 }]}\n * expanded\n * onToggle={() => {}}\n * highlighted\n * />\n */\nexport function MesoCard({\n name,\n goal,\n split,\n weekRange,\n currentWeek,\n totalWeeks,\n weeks,\n expanded = false,\n onToggle,\n highlighted = false,\n volumeHeatmap,\n className,\n ...props\n}: MesoCardProps) {\n const isExpandable = onToggle != null\n const [highlight] = useState(() => new Animated.Value(highlighted ? 1 : 0))\n\n useEffect(() => {\n const animation = Animated.timing(highlight, {\n toValue: highlighted ? 1 : 0,\n duration: 250,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n })\n animation.start()\n return () => animation.stop()\n }, [highlighted, highlight])\n\n const borderColor = highlight.interpolate({\n inputRange: [0, 1],\n outputRange: [BORDER_DEFAULT, BRAND_PRIMARY],\n })\n\n const header = (\n <View style={{ paddingHorizontal: 14, paddingTop: 12, paddingBottom: 10 }} testID=\"meso-card-body\">\n <View className=\"flex-row items-center\" style={{ gap: 8 }} testID=\"meso-card-header\">\n <Text\n style={{\n fontSize: 15,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: TEXT_PRIMARY,\n }}\n testID=\"meso-card-name\"\n >\n {name}\n </Text>\n <Badge variant=\"subtle\" color=\"primary\" size=\"sm\" testID=\"meso-card-goal-badge\">\n {goal}\n </Badge>\n </View>\n\n <Text\n style={{\n marginTop: 4,\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n color: TEXT_SECONDARY,\n }}\n testID=\"meso-card-subheader\"\n >\n {`${split} · ${weekRange}`}\n </Text>\n\n {volumeHeatmap && volumeHeatmap.length > 0 && (\n <View\n className=\"flex-row items-center\"\n style={{ marginTop: 10, gap: 3 }}\n accessibilityElementsHidden\n testID=\"meso-card-heatmap\"\n >\n {volumeHeatmap.map((entry) => (\n <View\n key={entry.group}\n style={{\n flex: 1,\n height: 8,\n borderRadius: 2,\n backgroundColor: heatmapColor(entry.percentage),\n }}\n testID=\"meso-card-heatmap-cell\"\n />\n ))}\n </View>\n )}\n </View>\n )\n\n return (\n <Animated.View style={highlighted ? { transform: [{ scale: 1.0 }] } : undefined} testID=\"meso-card-wrapper\">\n <Card\n variant=\"outline\"\n elevation={2}\n borderColor={highlighted ? BRAND_PRIMARY : BORDER_DEFAULT}\n className={className}\n style={[\n { borderColor: borderColor as unknown as string },\n highlighted\n ? { boxShadow: '0 0 12px 2px rgba(255,121,0,0.25)' }\n : undefined,\n ]}\n testID=\"meso-card\"\n {...props}\n >\n <View\n className=\"flex-row\"\n style={{ position: 'absolute', top: 0, left: 0, right: 0, height: 3, zIndex: 1 }}\n accessibilityElementsHidden\n testID=\"meso-card-accent\"\n >\n {ACCENT_STOPS.map((color) => (\n <View key={color} style={{ flex: 1, backgroundColor: color }} />\n ))}\n </View>\n\n {isExpandable ? (\n <Pressable\n onPress={onToggle}\n accessibilityRole=\"button\"\n accessibilityLabel={`${name}, ${goal}, ${weekRange}`}\n aria-expanded={expanded}\n testID=\"meso-card-toggle\"\n >\n {header}\n </Pressable>\n ) : (\n <View\n accessibilityLabel={`${name}, ${goal}, ${weekRange}`}\n testID=\"meso-card-static\"\n >\n {header}\n </View>\n )}\n\n {expanded && weeks.length > 0 && (\n <View\n style={{ borderTopWidth: 1, borderTopColor: BORDER_DEFAULT }}\n testID=\"meso-card-weeks\"\n >\n {weeks.map((week) => (\n <WeekRow\n key={week.weekNumber}\n {...week}\n totalWeeks={week.totalWeeks ?? totalWeeks}\n isCurrent={week.isCurrent ?? week.weekNumber === currentWeek}\n />\n ))}\n </View>\n )}\n </Card>\n </Animated.View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { Star } from 'lucide-react'\nimport { Drawer, DrawerBody } from '../../ui/drawer'\n\nconst BRAND_PRIMARY = '#FF7900'\nconst RECENT_BORDER = 'rgba(255,176,32,0.3)'\nconst RECENT_GLOW = '0 0 12px rgba(255,176,32,0.06)'\nconst SURFACE_RAISED = '#1C1C1C'\nconst BORDER_DEFAULT = '#1F1F1F'\nconst TEXT_PRIMARY = '#F3F4F6'\nconst TEXT_SECONDARY = '#9CA3AF'\nconst TEXT_TERTIARY = '#6B7280'\n\nexport type PrRecordType = 'e1rm' | 'weight' | 'reps' | 'volume' | 'velocity'\n\nexport interface PrRecord {\n /** PR category, drives the row label and ordering grouping. */\n type: PrRecordType\n /** Numeric magnitude (paired with `unit`) or a pre-formatted display string. */\n value: string | number\n /** Unit suffix appended to numeric values, e.g. \"lbs\" or \"kg\". */\n unit?: 'lbs' | 'kg'\n /** Display date for when the record was set, e.g. \"Mar 14\" or \"2 weeks ago\". */\n date: string\n /** Marks the record as recently set; adds a subtle amber glow highlight. */\n isRecent?: boolean\n}\n\nexport interface PrHistoryModalProps extends ViewProps {\n /** Identifier of the exercise whose PR history is shown. */\n exerciseId: string\n /** Human-readable exercise name for the title and a11y label; falls back to `exerciseId`. */\n exerciseName?: string\n /** PR records to display, expected newest-first. */\n records: PrRecord[]\n /** Whether the bottom sheet is visible. */\n isOpen?: boolean\n /** Alias for `isOpen` (spec wording: \"isOpen/visible\"). `isOpen` wins when both are set. */\n visible?: boolean\n /** Invoked when the sheet requests to close (backdrop, close button, or back gesture). */\n onClose: () => void\n}\n\nconst TYPE_LABELS: Record<PrRecordType, string> = {\n e1rm: 'e1RM',\n weight: 'Weight',\n reps: 'Reps',\n volume: 'Volume',\n velocity: 'Velocity',\n}\n\nfunction recordLabel(type: PrRecordType): string {\n return TYPE_LABELS[type] ?? type\n}\n\nfunction recordValueText({ value, unit }: PrRecord): string {\n if (typeof value === 'number') {\n return unit ? `${value} ${unit}` : String(value)\n }\n return value\n}\n\nfunction PrRecordRow({ record, index }: { record: PrRecord; index: number }) {\n const label = recordLabel(record.type)\n const valueText = recordValueText(record)\n const a11yLabel = record.isRecent\n ? `${label} personal record: ${valueText}, ${record.date}, recent`\n : `${label} personal record: ${valueText}, ${record.date}`\n\n return (\n <View\n accessibilityRole=\"text\"\n accessibilityLabel={a11yLabel}\n className=\"flex-row items-center\"\n style={{\n gap: 10,\n paddingVertical: 10,\n paddingHorizontal: 12,\n marginBottom: 8,\n borderRadius: 8,\n backgroundColor: SURFACE_RAISED,\n borderWidth: 1,\n borderColor: record.isRecent ? RECENT_BORDER : BORDER_DEFAULT,\n ...(record.isRecent ? { boxShadow: RECENT_GLOW } : {}),\n }}\n testID={`pr-history-modal-record-${index}`}\n >\n <Star size={16} color={BRAND_PRIMARY} fill={BRAND_PRIMARY} strokeWidth={2} />\n <Text\n style={{\n flex: 1,\n fontSize: 13,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n color: TEXT_SECONDARY,\n }}\n testID={`pr-history-modal-record-${index}-type`}\n >\n {label}\n </Text>\n <Text\n style={{\n fontSize: 14,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: TEXT_PRIMARY,\n }}\n testID={`pr-history-modal-record-${index}-value`}\n >\n {valueText}\n </Text>\n <Text\n style={{\n minWidth: 64,\n textAlign: 'right',\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n color: TEXT_TERTIARY,\n }}\n testID={`pr-history-modal-record-${index}-date`}\n >\n {record.date}\n </Text>\n </View>\n )\n}\n\n/**\n * Bottom-sheet modal listing an exercise's personal-record history. Each row\n * shows the PR type, value, and date; recent records get a subtle amber glow.\n * Built on the titan `Drawer` primitive (bottom placement) so it inherits\n * backdrop dismissal, the back gesture, and `role=\"dialog\"` semantics.\n *\n * Typically triggered by tapping a `WeightBadge`, but the modal itself is\n * controlled — the trigger lives in the consumer.\n *\n * @example\n * <PrHistoryModal\n * exerciseId=\"bench-press\"\n * exerciseName=\"Bench Press\"\n * isOpen={open}\n * onClose={() => setOpen(false)}\n * records={[\n * { type: 'e1rm', value: 245, unit: 'lbs', date: 'Mar 14', isRecent: true },\n * { type: 'reps', value: '8 @ 185 lbs', date: 'Feb 28' },\n * ]}\n * />\n */\nexport function PrHistoryModal({\n exerciseId,\n exerciseName,\n records,\n isOpen,\n visible,\n onClose,\n ...props\n}: PrHistoryModalProps) {\n const open = isOpen ?? visible ?? false\n const exercise = exerciseName ?? exerciseId\n const dialogLabel = `${exercise} PR history`\n\n return (\n <Drawer\n isOpen={open}\n onClose={onClose}\n placement=\"bottom\"\n showCloseButton={false}\n className=\"rounded-t-2xl h-auto max-h-[85%]\"\n accessibilityLabel={dialogLabel}\n testID=\"pr-history-modal\"\n {...props}\n >\n <View\n accessibilityElementsHidden\n style={{\n alignSelf: 'center',\n width: 40,\n height: 4,\n borderRadius: 2,\n marginTop: 8,\n backgroundColor: BORDER_DEFAULT,\n }}\n testID=\"pr-history-modal-handle\"\n />\n\n <View\n className=\"flex-row items-center justify-between\"\n style={{ paddingHorizontal: 16, paddingTop: 12, paddingBottom: 8 }}\n testID=\"pr-history-modal-header\"\n >\n <Text\n accessibilityRole=\"header\"\n style={{\n fontSize: 16,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: TEXT_PRIMARY,\n }}\n testID=\"pr-history-modal-title\"\n >\n {dialogLabel}\n </Text>\n <Pressable\n onPress={onClose}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close PR history\"\n hitSlop={8}\n style={{ padding: 4, margin: -4 }}\n testID=\"pr-history-modal-close\"\n >\n <Text style={{ fontSize: 22, lineHeight: 22, color: TEXT_SECONDARY }}>\n {'×'}\n </Text>\n </Pressable>\n </View>\n\n <DrawerBody className=\"px-4 pt-0 pb-4\">\n {records.length === 0 ? (\n <View style={{ paddingVertical: 24 }} testID=\"pr-history-modal-empty\">\n <Text\n style={{\n textAlign: 'center',\n fontSize: 13,\n fontFamily: 'Inter, sans-serif',\n color: TEXT_TERTIARY,\n }}\n >\n No personal records yet\n </Text>\n </View>\n ) : (\n records.map((record, index) => (\n <PrRecordRow\n key={`${record.type}-${record.date}-${index}`}\n record={record}\n index={index}\n />\n ))\n )}\n </DrawerBody>\n </Drawer>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, Pressable } from 'react-native'\nimport { Card } from '../../ui/card'\nimport { Badge, type BadgeColor } from '../../ui/badge'\nimport { WORKOUT_TOKENS } from '../../../theme/workout-tokens'\n\nconst BRAND_PRIMARY = '#FF7900'\nconst BRAND_PRIMARY_SUBTLE = 'rgba(255,121,0,0.12)'\nconst STATUS_SUCCESS = '#14B8A6'\nconst STATUS_WARNING = '#FFB020'\nconst STATUS_ERROR = '#D14343'\nconst TEXT_PRIMARY = '#F3F4F6'\nconst TEXT_SECONDARY = '#9CA3AF'\n\n/** Emoji option sets per known factor, keyed by lowercase id/label. */\nconst EMOJI_SETS: Record<string, readonly string[]> = {\n sleep: ['😴', '😐', '🙂', '😊', '🤩'],\n soreness: ['😵', '😣', '😐', '🙂', '💪'],\n motivation: ['😑', '😐', '🙂', '😄', '🔥'],\n stress: ['😰', '😟', '😐', '😌', '😎'],\n}\nconst DEFAULT_EMOJI_SET = ['😞', '😕', '😐', '🙂', '😄'] as const\n\nexport type WarmUpStatus = 'good' | 'moderate' | 'caution'\n\nexport interface ReadinessFactor {\n /** Stable identifier; also used to pick the emoji set (sleep/soreness/motivation/stress). */\n id: string\n /** Human label, e.g. \"Sleep\". */\n label: string\n /** Selected level, 1-5. */\n value: number\n /** Called with the new 1-5 level when an emoji is tapped. */\n onChange: (value: number) => void\n}\n\nexport interface WarmUpValidation {\n /** Percent below the 14-day rolling velocity average. */\n velocityDeficit: number\n /** Short human recommendation, e.g. \"Velocity on target — proceed as planned\". */\n recommendation: string\n /** Severity of the deficit. */\n status: WarmUpStatus\n}\n\nexport interface ReadinessCheckProps {\n /** Subjective readiness factors (Sleep, Soreness, Motivation, Stress). */\n factors: ReadinessFactor[]\n /** Computed overall readiness score, 0-100. */\n score: number\n /** VBT warm-up validation result, shown once the warm-up set is performed. */\n warmUpValidation?: WarmUpValidation\n /** Whether the VBT warm-up has been performed. */\n warmUpCompleted: boolean\n /** Called when the assessment is confirmed and the workout can begin. */\n onConfirm: () => void\n className?: string\n}\n\n/** Maps a 0-100 readiness score onto a status color. */\nfunction scoreColor(score: number): string {\n if (score < 40) return STATUS_ERROR\n if (score < 70) return STATUS_WARNING\n return STATUS_SUCCESS\n}\n\nconst WARMUP_BADGE: Record<WarmUpStatus, { color: BadgeColor; label: string }> = {\n good: { color: 'success', label: 'Good' },\n moderate: { color: 'warning', label: 'Moderate' },\n caution: { color: 'error', label: 'Caution' },\n}\n\nfunction emojiSet(factor: ReadinessFactor): readonly string[] {\n return EMOJI_SETS[factor.id.toLowerCase()] ?? EMOJI_SETS[factor.label.toLowerCase()] ?? DEFAULT_EMOJI_SET\n}\n\n/** Warm-up velocity phrasing. Deficit is % below the 14-day average, so a\n * non-positive deficit means velocity is on/above average — never \"below\". */\nfunction velocityDeficitText(deficit: number): string {\n if (deficit > 0) return `Velocity ${deficit}% below 14-day average`\n if (deficit < 0) return `Velocity ${Math.abs(deficit)}% above 14-day average`\n return 'Velocity on 14-day average'\n}\n\ninterface EmojiSliderProps {\n factor: ReadinessFactor\n}\n\n/** One factor row: label plus a radiogroup of five tappable emoji. */\nfunction EmojiSlider({ factor }: EmojiSliderProps) {\n const emojis = emojiSet(factor)\n return (\n <View style={{ marginTop: 14 }} testID={`readiness-check-factor-${factor.id}`}>\n <Text\n style={{ fontSize: 12, fontWeight: '500', fontFamily: 'Inter, sans-serif', color: TEXT_SECONDARY }}\n testID=\"readiness-check-factor-label\"\n >\n {factor.label}\n </Text>\n <View\n className=\"flex-row items-center\"\n style={{ marginTop: 6, gap: 6 }}\n accessibilityRole=\"radiogroup\"\n aria-label={factor.label}\n testID=\"readiness-check-factor-options\"\n >\n {emojis.map((emoji, index) => {\n const level = index + 1\n const selected = factor.value === level\n return (\n <Pressable\n key={level}\n onPress={() => factor.onChange(level)}\n accessibilityRole=\"radio\"\n accessibilityLabel={`${factor.label} level ${level} of 5`}\n aria-checked={selected}\n testID=\"readiness-check-emoji\"\n style={({ pressed }) => ({\n flex: 1,\n alignItems: 'center',\n paddingVertical: 8,\n borderRadius: 8,\n borderWidth: 1,\n borderColor: selected ? BRAND_PRIMARY : WORKOUT_TOKENS.border.default,\n backgroundColor: selected ? BRAND_PRIMARY_SUBTLE : WORKOUT_TOKENS.surface.raised,\n opacity: selected ? 1 : pressed ? 0.8 : 0.55,\n transform: [{ scale: selected ? 1.06 : 1 }],\n })}\n >\n <Text style={{ fontSize: 20 }}>{emoji}</Text>\n </Pressable>\n )\n })}\n </View>\n </View>\n )\n}\n\n/** Circular score gauge: 60px ring colored by range with the score centered. */\nfunction ScoreGauge({ score }: { score: number }) {\n const color = scoreColor(score)\n return (\n <View\n accessibilityRole=\"image\"\n accessibilityLabel={`Readiness score: ${score} out of 100`}\n testID=\"readiness-check-score\"\n style={{\n width: 60,\n height: 60,\n borderRadius: 30,\n borderWidth: 4,\n borderColor: color,\n backgroundColor: WORKOUT_TOKENS.surface.raised,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Text\n style={{ fontSize: 20, fontWeight: '700', fontFamily: '\"Space Grotesk\", sans-serif', color }}\n testID=\"readiness-check-score-value\"\n >\n {score}\n </Text>\n </View>\n )\n}\n\n/** VBT warm-up validation card with status badge and recommendation. */\nfunction WarmUpCard({ validation }: { validation: WarmUpValidation }) {\n const badge = WARMUP_BADGE[validation.status]\n return (\n <View\n style={{\n marginTop: 16,\n padding: 12,\n borderRadius: 8,\n borderWidth: 1,\n borderColor: WORKOUT_TOKENS.border.default,\n backgroundColor: WORKOUT_TOKENS.surface.raised,\n }}\n testID=\"readiness-check-warmup\"\n >\n <View className=\"flex-row items-center justify-between\" style={{ gap: 8 }}>\n <Text\n style={{ fontSize: 12, fontWeight: '600', fontFamily: 'Inter, sans-serif', color: TEXT_SECONDARY }}\n testID=\"readiness-check-warmup-deficit\"\n >\n {velocityDeficitText(validation.velocityDeficit)}\n </Text>\n <Badge variant=\"subtle\" color={badge.color} size=\"sm\" testID=\"readiness-check-warmup-badge\">\n {badge.label}\n </Badge>\n </View>\n <Text\n style={{ marginTop: 6, fontSize: 13, fontFamily: 'Inter, sans-serif', color: TEXT_PRIMARY }}\n testID=\"readiness-check-warmup-recommendation\"\n >\n {validation.recommendation}\n </Text>\n </View>\n )\n}\n\n/**\n * Pre-workout readiness assessment combining subjective emoji sliders with an\n * objective VBT warm-up validation and a computed readiness score.\n *\n * @example\n * <ReadinessCheck\n * factors={[{ id: 'sleep', label: 'Sleep', value: 4, onChange: setSleep }]}\n * score={78}\n * warmUpCompleted\n * warmUpValidation={{ velocityDeficit: 4, recommendation: 'On target', status: 'good' }}\n * onConfirm={start}\n * />\n */\nexport function ReadinessCheck({\n factors,\n score,\n warmUpValidation,\n warmUpCompleted,\n onConfirm,\n className,\n}: ReadinessCheckProps) {\n return (\n <Card variant=\"outline\" elevation={2} className={className} testID=\"readiness-check\">\n <View style={{ padding: 16 }}>\n <View className=\"flex-row items-center justify-between\" style={{ gap: 12 }}>\n <Text\n style={{ fontSize: 18, fontWeight: '700', fontFamily: '\"Space Grotesk\", sans-serif', color: TEXT_PRIMARY }}\n testID=\"readiness-check-title\"\n >\n How are you feeling?\n </Text>\n <ScoreGauge score={score} />\n </View>\n\n {factors.map((factor) => (\n <EmojiSlider key={factor.id} factor={factor} />\n ))}\n\n {warmUpCompleted && warmUpValidation && <WarmUpCard validation={warmUpValidation} />}\n\n <Pressable\n onPress={onConfirm}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Confirm readiness and start workout\"\n testID=\"readiness-check-confirm\"\n style={({ pressed }) => ({\n marginTop: 16,\n width: '100%',\n alignItems: 'center',\n backgroundColor: BRAND_PRIMARY,\n borderRadius: 8,\n paddingVertical: 12,\n opacity: pressed ? 0.8 : 1,\n })}\n >\n <Text style={{ fontSize: 13, fontWeight: '700', fontFamily: 'Inter, sans-serif', color: '#FFFFFF' }}>\n Start Workout\n </Text>\n </Pressable>\n </View>\n </Card>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { Fragment, type ReactNode } from 'react'\nimport { View, Text, type ViewProps, type ViewStyle } from 'react-native'\nimport { Card } from '../../ui/card'\nimport { StatusDot } from './StatusDot'\n\nconst BRAND_PRIMARY = '#FF7900'\nconst BRAND_PRIMARY_DARK = '#C45E00'\nconst BRAND_PRIMARY_LIGHT = '#FFB066'\nconst TEXT_PRIMARY = '#F3F4F6'\nconst TEXT_SECONDARY = '#9CA3AF'\nconst TEXT_TERTIARY = '#6B7280'\n\nconst SUCCESS = '#14B8A6'\nconst WARNING = '#FFB020'\nconst ERROR = '#D14343'\n\n/** Gradient stops for the 3px top accent: dark -> primary -> light (matches MesoCard). */\nconst ACCENT_STOPS = [BRAND_PRIMARY_DARK, BRAND_PRIMARY, BRAND_PRIMARY_LIGHT]\n\n/** Card surface gradient: surface-elevated -> near-black at 135deg. */\nconst CARD_GRADIENT =\n 'linear-gradient(135deg, #191919 0%, rgba(25,25,25,0.95) 100%)'\n\n/** Gauge track gradient (teal -> amber -> red) at 0.25 alpha. */\nconst GAUGE_GRADIENT =\n 'linear-gradient(90deg, rgba(20,184,166,0.25) 0%, rgba(255,176,32,0.25) 50%, rgba(209,67,67,0.25) 100%)'\n\nexport type MesoStatusBadgeVariant = 'success' | 'warning' | 'error'\n\nconst STATUS_VARIANTS: Record<\n MesoStatusBadgeVariant,\n { bg: string; border: string; text: string }\n> = {\n success: { bg: 'rgba(20,184,166,0.15)', border: 'rgba(20,184,166,0.3)', text: SUCCESS },\n warning: { bg: 'rgba(255,176,32,0.15)', border: 'rgba(255,176,32,0.3)', text: WARNING },\n error: { bg: 'rgba(209,67,67,0.15)', border: 'rgba(209,67,67,0.25)', text: ERROR },\n}\n\nexport interface MesoStatusBadge {\n /** Short status label, e.g. \"On Track\". */\n label: string\n /** Color treatment for the badge. */\n variant: MesoStatusBadgeVariant\n}\n\nexport interface MesoStatusMetric {\n /** Cell label, e.g. \"Prescribed\". */\n label: string\n /** Cell value, e.g. \"3×8 @ RPE 8\". */\n value: string\n}\n\nexport interface MesoStatusGauge {\n /** Gauge label, e.g. \"Intensity\". */\n label: string\n /** Fill position 0-1; the 14px marker sits at this level. */\n level: number\n /** Optional right-aligned sublabel, e.g. \"Prescribed\". */\n sublabel?: string\n}\n\nexport interface MesoStatusCoaching {\n /** Coaching recommendation copy. */\n text: string\n /** Substrings within `text` to render in bold. */\n highlights?: string[]\n}\n\nexport interface MesoStatusNextTarget {\n /** Leading glyph/emoji, e.g. \"→\" or \"🎯\". */\n icon: string\n /** Next-session target copy. */\n text: string\n}\n\nexport interface MesoStatusCardProps extends ViewProps {\n /** Mesocycle name, e.g. \"Hypertrophy Block\". */\n mesoName: string\n /** Context line, e.g. \"Week 6 of 8 · Upper/Lower\". */\n mesoSubtitle: string\n /** Status pill in the header. */\n statusBadge: MesoStatusBadge\n /** Prescription-vs-actual metrics rendered as a 2x2 grid. */\n metrics: MesoStatusMetric[]\n /** Intensity / volume gauges stacked vertically. */\n gauges: MesoStatusGauge[]\n /** Optional coaching recommendation box. */\n coaching?: MesoStatusCoaching\n /** Optional next-session target box. */\n nextTarget?: MesoStatusNextTarget\n className?: string\n}\n\nfunction clamp01(value: number): number {\n if (!Number.isFinite(value)) return 0\n if (value < 0) return 0\n if (value > 1) return 1\n return value\n}\n\n/** Marker fill color by gauge zone: teal 0-0.4, amber 0.4-0.7, red 0.7-1.0. */\nfunction getGaugeZoneColor(level: number): string {\n if (level >= 0.7) return ERROR\n if (level >= 0.4) return WARNING\n return SUCCESS\n}\n\n/** Splits `text` into nodes, bolding any segment that exactly matches a highlight. */\nfunction renderCoachingText(text: string, highlights?: string[]): ReactNode {\n if (!highlights || highlights.length === 0) return text\n const escaped = highlights\n .filter(Boolean)\n .map((h) => h.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n if (escaped.length === 0) return text\n const regex = new RegExp(`(${escaped.join('|')})`, 'g')\n return text.split(regex).map((part, index) =>\n highlights.includes(part) ? (\n <Text\n key={`${part}-${index}`}\n style={{ fontWeight: '700', color: TEXT_PRIMARY }}\n >\n {part}\n </Text>\n ) : (\n <Fragment key={`t-${index}`}>{part}</Fragment>\n ),\n )\n}\n\nfunction StatusPill({ badge }: { badge: MesoStatusBadge }) {\n const colors = STATUS_VARIANTS[badge.variant]\n return (\n <View\n className=\"flex-row items-center\"\n style={{\n gap: 5,\n paddingVertical: 3,\n paddingHorizontal: 8,\n borderRadius: 4,\n borderWidth: 1,\n backgroundColor: colors.bg,\n borderColor: colors.border,\n }}\n testID=\"meso-status-card-badge\"\n >\n <View accessibilityElementsHidden>\n <StatusDot variant={badge.variant} size=\"sm\" />\n </View>\n <Text\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '700',\n letterSpacing: 0.3,\n color: colors.text,\n }}\n >\n {badge.label}\n </Text>\n </View>\n )\n}\n\nfunction MetricCell({ metric }: { metric: MesoStatusMetric }) {\n return (\n <View style={{ width: '48%' }} testID=\"meso-status-card-metric\">\n <Text\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n letterSpacing: 0.5,\n textTransform: 'uppercase',\n color: TEXT_TERTIARY,\n }}\n >\n {metric.label}\n </Text>\n <Text\n style={{\n marginTop: 2,\n fontSize: 13,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n color: TEXT_PRIMARY,\n }}\n >\n {metric.value}\n </Text>\n </View>\n )\n}\n\nfunction Gauge({ gauge }: { gauge: MesoStatusGauge }) {\n const level = clamp01(gauge.level)\n const percentage = Math.round(level * 100)\n const markerColor = getGaugeZoneColor(level)\n return (\n <View\n style={{ gap: 6 }}\n accessibilityRole=\"progressbar\"\n accessibilityValue={{ min: 0, max: 100, now: percentage }}\n accessibilityLabel={`${gauge.label}: ${percentage}%`}\n aria-valuenow={percentage}\n aria-valuemin={0}\n aria-valuemax={100}\n testID=\"meso-status-card-gauge\"\n >\n <View\n className=\"flex-row items-center justify-between\"\n accessibilityElementsHidden\n >\n <Text\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '500',\n letterSpacing: 0.5,\n textTransform: 'uppercase',\n color: TEXT_SECONDARY,\n }}\n >\n {gauge.label}\n </Text>\n {gauge.sublabel != null && (\n <Text\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '500',\n color: TEXT_TERTIARY,\n }}\n >\n {gauge.sublabel}\n </Text>\n )}\n </View>\n\n <View\n style={\n {\n height: 8,\n borderRadius: 4,\n position: 'relative',\n backgroundImage: GAUGE_GRADIENT,\n } as ViewStyle\n }\n accessibilityElementsHidden\n >\n <View\n style={{\n position: 'absolute',\n left: '50%',\n top: 0,\n bottom: 0,\n width: 1,\n marginLeft: -0.5,\n backgroundColor: 'rgba(255,255,255,0.3)',\n }}\n testID=\"meso-status-card-gauge-center\"\n />\n <View\n style={{\n position: 'absolute',\n left: `${percentage}%`,\n top: -3,\n marginLeft: -7,\n width: 14,\n height: 14,\n borderRadius: 9999,\n borderWidth: 2,\n borderColor: TEXT_PRIMARY,\n backgroundColor: markerColor,\n boxShadow: '0 0 4px rgba(0,0,0,0.5)',\n }}\n testID=\"meso-status-card-gauge-marker\"\n />\n </View>\n </View>\n )\n}\n\n/**\n * Mesocycle context card for a specific exercise: prescription vs actual\n * metrics, intensity/volume gauges, and coaching guidance. Composes the titan\n * `Card` plus the Workout `StatusDot`, and renders the §25 gauge (8px track,\n * 50% center line, 14px marker) inline since that visual differs from the\n * IntensityBar/DeviationBar primitives.\n *\n * @example\n * <MesoStatusCard\n * mesoName=\"Hypertrophy Block\"\n * mesoSubtitle=\"Week 6 of 8 · Upper/Lower\"\n * statusBadge={{ label: 'On Track', variant: 'success' }}\n * metrics={[\n * { label: 'Prescribed', value: '3×8 @ RPE 8' },\n * { label: 'Actual', value: '3×8 @ 185 lbs' },\n * ]}\n * gauges={[{ label: 'Intensity', level: 0.7, sublabel: 'Actual' }]}\n * coaching={{ text: 'Add load next session.', highlights: ['Add load'] }}\n * nextTarget={{ icon: '→', text: '190 lbs × 8' }}\n * />\n */\nexport function MesoStatusCard({\n mesoName,\n mesoSubtitle,\n statusBadge,\n metrics,\n gauges,\n coaching,\n nextTarget,\n className,\n ...props\n}: MesoStatusCardProps) {\n return (\n <Card\n variant=\"outline\"\n elevation={1}\n borderColor={BRAND_PRIMARY_DARK}\n className={className}\n style={\n {\n borderColor: BRAND_PRIMARY_DARK,\n borderWidth: 1,\n backgroundImage: CARD_GRADIENT,\n } as ViewStyle\n }\n role=\"article\"\n aria-label={`Mesocycle status for ${mesoName}`}\n testID=\"meso-status-card\"\n {...props}\n >\n <View\n className=\"flex-row\"\n style={{ position: 'absolute', top: 0, left: 0, right: 0, height: 3, zIndex: 1 }}\n accessibilityElementsHidden\n testID=\"meso-status-card-accent\"\n >\n {ACCENT_STOPS.map((color) => (\n <View key={color} style={{ flex: 1, backgroundColor: color }} />\n ))}\n </View>\n\n <View style={{ padding: 14, gap: 14 }} testID=\"meso-status-card-body\">\n <View testID=\"meso-status-card-header\">\n <View\n className=\"flex-row items-center justify-between\"\n style={{ gap: 8 }}\n >\n <Text\n style={{\n flexShrink: 1,\n fontSize: 15,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: TEXT_PRIMARY,\n }}\n testID=\"meso-status-card-name\"\n >\n {mesoName}\n </Text>\n <StatusPill badge={statusBadge} />\n </View>\n <Text\n style={{\n marginTop: 4,\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n color: TEXT_SECONDARY,\n }}\n testID=\"meso-status-card-subtitle\"\n >\n {mesoSubtitle}\n </Text>\n </View>\n\n {metrics.length > 0 && (\n <View\n className=\"flex-row flex-wrap\"\n style={{ gap: 8 }}\n testID=\"meso-status-card-metrics\"\n >\n {metrics.map((metric, index) => (\n <MetricCell key={`${metric.label}-${index}`} metric={metric} />\n ))}\n </View>\n )}\n\n {gauges.length > 0 && (\n <View style={{ gap: 12 }} testID=\"meso-status-card-gauges\">\n {gauges.map((gauge, index) => (\n <Gauge key={`${gauge.label}-${index}`} gauge={gauge} />\n ))}\n </View>\n )}\n\n {coaching != null && (\n <View\n style={{\n backgroundColor: 'rgba(255,176,32,0.06)',\n borderWidth: 1,\n borderColor: 'rgba(255,176,32,0.15)',\n borderRadius: 8,\n paddingVertical: 10,\n paddingHorizontal: 12,\n }}\n testID=\"meso-status-card-coaching\"\n >\n <Text\n style={{\n fontSize: 12,\n lineHeight: 17,\n fontFamily: 'Inter, sans-serif',\n color: TEXT_SECONDARY,\n }}\n >\n {renderCoachingText(coaching.text, coaching.highlights)}\n </Text>\n </View>\n )}\n\n {nextTarget != null && (\n <View\n className=\"flex-row items-center\"\n style={{\n gap: 8,\n backgroundColor: 'rgba(20,184,166,0.06)',\n borderWidth: 1,\n borderColor: 'rgba(20,184,166,0.2)',\n borderRadius: 8,\n paddingVertical: 10,\n paddingHorizontal: 12,\n }}\n testID=\"meso-status-card-next-target\"\n >\n <Text style={{ fontSize: 14, color: SUCCESS }} accessibilityElementsHidden>\n {nextTarget.icon}\n </Text>\n <Text\n style={{\n flexShrink: 1,\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n color: SUCCESS,\n }}\n >\n {nextTarget.text}\n </Text>\n </View>\n )}\n </View>\n </Card>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useMemo, useState } from 'react'\nimport { View, Text, Pressable, Animated, Easing, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nconst BRAND_PRIMARY = '#FF7900'\nconst TEXT_PRIMARY = '#F3F4F6'\nconst TEXT_SECONDARY = '#9CA3AF'\nconst TEXT_TERTIARY = '#6B7280'\nconst BORDER_STRONG = '#2C2C2C'\nconst STATUS_SUCCESS = '#14B8A6'\nconst STATUS_ERROR = '#D14343'\nconst STATUS_WARNING = '#FFB020'\nconst GRID_LINE = 'rgba(255,255,255,0.06)'\nconst TOOLTIP_BG = 'rgba(28,28,28,0.95)'\nconst SUCCESS_PILL_BG = 'rgba(20,184,166,0.10)'\nconst SUCCESS_PILL_BORDER = 'rgba(20,184,166,0.20)'\nconst ERROR_PILL_BG = 'rgba(209,67,67,0.10)'\nconst ERROR_PILL_BORDER = 'rgba(209,67,67,0.20)'\n\n/** Left gutter reserved for y-axis value labels. */\nconst PLOT_LEFT = 26\n/** Approximate tooltip width used for edge clamping. */\nconst TOOLTIP_WIDTH = 124\n\nexport interface StrengthTrendDataPoint {\n /** ISO date string for the session. */\n date: string\n /** Estimated one-rep max in the chart's unit. */\n e1rm: number\n /** Marks a personal-record session (rendered with a star). */\n isPR?: boolean\n /** Optional human label shown in the tooltip instead of the raw date. */\n sessionLabel?: string\n}\n\nexport interface StrengthTrendChartMesoBoundary {\n /** ISO date where the mesocycle boundary falls. */\n date: string\n /** Short label, e.g. \"Hypertrophy\". */\n label: string\n}\n\nexport interface StrengthTrendChartProps extends ViewProps {\n /** Actual e1RM data points, chronological. */\n data: StrengthTrendDataPoint[]\n /** Projected/planned e1RM trajectory, drawn as a dashed line. */\n projection?: StrengthTrendDataPoint[]\n /** Chart plot width in pixels. */\n width: number\n /** Chart plot height in pixels (120-160 for the compact variant). */\n height: number\n /** Mesocycle boundary markers (vertical guides + labels). */\n mesoBoundaries?: StrengthTrendChartMesoBoundary[]\n /** Called when an actual data point is tapped. */\n onPointPress?: (point: StrengthTrendDataPoint) => void\n /** Unit for display and labels. */\n unit: 'lbs' | 'kg'\n /** Animate the left-to-right line draw on mount (default true). */\n animateOnMount?: boolean\n className?: string\n}\n\ninterface Coord {\n x: number\n y: number\n point: StrengthTrendDataPoint\n index: number\n}\n\ninterface Geometry {\n hasData: boolean\n toX: (time: number) => number\n toY: (value: number) => number\n actual: Coord[]\n projection: Coord[]\n gridLines: Array<{ y: number; label: string }>\n boundaries: Array<{ x: number; label: string }>\n}\n\nfunction timeOf(dateStr: string): number {\n const t = Date.parse(dateStr)\n return Number.isNaN(t) ? 0 : t\n}\n\nfunction formatValue(value: number): string {\n return `${Math.round(value)}`\n}\n\nfunction buildGeometry(\n data: StrengthTrendDataPoint[],\n projection: StrengthTrendDataPoint[],\n boundaries: StrengthTrendChartMesoBoundary[],\n width: number,\n height: number,\n): Geometry {\n const values = [...data, ...projection].map((p) => p.e1rm)\n // Empty state keys off actual data only: a projection with no measured\n // sessions still shows the placeholder rather than a \"Current: 0\" chart.\n if (data.length === 0) {\n return {\n hasData: false,\n toX: () => 0,\n toY: () => 0,\n actual: [],\n projection: [],\n gridLines: [],\n boundaries: [],\n }\n }\n\n const times = [\n ...data.map((p) => timeOf(p.date)),\n ...projection.map((p) => timeOf(p.date)),\n ...boundaries.map((b) => timeOf(b.date)),\n ]\n const tMin = Math.min(...times)\n const tMaxRaw = Math.max(...times)\n const tMax = tMaxRaw === tMin ? tMin + 1 : tMaxRaw\n\n const yMin = Math.min(...values)\n const yMax = Math.max(...values)\n const range = yMax - yMin || Math.max(1, yMax * 0.1)\n const padV = range * 0.15\n const domainMin = yMin - padV\n const domainMax = yMax + padV\n\n const innerW = Math.max(1, width - PLOT_LEFT)\n const toX = (time: number) =>\n PLOT_LEFT + ((time - tMin) / (tMax - tMin)) * innerW\n const toY = (value: number) =>\n height - ((value - domainMin) / (domainMax - domainMin)) * height\n\n const project = (points: StrengthTrendDataPoint[]): Coord[] =>\n points.map((point, index) => ({\n x: toX(timeOf(point.date)),\n y: toY(point.e1rm),\n point,\n index,\n }))\n\n const tickValues = Array.from(\n new Set([yMax, (yMin + yMax) / 2, yMin].map((v) => Math.round(v))),\n )\n const gridLines = tickValues.map((v) => ({ y: toY(v), label: formatValue(v) }))\n\n return {\n hasData: true,\n toX,\n toY,\n actual: project(data),\n projection: project(projection),\n gridLines,\n boundaries: boundaries.map((b) => ({\n x: toX(timeOf(b.date)),\n label: b.label,\n })),\n }\n}\n\nfunction computeTrend(\n data: StrengthTrendDataPoint[],\n boundaries: StrengthTrendChartMesoBoundary[],\n): { percent: number; positive: boolean } {\n if (data.length < 2) return { percent: 0, positive: true }\n let series = data\n if (boundaries.length > 0) {\n const lastBoundary = Math.max(...boundaries.map((b) => timeOf(b.date)))\n const filtered = data.filter((p) => timeOf(p.date) >= lastBoundary)\n // The pill is labelled \"this meso\"; if the current meso has <2 points\n // there is no meso trend to show — stay neutral rather than silently\n // reporting the whole-series change under a \"this meso\" label.\n if (filtered.length < 2) return { percent: 0, positive: true }\n series = filtered\n }\n const first = series[0].e1rm\n const last = series[series.length - 1].e1rm\n const percent = first ? ((last - first) / first) * 100 : 0\n return { percent, positive: percent >= 0 }\n}\n\nfunction ChartLine({\n coords,\n color,\n strokeWidth,\n dashed,\n testID,\n}: {\n coords: Coord[]\n color: string\n strokeWidth: number\n dashed?: boolean\n testID: string\n}) {\n return (\n <>\n {coords.map((c, i) => {\n if (i === 0) return null\n const prev = coords[i - 1]\n const dx = c.x - prev.x\n const dy = c.y - prev.y\n const length = Math.sqrt(dx * dx + dy * dy)\n const angle = Math.atan2(dy, dx) * (180 / Math.PI)\n return (\n <View\n key={`${testID}-${i}`}\n testID={testID}\n accessibilityElementsHidden\n style={[\n {\n position: 'absolute',\n left: prev.x,\n top: prev.y,\n width: length,\n transformOrigin: '0 0',\n transform: [{ rotate: `${angle}deg` }],\n },\n dashed\n ? {\n height: 0,\n borderTopWidth: strokeWidth,\n borderStyle: 'dashed',\n borderTopColor: color,\n }\n : {\n height: strokeWidth,\n borderRadius: strokeWidth / 2,\n backgroundColor: color,\n },\n ]}\n />\n )\n })}\n </>\n )\n}\n\n/**\n * Estimated-1RM line chart over time with an optional dashed plan-projection\n * line and PR star markers. Rendered entirely with absolutely-positioned\n * Views (no SVG), following the Sparkline approach. Tapping an actual point\n * opens a tooltip and fires `onPointPress`. A trend pill below the chart\n * summarizes the percentage change for the current mesocycle.\n *\n * @example\n * <StrengthTrendChart\n * data={[{ date: '2026-01-01', e1rm: 225 }, { date: '2026-02-01', e1rm: 245, isPR: true }]}\n * projection={[{ date: '2026-02-01', e1rm: 245 }, { date: '2026-03-01', e1rm: 260 }]}\n * width={320}\n * height={150}\n * unit=\"lbs\"\n * />\n */\nexport function StrengthTrendChart({\n data,\n projection = [],\n width,\n height,\n mesoBoundaries = [],\n onPointPress,\n unit,\n animateOnMount = true,\n className,\n ...props\n}: StrengthTrendChartProps) {\n const geometry = useMemo(\n () => buildGeometry(data, projection, mesoBoundaries, width, height),\n [data, projection, mesoBoundaries, width, height],\n )\n const trend = useMemo(\n () => computeTrend(data, mesoBoundaries),\n [data, mesoBoundaries],\n )\n\n const [reveal] = useState(() => new Animated.Value(animateOnMount ? 0 : 1))\n const [selected, setSelected] = useState<number | null>(null)\n\n useEffect(() => {\n if (!animateOnMount) return\n const animation = Animated.timing(reveal, {\n toValue: 1,\n duration: 600,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n })\n animation.start()\n return () => animation.stop()\n }, [animateOnMount, reveal])\n\n const current = data.length > 0 ? data[data.length - 1].e1rm : 0\n const trendSign = trend.percent >= 0 ? '+' : '-'\n const trendText = `${trendSign}${Math.abs(trend.percent).toFixed(1)}% this meso`\n const ariaLabel = geometry.hasData\n ? `Strength trend chart showing estimated one rep max over time. Current: ${formatValue(current)} ${unit}. Trend: ${trendSign}${Math.abs(trend.percent).toFixed(1)}%`\n : 'Strength trend chart, no data'\n\n if (!geometry.hasData) {\n return (\n <View\n style={{ width }}\n className={cn(className)}\n accessibilityRole=\"image\"\n accessibilityLabel={ariaLabel}\n testID=\"strength-trend-chart-empty\"\n {...props}\n >\n <View\n style={{\n width,\n height,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Text style={{ fontSize: 12, fontFamily: 'Inter, sans-serif', color: TEXT_TERTIARY }}>\n No strength data yet\n </Text>\n </View>\n </View>\n )\n }\n\n const revealWidth = reveal.interpolate({\n inputRange: [0, 1],\n outputRange: [0, width],\n })\n\n const selectedCoord =\n selected != null ? geometry.actual[selected] : undefined\n\n return (\n <View\n style={{ width }}\n className={cn(className)}\n testID=\"strength-trend-chart\"\n {...props}\n >\n <View style={{ width, height, position: 'relative' }}>\n {/* Labelled, non-interactive chart canvas (grid + lines + markers). */}\n <View\n style={{ position: 'absolute', top: 0, left: 0, width, height }}\n accessibilityRole=\"image\"\n accessibilityLabel={ariaLabel}\n testID=\"strength-trend-chart-canvas\"\n >\n {geometry.gridLines.map((line, i) => (\n <View\n key={`grid-${i}`}\n accessibilityElementsHidden\n testID=\"strength-trend-chart-gridline\"\n style={{\n position: 'absolute',\n left: PLOT_LEFT,\n right: 0,\n top: line.y,\n height: 1,\n backgroundColor: GRID_LINE,\n }}\n >\n <Text\n style={{\n position: 'absolute',\n left: -PLOT_LEFT,\n top: -6,\n width: PLOT_LEFT - 4,\n textAlign: 'right',\n fontSize: 9,\n fontFamily: 'Inter, sans-serif',\n color: TEXT_TERTIARY,\n }}\n >\n {line.label}\n </Text>\n </View>\n ))}\n\n {geometry.boundaries.map((boundary, i) => (\n <View\n key={`boundary-${i}`}\n accessibilityElementsHidden\n testID=\"strength-trend-chart-meso-boundary\"\n style={{\n position: 'absolute',\n left: boundary.x,\n top: 0,\n width: 0,\n height,\n borderLeftWidth: 1,\n borderStyle: 'dashed',\n borderLeftColor: 'rgba(255,255,255,0.10)',\n }}\n />\n ))}\n\n <Animated.View\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: revealWidth,\n height,\n overflow: 'hidden',\n }}\n testID=\"strength-trend-chart-reveal\"\n >\n <View style={{ width, height, position: 'absolute', top: 0, left: 0 }}>\n <ChartLine\n coords={geometry.projection}\n color={TEXT_TERTIARY}\n strokeWidth={2}\n dashed\n testID=\"strength-trend-chart-projection-segment\"\n />\n <ChartLine\n coords={geometry.actual}\n color={BRAND_PRIMARY}\n strokeWidth={2.5}\n testID=\"strength-trend-chart-actual-segment\"\n />\n </View>\n </Animated.View>\n\n {geometry.actual.map((c) =>\n c.point.isPR ? (\n <Text\n key={`star-${c.index}`}\n accessibilityElementsHidden\n testID=\"strength-trend-chart-pr-star\"\n style={{\n position: 'absolute',\n left: c.x - 7,\n top: c.y - 20,\n fontSize: 12,\n color: STATUS_WARNING,\n }}\n >\n ★\n </Text>\n ) : null,\n )}\n </View>\n\n {/* Interactive point overlay (kept out of the image-role canvas). */}\n <View\n style={{ position: 'absolute', top: 0, left: 0, width, height }}\n testID=\"strength-trend-chart-points\"\n >\n {geometry.actual.map((c) => {\n const label = c.point.sessionLabel ?? c.point.date\n return (\n <Pressable\n key={`point-${c.index}`}\n testID=\"strength-trend-chart-point\"\n accessibilityRole=\"button\"\n accessibilityLabel={`${label}: ${formatValue(c.point.e1rm)} ${unit}${c.point.isPR ? ', personal record' : ''}`}\n onPress={() => {\n setSelected(c.index)\n onPointPress?.(c.point)\n }}\n style={{\n position: 'absolute',\n left: c.x - 4,\n top: c.y - 4,\n width: 8,\n height: 8,\n borderRadius: 1,\n backgroundColor: BRAND_PRIMARY,\n }}\n />\n )\n })}\n </View>\n\n {selectedCoord && (\n <View\n testID=\"strength-trend-chart-tooltip\"\n accessibilityElementsHidden\n style={{\n position: 'absolute',\n left: Math.max(\n 0,\n Math.min(width - TOOLTIP_WIDTH, selectedCoord.x - TOOLTIP_WIDTH / 2),\n ),\n top: Math.max(0, selectedCoord.y - 52),\n maxWidth: TOOLTIP_WIDTH,\n backgroundColor: TOOLTIP_BG,\n borderWidth: 1,\n borderColor: BORDER_STRONG,\n borderRadius: 8,\n paddingVertical: 8,\n paddingHorizontal: 10,\n }}\n >\n <Text\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n color: TEXT_TERTIARY,\n }}\n >\n {selectedCoord.point.sessionLabel ?? selectedCoord.point.date}\n </Text>\n <Text\n style={{\n marginTop: 2,\n fontSize: 13,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '700',\n color: TEXT_PRIMARY,\n }}\n >\n {`${formatValue(selectedCoord.point.e1rm)} ${unit}`}\n </Text>\n {selected != null && selected > 0 && (\n <Text\n style={{\n marginTop: 1,\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n color:\n selectedCoord.point.e1rm - geometry.actual[selected - 1].point.e1rm >= 0\n ? STATUS_SUCCESS\n : STATUS_ERROR,\n }}\n >\n {`${\n selectedCoord.point.e1rm - geometry.actual[selected - 1].point.e1rm >= 0\n ? '+'\n : '-'\n }${Math.abs(\n selectedCoord.point.e1rm - geometry.actual[selected - 1].point.e1rm,\n ).toFixed(1)} ${unit}`}\n </Text>\n )}\n </View>\n )}\n </View>\n\n {/* Meso boundary x-axis labels. */}\n {geometry.boundaries.length > 0 && (\n <View\n style={{ width, height: 14, position: 'relative', marginTop: 2 }}\n accessibilityElementsHidden\n testID=\"strength-trend-chart-axis\"\n >\n {geometry.boundaries.map((boundary, i) => (\n <Text\n key={`axis-${i}`}\n testID=\"strength-trend-chart-axis-label\"\n style={{\n position: 'absolute',\n left: boundary.x - 24,\n width: 48,\n textAlign: 'center',\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n color: TEXT_TERTIARY,\n }}\n >\n {boundary.label}\n </Text>\n ))}\n </View>\n )}\n\n {/* Trend pill. */}\n <View className=\"flex-row\" style={{ marginTop: 8 }}>\n <View\n testID=\"strength-trend-chart-trend-pill\"\n accessibilityLabel={`Strength trend: ${trendText}`}\n style={{\n paddingVertical: 3,\n paddingHorizontal: 8,\n borderRadius: 4,\n borderWidth: 1,\n backgroundColor: trend.positive ? SUCCESS_PILL_BG : ERROR_PILL_BG,\n borderColor: trend.positive ? SUCCESS_PILL_BORDER : ERROR_PILL_BORDER,\n }}\n >\n <Text\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n color: trend.positive ? STATUS_SUCCESS : STATUS_ERROR,\n }}\n >\n {trendText}\n </Text>\n </View>\n </View>\n\n {/* Legend. */}\n <View\n className=\"flex-row items-center\"\n style={{ marginTop: 8, gap: 14 }}\n testID=\"strength-trend-chart-legend\"\n >\n <View className=\"flex-row items-center\" style={{ gap: 5 }}>\n <View style={{ width: 14, height: 2.5, borderRadius: 1.5, backgroundColor: BRAND_PRIMARY }} />\n <Text style={{ fontSize: 10, fontFamily: 'Inter, sans-serif', color: TEXT_SECONDARY }}>\n Actual\n </Text>\n </View>\n <View className=\"flex-row items-center\" style={{ gap: 5 }}>\n <View\n style={{\n width: 14,\n height: 0,\n borderTopWidth: 2,\n borderStyle: 'dashed',\n borderTopColor: TEXT_TERTIARY,\n }}\n />\n <Text style={{ fontSize: 10, fontFamily: 'Inter, sans-serif', color: TEXT_SECONDARY }}>\n Projected\n </Text>\n </View>\n <View className=\"flex-row items-center\" style={{ gap: 5 }}>\n <Text style={{ fontSize: 12, color: STATUS_WARNING }}>★</Text>\n <Text style={{ fontSize: 10, fontFamily: 'Inter, sans-serif', color: TEXT_SECONDARY }}>\n PR\n </Text>\n </View>\n </View>\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState, useMemo } from 'react'\nimport { View, Text, Pressable, Animated, Easing, type ViewProps } from 'react-native'\n\nconst STATUS_SUCCESS = '#14B8A6'\nconst STATUS_WARNING = '#FFB020'\nconst STATUS_INFO = '#2196F3'\n/** Dot outline: near-white ring so load dots read on the band fill and any\n * surface (matches the MesoStatusCard gauge-marker convention). */\nconst DOT_BORDER = '#F3F4F6'\nconst TEXT_TERTIARY = '#6B7280'\nconst BAND_FILL = 'rgba(20,184,166,0.1)'\nconst BAND_EDGE = 'rgba(20,184,166,0.45)'\nconst PROJECTION_FILL = 'rgba(20,184,166,0.05)'\n\nconst PADDING_LEFT = 28\nconst PADDING_RIGHT = 10\nconst PADDING_TOP = 8\nconst PADDING_BOTTOM = 16\nconst COLUMN_STEP = 4\nconst DOT_SIZE = 8\n\nexport type WorkoutDotStatus = 'within' | 'above' | 'below'\n\nexport interface CapacityBandDataPoint {\n /** ISO-ish date string (e.g. \"2026-06-01\"). */\n date: string\n /** Lower bound of the capacity band (MEV equivalent). */\n bandLow: number\n /** Upper bound of the capacity band (MRV equivalent). */\n bandHigh: number\n}\n\nexport interface WorkoutDot {\n date: string\n /** Actual session load score. */\n load: number\n /** Position of the session relative to the band. */\n status: WorkoutDotStatus\n}\n\nexport interface CapacityBandProjection {\n /** Band shape over the next days if training continues (rises). */\n withTraining: CapacityBandDataPoint[]\n /** Band shape over the next days if resting (drops). */\n withRest: CapacityBandDataPoint[]\n}\n\nexport interface CapacityBandChartProps extends ViewProps {\n /** Capacity band shape over time. */\n band: CapacityBandDataPoint[]\n /** Workout sessions plotted as dots. */\n workouts: WorkoutDot[]\n /** Optional forward projection (next few days). */\n projection?: CapacityBandProjection\n /** Chart width in px. */\n width: number\n /** Chart height in px. */\n height: number\n /** Called when a workout dot is tapped. */\n onWorkoutPress?: (workout: WorkoutDot) => void\n className?: string\n}\n\ninterface PixelPoint {\n x: number\n yHigh: number\n yLow: number\n}\n\nconst DOT_COLORS: Record<WorkoutDotStatus, string> = {\n within: STATUS_SUCCESS,\n above: STATUS_WARNING,\n below: STATUS_INFO,\n}\n\nconst STATUS_PHRASES: Record<WorkoutDotStatus, string> = {\n within: 'within range',\n above: 'above range',\n below: 'below range',\n}\n\nfunction parseTime(date: string): number {\n const parts = date.split('-')\n if (parts.length === 3) {\n return Date.UTC(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2]))\n }\n const parsed = Date.parse(date)\n return Number.isNaN(parsed) ? 0 : parsed\n}\n\nfunction formatDate(date: string): string {\n const parts = date.split('-')\n if (parts.length === 3) return `${Number(parts[1])}/${Number(parts[2])}`\n const d = new Date(date)\n return Number.isNaN(d.getTime()) ? date : `${d.getMonth() + 1}/${d.getDate()}`\n}\n\nfunction toPixels(\n points: CapacityBandDataPoint[],\n toX: (date: string) => number,\n toY: (value: number) => number,\n): PixelPoint[] {\n return points\n .map((p) => ({ x: toX(p.date), yHigh: toY(p.bandHigh), yLow: toY(p.bandLow) }))\n .sort((a, b) => a.x - b.x)\n}\n\nfunction interpEdge(pixels: PixelPoint[], x: number, key: 'yHigh' | 'yLow'): number {\n for (let i = 0; i < pixels.length - 1; i++) {\n const a = pixels[i]\n const b = pixels[i + 1]\n if (x >= a.x && x <= b.x) {\n const t = b.x === a.x ? 0 : (x - a.x) / (b.x - a.x)\n return a[key] + t * (b[key] - a[key])\n }\n }\n return pixels[pixels.length - 1][key]\n}\n\nfunction buildColumns(pixels: PixelPoint[], step: number) {\n if (pixels.length < 2) return []\n const start = pixels[0].x\n const end = pixels[pixels.length - 1].x\n const columns: Array<{ x: number; top: number; height: number }> = []\n for (let x = start; x < end; x += step) {\n const top = interpEdge(pixels, x, 'yHigh')\n const bottom = interpEdge(pixels, x, 'yLow')\n columns.push({ x, top, height: Math.max(0, bottom - top) })\n }\n return columns\n}\n\nfunction buildEdges(pixels: PixelPoint[], key: 'yHigh' | 'yLow') {\n const segments: Array<{ left: number; top: number; length: number; angle: number }> = []\n for (let i = 1; i < pixels.length; i++) {\n const a = pixels[i - 1]\n const b = pixels[i]\n const dx = b.x - a.x\n const dy = b[key] - a[key]\n segments.push({\n left: a.x,\n top: a[key],\n length: Math.sqrt(dx * dx + dy * dy),\n angle: Math.atan2(dy, dx) * (180 / Math.PI),\n })\n }\n return segments\n}\n\nfunction collectValues(\n band: CapacityBandDataPoint[],\n workouts: WorkoutDot[],\n projection?: CapacityBandProjection,\n): number[] {\n const values: number[] = []\n band.forEach((p) => values.push(p.bandLow, p.bandHigh))\n workouts.forEach((w) => values.push(w.load))\n projection?.withTraining.forEach((p) => values.push(p.bandLow, p.bandHigh))\n projection?.withRest.forEach((p) => values.push(p.bandLow, p.bandHigh))\n return values\n}\n\nfunction currentStatus(workouts: WorkoutDot[]): string {\n if (workouts.length === 0) return 'no recent sessions'\n const latest = [...workouts].sort((a, b) => parseTime(b.date) - parseTime(a.date))[0]\n return STATUS_PHRASES[latest.status]\n}\n\n/**\n * Gentler-Streak-inspired fatigue visualization. Renders a shaded capacity\n * band (between a rolling MEV/MRV estimate), workout sessions as colored dots\n * positioned by load, and an optional dashed forward projection that diverges\n * for \"keep training\" (rises) versus \"rest\" (drops). View-based, no SVG:\n * the band fill is a run of vertical columns and the edges/projection are\n * rotated line Views (same technique as Sparkline).\n *\n * @example\n * <CapacityBandChart\n * band={band}\n * workouts={workouts}\n * projection={{ withTraining, withRest }}\n * width={320}\n * height={180}\n * onWorkoutPress={(w) => openSession(w)}\n * />\n */\nexport function CapacityBandChart({\n band,\n workouts,\n projection,\n width,\n height,\n onWorkoutPress,\n className,\n ...props\n}: CapacityBandChartProps) {\n const [reveal] = useState(() => new Animated.Value(0))\n const dotAnims = useMemo(\n () => Array.from({ length: workouts.length }, () => new Animated.Value(0)),\n [workouts.length],\n )\n\n useEffect(() => {\n reveal.setValue(0)\n dotAnims.forEach((a) => a.setValue(0))\n const draw = Animated.timing(reveal, {\n toValue: 1,\n duration: 800,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n })\n const pops = dotAnims.map((a) =>\n Animated.timing(a, {\n toValue: 1,\n duration: 200,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n }),\n )\n const animation = Animated.sequence([draw, Animated.stagger(200, pops)])\n animation.start()\n return () => animation.stop()\n }, [reveal, dotAnims, band.length, workouts.length])\n\n const plotWidth = width - PADDING_LEFT - PADDING_RIGHT\n const plotHeight = height - PADDING_TOP - PADDING_BOTTOM\n\n const scale = useMemo(() => {\n const times = band.map((p) => parseTime(p.date))\n projection?.withTraining.forEach((p) => times.push(parseTime(p.date)))\n projection?.withRest.forEach((p) => times.push(parseTime(p.date)))\n const minT = times.length ? Math.min(...times) : 0\n const maxT = times.length ? Math.max(...times) : 1\n const tRange = maxT - minT || 1\n\n const values = collectValues(band, workouts, projection)\n const minV = values.length ? Math.min(...values) : 0\n const maxV = values.length ? Math.max(...values) : 1\n const pad = (maxV - minV) * 0.1 || 1\n const domainMin = minV - pad\n const domainMax = maxV + pad\n const vRange = domainMax - domainMin || 1\n\n const toX = (date: string) =>\n PADDING_LEFT + ((parseTime(date) - minT) / tRange) * plotWidth\n const toY = (value: number) =>\n PADDING_TOP + (1 - (value - domainMin) / vRange) * plotHeight\n return { toX, toY }\n }, [band, workouts, projection, plotWidth, plotHeight])\n\n if (band.length === 0) {\n return (\n <View\n style={{ width, height }}\n className={className}\n accessibilityRole=\"image\"\n accessibilityLabel=\"Training capacity band chart, no data\"\n testID=\"capacity-band-chart-empty\"\n {...props}\n />\n )\n }\n\n const { toX, toY } = scale\n const bandPixels = toPixels(band, toX, toY)\n const columns = buildColumns(bandPixels, COLUMN_STEP)\n const topEdge = buildEdges(bandPixels, 'yHigh')\n const bottomEdge = buildEdges(bandPixels, 'yLow')\n\n const lastBandPoint = band[band.length - 1]\n const trainingPixels = projection\n ? toPixels([lastBandPoint, ...projection.withTraining], toX, toY)\n : []\n const restPixels = projection\n ? toPixels([lastBandPoint, ...projection.withRest], toX, toY)\n : []\n\n const labelStride = Math.max(1, Math.ceil(band.length / 5))\n const revealWidth = reveal.interpolate({ inputRange: [0, 1], outputRange: [0, width] })\n\n const renderColumns = (cols: ReturnType<typeof buildColumns>, color: string, key: string) =>\n cols.map((col, i) => (\n <View\n key={`${key}-${i}`}\n style={{\n position: 'absolute',\n left: col.x,\n top: col.top,\n width: COLUMN_STEP + 0.5,\n height: col.height,\n backgroundColor: color,\n }}\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n testID={key}\n />\n ))\n\n const renderEdges = (\n segments: ReturnType<typeof buildEdges>,\n color: string,\n dashed: boolean,\n key: string,\n ) =>\n segments.map((seg, i) => (\n <View\n key={`${key}-${i}`}\n style={{\n position: 'absolute',\n left: seg.left,\n top: seg.top,\n width: seg.length,\n height: dashed ? 0 : 1.5,\n borderTopWidth: dashed ? 1 : 0,\n borderTopColor: dashed ? color : undefined,\n borderStyle: dashed ? 'dashed' : 'solid',\n backgroundColor: dashed ? undefined : color,\n opacity: dashed ? 0.7 : 1,\n transformOrigin: '0 0',\n transform: [{ rotate: `${seg.angle}deg` }],\n }}\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n testID={key}\n />\n ))\n\n return (\n <View\n style={{ width, height, position: 'relative' }}\n className={className}\n testID=\"capacity-band-chart-root\"\n {...props}\n >\n {/* Static visual layer carries the image role; interactive dots live as\n siblings so the image role has no focusable descendants. */}\n <View\n style={{ position: 'absolute', top: 0, left: 0, width, height }}\n accessibilityRole=\"image\"\n accessibilityLabel={`Training capacity band chart. Current capacity: ${currentStatus(\n workouts,\n )}. ${workouts.length} workout${workouts.length === 1 ? '' : 's'} shown.`}\n testID=\"capacity-band-chart\"\n >\n {/* Band + projection draw left-to-right via an animated clip. */}\n <Animated.View\n style={{ position: 'absolute', top: 0, left: 0, height, width: revealWidth, overflow: 'hidden' }}\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n testID=\"capacity-band-chart-reveal\"\n >\n <View style={{ width, height, position: 'relative' }}>\n {projection && (\n <View testID=\"capacity-band-chart-projection\">\n {renderColumns(buildColumns(trainingPixels, COLUMN_STEP), PROJECTION_FILL, 'capacity-band-chart-projection-fill')}\n {renderColumns(buildColumns(restPixels, COLUMN_STEP), PROJECTION_FILL, 'capacity-band-chart-projection-fill')}\n {renderEdges(buildEdges(trainingPixels, 'yHigh'), STATUS_SUCCESS, true, 'capacity-band-chart-projection-training')}\n {renderEdges(buildEdges(trainingPixels, 'yLow'), STATUS_SUCCESS, true, 'capacity-band-chart-projection-training')}\n {renderEdges(buildEdges(restPixels, 'yHigh'), STATUS_INFO, true, 'capacity-band-chart-projection-rest')}\n {renderEdges(buildEdges(restPixels, 'yLow'), STATUS_INFO, true, 'capacity-band-chart-projection-rest')}\n <Text\n style={{\n position: 'absolute',\n left: trainingPixels[trainingPixels.length - 1]?.x + 2,\n top: trainingPixels[trainingPixels.length - 1]?.yHigh - 12,\n fontSize: 9,\n fontFamily: 'Inter, sans-serif',\n color: STATUS_SUCCESS,\n }}\n testID=\"capacity-band-chart-projection-training-label\"\n >\n Training\n </Text>\n <Text\n style={{\n position: 'absolute',\n left: restPixels[restPixels.length - 1]?.x + 2,\n top: restPixels[restPixels.length - 1]?.yLow + 2,\n fontSize: 9,\n fontFamily: 'Inter, sans-serif',\n color: STATUS_INFO,\n }}\n testID=\"capacity-band-chart-projection-rest-label\"\n >\n Rest\n </Text>\n </View>\n )}\n\n <View testID=\"capacity-band-chart-band\">\n {renderColumns(columns, BAND_FILL, 'capacity-band-chart-band-cell')}\n </View>\n {renderEdges(topEdge, BAND_EDGE, false, 'capacity-band-chart-edge-top')}\n {renderEdges(bottomEdge, BAND_EDGE, false, 'capacity-band-chart-edge-bottom')}\n </View>\n </Animated.View>\n\n {/* Y axis conceptual label (no numbers). */}\n <Text\n style={{\n position: 'absolute',\n left: PADDING_LEFT / 2 - 14,\n top: PADDING_TOP + plotHeight / 2 - 7,\n width: 32,\n textAlign: 'center',\n fontSize: 9,\n fontFamily: 'Inter, sans-serif',\n color: TEXT_TERTIARY,\n transform: [{ rotate: '-90deg' }],\n }}\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n testID=\"capacity-band-chart-y-axis-label\"\n >\n Load\n </Text>\n\n {/* X axis date labels (subset to avoid overlap). */}\n {band.map((point, i) => {\n if (i % labelStride !== 0 && i !== band.length - 1) return null\n return (\n <Text\n key={`x-${point.date}`}\n style={{\n position: 'absolute',\n left: toX(point.date) - 14,\n top: height - PADDING_BOTTOM + 2,\n width: 28,\n textAlign: 'center',\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n color: TEXT_TERTIARY,\n }}\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n testID=\"capacity-band-chart-x-label\"\n >\n {formatDate(point.date)}\n </Text>\n )\n })}\n </View>\n\n {/* Workout dots — scale in after the band draws. */}\n {workouts.map((workout, i) => {\n const cx = toX(workout.date)\n const cy = toY(workout.load)\n const color = DOT_COLORS[workout.status]\n const dotStyle = {\n width: DOT_SIZE,\n height: DOT_SIZE,\n borderRadius: DOT_SIZE / 2,\n backgroundColor: color,\n borderWidth: 2,\n borderColor: DOT_BORDER,\n }\n const label = `Workout on ${formatDate(workout.date)}, load ${workout.load}, ${\n STATUS_PHRASES[workout.status]\n }`\n return (\n <Animated.View\n key={`dot-${workout.date}-${i}`}\n style={{\n position: 'absolute',\n left: cx - DOT_SIZE / 2,\n top: cy - DOT_SIZE / 2,\n transform: [{ scale: dotAnims[i] ?? 1 }],\n }}\n testID=\"capacity-band-chart-dot-wrapper\"\n >\n {onWorkoutPress ? (\n <Pressable\n onPress={() => onWorkoutPress(workout)}\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n style={dotStyle}\n testID=\"capacity-band-chart-dot\"\n />\n ) : (\n <View\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={dotStyle}\n testID=\"capacity-band-chart-dot\"\n />\n )}\n </Animated.View>\n )\n })}\n </View>\n )\n}\n","/**\n * Muscle grouping taxonomy for volume tracking, exercise mapping, and the\n * BodyMap visualization. Ported from the Voltras muscle-taxonomy design doc.\n *\n * Level 2 (15 groups) is the primary volume-tracking unit; SimpleMuscleGroup\n * (8 groups) is the beginner-facing aggregation. MUSCLE_TO_SVG_SLUGS maps each\n * group to react-native-body-highlighter slugs using the closest-slug approach\n * (Phase 1: combined colors, no sub-region splitting — deltoids is a single\n * slug, lats and upper back share `upper-back`).\n */\nimport { WORKOUT_TOKENS } from '../../../theme/workout-tokens'\n\n/**\n * Full muscle group taxonomy for volume tracking and exercise mapping.\n * 15 groups — the primary unit for volume accounting.\n */\nexport enum MuscleGroup {\n // Push\n CHEST = 'chest',\n FRONT_DELTS = 'front_delts',\n SIDE_DELTS = 'side_delts',\n TRICEPS = 'triceps',\n\n // Pull\n LATS = 'lats',\n UPPER_BACK = 'upper_back',\n REAR_DELTS = 'rear_delts',\n BICEPS = 'biceps',\n FOREARMS = 'forearms',\n\n // Legs\n QUADS = 'quads',\n HAMSTRINGS = 'hamstrings',\n GLUTES = 'glutes',\n CALVES = 'calves',\n\n // Core\n ABS = 'abs',\n OBLIQUES = 'obliques',\n}\n\n/**\n * Simplified muscle group view for beginners. Maps to one or more MuscleGroup.\n */\nexport enum SimpleMuscleGroup {\n CHEST = 'chest',\n BACK = 'back',\n SHOULDERS = 'shoulders',\n BICEPS = 'biceps',\n TRICEPS = 'triceps',\n LEGS = 'legs',\n CORE = 'core',\n FOREARMS = 'forearms',\n}\n\n/** Mapping from simplified groups to the full taxonomy. */\nexport const SIMPLE_TO_DETAILED: Record<SimpleMuscleGroup, MuscleGroup[]> = {\n [SimpleMuscleGroup.CHEST]: [MuscleGroup.CHEST],\n [SimpleMuscleGroup.BACK]: [MuscleGroup.LATS, MuscleGroup.UPPER_BACK],\n [SimpleMuscleGroup.SHOULDERS]: [\n MuscleGroup.FRONT_DELTS,\n MuscleGroup.SIDE_DELTS,\n MuscleGroup.REAR_DELTS,\n ],\n [SimpleMuscleGroup.BICEPS]: [MuscleGroup.BICEPS],\n [SimpleMuscleGroup.TRICEPS]: [MuscleGroup.TRICEPS],\n [SimpleMuscleGroup.LEGS]: [\n MuscleGroup.QUADS,\n MuscleGroup.HAMSTRINGS,\n MuscleGroup.GLUTES,\n MuscleGroup.CALVES,\n ],\n [SimpleMuscleGroup.CORE]: [MuscleGroup.ABS, MuscleGroup.OBLIQUES],\n [SimpleMuscleGroup.FOREARMS]: [MuscleGroup.FOREARMS],\n}\n\n/** Reverse map: detailed MuscleGroup -> its SimpleMuscleGroup. */\nexport const DETAILED_TO_SIMPLE: Record<MuscleGroup, SimpleMuscleGroup> = Object.entries(\n SIMPLE_TO_DETAILED\n).reduce(\n (acc, [simple, groups]) => {\n for (const group of groups) {\n acc[group] = simple as SimpleMuscleGroup\n }\n return acc\n },\n {} as Record<MuscleGroup, SimpleMuscleGroup>\n)\n\n/** Movement category for training split organization. */\nexport type MovementCategory = 'push' | 'pull' | 'legs' | 'core'\n\nexport const MUSCLE_TO_CATEGORY: Record<MuscleGroup, MovementCategory> = {\n [MuscleGroup.CHEST]: 'push',\n [MuscleGroup.FRONT_DELTS]: 'push',\n [MuscleGroup.SIDE_DELTS]: 'push',\n [MuscleGroup.TRICEPS]: 'push',\n [MuscleGroup.LATS]: 'pull',\n [MuscleGroup.UPPER_BACK]: 'pull',\n [MuscleGroup.REAR_DELTS]: 'pull',\n [MuscleGroup.BICEPS]: 'pull',\n [MuscleGroup.FOREARMS]: 'pull',\n [MuscleGroup.QUADS]: 'legs',\n [MuscleGroup.HAMSTRINGS]: 'legs',\n [MuscleGroup.GLUTES]: 'legs',\n [MuscleGroup.CALVES]: 'legs',\n [MuscleGroup.ABS]: 'core',\n [MuscleGroup.OBLIQUES]: 'core',\n}\n\n/**\n * react-native-body-highlighter slug(s) per muscle group. Phase 1 uses the\n * closest available slug; deltoids share one path and lats/upper-back share\n * `upper-back` (see doc Level 4 \"Recommended approach\").\n */\nexport const MUSCLE_TO_SVG_SLUGS: Record<MuscleGroup, string[]> = {\n [MuscleGroup.CHEST]: ['chest'],\n [MuscleGroup.FRONT_DELTS]: ['deltoids'],\n [MuscleGroup.SIDE_DELTS]: ['deltoids'],\n [MuscleGroup.REAR_DELTS]: ['deltoids'],\n [MuscleGroup.TRICEPS]: ['triceps'],\n [MuscleGroup.LATS]: ['upper-back'],\n [MuscleGroup.UPPER_BACK]: ['upper-back', 'trapezius'],\n [MuscleGroup.BICEPS]: ['biceps'],\n [MuscleGroup.FOREARMS]: ['forearm'],\n [MuscleGroup.QUADS]: ['quadriceps'],\n [MuscleGroup.HAMSTRINGS]: ['hamstring'],\n [MuscleGroup.GLUTES]: ['gluteal'],\n [MuscleGroup.CALVES]: ['calves'],\n [MuscleGroup.ABS]: ['abs'],\n [MuscleGroup.OBLIQUES]: ['obliques'],\n}\n\n/** Human-readable name per muscle group (used in a11y labels). */\nexport const MUSCLE_DISPLAY_NAMES: Record<MuscleGroup, string> = {\n [MuscleGroup.CHEST]: 'Chest',\n [MuscleGroup.FRONT_DELTS]: 'Front Delts',\n [MuscleGroup.SIDE_DELTS]: 'Side Delts',\n [MuscleGroup.REAR_DELTS]: 'Rear Delts',\n [MuscleGroup.TRICEPS]: 'Triceps',\n [MuscleGroup.LATS]: 'Lats',\n [MuscleGroup.UPPER_BACK]: 'Upper Back',\n [MuscleGroup.BICEPS]: 'Biceps',\n [MuscleGroup.FOREARMS]: 'Forearms',\n [MuscleGroup.QUADS]: 'Quads',\n [MuscleGroup.HAMSTRINGS]: 'Hamstrings',\n [MuscleGroup.GLUTES]: 'Glutes',\n [MuscleGroup.CALVES]: 'Calves',\n [MuscleGroup.ABS]: 'Abs',\n [MuscleGroup.OBLIQUES]: 'Obliques',\n}\n\n/** Human-readable name per simple group. */\nexport const SIMPLE_DISPLAY_NAMES: Record<SimpleMuscleGroup, string> = {\n [SimpleMuscleGroup.CHEST]: 'Chest',\n [SimpleMuscleGroup.BACK]: 'Back',\n [SimpleMuscleGroup.SHOULDERS]: 'Shoulders',\n [SimpleMuscleGroup.BICEPS]: 'Biceps',\n [SimpleMuscleGroup.TRICEPS]: 'Triceps',\n [SimpleMuscleGroup.LEGS]: 'Legs',\n [SimpleMuscleGroup.CORE]: 'Core',\n [SimpleMuscleGroup.FOREARMS]: 'Forearms',\n}\n\n/** Volume landmarks per muscle group (weekly working sets). */\nexport interface VolumeLandmarks {\n mev: number // Minimum Effective Volume\n mav: number // Maximum Adaptive Volume\n mrv: number // Maximum Recoverable Volume\n}\n\nexport const DEFAULT_VOLUME_LANDMARKS: Record<MuscleGroup, VolumeLandmarks> = {\n [MuscleGroup.CHEST]: { mev: 8, mav: 14, mrv: 20 },\n [MuscleGroup.LATS]: { mev: 8, mav: 14, mrv: 20 },\n [MuscleGroup.UPPER_BACK]: { mev: 6, mav: 12, mrv: 18 },\n [MuscleGroup.FRONT_DELTS]: { mev: 2, mav: 6, mrv: 10 },\n [MuscleGroup.SIDE_DELTS]: { mev: 6, mav: 14, mrv: 22 },\n [MuscleGroup.REAR_DELTS]: { mev: 6, mav: 12, mrv: 18 },\n [MuscleGroup.BICEPS]: { mev: 4, mav: 10, mrv: 18 },\n [MuscleGroup.TRICEPS]: { mev: 4, mav: 8, mrv: 14 },\n [MuscleGroup.FOREARMS]: { mev: 2, mav: 6, mrv: 12 },\n [MuscleGroup.QUADS]: { mev: 6, mav: 12, mrv: 18 },\n [MuscleGroup.HAMSTRINGS]: { mev: 4, mav: 10, mrv: 16 },\n [MuscleGroup.GLUTES]: { mev: 4, mav: 10, mrv: 16 },\n [MuscleGroup.CALVES]: { mev: 6, mav: 10, mrv: 16 },\n [MuscleGroup.ABS]: { mev: 0, mav: 8, mrv: 16 },\n [MuscleGroup.OBLIQUES]: { mev: 0, mav: 6, mrv: 12 },\n}\n\n/** Weekly-volume status relative to MEV/MAV/MRV landmarks. */\nexport type VolumeStatus = 'under' | 'maintenance' | 'productive' | 'over'\n\n/** Readable label per status for a11y descriptions. */\nexport const VOLUME_STATUS_LABELS: Record<VolumeStatus, string> = {\n under: 'under-trained',\n maintenance: 'maintenance',\n productive: 'productive',\n over: 'over-reaching',\n}\n\n/** Severity ranking — higher wins when several groups share an SVG slug. */\nconst STATUS_SEVERITY: Record<VolumeStatus, number> = {\n under: 1,\n maintenance: 2,\n productive: 3,\n over: 4,\n}\n\n/**\n * Maps a volume status (and intensity, 0-1) to a heatmap fill color. The\n * `approaching` token is used when a productive muscle nears its MRV.\n */\nexport function getHeatmapColor(status: VolumeStatus | null | undefined, intensity = 0): string {\n const heatmap = WORKOUT_TOKENS.heatmap\n switch (status) {\n case 'under':\n return heatmap.under\n case 'maintenance':\n return heatmap.maintenance\n case 'productive':\n return intensity >= 0.85 ? heatmap.approaching : heatmap.productive\n case 'over':\n return heatmap.over\n default:\n return heatmap.none\n }\n}\n\n/** True when one status is at least as severe as another. */\nexport function isMoreSevere(a: VolumeStatus, b: VolumeStatus): boolean {\n return STATUS_SEVERITY[a] >= STATUS_SEVERITY[b]\n}\n\n/**\n * Representative MuscleGroup for each SVG slug, used to resolve taps on shared\n * paths (e.g. `deltoids`, `upper-back`) back to a single group.\n */\nexport const SLUG_TO_PRIMARY_MUSCLE: Record<string, MuscleGroup> = {\n chest: MuscleGroup.CHEST,\n deltoids: MuscleGroup.SIDE_DELTS,\n triceps: MuscleGroup.TRICEPS,\n 'upper-back': MuscleGroup.LATS,\n trapezius: MuscleGroup.UPPER_BACK,\n biceps: MuscleGroup.BICEPS,\n forearm: MuscleGroup.FOREARMS,\n quadriceps: MuscleGroup.QUADS,\n hamstring: MuscleGroup.HAMSTRINGS,\n gluteal: MuscleGroup.GLUTES,\n calves: MuscleGroup.CALVES,\n abs: MuscleGroup.ABS,\n obliques: MuscleGroup.OBLIQUES,\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useMemo, useState } from 'react'\nimport { View, Text, Pressable, Animated, Easing, type ViewProps } from 'react-native'\nimport BodyHighlighter, { type ExtendedBodyPart, type Slug } from 'react-native-body-highlighter'\nimport { cn } from '../../../utils/cn'\nimport { WORKOUT_TOKENS } from '../../../theme/workout-tokens'\nimport {\n MuscleGroup,\n SimpleMuscleGroup,\n MUSCLE_TO_SVG_SLUGS,\n MUSCLE_DISPLAY_NAMES,\n SIMPLE_DISPLAY_NAMES,\n DETAILED_TO_SIMPLE,\n SLUG_TO_PRIMARY_MUSCLE,\n VOLUME_STATUS_LABELS,\n getHeatmapColor,\n isMoreSevere,\n type VolumeStatus,\n} from './muscleTaxonomy'\n\n/**\n * react-native-body-highlighter is published as a CommonJS default export; the\n * interop keeps it working whether the bundler unwraps the default or not.\n */\nconst Body = ((BodyHighlighter as unknown as { default?: typeof BodyHighlighter }).default ??\n BodyHighlighter) as typeof BodyHighlighter\n\nconst OUTLINE_FILL = 'rgba(255,255,255,0.08)'\nconst OUTLINE_BORDER = 'rgba(255,255,255,0.12)'\nconst BODY_SCALE = 0.8 // 200x400 intrinsic -> ~160x320 px\nconst TEXT_PRIMARY = '#F3F4F6'\nconst TEXT_SECONDARY = '#9CA3AF'\n\nexport interface BodyMapData {\n muscleGroup: MuscleGroup\n /** Intensity 0-1 for heatmap color. */\n intensity: number\n /** Volume status for tooltip / heatmap token. */\n volumeStatus: VolumeStatus\n /** Weekly effective sets. */\n weeklySets: number\n}\n\nexport interface BodyMapProps extends ViewProps {\n /** Muscle group intensity data. */\n data: BodyMapData[]\n /** Which view to show. */\n view: 'front' | 'back'\n /** Toggle between front/back. */\n onViewChange?: (view: 'front' | 'back') => void\n /** Called when a muscle group is tapped. */\n onMusclePress?: (muscleGroup: MuscleGroup) => void\n /** Currently highlighted muscle (from external selection). */\n highlightedMuscle?: MuscleGroup | null\n /** Show simplified (8 groups) or detailed (15 groups). */\n mode?: 'simple' | 'detailed'\n className?: string\n}\n\ninterface LegendEntry {\n key: string\n name: string\n status: VolumeStatus\n intensity: number\n sets: number\n /** Detailed group reported to onMusclePress. */\n muscle: MuscleGroup\n}\n\n/** Build the per-slug heatmap fill list, combining groups that share a slug. */\nfunction buildSlugParts(data: BodyMapData[]): ExtendedBodyPart[] {\n const bySlug = new Map<string, { status: VolumeStatus; intensity: number }>()\n for (const d of data) {\n for (const slug of MUSCLE_TO_SVG_SLUGS[d.muscleGroup] ?? []) {\n const existing = bySlug.get(slug)\n if (!existing || isMoreSevere(d.volumeStatus, existing.status)) {\n bySlug.set(slug, { status: d.volumeStatus, intensity: d.intensity })\n }\n }\n }\n return Array.from(bySlug.entries()).map(([slug, v]) => ({\n slug: slug as Slug,\n color: getHeatmapColor(v.status, v.intensity),\n }))\n}\n\n/** Collapse data into per-simple-group legend entries (summed sets). */\nfunction buildSimpleLegend(data: BodyMapData[]): LegendEntry[] {\n const bySimple = new Map<SimpleMuscleGroup, LegendEntry>()\n for (const d of data) {\n const simple = DETAILED_TO_SIMPLE[d.muscleGroup]\n const existing = bySimple.get(simple)\n if (!existing) {\n bySimple.set(simple, {\n key: simple,\n name: SIMPLE_DISPLAY_NAMES[simple],\n status: d.volumeStatus,\n intensity: d.intensity,\n sets: d.weeklySets,\n muscle: d.muscleGroup,\n })\n continue\n }\n existing.sets += d.weeklySets\n existing.intensity = Math.max(existing.intensity, d.intensity)\n if (isMoreSevere(d.volumeStatus, existing.status)) {\n existing.status = d.volumeStatus\n existing.muscle = d.muscleGroup\n }\n }\n return Array.from(bySimple.values())\n}\n\n/** One legend entry per data row, named by detailed group. */\nfunction buildDetailedLegend(data: BodyMapData[]): LegendEntry[] {\n return data.map((d) => ({\n key: d.muscleGroup,\n name: MUSCLE_DISPLAY_NAMES[d.muscleGroup],\n status: d.volumeStatus,\n intensity: d.intensity,\n sets: d.weeklySets,\n muscle: d.muscleGroup,\n }))\n}\n\n/**\n * Interactive SVG body map with tappable muscle groups and a volume heatmap.\n * Renders the front or back view (toggle via onViewChange), colors each muscle\n * by its weekly-volume status, and exposes an accessible muscle legend wired to\n * onMusclePress. Phase 1 uses react-native-body-highlighter's combined slugs\n * (deltoids as one path, lats/upper-back shared); swipe between views and the\n * delt/lat SVG split are follow-ups.\n *\n * @example\n * <BodyMap\n * data={[{ muscleGroup: MuscleGroup.CHEST, intensity: 0.7, volumeStatus: 'productive', weeklySets: 12 }]}\n * view=\"front\"\n * onViewChange={setView}\n * onMusclePress={setSelected}\n * highlightedMuscle={selected}\n * />\n */\nexport function BodyMap({\n data,\n view,\n onViewChange,\n onMusclePress,\n highlightedMuscle,\n mode = 'detailed',\n className,\n ...props\n}: BodyMapProps) {\n const slugParts = useMemo(() => buildSlugParts(data), [data])\n const legend = useMemo(\n () => (mode === 'simple' ? buildSimpleLegend(data) : buildDetailedLegend(data)),\n [data, mode]\n )\n\n const [highlight] = useState(() => new Animated.Value(highlightedMuscle ? 1 : 0))\n useEffect(() => {\n const animation = Animated.timing(highlight, {\n toValue: highlightedMuscle ? 1 : 0,\n duration: 250,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n })\n animation.start()\n return () => animation.stop()\n }, [highlightedMuscle, highlight])\n\n const scale = highlight.interpolate({ inputRange: [0, 1], outputRange: [1, 1.02] })\n const glowColor = highlightedMuscle\n ? getHeatmapColor(\n data.find((d) => d.muscleGroup === highlightedMuscle)?.volumeStatus,\n data.find((d) => d.muscleGroup === highlightedMuscle)?.intensity ?? 0\n )\n : null\n\n const handleBodyPress = (part: ExtendedBodyPart) => {\n if (!onMusclePress || !part.slug) return\n const fromData = data.find((d) =>\n (MUSCLE_TO_SVG_SLUGS[d.muscleGroup] ?? []).includes(part.slug as string)\n )\n const muscle = fromData?.muscleGroup ?? SLUG_TO_PRIMARY_MUSCLE[part.slug]\n if (muscle) onMusclePress(muscle)\n }\n\n return (\n <View className={cn(className)} testID=\"body-map\" {...props}>\n <ViewToggle view={view} onViewChange={onViewChange} />\n\n <Animated.View\n style={[\n {\n width: 200 * BODY_SCALE,\n alignSelf: 'center',\n transform: [{ scale }],\n },\n glowColor ? { boxShadow: `0 0 14px 2px ${glowColor}` } : undefined,\n ]}\n // The SVG is decorative; the accessible muscle legend below is the\n // screen-reader / keyboard interface.\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n testID=\"body-map-svg\"\n >\n <Body\n side={view}\n data={slugParts}\n scale={BODY_SCALE}\n gender=\"male\"\n defaultFill={OUTLINE_FILL}\n border={OUTLINE_BORDER}\n onBodyPartPress={handleBodyPress}\n />\n </Animated.View>\n\n {legend.length === 0 ? (\n <Text\n style={{\n marginTop: 8,\n fontSize: 12,\n color: TEXT_SECONDARY,\n textAlign: 'center',\n fontFamily: 'Inter, sans-serif',\n }}\n testID=\"body-map-empty\"\n >\n No training data\n </Text>\n ) : (\n <View\n className=\"flex-row flex-wrap\"\n style={{ marginTop: 10, gap: 6, justifyContent: 'center' }}\n testID=\"body-map-legend\"\n >\n {legend.map((entry) => (\n <MuscleButton\n key={entry.key}\n entry={entry}\n highlighted={highlightedMuscle === entry.muscle}\n onMusclePress={onMusclePress}\n />\n ))}\n </View>\n )}\n </View>\n )\n}\n\ninterface ViewToggleProps {\n view: 'front' | 'back'\n onViewChange?: (view: 'front' | 'back') => void\n}\n\nfunction ViewToggle({ view, onViewChange }: ViewToggleProps) {\n return (\n <View\n className=\"flex-row self-center\"\n style={{ gap: 4, marginBottom: 8 }}\n testID=\"body-map-view-toggle\"\n >\n {(['front', 'back'] as const).map((side) => {\n const active = view === side\n return (\n <Pressable\n key={side}\n onPress={() => onViewChange?.(side)}\n accessibilityRole=\"button\"\n accessibilityLabel={`Show ${side} view`}\n aria-pressed={active}\n disabled={!onViewChange}\n style={{\n paddingHorizontal: 12,\n paddingVertical: 4,\n borderRadius: 9999,\n backgroundColor: active ? 'rgba(255,121,0,0.16)' : 'transparent',\n borderWidth: 1,\n borderColor: active ? '#FF7900' : WORKOUT_TOKENS.border.strong,\n }}\n testID={`body-map-toggle-${side}`}\n >\n <Text\n style={{\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n fontWeight: active ? '700' : '500',\n color: active ? '#FF7900' : TEXT_SECONDARY,\n textTransform: 'capitalize',\n }}\n >\n {side}\n </Text>\n </Pressable>\n )\n })}\n </View>\n )\n}\n\ninterface MuscleButtonProps {\n entry: LegendEntry\n highlighted: boolean\n onMusclePress?: (muscleGroup: MuscleGroup) => void\n}\n\nfunction MuscleButton({ entry, highlighted, onMusclePress }: MuscleButtonProps) {\n const dotColor = getHeatmapColor(entry.status, entry.intensity)\n const label = `${entry.name}, ${VOLUME_STATUS_LABELS[entry.status]}, ${entry.sets} sets this week`\n return (\n <Pressable\n onPress={() => onMusclePress?.(entry.muscle)}\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n aria-pressed={highlighted}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 5,\n paddingHorizontal: 8,\n paddingVertical: 3,\n borderRadius: 9999,\n borderWidth: 1,\n borderColor: highlighted ? '#FF7900' : WORKOUT_TOKENS.border.default,\n backgroundColor: WORKOUT_TOKENS.surface.raised,\n }}\n testID={`body-map-muscle-${entry.key}`}\n >\n <View\n style={{ width: 7, height: 7, borderRadius: 9999, backgroundColor: dotColor }}\n accessibilityElementsHidden\n testID={`body-map-muscle-dot-${entry.key}`}\n />\n <Text\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '500',\n color: TEXT_PRIMARY,\n }}\n accessibilityElementsHidden\n >\n {entry.name}\n </Text>\n </Pressable>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState } from 'react'\nimport {\n View,\n Text,\n Pressable,\n ScrollView,\n Animated,\n Easing,\n type ViewProps,\n type ViewStyle,\n} from 'react-native'\nimport { Badge, type BadgeColor } from '../../ui/badge'\nimport { WORKOUT_TOKENS } from '../../../theme/workout-tokens'\nimport { Sparkline } from './Sparkline'\nimport {\n MuscleGroup,\n VOLUME_STATUS_LABELS,\n type VolumeLandmarks,\n type VolumeStatus,\n} from './muscleTaxonomy'\n\nconst SURFACE_ELEVATED = WORKOUT_TOKENS.surface.elevated\nconst SURFACE_RAISED = WORKOUT_TOKENS.surface.raised\nconst BORDER_STRONG = WORKOUT_TOKENS.border.strong\nconst BORDER_DEFAULT = WORKOUT_TOKENS.border.default\nconst BRAND_PRIMARY = '#FF7900'\nconst TEXT_PRIMARY = '#F3F4F6'\nconst TEXT_SECONDARY = '#9CA3AF'\nconst TEXT_TERTIARY = '#6B7280'\n\n/** Volume track gradient: status-info (blue) -> result-improve (teal) -> status-error (red). */\nconst VOLUME_GRADIENT = 'linear-gradient(90deg, #2196F3 0%, #14B8A6 50%, #D14343 100%)'\n\n/** Sheet slides up from this offset (px) and the backdrop fades to this opacity. */\nconst SLIDE_OFFSET = 400\nconst BACKDROP_OPACITY = 0.4\n\n/** Volume status -> Badge color scheme. */\nconst STATUS_BADGE_COLOR: Record<VolumeStatus, BadgeColor> = {\n under: 'info',\n maintenance: 'warning',\n productive: 'success',\n over: 'error',\n}\n\nexport interface ContributingExercise {\n /** Exercise name. */\n name: string\n /** Working sets contributed this week. */\n sets: number\n /** Effective-set multiplier toward this muscle (0-1). */\n contributionWeight: number\n}\n\nexport interface UpcomingExercise {\n /** Exercise name. */\n name: string\n /** Workout the exercise belongs to. */\n workoutName: string\n /** Planned sets. */\n sets: number\n}\n\nexport interface BodyMapDetailPanelProps extends ViewProps {\n /** Muscle group whose volume detail is shown. */\n muscleGroup: MuscleGroup\n /** Human-readable muscle name for the title and a11y label. */\n displayName: string\n /** Weekly effective sets logged for this muscle. */\n weeklySets: number\n /** Volume landmarks (weekly working sets). */\n landmarks: VolumeLandmarks\n /** Weekly-volume status relative to the landmarks. */\n volumeStatus: VolumeStatus\n /** Last trained label, e.g. \"2 days ago\". */\n lastTrained?: string\n /** Volume sparkline data (last 4-8 weeks). */\n weeklyHistory?: number[]\n /** Exercises contributing to this muscle's volume. */\n contributingExercises?: ContributingExercise[]\n /** Upcoming exercises targeting this muscle. */\n upcomingExercises?: UpcomingExercise[]\n /** Whether the bottom sheet is visible. */\n isOpen?: boolean\n /** Alias for `isOpen` (spec wording: \"isOpen/visible\"). `isOpen` wins when both are set. */\n visible?: boolean\n /** Dismiss the panel (backdrop, handle, or close button). */\n onClose: () => void\n /** Navigate to a filtered exercise list. */\n onViewExercises?: () => void\n}\n\nfunction clamp01(value: number): number {\n if (value < 0) return 0\n if (value > 1) return 1\n return value\n}\n\n/** Marker position (0-1) of current sets between MEV (left) and MRV (right). */\nfunction markerFraction(weeklySets: number, { mev, mrv }: VolumeLandmarks): number {\n const span = mrv - mev\n if (span <= 0) return weeklySets >= mrv ? 1 : 0\n return clamp01((weeklySets - mev) / span)\n}\n\n/**\n * Slide-up bottom-sheet panel with detailed weekly-volume info for a tapped\n * muscle group: a MEV|current|MRV gradient progress bar, the big weekly set\n * count against MRV, an optional volume sparkline, and the contributing /\n * upcoming exercise lists. Composes the titan `Badge` and Workout `Sparkline`.\n *\n * Controlled via `isOpen` (or the `visible` alias); renders nothing when closed\n * and animates in on open — sheet translateY 400->0 (400ms ease-out) and a\n * backdrop fade 0->0.4 (RN Animated, useNativeDriver:false). Backdrop, handle,\n * and the header close button all call `onClose`.\n *\n * @example\n * <BodyMapDetailPanel\n * muscleGroup={MuscleGroup.CHEST}\n * displayName=\"Chest\"\n * weeklySets={14}\n * landmarks={{ mev: 8, mav: 14, mrv: 20 }}\n * volumeStatus=\"productive\"\n * lastTrained=\"2 days ago\"\n * weeklyHistory={[8, 10, 12, 14]}\n * isOpen={open}\n * onClose={() => setOpen(false)}\n * />\n */\nexport function BodyMapDetailPanel({\n muscleGroup,\n displayName,\n weeklySets,\n landmarks,\n volumeStatus,\n lastTrained,\n weeklyHistory,\n contributingExercises,\n upcomingExercises,\n isOpen,\n visible,\n onClose,\n onViewExercises,\n ...props\n}: BodyMapDetailPanelProps) {\n const open = isOpen ?? visible ?? false\n\n const [translateY] = useState(() => new Animated.Value(SLIDE_OFFSET))\n const [backdrop] = useState(() => new Animated.Value(0))\n\n useEffect(() => {\n if (!open) return\n const animation = Animated.parallel([\n Animated.timing(translateY, {\n toValue: 0,\n duration: 400,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n }),\n Animated.timing(backdrop, {\n toValue: BACKDROP_OPACITY,\n duration: 300,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n }),\n ])\n animation.start()\n return () => animation.stop()\n }, [open, translateY, backdrop])\n\n if (!open) return null\n\n const dialogLabel = `${displayName} volume details`\n const markerLeft = markerFraction(weeklySets, landmarks) * 100\n const hasContributing = (contributingExercises?.length ?? 0) > 0\n const hasUpcoming = (upcomingExercises?.length ?? 0) > 0\n\n return (\n <View\n style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, justifyContent: 'flex-end' }}\n testID=\"body-map-detail-panel-root\"\n >\n <Animated.View\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: '#000000',\n opacity: backdrop,\n }}\n testID=\"body-map-detail-panel-backdrop-anim\"\n >\n <Pressable\n onPress={onClose}\n accessibilityRole=\"button\"\n accessibilityLabel={`Close ${displayName} details`}\n style={{ flex: 1 }}\n testID=\"body-map-detail-panel-backdrop\"\n />\n </Animated.View>\n\n <Animated.View\n accessibilityRole={'dialog' as ViewProps['accessibilityRole']}\n accessibilityLabel={dialogLabel}\n aria-label={dialogLabel}\n style={{\n backgroundColor: SURFACE_ELEVATED,\n borderTopLeftRadius: 16,\n borderTopRightRadius: 16,\n maxHeight: '88%',\n transform: [{ translateY }],\n }}\n testID=\"body-map-detail-panel\"\n {...props}\n >\n <Pressable\n onPress={onClose}\n accessibilityRole=\"button\"\n accessibilityLabel={`Close ${displayName} details`}\n hitSlop={12}\n style={{ alignSelf: 'center', paddingVertical: 8 }}\n testID=\"body-map-detail-panel-handle\"\n >\n <View\n style={{ width: 40, height: 4, borderRadius: 2, backgroundColor: BORDER_STRONG }}\n accessibilityElementsHidden\n />\n </Pressable>\n\n <ScrollView\n style={{ paddingHorizontal: 16 }}\n contentContainerStyle={{ paddingBottom: 20 }}\n testID=\"body-map-detail-panel-scroll\"\n >\n <View\n className=\"flex-row items-center justify-between\"\n style={{ gap: 8, paddingTop: 4, paddingBottom: 4 }}\n testID=\"body-map-detail-panel-header\"\n >\n <View className=\"flex-row items-center\" style={{ gap: 8, flexShrink: 1 }}>\n <Text\n accessibilityRole=\"header\"\n style={{\n fontSize: 16,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: TEXT_PRIMARY,\n }}\n testID=\"body-map-detail-panel-title\"\n >\n {displayName}\n </Text>\n <Badge\n variant=\"subtle\"\n color={STATUS_BADGE_COLOR[volumeStatus]}\n size=\"sm\"\n testID=\"body-map-detail-panel-status-badge\"\n >\n {VOLUME_STATUS_LABELS[volumeStatus]}\n </Badge>\n </View>\n <Pressable\n onPress={onClose}\n accessibilityRole=\"button\"\n accessibilityLabel={`Close ${displayName} details`}\n hitSlop={8}\n style={{ padding: 4, margin: -4 }}\n testID=\"body-map-detail-panel-close\"\n >\n <Text style={{ fontSize: 22, lineHeight: 22, color: TEXT_SECONDARY }}>{'×'}</Text>\n </Pressable>\n </View>\n\n {lastTrained != null && (\n <Text\n style={{ fontSize: 12, fontFamily: 'Inter, sans-serif', color: TEXT_SECONDARY }}\n testID=\"body-map-detail-panel-last-trained\"\n >\n {`Last trained ${lastTrained}`}\n </Text>\n )}\n\n <View style={{ marginTop: 16 }} testID=\"body-map-detail-panel-volume\">\n <View\n className=\"flex-row items-center justify-between\"\n style={{ marginBottom: 6 }}\n accessibilityElementsHidden\n >\n <Text style={{ fontSize: 10, fontFamily: 'Inter, sans-serif', fontWeight: '600', color: TEXT_TERTIARY }}>\n {`MEV ${landmarks.mev}`}\n </Text>\n <Text style={{ fontSize: 10, fontFamily: 'Inter, sans-serif', fontWeight: '600', color: TEXT_TERTIARY }}>\n {`MRV ${landmarks.mrv}`}\n </Text>\n </View>\n <View\n style={{ height: 14, justifyContent: 'center' }}\n accessibilityRole=\"progressbar\"\n accessibilityValue={{ min: landmarks.mev, max: landmarks.mrv, now: weeklySets }}\n accessibilityLabel={`${weeklySets} weekly sets, between MEV ${landmarks.mev} and MRV ${landmarks.mrv}`}\n aria-valuenow={weeklySets}\n aria-valuemin={landmarks.mev}\n aria-valuemax={landmarks.mrv}\n testID=\"body-map-detail-panel-volume-bar\"\n >\n <View\n style={{ height: 8, borderRadius: 4, backgroundImage: VOLUME_GRADIENT } as ViewStyle}\n accessibilityElementsHidden\n />\n <View\n style={{\n position: 'absolute',\n left: `${markerLeft}%`,\n marginLeft: -7,\n width: 14,\n height: 14,\n borderRadius: 7,\n borderWidth: 2,\n borderColor: TEXT_PRIMARY,\n backgroundColor: SURFACE_ELEVATED,\n boxShadow: '0 0 4px rgba(0,0,0,0.5)',\n }}\n accessibilityElementsHidden\n testID=\"body-map-detail-panel-volume-marker\"\n />\n </View>\n </View>\n\n <View className=\"flex-row items-baseline\" style={{ marginTop: 14, gap: 4 }}>\n <Text\n style={{\n fontSize: 24,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: TEXT_PRIMARY,\n }}\n testID=\"body-map-detail-panel-set-count\"\n >\n {weeklySets}\n </Text>\n <Text\n style={{ fontSize: 12, fontFamily: 'Inter, sans-serif', color: TEXT_SECONDARY }}\n testID=\"body-map-detail-panel-mrv-suffix\"\n >\n {`/ ${landmarks.mrv} MRV`}\n </Text>\n </View>\n\n {weeklyHistory != null && weeklyHistory.length > 0 && (\n <View style={{ marginTop: 14 }} testID=\"body-map-detail-panel-sparkline\">\n <Text\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n color: TEXT_TERTIARY,\n marginBottom: 6,\n }}\n accessibilityElementsHidden\n >\n {'VOLUME TREND'}\n </Text>\n <Sparkline data={weeklyHistory} width={80} height={30} highlightLast />\n </View>\n )}\n\n {hasContributing && (\n <View style={{ marginTop: 16 }} testID=\"body-map-detail-panel-contributing\">\n <Text\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n color: TEXT_TERTIARY,\n marginBottom: 8,\n }}\n >\n {'CONTRIBUTING EXERCISES'}\n </Text>\n {contributingExercises!.map((exercise, index) => (\n <View\n key={`${exercise.name}-${index}`}\n className=\"flex-row items-center justify-between\"\n style={{\n gap: 10,\n paddingVertical: 8,\n paddingHorizontal: 12,\n marginBottom: 6,\n borderRadius: 8,\n backgroundColor: SURFACE_RAISED,\n borderWidth: 1,\n borderColor: BORDER_DEFAULT,\n }}\n testID={`body-map-detail-panel-contributing-${index}`}\n >\n <Text\n style={{ flex: 1, fontSize: 13, fontFamily: 'Inter, sans-serif', fontWeight: '600', color: TEXT_PRIMARY }}\n testID={`body-map-detail-panel-contributing-${index}-name`}\n >\n {exercise.name}\n </Text>\n <Text\n style={{ fontSize: 12, fontFamily: 'Inter, sans-serif', color: TEXT_SECONDARY }}\n testID={`body-map-detail-panel-contributing-${index}-detail`}\n >\n {`${exercise.sets} sets · ${Math.round(exercise.contributionWeight * 100)}%`}\n </Text>\n </View>\n ))}\n </View>\n )}\n\n {hasUpcoming && (\n <View style={{ marginTop: 16 }} testID=\"body-map-detail-panel-upcoming\">\n <Text\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n color: TEXT_TERTIARY,\n marginBottom: 8,\n }}\n >\n {'UPCOMING'}\n </Text>\n {upcomingExercises!.map((exercise, index) => (\n <View\n key={`${exercise.name}-${index}`}\n className=\"flex-row items-center justify-between\"\n style={{ gap: 10, paddingVertical: 6 }}\n testID={`body-map-detail-panel-upcoming-${index}`}\n >\n <Text\n style={{ flex: 1, fontSize: 13, fontFamily: 'Inter, sans-serif', fontWeight: '600', color: TEXT_PRIMARY }}\n testID={`body-map-detail-panel-upcoming-${index}-name`}\n >\n {exercise.name}\n </Text>\n <Text\n style={{ fontSize: 12, fontFamily: 'Inter, sans-serif', color: TEXT_TERTIARY }}\n testID={`body-map-detail-panel-upcoming-${index}-detail`}\n >\n {`${exercise.workoutName} · ${exercise.sets} sets`}\n </Text>\n </View>\n ))}\n </View>\n )}\n\n {onViewExercises != null && (\n <Pressable\n onPress={onViewExercises}\n accessibilityRole=\"button\"\n accessibilityLabel={`View ${displayName} exercises`}\n style={{\n marginTop: 16,\n paddingVertical: 10,\n borderRadius: 8,\n alignItems: 'center',\n backgroundColor: 'rgba(255,121,0,0.12)',\n borderWidth: 1,\n borderColor: 'rgba(255,121,0,0.3)',\n }}\n testID=\"body-map-detail-panel-view-exercises\"\n >\n <Text style={{ fontSize: 13, fontFamily: 'Inter, sans-serif', fontWeight: '700', color: BRAND_PRIMARY }}>\n {'View exercises'}\n </Text>\n </Pressable>\n )}\n </ScrollView>\n </Animated.View>\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 TreemapDatum {\n /** Stable identity — returned by onPress and used as the React key. */\n id: string\n /** Area weight (e.g. size, count, severity). Non-positive values are dropped. */\n value: number\n /** Tile fill color. Falls back to a built-in categorical palette by index. */\n color?: string\n /** Optional label rendered inside sufficiently large tiles. */\n label?: string\n}\n\nexport type TreemapScale = 'linear' | 'sqrt' | 'log'\n\nexport interface TreemapProps extends Omit<ViewProps, 'children'> {\n data: TreemapDatum[]\n /** Layout box. Required — the treemap fills exactly this area. */\n width: number\n height: number\n /**\n * Area scale. Real-world weights are often heavy-tailed, where one outlier\n * under a `linear` scale swallows the whole canvas. `sqrt` (default) damps\n * that while preserving order; `log` compresses hardest.\n */\n scale?: TreemapScale\n /** Show at most N tiles; the remainder collapse into one \"+M more\" tile. */\n maxTiles?: number\n /** Fires with a tile's id on press (never for the \"+M more\" tile). */\n onPress?: (id: string) => void\n /** Draws a highlight border on the matching tile. */\n selectedId?: string\n className?: string\n}\n\n/** Titan categorical fallback palette (data-1..data-8). */\nconst PALETTE = [\n '#5B9BD5', '#14B8A6', '#F4A736', '#F83030',\n '#823CA0', '#D4A520', '#406D87', '#43C6B7',\n]\n\ninterface Rect {\n x: number\n y: number\n w: number\n h: number\n datum: TreemapDatum\n}\n\nfunction scaleValue(v: number, scale: TreemapScale): number {\n if (v <= 0) return 0\n if (scale === 'sqrt') return Math.sqrt(v)\n if (scale === 'log') return Math.log10(v + 1)\n return v\n}\n\nfunction worstRatio(row: { area: number }[], side: number): number {\n const sum = row.reduce((s, r) => s + r.area, 0)\n const thickness = sum / side\n let worst = 0\n for (const r of row) {\n const len = r.area / thickness\n const ratio = Math.max(thickness / len, len / thickness)\n if (ratio > worst) worst = ratio\n }\n return worst\n}\n\n/** Squarified treemap (Bruls, Huizing & van Wijk, 2000). */\nfunction squarify(data: TreemapDatum[], w: number, h: number): Rect[] {\n const total = data.reduce((s, d) => s + d.value, 0)\n if (total <= 0 || w <= 0 || h <= 0) return []\n const scaled = data.map((d) => ({ datum: d, area: (d.value / total) * w * h }))\n const out: Rect[] = []\n let rx = 0\n let ry = 0\n let rw = w\n let rh = h\n let i = 0\n\n while (i < scaled.length) {\n const vertical = rw >= rh\n const side = vertical ? rh : rw\n let row: typeof scaled = []\n let bestWorst = Infinity\n let j = i\n while (j < scaled.length) {\n const trial = [...row, scaled[j]]\n const worst = worstRatio(trial, side)\n if (row.length > 0 && worst > bestWorst) break\n row = trial\n bestWorst = worst\n j++\n }\n const rowArea = row.reduce((s, r) => s + r.area, 0)\n const thickness = rowArea / side\n let along = vertical ? ry : rx\n for (const r of row) {\n const len = r.area / thickness\n out.push(\n vertical\n ? { x: rx, y: along, w: thickness, h: len, datum: r.datum }\n : { x: along, y: ry, w: len, h: thickness, datum: r.datum },\n )\n along += len\n }\n if (vertical) {\n rx += thickness\n rw -= thickness\n } else {\n ry += thickness\n rh -= thickness\n }\n i = j\n }\n return out\n}\n\n/**\n * Squarified treemap. SVG-free (absolutely-positioned tiles) so it renders\n * identically on web (react-native-web) and native. Layout is computed from\n * `value`; color and labels are caller-supplied.\n */\nexport function Treemap({\n data,\n width,\n height,\n scale = 'sqrt',\n maxTiles = 60,\n onPress,\n selectedId,\n className,\n ...props\n}: TreemapProps) {\n const clean = data\n .filter((d) => d.value > 0)\n .sort((a, b) => b.value - a.value)\n .map((d, i) => ({ ...d, color: d.color ?? PALETTE[i % PALETTE.length] }))\n\n let tiles = clean\n if (clean.length > maxTiles) {\n const head = clean.slice(0, maxTiles - 1)\n const restValue = clean.slice(maxTiles - 1).reduce((s, d) => s + d.value, 0)\n tiles = [\n ...head,\n { id: '__more__', value: restValue, color: '#3a3a3a', label: `+${clean.length - (maxTiles - 1)} more` },\n ]\n }\n\n const weighted = tiles.map((d) => ({ ...d, value: scaleValue(d.value, scale) }))\n const rects = squarify(weighted, width, height)\n\n return (\n <View className={cn('relative', className)} style={{ width, height }} {...props}>\n {rects.map((r) => {\n const selected = r.datum.id === selectedId\n const labelFits = r.w > 54 && r.h > 22\n const pressable = r.datum.id !== '__more__'\n return (\n <Pressable\n key={r.datum.id}\n testID={`treemap-tile-${r.datum.id}`}\n accessibilityLabel={r.datum.label ?? r.datum.id}\n onPress={pressable ? () => onPress?.(r.datum.id) : undefined}\n style={{\n position: 'absolute',\n left: r.x,\n top: r.y,\n width: Math.max(0, r.w - 2),\n height: Math.max(0, r.h - 2),\n backgroundColor: r.datum.color,\n borderRadius: 3,\n opacity: selected ? 1 : 0.9,\n borderWidth: selected ? 2 : 0,\n borderColor: '#ffffff',\n padding: 4,\n overflow: 'hidden',\n }}\n >\n {labelFits && (\n <Text numberOfLines={2} className=\"text-[10px] font-semibold text-[#0b0b0b]\">\n {r.datum.label ?? r.datum.id}\n </Text>\n )}\n </Pressable>\n )\n })}\n </View>\n )\n}\n","import { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface ScatterDatum {\n /** Stable identity — returned by onPress and used as the React key. */\n id: string\n /** Horizontal position in data space. */\n x: number\n /** Vertical position in data space. */\n y: number\n /** Bubble radius in px. Falls back to a fixed default when omitted. */\n r?: number\n /** Bubble fill color. Falls back to a built-in categorical palette by index. */\n color?: string\n /** Optional label shown for large or selected points. */\n label?: string\n}\n\nexport interface ScatterAxis {\n xLabel?: string\n yLabel?: string\n /** Domain overrides. Any omitted bound is derived from the data. */\n xMin?: number\n xMax?: number\n yMin?: number\n yMax?: number\n}\n\nexport interface ScatterProps extends Omit<ViewProps, 'children'> {\n data: ScatterDatum[]\n /** Layout box. Required — the plot fills exactly this area. */\n width: number\n height: number\n /** Axis labels and optional domain overrides. */\n axis?: ScatterAxis\n /**\n * Draw the y = 1 − x \"main sequence\" reference line (NDepend idiom, where\n * distance from the diagonal measures the zone of pain / zone of uselessness).\n */\n diagonal?: boolean\n /** Fires with a point's id on press. */\n onPress?: (id: string) => void\n /** Draws a highlight ring on the matching point. */\n selectedId?: string\n className?: string\n}\n\n/** Titan categorical fallback palette (data-1..data-8). */\nconst PALETTE = [\n '#5B9BD5', '#14B8A6', '#F4A736', '#F83030',\n '#823CA0', '#D4A520', '#406D87', '#43C6B7',\n]\n\nconst GRID_LINE = 'rgba(255,255,255,0.07)'\nconst AXIS_LINE = 'rgba(255,255,255,0.18)'\nconst DIAGONAL_LINE = 'rgba(255,255,255,0.28)'\nconst DEFAULT_R = 6\n\nconst PLOT_LEFT = 40\nconst PLOT_RIGHT = 12\nconst PLOT_TOP = 12\nconst PLOT_BOTTOM = 34\nconst TICK_COUNT = 5\n\ninterface Domain {\n min: number\n max: number\n}\n\n/** Derive a padded [min, max] from values, honoring explicit overrides. */\nfunction domainOf(values: number[], min?: number, max?: number): Domain {\n const lo = min ?? (values.length ? Math.min(...values) : 0)\n const hi = max ?? (values.length ? Math.max(...values) : 1)\n if (hi > lo) return { min: lo, max: hi }\n const pad = Math.abs(hi) * 0.1 || 0.5\n return { min: lo - pad, max: hi + pad }\n}\n\n/** Evenly spaced tick values across a domain. */\nfunction ticksOf(d: Domain, count: number): number[] {\n return Array.from({ length: count }, (_, i) => d.min + ((d.max - d.min) * i) / (count - 1))\n}\n\nfunction formatTick(v: number): string {\n if (Number.isInteger(v)) return `${v}`\n return v.toFixed(Math.abs(v) < 1 ? 2 : 1)\n}\n\n/** A single straight segment drawn as one rotated View (SVG-free). */\nfunction LineSegment({\n x1, y1, x2, y2, color, testID,\n}: { x1: number; y1: number; x2: number; y2: number; color: string; testID: string }) {\n const dx = x2 - x1\n const dy = y2 - y1\n const length = Math.sqrt(dx * dx + dy * dy)\n const angle = Math.atan2(dy, dx) * (180 / Math.PI)\n return (\n <View\n testID={testID}\n accessibilityElementsHidden\n style={{\n position: 'absolute',\n left: x1,\n top: y1,\n width: length,\n height: 0,\n borderTopWidth: 1,\n borderStyle: 'dashed',\n borderTopColor: color,\n transformOrigin: '0 0',\n transform: [{ rotate: `${angle}deg` }],\n }}\n />\n )\n}\n\n/**\n * SVG-free scatter / bubble plot (absolutely-positioned Views), matching the\n * codebase's chart convention so it renders identically on web and native. Used\n * for \"main-sequence\" plots (instability × abstractness) via the `diagonal`\n * reference line, or any two metrics. Positions and bubble sizes are computed\n * from the data; color and labels are caller-supplied.\n */\nexport function Scatter({\n data,\n width,\n height,\n axis = {},\n diagonal = false,\n onPress,\n selectedId,\n className,\n ...props\n}: ScatterProps) {\n const innerW = Math.max(1, width - PLOT_LEFT - PLOT_RIGHT)\n const innerH = Math.max(1, height - PLOT_TOP - PLOT_BOTTOM)\n const xd = domainOf(data.map((d) => d.x), axis.xMin, axis.xMax)\n const yd = domainOf(data.map((d) => d.y), axis.yMin, axis.yMax)\n\n const toX = (x: number) => PLOT_LEFT + ((x - xd.min) / (xd.max - xd.min)) * innerW\n const toY = (y: number) => PLOT_TOP + (1 - (y - yd.min) / (yd.max - yd.min)) * innerH\n\n const points = data.map((d, i) => ({\n datum: d,\n cx: toX(d.x),\n cy: toY(d.y),\n radius: d.r ?? DEFAULT_R,\n color: d.color ?? PALETTE[i % PALETTE.length],\n }))\n\n const ariaLabel = `Scatter plot of ${axis.xLabel ?? 'x'} versus ${axis.yLabel ?? 'y'}, ${data.length} point${data.length === 1 ? '' : 's'}`\n\n return (\n <View className={cn('relative', className)} style={{ width, height }} {...props}>\n {/* Non-interactive labelled canvas: grid, axes, ticks, diagonal. */}\n <View\n accessibilityRole=\"image\"\n accessibilityLabel={ariaLabel}\n testID=\"scatter-canvas\"\n style={{ position: 'absolute', top: 0, left: 0, width, height, overflow: 'hidden' }}\n >\n {ticksOf(yd, TICK_COUNT).map((t, i) => {\n const y = toY(t)\n return (\n <View\n key={`y-${i}`}\n accessibilityElementsHidden\n testID=\"scatter-gridline-y\"\n style={{ position: 'absolute', left: PLOT_LEFT, width: innerW, top: y, height: 1, backgroundColor: GRID_LINE }}\n >\n <Text className=\"text-[9px] text-text-tertiary\" style={{ position: 'absolute', left: -PLOT_LEFT, top: -6, width: PLOT_LEFT - 6, textAlign: 'right' }}>\n {formatTick(t)}\n </Text>\n </View>\n )\n })}\n {ticksOf(xd, TICK_COUNT).map((t, i) => {\n const x = toX(t)\n return (\n <View\n key={`x-${i}`}\n accessibilityElementsHidden\n testID=\"scatter-gridline-x\"\n style={{ position: 'absolute', top: PLOT_TOP, height: innerH, left: x, width: 1, backgroundColor: GRID_LINE }}\n >\n <Text className=\"text-[9px] text-text-tertiary\" style={{ position: 'absolute', top: innerH + 4, left: -16, width: 32, textAlign: 'center' }}>\n {formatTick(t)}\n </Text>\n </View>\n )\n })}\n\n {/* Axis frame (left + bottom). */}\n <View accessibilityElementsHidden style={{ position: 'absolute', left: PLOT_LEFT, top: PLOT_TOP, width: 1, height: innerH, backgroundColor: AXIS_LINE }} />\n <View accessibilityElementsHidden style={{ position: 'absolute', left: PLOT_LEFT, top: PLOT_TOP + innerH, width: innerW, height: 1, backgroundColor: AXIS_LINE }} />\n\n {diagonal && (\n <LineSegment\n testID=\"scatter-diagonal\"\n color={DIAGONAL_LINE}\n x1={toX(xd.min)}\n y1={toY(1 - xd.min)}\n x2={toX(xd.max)}\n y2={toY(1 - xd.max)}\n />\n )}\n\n {axis.xLabel && (\n <Text testID=\"scatter-x-label\" className=\"text-[10px] font-semibold text-text-secondary\" style={{ position: 'absolute', left: PLOT_LEFT, width: innerW, bottom: 2, textAlign: 'center' }}>\n {axis.xLabel}\n </Text>\n )}\n {axis.yLabel && (\n <Text testID=\"scatter-y-label\" className=\"text-[10px] font-semibold text-text-secondary\" style={{ position: 'absolute', left: -innerH / 2 + 6, top: PLOT_TOP + innerH / 2, width: innerH, textAlign: 'center', transformOrigin: '50% 50%', transform: [{ rotate: '-90deg' }] }}>\n {axis.yLabel}\n </Text>\n )}\n </View>\n\n {/* Interactive point overlay (kept out of the image-role canvas). */}\n <View style={{ position: 'absolute', top: 0, left: 0, width, height }} testID=\"scatter-points\">\n {points.map((p) => {\n const selected = p.datum.id === selectedId\n const showLabel = p.datum.label && (selected || p.radius >= 10)\n return (\n <Pressable\n key={p.datum.id}\n testID={`scatter-point-${p.datum.id}`}\n accessibilityRole=\"button\"\n accessibilityLabel={p.datum.label ?? p.datum.id}\n onPress={() => onPress?.(p.datum.id)}\n style={{\n position: 'absolute',\n left: p.cx - p.radius,\n top: p.cy - p.radius,\n width: p.radius * 2,\n height: p.radius * 2,\n borderRadius: p.radius,\n backgroundColor: p.color,\n opacity: selected ? 1 : 0.82,\n borderWidth: selected ? 2 : 0,\n borderColor: '#ffffff',\n }}\n >\n {showLabel && (\n <Text\n numberOfLines={1}\n className=\"text-[9px] font-semibold text-text-primary\"\n style={{ position: 'absolute', left: p.radius * 2 + 3, top: p.radius - 6, width: 80 }}\n >\n {p.datum.label}\n </Text>\n )}\n </Pressable>\n )\n })}\n </View>\n </View>\n )\n}\n","import { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface GaugeThreshold {\n /** Band start, in the gauge's value units. */\n value: number\n /** Color applied to filled segments at or above this band. */\n color: string\n}\n\nexport interface GaugeProps extends Omit<ViewProps, 'children'> {\n /** Current value. Clamped to [min, max]. */\n value: number\n min?: number\n max?: number\n /** Diameter in px. */\n size?: number\n /** Caption under the big number. */\n label?: string\n /** Unit suffix beside the big number (e.g. \"%\"). */\n unit?: string\n /**\n * Band coloring, ascending by `value`. A filled segment takes the color of\n * the highest band whose `value` it reaches. Defaults to Titan status tokens\n * (red < 60, amber < 80, green ≥ 80 on a 0–100 scale).\n */\n thresholds?: GaugeThreshold[]\n /** Single-color override for filled segments (ignores `thresholds`). */\n color?: string\n className?: string\n}\n\nconst STATUS_SUCCESS = '#14B8A6'\nconst STATUS_WARNING = '#FFB020'\nconst STATUS_ERROR = '#D14343'\nconst TRACK = 'rgba(255,255,255,0.08)'\n\n/** Titan status-token bands for a 0–100 score. */\nconst DEFAULT_THRESHOLDS: GaugeThreshold[] = [\n { value: 0, color: STATUS_ERROR },\n { value: 60, color: STATUS_WARNING },\n { value: 80, color: STATUS_SUCCESS },\n]\n\nconst ARC_START = 135\nconst ARC_SWEEP = 270\nconst SEGMENTS = 40\n\nfunction clamp01(n: number): number {\n if (Number.isNaN(n)) return 0\n return Math.max(0, Math.min(1, n))\n}\n\nfunction formatValue(v: number): string {\n return Number.isInteger(v) ? `${v}` : v.toFixed(1)\n}\n\n/** Color of the highest band whose start value the fraction reaches. */\nfunction bandColor(fraction: number, bands: GaugeThreshold[], min: number, max: number): string {\n const value = min + fraction * (max - min)\n const sorted = [...bands].sort((a, b) => a.value - b.value)\n let color = sorted[0]?.color ?? STATUS_SUCCESS\n for (const band of sorted) {\n if (value >= band.value) color = band.color\n }\n return color\n}\n\ninterface Tick {\n key: number\n left: number\n top: number\n rotate: string\n color: string\n}\n\n/** Position + color each radial segment of the arc. */\nfunction buildTicks(fill: number, size: number, activeColor: (f: number) => string): Tick[] {\n const center = size / 2\n const radius = center - size * 0.08\n return Array.from({ length: SEGMENTS }, (_, i) => {\n const fraction = (i + 0.5) / SEGMENTS\n const deg = ARC_START + fraction * ARC_SWEEP\n const rad = (deg * Math.PI) / 180\n return {\n key: i,\n left: center + radius * Math.cos(rad),\n top: center + radius * Math.sin(rad),\n rotate: `${deg - 90}deg`,\n color: fraction <= fill ? activeColor(fraction) : TRACK,\n }\n })\n}\n\n/**\n * SVG-free radial gauge (absolutely-positioned segment Views), matching the\n * codebase's chart convention so it renders identically on web and native. The\n * 270° arc fills with band colors as the value rises; the center reuses the\n * Metric visual language (large bold value + unit + caption). Ideal for a 0–100\n * health / quality score.\n */\nexport function Gauge({\n value,\n min = 0,\n max = 100,\n size = 160,\n label,\n unit,\n thresholds = DEFAULT_THRESHOLDS,\n color,\n className,\n ...props\n}: GaugeProps) {\n const span = max - min || 1\n const fill = clamp01((value - min) / span)\n const activeColor = (f: number) => color ?? bandColor(f, thresholds, min, max)\n const ticks = buildTicks(fill, size, activeColor)\n const displayColor = color ?? bandColor(fill, thresholds, min, max)\n const tickLength = size * 0.11\n const tickThickness = Math.max(2, (size * 0.9) / SEGMENTS)\n\n const ariaLabel = `${label ? `${label}: ` : ''}${formatValue(value)}${unit ?? ''} of ${formatValue(max)}`\n\n return (\n <View\n className={cn('relative', className)}\n style={{ width: size, height: size }}\n accessibilityRole=\"image\"\n accessibilityLabel={ariaLabel}\n testID=\"gauge\"\n {...props}\n >\n {ticks.map((t) => (\n <View\n key={t.key}\n accessibilityElementsHidden\n testID=\"gauge-segment\"\n style={{\n position: 'absolute',\n left: t.left - tickThickness / 2,\n top: t.top - tickLength / 2,\n width: tickThickness,\n height: tickLength,\n borderRadius: tickThickness / 2,\n backgroundColor: t.color,\n transform: [{ rotate: t.rotate }],\n }}\n />\n ))}\n\n {/* Center readout — Metric visual language. */}\n <View style={{ position: 'absolute', top: 0, left: 0, width: size, height: size }} className=\"items-center justify-center\">\n <View className=\"flex-row items-baseline gap-0.5\">\n <Text testID=\"gauge-value\" className=\"text-3xl font-bold\" style={{ color: displayColor }}>\n {formatValue(value)}\n </Text>\n {unit && <Text className=\"text-sm text-text-tertiary\">{unit}</Text>}\n </View>\n {label && (\n <Text testID=\"gauge-label\" className=\"text-xs text-text-secondary mt-1\">\n {label}\n </Text>\n )}\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/alert/Alert.tsx","../src/components/ui/button/Button.tsx","../src/components/ui/input/Input.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/BaseBadge.tsx","../src/components/custom/Workout/WeightBadge.tsx","../src/components/custom/Workout/PrBadge.tsx","../src/components/custom/Workout/PlaceholderStrip.tsx","../src/utils/workout-format.ts","../src/components/custom/Workout/TempoDisplay.tsx","../src/utils/colors.ts","../src/components/custom/Workout/TempoBar.tsx","../src/components/custom/Workout/DeviationBar.tsx","../src/components/custom/Workout/IntensityBar.tsx","../src/components/custom/Workout/WorkoutPill.tsx","../src/components/custom/Workout/VelocityStrip.tsx","../src/components/custom/Workout/MuscleGroupChip.tsx","../src/components/custom/Workout/SetRow.tsx","../src/components/custom/Workout/InputBar.tsx","../src/components/custom/Workout/RestTimer.tsx","../src/components/custom/Workout/ExerciseCard.tsx","../src/components/custom/Workout/SupersetWrapper.tsx","../src/components/custom/Workout/MesoProgressBar.tsx","../src/components/custom/Workout/WeekRow.tsx","../src/components/custom/Workout/WorkoutCard.tsx","../src/components/custom/Workout/MesoCard.tsx","../src/components/custom/Workout/PrHistoryModal.tsx","../src/components/custom/Workout/ReadinessCheck.tsx","../src/components/custom/Workout/StrengthTrendChart.tsx","../src/components/custom/Workout/CapacityBandChart.tsx","../src/components/custom/Workout/ProgramPlanningPage.tsx","../src/components/custom/Workout/ExerciseDetailPage.tsx","../src/components/custom/Workout/ActiveWorkoutPage.tsx","../src/components/custom/Treemap/Treemap.tsx","../src/components/custom/Scatter/Scatter.tsx","../src/components/custom/Gauge/Gauge.tsx","../src/utils/form.ts"],"names":["Button","Pressable","Text","sizeStyles","variantStyles","forwardRef","Input","View","PasswordInput","ActivityIndicator","styles","React","Checkbox","Switch","RNModal","createContext","useState","useContext","ScrollView","colorStyles","arrowStyles","useRef","placementStyles","textSizeStyles","useCallback","Platform","gapStyles","Modal","formatValue","t","useEffect","TextInput","alignStyles","useMemo","statusStyles","sizeConfig","Animated","Easing","BRAND_PRIMARY","formatAccessibilityLabel","BORDER_DEFAULT","Star","STATUS_SUCCESS","STATUS_ERROR","STATUS_WARNING","formatDate","toX","toY","Breadcrumbs","PALETTE","GRID_LINE","PLOT_LEFT","clamp01"],"mappings":"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","file":"index.mjs","sourcesContent":["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","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","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',\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'\n : 'border-r border-border',\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', 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',\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',\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 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',\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',\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\">\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', 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',\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',\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',\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 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 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 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 role=\"table\" 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 role=\"rowgroup\"\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 role=\"rowgroup\" 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 role=\"row\"\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 const ariaSort = isSorted\n ? sortDirection === 'asc'\n ? 'ascending'\n : sortDirection === 'desc'\n ? 'descending'\n : 'none'\n : 'none'\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 // columnheader cell wraps the sort button so it carries proper table\n // semantics (role + aria-sort) while the inner control keeps its button role.\n return (\n <View\n role=\"columnheader\"\n aria-sort={ariaSort}\n style={width ? { width } : { flex: 1 }}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Sort by ${children}`}\n onPress={handlePress}\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 </View>\n )\n }\n\n return (\n <View\n role=\"columnheader\"\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 role=\"cell\"\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'\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'\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 { useState, type ReactNode } from 'react'\nimport { View, Pressable, Animated, type ViewProps } from 'react-native'\n\nexport type BaseBadgeVariant = 'plain' | 'pr'\nexport type BaseBadgeSize = 'sm' | 'md' | 'lg'\n\nexport interface BaseBadgeProps extends ViewProps {\n /** Visual variant — plain (neutral) or pr (brand-primary-subtle) */\n variant?: BaseBadgeVariant\n /** Size variant */\n size?: BaseBadgeSize\n /** Optional icon rendered left of children; hidden from a11y tree */\n icon?: ReactNode\n onPress?: () => void\n className?: string\n children?: ReactNode\n}\n\nexport const baseBadgeSizeConfig: Record<\n BaseBadgeSize,\n { fontSize: number; paddingH: number; paddingV: number; iconSize: number }\n> = {\n sm: { fontSize: 9, paddingH: 6, paddingV: 2, iconSize: 10 },\n md: { fontSize: 10, paddingH: 8, paddingV: 2, iconSize: 12 },\n lg: { fontSize: 12, paddingH: 10, paddingV: 4, iconSize: 14 },\n}\n\nconst variantColors: Record<\n BaseBadgeVariant,\n { backgroundColor: string; borderColor: string }\n> = {\n plain: { backgroundColor: '#1C1C1C', borderColor: '#1F1F1F' },\n pr: {\n backgroundColor: 'rgba(255, 121, 0, 0.12)',\n borderColor: 'rgba(255, 121, 0, 0.12)',\n },\n}\n\nexport function BaseBadge({\n variant = 'plain',\n size = 'md',\n icon,\n onPress,\n className,\n children,\n ...props\n}: BaseBadgeProps) {\n const [scaleAnim] = useState(() => new Animated.Value(1))\n const config = baseBadgeSizeConfig[size]\n const colors = variantColors[variant]\n\n const handlePressIn = () => {\n Animated.timing(scaleAnim, {\n toValue: 0.97,\n duration: 150,\n useNativeDriver: true,\n }).start()\n }\n\n const handlePressOut = () => {\n Animated.timing(scaleAnim, {\n toValue: 1,\n duration: 150,\n useNativeDriver: true,\n }).start()\n }\n\n const badge = (\n <View\n className={className}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 3,\n // borderRadius 2 is intentional per workout-tokens.ts (squared-off pill)\n borderRadius: 2,\n borderWidth: 1,\n borderColor: colors.borderColor,\n backgroundColor: colors.backgroundColor,\n paddingHorizontal: config.paddingH,\n paddingVertical: config.paddingV,\n }}\n {...props}\n >\n {icon != null && (\n <View accessibilityElementsHidden testID=\"base-badge-icon\">\n {icon}\n </View>\n )}\n {children}\n </View>\n )\n\n if (onPress) {\n return (\n <Animated.View style={{ transform: [{ scale: scaleAnim }] }}>\n <Pressable\n onPress={onPress}\n onPressIn={handlePressIn}\n onPressOut={handlePressOut}\n accessibilityRole=\"button\"\n accessibilityLabel={props.accessibilityLabel}\n testID=\"base-badge-pressable\"\n >\n {badge}\n </Pressable>\n </Animated.View>\n )\n }\n\n return badge\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { Text } from 'react-native'\nimport { Dumbbell } from 'lucide-react'\nimport {\n BaseBadge,\n baseBadgeSizeConfig,\n type BaseBadgeSize,\n type BaseBadgeProps,\n} from './BaseBadge'\n\nexport type WeightBadgeSize = BaseBadgeSize\n\nexport interface WeightBadgeProps\n extends Omit<BaseBadgeProps, 'variant' | 'icon' | 'children'> {\n value: number\n unit?: 'lbs' | 'kg'\n /**\n * When given, this is an N-rep max (e.g. \"5RM\"). When omitted, it is an\n * estimated 1RM / e1RM.\n */\n reps?: number\n /** Percentage delta from previous mesocycle */\n delta?: number\n isPr?: boolean\n /** Show the weight icon */\n showIcon?: boolean\n size?: WeightBadgeSize\n onPress?: () => void\n className?: string\n}\n\nexport function WeightBadge({\n value,\n unit = 'lbs',\n reps,\n delta,\n isPr,\n showIcon = true,\n size = 'md',\n onPress,\n className,\n ...props\n}: WeightBadgeProps) {\n const config = baseBadgeSizeConfig[size]\n const textColor = isPr ? '#FF7900' : '#9CA3AF'\n // Dumbbell reads clearly as a weight/strength metric and is unit-agnostic\n // across estimated-1RM and N-rep-max contexts (vs. TrendingUp which implies\n // change/trend rather than a load value).\n const iconColor = textColor\n\n const repMaxClause = reps != null ? `${reps} rep max` : 'Estimated one rep max'\n const deltaLabel =\n delta != null ? `, ${delta >= 0 ? '+' : ''}${delta}% change` : ''\n const fullLabel = `${repMaxClause}: ${value} ${unit}${deltaLabel}`\n\n return (\n <BaseBadge\n variant={isPr ? 'pr' : 'plain'}\n size={size}\n onPress={onPress}\n className={className}\n icon={\n showIcon ? (\n <Dumbbell size={config.iconSize} color={iconColor} strokeWidth={2} />\n ) : undefined\n }\n accessibilityLabel={fullLabel}\n testID=\"weight-badge\"\n {...props}\n >\n <Text\n style={{\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '600',\n fontSize: config.fontSize,\n color: textColor,\n }}\n >\n {isPr ? '✳ ' : ''}\n {value} {unit}\n </Text>\n {reps != null && (\n <Text\n style={{\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '600',\n fontSize: config.fontSize,\n marginLeft: 2,\n color: textColor,\n opacity: 0.7,\n }}\n testID=\"weight-badge-repmax\"\n >\n {reps}RM\n </Text>\n )}\n {delta != null && (\n <Text\n style={{\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontSize: config.fontSize,\n marginLeft: 4,\n color: delta >= 0 ? '#4caf50' : '#ef5350',\n }}\n testID=\"weight-badge-delta\"\n >\n {delta >= 0 ? '+' : ''}\n {delta}%\n </Text>\n )}\n </BaseBadge>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState } from 'react'\nimport { View, Text, Animated, Easing, type ViewProps } from 'react-native'\nimport { Star } from 'lucide-react'\nimport { BaseBadge } from './BaseBadge'\n\nexport type PRType = 'e1rm' | 'weight' | 'reps' | 'volume' | 'velocity'\n\nexport interface PrBadgeProps extends ViewProps {\n /** PR type determines auto-generated label */\n type?: PRType\n /** Display label (e.g., \"PR e1RM\", \"PR 5RM\"). Auto-generated from type if omitted. */\n label?: string\n /** Show only the star icon, no text label */\n compact?: boolean\n /** Trigger pop animation on mount */\n animate?: boolean\n className?: string\n}\n\nconst typeLabels: Record<PRType, string> = {\n e1rm: 'PR e1RM',\n weight: 'PR Weight',\n reps: 'PR Reps',\n volume: 'PR Volume',\n velocity: 'PR Velocity',\n}\n\nexport function PrBadge({\n type = 'e1rm',\n label: labelProp,\n compact = false,\n animate = true,\n className,\n ...props\n}: PrBadgeProps) {\n const resolvedLabel = labelProp ?? typeLabels[type]\n const [scale] = useState(() => new Animated.Value(animate ? 0.8 : 1))\n const [opacity] = useState(() => new Animated.Value(animate ? 0 : 1))\n\n useEffect(() => {\n if (!animate) return\n\n // HTML demo uses a 3-keyframe sequence; bezier approximation is close enough for native\n Animated.parallel([\n Animated.timing(scale, {\n toValue: 1,\n duration: 400,\n easing: Easing.bezier(0.34, 1.56, 0.64, 1),\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 1,\n duration: 400,\n easing: Easing.bezier(0.34, 1.56, 0.64, 1),\n useNativeDriver: true,\n }),\n ]).start()\n }, [animate, scale, opacity])\n\n const badge = compact ? (\n <View\n className={className}\n accessibilityRole=\"image\"\n accessibilityLabel={`Personal record: ${resolvedLabel}`}\n testID=\"pr-badge-star\"\n {...props}\n >\n <Star size={14} color=\"#FF7900\" fill=\"#FF7900\" strokeWidth={2} />\n </View>\n ) : (\n <BaseBadge\n variant=\"pr\"\n className={className}\n accessibilityLabel={`Personal record: ${resolvedLabel}`}\n {...props}\n >\n <Text\n style={{\n fontSize: 10,\n color: '#FF7900',\n fontWeight: '700',\n fontFamily: 'Inter, sans-serif',\n }}\n >\n {'\\u2605'} {resolvedLabel}\n </Text>\n </BaseBadge>\n )\n\n if (animate) {\n return (\n <Animated.View\n style={{ transform: [{ scale }], opacity }}\n testID=\"pr-badge-animated\"\n >\n {badge}\n </Animated.View>\n )\n }\n\n return badge\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface PlaceholderStripProps extends ViewProps {\n width?: number | string\n /** Render as single solid strip or segmented mini-strip */\n mode?: 'single' | 'segmented'\n /** Number of segments when mode is 'segmented' */\n segments?: number\n className?: string\n}\n\nfunction SingleStrip({\n width,\n className,\n ...props\n}: Omit<PlaceholderStripProps, 'mode' | 'segments'>) {\n return (\n <View\n className={cn('border-border-strong', className)}\n style={[\n {\n height: 3,\n backgroundColor: 'transparent',\n borderWidth: 1,\n borderStyle: 'dashed',\n borderRadius: 1,\n opacity: 0.5,\n },\n width != null ? { width: width as number } : { flex: 1 },\n ]}\n accessibilityRole=\"image\"\n accessibilityLabel=\"Planned set, not yet completed\"\n testID=\"placeholder-strip\"\n {...props}\n />\n )\n}\n\nfunction SegmentedStrip({\n segments = 3,\n width,\n className,\n ...props\n}: Omit<PlaceholderStripProps, 'mode'>) {\n return (\n <View\n className={cn('flex-row', className)}\n style={[\n { height: 3, gap: 2, opacity: 0.5 },\n width != null ? { width: width as number } : { flex: 1 },\n ]}\n accessibilityRole=\"image\"\n accessibilityLabel=\"Planned set, not yet completed\"\n testID=\"placeholder-strip\"\n {...props}\n >\n {Array.from({ length: segments }, (_, i) => (\n <View\n key={i}\n className=\"border-border-strong\"\n style={{\n flex: 1,\n height: 3,\n backgroundColor: 'transparent',\n borderWidth: 1,\n borderStyle: 'dashed',\n borderRadius: 1,\n minWidth: 4,\n }}\n accessibilityElementsHidden\n testID=\"placeholder-segment\"\n />\n ))}\n </View>\n )\n}\n\nexport function PlaceholderStrip({\n mode = 'single',\n segments,\n ...props\n}: PlaceholderStripProps) {\n if (mode === 'segmented') {\n return <SegmentedStrip segments={segments} {...props} />\n }\n return <SingleStrip {...props} />\n}\n","// Font mapping context: presentation-only helpers, no rendering.\nimport { WORKOUT_TOKENS } from '../theme/workout-tokens'\n\n/**\n * Presentation helpers for workout metrics.\n *\n * The data layer (`@voltras/workout-analytics` view-model derivations) supplies\n * EXACT, unrounded values; these turn them into the rounded / banded / formatted\n * forms a view renders. Keeping display munging here — in the design system, not\n * the analytics layer — is the render half of the model↔render split: one view\n * can round while another (or a hover) shows the exact value from the same real\n * data. Workout components consume these so the rules live in one place.\n */\n\n/** Round an exact RPE onto its conventional 0.5 granularity for display. */\nexport function roundRpe(rpe: number): number {\n return Math.round(rpe * 2) / 2\n}\n\n/**\n * Color band for an RPE on the canonical performance scale. Higher RPE = harder\n * = red (direction inverted vs velocity, which shares the same scale). Bands:\n * `<7` green, `7–8.5` yellow, `8.5–9.5` orange, `≥9.5` red.\n */\nexport function rpeColor(rpe: number): string {\n if (rpe >= 9.5) return WORKOUT_TOKENS.scale.red\n if (rpe >= 8.5) return WORKOUT_TOKENS.scale.orange\n if (rpe >= 7) return WORKOUT_TOKENS.scale.yellow\n return WORKOUT_TOKENS.scale.green\n}\n\n/** Round a weight or e1RM to a whole unit for compact display. */\nexport function roundWeight(weight: number): number {\n return Math.round(weight)\n}\n\n/** Format an exact velocity (m/s) to the 2-dp string shown on the velocity strip. */\nexport function formatVelocity(velocity: number): string {\n return velocity.toFixed(2)\n}\n\n/** Round an exact tempo tuple (seconds) to 1 dp per phase for display. */\nexport function roundTempo(\n tempo: [number, number, number, number]\n): [number, number, number, number] {\n return tempo.map((v) => Math.round(v * 10) / 10) as [number, number, number, number]\n}\n\n/** Signed percentage label for a deviation ratio, e.g. `+9%` / `-5%` / `0%`. */\nexport function formatSignedPct(ratio: number): string {\n const pct = Math.round(ratio * 100)\n return `${pct > 0 ? '+' : ''}${pct}%`\n}\n\n/** Structured prescription for the active exercise (from the plan). */\nexport interface PrescriptionInput {\n repsLow?: number\n repsHigh?: number\n weightLbs?: number\n rpe?: number\n}\n\n/**\n * Human prescription string, e.g. `\"8–10 @ 62 lb · RPE 8\"`. `null` when there is\n * nothing to show. Presentation-only: the plan supplies the numbers, this shapes\n * the label.\n */\nexport function formatPrescription(p: PrescriptionInput | null | undefined): string | null {\n if (p == null) return null\n let reps: string | null = null\n if (p.repsLow != null && p.repsHigh != null) {\n reps = p.repsLow === p.repsHigh ? `${p.repsLow}` : `${p.repsLow}–${p.repsHigh}`\n } else if (p.repsLow != null) {\n reps = `${p.repsLow}`\n }\n const weight = p.weightLbs != null ? `${p.weightLbs} lb` : null\n const head = [reps, weight].filter((s): s is string => s != null).join(' @ ')\n const rpe = p.rpe != null ? `RPE ${p.rpe}` : null\n const full = [head.length > 0 ? head : null, rpe]\n .filter((s): s is string => s != null)\n .join(' · ')\n return full.length > 0 ? full : null\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useState, useCallback } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { roundTempo } from '../../../utils/workout-format'\n\nexport interface TempoDisplayProps extends ViewProps {\n /** Tempo values: [eccentric, pauseBottom, concentric, pauseTop] in seconds */\n tempo: [number, number, number, number]\n size?: 'sm' | 'md'\n /** Colored phases or mono (all gray) */\n colored?: boolean\n /** Show info tooltip on press */\n showInfo?: boolean\n onPress?: () => void\n className?: string\n}\n\nconst INTER = 'Inter, sans-serif'\nconst TEXT_TERTIARY = '#6B7280'\n\n// Phase colors: [eccentric, pauseBottom, concentric, pauseTop]\nconst phaseColors = {\n eccentric: '#FFB020', // status-warning (amber)\n pauseBottom: TEXT_TERTIARY,\n concentric: '#14B8A6', // status-success (teal)\n pauseTop: TEXT_TERTIARY,\n dash: TEXT_TERTIARY,\n}\n\nfunction TempoValue({\n value,\n color,\n fontSize,\n}: {\n value: number\n color: string\n fontSize: number\n}) {\n return (\n <Text\n style={{\n fontFamily: INTER,\n fontSize,\n color,\n fontWeight: '600',\n letterSpacing: 1,\n }}\n >\n {value}\n </Text>\n )\n}\n\nfunction TempoSeparator({ color, fontSize }: { color: string; fontSize: number }) {\n return (\n <Text\n style={{\n fontFamily: INTER,\n fontSize,\n color,\n fontWeight: '600',\n letterSpacing: 1,\n }}\n >\n -\n </Text>\n )\n}\n\nexport function TempoDisplay({\n tempo,\n size = 'md',\n colored = true,\n showInfo = true,\n onPress,\n className,\n ...props\n}: TempoDisplayProps) {\n const [showTooltip, setShowTooltip] = useState(false)\n // Round exact (unrounded) tempo seconds to the 1-dp display granularity.\n const [eccentric, pauseBottom, concentric, pauseTop] = roundTempo(tempo)\n const isSm = size === 'sm'\n const fontSize = isSm ? 9 : 11\n const monoColor = TEXT_TERTIARY\n\n const handlePress = useCallback(() => {\n if (onPress) {\n onPress()\n }\n if (showInfo) {\n setShowTooltip((prev) => !prev)\n }\n }, [onPress, showInfo])\n\n const content = (\n <View\n className={className}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: '#1C1C1C',\n paddingHorizontal: isSm ? 6 : 8,\n paddingVertical: 3,\n borderRadius: 4,\n }}\n {...props}\n >\n <Text\n style={{\n fontFamily: INTER,\n fontSize: 9,\n fontWeight: '500',\n color: TEXT_TERTIARY,\n letterSpacing: 0.5,\n textTransform: 'uppercase',\n marginRight: 6,\n }}\n >\n TEMPO\n </Text>\n <View style={{ flexDirection: 'row' }} testID=\"tempo-value\">\n {colored ? (\n <>\n <TempoValue value={eccentric} color={phaseColors.eccentric} fontSize={fontSize} />\n <TempoSeparator color={phaseColors.dash} fontSize={fontSize} />\n <TempoValue value={pauseBottom} color={phaseColors.pauseBottom} fontSize={fontSize} />\n <TempoSeparator color={phaseColors.dash} fontSize={fontSize} />\n <TempoValue value={concentric} color={phaseColors.concentric} fontSize={fontSize} />\n <TempoSeparator color={phaseColors.dash} fontSize={fontSize} />\n <TempoValue value={pauseTop} color={phaseColors.pauseTop} fontSize={fontSize} />\n </>\n ) : (\n <Text\n style={{\n fontFamily: INTER,\n fontSize,\n color: monoColor,\n fontWeight: '600',\n letterSpacing: 1,\n }}\n >\n {eccentric}-{pauseBottom}-{concentric}-{pauseTop}\n </Text>\n )}\n </View>\n </View>\n )\n\n return (\n <Pressable\n accessibilityLabel={`Tempo: ${eccentric} second eccentric, ${pauseBottom} second pause, ${concentric} second concentric, ${pauseTop} second pause`}\n accessibilityRole=\"button\"\n onPress={handlePress}\n testID=\"tempo-display\"\n >\n {content}\n {showTooltip && (\n <View\n style={{\n position: 'absolute',\n bottom: '100%',\n left: '50%',\n transform: [{ translateX: '-50%' as unknown as number }],\n marginBottom: 8,\n zIndex: 20,\n alignItems: 'center',\n }}\n testID=\"tempo-tooltip\"\n >\n <View\n style={{\n backgroundColor: '#191919',\n borderRadius: 6,\n paddingVertical: 8,\n paddingHorizontal: 12,\n borderWidth: 1,\n borderColor: '#2C2C2C',\n }}\n >\n <Text style={{ fontSize: 10, lineHeight: 16, color: '#9CA3AF', fontFamily: INTER }}>\n Eccentric: {eccentric}s\n </Text>\n <Text style={{ fontSize: 10, lineHeight: 16, color: '#9CA3AF', fontFamily: INTER }}>\n Pause (bottom): {pauseBottom}s\n </Text>\n <Text style={{ fontSize: 10, lineHeight: 16, color: '#9CA3AF', fontFamily: INTER }}>\n Concentric: {concentric}s\n </Text>\n <Text style={{ fontSize: 10, lineHeight: 16, color: '#9CA3AF', fontFamily: INTER }}>\n Pause (top): {pauseTop}s\n </Text>\n </View>\n <View\n style={{\n width: 0,\n height: 0,\n borderLeftWidth: 5,\n borderRightWidth: 5,\n borderTopWidth: 5,\n borderLeftColor: 'transparent',\n borderRightColor: 'transparent',\n borderTopColor: '#2C2C2C',\n }}\n />\n </View>\n )}\n </Pressable>\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","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, type ViewProps } from 'react-native'\nimport { getSemanticColors } from '../../../theme/tokens/semantic'\nimport { alpha } from '../../../utils/colors'\n\nconst t = getSemanticColors('dark')\n\n/**\n * Titan-local phase key. Consumers map their own movement-phase enum onto this\n * presentational key at the call site — TempoBar owns rendering only.\n */\nexport type TempoPhaseKey = 'concentric' | 'hold' | 'eccentric'\n\n/** Pacing tuning shared with the fill/pacing helpers below. */\nexport const TEMPO_PACING = {\n behindThresholdPct: 0.15,\n minPhaseDurationMs: 500,\n} as const\n\nexport type TempoPacingState = 'none' | 'on-pace' | 'behind'\n\n/**\n * Classify how a phase's elapsed time tracks against its target duration.\n * `none` when there is no meaningful target; `behind` once elapsed exceeds the\n * target by more than the behind threshold; `on-pace` otherwise.\n */\nexport function getTempoPacingState(\n elapsedMs: number,\n targetMs: number | null,\n): TempoPacingState {\n if (!targetMs || targetMs < TEMPO_PACING.minPhaseDurationMs) return 'none'\n const ratio = elapsedMs / targetMs\n if (ratio > 1 + TEMPO_PACING.behindThresholdPct) return 'behind'\n return 'on-pace'\n}\n\n/** Fill percentage (0–100) for the active phase; full when no target is set. */\nexport function getTempoFillPct(elapsedMs: number, targetMs: number | null): number {\n if (!targetMs) return 100\n return Math.min(100, (elapsedMs / targetMs) * 100)\n}\n\ninterface PhaseConfig {\n label: string\n color: string\n flex: number\n}\n\nconst PHASE_ORDER: TempoPhaseKey[] = ['concentric', 'hold', 'eccentric']\n\nconst PHASE_CONFIG: Record<TempoPhaseKey, PhaseConfig> = {\n concentric: { label: 'Con', color: t['status-success'], flex: 2 },\n hold: { label: 'Hold', color: t['brand-primary'], flex: 1 },\n eccentric: { label: 'Ecc', color: t['status-warning'], flex: 3 },\n}\n\nexport interface TempoBarProps extends ViewProps {\n /** Phase currently in progress, or null when idle/at rest. */\n activePhase: TempoPhaseKey | null\n /** Elapsed time (ms) within the active phase. */\n phaseElapsedMs: number\n /** Completed phase durations (ms) for the current rep, keyed by phase. */\n completed?: Partial<Record<TempoPhaseKey, number>>\n /** Optional per-phase target durations (seconds) for pacing feedback. */\n target?: Partial<Record<TempoPhaseKey, number>>\n className?: string\n}\n\n/**\n * TempoBar — live rep phase progression indicator.\n *\n * Renders a segmented bar (Con → Hold → Ecc) where the active phase fills in\n * real time and completed phases show their duration with a ✓/✗ pacing mark.\n * Presentational only: the consumer derives which phase is active, its elapsed\n * time, and completed durations, then feeds them in.\n */\nexport function TempoBar({\n activePhase,\n phaseElapsedMs,\n completed,\n target,\n className,\n ...props\n}: TempoBarProps) {\n return (\n <View className={className} testID=\"tempo-bar\" {...props}>\n {/* Phase labels */}\n <View style={{ flexDirection: 'row', marginBottom: 4 }}>\n {PHASE_ORDER.map((phase) => {\n const config = PHASE_CONFIG[phase]\n return (\n <View key={phase} style={{ flex: config.flex, alignItems: 'center' }}>\n <Text style={{ fontSize: 10, color: t['text-disabled'] }}>{config.label}</Text>\n </View>\n )\n })}\n </View>\n\n {/* Segmented bar */}\n <View style={{ flexDirection: 'row', gap: 2, height: 20 }}>\n {PHASE_ORDER.map((phase) => {\n const config = PHASE_CONFIG[phase]\n const isActive = activePhase === phase\n const completedMs = completed?.[phase]\n const targetSec = target?.[phase]\n const targetMs = targetSec != null ? targetSec * 1000 : null\n\n return (\n <View\n key={phase}\n style={{\n flex: config.flex,\n backgroundColor: alpha('#ffffff', 0.06),\n borderRadius: 4,\n overflow: 'hidden',\n }}\n >\n {isActive ? (\n <ActiveSegment\n config={config}\n phaseElapsedMs={phaseElapsedMs}\n targetMs={targetMs}\n />\n ) : completedMs != null ? (\n <CompletedSegment config={config} completedMs={completedMs} targetMs={targetMs} />\n ) : null}\n </View>\n )\n })}\n </View>\n </View>\n )\n}\n\nfunction ActiveSegment({\n config,\n phaseElapsedMs,\n targetMs,\n}: {\n config: PhaseConfig\n phaseElapsedMs: number\n targetMs: number | null\n}) {\n const pacing = getTempoPacingState(phaseElapsedMs, targetMs)\n const barColor = pacing === 'behind' ? t['status-error'] : config.color\n const fillPct = getTempoFillPct(phaseElapsedMs, targetMs)\n\n const label = targetMs\n ? `${formatDuration(phaseElapsedMs)} / ${formatDuration(targetMs)}`\n : formatDuration(phaseElapsedMs)\n\n return (\n <View style={{ height: '100%', position: 'relative' }} testID={`tempo-segment-active-${config.label}`}>\n <View\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n width: `${fillPct}%`,\n backgroundColor: alpha(barColor, 0.3),\n borderRadius: 4,\n }}\n />\n <View\n style={{\n height: '100%',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Text style={{ fontSize: 12, fontWeight: '700', color: barColor }}>{label}</Text>\n </View>\n </View>\n )\n}\n\nfunction CompletedSegment({\n config,\n completedMs,\n targetMs,\n}: {\n config: PhaseConfig\n completedMs: number\n targetMs: number | null\n}) {\n const pacing = getTempoPacingState(completedMs, targetMs)\n const hitTarget = pacing !== 'behind'\n const indicator =\n targetMs && targetMs >= TEMPO_PACING.minPhaseDurationMs ? (hitTarget ? ' ✓' : ' ✗') : ''\n\n return (\n <View\n style={{\n height: '100%',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: alpha(config.color, 0.15),\n }}\n testID={`tempo-segment-completed-${config.label}`}\n >\n <Text style={{ fontSize: 12, fontWeight: '500', color: alpha(config.color, 0.7) }}>\n {formatDuration(completedMs)}\n {indicator}\n </Text>\n </View>\n )\n}\n\nfunction formatDuration(ms: number): string {\n const s = ms / 1000\n return s < 10 ? s.toFixed(1) : Math.round(s).toString()\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, type ViewProps, type ViewStyle } from 'react-native'\n\nexport interface DeviationBarProps extends ViewProps {\n deviation: number\n width?: number\n className?: string\n}\n\nfunction getDotColor(deviation: number): string {\n const abs = Math.abs(deviation)\n if (deviation < -0.3) return '#14B8A6'\n if (abs <= 0.3) return '#6B7280'\n if (abs <= 0.7) return '#FFB020'\n return '#D14343'\n}\n\nfunction getDeviationDescription(deviation: number): string {\n if (deviation < -0.3) return 'lighter than planned'\n if (deviation > 0.3) return 'harder than planned'\n return 'on plan'\n}\n\nexport function DeviationBar({\n deviation,\n width,\n className,\n ...props\n}: DeviationBarProps) {\n const clamped = Math.max(-1, Math.min(1, deviation))\n const resolvedWidth = width ?? 40\n const dotPosition = ((clamped + 1) / 2) * resolvedWidth\n const dotSize = 8\n const trackHeight = 6\n const containerHeight = 10\n const valueNow = Math.round(clamped * 100)\n\n return (\n <View\n className={className}\n style={{ flexDirection: 'row', alignItems: 'center', height: containerHeight, width: resolvedWidth }}\n accessibilityRole=\"adjustable\"\n accessibilityValue={{ min: -100, max: 100, now: valueNow }}\n accessibilityLabel={`Session deviation: ${getDeviationDescription(clamped)}`}\n testID=\"deviation-bar\"\n aria-valuenow={valueNow}\n aria-valuemin={-100}\n aria-valuemax={100}\n {...props}\n >\n <View\n style={{\n height: trackHeight,\n width: resolvedWidth,\n borderRadius: 3,\n // react-native-web renders backgroundImage at runtime; not in RN ViewStyle types\n backgroundImage:\n 'linear-gradient(90deg, rgba(20,184,166,0.25) 0%, rgba(107,114,128,0.15) 50%, rgba(255,176,32,0.25) 100%)',\n } as ViewStyle}\n />\n <View\n style={{\n position: 'absolute',\n width: dotSize,\n height: dotSize,\n borderRadius: 9999,\n borderWidth: 1.5,\n borderColor: '#F3F4F6',\n boxShadow: '0 0 4px rgba(0,0,0,0.5)',\n backgroundColor: getDotColor(clamped),\n left: Math.max(0, Math.min(dotPosition - dotSize / 2, resolvedWidth - dotSize)),\n top: (containerHeight - dotSize) / 2,\n }}\n testID=\"deviation-dot\"\n />\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState } from 'react'\nimport { View, Text, Animated, type ViewProps, type ViewStyle } from 'react-native'\n\nexport type IntensityBarOrientation = 'vertical' | 'horizontal'\n\nexport interface IntensityBarProps extends ViewProps {\n /** Current intensity level 0-1 */\n level: number\n /** MRV/overexertion threshold position 0-1 */\n threshold?: number\n /** Orientation */\n orientation?: IntensityBarOrientation\n /** Height for vertical (default 24px) or width for horizontal */\n size?: number\n /** Width for vertical (default 6px) or height for horizontal */\n thickness?: number\n /** Show threshold label (\"MRV\") */\n showThresholdLabel?: boolean\n className?: string\n}\n\nconst TRACK_BG = 'rgba(255,255,255,0.06)'\nconst THRESHOLD_COLOR = '#FFFFFF'\nconst LABEL_COLOR = '#6B7280'\n\n/** Fill color by intensity zone: teal 0-0.4, amber 0.4-0.7, red 0.7-1.0. */\nfunction getZoneColor(level: number): string {\n if (level >= 0.7) return '#D14343'\n if (level >= 0.4) return '#FFB020'\n return '#14B8A6'\n}\n\nfunction clamp01(value: number): number {\n if (value < 0) return 0\n if (value > 1) return 1\n return value\n}\n\nexport function IntensityBar({\n level,\n threshold,\n orientation = 'vertical',\n size = 24,\n thickness = 6,\n showThresholdLabel,\n className,\n ...props\n}: IntensityBarProps) {\n const isVertical = orientation === 'vertical'\n const clampedLevel = clamp01(level)\n const percentage = Math.round(clampedLevel * 100)\n const zoneColor = getZoneColor(clampedLevel)\n\n const [fillAnim] = useState(() => new Animated.Value(clampedLevel))\n\n useEffect(() => {\n const animation = Animated.timing(fillAnim, {\n toValue: clampedLevel,\n duration: 250,\n useNativeDriver: false,\n })\n animation.start()\n return () => animation.stop()\n }, [clampedLevel, fillAnim])\n\n const fillSizePercent = fillAnim.interpolate({\n inputRange: [0, 1],\n outputRange: ['0%', '100%'],\n })\n\n const trackStyle = isVertical\n ? { width: thickness, height: size }\n : { width: size, height: thickness }\n\n const fillStyle = isVertical\n ? {\n position: 'absolute' as const,\n bottom: 0,\n left: 0,\n right: 0,\n height: fillSizePercent,\n }\n : {\n position: 'absolute' as const,\n top: 0,\n bottom: 0,\n left: 0,\n width: fillSizePercent,\n }\n\n const thresholdLineStyle: ViewStyle | undefined =\n threshold != null\n ? isVertical\n ? {\n position: 'absolute' as const,\n bottom: `${clamp01(threshold) * 100}%`,\n left: -2,\n right: -2,\n height: 1,\n backgroundColor: THRESHOLD_COLOR,\n zIndex: 4,\n }\n : {\n position: 'absolute' as const,\n left: `${clamp01(threshold) * 100}%`,\n top: -2,\n bottom: -2,\n width: 1,\n backgroundColor: THRESHOLD_COLOR,\n zIndex: 4,\n }\n : undefined\n\n return (\n <View\n className={className}\n style={{ alignItems: 'center' }}\n accessibilityRole=\"progressbar\"\n accessibilityValue={{ min: 0, max: 100, now: percentage }}\n accessibilityLabel={`Intensity level: ${percentage}%`}\n testID=\"intensity-bar\"\n {...props}\n >\n <View\n style={{\n ...trackStyle,\n borderRadius: 3,\n backgroundColor: TRACK_BG,\n position: 'relative',\n overflow: 'visible',\n }}\n accessibilityElementsHidden\n >\n <Animated.View\n style={{\n ...fillStyle,\n borderRadius: 3,\n backgroundColor: zoneColor,\n zIndex: 2,\n }}\n testID=\"intensity-fill\"\n />\n\n {threshold != null && (\n <View style={thresholdLineStyle} testID=\"intensity-threshold\" />\n )}\n </View>\n {showThresholdLabel && threshold != null && (\n <Text\n style={{\n fontSize: 8,\n fontWeight: '500',\n color: LABEL_COLOR,\n fontFamily: 'Inter, sans-serif',\n marginTop: 6,\n }}\n accessibilityElementsHidden\n testID=\"intensity-threshold-label\"\n >\n MRV\n </Text>\n )}\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState } from 'react'\nimport { View, Text, Pressable, Animated, Easing, type ViewProps } from 'react-native'\n\n/**\n * Spec statuses: completed | current | upcoming | deload.\n * `next` and `missed` are additive extras supported by this implementation.\n */\nexport type WorkoutPillStatus = 'completed' | 'current' | 'upcoming' | 'deload' | 'next' | 'missed'\n\nexport interface WorkoutPillProps extends ViewProps {\n name: string\n status: WorkoutPillStatus\n /** Force pulsing animation. Defaults to pulsing only on `current` status. */\n pulse?: boolean\n onPress?: () => void\n highlighted?: boolean\n className?: string\n}\n\nconst statusBgColors: Record<WorkoutPillStatus, string> = {\n completed: 'rgba(20,184,166,0.15)',\n current: 'rgba(255,121,0,0.15)',\n next: 'transparent',\n upcoming: '#1C1C1C',\n missed: 'rgba(209,67,67,0.1)',\n deload: 'rgba(147,51,234,0.15)',\n}\n\nconst statusBorderStyles: Record<WorkoutPillStatus, Record<string, unknown>> = {\n completed: { borderWidth: 1, borderColor: 'rgba(20,184,166,0.3)' },\n current: { borderWidth: 1, borderColor: 'rgba(255,121,0,0.3)' },\n next: { borderWidth: 1, borderColor: 'rgba(255,121,0,0.4)' },\n upcoming: { borderWidth: 1, borderColor: '#1F1F1F' },\n missed: { borderWidth: 1, borderColor: 'rgba(209,67,67,0.25)' },\n deload: { borderWidth: 1, borderColor: 'rgba(147,51,234,0.3)' },\n}\n\nconst textColors: Record<WorkoutPillStatus, string> = {\n completed: '#14B8A6',\n current: '#FF7900',\n next: '#FF7900',\n upcoming: '#6B7280',\n missed: 'rgba(209,67,67,0.7)',\n deload: '#9333ea',\n}\n\nfunction usePulse(enabled: boolean) {\n const [opacity] = useState(() => new Animated.Value(1))\n\n useEffect(() => {\n if (!enabled) {\n opacity.setValue(1)\n return\n }\n\n const animation = Animated.loop(\n Animated.sequence([\n Animated.timing(opacity, {\n toValue: 0.7,\n duration: 1000,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 1,\n duration: 1000,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: true,\n }),\n ]),\n )\n animation.start()\n\n return () => animation.stop()\n }, [enabled, opacity])\n\n return opacity\n}\n\nexport function WorkoutPill({\n name,\n status,\n pulse,\n onPress,\n highlighted = false,\n className,\n ...props\n}: WorkoutPillProps) {\n const shouldPulse = pulse ?? status === 'current'\n const pulseOpacity = usePulse(shouldPulse)\n const isCompleted = status === 'completed'\n const isMissed = status === 'missed'\n\n const pill = (\n <Animated.View\n style={shouldPulse ? { opacity: pulseOpacity } : undefined}\n testID=\"workout-pill\"\n >\n <View\n className={className}\n style={[\n {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 10,\n paddingVertical: 4,\n borderRadius: 6,\n backgroundColor: statusBgColors[status],\n },\n statusBorderStyles[status] as Record<string, unknown>,\n highlighted ? { borderWidth: 2, transform: [{ scale: 1.02 }] } : undefined,\n ]}\n accessibilityLabel={onPress ? undefined : `${name} workout, ${status}`}\n {...props}\n >\n {isCompleted && (\n <Text\n style={{\n fontWeight: '600',\n fontFamily: '\"Nunito Sans\", sans-serif',\n fontSize: 11,\n color: textColors[status],\n marginRight: 4,\n }}\n accessibilityElementsHidden\n testID=\"workout-pill-check\"\n >\n {'\\u2713'}\n </Text>\n )}\n {isMissed && (\n <Text\n style={{\n fontWeight: '600',\n fontFamily: '\"Nunito Sans\", sans-serif',\n fontSize: 11,\n color: textColors[status],\n marginRight: 4,\n }}\n accessibilityElementsHidden\n testID=\"workout-pill-dash\"\n >\n {'\\u2014'}\n </Text>\n )}\n <Text\n style={{\n fontWeight: '600',\n fontFamily: '\"Nunito Sans\", sans-serif',\n fontSize: 11,\n color: textColors[status],\n }}\n accessibilityElementsHidden={onPress != null}\n testID=\"workout-pill-name\"\n >\n {name}\n </Text>\n </View>\n </Animated.View>\n )\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n accessibilityRole=\"button\"\n accessibilityLabel={`${name} workout, ${status}`}\n testID=\"workout-pill-pressable\"\n >\n {pill}\n </Pressable>\n )\n }\n\n return pill\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState } from 'react'\nimport { View, Text, Pressable, Animated, Easing, type ViewProps } from 'react-native'\nimport { WORKOUT_TOKENS } from '../../../theme/workout-tokens'\nimport { formatVelocity } from '../../../utils/workout-format'\n\nexport interface VelocityStripProps extends ViewProps {\n velocities: number[]\n expanded?: boolean\n onToggle?: () => void\n onRepPress?: (index: number, velocity: number) => void\n variant?: 'full' | 'mini'\n showInfo?: boolean\n className?: string\n}\n\n// Canonical scale shared with SetRow's RPE color (see theme/workout-tokens.ts).\nconst VEL_COLORS = WORKOUT_TOKENS.scale\n\nexport function getVelocityZoneColor(velocity: number): string {\n if (velocity >= 1.0) return 'vel-green'\n if (velocity >= 0.75) return 'vel-yellow'\n if (velocity >= 0.5) return 'vel-orange'\n return 'vel-red'\n}\n\nexport function getVelocityZoneName(velocity: number): string {\n if (velocity >= 1.0) return 'Speed'\n if (velocity >= 0.75) return 'Power'\n if (velocity >= 0.5) return 'Strength-Speed'\n return 'Strength'\n}\n\nexport function calculateVelocityLoss(velocities: number[]): number {\n if (velocities.length < 2) return 0\n const first = velocities[0]\n const last = velocities[velocities.length - 1]\n if (first === 0) return 0\n return Math.round(((first - last) / first) * 100)\n}\n\nexport function calculateMeanVelocity(velocities: number[]): number {\n if (velocities.length === 0) return 0\n const sum = velocities.reduce((acc, v) => acc + v, 0)\n return sum / velocities.length\n}\n\nfunction getBarColor(zone: string): string {\n switch (zone) {\n case 'vel-green': return VEL_COLORS.green\n case 'vel-yellow': return VEL_COLORS.yellow\n case 'vel-orange': return VEL_COLORS.orange\n case 'vel-red': return VEL_COLORS.red\n default: return VEL_COLORS.green\n }\n}\n\nconst zoneHexMap: Record<string, string> = {\n 'vel-green': VEL_COLORS.green,\n 'vel-yellow': VEL_COLORS.yellow,\n 'vel-orange': VEL_COLORS.orange,\n 'vel-red': VEL_COLORS.red,\n}\n\nfunction getLossStyle(loss: number): Record<string, string> | null {\n if (loss > 25) return { color: VEL_COLORS.red }\n if (loss > 20) return { color: VEL_COLORS.orange }\n return null\n}\n\nconst ANIMATION_DURATION = 400\nconst ANIMATION_EASING = Easing.bezier(0.22, 1, 0.36, 1)\n\nexport function VelocityStrip({\n velocities,\n expanded = false,\n onToggle,\n onRepPress,\n variant = 'full',\n showInfo = true,\n className,\n ...props\n}: VelocityStripProps) {\n const maxVelocity = Math.max(...velocities, 0)\n const meanVelocity = calculateMeanVelocity(velocities)\n const loss = calculateVelocityLoss(velocities)\n const meanZone = getVelocityZoneName(meanVelocity)\n\n const [heightAnim] = useState(() => new Animated.Value(expanded ? 60 : 3))\n const [labelOpacity] = useState(() => new Animated.Value(expanded ? 1 : 0))\n const [infoOpacity] = useState(() => new Animated.Value(expanded ? 1 : 0))\n\n useEffect(() => {\n if (variant === 'mini') return\n\n Animated.parallel([\n Animated.timing(heightAnim, {\n toValue: expanded ? 60 : 3,\n duration: ANIMATION_DURATION,\n easing: ANIMATION_EASING,\n useNativeDriver: false,\n }),\n Animated.timing(labelOpacity, {\n toValue: expanded ? 1 : 0,\n duration: 300,\n delay: expanded ? 150 : 0,\n useNativeDriver: false,\n }),\n Animated.timing(infoOpacity, {\n toValue: expanded ? 1 : 0,\n duration: 300,\n delay: expanded ? 200 : 0,\n useNativeDriver: false,\n }),\n ]).start()\n }, [expanded, variant, heightAnim, labelOpacity, infoOpacity])\n\n if (variant === 'mini') {\n const { style: externalStyle, ...restProps } = props\n return (\n <View\n className={className}\n style={[{ flexDirection: 'row', height: 3, gap: 2, borderRadius: 2, overflow: 'hidden' }, externalStyle]}\n accessibilityRole=\"image\"\n accessibilityLabel={`Velocity strip, ${velocities.length} reps`}\n testID=\"velocity-strip-mini\"\n {...restProps}\n >\n {velocities.map((v, i) => (\n <View\n key={i}\n style={{\n flex: 1,\n backgroundColor: getBarColor(getVelocityZoneColor(v)),\n borderRadius: 1,\n minWidth: 4,\n height: '100%' as unknown as number,\n }}\n accessibilityElementsHidden\n testID={`velocity-bar-${i}`}\n />\n ))}\n </View>\n )\n }\n\n const stripLabel = `Velocity chart for set, ${velocities.length} reps, tap to ${expanded ? 'collapse' : 'expand'}`\n // When onToggle wraps the strip or individual reps are interactive, the container itself is not a button\n const hasInteractiveContainer = onToggle != null\n const hasInteractiveReps = onRepPress != null && expanded\n\n const stripContent = (\n <Animated.View\n className={[className, expanded ? 'bg-surface-raised' : 'bg-transparent']\n .filter(Boolean)\n .join(' ')}\n style={[\n {\n height: heightAnim,\n width: '100%',\n gap: 2,\n borderRadius: expanded ? 6 : 2,\n paddingTop: expanded ? 16 : 0,\n paddingBottom: expanded ? 24 : 0,\n paddingHorizontal: expanded ? 6 : 0,\n paddingVertical: expanded ? undefined : 8,\n overflow: expanded ? 'visible' : 'hidden',\n },\n ]}\n accessibilityRole={hasInteractiveContainer || hasInteractiveReps ? 'none' : 'button'}\n accessibilityLabel={hasInteractiveContainer || hasInteractiveReps ? undefined : stripLabel}\n testID=\"velocity-strip\"\n {...props}\n >\n <View\n style={{ flexDirection: 'row', flex: 1, gap: 2, alignItems: 'flex-end' }}\n >\n {velocities.map((v, i) => {\n const zone = getVelocityZoneColor(v)\n // Guard all-zero velocities (idle / pre-rep): maxVelocity === 0 makes\n // this 0 / 0 === NaN and emits height:'NaN%'. Flatten the bars instead.\n const barHeightPct =\n maxVelocity > 0 ? Math.round((v / (maxVelocity * 1.15)) * 100) : 0\n\n const bar = (\n <View\n key={i}\n style={{ flex: 1, height: '100%', justifyContent: 'flex-end', position: 'relative' }}\n >\n {expanded && (\n <Animated.View style={{ opacity: labelOpacity, alignItems: 'center', position: 'absolute', top: -13, left: 0, right: 0 }} accessibilityElementsHidden>\n <Text\n className=\"text-text-secondary\"\n style={{ fontSize: 8, fontWeight: '600' }}\n testID={`velocity-label-${i}`}\n >\n {formatVelocity(v)}\n </Text>\n </Animated.View>\n )}\n <View\n style={\n expanded\n ? { height: `${barHeightPct}%`, minHeight: 2, borderTopLeftRadius: 2, borderTopRightRadius: 2, backgroundColor: zoneHexMap[zone] }\n : {\n minHeight: '100%' as unknown as number,\n borderTopLeftRadius: 2,\n borderTopRightRadius: 2,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n backgroundColor: zoneHexMap[zone],\n }\n }\n testID={`velocity-bar-${i}`}\n accessibilityRole=\"image\"\n accessibilityLabel={`Rep ${i + 1}: ${formatVelocity(v)} meters per second`}\n />\n </View>\n )\n\n if (onRepPress && expanded) {\n return (\n <Pressable\n key={i}\n style={{ flex: 1, height: '100%' }}\n onPress={() => onRepPress(i, v)}\n accessibilityRole=\"button\"\n accessibilityLabel={`Rep ${i + 1}: ${formatVelocity(v)} meters per second, tap for details`}\n testID={`velocity-bar-pressable-${i}`}\n >\n {bar}\n </Pressable>\n )\n }\n\n return bar\n })}\n </View>\n {expanded && showInfo && (\n <Animated.View\n style={{\n flexDirection: 'row',\n justifyContent: 'space-between',\n opacity: infoOpacity,\n position: 'absolute',\n bottom: 4,\n left: 6,\n right: 6,\n }}\n testID=\"velocity-info-row\"\n >\n <Text\n className=\"text-text-secondary\"\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n }}\n >\n {meanZone} {'\\u00B7'} {formatVelocity(meanVelocity)} m/s\n </Text>\n <Text\n className=\"text-text-secondary\"\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n ...getLossStyle(loss),\n }}\n >\n Loss: {loss}%\n </Text>\n </Animated.View>\n )}\n </Animated.View>\n )\n\n if (onToggle) {\n return (\n <Pressable\n onPress={onToggle}\n accessibilityRole=\"button\"\n accessibilityLabel={stripLabel}\n testID=\"velocity-strip-pressable\"\n >\n {stripContent}\n </Pressable>\n )\n }\n\n return stripContent\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\n\n// Aliases for spec compatibility: under=behind, maintenance=ontrack, productive=target\nexport type VolumeStatus = 'untrained' | 'behind' | 'ontrack' | 'target' | 'over'\n\nexport interface MuscleGroupChipProps extends ViewProps {\n name: string\n volumeStatus?: VolumeStatus\n onPress?: () => void\n className?: string\n}\n\nconst dotColorMap: Record<VolumeStatus, string> = {\n untrained: '#2C2C2C',\n behind: '#406D87',\n ontrack: '#14B8A6',\n target: '#FF7900',\n over: '#D14343',\n}\n\nexport function MuscleGroupChip({\n name,\n volumeStatus,\n onPress,\n className,\n ...props\n}: MuscleGroupChipProps) {\n const dotColor = volumeStatus\n ? dotColorMap[volumeStatus]\n : '#2C2C2C'\n\n const statusLabel = volumeStatus ?? 'no status'\n\n const content = (\n <View\n className={['bg-surface-raised border-border', className].filter(Boolean).join(' ')}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 9999,\n paddingHorizontal: 9,\n paddingVertical: 3,\n borderWidth: 1,\n }}\n accessibilityLabel={onPress ? undefined : `${name}, volume status: ${statusLabel}`}\n testID=\"muscle-group-chip\"\n {...props}\n >\n <View\n style={{\n width: 6,\n height: 6,\n borderRadius: 9999,\n marginRight: 5,\n flexShrink: 0,\n backgroundColor: dotColor,\n }}\n accessibilityElementsHidden\n testID=\"muscle-group-chip-dot\"\n />\n <Text\n className=\"text-text-secondary\"\n style={{\n fontFamily: 'Inter, sans-serif',\n fontWeight: '500',\n fontSize: 11,\n }}\n accessibilityElementsHidden\n >\n {name}\n </Text>\n </View>\n )\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n accessibilityRole=\"button\"\n accessibilityLabel={`${name}, volume status: ${statusLabel}`}\n testID=\"muscle-group-chip-pressable\"\n >\n {content}\n </Pressable>\n )\n }\n\n return content\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text } from 'react-native'\nimport { VelocityStrip } from './VelocityStrip'\nimport { PrBadge, type PRType } from './PrBadge'\nimport { roundRpe, rpeColor, roundWeight } from '../../../utils/workout-format'\n\nexport type SetRowMode = 'active' | 'completed' | 'history'\n\nexport interface SetRowProps {\n mode: SetRowMode\n setNumber: number\n previous?: { reps: number; weight: number } | null\n reps: number | null\n weight: number | null\n rpe?: number | null\n unit: 'lbs' | 'kg'\n velocities?: number[]\n velocityExpanded?: boolean\n onVelocityToggle?: () => void\n setType?: string\n prBadges?: Array<{ type: PRType; label: string }>\n isNextSet?: boolean\n targets?: { reps: number; weight: number }\n}\n\nfunction formatAccessibilityLabel(\n setNumber: number,\n reps: number | null,\n weight: number | null,\n unit: string,\n): string {\n const repsText = reps != null ? `${reps} reps` : 'no reps'\n const weightText = weight != null ? `at ${roundWeight(weight)} ${unit}` : ''\n return `Set ${setNumber}: ${repsText}${weightText ? ` ${weightText}` : ''}`\n}\n\nexport function SetRow({\n mode,\n setNumber,\n previous,\n reps,\n weight,\n rpe,\n unit,\n velocities,\n velocityExpanded,\n onVelocityToggle,\n setType,\n prBadges,\n isNextSet,\n targets,\n}: SetRowProps) {\n const isActive = mode === 'active'\n const isCompleted = mode === 'completed'\n\n const rowStyle: Record<string, unknown> = {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n padding: 7,\n paddingHorizontal: 8,\n gap: 8,\n borderRadius: 8,\n }\n\n if (isActive && isNextSet) {\n rowStyle.backgroundColor = 'rgba(255,121,0,0.06)'\n rowStyle.borderWidth = 1\n rowStyle.borderColor = 'rgba(255,121,0,0.15)'\n }\n\n if (isCompleted && !isNextSet) {\n rowStyle.opacity = 0.55\n }\n\n return (\n <View\n style={rowStyle}\n accessibilityLabel={formatAccessibilityLabel(\n setNumber,\n reps,\n weight,\n unit,\n )}\n testID=\"set-row\"\n >\n <View\n style={{ width: 36, alignItems: 'center', justifyContent: 'center' }}\n testID=\"set-row-set-number\"\n >\n {setType ? (\n <Text\n style={{\n fontSize: 10,\n fontWeight: '700',\n fontFamily: 'Inter, sans-serif',\n color: '#ffa502',\n backgroundColor: 'rgba(255,165,2,0.12)',\n paddingVertical: 1,\n paddingHorizontal: 5,\n borderRadius: 3,\n overflow: 'hidden',\n }}\n testID=\"set-row-type-badge\"\n >\n {setType}\n </Text>\n ) : (\n <Text\n className=\"text-text-secondary\"\n style={{\n fontSize: 13,\n fontWeight: '600',\n fontFamily: 'Inter, sans-serif',\n }}\n >\n {setNumber}\n </Text>\n )}\n </View>\n\n <View\n className=\"flex-1\"\n testID=\"set-row-previous\"\n >\n <Text\n className=\"text-text-secondary\"\n style={{\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n }}\n >\n {previous\n ? `${previous.reps} x ${roundWeight(previous.weight)}`\n : '\\u2014'}\n </Text>\n </View>\n\n <View\n style={{ width: 44, alignItems: 'center', justifyContent: 'center' }}\n testID=\"set-row-reps\"\n >\n {isActive && reps == null && targets ? (\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 13,\n fontStyle: 'italic',\n fontFamily: 'Inter, sans-serif',\n }}\n testID=\"set-row-target-reps\"\n >\n {targets.reps}\n </Text>\n ) : (\n <Text\n className={reps != null ? 'text-text-primary' : 'text-text-tertiary'}\n style={{\n fontSize: 14,\n fontWeight: '600',\n fontFamily: 'Inter, sans-serif',\n }}\n >\n {reps != null ? reps : '\\u2014'}\n </Text>\n )}\n </View>\n\n <View\n style={{ width: 56, alignItems: 'center', justifyContent: 'center' }}\n testID=\"set-row-weight\"\n >\n {isActive && weight == null && targets ? (\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 13,\n fontStyle: 'italic',\n fontFamily: 'Inter, sans-serif',\n }}\n testID=\"set-row-target-weight\"\n >\n {roundWeight(targets.weight)}\n </Text>\n ) : (\n <Text\n className={weight != null ? 'text-text-primary' : 'text-text-tertiary'}\n style={{\n fontSize: 14,\n fontWeight: '600',\n fontFamily: 'Inter, sans-serif',\n }}\n >\n {weight != null ? roundWeight(weight) : '\\u2014'}\n </Text>\n )}\n </View>\n\n <View\n style={{ width: 36, alignItems: 'center', justifyContent: 'center' }}\n testID=\"set-row-rpe\"\n >\n <Text\n className={rpe != null ? undefined : 'text-text-tertiary'}\n style={{\n fontSize: 13,\n fontWeight: '600',\n fontFamily: 'Inter, sans-serif',\n // rpeColor returns a concrete hex (native-safe); only the tertiary\n // fallback needs the className token.\n color: rpe != null ? rpeColor(rpe) : undefined,\n }}\n >\n {rpe != null ? roundRpe(rpe) : '\\u2014'}\n </Text>\n </View>\n\n {prBadges && prBadges.length > 0 && (\n <View\n className=\"flex-row items-center\"\n style={{ gap: 4 }}\n testID=\"set-row-pr-badges\"\n >\n {prBadges.map((badge, i) => (\n <PrBadge\n key={i}\n type={badge.type}\n label={badge.label}\n animate={false}\n compact\n />\n ))}\n </View>\n )}\n\n {velocities && velocities.length > 0 && (\n <View\n style={{ position: 'absolute', bottom: 0, left: 8, right: 8 }}\n testID=\"set-row-velocity-strip\"\n >\n <VelocityStrip\n velocities={velocities}\n expanded={velocityExpanded}\n onToggle={onVelocityToggle}\n variant={onVelocityToggle ? 'full' : 'mini'}\n />\n </View>\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, TextInput } from 'react-native'\nimport { resolveColor } from '../../../theme/resolve-color'\n\nexport interface InputBarProps {\n exerciseName: string\n setNumber: number\n totalSets: number | null\n reps: string\n weight: string\n unit: 'lbs' | 'kg'\n onRepsChange: (value: string) => void\n onWeightChange: (value: string) => void\n onRecord: () => void\n canRecord: boolean\n visible: boolean\n}\n\nconst BRAND_PRIMARY = '#FF7900'\nconst INPUT_CLASSNAME = 'bg-surface-raised border-border-strong text-text-primary'\n\nconst inputStyle = {\n fontSize: 14,\n fontWeight: '600' as const,\n fontFamily: 'Inter, sans-serif',\n borderWidth: 1,\n borderRadius: 6,\n textAlign: 'center' as const,\n paddingVertical: 5,\n paddingHorizontal: 2,\n}\n\nexport function InputBar({\n exerciseName,\n setNumber,\n totalSets,\n reps,\n weight,\n unit,\n onRepsChange,\n onWeightChange,\n onRecord,\n canRecord,\n visible,\n}: InputBarProps) {\n if (!visible) return null\n\n const setLabel = totalSets != null ? `Set ${setNumber}/${totalSets}` : `Set ${setNumber}`\n\n return (\n <View\n className=\"bg-surface-elevated\"\n style={{\n width: '100%',\n borderTopWidth: 1,\n borderTopColor: resolveColor('border-default'),\n paddingTop: 10,\n paddingHorizontal: 16,\n paddingBottom: 12,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n }}\n accessibilityRole=\"toolbar\"\n testID=\"input-bar\"\n >\n <View style={{ minWidth: 80, flexDirection: 'column' }}>\n <Text\n className=\"text-text-primary\"\n style={{\n fontSize: 12,\n fontWeight: '700',\n fontFamily: '\"Space Grotesk\", sans-serif',\n }}\n testID=\"input-bar-exercise-name\"\n numberOfLines={1}\n >\n {exerciseName}\n </Text>\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n }}\n testID=\"input-bar-set-info\"\n >\n {setLabel}\n </Text>\n </View>\n\n <View className=\"flex-1 flex-row items-center\" style={{ gap: 4 }}>\n <TextInput\n value={reps}\n onChangeText={onRepsChange}\n className={INPUT_CLASSNAME}\n style={{ ...inputStyle, width: 36 }}\n accessibilityLabel=\"Reps\"\n testID=\"input-bar-reps\"\n keyboardType=\"numeric\"\n />\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n }}\n >\n {'\\u00D7'}\n </Text>\n <TextInput\n value={weight}\n onChangeText={onWeightChange}\n className={INPUT_CLASSNAME}\n style={{ ...inputStyle, width: 52 }}\n accessibilityLabel={`Weight in ${unit}`}\n testID=\"input-bar-weight\"\n keyboardType=\"numeric\"\n />\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 12,\n fontWeight: '500',\n fontFamily: 'Inter, sans-serif',\n }}\n testID=\"input-bar-unit\"\n >\n {unit}\n </Text>\n </View>\n\n <Pressable\n onPress={onRecord}\n disabled={!canRecord}\n style={({ pressed }) => ({\n backgroundColor: BRAND_PRIMARY,\n borderRadius: 8,\n paddingVertical: 10,\n paddingHorizontal: 16,\n opacity: !canRecord ? 0.4 : pressed ? 0.8 : 1,\n })}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Record set\"\n testID=\"input-bar-record\"\n >\n <Text\n style={{\n fontSize: 13,\n fontWeight: '700',\n fontFamily: 'Inter, sans-serif',\n color: '#FFFFFF',\n }}\n >\n Record\n </Text>\n </Pressable>\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, Pressable } from 'react-native'\nimport { resolveColor } from '../../../theme/resolve-color'\n\nconst BRAND_PRIMARY = '#FF7900'\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 // A zero-duration timer is already complete; guard the 0 / 0 === NaN case\n // that would otherwise emit width:'NaN%'.\n const totalMs = totalSeconds * 1000\n const progressPct = totalMs > 0 ? Math.min(100, (elapsedMs / totalMs) * 100) : 100\n\n return (\n <View\n className=\"bg-surface-raised\"\n style={{\n width: '100%',\n borderTopWidth: 1,\n borderTopColor: resolveColor('border-default'),\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 className=\"text-text-secondary\"\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n textTransform: 'uppercase',\n letterSpacing: 1,\n }}\n testID=\"rest-timer-label\"\n >\n REST\n </Text>\n {nextSetInfo != null && (\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\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 className=\"text-text-primary\"\n style={{\n fontSize: 28,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\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 className=\"bg-border\"\n style={{\n height: 3,\n borderRadius: 2,\n marginBottom: 12,\n }}\n testID=\"rest-timer-progress-track\"\n >\n <View\n style={{\n height: '100%',\n backgroundColor: BRAND_PRIMARY,\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 className=\"text-text-secondary\"\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\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: BRAND_PRIMARY,\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 { useState } from 'react'\nimport { View, Text, Pressable } from 'react-native'\nimport { VelocityStrip } from './VelocityStrip'\nimport { PlaceholderStrip } from './PlaceholderStrip'\nimport { WeightBadge } from './WeightBadge'\nimport { PrBadge } from './PrBadge'\nimport { TempoDisplay } from './TempoDisplay'\nimport { SetRow, type SetRowProps } from './SetRow'\nimport { roundWeight } from '../../../utils/workout-format'\nimport { resolveColor } from '../../../theme/resolve-color'\n\nexport type ExerciseCardState = 'collapsed' | 'expanded' | 'upcoming'\n\nexport interface ExerciseCardProps {\n name: string\n state: ExerciseCardState\n onToggle: () => void\n onNavigateDetail?: () => void\n summary?: {\n sets: number\n reps: number | string\n weight: number\n unit: 'lbs' | 'kg'\n }\n e1rm?: { value: number; unit: 'lbs' | 'kg' }\n isPR?: boolean\n setVelocities?: number[][]\n totalPlannedSets?: number\n sets?: SetRowProps[]\n tempo?: [number, number, number, number]\n prescription?: string\n previousBest?: string\n supersetPosition?: 'first' | 'last' | 'middle' | null\n supersetColor?: string\n}\n\n/** Column headers; the weight column reflects the card's unit (LBS / KG). */\nfunction buildColumnHeaders(unit: 'lbs' | 'kg'): string[] {\n return ['SET', 'PREV', 'REPS', unit.toUpperCase(), 'RPE']\n}\n\nfunction getSupersetBorderRadius(\n position: ExerciseCardProps['supersetPosition'],\n): Record<string, number> {\n switch (position) {\n case 'first':\n return {\n borderTopLeftRadius: 12,\n borderTopRightRadius: 12,\n borderBottomLeftRadius: 8,\n borderBottomRightRadius: 8,\n }\n case 'last':\n return {\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n borderBottomLeftRadius: 12,\n borderBottomRightRadius: 12,\n }\n case 'middle':\n return {\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n borderBottomLeftRadius: 8,\n borderBottomRightRadius: 8,\n }\n default:\n return {\n borderTopLeftRadius: 12,\n borderTopRightRadius: 12,\n borderBottomLeftRadius: 12,\n borderBottomRightRadius: 12,\n }\n }\n}\n\nfunction getSupersetMargin(\n position: ExerciseCardProps['supersetPosition'],\n): Record<string, number> {\n if (position === 'first' || position === 'middle') {\n return { marginBottom: 2 }\n }\n return {}\n}\n\nfunction formatSummary(summary: ExerciseCardProps['summary']): string {\n if (!summary) return ''\n return `${summary.sets}\\u00D7${summary.reps} @ ${roundWeight(summary.weight)} ${summary.unit}`\n}\n\nfunction formatAccessibilityLabel(\n name: string,\n summary: ExerciseCardProps['summary'],\n prescription: ExerciseCardProps['prescription'],\n): string {\n if (summary) return `${name}, ${formatSummary(summary)}`\n if (prescription) return `${name}, ${prescription}`\n return name\n}\n\nfunction CollapsedCard({\n name,\n onToggle,\n summary,\n e1rm,\n isPR,\n setVelocities,\n totalPlannedSets,\n supersetPosition,\n}: ExerciseCardProps) {\n const [pressed, setPressed] = useState(false)\n const completedSets = setVelocities?.length ?? 0\n const remaining = Math.max(0, (totalPlannedSets ?? 0) - completedSets)\n const borderRadius = getSupersetBorderRadius(supersetPosition)\n const supersetMargin = getSupersetMargin(supersetPosition)\n\n return (\n <Pressable\n onPress={onToggle}\n onPressIn={() => setPressed(true)}\n onPressOut={() => setPressed(false)}\n accessibilityRole=\"button\"\n accessibilityLabel={formatAccessibilityLabel(name, summary, undefined)}\n testID=\"exercise-card\"\n >\n <View\n className={pressed ? 'bg-surface-raised' : undefined}\n style={{\n padding: 12,\n paddingHorizontal: 14,\n cursor: 'pointer',\n ...borderRadius,\n ...supersetMargin,\n }}\n >\n <View\n className=\"flex-row items-center\"\n testID=\"exercise-card-header\"\n >\n <Text\n className=\"text-text-primary\"\n style={{\n fontSize: 14,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n }}\n testID=\"exercise-card-name\"\n >\n {name}\n </Text>\n <View className=\"flex-1\" />\n {summary && (\n <Text\n className=\"text-text-secondary\"\n style={{\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n marginRight: 8,\n }}\n testID=\"exercise-card-summary\"\n >\n {formatSummary(summary)}\n </Text>\n )}\n {e1rm && (\n <WeightBadge\n value={roundWeight(e1rm.value)}\n unit={e1rm.unit}\n size=\"sm\"\n showIcon={false}\n testID=\"exercise-card-e1rm\"\n />\n )}\n {isPR && (\n <View style={{ marginLeft: 4 }}>\n <PrBadge type=\"e1rm\" compact animate={false} />\n </View>\n )}\n </View>\n\n {(completedSets > 0 || remaining > 0) && (\n <View\n className=\"flex-row\"\n style={{ marginTop: 6, gap: 4 }}\n testID=\"exercise-card-strips\"\n >\n {setVelocities?.map((velocities, i) => (\n <VelocityStrip\n key={i}\n velocities={velocities}\n variant=\"mini\"\n testID={`exercise-card-velocity-strip-${i}`}\n />\n ))}\n {Array.from({ length: remaining }, (_, i) => (\n <PlaceholderStrip\n key={`placeholder-${i}`}\n testID={`exercise-card-placeholder-${i}`}\n />\n ))}\n </View>\n )}\n </View>\n </Pressable>\n )\n}\n\nfunction ExpandedCard({\n name,\n onToggle,\n summary,\n e1rm,\n isPR,\n sets,\n tempo,\n supersetPosition,\n}: ExerciseCardProps) {\n const borderRadius = getSupersetBorderRadius(supersetPosition)\n const supersetMargin = getSupersetMargin(supersetPosition)\n // Summary is the card-level authority for the weight column; fall back to the\n // first set's unit, then lbs. (Mixed per-set units keep the card-level label.)\n const unit = summary?.unit ?? sets?.[0]?.unit ?? 'lbs'\n const columnHeaders = buildColumnHeaders(unit)\n\n return (\n <View\n className=\"bg-surface-elevated border-border\"\n style={{\n borderWidth: 1,\n ...borderRadius,\n ...supersetMargin,\n }}\n testID=\"exercise-card\"\n >\n <Pressable\n onPress={onToggle}\n accessibilityRole=\"button\"\n accessibilityLabel={formatAccessibilityLabel(name, summary, undefined)}\n aria-expanded={true}\n testID=\"exercise-card-header\"\n >\n <View\n className=\"flex-row items-center\"\n style={{\n padding: 12,\n paddingHorizontal: 14,\n paddingBottom: 10,\n borderBottomWidth: 1,\n borderBottomColor: resolveColor('border-default'),\n }}\n >\n <Text\n className=\"text-text-primary\"\n style={{\n fontSize: 14,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n }}\n testID=\"exercise-card-name\"\n >\n {name}\n </Text>\n <View className=\"flex-1\" />\n {summary && (\n <Text\n className=\"text-text-secondary\"\n style={{\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n marginRight: 8,\n }}\n testID=\"exercise-card-summary\"\n >\n {formatSummary(summary)}\n </Text>\n )}\n {e1rm && (\n <WeightBadge\n value={roundWeight(e1rm.value)}\n unit={e1rm.unit}\n size=\"sm\"\n showIcon={false}\n testID=\"exercise-card-e1rm\"\n />\n )}\n {isPR && (\n <View style={{ marginLeft: 4 }}>\n <PrBadge type=\"e1rm\" compact animate={false} />\n </View>\n )}\n </View>\n </Pressable>\n\n {tempo && (\n <View style={{ marginTop: 8, paddingHorizontal: 14 }} testID=\"exercise-card-tempo\">\n <TempoDisplay tempo={tempo} size=\"sm\" />\n </View>\n )}\n\n <View\n className=\"flex-row\"\n style={{\n paddingVertical: 8,\n paddingHorizontal: 8,\n paddingBottom: 4,\n }}\n testID=\"exercise-card-column-headers\"\n >\n {columnHeaders.map((header, i) => {\n const widths = [36, undefined, 44, 56, 36]\n const width = widths[i]\n const isFlex = width === undefined\n\n return (\n <View\n key={header}\n style={{\n ...(isFlex ? {} : { width }),\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n }}\n {...(isFlex ? { className: 'flex-1' } : {})}\n >\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 10,\n fontWeight: '600',\n fontFamily: 'Inter, sans-serif',\n textTransform: 'uppercase',\n letterSpacing: 0.8,\n }}\n >\n {header}\n </Text>\n </View>\n )\n })}\n </View>\n\n {sets && (\n <View testID=\"exercise-card-sets\">\n {sets.map((setProps, i) => (\n <SetRow key={i} {...setProps} />\n ))}\n </View>\n )}\n </View>\n )\n}\n\nfunction UpcomingCard({\n name,\n prescription,\n previousBest,\n supersetPosition,\n}: ExerciseCardProps) {\n const borderRadius = getSupersetBorderRadius(supersetPosition)\n const supersetMargin = getSupersetMargin(supersetPosition)\n\n return (\n <View\n style={{\n opacity: 0.6,\n padding: 12,\n paddingHorizontal: 14,\n ...borderRadius,\n ...supersetMargin,\n }}\n accessibilityLabel={formatAccessibilityLabel(name, undefined, prescription)}\n testID=\"exercise-card\"\n >\n <View className=\"flex-row items-center\">\n <Text\n className=\"text-text-primary\"\n style={{\n fontSize: 14,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n }}\n testID=\"exercise-card-name\"\n >\n {name}\n </Text>\n {prescription && (\n <Text\n className=\"text-text-secondary\"\n style={{\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n marginLeft: 8,\n }}\n testID=\"exercise-card-prescription\"\n >\n {prescription}\n </Text>\n )}\n <View className=\"flex-1\" />\n {previousBest && (\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n }}\n testID=\"exercise-card-previous-best\"\n >\n {previousBest}\n </Text>\n )}\n </View>\n </View>\n )\n}\n\nexport function ExerciseCard(props: ExerciseCardProps) {\n switch (props.state) {\n case 'collapsed':\n return <CollapsedCard {...props} />\n case 'expanded':\n return <ExpandedCard {...props} />\n case 'upcoming':\n return <UpcomingCard {...props} />\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}\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 never}\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","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useState } from 'react'\nimport { View, Pressable, Animated, type ViewProps } from 'react-native'\n\nconst BRAND_PRIMARY = '#FF7900'\n\nexport type MesoStatus = 'completed' | 'current' | 'upcoming'\n\nexport interface Meso {\n id: string\n name: string\n weekCount: number\n status: MesoStatus\n /**\n * 1-based week index of progress within a `current` meso.\n * Drives the solid fill width. Ignored for non-current mesos.\n */\n currentWeek?: number\n}\n\nexport interface MesoProgressBarProps extends ViewProps {\n mesos: Meso[]\n activeMesoId: string | null\n onMesoPress: (mesoId: string) => void\n className?: string\n}\n\nconst segmentBgColors: Record<MesoStatus, string> = {\n completed: 'rgba(20,184,166,0.3)',\n current: 'rgba(255,121,0,0.5)',\n upcoming: 'rgba(255,255,255,0.06)',\n}\n\nfunction clampProgress(currentWeek: number | undefined, weekCount: number): number {\n if (currentWeek == null || weekCount <= 0) return 0\n const ratio = currentWeek / weekCount\n return Math.max(0, Math.min(1, ratio))\n}\n\ninterface SegmentProps {\n meso: Meso\n isActive: boolean\n onPress: (id: string) => void\n}\n\nfunction MesoSegment({ meso, isActive, onPress }: SegmentProps) {\n const [pressScale] = useState(() => new Animated.Value(1))\n\n const handlePressIn = () => {\n Animated.timing(pressScale, {\n toValue: 0.98,\n duration: 150,\n useNativeDriver: true,\n }).start()\n }\n\n const handlePressOut = () => {\n Animated.timing(pressScale, {\n toValue: 1,\n duration: 150,\n useNativeDriver: true,\n }).start()\n }\n\n const progress = meso.status === 'current'\n ? clampProgress(meso.currentWeek, meso.weekCount)\n : 0\n\n // weekCount drives the segment's flex width; guard 0 / negative so flex stays\n // a valid positive value and the segment never collapses out of the layout.\n const segmentFlex = Math.max(1, meso.weekCount)\n\n return (\n <Pressable\n style={{ flex: segmentFlex }}\n onPress={() => onPress(meso.id)}\n onPressIn={handlePressIn}\n onPressOut={handlePressOut}\n accessibilityRole=\"button\"\n accessibilityLabel={`${meso.name}, ${meso.status}`}\n testID={`meso-segment-${meso.id}`}\n >\n <Animated.View\n style={[\n {\n height: 8,\n borderRadius: 4,\n overflow: 'hidden',\n backgroundColor: segmentBgColors[meso.status],\n transform: [{ scale: pressScale }],\n },\n isActive\n ? {\n borderWidth: 2,\n borderColor: BRAND_PRIMARY,\n transform: [{ scale: 1.02 }, { scale: pressScale }],\n }\n : undefined,\n ]}\n testID={`meso-segment-inner-${meso.id}`}\n >\n {meso.status === 'current' && progress > 0 && (\n <View\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n width: `${progress * 100}%`,\n backgroundColor: BRAND_PRIMARY,\n }}\n testID={`meso-segment-fill-${meso.id}`}\n />\n )}\n </Animated.View>\n </Pressable>\n )\n}\n\n/**\n * Segmented horizontal bar of mesocycles. Each segment is tappable and its\n * flex width is proportional to the meso's `weekCount`. The active segment is\n * highlighted with a 2px brand border to stay in sync with MesoCard selection.\n *\n * @example\n * <MesoProgressBar\n * mesos={[\n * { id: 'm1', name: 'Accumulation', weekCount: 4, status: 'completed' },\n * { id: 'm2', name: 'Intensification', weekCount: 3, status: 'current', currentWeek: 2 },\n * { id: 'm3', name: 'Peak', weekCount: 2, status: 'upcoming' },\n * ]}\n * activeMesoId=\"m2\"\n * onMesoPress={(id) => console.log(id)}\n * />\n */\nexport function MesoProgressBar({\n mesos,\n activeMesoId,\n onMesoPress,\n className,\n ...props\n}: MesoProgressBarProps) {\n return (\n <View\n className={className}\n style={{\n flexDirection: 'row',\n gap: 2,\n paddingHorizontal: 16,\n alignItems: 'center',\n }}\n testID=\"meso-progress-bar\"\n {...props}\n >\n {mesos.map((meso) => (\n <MesoSegment\n key={meso.id}\n meso={meso}\n isActive={meso.id === activeMesoId}\n onPress={onMesoPress}\n />\n ))}\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, type ViewProps } from 'react-native'\nimport { WorkoutPill, type WorkoutPillStatus } from './WorkoutPill'\nimport { IntensityBar } from './IntensityBar'\n\nconst BRAND_PRIMARY = '#FF7900'\n\nexport interface WeekRowWorkout {\n name: string\n status: WorkoutPillStatus\n onPress?: () => void\n}\n\nexport interface WeekRowProps extends ViewProps {\n /** Week index within the mesocycle (1-based) */\n weekNumber: number\n /** Total weeks in the mesocycle */\n totalWeeks: number\n /** Workouts scheduled for this week */\n workouts: WeekRowWorkout[]\n /** Planned intensity for the week, 0-1 */\n intensityLevel: number\n /** Optional MRV/overexertion threshold, 0-1 */\n intensityThreshold?: number\n /** Highlights this row as the active week */\n isCurrent?: boolean\n /** Renders this row as a deload week (purple tint, deload pills) */\n isDeload?: boolean\n className?: string\n}\n\n/**\n * A single week within a mesocycle, showing the week number, its workout pills,\n * and a right-aligned vertical intensity indicator.\n *\n * @example\n * <WeekRow\n * weekNumber={1}\n * totalWeeks={4}\n * workouts={[\n * { name: 'Upper', status: 'completed' },\n * { name: 'Lower', status: 'current' },\n * ]}\n * intensityLevel={0.55}\n * intensityThreshold={0.8}\n * isCurrent\n * />\n */\nexport function WeekRow({\n weekNumber,\n totalWeeks,\n workouts,\n intensityLevel,\n intensityThreshold,\n isCurrent = false,\n isDeload = false,\n className,\n ...props\n}: WeekRowProps) {\n const rowStyle: Record<string, unknown> = {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n paddingVertical: 10,\n paddingHorizontal: 12,\n gap: 12,\n }\n\n if (isDeload) {\n rowStyle.backgroundColor = 'rgba(147,51,234,0.06)'\n }\n\n if (isCurrent) {\n rowStyle.backgroundColor = 'rgba(255,121,0,0.04)'\n rowStyle.borderLeftWidth = 2\n rowStyle.borderLeftColor = BRAND_PRIMARY\n }\n\n return (\n <View\n className={className}\n style={rowStyle}\n accessibilityLabel={`Week ${weekNumber} of ${totalWeeks}, ${workouts.length} workouts`}\n testID=\"week-row\"\n {...props}\n >\n <View\n style={{ flexDirection: 'row', alignItems: 'center', width: 32, gap: 4 }}\n testID=\"week-row-number\"\n >\n {isCurrent && (\n <View\n style={{\n width: 6,\n height: 6,\n borderRadius: 3,\n backgroundColor: BRAND_PRIMARY,\n }}\n accessibilityElementsHidden\n testID=\"week-row-current-dot\"\n />\n )}\n <Text\n className={isCurrent ? undefined : 'text-text-primary'}\n style={{\n fontSize: 13,\n fontWeight: '700',\n fontFamily: 'Inter, sans-serif',\n color: isCurrent ? BRAND_PRIMARY : undefined,\n }}\n accessibilityElementsHidden\n >\n {`W${weekNumber}`}\n </Text>\n </View>\n\n <View\n style={{ flex: 1, flexDirection: 'row', alignItems: 'center', flexWrap: 'wrap', gap: 6 }}\n testID=\"week-row-pills\"\n >\n {workouts.map((workout, i) => (\n <WorkoutPill\n key={i}\n name={workout.name}\n status={isDeload ? 'deload' : workout.status}\n onPress={workout.onPress}\n />\n ))}\n </View>\n\n <View testID=\"week-row-intensity\">\n <IntensityBar\n level={intensityLevel}\n threshold={intensityThreshold}\n orientation=\"vertical\"\n size={24}\n thickness={6}\n />\n </View>\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, ScrollView, Pressable, type ViewProps } from 'react-native'\nimport { Card } from '../../ui/card'\nimport { ExerciseCard, type ExerciseCardProps } from './ExerciseCard'\nimport {\n MuscleGroupChip,\n type VolumeStatus,\n} from './MuscleGroupChip'\n\nexport type WorkoutStatus = 'completed' | 'today' | 'upcoming'\n\n/** Spec volume-status vocabulary; mapped to MuscleGroupChip's VolumeStatus internally. */\nexport type WorkoutMuscleVolumeStatus =\n | 'under'\n | 'maintenance'\n | 'productive'\n | 'over'\n\nexport interface WorkoutMuscleGroup {\n /** Muscle group identifier (free-form to match plan data). */\n group: string\n /** Display label, may be abbreviated. */\n label: string\n /** Volume status relative to landmarks. */\n volumeStatus?: WorkoutMuscleVolumeStatus\n}\n\nexport interface WorkoutCardProps extends ViewProps {\n name: string\n date: string\n /** e.g. \"45 min\" */\n duration?: string\n status: WorkoutStatus\n muscleGroups: WorkoutMuscleGroup[]\n totalSets: number\n /** Total lbs/kg moved across the workout. */\n totalVolume?: number\n unit: 'lbs' | 'kg'\n exercises?: ExerciseCardProps[]\n expanded?: boolean\n onToggle?: () => void\n className?: string\n}\n\nconst COLORS = {\n statusSuccess: '#14B8A6',\n brandPrimary: '#FF7900',\n borderDefault: '#1F1F1F',\n brandPrimarySubtle: 'rgba(255,121,0,0.06)',\n}\n\nconst statusBorderColors: Record<WorkoutStatus, string> = {\n completed: COLORS.statusSuccess,\n today: COLORS.brandPrimary,\n upcoming: COLORS.borderDefault,\n}\n\n/** Maps the spec's volume-status vocabulary onto MuscleGroupChip's enum. */\nconst volumeStatusMap: Record<WorkoutMuscleVolumeStatus, VolumeStatus> = {\n under: 'behind',\n maintenance: 'ontrack',\n productive: 'target',\n over: 'over',\n}\n\nfunction formatStats(\n totalSets: number,\n totalVolume: number | undefined,\n unit: 'lbs' | 'kg',\n duration: string | undefined,\n): string {\n const parts = [`${totalSets} sets`]\n if (totalVolume != null) parts.push(`${totalVolume} ${unit}`)\n if (duration) parts.push(duration)\n return parts.join(' · ')\n}\n\n/**\n * A workout within a week: name, date, duration, muscle-group pills, and a\n * stats summary. When expandable it renders contained ExerciseCards on expand.\n * Status drives a colored left border, today adds a brand tint, and upcoming\n * is dimmed.\n *\n * @example\n * <WorkoutCard\n * name=\"Upper A\"\n * date=\"Mon, Jun 23\"\n * duration=\"45 min\"\n * status=\"today\"\n * muscleGroups={[{ group: 'chest', label: 'Chest', volumeStatus: 'productive' }]}\n * totalSets={18}\n * totalVolume={12450}\n * unit=\"lbs\"\n * expanded\n * onToggle={() => {}}\n * exercises={exercises}\n * />\n */\nexport function WorkoutCard({\n name,\n date,\n duration,\n status,\n muscleGroups,\n totalSets,\n totalVolume,\n unit,\n exercises,\n expanded = false,\n onToggle,\n className,\n ...props\n}: WorkoutCardProps) {\n const isExpandable = onToggle != null\n const isUpcoming = status === 'upcoming'\n const isToday = status === 'today'\n\n const summary = (\n <View style={{ padding: 14 }} testID=\"workout-card-body\">\n <View className=\"flex-row items-center\" testID=\"workout-card-header\">\n <Text\n className=\"text-text-primary\"\n style={{\n fontSize: 15,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n }}\n testID=\"workout-card-name\"\n >\n {name}\n </Text>\n <View className=\"flex-1\" />\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n }}\n testID=\"workout-card-date\"\n >\n {date}\n </Text>\n </View>\n\n <Text\n className=\"text-text-secondary\"\n style={{\n marginTop: 4,\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n }}\n testID=\"workout-card-stats\"\n >\n {formatStats(totalSets, totalVolume, unit, duration)}\n </Text>\n\n {muscleGroups.length > 0 && (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={{ gap: 5 }}\n style={{ marginTop: 8 }}\n testID=\"workout-card-muscle-groups\"\n >\n {muscleGroups.map((muscle) => (\n <MuscleGroupChip\n key={muscle.group}\n name={muscle.label}\n volumeStatus={\n muscle.volumeStatus\n ? volumeStatusMap[muscle.volumeStatus]\n : undefined\n }\n />\n ))}\n </ScrollView>\n )}\n </View>\n )\n\n return (\n <Card\n variant=\"accent\"\n elevation={1}\n accentColor={statusBorderColors[status]}\n bgColor={isToday ? COLORS.brandPrimarySubtle : undefined}\n className={className}\n style={isUpcoming ? { opacity: 0.6 } : undefined}\n testID=\"workout-card\"\n {...props}\n >\n {isExpandable ? (\n <Pressable\n onPress={onToggle}\n accessibilityRole=\"button\"\n accessibilityLabel={`${name} workout, ${date}, ${status}`}\n aria-expanded={expanded}\n testID=\"workout-card-toggle\"\n >\n {summary}\n </Pressable>\n ) : (\n <View\n accessibilityLabel={`${name} workout, ${date}, ${status}`}\n testID=\"workout-card-static\"\n >\n {summary}\n </View>\n )}\n\n {expanded && exercises && exercises.length > 0 && (\n <View\n style={{ paddingHorizontal: 8, paddingBottom: 8, gap: 6 }}\n testID=\"workout-card-exercises\"\n >\n {exercises.map((exercise, i) => (\n <ExerciseCard key={i} {...exercise} />\n ))}\n </View>\n )}\n </Card>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState } from 'react'\nimport { View, Text, Pressable, Animated, Easing, type ViewProps } from 'react-native'\nimport { Card } from '../../ui/card'\nimport { Badge } from '../../ui/badge'\nimport { WeekRow, type WeekRowProps } from './WeekRow'\n\nconst BRAND_PRIMARY = '#FF7900'\nconst BRAND_PRIMARY_DARK = '#C45E00'\nconst BRAND_PRIMARY_LIGHT = '#FFB066'\nconst BORDER_DEFAULT = '#1F1F1F'\n\n/** Gradient stops for the 3px top accent: dark -> primary -> light. */\nconst ACCENT_STOPS = [BRAND_PRIMARY_DARK, BRAND_PRIMARY, BRAND_PRIMARY_LIGHT]\n\nexport interface MesoVolumeHeatmapEntry {\n /** Muscle group identifier (free-form to match plan data). */\n group: string\n /** Planned volume intensity for the group, 0-100. */\n percentage: number\n}\n\nexport interface MesoCardProps extends ViewProps {\n /** Mesocycle name, e.g. \"Accumulation\". */\n name: string\n /** Training goal, e.g. \"Hypertrophy\", \"Strength\", \"Peaking\". */\n goal: string\n /** Training split, e.g. \"Upper/Lower\", \"Push/Pull/Legs\". */\n split: string\n /** Week range label, e.g. \"Weeks 1-4\". */\n weekRange: string\n /** Current week within the mesocycle (1-based). */\n currentWeek?: number\n /** Total weeks in the mesocycle. */\n totalWeeks: number\n /** Weeks rendered as a WeekRow list when expanded. */\n weeks: WeekRowProps[]\n /** Whether the card is expanded to reveal the week list. */\n expanded?: boolean\n /** Toggles expansion; makes the header a button when provided. */\n onToggle?: () => void\n /** Whether this meso is highlighted in the MesoProgressBar. */\n highlighted?: boolean\n /** Volume heatmap data per muscle group for the meso. */\n volumeHeatmap?: MesoVolumeHeatmapEntry[]\n className?: string\n}\n\n/**\n * Maps a 0-100 volume percentage onto a brand-primary tint whose opacity\n * tracks intensity, keeping a visible floor so low-volume groups stay legible.\n */\nfunction heatmapColor(percentage: number): string {\n const clamped = Math.max(0, Math.min(100, percentage))\n const opacity = 0.12 + (clamped / 100) * 0.78\n return `rgba(255,121,0,${opacity.toFixed(3)})`\n}\n\n/**\n * A mesocycle card with name, goal, split, week range, an optional volume\n * heatmap strip, and an expandable WeekRow list. Highlighting animates the\n * border toward brand-primary with a subtle glow to stay in sync with the\n * MesoProgressBar.\n *\n * @example\n * <MesoCard\n * name=\"Accumulation\"\n * goal=\"Hypertrophy\"\n * split=\"Upper/Lower\"\n * weekRange=\"Weeks 1-4\"\n * currentWeek={2}\n * totalWeeks={4}\n * weeks={weeks}\n * volumeHeatmap={[{ group: 'chest', percentage: 80 }]}\n * expanded\n * onToggle={() => {}}\n * highlighted\n * />\n */\nexport function MesoCard({\n name,\n goal,\n split,\n weekRange,\n currentWeek,\n totalWeeks,\n weeks,\n expanded = false,\n onToggle,\n highlighted = false,\n volumeHeatmap,\n className,\n ...props\n}: MesoCardProps) {\n const isExpandable = onToggle != null\n const [highlight] = useState(() => new Animated.Value(highlighted ? 1 : 0))\n\n useEffect(() => {\n const animation = Animated.timing(highlight, {\n toValue: highlighted ? 1 : 0,\n duration: 250,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n })\n animation.start()\n return () => animation.stop()\n }, [highlighted, highlight])\n\n const borderColor = highlight.interpolate({\n inputRange: [0, 1],\n outputRange: [BORDER_DEFAULT, BRAND_PRIMARY],\n })\n\n const header = (\n <View style={{ paddingHorizontal: 14, paddingTop: 12, paddingBottom: 10 }} testID=\"meso-card-body\">\n <View className=\"flex-row items-center\" style={{ gap: 8 }} testID=\"meso-card-header\">\n <Text\n className=\"text-text-primary\"\n style={{\n fontSize: 15,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n }}\n testID=\"meso-card-name\"\n >\n {name}\n </Text>\n <Badge variant=\"subtle\" color=\"primary\" size=\"sm\" testID=\"meso-card-goal-badge\">\n {goal}\n </Badge>\n </View>\n\n <Text\n className=\"text-text-secondary\"\n style={{\n marginTop: 4,\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n }}\n testID=\"meso-card-subheader\"\n >\n {`${split} · ${weekRange}`}\n </Text>\n\n {volumeHeatmap && volumeHeatmap.length > 0 && (\n <View\n className=\"flex-row items-center\"\n style={{ marginTop: 10, gap: 3 }}\n accessibilityElementsHidden\n testID=\"meso-card-heatmap\"\n >\n {volumeHeatmap.map((entry) => (\n <View\n key={entry.group}\n style={{\n flex: 1,\n height: 8,\n borderRadius: 2,\n backgroundColor: heatmapColor(entry.percentage),\n }}\n testID=\"meso-card-heatmap-cell\"\n />\n ))}\n </View>\n )}\n </View>\n )\n\n return (\n <Animated.View style={highlighted ? { transform: [{ scale: 1.0 }] } : undefined} testID=\"meso-card-wrapper\">\n <Card\n variant=\"outline\"\n elevation={2}\n borderColor={highlighted ? BRAND_PRIMARY : BORDER_DEFAULT}\n className={className}\n style={[\n { borderColor: borderColor as unknown as string },\n highlighted\n ? { boxShadow: '0 0 12px 2px rgba(255,121,0,0.25)' }\n : undefined,\n ]}\n testID=\"meso-card\"\n {...props}\n >\n <View\n className=\"flex-row\"\n style={{ position: 'absolute', top: 0, left: 0, right: 0, height: 3, zIndex: 1 }}\n accessibilityElementsHidden\n testID=\"meso-card-accent\"\n >\n {ACCENT_STOPS.map((color) => (\n <View key={color} style={{ flex: 1, backgroundColor: color }} />\n ))}\n </View>\n\n {isExpandable ? (\n <Pressable\n onPress={onToggle}\n accessibilityRole=\"button\"\n accessibilityLabel={`${name}, ${goal}, ${weekRange}`}\n aria-expanded={expanded}\n testID=\"meso-card-toggle\"\n >\n {header}\n </Pressable>\n ) : (\n <View\n accessibilityLabel={`${name}, ${goal}, ${weekRange}`}\n testID=\"meso-card-static\"\n >\n {header}\n </View>\n )}\n\n {expanded && weeks.length > 0 && (\n <View\n style={{ borderTopWidth: 1, borderTopColor: BORDER_DEFAULT }}\n testID=\"meso-card-weeks\"\n >\n {weeks.map((week) => (\n <WeekRow\n key={week.weekNumber}\n {...week}\n totalWeeks={week.totalWeeks ?? totalWeeks}\n isCurrent={week.isCurrent ?? week.weekNumber === currentWeek}\n />\n ))}\n </View>\n )}\n </Card>\n </Animated.View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { Star } from 'lucide-react'\nimport { Drawer, DrawerBody } from '../../ui/drawer'\nimport { resolveColor } from '../../../theme/resolve-color'\n\nconst BRAND_PRIMARY = '#FF7900'\nconst RECENT_BORDER = 'rgba(255,176,32,0.3)'\nconst RECENT_GLOW = '0 0 12px rgba(255,176,32,0.06)'\n// Native-safe fallback for the conditional row border (recent uses a computed\n// rgba, so className can't express both branches).\nconst BORDER_DEFAULT = resolveColor('border-default')\n\nexport type PrRecordType = 'e1rm' | 'weight' | 'reps' | 'volume' | 'velocity'\n\nexport interface PrRecord {\n /** PR category, drives the row label and ordering grouping. */\n type: PrRecordType\n /** Numeric magnitude (paired with `unit`) or a pre-formatted display string. */\n value: string | number\n /** Unit suffix appended to numeric values, e.g. \"lbs\" or \"kg\". */\n unit?: 'lbs' | 'kg'\n /** Display date for when the record was set, e.g. \"Mar 14\" or \"2 weeks ago\". */\n date: string\n /** Marks the record as recently set; adds a subtle amber glow highlight. */\n isRecent?: boolean\n}\n\nexport interface PrHistoryModalProps extends ViewProps {\n /** Identifier of the exercise whose PR history is shown. */\n exerciseId: string\n /** Human-readable exercise name for the title and a11y label; falls back to `exerciseId`. */\n exerciseName?: string\n /** PR records to display, expected newest-first. */\n records: PrRecord[]\n /** Whether the bottom sheet is visible. */\n isOpen?: boolean\n /** Alias for `isOpen` (spec wording: \"isOpen/visible\"). `isOpen` wins when both are set. */\n visible?: boolean\n /** Invoked when the sheet requests to close (backdrop, close button, or back gesture). */\n onClose: () => void\n}\n\nconst TYPE_LABELS: Record<PrRecordType, string> = {\n e1rm: 'e1RM',\n weight: 'Weight',\n reps: 'Reps',\n volume: 'Volume',\n velocity: 'Velocity',\n}\n\nfunction recordLabel(type: PrRecordType): string {\n return TYPE_LABELS[type] ?? type\n}\n\nfunction recordValueText({ value, unit }: PrRecord): string {\n if (typeof value === 'number') {\n return unit ? `${value} ${unit}` : String(value)\n }\n return value\n}\n\nfunction PrRecordRow({ record, index }: { record: PrRecord; index: number }) {\n const label = recordLabel(record.type)\n const valueText = recordValueText(record)\n const a11yLabel = record.isRecent\n ? `${label} personal record: ${valueText}, ${record.date}, recent`\n : `${label} personal record: ${valueText}, ${record.date}`\n\n return (\n <View\n accessibilityRole=\"text\"\n accessibilityLabel={a11yLabel}\n className=\"flex-row items-center bg-surface-raised\"\n style={{\n gap: 10,\n paddingVertical: 10,\n paddingHorizontal: 12,\n marginBottom: 8,\n borderRadius: 8,\n borderWidth: 1,\n borderColor: record.isRecent ? RECENT_BORDER : BORDER_DEFAULT,\n ...(record.isRecent ? { boxShadow: RECENT_GLOW } : {}),\n }}\n testID={`pr-history-modal-record-${index}`}\n >\n <Star size={16} color={BRAND_PRIMARY} fill={BRAND_PRIMARY} strokeWidth={2} />\n <Text\n className=\"text-text-secondary\"\n style={{\n flex: 1,\n fontSize: 13,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n }}\n testID={`pr-history-modal-record-${index}-type`}\n >\n {label}\n </Text>\n <Text\n className=\"text-text-primary\"\n style={{\n fontSize: 14,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n }}\n testID={`pr-history-modal-record-${index}-value`}\n >\n {valueText}\n </Text>\n <Text\n className=\"text-text-tertiary\"\n style={{\n minWidth: 64,\n textAlign: 'right',\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n }}\n testID={`pr-history-modal-record-${index}-date`}\n >\n {record.date}\n </Text>\n </View>\n )\n}\n\n/**\n * Bottom-sheet modal listing an exercise's personal-record history. Each row\n * shows the PR type, value, and date; recent records get a subtle amber glow.\n * Built on the titan `Drawer` primitive (bottom placement) so it inherits\n * backdrop dismissal, the back gesture, and `role=\"dialog\"` semantics.\n *\n * Typically triggered by tapping a `WeightBadge`, but the modal itself is\n * controlled — the trigger lives in the consumer.\n *\n * @example\n * <PrHistoryModal\n * exerciseId=\"bench-press\"\n * exerciseName=\"Bench Press\"\n * isOpen={open}\n * onClose={() => setOpen(false)}\n * records={[\n * { type: 'e1rm', value: 245, unit: 'lbs', date: 'Mar 14', isRecent: true },\n * { type: 'reps', value: '8 @ 185 lbs', date: 'Feb 28' },\n * ]}\n * />\n */\nexport function PrHistoryModal({\n exerciseId,\n exerciseName,\n records,\n isOpen,\n visible,\n onClose,\n ...props\n}: PrHistoryModalProps) {\n const open = isOpen ?? visible ?? false\n const exercise = exerciseName ?? exerciseId\n const dialogLabel = `${exercise} PR history`\n\n return (\n <Drawer\n isOpen={open}\n onClose={onClose}\n placement=\"bottom\"\n showCloseButton={false}\n className=\"rounded-t-2xl h-auto max-h-[85%]\"\n accessibilityLabel={dialogLabel}\n testID=\"pr-history-modal\"\n {...props}\n >\n <View\n accessibilityElementsHidden\n className=\"bg-border\"\n style={{\n alignSelf: 'center',\n width: 40,\n height: 4,\n borderRadius: 2,\n marginTop: 8,\n }}\n testID=\"pr-history-modal-handle\"\n />\n\n <View\n className=\"flex-row items-center justify-between\"\n style={{ paddingHorizontal: 16, paddingTop: 12, paddingBottom: 8 }}\n testID=\"pr-history-modal-header\"\n >\n <Text\n accessibilityRole=\"header\"\n className=\"text-text-primary\"\n style={{\n fontSize: 16,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n }}\n testID=\"pr-history-modal-title\"\n >\n {dialogLabel}\n </Text>\n <Pressable\n onPress={onClose}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close PR history\"\n hitSlop={8}\n style={{ padding: 4, margin: -4 }}\n testID=\"pr-history-modal-close\"\n >\n <Text className=\"text-text-secondary\" style={{ fontSize: 22, lineHeight: 22 }}>\n {'×'}\n </Text>\n </Pressable>\n </View>\n\n <DrawerBody className=\"px-4 pt-0 pb-4\">\n {records.length === 0 ? (\n <View style={{ paddingVertical: 24 }} testID=\"pr-history-modal-empty\">\n <Text\n className=\"text-text-tertiary\"\n style={{\n textAlign: 'center',\n fontSize: 13,\n fontFamily: 'Inter, sans-serif',\n }}\n >\n No personal records yet\n </Text>\n </View>\n ) : (\n records.map((record, index) => (\n <PrRecordRow\n key={`${record.type}-${record.date}-${index}`}\n record={record}\n index={index}\n />\n ))\n )}\n </DrawerBody>\n </Drawer>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { View, Text, Pressable } from 'react-native'\nimport { Card } from '../../ui/card'\nimport { Badge, type BadgeColor } from '../../ui/badge'\n\nconst BRAND_PRIMARY = '#FF7900'\nconst BRAND_PRIMARY_SUBTLE = 'rgba(255,121,0,0.12)'\nconst STATUS_SUCCESS = '#14B8A6'\nconst STATUS_WARNING = '#FFB020'\nconst STATUS_ERROR = '#D14343'\n\n/** Emoji option sets per known factor, keyed by lowercase id/label. */\nconst EMOJI_SETS: Record<string, readonly string[]> = {\n sleep: ['😴', '😐', '🙂', '😊', '🤩'],\n soreness: ['😵', '😣', '😐', '🙂', '💪'],\n motivation: ['😑', '😐', '🙂', '😄', '🔥'],\n stress: ['😰', '😟', '😐', '😌', '😎'],\n}\nconst DEFAULT_EMOJI_SET = ['😞', '😕', '😐', '🙂', '😄'] as const\n\nexport type WarmUpStatus = 'good' | 'moderate' | 'caution'\n\nexport interface ReadinessFactor {\n /** Stable identifier; also used to pick the emoji set (sleep/soreness/motivation/stress). */\n id: string\n /** Human label, e.g. \"Sleep\". */\n label: string\n /** Selected level, 1-5. */\n value: number\n /** Called with the new 1-5 level when an emoji is tapped. */\n onChange: (value: number) => void\n}\n\nexport interface WarmUpValidation {\n /** Percent below the 14-day rolling velocity average. */\n velocityDeficit: number\n /** Short human recommendation, e.g. \"Velocity on target — proceed as planned\". */\n recommendation: string\n /** Severity of the deficit. */\n status: WarmUpStatus\n}\n\nexport interface ReadinessCheckProps {\n /** Subjective readiness factors (Sleep, Soreness, Motivation, Stress). */\n factors: ReadinessFactor[]\n /** Computed overall readiness score, 0-100. */\n score: number\n /** VBT warm-up validation result, shown once the warm-up set is performed. */\n warmUpValidation?: WarmUpValidation\n /** Whether the VBT warm-up has been performed. */\n warmUpCompleted: boolean\n /** Called when the assessment is confirmed and the workout can begin. */\n onConfirm: () => void\n className?: string\n}\n\n/** Maps a 0-100 readiness score onto a status color. */\nfunction scoreColor(score: number): string {\n if (score < 40) return STATUS_ERROR\n if (score < 70) return STATUS_WARNING\n return STATUS_SUCCESS\n}\n\nconst WARMUP_BADGE: Record<WarmUpStatus, { color: BadgeColor; label: string }> = {\n good: { color: 'success', label: 'Good' },\n moderate: { color: 'warning', label: 'Moderate' },\n caution: { color: 'error', label: 'Caution' },\n}\n\nfunction emojiSet(factor: ReadinessFactor): readonly string[] {\n return EMOJI_SETS[factor.id.toLowerCase()] ?? EMOJI_SETS[factor.label.toLowerCase()] ?? DEFAULT_EMOJI_SET\n}\n\n/** Warm-up velocity phrasing. Deficit is % below the 14-day average, so a\n * non-positive deficit means velocity is on/above average — never \"below\". */\nfunction velocityDeficitText(deficit: number): string {\n if (deficit > 0) return `Velocity ${deficit}% below 14-day average`\n if (deficit < 0) return `Velocity ${Math.abs(deficit)}% above 14-day average`\n return 'Velocity on 14-day average'\n}\n\ninterface EmojiSliderProps {\n factor: ReadinessFactor\n}\n\n/** One factor row: label plus a radiogroup of five tappable emoji. */\nfunction EmojiSlider({ factor }: EmojiSliderProps) {\n const emojis = emojiSet(factor)\n return (\n <View style={{ marginTop: 14 }} testID={`readiness-check-factor-${factor.id}`}>\n <Text\n className=\"text-text-secondary\"\n style={{ fontSize: 12, fontWeight: '500', fontFamily: 'Inter, sans-serif' }}\n testID=\"readiness-check-factor-label\"\n >\n {factor.label}\n </Text>\n <View\n className=\"flex-row items-center\"\n style={{ marginTop: 6, gap: 6 }}\n accessibilityRole=\"radiogroup\"\n aria-label={factor.label}\n testID=\"readiness-check-factor-options\"\n >\n {emojis.map((emoji, index) => {\n const level = index + 1\n const selected = factor.value === level\n return (\n <Pressable\n key={level}\n onPress={() => factor.onChange(level)}\n accessibilityRole=\"radio\"\n accessibilityLabel={`${factor.label} level ${level} of 5`}\n aria-checked={selected}\n testID=\"readiness-check-emoji\"\n className={selected ? undefined : 'border-border bg-surface-raised'}\n style={({ pressed }) => ({\n flex: 1,\n alignItems: 'center',\n paddingVertical: 8,\n borderRadius: 8,\n borderWidth: 1,\n borderColor: selected ? BRAND_PRIMARY : undefined,\n backgroundColor: selected ? BRAND_PRIMARY_SUBTLE : undefined,\n opacity: selected ? 1 : pressed ? 0.8 : 0.55,\n transform: [{ scale: selected ? 1.06 : 1 }],\n })}\n >\n <Text style={{ fontSize: 20 }}>{emoji}</Text>\n </Pressable>\n )\n })}\n </View>\n </View>\n )\n}\n\n/** Circular score gauge: 60px ring colored by range with the score centered. */\nfunction ScoreGauge({ score }: { score: number }) {\n const color = scoreColor(score)\n return (\n <View\n accessibilityRole=\"image\"\n accessibilityLabel={`Readiness score: ${score} out of 100`}\n testID=\"readiness-check-score\"\n className=\"bg-surface-raised\"\n style={{\n width: 60,\n height: 60,\n borderRadius: 30,\n borderWidth: 4,\n borderColor: color,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Text\n style={{ fontSize: 20, fontWeight: '700', fontFamily: '\"Space Grotesk\", sans-serif', color }}\n testID=\"readiness-check-score-value\"\n >\n {score}\n </Text>\n </View>\n )\n}\n\n/** VBT warm-up validation card with status badge and recommendation. */\nfunction WarmUpCard({ validation }: { validation: WarmUpValidation }) {\n const badge = WARMUP_BADGE[validation.status]\n return (\n <View\n className=\"border-border bg-surface-raised\"\n style={{\n marginTop: 16,\n padding: 12,\n borderRadius: 8,\n borderWidth: 1,\n }}\n testID=\"readiness-check-warmup\"\n >\n <View className=\"flex-row items-center justify-between\" style={{ gap: 8 }}>\n <Text\n className=\"text-text-secondary\"\n style={{ fontSize: 12, fontWeight: '600', fontFamily: 'Inter, sans-serif' }}\n testID=\"readiness-check-warmup-deficit\"\n >\n {velocityDeficitText(validation.velocityDeficit)}\n </Text>\n <Badge variant=\"subtle\" color={badge.color} size=\"sm\" testID=\"readiness-check-warmup-badge\">\n {badge.label}\n </Badge>\n </View>\n <Text\n className=\"text-text-primary\"\n style={{ marginTop: 6, fontSize: 13, fontFamily: 'Inter, sans-serif' }}\n testID=\"readiness-check-warmup-recommendation\"\n >\n {validation.recommendation}\n </Text>\n </View>\n )\n}\n\n/**\n * Pre-workout readiness assessment combining subjective emoji sliders with an\n * objective VBT warm-up validation and a computed readiness score.\n *\n * @example\n * <ReadinessCheck\n * factors={[{ id: 'sleep', label: 'Sleep', value: 4, onChange: setSleep }]}\n * score={78}\n * warmUpCompleted\n * warmUpValidation={{ velocityDeficit: 4, recommendation: 'On target', status: 'good' }}\n * onConfirm={start}\n * />\n */\nexport function ReadinessCheck({\n factors,\n score,\n warmUpValidation,\n warmUpCompleted,\n onConfirm,\n className,\n}: ReadinessCheckProps) {\n return (\n <Card variant=\"outline\" elevation={2} className={className} testID=\"readiness-check\">\n <View style={{ padding: 16 }}>\n <View className=\"flex-row items-center justify-between\" style={{ gap: 12 }}>\n <Text\n className=\"text-text-primary\"\n style={{ fontSize: 18, fontWeight: '700', fontFamily: '\"Space Grotesk\", sans-serif' }}\n testID=\"readiness-check-title\"\n >\n How are you feeling?\n </Text>\n <ScoreGauge score={score} />\n </View>\n\n {factors.map((factor) => (\n <EmojiSlider key={factor.id} factor={factor} />\n ))}\n\n {warmUpCompleted && warmUpValidation && <WarmUpCard validation={warmUpValidation} />}\n\n <Pressable\n onPress={onConfirm}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Confirm readiness and start workout\"\n testID=\"readiness-check-confirm\"\n style={({ pressed }) => ({\n marginTop: 16,\n width: '100%',\n alignItems: 'center',\n backgroundColor: BRAND_PRIMARY,\n borderRadius: 8,\n paddingVertical: 12,\n opacity: pressed ? 0.8 : 1,\n })}\n >\n <Text style={{ fontSize: 13, fontWeight: '700', fontFamily: 'Inter, sans-serif', color: '#FFFFFF' }}>\n Start Workout\n </Text>\n </Pressable>\n </View>\n </Card>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useMemo, useState } from 'react'\nimport { View, Text, Pressable, Animated, Easing, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\nimport { resolveColor } from '../../../theme/resolve-color'\n\nconst BRAND_PRIMARY = '#FF7900'\n// Line/border color for the dashed projection, used where a className cannot\n// apply (passed as a prop into an inline style, and a per-edge borderTopColor).\nconst PROJECTION_LINE_COLOR = resolveColor('text-tertiary')\nconst STATUS_SUCCESS = '#14B8A6'\nconst STATUS_ERROR = '#D14343'\nconst STATUS_WARNING = '#FFB020'\nconst GRID_LINE = 'rgba(255,255,255,0.06)'\nconst SUCCESS_PILL_BG = 'rgba(20,184,166,0.10)'\nconst SUCCESS_PILL_BORDER = 'rgba(20,184,166,0.20)'\nconst ERROR_PILL_BG = 'rgba(209,67,67,0.10)'\nconst ERROR_PILL_BORDER = 'rgba(209,67,67,0.20)'\n\n/** Left gutter reserved for y-axis value labels. */\nconst PLOT_LEFT = 26\n/** Approximate tooltip width used for edge clamping. */\nconst TOOLTIP_WIDTH = 124\n\nexport interface StrengthTrendDataPoint {\n /** ISO date string for the session. */\n date: string\n /** Estimated one-rep max in the chart's unit. */\n e1rm: number\n /** Marks a personal-record session (rendered with a star). */\n isPR?: boolean\n /** Optional human label shown in the tooltip instead of the raw date. */\n sessionLabel?: string\n}\n\nexport interface StrengthTrendChartMesoBoundary {\n /** ISO date where the mesocycle boundary falls. */\n date: string\n /** Short label, e.g. \"Hypertrophy\". */\n label: string\n}\n\nexport interface StrengthTrendChartProps extends ViewProps {\n /** Actual e1RM data points, chronological. */\n data: StrengthTrendDataPoint[]\n /** Projected/planned e1RM trajectory, drawn as a dashed line. */\n projection?: StrengthTrendDataPoint[]\n /** Chart plot width in pixels. */\n width: number\n /** Chart plot height in pixels (120-160 for the compact variant). */\n height: number\n /** Mesocycle boundary markers (vertical guides + labels). */\n mesoBoundaries?: StrengthTrendChartMesoBoundary[]\n /** Called when an actual data point is tapped. */\n onPointPress?: (point: StrengthTrendDataPoint) => void\n /** Unit for display and labels. */\n unit: 'lbs' | 'kg'\n /** Animate the left-to-right line draw on mount (default true). */\n animateOnMount?: boolean\n className?: string\n}\n\ninterface Coord {\n x: number\n y: number\n point: StrengthTrendDataPoint\n index: number\n}\n\ninterface Geometry {\n hasData: boolean\n toX: (time: number) => number\n toY: (value: number) => number\n actual: Coord[]\n projection: Coord[]\n gridLines: Array<{ y: number; label: string }>\n boundaries: Array<{ x: number; label: string }>\n}\n\nfunction timeOf(dateStr: string): number {\n const t = Date.parse(dateStr)\n return Number.isNaN(t) ? 0 : t\n}\n\nfunction formatValue(value: number): string {\n return `${Math.round(value)}`\n}\n\nfunction buildGeometry(\n data: StrengthTrendDataPoint[],\n projection: StrengthTrendDataPoint[],\n boundaries: StrengthTrendChartMesoBoundary[],\n width: number,\n height: number,\n): Geometry {\n const values = [...data, ...projection].map((p) => p.e1rm)\n // Empty state keys off actual data only: a projection with no measured\n // sessions still shows the placeholder rather than a \"Current: 0\" chart.\n if (data.length === 0) {\n return {\n hasData: false,\n toX: () => 0,\n toY: () => 0,\n actual: [],\n projection: [],\n gridLines: [],\n boundaries: [],\n }\n }\n\n const times = [\n ...data.map((p) => timeOf(p.date)),\n ...projection.map((p) => timeOf(p.date)),\n ...boundaries.map((b) => timeOf(b.date)),\n ]\n const tMin = Math.min(...times)\n const tMaxRaw = Math.max(...times)\n const tMax = tMaxRaw === tMin ? tMin + 1 : tMaxRaw\n\n const yMin = Math.min(...values)\n const yMax = Math.max(...values)\n const range = yMax - yMin || Math.max(1, yMax * 0.1)\n const padV = range * 0.15\n const domainMin = yMin - padV\n const domainMax = yMax + padV\n\n const innerW = Math.max(1, width - PLOT_LEFT)\n const toX = (time: number) =>\n PLOT_LEFT + ((time - tMin) / (tMax - tMin)) * innerW\n const toY = (value: number) =>\n height - ((value - domainMin) / (domainMax - domainMin)) * height\n\n const project = (points: StrengthTrendDataPoint[]): Coord[] =>\n points.map((point, index) => ({\n x: toX(timeOf(point.date)),\n y: toY(point.e1rm),\n point,\n index,\n }))\n\n const tickValues = Array.from(\n new Set([yMax, (yMin + yMax) / 2, yMin].map((v) => Math.round(v))),\n )\n const gridLines = tickValues.map((v) => ({ y: toY(v), label: formatValue(v) }))\n\n return {\n hasData: true,\n toX,\n toY,\n actual: project(data),\n projection: project(projection),\n gridLines,\n boundaries: boundaries.map((b) => ({\n x: toX(timeOf(b.date)),\n label: b.label,\n })),\n }\n}\n\nfunction computeTrend(\n data: StrengthTrendDataPoint[],\n boundaries: StrengthTrendChartMesoBoundary[],\n): { percent: number; positive: boolean } {\n if (data.length < 2) return { percent: 0, positive: true }\n let series = data\n if (boundaries.length > 0) {\n const lastBoundary = Math.max(...boundaries.map((b) => timeOf(b.date)))\n const filtered = data.filter((p) => timeOf(p.date) >= lastBoundary)\n // The pill is labelled \"this meso\"; if the current meso has <2 points\n // there is no meso trend to show — stay neutral rather than silently\n // reporting the whole-series change under a \"this meso\" label.\n if (filtered.length < 2) return { percent: 0, positive: true }\n series = filtered\n }\n const first = series[0].e1rm\n const last = series[series.length - 1].e1rm\n const percent = first ? ((last - first) / first) * 100 : 0\n return { percent, positive: percent >= 0 }\n}\n\nfunction ChartLine({\n coords,\n color,\n strokeWidth,\n dashed,\n testID,\n}: {\n coords: Coord[]\n color: string\n strokeWidth: number\n dashed?: boolean\n testID: string\n}) {\n return (\n <>\n {coords.map((c, i) => {\n if (i === 0) return null\n const prev = coords[i - 1]\n const dx = c.x - prev.x\n const dy = c.y - prev.y\n const length = Math.sqrt(dx * dx + dy * dy)\n const angle = Math.atan2(dy, dx) * (180 / Math.PI)\n return (\n <View\n key={`${testID}-${i}`}\n testID={testID}\n accessibilityElementsHidden\n style={[\n {\n position: 'absolute',\n left: prev.x,\n top: prev.y,\n width: length,\n transformOrigin: '0 0',\n transform: [{ rotate: `${angle}deg` }],\n },\n dashed\n ? {\n height: 0,\n borderTopWidth: strokeWidth,\n borderStyle: 'dashed',\n borderTopColor: color,\n }\n : {\n height: strokeWidth,\n borderRadius: strokeWidth / 2,\n backgroundColor: color,\n },\n ]}\n />\n )\n })}\n </>\n )\n}\n\n/**\n * Estimated-1RM line chart over time with an optional dashed plan-projection\n * line and PR star markers. Rendered entirely with absolutely-positioned\n * Views (no SVG), following the Sparkline approach. Tapping an actual point\n * opens a tooltip and fires `onPointPress`. A trend pill below the chart\n * summarizes the percentage change for the current mesocycle.\n *\n * @example\n * <StrengthTrendChart\n * data={[{ date: '2026-01-01', e1rm: 225 }, { date: '2026-02-01', e1rm: 245, isPR: true }]}\n * projection={[{ date: '2026-02-01', e1rm: 245 }, { date: '2026-03-01', e1rm: 260 }]}\n * width={320}\n * height={150}\n * unit=\"lbs\"\n * />\n */\nexport function StrengthTrendChart({\n data,\n projection = [],\n width,\n height,\n mesoBoundaries = [],\n onPointPress,\n unit,\n animateOnMount = true,\n className,\n ...props\n}: StrengthTrendChartProps) {\n const geometry = useMemo(\n () => buildGeometry(data, projection, mesoBoundaries, width, height),\n [data, projection, mesoBoundaries, width, height],\n )\n const trend = useMemo(\n () => computeTrend(data, mesoBoundaries),\n [data, mesoBoundaries],\n )\n\n const [reveal] = useState(() => new Animated.Value(animateOnMount ? 0 : 1))\n const [selected, setSelected] = useState<number | null>(null)\n\n useEffect(() => {\n if (!animateOnMount) return\n const animation = Animated.timing(reveal, {\n toValue: 1,\n duration: 600,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n })\n animation.start()\n return () => animation.stop()\n }, [animateOnMount, reveal])\n\n const current = data.length > 0 ? data[data.length - 1].e1rm : 0\n const trendSign = trend.percent >= 0 ? '+' : '-'\n const trendText = `${trendSign}${Math.abs(trend.percent).toFixed(1)}% this meso`\n const ariaLabel = geometry.hasData\n ? `Strength trend chart showing estimated one rep max over time. Current: ${formatValue(current)} ${unit}. Trend: ${trendSign}${Math.abs(trend.percent).toFixed(1)}%`\n : 'Strength trend chart, no data'\n\n if (!geometry.hasData) {\n return (\n <View\n style={{ width }}\n className={cn(className)}\n accessibilityRole=\"image\"\n accessibilityLabel={ariaLabel}\n testID=\"strength-trend-chart-empty\"\n {...props}\n >\n <View\n style={{\n width,\n height,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Text className=\"text-text-tertiary\" style={{ fontSize: 12, fontFamily: 'Inter, sans-serif' }}>\n No strength data yet\n </Text>\n </View>\n </View>\n )\n }\n\n const revealWidth = reveal.interpolate({\n inputRange: [0, 1],\n outputRange: [0, width],\n })\n\n const selectedCoord =\n selected != null ? geometry.actual[selected] : undefined\n\n return (\n <View\n style={{ width }}\n className={cn(className)}\n testID=\"strength-trend-chart\"\n {...props}\n >\n <View style={{ width, height, position: 'relative' }}>\n {/* Labelled, non-interactive chart canvas (grid + lines + markers). */}\n <View\n style={{ position: 'absolute', top: 0, left: 0, width, height }}\n accessibilityRole=\"image\"\n accessibilityLabel={ariaLabel}\n testID=\"strength-trend-chart-canvas\"\n >\n {geometry.gridLines.map((line, i) => (\n <View\n key={`grid-${i}`}\n accessibilityElementsHidden\n testID=\"strength-trend-chart-gridline\"\n style={{\n position: 'absolute',\n left: PLOT_LEFT,\n right: 0,\n top: line.y,\n height: 1,\n backgroundColor: GRID_LINE,\n }}\n >\n <Text\n className=\"text-text-tertiary\"\n style={{\n position: 'absolute',\n left: -PLOT_LEFT,\n top: -6,\n width: PLOT_LEFT - 4,\n textAlign: 'right',\n fontSize: 9,\n fontFamily: 'Inter, sans-serif',\n }}\n >\n {line.label}\n </Text>\n </View>\n ))}\n\n {geometry.boundaries.map((boundary, i) => (\n <View\n key={`boundary-${i}`}\n accessibilityElementsHidden\n testID=\"strength-trend-chart-meso-boundary\"\n style={{\n position: 'absolute',\n left: boundary.x,\n top: 0,\n width: 0,\n height,\n borderLeftWidth: 1,\n borderStyle: 'dashed',\n borderLeftColor: 'rgba(255,255,255,0.10)',\n }}\n />\n ))}\n\n <Animated.View\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: revealWidth,\n height,\n overflow: 'hidden',\n }}\n testID=\"strength-trend-chart-reveal\"\n >\n <View style={{ width, height, position: 'absolute', top: 0, left: 0 }}>\n <ChartLine\n coords={geometry.projection}\n color={PROJECTION_LINE_COLOR}\n strokeWidth={2}\n dashed\n testID=\"strength-trend-chart-projection-segment\"\n />\n <ChartLine\n coords={geometry.actual}\n color={BRAND_PRIMARY}\n strokeWidth={2.5}\n testID=\"strength-trend-chart-actual-segment\"\n />\n </View>\n </Animated.View>\n\n {geometry.actual.map((c) =>\n c.point.isPR ? (\n <Text\n key={`star-${c.index}`}\n accessibilityElementsHidden\n testID=\"strength-trend-chart-pr-star\"\n style={{\n position: 'absolute',\n left: c.x - 7,\n top: c.y - 20,\n fontSize: 12,\n color: STATUS_WARNING,\n }}\n >\n ★\n </Text>\n ) : null,\n )}\n </View>\n\n {/* Interactive point overlay (kept out of the image-role canvas). */}\n <View\n style={{ position: 'absolute', top: 0, left: 0, width, height }}\n testID=\"strength-trend-chart-points\"\n >\n {geometry.actual.map((c) => {\n const label = c.point.sessionLabel ?? c.point.date\n return (\n <Pressable\n key={`point-${c.index}`}\n testID=\"strength-trend-chart-point\"\n accessibilityRole=\"button\"\n accessibilityLabel={`${label}: ${formatValue(c.point.e1rm)} ${unit}${c.point.isPR ? ', personal record' : ''}`}\n onPress={() => {\n setSelected(c.index)\n onPointPress?.(c.point)\n }}\n style={{\n position: 'absolute',\n left: c.x - 4,\n top: c.y - 4,\n width: 8,\n height: 8,\n borderRadius: 1,\n backgroundColor: BRAND_PRIMARY,\n }}\n />\n )\n })}\n </View>\n\n {selectedCoord && (\n <View\n testID=\"strength-trend-chart-tooltip\"\n accessibilityElementsHidden\n className=\"bg-surface-elevated border-border-strong\"\n style={{\n position: 'absolute',\n left: Math.max(\n 0,\n Math.min(width - TOOLTIP_WIDTH, selectedCoord.x - TOOLTIP_WIDTH / 2),\n ),\n top: Math.max(0, selectedCoord.y - 52),\n maxWidth: TOOLTIP_WIDTH,\n borderWidth: 1,\n borderRadius: 8,\n paddingVertical: 8,\n paddingHorizontal: 10,\n }}\n >\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n }}\n >\n {selectedCoord.point.sessionLabel ?? selectedCoord.point.date}\n </Text>\n <Text\n className=\"text-text-primary\"\n style={{\n marginTop: 2,\n fontSize: 13,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '700',\n }}\n >\n {`${formatValue(selectedCoord.point.e1rm)} ${unit}`}\n </Text>\n {selected != null && selected > 0 && (\n <Text\n style={{\n marginTop: 1,\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n color:\n selectedCoord.point.e1rm - geometry.actual[selected - 1].point.e1rm >= 0\n ? STATUS_SUCCESS\n : STATUS_ERROR,\n }}\n >\n {`${\n selectedCoord.point.e1rm - geometry.actual[selected - 1].point.e1rm >= 0\n ? '+'\n : '-'\n }${Math.abs(\n selectedCoord.point.e1rm - geometry.actual[selected - 1].point.e1rm,\n ).toFixed(1)} ${unit}`}\n </Text>\n )}\n </View>\n )}\n </View>\n\n {/* Meso boundary x-axis labels. */}\n {geometry.boundaries.length > 0 && (\n <View\n style={{ width, height: 14, position: 'relative', marginTop: 2 }}\n accessibilityElementsHidden\n testID=\"strength-trend-chart-axis\"\n >\n {geometry.boundaries.map((boundary, i) => (\n <Text\n key={`axis-${i}`}\n testID=\"strength-trend-chart-axis-label\"\n className=\"text-text-tertiary\"\n style={{\n position: 'absolute',\n left: boundary.x - 24,\n width: 48,\n textAlign: 'center',\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n }}\n >\n {boundary.label}\n </Text>\n ))}\n </View>\n )}\n\n {/* Trend pill. */}\n <View className=\"flex-row\" style={{ marginTop: 8 }}>\n <View\n testID=\"strength-trend-chart-trend-pill\"\n accessibilityLabel={`Strength trend: ${trendText}`}\n style={{\n paddingVertical: 3,\n paddingHorizontal: 8,\n borderRadius: 4,\n borderWidth: 1,\n backgroundColor: trend.positive ? SUCCESS_PILL_BG : ERROR_PILL_BG,\n borderColor: trend.positive ? SUCCESS_PILL_BORDER : ERROR_PILL_BORDER,\n }}\n >\n <Text\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n color: trend.positive ? STATUS_SUCCESS : STATUS_ERROR,\n }}\n >\n {trendText}\n </Text>\n </View>\n </View>\n\n {/* Legend. */}\n <View\n className=\"flex-row items-center\"\n style={{ marginTop: 8, gap: 14 }}\n testID=\"strength-trend-chart-legend\"\n >\n <View className=\"flex-row items-center\" style={{ gap: 5 }}>\n <View style={{ width: 14, height: 2.5, borderRadius: 1.5, backgroundColor: BRAND_PRIMARY }} />\n <Text className=\"text-text-secondary\" style={{ fontSize: 10, fontFamily: 'Inter, sans-serif' }}>\n Actual\n </Text>\n </View>\n <View className=\"flex-row items-center\" style={{ gap: 5 }}>\n <View\n style={{\n width: 14,\n height: 0,\n borderTopWidth: 2,\n borderStyle: 'dashed',\n borderTopColor: PROJECTION_LINE_COLOR,\n }}\n />\n <Text className=\"text-text-secondary\" style={{ fontSize: 10, fontFamily: 'Inter, sans-serif' }}>\n Projected\n </Text>\n </View>\n <View className=\"flex-row items-center\" style={{ gap: 5 }}>\n <Text style={{ fontSize: 12, color: STATUS_WARNING }}>★</Text>\n <Text className=\"text-text-secondary\" style={{ fontSize: 10, fontFamily: 'Inter, sans-serif' }}>\n PR\n </Text>\n </View>\n </View>\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState, useMemo } from 'react'\nimport { View, Text, Pressable, Animated, Easing, type ViewProps } from 'react-native'\n\nconst STATUS_SUCCESS = '#14B8A6'\nconst STATUS_WARNING = '#FFB020'\nconst STATUS_INFO = '#2196F3'\n/** Dot outline: near-white ring so load dots read on the band fill and any\n * surface (matches the MesoStatusCard gauge-marker convention). */\nconst DOT_BORDER = '#F3F4F6'\nconst BAND_FILL = 'rgba(20,184,166,0.1)'\nconst BAND_EDGE = 'rgba(20,184,166,0.45)'\nconst PROJECTION_FILL = 'rgba(20,184,166,0.05)'\n\nconst PADDING_LEFT = 28\nconst PADDING_RIGHT = 10\nconst PADDING_TOP = 8\nconst PADDING_BOTTOM = 16\nconst COLUMN_STEP = 4\nconst DOT_SIZE = 8\n\nexport type WorkoutDotStatus = 'within' | 'above' | 'below'\n\nexport interface CapacityBandDataPoint {\n /** ISO-ish date string (e.g. \"2026-06-01\"). */\n date: string\n /** Lower bound of the capacity band (MEV equivalent). */\n bandLow: number\n /** Upper bound of the capacity band (MRV equivalent). */\n bandHigh: number\n}\n\nexport interface WorkoutDot {\n date: string\n /** Actual session load score. */\n load: number\n /** Position of the session relative to the band. */\n status: WorkoutDotStatus\n}\n\nexport interface CapacityBandProjection {\n /** Band shape over the next days if training continues (rises). */\n withTraining: CapacityBandDataPoint[]\n /** Band shape over the next days if resting (drops). */\n withRest: CapacityBandDataPoint[]\n}\n\nexport interface CapacityBandChartProps extends ViewProps {\n /** Capacity band shape over time. */\n band: CapacityBandDataPoint[]\n /** Workout sessions plotted as dots. */\n workouts: WorkoutDot[]\n /** Optional forward projection (next few days). */\n projection?: CapacityBandProjection\n /** Chart width in px. */\n width: number\n /** Chart height in px. */\n height: number\n /** Called when a workout dot is tapped. */\n onWorkoutPress?: (workout: WorkoutDot) => void\n className?: string\n}\n\ninterface PixelPoint {\n x: number\n yHigh: number\n yLow: number\n}\n\nconst DOT_COLORS: Record<WorkoutDotStatus, string> = {\n within: STATUS_SUCCESS,\n above: STATUS_WARNING,\n below: STATUS_INFO,\n}\n\nconst STATUS_PHRASES: Record<WorkoutDotStatus, string> = {\n within: 'within range',\n above: 'above range',\n below: 'below range',\n}\n\nfunction parseTime(date: string): number {\n const parts = date.split('-')\n if (parts.length === 3) {\n return Date.UTC(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2]))\n }\n const parsed = Date.parse(date)\n return Number.isNaN(parsed) ? 0 : parsed\n}\n\nfunction formatDate(date: string): string {\n const parts = date.split('-')\n if (parts.length === 3) return `${Number(parts[1])}/${Number(parts[2])}`\n const d = new Date(date)\n return Number.isNaN(d.getTime()) ? date : `${d.getMonth() + 1}/${d.getDate()}`\n}\n\nfunction toPixels(\n points: CapacityBandDataPoint[],\n toX: (date: string) => number,\n toY: (value: number) => number,\n): PixelPoint[] {\n return points\n .map((p) => ({ x: toX(p.date), yHigh: toY(p.bandHigh), yLow: toY(p.bandLow) }))\n .sort((a, b) => a.x - b.x)\n}\n\nfunction interpEdge(pixels: PixelPoint[], x: number, key: 'yHigh' | 'yLow'): number {\n for (let i = 0; i < pixels.length - 1; i++) {\n const a = pixels[i]\n const b = pixels[i + 1]\n if (x >= a.x && x <= b.x) {\n const t = b.x === a.x ? 0 : (x - a.x) / (b.x - a.x)\n return a[key] + t * (b[key] - a[key])\n }\n }\n return pixels[pixels.length - 1][key]\n}\n\nfunction buildColumns(pixels: PixelPoint[], step: number) {\n if (pixels.length < 2) return []\n const start = pixels[0].x\n const end = pixels[pixels.length - 1].x\n const columns: Array<{ x: number; top: number; height: number }> = []\n for (let x = start; x < end; x += step) {\n const top = interpEdge(pixels, x, 'yHigh')\n const bottom = interpEdge(pixels, x, 'yLow')\n columns.push({ x, top, height: Math.max(0, bottom - top) })\n }\n return columns\n}\n\nfunction buildEdges(pixels: PixelPoint[], key: 'yHigh' | 'yLow') {\n const segments: Array<{ left: number; top: number; length: number; angle: number }> = []\n for (let i = 1; i < pixels.length; i++) {\n const a = pixels[i - 1]\n const b = pixels[i]\n const dx = b.x - a.x\n const dy = b[key] - a[key]\n segments.push({\n left: a.x,\n top: a[key],\n length: Math.sqrt(dx * dx + dy * dy),\n angle: Math.atan2(dy, dx) * (180 / Math.PI),\n })\n }\n return segments\n}\n\nfunction collectValues(\n band: CapacityBandDataPoint[],\n workouts: WorkoutDot[],\n projection?: CapacityBandProjection,\n): number[] {\n const values: number[] = []\n band.forEach((p) => values.push(p.bandLow, p.bandHigh))\n workouts.forEach((w) => values.push(w.load))\n projection?.withTraining.forEach((p) => values.push(p.bandLow, p.bandHigh))\n projection?.withRest.forEach((p) => values.push(p.bandLow, p.bandHigh))\n return values\n}\n\nfunction currentStatus(workouts: WorkoutDot[]): string {\n if (workouts.length === 0) return 'no recent sessions'\n const latest = [...workouts].sort((a, b) => parseTime(b.date) - parseTime(a.date))[0]\n return STATUS_PHRASES[latest.status]\n}\n\n/**\n * Gentler-Streak-inspired fatigue visualization. Renders a shaded capacity\n * band (between a rolling MEV/MRV estimate), workout sessions as colored dots\n * positioned by load, and an optional dashed forward projection that diverges\n * for \"keep training\" (rises) versus \"rest\" (drops). View-based, no SVG:\n * the band fill is a run of vertical columns and the edges/projection are\n * rotated line Views (same technique as Sparkline).\n *\n * @example\n * <CapacityBandChart\n * band={band}\n * workouts={workouts}\n * projection={{ withTraining, withRest }}\n * width={320}\n * height={180}\n * onWorkoutPress={(w) => openSession(w)}\n * />\n */\nexport function CapacityBandChart({\n band,\n workouts,\n projection,\n width,\n height,\n onWorkoutPress,\n className,\n ...props\n}: CapacityBandChartProps) {\n const [reveal] = useState(() => new Animated.Value(0))\n const dotAnims = useMemo(\n () => Array.from({ length: workouts.length }, () => new Animated.Value(0)),\n [workouts.length],\n )\n\n useEffect(() => {\n reveal.setValue(0)\n dotAnims.forEach((a) => a.setValue(0))\n const draw = Animated.timing(reveal, {\n toValue: 1,\n duration: 800,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n })\n const pops = dotAnims.map((a) =>\n Animated.timing(a, {\n toValue: 1,\n duration: 200,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n }),\n )\n const animation = Animated.sequence([draw, Animated.stagger(200, pops)])\n animation.start()\n return () => animation.stop()\n }, [reveal, dotAnims, band.length, workouts.length])\n\n const plotWidth = width - PADDING_LEFT - PADDING_RIGHT\n const plotHeight = height - PADDING_TOP - PADDING_BOTTOM\n\n const scale = useMemo(() => {\n const times = band.map((p) => parseTime(p.date))\n projection?.withTraining.forEach((p) => times.push(parseTime(p.date)))\n projection?.withRest.forEach((p) => times.push(parseTime(p.date)))\n const minT = times.length ? Math.min(...times) : 0\n const maxT = times.length ? Math.max(...times) : 1\n const tRange = maxT - minT || 1\n\n const values = collectValues(band, workouts, projection)\n const minV = values.length ? Math.min(...values) : 0\n const maxV = values.length ? Math.max(...values) : 1\n const pad = (maxV - minV) * 0.1 || 1\n const domainMin = minV - pad\n const domainMax = maxV + pad\n const vRange = domainMax - domainMin || 1\n\n const toX = (date: string) =>\n PADDING_LEFT + ((parseTime(date) - minT) / tRange) * plotWidth\n const toY = (value: number) =>\n PADDING_TOP + (1 - (value - domainMin) / vRange) * plotHeight\n return { toX, toY }\n }, [band, workouts, projection, plotWidth, plotHeight])\n\n if (band.length === 0) {\n return (\n <View\n style={{ width, height }}\n className={className}\n accessibilityRole=\"image\"\n accessibilityLabel=\"Training capacity band chart, no data\"\n testID=\"capacity-band-chart-empty\"\n {...props}\n />\n )\n }\n\n const { toX, toY } = scale\n const bandPixels = toPixels(band, toX, toY)\n const columns = buildColumns(bandPixels, COLUMN_STEP)\n const topEdge = buildEdges(bandPixels, 'yHigh')\n const bottomEdge = buildEdges(bandPixels, 'yLow')\n\n const lastBandPoint = band[band.length - 1]\n const trainingPixels = projection\n ? toPixels([lastBandPoint, ...projection.withTraining], toX, toY)\n : []\n const restPixels = projection\n ? toPixels([lastBandPoint, ...projection.withRest], toX, toY)\n : []\n\n const labelStride = Math.max(1, Math.ceil(band.length / 5))\n const revealWidth = reveal.interpolate({ inputRange: [0, 1], outputRange: [0, width] })\n\n const renderColumns = (cols: ReturnType<typeof buildColumns>, color: string, key: string) =>\n cols.map((col, i) => (\n <View\n key={`${key}-${i}`}\n style={{\n position: 'absolute',\n left: col.x,\n top: col.top,\n width: COLUMN_STEP + 0.5,\n height: col.height,\n backgroundColor: color,\n }}\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n testID={key}\n />\n ))\n\n const renderEdges = (\n segments: ReturnType<typeof buildEdges>,\n color: string,\n dashed: boolean,\n key: string,\n ) =>\n segments.map((seg, i) => (\n <View\n key={`${key}-${i}`}\n style={{\n position: 'absolute',\n left: seg.left,\n top: seg.top,\n width: seg.length,\n height: dashed ? 0 : 1.5,\n borderTopWidth: dashed ? 1 : 0,\n borderTopColor: dashed ? color : undefined,\n borderStyle: dashed ? 'dashed' : 'solid',\n backgroundColor: dashed ? undefined : color,\n opacity: dashed ? 0.7 : 1,\n transformOrigin: '0 0',\n transform: [{ rotate: `${seg.angle}deg` }],\n }}\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n testID={key}\n />\n ))\n\n return (\n <View\n style={{ width, height, position: 'relative' }}\n className={className}\n testID=\"capacity-band-chart-root\"\n {...props}\n >\n {/* Static visual layer carries the image role; interactive dots live as\n siblings so the image role has no focusable descendants. */}\n <View\n style={{ position: 'absolute', top: 0, left: 0, width, height }}\n accessibilityRole=\"image\"\n accessibilityLabel={`Training capacity band chart. Current capacity: ${currentStatus(\n workouts,\n )}. ${workouts.length} workout${workouts.length === 1 ? '' : 's'} shown.`}\n testID=\"capacity-band-chart\"\n >\n {/* Band + projection draw left-to-right via an animated clip. */}\n <Animated.View\n style={{ position: 'absolute', top: 0, left: 0, height, width: revealWidth, overflow: 'hidden' }}\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n testID=\"capacity-band-chart-reveal\"\n >\n <View style={{ width, height, position: 'relative' }}>\n {projection && (\n <View testID=\"capacity-band-chart-projection\">\n {renderColumns(buildColumns(trainingPixels, COLUMN_STEP), PROJECTION_FILL, 'capacity-band-chart-projection-fill')}\n {renderColumns(buildColumns(restPixels, COLUMN_STEP), PROJECTION_FILL, 'capacity-band-chart-projection-fill')}\n {renderEdges(buildEdges(trainingPixels, 'yHigh'), STATUS_SUCCESS, true, 'capacity-band-chart-projection-training')}\n {renderEdges(buildEdges(trainingPixels, 'yLow'), STATUS_SUCCESS, true, 'capacity-band-chart-projection-training')}\n {renderEdges(buildEdges(restPixels, 'yHigh'), STATUS_INFO, true, 'capacity-band-chart-projection-rest')}\n {renderEdges(buildEdges(restPixels, 'yLow'), STATUS_INFO, true, 'capacity-band-chart-projection-rest')}\n <Text\n style={{\n position: 'absolute',\n left: trainingPixels[trainingPixels.length - 1]?.x + 2,\n top: trainingPixels[trainingPixels.length - 1]?.yHigh - 12,\n fontSize: 9,\n fontFamily: 'Inter, sans-serif',\n color: STATUS_SUCCESS,\n }}\n testID=\"capacity-band-chart-projection-training-label\"\n >\n Training\n </Text>\n <Text\n style={{\n position: 'absolute',\n left: restPixels[restPixels.length - 1]?.x + 2,\n top: restPixels[restPixels.length - 1]?.yLow + 2,\n fontSize: 9,\n fontFamily: 'Inter, sans-serif',\n color: STATUS_INFO,\n }}\n testID=\"capacity-band-chart-projection-rest-label\"\n >\n Rest\n </Text>\n </View>\n )}\n\n <View testID=\"capacity-band-chart-band\">\n {renderColumns(columns, BAND_FILL, 'capacity-band-chart-band-cell')}\n </View>\n {renderEdges(topEdge, BAND_EDGE, false, 'capacity-band-chart-edge-top')}\n {renderEdges(bottomEdge, BAND_EDGE, false, 'capacity-band-chart-edge-bottom')}\n </View>\n </Animated.View>\n\n {/* Y axis conceptual label (no numbers). */}\n <Text\n className=\"text-text-tertiary\"\n style={{\n position: 'absolute',\n left: PADDING_LEFT / 2 - 14,\n top: PADDING_TOP + plotHeight / 2 - 7,\n width: 32,\n textAlign: 'center',\n fontSize: 9,\n fontFamily: 'Inter, sans-serif',\n transform: [{ rotate: '-90deg' }],\n }}\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n testID=\"capacity-band-chart-y-axis-label\"\n >\n Load\n </Text>\n\n {/* X axis date labels (subset to avoid overlap). */}\n {band.map((point, i) => {\n if (i % labelStride !== 0 && i !== band.length - 1) return null\n return (\n <Text\n key={`x-${point.date}`}\n className=\"text-text-tertiary\"\n style={{\n position: 'absolute',\n left: toX(point.date) - 14,\n top: height - PADDING_BOTTOM + 2,\n width: 28,\n textAlign: 'center',\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n }}\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n testID=\"capacity-band-chart-x-label\"\n >\n {formatDate(point.date)}\n </Text>\n )\n })}\n </View>\n\n {/* Workout dots — scale in after the band draws. */}\n {workouts.map((workout, i) => {\n const cx = toX(workout.date)\n const cy = toY(workout.load)\n const color = DOT_COLORS[workout.status]\n const dotStyle = {\n width: DOT_SIZE,\n height: DOT_SIZE,\n borderRadius: DOT_SIZE / 2,\n backgroundColor: color,\n borderWidth: 2,\n borderColor: DOT_BORDER,\n }\n const label = `Workout on ${formatDate(workout.date)}, load ${workout.load}, ${\n STATUS_PHRASES[workout.status]\n }`\n return (\n <Animated.View\n key={`dot-${workout.date}-${i}`}\n style={{\n position: 'absolute',\n left: cx - DOT_SIZE / 2,\n top: cy - DOT_SIZE / 2,\n transform: [{ scale: dotAnims[i] ?? 1 }],\n }}\n testID=\"capacity-band-chart-dot-wrapper\"\n >\n {onWorkoutPress ? (\n <Pressable\n onPress={() => onWorkoutPress(workout)}\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n style={dotStyle}\n testID=\"capacity-band-chart-dot\"\n />\n ) : (\n <View\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={dotStyle}\n testID=\"capacity-band-chart-dot\"\n />\n )}\n </Animated.View>\n )\n })}\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useMemo, useState } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { MesoProgressBar, type Meso, type MesoStatus } from './MesoProgressBar'\nimport { MesoCard, type MesoVolumeHeatmapEntry } from './MesoCard'\nimport { type WeekRowProps, type WeekRowWorkout } from './WeekRow'\nimport { WorkoutCard, type WorkoutStatus, type WorkoutMuscleGroup } from './WorkoutCard'\nimport { type WorkoutPillStatus } from './WorkoutPill'\nimport { type ExerciseCardProps } from './ExerciseCard'\nimport { cn } from '../../../utils/cn'\n\nconst BRAND_PRIMARY = '#FF7900'\n\n/** A single workout within a planned week, plus its exercise breakdown. */\nexport interface PlanWorkout {\n /** Stable identifier used for drill-down selection. */\n id: string\n name: string\n date: string\n duration?: string\n status: WorkoutStatus\n muscleGroups: WorkoutMuscleGroup[]\n totalSets: number\n totalVolume?: number\n unit: 'lbs' | 'kg'\n /** Exercises revealed when the workout is opened. */\n exercises: ExerciseCardProps[]\n}\n\n/** A training week inside a mesocycle. */\nexport interface PlanWeek {\n /** 1-based week index within the mesocycle. */\n weekNumber: number\n /** Planned intensity for the week, 0-1. */\n intensityLevel: number\n /** Optional MRV/overexertion threshold, 0-1. */\n intensityThreshold?: number\n isDeload?: boolean\n isCurrent?: boolean\n workouts: PlanWorkout[]\n}\n\n/** A mesocycle: the top level of the drill-down. */\nexport interface PlanMeso {\n id: string\n name: string\n goal: string\n split: string\n weekRange: string\n weekCount: number\n currentWeek?: number\n status: MesoStatus\n volumeHeatmap?: MesoVolumeHeatmapEntry[]\n weeks: PlanWeek[]\n}\n\n/** Current depth of the meso -> week -> workout drill-down. */\nexport type ProgramNavLevel = 'meso' | 'week' | 'workout'\n\n/** The navigation cursor within the active mesocycle. */\nexport interface ProgramSelection {\n weekNumber: number | null\n workoutId: string | null\n}\n\n/** One tappable step in the breadcrumb trail. */\nexport interface ProgramBreadcrumb {\n key: string\n label: string\n level: ProgramNavLevel\n}\n\nexport interface ProgramPlanningPageProps extends ViewProps {\n /** Page heading. */\n title?: string\n /** Mesocycles that make up the program. */\n mesos: PlanMeso[]\n className?: string\n}\n\n/** Map a workout's lifecycle status onto a WorkoutPill status. */\nconst WORKOUT_PILL_STATUS: Record<WorkoutStatus, WorkoutPillStatus> = {\n completed: 'completed',\n today: 'current',\n upcoming: 'upcoming',\n}\n\n/** Derive the current drill-down level from the selection cursor (pure). */\nexport function deriveNavLevel(selection: ProgramSelection): ProgramNavLevel {\n if (selection.workoutId != null) return 'workout'\n if (selection.weekNumber != null) return 'week'\n return 'meso'\n}\n\n/** Project the mesocycles onto MesoProgressBar segment data (pure). */\nexport function toProgressBarMesos(mesos: PlanMeso[]): Meso[] {\n return mesos.map(({ id, name, weekCount, status, currentWeek }) => ({\n id,\n name,\n weekCount,\n status,\n currentWeek,\n }))\n}\n\n/** Look up a meso by id, or null. */\nexport function findMeso(mesos: PlanMeso[], id: string | null): PlanMeso | null {\n if (id == null) return null\n return mesos.find((meso) => meso.id === id) ?? null\n}\n\n/** Look up a week within a meso, or null. */\nexport function findWeek(meso: PlanMeso | null, weekNumber: number | null): PlanWeek | null {\n if (meso == null || weekNumber == null) return null\n return meso.weeks.find((week) => week.weekNumber === weekNumber) ?? null\n}\n\n/** Look up a workout within a week, or null. */\nexport function findWorkout(week: PlanWeek | null, workoutId: string | null): PlanWorkout | null {\n if (week == null || workoutId == null) return null\n return week.workouts.find((workout) => workout.id === workoutId) ?? null\n}\n\n/** Build the breadcrumb trail for the active drill path (pure). */\nexport function buildBreadcrumbs(\n meso: PlanMeso,\n weekNumber: number | null,\n workout: PlanWorkout | null\n): ProgramBreadcrumb[] {\n const crumbs: ProgramBreadcrumb[] = [{ key: 'meso', label: meso.name, level: 'meso' }]\n if (weekNumber != null) {\n crumbs.push({ key: 'week', label: `Week ${weekNumber}`, level: 'week' })\n }\n if (workout != null) {\n crumbs.push({ key: 'workout', label: workout.name, level: 'workout' })\n }\n return crumbs\n}\n\ninterface BreadcrumbsProps {\n crumbs: ProgramBreadcrumb[]\n onNavigate: (level: ProgramNavLevel) => void\n}\n\nfunction Breadcrumbs({ crumbs, onNavigate }: BreadcrumbsProps) {\n return (\n <View\n className=\"flex-row items-center flex-wrap\"\n style={{ gap: 4 }}\n testID=\"program-planning-page-breadcrumbs\"\n >\n {crumbs.map((crumb, index) => {\n const isLast = index === crumbs.length - 1\n return (\n <View key={crumb.key} className=\"flex-row items-center\" style={{ gap: 4 }}>\n {index > 0 && <Text className=\"text-text-tertiary\" style={{ fontSize: 12 }}>{'›'}</Text>}\n <Pressable\n onPress={() => onNavigate(crumb.level)}\n disabled={isLast}\n accessibilityRole=\"button\"\n testID={`program-planning-page-crumb-${crumb.key}`}\n >\n <Text\n className={isLast ? 'text-text-primary' : undefined}\n style={{\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n fontWeight: isLast ? '700' : '500',\n color: isLast ? undefined : BRAND_PRIMARY,\n }}\n >\n {crumb.label}\n </Text>\n </Pressable>\n </View>\n )\n })}\n </View>\n )\n}\n\n/** Project a plan week onto WeekRow props, wiring pill taps to week selection. */\nfunction toWeekRow(\n week: PlanWeek,\n meso: PlanMeso,\n onSelectWeek: (weekNumber: number) => void\n): WeekRowProps {\n const workouts: WeekRowWorkout[] = week.workouts.map((workout) => ({\n name: workout.name,\n status: WORKOUT_PILL_STATUS[workout.status],\n onPress: () => onSelectWeek(week.weekNumber),\n }))\n return {\n weekNumber: week.weekNumber,\n totalWeeks: meso.weekCount,\n workouts,\n intensityLevel: week.intensityLevel,\n intensityThreshold: week.intensityThreshold,\n isCurrent: week.isCurrent ?? week.weekNumber === meso.currentWeek,\n isDeload: week.isDeload,\n }\n}\n\ninterface MesoLevelProps {\n mesos: PlanMeso[]\n activeMesoId: string | null\n onSelectMeso: (id: string) => void\n onSelectWeek: (weekNumber: number) => void\n}\n\nfunction MesoLevel({ mesos, activeMesoId, onSelectMeso, onSelectWeek }: MesoLevelProps) {\n return (\n <View style={{ gap: 12 }} testID=\"program-planning-page-meso-level\">\n {mesos.map((meso) => {\n const expanded = meso.id === activeMesoId\n return (\n <MesoCard\n key={meso.id}\n name={meso.name}\n goal={meso.goal}\n split={meso.split}\n weekRange={meso.weekRange}\n currentWeek={meso.currentWeek}\n totalWeeks={meso.weekCount}\n weeks={expanded ? meso.weeks.map((week) => toWeekRow(week, meso, onSelectWeek)) : []}\n volumeHeatmap={meso.volumeHeatmap}\n expanded={expanded}\n onToggle={() => onSelectMeso(meso.id)}\n highlighted={expanded}\n />\n )\n })}\n </View>\n )\n}\n\ninterface WeekLevelProps {\n week: PlanWeek\n onSelectWorkout: (id: string) => void\n}\n\nfunction WeekLevel({ week, onSelectWorkout }: WeekLevelProps) {\n return (\n <View style={{ gap: 10 }} testID=\"program-planning-page-week-level\">\n {week.workouts.map((workout) => (\n <WorkoutCard\n key={workout.id}\n name={workout.name}\n date={workout.date}\n duration={workout.duration}\n status={workout.status}\n muscleGroups={workout.muscleGroups}\n totalSets={workout.totalSets}\n totalVolume={workout.totalVolume}\n unit={workout.unit}\n exercises={workout.exercises}\n expanded={false}\n onToggle={() => onSelectWorkout(workout.id)}\n />\n ))}\n </View>\n )\n}\n\ninterface WorkoutLevelProps {\n workout: PlanWorkout\n expandedExercise: number | null\n onToggleExercise: (index: number) => void\n}\n\nfunction WorkoutLevel({ workout, expandedExercise, onToggleExercise }: WorkoutLevelProps) {\n const exercises = workout.exercises.map((exercise, index) => ({\n ...exercise,\n state:\n exercise.state === 'upcoming'\n ? exercise.state\n : ((index === expandedExercise ? 'expanded' : 'collapsed') as ExerciseCardProps['state']),\n onToggle: () => onToggleExercise(index),\n }))\n return (\n <View testID=\"program-planning-page-workout-level\">\n <WorkoutCard\n name={workout.name}\n date={workout.date}\n duration={workout.duration}\n status={workout.status}\n muscleGroups={workout.muscleGroups}\n totalSets={workout.totalSets}\n totalVolume={workout.totalVolume}\n unit={workout.unit}\n exercises={exercises}\n expanded\n onToggle={() => undefined}\n />\n </View>\n )\n}\n\n/**\n * ProgramPlanningPage — a meso -> week -> workout drill-down over an entire\n * training program. A `MesoProgressBar` pins the mesocycle timeline to the top;\n * the body swaps between three levels: expandable `MesoCard`s (with inline\n * `WeekRow`s), a week's `WorkoutCard` list, and a single opened `WorkoutCard`\n * with inline `ExerciseCard` expansion. A breadcrumb trail tracks and rewinds\n * the drill path. Selection is page-level state; children keep their own styles.\n *\n * @example\n * <ProgramPlanningPage mesos={mesos} />\n */\nexport function ProgramPlanningPage({\n title = 'Program Plan',\n mesos,\n className,\n ...props\n}: ProgramPlanningPageProps) {\n const [activeMesoId, setActiveMesoId] = useState<string | null>(mesos[0]?.id ?? null)\n const [selectedWeek, setSelectedWeek] = useState<number | null>(null)\n const [selectedWorkoutId, setSelectedWorkoutId] = useState<string | null>(null)\n const [expandedExercise, setExpandedExercise] = useState<number | null>(null)\n\n const progressMesos = useMemo(() => toProgressBarMesos(mesos), [mesos])\n const activeMeso = findMeso(mesos, activeMesoId)\n const level = deriveNavLevel({ weekNumber: selectedWeek, workoutId: selectedWorkoutId })\n const activeWeek = findWeek(activeMeso, selectedWeek)\n const activeWorkout = findWorkout(activeWeek, selectedWorkoutId)\n\n const selectMeso = (id: string) => {\n setActiveMesoId(id)\n setSelectedWeek(null)\n setSelectedWorkoutId(null)\n }\n const selectWeek = (weekNumber: number) => {\n setSelectedWeek(weekNumber)\n setSelectedWorkoutId(null)\n setExpandedExercise(null)\n }\n const selectWorkout = (id: string) => {\n setSelectedWorkoutId(id)\n setExpandedExercise(null)\n }\n const toggleExercise = (index: number) =>\n setExpandedExercise((current) => (current === index ? null : index))\n\n const navigateTo = (target: ProgramNavLevel) => {\n if (target === 'meso') selectMeso(activeMesoId ?? mesos[0]?.id)\n else if (target === 'week' && selectedWeek != null) selectWeek(selectedWeek)\n }\n\n return (\n <View\n className={cn(className, 'bg-background-base')}\n style={{ width: 390 }}\n accessibilityRole={'main' as ViewProps['accessibilityRole']}\n aria-label={title}\n testID=\"program-planning-page\"\n {...props}\n >\n <View style={{ padding: 16, gap: 14 }} testID=\"program-planning-page-content\">\n <Text\n accessibilityRole=\"header\"\n className=\"text-text-primary\"\n style={{\n fontSize: 20,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n }}\n testID=\"program-planning-page-title\"\n >\n {title}\n </Text>\n\n <View style={{ marginHorizontal: -16 }}>\n <MesoProgressBar\n mesos={progressMesos}\n activeMesoId={activeMesoId}\n onMesoPress={selectMeso}\n />\n </View>\n\n {activeMeso != null && (\n <Breadcrumbs\n crumbs={buildBreadcrumbs(activeMeso, selectedWeek, activeWorkout)}\n onNavigate={navigateTo}\n />\n )}\n\n <View\n className=\"bg-surface-elevated border-border\"\n style={{\n borderWidth: 1,\n borderRadius: 12,\n padding: 12,\n }}\n testID=\"program-planning-page-body\"\n >\n {level === 'meso' && (\n <MesoLevel\n mesos={mesos}\n activeMesoId={activeMesoId}\n onSelectMeso={selectMeso}\n onSelectWeek={selectWeek}\n />\n )}\n {level === 'week' && activeWeek != null && (\n <WeekLevel week={activeWeek} onSelectWorkout={selectWorkout} />\n )}\n {level === 'workout' && activeWorkout != null && (\n <WorkoutLevel\n workout={activeWorkout}\n expandedExercise={expandedExercise}\n onToggleExercise={toggleExercise}\n />\n )}\n </View>\n </View>\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useMemo, useState } from 'react'\nimport { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { MesoStatusCard, type MesoStatusCardProps } from './MesoStatusCard'\nimport {\n StrengthTrendChart,\n type StrengthTrendDataPoint,\n type StrengthTrendChartMesoBoundary,\n} from './StrengthTrendChart'\nimport {\n CapacityBandChart,\n type CapacityBandDataPoint,\n type CapacityBandProjection,\n type WorkoutDot,\n} from './CapacityBandChart'\nimport { ExerciseCard, type ExerciseCardProps } from './ExerciseCard'\nimport { type SetRowProps } from './SetRow'\nimport { VelocityStrip, calculateMeanVelocity, calculateVelocityLoss } from './VelocityStrip'\nimport { resolveColor } from '../../../theme/resolve-color'\nimport { cn } from '../../../utils/cn'\n\nconst BRAND_PRIMARY = '#FF7900'\n\n/** Inner plot width: page width 390 − 16 page padding − 12 card padding on each side. */\nconst CHART_WIDTH = 326\nconst CHART_HEIGHT = 150\n\n/** Which tab of the exercise detail view is showing. */\nexport type ExerciseDetailTab = 'progress' | 'history' | 'advanced'\n\n/** Tabs in display order. */\nexport const EXERCISE_DETAIL_TABS: Array<{ key: ExerciseDetailTab; label: string }> = [\n { key: 'progress', label: 'Progress' },\n { key: 'history', label: 'History' },\n { key: 'advanced', label: 'Advanced' },\n]\n\n/** Identity + headline stats for the exercise being inspected. */\nexport interface ExerciseDetailHeader {\n /** Exercise name, e.g. \"Barbell Bench Press\". */\n name: string\n /** Context line, e.g. \"Chest · Barbell\". */\n subtitle: string\n /** Unit used across the page. */\n unit: 'lbs' | 'kg'\n /** Current estimated one-rep max, shown as a header pill. */\n currentE1rm?: number\n}\n\n/**\n * A single expandable entry — one progression week or one logged session.\n * Projected onto an `ExerciseCard`, so it collapses to a summary and expands\n * to its `SetRow` breakdown.\n */\nexport interface ExerciseDetailEntry {\n /** Stable id for inline-expansion selection. */\n id: string\n /** Row title, e.g. \"Week 3\" or \"Mon, Jun 16\". */\n title: string\n /** Collapsed summary (sets × reps @ weight). */\n summary?: ExerciseCardProps['summary']\n /** Estimated one-rep max badge. */\n e1rm?: ExerciseCardProps['e1rm']\n /** Flags a personal-record entry. */\n isPR?: boolean\n /** Prescribed tempo, revealed when expanded. */\n tempo?: ExerciseCardProps['tempo']\n /** Per-set breakdown revealed when expanded. */\n sets: SetRowProps[]\n}\n\n/** Strength-trend inputs for the Progress tab chart. */\nexport interface ExerciseTrend {\n /** Measured e1RM data points, chronological. */\n data: StrengthTrendDataPoint[]\n /** Planned/projected trajectory (dashed line). */\n projection?: StrengthTrendDataPoint[]\n /** Mesocycle boundary guides. */\n mesoBoundaries?: StrengthTrendChartMesoBoundary[]\n}\n\n/** One set's velocity trace for the Advanced tab breakdown. */\nexport interface ExerciseVbtSet {\n /** Row label, e.g. \"Set 1\". */\n label: string\n /** Per-rep mean concentric velocities (m/s). */\n velocities: number[]\n}\n\n/** Velocity-based-training inputs for the Advanced tab. */\nexport interface ExerciseVbt {\n /** Capacity band shape over time. */\n band: CapacityBandDataPoint[]\n /** Sessions plotted against the band. */\n workouts: WorkoutDot[]\n /** Optional forward band projection. */\n projection?: CapacityBandProjection\n /** Per-set velocity traces for the most recent session. */\n sets: ExerciseVbtSet[]\n}\n\n/** Page-level roll-up of the logged sessions. */\nexport interface ExerciseDetailStats {\n /** Number of logged sessions. */\n sessions: number\n /** Best estimated one-rep max seen, or null if none recorded. */\n bestE1rm: number | null\n /** Count of PR entries. */\n prCount: number\n}\n\n/** Aggregate velocity readout for the Advanced tab. */\nexport interface VbtSummary {\n /** Mean concentric velocity across every logged rep. */\n meanVelocity: number\n /** Worst within-set velocity loss (%), i.e. the most-fatigued set. */\n velocityLoss: number\n}\n\nexport interface ExerciseDetailPageProps extends ViewProps {\n /** Exercise identity + headline stats. */\n exercise: ExerciseDetailHeader\n /** Mesocycle context banner (Progress tab). */\n meso: MesoStatusCardProps\n /** Strength trend inputs (Progress tab). */\n trend: ExerciseTrend\n /** Week-by-week progression entries (Progress tab). */\n progression: ExerciseDetailEntry[]\n /** All logged sessions (History tab). */\n history: ExerciseDetailEntry[]\n /** Velocity-based-training inputs (Advanced tab). */\n vbt: ExerciseVbt\n className?: string\n}\n\n/** Roll up logged sessions into the page summary (pure, testable). */\nexport function deriveExerciseStats(entries: ExerciseDetailEntry[]): ExerciseDetailStats {\n let bestE1rm: number | null = null\n let prCount = 0\n for (const entry of entries) {\n if (entry.e1rm != null && (bestE1rm == null || entry.e1rm.value > bestE1rm)) {\n bestE1rm = entry.e1rm.value\n }\n if (entry.isPR) prCount += 1\n }\n return { sessions: entries.length, bestE1rm, prCount }\n}\n\n/** Project an entry onto ExerciseCard props, wiring inline expansion (pure). */\nexport function toExerciseCardProps(\n entry: ExerciseDetailEntry,\n expanded: boolean,\n onToggle: () => void\n): ExerciseCardProps {\n return {\n name: entry.title,\n state: expanded ? 'expanded' : 'collapsed',\n onToggle,\n summary: entry.summary,\n e1rm: entry.e1rm,\n isPR: entry.isPR,\n tempo: entry.tempo,\n sets: expanded ? entry.sets : undefined,\n }\n}\n\n/** Aggregate per-set velocity traces into the Advanced readout (pure). */\nexport function summarizeVbt(sets: ExerciseVbtSet[]): VbtSummary {\n const allReps = sets.flatMap((set) => set.velocities)\n const meanVelocity = calculateMeanVelocity(allReps)\n let velocityLoss = 0\n for (const set of sets) {\n velocityLoss = Math.max(velocityLoss, calculateVelocityLoss(set.velocities))\n }\n return { meanVelocity, velocityLoss }\n}\n\ninterface TabBarProps {\n active: ExerciseDetailTab\n onSelect: (tab: ExerciseDetailTab) => void\n}\n\nfunction TabBar({ active, onSelect }: TabBarProps) {\n return (\n <View\n className=\"flex-row\"\n style={{\n borderBottomWidth: 1,\n borderBottomColor: resolveColor('border-default'),\n }}\n accessibilityRole={'tablist' as ViewProps['accessibilityRole']}\n testID=\"exercise-detail-page-tabs\"\n >\n {EXERCISE_DETAIL_TABS.map(({ key, label }) => {\n const isActive = key === active\n return (\n <Pressable\n key={key}\n onPress={() => onSelect(key)}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: isActive }}\n style={{\n flex: 1,\n alignItems: 'center',\n paddingVertical: 10,\n borderBottomWidth: 2,\n borderBottomColor: isActive ? BRAND_PRIMARY : 'transparent',\n }}\n testID={`exercise-detail-page-tab-${key}`}\n >\n <Text\n className={isActive ? 'text-text-primary' : 'text-text-tertiary'}\n style={{\n fontSize: 13,\n fontFamily: 'Inter, sans-serif',\n fontWeight: isActive ? '700' : '500',\n }}\n >\n {label}\n </Text>\n </Pressable>\n )\n })}\n </View>\n )\n}\n\nconst STAT_CARDS: Array<{ key: keyof ExerciseDetailStats; label: string }> = [\n { key: 'sessions', label: 'Sessions' },\n { key: 'bestE1rm', label: 'Best e1RM' },\n { key: 'prCount', label: 'PRs' },\n]\n\nfunction StatStrip({ stats, unit }: { stats: ExerciseDetailStats; unit: 'lbs' | 'kg' }) {\n return (\n <View className=\"flex-row\" style={{ gap: 8 }} testID=\"exercise-detail-page-stats\">\n {STAT_CARDS.map(({ key, label }) => {\n const raw = stats[key]\n const value = key === 'bestE1rm' ? (raw == null ? '—' : `${raw} ${unit}`) : `${raw}`\n return (\n <View\n key={key}\n className=\"bg-surface-elevated border-border\"\n style={{\n flex: 1,\n padding: 12,\n borderRadius: 10,\n borderWidth: 1,\n }}\n testID={`exercise-detail-page-stat-${key}`}\n >\n <Text\n className=\"text-text-primary\"\n style={{\n fontSize: 18,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n }}\n >\n {value}\n </Text>\n <Text\n className=\"text-text-tertiary\"\n style={{\n marginTop: 2,\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n letterSpacing: 0.4,\n textTransform: 'uppercase',\n }}\n >\n {label}\n </Text>\n </View>\n )\n })}\n </View>\n )\n}\n\nfunction SectionCard({\n title,\n children,\n testID,\n}: {\n title: string\n children: React.ReactNode\n testID: string\n}) {\n return (\n <View\n className=\"bg-surface-elevated border-border\"\n style={{\n borderWidth: 1,\n borderRadius: 12,\n padding: 12,\n gap: 10,\n }}\n testID={testID}\n >\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n letterSpacing: 0.6,\n textTransform: 'uppercase',\n }}\n >\n {title}\n </Text>\n {children}\n </View>\n )\n}\n\ninterface EntryListProps {\n entries: ExerciseDetailEntry[]\n expandedId: string | null\n onToggle: (id: string) => void\n emptyLabel: string\n testID: string\n}\n\nfunction EntryList({ entries, expandedId, onToggle, emptyLabel, testID }: EntryListProps) {\n if (entries.length === 0) {\n return (\n <Text\n className=\"text-text-tertiary\"\n style={{ fontSize: 12, fontFamily: 'Inter, sans-serif' }}\n testID={`${testID}-empty`}\n >\n {emptyLabel}\n </Text>\n )\n }\n return (\n <View style={{ gap: 8 }} testID={testID}>\n {entries.map((entry) => (\n <ExerciseCard\n key={entry.id}\n {...toExerciseCardProps(entry, entry.id === expandedId, () => onToggle(entry.id))}\n />\n ))}\n </View>\n )\n}\n\nfunction VbtBreakdown({ sets }: { sets: ExerciseVbtSet[] }) {\n return (\n <View style={{ gap: 10 }} testID=\"exercise-detail-page-vbt-breakdown\">\n {sets.map((set) => {\n const mean = calculateMeanVelocity(set.velocities)\n const loss = calculateVelocityLoss(set.velocities)\n return (\n <View\n key={set.label}\n className=\"flex-row items-center\"\n style={{ gap: 10 }}\n testID=\"exercise-detail-page-vbt-set\"\n >\n <Text\n className=\"text-text-secondary\"\n style={{\n width: 44,\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n }}\n >\n {set.label}\n </Text>\n <View className=\"flex-1\" style={{ height: 8, justifyContent: 'center' }}>\n <VelocityStrip velocities={set.velocities} variant=\"mini\" />\n </View>\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n fontVariant: ['tabular-nums'],\n }}\n >\n {`${mean.toFixed(2)} · -${loss}%`}\n </Text>\n </View>\n )\n })}\n </View>\n )\n}\n\nfunction VbtSummaryRow({ summary }: { summary: VbtSummary }) {\n const cells = [\n { label: 'Mean Velocity', value: `${summary.meanVelocity.toFixed(2)} m/s` },\n { label: 'Peak Vel. Loss', value: `-${summary.velocityLoss}%` },\n ]\n return (\n <View className=\"flex-row\" style={{ gap: 8 }} testID=\"exercise-detail-page-vbt-summary\">\n {cells.map((cell) => (\n <View\n key={cell.label}\n className=\"bg-surface-elevated border-border\"\n style={{\n flex: 1,\n padding: 12,\n borderRadius: 10,\n borderWidth: 1,\n }}\n >\n <Text\n className=\"text-text-primary\"\n style={{\n fontSize: 16,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n }}\n >\n {cell.value}\n </Text>\n <Text\n className=\"text-text-tertiary\"\n style={{\n marginTop: 2,\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n letterSpacing: 0.4,\n textTransform: 'uppercase',\n }}\n >\n {cell.label}\n </Text>\n </View>\n ))}\n </View>\n )\n}\n\n/**\n * ExerciseDetailPage — a tabbed per-exercise view. A shared header (name,\n * context line, current e1RM pill) sits above a Progress / History / Advanced\n * tab bar. Progress composes the `MesoStatusCard` context banner, a stats\n * strip, a `StrengthTrendChart`, and a week-by-week progression list with\n * inline `ExerciseCard` expansion. History lists every logged session with the\n * same inline expansion. Advanced surfaces VBT data via a `CapacityBandChart`,\n * a velocity summary, and a per-set `VelocityStrip` breakdown. Tab and\n * per-list expansion are page-level state; children keep their own styles.\n *\n * @example\n * <ExerciseDetailPage\n * exercise={exercise}\n * meso={meso}\n * trend={trend}\n * progression={progression}\n * history={history}\n * vbt={vbt}\n * />\n */\nexport function ExerciseDetailPage({\n exercise,\n meso,\n trend,\n progression,\n history,\n vbt,\n className,\n ...props\n}: ExerciseDetailPageProps) {\n const [tab, setTab] = useState<ExerciseDetailTab>('progress')\n const [expandedProgressId, setExpandedProgressId] = useState<string | null>(null)\n const [expandedHistoryId, setExpandedHistoryId] = useState<string | null>(null)\n\n const stats = useMemo(() => deriveExerciseStats(history), [history])\n const vbtSummary = useMemo(() => summarizeVbt(vbt.sets), [vbt.sets])\n\n const toggle =\n (setId: (updater: (current: string | null) => string | null) => void) => (id: string) =>\n setId((current) => (current === id ? null : id))\n\n return (\n <View\n className={cn('bg-background-base', className)}\n style={{ width: 390 }}\n accessibilityRole={'main' as ViewProps['accessibilityRole']}\n aria-label={exercise.name}\n testID=\"exercise-detail-page\"\n {...props}\n >\n <View style={{ padding: 16, gap: 14 }} testID=\"exercise-detail-page-content\">\n <View\n className=\"flex-row items-start justify-between\"\n style={{ gap: 8 }}\n testID=\"exercise-detail-page-header\"\n >\n <View style={{ flexShrink: 1 }}>\n <Text\n accessibilityRole=\"header\"\n className=\"text-text-primary\"\n style={{\n fontSize: 20,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n }}\n testID=\"exercise-detail-page-title\"\n >\n {exercise.name}\n </Text>\n <Text\n className=\"text-text-secondary\"\n style={{\n marginTop: 2,\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n }}\n testID=\"exercise-detail-page-subtitle\"\n >\n {exercise.subtitle}\n </Text>\n </View>\n {exercise.currentE1rm != null && (\n <View\n style={{\n paddingVertical: 4,\n paddingHorizontal: 10,\n borderRadius: 6,\n backgroundColor: 'rgba(255,121,0,0.10)',\n borderWidth: 1,\n borderColor: 'rgba(255,121,0,0.25)',\n }}\n testID=\"exercise-detail-page-e1rm\"\n >\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 9,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n letterSpacing: 0.4,\n textTransform: 'uppercase',\n }}\n >\n e1RM\n </Text>\n <Text\n style={{\n fontSize: 15,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: BRAND_PRIMARY,\n }}\n >\n {`${exercise.currentE1rm} ${exercise.unit}`}\n </Text>\n </View>\n )}\n </View>\n\n <TabBar active={tab} onSelect={setTab} />\n\n {tab === 'progress' && (\n <View style={{ gap: 14 }} testID=\"exercise-detail-page-panel-progress\">\n <MesoStatusCard {...meso} />\n <StatStrip stats={stats} unit={exercise.unit} />\n <SectionCard title=\"Strength Trend\" testID=\"exercise-detail-page-trend\">\n <StrengthTrendChart\n data={trend.data}\n projection={trend.projection}\n mesoBoundaries={trend.mesoBoundaries}\n width={CHART_WIDTH}\n height={CHART_HEIGHT}\n unit={exercise.unit}\n animateOnMount={false}\n />\n </SectionCard>\n <SectionCard title=\"Week-by-Week\" testID=\"exercise-detail-page-progression\">\n <EntryList\n entries={progression}\n expandedId={expandedProgressId}\n onToggle={toggle(setExpandedProgressId)}\n emptyLabel=\"No progression logged yet\"\n testID=\"exercise-detail-page-progression-list\"\n />\n </SectionCard>\n </View>\n )}\n\n {tab === 'history' && (\n <View style={{ gap: 14 }} testID=\"exercise-detail-page-panel-history\">\n <SectionCard title=\"All Sessions\" testID=\"exercise-detail-page-history\">\n <EntryList\n entries={history}\n expandedId={expandedHistoryId}\n onToggle={toggle(setExpandedHistoryId)}\n emptyLabel=\"No sessions logged yet\"\n testID=\"exercise-detail-page-history-list\"\n />\n </SectionCard>\n </View>\n )}\n\n {tab === 'advanced' && (\n <View style={{ gap: 14 }} testID=\"exercise-detail-page-panel-advanced\">\n <SectionCard title=\"Capacity Band\" testID=\"exercise-detail-page-capacity\">\n <CapacityBandChart\n band={vbt.band}\n workouts={vbt.workouts}\n projection={vbt.projection}\n width={CHART_WIDTH}\n height={CHART_HEIGHT}\n />\n </SectionCard>\n <VbtSummaryRow summary={vbtSummary} />\n <SectionCard title=\"Velocity Breakdown\" testID=\"exercise-detail-page-velocity\">\n <VbtBreakdown sets={vbt.sets} />\n </SectionCard>\n </View>\n )}\n </View>\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useMemo, useState } from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { ExerciseCard, type ExerciseCardProps, type ExerciseCardState } from './ExerciseCard'\nimport { InputBar } from './InputBar'\nimport { RestTimer } from './RestTimer'\nimport { SupersetWrapper } from './SupersetWrapper'\nimport { type SetRowProps } from './SetRow'\nimport { resolveColor } from '../../../theme/resolve-color'\n\nconst BRAND_PRIMARY = '#FF7900'\n\n/** Where an exercise sits in the during-workout flow. */\nexport type ActiveExerciseStatus = 'completed' | 'active' | 'upcoming'\n\n/**\n * One exercise in the running workout. Projected onto an `ExerciseCard`, whose\n * visual state is driven by `status` and the page's zoom focus: completed and\n * active exercises collapse/expand, upcoming ones stay dimmed.\n */\nexport interface ActiveWorkoutExercise {\n /** Stable id for zoom-focus selection. */\n id: string\n /** Exercise name, e.g. \"Barbell Bench Press\". */\n name: string\n /** Position in the workout flow. */\n status: ActiveExerciseStatus\n /** Unit used for this exercise's loads. */\n unit: 'lbs' | 'kg'\n /** Total sets prescribed for this exercise. */\n totalPlannedSets: number\n /** Collapsed summary (sets × reps @ weight) for a completed exercise. */\n summary?: ExerciseCardProps['summary']\n /** Estimated one-rep max badge. */\n e1rm?: ExerciseCardProps['e1rm']\n /** Flags a personal-record exercise. */\n isPR?: boolean\n /** Prescribed tempo, revealed when expanded. */\n tempo?: ExerciseCardProps['tempo']\n /** Per-rep velocities for each logged set (drives collapsed strips + set count). */\n setVelocities?: number[][]\n /** Per-set breakdown revealed when expanded. */\n sets?: SetRowProps[]\n /** One-line prescription for an upcoming exercise. */\n prescription?: string\n /** Previous-best hint for an upcoming exercise. */\n previousBest?: string\n /** Groups consecutive exercises under a shared `SupersetWrapper`. */\n supersetId?: string\n}\n\n/** A superset grouping consecutive exercises that share its id. */\nexport interface ActiveWorkoutSuperset {\n /** Matches `ActiveWorkoutExercise.supersetId`. */\n id: string\n /** Corner badge label, e.g. \"SS1\". */\n label: string\n /** Accent color for the wrapper rail + label. */\n color?: string\n}\n\n/** Live-set inputs shown in the bottom `InputBar`. */\nexport interface ActiveWorkoutInput {\n /** Current reps field value. */\n reps: string\n /** Current weight field value. */\n weight: string\n}\n\n/** Rest-timer inputs shown in the bottom `RestTimer`. */\nexport interface ActiveWorkoutRest {\n /** Prescribed rest length, seconds. */\n totalSeconds: number\n /** Elapsed rest, milliseconds. */\n elapsedMs: number\n /** Next-set hint, e.g. \"Set 3 · 8 × 195 lbs\". */\n nextSetInfo?: string\n}\n\n/** Derived, page-level roll-up of workout progress. */\nexport interface WorkoutProgress {\n /** Number of exercises marked completed. */\n completedExercises: number\n /** Total exercises in the workout. */\n totalExercises: number\n /** Sets logged so far across all exercises. */\n completedSets: number\n /** Total sets prescribed across all exercises. */\n totalSets: number\n /** Fraction of prescribed sets logged, 0-1. */\n fraction: number\n}\n\n/** An ordered render group: a lone exercise or a superset of exercises. */\nexport type WorkoutGroup =\n | { type: 'single'; exercise: ActiveWorkoutExercise }\n | { type: 'superset'; superset: ActiveWorkoutSuperset; exercises: ActiveWorkoutExercise[] }\n\nexport interface ActiveWorkoutPageProps extends ViewProps {\n /** Workout name shown in the header. */\n title?: string\n /** Context line under the title, e.g. \"Push Day A · Week 6\". */\n subtitle?: string\n /** Exercises in flow order. */\n exercises: ActiveWorkoutExercise[]\n /** Superset groupings referenced by `exercise.supersetId`. */\n supersets?: ActiveWorkoutSuperset[]\n /** Seed reps/weight for the live `InputBar`. */\n input?: ActiveWorkoutInput\n /** Rest-timer state; when resting, the timer replaces the input bar. */\n rest?: ActiveWorkoutRest\n /** Start the page in the resting state (timer showing). */\n initialResting?: boolean\n className?: string\n}\n\n/** Count the sets logged for an exercise (pure). */\nexport function countCompletedSets(exercise: ActiveWorkoutExercise): number {\n if (exercise.setVelocities != null) return exercise.setVelocities.length\n if (exercise.status === 'completed') return exercise.totalPlannedSets\n return 0\n}\n\n/** Roll up the exercises into the header progress readout (pure, testable). */\nexport function deriveWorkoutProgress(exercises: ActiveWorkoutExercise[]): WorkoutProgress {\n let completedExercises = 0\n let completedSets = 0\n let totalSets = 0\n for (const exercise of exercises) {\n if (exercise.status === 'completed') completedExercises += 1\n completedSets += countCompletedSets(exercise)\n totalSets += exercise.totalPlannedSets\n }\n return {\n completedExercises,\n totalExercises: exercises.length,\n completedSets,\n totalSets,\n fraction: totalSets === 0 ? 0 : completedSets / totalSets,\n }\n}\n\n/** The active exercise anchors the bottom bar; find it, or null (pure). */\nexport function findActiveExercise(\n exercises: ActiveWorkoutExercise[]\n): ActiveWorkoutExercise | null {\n return exercises.find((exercise) => exercise.status === 'active') ?? null\n}\n\n/** Map an exercise's status + focus onto an `ExerciseCard` visual state (pure). */\nexport function statusToCardState(\n status: ActiveExerciseStatus,\n focused: boolean\n): ExerciseCardState {\n if (status === 'upcoming') return 'upcoming'\n return focused ? 'expanded' : 'collapsed'\n}\n\n/** Project an exercise onto ExerciseCard props, wiring zoom focus (pure). */\nexport function toActiveCardProps(\n exercise: ActiveWorkoutExercise,\n focused: boolean,\n onToggle: () => void,\n supersetPosition: ExerciseCardProps['supersetPosition'] = null,\n supersetColor?: string\n): ExerciseCardProps {\n const state = statusToCardState(exercise.status, focused)\n return {\n name: exercise.name,\n state,\n onToggle,\n summary: exercise.summary,\n e1rm: exercise.e1rm,\n isPR: exercise.isPR,\n tempo: exercise.tempo,\n setVelocities: exercise.setVelocities,\n totalPlannedSets: exercise.totalPlannedSets,\n sets: state === 'expanded' ? exercise.sets : undefined,\n prescription: exercise.prescription,\n previousBest: exercise.previousBest,\n supersetPosition,\n supersetColor,\n }\n}\n\n/** Fold consecutive same-superset exercises into render groups (pure). */\nexport function groupExercises(\n exercises: ActiveWorkoutExercise[],\n supersets: ActiveWorkoutSuperset[]\n): WorkoutGroup[] {\n const byId = new Map(supersets.map((superset) => [superset.id, superset]))\n const groups: WorkoutGroup[] = []\n for (const exercise of exercises) {\n const superset = exercise.supersetId != null ? byId.get(exercise.supersetId) : undefined\n const last = groups[groups.length - 1]\n if (superset != null && last?.type === 'superset' && last.superset.id === superset.id) {\n last.exercises.push(exercise)\n } else if (superset != null) {\n groups.push({ type: 'superset', superset, exercises: [exercise] })\n } else {\n groups.push({ type: 'single', exercise })\n }\n }\n return groups\n}\n\n/** Position of an exercise within its superset, for corner-radius stitching. */\nfunction supersetPositionAt(index: number, length: number): ExerciseCardProps['supersetPosition'] {\n if (length === 1) return null\n if (index === 0) return 'first'\n if (index === length - 1) return 'last'\n return 'middle'\n}\n\nfunction WorkoutHeader({\n title,\n subtitle,\n progress,\n}: {\n title: string\n subtitle?: string\n progress: WorkoutProgress\n}) {\n return (\n <View style={{ gap: 10 }} testID=\"active-workout-page-header\">\n <View className=\"flex-row items-start justify-between\" style={{ gap: 8 }}>\n <View style={{ flexShrink: 1 }}>\n <Text\n accessibilityRole=\"header\"\n className=\"text-text-primary\"\n style={{\n fontSize: 20,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n }}\n testID=\"active-workout-page-title\"\n >\n {title}\n </Text>\n {subtitle != null && (\n <Text\n className=\"text-text-secondary\"\n style={{\n marginTop: 2,\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n }}\n testID=\"active-workout-page-subtitle\"\n >\n {subtitle}\n </Text>\n )}\n </View>\n <View style={{ alignItems: 'flex-end' }} testID=\"active-workout-page-progress-count\">\n <Text\n style={{\n fontSize: 15,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: BRAND_PRIMARY,\n fontVariant: ['tabular-nums'],\n }}\n >\n {`${progress.completedExercises}/${progress.totalExercises}`}\n </Text>\n <Text\n className=\"text-text-tertiary\"\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n letterSpacing: 0.4,\n textTransform: 'uppercase',\n }}\n >\n {`${progress.completedSets}/${progress.totalSets} sets`}\n </Text>\n </View>\n </View>\n <View\n className=\"bg-border\"\n style={{ height: 4, borderRadius: 2 }}\n testID=\"active-workout-page-progress-track\"\n >\n <View\n style={{\n height: '100%',\n width: `${Math.round(progress.fraction * 100)}%`,\n backgroundColor: BRAND_PRIMARY,\n borderRadius: 2,\n }}\n testID=\"active-workout-page-progress-fill\"\n />\n </View>\n </View>\n )\n}\n\ninterface ExerciseListProps {\n groups: WorkoutGroup[]\n focusedId: string | null\n onToggle: (id: string) => void\n}\n\nfunction ExerciseList({ groups, focusedId, onToggle }: ExerciseListProps) {\n return (\n <View style={{ gap: 10 }} testID=\"active-workout-page-exercises\">\n {groups.map((group) => {\n if (group.type === 'single') {\n return (\n <View\n key={group.exercise.id}\n className=\"bg-surface-elevated border-border\"\n style={{\n borderWidth: 1,\n borderRadius: 12,\n }}\n >\n <ExerciseCard\n {...toActiveCardProps(group.exercise, group.exercise.id === focusedId, () =>\n onToggle(group.exercise.id)\n )}\n />\n </View>\n )\n }\n return (\n <SupersetWrapper\n key={group.superset.id}\n label={group.superset.label}\n color={group.superset.color}\n >\n {group.exercises.map((exercise, index) => (\n <ExerciseCard\n key={exercise.id}\n {...toActiveCardProps(\n exercise,\n exercise.id === focusedId,\n () => onToggle(exercise.id),\n supersetPositionAt(index, group.exercises.length),\n group.superset.color\n )}\n />\n ))}\n </SupersetWrapper>\n )\n })}\n </View>\n )\n}\n\n/**\n * ActiveWorkoutPage — the during-workout screen, built as a zoom hierarchy over\n * `ExerciseCard`s. A header progress bar rolls up completed sets; the flow list\n * dims upcoming exercises, collapses finished ones to their velocity strips, and\n * expands exactly one focused exercise to its `SetRow` breakdown. Consecutive\n * superset exercises stitch together inside a `SupersetWrapper`. A pinned bottom\n * bar toggles between the live `InputBar` (log the next set) and the `RestTimer`.\n * Focus and rest are page-level state; children keep their own styles.\n *\n * @example\n * <ActiveWorkoutPage title=\"Push Day A\" exercises={exercises} />\n */\nexport function ActiveWorkoutPage({\n title = 'Active Workout',\n subtitle,\n exercises,\n supersets = [],\n input,\n rest,\n initialResting = false,\n className,\n ...props\n}: ActiveWorkoutPageProps) {\n const active = findActiveExercise(exercises)\n const [focusedId, setFocusedId] = useState<string | null>(active?.id ?? null)\n const [resting, setResting] = useState(initialResting)\n const [reps, setReps] = useState(input?.reps ?? '')\n const [weight, setWeight] = useState(input?.weight ?? '')\n\n const progress = useMemo(() => deriveWorkoutProgress(exercises), [exercises])\n const groups = useMemo(() => groupExercises(exercises, supersets), [exercises, supersets])\n\n const toggleFocus = (id: string) => setFocusedId((current) => (current === id ? null : id))\n\n const nextSetNumber = active != null ? countCompletedSets(active) + 1 : 1\n const canRecord = reps.trim() !== '' && weight.trim() !== ''\n const showRest = resting && rest != null\n const showInput = !showRest && active != null\n\n return (\n <View\n className={['bg-background-base', className].filter(Boolean).join(' ')}\n style={{ position: 'relative', width: 390 }}\n accessibilityRole={'main' as ViewProps['accessibilityRole']}\n aria-label={title}\n testID=\"active-workout-page\"\n {...props}\n >\n <View style={{ padding: 16, gap: 14 }} testID=\"active-workout-page-content\">\n <WorkoutHeader title={title} subtitle={subtitle} progress={progress} />\n <ExerciseList groups={groups} focusedId={focusedId} onToggle={toggleFocus} />\n </View>\n\n {(showRest || showInput) && (\n <View\n style={{ borderTopWidth: 1, borderTopColor: resolveColor('border-default') }}\n testID=\"active-workout-page-bottom-bar\"\n >\n {showRest && rest != null ? (\n <RestTimer\n totalSeconds={rest.totalSeconds}\n elapsedMs={rest.elapsedMs}\n nextSetInfo={rest.nextSetInfo}\n onSkip={() => setResting(false)}\n onAddTime={() => undefined}\n visible\n />\n ) : (\n active != null && (\n <InputBar\n exerciseName={active.name}\n setNumber={nextSetNumber}\n totalSets={active.totalPlannedSets}\n reps={reps}\n weight={weight}\n unit={active.unit}\n onRepsChange={setReps}\n onWeightChange={setWeight}\n onRecord={() => {\n if (rest != null) setResting(true)\n }}\n canRecord={canRecord}\n visible\n />\n )\n )}\n </View>\n )}\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 TreemapDatum {\n /** Stable identity — returned by onPress and used as the React key. */\n id: string\n /** Area weight (e.g. size, count, severity). Non-positive values are dropped. */\n value: number\n /** Tile fill color. Falls back to a built-in categorical palette by index. */\n color?: string\n /** Optional label rendered inside sufficiently large tiles. */\n label?: string\n}\n\nexport type TreemapScale = 'linear' | 'sqrt' | 'log'\n\nexport interface TreemapProps extends Omit<ViewProps, 'children'> {\n data: TreemapDatum[]\n /** Layout box. Required — the treemap fills exactly this area. */\n width: number\n height: number\n /**\n * Area scale. Real-world weights are often heavy-tailed, where one outlier\n * under a `linear` scale swallows the whole canvas. `sqrt` (default) damps\n * that while preserving order; `log` compresses hardest.\n */\n scale?: TreemapScale\n /** Show at most N tiles; the remainder collapse into one \"+M more\" tile. */\n maxTiles?: number\n /** Fires with a tile's id on press (never for the \"+M more\" tile). */\n onPress?: (id: string) => void\n /** Draws a highlight border on the matching tile. */\n selectedId?: string\n className?: string\n}\n\n/** Titan categorical fallback palette (data-1..data-8). */\nconst PALETTE = [\n '#5B9BD5', '#14B8A6', '#F4A736', '#F83030',\n '#823CA0', '#D4A520', '#406D87', '#43C6B7',\n]\n\ninterface Rect {\n x: number\n y: number\n w: number\n h: number\n datum: TreemapDatum\n}\n\nfunction scaleValue(v: number, scale: TreemapScale): number {\n if (v <= 0) return 0\n if (scale === 'sqrt') return Math.sqrt(v)\n if (scale === 'log') return Math.log10(v + 1)\n return v\n}\n\nfunction worstRatio(row: { area: number }[], side: number): number {\n const sum = row.reduce((s, r) => s + r.area, 0)\n const thickness = sum / side\n let worst = 0\n for (const r of row) {\n const len = r.area / thickness\n const ratio = Math.max(thickness / len, len / thickness)\n if (ratio > worst) worst = ratio\n }\n return worst\n}\n\n/** Squarified treemap (Bruls, Huizing & van Wijk, 2000). */\nfunction squarify(data: TreemapDatum[], w: number, h: number): Rect[] {\n const total = data.reduce((s, d) => s + d.value, 0)\n if (total <= 0 || w <= 0 || h <= 0) return []\n const scaled = data.map((d) => ({ datum: d, area: (d.value / total) * w * h }))\n const out: Rect[] = []\n let rx = 0\n let ry = 0\n let rw = w\n let rh = h\n let i = 0\n\n while (i < scaled.length) {\n const vertical = rw >= rh\n const side = vertical ? rh : rw\n let row: typeof scaled = []\n let bestWorst = Infinity\n let j = i\n while (j < scaled.length) {\n const trial = [...row, scaled[j]]\n const worst = worstRatio(trial, side)\n if (row.length > 0 && worst > bestWorst) break\n row = trial\n bestWorst = worst\n j++\n }\n const rowArea = row.reduce((s, r) => s + r.area, 0)\n const thickness = rowArea / side\n let along = vertical ? ry : rx\n for (const r of row) {\n const len = r.area / thickness\n out.push(\n vertical\n ? { x: rx, y: along, w: thickness, h: len, datum: r.datum }\n : { x: along, y: ry, w: len, h: thickness, datum: r.datum },\n )\n along += len\n }\n if (vertical) {\n rx += thickness\n rw -= thickness\n } else {\n ry += thickness\n rh -= thickness\n }\n i = j\n }\n return out\n}\n\n/**\n * Squarified treemap. SVG-free (absolutely-positioned tiles) so it renders\n * identically on web (react-native-web) and native. Layout is computed from\n * `value`; color and labels are caller-supplied.\n */\nexport function Treemap({\n data,\n width,\n height,\n scale = 'sqrt',\n maxTiles = 60,\n onPress,\n selectedId,\n className,\n ...props\n}: TreemapProps) {\n const clean = data\n .filter((d) => d.value > 0)\n .sort((a, b) => b.value - a.value)\n .map((d, i) => ({ ...d, color: d.color ?? PALETTE[i % PALETTE.length] }))\n\n let tiles = clean\n if (clean.length > maxTiles) {\n const head = clean.slice(0, maxTiles - 1)\n const restValue = clean.slice(maxTiles - 1).reduce((s, d) => s + d.value, 0)\n tiles = [\n ...head,\n { id: '__more__', value: restValue, color: '#3a3a3a', label: `+${clean.length - (maxTiles - 1)} more` },\n ]\n }\n\n const weighted = tiles.map((d) => ({ ...d, value: scaleValue(d.value, scale) }))\n const rects = squarify(weighted, width, height)\n\n return (\n <View className={cn('relative', className)} style={{ width, height }} {...props}>\n {rects.map((r) => {\n const selected = r.datum.id === selectedId\n const labelFits = r.w > 54 && r.h > 22\n const pressable = r.datum.id !== '__more__'\n return (\n <Pressable\n key={r.datum.id}\n testID={`treemap-tile-${r.datum.id}`}\n accessibilityLabel={r.datum.label ?? r.datum.id}\n onPress={pressable ? () => onPress?.(r.datum.id) : undefined}\n style={{\n position: 'absolute',\n left: r.x,\n top: r.y,\n width: Math.max(0, r.w - 2),\n height: Math.max(0, r.h - 2),\n backgroundColor: r.datum.color,\n borderRadius: 3,\n opacity: selected ? 1 : 0.9,\n borderWidth: selected ? 2 : 0,\n borderColor: '#ffffff',\n padding: 4,\n overflow: 'hidden',\n }}\n >\n {labelFits && (\n <Text numberOfLines={2} className=\"text-[10px] font-semibold text-[#0b0b0b]\">\n {r.datum.label ?? r.datum.id}\n </Text>\n )}\n </Pressable>\n )\n })}\n </View>\n )\n}\n","import { View, Text, Pressable, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface ScatterDatum {\n /** Stable identity — returned by onPress and used as the React key. */\n id: string\n /** Horizontal position in data space. */\n x: number\n /** Vertical position in data space. */\n y: number\n /** Bubble radius in px. Falls back to a fixed default when omitted. */\n r?: number\n /** Bubble fill color. Falls back to a built-in categorical palette by index. */\n color?: string\n /** Optional label shown for large or selected points. */\n label?: string\n}\n\nexport interface ScatterAxis {\n xLabel?: string\n yLabel?: string\n /** Domain overrides. Any omitted bound is derived from the data. */\n xMin?: number\n xMax?: number\n yMin?: number\n yMax?: number\n}\n\nexport interface ScatterProps extends Omit<ViewProps, 'children'> {\n data: ScatterDatum[]\n /** Layout box. Required — the plot fills exactly this area. */\n width: number\n height: number\n /** Axis labels and optional domain overrides. */\n axis?: ScatterAxis\n /**\n * Draw the y = 1 − x \"main sequence\" reference line (NDepend idiom, where\n * distance from the diagonal measures the zone of pain / zone of uselessness).\n */\n diagonal?: boolean\n /** Fires with a point's id on press. */\n onPress?: (id: string) => void\n /** Draws a highlight ring on the matching point. */\n selectedId?: string\n className?: string\n}\n\n/** Titan categorical fallback palette (data-1..data-8). */\nconst PALETTE = [\n '#5B9BD5', '#14B8A6', '#F4A736', '#F83030',\n '#823CA0', '#D4A520', '#406D87', '#43C6B7',\n]\n\nconst GRID_LINE = 'rgba(255,255,255,0.07)'\nconst AXIS_LINE = 'rgba(255,255,255,0.18)'\nconst DIAGONAL_LINE = 'rgba(255,255,255,0.28)'\nconst DEFAULT_R = 6\n\nconst PLOT_LEFT = 40\nconst PLOT_RIGHT = 12\nconst PLOT_TOP = 12\nconst PLOT_BOTTOM = 34\nconst TICK_COUNT = 5\n\ninterface Domain {\n min: number\n max: number\n}\n\n/** Derive a padded [min, max] from values, honoring explicit overrides. */\nfunction domainOf(values: number[], min?: number, max?: number): Domain {\n const lo = min ?? (values.length ? Math.min(...values) : 0)\n const hi = max ?? (values.length ? Math.max(...values) : 1)\n if (hi > lo) return { min: lo, max: hi }\n const pad = Math.abs(hi) * 0.1 || 0.5\n return { min: lo - pad, max: hi + pad }\n}\n\n/** Evenly spaced tick values across a domain. */\nfunction ticksOf(d: Domain, count: number): number[] {\n return Array.from({ length: count }, (_, i) => d.min + ((d.max - d.min) * i) / (count - 1))\n}\n\nfunction formatTick(v: number): string {\n if (Number.isInteger(v)) return `${v}`\n return v.toFixed(Math.abs(v) < 1 ? 2 : 1)\n}\n\n/** A single straight segment drawn as one rotated View (SVG-free). */\nfunction LineSegment({\n x1, y1, x2, y2, color, testID,\n}: { x1: number; y1: number; x2: number; y2: number; color: string; testID: string }) {\n const dx = x2 - x1\n const dy = y2 - y1\n const length = Math.sqrt(dx * dx + dy * dy)\n const angle = Math.atan2(dy, dx) * (180 / Math.PI)\n return (\n <View\n testID={testID}\n accessibilityElementsHidden\n style={{\n position: 'absolute',\n left: x1,\n top: y1,\n width: length,\n height: 0,\n borderTopWidth: 1,\n borderStyle: 'dashed',\n borderTopColor: color,\n transformOrigin: '0 0',\n transform: [{ rotate: `${angle}deg` }],\n }}\n />\n )\n}\n\n/**\n * SVG-free scatter / bubble plot (absolutely-positioned Views), matching the\n * codebase's chart convention so it renders identically on web and native. Used\n * for \"main-sequence\" plots (instability × abstractness) via the `diagonal`\n * reference line, or any two metrics. Positions and bubble sizes are computed\n * from the data; color and labels are caller-supplied.\n */\nexport function Scatter({\n data,\n width,\n height,\n axis = {},\n diagonal = false,\n onPress,\n selectedId,\n className,\n ...props\n}: ScatterProps) {\n const innerW = Math.max(1, width - PLOT_LEFT - PLOT_RIGHT)\n const innerH = Math.max(1, height - PLOT_TOP - PLOT_BOTTOM)\n const xd = domainOf(data.map((d) => d.x), axis.xMin, axis.xMax)\n const yd = domainOf(data.map((d) => d.y), axis.yMin, axis.yMax)\n\n const toX = (x: number) => PLOT_LEFT + ((x - xd.min) / (xd.max - xd.min)) * innerW\n const toY = (y: number) => PLOT_TOP + (1 - (y - yd.min) / (yd.max - yd.min)) * innerH\n\n const points = data.map((d, i) => ({\n datum: d,\n cx: toX(d.x),\n cy: toY(d.y),\n radius: d.r ?? DEFAULT_R,\n color: d.color ?? PALETTE[i % PALETTE.length],\n }))\n\n const ariaLabel = `Scatter plot of ${axis.xLabel ?? 'x'} versus ${axis.yLabel ?? 'y'}, ${data.length} point${data.length === 1 ? '' : 's'}`\n\n return (\n <View className={cn('relative', className)} style={{ width, height }} {...props}>\n {/* Non-interactive labelled canvas: grid, axes, ticks, diagonal. */}\n <View\n accessibilityRole=\"image\"\n accessibilityLabel={ariaLabel}\n testID=\"scatter-canvas\"\n style={{ position: 'absolute', top: 0, left: 0, width, height, overflow: 'hidden' }}\n >\n {ticksOf(yd, TICK_COUNT).map((t, i) => {\n const y = toY(t)\n return (\n <View\n key={`y-${i}`}\n accessibilityElementsHidden\n testID=\"scatter-gridline-y\"\n style={{ position: 'absolute', left: PLOT_LEFT, width: innerW, top: y, height: 1, backgroundColor: GRID_LINE }}\n >\n <Text className=\"text-[9px] text-text-tertiary\" style={{ position: 'absolute', left: -PLOT_LEFT, top: -6, width: PLOT_LEFT - 6, textAlign: 'right' }}>\n {formatTick(t)}\n </Text>\n </View>\n )\n })}\n {ticksOf(xd, TICK_COUNT).map((t, i) => {\n const x = toX(t)\n return (\n <View\n key={`x-${i}`}\n accessibilityElementsHidden\n testID=\"scatter-gridline-x\"\n style={{ position: 'absolute', top: PLOT_TOP, height: innerH, left: x, width: 1, backgroundColor: GRID_LINE }}\n >\n <Text className=\"text-[9px] text-text-tertiary\" style={{ position: 'absolute', top: innerH + 4, left: -16, width: 32, textAlign: 'center' }}>\n {formatTick(t)}\n </Text>\n </View>\n )\n })}\n\n {/* Axis frame (left + bottom). */}\n <View accessibilityElementsHidden style={{ position: 'absolute', left: PLOT_LEFT, top: PLOT_TOP, width: 1, height: innerH, backgroundColor: AXIS_LINE }} />\n <View accessibilityElementsHidden style={{ position: 'absolute', left: PLOT_LEFT, top: PLOT_TOP + innerH, width: innerW, height: 1, backgroundColor: AXIS_LINE }} />\n\n {diagonal && (\n <LineSegment\n testID=\"scatter-diagonal\"\n color={DIAGONAL_LINE}\n x1={toX(xd.min)}\n y1={toY(1 - xd.min)}\n x2={toX(xd.max)}\n y2={toY(1 - xd.max)}\n />\n )}\n\n {axis.xLabel && (\n <Text testID=\"scatter-x-label\" className=\"text-[10px] font-semibold text-text-secondary\" style={{ position: 'absolute', left: PLOT_LEFT, width: innerW, bottom: 2, textAlign: 'center' }}>\n {axis.xLabel}\n </Text>\n )}\n {axis.yLabel && (\n <Text testID=\"scatter-y-label\" className=\"text-[10px] font-semibold text-text-secondary\" style={{ position: 'absolute', left: -innerH / 2 + 6, top: PLOT_TOP + innerH / 2, width: innerH, textAlign: 'center', transformOrigin: '50% 50%', transform: [{ rotate: '-90deg' }] }}>\n {axis.yLabel}\n </Text>\n )}\n </View>\n\n {/* Interactive point overlay (kept out of the image-role canvas). */}\n <View style={{ position: 'absolute', top: 0, left: 0, width, height }} testID=\"scatter-points\">\n {points.map((p) => {\n const selected = p.datum.id === selectedId\n const showLabel = p.datum.label && (selected || p.radius >= 10)\n return (\n <Pressable\n key={p.datum.id}\n testID={`scatter-point-${p.datum.id}`}\n accessibilityRole=\"button\"\n accessibilityLabel={p.datum.label ?? p.datum.id}\n onPress={() => onPress?.(p.datum.id)}\n style={{\n position: 'absolute',\n left: p.cx - p.radius,\n top: p.cy - p.radius,\n width: p.radius * 2,\n height: p.radius * 2,\n borderRadius: p.radius,\n backgroundColor: p.color,\n opacity: selected ? 1 : 0.82,\n borderWidth: selected ? 2 : 0,\n borderColor: '#ffffff',\n }}\n >\n {showLabel && (\n <Text\n numberOfLines={1}\n className=\"text-[9px] font-semibold text-text-primary\"\n style={{ position: 'absolute', left: p.radius * 2 + 3, top: p.radius - 6, width: 80 }}\n >\n {p.datum.label}\n </Text>\n )}\n </Pressable>\n )\n })}\n </View>\n </View>\n )\n}\n","import { View, Text, type ViewProps } from 'react-native'\nimport { cn } from '../../../utils/cn'\n\nexport interface GaugeThreshold {\n /** Band start, in the gauge's value units. */\n value: number\n /** Color applied to filled segments at or above this band. */\n color: string\n}\n\nexport interface GaugeProps extends Omit<ViewProps, 'children'> {\n /** Current value. Clamped to [min, max]. */\n value: number\n min?: number\n max?: number\n /** Diameter in px. */\n size?: number\n /** Caption under the big number. */\n label?: string\n /** Unit suffix beside the big number (e.g. \"%\"). */\n unit?: string\n /**\n * Band coloring, ascending by `value`. A filled segment takes the color of\n * the highest band whose `value` it reaches. Defaults to Titan status tokens\n * (red < 60, amber < 80, green ≥ 80 on a 0–100 scale).\n */\n thresholds?: GaugeThreshold[]\n /** Single-color override for filled segments (ignores `thresholds`). */\n color?: string\n className?: string\n}\n\nconst STATUS_SUCCESS = '#14B8A6'\nconst STATUS_WARNING = '#FFB020'\nconst STATUS_ERROR = '#D14343'\nconst TRACK = 'rgba(255,255,255,0.08)'\n\n/** Titan status-token bands for a 0–100 score. */\nconst DEFAULT_THRESHOLDS: GaugeThreshold[] = [\n { value: 0, color: STATUS_ERROR },\n { value: 60, color: STATUS_WARNING },\n { value: 80, color: STATUS_SUCCESS },\n]\n\nconst ARC_START = 135\nconst ARC_SWEEP = 270\nconst SEGMENTS = 40\n\nfunction clamp01(n: number): number {\n if (Number.isNaN(n)) return 0\n return Math.max(0, Math.min(1, n))\n}\n\nfunction formatValue(v: number): string {\n return Number.isInteger(v) ? `${v}` : v.toFixed(1)\n}\n\n/** Color of the highest band whose start value the fraction reaches. */\nfunction bandColor(fraction: number, bands: GaugeThreshold[], min: number, max: number): string {\n const value = min + fraction * (max - min)\n const sorted = [...bands].sort((a, b) => a.value - b.value)\n let color = sorted[0]?.color ?? STATUS_SUCCESS\n for (const band of sorted) {\n if (value >= band.value) color = band.color\n }\n return color\n}\n\ninterface Tick {\n key: number\n left: number\n top: number\n rotate: string\n color: string\n}\n\n/** Position + color each radial segment of the arc. */\nfunction buildTicks(fill: number, size: number, activeColor: (f: number) => string): Tick[] {\n const center = size / 2\n const radius = center - size * 0.08\n return Array.from({ length: SEGMENTS }, (_, i) => {\n const fraction = (i + 0.5) / SEGMENTS\n const deg = ARC_START + fraction * ARC_SWEEP\n const rad = (deg * Math.PI) / 180\n return {\n key: i,\n left: center + radius * Math.cos(rad),\n top: center + radius * Math.sin(rad),\n rotate: `${deg - 90}deg`,\n color: fraction <= fill ? activeColor(fraction) : TRACK,\n }\n })\n}\n\n/**\n * SVG-free radial gauge (absolutely-positioned segment Views), matching the\n * codebase's chart convention so it renders identically on web and native. The\n * 270° arc fills with band colors as the value rises; the center reuses the\n * Metric visual language (large bold value + unit + caption). Ideal for a 0–100\n * health / quality score.\n */\nexport function Gauge({\n value,\n min = 0,\n max = 100,\n size = 160,\n label,\n unit,\n thresholds = DEFAULT_THRESHOLDS,\n color,\n className,\n ...props\n}: GaugeProps) {\n const span = max - min || 1\n const fill = clamp01((value - min) / span)\n const activeColor = (f: number) => color ?? bandColor(f, thresholds, min, max)\n const ticks = buildTicks(fill, size, activeColor)\n const displayColor = color ?? bandColor(fill, thresholds, min, max)\n const tickLength = size * 0.11\n const tickThickness = Math.max(2, (size * 0.9) / SEGMENTS)\n\n const ariaLabel = `${label ? `${label}: ` : ''}${formatValue(value)}${unit ?? ''} of ${formatValue(max)}`\n\n return (\n <View\n className={cn('relative', className)}\n style={{ width: size, height: size }}\n accessibilityRole=\"image\"\n accessibilityLabel={ariaLabel}\n testID=\"gauge\"\n {...props}\n >\n {ticks.map((t) => (\n <View\n key={t.key}\n accessibilityElementsHidden\n testID=\"gauge-segment\"\n style={{\n position: 'absolute',\n left: t.left - tickThickness / 2,\n top: t.top - tickLength / 2,\n width: tickThickness,\n height: tickLength,\n borderRadius: tickThickness / 2,\n backgroundColor: t.color,\n transform: [{ rotate: t.rotate }],\n }}\n />\n ))}\n\n {/* Center readout — Metric visual language. */}\n <View style={{ position: 'absolute', top: 0, left: 0, width: size, height: size }} className=\"items-center justify-center\">\n <View className=\"flex-row items-baseline gap-0.5\">\n <Text testID=\"gauge-value\" className=\"text-3xl font-bold\" style={{ color: displayColor }}>\n {formatValue(value)}\n </Text>\n {unit && <Text className=\"text-sm text-text-tertiary\">{unit}</Text>}\n </View>\n {label && (\n <Text testID=\"gauge-label\" className=\"text-xs text-text-secondary mt-1\">\n {label}\n </Text>\n )}\n </View>\n </View>\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"]}
|