namps-native 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/tokens.ts","../src/theme/themes.ts","../src/theme/ThemeProvider.tsx","../src/theme/useTheme.ts","../src/hooks/useControllableState.ts","../src/hooks/useDisclosure.ts","../src/utils/color.ts","../src/icons/index.tsx","../src/components/Button/Button.tsx","../src/components/IconButton/IconButton.tsx","../src/components/Text/Text.tsx","../src/components/Heading/Heading.tsx","../src/components/Card/Card.tsx","../src/components/Input/Input.tsx","../src/components/Switch/Switch.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Badge/Badge.tsx"],"names":["base","createContext","useColorScheme","useState","useCallback","useMemo","React","useContext","useRef","Svg","Circle","Path","Animated","View","useSharedValue","palette","useAnimatedStyle","withTiming","Pressable","ActivityIndicator","Text","RNText","TextInput","useDerivedValue","interpolateColor"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Clay design tokens — the single source of truth for the whole library.\n *\n * Tokens are grouped by concern (color, space, radius, etc). No component may\n * hardcode a raw value; everything reads from the resolved theme. This is what\n * makes theming, dark mode, and custom brands work with zero component changes.\n *\n * Palette tokens are theme-independent primitives. Semantic color tokens\n * (see `themes.ts`) map light/dark values onto meaning (`bg`, `text`, `accent`…).\n */\n\n/** Raw color primitives. Never consumed directly by components — use semantic tokens. */\nexport const palette = {\n // Warm paper neutrals\n sand50: '#FBFAF6',\n sand100: '#F3F0E8',\n sand200: '#EAE6DB',\n sand300: '#E5E0D4',\n sand400: '#D4CDBD',\n sand500: '#9C9482',\n sand600: '#6B6555',\n sand700: '#413C33',\n sand800: '#211E18',\n sand900: '#191712',\n ink: '#201E1A',\n paperWhite: '#FFFFFF',\n\n // Clay accent\n clay400: '#D6805C',\n clay500: '#C15F3C',\n clay600: '#A64E2E',\n clay100: '#F1E1D8',\n\n // Semantic hues\n green500: '#47795B',\n green400: '#6EA687',\n amber500: '#9E6E1B',\n amber400: '#CDA052',\n red500: '#B0463B',\n red400: '#D67E71',\n blue500: '#3F6591',\n blue400: '#7FA4CF',\n} as const;\n\n/** 4-point spacing scale. `space[4] === 16`. */\nexport const space = {\n 0: 0,\n 1: 4,\n 2: 8,\n 3: 12,\n 4: 16,\n 5: 20,\n 6: 24,\n 8: 32,\n 10: 40,\n 12: 64,\n} as const;\n\n/** Corner radius scale. */\nexport const radius = {\n none: 0,\n sm: 6,\n md: 10,\n lg: 14,\n xl: 20,\n full: 999,\n} as const;\n\n/** Type scale in px. Pair with `lineHeight` and `fontWeight`. */\nexport const fontSize = {\n xs: 12,\n sm: 13,\n base: 15,\n md: 16,\n lg: 18,\n xl: 22,\n '2xl': 28,\n '3xl': 34,\n display: 46,\n} as const;\n\nexport const lineHeight = {\n tight: 1.15,\n snug: 1.35,\n normal: 1.5,\n relaxed: 1.6,\n} as const;\n\nexport const fontWeight = {\n regular: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n} as const;\n\n/**\n * Font families. Map these to fonts loaded via expo-font / expo-google-fonts.\n * `display` is a warm serif; `body` a neutral grotesque; `mono` for code/data.\n */\nexport const fontFamily = {\n display: 'Newsreader',\n body: 'Geist',\n mono: 'JetBrainsMono',\n} as const;\n\n/** Motion tokens — durations in ms. Easing lives in `motion.easing`. */\nexport const motion = {\n duration: { fast: 120, base: 220, slow: 340 },\n /** Reanimated: `Easing.bezier(...motion.easing.standard)`. */\n easing: {\n standard: [0.2, 0, 0, 1] as const,\n decelerate: [0, 0, 0, 1] as const,\n accelerate: [0.4, 0, 1, 1] as const,\n },\n} as const;\n\n/** Standard control sizes shared by Button, Input, IconButton, etc. */\nexport const sizing = {\n sm: { height: 34, paddingX: space[3], fontSize: fontSize.sm, radius: radius.sm, icon: 16 },\n md: { height: 44, paddingX: space[5], fontSize: fontSize.base, radius: radius.md, icon: 18 },\n lg: { height: 54, paddingX: space[6], fontSize: fontSize.md, radius: radius.lg, icon: 20 },\n} as const;\n\nexport type SpaceToken = keyof typeof space;\nexport type RadiusToken = keyof typeof radius;\nexport type FontSizeToken = keyof typeof fontSize;\nexport type ComponentSize = keyof typeof sizing;\n","import { palette, space, radius, fontSize, lineHeight, fontWeight, fontFamily, motion, sizing } from './tokens';\n\n/**\n * Semantic color tokens — the names components actually use.\n * Each theme maps meaning onto palette primitives, so switching themes (or\n * providing a custom one) never touches component code.\n */\nexport interface ColorTokens {\n /** App canvas background. */\n bg: string;\n /** Card / sheet surface, one step above the canvas. */\n surface: string;\n /** Popovers, menus, modals — the highest surface. */\n elevated: string;\n /** Inset wells: inputs, tracks, code blocks. */\n sunken: string;\n /** Hairline borders. */\n border: string;\n /** Stronger borders and disabled fills. */\n borderStrong: string;\n /** Primary text. */\n text: string;\n /** Secondary text. */\n textMuted: string;\n /** Tertiary text, placeholders, captions. */\n textSubtle: string;\n /** Brand accent (clay). */\n accent: string;\n /** Accent pressed / hover. */\n accentHover: string;\n /** Tinted accent background for soft buttons, chips, selection. */\n accentSoft: string;\n /** Foreground on top of `accent`. */\n onAccent: string;\n success: string;\n successSoft: string;\n warning: string;\n warningSoft: string;\n danger: string;\n dangerSoft: string;\n info: string;\n infoSoft: string;\n}\n\nexport interface ShadowToken {\n shadowColor: string;\n shadowOffset: { width: number; height: number };\n shadowOpacity: number;\n shadowRadius: number;\n /** Android */\n elevation: number;\n}\n\nexport interface Theme {\n name: 'light' | 'dark' | (string & {});\n colors: ColorTokens;\n space: typeof space;\n radius: typeof radius;\n fontSize: typeof fontSize;\n lineHeight: typeof lineHeight;\n fontWeight: typeof fontWeight;\n fontFamily: typeof fontFamily;\n motion: typeof motion;\n sizing: typeof sizing;\n shadow: { sm: ShadowToken; md: ShadowToken; lg: ShadowToken };\n}\n\nconst shared = { space, radius, fontSize, lineHeight, fontWeight, fontFamily, motion, sizing };\n\n/** Default light theme. */\nexport const lightTheme: Theme = {\n name: 'light',\n ...shared,\n colors: {\n bg: palette.sand100,\n surface: palette.sand50,\n elevated: palette.paperWhite,\n sunken: palette.sand200,\n border: palette.sand300,\n borderStrong: palette.sand400,\n text: palette.ink,\n textMuted: palette.sand600,\n textSubtle: palette.sand500,\n accent: palette.clay500,\n accentHover: palette.clay600,\n accentSoft: palette.clay100,\n onAccent: palette.paperWhite,\n success: palette.green500,\n successSoft: '#E1ECE4',\n warning: palette.amber500,\n warningSoft: '#F3E8D2',\n danger: palette.red500,\n dangerSoft: '#F3DED9',\n info: palette.blue500,\n infoSoft: '#DDE7F1',\n },\n shadow: {\n sm: { shadowColor: '#2B2214', shadowOffset: { width: 0, height: 1 }, shadowOpacity: 0.06, shadowRadius: 2, elevation: 1 },\n md: { shadowColor: '#2B2214', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.08, shadowRadius: 14, elevation: 4 },\n lg: { shadowColor: '#2B2214', shadowOffset: { width: 0, height: 18 }, shadowOpacity: 0.14, shadowRadius: 48, elevation: 12 },\n },\n};\n\n/** Default dark theme. */\nexport const darkTheme: Theme = {\n name: 'dark',\n ...shared,\n colors: {\n bg: palette.sand900,\n surface: palette.sand800,\n elevated: '#2A261F',\n sunken: '#131109',\n border: '#332F27',\n borderStrong: '#443F35',\n text: '#EDE8DC',\n textMuted: '#A69E8D',\n textSubtle: '#726B5C',\n accent: palette.clay400,\n accentHover: '#E4936F',\n accentSoft: '#3A2A21',\n onAccent: '#1B140F',\n success: palette.green400,\n successSoft: '#20302A',\n warning: palette.amber400,\n warningSoft: '#332916',\n danger: palette.red400,\n dangerSoft: '#3A231E',\n info: palette.blue400,\n infoSoft: '#1F2A38',\n },\n shadow: {\n sm: { shadowColor: '#000', shadowOffset: { width: 0, height: 1 }, shadowOpacity: 0.4, shadowRadius: 2, elevation: 1 },\n md: { shadowColor: '#000', shadowOffset: { width: 0, height: 6 }, shadowOpacity: 0.45, shadowRadius: 18, elevation: 6 },\n lg: { shadowColor: '#000', shadowOffset: { width: 0, height: 22 }, shadowOpacity: 0.6, shadowRadius: 55, elevation: 16 },\n },\n};\n\nexport type DeepPartial<T> = { [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K] };\n\n/**\n * Merge a partial override onto a base theme to build a custom brand theme.\n * Only the tokens you specify change; everything else inherits.\n *\n * @example\n * const brand = createTheme(lightTheme, { colors: { accent: '#2A6FDB' } });\n */\nexport function createTheme(base: Theme, overrides: DeepPartial<Theme> = {}): Theme {\n return deepMerge(base, overrides) as Theme;\n}\n\nfunction deepMerge<T>(base: T, override: DeepPartial<T>): T {\n const out: any = Array.isArray(base) ? [...(base as any)] : { ...base };\n for (const key in override) {\n const v = override[key];\n if (v && typeof v === 'object' && !Array.isArray(v)) out[key] = deepMerge((base as any)[key], v as any);\n else if (v !== undefined) out[key] = v;\n }\n return out;\n}\n","import React, { createContext, useContext, useMemo, useState, useCallback } from 'react';\nimport { useColorScheme } from 'react-native';\nimport { lightTheme, darkTheme, type Theme } from './themes';\n\nexport type ColorSchemeName = 'light' | 'dark';\nexport type ColorSchemePref = ColorSchemeName | 'system';\n\nexport interface ThemeContextValue {\n /** The resolved theme object. All components read from this. */\n theme: Theme;\n /** Current resolved scheme (never `system`). */\n scheme: ColorSchemeName;\n /** The user's preference, which may be `system`. */\n preference: ColorSchemePref;\n /** Set the preference explicitly. */\n setPreference: (pref: ColorSchemePref) => void;\n /** Convenience toggle between light and dark. */\n toggle: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport interface ThemeProviderProps {\n children: React.ReactNode;\n /** Override the light theme (e.g. a custom brand). Defaults to Clay's light theme. */\n light?: Theme;\n /** Override the dark theme. Defaults to Clay's dark theme. */\n dark?: Theme;\n /** Initial color-scheme preference. `system` follows the OS. Default: `system`. */\n defaultPreference?: ColorSchemePref;\n}\n\n/**\n * Provides the active theme to every Clay component. Wrap your app root once.\n *\n * @example\n * <ThemeProvider defaultPreference=\"system\">\n * <App />\n * </ThemeProvider>\n */\nexport function ThemeProvider({\n children,\n light = lightTheme,\n dark = darkTheme,\n defaultPreference = 'system',\n}: ThemeProviderProps) {\n const system = useColorScheme();\n const [preference, setPreference] = useState<ColorSchemePref>(defaultPreference);\n\n const scheme: ColorSchemeName =\n preference === 'system' ? (system === 'dark' ? 'dark' : 'light') : preference;\n\n const toggle = useCallback(\n () => setPreference((p) => {\n const current = p === 'system' ? (system === 'dark' ? 'dark' : 'light') : p;\n return current === 'dark' ? 'light' : 'dark';\n }),\n [system],\n );\n\n const value = useMemo<ThemeContextValue>(\n () => ({ theme: scheme === 'dark' ? dark : light, scheme, preference, setPreference, toggle }),\n [scheme, preference, light, dark, toggle],\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\n/** Internal accessor. Throws if used outside a ThemeProvider. */\nexport function useThemeContext(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) throw new Error('Clay: components must be rendered inside <ThemeProvider>.');\n return ctx;\n}\n","import { useThemeContext } from './ThemeProvider';\nimport type { Theme } from './themes';\n\n/**\n * Read the active theme (colors, spacing, radius, type, motion, shadow tokens).\n * The primary API for consuming design tokens in your own components.\n *\n * @example\n * const theme = useTheme();\n * <View style={{ backgroundColor: theme.colors.surface, padding: theme.space[4] }} />\n */\nexport function useTheme(): Theme {\n return useThemeContext().theme;\n}\n\n/**\n * Access and control the color scheme.\n * @example\n * const { scheme, toggle } = useColorSchemeControl();\n */\nexport function useColorSchemeControl() {\n const { scheme, preference, setPreference, toggle } = useThemeContext();\n return { scheme, preference, setPreference, toggle };\n}\n","import { useCallback, useRef, useState } from 'react';\n\n/**\n * Manage a value that can be either controlled (via `value` prop) or\n * uncontrolled (internal state seeded by `defaultValue`). The standard Clay\n * pattern for every stateful input (Switch, Checkbox, Tabs, Input…).\n *\n * @returns `[value, setValue]` where `setValue` calls `onChange` and, when\n * uncontrolled, updates internal state.\n */\nexport function useControllableState<T>(params: {\n value?: T;\n defaultValue: T;\n onChange?: (value: T) => void;\n}): [T, (next: T) => void] {\n const { value, defaultValue, onChange } = params;\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<T>(defaultValue);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const resolved = isControlled ? (value as T) : internal;\n\n const setValue = useCallback(\n (next: T) => {\n if (!isControlled) setInternal(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [resolved, setValue];\n}\n","import { useCallback, useState } from 'react';\n\nexport interface Disclosure {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n}\n\n/**\n * Boolean open/close state for overlays (Modal, BottomSheet, Popover, Menu…).\n *\n * @example\n * const modal = useDisclosure();\n * <Button onPress={modal.open}>Open</Button>\n * <Modal visible={modal.isOpen} onClose={modal.close} />\n */\nexport function useDisclosure(defaultOpen = false): Disclosure {\n const [isOpen, setOpen] = useState(defaultOpen);\n const open = useCallback(() => setOpen(true), []);\n const close = useCallback(() => setOpen(false), []);\n const toggle = useCallback(() => setOpen((v) => !v), []);\n return { isOpen, open, close, toggle };\n}\n","/** Small color helpers used internally by components. */\n\n/** Mix `hex` with white/black by `amount` (0–1) to lighten/darken. */\nexport function shade(hex: string, amount: number): string {\n const { r, g, b } = hexToRgb(hex);\n const t = amount < 0 ? 0 : 255;\n const p = Math.abs(amount);\n const mix = (c: number) => Math.round((t - c) * p + c);\n return rgbToHex(mix(r), mix(g), mix(b));\n}\n\n/** Add an alpha channel to a hex color, returning `rgba(...)`. */\nexport function withAlpha(hex: string, alpha: number): string {\n const { r, g, b } = hexToRgb(hex);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nfunction hexToRgb(hex: string) {\n const h = hex.replace('#', '');\n const full = h.length === 3 ? h.split('').map((c) => c + c).join('') : h;\n return {\n r: parseInt(full.slice(0, 2), 16),\n g: parseInt(full.slice(2, 4), 16),\n b: parseInt(full.slice(4, 6), 16),\n };\n}\n\nfunction rgbToHex(r: number, g: number, b: number) {\n return '#' + [r, g, b].map((c) => c.toString(16).padStart(2, '0')).join('');\n}\n","import React from 'react';\nimport Svg, { Path, Circle } from 'react-native-svg';\n\n/**\n * Clay icon style: 24×24 grid, 1.7 stroke, round caps/joins, `currentColor`.\n * Every icon takes `size` (default 22) and `color` (default `currentColor`),\n * so it inherits text color and aligns with the type scale.\n *\n * These are a starter set — add more following the same signature.\n */\nexport interface IconProps {\n /** Square dimension in px. Default 22. */\n size?: number;\n /** Stroke color. Default `currentColor` (inherits from text). */\n color?: string;\n}\n\nconst base = (size = 22) => ({ width: size, height: size, viewBox: '0 0 24 24', fill: 'none' as const });\nconst stroke = (color = 'currentColor') => ({ stroke: color, strokeWidth: 1.7, strokeLinecap: 'round' as const, strokeLinejoin: 'round' as const });\n\nexport const SearchIcon = ({ size, color }: IconProps) => (\n <Svg {...base(size)}><Circle cx={11} cy={11} r={6.5} {...stroke(color)} /><Path d=\"m20 20-3.6-3.6\" {...stroke(color)} /></Svg>\n);\nexport const PlusIcon = ({ size, color }: IconProps) => (\n <Svg {...base(size)}><Path d=\"M12 5v14M5 12h14\" {...stroke(color)} /></Svg>\n);\nexport const CheckIcon = ({ size, color }: IconProps) => (\n <Svg {...base(size)}><Path d=\"m5 12.5 4.5 4.5L19 7\" {...stroke(color)} strokeWidth={2} /></Svg>\n);\nexport const ChevronRightIcon = ({ size, color }: IconProps) => (\n <Svg {...base(size)}><Path d=\"m9 6 6 6-6 6\" {...stroke(color)} /></Svg>\n);\nexport const CloseIcon = ({ size, color }: IconProps) => (\n <Svg {...base(size)}><Path d=\"m6 6 12 12M18 6 6 18\" {...stroke(color)} strokeWidth={1.8} /></Svg>\n);\nexport const BellIcon = ({ size, color }: IconProps) => (\n <Svg {...base(size)}><Path d=\"M18 8.5a6 6 0 1 0-12 0c0 5-2 6.5-2 6.5h16s-2-1.5-2-6.5\" {...stroke(color)} /><Path d=\"M10.5 19a1.8 1.8 0 0 0 3 0\" {...stroke(color)} /></Svg>\n);\n","import React from 'react';\nimport { Pressable, Text, View, ActivityIndicator, type PressableProps, type GestureResponderEvent } from 'react-native';\nimport Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';\nimport { useTheme } from '../../theme/useTheme';\nimport type { Variant, Size, A11yProps, StyleableProps } from '../../types';\n\nconst AView = Animated.createAnimatedComponent(View);\n\nexport interface ButtonProps extends A11yProps, StyleableProps {\n /** Button label. Ignored if `children` is provided. */\n children?: React.ReactNode;\n /**\n * Visual emphasis. Default `\"primary\"`.\n * - `primary` — solid accent, main call to action\n * - `secondary` — outlined, neutral surface\n * - `soft` — tinted accent background, low emphasis\n * - `ghost` — text only, minimal\n * - `danger` — destructive solid\n */\n variant?: Variant;\n /** Control height & padding. Default `\"md\"`. */\n size?: Size;\n /** Show a spinner and block presses. Default `false`. */\n loading?: boolean;\n /** Disable the button. Default `false`. */\n disabled?: boolean;\n /** Stretch to fill the parent's width. Default `false`. */\n fullWidth?: boolean;\n /** Element rendered before the label (usually an icon). */\n leftIcon?: React.ReactNode;\n /** Element rendered after the label. */\n rightIcon?: React.ReactNode;\n /** Press handler. */\n onPress?: (e: GestureResponderEvent) => void;\n}\n\n/**\n * The primary action component.\n *\n * @remarks\n * Do: use exactly one `primary` button per view for the main action.\n * Don't: use `danger` for anything reversible — pair it with a confirm Dialog.\n * Accessibility: `role=\"button\"` is set automatically; provide\n * `accessibilityLabel` when the label is an icon only (prefer `IconButton`).\n * Related: {@link IconButton}, {@link Card}.\n *\n * @example Basic\n * <Button onPress={save}>Save changes</Button>\n *\n * @example With icon + loading\n * <Button variant=\"soft\" leftIcon={<PlusIcon />} loading={saving}>New</Button>\n */\nexport function Button({\n children,\n variant = 'primary',\n size = 'md',\n loading = false,\n disabled = false,\n fullWidth = false,\n leftIcon,\n rightIcon,\n onPress,\n style,\n accessibilityLabel,\n accessibilityHint,\n testID,\n}: ButtonProps) {\n const theme = useTheme();\n const dim = theme.sizing[size];\n const pressed = useSharedValue(0);\n const isDisabled = disabled || loading;\n\n const palette = getVariant(variant, theme, isDisabled);\n\n const animatedStyle = useAnimatedStyle(() => ({\n opacity: withTiming(pressed.value ? 0.9 : 1, { duration: theme.motion.duration.fast }),\n transform: [{ scale: withTiming(pressed.value ? 0.98 : 1, { duration: theme.motion.duration.fast }) }],\n }));\n\n return (\n <Pressable\n onPress={onPress}\n onPressIn={() => (pressed.value = 1)}\n onPressOut={() => (pressed.value = 0)}\n disabled={isDisabled}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled: isDisabled, busy: loading }}\n accessibilityLabel={accessibilityLabel}\n accessibilityHint={accessibilityHint}\n testID={testID}\n style={fullWidth ? { alignSelf: 'stretch' } : undefined}\n >\n <AView\n style={[\n {\n height: dim.height,\n paddingHorizontal: dim.paddingX,\n borderRadius: dim.radius,\n backgroundColor: palette.bg,\n borderWidth: palette.borderWidth,\n borderColor: palette.border,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: theme.space[2],\n opacity: isDisabled ? 0.55 : 1,\n },\n animatedStyle,\n style,\n ]}\n >\n {loading ? (\n <ActivityIndicator size=\"small\" color={palette.fg} />\n ) : (\n <>\n {leftIcon}\n {children != null && (\n <Text style={{ color: palette.fg, fontSize: dim.fontSize, fontFamily: theme.fontFamily.body, fontWeight: theme.fontWeight.semibold }}>\n {children}\n </Text>\n )}\n {rightIcon}\n </>\n )}\n </AView>\n </Pressable>\n );\n}\n\nfunction getVariant(variant: Variant, theme: ReturnType<typeof useTheme>, _disabled: boolean) {\n const c = theme.colors;\n switch (variant) {\n case 'secondary':\n return { bg: c.elevated, fg: c.text, border: c.borderStrong, borderWidth: 1 };\n case 'soft':\n return { bg: c.accentSoft, fg: c.accent, border: 'transparent', borderWidth: 0 };\n case 'ghost':\n return { bg: 'transparent', fg: c.text, border: 'transparent', borderWidth: 0 };\n case 'danger':\n return { bg: c.danger, fg: '#fff', border: 'transparent', borderWidth: 0 };\n case 'primary':\n default:\n return { bg: c.accent, fg: c.onAccent, border: 'transparent', borderWidth: 0 };\n }\n}\n","import React from 'react';\nimport { Pressable, View, type GestureResponderEvent } from 'react-native';\nimport { useTheme } from '../../theme/useTheme';\nimport type { Variant, Size, A11yProps, StyleableProps } from '../../types';\n\nexport interface IconButtonProps extends A11yProps, StyleableProps {\n /** The icon element. Rendered centered; sized to the control's icon token. */\n icon: React.ReactNode;\n /** Visual emphasis. Default `\"ghost\"`. */\n variant?: Variant;\n /** Control size. Default `\"md\"`. */\n size?: Size;\n /** Fully rounded (pill/circle) instead of the size radius. Default `false`. */\n round?: boolean;\n /** Disable the button. */\n disabled?: boolean;\n onPress?: (e: GestureResponderEvent) => void;\n}\n\n/**\n * A square, icon-only button. Same variants/sizes as {@link Button}.\n *\n * @remarks\n * Accessibility: `accessibilityLabel` is REQUIRED — there is no visible text.\n * Do: use for toolbar and inline actions. Don't: use for primary CTAs (use Button).\n *\n * @example\n * <IconButton icon={<CloseIcon />} accessibilityLabel=\"Close\" onPress={close} />\n */\nexport function IconButton({\n icon,\n variant = 'ghost',\n size = 'md',\n round = false,\n disabled = false,\n onPress,\n style,\n accessibilityLabel,\n accessibilityHint,\n testID,\n}: IconButtonProps) {\n const theme = useTheme();\n const dim = theme.sizing[size];\n const c = theme.colors;\n\n const bg =\n variant === 'primary' ? c.accent :\n variant === 'danger' ? c.danger :\n variant === 'soft' ? c.accentSoft :\n variant === 'secondary' ? c.elevated : 'transparent';\n const border = variant === 'secondary' ? c.borderStrong : 'transparent';\n\n return (\n <Pressable\n onPress={onPress}\n disabled={disabled}\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n accessibilityHint={accessibilityHint}\n accessibilityState={{ disabled }}\n testID={testID}\n style={({ pressed }) => [\n {\n width: dim.height,\n height: dim.height,\n borderRadius: round ? theme.radius.full : dim.radius,\n backgroundColor: bg,\n borderWidth: variant === 'secondary' ? 1 : 0,\n borderColor: border,\n alignItems: 'center',\n justifyContent: 'center',\n opacity: disabled ? 0.5 : pressed ? 0.85 : 1,\n },\n style,\n ]}\n >\n <View>{icon}</View>\n </Pressable>\n );\n}\n","import React from 'react';\nimport { Text as RNText, type TextProps as RNTextProps } from 'react-native';\nimport { useTheme } from '../../theme/useTheme';\nimport type { TextStyleableProps } from '../../types';\n\nexport type TextVariant = 'body' | 'bodyLg' | 'label' | 'caption' | 'mono';\nexport type TextTone = 'default' | 'muted' | 'subtle' | 'accent' | 'danger' | 'success' | 'onAccent';\n\nexport interface TextProps extends TextStyleableProps, Pick<RNTextProps, 'numberOfLines' | 'onPress' | 'selectable' | 'accessibilityRole'> {\n children: React.ReactNode;\n /** Type role mapped to the scale. Default `\"body\"`. */\n variant?: TextVariant;\n /** Color token. Default `\"default\"`. */\n tone?: TextTone;\n /** Font weight override. */\n weight?: 'regular' | 'medium' | 'semibold' | 'bold';\n /** Text alignment. */\n align?: 'auto' | 'left' | 'right' | 'center';\n}\n\n/**\n * The typographic primitive for all non-heading text. Keeps every string on\n * the scale and on a semantic color token.\n *\n * @remarks\n * Do: use `variant`/`tone` instead of raw `style` colors. Related: {@link Heading}.\n * @example\n * <Text variant=\"caption\" tone=\"muted\">Updated 2h ago</Text>\n */\nexport function Text({ children, variant = 'body', tone = 'default', weight, align, style, ...rest }: TextProps) {\n const theme = useTheme();\n const v = {\n body: { fontSize: theme.fontSize.base, lineHeight: theme.fontSize.base * theme.lineHeight.relaxed, family: theme.fontFamily.body },\n bodyLg: { fontSize: theme.fontSize.lg, lineHeight: theme.fontSize.lg * theme.lineHeight.relaxed, family: theme.fontFamily.body },\n label: { fontSize: theme.fontSize.sm, lineHeight: theme.fontSize.sm * theme.lineHeight.snug, family: theme.fontFamily.body },\n caption: { fontSize: theme.fontSize.xs, lineHeight: theme.fontSize.xs * theme.lineHeight.snug, family: theme.fontFamily.body },\n mono: { fontSize: theme.fontSize.sm, lineHeight: theme.fontSize.sm * theme.lineHeight.normal, family: theme.fontFamily.mono },\n }[variant];\n\n const color = {\n default: theme.colors.text,\n muted: theme.colors.textMuted,\n subtle: theme.colors.textSubtle,\n accent: theme.colors.accent,\n danger: theme.colors.danger,\n success: theme.colors.success,\n onAccent: theme.colors.onAccent,\n }[tone];\n\n return (\n <RNText\n style={[{ color, fontSize: v.fontSize, lineHeight: v.lineHeight, fontFamily: v.family, fontWeight: weight ? theme.fontWeight[weight] : theme.fontWeight.regular, textAlign: align }, style]}\n {...rest}\n >\n {children}\n </RNText>\n );\n}\n","import React from 'react';\nimport { Text as RNText } from 'react-native';\nimport { useTheme } from '../../theme/useTheme';\nimport type { TextStyleableProps } from '../../types';\n\nexport type HeadingLevel = 1 | 2 | 3 | 4;\n\nexport interface HeadingProps extends TextStyleableProps {\n children: React.ReactNode;\n /** Visual + semantic level. 1 = largest. Default `2`. */\n level?: HeadingLevel;\n align?: 'auto' | 'left' | 'right' | 'center';\n /** Color tone. Default `\"default\"`. */\n tone?: 'default' | 'accent' | 'onAccent';\n numberOfLines?: number;\n}\n\n/**\n * Display headings set in the serif display family.\n *\n * @remarks\n * Do: keep one `level={1}` per screen. Related: {@link Text}.\n * @example\n * <Heading level={1}>Good morning</Heading>\n */\nexport function Heading({ children, level = 2, align, tone = 'default', numberOfLines, style }: HeadingProps) {\n const theme = useTheme();\n const map = {\n 1: { fontSize: theme.fontSize['3xl'], weight: theme.fontWeight.medium },\n 2: { fontSize: theme.fontSize['2xl'], weight: theme.fontWeight.medium },\n 3: { fontSize: theme.fontSize.xl, weight: theme.fontWeight.medium },\n 4: { fontSize: theme.fontSize.lg, weight: theme.fontWeight.semibold },\n }[level];\n const color = tone === 'accent' ? theme.colors.accent : tone === 'onAccent' ? theme.colors.onAccent : theme.colors.text;\n\n return (\n <RNText\n accessibilityRole=\"header\"\n numberOfLines={numberOfLines}\n style={[{ color, fontSize: map.fontSize, lineHeight: map.fontSize * theme.lineHeight.tight, fontFamily: theme.fontFamily.display, fontWeight: map.weight, letterSpacing: -0.4, textAlign: align }, style]}\n >\n {children}\n </RNText>\n );\n}\n","import React from 'react';\nimport { View, Pressable, type ViewProps, type GestureResponderEvent } from 'react-native';\nimport { useTheme } from '../../theme/useTheme';\nimport type { StyleableProps } from '../../types';\n\nexport type CardVariant = 'outlined' | 'elevated' | 'filled';\n\nexport interface CardProps extends StyleableProps, Pick<ViewProps, 'children'> {\n /** Surface treatment. Default `\"outlined\"`. */\n variant?: CardVariant;\n /** Inner padding, using a space token key. Default `4` (16px). */\n padding?: keyof ReturnType<typeof useTheme>['space'];\n /** Makes the whole card pressable with a subtle feedback state. */\n onPress?: (e: GestureResponderEvent) => void;\n}\n\n/**\n * The primary container surface. Maps its variant straight to elevation tokens.\n *\n * @remarks\n * Do: nest {@link Heading}/{@link Text} for content. Don't: stack elevated cards\n * on elevated cards — flatten to `outlined` inside. Related: {@link Card}, {@link List}.\n * @example\n * <Card variant=\"elevated\" padding={5}>\n * <Heading level={4}>Weekly digest</Heading>\n * <Text tone=\"muted\">Everything that changed.</Text>\n * </Card>\n */\nexport function Card({ variant = 'outlined', padding = 4, onPress, style, children, testID }: CardProps) {\n const theme = useTheme();\n const c = theme.colors;\n\n const surface = {\n outlined: { backgroundColor: c.surface, borderWidth: 1, borderColor: c.border, shadow: undefined },\n elevated: { backgroundColor: c.elevated, borderWidth: 0, borderColor: 'transparent', shadow: theme.shadow.sm },\n filled: { backgroundColor: c.sunken, borderWidth: 1, borderColor: c.border, shadow: undefined },\n }[variant];\n\n const boxStyle = [\n {\n borderRadius: theme.radius.lg,\n padding: theme.space[padding],\n backgroundColor: surface.backgroundColor,\n borderWidth: surface.borderWidth,\n borderColor: surface.borderColor,\n },\n surface.shadow,\n style,\n ];\n\n if (onPress) {\n return (\n <Pressable onPress={onPress} testID={testID} accessibilityRole=\"button\" style={({ pressed }) => [...boxStyle, { opacity: pressed ? 0.94 : 1 }]}>\n {children}\n </Pressable>\n );\n }\n return <View testID={testID} style={boxStyle}>{children}</View>;\n}\n","import React, { useState } from 'react';\nimport { View, TextInput, type TextInputProps } from 'react-native';\nimport { useTheme } from '../../theme/useTheme';\nimport { Text } from '../Text/Text';\nimport type { Size, StyleableProps } from '../../types';\n\nexport interface InputProps extends StyleableProps, Pick<TextInputProps, 'value' | 'onChangeText' | 'placeholder' | 'secureTextEntry' | 'keyboardType' | 'autoCapitalize' | 'autoFocus' | 'onBlur' | 'onFocus' | 'multiline'> {\n /** Field label rendered above the control. */\n label?: string;\n /** Helper text below the control. Replaced by `error` when present. */\n helperText?: string;\n /** Error message. Sets the error visual state and replaces `helperText`. */\n error?: string;\n /** Control size. Default `\"md\"`. */\n size?: Size;\n /** Element rendered inside, before the text. */\n leftAdornment?: React.ReactNode;\n /** Element rendered inside, after the text. */\n rightAdornment?: React.ReactNode;\n disabled?: boolean;\n}\n\n/**\n * Single-line text field. Anatomy: label · control · helper/error.\n *\n * @remarks\n * State: controlled via `value`/`onChangeText`. Error recolors border, ring,\n * and helper together. Related: {@link TextArea}, {@link SearchBar}.\n * @example\n * <Input label=\"Email\" value={email} onChangeText={setEmail} error={emailError} />\n */\nexport function Input({\n label, helperText, error, size = 'md', leftAdornment, rightAdornment, disabled,\n value, onChangeText, placeholder, style, testID, onFocus, onBlur, ...rest\n}: InputProps) {\n const theme = useTheme();\n const c = theme.colors;\n const dim = theme.sizing[size];\n const [focused, setFocused] = useState(false);\n const hasError = !!error;\n const borderColor = hasError ? c.danger : focused ? c.accent : c.borderStrong;\n\n return (\n <View style={style}>\n {label && <Text variant=\"label\" weight=\"medium\" tone={hasError ? 'danger' : 'default'} style={{ marginBottom: theme.space[2] }}>{label}</Text>}\n <View\n style={{\n minHeight: dim.height,\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.space[2],\n paddingHorizontal: theme.space[3] + 2,\n borderRadius: dim.radius,\n borderWidth: 1,\n borderColor,\n backgroundColor: disabled ? c.sunken : c.elevated,\n }}\n >\n {leftAdornment}\n <TextInput\n value={value}\n onChangeText={onChangeText}\n placeholder={placeholder}\n placeholderTextColor={c.textSubtle}\n editable={!disabled}\n onFocus={(e) => { setFocused(true); onFocus?.(e); }}\n onBlur={(e) => { setFocused(false); onBlur?.(e); }}\n testID={testID}\n style={{ flex: 1, color: disabled ? c.textSubtle : c.text, fontSize: dim.fontSize, fontFamily: theme.fontFamily.body, paddingVertical: theme.space[2] }}\n {...rest}\n />\n {rightAdornment}\n </View>\n {(error || helperText) && (\n <Text variant=\"caption\" tone={hasError ? 'danger' : 'subtle'} style={{ marginTop: theme.space[1] + 2 }}>\n {error || helperText}\n </Text>\n )}\n </View>\n );\n}\n","import React from 'react';\nimport { Pressable } from 'react-native';\nimport Animated, { useAnimatedStyle, withTiming, interpolateColor, useDerivedValue } from 'react-native-reanimated';\nimport { useTheme } from '../../theme/useTheme';\nimport { useControllableState } from '../../hooks/useControllableState';\nimport type { A11yProps } from '../../types';\n\nexport interface SwitchProps extends A11yProps {\n /** Controlled on/off value. */\n value?: boolean;\n /** Uncontrolled initial value. Default `false`. */\n defaultValue?: boolean;\n /** Called with the next value on toggle. */\n onValueChange?: (value: boolean) => void;\n disabled?: boolean;\n testID?: string;\n}\n\n/**\n * A binary on/off toggle with a spring-free, calm slide (Reanimated).\n *\n * @remarks\n * State: controlled (`value` + `onValueChange`) or uncontrolled (`defaultValue`).\n * Tap target stays ≥44px even though the track is smaller.\n * Related: {@link Checkbox}, {@link Radio}.\n * @example\n * <Switch value={wifi} onValueChange={setWifi} accessibilityLabel=\"Wi-Fi\" />\n */\nexport function Switch({ value, defaultValue = false, onValueChange, disabled, accessibilityLabel, testID }: SwitchProps) {\n const theme = useTheme();\n const [on, setOn] = useControllableState({ value, defaultValue, onChange: onValueChange });\n const progress = useDerivedValue(() => withTiming(on ? 1 : 0, { duration: theme.motion.duration.fast }), [on]);\n\n const trackStyle = useAnimatedStyle(() => ({\n backgroundColor: interpolateColor(progress.value, [0, 1], [theme.colors.borderStrong, theme.colors.accent]),\n }));\n const thumbStyle = useAnimatedStyle(() => ({ transform: [{ translateX: 18 * progress.value }] }));\n\n return (\n <Pressable\n onPress={() => setOn(!on)}\n disabled={disabled}\n accessibilityRole=\"switch\"\n accessibilityState={{ checked: on, disabled }}\n accessibilityLabel={accessibilityLabel}\n testID={testID}\n hitSlop={10}\n style={{ opacity: disabled ? 0.5 : 1 }}\n >\n <Animated.View style={[{ width: 44, height: 26, borderRadius: theme.radius.full, padding: 3, justifyContent: 'center' }, trackStyle]}>\n <Animated.View style={[{ width: 20, height: 20, borderRadius: theme.radius.full, backgroundColor: '#fff' }, theme.shadow.sm, thumbStyle]} />\n </Animated.View>\n </Pressable>\n );\n}\n","import React from 'react';\nimport { Pressable, View } from 'react-native';\nimport { useTheme } from '../../theme/useTheme';\nimport { useControllableState } from '../../hooks/useControllableState';\nimport { Text } from '../Text/Text';\nimport { CheckIcon } from '../../icons';\nimport type { A11yProps } from '../../types';\n\nexport interface CheckboxProps extends A11yProps {\n /** Controlled checked value. */\n value?: boolean;\n /** Uncontrolled initial value. Default `false`. */\n defaultValue?: boolean;\n onValueChange?: (value: boolean) => void;\n /** Optional inline label rendered to the right. */\n label?: string;\n disabled?: boolean;\n testID?: string;\n}\n\n/**\n * A square checkbox with an optional label. Same controlled/uncontrolled API as\n * {@link Switch} and {@link Radio}.\n *\n * @remarks\n * Do: use for independent multi-select options. Use {@link Radio} for exclusive choice.\n * @example\n * <Checkbox label=\"Email me updates\" value={on} onValueChange={setOn} />\n */\nexport function Checkbox({ value, defaultValue = false, onValueChange, label, disabled, accessibilityLabel, testID }: CheckboxProps) {\n const theme = useTheme();\n const [checked, setChecked] = useControllableState({ value, defaultValue, onChange: onValueChange });\n const c = theme.colors;\n\n return (\n <Pressable\n onPress={() => setChecked(!checked)}\n disabled={disabled}\n accessibilityRole=\"checkbox\"\n accessibilityState={{ checked, disabled }}\n accessibilityLabel={accessibilityLabel ?? label}\n testID={testID}\n hitSlop={8}\n style={{ flexDirection: 'row', alignItems: 'center', gap: theme.space[3], opacity: disabled ? 0.5 : 1 }}\n >\n <View\n style={{\n width: 22, height: 22, borderRadius: 7, alignItems: 'center', justifyContent: 'center',\n backgroundColor: checked ? c.accent : 'transparent',\n borderWidth: checked ? 0 : 1.8,\n borderColor: c.borderStrong,\n }}\n >\n {checked && <CheckIcon size={14} color=\"#fff\" />}\n </View>\n {label && <Text variant=\"body\">{label}</Text>}\n </Pressable>\n );\n}\n","import React from 'react';\nimport { View } from 'react-native';\nimport { useTheme } from '../../theme/useTheme';\nimport { Text } from '../Text/Text';\nimport type { Status, StyleableProps } from '../../types';\n\nexport interface BadgeProps extends StyleableProps {\n children: React.ReactNode;\n /** Semantic status → color. Default `\"neutral\"`. */\n status?: Status;\n /** Show a leading dot. Default `false`. */\n dot?: boolean;\n}\n\n/**\n * A small, static status marker. Uses the shared {@link Status} color set.\n *\n * @remarks\n * Do: use for state (Active, Pending, Beta). Use {@link Chip} for interactive filters.\n * @example\n * <Badge status=\"success\" dot>Active</Badge>\n */\nexport function Badge({ children, status = 'neutral', dot = false, style, testID }: BadgeProps) {\n const theme = useTheme();\n const c = theme.colors;\n const map: Record<Status, { bg: string; fg: string }> = {\n info: { bg: c.infoSoft, fg: c.info },\n success: { bg: c.successSoft, fg: c.success },\n warning: { bg: c.warningSoft, fg: c.warning },\n danger: { bg: c.dangerSoft, fg: c.danger },\n neutral: { bg: c.sunken, fg: c.textMuted },\n };\n const tone = map[status];\n\n return (\n <View testID={testID} style={[{ flexDirection: 'row', alignItems: 'center', gap: theme.space[1] + 2, height: 24, paddingHorizontal: theme.space[2] + 2, borderRadius: theme.radius.full, backgroundColor: tone.bg }, style]}>\n {dot && <View style={{ width: 6, height: 6, borderRadius: 3, backgroundColor: tone.fg }} />}\n <Text variant=\"caption\" weight=\"semibold\" style={{ color: tone.fg }}>{children}</Text>\n </View>\n );\n}\n"]}