@otfdashkit/ui-native 0.1.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/LICENSE +21 -0
- package/dist/index.d.ts +309 -0
- package/dist/index.js +6117 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +6089 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/tamagui.config.ts","../src/index.ts","../src/config/design-themes.ts","../src/primitives/Button.tsx","../src/primitives/Text.tsx","../src/primitives/Card.tsx","../src/primitives/Input.tsx","../src/primitives/Avatar.tsx","../src/interface/Headings.tsx","../src/interface/PageContainer.tsx","../src/interface/Dialog.tsx","../src/interface/Pressable.tsx","../src/interface/Image.tsx","../src/interface/Badge.tsx","../src/interface/Icon.tsx","../src/interface/OtfAccordion.tsx","../src/interface/OtfTabs.tsx","../src/interface/OtfToggleGroup.tsx","../src/interface/OtfToast.tsx","../src/interface/FormField.tsx","../src/interface/Tooltip.tsx","../src/interface/BrandIcons.tsx","../src/layouts/StepPageLayout.tsx","../src/layouts/ScreenLayout.tsx","../src/layouts/Section.tsx","../src/layouts/ListItem.tsx","../src/layouts/Divider.tsx","../src/layouts/KeyboardStickyFooter.tsx","../src/layouts/SafeArea.tsx","../src/layouts/Grid.tsx","../src/patterns/PaywallScreen.tsx","../src/patterns/OnboardingCarousel.tsx","../src/patterns/ChatBubble.tsx","../src/patterns/SettingsScreen.tsx","../src/patterns/EmptyState.tsx","../src/patterns/ProfileHeader.tsx","../src/patterns/AppHeader.tsx","../src/patterns/BottomSheet.tsx","../src/patterns/LoginScreen.tsx","../src/patterns/TabBar.tsx","../src/patterns/ChipsTabBar.tsx","../src/patterns/SearchBar.tsx","../src/patterns/FloatingActionButton.tsx","../src/patterns/ActionSheet.tsx","../src/patterns/Skeleton.tsx","../src/patterns/NotificationBanner.tsx","../src/patterns/ProgressSteps.tsx","../src/patterns/SwipeableRow.tsx","../src/patterns/MediaCard.tsx","../src/patterns/Carousel.tsx","../src/patterns/PullToRefresh.tsx","../src/patterns/ProductCard.tsx","../src/patterns/PricingTable.tsx","../src/patterns/CountdownBanner.tsx","../src/patterns/TestimonialCard.tsx","../src/patterns/ConfirmDialog.tsx","../src/patterns/Chip.tsx","../src/patterns/OTPInput.tsx","../src/patterns/PasswordInput.tsx","../src/patterns/AvatarGroup.tsx","../src/patterns/SwipeCards.tsx","../src/patterns/GlassCard.tsx","../src/patterns/DataTable.tsx","../src/patterns/DatePicker.tsx","../src/patterns/EventCard.tsx","../src/patterns/UserPreferences.tsx","../src/patterns/OtfSelect.tsx","../src/patterns/OtfDialog.tsx","../src/patterns/OtfPopover.tsx","../src/patterns/ImmersiveMediaScreen.tsx","../src/patterns/FinanceDashboard.tsx","../src/patterns/MultiStep.tsx","../src/patterns/Selectable.tsx","../src/patterns/AnimatedView.tsx","../src/patterns/Expandable.tsx","../src/patterns/WheelPicker.tsx","../src/patterns/RulerScrubber.tsx","../src/patterns/CardScroller.tsx","../src/hooks/useCollapsibleHeader.ts"],"sourcesContent":["import { defaultConfig } from '@tamagui/config/v5'\nimport { createTamagui, type TamaguiInternalConfig } from 'tamagui'\n\nexport const otfConfig: TamaguiInternalConfig = createTamagui({\n ...defaultConfig,\n})\n\nexport type OtfConfig = typeof otfConfig\n\ndeclare module 'tamagui' {\n interface TamaguiCustomConfig extends OtfConfig {}\n}\n","// Config\nexport { otfConfig } from './config/tamagui.config'\nexport type { OtfConfig } from './config/tamagui.config'\nexport { defaultConfig as tamaguiDefaultConfig } from '@tamagui/config/v5'\n\n// Design Themes (maps platform's 16 design themes to Tamagui palettes)\nexport {\n OTF_DESIGN_THEMES,\n OTF_DESIGN_THEME_IDS,\n getOtfThemePalettes,\n getOtfDesignTheme,\n} from './config/design-themes'\nexport type {\n OtfDesignThemeId,\n OtfColorPalette,\n OtfDesignTheme,\n} from './config/design-themes'\n\n// ─── Tamagui re-exports (full component library) ────────────────────────────\nexport {\n // Layout primitives\n View, Stack, SizableStack, ThemeableStack, Frame,\n XStack, YStack, ZStack, ScrollView,\n Circle, Square, Spacer, EnsureFlexed,\n // Groups\n Group, XGroup, YGroup,\n // Semantic HTML elements\n Header, Footer, Main, Nav, Article, Aside,\n // Text\n H1, H2, H3, H4, H5, H6, Heading, Paragraph, SizableText, Text, Label,\n // Forms\n Button, Input, TextArea, Switch, Checkbox, Slider, RadioGroup, Select, Fieldset, Form,\n // Display\n Card, Avatar, Separator, Image as TamaguiImage, Progress, Spinner,\n ListItem as TamaguiListItem, Anchor,\n // Overlay & portals\n Sheet, Dialog, AlertDialog, Popover, Tooltip, TooltipSimple,\n Portal, PortalHost, PortalItem, PortalProvider,\n // Navigation (composable Tamagui components)\n Tabs, Accordion, ToggleGroup,\n // Animation\n AnimatePresence,\n // Adapt\n Adapt,\n // Utilities\n VisuallyHidden, Unspaced,\n // Theme & config\n Theme, TamaguiProvider, TamaguiProvider as OtfProvider,\n createTamagui, createFont, createMedia, createTheme, createTokens,\n createVariable, createStyledContext,\n addTheme, updateTheme, replaceTheme,\n // Styled\n styled, withStaticProperties,\n // Platform\n isWeb, isClient,\n // Token & config access\n getConfig, getToken, getTokens, getTokenValue,\n // Ref & event utilities\n composeRefs, composeEventHandlers,\n // Hooks\n useTheme, useMedia, useThemeName,\n useControllableState, useEvent, useForceUpdate,\n useIsomorphicLayoutEffect, useComposedRefs,\n useWindowDimensions, useDidFinishSSR,\n useDebounce, useDebounceValue,\n usePresence, useIsPresent,\n // Types\n type GetProps, type SizeTokens, type ColorTokens, type ThemeTokens,\n} from 'tamagui'\n\n// ─── Otf styled primitives (named to avoid Tamagui conflicts) ──────────────\nexport { Button as OtfButton } from './primitives/Button'\nexport type { ButtonProps as OtfButtonProps } from './primitives/Button'\n\nexport { OtfText } from './primitives/Text'\nexport type { OtfTextProps } from './primitives/Text'\n\nexport { Card as OtfCard } from './primitives/Card'\nexport type { CardProps as OtfCardProps } from './primitives/Card'\n\nexport { Input as OtfInput } from './primitives/Input'\nexport type { InputProps as OtfInputProps } from './primitives/Input'\n\nexport { Avatar as OtfAvatar } from './primitives/Avatar'\nexport type { AvatarProps as OtfAvatarProps } from './primitives/Avatar'\n\n// ─── Otf interface components ──────────────────────────────────────────────\nexport { SubHeading, SepHeading } from './interface/Headings'\nexport { PageContainer, PageMainContainer } from './interface/PageContainer'\nexport { DialogProvider, showError, dialogConfirm } from './interface/Dialog'\nexport { Pressable } from './interface/Pressable'\nexport { Image } from './interface/Image'\nexport { Badge } from './interface/Badge'\nexport type { BadgeProps } from './interface/Badge'\n\nexport { Icon, ICONS } from './interface/Icon'\nexport type { IconName, IconProps } from './interface/Icon'\n\nexport { OtfAccordion } from './interface/OtfAccordion'\nexport type { OtfAccordionProps, OtfAccordionItem } from './interface/OtfAccordion'\n\nexport { OtfTabs } from './interface/OtfTabs'\nexport type { OtfTabsProps, OtfTabItem } from './interface/OtfTabs'\n\nexport { OtfToggleGroup } from './interface/OtfToggleGroup'\nexport type { OtfToggleGroupProps, OtfToggleOption } from './interface/OtfToggleGroup'\n\nexport { OtfToastProvider, useOtfToast, toast } from './interface/OtfToast'\nexport type { OtfToastVariant, OtfToastData, OtfToastOptions, OtfToastContextType } from './interface/OtfToast'\n\nexport { FormField } from './interface/FormField'\nexport type { FormFieldProps } from './interface/FormField'\n\nexport { OtfTooltip } from './interface/Tooltip'\nexport type { TooltipProps } from './interface/Tooltip'\n\nexport { GoogleLogo, AppleLogo, GitHubLogo, MicrosoftLogo } from './interface/BrandIcons'\n\n// ─── Otf layouts ───────────────────────────────────────────────────────────\nexport { StepPageLayout } from './layouts/StepPageLayout'\nexport type { StepPageProps } from './layouts/StepPageLayout'\n\nexport { ScreenLayout } from './layouts/ScreenLayout'\n\nexport { Section } from './layouts/Section'\nexport type { SectionProps } from './layouts/Section'\n\nexport { ListItem } from './layouts/ListItem'\nexport type { ListItemProps } from './layouts/ListItem'\n\nexport { Divider } from './layouts/Divider'\nexport type { DividerProps } from './layouts/Divider'\n\nexport { KeyboardStickyFooter } from './layouts/KeyboardStickyFooter'\nexport type { KeyboardStickyFooterProps } from './layouts/KeyboardStickyFooter'\n\nexport { SafeArea } from './layouts/SafeArea'\nexport type { SafeAreaProps } from './layouts/SafeArea'\n\nexport { Grid, Container } from './layouts/Grid'\nexport type { GridProps, ContainerProps } from './layouts/Grid'\n\n// ─── Otf patterns ─────────────────────────────────────────────────────────\nexport { PaywallScreen } from './patterns/PaywallScreen'\nexport type {\n PaywallScreenProps,\n PlanOption,\n PaywallVariant,\n PaywallFeature,\n PaywallComparisonRow,\n PaywallTestimonial,\n PaywallCreator,\n} from './patterns/PaywallScreen'\n\nexport { OnboardingCarousel } from './patterns/OnboardingCarousel'\nexport type { OnboardingCarouselProps, OnboardingStep, OnboardingVariant } from './patterns/OnboardingCarousel'\n\nexport { ChatBubble } from './patterns/ChatBubble'\nexport type { ChatBubbleProps, ChatMessage } from './patterns/ChatBubble'\n\nexport { SettingsScreen } from './patterns/SettingsScreen'\nexport type { SettingsScreenProps, SettingsSection, SettingsItem } from './patterns/SettingsScreen'\n\nexport { EmptyState } from './patterns/EmptyState'\nexport type { EmptyStateProps } from './patterns/EmptyState'\n\nexport { ProfileHeader } from './patterns/ProfileHeader'\nexport type { ProfileHeaderProps } from './patterns/ProfileHeader'\n\nexport { AppHeader } from './patterns/AppHeader'\nexport type { AppHeaderProps, AppHeaderVariant } from './patterns/AppHeader'\n\nexport { BottomSheet } from './patterns/BottomSheet'\nexport type { BottomSheetProps } from './patterns/BottomSheet'\n\nexport { LoginScreen } from './patterns/LoginScreen'\nexport type { LoginScreenProps, AuthProvider, AuthProviderBrand, LoginScreenVariant } from './patterns/LoginScreen'\n\nexport { TabBar } from './patterns/TabBar'\nexport type { TabBarProps, TabBarItem } from './patterns/TabBar'\n\nexport { ChipsTabBar } from './patterns/ChipsTabBar'\nexport type { ChipsTabBarProps, ChipsTabBarItem } from './patterns/ChipsTabBar'\n\nexport { SearchBar } from './patterns/SearchBar'\nexport type { SearchBarProps } from './patterns/SearchBar'\n\nexport { FloatingActionButton } from './patterns/FloatingActionButton'\nexport type { FABProps } from './patterns/FloatingActionButton'\n\nexport { ActionSheet } from './patterns/ActionSheet'\nexport type { ActionSheetProps, ActionSheetItem } from './patterns/ActionSheet'\n\nexport { Skeleton } from './patterns/Skeleton'\nexport type { SkeletonProps } from './patterns/Skeleton'\n\nexport { NotificationBanner } from './patterns/NotificationBanner'\nexport type { NotificationBannerProps } from './patterns/NotificationBanner'\n\nexport { ProgressSteps } from './patterns/ProgressSteps'\nexport type { ProgressStepsProps } from './patterns/ProgressSteps'\n\nexport { SwipeableRow } from './patterns/SwipeableRow'\nexport type { SwipeableRowProps, SwipeAction } from './patterns/SwipeableRow'\n\nexport { MediaCard } from './patterns/MediaCard'\nexport type { MediaCardProps } from './patterns/MediaCard'\n\nexport { Carousel } from './patterns/Carousel'\nexport type { CarouselProps } from './patterns/Carousel'\n\nexport { PullToRefresh } from './patterns/PullToRefresh'\nexport type { PullToRefreshProps } from './patterns/PullToRefresh'\n\nexport { ProductCard } from './patterns/ProductCard'\nexport type { ProductCardProps } from './patterns/ProductCard'\n\nexport { PricingTable } from './patterns/PricingTable'\nexport type { PricingTableProps, PricingPlan } from './patterns/PricingTable'\n\nexport { CountdownBanner } from './patterns/CountdownBanner'\nexport type { CountdownBannerProps } from './patterns/CountdownBanner'\n\nexport { TestimonialCard } from './patterns/TestimonialCard'\nexport type { TestimonialCardProps } from './patterns/TestimonialCard'\n\nexport { ConfirmDialog } from './patterns/ConfirmDialog'\nexport type { ConfirmDialogProps } from './patterns/ConfirmDialog'\n\nexport { Chip, ChipGroup } from './patterns/Chip'\nexport type { ChipProps, ChipGroupProps } from './patterns/Chip'\n\nexport { OTPInput } from './patterns/OTPInput'\nexport type { OTPInputProps } from './patterns/OTPInput'\n\nexport { PasswordInput } from './patterns/PasswordInput'\nexport type { PasswordInputProps } from './patterns/PasswordInput'\n\nexport { AvatarGroup } from './patterns/AvatarGroup'\nexport type { AvatarGroupProps } from './patterns/AvatarGroup'\n\nexport { SwipeCards } from './patterns/SwipeCards'\nexport type { SwipeCardsProps, SwipeCardItem } from './patterns/SwipeCards'\n\nexport { GlassCard } from './patterns/GlassCard'\nexport type { GlassCardProps } from './patterns/GlassCard'\n\nexport { DataTable, StatusBadge } from './patterns/DataTable'\nexport type { DataTableProps, DataTableColumn } from './patterns/DataTable'\n\nexport { DatePicker } from './patterns/DatePicker'\nexport type { DatePickerProps } from './patterns/DatePicker'\n\nexport { EventCard } from './patterns/EventCard'\nexport type { EventCardProps } from './patterns/EventCard'\n\nexport { UserPreferences } from './patterns/UserPreferences'\nexport type { UserPreferencesProps, PreferenceSection, PreferenceItem } from './patterns/UserPreferences'\n\nexport { OtfSelect } from './patterns/OtfSelect'\nexport type { OtfSelectProps, OtfSelectItem } from './patterns/OtfSelect'\n\nexport { OtfDialog } from './patterns/OtfDialog'\nexport type { OtfDialogProps } from './patterns/OtfDialog'\n\nexport { OtfPopover } from './patterns/OtfPopover'\nexport type { OtfPopoverProps } from './patterns/OtfPopover'\n\n// ─── Lucide Icons re-export ──────────────────────────────────────────────────\n// Re-exported so consumers only need: import { Heart, Star } from '@otfdashkit/ui-native'\nexport * from '@tamagui/lucide-icons'\n\nexport { ImmersiveMediaScreen } from './patterns/ImmersiveMediaScreen'\nexport type { ImmersiveMediaScreenProps, ImmersiveMediaAction } from './patterns/ImmersiveMediaScreen'\n\nexport { FinanceDashboard } from './patterns/FinanceDashboard'\nexport type {\n FinanceDashboardProps,\n FinanceMetric,\n FinanceQuickAction,\n FinanceDashboardSection,\n} from './patterns/FinanceDashboard'\n\n// ─── Mobile flow primitives (MultiStep, Selectable, Expandable, etc.) ──────\n\nexport { MultiStep, Step, useMultiStep } from './patterns/MultiStep'\nexport type {\n MultiStepProps,\n StepProps,\n MultiStepTransition,\n MultiStepProgress,\n UseMultiStep,\n} from './patterns/MultiStep'\n\nexport { Selectable, SelectableGroup } from './patterns/Selectable'\nexport type {\n SelectableProps,\n SelectableGroupProps,\n SelectableOption,\n} from './patterns/Selectable'\n\nexport { AnimatedView } from './patterns/AnimatedView'\nexport type {\n AnimatedViewProps,\n AnimationPreset,\n AnimatedViewTrigger,\n} from './patterns/AnimatedView'\n\nexport { Expandable } from './patterns/Expandable'\nexport type { ExpandableProps } from './patterns/Expandable'\n\nexport { WheelPicker } from './patterns/WheelPicker'\nexport type { WheelPickerProps, WheelPickerOption } from './patterns/WheelPicker'\n\nexport { RulerScrubber } from './patterns/RulerScrubber'\nexport type { RulerScrubberProps } from './patterns/RulerScrubber'\n\nexport { CardScroller } from './patterns/CardScroller'\nexport type { CardScrollerProps } from './patterns/CardScroller'\n\n// ─── Hooks ──────────────────────────────────────────────────────────────────\n\nexport { useCollapsibleHeader } from './hooks/useCollapsibleHeader'\nexport type {\n UseCollapsibleHeaderOptions,\n UseCollapsibleHeaderReturn,\n} from './hooks/useCollapsibleHeader'\n","/**\n * Maps the 16 Otf platform design themes (from auto-engineer src/types/color-theme.ts)\n * to Tamagui-compatible theme palettes via createThemes.\n *\n * Usage:\n * import { createOtfThemes, OTF_DESIGN_THEMES } from '@otfdashkit/ui-native'\n * const themes = createOtfThemes('ocean-teal')\n * const config = createTamagui({ ...tamaguiDefaultConfig, themes })\n */\n\nexport type OtfDesignThemeId =\n | 'mono'\n | 'ocean-teal'\n | 'warm-amber'\n | 'rose-coral'\n | 'lavender'\n | 'glacier'\n | 'forest'\n | 'obsidian'\n | 'solar'\n | 'orchid'\n | 'indigo'\n | 'cosmic-night'\n | 'soft-pop'\n | 'neo-brutalism'\n | 'vintage-paper'\n | 'modern-minimal'\n | 'bubblegum'\n\nexport interface OtfColorPalette {\n primary: string\n primary_foreground: string\n secondary: string\n secondary_foreground: string\n accent: string\n background: string\n dark_mode: string\n}\n\nexport interface OtfDesignTheme {\n id: OtfDesignThemeId\n name: string\n description: string\n palette: OtfColorPalette\n}\n\nexport const OTF_DESIGN_THEMES: Record<OtfDesignThemeId, OtfDesignTheme> = {\n 'mono': {\n id: 'mono', name: 'Mono', description: 'Black/white neutral',\n palette: { primary: '#18181B', primary_foreground: '#FAFAFA', secondary: '#F4F4F5', secondary_foreground: '#27272A', accent: '#3F3F46', background: '#FFFFFF', dark_mode: '#09090B' },\n },\n 'ocean-teal': {\n id: 'ocean-teal', name: 'Ocean Teal', description: 'SaaS, fintech, healthcare',\n palette: { primary: '#0D9488', primary_foreground: '#FFFFFF', secondary: '#F0FDFA', secondary_foreground: '#134E4A', accent: '#2DD4BF', background: '#FFFFFF', dark_mode: '#042F2E' },\n },\n 'warm-amber': {\n id: 'warm-amber', name: 'Warm Amber', description: 'E-commerce, food, hospitality',\n palette: { primary: '#D97706', primary_foreground: '#FFFFFF', secondary: '#FFFBEB', secondary_foreground: '#78350F', accent: '#FBBF24', background: '#FFFEF7', dark_mode: '#451A03' },\n },\n 'rose-coral': {\n id: 'rose-coral', name: 'Rose Coral', description: 'Lifestyle, beauty, fashion',\n palette: { primary: '#E11D48', primary_foreground: '#FFFFFF', secondary: '#FFF1F2', secondary_foreground: '#881337', accent: '#FB7185', background: '#FFFAFA', dark_mode: '#4C0519' },\n },\n 'lavender': {\n id: 'lavender', name: 'Lavender', description: 'Creative, wellness, meditation',\n palette: { primary: '#7C3AED', primary_foreground: '#FFFFFF', secondary: '#F5F3FF', secondary_foreground: '#4C1D95', accent: '#A78BFA', background: '#FEFEFF', dark_mode: '#2E1065' },\n },\n 'glacier': {\n id: 'glacier', name: 'Glacier', description: 'Professional, corporate, analytics',\n palette: { primary: '#0EA5E9', primary_foreground: '#FFFFFF', secondary: '#F0F9FF', secondary_foreground: '#0C4A6E', accent: '#38BDF8', background: '#FFFFFF', dark_mode: '#082F49' },\n },\n 'forest': {\n id: 'forest', name: 'Forest', description: 'Sustainability, nature, outdoor',\n palette: { primary: '#16A34A', primary_foreground: '#FFFFFF', secondary: '#F0FDF4', secondary_foreground: '#14532D', accent: '#4ADE80', background: '#FEFFFE', dark_mode: '#052E16' },\n },\n 'obsidian': {\n id: 'obsidian', name: 'Obsidian', description: 'Developer tools, gaming, tech',\n palette: { primary: '#475569', primary_foreground: '#FFFFFF', secondary: '#F1F5F9', secondary_foreground: '#1E293B', accent: '#64748B', background: '#FFFFFF', dark_mode: '#0F172A' },\n },\n 'solar': {\n id: 'solar', name: 'Solar', description: 'Energy, optimistic, kid-friendly',\n palette: { primary: '#CA8A04', primary_foreground: '#FFFFFF', secondary: '#FEFCE8', secondary_foreground: '#713F12', accent: '#FACC15', background: '#FFFEF5', dark_mode: '#422006' },\n },\n 'orchid': {\n id: 'orchid', name: 'Orchid', description: 'Beauty, fashion, luxury',\n palette: { primary: '#C026D3', primary_foreground: '#FFFFFF', secondary: '#FDF4FF', secondary_foreground: '#701A75', accent: '#E879F9', background: '#FFFEFF', dark_mode: '#4A044E' },\n },\n 'indigo': {\n id: 'indigo', name: 'Indigo', description: 'Enterprise, fintech, trust',\n palette: { primary: '#4F46E5', primary_foreground: '#FFFFFF', secondary: '#EEF2FF', secondary_foreground: '#312E81', accent: '#818CF8', background: '#FEFEFF', dark_mode: '#1E1B4B' },\n },\n 'cosmic-night': {\n id: 'cosmic-night', name: 'Cosmic Night', description: 'Dark mode, futuristic, gaming',\n palette: { primary: '#6366F1', primary_foreground: '#FFFFFF', secondary: '#1E1B4B', secondary_foreground: '#E0E7FF', accent: '#A855F7', background: '#0F0D1A', dark_mode: '#030014' },\n },\n 'soft-pop': {\n id: 'soft-pop', name: 'Soft Pop', description: 'Playful, modern, creative',\n palette: { primary: '#14B8A6', primary_foreground: '#FFFFFF', secondary: '#FDF2F8', secondary_foreground: '#134E4A', accent: '#F472B6', background: '#FFFBFE', dark_mode: '#0D1117' },\n },\n 'neo-brutalism': {\n id: 'neo-brutalism', name: 'Neo Brutalism', description: 'Bold, striking, artistic',\n palette: { primary: '#FF6B35', primary_foreground: '#000000', secondary: '#FFE66D', secondary_foreground: '#1A1A1A', accent: '#FF3366', background: '#FFFEF0', dark_mode: '#1A1A1A' },\n },\n 'vintage-paper': {\n id: 'vintage-paper', name: 'Vintage Paper', description: 'Classic, warm, nostalgic',\n palette: { primary: '#B45309', primary_foreground: '#FFFFFF', secondary: '#FEF3C7', secondary_foreground: '#78350F', accent: '#92400E', background: '#FFFDF7', dark_mode: '#292524' },\n },\n 'modern-minimal': {\n id: 'modern-minimal', name: 'Modern Minimal', description: 'Clean, professional, corporate',\n palette: { primary: '#2563EB', primary_foreground: '#FFFFFF', secondary: '#F8FAFC', secondary_foreground: '#1E40AF', accent: '#3B82F6', background: '#FFFFFF', dark_mode: '#0F172A' },\n },\n 'bubblegum': {\n id: 'bubblegum', name: 'Bubblegum', description: 'Fun, feminine, youthful',\n palette: { primary: '#EC4899', primary_foreground: '#FFFFFF', secondary: '#FDF4FF', secondary_foreground: '#9D174D', accent: '#F472B6', background: '#FFFBFF', dark_mode: '#500724' },\n },\n}\n\nfunction hexToRgb(hex: string): [number, number, number] {\n const h = hex.replace('#', '')\n return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)]\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n return '#' + [r, g, b].map(v => Math.round(Math.max(0, Math.min(255, v))).toString(16).padStart(2, '0')).join('')\n}\n\nfunction mixColors(c1: string, c2: string, t: number): string {\n const [r1, g1, b1] = hexToRgb(c1)\n const [r2, g2, b2] = hexToRgb(c2)\n return rgbToHex(r1 + (r2 - r1) * t, g1 + (g2 - g1) * t, b1 + (b2 - b1) * t)\n}\n\n/**\n * Generates a 12-step palette array from a ColorPalette.\n * Light: background(1) → secondary(2-4) → accent(5-7) → primary(8-10) → secondary_foreground(11) → dark(12)\n * Dark: dark_mode(1) → secondary_foreground tinted(2-4) → accent darkened(5-7) → primary(8-10) → secondary lightened(11) → foreground(12)\n */\nfunction generateLightPalette(p: OtfColorPalette): string[] {\n return [\n p.background,\n p.secondary,\n mixColors(p.secondary, p.accent, 0.15),\n mixColors(p.secondary, p.accent, 0.3),\n mixColors(p.accent, p.primary, 0.1),\n mixColors(p.accent, p.primary, 0.3),\n mixColors(p.accent, p.primary, 0.5),\n mixColors(p.accent, p.primary, 0.7),\n p.primary,\n mixColors(p.primary, p.secondary_foreground, 0.3),\n p.secondary_foreground,\n p.dark_mode,\n ]\n}\n\nfunction generateDarkPalette(p: OtfColorPalette): string[] {\n return [\n p.dark_mode,\n mixColors(p.dark_mode, p.secondary_foreground, 0.15),\n mixColors(p.dark_mode, p.secondary_foreground, 0.25),\n mixColors(p.dark_mode, p.secondary_foreground, 0.35),\n mixColors(p.secondary_foreground, p.accent, 0.2),\n mixColors(p.secondary_foreground, p.accent, 0.4),\n mixColors(p.secondary_foreground, p.accent, 0.6),\n mixColors(p.accent, p.primary, 0.5),\n p.primary,\n p.accent,\n mixColors(p.accent, p.primary_foreground, 0.5),\n p.primary_foreground,\n ]\n}\n\n/**\n * Generates Tamagui-compatible theme config for createThemes from a platform design theme.\n *\n * Usage with createThemes:\n * ```ts\n * import { createThemes } from '@tamagui/theme-builder'\n * import { getOtfThemePalettes } from '@otfdashkit/ui-native'\n *\n * const palettes = getOtfThemePalettes('ocean-teal')\n * const themes = createThemes({\n * base: { palette: palettes.base },\n * accent: { palette: palettes.accent },\n * })\n * ```\n */\nexport function getOtfThemePalettes(themeId: OtfDesignThemeId) {\n const theme = OTF_DESIGN_THEMES[themeId]\n if (!theme) throw new Error(`Unknown theme: ${themeId}`)\n const p = theme.palette\n\n return {\n base: {\n light: generateLightPalette(p),\n dark: generateDarkPalette(p),\n },\n accent: {\n light: generateDarkPalette(p),\n dark: generateLightPalette(p),\n },\n }\n}\n\n/**\n * All available design theme IDs for enumeration.\n */\nexport const OTF_DESIGN_THEME_IDS = Object.keys(OTF_DESIGN_THEMES) as OtfDesignThemeId[]\n\n/**\n * Get theme metadata (name, description) for UI pickers.\n */\nexport function getOtfDesignTheme(themeId: OtfDesignThemeId): OtfDesignTheme | undefined {\n return OTF_DESIGN_THEMES[themeId]\n}\n","import { Button as TamaguiButton, styled, type GetProps } from 'tamagui'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const Button: any = styled(TamaguiButton, {\n borderWidth: 0,\n cursor: 'pointer',\n focusVisibleStyle: {\n outlineWidth: 2,\n outlineStyle: 'solid',\n outlineColor: '$color8',\n },\n\n variants: {\n variant: {\n default: {\n backgroundColor: '$color3',\n hoverStyle: { backgroundColor: '$color4' },\n pressStyle: { backgroundColor: '$color2', opacity: 0.8 },\n },\n primary: {\n backgroundColor: '$color9',\n color: '$color1',\n hoverStyle: { backgroundColor: '$color10' },\n pressStyle: { backgroundColor: '$color8', opacity: 0.9 },\n },\n outlined: {\n backgroundColor: 'transparent',\n borderWidth: 2,\n borderColor: '$color6',\n hoverStyle: { borderColor: '$color8' },\n pressStyle: { borderColor: '$color4', opacity: 0.8 },\n },\n transparent: {\n backgroundColor: 'transparent',\n hoverStyle: { backgroundColor: '$color2' },\n pressStyle: { backgroundColor: '$color1', opacity: 0.8 },\n },\n floating: {\n backgroundColor: '$color4',\n shadowColor: '$shadow2',\n shadowRadius: 5,\n shadowOffset: { height: 2, width: 0 },\n hoverStyle: { backgroundColor: '$color5' },\n pressStyle: { backgroundColor: '$color3', opacity: 0.9 },\n },\n destructive: {\n backgroundColor: '$red9',\n color: '$color1',\n hoverStyle: { backgroundColor: '$red10' },\n pressStyle: { backgroundColor: '$red8', opacity: 0.9 },\n },\n },\n size: {\n sm: { height: '$3', paddingHorizontal: '$3', borderRadius: '$3' },\n md: { height: '$4', paddingHorizontal: '$4', borderRadius: '$4' },\n lg: { height: '$5', paddingHorizontal: '$5', borderRadius: '$5' },\n },\n fullWidth: {\n true: { width: '100%' },\n },\n } as const,\n\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n})\n\nexport type ButtonProps = GetProps<typeof Button>\n","import { SizableText, styled, type GetProps } from 'tamagui'\n\nexport const OtfText = styled(SizableText, {\n name: 'OtfText',\n\n variants: {\n variant: {\n display: { size: '$10', fontWeight: '800' },\n h1: { size: '$9', fontWeight: '700' },\n h2: { size: '$8', fontWeight: '700' },\n h3: { size: '$7', fontWeight: '600' },\n h4: { size: '$6', fontWeight: '600' },\n body: { size: '$5', fontWeight: '400' },\n bodySmall: { size: '$4', fontWeight: '400' },\n caption: { size: '$3', fontWeight: '400', color: '$color10' },\n small: { size: '$2', fontWeight: '400', color: '$color9' },\n },\n muted: {\n true: { color: '$color9' },\n },\n secondary: {\n true: { color: '$color10' },\n },\n center: {\n true: { textAlign: 'center' },\n },\n bold: {\n true: { fontWeight: '700' },\n },\n } as const,\n\n defaultVariants: {\n variant: 'body',\n },\n})\n\nexport type OtfTextProps = GetProps<typeof OtfText>\n","import { styled, View, GetProps, withStaticProperties } from 'tamagui'\n\nconst CardFrame = styled(View, {\n name: 'OtfCard',\n backgroundColor: '$color2',\n borderRadius: '$4',\n overflow: 'hidden',\n\n variants: {\n variant: {\n flat: {},\n elevated: {\n shadowColor: '$shadow2',\n shadowOffset: { width: 0, height: 2 },\n shadowRadius: 8,\n elevation: 3,\n },\n outlined: {\n borderWidth: 1,\n borderColor: '$color5',\n },\n },\n size: {\n sm: { borderRadius: '$3', padding: '$3' },\n md: { borderRadius: '$4', padding: '$4' },\n lg: { borderRadius: '$5', padding: '$5' },\n },\n pressable: {\n true: {\n pressStyle: { scale: 0.98, opacity: 0.9 },\n cursor: 'pointer',\n },\n },\n } as const,\n\n defaultVariants: {\n variant: 'flat',\n size: 'md',\n },\n})\n\nconst CardHeader = styled(View, { name: 'OtfCardHeader', paddingBottom: '$3' })\nconst CardContent = styled(View, { name: 'OtfCardContent' })\nconst CardFooter = styled(View, {\n name: 'OtfCardFooter',\n paddingTop: '$3',\n flexDirection: 'row',\n alignItems: 'center',\n gap: '$2',\n})\n\nexport type CardProps = GetProps<typeof CardFrame>\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const Card: any = withStaticProperties(CardFrame, {\n Header: CardHeader,\n Content: CardContent,\n Footer: CardFooter,\n})\n","import { Input as TamaguiInput, styled, View, SizableText, type GetProps } from 'tamagui'\n\nconst InputFrame = styled(View, {\n name: 'OtfInputFrame',\n gap: '$1.5',\n})\n\nconst InputLabel = styled(SizableText, {\n name: 'OtfInputLabel',\n size: '$4',\n fontWeight: '500',\n color: '$color11',\n})\n\nconst InputField = styled(TamaguiInput, {\n name: 'OtfInput',\n height: 50,\n size: '$5',\n borderWidth: 0.5,\n borderColor: '$color5',\n borderRadius: '$4',\n backgroundColor: '$color1',\n placeholderTextColor: '$color8',\n\n focusVisibleStyle: {\n outlineWidth: 3,\n outlineStyle: 'solid',\n outlineColor: '$background04',\n outlineOffset: 1,\n borderWidth: 0.5,\n borderColor: '$color7',\n },\n\n variants: {\n hasError: {\n true: {\n borderColor: '$red9',\n focusVisibleStyle: { borderColor: '$red9' },\n },\n },\n variant: {\n default: {},\n filled: {\n backgroundColor: '$color2',\n borderColor: 'transparent',\n focusVisibleStyle: { borderColor: '$color7' },\n },\n },\n } as const,\n\n defaultVariants: { variant: 'default' },\n})\n\nconst InputError = styled(SizableText, { name: 'OtfInputError', size: '$2', color: '$red10' })\nconst InputHint = styled(SizableText, { name: 'OtfInputHint', size: '$2', color: '$color9' })\n\nexport type InputProps = GetProps<typeof InputField> & {\n label?: string\n error?: string\n hint?: string\n}\n\nexport function Input({ label, error, hint, ...props }: InputProps) {\n return (\n <InputFrame>\n {label && <InputLabel>{label}</InputLabel>}\n <InputField hasError={!!error} {...props} />\n {error && <InputError>{error}</InputError>}\n {hint && !error && <InputHint>{hint}</InputHint>}\n </InputFrame>\n )\n}\n","import { memo } from 'react'\nimport { Circle, Image, SizableText } from 'tamagui'\n\ntype SimpleSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nconst simpleSizes: Record<SimpleSize, number> = {\n xs: 24,\n sm: 32,\n md: 40,\n lg: 48,\n xl: 64,\n}\n\nfunction getSize(size: number | SimpleSize): number {\n if (typeof size === 'number') return size\n return simpleSizes[size] ?? 40\n}\n\nexport type AvatarProps = {\n uri?: string\n name?: string\n size?: number | SimpleSize\n}\n\nexport const Avatar = memo(({ uri, name, size: sizeIn = 'md' }: AvatarProps) => {\n const size = getSize(sizeIn)\n\n return (\n <Circle\n size={size}\n overflow=\"hidden\"\n backgroundColor=\"$color4\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {uri ? (\n <Image\n source={{ uri }}\n width={size}\n height={size}\n objectFit=\"cover\"\n />\n ) : (\n <SizableText\n size=\"$3\"\n fontWeight=\"600\"\n color=\"$color11\"\n >\n {name ? name.split(' ').map(p => p[0]).join('').toUpperCase().slice(0, 2) : '?'}\n </SizableText>\n )}\n </Circle>\n )\n})\n","import { Separator, SizableText, XStack, styled } from 'tamagui'\nimport type { ReactNode } from 'react'\n\nexport const H1 = styled(SizableText, {\n name: 'OtfH1',\n role: 'heading',\n fontFamily: '$heading',\n size: '$10',\n fontWeight: '700',\n})\n\nexport const H2 = styled(SizableText, {\n name: 'OtfH2',\n role: 'heading',\n fontFamily: '$heading',\n size: '$9',\n fontWeight: '700',\n})\n\nexport const H3 = styled(SizableText, {\n name: 'OtfH3',\n role: 'heading',\n fontFamily: '$heading',\n size: '$8',\n fontWeight: '600',\n})\n\nexport const H4 = styled(SizableText, {\n name: 'OtfH4',\n role: 'heading',\n fontFamily: '$heading',\n size: '$6',\n fontWeight: '600',\n})\n\nexport const H5 = styled(SizableText, {\n name: 'OtfH5',\n role: 'heading',\n fontFamily: '$heading',\n size: '$5',\n fontWeight: '500',\n})\n\nexport const H6 = styled(SizableText, {\n name: 'OtfH6',\n role: 'heading',\n fontFamily: '$heading',\n size: '$4',\n fontWeight: '500',\n})\n\nexport const SubHeading = styled(SizableText, {\n name: 'OtfSubHeading',\n size: '$5',\n color: '$color10',\n fontWeight: '300',\n $lg: { size: '$6' },\n})\n\nexport function SepHeading({ children }: { children: ReactNode }) {\n return (\n <XStack marginTop=\"$6\" marginBottom=\"$4\" alignItems=\"center\" gap=\"$6\">\n <H3 size=\"$4\" color=\"$color10\">\n {children}\n </H3>\n <Separator opacity={0.5} />\n </XStack>\n )\n}\n","import { styled, YStack } from 'tamagui'\n\nexport const PageContainer = styled(YStack, {\n name: 'OtfPageContainer',\n position: 'relative',\n marginHorizontal: 'auto',\n flex: 1,\n flexBasis: 'auto',\n paddingHorizontal: '$4',\n width: '100%',\n minWidth: 380,\n $md: { maxWidth: 760 },\n $lg: { maxWidth: 860 },\n $xl: { maxWidth: 1140 },\n})\n\nexport const PageMainContainer = styled(PageContainer, {\n name: 'OtfPageMainContainer',\n role: 'main',\n})\n","import { useState, useEffect, type ReactNode } from 'react'\nimport { AlertDialog, Button, XStack, YStack } from 'tamagui'\n\ntype DialogState = {\n type: 'error' | 'confirm' | null\n title: string\n description: string\n resolve?: (value: boolean) => void\n}\n\nlet globalShowDialog: ((\n state: Omit<DialogState, 'resolve'> & { resolve?: (value: boolean) => void }\n) => void) | null = null\n\nexport function DialogProvider({ children }: { children: ReactNode }) {\n const [state, setState] = useState<DialogState>({\n type: null,\n title: '',\n description: '',\n })\n\n useEffect(() => {\n globalShowDialog = (newState) =>\n setState({ ...newState, resolve: newState.resolve } as DialogState)\n return () => {\n globalShowDialog = null\n }\n }, [])\n\n const handleClose = (confirmed: boolean) => {\n if (!state.resolve) return\n const resolve = state.resolve\n setState({ type: null, title: '', description: '' })\n resolve(confirmed)\n }\n\n return (\n <>\n {children}\n <AlertDialog\n open={state.type !== null}\n onOpenChange={(open) => {\n if (!open && state.type !== null) handleClose(false)\n }}\n >\n <AlertDialog.Portal>\n <AlertDialog.Overlay\n key=\"overlay\"\n opacity={0.5}\n enterStyle={{ opacity: 0 }}\n exitStyle={{ opacity: 0 }}\n />\n <AlertDialog.Content\n bordered\n elevate\n key=\"content\"\n enterStyle={{ x: 0, y: -20, opacity: 0, scale: 0.9 }}\n exitStyle={{ x: 0, y: 10, opacity: 0, scale: 0.95 }}\n x={0}\n scale={1}\n opacity={1}\n y={0}\n width=\"90%\"\n maxWidth={400}\n >\n <YStack gap=\"$4\">\n <AlertDialog.Title size=\"$6\">{state.title}</AlertDialog.Title>\n <AlertDialog.Description size=\"$3\" color=\"$color11\">\n {state.description}\n </AlertDialog.Description>\n <XStack gap=\"$3\" justifyContent=\"flex-end\">\n {state.type === 'confirm' ? (\n <>\n <Button onPress={() => handleClose(false)}>Cancel</Button>\n <Button theme=\"blue\" onPress={() => handleClose(true)}>\n Confirm\n </Button>\n </>\n ) : (\n <Button theme=\"blue\" onPress={() => handleClose(false)}>\n OK\n </Button>\n )}\n </XStack>\n </YStack>\n </AlertDialog.Content>\n </AlertDialog.Portal>\n </AlertDialog>\n </>\n )\n}\n\nexport const showError = (error: unknown, title = 'Error') => {\n let description = 'An unexpected error occurred'\n if (error instanceof Error) description = error.message\n else if (typeof error === 'string') description = error\n else if (error && typeof error === 'object' && 'message' in error)\n description = String(error.message)\n\n if (globalShowDialog) globalShowDialog({ type: 'error', title, description })\n else console.error(`${title}: ${description}`)\n}\n\nexport const dialogConfirm = async (props: {\n title?: string\n description?: string\n}): Promise<boolean> => {\n const { title = 'Confirm', description = 'Are you sure?' } = props\n if (!globalShowDialog) {\n console.error('DialogProvider not mounted')\n return false\n }\n return new Promise<boolean>((resolve) => {\n globalShowDialog!({ type: 'confirm', title, description, resolve })\n })\n}\n","import { styled, View } from 'tamagui'\n\n// Tamagui's View handles onPress natively on both web and native. Adding\n// `cursor: 'pointer'` ensures web treats it as an interactive element so\n// onClick fires on the wrapping element regardless of nested children.\nexport const Pressable = styled(View, {\n name: 'OtfPressable',\n hitSlop: 10,\n cursor: 'pointer',\n pressStyle: { opacity: 0.5 },\n})\n","// Re-export Tamagui's Image directly (was previously wrapped in styled()\n// with `name: 'OtfImage'` — but on RN-Web with Expo SDK 54 + Tamagui 1.144\n// that wrapper produced rendered <img> elements with `width: 0; opacity: 0`,\n// even though the underlying images loaded successfully (`naturalW: 400`).\n// Verified May 2026 on the showcase Image route — images were invisible.\n//\n// Dropping the styled wrapper is harmless: nothing in the SDK relied on\n// the `OtfImage` style key (no theme variants registered), and consumers\n// pass width/height/borderRadius as direct props which Tamagui's Image\n// supports natively. Reinstate styled() only if a theme variant is\n// genuinely needed; if so, set `width: 'auto', opacity: 1` as base styles.\nexport { Image } from 'tamagui'\n","import { styled, SizableText, View } from 'tamagui'\nimport type { ReactNode } from 'react'\n\nconst BadgeFrame = styled(View, {\n name: 'OtfBadge',\n paddingHorizontal: '$2',\n paddingVertical: '$1',\n borderRadius: '$10',\n backgroundColor: '$color3',\n alignSelf: 'flex-start',\n variants: {\n variant: {\n default: { backgroundColor: '$color3' },\n success: { backgroundColor: '$green3' },\n warning: { backgroundColor: '$yellow3' },\n error: { backgroundColor: '$red3' },\n info: { backgroundColor: '$blue3' },\n },\n } as const,\n defaultVariants: { variant: 'default' },\n})\n\nconst BadgeText = styled(SizableText, {\n name: 'OtfBadgeText',\n size: '$2',\n fontWeight: '600',\n color: '$color11',\n})\n\nexport type BadgeProps = {\n children: ReactNode\n variant?: 'default' | 'success' | 'warning' | 'error' | 'info'\n}\n\nexport function Badge({ children, variant = 'default' }: BadgeProps) {\n return (\n <BadgeFrame variant={variant}>\n <BadgeText>{children}</BadgeText>\n </BadgeFrame>\n )\n}\n","import { SizableText } from 'tamagui'\n\nexport const ICONS = {\n home: '\\u2302', search: '\\u2315', back: '\\u2039', forward: '\\u203A',\n close: '\\u2715', menu: '\\u2630', more: '\\u22EF', plus: '+',\n minus: '\\u2212', check: '\\u2713', star: '\\u2605', starOutline: '\\u2606',\n heart: '\\u2665', heartOutline: '\\u2661', share: '\\u2934', edit: '\\u270E',\n trash: '\\u232B', copy: '\\u2398', chat: '\\u{1F4AC}', mail: '\\u2709',\n bell: '\\u{1F514}', bellOff: '\\u{1F515}', send: '\\u27A4', play: '\\u25B6',\n pause: '\\u23F8', camera: '\\u{1F4F7}', image: '\\u{1F5BC}', info: '\\u2139',\n warning: '\\u26A0', error: '\\u2715', success: '\\u2713', loading: '\\u27F3',\n user: '\\u{1F464}', users: '\\u{1F465}', settings: '\\u2699',\n lock: '\\u{1F512}', unlock: '\\u{1F513}',\n arrowUp: '\\u2191', arrowDown: '\\u2193', arrowLeft: '\\u2190', arrowRight: '\\u2192',\n chevronUp: '\\u2303', chevronDown: '\\u2304', chevronLeft: '\\u2039', chevronRight: '\\u203A',\n} as const\n\nexport type IconName = keyof typeof ICONS\nexport type IconProps = { name: IconName; size?: number; color?: string }\n\nexport function Icon({ name, size = 20, color = '$color12' }: IconProps) {\n return (\n <SizableText fontSize={size} lineHeight={size} color={color} textAlign=\"center\" width={size} height={size}>\n {ICONS[name]}\n </SizableText>\n )\n}\n","import { type ReactNode, useState } from 'react'\nimport { Separator, SizableText, XStack, YStack } from 'tamagui'\n\nexport type OtfAccordionItem = { id: string; title: string; content: ReactNode }\nexport type OtfAccordionProps = {\n items: OtfAccordionItem[]\n defaultOpen?: string[]\n allowMultiple?: boolean\n}\n\nexport function OtfAccordion({ items, defaultOpen, allowMultiple = false }: OtfAccordionProps) {\n const [openIds, setOpenIds] = useState<string[]>(defaultOpen ?? [])\n const toggle = (id: string) => {\n setOpenIds(prev => {\n if (prev.includes(id)) return prev.filter(i => i !== id)\n return allowMultiple ? [...prev, id] : [id]\n })\n }\n return (\n <YStack>\n {items.map((item, index) => {\n const isOpen = openIds.includes(item.id)\n return (\n <YStack key={item.id}>\n {index > 0 && <Separator borderColor=\"$borderColor\" />}\n <XStack\n paddingVertical=\"$3\" paddingHorizontal=\"$2\"\n justifyContent=\"space-between\" alignItems=\"center\"\n pressStyle={{ opacity: 0.7 }} onPress={() => toggle(item.id)} cursor=\"pointer\"\n >\n <SizableText size=\"$4\" fontWeight=\"600\">{item.title}</SizableText>\n <SizableText size=\"$3\" color=\"$color10\">{isOpen ? '\\u2303' : '\\u2304'}</SizableText>\n </XStack>\n {isOpen && <YStack paddingHorizontal=\"$2\" paddingBottom=\"$3\">{item.content}</YStack>}\n </YStack>\n )\n })}\n </YStack>\n )\n}\n","import { useState } from 'react'\nimport { ScrollView } from 'react-native'\nimport { SizableText, XStack, YStack } from 'tamagui'\n\nexport type OtfTabItem = { key: string; label: string }\nexport type OtfTabsProps = {\n tabs: OtfTabItem[]\n activeTab?: string\n onTabChange?: (key: string) => void\n variant?: 'underline' | 'pill'\n}\n\nexport function OtfTabs({ tabs, activeTab, onTabChange, variant = 'underline' }: OtfTabsProps) {\n const [internalActive, setInternalActive] = useState(tabs[0]?.key ?? '')\n const current = activeTab ?? internalActive\n const handlePress = (key: string) => {\n if (!activeTab) setInternalActive(key)\n onTabChange?.(key)\n }\n return (\n <YStack>\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <XStack gap=\"$2\" paddingHorizontal=\"$2\" paddingBottom=\"$2\">\n {tabs.map(tab => {\n const isActive = tab.key === current\n return (\n <YStack\n key={tab.key}\n paddingVertical=\"$2\" paddingHorizontal=\"$3\"\n borderRadius={variant === 'pill' ? '$4' : '$0'}\n backgroundColor={variant === 'pill' && isActive ? '$color9' : 'transparent'}\n borderBottomWidth={variant === 'underline' ? 2 : 0}\n borderBottomColor={variant === 'underline' && isActive ? '$color9' : 'transparent'}\n pressStyle={{ opacity: 0.7 }} onPress={() => handlePress(tab.key)} cursor=\"pointer\"\n >\n <SizableText\n size=\"$3\" fontWeight={isActive ? '600' : '400'}\n color={variant === 'pill' && isActive ? '$color1' : isActive ? '$color12' : '$color10'}\n >\n {tab.label}\n </SizableText>\n </YStack>\n )\n })}\n </XStack>\n </ScrollView>\n </YStack>\n )\n}\n","import { SizableText, XStack } from 'tamagui'\n\nexport type OtfToggleOption = { value: string; label: string }\nexport type OtfToggleGroupProps = {\n options: OtfToggleOption[]\n value: string\n onValueChange: (value: string) => void\n size?: 'sm' | 'md' | 'lg'\n}\n\nconst sizeMap = { sm: '$2' as const, md: '$3' as const, lg: '$4' as const }\n\nexport function OtfToggleGroup({ options, value, onValueChange, size = 'md' }: OtfToggleGroupProps) {\n const textSize = sizeMap[size]\n return (\n <XStack borderRadius=\"$4\" overflow=\"hidden\" backgroundColor=\"$color2\">\n {options.map((option, index) => {\n const isActive = option.value === value\n return (\n <XStack\n key={option.value} flex={1} justifyContent=\"center\" alignItems=\"center\"\n paddingVertical=\"$2\" paddingHorizontal=\"$3\"\n backgroundColor={isActive ? '$color9' : '$color2'}\n borderLeftWidth={index > 0 ? 1 : 0}\n borderLeftColor={isActive ? '$color9' : '$color4'}\n pressStyle={{ opacity: 0.7 }} onPress={() => onValueChange(option.value)} cursor=\"pointer\"\n >\n <SizableText size={textSize} fontWeight={isActive ? '600' : '400'} color={isActive ? '$color1' : '$color11'}>\n {option.label}\n </SizableText>\n </XStack>\n )\n })}\n </XStack>\n )\n}\n","import { useState, useCallback, useEffect, createContext, useContext, type ReactNode } from 'react'\nimport { SizableText, XStack, YStack } from 'tamagui'\n\nexport type OtfToastVariant = 'default' | 'success' | 'error' | 'warning'\nexport type OtfToastData = {\n id: string; title: string; message?: string\n variant?: OtfToastVariant; duration?: number\n}\nexport type OtfToastOptions = { message?: string; variant?: OtfToastVariant; duration?: number }\nexport type OtfToastContextType = {\n show: (title: string, options?: OtfToastOptions) => void\n}\n\nconst ToastContext = createContext<OtfToastContextType | null>(null)\n\nconst variantStyles: Record<OtfToastVariant, { bg: string; border: string; icon: string }> = {\n default: { bg: '$color3', border: '$color6', icon: 'ℹ' },\n success: { bg: '$green2', border: '$green7', icon: '✓' },\n error: { bg: '$red2', border: '$red7', icon: '✕' },\n warning: { bg: '$yellow2', border: '$yellow7', icon: '!' },\n}\n\nlet globalToastShow: OtfToastContextType['show'] | null = null\n\nexport const toast = (title: string, options?: OtfToastOptions | OtfToastVariant) => {\n const opts: OtfToastOptions | undefined = typeof options === 'string' ? { variant: options } : options\n if (globalToastShow) globalToastShow(title, opts)\n else console.warn('OtfToastProvider not mounted')\n}\n\nexport function OtfToastProvider({ children }: { children: ReactNode }) {\n const [toasts, setToasts] = useState<OtfToastData[]>([])\n\n const show = useCallback((title: string, options?: OtfToastOptions) => {\n const id = Math.random().toString(36).slice(2, 9)\n const entry: OtfToastData = {\n id, title,\n message: options?.message,\n variant: options?.variant ?? 'default',\n duration: options?.duration ?? 3000,\n }\n setToasts(prev => [...prev, entry])\n setTimeout(() => setToasts(prev => prev.filter(t => t.id !== id)), entry.duration)\n }, [])\n\n useEffect(() => { globalToastShow = show; return () => { globalToastShow = null } }, [show])\n\n const dismiss = useCallback((id: string) => {\n setToasts(prev => prev.filter(t => t.id !== id))\n }, [])\n\n return (\n <ToastContext.Provider value={{ show }}>\n {children}\n <YStack\n position=\"absolute\" top={50} left={0} right={0}\n alignItems=\"center\" gap=\"$2\" pointerEvents=\"box-none\" zIndex={100000}\n paddingHorizontal=\"$4\"\n >\n {toasts.map(t => {\n const style = variantStyles[t.variant ?? 'default']\n return (\n <XStack\n key={t.id}\n width=\"100%\"\n maxWidth={400}\n backgroundColor={style.bg}\n borderWidth={1}\n borderColor={style.border}\n borderRadius=\"$4\"\n paddingHorizontal=\"$4\"\n paddingVertical=\"$3\"\n gap=\"$3\"\n alignItems=\"flex-start\"\n enterStyle={{ opacity: 0, y: -20, scale: 0.95 }}\n exitStyle={{ opacity: 0, y: -20, scale: 0.95 }}\n opacity={1}\n y={0}\n scale={1}\n animation=\"quick\"\n pointerEvents=\"auto\"\n elevation={4}\n >\n <SizableText size=\"$4\" fontWeight=\"700\" marginTop=\"$0.5\">{style.icon}</SizableText>\n <YStack flex={1} gap=\"$1\">\n <SizableText size=\"$4\" fontWeight=\"600\" color=\"$color12\">{t.title}</SizableText>\n {t.message && (\n <SizableText size=\"$3\" color=\"$color10\">{t.message}</SizableText>\n )}\n </YStack>\n <SizableText\n size=\"$3\" color=\"$color8\" fontWeight=\"600\"\n pressStyle={{ opacity: 0.5 }}\n onPress={() => dismiss(t.id)}\n cursor=\"pointer\"\n marginTop=\"$0.5\"\n >\n ✕\n </SizableText>\n </XStack>\n )\n })}\n </YStack>\n </ToastContext.Provider>\n )\n}\n\nexport function useOtfToast() {\n const ctx = useContext(ToastContext)\n if (!ctx) throw new Error('useOtfToast must be used within OtfToastProvider')\n return ctx\n}\n","import { type ReactNode } from 'react'\nimport { SizableText, YStack } from 'tamagui'\n\nexport type FormFieldProps = {\n label?: string; error?: string; helperText?: string; required?: boolean; children: ReactNode\n}\n\nexport function FormField({ label, error, helperText, required, children }: FormFieldProps) {\n return (\n <YStack gap=\"$1.5\">\n {label && (\n <SizableText size=\"$3\" fontWeight=\"600\" color=\"$color11\">\n {label}{required && <SizableText color=\"$red9\"> *</SizableText>}\n </SizableText>\n )}\n {children}\n {helperText && !error && <SizableText size=\"$2\" color=\"$color9\">{helperText}</SizableText>}\n {error && <SizableText size=\"$2\" color=\"$red9\">{error}</SizableText>}\n </YStack>\n )\n}\n","import { type ReactNode } from 'react'\nimport { Popover, SizableText } from 'tamagui'\n\nexport type TooltipProps = { content: string; children: ReactNode; side?: 'top' | 'bottom' | 'left' | 'right' }\n\nexport function OtfTooltip({ content, children, side = 'top' }: TooltipProps) {\n return (\n <Popover size=\"$2\" placement={side}>\n <Popover.Trigger asChild>{children}</Popover.Trigger>\n <Popover.Content\n backgroundColor=\"$color11\" borderRadius=\"$2\"\n paddingHorizontal=\"$2.5\" paddingVertical=\"$1.5\" elevate\n enterStyle={{ opacity: 0, y: side === 'bottom' ? -4 : 4 }}\n exitStyle={{ opacity: 0, y: side === 'bottom' ? -4 : 4 }}\n opacity={1} y={0} animation=\"quick\"\n >\n <Popover.Arrow backgroundColor=\"$color11\" size=\"$1\" />\n <SizableText size=\"$2\" color=\"$color1\">{content}</SizableText>\n </Popover.Content>\n </Popover>\n )\n}\n","import Svg, { Path, Rect } from 'react-native-svg'\n\nexport function GoogleLogo({ size = 20 }: { size?: number }) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\">\n <Path fill=\"#4285F4\" d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\" />\n <Path fill=\"#34A853\" d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\" />\n <Path fill=\"#FBBC05\" d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l3.66-2.84z\" />\n <Path fill=\"#EA4335\" d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" />\n </Svg>\n )\n}\n\nexport function AppleLogo({ size = 20, color = '#000' }: { size?: number; color?: string }) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\">\n <Path fill={color} d=\"M17.05 20.28c-.98.95-2.05.88-3.08.4-1.09-.5-2.08-.48-3.24 0-1.44.62-2.2.44-3.06-.4C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z\" />\n </Svg>\n )\n}\n\nexport function GitHubLogo({ size = 20, color = '#fff' }: { size?: number; color?: string }) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 98 96\">\n <Path fillRule=\"evenodd\" clipRule=\"evenodd\" fill={color} d=\"M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z\" />\n </Svg>\n )\n}\n\nexport function MicrosoftLogo({ size = 20 }: { size?: number }) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 21 21\">\n <Rect width=\"10\" height=\"10\" fill=\"#F25022\" />\n <Rect x=\"11\" width=\"10\" height=\"10\" fill=\"#7FBA00\" />\n <Rect y=\"11\" width=\"10\" height=\"10\" fill=\"#00A4EF\" />\n <Rect x=\"11\" y=\"11\" width=\"10\" height=\"10\" fill=\"#FFB900\" />\n </Svg>\n )\n}\n","import { SizableText, YStack } from 'tamagui'\nimport type { ReactNode } from 'react'\n\nexport type StepPageProps = {\n title: string\n description?: string\n children: ReactNode\n bottom?: ReactNode\n}\n\nexport function StepPageLayout({ title, description, children, bottom }: StepPageProps) {\n return (\n <YStack flex={1} padding=\"$4\" maxWidth={500} marginHorizontal=\"auto\" width=\"100%\">\n <YStack gap=\"$5\">\n <YStack gap=\"$2\">\n <SizableText size=\"$8\" fontWeight=\"700\">{title}</SizableText>\n {description && (\n <SizableText size=\"$5\" fontWeight=\"400\" color=\"$color10\">{description}</SizableText>\n )}\n </YStack>\n </YStack>\n <YStack paddingTop=\"$5\" gap=\"$4\">{children}</YStack>\n {bottom && <YStack paddingTop=\"$4\">{bottom}</YStack>}\n </YStack>\n )\n}\n","import { styled, YStack } from 'tamagui'\n\nexport const ScreenLayout = styled(YStack, {\n name: 'OtfScreenLayout',\n flex: 1,\n backgroundColor: '$background',\n\n variants: {\n padded: {\n true: { padding: '$4' },\n },\n centered: {\n true: { alignItems: 'center', justifyContent: 'center' },\n },\n safe: {\n true: { paddingTop: '$6' },\n },\n } as const,\n})\n","import { SizableText, YStack, type GetProps } from 'tamagui'\nimport type { ReactNode } from 'react'\n\nexport type SectionProps = {\n title?: string\n description?: string\n children: ReactNode\n gap?: GetProps<typeof YStack>['gap']\n}\n\nexport function Section({ title, description, children, gap = '$3' }: SectionProps) {\n return (\n <YStack gap={gap}>\n {title && (\n <YStack gap=\"$1\">\n <SizableText size=\"$5\" fontWeight=\"600\" color=\"$color12\">{title}</SizableText>\n {description && (\n <SizableText size=\"$3\" color=\"$color9\">{description}</SizableText>\n )}\n </YStack>\n )}\n {children}\n </YStack>\n )\n}\n","/**\n * ListItem\n *\n * Layout primitive for list rows. Used universally for settings, devices,\n * notifications, links, and any \"icon + title + subtitle (+ trailing)\" row.\n *\n * Right-slot variants:\n * - `'chevron'` → ChevronRight icon (default when `href` is set)\n * - `'switch'` → Tamagui Switch driven by `switchValue` + `onSwitchChange`\n * - `{ value: string }` → right-aligned muted label\n * - `{ badge, tone }` → small pill (default | success | warning | danger)\n * - any `ReactNode` → rendered as-is (existing behavior preserved)\n * - undefined → no right slot (existing behavior preserved)\n *\n * The `href` shorthand auto-renders a chevron and pushes via `expo-router` on press.\n *\n * Backwards compatible: every prop, render branch, and visual output from the\n * pre-extension version still works unchanged.\n */\n\nimport type { ReactNode } from 'react'\nimport { ChevronRight } from '@tamagui/lucide-icons'\nimport { router } from 'expo-router'\nimport { SizableText, styled, Switch, View, XStack, YStack } from 'tamagui'\n\nconst ListItemFrame = styled(XStack, {\n name: 'OtfListItem',\n alignItems: 'center',\n gap: '$3',\n padding: '$3',\n borderRadius: '$3',\n\n variants: {\n pressable: {\n true: {\n cursor: 'pointer',\n hoverStyle: { backgroundColor: '$color2' },\n pressStyle: { backgroundColor: '$color3', opacity: 0.9 },\n },\n },\n } as const,\n})\n\nexport type ListItemBadgeTone = 'default' | 'success' | 'warning' | 'danger'\n\nexport type ListItemRightValue = { value: string }\nexport type ListItemRightBadge = { badge: string; tone?: ListItemBadgeTone }\n\nexport type ListItemRight =\n | ReactNode\n | 'chevron'\n | 'switch'\n | ListItemRightValue\n | ListItemRightBadge\n\nexport type ListItemProps = {\n icon?: ReactNode\n title: string\n subtitle?: string\n /**\n * Right-side slot. Accepts a custom ReactNode (existing), or one of:\n * `'chevron'`, `'switch'`, `{ value }`, `{ badge, tone }`.\n */\n right?: ListItemRight\n /** When `right === 'switch'`, the Switch's checked state. */\n switchValue?: boolean\n /** When `right === 'switch'`, fired on toggle. */\n onSwitchChange?: (next: boolean) => void\n /** Optional accessibility label for the Switch (when `right === 'switch'`). */\n switchAccessibilityLabel?: string\n /**\n * Shorthand: when set and `right` is undefined, defaults to `'chevron'`\n * and `onPress` becomes `router.push(href)` (composing with any provided onPress).\n */\n href?: string\n onPress?: () => void\n}\n\nconst BADGE_TONE_STYLES: Record<\n ListItemBadgeTone,\n { backgroundColor: string; color: string }\n> = {\n default: { backgroundColor: '$color5', color: '$color12' },\n success: { backgroundColor: '#22c55e1a', color: '#22c55e' },\n warning: { backgroundColor: '#f59e0b1a', color: '#f59e0b' },\n danger: { backgroundColor: '#ef44441a', color: '#ef4444' },\n}\n\nfunction isValueRight(r: unknown): r is ListItemRightValue {\n return (\n typeof r === 'object' &&\n r !== null &&\n 'value' in r &&\n typeof (r as { value: unknown }).value === 'string' &&\n !('badge' in r)\n )\n}\n\nfunction isBadgeRight(r: unknown): r is ListItemRightBadge {\n return (\n typeof r === 'object' &&\n r !== null &&\n 'badge' in r &&\n typeof (r as { badge: unknown }).badge === 'string'\n )\n}\n\nfunction renderRight(\n right: ListItemRight | undefined,\n switchValue: boolean | undefined,\n onSwitchChange: ((next: boolean) => void) | undefined,\n switchAccessibilityLabel: string | undefined,\n title: string,\n): ReactNode {\n if (right === undefined || right === null) return null\n\n if (right === 'chevron') {\n return <ChevronRight size={20} color=\"$color9\" />\n }\n\n if (right === 'switch') {\n return (\n <Switch\n size=\"$3\"\n checked={switchValue ?? false}\n onCheckedChange={onSwitchChange}\n accessibilityRole=\"switch\"\n accessibilityLabel={switchAccessibilityLabel ?? title}\n accessibilityState={{ checked: switchValue ?? false }}\n >\n <Switch.Thumb animation=\"quick\" />\n </Switch>\n )\n }\n\n if (isValueRight(right)) {\n return (\n <SizableText size=\"$3\" color=\"$color10\">\n {right.value}\n </SizableText>\n )\n }\n\n if (isBadgeRight(right)) {\n const tone: ListItemBadgeTone = right.tone ?? 'default'\n const style = BADGE_TONE_STYLES[tone]\n return (\n <View\n paddingHorizontal=\"$2\"\n paddingVertical=\"$1\"\n borderRadius=\"$10\"\n backgroundColor={style.backgroundColor}\n >\n <SizableText size=\"$1\" fontWeight=\"600\" color={style.color}>\n {right.badge}\n </SizableText>\n </View>\n )\n }\n\n return right as ReactNode\n}\n\nexport function ListItem({\n icon,\n title,\n subtitle,\n right,\n switchValue,\n onSwitchChange,\n switchAccessibilityLabel,\n href,\n onPress,\n}: ListItemProps) {\n const resolvedRight: ListItemRight | undefined =\n right === undefined && href !== undefined ? 'chevron' : right\n\n const handlePress = (() => {\n if (!href && !onPress) return undefined\n return () => {\n onPress?.()\n if (href) router.push(href)\n }\n })()\n\n return (\n <ListItemFrame pressable={!!handlePress} onPress={handlePress}>\n {icon && <View>{icon}</View>}\n <YStack flex={1} gap=\"$1\">\n <SizableText size=\"$4\" fontWeight=\"500\" color=\"$color12\">\n {title}\n </SizableText>\n {subtitle && (\n <SizableText size=\"$2\" color=\"$color9\">\n {subtitle}\n </SizableText>\n )}\n </YStack>\n {renderRight(\n resolvedRight,\n switchValue,\n onSwitchChange,\n switchAccessibilityLabel,\n title,\n )}\n </ListItemFrame>\n )\n}\n","import { Separator, SizableText, XStack } from 'tamagui'\n\nexport type DividerProps = {\n label?: string\n}\n\nexport function Divider({ label }: DividerProps) {\n if (!label) return <Separator borderColor=\"$color4\" />\n return (\n <XStack alignItems=\"center\" gap=\"$3\">\n <Separator flex={1} borderColor=\"$color4\" />\n <SizableText size=\"$2\" color=\"$color9\">{label}</SizableText>\n <Separator flex={1} borderColor=\"$color4\" />\n </XStack>\n )\n}\n","import { YStack } from 'tamagui'\nimport type { ReactNode } from 'react'\n\nexport type KeyboardStickyFooterProps = {\n children: ReactNode\n offset?: number\n}\n\nexport function KeyboardStickyFooter({ children, offset }: KeyboardStickyFooterProps) {\n return (\n <YStack maxWidth={500} alignSelf=\"center\" paddingTop=\"$8\" paddingBottom=\"$4\" style={{ paddingBottom: offset }}>\n {children}\n </YStack>\n )\n}\n","import { type ReactNode } from 'react'\nimport { YStack } from 'tamagui'\n\nexport type SafeAreaProps = { children: ReactNode; edges?: ('top' | 'bottom' | 'left' | 'right')[] }\n\nexport function SafeArea({ children, edges = ['top', 'bottom'] }: SafeAreaProps) {\n return (\n <YStack\n flex={1} backgroundColor=\"$background\"\n paddingTop={edges.includes('top') ? '$6' : undefined}\n paddingBottom={edges.includes('bottom') ? '$6' : undefined}\n paddingLeft={edges.includes('left') ? '$4' : undefined}\n paddingRight={edges.includes('right') ? '$4' : undefined}\n >\n {children}\n </YStack>\n )\n}\n","import { type ReactNode, Children } from 'react'\nimport { XStack, YStack } from 'tamagui'\n\nexport type GridProps = { children: ReactNode; columns?: number; gap?: string }\nexport type ContainerProps = { children: ReactNode; maxWidth?: number; centered?: boolean; padding?: string }\n\nexport function Grid({ children, columns = 2, gap = '$3' }: GridProps) {\n const items = Children.toArray(children)\n const rows: ReactNode[][] = []\n for (let i = 0; i < items.length; i += columns) {\n rows.push(items.slice(i, i + columns))\n }\n return (\n <YStack gap={gap as any}>\n {rows.map((row, ri) => (\n <XStack key={ri} gap={gap as any}>\n {row.map((item, ci) => (\n <YStack key={ci} flex={1}>{item}</YStack>\n ))}\n {row.length < columns && Array.from({ length: columns - row.length }).map((_, i) => (\n <YStack key={`pad-${i}`} flex={1} />\n ))}\n </XStack>\n ))}\n </YStack>\n )\n}\n\nexport function Container({ children, maxWidth = 500, centered = true, padding = '$4' }: ContainerProps) {\n return (\n <YStack width=\"100%\" maxWidth={maxWidth} alignSelf={centered ? 'center' : undefined} padding={padding as any}>\n {children}\n </YStack>\n )\n}\n","import { useState, useEffect, type ReactNode } from 'react'\nimport { Button, Circle, SizableText, XStack, YStack, ScrollView } from 'tamagui'\n\nexport type PlanOption = {\n id: string\n name: string\n price: string\n period: string\n tagline?: string\n pricePerWeek?: string\n savings?: string\n popular?: boolean\n trial?: string\n features?: string[]\n}\n\nexport type PaywallVariant =\n | 'default'\n | 'social-proof'\n | 'comparison'\n | 'creator-sheet'\n | 'immersive-dark'\n\nexport type PaywallFeature =\n | string\n | {\n title: string\n description?: string\n icon?: ReactNode\n }\n\nexport type PaywallComparisonRow = {\n label: string\n free?: boolean\n premium?: boolean\n}\n\nexport type PaywallTestimonial = {\n quote: string\n author: string\n meta?: string\n}\n\nexport type PaywallCreator = {\n name: string\n meta?: string\n avatar?: ReactNode\n}\n\nexport type PaywallScreenProps = {\n variant?: PaywallVariant\n eyebrow?: string\n title?: string\n subtitle?: string\n features?: PaywallFeature[]\n plans: PlanOption[]\n selectedPlan?: string\n onSelectPlan?: (planId: string) => void\n onContinue?: () => void\n onClose?: () => void\n onRestore?: () => void\n onTerms?: () => void\n onPrivacy?: () => void\n continueLabel?: string\n reassurance?: string\n hero?: ReactNode\n socialProof?: string\n countdownMinutes?: number\n badge?: string\n comparisonRows?: PaywallComparisonRow[]\n testimonials?: PaywallTestimonial[]\n creator?: PaywallCreator\n topSlot?: ReactNode\n footerSlot?: ReactNode\n trustBadges?: { icon?: ReactNode; label: string }[]\n}\n\nfunction useCountdown(minutes?: number) {\n const [seconds, setSeconds] = useState((minutes ?? 0) * 60)\n useEffect(() => {\n if (!minutes) return\n setSeconds(minutes * 60)\n const id = setInterval(() => setSeconds((s) => (s > 0 ? s - 1 : 0)), 1000)\n return () => clearInterval(id)\n }, [minutes])\n const mm = String(Math.floor(seconds / 60)).padStart(2, '0')\n const ss = String(seconds % 60).padStart(2, '0')\n return { display: `${mm}:${ss}`, expired: seconds <= 0 }\n}\n\nfunction normalizeFeature(f: PaywallFeature) {\n return typeof f === 'string' ? { title: f } : f\n}\n\nfunction BenefitRow({ feature, tone, muted }: { feature: PaywallFeature; tone: string; muted: string }) {\n const f = normalizeFeature(feature)\n return (\n <XStack gap=\"$3\" alignItems=\"center\">\n <Circle size={40} backgroundColor=\"$color3\">{f.icon ?? <SizableText size=\"$5\" color=\"$color9\">✦</SizableText>}</Circle>\n <YStack flex={1} gap=\"$0.5\">\n <SizableText size=\"$4\" fontWeight=\"700\" color={tone}>{f.title}</SizableText>\n {f.description ? <SizableText size=\"$2\" color={muted}>{f.description}</SizableText> : null}\n </YStack>\n </XStack>\n )\n}\n\nfunction PlanRow({ plan, selected, onPress }: { plan: PlanOption; selected: boolean; onPress: () => void }) {\n return (\n <XStack width=\"100%\" padding=\"$3\" paddingHorizontal=\"$3.5\" borderRadius=\"$5\" borderWidth={2}\n borderColor={selected ? '$color9' : '$color5'} backgroundColor={selected ? '$color3' : '$color1'}\n pressStyle={{ scale: 0.98, opacity: 0.9 }} animation=\"quick\" onPress={onPress}\n cursor=\"pointer\" alignItems=\"center\" gap=\"$3\" position=\"relative\">\n {plan.popular && (\n <YStack position=\"absolute\" top={-10} right={12} backgroundColor=\"$color9\" paddingHorizontal=\"$2\" paddingVertical={2} borderRadius=\"$10\">\n <SizableText size=\"$1\" color=\"white\" fontWeight=\"700\">BEST VALUE</SizableText>\n </YStack>\n )}\n <Circle size={22} borderWidth={2} borderColor={selected ? '$color9' : '$color7'} backgroundColor={selected ? '$color9' : 'transparent'}>\n {selected && <Circle size={8} backgroundColor=\"white\" />}\n </Circle>\n <YStack flex={1} gap=\"$0.5\">\n <XStack gap=\"$2\" alignItems=\"center\">\n <SizableText size=\"$4\" fontWeight=\"700\">{plan.name}</SizableText>\n {plan.trial && (\n <YStack backgroundColor=\"$green3\" paddingHorizontal=\"$1.5\" paddingVertical={2} borderRadius=\"$10\">\n <SizableText size=\"$1\" color=\"$green9\" fontWeight=\"700\">{plan.trial}</SizableText>\n </YStack>\n )}\n </XStack>\n {plan.tagline ? <SizableText size=\"$2\" color=\"$color10\">{plan.tagline}</SizableText> : null}\n </YStack>\n <YStack alignItems=\"flex-end\" gap=\"$0.5\">\n <XStack alignItems=\"baseline\" gap=\"$1\">\n <SizableText size=\"$5\" fontWeight=\"800\">{plan.price}</SizableText>\n <SizableText size=\"$2\" color=\"$color10\">/{plan.period}</SizableText>\n </XStack>\n {plan.savings && (\n <YStack backgroundColor=\"$green3\" paddingHorizontal=\"$1.5\" paddingVertical={1} borderRadius=\"$10\">\n <SizableText size=\"$1\" color=\"$green9\" fontWeight=\"700\">{plan.savings}</SizableText>\n </YStack>\n )}\n {plan.pricePerWeek && <SizableText size=\"$1\" color=\"$color10\">{plan.pricePerWeek}</SizableText>}\n </YStack>\n </XStack>\n )\n}\n\nfunction ComparisonIcon({ enabled }: { enabled?: boolean }) {\n return (\n <Circle size={24} backgroundColor={enabled ? '$green3' : '$color4'}>\n <SizableText size=\"$2\" color={enabled ? '$green10' : '$color8'} fontWeight=\"700\">\n {enabled ? '✓' : '✕'}\n </SizableText>\n </Circle>\n )\n}\n\nfunction TestimonialCard({ t }: { t: PaywallTestimonial }) {\n return (\n <YStack minWidth={240} backgroundColor=\"$color2\" borderRadius=\"$6\" padding=\"$3.5\" gap=\"$2.5\">\n <SizableText size=\"$3\" color=\"$color11\" fontStyle=\"italic\">“{t.quote}”</SizableText>\n <XStack gap=\"$2\" alignItems=\"center\">\n <Circle size={32} backgroundColor=\"$color5\"><SizableText size=\"$2\" fontWeight=\"700\">{t.author[0]}</SizableText></Circle>\n <YStack>\n <SizableText size=\"$2\" fontWeight=\"700\">{t.author}</SizableText>\n {t.meta ? <SizableText size=\"$1\" color=\"$color10\">{t.meta}</SizableText> : null}\n </YStack>\n </XStack>\n </YStack>\n )\n}\n\nfunction CreatorHeader({ c }: { c: PaywallCreator }) {\n return (\n <XStack alignItems=\"center\" justifyContent=\"center\" gap=\"$3\">\n {c.avatar && <Circle size={72} overflow=\"hidden\" backgroundColor=\"$color3\">{c.avatar}</Circle>}\n <YStack alignItems=\"center\" gap=\"$1\">\n <SizableText size=\"$6\" fontWeight=\"800\">{c.name}</SizableText>\n {c.meta ? <SizableText size=\"$3\" color=\"$color10\">{c.meta}</SizableText> : null}\n </YStack>\n </XStack>\n )\n}\n\nfunction TrustBadges({ badges }: { badges: { icon?: ReactNode; label: string }[] }) {\n return (\n <XStack justifyContent=\"center\" gap=\"$4\" paddingTop=\"$1\">\n {badges.map((b, i) => (\n <YStack key={i} alignItems=\"center\" gap=\"$1\">\n <Circle size={28} backgroundColor=\"$color3\">\n {b.icon ?? <SizableText size=\"$2\" color=\"$color9\">✦</SizableText>}\n </Circle>\n <SizableText size=\"$1\" color=\"$color10\" textAlign=\"center\">{b.label}</SizableText>\n </YStack>\n ))}\n </XStack>\n )\n}\n\nexport function PaywallScreen({\n variant = 'default',\n eyebrow,\n title = 'Unlock Premium',\n subtitle,\n features = [],\n plans,\n selectedPlan,\n onSelectPlan,\n onContinue,\n onClose,\n onRestore,\n onTerms,\n onPrivacy,\n continueLabel = 'Continue',\n reassurance = 'Cancel anytime',\n hero,\n socialProof,\n countdownMinutes,\n badge,\n comparisonRows = [],\n testimonials = [],\n creator,\n topSlot,\n footerSlot,\n trustBadges,\n}: PaywallScreenProps) {\n const selected = selectedPlan ?? plans.find((p) => p.popular)?.id ?? plans[0]?.id\n const countdown = useCountdown(countdownMinutes)\n const dark = variant === 'immersive-dark'\n const bg = dark ? '$color1' : '$background'\n const tone = dark ? '$color12' : '$color11'\n const muted = '$color10'\n\n return (\n <YStack flex={1} backgroundColor={bg}>\n {onClose && (\n <XStack position=\"absolute\" top=\"$4\" right=\"$4\" zIndex={10}>\n <Button size=\"$3\" circular chromeless onPress={onClose} pressStyle={{ opacity: 0.6 }}>\n <SizableText size=\"$5\" color={muted}>✕</SizableText>\n </Button>\n </XStack>\n )}\n\n <ScrollView flex={1} contentContainerStyle={{ paddingBottom: 240 }}>\n <YStack paddingHorizontal=\"$5\" paddingTop=\"$8\" gap=\"$5\">\n {topSlot}\n\n {creator && variant === 'creator-sheet' ? <CreatorHeader c={creator} /> : null}\n\n {hero && <YStack alignItems=\"center\" paddingVertical=\"$3\">{hero}</YStack>}\n\n {badge && (\n <XStack justifyContent=\"center\">\n <YStack backgroundColor=\"$color9\" paddingHorizontal=\"$3\" paddingVertical=\"$1\" borderRadius=\"$10\">\n <SizableText size=\"$2\" color=\"white\" fontWeight=\"700\">{badge}</SizableText>\n </YStack>\n </XStack>\n )}\n\n <YStack gap=\"$1.5\" alignItems=\"center\">\n {eyebrow ? <SizableText size=\"$2\" fontWeight=\"700\" color=\"$color9\" textTransform=\"uppercase\">{eyebrow}</SizableText> : null}\n <SizableText size=\"$9\" fontWeight=\"800\" textAlign=\"center\" color={tone}>{title}</SizableText>\n {subtitle && <SizableText size=\"$4\" color={muted} textAlign=\"center\">{subtitle}</SizableText>}\n {socialProof && <SizableText size=\"$3\" color=\"$color9\" fontWeight=\"600\" textAlign=\"center\" paddingTop=\"$1\">{socialProof}</SizableText>}\n </YStack>\n\n {countdownMinutes && !countdown.expired ? (\n <XStack justifyContent=\"center\" padding=\"$2\" backgroundColor=\"$red3\" borderRadius=\"$4\" alignSelf=\"center\" paddingHorizontal=\"$4\" gap=\"$2\" alignItems=\"center\">\n <SizableText size=\"$2\" color=\"$red9\" fontWeight=\"600\">Offer ends in</SizableText>\n <SizableText size=\"$5\" color=\"$red9\" fontWeight=\"800\" fontFamily=\"$mono\">{countdown.display}</SizableText>\n </XStack>\n ) : null}\n\n {features.length > 0 && (\n <YStack gap=\"$3.5\">\n {features.map((feature, i) => (\n <BenefitRow key={i} feature={feature} tone={tone} muted={muted} />\n ))}\n </YStack>\n )}\n\n {variant === 'social-proof' && testimonials.length > 0 ? (\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <XStack gap=\"$3\" paddingRight=\"$4\">\n {testimonials.map((t, i) => (\n <TestimonialCard key={`${t.author}-${i}`} t={t} />\n ))}\n </XStack>\n </ScrollView>\n ) : null}\n\n {variant === 'comparison' && comparisonRows.length > 0 ? (\n <YStack backgroundColor={dark ? '$color2' : '$color1'} borderRadius=\"$6\" padding=\"$3.5\" gap=\"$2\" borderWidth={1} borderColor=\"$color4\">\n <XStack alignItems=\"center\">\n <SizableText flex={1} size=\"$2\" fontWeight=\"700\" color={muted}>Feature</SizableText>\n <SizableText width={64} size=\"$2\" fontWeight=\"700\" textAlign=\"center\" color={muted}>Free</SizableText>\n <SizableText width={84} size=\"$2\" fontWeight=\"700\" textAlign=\"center\" color=\"$color9\">Premium</SizableText>\n </XStack>\n {comparisonRows.map((row) => (\n <XStack key={row.label} alignItems=\"center\" paddingVertical=\"$1.5\">\n <SizableText flex={1} size=\"$3\" color={tone}>{row.label}</SizableText>\n <XStack width={64} justifyContent=\"center\"><ComparisonIcon enabled={row.free} /></XStack>\n <XStack width={84} justifyContent=\"center\"><ComparisonIcon enabled={row.premium} /></XStack>\n </XStack>\n ))}\n </YStack>\n ) : null}\n\n <YStack gap=\"$3\">\n {plans.map((plan) => (\n <PlanRow\n key={plan.id}\n plan={plan}\n selected={selected === plan.id}\n onPress={() => onSelectPlan?.(plan.id)}\n />\n ))}\n </YStack>\n </YStack>\n </ScrollView>\n\n <YStack position=\"absolute\" bottom={0} left={0} right={0} padding=\"$4\" paddingBottom=\"$6\"\n backgroundColor={bg} borderTopWidth={1} borderTopColor=\"$color4\" gap=\"$2.5\">\n <Button size=\"$5\" backgroundColor=\"$color9\" color=\"$color1\" onPress={onContinue}\n pressStyle={{ backgroundColor: '$color8', scale: 0.98 }} animation=\"quick\" borderRadius=\"$10\" fontWeight=\"700\">\n {continueLabel}\n </Button>\n {reassurance && <SizableText size=\"$2\" color=\"$color9\" textAlign=\"center\">{reassurance}</SizableText>}\n <XStack justifyContent=\"center\" gap=\"$3\">\n {onRestore && <SizableText size=\"$2\" color=\"$color8\" onPress={onRestore} pressStyle={{ opacity: 0.6 }}>Restore</SizableText>}\n {onTerms && <SizableText size=\"$2\" color=\"$color8\" onPress={onTerms} pressStyle={{ opacity: 0.6 }}>Terms</SizableText>}\n {onPrivacy && <SizableText size=\"$2\" color=\"$color8\" onPress={onPrivacy} pressStyle={{ opacity: 0.6 }}>Privacy</SizableText>}\n </XStack>\n {trustBadges && trustBadges.length > 0 && <TrustBadges badges={trustBadges} />}\n {footerSlot}\n </YStack>\n </YStack>\n )\n}\n","import { useState } from 'react'\nimport { Button, SizableText, XStack, YStack, Circle } from 'tamagui'\nimport type { ReactNode } from 'react'\n\nexport type OnboardingVariant =\n | 'default'\n | 'calm-gradient'\n | 'card-tilt'\n | 'editorial'\n | 'selection-step'\n | 'permission-prompt'\n\nexport type OnboardingStep = {\n title: string\n description: string\n icon?: ReactNode\n hero?: ReactNode\n eyebrow?: string\n ctaLabel?: string\n background?: ReactNode\n}\n\nexport type OnboardingCarouselProps = {\n steps: OnboardingStep[]\n variant?: OnboardingVariant\n brand?: ReactNode\n topLeading?: ReactNode\n onComplete?: () => void\n onSkip?: () => void\n completeLabel?: string\n skipLabel?: string\n nextLabel?: string\n footerSlot?: ReactNode\n}\n\nexport function OnboardingCarousel({\n steps,\n variant = 'default',\n brand,\n topLeading,\n onComplete,\n onSkip,\n completeLabel = 'Get Started',\n skipLabel = 'Skip',\n nextLabel = 'Next',\n footerSlot,\n}: OnboardingCarouselProps) {\n const [current, setCurrent] = useState(0)\n if (steps.length === 0) {\n return (\n <YStack flex={1} backgroundColor=\"$background\" padding=\"$4\" alignItems=\"center\" justifyContent=\"center\">\n <SizableText size=\"$5\" color=\"$color10\" textAlign=\"center\">\n Add at least one onboarding step.\n </SizableText>\n </YStack>\n )\n }\n const isLast = current === steps.length - 1\n const step = steps[current]\n const hero = step?.hero ?? step?.icon\n const isEditorial = variant === 'editorial'\n const isSelection = variant === 'selection-step'\n const isPermission = variant === 'permission-prompt'\n const topPadding = isEditorial ? '$6' : '$4'\n const titleSize = isEditorial ? '$10' : '$9'\n const backgroundColor = variant === 'calm-gradient' ? '$color2' : '$background'\n const heroBackground = isPermission ? '$color3' : isSelection ? '$color1' : '$color2'\n const heroRadius = variant === 'card-tilt' || isSelection ? '$8' : '$10'\n const buttonTone = variant === 'editorial' ? '$color12' : '$color9'\n\n return (\n <YStack flex={1} backgroundColor={backgroundColor} padding=\"$4\" justifyContent=\"space-between\">\n {step?.background ? <YStack position=\"absolute\" left={0} right={0} top={0} bottom={0}>{step.background}</YStack> : null}\n <XStack justifyContent=\"space-between\" alignItems=\"center\" paddingTop={topPadding}>\n <XStack minWidth={40}>\n {topLeading}\n </XStack>\n {brand ? <YStack alignItems=\"center\" flex={1}>{brand}</YStack> : <YStack flex={1} />}\n {!isLast && onSkip && (\n <Button chromeless onPress={onSkip}>\n <SizableText size=\"$4\" color=\"$color9\">\n {skipLabel}\n </SizableText>\n </Button>\n )}\n </XStack>\n\n <YStack flex={1} alignItems=\"center\" justifyContent=\"center\" gap=\"$5\" paddingHorizontal=\"$4\">\n {hero ? (\n variant === 'card-tilt' || isSelection ? (\n <YStack\n width=\"100%\"\n maxWidth={340}\n minHeight={260}\n borderRadius={heroRadius}\n backgroundColor={heroBackground}\n padding=\"$3\"\n alignItems=\"center\"\n justifyContent=\"center\"\n borderWidth={variant === 'card-tilt' ? 3 : 1}\n borderColor=\"$color4\"\n shadowColor=\"$shadowColor\"\n shadowOpacity={0.14}\n shadowRadius={18}\n shadowOffset={{ width: 0, height: 10 }}\n style={variant === 'card-tilt' ? ({ transform: [{ rotate: '-5deg' }] } as any) : undefined}\n >\n {hero}\n </YStack>\n ) : (\n <Circle size={isPermission ? 140 : 120} backgroundColor={heroBackground} alignItems=\"center\" justifyContent=\"center\">\n {hero}\n </Circle>\n )\n ) : null}\n <YStack gap=\"$3\" alignItems=\"center\">\n {step?.eyebrow ? (\n <SizableText size=\"$2\" color=\"$color9\" fontWeight=\"700\" textTransform=\"uppercase\">\n {step.eyebrow}\n </SizableText>\n ) : null}\n <SizableText size={titleSize} fontWeight=\"700\" textAlign=\"center\">\n {step?.title}\n </SizableText>\n <SizableText size=\"$4\" color=\"$color10\" textAlign=\"center\" maxWidth={300}>\n {step?.description}\n </SizableText>\n </YStack>\n </YStack>\n\n <YStack gap=\"$3\" paddingBottom=\"$2\">\n <XStack justifyContent=\"center\" gap=\"$2\">\n {steps.map((_, i) => (\n <Circle\n key={i}\n size={variant === 'card-tilt' ? 10 : 8}\n width={i === current && variant !== 'default' ? 24 : undefined}\n backgroundColor={i === current ? '$color9' : '$color4'}\n borderRadius=\"$10\"\n animation=\"quick\"\n />\n ))}\n </XStack>\n <Button\n size=\"$5\"\n backgroundColor={buttonTone}\n color=\"$color1\"\n borderRadius={variant === 'editorial' ? '$10' : '$5'}\n hoverStyle={{ backgroundColor: variant === 'editorial' ? '$color11' : '$color10' }}\n pressStyle={{ backgroundColor: '$color8' }}\n onPress={() => (isLast ? onComplete?.() : setCurrent((c) => c + 1))}\n >\n {isLast ? (step?.ctaLabel ?? completeLabel) : (step?.ctaLabel ?? nextLabel)}\n </Button>\n {footerSlot}\n </YStack>\n </YStack>\n )\n}\n","import { SizableText, XStack, YStack, Circle, Image } from 'tamagui'\n\nexport type ChatMessage = {\n id: string\n text: string\n sender: 'user' | 'other'\n timestamp?: string\n avatar?: string\n senderName?: string\n}\n\nexport type ChatBubbleProps = {\n message: ChatMessage\n showAvatar?: boolean\n}\n\nexport function ChatBubble({ message, showAvatar = true }: ChatBubbleProps) {\n const isUser = message.sender === 'user'\n\n return (\n <XStack\n alignSelf={isUser ? 'flex-end' : 'flex-start'}\n maxWidth=\"75%\"\n gap=\"$2\"\n flexDirection={isUser ? 'row-reverse' : 'row'}\n >\n {showAvatar && !isUser && (\n <Circle size={32} backgroundColor=\"$color4\" overflow=\"hidden\">\n {message.avatar ? (\n <Image source={{ uri: message.avatar }} width={32} height={32} objectFit=\"cover\" />\n ) : (\n <SizableText size=\"$2\" fontWeight=\"600\" color=\"$color11\">\n {message.senderName?.[0]?.toUpperCase() ?? '?'}\n </SizableText>\n )}\n </Circle>\n )}\n <YStack\n backgroundColor={isUser ? '$color9' : '$color3'}\n paddingHorizontal=\"$3\"\n paddingVertical=\"$2.5\"\n borderRadius=\"$5\"\n borderBottomRightRadius={isUser ? '$2' : '$5'}\n borderBottomLeftRadius={isUser ? '$5' : '$2'}\n gap=\"$1\"\n >\n <SizableText size=\"$3\" color={isUser ? '$color1' : '$color12'}>\n {message.text}\n </SizableText>\n {message.timestamp && (\n <SizableText size=\"$1\" color={isUser ? '$color3' : '$color9'} alignSelf=\"flex-end\">\n {message.timestamp}\n </SizableText>\n )}\n </YStack>\n </XStack>\n )\n}\n","import { Separator, SizableText, Switch, XStack, YStack } from 'tamagui'\nimport type { ReactNode } from 'react'\n\nexport type SettingsItem = {\n id: string\n icon?: ReactNode\n title: string\n subtitle?: string\n right?: ReactNode\n onPress?: () => void\n type?: 'navigate' | 'toggle'\n value?: boolean\n onValueChange?: (value: boolean) => void\n}\n\nexport type SettingsSection = {\n title?: string\n items: SettingsItem[]\n}\n\nexport type SettingsScreenProps = {\n sections: SettingsSection[]\n header?: ReactNode\n}\n\nfunction SettingsItemRow({ item }: { item: SettingsItem }) {\n return (\n <XStack\n alignItems=\"center\"\n gap=\"$3\"\n paddingVertical=\"$3\"\n paddingHorizontal=\"$4\"\n hoverStyle={item.onPress ? { backgroundColor: '$color2' } : undefined}\n pressStyle={item.onPress ? { backgroundColor: '$color3' } : undefined}\n onPress={item.onPress}\n cursor={item.onPress ? 'pointer' : undefined}\n >\n {item.icon && (\n <YStack width={24} alignItems=\"center\">\n {item.icon}\n </YStack>\n )}\n <YStack flex={1} gap=\"$1\">\n <SizableText size=\"$4\" fontWeight=\"500\">\n {item.title}\n </SizableText>\n {item.subtitle && (\n <SizableText size=\"$2\" color=\"$color9\">\n {item.subtitle}\n </SizableText>\n )}\n </YStack>\n {item.type === 'toggle' ? (\n <Switch size=\"$3\" checked={item.value} onCheckedChange={item.onValueChange}>\n <Switch.Thumb animation=\"quick\" />\n </Switch>\n ) : item.right ? (\n item.right\n ) : (\n item.onPress && (\n <SizableText size=\"$5\" color=\"$color8\">\n ›\n </SizableText>\n )\n )}\n </XStack>\n )\n}\n\nexport function SettingsScreen({ sections, header }: SettingsScreenProps) {\n return (\n <YStack flex={1} backgroundColor=\"$background\">\n {header}\n <YStack gap=\"$4\" paddingVertical=\"$2\">\n {sections.map((section, si) => (\n <YStack key={si}>\n {section.title && (\n <SizableText\n size=\"$2\"\n fontWeight=\"600\"\n color=\"$color9\"\n paddingHorizontal=\"$4\"\n paddingBottom=\"$2\"\n textTransform=\"uppercase\"\n >\n {section.title}\n </SizableText>\n )}\n <YStack backgroundColor=\"$color1\" borderRadius=\"$4\" marginHorizontal=\"$3\" overflow=\"hidden\">\n {section.items.map((item, ii) => (\n <YStack key={item.id}>\n <SettingsItemRow item={item} />\n {ii < section.items.length - 1 && (\n <Separator borderColor=\"$color3\" marginLeft=\"$12\" />\n )}\n </YStack>\n ))}\n </YStack>\n </YStack>\n ))}\n </YStack>\n </YStack>\n )\n}\n","import { Button, SizableText, YStack } from 'tamagui'\nimport type { ReactNode } from 'react'\n\nexport type EmptyStateProps = {\n icon?: ReactNode\n title: string\n description?: string\n actionLabel?: string\n onAction?: () => void\n}\n\nexport function EmptyState({ icon, title, description, actionLabel, onAction }: EmptyStateProps) {\n return (\n <YStack flex={1} alignItems=\"center\" justifyContent=\"center\" gap=\"$4\" padding=\"$6\">\n {icon}\n <YStack gap=\"$2\" alignItems=\"center\">\n <SizableText size=\"$6\" fontWeight=\"600\" textAlign=\"center\">\n {title}\n </SizableText>\n {description && (\n <SizableText size=\"$4\" color=\"$color9\" textAlign=\"center\" maxWidth={280}>\n {description}\n </SizableText>\n )}\n </YStack>\n {actionLabel && onAction && (\n <Button\n size=\"$4\"\n backgroundColor=\"$color9\"\n color=\"$color1\"\n borderRadius=\"$4\"\n hoverStyle={{ backgroundColor: '$color10' }}\n pressStyle={{ backgroundColor: '$color8' }}\n onPress={onAction}\n >\n {actionLabel}\n </Button>\n )}\n </YStack>\n )\n}\n","import { Circle, Image, SizableText, XStack, YStack } from 'tamagui'\nimport type { ReactNode } from 'react'\n\nexport type ProfileHeaderProps = {\n name: string\n subtitle?: string\n avatar?: string\n stats?: { label: string; value: string }[]\n actions?: ReactNode\n}\n\nexport function ProfileHeader({ name, subtitle, avatar, stats, actions }: ProfileHeaderProps) {\n return (\n <YStack alignItems=\"center\" gap=\"$4\" paddingVertical=\"$6\" paddingHorizontal=\"$4\">\n <Circle size={80} backgroundColor=\"$color4\" overflow=\"hidden\">\n {avatar ? (\n <Image source={{ uri: avatar }} width={80} height={80} objectFit=\"cover\" />\n ) : (\n <SizableText size=\"$9\" fontWeight=\"700\" color=\"$color11\">\n {name[0]?.toUpperCase() ?? '?'}\n </SizableText>\n )}\n </Circle>\n <YStack alignItems=\"center\" gap=\"$1\">\n <SizableText size=\"$7\" fontWeight=\"700\">\n {name}\n </SizableText>\n {subtitle && (\n <SizableText size=\"$4\" color=\"$color10\">\n {subtitle}\n </SizableText>\n )}\n </YStack>\n {stats && stats.length > 0 && (\n <XStack gap=\"$6\">\n {stats.map((stat, i) => (\n <YStack key={i} alignItems=\"center\" gap=\"$1\">\n <SizableText size=\"$6\" fontWeight=\"700\">\n {stat.value}\n </SizableText>\n <SizableText size=\"$2\" color=\"$color9\">\n {stat.label}\n </SizableText>\n </YStack>\n ))}\n </XStack>\n )}\n {actions}\n </YStack>\n )\n}\n","/**\n * AppHeader — top navigation bar for kit screens.\n *\n * Existing layout variants (`simple | back | profile | centered`) drive the\n * left/right slot composition. Surface variants (`solid | transparent | blurred`)\n * drive the background treatment. The two are orthogonal — pick a layout\n * variant *and* a surface variant.\n *\n * `collapsible=true` wraps the entire header in `<Animated.View>` so it can\n * be hidden/revealed by `useCollapsibleHeader()`. Pair `animatedStyle` with\n * the `headerStyle` returned from that hook.\n *\n * `blurred` uses `expo-blur`'s `BlurView` on iOS only. On Android and Web it\n * falls back to a semi-transparent surface (`solid` color at 0.85 alpha).\n *\n * @example Solid (existing default)\n * <AppHeader title=\"Profile\" variant=\"profile\" avatar={uri} />\n *\n * @example Collapsible blurred — pair with the hook\n * const { scrollHandler, headerStyle } = useCollapsibleHeader()\n * <AppHeader title=\"Today\" surface=\"blurred\" collapsible animatedStyle={headerStyle} />\n * <ScrollView onScroll={scrollHandler} scrollEventThrottle={16}>...</ScrollView>\n */\n\nimport { Platform } from 'react-native'\nimport Animated, { type AnimatedStyle } from 'react-native-reanimated'\nimport { SizableText, XStack, YStack } from 'tamagui'\nimport { Avatar as OtfAvatar } from '../primitives/Avatar'\n\n// Conditional require — `expo-blur` is iOS-only quality, and not every kit\n// installs it. Keep the import lazy so Android/Web bundles don't blow up if\n// the dep is missing.\ntype BlurViewComponent = React.ComponentType<{\n intensity?: number\n tint?: 'light' | 'dark' | 'default'\n style?: unknown\n children?: React.ReactNode\n}>\nlet BlurView: BlurViewComponent | null = null\nif (Platform.OS === 'ios') {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n BlurView = require('expo-blur').BlurView as BlurViewComponent\n } catch {\n BlurView = null\n }\n}\n\nexport type AppHeaderVariant = 'simple' | 'back' | 'profile' | 'centered'\n\n/** Surface treatment for the header background. */\nexport type AppHeaderSurface = 'solid' | 'transparent' | 'blurred'\n\nexport type AppHeaderProps = {\n title: string\n subtitle?: string\n /** Layout variant — drives left/right slot composition. */\n variant?: AppHeaderVariant\n /**\n * Background treatment. Default `'solid'`.\n * - `solid`: opaque `$background` (existing behavior)\n * - `transparent`: no background, no border\n * - `blurred`: iOS BlurView, Android/Web fallback to semi-transparent solid\n */\n surface?: AppHeaderSurface\n onBack?: () => void\n avatar?: string\n left?: React.ReactNode\n right?: React.ReactNode\n /** @deprecated use `surface=\"transparent\"` */\n transparent?: boolean\n borderless?: boolean\n /** When `true`, wraps in `<Animated.View>` driven by `animatedStyle`. */\n collapsible?: boolean\n /** Reanimated style from `useCollapsibleHeader().headerStyle`. */\n animatedStyle?: AnimatedStyle<Record<string, unknown>>\n}\n\nexport function AppHeader({\n title,\n subtitle,\n variant = 'simple',\n surface,\n onBack,\n avatar,\n left,\n right,\n transparent,\n borderless,\n collapsible,\n animatedStyle,\n}: AppHeaderProps) {\n // Backwards compatibility: legacy `transparent` prop still wins if set.\n const resolvedSurface: AppHeaderSurface = surface ?? (transparent ? 'transparent' : 'solid')\n\n const leftContent = (() => {\n if (variant === 'back')\n return (\n <SizableText\n size=\"$6\"\n paddingRight=\"$2\"\n onPress={onBack}\n pressStyle={{ opacity: 0.6 }}\n cursor=\"pointer\"\n >\n {'‹'}\n </SizableText>\n )\n if (variant === 'profile') return <OtfAvatar uri={avatar} name={title} size=\"sm\" />\n if (variant === 'centered') return left ?? null\n return null\n })()\n const rightContent = variant === 'profile' || variant === 'centered' ? right ?? null : null\n\n // Resolve background per surface. iOS+blurred renders BlurView underneath\n // the YStack and uses transparent bg on the stack itself; otherwise the\n // YStack carries the bg color directly.\n const useNativeBlur = resolvedSurface === 'blurred' && Platform.OS === 'ios' && BlurView !== null\n const backgroundColor: string =\n resolvedSurface === 'transparent' || useNativeBlur\n ? 'transparent'\n : resolvedSurface === 'blurred'\n ? // Android + Web fallback: semi-transparent surface tint.\n 'rgba(20,20,20,0.85)'\n : '$background'\n const borderBottomWidth = borderless || resolvedSurface !== 'solid' ? 0 : 1\n\n const inner = (\n <YStack\n paddingTop=\"$6\"\n backgroundColor={backgroundColor}\n borderBottomWidth={borderBottomWidth}\n borderBottomColor=\"$borderColor\"\n >\n <XStack height={56} alignItems=\"center\" paddingHorizontal=\"$4\" gap=\"$3\">\n {leftContent}\n <YStack flex={1} alignItems={variant === 'centered' ? 'center' : 'flex-start'}>\n <SizableText size=\"$6\" fontWeight=\"700\" numberOfLines={1}>\n {title}\n </SizableText>\n {subtitle && (\n <SizableText size=\"$2\" color=\"$color9\" numberOfLines={1}>\n {subtitle}\n </SizableText>\n )}\n </YStack>\n {rightContent}\n </XStack>\n </YStack>\n )\n\n // Compose blurred surface on iOS by laying the inner over a BlurView.\n const surfaced =\n useNativeBlur && BlurView !== null ? (\n <BlurView\n intensity={40}\n tint=\"default\"\n style={{ position: 'relative' }}\n >\n {inner}\n </BlurView>\n ) : (\n inner\n )\n\n if (collapsible) {\n return <Animated.View style={animatedStyle}>{surfaced}</Animated.View>\n }\n return surfaced\n}\n","import { type ReactNode } from 'react'\nimport { Sheet, SizableText, XStack, YStack } from 'tamagui'\nimport { ScrollView } from 'react-native'\n\nexport type BottomSheetProps = {\n open: boolean; onOpenChange: (open: boolean) => void; title?: string; children: ReactNode\n snapPoints?: number[]; dismissOnSnapToBottom?: boolean; showHandle?: boolean; showClose?: boolean\n zIndex?: number\n}\n\nexport function BottomSheet({ open, onOpenChange, title, children, snapPoints = [85], dismissOnSnapToBottom = true, showHandle = true, showClose = false, zIndex = 100_000 }: BottomSheetProps) {\n return (\n <Sheet\n modal\n forceRemoveScrollEnabled={open}\n open={open}\n onOpenChange={onOpenChange}\n snapPoints={snapPoints}\n dismissOnSnapToBottom={dismissOnSnapToBottom}\n zIndex={zIndex}\n animation=\"medium\"\n >\n <Sheet.Overlay animation=\"lazy\" enterStyle={{ opacity: 0 }} exitStyle={{ opacity: 0 }} />\n {showHandle && <Sheet.Handle />}\n <Sheet.Frame>\n {(title || showClose) && (\n <XStack paddingHorizontal=\"$4\" paddingTop=\"$3\" paddingBottom=\"$2\" alignItems=\"center\" justifyContent=\"space-between\">\n <SizableText size=\"$6\" fontWeight=\"600\" flexShrink={1}>{title}</SizableText>\n {showClose && (\n <XStack width={28} height={28} borderRadius=\"$10\" backgroundColor=\"$color4\" alignItems=\"center\" justifyContent=\"center\"\n pressStyle={{ opacity: 0.7 }} onPress={() => onOpenChange(false)}>\n <SizableText size=\"$3\" color=\"$color10\" fontWeight=\"600\">{'\\u2715'}</SizableText>\n </XStack>\n )}\n </XStack>\n )}\n <ScrollView contentContainerStyle={{ paddingBottom: 40 }}>\n <YStack padding=\"$4\">{children}</YStack>\n </ScrollView>\n </Sheet.Frame>\n </Sheet>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport { Button, Circle, SizableText, Spinner, XStack, YStack } from 'tamagui'\nimport { Input } from '../primitives/Input'\nimport { Divider } from '../layouts/Divider'\nimport { GoogleLogo, AppleLogo, GitHubLogo, MicrosoftLogo } from '../interface/BrandIcons'\n\nexport type AuthProviderBrand = 'google' | 'apple' | 'github' | 'microsoft' | 'custom'\nexport type LoginScreenVariant = 'default' | 'editorial' | 'centered-card'\nexport type AuthProvider = {\n id: string\n name: string\n icon?: ReactNode\n brand?: AuthProviderBrand\n description?: string\n}\nexport type LoginScreenProps = {\n variant?: LoginScreenVariant\n title?: string; subtitle?: string; logo?: ReactNode; providers?: AuthProvider[]\n hero?: ReactNode\n backgroundSlot?: ReactNode\n footerSlot?: ReactNode\n providerButtonStyle?: 'neutral' | 'brand'\n onProviderPress?: (id: string) => void; showEmailForm?: boolean\n onEmailSubmit?: (email: string, password: string) => void\n onForgotPassword?: () => void; onCreateAccount?: () => void\n onTerms?: () => void; onPrivacy?: () => void; loading?: boolean\n}\n\nconst BRAND_ICON_MAP: Record<AuthProviderBrand, (props: { size?: number; color?: string }) => any> = {\n google: ({ size }) => <GoogleLogo size={size} />,\n apple: ({ size, color }) => <AppleLogo size={size} color={color} />,\n github: ({ size, color }) => <GitHubLogo size={size} color={color} />,\n microsoft: ({ size }) => <MicrosoftLogo size={size} />,\n custom: ({ size = 20 }) => (\n <Circle size={size} backgroundColor=\"$color4\" alignItems=\"center\" justifyContent=\"center\">\n <SizableText fontSize={size * 0.6} color=\"$color10\">{'•'}</SizableText>\n </Circle>\n ),\n}\n\nconst BRAND_STYLES: Record<AuthProviderBrand, { backgroundColor: string; borderColor: string; textColor: string }> = {\n google: { backgroundColor: '$color1', borderColor: '$color5', textColor: '$color12' },\n apple: { backgroundColor: '$color12', borderColor: '$color12', textColor: '$color1' },\n github: { backgroundColor: '$color12', borderColor: '$color12', textColor: '$color1' },\n microsoft: { backgroundColor: '$color1', borderColor: '$color5', textColor: '$color12' },\n custom: { backgroundColor: '$color1', borderColor: '$color5', textColor: '$color12' },\n}\n\nfunction ProviderBadge({ provider }: { provider: AuthProvider }) {\n const brand = provider.brand ?? 'custom'\n if (provider.icon) return <>{provider.icon}</>\n const renderIcon = BRAND_ICON_MAP[brand]\n const iconColor = brand === 'apple' || brand === 'github' ? '#fff' : undefined\n return renderIcon({ size: 20, color: iconColor })\n}\n\nexport function LoginScreen({\n variant = 'default',\n title = 'Welcome',\n subtitle = 'Sign in to continue',\n logo,\n providers = [],\n hero,\n backgroundSlot,\n footerSlot,\n providerButtonStyle = 'brand',\n onProviderPress,\n showEmailForm,\n onEmailSubmit,\n onForgotPassword,\n onCreateAccount,\n onTerms,\n onPrivacy,\n loading,\n}: LoginScreenProps) {\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const isEditorial = variant === 'editorial'\n const isCenteredCard = variant === 'centered-card'\n return (\n <YStack flex={1} padding=\"$4\" gap=\"$5\" backgroundColor=\"$background\" justifyContent=\"center\">\n {backgroundSlot ? <YStack position=\"absolute\" left={0} right={0} top={0} bottom={0}>{backgroundSlot}</YStack> : null}\n <YStack\n gap=\"$5\"\n backgroundColor={isCenteredCard ? '$color1' : 'transparent'}\n borderRadius={isCenteredCard ? '$7' : undefined}\n padding={isCenteredCard ? '$4' : undefined}\n borderWidth={isCenteredCard ? 1 : 0}\n borderColor={isCenteredCard ? '$color4' : undefined}\n >\n <YStack alignItems=\"center\" gap=\"$2\">\n {logo && <YStack paddingBottom=\"$3\">{logo}</YStack>}\n {hero ? <YStack paddingBottom=\"$2\">{hero}</YStack> : null}\n <SizableText size={isEditorial ? '$10' : '$9'} fontWeight=\"700\" textAlign=\"center\" fontFamily={isEditorial ? '$heading' : undefined}>{title}</SizableText>\n <SizableText size=\"$4\" color=\"$color10\" textAlign=\"center\">{subtitle}</SizableText>\n </YStack>\n {providers.length > 0 && (\n <YStack gap=\"$2.5\">\n {providers.map(p => (\n <Button\n key={p.id}\n size=\"$5\"\n borderWidth={1.5}\n borderColor={providerButtonStyle === 'brand' ? BRAND_STYLES[p.brand ?? 'custom'].borderColor : '$color5'}\n backgroundColor={providerButtonStyle === 'brand' ? BRAND_STYLES[p.brand ?? 'custom'].backgroundColor : '$color1'}\n borderRadius={isEditorial ? '$6' : '$4'}\n disabled={loading}\n onPress={() => onProviderPress?.(p.id)}\n hoverStyle={{ backgroundColor: providerButtonStyle === 'brand' ? BRAND_STYLES[p.brand ?? 'custom'].backgroundColor : '$color2' }}\n pressStyle={{ backgroundColor: '$color3' }}\n >\n <XStack alignItems=\"center\" justifyContent=\"space-between\" width=\"100%\" gap=\"$2\">\n <XStack alignItems=\"center\" gap=\"$2.5\">\n <ProviderBadge provider={p} />\n <YStack alignItems=\"flex-start\">\n <SizableText size=\"$4\" fontWeight=\"600\" color={providerButtonStyle === 'brand' ? BRAND_STYLES[p.brand ?? 'custom'].textColor : undefined}>{p.name}</SizableText>\n {p.description ? <SizableText size=\"$2\" color=\"$color10\">{p.description}</SizableText> : null}\n </YStack>\n </XStack>\n <SizableText size=\"$4\" color={providerButtonStyle === 'brand' ? BRAND_STYLES[p.brand ?? 'custom'].textColor : '$color9'}>→</SizableText>\n </XStack>\n </Button>\n ))}\n </YStack>\n )}\n {showEmailForm && providers.length > 0 && <Divider label=\"or\" />}\n {showEmailForm && (\n <YStack gap=\"$3\">\n <Input label=\"Email\" placeholder=\"your@email.com\" value={email} onChangeText={setEmail} keyboardType=\"email-address\" autoCapitalize=\"none\" />\n <Input label=\"Password\" placeholder=\"••••••••\" value={password} onChangeText={setPassword} secureTextEntry />\n {onForgotPassword && <XStack justifyContent=\"flex-end\"><SizableText size=\"$3\" color=\"$color9\" onPress={onForgotPassword}>Forgot password?</SizableText></XStack>}\n <Button size=\"$5\" backgroundColor=\"$color9\" color=\"$color1\" borderRadius=\"$5\" disabled={loading}\n onPress={() => onEmailSubmit?.(email, password)}\n hoverStyle={{ backgroundColor: '$color10' }} pressStyle={{ backgroundColor: '$color8' }}\n icon={loading ? <Spinner size=\"small\" color=\"$color1\" /> : undefined}>\n Sign In\n </Button>\n {onCreateAccount && <Button size=\"$3\" chromeless onPress={onCreateAccount}><SizableText size=\"$3\" color=\"$color9\">Create Account</SizableText></Button>}\n </YStack>\n )}\n {(onTerms || onPrivacy) && (\n <YStack paddingTop=\"$2\" alignItems=\"center\">\n <SizableText size=\"$2\" color=\"$color8\" textAlign=\"center\">\n By continuing you agree to our{' '}\n {onTerms && <SizableText size=\"$2\" color=\"$color9\" onPress={onTerms}>Terms of Service</SizableText>}\n {onTerms && onPrivacy && ' & '}\n {onPrivacy && <SizableText size=\"$2\" color=\"$color9\" onPress={onPrivacy}>Privacy Policy</SizableText>}\n </SizableText>\n </YStack>\n )}\n {footerSlot}\n </YStack>\n </YStack>\n )\n}\n","import { SizableText, XStack, YStack } from 'tamagui'\n\nexport type TabBarItem = { id: string; label: string; icon?: React.ReactNode }\nexport type TabBarProps = { tabs: TabBarItem[]; activeTab: string; onTabPress: (id: string) => void; showLabels?: boolean }\n\nexport function TabBar({ tabs, activeTab, onTabPress, showLabels = true }: TabBarProps) {\n return (\n <XStack height={56} borderTopWidth={1} borderTopColor=\"$borderColor\" backgroundColor=\"$background\" paddingBottom=\"$2\">\n {tabs.map(tab => {\n const active = tab.id === activeTab\n return (\n <YStack key={tab.id} flex={1} alignItems=\"center\" justifyContent=\"center\" gap=\"$1\"\n pressStyle={{ opacity: 0.6 }} onPress={() => onTabPress(tab.id)}>\n {tab.icon && <SizableText size=\"$5\" color={active ? '$color9' : '$color8'}>{tab.icon}</SizableText>}\n {showLabels && <SizableText size=\"$1\" color={active ? '$color9' : '$color8'} fontWeight={active ? '600' : '400'}>{tab.label}</SizableText>}\n </YStack>\n )\n })}\n </XStack>\n )\n}\n","import { ScrollView, XStack, Text } from 'tamagui'\nimport type { ReactNode } from 'react'\n\nexport interface ChipsTabBarItem {\n key: string\n label: string\n icon?: ReactNode\n active?: boolean\n onPress?: () => void\n}\n\nexport interface ChipsTabBarProps {\n items: ChipsTabBarItem[]\n /** Background color for the active chip — typically the active palette accent. */\n accentColor?: string\n /** Background color for inactive chips (defaults to a Tamagui $color2 surface). */\n inactiveBackgroundColor?: string\n /** Text/icon color for active chip text/icon. Defaults to white. */\n activeForegroundColor?: string\n /** Text/icon color for inactive chips. */\n inactiveForegroundColor?: string\n /** Border color for inactive chips (default: $color5). */\n inactiveBorderColor?: string\n /** When true, only the active chip shows its label; inactive chips show icon only. */\n collapseInactiveLabel?: boolean\n /** Bottom offset (default 16). */\n bottomOffset?: number\n}\n\n/**\n * Pill / chip-style bottom tab bar — each tab is a standalone pill with\n * icon + label horizontally. The active chip fills with the accent color\n * while inactive chips show only the icon (or icon + label if\n * `collapseInactiveLabel` is false).\n *\n * Background is transparent so the page bleeds through. Render this\n * absolutely-positioned at the bottom of the screen.\n */\nexport function ChipsTabBar({\n items,\n accentColor = '#f97316',\n inactiveBackgroundColor = '$color2',\n activeForegroundColor = '#ffffff',\n inactiveForegroundColor = '$color12',\n inactiveBorderColor = '$color5',\n collapseInactiveLabel = true,\n bottomOffset = 16,\n}: ChipsTabBarProps) {\n return (\n <XStack\n position=\"absolute\"\n bottom={bottomOffset}\n left={0}\n right={0}\n paddingHorizontal=\"$4\"\n pointerEvents=\"box-none\"\n justifyContent=\"center\"\n >\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={{ gap: 8, paddingHorizontal: 4 }}\n >\n {items.map((item) => {\n const focused = !!item.active\n return (\n <XStack\n key={item.key}\n onPress={item.onPress}\n cursor=\"pointer\"\n pressStyle={{ opacity: 0.85, scale: 0.97 }}\n alignItems=\"center\"\n gap=\"$2\"\n paddingHorizontal={focused ? '$3' : '$2.5'}\n paddingVertical=\"$2\"\n borderRadius={999}\n backgroundColor={focused ? accentColor : inactiveBackgroundColor}\n borderWidth={1}\n borderColor={focused ? accentColor : inactiveBorderColor}\n minHeight={40}\n >\n {item.icon}\n {(focused || !collapseInactiveLabel) && (\n <Text\n color={focused ? activeForegroundColor : inactiveForegroundColor}\n fontSize={12}\n fontWeight=\"700\"\n letterSpacing={0.2}\n >\n {item.label}\n </Text>\n )}\n </XStack>\n )\n })}\n </ScrollView>\n </XStack>\n )\n}\n","import { Input, SizableText, XStack } from 'tamagui'\n\nexport type SearchBarProps = {\n value: string; onChangeText: (text: string) => void; placeholder?: string\n onFilter?: () => void; onCancel?: () => void; autoFocus?: boolean\n}\n\nexport function SearchBar({ value, onChangeText, placeholder = 'Search\\u2026', onFilter, onCancel, autoFocus }: SearchBarProps) {\n return (\n <XStack height={44} borderRadius=\"$10\" backgroundColor=\"$color2\" alignItems=\"center\" paddingHorizontal=\"$3\" gap=\"$2\">\n <SizableText size=\"$4\" color=\"$color8\">{'\\u2315'}</SizableText>\n <Input flex={1} size=\"$4\" value={value} onChangeText={onChangeText} placeholder={placeholder}\n placeholderTextColor=\"$color8\" backgroundColor=\"transparent\" borderWidth={0} autoFocus={autoFocus} />\n {onFilter && <SizableText size=\"$4\" color=\"$color9\" pressStyle={{ opacity: 0.6 }} onPress={onFilter}>{'\\u2ACF'}</SizableText>}\n {onCancel && <SizableText size=\"$3\" color=\"$color9\" pressStyle={{ opacity: 0.6 }} onPress={onCancel}>Cancel</SizableText>}\n </XStack>\n )\n}\n","/**\n * FloatingActionButton — bottom-anchored action button with two modes.\n *\n * Mode 1 (default): a single-action FAB. Pass `icon`/`label`/`onPress`\n * and you get the original behavior — a circular (or pill, when `label`\n * is set) button anchored to the bottom of the screen.\n *\n * Mode 2 (\"expanding\"): pass a non-empty `actions` array and the FAB\n * becomes the trigger for a stack of action chips that fan out above it.\n * Tap the FAB to toggle open/closed; tap an action to fire its `onPress`\n * and collapse; tap the backdrop or hardware-back to dismiss. The icon\n * rotates 45deg when open (so a `+` becomes an `×`); when\n * `expandStyle === 'pill'`, the FAB itself morphs from circle to pill\n * with the label visible alongside the rotated icon.\n *\n * Backwards compatible: every existing `<FloatingActionButton ... />`\n * call site (without `actions`) renders identically to the prior\n * implementation.\n *\n * Motion: Reanimated 4. All animation is gated on `useReducedMotion()` —\n * when on, chips appear/disappear instantly with no rotation or morph.\n */\n\nimport { useCallback, useEffect, useRef, useState, type ReactNode } from 'react'\nimport { BackHandler, Pressable } from 'react-native'\nimport Animated, {\n Easing,\n FadeIn,\n FadeInDown,\n FadeOut,\n FadeOutDown,\n useAnimatedStyle,\n useReducedMotion,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated'\nimport { SizableText, XStack, YStack } from 'tamagui'\n\nexport type FABAction = {\n id: string\n icon: ReactNode\n label: string\n onPress: () => void\n /** Optional accent for the chip's icon circle. Defaults to `$color9`. */\n accent?: string\n}\n\nexport type FABProps = {\n icon?: ReactNode\n label?: string\n onPress?: () => void\n position?: 'bottom-right' | 'bottom-center' | 'bottom-left'\n size?: 'sm' | 'md' | 'lg'\n /**\n * When provided and non-empty, switches the FAB to its \"expanding\" mode.\n * Tapping the FAB toggles a fan-out of action chips above it. Tapping\n * an action fires its `onPress` and collapses the menu.\n */\n actions?: FABAction[]\n /**\n * Visual treatment while expanding.\n * - `'pill'` (default): morphs from circle to icon+label pill on open.\n * - `'circle'`: stays circular; only the icon rotates 45deg on open.\n * Has no effect when `actions` is empty.\n */\n expandStyle?: 'pill' | 'circle'\n /**\n * Backdrop color shown while open. Pass `'transparent'` to disable the\n * dimming overlay (the backdrop still captures taps to close).\n */\n backdropColor?: string\n}\n\nconst sizes = { sm: 44, md: 56, lg: 68 }\nconst positionStyles = {\n 'bottom-right': { right: 20 },\n 'bottom-center': { left: '50%', marginLeft: -28 },\n 'bottom-left': { left: 20 },\n}\n\nconst PILL_OPEN_WIDTH = 140\nconst TWEEN_MS = 250\nconst EASE = Easing.bezier(0.33, 1, 0.68, 1) // easeOutCubic\n\nexport function FloatingActionButton({\n icon,\n label,\n onPress,\n position = 'bottom-right',\n size = 'md',\n actions,\n expandStyle = 'pill',\n backdropColor = 'rgba(0,0,0,0.4)',\n}: FABProps) {\n const dim = sizes[size]\n const hasActions = Array.isArray(actions) && actions.length > 0\n\n // ---------------------------------------------------------------------\n // Single-action mode (legacy path) — unchanged behavior.\n // ---------------------------------------------------------------------\n if (!hasActions) {\n return (\n <XStack\n position=\"absolute\"\n bottom={32}\n {...(positionStyles[position] as any)}\n height={dim}\n minWidth={dim}\n borderRadius={label ? '$6' : '$10'}\n backgroundColor=\"$color9\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap=\"$2\"\n paddingHorizontal={label ? '$4' : 0}\n elevation={4}\n pressStyle={{ scale: 0.95, opacity: 0.9 }}\n onPress={onPress}\n accessibilityRole=\"button\"\n accessibilityLabel={label ?? 'Action'}\n >\n {icon ? <SizableText color=\"$color1\">{icon}</SizableText> : null}\n {label ? (\n <SizableText color=\"$color1\" size=\"$4\" fontWeight=\"600\">\n {label}\n </SizableText>\n ) : null}\n </XStack>\n )\n }\n\n // ---------------------------------------------------------------------\n // Expanding mode.\n // ---------------------------------------------------------------------\n return (\n <ExpandingFab\n icon={icon}\n label={label}\n onPress={onPress}\n position={position}\n dim={dim}\n actions={actions as FABAction[]}\n expandStyle={expandStyle}\n backdropColor={backdropColor}\n />\n )\n}\n\ntype ExpandingFabProps = {\n icon?: ReactNode\n label?: string\n onPress?: () => void\n position: 'bottom-right' | 'bottom-center' | 'bottom-left'\n dim: number\n actions: FABAction[]\n expandStyle: 'pill' | 'circle'\n backdropColor: string\n}\n\nfunction ExpandingFab({\n icon,\n label,\n onPress,\n position,\n dim,\n actions,\n expandStyle,\n backdropColor,\n}: ExpandingFabProps) {\n const reduced = useReducedMotion()\n const [open, setOpen] = useState(false)\n const progress = useSharedValue(0) // 0 = closed, 1 = open\n\n // Drive `progress` from the boolean state. Reduced motion snaps; otherwise\n // tweens with a soft ease-out curve.\n useEffect(() => {\n const target = open ? 1 : 0\n if (reduced) {\n progress.value = target\n return\n }\n progress.value = withTiming(target, { duration: TWEEN_MS, easing: EASE })\n }, [open, reduced, progress])\n\n // Per-instance hardware-back handling: when open, back closes the menu\n // and stops propagation. When closed, the listener no-ops so global\n // navigation continues to work as expected.\n const openRef = useRef(open)\n useEffect(() => {\n openRef.current = open\n }, [open])\n useEffect(() => {\n const handler = (): boolean => {\n if (openRef.current) {\n setOpen(false)\n return true\n }\n return false\n }\n const sub = BackHandler.addEventListener('hardwareBackPress', handler)\n return () => sub.remove()\n }, [])\n\n const handleFabPress = useCallback(() => {\n setOpen((prev) => {\n const next = !prev\n // The legacy `onPress` (if provided) still fires on every FAB tap so\n // callers can track expand/collapse. It's intentionally a no-op-friendly\n // hook — purely additive.\n onPress?.()\n return next\n })\n }, [onPress])\n\n const handleBackdropPress = useCallback(() => {\n setOpen(false)\n }, [])\n\n const handleActionPress = useCallback((action: FABAction) => {\n action.onPress()\n setOpen(false)\n }, [])\n\n // FAB icon rotates 45deg when open. Reduced motion: skip the rotation.\n const iconStyle = useAnimatedStyle(() => ({\n transform: [\n { rotate: reduced ? '0deg' : `${progress.value * 45}deg` },\n ],\n }))\n\n // Pill-style morph: width interpolates from `dim` (circle) to PILL_OPEN_WIDTH.\n // Circle-style: width stays at `dim`.\n const fabContainerStyle = useAnimatedStyle(() => {\n if (expandStyle === 'circle' || reduced) {\n return { width: dim }\n }\n const width = dim + (PILL_OPEN_WIDTH - dim) * progress.value\n return { width }\n })\n\n // The morph label fades in alongside the rotated icon when expanding into a pill.\n const morphLabelStyle = useAnimatedStyle(() => ({\n opacity: expandStyle === 'pill' && !reduced ? progress.value : 0,\n }))\n\n // Backdrop opacity tracks `progress`. We render unconditionally while\n // open; the press surface stays mounted for the duration of the close\n // tween so taps during the tween still close cleanly.\n const backdropStyle = useAnimatedStyle(() => ({\n opacity: progress.value,\n }))\n\n // We can't read `progress.value` outside a worklet for render-gating, so we\n // mount the backdrop whenever `open` is true and let `FadeOut` carry it\n // out. Reduced-motion users get an instant unmount via the conditional.\n const renderBackdrop = open\n const morphLabel = label ?? 'Add'\n\n return (\n <>\n {renderBackdrop ? (\n <Animated.View\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close menu\"\n entering={reduced ? undefined : FadeIn.duration(TWEEN_MS)}\n exiting={reduced ? undefined : FadeOut.duration(TWEEN_MS)}\n style={[\n {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor:\n backdropColor === 'transparent' ? 'transparent' : backdropColor,\n },\n backdropStyle,\n ]}\n >\n <Pressable\n style={{ flex: 1 }}\n onPress={handleBackdropPress}\n accessibilityLabel=\"Close menu\"\n accessibilityRole=\"button\"\n />\n </Animated.View>\n ) : null}\n\n {/* Action chips — fan out vertically above the FAB. */}\n {open ? (\n <YStack\n position=\"absolute\"\n bottom={32 + dim + 16}\n {...(positionStyles[position] as any)}\n gap={12}\n alignItems=\"flex-end\"\n >\n {actions.map((action, i) => (\n <Animated.View\n key={action.id}\n entering={\n reduced\n ? undefined\n : FadeInDown.delay(i * 50).duration(220).springify().damping(18)\n }\n exiting={\n reduced\n ? undefined\n : FadeOutDown.delay((actions.length - 1 - i) * 30).duration(150)\n }\n >\n <XStack\n gap={12}\n alignItems=\"center\"\n accessibilityRole=\"button\"\n accessibilityLabel={action.label}\n onPress={() => handleActionPress(action)}\n pressStyle={{ opacity: 0.85, scale: 0.98 }}\n >\n <XStack\n paddingHorizontal={12}\n paddingVertical={8}\n borderRadius={999}\n backgroundColor=\"$color2\"\n elevation={2}\n >\n <SizableText size=\"$3\" fontWeight=\"600\" color=\"$color12\">\n {action.label}\n </SizableText>\n </XStack>\n <XStack\n width={40}\n height={40}\n borderRadius={999}\n backgroundColor={action.accent ?? '$color9'}\n alignItems=\"center\"\n justifyContent=\"center\"\n elevation={3}\n >\n <SizableText color=\"$color1\">{action.icon}</SizableText>\n </XStack>\n </XStack>\n </Animated.View>\n ))}\n </YStack>\n ) : null}\n\n {/* The FAB itself. */}\n <Animated.View\n style={[\n {\n position: 'absolute',\n bottom: 32,\n height: dim,\n borderRadius: dim / 2,\n elevation: 4,\n },\n positionStyles[position] as object,\n fabContainerStyle,\n ]}\n >\n <XStack\n flex={1}\n height={dim}\n borderRadius={dim / 2}\n backgroundColor=\"$color9\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap=\"$2\"\n paddingHorizontal={expandStyle === 'pill' ? '$3' : 0}\n pressStyle={{ scale: 0.95, opacity: 0.9 }}\n onPress={handleFabPress}\n accessibilityRole=\"button\"\n accessibilityLabel={open ? 'Close menu' : (label ?? 'Open menu')}\n accessibilityState={{ expanded: open }}\n >\n <Animated.View style={iconStyle}>\n {icon ? <SizableText color=\"$color1\">{icon}</SizableText> : null}\n </Animated.View>\n {expandStyle === 'pill' ? (\n <Animated.View style={morphLabelStyle}>\n <SizableText\n color=\"$color1\"\n size=\"$4\"\n fontWeight=\"600\"\n numberOfLines={1}\n >\n {morphLabel}\n </SizableText>\n </Animated.View>\n ) : null}\n </XStack>\n </Animated.View>\n </>\n )\n}\n","import { type ReactNode } from 'react'\nimport { Sheet, SizableText, XStack, YStack } from 'tamagui'\n\nexport type ActionSheetItem = { id: string; label: string; icon?: ReactNode; destructive?: boolean }\nexport type ActionSheetProps = {\n open: boolean; onOpenChange: (open: boolean) => void; title?: string\n items: ActionSheetItem[]; onSelect: (id: string) => void; cancelLabel?: string\n zIndex?: number\n}\n\nexport function ActionSheet({ open, onOpenChange, title, items, onSelect, cancelLabel = 'Cancel', zIndex = 100_000 }: ActionSheetProps) {\n return (\n <Sheet\n modal\n forceRemoveScrollEnabled={open}\n open={open}\n onOpenChange={onOpenChange}\n snapPoints={[50]}\n dismissOnSnapToBottom\n zIndex={zIndex}\n animation=\"medium\"\n >\n <Sheet.Overlay animation=\"lazy\" enterStyle={{ opacity: 0 }} exitStyle={{ opacity: 0 }} />\n <Sheet.Handle />\n <Sheet.Frame>\n {title && <SizableText size=\"$3\" color=\"$color8\" textAlign=\"center\" paddingTop=\"$3\" paddingBottom=\"$1\">{title}</SizableText>}\n <YStack paddingHorizontal=\"$3\" paddingTop=\"$2\">\n {items.map(item => (\n <XStack key={item.id} height={52} alignItems=\"center\" gap=\"$3\" paddingHorizontal=\"$3\" borderRadius=\"$4\"\n pressStyle={{ backgroundColor: '$color3' }} onPress={() => { onSelect(item.id); onOpenChange(false) }}>\n {item.icon && <SizableText size=\"$5\">{item.icon}</SizableText>}\n <SizableText size=\"$5\" flex={1} color={item.destructive ? '$red9' : '$color12'}\n fontWeight={item.destructive ? '600' : '400'}>{item.label}</SizableText>\n </XStack>\n ))}\n </YStack>\n <YStack paddingHorizontal=\"$3\" paddingVertical=\"$3\" borderTopWidth={1} borderTopColor=\"$borderColor\" marginTop=\"$2\">\n <XStack height={48} alignItems=\"center\" justifyContent=\"center\" borderRadius=\"$4\"\n pressStyle={{ backgroundColor: '$color3' }} onPress={() => onOpenChange(false)}>\n <SizableText size=\"$5\" fontWeight=\"600\" color=\"$color9\">{cancelLabel}</SizableText>\n </XStack>\n </YStack>\n </Sheet.Frame>\n </Sheet>\n )\n}\n","import { YStack } from 'tamagui'\n\nexport type SkeletonProps = { width?: number | string; height?: number; borderRadius?: number; variant?: 'text' | 'circular' | 'rectangular' }\n\nexport function Skeleton({ width, height, borderRadius, variant = 'rectangular' }: SkeletonProps) {\n const size = variant === 'circular' ? (height ?? 40) : height\n const w = variant === 'text' ? (width ?? '100%') : width\n const h = variant === 'text' ? (height ?? 16) : size\n const r = variant === 'circular' ? 9999 : (borderRadius ?? 8)\n return <YStack width={w as any} height={h} borderRadius={r} backgroundColor=\"$color3\" opacity={0.6} animation=\"slow\" enterStyle={{ opacity: 0.3 }} exitStyle={{ opacity: 0.3 }} />\n}\n","import { type ReactNode } from 'react'\nimport { SizableText, XStack, YStack } from 'tamagui'\n\nexport type NotificationBannerProps = {\n title: string; message?: string; variant?: 'info' | 'success' | 'warning' | 'error'\n onPress?: () => void; onDismiss?: () => void; icon?: ReactNode\n}\n\nconst variantColors = {\n info: { bg: '$blue3', text: '$blue11' }, success: { bg: '$green3', text: '$green11' },\n warning: { bg: '$yellow3', text: '$yellow11' }, error: { bg: '$red3', text: '$red11' },\n}\n\nexport function NotificationBanner({ title, message, variant = 'info', onPress, onDismiss, icon }: NotificationBannerProps) {\n const colors = variantColors[variant]\n return (\n <XStack backgroundColor={colors.bg} padding=\"$3\" borderRadius=\"$4\" gap=\"$3\" alignItems=\"flex-start\"\n onPress={onPress} pressStyle={onPress ? { opacity: 0.8 } : undefined}>\n {icon && <YStack paddingTop=\"$0.5\">{icon}</YStack>}\n <YStack flex={1} gap=\"$1\">\n <SizableText size=\"$4\" fontWeight=\"600\" color={colors.text}>{title}</SizableText>\n {message && <SizableText size=\"$3\" color={colors.text} opacity={0.8}>{message}</SizableText>}\n </YStack>\n {onDismiss && <SizableText size=\"$3\" color={colors.text} opacity={0.6} onPress={onDismiss} padding=\"$1\">{'\\u2715'}</SizableText>}\n </XStack>\n )\n}\n","import { Circle, SizableText, XStack, YStack } from 'tamagui'\n\nexport type ProgressStepsProps = { steps: string[]; currentStep: number; variant?: 'dots' | 'bar' | 'numbered' }\n\nexport function ProgressSteps({ steps, currentStep, variant = 'dots' }: ProgressStepsProps) {\n if (variant === 'bar') {\n const progress = steps.length > 1 ? (currentStep / (steps.length - 1)) * 100 : 100\n return (\n <YStack gap=\"$2\">\n <YStack height={4} backgroundColor=\"$color4\" borderRadius={2} overflow=\"hidden\">\n <YStack height={4} width={`${progress}%`} backgroundColor=\"$color9\" borderRadius={2} animation=\"quick\" />\n </YStack>\n <XStack justifyContent=\"space-between\">\n {steps.map((label, i) => <SizableText key={i} size=\"$2\" color={i <= currentStep ? '$color9' : '$color8'}>{label}</SizableText>)}\n </XStack>\n </YStack>\n )\n }\n return (\n <XStack alignItems=\"center\" justifyContent=\"center\" gap=\"$0\">\n {steps.map((label, i) => (\n <XStack key={i} alignItems=\"center\" gap=\"$0\">\n <YStack alignItems=\"center\" gap=\"$1.5\">\n <Circle size={variant === 'numbered' ? 28 : 10} backgroundColor={i <= currentStep ? '$color9' : '$color4'} animation=\"quick\">\n {variant === 'numbered' && <SizableText size=\"$2\" fontWeight=\"600\" color={i <= currentStep ? '$color1' : '$color8'}>{i + 1}</SizableText>}\n </Circle>\n <SizableText size=\"$1\" color={i <= currentStep ? '$color11' : '$color8'} numberOfLines={1}>{label}</SizableText>\n </YStack>\n {i < steps.length - 1 && <YStack height={2} width={32} backgroundColor={i < currentStep ? '$color9' : '$color4'} marginBottom=\"$4\" />}\n </XStack>\n ))}\n </XStack>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport { Button, SizableText, XStack, YStack } from 'tamagui'\n\nexport type SwipeAction = { id: string; label: string; color: string; onPress: () => void }\nexport type SwipeableRowProps = { children: ReactNode; leftActions?: SwipeAction[]; rightActions?: SwipeAction[] }\n\nexport function SwipeableRow({ children, leftActions, rightActions }: SwipeableRowProps) {\n const [showActions, setShowActions] = useState(false)\n const actions = [...(leftActions ?? []), ...(rightActions ?? [])]\n if (actions.length === 0) return <>{children}</>\n return (\n <YStack>\n <YStack onLongPress={() => setShowActions(v => !v)} pressStyle={{ opacity: 0.9 }}>{children}</YStack>\n {showActions && (\n <XStack gap=\"$2\" padding=\"$2\" animation=\"quick\" enterStyle={{ opacity: 0, scale: 0.95 }}>\n {actions.map(action => (\n <Button key={action.id} flex={1} size=\"$3\" backgroundColor={action.color} borderRadius=\"$3\"\n onPress={() => { action.onPress(); setShowActions(false) }}>\n <SizableText size=\"$2\" fontWeight=\"600\" color=\"white\">{action.label}</SizableText>\n </Button>\n ))}\n </XStack>\n )}\n </YStack>\n )\n}\n","import { Image, SizableText, XStack, YStack } from 'tamagui'\nimport { LinearGradient } from 'tamagui/linear-gradient'\n\nexport type MediaCardProps = {\n image: string; title: string; subtitle?: string\n overlay?: 'gradient' | 'dark' | 'none'; aspectRatio?: number\n onPress?: () => void; badge?: string\n}\n\nexport function MediaCard({ image, title, subtitle, overlay = 'gradient', aspectRatio = 16 / 9, onPress, badge }: MediaCardProps) {\n return (\n <YStack borderRadius=\"$4\" overflow=\"hidden\" onPress={onPress}\n pressStyle={onPress ? { scale: 0.98, opacity: 0.9 } : undefined} animation=\"quick\">\n <YStack aspectRatio={aspectRatio}>\n <Image source={{ uri: image }} width=\"100%\" height=\"100%\" objectFit=\"cover\" />\n {overlay === 'gradient' && (\n <LinearGradient colors={['transparent', 'rgba(0,0,0,0.7)']} start={[0, 0]} end={[0, 1]}\n position=\"absolute\" bottom={0} left={0} right={0} height=\"60%\" />\n )}\n {overlay === 'dark' && <YStack position=\"absolute\" fullscreen backgroundColor=\"rgba(0,0,0,0.4)\" />}\n {badge && (\n <XStack position=\"absolute\" top=\"$2\" right=\"$2\" backgroundColor=\"$color9\"\n paddingHorizontal=\"$2\" paddingVertical=\"$1\" borderRadius=\"$2\">\n <SizableText size=\"$1\" fontWeight=\"600\" color=\"$color1\">{badge}</SizableText>\n </XStack>\n )}\n <YStack position=\"absolute\" bottom={0} left={0} right={0} padding=\"$3\" gap=\"$1\">\n <SizableText size=\"$5\" fontWeight=\"600\" color=\"white\">{title}</SizableText>\n {subtitle && <SizableText size=\"$3\" color=\"rgba(255,255,255,0.8)\">{subtitle}</SizableText>}\n </YStack>\n </YStack>\n </YStack>\n )\n}\n","import { Children, useState, type ReactNode } from 'react'\nimport { Circle, XStack, YStack } from 'tamagui'\nimport { ScrollView } from 'react-native'\nimport type { NativeScrollEvent, NativeSyntheticEvent } from 'react-native'\n\nexport type CarouselProps = { children: ReactNode; gap?: string; snapToInterval?: number; showIndicators?: boolean }\n\nexport function Carousel({ children, gap = '$3', snapToInterval, showIndicators = false }: CarouselProps) {\n const [activeIndex, setActiveIndex] = useState(0)\n const count = Children.count(children)\n const gapPx = gap === '$2' ? 8 : gap === '$3' ? 12 : 16\n return (\n <YStack gap=\"$3\">\n <ScrollView horizontal showsHorizontalScrollIndicator={false} snapToInterval={snapToInterval} decelerationRate=\"fast\"\n contentContainerStyle={{ gap: gapPx, paddingHorizontal: 16 }}\n onMomentumScrollEnd={(e: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (snapToInterval) setActiveIndex(Math.round(e.nativeEvent.contentOffset.x / snapToInterval))\n }}>\n {children}\n </ScrollView>\n {showIndicators && count > 1 && (\n <XStack justifyContent=\"center\" gap=\"$1.5\">\n {Array.from({ length: count }, (_, i) => (\n <Circle key={i} size={6} backgroundColor={i === activeIndex ? '$color9' : '$color4'} animation=\"quick\" />\n ))}\n </XStack>\n )}\n </YStack>\n )\n}\n","import { type ReactNode } from 'react'\nimport { YStack } from 'tamagui'\nimport { RefreshControl, ScrollView } from 'react-native'\n\nexport type PullToRefreshProps = { children: ReactNode; onRefresh: () => void; refreshing?: boolean }\n\nexport function PullToRefresh({ children, onRefresh, refreshing = false }: PullToRefreshProps) {\n return (\n <ScrollView contentContainerStyle={{ flexGrow: 1 }}\n refreshControl={<RefreshControl refreshing={refreshing} onRefresh={onRefresh} />}>\n <YStack flex={1}>{children}</YStack>\n </ScrollView>\n )\n}\n","import { Button, Image, SizableText, XStack, YStack } from 'tamagui'\n\nexport type ProductCardProps = {\n image: string\n title: string\n price: string\n originalPrice?: string\n rating?: number\n reviewCount?: number\n badge?: string\n onPress?: () => void\n onAddToCart?: () => void\n variant?: 'vertical' | 'horizontal'\n}\n\nfunction Stars({ rating = 0 }: { rating?: number }) {\n return (\n <XStack gap=\"$0.5\">\n {Array.from({ length: 5 }, (_, i) => (\n <SizableText key={i} size=\"$2\" color={i < Math.round(rating) ? '$yellow9' : '$color5'}>★</SizableText>\n ))}\n </XStack>\n )\n}\n\nfunction CardContent({ title, price, originalPrice, rating, reviewCount, onAddToCart }: Omit<ProductCardProps, 'image' | 'badge' | 'onPress' | 'variant'>) {\n return (\n <YStack flex={1} gap=\"$1.5\" justifyContent=\"space-between\">\n <YStack gap=\"$1\">\n <SizableText size=\"$4\" fontWeight=\"600\" numberOfLines={2}>{title}</SizableText>\n {rating !== undefined && (\n <XStack gap=\"$1.5\" alignItems=\"center\">\n <Stars rating={rating} />\n {reviewCount !== undefined && <SizableText size=\"$2\" color=\"$color9\">({reviewCount})</SizableText>}\n </XStack>\n )}\n </YStack>\n <XStack alignItems=\"center\" justifyContent=\"space-between\">\n <XStack gap=\"$2\" alignItems=\"baseline\">\n <SizableText size=\"$6\" fontWeight=\"700\">{price}</SizableText>\n {originalPrice && (\n <SizableText size=\"$3\" color=\"$color8\" textDecorationLine=\"line-through\">{originalPrice}</SizableText>\n )}\n </XStack>\n {onAddToCart && (\n <Button size=\"$3\" backgroundColor=\"$color9\" color=\"$color1\" borderRadius=\"$10\"\n onPress={(e: any) => { e.stopPropagation?.(); onAddToCart() }}\n pressStyle={{ backgroundColor: '$color8', scale: 0.95 }} animation=\"quick\">\n + Cart\n </Button>\n )}\n </XStack>\n </YStack>\n )\n}\n\nexport function ProductCard({ image, title, price, originalPrice, rating, reviewCount, badge, onPress, onAddToCart, variant = 'vertical' }: ProductCardProps) {\n const isHorizontal = variant === 'horizontal'\n const Wrapper = isHorizontal ? XStack : YStack\n\n return (\n <Wrapper backgroundColor=\"$color1\" borderRadius=\"$5\" overflow=\"hidden\" borderWidth={1}\n borderColor=\"$color4\" onPress={onPress} animation=\"quick\"\n pressStyle={onPress ? { scale: 0.98, opacity: 0.9 } : undefined}\n {...(isHorizontal ? { height: 140 } : {})}>\n <YStack {...(isHorizontal ? { width: 140 } : { aspectRatio: 4 / 3 })} position=\"relative\">\n <Image source={{ uri: image }} width=\"100%\" height=\"100%\" objectFit=\"cover\" />\n {badge && (\n <XStack position=\"absolute\" top=\"$2\" left=\"$2\" backgroundColor=\"$red9\"\n paddingHorizontal=\"$2\" paddingVertical=\"$1\" borderRadius=\"$10\">\n <SizableText size=\"$1\" fontWeight=\"700\" color=\"white\">{badge}</SizableText>\n </XStack>\n )}\n </YStack>\n <YStack flex={1} padding=\"$3\">\n <CardContent {...{ title, price, originalPrice, rating, reviewCount, onAddToCart }} />\n </YStack>\n </Wrapper>\n )\n}\n","import { Button, Circle, SizableText, XStack, YStack } from 'tamagui'\n\nexport type PricingPlan = {\n id: string\n name: string\n price: string\n period?: string\n description?: string\n features: { label: string; included: boolean }[]\n popular?: boolean\n cta?: string\n trial?: string\n}\n\nexport type PricingTableProps = {\n plans: PricingPlan[]\n selectedPlan?: string\n onSelectPlan?: (planId: string) => void\n annual?: boolean\n onToggleBilling?: (annual: boolean) => void\n onContinue?: () => void\n continueLabel?: string\n reassurance?: string\n}\n\nfunction BillingToggle({ annual, onToggle }: { annual: boolean; onToggle: (v: boolean) => void }) {\n return (\n <XStack alignSelf=\"center\" backgroundColor=\"$color3\" borderRadius=\"$10\" padding=\"$1\" gap=\"$0.5\">\n {(['Monthly', 'Annual'] as const).map((label, i) => {\n const active = i === 1 ? annual : !annual\n return (\n <XStack\n key={label}\n paddingHorizontal=\"$4\"\n paddingVertical=\"$2\"\n borderRadius=\"$10\"\n backgroundColor={active ? '$color9' : 'transparent'}\n onPress={() => onToggle(i === 1)}\n pressStyle={{ opacity: 0.8 }}\n animation=\"quick\"\n >\n <SizableText size=\"$3\" fontWeight=\"600\" color={active ? '$color1' : '$color10'}>{label}</SizableText>\n </XStack>\n )\n })}\n </XStack>\n )\n}\n\nfunction PlanRow({ plan, selected, onSelect }: { plan: PricingPlan; selected: boolean; onSelect: () => void }) {\n return (\n <XStack\n padding=\"$4\"\n borderRadius=\"$6\"\n borderWidth={2}\n borderColor={selected ? '$color9' : '$color4'}\n backgroundColor={selected ? '$color2' : '$color1'}\n alignItems=\"center\"\n gap=\"$3\"\n onPress={onSelect}\n pressStyle={{ scale: 0.98, opacity: 0.9 }}\n animation=\"quick\"\n cursor=\"pointer\"\n position=\"relative\"\n >\n {plan.popular && (\n <XStack position=\"absolute\" top={-10} right={12} backgroundColor=\"$color9\" paddingHorizontal=\"$2.5\" paddingVertical={2} borderRadius=\"$10\">\n <SizableText size=\"$1\" fontWeight=\"700\" color=\"$color1\">BEST VALUE</SizableText>\n </XStack>\n )}\n <Circle\n size={22}\n borderWidth={2}\n borderColor={selected ? '$color9' : '$color6'}\n backgroundColor={selected ? '$color9' : 'transparent'}\n >\n {selected && <Circle size={8} backgroundColor=\"$color1\" />}\n </Circle>\n <YStack flex={1} gap=\"$0.5\">\n <XStack alignItems=\"center\" gap=\"$2\">\n <SizableText size=\"$5\" fontWeight=\"700\">{plan.name}</SizableText>\n {plan.trial && (\n <XStack backgroundColor=\"$green3\" paddingHorizontal=\"$2\" paddingVertical={2} borderRadius=\"$10\">\n <SizableText size=\"$1\" fontWeight=\"700\" color=\"$green9\">{plan.trial}</SizableText>\n </XStack>\n )}\n </XStack>\n {plan.description && <SizableText size=\"$2\" color=\"$color10\">{plan.description}</SizableText>}\n </YStack>\n <SizableText size=\"$5\" fontWeight=\"800\">{plan.price}</SizableText>\n </XStack>\n )\n}\n\nfunction FeatureList({ features }: { features: { label: string; included: boolean }[] }) {\n return (\n <YStack gap=\"$2.5\" paddingHorizontal=\"$1\">\n {features.map((f, i) => (\n <XStack key={i} gap=\"$2.5\" alignItems=\"center\">\n <Circle size={20} backgroundColor={f.included ? '$green3' : '$color3'}>\n <SizableText size=\"$1\" fontWeight=\"700\" color={f.included ? '$green9' : '$color8'}>\n {f.included ? '✓' : '—'}\n </SizableText>\n </Circle>\n <SizableText size=\"$3\" color={f.included ? '$color11' : '$color8'} flex={1}>{f.label}</SizableText>\n </XStack>\n ))}\n </YStack>\n )\n}\n\nexport function PricingTable({ plans, selectedPlan, onSelectPlan, annual = false, onToggleBilling, onContinue, continueLabel, reassurance }: PricingTableProps) {\n const selected = selectedPlan ?? plans.find((p) => p.popular)?.id ?? plans[0]?.id\n const activePlan = plans.find((p) => p.id === selected)\n return (\n <YStack gap=\"$4\">\n {onToggleBilling && <BillingToggle annual={annual} onToggle={onToggleBilling} />}\n\n {activePlan && activePlan.features.length > 0 && (\n <YStack backgroundColor=\"$color1\" borderRadius=\"$6\" padding=\"$4\" gap=\"$3\" borderWidth={1} borderColor=\"$color4\">\n <FeatureList features={activePlan.features} />\n </YStack>\n )}\n\n <YStack gap=\"$3\">\n {plans.map((plan) => (\n <PlanRow\n key={plan.id}\n plan={plan}\n selected={selected === plan.id}\n onSelect={() => onSelectPlan?.(plan.id)}\n />\n ))}\n </YStack>\n\n {reassurance && <SizableText size=\"$2\" color=\"$color10\" textAlign=\"center\">{reassurance}</SizableText>}\n\n {onContinue && (\n <Button\n size=\"$5\"\n backgroundColor=\"$color9\"\n color=\"$color1\"\n borderRadius=\"$10\"\n fontWeight=\"700\"\n onPress={onContinue}\n pressStyle={{ scale: 0.97, backgroundColor: '$color8' }}\n animation=\"quick\"\n >\n {continueLabel ?? activePlan?.cta ?? 'Get Started'}\n </Button>\n )}\n </YStack>\n )\n}\n","import { useState, useEffect, useRef, useCallback } from 'react'\nimport { SizableText, XStack, YStack } from 'tamagui'\n\nexport type CountdownBannerProps = {\n endTime?: Date\n minutes?: number\n label?: string\n onExpire?: () => void\n variant?: 'banner' | 'compact' | 'badge'\n}\n\nfunction useCountdown(endTime?: Date, minutes?: number, onExpire?: () => void) {\n const getRemaining = useCallback(() => {\n if (endTime) return Math.max(0, Math.floor((endTime.getTime() - Date.now()) / 1000))\n return 0\n }, [endTime])\n\n const [seconds, setSeconds] = useState(() => endTime ? getRemaining() : (minutes ?? 0) * 60)\n const firedRef = useRef(false)\n\n useEffect(() => {\n if (endTime) setSeconds(getRemaining())\n else setSeconds((minutes ?? 0) * 60)\n firedRef.current = false\n }, [endTime, minutes, getRemaining])\n\n useEffect(() => {\n if (seconds <= 0) return\n const id = setInterval(() => {\n setSeconds((s) => {\n const next = endTime ? Math.max(0, Math.floor((endTime.getTime() - Date.now()) / 1000)) : s - 1\n if (next <= 0 && !firedRef.current) { firedRef.current = true; onExpire?.() }\n return Math.max(0, next)\n })\n }, 1000)\n return () => clearInterval(id)\n }, [seconds > 0, endTime, onExpire])\n\n const hh = String(Math.floor(seconds / 3600)).padStart(2, '0')\n const mm = String(Math.floor((seconds % 3600) / 60)).padStart(2, '0')\n const ss = String(seconds % 60).padStart(2, '0')\n const display = seconds >= 3600 ? `${hh}:${mm}:${ss}` : `${mm}:${ss}`\n return { display, expired: seconds <= 0 }\n}\n\nfunction TimeBox({ value }: { value: string }) {\n return (\n <XStack backgroundColor=\"rgba(0,0,0,0.15)\" paddingHorizontal=\"$2\" paddingVertical=\"$1\" borderRadius=\"$3\">\n <SizableText size=\"$6\" fontWeight=\"800\" color=\"white\" fontFamily=\"$mono\">{value}</SizableText>\n </XStack>\n )\n}\n\nexport function CountdownBanner({ endTime, minutes, label = 'Offer ends in', onExpire, variant = 'banner' }: CountdownBannerProps) {\n const { display, expired } = useCountdown(endTime, minutes, onExpire)\n if (expired) return null\n\n const parts = display.split(':')\n\n if (variant === 'badge') {\n return (\n <XStack backgroundColor=\"$red9\" paddingHorizontal=\"$2.5\" paddingVertical=\"$1\" borderRadius=\"$10\" gap=\"$1.5\" alignItems=\"center\">\n <SizableText size=\"$1\" fontWeight=\"600\" color=\"white\">{label}</SizableText>\n <SizableText size=\"$2\" fontWeight=\"800\" color=\"white\" fontFamily=\"$mono\">{display}</SizableText>\n </XStack>\n )\n }\n\n if (variant === 'compact') {\n return (\n <XStack backgroundColor=\"$red3\" paddingHorizontal=\"$3\" paddingVertical=\"$2\" borderRadius=\"$4\" gap=\"$2\" alignItems=\"center\" alignSelf=\"center\">\n <SizableText size=\"$3\" fontWeight=\"600\" color=\"$red9\">{label}</SizableText>\n <SizableText size=\"$5\" fontWeight=\"800\" color=\"$red9\" fontFamily=\"$mono\">{display}</SizableText>\n </XStack>\n )\n }\n\n return (\n <YStack backgroundColor=\"$red9\" paddingVertical=\"$3\" paddingHorizontal=\"$4\" gap=\"$1.5\" alignItems=\"center\">\n <SizableText size=\"$3\" fontWeight=\"600\" color=\"white\" opacity={0.9}>{label}</SizableText>\n <XStack gap=\"$1.5\" alignItems=\"center\">\n {parts.map((p, i) => (\n <XStack key={i} gap=\"$1.5\" alignItems=\"center\">\n {i > 0 && <SizableText size=\"$6\" fontWeight=\"800\" color=\"white\">:</SizableText>}\n <TimeBox value={p} />\n </XStack>\n ))}\n </XStack>\n </YStack>\n )\n}\n","import { Image, SizableText, XStack, YStack } from 'tamagui'\n\nexport type TestimonialCardProps = {\n quote: string\n author: string\n role?: string\n avatar?: string\n rating?: number\n variant?: 'card' | 'minimal' | 'featured'\n}\n\nfunction Stars({ count = 0 }: { count?: number }) {\n if (!count) return null\n return (\n <XStack gap=\"$0.5\">\n {Array.from({ length: 5 }, (_, i) => (\n <SizableText key={i} size=\"$3\" color={i < Math.round(count) ? '$yellow9' : '$color5'}>★</SizableText>\n ))}\n </XStack>\n )\n}\n\nfunction AuthorRow({ author, role, avatar }: Pick<TestimonialCardProps, 'author' | 'role' | 'avatar'>) {\n return (\n <XStack gap=\"$2.5\" alignItems=\"center\">\n {avatar && (\n <Image source={{ uri: avatar }} width={36} height={36} borderRadius={18} objectFit=\"cover\" />\n )}\n <YStack>\n <SizableText size=\"$3\" fontWeight=\"600\">{author}</SizableText>\n {role && <SizableText size=\"$2\" color=\"$color9\">{role}</SizableText>}\n </YStack>\n </XStack>\n )\n}\n\nexport function TestimonialCard({ quote, author, role, avatar, rating, variant = 'card' }: TestimonialCardProps) {\n if (variant === 'minimal') {\n return (\n <YStack gap=\"$3\" paddingVertical=\"$2\">\n <Stars count={rating} />\n <SizableText size=\"$4\" color=\"$color11\" fontStyle=\"italic\" lineHeight={24}>\"{quote}\"</SizableText>\n <AuthorRow author={author} role={role} avatar={avatar} />\n </YStack>\n )\n }\n\n if (variant === 'featured') {\n return (\n <YStack backgroundColor=\"$color3\" padding=\"$5\" borderRadius=\"$6\" gap=\"$4\" alignItems=\"center\">\n <SizableText size=\"$8\" color=\"$color9\" opacity={0.3} fontWeight=\"800\">\"</SizableText>\n <Stars count={rating} />\n <SizableText size=\"$5\" color=\"$color12\" fontStyle=\"italic\" textAlign=\"center\" lineHeight={28}>\n \"{quote}\"\n </SizableText>\n <AuthorRow author={author} role={role} avatar={avatar} />\n </YStack>\n )\n }\n\n return (\n <YStack backgroundColor=\"$color1\" padding=\"$4\" borderRadius=\"$5\" borderWidth={1}\n borderColor=\"$color4\" gap=\"$3\">\n <Stars count={rating} />\n <SizableText size=\"$4\" color=\"$color11\" fontStyle=\"italic\" lineHeight={24}>\"{quote}\"</SizableText>\n <AuthorRow author={author} role={role} avatar={avatar} />\n </YStack>\n )\n}\n","import type { ReactNode } from 'react'\nimport { AlertDialog, Button, SizableText, XStack, YStack } from 'tamagui'\n\nexport type ConfirmDialogProps = {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: string\n description?: string\n confirmLabel?: string\n cancelLabel?: string\n onConfirm?: () => void\n onCancel?: () => void\n destructive?: boolean\n icon?: ReactNode\n}\n\nexport function ConfirmDialog({\n open, onOpenChange, title, description,\n confirmLabel = 'Confirm', cancelLabel = 'Cancel',\n onConfirm, onCancel, destructive = false, icon,\n}: ConfirmDialogProps) {\n const handleCancel = () => { onCancel?.(); onOpenChange(false) }\n const handleConfirm = () => { onConfirm?.(); onOpenChange(false) }\n\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialog.Portal>\n <AlertDialog.Overlay key=\"overlay\" opacity={0.5}\n enterStyle={{ opacity: 0 }} exitStyle={{ opacity: 0 }} animation=\"quick\" />\n <AlertDialog.Content key=\"content\" bordered elevate width=\"90%\" maxWidth={400}\n enterStyle={{ y: -20, opacity: 0, scale: 0.9 }}\n exitStyle={{ y: 10, opacity: 0, scale: 0.95 }}\n x={0} y={0} scale={1} opacity={1} animation=\"quick\">\n <YStack gap=\"$4\" padding=\"$4\">\n {icon && <YStack alignItems=\"center\">{icon}</YStack>}\n <YStack gap=\"$2\" alignItems={icon ? 'center' : 'flex-start'}>\n <AlertDialog.Title size=\"$6\" fontWeight=\"700\">{title}</AlertDialog.Title>\n {description && (\n <AlertDialog.Description size=\"$3\" color=\"$color10\"\n textAlign={icon ? 'center' : 'left'}>\n {description}\n </AlertDialog.Description>\n )}\n </YStack>\n <XStack gap=\"$3\" justifyContent=\"flex-end\">\n <Button flex={1} size=\"$4\" borderRadius=\"$4\" variant=\"outlined\"\n borderColor=\"$color7\" onPress={handleCancel}\n pressStyle={{ opacity: 0.7 }} animation=\"quick\">\n <SizableText fontWeight=\"600\">{cancelLabel}</SizableText>\n </Button>\n <Button flex={1} size=\"$4\" borderRadius=\"$4\"\n backgroundColor={destructive ? '$red9' : '$color9'}\n onPress={handleConfirm}\n pressStyle={{ backgroundColor: destructive ? '$red8' : '$color8', scale: 0.97 }}\n animation=\"quick\">\n <SizableText fontWeight=\"600\" color=\"white\">{confirmLabel}</SizableText>\n </Button>\n </XStack>\n </YStack>\n </AlertDialog.Content>\n </AlertDialog.Portal>\n </AlertDialog>\n )\n}\n","import { type ReactNode, useCallback } from 'react'\nimport { SizableText, XStack } from 'tamagui'\n\nexport type ChipProps = {\n label: string\n selected?: boolean\n onPress?: () => void\n onRemove?: () => void\n variant?: 'filled' | 'outlined'\n size?: 'sm' | 'md' | 'lg'\n icon?: ReactNode\n color?: string\n}\n\nexport type ChipGroupProps = {\n chips: { id: string; label: string; icon?: ReactNode }[]\n selected?: string[]\n onSelectionChange?: (selected: string[]) => void\n multiSelect?: boolean\n variant?: 'filled' | 'outlined'\n size?: 'sm' | 'md' | 'lg'\n}\n\nconst sizes = { sm: { h: 28, px: '$2', text: '$2' }, md: { h: 34, px: '$3', text: '$3' }, lg: { h: 42, px: '$4', text: '$4' } } as const\n\nexport function Chip({ label, selected, onPress, onRemove, variant = 'filled', size = 'md', icon, color }: ChipProps) {\n const s = sizes[size]\n const filled = variant === 'filled'\n const active = selected ?? false\n const bg = active ? (color ?? '$color9') : filled ? '$color3' : 'transparent'\n const border = active ? (color ?? '$color9') : '$color6'\n const fg = active ? '$color1' : '$color11'\n\n return (\n <XStack\n height={s.h} borderRadius=\"$10\" paddingHorizontal={s.px}\n backgroundColor={bg} borderWidth={filled ? 0 : 1} borderColor={border}\n alignItems=\"center\" gap=\"$1.5\" pressStyle={{ scale: 0.96, opacity: 0.85 }}\n animation=\"quick\" onPress={onPress} cursor=\"pointer\"\n >\n {active && <SizableText size={s.text} color={fg}>✓</SizableText>}\n {icon && <SizableText color={fg}>{icon}</SizableText>}\n <SizableText size={s.text} color={fg} fontWeight=\"500\">{label}</SizableText>\n {onRemove && (\n <SizableText size=\"$2\" color={fg} opacity={0.7} pressStyle={{ opacity: 1 }}\n onPress={(e: any) => { e.stopPropagation?.(); onRemove() }} marginLeft=\"$1\">✕</SizableText>\n )}\n </XStack>\n )\n}\n\nexport function ChipGroup({ chips, selected = [], onSelectionChange, multiSelect = true, variant, size }: ChipGroupProps) {\n const toggle = useCallback((id: string) => {\n if (!onSelectionChange) return\n const isSelected = selected.includes(id)\n if (multiSelect) {\n onSelectionChange(isSelected ? selected.filter(s => s !== id) : [...selected, id])\n } else {\n onSelectionChange(isSelected ? [] : [id])\n }\n }, [selected, onSelectionChange, multiSelect])\n\n return (\n <XStack flexWrap=\"wrap\" gap=\"$2\">\n {chips.map(chip => (\n <Chip key={chip.id} label={chip.label} icon={chip.icon} selected={selected.includes(chip.id)}\n onPress={() => toggle(chip.id)} variant={variant} size={size} />\n ))}\n </XStack>\n )\n}\n","import { useCallback, useRef, useState } from 'react'\nimport { Platform, type TextInput } from 'react-native'\nimport { Input, SizableText, XStack, YStack } from 'tamagui'\n\nexport type OTPInputProps = {\n length?: number\n value?: string\n onChange?: (value: string) => void\n onComplete?: (code: string) => void\n error?: boolean\n autoFocus?: boolean\n secureEntry?: boolean\n}\n\nexport function OTPInput({ length = 6, value = '', onChange, onComplete, error, autoFocus, secureEntry }: OTPInputProps) {\n const inputRef = useRef<TextInput>(null)\n const [focused, setFocused] = useState(false)\n const digits = value.padEnd(length, ' ').slice(0, length)\n\n const handleChange = useCallback((text: string) => {\n const cleaned = text.replace(/\\D/g, '').slice(0, length)\n onChange?.(cleaned)\n if (cleaned.length === length) onComplete?.(cleaned)\n }, [length, onChange, onComplete])\n\n const focusInput = useCallback(() => {\n inputRef.current?.focus()\n }, [])\n\n return (\n <YStack position=\"relative\">\n <XStack gap=\"$2\" justifyContent=\"center\">\n {Array.from({ length }, (_, i) => {\n const char = digits[i]?.trim()\n const isCursor = focused && value.length === i\n return (\n <YStack\n key={i} width={48} height={56} borderRadius=\"$3\"\n borderWidth={2}\n borderColor={error ? '$red9' : isCursor ? '$color9' : char ? '$color7' : '$color5'}\n backgroundColor={error ? '$red2' : isCursor ? '$color2' : '$color1'}\n alignItems=\"center\" justifyContent=\"center\"\n animation=\"quick\"\n pointerEvents=\"none\"\n >\n <SizableText size=\"$7\" fontWeight=\"600\" color=\"$color12\">\n {char ? (secureEntry ? '●' : char) : ''}\n </SizableText>\n {isCursor && (\n <YStack\n position=\"absolute\" bottom={10}\n width={20} height={2}\n backgroundColor=\"$color9\"\n animation=\"quick\"\n />\n )}\n </YStack>\n )\n })}\n </XStack>\n\n {Platform.OS === 'web' ? (\n <input\n ref={inputRef as any}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n autoComplete=\"one-time-code\"\n maxLength={length}\n value={value}\n autoFocus={autoFocus}\n onChange={(e: any) => handleChange(e.target.value)}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n style={{\n position: 'absolute',\n top: 0, left: 0, right: 0, bottom: 0,\n width: '100%', height: '100%',\n opacity: 0,\n fontSize: 16,\n caretColor: 'transparent',\n cursor: 'pointer',\n }}\n />\n ) : (\n <Input\n ref={inputRef as any}\n value={value}\n onChangeText={handleChange}\n keyboardType=\"number-pad\"\n maxLength={length}\n autoFocus={autoFocus}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n position=\"absolute\"\n top={0} left={0} right={0} bottom={0}\n opacity={0}\n fontSize={16}\n />\n )}\n </YStack>\n )\n}\n","import { useState, useCallback } from 'react'\nimport { Input, SizableText, XStack, YStack } from 'tamagui'\n\nexport type PasswordInputProps = {\n value?: string\n onChangeText?: (value: string) => void\n placeholder?: string\n label?: string\n error?: string\n size?: '$3' | '$4' | '$5'\n strengthIndicator?: boolean\n}\n\nfunction getStrength(pw: string): { label: string; color: string; width: string } {\n if (!pw) return { label: '', color: '$color6', width: '0%' }\n const score = [pw.length >= 8, /[A-Z]/.test(pw), /[0-9]/.test(pw), /[^A-Za-z0-9]/.test(pw)].filter(Boolean).length\n if (score <= 1) return { label: 'Weak', color: '$red9', width: '33%' }\n if (score <= 2) return { label: 'Medium', color: '$yellow9', width: '66%' }\n return { label: 'Strong', color: '$green9', width: '100%' }\n}\n\nexport function PasswordInput({ value = '', onChangeText, placeholder = 'Password', label, error, size = '$4', strengthIndicator }: PasswordInputProps) {\n const [visible, setVisible] = useState(false)\n const toggle = useCallback(() => setVisible(v => !v), [])\n const strength = getStrength(value)\n\n return (\n <YStack gap=\"$1.5\">\n {label && <SizableText size=\"$3\" color=\"$color11\" fontWeight=\"500\">{label}</SizableText>}\n <XStack\n borderWidth={1} borderColor={error ? '$red9' : '$color6'} borderRadius=\"$3\"\n backgroundColor=\"$color2\" alignItems=\"center\" paddingRight=\"$2\"\n focusStyle={{ borderColor: '$color9' }}\n >\n <Input\n flex={1} size={size} value={value} onChangeText={onChangeText}\n placeholder={placeholder} placeholderTextColor=\"$color8\"\n secureTextEntry={!visible} backgroundColor=\"transparent\" borderWidth={0}\n />\n <SizableText\n size=\"$4\" color=\"$color8\" paddingHorizontal=\"$2\"\n pressStyle={{ opacity: 0.6 }} onPress={toggle} cursor=\"pointer\"\n >\n {visible ? '◉' : '◎'}\n </SizableText>\n </XStack>\n {strengthIndicator && value.length > 0 && (\n <YStack gap=\"$1\">\n <YStack height={3} backgroundColor=\"$color4\" borderRadius={2} overflow=\"hidden\">\n <YStack height={3} width={strength.width as any} backgroundColor={strength.color} borderRadius={2} animation=\"quick\" />\n </YStack>\n <SizableText size=\"$1\" color={strength.color}>{strength.label}</SizableText>\n </YStack>\n )}\n {error && <SizableText size=\"$2\" color=\"$red9\">{error}</SizableText>}\n </YStack>\n )\n}\n","import { Circle, Image, SizableText, XStack } from 'tamagui'\n\nexport type AvatarGroupProps = {\n avatars: { uri?: string; name?: string; color?: string }[]\n max?: number\n size?: number\n overlap?: number\n}\n\nfunction getInitials(name?: string): string {\n if (!name) return '?'\n return name.split(' ').map(p => p[0]).join('').toUpperCase().slice(0, 2)\n}\n\nfunction AvatarItem({ uri, name, color, size }: { uri?: string; name?: string; color?: string; size: number }) {\n return (\n <Circle\n size={size} backgroundColor={color ?? '$color4'} borderWidth={2} borderColor=\"$background\"\n overflow=\"hidden\" alignItems=\"center\" justifyContent=\"center\"\n >\n {uri ? (\n <Image source={{ uri }} width={size} height={size} objectFit=\"cover\" />\n ) : (\n <SizableText size=\"$2\" fontWeight=\"600\" color={color ? '$color1' : '$color11'}>\n {getInitials(name)}\n </SizableText>\n )}\n </Circle>\n )\n}\n\nexport function AvatarGroup({ avatars, max = 4, size = 36, overlap = 10 }: AvatarGroupProps) {\n const visible = avatars.slice(0, max)\n const remaining = avatars.length - max\n\n return (\n <XStack alignItems=\"center\">\n {visible.map((avatar, i) => (\n <XStack key={i} marginLeft={i === 0 ? 0 : -overlap} zIndex={visible.length - i}>\n <AvatarItem {...avatar} size={size} />\n </XStack>\n ))}\n {remaining > 0 && (\n <XStack marginLeft={-overlap} zIndex={0}>\n <Circle size={size} backgroundColor=\"$color6\" borderWidth={2} borderColor=\"$background\"\n alignItems=\"center\" justifyContent=\"center\">\n <SizableText size=\"$2\" fontWeight=\"600\" color=\"$color11\">+{remaining}</SizableText>\n </Circle>\n </XStack>\n )}\n </XStack>\n )\n}\n","import { useState, useCallback, type ReactNode } from 'react'\nimport { Circle, SizableText, XStack, YStack } from 'tamagui'\n\nexport type SwipeCardItem = { id: string; [key: string]: any }\nexport type SwipeCardsProps<T extends SwipeCardItem> = {\n items: T[]\n renderCard: (item: T) => ReactNode\n onSwipeLeft?: (item: T) => void\n onSwipeRight?: (item: T) => void\n onEmpty?: () => void\n leftLabel?: string\n rightLabel?: string\n emptyMessage?: string\n}\n\nconst STACK_SIZE = 3\nconst CARD_OFFSETS = [\n { scale: 1, y: 0, opacity: 1 },\n { scale: 0.95, y: 8, opacity: 0.9 },\n { scale: 0.9, y: 16, opacity: 0.8 },\n]\n\nexport function SwipeCards<T extends SwipeCardItem>({\n items, renderCard, onSwipeLeft, onSwipeRight, onEmpty,\n leftLabel = 'Nope', rightLabel = 'Like', emptyMessage = 'No more cards',\n}: SwipeCardsProps<T>) {\n const [index, setIndex] = useState(0)\n const [exitDir, setExitDir] = useState<'left' | 'right' | null>(null)\n\n const remaining = items.slice(index)\n const isEmpty = remaining.length === 0\n\n const handleSwipe = useCallback((dir: 'left' | 'right') => {\n if (isEmpty) return\n const current = items[index]\n if (!current) return\n setExitDir(dir)\n const timer = setTimeout(() => {\n setExitDir(null)\n setIndex((i) => {\n const next = i + 1\n if (next >= items.length) onEmpty?.()\n return next\n })\n if (dir === 'left') onSwipeLeft?.(current)\n else onSwipeRight?.(current)\n }, 250)\n return () => clearTimeout(timer)\n }, [isEmpty, index, items, onEmpty, onSwipeLeft, onSwipeRight])\n\n if (isEmpty) {\n return (\n <YStack flex={1} alignItems=\"center\" justifyContent=\"center\" gap=\"$3\" padding=\"$4\">\n <SizableText size=\"$5\" color=\"$color8\">{emptyMessage}</SizableText>\n </YStack>\n )\n }\n\n return (\n <YStack flex={1} gap=\"$4\">\n <YStack flex={1} alignItems=\"center\" justifyContent=\"center\">\n <YStack width=\"100%\" maxWidth={340} aspectRatio={3 / 4} position=\"relative\">\n {remaining.slice(0, STACK_SIZE).reverse().map((item, reverseIdx) => {\n const stackIdx = Math.min(remaining.length, STACK_SIZE) - 1 - reverseIdx\n const isTop = stackIdx === 0\n const offset = CARD_OFFSETS[stackIdx] ?? CARD_OFFSETS[2] ?? { scale: 1, y: 0, opacity: 1 }\n const exitX = exitDir === 'left' ? -400 : exitDir === 'right' ? 400 : 0\n const exitRotate = exitDir === 'left' ? '-15deg' : exitDir === 'right' ? '15deg' : '0deg'\n\n return (\n <YStack key={item.id} position=\"absolute\" top={0} left={0} right={0} bottom={0}\n animation=\"quick\" borderRadius=\"$5\" overflow=\"hidden\" backgroundColor=\"$background\"\n elevation={isTop ? 4 : 1} shadowColor=\"$shadowColor\" shadowRadius={isTop ? 16 : 4}\n scale={isTop && exitDir ? 1 : offset.scale}\n opacity={isTop && exitDir ? 0 : offset.opacity}\n y={isTop && exitDir ? 0 : offset.y}\n x={isTop ? exitX : 0}\n rotate={isTop ? exitRotate : '0deg'}>\n {renderCard(item)}\n {isTop && exitDir === 'left' && (\n <YStack position=\"absolute\" top=\"$4\" right=\"$4\" borderWidth={3}\n borderColor=\"$red10\" borderRadius=\"$3\" padding=\"$2\" rotate=\"15deg\">\n <SizableText size=\"$7\" fontWeight=\"800\" color=\"$red10\">{leftLabel.toUpperCase()}</SizableText>\n </YStack>\n )}\n {isTop && exitDir === 'right' && (\n <YStack position=\"absolute\" top=\"$4\" left=\"$4\" borderWidth={3}\n borderColor=\"$green10\" borderRadius=\"$3\" padding=\"$2\" rotate=\"-15deg\">\n <SizableText size=\"$7\" fontWeight=\"800\" color=\"$green10\">{rightLabel.toUpperCase()}</SizableText>\n </YStack>\n )}\n </YStack>\n )\n })}\n </YStack>\n </YStack>\n <XStack justifyContent=\"center\" gap=\"$6\" paddingBottom=\"$4\">\n <Circle size={60} backgroundColor=\"$red3\" borderWidth={2} borderColor=\"$red7\"\n pressStyle={{ scale: 0.9, backgroundColor: '$red5' }} animation=\"quick\"\n onPress={() => handleSwipe('left')} alignItems=\"center\" justifyContent=\"center\">\n <SizableText size=\"$6\" color=\"$red10\" fontWeight=\"700\">✕</SizableText>\n </Circle>\n <Circle size={60} backgroundColor=\"$green3\" borderWidth={2} borderColor=\"$green7\"\n pressStyle={{ scale: 0.9, backgroundColor: '$green5' }} animation=\"quick\"\n onPress={() => handleSwipe('right')} alignItems=\"center\" justifyContent=\"center\">\n <SizableText size=\"$6\" color=\"$green10\" fontWeight=\"700\">♥</SizableText>\n </Circle>\n </XStack>\n </YStack>\n )\n}\n","import type { ReactNode } from 'react'\nimport { styled, YStack } from 'tamagui'\n\nexport type GlassCardProps = {\n children: ReactNode\n intensity?: 'light' | 'medium' | 'heavy'\n tint?: 'light' | 'dark'\n borderRadius?: number | string\n padding?: number | string\n elevated?: boolean\n}\n\nconst BLUR: Record<string, number> = { light: 8, medium: 16, heavy: 24 }\nconst TINT_BG: Record<string, string> = {\n light: 'rgba(255,255,255,0.15)',\n dark: 'rgba(0,0,0,0.25)',\n}\n\nconst GlassFrame = styled(YStack, {\n borderWidth: 1,\n borderColor: 'rgba(255,255,255,0.2)',\n overflow: 'hidden',\n})\n\nexport function GlassCard({\n children,\n intensity = 'medium',\n tint = 'light',\n borderRadius = '$4',\n padding = '$4',\n elevated = false,\n}: GlassCardProps) {\n const blur = BLUR[intensity]\n\n return (\n <GlassFrame\n borderRadius={borderRadius as any}\n padding={padding as any}\n backgroundColor={TINT_BG[tint]}\n elevation={elevated ? 4 : 0}\n shadowColor={elevated ? '$shadowColor' : undefined}\n shadowRadius={elevated ? 20 : undefined}\n shadowOpacity={elevated ? 0.3 : undefined}\n // @ts-ignore — backdropFilter supported on web + iOS\n style={{ backdropFilter: `blur(${blur}px)`, WebkitBackdropFilter: `blur(${blur}px)` }}\n >\n {children}\n </GlassFrame>\n )\n}\n","import { type ReactNode, useMemo, useState } from 'react'\nimport { SizableText, Separator, XStack, YStack, useMedia, styled, View } from 'tamagui'\n\nexport type DataTableColumn<T> = {\n key: string\n header: string\n render?: (value: any, row: T) => ReactNode\n sortable?: boolean\n width?: number | string\n}\n\nexport type DataTableProps<T extends Record<string, any>> = {\n columns: DataTableColumn<T>[]\n data: T[]\n onRowPress?: (row: T) => void\n emptyMessage?: string\n}\n\ntype SortState = { key: string; dir: 'asc' | 'desc' } | null\n\nconst TH = styled(View, { padding: '$3', justifyContent: 'center' })\nconst TD = styled(View, { padding: '$3', justifyContent: 'center' })\n\nexport function StatusBadge({ status }: { status: string }) {\n const isActive = status.toLowerCase() === 'active'\n return (\n <XStack gap=\"$2\" alignItems=\"center\">\n <View width={8} height={8} borderRadius={4}\n backgroundColor={isActive ? '$green9' : '$orange9'} />\n <SizableText size=\"$3\" color=\"$color11\">{status}</SizableText>\n </XStack>\n )\n}\n\nfunction HeaderCell({ col, sort, onSort }: { col: DataTableColumn<any>; sort: SortState; onSort: () => void }) {\n const active = sort?.key === col.key\n const indicator = active ? (sort!.dir === 'asc' ? ' ▲' : ' ▼') : ''\n return (\n <TH key={col.key} width={col.width} flexDirection=\"row\" alignItems=\"center\"\n cursor={col.sortable ? 'pointer' : undefined} onPress={col.sortable ? onSort : undefined}\n pressStyle={col.sortable ? { opacity: 0.7 } : undefined}>\n <SizableText size=\"$2\" fontWeight=\"700\" color={active ? '$color12' : '$color9'}\n textTransform=\"uppercase\" letterSpacing={0.5}>\n {col.header}{indicator}\n </SizableText>\n </TH>\n )\n}\n\nfunction TableRow<T extends Record<string, any>>({ row, columns, onPress, odd }: {\n row: T; columns: DataTableColumn<T>[]; onPress?: (r: T) => void; odd: boolean\n}) {\n return (\n <XStack backgroundColor={odd ? '$color2' : 'transparent'} borderBottomWidth={0.5}\n borderColor=\"$color4\" hoverStyle={{ backgroundColor: '$color3' }}\n cursor={onPress ? 'pointer' : undefined} onPress={onPress ? () => onPress(row) : undefined}\n pressStyle={onPress ? { opacity: 0.85 } : undefined} animation=\"quick\">\n {columns.map((col) => (\n <TD key={col.key} width={col.width} flex={col.width ? undefined : 1}>\n {col.render ? col.render(row[col.key], row) : (\n <SizableText size=\"$3\" color=\"$color11\">{String(row[col.key] ?? '')}</SizableText>\n )}\n </TD>\n ))}\n </XStack>\n )\n}\n\nfunction CardRow<T extends Record<string, any>>({ row, columns, onPress }: {\n row: T; columns: DataTableColumn<T>[]; onPress?: (r: T) => void\n}) {\n return (\n <YStack backgroundColor=\"$color1\" borderRadius=\"$4\" borderWidth={1} borderColor=\"$color4\"\n padding=\"$3\" gap=\"$2\" onPress={onPress ? () => onPress(row) : undefined}\n pressStyle={onPress ? { scale: 0.98, opacity: 0.9 } : undefined} animation=\"quick\">\n {columns.map((col, i) => (\n <YStack key={col.key}>\n {i > 0 && <Separator marginVertical=\"$1.5\" borderColor=\"$color4\" />}\n <XStack justifyContent=\"space-between\" alignItems=\"center\">\n <SizableText size=\"$2\" color=\"$color9\" fontWeight=\"600\">{col.header}</SizableText>\n {col.render ? col.render(row[col.key], row) : (\n <SizableText size=\"$3\" color=\"$color11\">{String(row[col.key] ?? '')}</SizableText>\n )}\n </XStack>\n </YStack>\n ))}\n </YStack>\n )\n}\n\nexport function DataTable<T extends Record<string, any>>({ columns, data, onRowPress, emptyMessage = 'No data' }: DataTableProps<T>) {\n const [sort, setSort] = useState<SortState>(null)\n const media = useMedia()\n const isSmall = media.sm\n\n const sorted = useMemo(() => {\n if (!sort) return data\n return [...data].sort((a, b) => {\n const av = a[sort.key], bv = b[sort.key]\n const cmp = typeof av === 'number' && typeof bv === 'number' ? av - bv\n : String(av ?? '').localeCompare(String(bv ?? ''))\n return sort.dir === 'asc' ? cmp : -cmp\n })\n }, [data, sort])\n\n const toggleSort = (key: string) =>\n setSort((s) => s?.key === key ? { key, dir: s.dir === 'asc' ? 'desc' : 'asc' } : { key, dir: 'asc' })\n\n if (!data.length) {\n return (\n <YStack padding=\"$6\" alignItems=\"center\">\n <SizableText size=\"$4\" color=\"$color9\">{emptyMessage}</SizableText>\n </YStack>\n )\n }\n\n if (isSmall) {\n return (\n <YStack gap=\"$3\">\n {sorted.map((row, i) => (\n <CardRow key={i} row={row} columns={columns} onPress={onRowPress} />\n ))}\n </YStack>\n )\n }\n\n return (\n <YStack borderWidth={1} borderColor=\"$color4\" borderRadius=\"$4\" overflow=\"hidden\">\n <XStack backgroundColor=\"$color1\" borderBottomWidth={1} borderColor=\"$color4\">\n {columns.map((col) => (\n <HeaderCell key={col.key} col={col} sort={sort} onSort={() => toggleSort(col.key)} />\n ))}\n </XStack>\n {sorted.map((row, i) => (\n <TableRow key={i} row={row} columns={columns} onPress={onRowPress} odd={i % 2 === 1} />\n ))}\n </YStack>\n )\n}\n","import { useCallback, useMemo, useState } from 'react'\nimport { SizableText, XStack, YStack } from 'tamagui'\n\nexport type DatePickerProps = {\n value?: Date\n onDateChange?: (date: Date) => void\n minDate?: Date\n maxDate?: Date\n startDay?: 0 | 1\n placeholder?: string\n}\n\nconst MONTH_NAMES = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\nconst DAY_LABELS_SUN = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nconst DAY_LABELS_MON = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']\n\nfunction daysInMonth(year: number, month: number) {\n return new Date(year, month + 1, 0).getDate()\n}\n\nfunction sameDay(a: Date | undefined, b: Date) {\n return a ? a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate() : false\n}\n\nfunction buildGrid(year: number, month: number, startDay: 0 | 1) {\n const total = daysInMonth(year, month)\n const firstWeekday = new Date(year, month, 1).getDay()\n const offset = (firstWeekday - startDay + 7) % 7\n const prevTotal = daysInMonth(year, month - 1)\n const cells: { day: number; month: number; year: number; outside: boolean }[] = []\n\n for (let i = offset - 1; i >= 0; i--)\n cells.push({ day: prevTotal - i, month: month - 1, year: month === 0 ? year - 1 : year, outside: true })\n for (let d = 1; d <= total; d++)\n cells.push({ day: d, month, year, outside: false })\n while (cells.length < 42)\n cells.push({ day: cells.length - offset - total + 1, month: month + 1, year: month === 11 ? year + 1 : year, outside: true })\n return cells\n}\n\nfunction NavButton({ label, onPress }: { label: string; onPress: () => void }) {\n return (\n <XStack\n width={36} height={36} borderRadius=\"$10\" alignItems=\"center\" justifyContent=\"center\"\n backgroundColor=\"$color3\" pressStyle={{ scale: 0.92, backgroundColor: '$color5' }}\n animation=\"quick\" onPress={onPress} cursor=\"pointer\"\n >\n <SizableText size=\"$5\" color=\"$color11\" fontWeight=\"600\">{label}</SizableText>\n </XStack>\n )\n}\n\nexport function DatePicker({ value, onDateChange, minDate, maxDate, startDay = 1 }: DatePickerProps) {\n const today = useMemo(() => new Date(), [])\n const [viewMonth, setViewMonth] = useState(value?.getMonth() ?? today.getMonth())\n const [viewYear, setViewYear] = useState(value?.getFullYear() ?? today.getFullYear())\n const headers = startDay === 1 ? DAY_LABELS_MON : DAY_LABELS_SUN\n const grid = useMemo(() => buildGrid(viewYear, viewMonth, startDay), [viewYear, viewMonth, startDay])\n\n const navigate = useCallback((dir: -1 | 1) => {\n setViewMonth(m => {\n const next = m + dir\n if (next < 0) { setViewYear(y => y - 1); return 11 }\n if (next > 11) { setViewYear(y => y + 1); return 0 }\n return next\n })\n }, [])\n\n const isDisabled = useCallback((d: Date) => {\n if (minDate && d < new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate())) return true\n if (maxDate && d > new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate())) return true\n return false\n }, [minDate, maxDate])\n\n return (\n <YStack backgroundColor=\"$color2\" borderRadius=\"$4\" padding=\"$3\" gap=\"$2\" animation=\"quick\">\n <XStack alignItems=\"center\" justifyContent=\"space-between\">\n <NavButton label=\"‹\" onPress={() => navigate(-1)} />\n <SizableText size=\"$4\" fontWeight=\"700\" color=\"$color12\">\n {MONTH_NAMES[viewMonth]} {viewYear}\n </SizableText>\n <NavButton label=\"›\" onPress={() => navigate(1)} />\n </XStack>\n\n <XStack>\n {headers.map(h => (\n <SizableText key={h} size=\"$2\" color=\"$color8\" fontWeight=\"600\" textAlign=\"center\" flex={1}>{h}</SizableText>\n ))}\n </XStack>\n\n {Array.from({ length: Math.ceil(grid.length / 7) }, (_, row) => (\n <XStack key={row}>\n {grid.slice(row * 7, row * 7 + 7).map((cell, i) => {\n const date = new Date(cell.year, cell.month, cell.day)\n const selected = sameDay(value, date)\n const isToday = sameDay(today, date)\n const disabled = cell.outside || isDisabled(date)\n return (\n <YStack key={`${row}-${i}`} flex={1} alignItems=\"center\" paddingVertical=\"$0.5\">\n <XStack\n width={40} height={40} borderRadius=\"$10\" alignItems=\"center\" justifyContent=\"center\"\n backgroundColor={selected ? '$color9' : 'transparent'}\n borderWidth={isToday && !selected ? 1.5 : 0}\n borderColor=\"$color9\"\n pressStyle={disabled ? undefined : { scale: 0.9, backgroundColor: selected ? '$color10' : '$color4' }}\n animation=\"quick\"\n opacity={disabled ? 0.35 : 1}\n cursor={disabled ? 'default' : 'pointer'}\n onPress={disabled ? undefined : () => onDateChange?.(date)}\n >\n <SizableText\n size=\"$3\"\n fontWeight={selected || isToday ? '700' : '400'}\n color={selected ? 'white' : cell.outside ? '$color5' : '$color12'}\n >\n {cell.day}\n </SizableText>\n </XStack>\n </YStack>\n )\n })}\n </XStack>\n ))}\n </YStack>\n )\n}\n","import type { ReactNode } from 'react'\nimport { SizableText, Theme, XStack, YStack } from 'tamagui'\n\nexport type EventCardProps = {\n title: string\n subtitle?: string\n time?: string\n location?: string\n label?: string\n participants?: number\n maxParticipants?: number\n theme?: 'purple' | 'green' | 'blue' | 'orange' | 'red' | 'pink'\n onPress?: () => void\n actions?: ReactNode\n}\n\nconst THEME_MAP = {\n purple: 'purple',\n green: 'green',\n blue: 'blue',\n orange: 'orange',\n red: 'red',\n pink: 'pink',\n} as const\n\nfunction ParticipantDots({ count, max }: { count: number; max?: number }) {\n const dots = Math.min(count, 5)\n return (\n <XStack alignItems=\"center\" gap=\"$1.5\">\n <XStack>\n {Array.from({ length: dots }, (_, i) => (\n <YStack key={i} width={22} height={22} borderRadius={11} backgroundColor=\"$color7\"\n borderWidth={2} borderColor=\"$color4\" marginLeft={i > 0 ? -8 : 0}\n alignItems=\"center\" justifyContent=\"center\">\n <SizableText size=\"$1\" color=\"$color1\" fontWeight=\"700\">\n {String.fromCharCode(65 + i)}\n </SizableText>\n </YStack>\n ))}\n </XStack>\n <SizableText size=\"$2\" color=\"$color11\" fontWeight=\"500\">\n {count}{max ? `/${max}` : ''}\n </SizableText>\n </XStack>\n )\n}\n\nfunction CardInner({ title, subtitle, time, location, label, participants, maxParticipants, onPress, actions }: Omit<EventCardProps, 'theme'>) {\n return (\n <YStack\n backgroundColor=\"$color4\" borderRadius=\"$5\" padding=\"$4\" gap=\"$3\"\n borderWidth={1} borderColor=\"$color7\"\n onPress={onPress} animation=\"quick\"\n pressStyle={onPress ? { scale: 0.97, opacity: 0.9 } : undefined}\n cursor={onPress ? 'pointer' : undefined}\n >\n <XStack justifyContent=\"space-between\" alignItems=\"flex-start\">\n <YStack flex={1} gap=\"$1\">\n <SizableText size=\"$6\" fontWeight=\"700\" color=\"$color12\">{title}</SizableText>\n {subtitle && <SizableText size=\"$3\" color=\"$color11\" opacity={0.8}>{subtitle}</SizableText>}\n </YStack>\n {time && (\n <YStack backgroundColor=\"$color6\" paddingHorizontal=\"$2.5\" paddingVertical=\"$1.5\" borderRadius=\"$3\">\n <SizableText size=\"$2\" fontWeight=\"600\" color=\"$color12\">{time}</SizableText>\n </YStack>\n )}\n </XStack>\n\n <XStack gap=\"$4\" alignItems=\"center\" flexWrap=\"wrap\">\n {location && (\n <XStack gap=\"$1.5\" alignItems=\"center\">\n <SizableText size=\"$3\">📍</SizableText>\n <SizableText size=\"$3\" color=\"$color11\">{location}</SizableText>\n </XStack>\n )}\n {participants !== undefined && (\n <ParticipantDots count={participants} max={maxParticipants} />\n )}\n </XStack>\n\n {(label || actions) && (\n <XStack justifyContent=\"space-between\" alignItems=\"center\">\n {label ? (\n <XStack backgroundColor=\"$color6\" paddingHorizontal=\"$2.5\" paddingVertical=\"$1\" borderRadius=\"$10\">\n <SizableText size=\"$2\" fontWeight=\"600\" color=\"$color11\">{label}</SizableText>\n </XStack>\n ) : <YStack />}\n {actions}\n </XStack>\n )}\n </YStack>\n )\n}\n\nexport function EventCard({ theme = 'purple', ...props }: EventCardProps) {\n return (\n <Theme name={THEME_MAP[theme]}>\n <CardInner {...props} />\n </Theme>\n )\n}\n","import { Separator, SizableText, Slider, Switch, XStack, YStack } from 'tamagui'\n\nexport type PreferenceItem =\n | { type: 'toggle'; id: string; title: string; description?: string; value: boolean; onValueChange: (v: boolean) => void }\n | { type: 'select'; id: string; title: string; description?: string; value: string; options: { label: string; value: string }[]; onValueChange: (v: string) => void }\n | { type: 'slider'; id: string; title: string; description?: string; value: number; min?: number; max?: number; onValueChange: (v: number) => void }\n | { type: 'action'; id: string; title: string; description?: string; onPress: () => void; destructive?: boolean }\n\nexport type PreferenceSection = {\n title: string\n description?: string\n items: PreferenceItem[]\n}\n\nexport type UserPreferencesProps = {\n sections: PreferenceSection[]\n}\n\nfunction ItemLabel({ title, description, color }: { title: string; description?: string; color?: string }) {\n return (\n <YStack flex={1} gap=\"$1\">\n <SizableText size=\"$4\" fontWeight=\"500\" color={color ?? '$color12'}>{title}</SizableText>\n {description && <SizableText size=\"$2\" color=\"$color9\">{description}</SizableText>}\n </YStack>\n )\n}\n\nfunction ToggleRow({ item }: { item: Extract<PreferenceItem, { type: 'toggle' }> }) {\n return (\n <XStack alignItems=\"center\" gap=\"$3\" paddingVertical=\"$3\" paddingHorizontal=\"$4\">\n <ItemLabel title={item.title} description={item.description} />\n <Switch size=\"$3\" checked={item.value} onCheckedChange={item.onValueChange}>\n <Switch.Thumb animation=\"quick\" />\n </Switch>\n </XStack>\n )\n}\n\nfunction SelectRow({ item }: { item: Extract<PreferenceItem, { type: 'select' }> }) {\n const current = item.options.find(o => o.value === item.value)\n return (\n <XStack alignItems=\"center\" gap=\"$3\" paddingVertical=\"$3\" paddingHorizontal=\"$4\"\n pressStyle={{ backgroundColor: '$color3' }} animation=\"quick\" cursor=\"pointer\"\n onPress={() => {\n const idx = item.options.findIndex(o => o.value === item.value)\n const next = item.options[(idx + 1) % item.options.length]\n if (next) item.onValueChange(next.value)\n }}>\n <ItemLabel title={item.title} description={item.description} />\n <SizableText size=\"$3\" color=\"$color9\" fontWeight=\"500\">{current?.label ?? item.value}</SizableText>\n <SizableText size=\"$4\" color=\"$color8\">›</SizableText>\n </XStack>\n )\n}\n\nfunction SliderRow({ item }: { item: Extract<PreferenceItem, { type: 'slider' }> }) {\n const min = item.min ?? 0\n const max = item.max ?? 100\n return (\n <YStack gap=\"$2\" paddingVertical=\"$3\" paddingHorizontal=\"$4\">\n <XStack justifyContent=\"space-between\" alignItems=\"center\">\n <ItemLabel title={item.title} description={item.description} />\n <SizableText size=\"$3\" fontWeight=\"600\" color=\"$color11\">{item.value}</SizableText>\n </XStack>\n <Slider value={[item.value]} min={min} max={max} step={1}\n onValueChange={([v]) => { if (v !== undefined) item.onValueChange(v) }}>\n <Slider.Track backgroundColor=\"$color4\" height={4}>\n <Slider.TrackActive backgroundColor=\"$color9\" />\n </Slider.Track>\n <Slider.Thumb index={0} size=\"$1.5\" backgroundColor=\"$color9\" borderWidth={0} circular />\n </Slider>\n </YStack>\n )\n}\n\nfunction ActionRow({ item }: { item: Extract<PreferenceItem, { type: 'action' }> }) {\n return (\n <XStack alignItems=\"center\" gap=\"$3\" paddingVertical=\"$3\" paddingHorizontal=\"$4\"\n pressStyle={{ backgroundColor: '$color3' }} animation=\"quick\" cursor=\"pointer\"\n onPress={item.onPress}>\n <ItemLabel title={item.title} description={item.description}\n color={item.destructive ? '$red10' : undefined} />\n <SizableText size=\"$4\" color=\"$color8\">›</SizableText>\n </XStack>\n )\n}\n\nfunction PreferenceRow({ item }: { item: PreferenceItem }) {\n switch (item.type) {\n case 'toggle': return <ToggleRow item={item} />\n case 'select': return <SelectRow item={item} />\n case 'slider': return <SliderRow item={item} />\n case 'action': return <ActionRow item={item} />\n }\n}\n\nexport function UserPreferences({ sections }: UserPreferencesProps) {\n return (\n <YStack gap=\"$5\">\n {sections.map((section, si) => (\n <YStack key={si} gap=\"$2\">\n <YStack paddingHorizontal=\"$1\" gap=\"$0.5\">\n <SizableText size=\"$2\" fontWeight=\"600\" color=\"$color9\" textTransform=\"uppercase\">\n {section.title}\n </SizableText>\n {section.description && (\n <SizableText size=\"$2\" color=\"$color8\">{section.description}</SizableText>\n )}\n </YStack>\n <YStack backgroundColor=\"$color2\" borderRadius=\"$4\" overflow=\"hidden\"\n borderWidth={1} borderColor=\"$color4\">\n {section.items.map((item, ii) => (\n <YStack key={item.id}>\n <PreferenceRow item={item} />\n {ii < section.items.length - 1 && <Separator borderColor=\"$color4\" />}\n </YStack>\n ))}\n </YStack>\n </YStack>\n ))}\n </YStack>\n )\n}\n","import React from 'react'\nimport { Select, Adapt, Sheet, YStack, SizableText, type GetProps } from 'tamagui'\n\nexport type OtfSelectItem = {\n label: string\n value: string\n}\n\nexport type OtfSelectProps = {\n items: OtfSelectItem[]\n value?: string\n onValueChange?: (value: string) => void\n placeholder?: string\n label?: string\n size?: GetProps<typeof Select.Trigger>['size']\n disabled?: boolean\n width?: string | number\n}\n\nexport function OtfSelect({\n items,\n value,\n onValueChange,\n placeholder = 'Select...',\n label,\n size = '$4',\n disabled,\n width = '100%',\n}: OtfSelectProps) {\n return (\n <YStack gap=\"$1.5\" width={width}>\n {label ? <SizableText size=\"$3\" fontWeight=\"600\">{label}</SizableText> : null}\n <Select\n value={value}\n onValueChange={onValueChange}\n disablePreventBodyScroll\n {...(disabled ? { disabled: true } : {})}\n >\n <Select.Trigger width=\"100%\" iconAfter={() => <SizableText>▼</SizableText>} size={size}>\n <Select.Value placeholder={placeholder} />\n </Select.Trigger>\n\n <Adapt when={\"maxMd\" as any} platform=\"touch\">\n <Sheet modal dismissOnSnapToBottom snapPointsMode=\"fit\">\n <Sheet.Frame padding=\"$4\">\n <Adapt.Contents />\n </Sheet.Frame>\n <Sheet.Overlay />\n </Sheet>\n </Adapt>\n\n <Select.Content zIndex={200000}>\n <Select.ScrollUpButton alignItems=\"center\" justifyContent=\"center\" height=\"$3\">\n <SizableText>▲</SizableText>\n </Select.ScrollUpButton>\n <Select.Viewport minWidth={200}>\n <Select.Group>\n {items.map((item, i) => (\n <Select.Item index={i} key={item.value} value={item.value}>\n <Select.ItemText>{item.label}</Select.ItemText>\n <Select.ItemIndicator marginLeft=\"auto\">\n <SizableText>✓</SizableText>\n </Select.ItemIndicator>\n </Select.Item>\n ))}\n </Select.Group>\n </Select.Viewport>\n <Select.ScrollDownButton alignItems=\"center\" justifyContent=\"center\" height=\"$3\">\n <SizableText>▼</SizableText>\n </Select.ScrollDownButton>\n </Select.Content>\n </Select>\n </YStack>\n )\n}\n","import React from 'react'\nimport { Dialog, Adapt, Sheet, Button, XStack, type GetProps } from 'tamagui'\n\nexport type OtfDialogProps = {\n open?: boolean\n onOpenChange?: (open: boolean) => void\n trigger?: React.ReactNode\n title?: string\n description?: string\n children?: React.ReactNode\n confirmLabel?: string\n cancelLabel?: string\n onConfirm?: () => void\n onCancel?: () => void\n confirmTheme?: GetProps<typeof Button>['theme']\n}\n\nexport function OtfDialog({\n open,\n onOpenChange,\n trigger,\n title,\n description,\n children,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n onConfirm,\n onCancel,\n confirmTheme = 'active',\n}: OtfDialogProps) {\n return (\n <Dialog modal open={open} onOpenChange={onOpenChange}>\n {trigger && (\n <Dialog.Trigger asChild>\n {trigger}\n </Dialog.Trigger>\n )}\n\n <Adapt when={\"maxMd\" as any} platform=\"touch\">\n <Sheet modal dismissOnSnapToBottom snapPointsMode=\"fit\">\n <Sheet.Frame padding=\"$4\" gap=\"$4\">\n <Adapt.Contents />\n </Sheet.Frame>\n <Sheet.Overlay />\n </Sheet>\n </Adapt>\n\n <Dialog.Portal>\n <Dialog.Overlay\n key=\"overlay\"\n animation=\"quick\"\n opacity={0.5}\n enterStyle={{ opacity: 0 }}\n exitStyle={{ opacity: 0 }}\n />\n <Dialog.Content\n bordered\n elevate\n key=\"content\"\n animateOnly={['transform', 'opacity']}\n animation={['quick', { opacity: { overshootClamping: true } }]}\n enterStyle={{ x: 0, y: -20, opacity: 0, scale: 0.9 }}\n exitStyle={{ x: 0, y: 10, opacity: 0, scale: 0.95 }}\n gap=\"$4\"\n >\n {title && <Dialog.Title>{title}</Dialog.Title>}\n {description && (\n <Dialog.Description size=\"$3\" color=\"$color10\">\n {description}\n </Dialog.Description>\n )}\n {children}\n {(onConfirm || onCancel) && (\n <XStack justifyContent=\"flex-end\" gap=\"$3\">\n {onCancel && (\n <Dialog.Close displayWhenAdapted asChild>\n <Button variant=\"outlined\" onPress={onCancel}>{cancelLabel}</Button>\n </Dialog.Close>\n )}\n {onConfirm && (\n <Dialog.Close displayWhenAdapted asChild>\n <Button theme={confirmTheme} onPress={onConfirm}>{confirmLabel}</Button>\n </Dialog.Close>\n )}\n </XStack>\n )}\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog>\n )\n}\n","import React from 'react'\nimport { Popover, Adapt, YStack } from 'tamagui'\n\nexport type OtfPopoverProps = {\n trigger: React.ReactNode\n children: React.ReactNode\n placement?: 'top' | 'bottom' | 'left' | 'right'\n allowFlip?: boolean\n size?: string\n}\n\nexport function OtfPopover({\n trigger,\n children,\n placement = 'bottom',\n allowFlip = true,\n size = '$5',\n}: OtfPopoverProps) {\n return (\n <Popover size={size as any} allowFlip={allowFlip} placement={placement}>\n <Popover.Trigger asChild>\n {trigger}\n </Popover.Trigger>\n\n <Adapt when={\"maxMd\" as any} platform=\"touch\">\n <Popover.Sheet modal dismissOnSnapToBottom snapPointsMode=\"fit\">\n <Popover.Sheet.Frame padding=\"$4\">\n <Adapt.Contents />\n </Popover.Sheet.Frame>\n <Popover.Sheet.Overlay />\n </Popover.Sheet>\n </Adapt>\n\n <Popover.Content\n borderWidth={1}\n borderColor=\"$borderColor\"\n enterStyle={{ y: -10, opacity: 0 }}\n exitStyle={{ y: -10, opacity: 0 }}\n elevate\n animation={['quick', { opacity: { overshootClamping: true } }]}\n >\n <Popover.Arrow borderWidth={1} borderColor=\"$borderColor\" />\n <YStack gap=\"$3\" padding=\"$3\">\n {children}\n </YStack>\n </Popover.Content>\n </Popover>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Button, SizableText, XStack, YStack } from 'tamagui'\n\nexport type ImmersiveMediaAction = {\n id: string\n label?: string\n value?: string\n icon?: ReactNode\n onPress?: () => void\n}\n\nexport type ImmersiveMediaScreenProps = {\n variant?: 'story' | 'reel' | 'sheet'\n media: ReactNode\n title?: string\n subtitle?: string\n topLeft?: ReactNode\n topCenter?: ReactNode\n topRight?: ReactNode\n actions?: ImmersiveMediaAction[]\n bottomMeta?: ReactNode\n inputPlaceholder?: string\n onInputPress?: () => void\n sheetContent?: ReactNode\n}\n\nexport function ImmersiveMediaScreen({\n variant = 'reel',\n media,\n title,\n subtitle,\n topLeft,\n topCenter,\n topRight,\n actions = [],\n bottomMeta,\n inputPlaceholder,\n onInputPress,\n sheetContent,\n}: ImmersiveMediaScreenProps) {\n const showSheet = variant === 'sheet'\n return (\n <YStack flex={1} backgroundColor=\"$color1\">\n <YStack flex={1} position=\"relative\">\n {media}\n <XStack position=\"absolute\" top=\"$5\" left=\"$4\" right=\"$4\" justifyContent=\"space-between\" alignItems=\"center\">\n <XStack minWidth={56}>{topLeft}</XStack>\n <YStack alignItems=\"center\" flex={1}>{topCenter}</YStack>\n <XStack minWidth={56} justifyContent=\"flex-end\">{topRight}</XStack>\n </XStack>\n {actions.length > 0 ? (\n <YStack position=\"absolute\" right=\"$3\" bottom={showSheet ? '$20' : '$10'} gap=\"$3\" alignItems=\"center\">\n {actions.map((action) => (\n <YStack key={action.id} gap=\"$1\" alignItems=\"center\" onPress={action.onPress}>\n <YStack\n width={44}\n height={44}\n borderRadius=\"$10\"\n backgroundColor=\"rgba(0,0,0,0.55)\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {action.icon ?? <SizableText size=\"$5\" color=\"white\">•</SizableText>}\n </YStack>\n {action.value ? <SizableText size=\"$2\" color=\"white\">{action.value}</SizableText> : null}\n {action.label ? <SizableText size=\"$1\" color=\"rgba(255,255,255,0.8)\">{action.label}</SizableText> : null}\n </YStack>\n ))}\n </YStack>\n ) : null}\n <YStack position=\"absolute\" left=\"$4\" right=\"$4\" bottom={showSheet ? '$20' : '$6'} gap=\"$2\">\n {title ? <SizableText size=\"$6\" fontWeight=\"800\" color=\"white\">{title}</SizableText> : null}\n {subtitle ? <SizableText size=\"$3\" color=\"rgba(255,255,255,0.82)\">{subtitle}</SizableText> : null}\n {bottomMeta}\n {variant === 'story' && inputPlaceholder ? (\n <XStack\n onPress={onInputPress}\n alignItems=\"center\"\n paddingHorizontal=\"$4\"\n paddingVertical=\"$3\"\n borderRadius=\"$10\"\n backgroundColor=\"rgba(255,255,255,0.14)\"\n borderWidth={1}\n borderColor=\"rgba(255,255,255,0.25)\"\n >\n <SizableText size=\"$3\" color=\"rgba(255,255,255,0.82)\">\n {inputPlaceholder}\n </SizableText>\n </XStack>\n ) : null}\n </YStack>\n </YStack>\n {showSheet ? (\n <YStack padding=\"$4\" gap=\"$3\" backgroundColor=\"$background\" borderTopLeftRadius=\"$8\" borderTopRightRadius=\"$8\" marginTop={-18}>\n <XStack alignSelf=\"center\" width={48} height={5} borderRadius=\"$10\" backgroundColor=\"$color5\" />\n {sheetContent}\n {inputPlaceholder ? (\n <Button size=\"$5\" backgroundColor=\"$color9\" color=\"$color1\" onPress={onInputPress}>\n {inputPlaceholder}\n </Button>\n ) : null}\n </YStack>\n ) : null}\n </YStack>\n )\n}\n","import type { ReactNode } from 'react'\nimport { SizableText, XStack, YStack } from 'tamagui'\n\nexport type FinanceMetric = {\n label: string\n value: string\n change?: string\n}\n\nexport type FinanceQuickAction = {\n id: string\n label: string\n icon?: ReactNode\n onPress?: () => void\n}\n\nexport type FinanceDashboardSection = {\n id?: string\n title: string\n rows: Array<{\n id: string\n title: string\n subtitle?: string\n value?: string\n leading?: ReactNode\n }>\n}\n\nexport type FinanceDashboardProps = {\n title?: string\n balanceLabel?: string\n balance: string\n rangeLabel?: string\n metrics?: FinanceMetric[]\n quickActions?: FinanceQuickAction[]\n sections?: FinanceDashboardSection[]\n chartSlot?: ReactNode\n topRight?: ReactNode\n}\n\nexport function FinanceDashboard({\n title = 'Overview',\n balanceLabel = 'Available balance',\n balance,\n rangeLabel,\n metrics = [],\n quickActions = [],\n sections = [],\n chartSlot,\n topRight,\n}: FinanceDashboardProps) {\n return (\n <YStack flex={1} backgroundColor=\"$background\" padding=\"$4\" gap=\"$4\">\n <XStack justifyContent=\"space-between\" alignItems=\"center\" paddingTop=\"$4\">\n <YStack gap=\"$1\">\n <SizableText size=\"$6\" fontWeight=\"700\">{title}</SizableText>\n {rangeLabel ? <SizableText size=\"$2\" color=\"$color9\">{rangeLabel}</SizableText> : null}\n </YStack>\n {topRight}\n </XStack>\n\n <YStack backgroundColor=\"$color1\" borderRadius=\"$7\" padding=\"$4\" gap=\"$2\" borderWidth={1} borderColor=\"$color4\">\n <SizableText size=\"$3\" color=\"$color10\">{balanceLabel}</SizableText>\n <SizableText size=\"$11\" fontWeight=\"800\">{balance}</SizableText>\n {chartSlot ? <YStack marginTop=\"$2\">{chartSlot}</YStack> : null}\n </YStack>\n\n {metrics.length > 0 ? (\n <XStack gap=\"$3\" flexWrap=\"wrap\">\n {metrics.map((metric) => (\n <YStack key={metric.label} flex={1} minWidth={120} backgroundColor=\"$color1\" borderRadius=\"$6\" padding=\"$3\" gap=\"$1\" borderWidth={1} borderColor=\"$color4\">\n <SizableText size=\"$2\" color=\"$color10\">{metric.label}</SizableText>\n <SizableText size=\"$7\" fontWeight=\"800\">{metric.value}</SizableText>\n {metric.change ? <SizableText size=\"$2\" color=\"$color9\">{metric.change}</SizableText> : null}\n </YStack>\n ))}\n </XStack>\n ) : null}\n\n {quickActions.length > 0 ? (\n <XStack gap=\"$3\" flexWrap=\"wrap\">\n {quickActions.map((action) => (\n <YStack\n key={action.id}\n flex={1}\n minWidth={88}\n backgroundColor=\"$color1\"\n borderRadius=\"$6\"\n padding=\"$3\"\n gap=\"$2\"\n alignItems=\"center\"\n justifyContent=\"center\"\n borderWidth={1}\n borderColor=\"$color4\"\n onPress={action.onPress}\n >\n <YStack width={36} height={36} borderRadius=\"$10\" backgroundColor=\"$color3\" alignItems=\"center\" justifyContent=\"center\">\n {action.icon ?? <SizableText size=\"$4\">•</SizableText>}\n </YStack>\n <SizableText size=\"$2\" textAlign=\"center\">{action.label}</SizableText>\n </YStack>\n ))}\n </XStack>\n ) : null}\n\n <YStack gap=\"$3\">\n {sections.map((section, index) => (\n <YStack key={section.id ?? `${section.title}-${index}`} backgroundColor=\"$color1\" borderRadius=\"$6\" borderWidth={1} borderColor=\"$color4\" overflow=\"hidden\">\n <XStack padding=\"$3\" justifyContent=\"space-between\" alignItems=\"center\">\n <SizableText size=\"$4\" fontWeight=\"700\">{section.title}</SizableText>\n </XStack>\n <YStack>\n {section.rows.map((row, index) => (\n <XStack\n key={row.id}\n padding=\"$3\"\n gap=\"$3\"\n alignItems=\"center\"\n borderTopWidth={index === 0 ? 0 : 1}\n borderTopColor=\"$color4\"\n >\n {row.leading ? (\n <YStack width={32} height={32} borderRadius=\"$8\" backgroundColor=\"$color3\" alignItems=\"center\" justifyContent=\"center\">\n {row.leading}\n </YStack>\n ) : null}\n <YStack flex={1}>\n <SizableText size=\"$3\" fontWeight=\"600\">{row.title}</SizableText>\n {row.subtitle ? <SizableText size=\"$2\" color=\"$color10\">{row.subtitle}</SizableText> : null}\n </YStack>\n {row.value ? <SizableText size=\"$3\" color=\"$color11\">{row.value}</SizableText> : null}\n </XStack>\n ))}\n </YStack>\n </YStack>\n ))}\n </YStack>\n </YStack>\n )\n}\n","/**\n * MultiStep + Step + useMultiStep — declarative wizard primitive.\n *\n * State machine + transition coordinator for multi-step flows (onboarding,\n * KYC, checkout, log-workout). COMPOSES with `<StepPageLayout>`: a `<Step>` is\n * just a slot — pass `<StepPageLayout title=\"…\">` as its child to get the\n * hero header, then your inputs, then call `next()` from a CTA.\n *\n * Anti-patterns explicitly avoided: BackHandler global singletons, the\n * legacy `Animated` API, mutable module-scope state.\n */\n\nimport {\n Children,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { BackHandler } from 'react-native'\nimport Animated, {\n FadeIn,\n SlideInLeft,\n SlideInRight,\n useReducedMotion,\n} from 'react-native-reanimated'\nimport { Circle, XStack, YStack } from 'tamagui'\n\n// ─── Public types ────────────────────────────────────────────────────────────\n\nexport type MultiStepTransition = 'slide_horizontal' | 'fade' | 'none'\nexport type MultiStepProgress = 'bar' | 'dots' | 'segments' | 'none'\n\nexport interface StepProps {\n /** Unique id for `goTo(name)`. Must be stable across renders. */\n name: string\n /** Disables the Next CTA via context until true. Default: true. */\n canGoNext?: boolean\n children: ReactNode\n}\n\nexport interface MultiStepProps {\n /** Ordered `<Step>` children. Each must have a unique `name`. */\n children: ReactElement<StepProps> | ReactElement<StepProps>[]\n /** Index to start on. Default: 0. */\n initialIndex?: number\n /** Called with the accumulated bag when `next()` advances past the last step. */\n onComplete?: (data: Record<string, unknown>) => void\n /** Called when `back()` is invoked on the first step (or hardware back). */\n onCancel?: () => void\n /** Step-to-step animation. Default: `slide_horizontal`. */\n transition?: MultiStepTransition\n /** Progress indicator above the active step. Default: `bar`. */\n progress?: MultiStepProgress\n}\n\nexport interface UseMultiStep {\n /** Zero-based index of the active step. */\n index: number\n /** Total number of steps. */\n total: number\n /** `name` of the active step. */\n name: string\n /** Advance one step; calls `onComplete(data)` past the last step. No-op when `canGoNext` is false. */\n next: () => void\n /** Go back one step; calls `onCancel()` on the first step. */\n back: () => void\n /** Jump to a step by `name`. Throws if the name doesn't exist. */\n goTo: (name: string) => void\n /** Stash a value in the wizard's data bag (delivered to `onComplete`). */\n set: (key: string, value: unknown) => void\n /** Read a value from the wizard's data bag. */\n get: <T>(key: string) => T | undefined\n /** Whether the active step has set `canGoNext` true. */\n canGoNext: boolean\n /** Imperatively flip the active step's `canGoNext` (for nested controls). */\n setCanGoNext: (v: boolean) => void\n}\n\n// ─── Context ────────────────────────────────────────────────────────────────\n\nconst MultiStepContext = createContext<UseMultiStep | null>(null)\n\n/**\n * Hook for nested controls inside a `<Step>` body — call `next()`, read\n * `index`, stash values via `set()`. Throws if used outside `<MultiStep>`.\n */\nexport function useMultiStep(): UseMultiStep {\n const ctx = useContext(MultiStepContext)\n if (!ctx) {\n throw new Error('useMultiStep must be used inside a <MultiStep> tree.')\n }\n return ctx\n}\n\n// ─── Step ────────────────────────────────────────────────────────────────────\n\n/**\n * Wrapper for one step in a `<MultiStep>` flow. Compose with `<StepPageLayout>`\n * for the hero/title/description shell, or render arbitrary children directly.\n */\nexport function Step({ children }: StepProps): ReactNode {\n return <>{children}</>\n}\n\n// ─── Progress indicators ────────────────────────────────────────────────────\n\ninterface ProgressProps {\n variant: MultiStepProgress\n index: number\n total: number\n}\n\nfunction ProgressIndicator({ variant, index, total }: ProgressProps): ReactNode {\n if (variant === 'none' || total <= 1) return null\n\n if (variant === 'bar') {\n const pct = ((index + 1) / total) * 100\n return (\n <YStack\n height={4}\n width=\"100%\"\n backgroundColor=\"$color5\"\n borderRadius={2}\n overflow=\"hidden\"\n accessibilityRole=\"progressbar\"\n accessibilityValue={{ min: 0, max: total, now: index + 1 }}\n >\n <YStack\n height={4}\n width={`${pct}%`}\n backgroundColor=\"$color9\"\n borderRadius={2}\n animation=\"quick\"\n />\n </YStack>\n )\n }\n\n if (variant === 'dots') {\n return (\n <XStack\n gap=\"$2\"\n justifyContent=\"center\"\n accessibilityRole=\"progressbar\"\n accessibilityValue={{ min: 0, max: total, now: index + 1 }}\n >\n {Array.from({ length: total }, (_, i) => {\n const active = i === index\n return (\n <Circle\n key={i}\n size={active ? 10 : 6}\n backgroundColor={i <= index ? '$color9' : '$color5'}\n animation=\"quick\"\n />\n )\n })}\n </XStack>\n )\n }\n\n // segments\n return (\n <XStack\n gap=\"$1.5\"\n width=\"100%\"\n accessibilityRole=\"progressbar\"\n accessibilityValue={{ min: 0, max: total, now: index + 1 }}\n >\n {Array.from({ length: total }, (_, i) => (\n <YStack\n key={i}\n flex={1}\n height={4}\n borderRadius={2}\n backgroundColor={i <= index ? '$color9' : '$color5'}\n animation=\"quick\"\n />\n ))}\n </XStack>\n )\n}\n\n// ─── MultiStep ──────────────────────────────────────────────────────────────\n\n/**\n * Declarative wizard controller. Owns step index + transition direction +\n * a per-step `canGoNext` flag + a key/value data bag delivered to\n * `onComplete`. Renders a progress indicator + the active `<Step>` child.\n *\n * Hardware-back is handled per-instance via a `BackHandler` subscription\n * (no global singleton) — back on the first step calls `onCancel`.\n */\nexport function MultiStep({\n children,\n initialIndex = 0,\n onComplete,\n onCancel,\n transition = 'slide_horizontal',\n progress = 'bar',\n}: MultiStepProps): ReactNode {\n const reducedMotion = useReducedMotion()\n\n // Normalize children to a flat array, narrow to ReactElement<StepProps>.\n const steps = useMemo(() => {\n const arr = Children.toArray(children).filter(\n (c): c is ReactElement<StepProps> => isValidElement(c),\n )\n if (arr.length === 0) {\n throw new Error('<MultiStep> requires at least one <Step> child.')\n }\n const seen = new Set<string>()\n for (const step of arr) {\n const name = step.props.name\n if (!name) throw new Error('Every <Step> must have a non-empty `name` prop.')\n if (seen.has(name)) {\n throw new Error(`<MultiStep> duplicate step name: \"${name}\".`)\n }\n seen.add(name)\n }\n return arr\n }, [children])\n\n const total = steps.length\n const safeInitial = Math.min(Math.max(initialIndex, 0), total - 1)\n\n const [index, setIndex] = useState(safeInitial)\n const [direction, setDirection] = useState<'forward' | 'backward'>('forward')\n const [canGoNext, setCanGoNext] = useState<boolean>(true)\n const dataRef = useRef<Record<string, unknown>>({})\n\n const activeStep = steps[index]\n if (!activeStep) {\n // Defensive: should never happen given clamping above + non-empty steps.\n throw new Error(`<MultiStep> active step out of range (index=${index}).`)\n }\n const activeName = activeStep.props.name\n const activeCanGoNext = activeStep.props.canGoNext\n\n // Sync the step's static `canGoNext` prop into context whenever the step\n // changes. Steps that omit the prop default to true; steps that pass an\n // explicit boolean win over the imperative `setCanGoNext` until they remount.\n useEffect(() => {\n setCanGoNext(activeCanGoNext ?? true)\n }, [activeCanGoNext, activeName])\n\n const next = useCallback(() => {\n if (!canGoNext) return\n if (index >= total - 1) {\n onComplete?.(dataRef.current)\n return\n }\n setDirection('forward')\n setIndex(i => i + 1)\n }, [canGoNext, index, total, onComplete])\n\n const back = useCallback(() => {\n if (index === 0) {\n onCancel?.()\n return\n }\n setDirection('backward')\n setIndex(i => i - 1)\n }, [index, onCancel])\n\n const goTo = useCallback(\n (name: string) => {\n const target = steps.findIndex(s => s.props.name === name)\n if (target < 0) {\n throw new Error(`<MultiStep>.goTo: unknown step name \"${name}\".`)\n }\n if (target === index) return\n setDirection(target > index ? 'forward' : 'backward')\n setIndex(target)\n },\n [steps, index],\n )\n\n const set = useCallback((key: string, value: unknown) => {\n dataRef.current = { ...dataRef.current, [key]: value }\n }, [])\n\n // Generic-on-call site keeps the bag untyped internally without resorting\n // to `any`; the cast is a deliberate API affordance for the consumer.\n const get = useCallback(<T,>(key: string): T | undefined => {\n return dataRef.current[key] as T | undefined\n }, [])\n\n // Per-instance hardware-back handler — registered in effect with cleanup.\n // Refs keep the listener identity stable while reading the latest closure.\n const indexRef = useRef(index)\n const backRef = useRef(back)\n useEffect(() => {\n indexRef.current = index\n backRef.current = back\n }, [index, back])\n\n useEffect(() => {\n const handler = (): boolean => {\n backRef.current()\n // Always intercept while mounted; first-step back delegates to onCancel.\n return true\n }\n const sub = BackHandler.addEventListener('hardwareBackPress', handler)\n return () => sub.remove()\n }, [])\n\n const ctxValue = useMemo<UseMultiStep>(\n () => ({\n index,\n total,\n name: activeName,\n next,\n back,\n goTo,\n set,\n get,\n canGoNext,\n setCanGoNext,\n }),\n [index, total, activeName, next, back, goTo, set, get, canGoNext],\n )\n\n // Choose the Reanimated entry animation per direction (or none if\n // transition === 'none' or the OS reduced-motion pref is on).\n const entering = useMemo(() => {\n if (reducedMotion || transition === 'none') return undefined\n if (transition === 'fade') return FadeIn\n return direction === 'forward' ? SlideInRight : SlideInLeft\n }, [direction, transition, reducedMotion])\n\n return (\n <MultiStepContext.Provider value={ctxValue}>\n <YStack flex={1} gap=\"$4\">\n {progress !== 'none' && (\n <YStack paddingHorizontal=\"$4\" paddingTop=\"$3\">\n <ProgressIndicator variant={progress} index={index} total={total} />\n </YStack>\n )}\n <YStack flex={1}>\n <Animated.View\n // The `key` forces remount per step so Reanimated's entering\n // animation re-runs on every transition.\n key={activeName}\n entering={entering}\n style={{ flex: 1 }}\n >\n {activeStep}\n </Animated.View>\n </YStack>\n </YStack>\n </MultiStepContext.Provider>\n )\n}\n","/**\n * Selectable + SelectableGroup\n *\n * Onboarding-grade option cards. Three visual variants —\n * - `card` : padded vertical card, icon top-left, label + description, check top-right.\n * - `row` : horizontal row, icon left, label right, check trailing.\n * - `tile` : square 1:1 grid item, icon centered, label below. Self-sizing flex-1.\n *\n * Selected state: border tweens 250ms from `$color5` to `accent` (default `$color9`); a check\n * icon fades in via Reanimated `FadeIn`. Honors `useReducedMotion()` — when on, both\n * transitions snap to their final state. Press feedback is a Tamagui `pressStyle`.\n *\n * `<SelectableGroup>` is generic over the option value type and supports single (radio) or\n * multi (checkbox) selection. Layout is vertical for `card`/`row` and a 2-col grid for `tile`.\n */\n\nimport { type ReactNode, useCallback } from 'react'\nimport { Check } from '@tamagui/lucide-icons'\nimport { SizableText, XStack, YStack } from 'tamagui'\nimport Animated, { FadeIn, useReducedMotion } from 'react-native-reanimated'\n\ntype SelectableVariant = 'card' | 'row' | 'tile'\n\nexport interface SelectableProps {\n label: string\n description?: string\n icon?: ReactNode\n selected: boolean\n onPress: () => void\n variant?: SelectableVariant\n trailing?: ReactNode\n /** Border + check tint when selected. Default `$color9`. */\n accent?: string\n disabled?: boolean\n}\n\n/**\n * Single selectable card. Use `<SelectableGroup>` for radio/checkbox semantics across\n * multiple options — `<Selectable>` alone gives you the visual primitive.\n */\nexport function Selectable({\n label,\n description,\n icon,\n selected,\n onPress,\n variant = 'card',\n trailing,\n accent = '$color9',\n disabled = false,\n}: SelectableProps) {\n const reducedMotion = useReducedMotion()\n const borderColor = selected ? accent : '$color5'\n const checkNode =\n trailing !== undefined ? (\n trailing\n ) : selected ? (\n <Animated.View entering={reducedMotion ? undefined : FadeIn.duration(180)}>\n <CheckBadge accent={accent} />\n </Animated.View>\n ) : null\n\n const sharedProps = {\n onPress: disabled ? undefined : onPress,\n disabled,\n opacity: disabled ? 0.5 : 1,\n pressStyle: disabled ? undefined : { scale: 0.98, opacity: 0.92 },\n animation: reducedMotion ? undefined : ('quick' as const),\n borderColor,\n borderWidth: 1,\n backgroundColor: '$background',\n cursor: disabled ? 'not-allowed' : 'pointer',\n accessibilityRole: 'radio' as const,\n accessibilityState: { selected, disabled },\n accessibilityLabel: label,\n }\n\n if (variant === 'row') {\n return (\n <XStack\n {...sharedProps}\n minHeight={56}\n paddingVertical=\"$3\"\n paddingHorizontal=\"$3.5\"\n borderRadius=\"$5\"\n alignItems=\"center\"\n gap=\"$3\"\n >\n {icon ? <YStack width={32} alignItems=\"center\">{icon}</YStack> : null}\n <YStack flex={1} gap=\"$0.5\">\n <SizableText size=\"$4\" fontWeight=\"600\" color=\"$color12\">\n {label}\n </SizableText>\n {description ? (\n <SizableText size=\"$2\" color=\"$color10\">\n {description}\n </SizableText>\n ) : null}\n </YStack>\n {checkNode}\n </XStack>\n )\n }\n\n if (variant === 'tile') {\n return (\n <YStack\n {...sharedProps}\n flex={1}\n aspectRatio={1}\n minHeight={100}\n padding=\"$3\"\n borderRadius=\"$6\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap=\"$2\"\n position=\"relative\"\n >\n {checkNode ? (\n <YStack position=\"absolute\" top=\"$2\" right=\"$2\">\n {checkNode}\n </YStack>\n ) : null}\n {icon ? <YStack alignItems=\"center\">{icon}</YStack> : null}\n <SizableText size=\"$3\" fontWeight=\"600\" color=\"$color12\" textAlign=\"center\">\n {label}\n </SizableText>\n {description ? (\n <SizableText size=\"$1\" color=\"$color10\" textAlign=\"center\">\n {description}\n </SizableText>\n ) : null}\n </YStack>\n )\n }\n\n return (\n <YStack\n {...sharedProps}\n minHeight={72}\n padding=\"$4\"\n borderRadius=\"$6\"\n gap=\"$2\"\n position=\"relative\"\n >\n {checkNode ? (\n <YStack position=\"absolute\" top=\"$3\" right=\"$3\">\n {checkNode}\n </YStack>\n ) : null}\n <XStack gap=\"$3\" alignItems=\"flex-start\" paddingRight={checkNode ? '$6' : 0}>\n {icon ? <YStack width={36}>{icon}</YStack> : null}\n <YStack flex={1} gap=\"$1\">\n <SizableText size=\"$5\" fontWeight=\"600\" color=\"$color12\">\n {label}\n </SizableText>\n {description ? (\n <SizableText size=\"$3\" color=\"$color10\">\n {description}\n </SizableText>\n ) : null}\n </YStack>\n </XStack>\n </YStack>\n )\n}\n\nfunction CheckBadge({ accent }: { accent: string }) {\n return (\n <YStack\n width={24}\n height={24}\n borderRadius={12}\n backgroundColor={accent}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Check size={14} color=\"$color1\" />\n </YStack>\n )\n}\n\nexport type SelectableOption<T extends string | number> = {\n value: T\n label: string\n description?: string\n icon?: ReactNode\n}\n\ninterface SelectableGroupBaseProps<T extends string | number> {\n options: SelectableOption<T>[]\n variant?: SelectableVariant\n accent?: string\n disabled?: boolean\n}\n\nexport type SelectableGroupSingleProps<T extends string | number> =\n SelectableGroupBaseProps<T> & {\n multi?: false\n value: T | null\n onChange: (value: T) => void\n }\n\nexport type SelectableGroupMultiProps<T extends string | number> =\n SelectableGroupBaseProps<T> & {\n multi: true\n value: T[]\n onChange: (value: T[]) => void\n }\n\nexport type SelectableGroupProps<T extends string | number> =\n | SelectableGroupSingleProps<T>\n | SelectableGroupMultiProps<T>\n\n/**\n * Group controller for `<Selectable>`. Handles single or multi-select semantics, lays out\n * options vertically (`card`/`row`) or in a 2-col grid (`tile`), and surfaces an\n * `accessibilityRole` of `radio`/`checkbox` per option.\n */\nexport function SelectableGroup<T extends string | number>(props: SelectableGroupProps<T>) {\n const { options, variant = 'card', accent, disabled } = props\n const isMulti = props.multi === true\n\n const isSelected = useCallback(\n (value: T): boolean => {\n if (isMulti) {\n return (props as SelectableGroupMultiProps<T>).value.includes(value)\n }\n return (props as SelectableGroupSingleProps<T>).value === value\n },\n [isMulti, props],\n )\n\n const handlePress = useCallback(\n (value: T) => {\n if (isMulti) {\n const multi = props as SelectableGroupMultiProps<T>\n const next = multi.value.includes(value)\n ? multi.value.filter((v) => v !== value)\n : [...multi.value, value]\n multi.onChange(next)\n } else {\n ;(props as SelectableGroupSingleProps<T>).onChange(value)\n }\n },\n [isMulti, props],\n )\n\n if (variant === 'tile') {\n const rows: SelectableOption<T>[][] = []\n for (let i = 0; i < options.length; i += 2) {\n rows.push(options.slice(i, i + 2))\n }\n return (\n <YStack gap=\"$2.5\">\n {rows.map((row, rowIdx) => (\n <XStack key={rowIdx} gap=\"$2.5\">\n {row.map((opt) => (\n <Selectable\n key={String(opt.value)}\n label={opt.label}\n description={opt.description}\n icon={opt.icon}\n selected={isSelected(opt.value)}\n onPress={() => handlePress(opt.value)}\n variant=\"tile\"\n accent={accent}\n disabled={disabled}\n />\n ))}\n {row.length === 1 ? <YStack flex={1} aspectRatio={1} /> : null}\n </XStack>\n ))}\n </YStack>\n )\n }\n\n return (\n <YStack gap=\"$2.5\" role={isMulti ? undefined : 'radiogroup'}>\n {options.map((opt) => {\n const selected = isSelected(opt.value)\n return (\n <YStack\n key={String(opt.value)}\n accessibilityRole={isMulti ? 'checkbox' : 'radio'}\n accessibilityState={{ selected, disabled: !!disabled }}\n >\n <Selectable\n label={opt.label}\n description={opt.description}\n icon={opt.icon}\n selected={selected}\n onPress={() => handlePress(opt.value)}\n variant={variant}\n accent={accent}\n disabled={disabled}\n />\n </YStack>\n )\n })}\n </YStack>\n )\n}\n","/**\n * AnimatedView — declarative entry-animation wrapper.\n *\n * Drop-in replacement for ad-hoc `<Animated.View entering={...}>` calls.\n * Ten named presets, optional viewport trigger, optional per-child stagger,\n * and always honors `useReducedMotion`.\n *\n * Eventually supersedes the kit-local `StaggerEnter` in fitness-kit. Soft\n * deprecation only — both ship until kits are migrated.\n *\n * @example\n * <AnimatedView animation=\"slide-up\" delay={200} duration={400}>\n * <Card />\n * </AnimatedView>\n *\n * @example Stagger mode — wraps each child with delay = i * stagger.\n * <AnimatedView animation=\"fade\" stagger={50}>\n * <Card />\n * <Card />\n * <Card />\n * </AnimatedView>\n */\n\nimport {\n Children,\n isValidElement,\n useRef,\n useState,\n type ReactNode,\n} from 'react'\nimport {\n Dimensions,\n View,\n type LayoutChangeEvent,\n type ViewProps,\n} from 'react-native'\nimport Animated, {\n BounceIn,\n FadeIn,\n FadeInDown,\n FadeInLeft,\n FadeInRight,\n FadeInUp,\n ZoomIn,\n ZoomOut,\n useReducedMotion,\n withDelay,\n withTiming,\n type EntryAnimationsValues,\n type EntryExitAnimationFunction,\n} from 'react-native-reanimated'\n\nexport type AnimationPreset =\n | 'fade'\n | 'slide-up'\n | 'slide-down'\n | 'slide-left'\n | 'slide-right'\n | 'zoom-in'\n | 'zoom-out'\n | 'flip'\n | 'pop'\n | 'bounce'\n\nexport type AnimatedViewTrigger = 'mount' | 'viewport'\n\nexport interface AnimatedViewProps extends ViewProps {\n animation?: AnimationPreset\n /** ms before the animation starts. Default 0. */\n delay?: number\n /** ms total animation duration. Default 400. */\n duration?: number\n /**\n * 'mount': fires once on mount (default).\n * 'viewport': fires when the view enters the visible window\n * (within ~50px of the bottom edge on first measurement).\n * Note: a perfect viewport implementation needs the parent ScrollView's\n * scroll position. For v1 we ship a simpler \"delay until visible on first\n * measure\" pass that covers the common case where the view is rendered\n * either above the fold (fires immediately) or just below it (fires when\n * the user scrolls and the view's onLayout reports a y inside the\n * viewport). For deep-scroll lists, use a list-virtualization animation\n * pattern instead.\n */\n trigger?: AnimatedViewTrigger\n /**\n * ms between children. Default 0 = no stagger.\n * When > 0, children must be valid React elements; non-element children\n * (strings, numbers, null, booleans) are filtered out.\n */\n stagger?: number\n children: ReactNode\n}\n\nconst VIEWPORT_TRIGGER_MARGIN_PX = 50\n\n/**\n * Build a Reanimated entering animation factory for a given preset.\n * Each call returns a fresh animation builder so React's reconciler treats\n * `entering` as stable per-mount.\n */\nfunction buildEntering(\n preset: AnimationPreset,\n delay: number,\n duration: number,\n): EntryExitAnimationFunction | undefined {\n switch (preset) {\n case 'fade':\n return FadeIn.delay(delay).duration(duration).build()\n case 'slide-up':\n return FadeInDown.delay(delay).duration(duration).build()\n case 'slide-down':\n return FadeInUp.delay(delay).duration(duration).build()\n case 'slide-left':\n return FadeInRight.delay(delay).duration(duration).build()\n case 'slide-right':\n return FadeInLeft.delay(delay).duration(duration).build()\n case 'zoom-in':\n return ZoomIn.delay(delay).duration(duration).build()\n case 'zoom-out':\n return ZoomOut.delay(delay).duration(duration).build()\n case 'pop':\n return ZoomIn.delay(delay)\n .duration(duration)\n .springify()\n .damping(8)\n .stiffness(120)\n .build()\n case 'bounce':\n return BounceIn.delay(delay).duration(duration).build()\n case 'flip':\n // 'flip' is a custom preset: we layer a rotateY interpolation on top of\n // a fade-in entering animation. The keyframe approach mirrors how\n // Reanimated builds its own presets — return the initial values + the\n // animations toward the resting state.\n return ((values: EntryAnimationsValues) => {\n 'worklet'\n const animations = {\n opacity: withDelay(delay, withTiming(1, { duration })),\n transform: [\n { perspective: 1000 },\n {\n rotateY: withDelay(\n delay,\n withTiming('0deg', { duration }),\n ),\n },\n ],\n }\n const initialValues = {\n opacity: 0,\n transform: [{ perspective: 1000 }, { rotateY: '90deg' }],\n }\n return {\n initialValues,\n animations,\n }\n }) as unknown as EntryExitAnimationFunction\n }\n}\n\n/** Internal: render a single Animated.View with the chosen entering animation. */\nfunction SingleAnimatedView({\n animation,\n delay,\n duration,\n trigger,\n children,\n style,\n onLayout,\n ...rest\n}: Omit<AnimatedViewProps, 'stagger'> & {\n animation: AnimationPreset\n delay: number\n duration: number\n trigger: AnimatedViewTrigger\n}) {\n const reduced = useReducedMotion()\n const [visible, setVisible] = useState(trigger === 'mount')\n const measuredRef = useRef(false)\n\n const handleLayout = (e: LayoutChangeEvent) => {\n onLayout?.(e)\n if (trigger !== 'viewport' || measuredRef.current) return\n measuredRef.current = true\n const { y, height } = e.nativeEvent.layout\n const windowH = Dimensions.get('window').height\n // Fire if the view's top sits inside the viewport (with a margin), OR if\n // it sits just below the fold within VIEWPORT_TRIGGER_MARGIN_PX. This is\n // the \"fire on first measure that's near visible\" approximation; we don't\n // wire up scroll observation for v1.\n const inViewport = y < windowH + VIEWPORT_TRIGGER_MARGIN_PX\n if (inViewport) setVisible(true)\n }\n\n // Reduced motion: render plain View, no entering, no measurement gating.\n if (reduced) {\n return (\n <View style={style} onLayout={onLayout} {...rest}>\n {children}\n </View>\n )\n }\n\n // viewport trigger waiting for first-measurement: render a measuring View\n // with zero opacity until visible. Once visible, swap to Animated.View\n // which will run the entering animation on mount.\n if (!visible) {\n return (\n <View\n style={[style, { opacity: 0 }]}\n onLayout={handleLayout}\n {...rest}\n >\n {children}\n </View>\n )\n }\n\n const entering = buildEntering(animation, delay, duration)\n\n return (\n <Animated.View\n style={style}\n entering={entering}\n onLayout={trigger === 'viewport' ? undefined : onLayout}\n {...rest}\n >\n {children}\n </Animated.View>\n )\n}\n\n/**\n * Animated entry wrapper. See {@link AnimatedViewProps} for full options.\n */\nexport function AnimatedView({\n animation = 'fade',\n delay = 0,\n duration = 400,\n trigger = 'mount',\n stagger = 0,\n children,\n ...viewProps\n}: AnimatedViewProps) {\n // Stagger mode: filter to valid elements and wrap each in its own\n // AnimatedView with delay = userDelay + i * stagger. We don't recurse into\n // already-AnimatedView children (avoid double-wrapping); callers who pass\n // pre-animated children should set stagger=0.\n if (stagger > 0) {\n const list = Children.toArray(children).filter(isValidElement)\n return (\n <View {...viewProps}>\n {list.map((child, i) => {\n const childKey =\n (child as { key?: string | number | null }).key ?? i\n // Skip wrapping if the child is already an AnimatedView — caller is\n // managing its own animation. We detect by reference to the\n // function component, which is stable per-import.\n const childType = (child as { type?: unknown }).type\n if (childType === AnimatedView) {\n return child\n }\n return (\n <SingleAnimatedView\n key={childKey}\n animation={animation}\n delay={delay + i * stagger}\n duration={duration}\n trigger={trigger}\n >\n {child}\n </SingleAnimatedView>\n )\n })}\n </View>\n )\n }\n\n return (\n <SingleAnimatedView\n animation={animation}\n delay={delay}\n duration={duration}\n trigger={trigger}\n {...viewProps}\n >\n {children}\n </SingleAnimatedView>\n )\n}\n\n","/**\n * Expandable — single-row disclosure primitive.\n *\n * A collapsible row meant to live inside lists (FAQ, settings, exercise\n * detail panels, etc.). The parent decides composition; this primitive\n * owns header layout, chevron rotation, and smooth height/opacity reveal\n * of the body.\n *\n * Distinct from `OtfAccordion` (which is a *list-of-items* container that\n * manages its own open/closed map). `Expandable` renders a single row and\n * exposes controlled + uncontrolled state so the parent can compose\n * single-open, multi-open, or independent rows however it likes.\n *\n * Motion: Reanimated 4 (`useSharedValue` + `useAnimatedStyle` + `withTiming`).\n * Honors `useReducedMotion()` by snapping height/opacity/rotation to target.\n *\n * @example\n * <Expandable\n * icon={<ChevronRight />}\n * title=\"Why is my goal lower than yesterday?\"\n * subtitle=\"Tap to learn more\"\n * defaultExpanded\n * duration={250}\n * variant=\"card\"\n * >\n * <Text>...body content...</Text>\n * </Expandable>\n */\n\nimport { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { LayoutChangeEvent } from 'react-native'\nimport Animated, {\n Easing,\n useAnimatedStyle,\n useReducedMotion,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated'\nimport { SizableText, View, XStack, YStack } from 'tamagui'\nimport { ChevronDown } from '@tamagui/lucide-icons'\n\nexport type ExpandableProps = {\n /** Header title — string is rendered with default styles, ReactNode bypasses them. */\n title: string | ReactNode\n /** Small text shown under the title when collapsed (and when expanded). */\n subtitle?: string\n /** Leading icon rendered to the left of the title block. */\n icon?: ReactNode\n /** Uncontrolled initial open state. Ignored when `expanded` is provided. */\n defaultExpanded?: boolean\n /** Controlled open state. When provided, parent owns the value. */\n expanded?: boolean\n /** Fired with the next open state on every header tap. */\n onToggle?: (next: boolean) => void\n /** Body content shown when expanded. */\n children: ReactNode\n /** Tween duration in ms for the height/rotation animation. Default 250. */\n duration?: number\n /** Visual chrome. `'plain'` = header + body only. `'card'` = bordered + rounded + padded. */\n variant?: 'plain' | 'card'\n /** Disable the press handler and dim the row. */\n disabled?: boolean\n}\n\nconst EASE = Easing.bezier(0.65, 0, 0.35, 1) // easeInOutCubic\n\nexport function Expandable({\n title,\n subtitle,\n icon,\n defaultExpanded = false,\n expanded: expandedProp,\n onToggle,\n children,\n duration = 250,\n variant = 'plain',\n disabled = false,\n}: ExpandableProps) {\n const isControlled = expandedProp !== undefined\n const [internalExpanded, setInternalExpanded] = useState<boolean>(defaultExpanded)\n const expanded = isControlled ? (expandedProp as boolean) : internalExpanded\n\n const reducedMotion = useReducedMotion()\n\n // Measured natural height of the body, captured once via a hidden onLayout pass.\n const measuredHeight = useRef<number>(0)\n const [didMeasure, setDidMeasure] = useState<boolean>(false)\n\n const heightSv = useSharedValue<number>(defaultExpanded ? 0 : 0) // becomes target on first toggle/measure\n const opacitySv = useSharedValue<number>(defaultExpanded ? 1 : 0)\n const rotationSv = useSharedValue<number>(defaultExpanded ? 180 : 0)\n\n // Drive shared values whenever `expanded` flips.\n useEffect(() => {\n const targetHeight = expanded ? measuredHeight.current : 0\n const targetOpacity = expanded ? 1 : 0\n const targetRotation = expanded ? 180 : 0\n if (reducedMotion) {\n heightSv.value = targetHeight\n opacitySv.value = targetOpacity\n rotationSv.value = targetRotation\n return\n }\n // Opacity collapses faster than height so content fades before the row closes.\n const opacityDuration = expanded ? duration : Math.max(80, Math.round(duration * 0.5))\n heightSv.value = withTiming(targetHeight, { duration, easing: EASE })\n opacitySv.value = withTiming(targetOpacity, { duration: opacityDuration, easing: EASE })\n rotationSv.value = withTiming(targetRotation, { duration, easing: EASE })\n }, [expanded, duration, reducedMotion, heightSv, opacitySv, rotationSv])\n\n const bodyStyle = useAnimatedStyle(() => ({\n height: heightSv.value,\n opacity: opacitySv.value,\n overflow: 'hidden',\n }))\n\n const chevronStyle = useAnimatedStyle(() => ({\n transform: [{ rotate: `${rotationSv.value}deg` }],\n }))\n\n const handleMeasure = useCallback(\n (e: LayoutChangeEvent) => {\n const next = e.nativeEvent.layout.height\n if (next > 0 && next !== measuredHeight.current) {\n measuredHeight.current = next\n if (!didMeasure) {\n setDidMeasure(true)\n // If we mount expanded, snap the SV to the now-known height once.\n if (expanded) {\n heightSv.value = reducedMotion\n ? next\n : withTiming(next, { duration: 0 })\n }\n } else if (expanded) {\n // Body grew while open (e.g. dynamic children) — animate to the new height.\n heightSv.value = reducedMotion\n ? next\n : withTiming(next, { duration, easing: EASE })\n }\n }\n },\n [didMeasure, duration, expanded, heightSv, reducedMotion],\n )\n\n const handlePress = useCallback(() => {\n if (disabled) return\n const next = !expanded\n if (!isControlled) setInternalExpanded(next)\n onToggle?.(next)\n }, [disabled, expanded, isControlled, onToggle])\n\n const containerProps = useMemo(\n () =>\n variant === 'card'\n ? {\n borderWidth: 1,\n borderColor: '$color5' as const,\n borderRadius: '$4' as const,\n padding: '$3' as const,\n backgroundColor: '$background' as const,\n }\n : {},\n [variant],\n )\n\n const titleNode =\n typeof title === 'string' ? (\n <SizableText size=\"$4\" fontWeight=\"600\" color=\"$color12\">\n {title}\n </SizableText>\n ) : (\n title\n )\n\n return (\n <YStack {...containerProps} opacity={disabled ? 0.5 : 1}>\n <XStack\n accessibilityRole=\"button\"\n accessibilityState={{ expanded, disabled }}\n accessibilityHint=\"Tap to expand/collapse\"\n onPress={handlePress}\n disabled={disabled}\n cursor={disabled ? 'default' : 'pointer'}\n pressStyle={disabled ? undefined : { opacity: 0.85 }}\n alignItems=\"center\"\n gap=\"$3\"\n paddingVertical=\"$3\"\n minHeight={44}\n >\n {icon ? (\n <View width={24} height={24} alignItems=\"center\" justifyContent=\"center\">\n {icon}\n </View>\n ) : null}\n <YStack flex={1} gap=\"$1\">\n {titleNode}\n {subtitle ? (\n <SizableText size=\"$2\" color=\"$color10\">\n {subtitle}\n </SizableText>\n ) : null}\n </YStack>\n <Animated.View style={chevronStyle}>\n <ChevronDown size={20} color=\"$color10\" />\n </Animated.View>\n </XStack>\n\n {/* Animated body — measured natural height drives the tween. */}\n <Animated.View style={bodyStyle} pointerEvents={expanded ? 'auto' : 'none'}>\n <View onLayout={handleMeasure}>\n <View paddingTop=\"$1\" paddingBottom=\"$3\">\n {children}\n </View>\n </View>\n </Animated.View>\n </YStack>\n )\n}\n","/**\n * WheelPicker — vertical scroll-wheel picker.\n *\n * Premium iOS-flavored single-value picker for height / weight / any\n * enumerable scalar. Centered item is the selection; ±1 items dim & shrink,\n * ±2 items dim further. Snap-on-release with a haptic tick on iOS.\n *\n * Implementation: `Animated.FlatList` with `snapToInterval` + custom per-item\n * transforms via `useAnimatedStyle` reading a shared scroll-offset.\n *\n * Honors `useReducedMotion()` — when on, renders a flat snap-scroll list\n * without per-item interpolation. A11y exposes adjustable role +\n * increment/decrement actions for VoiceOver.\n *\n * @example\n * <WheelPicker\n * options={Array.from({ length: 121 }, (_, i) => ({ value: 140 + i, label: String(140 + i) }))}\n * value={height}\n * onChange={setHeight}\n * unitLabel=\"cm\"\n * variant=\"card\"\n * />\n */\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type JSX,\n} from 'react'\nimport {\n FlatList,\n Platform,\n type FlatListProps,\n type NativeScrollEvent,\n type NativeSyntheticEvent,\n} from 'react-native'\nimport { SizableText, View, XStack, YStack } from 'tamagui'\nimport Animated, {\n useAnimatedScrollHandler,\n useAnimatedStyle,\n useSharedValue,\n interpolate,\n Extrapolation,\n useReducedMotion,\n type SharedValue,\n} from 'react-native-reanimated'\n\n// expo-haptics is wrapped — gracefully no-op on web / older Android targets\n// where the native module isn't present. Local minimal type avoids needing\n// expo-haptics declared as a build-time dep of this package; consuming kits\n// install it themselves per the 2026-05-03 mobile primitives ADR.\ntype HapticsModule = { selectionAsync: () => Promise<void> }\nlet Haptics: HapticsModule | null = null\ntry {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n Haptics = require('expo-haptics') as HapticsModule\n} catch {\n Haptics = null\n}\n\nconst AnimatedFlatList = Animated.createAnimatedComponent(\n FlatList,\n) as unknown as <ItemT>(\n props: FlatListProps<ItemT> & { ref?: React.Ref<FlatList<ItemT>> },\n) => JSX.Element\n\nexport interface WheelPickerOption<T extends string | number> {\n value: T\n label: string\n}\n\nexport interface WheelPickerProps<T extends string | number> {\n options: WheelPickerOption<T>[]\n value: T\n onChange: (v: T) => void\n /** Per-item row height in px. Default 44. */\n itemHeight?: number\n /** Number of items visible at once. MUST be odd. Default 5. */\n visibleItems?: number\n /** Static unit label rendered to the right of the centered value (e.g. 'cm'). */\n unitLabel?: string\n /** Fire `Haptics.selectionAsync()` on iOS at each snapped index. Default true. */\n haptic?: boolean\n /** Visual chrome. `plain` = no background, `card` = bordered + rounded surface. Default `plain`. */\n variant?: 'plain' | 'card'\n /** Color of the centered indicator hairlines. Default `$color12`. */\n accent?: string\n /** Width of the picker container. Default `'100%'`. */\n width?: number | string\n disabled?: boolean\n}\n\ntype PadItem<T extends string | number> =\n | { kind: 'pad'; key: string }\n | { kind: 'item'; key: string; option: WheelPickerOption<T>; index: number }\n\ninterface RowProps<T extends string | number> {\n item: PadItem<T>\n itemHeight: number\n scrollY: SharedValue<number>\n reducedMotion: boolean\n}\n\n/**\n * One wheel row. Reads the shared scroll offset and interpolates opacity +\n * scale based on absolute distance (in items) from the current center.\n */\nfunction WheelRow<T extends string | number>({\n item,\n itemHeight,\n scrollY,\n reducedMotion,\n}: RowProps<T>): JSX.Element {\n const animatedStyle = useAnimatedStyle(() => {\n if (item.kind === 'pad' || reducedMotion) {\n return { opacity: 1, transform: [{ scale: 1 }] }\n }\n const center = scrollY.value / itemHeight\n const distance = Math.abs(item.index - center)\n const opacity = interpolate(\n distance,\n [0, 1, 2],\n [1, 0.5, 0.3],\n Extrapolation.CLAMP,\n )\n const scale = interpolate(\n distance,\n [0, 1, 2],\n [1, 0.85, 0.7],\n Extrapolation.CLAMP,\n )\n return { opacity, transform: [{ scale }] }\n }, [itemHeight, item, reducedMotion])\n\n if (item.kind === 'pad') {\n return <View height={itemHeight} />\n }\n\n return (\n <Animated.View\n style={[\n {\n height: itemHeight,\n alignItems: 'center',\n justifyContent: 'center',\n },\n animatedStyle,\n ]}\n >\n <SizableText size=\"$7\" fontWeight=\"700\" color=\"$color12\">\n {item.option.label}\n </SizableText>\n </Animated.View>\n )\n}\n\n/**\n * WheelPicker — generic vertical scroll-wheel.\n *\n * `T` is the option value type (`string | number`). Snap-aligned to the\n * center; calls `onChange(options[index].value)` on momentum-scroll-end.\n */\nexport function WheelPicker<T extends string | number>(\n props: WheelPickerProps<T>,\n): JSX.Element {\n const {\n options,\n value,\n onChange,\n itemHeight = 44,\n visibleItems = 5,\n unitLabel,\n haptic = true,\n variant = 'plain',\n accent = '$color12',\n width = '100%',\n disabled = false,\n } = props\n\n if (visibleItems % 2 === 0) {\n throw new Error('WheelPicker: `visibleItems` must be odd.')\n }\n\n const reducedMotion = useReducedMotion()\n const flatListRef = useRef<FlatList<PadItem<T>>>(null)\n const scrollY = useSharedValue(0)\n const lastReportedIndex = useRef<number>(-1)\n\n const padCount = Math.floor(visibleItems / 2)\n const containerHeight = itemHeight * visibleItems\n\n const data: PadItem<T>[] = useMemo(() => {\n const padTop: PadItem<T>[] = Array.from({ length: padCount }, (_, i) => ({\n kind: 'pad',\n key: `pad-top-${i}`,\n }))\n const real: PadItem<T>[] = options.map((option, i) => ({\n kind: 'item',\n key: `item-${i}-${String(option.value)}`,\n option,\n index: i,\n }))\n const padBottom: PadItem<T>[] = Array.from({ length: padCount }, (_, i) => ({\n kind: 'pad',\n key: `pad-bot-${i}`,\n }))\n return [...padTop, ...real, ...padBottom]\n }, [options, padCount])\n\n const valueIndex = useMemo(\n () => options.findIndex((o) => o.value === value),\n [options, value],\n )\n const safeValueIndex = valueIndex === -1 ? 0 : valueIndex\n\n // Initial scroll-to-value after layout.\n useEffect(() => {\n if (safeValueIndex < 0 || options.length === 0) return\n const t = setTimeout(() => {\n flatListRef.current?.scrollToIndex({\n index: safeValueIndex,\n animated: false,\n })\n }, 0)\n return () => clearTimeout(t)\n // Intentionally only on mount + when the value→index mapping shifts because options changed.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [safeValueIndex, options.length])\n\n const scrollHandler = useAnimatedScrollHandler({\n onScroll: (e) => {\n scrollY.value = e.contentOffset.y\n },\n })\n\n const handleMomentumEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const offsetY = e.nativeEvent.contentOffset.y\n const index = Math.round(offsetY / itemHeight)\n const clamped = Math.max(0, Math.min(options.length - 1, index))\n if (clamped === lastReportedIndex.current) return\n lastReportedIndex.current = clamped\n const next = options[clamped]\n if (!next) return\n if (next.value !== value) {\n if (haptic && Platform.OS === 'ios' && Haptics) {\n Haptics.selectionAsync().catch(() => {\n // Swallow — older devices / web may reject.\n })\n }\n onChange(next.value)\n }\n },\n [haptic, itemHeight, onChange, options, value],\n )\n\n const getItemLayout = useCallback(\n (_: ArrayLike<PadItem<T>> | null | undefined, index: number) => ({\n length: itemHeight,\n offset: itemHeight * index,\n index,\n }),\n [itemHeight],\n )\n\n const handleIncrement = useCallback(() => {\n const next = Math.min(options.length - 1, safeValueIndex + 1)\n if (next === safeValueIndex) return\n flatListRef.current?.scrollToIndex({ index: next, animated: true })\n const target = options[next]\n if (target) onChange(target.value)\n }, [onChange, options, safeValueIndex])\n\n const handleDecrement = useCallback(() => {\n const next = Math.max(0, safeValueIndex - 1)\n if (next === safeValueIndex) return\n flatListRef.current?.scrollToIndex({ index: next, animated: true })\n const target = options[next]\n if (target) onChange(target.value)\n }, [onChange, options, safeValueIndex])\n\n const onAccessibilityAction = useCallback(\n (event: { nativeEvent: { actionName: string } }) => {\n if (event.nativeEvent.actionName === 'increment') handleIncrement()\n else if (event.nativeEvent.actionName === 'decrement') handleDecrement()\n },\n [handleDecrement, handleIncrement],\n )\n\n const currentLabel = options[safeValueIndex]?.label ?? ''\n\n // Track scroll offset in JS for the reduced-motion fallback's onChange.\n const [, setJsScrollY] = useState(0)\n const handleScrollJs = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n setJsScrollY(e.nativeEvent.contentOffset.y)\n },\n [],\n )\n\n const renderItem = useCallback(\n ({ item }: { item: PadItem<T> }) => (\n <WheelRow\n item={item}\n itemHeight={itemHeight}\n scrollY={scrollY}\n reducedMotion={reducedMotion}\n />\n ),\n [itemHeight, reducedMotion, scrollY],\n )\n\n const cardChrome =\n variant === 'card'\n ? {\n backgroundColor: '$color2' as const,\n borderColor: '$color5' as const,\n borderWidth: 1,\n borderRadius: '$6' as const,\n }\n : {}\n\n return (\n <XStack\n width={width as number | string}\n alignItems=\"center\"\n justifyContent=\"center\"\n gap=\"$2\"\n opacity={disabled ? 0.4 : 1}\n pointerEvents={disabled ? 'none' : 'auto'}\n {...cardChrome}\n >\n <YStack\n flex={1}\n height={containerHeight}\n position=\"relative\"\n accessibilityRole=\"adjustable\"\n accessibilityValue={{ text: currentLabel }}\n accessibilityActions={[\n { name: 'increment' },\n { name: 'decrement' },\n ]}\n onAccessibilityAction={onAccessibilityAction}\n >\n <AnimatedFlatList<PadItem<T>>\n ref={flatListRef}\n data={data}\n keyExtractor={(item) => item.key}\n renderItem={renderItem}\n showsVerticalScrollIndicator={false}\n snapToInterval={itemHeight}\n snapToAlignment=\"center\"\n decelerationRate=\"fast\"\n getItemLayout={getItemLayout}\n onScroll={reducedMotion ? handleScrollJs : scrollHandler}\n onMomentumScrollEnd={handleMomentumEnd}\n scrollEventThrottle={16}\n bounces={false}\n overScrollMode=\"never\"\n scrollEnabled={!disabled}\n />\n\n {/* Centered selection indicator — two horizontal hairlines. */}\n <View\n pointerEvents=\"none\"\n position=\"absolute\"\n left={0}\n right={0}\n top={containerHeight / 2 - itemHeight / 2}\n height={1}\n backgroundColor={accent}\n opacity={0.6}\n />\n <View\n pointerEvents=\"none\"\n position=\"absolute\"\n left={0}\n right={0}\n top={containerHeight / 2 + itemHeight / 2 - 1}\n height={1}\n backgroundColor={accent}\n opacity={0.6}\n />\n </YStack>\n\n {unitLabel ? (\n <SizableText\n size=\"$5\"\n fontWeight=\"600\"\n color=\"$color11\"\n paddingRight=\"$3\"\n >\n {unitLabel}\n </SizableText>\n ) : null}\n </XStack>\n )\n}\n","/**\n * RulerScrubber — horizontal ruler-style numeric value picker.\n *\n * Apple-Health-flavored continuous-range input. Renders ticks every `step`\n * with longer labeled ticks every `labelEvery`, snaps to the nearest tick on\n * scroll-end, and surfaces a centered value display above the ruler. Uses\n * Reanimated 4 for the scroll handler + per-tick interpolation; falls back to\n * static ticks when `useReducedMotion()` is on. Optional iOS haptic on every\n * step crossed.\n *\n * @example Target weight (50–120 kg, half-kg steps)\n * const [weight, setWeight] = useState(70)\n * <RulerScrubber min={50} max={120} step={0.5} value={weight} onChange={setWeight} unit=\"kg\" />\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport {\n Platform,\n type AccessibilityActionEvent,\n type LayoutChangeEvent,\n} from 'react-native'\nimport Animated, {\n interpolate,\n interpolateColor,\n runOnJS,\n useAnimatedScrollHandler,\n useAnimatedStyle,\n useReducedMotion,\n useSharedValue,\n type SharedValue,\n} from 'react-native-reanimated'\nimport { SizableText, View, XStack, YStack } from 'tamagui'\n\n// expo-haptics is wrapped — gracefully no-op on web / older Android targets\n// where the native module isn't present. The dependency is approved for\n// pattern-tier components per the 2026-05-03 mobile primitives ADR.\ntype HapticsModule = { selectionAsync: () => Promise<void> }\nlet Haptics: HapticsModule | null = null\ntry {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n Haptics = require('expo-haptics') as HapticsModule\n} catch {\n Haptics = null\n}\n\n/** Public props for {@link RulerScrubber}. */\nexport interface RulerScrubberProps {\n min: number\n max: number\n /** Distance between adjacent ticks, in source units. Default `1`. */\n step?: number\n value: number\n onChange: (next: number) => void\n /** Unit label rendered next to the big value display (e.g. `'kg'`). */\n unit?: string\n /** Show the centered big-number display above the ruler. Default `true`. */\n showValue?: boolean\n /**\n * Render every Nth tick as the longer \"labeled\" tick. `1` labels every\n * step; `5` labels every 5 steps. Default `5`.\n */\n labelEvery?: number\n /** Fire `Haptics.selectionAsync()` on each step crossed during scrub. Default `true`. */\n haptic?: boolean\n /** Pixel spacing between adjacent ticks. Default `12`. */\n tickSpacing?: number\n /** Visual height of the ruler area (excludes the value display). Default `96`. */\n height?: number\n /** Active-tick + center indicator color. Tamagui token or hex. Default `'$color12'`. */\n accent?: string\n disabled?: boolean\n}\n\n/** Tick row heights — long tick gets the label, short tick is decorative. */\nconst LONG_TICK_HEIGHT = 24\nconst SHORT_TICK_HEIGHT = 12\n/** Width (in px) of the visible \"active\" window used to weight tick saturation. */\nconst ACTIVE_WINDOW_PX = 60\n\n/** Quantize an arbitrary number into the nearest tick index. */\nfunction quantizeIndex(\n rawValue: number,\n min: number,\n step: number,\n totalTicks: number,\n): number {\n const idx = Math.round((rawValue - min) / step)\n if (idx < 0) return 0\n if (idx > totalTicks - 1) return totalTicks - 1\n return idx\n}\n\n/** Convert a tick index back to a value, clamped + rounded to avoid float drift. */\nfunction indexToValue(index: number, min: number, step: number): number {\n // Round to a reasonable precision so 0.5 steps don't accumulate FP error.\n const raw = min + index * step\n const decimals = step < 1 ? 2 : 0\n const factor = 10 ** decimals\n return Math.round(raw * factor) / factor\n}\n\n/**\n * Single tick. Memoized via `useAnimatedStyle` so the per-tick opacity/color\n * interpolation runs on the UI thread without re-rendering each tick on every\n * scroll event.\n */\nfunction Tick({\n index,\n totalTicks,\n tickSpacing,\n isLabeled,\n scrollX,\n viewportWidth,\n accent,\n reducedMotion,\n}: {\n index: number\n totalTicks: number\n tickSpacing: number\n isLabeled: boolean\n scrollX: SharedValue<number>\n viewportWidth: number\n accent: string\n reducedMotion: boolean\n}) {\n const tickHeight = isLabeled ? LONG_TICK_HEIGHT : SHORT_TICK_HEIGHT\n\n const animatedStyle = useAnimatedStyle(() => {\n if (reducedMotion || viewportWidth === 0) {\n return { opacity: isLabeled ? 0.95 : 0.45, backgroundColor: '#9aa0a6' }\n }\n // Distance (in px) from this tick's center to the viewport's center.\n const tickCenterX = index * tickSpacing\n const viewportCenterX = scrollX.value\n const distance = Math.abs(tickCenterX - viewportCenterX)\n\n const opacity = interpolate(\n distance,\n [0, ACTIVE_WINDOW_PX, ACTIVE_WINDOW_PX * 2],\n [1, 0.6, 0.25],\n 'clamp',\n )\n // Saturate from a muted neutral to the accent color as the tick approaches center.\n const color = interpolateColor(\n distance,\n [0, ACTIVE_WINDOW_PX * 1.2],\n [accent, '#9aa0a6'],\n )\n return { opacity, backgroundColor: color }\n }, [index, totalTicks, tickSpacing, viewportWidth, accent, reducedMotion, isLabeled])\n\n return (\n <View\n width={tickSpacing}\n height={LONG_TICK_HEIGHT + 24}\n alignItems=\"center\"\n justifyContent=\"flex-start\"\n >\n <Animated.View\n style={[\n { width: 2, height: tickHeight, borderRadius: 1 },\n animatedStyle,\n ]}\n />\n </View>\n )\n}\n\n/** Internal renderer for the labeled value sitting under the tick. */\nfunction TickLabel({\n index,\n min,\n step,\n tickSpacing,\n}: {\n index: number\n min: number\n step: number\n tickSpacing: number\n}) {\n const value = indexToValue(index, min, step)\n return (\n <View\n position=\"absolute\"\n top={LONG_TICK_HEIGHT + 4}\n width={tickSpacing * 6}\n left={index * tickSpacing - tickSpacing * 3 + tickSpacing / 2}\n alignItems=\"center\"\n pointerEvents=\"none\"\n >\n <SizableText size=\"$2\" color=\"$color10\" numberOfLines={1}>\n {value}\n </SizableText>\n </View>\n )\n}\n\n/**\n * Horizontal ruler-style numeric value picker. See {@link RulerScrubberProps}.\n */\nexport function RulerScrubber({\n min,\n max,\n step = 1,\n value,\n onChange,\n unit,\n showValue = true,\n labelEvery = 5,\n haptic = true,\n tickSpacing = 12,\n height = 96,\n accent = '$color12',\n disabled = false,\n}: RulerScrubberProps) {\n const reducedMotion = useReducedMotion()\n\n // Total ticks across the range. e.g. min=50, max=120, step=0.5 → 141 ticks.\n const totalTicks = Math.max(1, Math.round((max - min) / step) + 1)\n\n // Viewport width measured once via onLayout so we can pad the scroll content\n // by half a viewport on each side (lets the first + last tick sit centered\n // under the indicator).\n const [viewportWidth, setViewportWidth] = useState(0)\n\n // Scroll offset SharedValue — drives both per-tick interpolation and snap math.\n const scrollX = useSharedValue(0)\n // Last reported value (for parent onChange dedupe + haptic step counting).\n const lastReportedValueRef = useRef<number>(value)\n // Last index we fired a haptic for during a continuous scrub.\n const lastHapticIndexRef = useRef<number>(quantizeIndex(value, min, step, totalTicks))\n // Imperative ref to the underlying Animated.ScrollView for snap-back scrolls.\n const scrollRef = useRef<Animated.ScrollView | null>(null)\n\n /** Compute the scrollX offset where a given tick index sits centered. */\n const offsetForIndex = useCallback(\n (index: number): number => index * tickSpacing,\n [tickSpacing],\n )\n\n /** Imperatively scroll the ruler so a given tick index is centered. */\n const scrollToIndex = useCallback(\n (index: number, animated: boolean) => {\n const node = scrollRef.current\n if (!node || viewportWidth === 0) return\n node.scrollTo({ x: offsetForIndex(index), y: 0, animated })\n },\n [offsetForIndex, viewportWidth],\n )\n\n // Initial scroll-to-value: once we know the viewport width, snap the\n // scrollview to the controlled `value`. We only run this once per\n // mount/viewport-measurement to avoid fighting user gestures.\n const didInitialScrollRef = useRef(false)\n useEffect(() => {\n if (viewportWidth === 0 || didInitialScrollRef.current) return\n const idx = quantizeIndex(value, min, step, totalTicks)\n scrollToIndex(idx, false)\n didInitialScrollRef.current = true\n }, [viewportWidth, value, min, step, totalTicks, scrollToIndex])\n\n // Re-sync when the controlled `value` is changed externally (e.g. parent\n // resets the scrubber). Only scrolls if the new value maps to a different\n // tick than what we last reported, to avoid clobbering active scrubbing.\n useEffect(() => {\n if (viewportWidth === 0) return\n if (value === lastReportedValueRef.current) return\n const idx = quantizeIndex(value, min, step, totalTicks)\n scrollToIndex(idx, true)\n lastReportedValueRef.current = value\n lastHapticIndexRef.current = idx\n }, [value, min, step, totalTicks, viewportWidth, scrollToIndex])\n\n /** Fire a single haptic tick (best-effort). */\n const fireHapticTick = useCallback(() => {\n if (!haptic) return\n if (Platform.OS !== 'ios') return\n if (!Haptics) return\n void Haptics.selectionAsync().catch(() => undefined)\n }, [haptic])\n\n /** Called from worklet when scrollX crosses into a new tick during scrub. */\n const onTickCrossed = useCallback(\n (newIndex: number) => {\n if (newIndex === lastHapticIndexRef.current) return\n lastHapticIndexRef.current = newIndex\n fireHapticTick()\n },\n [fireHapticTick],\n )\n\n /** Called from worklet on momentum-end to snap + commit final value. */\n const commitSnap = useCallback(\n (rawOffset: number) => {\n const index = quantizeIndex(\n rawOffset / tickSpacing + min / step - min / step,\n min,\n step,\n totalTicks,\n )\n const snappedOffset = offsetForIndex(index)\n // Snap-back if we're not exactly on the tick (sub-pixel). `animated:true`\n // gives a little spring as the picker settles.\n if (Math.abs(rawOffset - snappedOffset) > 0.5) {\n scrollToIndex(index, true)\n }\n const next = indexToValue(index, min, step)\n if (next !== lastReportedValueRef.current) {\n lastReportedValueRef.current = next\n lastHapticIndexRef.current = index\n onChange(next)\n }\n },\n [tickSpacing, min, step, totalTicks, offsetForIndex, scrollToIndex, onChange],\n )\n\n const scrollHandler = useAnimatedScrollHandler({\n onScroll: (event) => {\n 'worklet'\n const x = event.contentOffset.x\n scrollX.value = x\n // Cheap haptic-tick detection: which integer tick are we closest to?\n const idx = Math.round(x / tickSpacing)\n if (idx >= 0 && idx < totalTicks) {\n runOnJS(onTickCrossed)(idx)\n }\n },\n onMomentumEnd: (event) => {\n 'worklet'\n runOnJS(commitSnap)(event.contentOffset.x)\n },\n onEndDrag: (event) => {\n 'worklet'\n // If the user releases without enough velocity to trigger momentum,\n // momentumEnd never fires — handle the snap here as a fallback.\n const vx = event.velocity?.x ?? 0\n if (Math.abs(vx) < 0.05) {\n runOnJS(commitSnap)(event.contentOffset.x)\n }\n },\n })\n\n /** Capture viewport width — drives the half-viewport content padding. */\n const handleLayout = useCallback((e: LayoutChangeEvent) => {\n const w = e.nativeEvent.layout.width\n setViewportWidth((prev) => (prev === w ? prev : w))\n }, [])\n\n /** A11y: support iOS/Android \"adjustable\" increment/decrement gestures. */\n const handleAccessibilityAction = useCallback(\n (event: AccessibilityActionEvent) => {\n if (disabled) return\n const action = event.nativeEvent.actionName\n const currentIdx = quantizeIndex(\n lastReportedValueRef.current,\n min,\n step,\n totalTicks,\n )\n let nextIdx = currentIdx\n if (action === 'increment') nextIdx = Math.min(currentIdx + 1, totalTicks - 1)\n if (action === 'decrement') nextIdx = Math.max(currentIdx - 1, 0)\n if (nextIdx === currentIdx) return\n const next = indexToValue(nextIdx, min, step)\n lastReportedValueRef.current = next\n lastHapticIndexRef.current = nextIdx\n scrollToIndex(nextIdx, true)\n onChange(next)\n },\n [disabled, min, step, totalTicks, scrollToIndex, onChange],\n )\n\n // Center indicator pill — vertical bar pinned to the viewport center.\n const indicatorLeft = viewportWidth > 0 ? viewportWidth / 2 - 2 : 0\n\n // Half-viewport padding lets the first + last ticks reach the center indicator.\n const horizontalPadding = viewportWidth > 0 ? viewportWidth / 2 : 0\n\n // Indices of labeled ticks (every `labelEvery` ticks).\n const labeledIndices: number[] = []\n for (let i = 0; i < totalTicks; i += labelEvery) labeledIndices.push(i)\n\n // Format the displayed value with the same precision as the step.\n const decimals = step < 1 ? 1 : 0\n const displayValue = value.toFixed(decimals)\n\n return (\n <YStack opacity={disabled ? 0.5 : 1}>\n {showValue ? (\n <XStack alignItems=\"baseline\" justifyContent=\"center\" gap=\"$2\" marginBottom=\"$3\">\n <SizableText fontSize={40} fontWeight=\"700\" color=\"$color12\" lineHeight={44}>\n {displayValue}\n </SizableText>\n {unit ? (\n <SizableText size=\"$5\" color=\"$color10\" fontWeight=\"500\">\n {unit}\n </SizableText>\n ) : null}\n </XStack>\n ) : null}\n\n <View\n height={height}\n onLayout={handleLayout}\n accessible\n accessibilityRole=\"adjustable\"\n accessibilityLabel={`${displayValue}${unit ? ` ${unit}` : ''}`}\n accessibilityValue={{ min, max, now: Number(displayValue) }}\n accessibilityActions={[\n { name: 'increment', label: 'Increase' },\n { name: 'decrement', label: 'Decrease' },\n ]}\n onAccessibilityAction={handleAccessibilityAction}\n position=\"relative\"\n overflow=\"hidden\"\n >\n <Animated.ScrollView\n ref={scrollRef}\n horizontal\n showsHorizontalScrollIndicator={false}\n onScroll={scrollHandler}\n scrollEventThrottle={16}\n decelerationRate=\"fast\"\n scrollEnabled={!disabled}\n contentContainerStyle={{\n paddingHorizontal: horizontalPadding,\n paddingTop: 8,\n }}\n >\n <View\n width={Math.max(totalTicks * tickSpacing, 1)}\n height={height - 16}\n position=\"relative\"\n >\n <XStack>\n {Array.from({ length: totalTicks }).map((_, i) => {\n const isLabeled = i % labelEvery === 0\n return (\n <Tick\n key={i}\n index={i}\n totalTicks={totalTicks}\n tickSpacing={tickSpacing}\n isLabeled={isLabeled}\n scrollX={scrollX}\n viewportWidth={viewportWidth}\n accent={typeof accent === 'string' && accent.startsWith('$') ? '#ffffff' : accent}\n reducedMotion={reducedMotion}\n />\n )\n })}\n </XStack>\n {labeledIndices.map((idx) => (\n <TickLabel\n key={`label-${idx}`}\n index={idx}\n min={min}\n step={step}\n tickSpacing={tickSpacing}\n />\n ))}\n </View>\n </Animated.ScrollView>\n\n {/* Center indicator — vertical pill pinned to viewport center. */}\n <View\n position=\"absolute\"\n top={4}\n left={indicatorLeft}\n width={4}\n height={LONG_TICK_HEIGHT + 12}\n backgroundColor={accent}\n borderRadius={2}\n pointerEvents=\"none\"\n />\n </View>\n </YStack>\n )\n}\n","/**\n * CardScroller — horizontal snap-to-card scroller with auto-center on mount.\n *\n * Premium horizontal scroller for plans, programs, friend cards, recipe rows.\n * Each card snaps to either the viewport center (`snap='center'`, default) or\n * the leading edge (`snap='start'`). With center snap on, off-screen cards\n * gently scale + dim so the focused card pops without losing peripheral\n * context. Auto-scrolls to `initialIndex` on mount (defaults to the middle).\n *\n * Implementation: `Animated.FlatList` (horizontal) with `snapToInterval` +\n * shared scroll-X driving per-item `useAnimatedStyle`. For `snap='center'`\n * the outer `paddingHorizontal` is recomputed as `(viewport - itemWidth) / 2`\n * so the first/last cards CAN reach the center.\n *\n * Honors `useReducedMotion()` — when on, renders a flat snap-scroll list with\n * snap behavior preserved but no per-item scale/opacity interpolation. A11y\n * exposes `adjustable` role + an `accessibilityValue.text` describing the\n * current index.\n *\n * @example\n * <CardScroller\n * data={workoutTypes}\n * keyExtractor={(t) => t.id}\n * itemWidth={240}\n * gap={12}\n * renderItem={(t) => <WorkoutTypeCard type={t} />}\n * onIndexChange={(i) => setActive(i)}\n * />\n */\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type JSX,\n type ReactNode,\n} from 'react'\nimport {\n Dimensions,\n FlatList,\n type FlatListProps,\n type NativeScrollEvent,\n type NativeSyntheticEvent,\n} from 'react-native'\nimport { View, YStack } from 'tamagui'\nimport Animated, {\n Extrapolation,\n interpolate,\n useAnimatedScrollHandler,\n useAnimatedStyle,\n useReducedMotion,\n useSharedValue,\n type SharedValue,\n} from 'react-native-reanimated'\n\nconst AnimatedFlatList = Animated.createAnimatedComponent(\n FlatList,\n) as unknown as <ItemT>(\n props: FlatListProps<ItemT> & { ref?: React.Ref<FlatList<ItemT>> },\n) => JSX.Element\n\nexport interface CardScrollerProps<T> {\n /** Source data. */\n data: readonly T[]\n /** Render one card. */\n renderItem: (item: T, index: number) => ReactNode\n /** Stable key per item. */\n keyExtractor: (item: T, index: number) => string\n /**\n * Width of each card. Number = px, string `'70%'` = percent of viewport\n * width (measured via `Dimensions.get('window')`). Default `280`.\n */\n itemWidth?: number | `${number}%`\n /** Gap (px) between cards. Default `12`. */\n gap?: number\n /**\n * Index to center on mount. Default `Math.floor(data.length / 2)`.\n * Auto-scrolls there (non-animated) once after layout.\n */\n initialIndex?: number\n /**\n * Outer horizontal padding around the scroller. For `snap='center'` this is\n * recomputed as `(viewport - itemWidth) / 2` so first/last cards can reach\n * the center — the user-provided value is ignored in that mode. Default `16`.\n */\n paddingHorizontal?: number\n /**\n * Snap behavior. `'center'` snaps each card to viewport center; `'start'`\n * snaps to the leading edge. Default `'center'`.\n */\n snap?: 'center' | 'start'\n /**\n * Per-card scale + opacity falloff for off-center cards. Only takes effect\n * when `snap === 'center'`. Default `true` for center snap, `false` for\n * start snap. Set `false` for plain image carousels.\n */\n fadeOff?: boolean\n /** Fires after settle on a new snapped index. */\n onIndexChange?: (index: number) => void\n /** Optional VoiceOver/TalkBack label for the scroller container. */\n accessibilityLabel?: string\n}\n\ninterface RowProps {\n width: number\n gap: number\n index: number\n scrollX: SharedValue<number>\n enabled: boolean\n paddingStart: number\n children: ReactNode\n}\n\n/**\n * One card row. Reads the shared scroll offset and interpolates scale +\n * opacity based on absolute distance (in card-units) from the visual center.\n * When `enabled` is false (reduced-motion or fadeOff disabled), renders the\n * card with no transform.\n */\nfunction CardRow({\n width,\n gap,\n index,\n scrollX,\n enabled,\n paddingStart,\n children,\n}: RowProps): JSX.Element {\n const stride = width + gap\n const animatedStyle = useAnimatedStyle(() => {\n if (!enabled) {\n return { opacity: 1, transform: [{ scale: 1 }] }\n }\n // Distance (in card-units) from this card's center to the viewport center.\n const cardCenter = paddingStart + index * stride + width / 2\n const viewportCenter = scrollX.value + paddingStart + width / 2\n const distance = Math.abs(cardCenter - viewportCenter) / stride\n const scale = interpolate(\n distance,\n [0, 1, 2],\n [1, 0.92, 0.85],\n Extrapolation.CLAMP,\n )\n const opacity = interpolate(\n distance,\n [0, 1, 2],\n [1, 0.85, 0.65],\n Extrapolation.CLAMP,\n )\n return { opacity, transform: [{ scale }] }\n }, [stride, width, paddingStart, index, enabled])\n\n return (\n <Animated.View\n style={[\n {\n width,\n marginRight: gap,\n },\n animatedStyle,\n ]}\n >\n {children}\n </Animated.View>\n )\n}\n\n/**\n * CardScroller — generic horizontal snap-scroller.\n *\n * `T` is the data row type so callers get type-safe `renderItem` +\n * `keyExtractor`.\n */\nexport function CardScroller<T>(props: CardScrollerProps<T>): JSX.Element {\n const {\n data,\n renderItem,\n keyExtractor,\n itemWidth = 280,\n gap = 12,\n initialIndex,\n paddingHorizontal = 16,\n snap = 'center',\n fadeOff,\n onIndexChange,\n accessibilityLabel,\n } = props\n\n const reducedMotion = useReducedMotion()\n const flatListRef = useRef<FlatList<T>>(null)\n const scrollX = useSharedValue(0)\n const lastReportedIndex = useRef<number>(-1)\n\n // Resolve viewport width once at mount; small data arrays (single card)\n // tolerate this fine — no resize listener needed for the static snap math.\n const [viewportWidth] = useState(() => Dimensions.get('window').width)\n\n const resolvedItemWidth = useMemo(() => {\n if (typeof itemWidth === 'number') return itemWidth\n const pctMatch = /^(\\d+(?:\\.\\d+)?)%$/.exec(itemWidth)\n if (!pctMatch) return 280\n const pct = parseFloat(pctMatch[1] ?? '0')\n return Math.max(0, Math.round((viewportWidth * pct) / 100))\n }, [itemWidth, viewportWidth])\n\n const isCenterSnap = snap === 'center'\n const fadeEnabled =\n isCenterSnap && (fadeOff ?? true) && !reducedMotion && data.length > 1\n\n // For center snap, override paddingHorizontal so first/last cards CAN reach\n // the viewport center. For start snap, honor the user-provided value.\n const resolvedPadding = isCenterSnap\n ? Math.max(0, Math.round((viewportWidth - resolvedItemWidth) / 2))\n : paddingHorizontal\n\n // Stride between successive card snap points.\n const stride = resolvedItemWidth + gap\n\n const safeInitialIndex = useMemo(() => {\n if (data.length === 0) return 0\n const fallback = Math.floor(data.length / 2)\n const desired = initialIndex ?? fallback\n return Math.max(0, Math.min(data.length - 1, desired))\n }, [data.length, initialIndex])\n\n // Auto-scroll to initialIndex after first layout. Only meaningful with >1\n // cards; for a single card the list naturally sits at offset 0.\n useEffect(() => {\n if (data.length <= 1) return\n if (safeInitialIndex <= 0) return\n const t = setTimeout(() => {\n flatListRef.current?.scrollToOffset({\n offset: safeInitialIndex * stride,\n animated: false,\n })\n }, 0)\n return () => clearTimeout(t)\n // Only on mount + when the resolved index/stride changes (data swap).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [safeInitialIndex, stride])\n\n const scrollHandler = useAnimatedScrollHandler({\n onScroll: (e) => {\n scrollX.value = e.contentOffset.x\n },\n })\n\n const handleMomentumEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const offsetX = e.nativeEvent.contentOffset.x\n const index = Math.round(offsetX / stride)\n const clamped = Math.max(0, Math.min(data.length - 1, index))\n if (clamped === lastReportedIndex.current) return\n lastReportedIndex.current = clamped\n if (onIndexChange) onIndexChange(clamped)\n },\n [data.length, onIndexChange, stride],\n )\n\n const getItemLayout = useCallback(\n (_: ArrayLike<T> | null | undefined, index: number) => ({\n length: stride,\n offset: stride * index,\n index,\n }),\n [stride],\n )\n\n const renderRow = useCallback(\n ({ item, index }: { item: T; index: number }) => (\n <CardRow\n width={resolvedItemWidth}\n gap={gap}\n index={index}\n scrollX={scrollX}\n enabled={fadeEnabled}\n paddingStart={resolvedPadding}\n >\n {renderItem(item, index)}\n </CardRow>\n ),\n [\n fadeEnabled,\n gap,\n renderItem,\n resolvedItemWidth,\n resolvedPadding,\n scrollX,\n ],\n )\n\n // The visible label tracks the LAST snapped index for assistive tech. Local\n // state mirrors the ref so VoiceOver re-reads on change.\n const [activeIndex, setActiveIndex] = useState(safeInitialIndex)\n const handleSettleForA11y = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const offsetX = e.nativeEvent.contentOffset.x\n const index = Math.round(offsetX / stride)\n const clamped = Math.max(0, Math.min(data.length - 1, index))\n setActiveIndex(clamped)\n handleMomentumEnd(e)\n },\n [data.length, handleMomentumEnd, stride],\n )\n\n const a11yText =\n data.length > 0\n ? `Card ${activeIndex + 1} of ${data.length}`\n : 'No cards'\n\n return (\n <YStack\n accessibilityRole=\"adjustable\"\n accessibilityLabel={accessibilityLabel}\n accessibilityValue={{ text: a11yText }}\n >\n <AnimatedFlatList<T>\n ref={flatListRef}\n data={data as T[]}\n keyExtractor={keyExtractor}\n renderItem={renderRow}\n horizontal\n showsHorizontalScrollIndicator={false}\n snapToInterval={stride}\n snapToAlignment={isCenterSnap ? 'center' : 'start'}\n decelerationRate=\"fast\"\n getItemLayout={getItemLayout}\n onScroll={scrollHandler}\n onMomentumScrollEnd={handleSettleForA11y}\n scrollEventThrottle={16}\n contentContainerStyle={{\n paddingLeft: resolvedPadding,\n // Right padding mirrors left so the last card can settle without\n // jamming against the viewport edge. The trailing per-card\n // marginRight (gap) is removed visually via the padding accounting.\n paddingRight: Math.max(0, resolvedPadding - gap),\n }}\n // Single-card lists don't need snap math; let the user inspect.\n scrollEnabled={data.length > 1}\n />\n {/* Sentinel so RTL layouts don't shrink the container vertically when\n data is empty. */}\n {data.length === 0 ? <View height={1} /> : null}\n </YStack>\n )\n}\n","/**\n * useCollapsibleHeader — scroll-driven header animation hook.\n *\n * Pairs with the collapsible variant of `<AppHeader>`. Returns a scroll\n * handler you spread onto a ScrollView/FlatList plus animated styles for\n * the header container and (optionally) its title. The header hides on\n * scroll-down past `threshold`, reveals on any up-scroll, and can shrink\n * its title proportionally as content scrolls under it.\n *\n * All motion is Reanimated 4 only and respects `useReducedMotion()` —\n * when the OS pref is on, the styles collapse to identity (no motion).\n *\n * @example\n * const { scrollHandler, headerStyle, titleStyle } = useCollapsibleHeader({\n * threshold: 80,\n * shrinkTitle: true,\n * })\n * return (\n * <>\n * <AppHeader title=\"Profile\" collapsible animatedStyle={headerStyle} />\n * <ScrollView onScroll={scrollHandler} scrollEventThrottle={16}>\n * <Animated.Text style={titleStyle}>Profile</Animated.Text>\n * {/* ... *\\/}\n * </ScrollView>\n * </>\n * )\n */\n\nimport type {\n NativeScrollEvent,\n NativeSyntheticEvent,\n} from 'react-native'\nimport {\n interpolate,\n useAnimatedStyle,\n useReducedMotion,\n useSharedValue,\n withTiming,\n Easing,\n type SharedValue,\n type AnimatedStyle,\n} from 'react-native-reanimated'\n\n/** Options accepted by {@link useCollapsibleHeader}. */\nexport interface UseCollapsibleHeaderOptions {\n /** Pixels of scroll-down before the hide behavior triggers. Default `80`. */\n threshold?: number\n /** Hide header on down-scroll past `threshold`. Default `true`. */\n hideOnScrollDown?: boolean\n /** Shrink the large title to small as content scrolls under it. Default `false`. */\n shrinkTitle?: boolean\n /** Immediately reveal the header on any up-scroll. Default `true`. */\n reverseHideOnScrollUp?: boolean\n}\n\n/** Return shape of {@link useCollapsibleHeader}. */\nexport interface UseCollapsibleHeaderReturn {\n /** Pass to a ScrollView/FlatList `onScroll` prop. */\n scrollHandler: (event: NativeSyntheticEvent<NativeScrollEvent>) => void\n /** Pass to `<AppHeader animatedStyle={...} collapsible />`. */\n headerStyle: AnimatedStyle<{ transform: { translateY: number }[]; opacity: number }>\n /** Pass to a title element rendered inside the scrollable content. */\n titleStyle: AnimatedStyle<{\n transform: { scale: number }[]\n marginTop: number\n opacity: number\n }>\n /** Raw scroll Y as a Reanimated shared value, in case callers need it. */\n scrollY: SharedValue<number>\n}\n\n/** Approx height of an `<AppHeader>` (used for the hidden translate). */\nconst HEADER_HIDE_DISTANCE = 96\n\n/** Standard easing for show/hide — fast, smooth, no bounce. */\nconst EASE_OUT_CUBIC = Easing.bezier(0.215, 0.61, 0.355, 1)\n\nconst TIMING = { duration: 200, easing: EASE_OUT_CUBIC } as const\n\n/**\n * Scroll-driven header animation hook. See module JSDoc for example.\n */\nexport function useCollapsibleHeader(\n opts: UseCollapsibleHeaderOptions = {},\n): UseCollapsibleHeaderReturn {\n const {\n threshold = 80,\n hideOnScrollDown = true,\n shrinkTitle = false,\n reverseHideOnScrollUp = true,\n } = opts\n\n const reducedMotion = useReducedMotion()\n\n const scrollY = useSharedValue(0)\n const lastY = useSharedValue(0)\n // 0 = visible, 1 = hidden. Animated to either via withTiming.\n const hidden = useSharedValue(0)\n\n const scrollHandler = (event: NativeSyntheticEvent<NativeScrollEvent>): void => {\n const y = event.nativeEvent.contentOffset.y\n scrollY.value = y\n\n if (reducedMotion) {\n lastY.value = y\n return\n }\n\n const delta = y - lastY.value\n\n if (reverseHideOnScrollUp && delta < 0) {\n // Any up-scroll → reveal immediately.\n if (hidden.value !== 0) {\n hidden.value = withTiming(0, TIMING)\n }\n } else if (hideOnScrollDown && delta > 0 && y > threshold) {\n // Down-scroll past threshold → hide.\n if (hidden.value !== 1) {\n hidden.value = withTiming(1, TIMING)\n }\n } else if (y <= 0) {\n // Pulled to top → always visible.\n if (hidden.value !== 0) {\n hidden.value = withTiming(0, TIMING)\n }\n }\n\n lastY.value = y\n }\n\n const headerStyle = useAnimatedStyle(() => {\n if (reducedMotion) {\n return { transform: [{ translateY: 0 }], opacity: 1 }\n }\n const translateY = interpolate(hidden.value, [0, 1], [0, -HEADER_HIDE_DISTANCE])\n const opacity = interpolate(hidden.value, [0, 1], [1, 0])\n return { transform: [{ translateY }], opacity }\n })\n\n const titleStyle = useAnimatedStyle(() => {\n if (reducedMotion || !shrinkTitle) {\n return { transform: [{ scale: 1 }], marginTop: 0, opacity: 1 }\n }\n const clamped = Math.min(Math.max(scrollY.value, 0), threshold)\n const scale = interpolate(clamped, [0, threshold], [1, 0.7])\n const marginTop = interpolate(clamped, [0, threshold], [0, -8])\n const opacity = interpolate(clamped, [0, threshold], [1, 0.85])\n return { transform: [{ scale }], marginTop, opacity }\n })\n\n return { scrollHandler, headerStyle, titleStyle, scrollY }\n}\n"],"mappings":"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","names":["defaultConfig","View","XStack","YStack","ScrollView","Circle","H1","H2","H3","H4","H5","H6","SizableText","Text","Button","Input","Switch","Slider","Select","Card","Avatar","Separator","Image","Spinner","ListItem","Sheet","Dialog","AlertDialog","Popover","Adapt","Theme","TamaguiProvider","createTamagui","styled","withStaticProperties","useMedia","styled","styled","styled","View","SizableText","SizableText","jsx","SizableText","styled","jsx","jsxs","styled","Button","XStack","YStack","jsx","jsxs","styled","View","Image","styled","SizableText","View","jsx","SizableText","jsx","useState","Separator","SizableText","XStack","YStack","jsx","jsxs","useState","SizableText","XStack","YStack","jsx","SizableText","XStack","jsx","useState","useEffect","SizableText","XStack","YStack","jsx","jsxs","SizableText","YStack","jsx","jsxs","SizableText","jsx","jsxs","jsx","jsxs","SizableText","YStack","jsx","jsxs","styled","YStack","SizableText","YStack","jsx","jsxs","SizableText","styled","View","XStack","YStack","jsx","jsxs","Separator","SizableText","XStack","jsx","jsxs","YStack","jsx","YStack","jsx","XStack","YStack","jsx","jsxs","useState","useEffect","Button","Circle","SizableText","XStack","YStack","ScrollView","jsx","jsxs","useState","Button","SizableText","XStack","YStack","Circle","jsx","jsxs","SizableText","XStack","YStack","Circle","Image","jsx","jsxs","Separator","SizableText","Switch","XStack","YStack","jsx","jsxs","Button","SizableText","YStack","jsx","jsxs","Circle","Image","SizableText","XStack","YStack","jsx","jsxs","SizableText","XStack","YStack","jsx","jsxs","SizableText","YStack","XStack","SizableText","XStack","YStack","ScrollView","jsx","jsxs","useState","Button","Circle","SizableText","XStack","YStack","Fragment","jsx","jsxs","Circle","SizableText","useState","YStack","Button","XStack","SizableText","XStack","YStack","jsx","jsxs","ScrollView","XStack","jsx","jsxs","Input","SizableText","XStack","jsx","jsxs","useCallback","useEffect","useState","Pressable","Animated","SizableText","XStack","YStack","Fragment","jsx","jsxs","Sheet","SizableText","XStack","YStack","jsx","jsxs","YStack","jsx","SizableText","XStack","YStack","jsx","jsxs","Circle","SizableText","XStack","YStack","jsx","jsxs","useState","Button","SizableText","XStack","YStack","Fragment","jsx","jsxs","Image","SizableText","XStack","YStack","jsx","jsxs","Children","useState","Circle","XStack","YStack","ScrollView","jsx","jsxs","YStack","ScrollView","jsx","Button","Image","SizableText","XStack","YStack","jsx","jsxs","CardContent","Button","Circle","SizableText","XStack","YStack","jsx","jsxs","PlanRow","useState","useEffect","useRef","useCallback","SizableText","XStack","YStack","jsx","jsxs","useCountdown","Image","SizableText","XStack","YStack","jsx","jsxs","Stars","TestimonialCard","AlertDialog","Button","SizableText","XStack","YStack","jsx","jsxs","useCallback","SizableText","XStack","jsx","jsxs","sizes","useCallback","useRef","useState","Platform","Input","SizableText","XStack","YStack","jsx","jsxs","useState","useCallback","Input","SizableText","XStack","YStack","jsx","jsxs","Circle","Image","SizableText","XStack","jsx","jsxs","useState","useCallback","Circle","SizableText","XStack","YStack","jsx","jsxs","styled","YStack","jsx","useState","SizableText","Separator","XStack","YStack","styled","View","jsx","jsxs","useCallback","useMemo","useState","SizableText","XStack","YStack","jsx","jsxs","SizableText","XStack","YStack","jsx","jsxs","Separator","SizableText","Switch","XStack","YStack","jsx","jsxs","Sheet","YStack","SizableText","jsx","jsxs","Adapt","Sheet","Button","XStack","jsx","jsxs","Popover","Adapt","YStack","jsx","jsxs","Button","SizableText","XStack","YStack","jsx","jsxs","SizableText","XStack","YStack","jsx","jsxs","index","Children","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","BackHandler","Animated","FadeIn","useReducedMotion","Circle","XStack","YStack","Fragment","jsx","jsxs","useCallback","SizableText","XStack","YStack","Animated","FadeIn","useReducedMotion","jsx","jsxs","Children","isValidElement","useRef","useState","View","Animated","FadeIn","FadeInDown","useReducedMotion","withTiming","jsx","useCallback","useEffect","useMemo","useRef","useState","Animated","Easing","useAnimatedStyle","useReducedMotion","useSharedValue","withTiming","SizableText","View","XStack","YStack","jsx","jsxs","EASE","useCallback","useEffect","useMemo","useRef","useState","Platform","SizableText","View","XStack","YStack","Animated","useAnimatedStyle","useSharedValue","useReducedMotion","jsx","jsxs","useCallback","useEffect","useRef","useState","Platform","Animated","interpolate","useAnimatedScrollHandler","useAnimatedStyle","useReducedMotion","useSharedValue","SizableText","View","XStack","YStack","jsx","jsxs","Haptics","useCallback","useEffect","useMemo","useRef","useState","Dimensions","FlatList","View","YStack","Animated","Extrapolation","interpolate","useAnimatedScrollHandler","useAnimatedStyle","useReducedMotion","useSharedValue","jsx","jsxs","AnimatedFlatList","CardRow","interpolate","useAnimatedStyle","useReducedMotion","useSharedValue","withTiming","Easing"]}
|