@newtonedev/components 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme/defaults.ts","../src/fonts/buildGoogleFontsUrl.ts","../src/fonts/GoogleFontLoader.tsx","../src/fonts/IconFontLoader.tsx","../src/theme/NewtoneProvider.tsx","../src/theme/FrameContext.tsx","../src/tokens/computeTokens.ts","../src/tokens/useTokens.ts","../src/Button/Button.styles.ts","../src/Icon/Icon.tsx","../src/Button/Button.tsx","../src/Card/Card.styles.ts","../src/Card/Card.tsx","../src/Frame/Frame.utils.ts","../src/Frame/Frame.styles.ts","../src/Frame/Frame.tsx","../src/TextInput/TextInput.styles.ts","../src/TextInput/TextInput.tsx","../src/Popover/Popover.styles.ts","../src/Popover/Popover.tsx","../src/Popover/usePopover.ts","../src/Select/Select.types.ts","../src/Select/Select.styles.ts","../src/Select/useSelect.ts","../src/Select/SelectOption.tsx","../src/Select/Select.tsx","../src/Toggle/Toggle.styles.ts","../src/Toggle/Toggle.tsx","../src/Slider/Slider.styles.ts","../src/Slider/Slider.tsx","../src/HueSlider/HueSlider.styles.ts","../src/HueSlider/HueSlider.tsx","../src/ColorScaleSlider/ColorScaleSlider.styles.ts","../src/ColorScaleSlider/ColorScaleSlider.tsx","../src/AppShell/AppShell.styles.ts","../src/AppShell/AppShell.tsx","../src/Sidebar/Sidebar.styles.ts","../src/Sidebar/Sidebar.tsx","../src/Navbar/Navbar.styles.ts","../src/Navbar/Navbar.tsx","../src/registry/registry.ts","../src/registry/codegen.ts","../src/fonts/googleFonts.ts"],"names":["DEFAULT_NEUTRAL_HUE","DEFAULT_NEUTRAL_SATURATION","DEFAULT_ACCENT_HUE","DEFAULT_ACCENT_SATURATION","DEFAULT_SUCCESS_HUE","DEFAULT_SUCCESS_SATURATION","DEFAULT_WARNING_HUE","DEFAULT_WARNING_SATURATION","DEFAULT_ERROR_HUE","DEFAULT_ERROR_SATURATION","useRef","useEffect","createContext","useState","useMemo","React","useContext","getColor","getColorByContrast","srgbToHex","StyleSheet","Text","Pressable","View","RNTextInput","useCallback","ScrollView","TRACK_HEIGHT","THUMB_SIZE","ratio","PanResponder","TextInput","Animated","totalSteps","minNV","maxNV","range"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { NewtoneThemeConfig } from './types';\nimport {\n DEFAULT_NEUTRAL_HUE,\n DEFAULT_NEUTRAL_SATURATION,\n DEFAULT_ACCENT_HUE,\n DEFAULT_ACCENT_SATURATION,\n DEFAULT_SUCCESS_HUE,\n DEFAULT_SUCCESS_SATURATION,\n DEFAULT_WARNING_HUE,\n DEFAULT_WARNING_SATURATION,\n DEFAULT_ERROR_HUE,\n DEFAULT_ERROR_SATURATION,\n} from 'newtone';\n\n/**\n * Default theme configuration matching playground defaults.\n * Palettes: [0] Neutral, [1] Accent, [2] Success, [3] Warning, [4] Error\n */\nexport const DEFAULT_THEME_CONFIG: NewtoneThemeConfig = {\n colorSystem: {\n dynamicRange: {\n lightest: 1,\n darkest: 1,\n },\n palettes: [\n { hue: DEFAULT_NEUTRAL_HUE, saturation: DEFAULT_NEUTRAL_SATURATION },\n { hue: DEFAULT_ACCENT_HUE, saturation: DEFAULT_ACCENT_SATURATION },\n { hue: DEFAULT_SUCCESS_HUE, saturation: DEFAULT_SUCCESS_SATURATION },\n { hue: DEFAULT_WARNING_HUE, saturation: DEFAULT_WARNING_SATURATION },\n { hue: DEFAULT_ERROR_HUE, saturation: DEFAULT_ERROR_SATURATION },\n ],\n },\n themes: {\n neutral: { paletteIndex: 0, lightModeNv: 0.95, darkModeNv: 0.1 },\n primary: { paletteIndex: 1, lightModeNv: 0.95, darkModeNv: 0.1 },\n secondary: { paletteIndex: 1, lightModeNv: 0.85, darkModeNv: 0.15 },\n strong: { paletteIndex: 0, lightModeNv: 0.1, darkModeNv: 0.95 },\n },\n elevation: {\n offsets: [-0.02, 0, 0.04], // [sunken, default, elevated]\n },\n spacing: {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n xl: 24,\n xxl: 32,\n },\n radius: {\n none: 0,\n sm: 4,\n md: 6,\n lg: 8,\n xl: 12,\n pill: 999,\n },\n typography: {\n fonts: {\n mono: {\n type: 'system',\n family: 'ui-monospace',\n fallback: 'SFMono-Regular, Menlo, Monaco, Consolas, monospace',\n },\n display: {\n type: 'system',\n family: 'system-ui',\n fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n default: {\n type: 'system',\n family: 'system-ui',\n fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n },\n scale: {\n xs: 10, // 16 / 1.25^2\n sm: 13, // 16 / 1.25\n base: 16,\n md: 20, // 16 * 1.25\n lg: 25, // 16 * 1.25^2\n xl: 31, // 16 * 1.25^3\n xxl: 39, // 16 * 1.25^4\n },\n lineHeight: { tight: 1.25, normal: 1.5, relaxed: 1.75 },\n fontWeight: { regular: 400, medium: 500, semibold: 600, bold: 700 },\n },\n icons: {\n variant: 'rounded', // Material Design 3 aesthetic\n weight: 400, // Normal weight\n autoGrade: true, // Enable mode-aware grade\n },\n};\n","import type { FontConfig } from '../theme/types';\n\n/**\n * Build a Google Fonts CSS API v2 URL for all google-type fonts in the config.\n * Returns null if no Google fonts are present.\n *\n * @example\n * ```\n * buildGoogleFontsUrl(fonts)\n * // => \"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Fira+Code:wght@400;500;600;700&display=swap\"\n * ```\n */\nexport function buildGoogleFontsUrl(\n fonts: { readonly mono: FontConfig; readonly display: FontConfig; readonly default: FontConfig },\n): string | null {\n const googleFonts = [fonts.mono, fonts.display, fonts.default].filter(\n (f) => f.type === 'google',\n );\n\n if (googleFonts.length === 0) return null;\n\n // Deduplicate by family name\n const unique = [...new Map(googleFonts.map((f) => [f.family, f])).values()];\n\n const families = unique.map((f) => {\n const encoded = f.family.replace(/ /g, '+');\n return `family=${encoded}:wght@400;500;600;700`;\n });\n\n return `https://fonts.googleapis.com/css2?${families.join('&')}&display=swap`;\n}\n","import { useEffect, useRef } from 'react';\nimport type { FontConfig } from '../theme/types';\nimport { buildGoogleFontsUrl } from './buildGoogleFontsUrl';\n\ninterface GoogleFontLoaderProps {\n readonly fonts: {\n readonly mono: FontConfig;\n readonly display: FontConfig;\n readonly default: FontConfig;\n };\n}\n\n/**\n * Manages a single <link> tag in <head> for Google Fonts.\n * Removes the previous link when fonts change to avoid accumulation.\n * Does nothing when no Google fonts are present.\n *\n * Uses imperative DOM manipulation because react-native-web's View\n * cannot render <link> elements.\n */\nexport function GoogleFontLoader({ fonts }: GoogleFontLoaderProps) {\n const linkRef = useRef<HTMLLinkElement | null>(null);\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n\n const url = buildGoogleFontsUrl(fonts);\n\n // Clean up previous link\n if (linkRef.current) {\n linkRef.current.remove();\n linkRef.current = null;\n }\n\n if (!url) return;\n\n // Check if an identical link already exists (another provider instance)\n const links = Array.from(document.head.querySelectorAll('link[rel=\"stylesheet\"]'));\n if (links.some((el) => (el as HTMLLinkElement).href === url)) return;\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n document.head.appendChild(link);\n linkRef.current = link;\n\n return () => {\n if (linkRef.current) {\n linkRef.current.remove();\n linkRef.current = null;\n }\n };\n }, [\n fonts.mono.family,\n fonts.mono.type,\n fonts.display.family,\n fonts.display.type,\n fonts.default.family,\n fonts.default.type,\n ]);\n\n return null;\n}\n","import { useEffect, useRef } from 'react';\n\ninterface IconFontLoaderProps {\n readonly icons: {\n readonly variant: 'outlined' | 'rounded' | 'sharp';\n };\n}\n\n/**\n * Manages a single <link> tag in <head> for the Material Symbols icon font.\n * Loads the variable font with all axes (FILL, wght, GRAD, opsz).\n * Removes the previous link when the variant changes to avoid accumulation.\n */\nexport function IconFontLoader({ icons }: IconFontLoaderProps) {\n const linkRef = useRef<HTMLLinkElement | null>(null);\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n\n const variantName = icons.variant.charAt(0).toUpperCase() + icons.variant.slice(1);\n const family = `Material+Symbols+${variantName}`;\n const url = `https://fonts.googleapis.com/css2?family=${family}:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block`;\n\n // Clean up previous link\n if (linkRef.current) {\n linkRef.current.remove();\n linkRef.current = null;\n }\n\n // Check if an identical link already exists (another provider instance)\n const links = Array.from(document.head.querySelectorAll('link[rel=\"stylesheet\"]'));\n if (links.some((el) => (el as HTMLLinkElement).href === url)) return;\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n document.head.appendChild(link);\n linkRef.current = link;\n\n return () => {\n if (linkRef.current) {\n linkRef.current.remove();\n linkRef.current = null;\n }\n };\n }, [icons.variant]);\n\n return null;\n}\n","import React, { createContext, useState, useMemo, useContext } from 'react';\nimport type { NewtoneThemeConfig, NewtoneThemeContext, ColorMode, ThemeName } from './types';\nimport { DEFAULT_THEME_CONFIG } from './defaults';\nimport { GoogleFontLoader } from '../fonts/GoogleFontLoader';\nimport { IconFontLoader } from '../fonts/IconFontLoader';\n\nconst ThemeContext = createContext<NewtoneThemeContext | null>(null);\n\nexport interface NewtoneProviderProps {\n readonly config?: NewtoneThemeConfig;\n readonly initialMode?: ColorMode;\n readonly initialTheme?: ThemeName;\n readonly children: React.ReactNode;\n}\n\n/**\n * NewtoneProvider - Provides theme context to all Newtone components\n *\n * Wrap your app with this provider to enable theme and mode switching.\n *\n * @example\n * ```tsx\n * <NewtoneProvider initialMode=\"light\" initialTheme=\"neutral\">\n * <App />\n * </NewtoneProvider>\n * ```\n */\nexport function NewtoneProvider({\n config = DEFAULT_THEME_CONFIG,\n initialMode = 'light',\n initialTheme = 'neutral',\n children,\n}: NewtoneProviderProps) {\n const [mode, setMode] = useState<ColorMode>(initialMode);\n const [theme, setTheme] = useState<ThemeName>(initialTheme);\n\n const value = useMemo(\n () => ({\n config,\n mode,\n theme,\n setMode,\n setTheme,\n }),\n [config, mode, theme]\n );\n\n return (\n <ThemeContext.Provider value={value}>\n <GoogleFontLoader fonts={config.typography.fonts} />\n <IconFontLoader icons={config.icons} />\n {children}\n </ThemeContext.Provider>\n );\n}\n\n/**\n * useNewtoneTheme - Hook to access theme context\n *\n * Must be used within a NewtoneProvider.\n *\n * @example\n * ```tsx\n * const { mode, theme, setMode, setTheme } = useNewtoneTheme();\n * ```\n */\nexport function useNewtoneTheme(): NewtoneThemeContext {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useNewtoneTheme must be used within NewtoneProvider');\n }\n return context;\n}\n","import { createContext, useContext } from 'react';\nimport type { ThemeName, ElevationLevel } from './types';\n\n/**\n * Context value provided by Frame to its descendants.\n * Contains the resolved theme and elevation that children should use.\n */\nexport interface FrameContextValue {\n readonly theme: ThemeName;\n readonly elevation: ElevationLevel;\n}\n\n/**\n * FrameContext - Propagates theme and elevation overrides from Frame to descendants.\n *\n * When null, components fall back to NewtoneProvider's theme and default elevation (1).\n * When present, useTokens() reads from this context instead.\n */\nexport const FrameContext = createContext<FrameContextValue | null>(null);\n\n/**\n * useFrameContext - Read the nearest Frame's context, if any.\n *\n * Returns null when no parent Frame exists. This is intentionally not an error —\n * components outside a Frame simply fall back to the NewtoneProvider defaults.\n */\nexport function useFrameContext(): FrameContextValue | null {\n return useContext(FrameContext);\n}\n","import { getColor, getColorByContrast } from 'newtone';\nimport type { PaletteConfig } from 'newtone';\nimport type { ColorSystemConfig, ColorMode, ThemeMapping, ElevationLevel, FontConfig } from '../theme/types';\nimport type { ResolvedTokens } from './types';\n\n/**\n * Convert FontConfig to CSS font-family string\n */\nfunction fontConfigToFamily(font: FontConfig): string {\n const family = font.family.includes(' ') ? `\"${font.family}\"` : font.family;\n return `${family}, ${font.fallback}`;\n}\n\n/**\n * Compute design tokens for a specific mode/theme/elevation combination.\n *\n * This function calls the Newtone engine to generate all necessary color tokens\n * based on the current theme context. All colors are computed on-demand using\n * the pure functions from the engine.\n *\n * @param config - Complete color system configuration (dynamic range + palettes)\n * @param mode - Current color mode ('light' or 'dark')\n * @param themeMapping - Theme configuration (which palette and NV to use)\n * @param elevation - Elevation level (0=sunken, 1=default, 2=elevated)\n * @param elevationOffsets - NV offsets for each elevation level\n * @param spacing - Spacing scale for paddings, gaps, and margins\n * @param radius - Border radius scale for component roundness\n * @param typography - Typography configuration with fonts and scales\n * @param icons - Icon configuration with variant, weight, and auto-grade setting\n * @returns Resolved design tokens with all necessary colors\n *\n * @example\n * ```typescript\n * const tokens = computeTokens(\n * config.colorSystem,\n * 'light',\n * config.themes.neutral,\n * 1,\n * config.elevation.offsets,\n * config.spacing,\n * config.radius,\n * config.typography,\n * config.icons\n * );\n * console.log(tokens.background.srgb); // { r: 0.95, g: 0.95, b: 0.95 }\n * ```\n */\nexport function computeTokens(\n config: ColorSystemConfig,\n mode: ColorMode,\n themeMapping: ThemeMapping,\n elevation: ElevationLevel,\n elevationOffsets: readonly [number, number, number],\n spacing: { readonly xs: number; readonly sm: number; readonly md: number; readonly lg: number; readonly xl: number; readonly xxl: number },\n radius: { readonly none: number; readonly sm: number; readonly md: number; readonly lg: number; readonly xl: number; readonly pill: 999 },\n typography: {\n readonly fonts: { readonly mono: FontConfig; readonly display: FontConfig; readonly default: FontConfig };\n readonly scale: { readonly xs: number; readonly sm: number; readonly base: number; readonly md: number; readonly lg: number; readonly xl: number; readonly xxl: number };\n readonly lineHeight: { readonly tight: number; readonly normal: number; readonly relaxed: number };\n readonly fontWeight: { readonly regular: number; readonly medium: number; readonly semibold: number; readonly bold: number };\n },\n icons: {\n readonly variant: 'outlined' | 'rounded' | 'sharp';\n readonly weight: 100 | 200 | 300 | 400 | 500 | 600 | 700;\n readonly autoGrade: boolean;\n }\n): ResolvedTokens {\n const { dynamicRange, palettes } = config;\n const palette = palettes[themeMapping.paletteIndex];\n\n if (!palette) {\n throw new Error(`Palette at index ${themeMapping.paletteIndex} not found`);\n }\n\n // Determine base NV for this mode + elevation\n const baseNv = mode === 'light' ? themeMapping.lightModeNv : themeMapping.darkModeNv;\n const elevationOffset = elevationOffsets[elevation];\n const backgroundNv = Math.max(0, Math.min(1, baseNv + elevationOffset));\n\n // Derive effective text mode from actual background lightness.\n // This handles inverted themes (e.g., strong: dark bg in light mode)\n // where the mode flag doesn't match the background's visual lightness.\n const effectiveTextMode: ColorMode = backgroundNv >= 0.5 ? 'light' : 'dark';\n\n // Compute background colors for current elevation\n const background = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n backgroundNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Compute elevated surface (always at elevation 2 offset)\n const elevatedNv = Math.max(0, Math.min(1, baseNv + elevationOffsets[2]));\n const backgroundElevated = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n elevatedNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Compute sunken surface (always at elevation 0 offset)\n const sunkenNv = Math.max(0, Math.min(1, baseNv + elevationOffsets[0]));\n const backgroundSunken = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n sunkenNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Compute text colors with WCAG contrast against actual background\n // Primary text: WCAG AA (4.5:1 for body text)\n const textPrimary = getColorByContrast(\n palette.hue,\n palette.saturation,\n dynamicRange,\n 4.5,\n effectiveTextMode,\n palette.desaturation,\n palette.paletteHueGrading,\n background,\n );\n\n // Secondary text: Lower contrast (3.0:1 for captions)\n const textSecondary = getColorByContrast(\n palette.hue,\n palette.saturation,\n dynamicRange,\n 3.0,\n effectiveTextMode,\n palette.desaturation,\n palette.paletteHueGrading,\n background,\n );\n\n // Interactive colors: Use accent palette (index 1)\n const accentPalette = palettes[1];\n\n if (!accentPalette) {\n throw new Error('Accent palette (index 1) not found');\n }\n\n // Resolve per-mode key color: light mode uses keyNormalizedValue, dark uses keyNormalizedValueDark\n const resolveKeyNv = (p: PaletteConfig): number | undefined =>\n mode === 'dark' ? p.keyNormalizedValueDark : p.keyNormalizedValue;\n\n // Interactive base: use user-chosen key color or auto WCAG AA contrast\n const accentKeyNv = resolveKeyNv(accentPalette);\n const interactive = accentKeyNv !== undefined\n ? getColor(\n accentPalette.hue,\n accentPalette.saturation,\n dynamicRange,\n accentKeyNv,\n accentPalette.desaturation,\n accentPalette.paletteHueGrading\n )\n : getColorByContrast(\n accentPalette.hue,\n accentPalette.saturation,\n dynamicRange,\n 4.5,\n effectiveTextMode,\n accentPalette.desaturation,\n accentPalette.paletteHueGrading,\n background,\n );\n\n // Hover/active states: Shift NV slightly from interactive base\n // In light mode (light bg), go darker; in dark mode (dark bg), go lighter\n const interactiveNv = accentKeyNv ?? (effectiveTextMode === 'light' ? 0.3 : 0.7);\n\n const interactiveHover = getColor(\n accentPalette.hue,\n accentPalette.saturation,\n dynamicRange,\n interactiveNv + (effectiveTextMode === 'light' ? -0.05 : 0.05),\n accentPalette.desaturation,\n accentPalette.paletteHueGrading\n );\n\n const interactiveActive = getColor(\n accentPalette.hue,\n accentPalette.saturation,\n dynamicRange,\n interactiveNv + (effectiveTextMode === 'light' ? -0.1 : 0.1),\n accentPalette.desaturation,\n accentPalette.paletteHueGrading\n );\n\n // Border: Subtle contrast from background\n const borderNv = effectiveTextMode === 'light' ? backgroundNv - 0.1 : backgroundNv + 0.1;\n const border = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n Math.max(0, Math.min(1, borderNv)),\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Semantic status colors: success (palette 2), warning (palette 3), error (palette 4)\n // Each computed at WCAG AA contrast against actual background\n const successPalette = palettes[2];\n const warningPalette = palettes[3];\n const errorPalette = palettes[4];\n\n const successKeyNv = successPalette ? resolveKeyNv(successPalette) : undefined;\n const success = successPalette\n ? (successKeyNv !== undefined\n ? getColor(successPalette.hue, successPalette.saturation, dynamicRange,\n successKeyNv, successPalette.desaturation, successPalette.paletteHueGrading)\n : getColorByContrast(successPalette.hue, successPalette.saturation, dynamicRange,\n 4.5, effectiveTextMode, successPalette.desaturation, successPalette.paletteHueGrading, background))\n : interactive;\n\n const warningKeyNv = warningPalette ? resolveKeyNv(warningPalette) : undefined;\n const warning = warningPalette\n ? (warningKeyNv !== undefined\n ? getColor(warningPalette.hue, warningPalette.saturation, dynamicRange,\n warningKeyNv, warningPalette.desaturation, warningPalette.paletteHueGrading)\n : getColorByContrast(warningPalette.hue, warningPalette.saturation, dynamicRange,\n 4.5, effectiveTextMode, warningPalette.desaturation, warningPalette.paletteHueGrading, background))\n : interactive;\n\n const errorKeyNv = errorPalette ? resolveKeyNv(errorPalette) : undefined;\n const error = errorPalette\n ? (errorKeyNv !== undefined\n ? getColor(errorPalette.hue, errorPalette.saturation, dynamicRange,\n errorKeyNv, errorPalette.desaturation, errorPalette.paletteHueGrading)\n : getColorByContrast(errorPalette.hue, errorPalette.saturation, dynamicRange,\n 4.5, effectiveTextMode, errorPalette.desaturation, errorPalette.paletteHueGrading, background))\n : interactive;\n\n return {\n background,\n backgroundElevated,\n backgroundSunken,\n textPrimary,\n textSecondary,\n interactive,\n interactiveHover,\n interactiveActive,\n border,\n success,\n warning,\n error,\n spacing,\n radius,\n typography: {\n fonts: {\n mono: fontConfigToFamily(typography.fonts.mono),\n display: fontConfigToFamily(typography.fonts.display),\n default: fontConfigToFamily(typography.fonts.default),\n },\n size: typography.scale,\n lineHeight: typography.lineHeight,\n weight: typography.fontWeight,\n },\n icons: {\n variant: icons.variant,\n weight: icons.weight,\n grade: icons.autoGrade\n ? (mode === 'light' ? -25 : 200)\n : 0,\n },\n };\n}\n","import { useMemo } from 'react';\nimport { useNewtoneTheme } from '../theme/NewtoneProvider';\nimport { useFrameContext } from '../theme/FrameContext';\nimport { computeTokens } from './computeTokens';\nimport type { ElevationLevel } from '../theme/types';\nimport type { ResolvedTokens } from './types';\n\n/**\n * Hook to compute design tokens for the current theme/mode/elevation.\n *\n * Resolution order:\n * 1. Explicit elevation parameter takes highest priority\n * 2. FrameContext values (from nearest parent Frame) are used when elevation is omitted\n * 3. Falls back to NewtoneProvider theme + elevation 1\n *\n * Theme always reads from FrameContext if present, falling back to NewtoneProvider.\n *\n * @param elevation - Elevation level (0=sunken, 1=default, 2=elevated).\n * When omitted, reads from FrameContext or defaults to 1.\n * @returns Resolved design tokens with all necessary colors\n *\n * @example\n * ```tsx\n * // Inside a <Frame theme=\"primary\" elevation={1}>:\n * function MyComponent() {\n * const tokens = useTokens(); // Gets primary theme, elevation 2 (mapped from Frame's 1)\n * return (\n * <View style={{ backgroundColor: srgbToHex(tokens.background.srgb) }} />\n * );\n * }\n * ```\n */\nexport function useTokens(elevation?: ElevationLevel): ResolvedTokens {\n const { config, mode, theme: providerTheme } = useNewtoneTheme();\n const frameCtx = useFrameContext();\n\n // Resolve theme: FrameContext overrides provider\n const resolvedTheme = frameCtx?.theme ?? providerTheme;\n\n // Resolve elevation: explicit param > FrameContext > default 1\n const resolvedElevation: ElevationLevel = elevation ?? frameCtx?.elevation ?? 1;\n\n return useMemo(() => {\n const themeMapping = config.themes[resolvedTheme];\n return computeTokens(\n config.colorSystem,\n mode,\n themeMapping,\n resolvedElevation,\n config.elevation.offsets,\n config.spacing,\n config.radius,\n config.typography,\n config.icons\n );\n }, [config, mode, resolvedTheme, resolvedElevation]);\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\nimport type { ButtonVariant, ButtonSize } from './Button.types';\n\n/**\n * Get size configuration for buttons using design tokens\n */\nfunction getSizeConfig(tokens: ResolvedTokens) {\n return {\n sm: {\n paddingVertical: tokens.spacing.xs,\n paddingHorizontal: tokens.spacing.md,\n fontSize: tokens.typography.size.sm,\n borderRadius: tokens.radius.sm,\n gap: tokens.spacing.xs,\n iconSize: tokens.typography.size.sm,\n },\n md: {\n paddingVertical: tokens.spacing.sm,\n paddingHorizontal: tokens.spacing.lg,\n fontSize: tokens.typography.size.base,\n borderRadius: tokens.radius.md,\n gap: tokens.spacing.sm,\n iconSize: tokens.typography.size.base,\n },\n lg: {\n paddingVertical: tokens.spacing.md,\n paddingHorizontal: tokens.spacing.xl,\n fontSize: tokens.typography.size.base,\n borderRadius: tokens.radius.lg,\n gap: tokens.spacing.sm,\n iconSize: tokens.typography.size.base,\n },\n };\n}\n\n/**\n * Compute button styles based on tokens, variant, size, and state\n *\n * @param tokens - Resolved design tokens from useTokens\n * @param variant - Button variant (primary, secondary, ghost, outline)\n * @param size - Button size (sm, md, lg)\n * @param disabled - Whether button is disabled\n * @param isIconOnly - Whether the button shows only an icon (no text)\n * @returns StyleSheet with button styles + iconColor for the Icon component\n */\nexport function getButtonStyles(\n tokens: ResolvedTokens,\n variant: ButtonVariant,\n size: ButtonSize,\n disabled: boolean,\n isIconOnly: boolean\n) {\n const sizeConfig = getSizeConfig(tokens)[size];\n\n // Base styles\n const base = {\n paddingVertical: sizeConfig.paddingVertical,\n paddingHorizontal: isIconOnly ? sizeConfig.paddingVertical : sizeConfig.paddingHorizontal,\n borderRadius: sizeConfig.borderRadius,\n alignItems: 'center' as const,\n justifyContent: 'center' as const,\n flexDirection: 'row' as const,\n gap: sizeConfig.gap,\n };\n\n // Variant-specific colors\n let backgroundColor: string;\n let textColor: string;\n let borderColor: string | undefined;\n let borderWidth = 0;\n\n switch (variant) {\n case 'primary':\n backgroundColor = srgbToHex(tokens.interactive.srgb);\n textColor = srgbToHex(tokens.background.srgb); // Contrast inversion\n break;\n case 'secondary':\n backgroundColor = srgbToHex(tokens.backgroundElevated.srgb);\n textColor = srgbToHex(tokens.textPrimary.srgb);\n break;\n case 'outline':\n backgroundColor = 'transparent';\n textColor = srgbToHex(tokens.interactive.srgb);\n borderColor = srgbToHex(tokens.border.srgb);\n borderWidth = 1;\n break;\n case 'ghost':\n backgroundColor = 'transparent';\n textColor = srgbToHex(tokens.interactive.srgb);\n break;\n }\n\n const resolvedTextColor = disabled ? srgbToHex(tokens.textSecondary.srgb) : textColor;\n\n return {\n iconColor: resolvedTextColor,\n iconSize: sizeConfig.iconSize,\n styles: StyleSheet.create({\n base: {\n ...base,\n backgroundColor: disabled ? srgbToHex(tokens.backgroundSunken.srgb) : backgroundColor,\n borderWidth,\n ...(borderColor && { borderColor }),\n },\n pressed: {\n backgroundColor:\n variant === 'primary'\n ? srgbToHex(tokens.interactiveActive.srgb)\n : variant === 'secondary'\n ? srgbToHex(tokens.backgroundSunken.srgb)\n : 'transparent',\n opacity: variant === 'ghost' || variant === 'outline' ? 0.7 : 1,\n },\n disabled: {\n opacity: 0.4,\n },\n text: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: sizeConfig.fontSize,\n fontWeight: tokens.typography.weight.semibold as any,\n color: resolvedTextColor,\n },\n textPressed: {\n // Color changes handled by parent opacity\n },\n textDisabled: {\n // Color already set in text style via disabled check\n },\n }),\n };\n}\n","import React from 'react';\nimport { Text, type ViewStyle, type TextStyle } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport { useTokens } from '../tokens/useTokens';\nimport type { ElevationLevel } from '../theme/types';\n\nexport interface IconProps {\n /** Icon ligature name (e.g., 'home', 'settings', 'check') */\n readonly name: string;\n /** Font size in pixels (default: tokens.typography.size.base) */\n readonly size?: number;\n /** Optical size for variable font axis (default: same as size) */\n readonly opticalSize?: number;\n /** Fill state: 0=outlined, 1=filled (default: 0) */\n readonly fill?: 0 | 1;\n /** Icon color as hex string (default: tokens.textPrimary) */\n readonly color?: string;\n /** Elevation level for token computation (default: 1) */\n readonly elevation?: ElevationLevel;\n /** Additional styles */\n readonly style?: ViewStyle;\n /** Press handler */\n readonly onPress?: () => void;\n}\n\n/**\n * Material Symbols icon component with variable font support.\n *\n * Uses global icon configuration (variant, weight, auto-grade) from theme config,\n * with per-instance control over size, fill, and color.\n *\n * @example\n * ```tsx\n * <Icon name=\"home\" />\n * <Icon name=\"settings\" size={24} fill={1} />\n * <Icon name=\"check\" color=\"#00ff00\" />\n * ```\n */\nexport function Icon({\n name,\n size,\n opticalSize,\n fill = 0,\n color,\n elevation = 1,\n style,\n onPress,\n}: IconProps) {\n const tokens = useTokens(elevation);\n\n const fontSize = size ?? tokens.typography.size.base;\n const opsz = opticalSize ?? fontSize;\n const iconColor = color ?? srgbToHex(tokens.textPrimary.srgb);\n\n // Font family varies by variant: 'Material Symbols Rounded', etc.\n const fontFamily = `Material Symbols ${tokens.icons.variant.charAt(0).toUpperCase() + tokens.icons.variant.slice(1)}`;\n\n // Font variation settings for Material Symbols variable font\n const fontVariationSettings = `'FILL' ${fill}, 'wght' ${tokens.icons.weight}, 'GRAD' ${tokens.icons.grade}, 'opsz' ${opsz}`;\n\n return (\n <Text\n style={{\n fontFamily,\n fontSize,\n color: iconColor,\n userSelect: 'none',\n fontVariationSettings,\n ...style,\n } as TextStyle}\n onPress={onPress}\n >\n {name}\n </Text>\n );\n}\n","import React from 'react';\nimport { Pressable, Text } from 'react-native';\nimport type { ButtonProps } from './Button.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getButtonStyles } from './Button.styles';\nimport { Icon } from '../Icon/Icon';\n\n/**\n * Button component with support for multiple variants, sizes, and optional icons.\n *\n * Automatically adapts to the current theme and mode from NewtoneProvider.\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" size=\"md\" onPress={() => console.log('Pressed')}>\n * Click me\n * </Button>\n * ```\n *\n * @example\n * ```tsx\n * <Button icon=\"add\" variant=\"primary\" onPress={handleAdd}>\n * New Item\n * </Button>\n * ```\n *\n * @example\n * ```tsx\n * <Button icon=\"delete\" variant=\"ghost\" size=\"sm\" onPress={handleDelete} />\n * ```\n */\nexport function Button({\n children,\n icon,\n iconPosition = 'left',\n variant = 'primary',\n size = 'md',\n disabled = false,\n style,\n textStyle,\n ...pressableProps\n}: ButtonProps) {\n const tokens = useTokens(1);\n const isIconOnly = !!icon && !children;\n\n const { styles, iconColor, iconSize } = React.useMemo(\n () => getButtonStyles(tokens, variant, size, disabled, isIconOnly),\n [tokens, variant, size, disabled, isIconOnly]\n );\n\n const renderIcon = () => (\n <Icon name={icon!} size={iconSize} color={iconColor} />\n );\n\n return (\n <Pressable\n style={({ pressed }) => [\n styles.base,\n pressed && !disabled && styles.pressed,\n disabled && styles.disabled,\n ...(Array.isArray(style) ? style : [style]),\n ]}\n disabled={disabled}\n {...pressableProps}\n >\n {({ pressed }) => (\n <>\n {icon && iconPosition === 'left' && renderIcon()}\n {children != null && (\n <Text\n style={[\n styles.text,\n pressed && !disabled && styles.textPressed,\n disabled && styles.textDisabled,\n ...(Array.isArray(textStyle) ? textStyle : [textStyle]),\n ]}\n >\n {children}\n </Text>\n )}\n {icon && iconPosition === 'right' && renderIcon()}\n </>\n )}\n </Pressable>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nexport function getCardStyles(tokens: ResolvedTokens, disabled: boolean) {\n return StyleSheet.create({\n container: {\n backgroundColor: srgbToHex(tokens.background.srgb),\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: tokens.radius.lg,\n padding: tokens.spacing.lg,\n opacity: disabled ? 0.5 : 1,\n },\n });\n}\n","import React from 'react';\nimport { View } from 'react-native';\nimport type { CardProps } from './Card.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getCardStyles } from './Card.styles';\n\nexport function Card({\n children,\n elevation = 1,\n style,\n disabled = false,\n}: CardProps) {\n const tokens = useTokens(elevation);\n\n const styles = React.useMemo(\n () => getCardStyles(tokens, disabled),\n [tokens, disabled]\n );\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {children}\n </View>\n );\n}\n","import type { ViewStyle } from 'react-native';\nimport type { ResolvedTokens } from '../tokens/types';\nimport type {\n SpacingValue,\n SpacingAxes,\n SpacingSides,\n PaddingProp,\n GapProp,\n RadiusValue,\n RadiusProp,\n SizingMode,\n Direction,\n Alignment,\n Justification,\n} from './Frame.types';\n\n// ── Spacing ──────────────────────────────────────────────────────\n\n/** Resolve a spacing token or number to a pixel value */\nexport function resolveSpacing(\n value: SpacingValue,\n tokens: ResolvedTokens,\n): number {\n if (typeof value === 'number') return value;\n return tokens.spacing[value];\n}\n\n/** Resolve padding prop to per-side pixel values */\nexport function resolvePadding(\n prop: PaddingProp,\n tokens: ResolvedTokens,\n): { readonly top: number; readonly right: number; readonly bottom: number; readonly left: number } {\n if (typeof prop === 'string' || typeof prop === 'number') {\n const px = resolveSpacing(prop, tokens);\n return { top: px, right: px, bottom: px, left: px };\n }\n\n // Axis shorthand: { x?, y? }\n if ('x' in prop || 'y' in prop) {\n const axes = prop as SpacingAxes;\n const x = axes.x !== undefined ? resolveSpacing(axes.x, tokens) : 0;\n const y = axes.y !== undefined ? resolveSpacing(axes.y, tokens) : 0;\n return { top: y, right: x, bottom: y, left: x };\n }\n\n // Per-side: { top?, right?, bottom?, left? }\n const sides = prop as SpacingSides;\n return {\n top: sides.top !== undefined ? resolveSpacing(sides.top, tokens) : 0,\n right: sides.right !== undefined ? resolveSpacing(sides.right, tokens) : 0,\n bottom: sides.bottom !== undefined ? resolveSpacing(sides.bottom, tokens) : 0,\n left: sides.left !== undefined ? resolveSpacing(sides.left, tokens) : 0,\n };\n}\n\n/** Resolve gap prop to rowGap/columnGap pixel values */\nexport function resolveGap(\n prop: GapProp,\n tokens: ResolvedTokens,\n): { readonly rowGap: number; readonly columnGap: number } {\n if (typeof prop === 'string' || typeof prop === 'number') {\n const px = resolveSpacing(prop, tokens);\n return { rowGap: px, columnGap: px };\n }\n\n // { row?, column? }\n return {\n rowGap: prop.row !== undefined ? resolveSpacing(prop.row, tokens) : 0,\n columnGap: prop.column !== undefined ? resolveSpacing(prop.column, tokens) : 0,\n };\n}\n\n// ── Radius ───────────────────────────────────────────────────────\n\n/** Resolve a radius token or number to a pixel value */\nexport function resolveRadius(\n value: RadiusValue,\n tokens: ResolvedTokens,\n): number {\n if (typeof value === 'number') return value;\n return tokens.radius[value];\n}\n\n/** Resolved per-corner radius values */\nexport interface ResolvedCorners {\n readonly topLeft: number;\n readonly topRight: number;\n readonly bottomLeft: number;\n readonly bottomRight: number;\n}\n\n/** Resolve radius prop to per-corner pixel values */\nexport function resolveRadiusCorners(\n prop: RadiusProp,\n tokens: ResolvedTokens,\n): ResolvedCorners {\n if (typeof prop === 'string' || typeof prop === 'number') {\n const px = resolveRadius(prop, tokens);\n return { topLeft: px, topRight: px, bottomLeft: px, bottomRight: px };\n }\n\n // Per-corner object\n return {\n topLeft: prop.topLeft !== undefined ? resolveRadius(prop.topLeft, tokens) : 0,\n topRight: prop.topRight !== undefined ? resolveRadius(prop.topRight, tokens) : 0,\n bottomLeft: prop.bottomLeft !== undefined ? resolveRadius(prop.bottomLeft, tokens) : 0,\n bottomRight: prop.bottomRight !== undefined ? resolveRadius(prop.bottomRight, tokens) : 0,\n };\n}\n\n/** Check if any corner has a positive radius (for auto-clip) */\nexport function hasPositiveRadius(corners: ResolvedCorners): boolean {\n return corners.topLeft > 0\n || corners.topRight > 0\n || corners.bottomLeft > 0\n || corners.bottomRight > 0;\n}\n\n// ── Sizing ───────────────────────────────────────────────────────\n\n/** Resolve width/height sizing modes to ViewStyle properties */\nexport function resolveSizing(\n width: SizingMode | undefined,\n height: SizingMode | undefined,\n): ViewStyle {\n const style: Record<string, unknown> = {};\n\n if (width !== undefined) {\n if (width === 'fill') {\n style.flexGrow = 1;\n style.width = '100%';\n } else if (typeof width === 'number') {\n style.width = width;\n }\n // 'hug' = default RN behavior, no explicit dimension\n }\n\n if (height !== undefined) {\n if (height === 'fill') {\n style.flexGrow = style.flexGrow === 1 ? 1 : 1;\n style.height = '100%';\n } else if (typeof height === 'number') {\n style.height = height;\n }\n // 'hug' = default RN behavior\n }\n\n return style as ViewStyle;\n}\n\n// ── Layout ───────────────────────────────────────────────────────\n\nconst ALIGN_MAP: Record<Alignment, ViewStyle['alignItems']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst JUSTIFY_MAP: Record<Justification, ViewStyle['justifyContent']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n};\n\n/** Resolve alignment prop to ViewStyle alignItems */\nexport function resolveAlignment(align: Alignment): ViewStyle['alignItems'] {\n return ALIGN_MAP[align];\n}\n\n/** Resolve justification prop to ViewStyle justifyContent */\nexport function resolveJustification(justify: Justification): ViewStyle['justifyContent'] {\n return JUSTIFY_MAP[justify];\n}\n\n/** Resolve direction + reverse to ViewStyle flexDirection */\nexport function resolveFlexDirection(\n direction: Direction,\n reverse: boolean,\n): ViewStyle['flexDirection'] {\n if (direction === 'horizontal') {\n return reverse ? 'row-reverse' : 'row';\n }\n return reverse ? 'column-reverse' : 'column';\n}\n","import type { ViewStyle } from 'react-native';\nimport { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\nimport type { FrameElevation } from '../theme/types';\nimport type {\n PaddingProp,\n GapProp,\n SizingMode,\n Direction,\n Alignment,\n Justification,\n RadiusProp,\n LayoutMode,\n} from './Frame.types';\nimport {\n resolvePadding,\n resolveGap,\n resolveSizing,\n resolveFlexDirection,\n resolveAlignment,\n resolveJustification,\n resolveRadiusCorners,\n hasPositiveRadius,\n} from './Frame.utils';\n\n// ── Input ────────────────────────────────────────────────────────\n\nexport interface FrameStyleInput {\n readonly tokens: ResolvedTokens;\n readonly frameElevation: FrameElevation;\n\n // Layout\n readonly layout?: LayoutMode;\n readonly direction?: Direction;\n readonly wrap?: boolean;\n readonly reverse?: boolean;\n readonly columns?: number;\n readonly rows?: number;\n\n // Alignment\n readonly align?: Alignment;\n readonly justify?: Justification;\n\n // Spacing\n readonly padding?: PaddingProp;\n readonly gap?: GapProp;\n\n // Sizing\n readonly width?: SizingMode;\n readonly height?: SizingMode;\n readonly minWidth?: number;\n readonly maxWidth?: number;\n readonly minHeight?: number;\n readonly maxHeight?: number;\n\n // Appearance\n readonly radius?: RadiusProp;\n readonly bordered?: boolean;\n readonly disabled?: boolean;\n}\n\n// ── Output ───────────────────────────────────────────────────────\n\nexport interface FrameStyles {\n /** Main container style (ViewStyle) */\n readonly container: ViewStyle;\n /** Style applied when pressed (background shift) */\n readonly pressed: ViewStyle;\n /** Web-only CSS Grid properties (cast to ViewStyle at render) */\n readonly gridWebStyle: React.CSSProperties | null;\n /** Web-only inset box-shadow string for elevation -2 */\n readonly insetBoxShadow: string | null;\n}\n\n// ── Builder ──────────────────────────────────────────────────────\n\nexport function getFrameStyles(input: FrameStyleInput): FrameStyles {\n const {\n tokens,\n frameElevation,\n layout = 'flex',\n direction = 'vertical',\n wrap = false,\n reverse = false,\n columns,\n rows,\n align,\n justify,\n padding,\n gap,\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n radius,\n bordered = false,\n disabled = false,\n } = input;\n\n const container: Record<string, unknown> = {};\n\n // ── Background & foreground ──\n container.backgroundColor = srgbToHex(tokens.background.srgb);\n container.color = srgbToHex(tokens.textPrimary.srgb);\n\n // ── Layout mode ──\n if (layout === 'flex') {\n container.display = 'flex';\n container.flexDirection = resolveFlexDirection(direction, reverse);\n if (wrap) container.flexWrap = 'wrap';\n }\n // Grid: set flex as RN fallback; actual grid applied via gridWebStyle\n if (layout === 'grid') {\n container.display = 'flex';\n container.flexDirection = 'row';\n container.flexWrap = 'wrap';\n }\n\n // ── Alignment ──\n if (align) container.alignItems = resolveAlignment(align);\n if (justify) container.justifyContent = resolveJustification(justify);\n\n // ── Padding ──\n if (padding !== undefined) {\n const p = resolvePadding(padding, tokens);\n container.paddingTop = p.top;\n container.paddingRight = p.right;\n container.paddingBottom = p.bottom;\n container.paddingLeft = p.left;\n }\n\n // ── Gap ──\n if (gap !== undefined) {\n const g = resolveGap(gap, tokens);\n container.rowGap = g.rowGap;\n container.columnGap = g.columnGap;\n }\n\n // ── Sizing ──\n const sizing = resolveSizing(width, height);\n Object.assign(container, sizing);\n\n // ── Constraints ──\n if (minWidth !== undefined) container.minWidth = minWidth;\n if (maxWidth !== undefined) container.maxWidth = maxWidth;\n if (minHeight !== undefined) container.minHeight = minHeight;\n if (maxHeight !== undefined) container.maxHeight = maxHeight;\n\n // ── Radius ──\n if (radius !== undefined) {\n const corners = resolveRadiusCorners(radius, tokens);\n container.borderTopLeftRadius = corners.topLeft;\n container.borderTopRightRadius = corners.topRight;\n container.borderBottomLeftRadius = corners.bottomLeft;\n container.borderBottomRightRadius = corners.bottomRight;\n\n // Auto-clip when any corner has radius\n if (hasPositiveRadius(corners)) {\n container.overflow = 'hidden';\n }\n }\n\n // ── Border ──\n if (bordered) {\n container.borderWidth = 1;\n container.borderColor = srgbToHex(tokens.border.srgb);\n }\n\n // ── Outer shadow (elevation 2) ──\n if (frameElevation === 2) {\n container.shadowColor = '#000';\n container.shadowOffset = { width: 0, height: 2 };\n container.shadowOpacity = 0.12;\n container.shadowRadius = 6;\n // Android elevation prop (react-native-web maps to box-shadow)\n container.elevation = 4;\n }\n\n // ── Disabled ──\n if (disabled) {\n container.opacity = 0.5;\n }\n\n // ── Pressed state (background shift to sunken) ──\n const pressed = StyleSheet.create({\n s: { backgroundColor: srgbToHex(tokens.backgroundSunken.srgb) },\n }).s;\n\n // ── Grid web style ──\n let gridWebStyle: React.CSSProperties | null = null;\n if (layout === 'grid') {\n gridWebStyle = {\n display: 'grid' as const,\n gridTemplateColumns: columns ? `repeat(${columns}, 1fr)` : undefined,\n gridTemplateRows: rows ? `repeat(${rows}, 1fr)` : undefined,\n };\n }\n\n // ── Inset shadow (elevation -2) ──\n const insetBoxShadow = frameElevation === -2\n ? 'inset 0 2px 4px rgba(0,0,0,0.12)'\n : null;\n\n return {\n container: StyleSheet.create({ c: container as ViewStyle }).c,\n pressed,\n gridWebStyle,\n insetBoxShadow,\n };\n}\n","import React, { useMemo } from 'react';\nimport { View, Pressable, Text } from 'react-native';\nimport type { ViewStyle, TextStyle } from 'react-native';\nimport type { FrameProps } from './Frame.types';\nimport type { ElevationLevel, FrameElevation } from '../theme/types';\nimport { srgbToHex } from 'newtone';\nimport { FrameContext, useFrameContext } from '../theme/FrameContext';\nimport { useNewtoneTheme } from '../theme/NewtoneProvider';\nimport { computeTokens } from '../tokens/computeTokens';\nimport { getFrameStyles } from './Frame.styles';\n\n/**\n * Wrap raw string/number children in <Text> to prevent\n * react-native-web \"Unexpected text node\" console errors.\n */\nfunction wrapTextChildren(\n children: React.ReactNode,\n textStyle: TextStyle,\n): React.ReactNode {\n return React.Children.map(children, (child) => {\n if (typeof child === 'string' || typeof child === 'number') {\n return <Text style={textStyle}>{child}</Text>;\n }\n return child;\n });\n}\n\n/**\n * Convert user-facing FrameElevation (-2..2) to internal ElevationLevel (0..2).\n *\n * | Frame | Internal | Background |\n * |:-----:|:--------:|:-----------|\n * | -2 | 0 | Sunken |\n * | -1 | 0 | Sunken |\n * | 0 | 1 | Default |\n * | 1 | 2 | Elevated |\n * | 2 | 2 | Elevated |\n */\nfunction toElevationLevel(frameElevation: FrameElevation): ElevationLevel {\n if (frameElevation <= -1) return 0;\n if (frameElevation === 0) return 1;\n return 2;\n}\n\n/**\n * Frame — Foundational layout building block.\n *\n * Frame is a container that provides theme and elevation context to all\n * descendants, plus layout (flex/grid), spacing, sizing, appearance,\n * and interactivity capabilities.\n *\n * Frames can be nested. Inner frames override outer frames for their subtree.\n * Unspecified props inherit from the nearest parent Frame.\n *\n * @example\n * ```tsx\n * // Basic layout\n * <Frame direction=\"horizontal\" gap=\"md\" padding=\"lg\" align=\"center\">\n * <Button onPress={() => {}}>Save</Button>\n * <Button variant=\"ghost\" onPress={() => {}}>Cancel</Button>\n * </Frame>\n * ```\n *\n * @example\n * ```tsx\n * // Card-like frame\n * <Frame\n * theme=\"primary\"\n * elevation={2}\n * radius=\"lg\"\n * padding=\"xl\"\n * bordered\n * onPress={() => navigate('/details')}\n * >\n * <Text>Clickable card</Text>\n * </Frame>\n * ```\n *\n * @example\n * ```tsx\n * // Grid layout (web)\n * <Frame layout=\"grid\" columns={3} gap=\"md\" padding=\"lg\">\n * <Frame radius=\"md\" padding=\"md\" bordered>Cell 1</Frame>\n * <Frame radius=\"md\" padding=\"md\" bordered>Cell 2</Frame>\n * <Frame radius=\"md\" padding=\"md\" bordered>Cell 3</Frame>\n * </Frame>\n * ```\n */\nexport function Frame({\n children,\n // Theme & elevation\n theme,\n elevation,\n // Layout\n layout,\n direction,\n wrap,\n reverse,\n columns,\n rows,\n // Alignment\n align,\n justify,\n // Spacing\n padding,\n gap,\n // Sizing\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n // Appearance\n radius,\n bordered,\n // Interactivity\n onPress,\n href,\n disabled = false,\n // Style override\n style,\n}: FrameProps) {\n const { config, mode, theme: providerTheme } = useNewtoneTheme();\n const parentFrameCtx = useFrameContext();\n\n // Resolve theme: prop > parent Frame > NewtoneProvider\n const resolvedTheme = theme ?? parentFrameCtx?.theme ?? providerTheme;\n\n // Resolve frame elevation (user-facing, for shadow/style decisions)\n const resolvedFrameElevation: FrameElevation = elevation ?? 0;\n\n // Map to internal elevation level for token computation\n const resolvedElevation: ElevationLevel = elevation !== undefined\n ? toElevationLevel(elevation)\n : parentFrameCtx?.elevation ?? 1;\n\n // Compute tokens directly (not useTokens) to avoid reading our own FrameContext\n const tokens = useMemo(() => {\n const themeMapping = config.themes[resolvedTheme];\n return computeTokens(\n config.colorSystem,\n mode,\n themeMapping,\n resolvedElevation,\n config.elevation.offsets,\n config.spacing,\n config.radius,\n config.typography,\n config.icons,\n );\n }, [config, mode, resolvedTheme, resolvedElevation]);\n\n const styles = useMemo(\n () => getFrameStyles({\n tokens,\n frameElevation: resolvedFrameElevation,\n layout,\n direction,\n wrap,\n reverse,\n columns,\n rows,\n align,\n justify,\n padding,\n gap,\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n radius,\n bordered,\n disabled,\n }),\n [\n tokens, resolvedFrameElevation,\n layout, direction, wrap, reverse, columns, rows,\n align, justify, padding, gap,\n width, height, minWidth, maxWidth, minHeight, maxHeight,\n radius, bordered, disabled,\n ],\n );\n\n // Memoize context value\n const contextValue = useMemo(\n () => ({ theme: resolvedTheme, elevation: resolvedElevation }),\n [resolvedTheme, resolvedElevation],\n );\n\n // Build the style array with web-specific overrides\n const webOverrides: ViewStyle[] = [];\n if (styles.gridWebStyle) {\n webOverrides.push(styles.gridWebStyle as unknown as ViewStyle);\n }\n if (styles.insetBoxShadow) {\n webOverrides.push({ boxShadow: styles.insetBoxShadow } as unknown as ViewStyle);\n }\n\n const userStyles = Array.isArray(style) ? style : style ? [style] : [];\n\n const isInteractive = onPress !== undefined || href !== undefined;\n\n // Wrap raw string/number children in <Text> for RN compatibility\n const textStyle = useMemo<TextStyle>(\n () => ({\n color: srgbToHex(tokens.textPrimary.srgb),\n fontSize: tokens.typography.size.base,\n fontFamily: tokens.typography.fonts.default,\n lineHeight: tokens.typography.size.base * tokens.typography.lineHeight.normal,\n }),\n [tokens],\n );\n const wrappedChildren = wrapTextChildren(children, textStyle);\n\n return (\n <FrameContext.Provider value={contextValue}>\n {isInteractive ? (\n <Pressable\n onPress={onPress}\n disabled={disabled}\n // react-native-web renders Pressable with href as <a>\n {...(href ? { href, accessibilityRole: 'link' as const } : { accessibilityRole: 'button' as const })}\n style={({ pressed }) => [\n styles.container,\n pressed && !disabled && styles.pressed,\n ...webOverrides,\n ...userStyles,\n ]}\n >\n {wrappedChildren}\n </Pressable>\n ) : (\n <View style={[styles.container, ...webOverrides, ...userStyles]}>\n {wrappedChildren}\n </View>\n )}\n </FrameContext.Provider>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nexport function getTextInputStyles(tokens: ResolvedTokens, disabled: boolean) {\n return StyleSheet.create({\n container: {\n gap: tokens.spacing.xs,\n },\n label: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n input: {\n fontFamily: tokens.typography.fonts.default,\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: tokens.radius.md,\n paddingVertical: tokens.spacing.sm,\n paddingHorizontal: tokens.spacing.md,\n fontSize: tokens.typography.size.base,\n color: disabled\n ? srgbToHex(tokens.textSecondary.srgb)\n : srgbToHex(tokens.textPrimary.srgb),\n opacity: disabled ? 0.5 : 1,\n },\n });\n}\n","import React from 'react';\nimport { View, Text, TextInput as RNTextInput } from 'react-native';\nimport type { TextInputProps } from './TextInput.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getTextInputStyles } from './TextInput.styles';\nimport { srgbToHex } from 'newtone';\n\nexport function TextInput({\n label,\n disabled = false,\n style,\n ...textInputProps\n}: TextInputProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getTextInputStyles(tokens, disabled),\n [tokens, disabled]\n );\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {label && <Text style={styles.label}>{label}</Text>}\n <RNTextInput\n style={styles.input}\n editable={!disabled}\n placeholderTextColor={srgbToHex(tokens.textSecondary.srgb)}\n {...textInputProps}\n />\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nexport function getPopoverStyles(\n tokens: ResolvedTokens,\n triggerHeight: number,\n offset: number,\n maxHeight: number,\n width: 'trigger' | 'auto' | number,\n isOpen: boolean\n) {\n const widthStyle =\n width === 'trigger'\n ? { left: 0 as const, right: 0 as const }\n : typeof width === 'number'\n ? { width, left: 0 as const }\n : { left: 0 as const };\n\n return StyleSheet.create({\n container: {\n position: 'relative',\n zIndex: isOpen ? 999 : 1,\n },\n content: {\n position: 'absolute',\n top: triggerHeight + offset,\n ...widthStyle,\n backgroundColor: srgbToHex(tokens.backgroundElevated.srgb),\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: tokens.radius.md,\n maxHeight,\n zIndex: 1000,\n overflow: 'hidden',\n ...({ boxShadow: '0 4px 12px rgba(0,0,0,0.15)' } as any),\n },\n });\n}\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { View } from 'react-native';\nimport type { PopoverProps } from './Popover.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getPopoverStyles } from './Popover.styles';\n\n// Module-level: set of close callbacks for all open Popovers.\n// Opening one Popover automatically closes all others.\nconst openPopovers = new Set<() => void>();\n\nexport function Popover({\n isOpen,\n onClose,\n trigger,\n children,\n width = 'trigger',\n maxHeight = 240,\n offset = 4,\n closeOnEscape = true,\n style,\n contentStyle,\n}: PopoverProps) {\n const tokens = useTokens(1);\n const containerRef = useRef<View>(null);\n const [triggerHeight, setTriggerHeight] = useState(0);\n\n const onTriggerLayout = useCallback(\n (e: { nativeEvent: { layout: { height: number } } }) => {\n setTriggerHeight(e.nativeEvent.layout.height);\n },\n []\n );\n\n // Mutual exclusion: opening this Popover closes all others\n useEffect(() => {\n if (!isOpen) return;\n openPopovers.forEach((closeFn) => closeFn());\n openPopovers.clear();\n openPopovers.add(onClose);\n return () => {\n openPopovers.delete(onClose);\n };\n }, [isOpen, onClose]);\n\n // Click-outside: capture phase so RNW Pressable can't swallow the event\n useEffect(() => {\n if (!isOpen) return;\n const handleMouseDown = (e: MouseEvent) => {\n const node = containerRef.current as unknown as HTMLElement;\n if (node && !node.contains(e.target as Node)) {\n onClose();\n }\n };\n document.addEventListener('mousedown', handleMouseDown, true);\n return () => document.removeEventListener('mousedown', handleMouseDown, true);\n }, [isOpen, onClose]);\n\n const handleKeyDown = useCallback(\n (e: any) => {\n if (closeOnEscape && e.key === 'Escape') {\n e.stopPropagation();\n onClose();\n }\n },\n [closeOnEscape, onClose]\n );\n\n const styles = useMemo(\n () => getPopoverStyles(tokens, triggerHeight, offset, maxHeight, width, isOpen),\n [tokens, triggerHeight, offset, maxHeight, width, isOpen]\n );\n\n const containerStyles = useMemo(\n () => [styles.container, ...(Array.isArray(style) ? style : style ? [style] : [])],\n [styles.container, style]\n );\n\n const mergedContentStyles = useMemo(\n () => [styles.content, ...(Array.isArray(contentStyle) ? contentStyle : contentStyle ? [contentStyle] : [])],\n [styles.content, contentStyle]\n );\n\n // onKeyDown is a web-only prop supported by react-native-web but not in RN types\n const webProps = { onKeyDown: handleKeyDown } as any;\n\n return (\n <View\n ref={containerRef}\n style={containerStyles}\n {...webProps}\n >\n <View onLayout={onTriggerLayout}>\n {trigger}\n </View>\n\n {isOpen && (\n <View style={mergedContentStyles}>\n {children}\n </View>\n )}\n </View>\n );\n}\n","import { useCallback, useState } from 'react';\nimport type { UsePopoverOptions, UsePopoverReturn } from './Popover.types';\n\nexport function usePopover(options?: UsePopoverOptions): UsePopoverReturn {\n const [isOpen, setIsOpen] = useState(options?.initialOpen ?? false);\n\n const open = useCallback(() => {\n setIsOpen(true);\n options?.onOpenChange?.(true);\n }, [options]);\n\n const close = useCallback(() => {\n setIsOpen(false);\n options?.onOpenChange?.(false);\n }, [options]);\n\n const toggle = useCallback(() => {\n setIsOpen((prev) => {\n const next = !prev;\n options?.onOpenChange?.(next);\n return next;\n });\n }, [options]);\n\n return { isOpen, open, close, toggle };\n}\n","import type { ViewStyle } from 'react-native';\n\nexport interface SelectOption {\n readonly label: string;\n readonly value: string;\n readonly disabled?: boolean;\n}\n\nexport interface SelectOptionGroup {\n readonly label: string;\n readonly options: readonly SelectOption[];\n}\n\nexport type SelectItem = SelectOption | SelectOptionGroup;\n\nexport function isOptionGroup(item: SelectItem): item is SelectOptionGroup {\n return 'options' in item;\n}\n\nexport interface SelectProps {\n /** Flat options or grouped options */\n readonly options: readonly SelectItem[];\n /** Currently selected value */\n readonly value: string;\n /** Callback when selection changes */\n readonly onValueChange: (value: string) => void;\n /** Field label displayed above the trigger */\n readonly label?: string;\n /** Placeholder text when no value is selected */\n readonly placeholder?: string;\n /** Disabled state */\n readonly disabled?: boolean;\n /** Custom render for each option row */\n readonly renderOption?: (\n option: SelectOption,\n state: { readonly isSelected: boolean; readonly isFocused: boolean }\n ) => React.ReactNode;\n /** Custom render for the trigger display text */\n readonly renderValue?: (option: SelectOption | undefined) => React.ReactNode;\n /** Size variant. @default 'md' */\n readonly size?: 'sm' | 'md';\n /** Container style override */\n readonly style?: ViewStyle | ViewStyle[];\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nexport function getSelectStyles(\n tokens: ResolvedTokens,\n disabled: boolean,\n size: 'sm' | 'md',\n isOpen: boolean\n) {\n const isSm = size === 'sm';\n const fontSize = isSm ? tokens.typography.size.sm : tokens.typography.size.base;\n const iconSize = fontSize + 2;\n const iconSpace = iconSize + tokens.spacing.sm;\n const paddingVertical = isSm ? tokens.spacing.xs : tokens.spacing.sm;\n const paddingHorizontal = isSm ? tokens.spacing.sm : tokens.spacing.md;\n\n return StyleSheet.create({\n container: {\n gap: tokens.spacing.xs,\n zIndex: isOpen ? 999 : 0,\n },\n label: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n trigger: {\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: tokens.radius.md,\n paddingVertical,\n paddingLeft: paddingHorizontal,\n paddingRight: iconSpace + (isSm ? tokens.spacing.xs : tokens.spacing.sm),\n opacity: disabled ? 0.5 : 1,\n },\n triggerText: {\n flex: 1,\n fontFamily: tokens.typography.fonts.default,\n fontSize,\n color: disabled\n ? srgbToHex(tokens.textSecondary.srgb)\n : srgbToHex(tokens.textPrimary.srgb),\n },\n iconWrapper: {\n position: 'absolute',\n right: isSm ? tokens.spacing.xs : tokens.spacing.sm,\n top: 0,\n bottom: 0,\n justifyContent: 'center',\n },\n groupLabel: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.xs,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n textTransform: 'uppercase',\n letterSpacing: 0.5,\n paddingVertical: tokens.spacing.xs,\n paddingHorizontal: isSm ? tokens.spacing.sm : tokens.spacing.md,\n paddingTop: tokens.spacing.sm,\n },\n });\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { SelectOption } from './Select.types';\n\ninterface UseSelectOptions {\n readonly flatOptions: readonly SelectOption[];\n readonly value: string;\n readonly isOpen: boolean;\n readonly onSelect: (value: string) => void;\n readonly onClose: () => void;\n readonly onOpen: () => void;\n}\n\nfunction findNextEnabled(\n options: readonly SelectOption[],\n startIndex: number,\n direction: 1 | -1\n): number {\n const len = options.length;\n if (len === 0) return -1;\n\n for (let i = 1; i <= len; i++) {\n const idx = (startIndex + i * direction + len) % len;\n if (!options[idx].disabled) return idx;\n }\n return -1;\n}\n\nexport function useSelect({\n flatOptions,\n value,\n isOpen,\n onSelect,\n onClose,\n onOpen,\n}: UseSelectOptions) {\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const typeAheadRef = useRef('');\n const typeAheadTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n // When opening, focus the selected option or first enabled option\n useEffect(() => {\n if (isOpen) {\n const selectedIdx = flatOptions.findIndex((o) => o.value === value);\n if (selectedIdx >= 0 && !flatOptions[selectedIdx].disabled) {\n setFocusedIndex(selectedIdx);\n } else {\n const firstEnabled = flatOptions.findIndex((o) => !o.disabled);\n setFocusedIndex(firstEnabled >= 0 ? firstEnabled : -1);\n }\n } else {\n setFocusedIndex(-1);\n }\n }, [isOpen, flatOptions, value]);\n\n const handleKeyDown = useCallback(\n (e: any) => {\n const key: string = e.key;\n\n // When closed, open on ArrowDown/ArrowUp/Enter/Space\n if (!isOpen) {\n if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Enter' || key === ' ') {\n e.preventDefault();\n onOpen();\n }\n return;\n }\n\n switch (key) {\n case 'ArrowDown': {\n e.preventDefault();\n const next = findNextEnabled(flatOptions, focusedIndex, 1);\n if (next >= 0) setFocusedIndex(next);\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prev = findNextEnabled(flatOptions, focusedIndex, -1);\n if (prev >= 0) setFocusedIndex(prev);\n break;\n }\n case 'Enter':\n case ' ': {\n e.preventDefault();\n if (focusedIndex >= 0 && !flatOptions[focusedIndex].disabled) {\n onSelect(flatOptions[focusedIndex].value);\n }\n break;\n }\n case 'Escape': {\n e.preventDefault();\n onClose();\n break;\n }\n case 'Home': {\n e.preventDefault();\n const first = flatOptions.findIndex((o) => !o.disabled);\n if (first >= 0) setFocusedIndex(first);\n break;\n }\n case 'End': {\n e.preventDefault();\n const lastEnabled = [...flatOptions].reverse().findIndex((o) => !o.disabled);\n if (lastEnabled >= 0) setFocusedIndex(flatOptions.length - 1 - lastEnabled);\n break;\n }\n default: {\n // Type-ahead: single character matching\n if (key.length === 1 && !e.ctrlKey && !e.metaKey) {\n clearTimeout(typeAheadTimerRef.current);\n typeAheadRef.current += key.toLowerCase();\n\n const match = flatOptions.findIndex(\n (o) => !o.disabled && o.label.toLowerCase().startsWith(typeAheadRef.current)\n );\n if (match >= 0) setFocusedIndex(match);\n\n typeAheadTimerRef.current = setTimeout(() => {\n typeAheadRef.current = '';\n }, 500);\n }\n break;\n }\n }\n },\n [isOpen, focusedIndex, flatOptions, onSelect, onClose, onOpen]\n );\n\n return { focusedIndex, handleKeyDown };\n}\n","import React from 'react';\nimport { Pressable, Text, View } from 'react-native';\nimport type { SelectOption as SelectOptionType, SelectProps } from './Select.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { Icon } from '../Icon/Icon';\nimport { srgbToHex } from 'newtone';\n\ninterface SelectOptionRowProps {\n readonly option: SelectOptionType;\n readonly isSelected: boolean;\n readonly isFocused: boolean;\n readonly onSelect: () => void;\n readonly renderOption?: SelectProps['renderOption'];\n readonly size: 'sm' | 'md';\n}\n\nexport function SelectOptionRow({\n option,\n isSelected,\n isFocused,\n onSelect,\n renderOption,\n size,\n}: SelectOptionRowProps) {\n const tokens = useTokens(1);\n\n const paddingVertical = size === 'sm' ? tokens.spacing.xs : tokens.spacing.sm;\n const paddingHorizontal = size === 'sm' ? tokens.spacing.sm : tokens.spacing.md;\n const fontSize = size === 'sm' ? tokens.typography.size.sm : tokens.typography.size.base;\n\n if (renderOption) {\n return (\n <Pressable\n onPress={option.disabled ? undefined : onSelect}\n disabled={option.disabled}\n role=\"option\"\n aria-selected={isSelected}\n >\n {renderOption(option, { isSelected, isFocused })}\n </Pressable>\n );\n }\n\n return (\n <Pressable\n onPress={option.disabled ? undefined : onSelect}\n disabled={option.disabled}\n role=\"option\"\n aria-selected={isSelected}\n style={({ pressed }) => [\n {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n justifyContent: 'space-between' as const,\n paddingVertical,\n paddingHorizontal,\n },\n isSelected && {\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n },\n isFocused &&\n !isSelected && {\n backgroundColor: `${srgbToHex(tokens.border.srgb)}20`,\n },\n option.disabled && {\n opacity: 0.5,\n },\n pressed && {\n opacity: 0.7,\n },\n ]}\n >\n <Text\n style={[\n {\n flex: 1,\n fontFamily: tokens.typography.fonts.default,\n fontSize,\n color: srgbToHex(tokens.textPrimary.srgb),\n },\n isSelected && {\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.interactive.srgb),\n },\n option.disabled && {\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n ]}\n numberOfLines={1}\n >\n {option.label}\n </Text>\n {isSelected && (\n <View style={{ marginLeft: tokens.spacing.sm }}>\n <Icon\n name=\"check\"\n size={fontSize}\n color={srgbToHex(tokens.interactive.srgb)}\n />\n </View>\n )}\n </Pressable>\n );\n}\n","import React, { useMemo } from 'react';\nimport { View, Text, Pressable, ScrollView } from 'react-native';\nimport type { SelectProps, SelectOption } from './Select.types';\nimport { isOptionGroup } from './Select.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getSelectStyles } from './Select.styles';\nimport { Icon } from '../Icon/Icon';\nimport { Popover } from '../Popover/Popover';\nimport { usePopover } from '../Popover/usePopover';\nimport { useSelect } from './useSelect';\nimport { SelectOptionRow } from './SelectOption';\nimport { srgbToHex } from 'newtone';\n\nfunction flattenOptions(items: readonly (SelectOption | { readonly label: string; readonly options: readonly SelectOption[] })[]): SelectOption[] {\n const result: SelectOption[] = [];\n for (const item of items) {\n if ('options' in item) {\n result.push(...item.options);\n } else {\n result.push(item);\n }\n }\n return result;\n}\n\nexport function Select({\n options,\n value,\n onValueChange,\n label,\n placeholder,\n disabled = false,\n renderOption,\n renderValue,\n size = 'md',\n style,\n}: SelectProps) {\n const tokens = useTokens(1);\n const { isOpen, open, close, toggle } = usePopover();\n\n const flatOptions = useMemo(() => flattenOptions(options), [options]);\n\n const { focusedIndex, handleKeyDown } = useSelect({\n flatOptions,\n value,\n isOpen,\n onSelect: (v) => {\n onValueChange(v);\n close();\n },\n onClose: close,\n onOpen: open,\n });\n\n const styles = useMemo(\n () => getSelectStyles(tokens, disabled, size, isOpen),\n [tokens, disabled, size, isOpen]\n );\n\n const selectedOption = flatOptions.find((o) => o.value === value);\n const displayLabel = selectedOption?.label ?? placeholder ?? value;\n\n const iconColor = disabled\n ? srgbToHex(tokens.textSecondary.srgb)\n : srgbToHex(tokens.textPrimary.srgb);\n\n // onKeyDown is a web-only prop supported by react-native-web but not in RN types\n const triggerWebProps = { onKeyDown: handleKeyDown } as any;\n\n const trigger = (\n <Pressable\n onPress={disabled ? undefined : toggle}\n disabled={disabled}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup={'listbox' as any}\n {...triggerWebProps}\n style={styles.trigger}\n >\n {renderValue ? (\n renderValue(selectedOption)\n ) : (\n <Text style={styles.triggerText} numberOfLines={1}>\n {displayLabel}\n </Text>\n )}\n <View style={styles.iconWrapper} pointerEvents=\"none\">\n <Icon\n name={isOpen ? 'expand_less' : 'expand_more'}\n size={size === 'sm' ? tokens.typography.size.sm + 2 : tokens.typography.size.base + 2}\n color={iconColor}\n />\n </View>\n </Pressable>\n );\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : style ? [style] : [])]}>\n {label && <Text style={styles.label}>{label}</Text>}\n <Popover\n isOpen={isOpen && !disabled}\n onClose={close}\n trigger={trigger}\n >\n <ScrollView\n bounces={false}\n keyboardShouldPersistTaps=\"handled\"\n role={'listbox' as any}\n >\n {options.map((item) => {\n if (isOptionGroup(item)) {\n return (\n <View key={item.label}>\n <Text style={styles.groupLabel}>{item.label}</Text>\n {item.options.map((opt) => (\n <SelectOptionRow\n key={opt.value}\n option={opt}\n isSelected={opt.value === value}\n isFocused={flatOptions[focusedIndex]?.value === opt.value}\n onSelect={() => {\n onValueChange(opt.value);\n close();\n }}\n renderOption={renderOption}\n size={size}\n />\n ))}\n </View>\n );\n }\n return (\n <SelectOptionRow\n key={item.value}\n option={item}\n isSelected={item.value === value}\n isFocused={flatOptions[focusedIndex]?.value === item.value}\n onSelect={() => {\n onValueChange(item.value);\n close();\n }}\n renderOption={renderOption}\n size={size}\n />\n );\n })}\n </ScrollView>\n </Popover>\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nconst TRACK_WIDTH = 40;\nconst TRACK_HEIGHT = 22;\nconst THUMB_SIZE = 18;\nconst THUMB_OFFSET = 2;\n\nexport function getToggleStyles(\n tokens: ResolvedTokens,\n value: boolean,\n disabled: boolean\n) {\n return StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: tokens.spacing.sm,\n opacity: disabled ? 0.5 : 1,\n },\n label: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n track: {\n width: TRACK_WIDTH,\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n backgroundColor: value\n ? srgbToHex(tokens.interactive.srgb)\n : srgbToHex(tokens.border.srgb),\n justifyContent: 'center',\n paddingHorizontal: THUMB_OFFSET,\n },\n thumb: {\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: srgbToHex(tokens.background.srgb),\n alignSelf: value ? 'flex-end' : 'flex-start',\n },\n });\n}\n","import React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport type { ToggleProps } from './Toggle.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getToggleStyles } from './Toggle.styles';\n\nexport function Toggle({\n value,\n onValueChange,\n label,\n disabled = false,\n style,\n}: ToggleProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getToggleStyles(tokens, value, disabled),\n [tokens, value, disabled]\n );\n\n const handlePress = React.useCallback(() => {\n if (!disabled) {\n onValueChange(!value);\n }\n }, [disabled, value, onValueChange]);\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {label && <Text style={styles.label}>{label}</Text>}\n <Pressable\n onPress={handlePress}\n disabled={disabled}\n accessibilityRole=\"switch\"\n accessibilityState={{ checked: value, disabled }}\n >\n <View style={styles.track}>\n <View style={styles.thumb} />\n </View>\n </Pressable>\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nconst TRACK_HEIGHT = 6;\nexport const THUMB_SIZE = 16;\n\nexport function getSliderStyles(tokens: ResolvedTokens, disabled: boolean) {\n return StyleSheet.create({\n container: {\n gap: tokens.spacing.xs,\n opacity: disabled ? 0.5 : 1,\n },\n labelRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n label: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n value: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.medium as any,\n color: srgbToHex(tokens.textPrimary.srgb),\n },\n valueInput: {\n width: 48,\n paddingVertical: 0,\n paddingHorizontal: 4,\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: 4,\n backgroundColor: 'transparent',\n color: srgbToHex(tokens.textPrimary.srgb),\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.medium as any,\n textAlign: 'right',\n },\n trackContainer: {\n height: TRACK_HEIGHT + THUMB_SIZE,\n justifyContent: 'center',\n position: 'relative',\n },\n trackRail: {\n position: 'absolute',\n left: 0,\n right: 0,\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n backgroundColor: srgbToHex(tokens.border.srgb),\n },\n trackFill: {\n position: 'absolute',\n left: 0,\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n backgroundColor: srgbToHex(tokens.interactive.srgb),\n },\n thumb: {\n position: 'absolute',\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: srgbToHex(tokens.interactive.srgb),\n },\n });\n}\n","import React from 'react';\nimport { View, Text, TextInput, PanResponder } from 'react-native';\nimport type { SliderProps } from './Slider.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getSliderStyles, THUMB_SIZE } from './Slider.styles';\n\nexport function Slider({\n value,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n showValue = false,\n editableValue = false,\n disabled = false,\n style,\n}: SliderProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getSliderStyles(tokens, disabled),\n [tokens, disabled]\n );\n\n const trackRef = React.useRef<View>(null);\n const trackWidth = React.useRef(0);\n const trackPageX = React.useRef(0);\n\n // Mutable refs to avoid stale closures in PanResponder\n const onValueChangeRef = React.useRef(onValueChange);\n const minRef = React.useRef(min);\n const maxRef = React.useRef(max);\n const stepRef = React.useRef(step);\n const disabledRef = React.useRef(disabled);\n\n React.useEffect(() => { onValueChangeRef.current = onValueChange; }, [onValueChange]);\n React.useEffect(() => { minRef.current = min; }, [min]);\n React.useEffect(() => { maxRef.current = max; }, [max]);\n React.useEffect(() => { stepRef.current = step; }, [step]);\n React.useEffect(() => { disabledRef.current = disabled; }, [disabled]);\n\n const computeValue = React.useCallback((pageX: number) => {\n const localX = pageX - trackPageX.current;\n const ratio = Math.min(1, Math.max(0, localX / trackWidth.current));\n const raw = minRef.current + ratio * (maxRef.current - minRef.current);\n const stepped = Math.round(raw / stepRef.current) * stepRef.current;\n return Math.min(maxRef.current, Math.max(minRef.current, stepped));\n }, []);\n\n const panResponder = React.useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => !disabledRef.current,\n onMoveShouldSetPanResponder: () => !disabledRef.current,\n onPanResponderGrant: (evt) => {\n onValueChangeRef.current(computeValue(evt.nativeEvent.pageX));\n },\n onPanResponderMove: (_evt, gestureState) => {\n onValueChangeRef.current(computeValue(gestureState.moveX));\n },\n })\n ).current;\n\n const ratio = max > min ? (value - min) / (max - min) : 0;\n const usableWidth = Math.max(0, trackWidth.current - THUMB_SIZE);\n const thumbLeft = ratio * usableWidth;\n const fillWidth = thumbLeft + THUMB_SIZE / 2;\n\n const handleValueTextSubmit = React.useCallback(\n (text: string) => {\n const raw = Number(text);\n if (!Number.isNaN(raw)) {\n onValueChange(Math.min(max, Math.max(min, raw)));\n }\n },\n [onValueChange, min, max]\n );\n\n const [editText, setEditText] = React.useState(String(value));\n React.useEffect(() => { setEditText(String(value)); }, [value]);\n\n const showLabel = label || showValue || editableValue;\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {showLabel && (\n <View style={styles.labelRow}>\n {label && <Text style={styles.label}>{label}</Text>}\n {editableValue ? (\n <TextInput\n style={styles.valueInput}\n value={editText}\n keyboardType=\"numeric\"\n onChangeText={setEditText}\n onSubmitEditing={(e) => handleValueTextSubmit(e.nativeEvent.text)}\n onBlur={() => handleValueTextSubmit(editText)}\n selectTextOnFocus\n editable={!disabled}\n />\n ) : (\n showValue && <Text style={styles.value}>{value}</Text>\n )}\n </View>\n )}\n <View\n ref={trackRef}\n style={styles.trackContainer}\n onLayout={(e) => {\n trackWidth.current = e.nativeEvent.layout.width;\n trackRef.current?.measure((_x, _y, _w, _h, pageX) => {\n if (pageX != null) trackPageX.current = pageX;\n });\n }}\n {...panResponder.panHandlers}\n >\n <View style={styles.trackRail} />\n <View style={[styles.trackFill, { width: fillWidth }]} />\n <View style={[styles.thumb, { left: thumbLeft }]} />\n </View>\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nconst TRACK_HEIGHT = 22;\nexport const THUMB_SIZE = 18;\nconst SEGMENT_COUNT = 48;\n\n/** Convert an HSL hue (S=100%, L=50%) to a hex string. */\nexport function hueToHex(hue: number): string {\n const h = ((hue % 360) + 360) % 360;\n const x = 1 - Math.abs((h / 60) % 2 - 1);\n let r: number, g: number, b: number;\n if (h < 60) { r = 1; g = x; b = 0; }\n else if (h < 120) { r = x; g = 1; b = 0; }\n else if (h < 180) { r = 0; g = 1; b = x; }\n else if (h < 240) { r = 0; g = x; b = 1; }\n else if (h < 300) { r = x; g = 0; b = 1; }\n else { r = 1; g = 0; b = x; }\n const toHex = (v: number) => Math.round(v * 255).toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\n/** Build an array of hex colors for the gradient track segments. */\nexport function buildHueSegments(min: number, max: number): string[] {\n return Array.from({ length: SEGMENT_COUNT }, (_, i) => {\n const hue = min + (max - min) * (i / (SEGMENT_COUNT - 1));\n return hueToHex(hue);\n });\n}\n\nexport function getHueSliderStyles(tokens: ResolvedTokens, disabled: boolean) {\n return StyleSheet.create({\n container: {\n gap: tokens.spacing.xs,\n opacity: disabled ? 0.5 : 1,\n },\n labelRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n label: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n value: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.medium as any,\n color: srgbToHex(tokens.textPrimary.srgb),\n },\n valueInput: {\n width: 48,\n paddingVertical: 0,\n paddingHorizontal: 4,\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: 4,\n backgroundColor: 'transparent',\n color: srgbToHex(tokens.textPrimary.srgb),\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.medium as any,\n textAlign: 'right',\n },\n trackContainer: {\n height: TRACK_HEIGHT + THUMB_SIZE,\n justifyContent: 'center',\n position: 'relative',\n },\n gradientTrack: {\n position: 'absolute',\n left: 0,\n right: 0,\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n flexDirection: 'row',\n overflow: 'hidden',\n },\n segment: {\n flex: 1,\n },\n thumb: {\n position: 'absolute',\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: '#ffffff',\n borderWidth: 2,\n borderColor: srgbToHex(tokens.border.srgb),\n },\n });\n}\n","import React from 'react';\nimport { View, Text, TextInput, PanResponder } from 'react-native';\nimport type { HueSliderProps } from './HueSlider.types';\nimport { useTokens } from '../tokens/useTokens';\nimport {\n getHueSliderStyles,\n buildHueSegments,\n THUMB_SIZE,\n} from './HueSlider.styles';\n\n/**\n * Hue slider with rainbow gradient track.\n *\n * Value range: 0-359 (traditional color wheel hue).\n * 0=red, 60=yellow, 120=green, 180=cyan, 240=blue, 300=magenta.\n *\n * Optional min/max constrain the selectable range.\n * For wrapping ranges (e.g. red: min=345 max=375), max may exceed 359;\n * the returned value is always normalized to [0, 359].\n */\nexport function HueSlider({\n value,\n onValueChange,\n min = 0,\n max = 359,\n label,\n showValue = false,\n editableValue = false,\n disabled = false,\n style,\n}: HueSliderProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getHueSliderStyles(tokens, disabled),\n [tokens, disabled]\n );\n\n const segments = React.useMemo(\n () => buildHueSegments(min, max),\n [min, max]\n );\n\n const trackRef = React.useRef<View>(null);\n const trackWidth = React.useRef(0);\n const trackPageX = React.useRef(0);\n\n // Mutable refs to avoid stale closures in PanResponder\n const onValueChangeRef = React.useRef(onValueChange);\n const minRef = React.useRef(min);\n const maxRef = React.useRef(max);\n const disabledRef = React.useRef(disabled);\n\n React.useEffect(() => { onValueChangeRef.current = onValueChange; }, [onValueChange]);\n React.useEffect(() => { minRef.current = min; }, [min]);\n React.useEffect(() => { maxRef.current = max; }, [max]);\n React.useEffect(() => { disabledRef.current = disabled; }, [disabled]);\n\n const computeHue = React.useCallback((pageX: number) => {\n const localX = pageX - trackPageX.current;\n const ratio = Math.min(1, Math.max(0, localX / trackWidth.current));\n const raw = minRef.current + ratio * (maxRef.current - minRef.current);\n const stepped = Math.round(raw);\n return ((stepped % 360) + 360) % 360;\n }, []);\n\n const panResponder = React.useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => !disabledRef.current,\n onMoveShouldSetPanResponder: () => !disabledRef.current,\n onPanResponderGrant: (evt) => {\n onValueChangeRef.current(computeHue(evt.nativeEvent.pageX));\n },\n onPanResponderMove: (_evt, gestureState) => {\n onValueChangeRef.current(computeHue(gestureState.moveX));\n },\n })\n ).current;\n\n // For wrapping ranges (max > 359), convert stored value to slider range\n const sliderValue = max > 359 && value < min ? value + 360 : value;\n const ratio = max > min ? (sliderValue - min) / (max - min) : 0;\n const usableWidth = Math.max(0, trackWidth.current - THUMB_SIZE);\n const thumbLeft = ratio * usableWidth;\n\n const handleValueTextSubmit = React.useCallback(\n (text: string) => {\n const raw = Number(text);\n if (!Number.isNaN(raw)) {\n onValueChange(((raw % 360) + 360) % 360);\n }\n },\n [onValueChange]\n );\n\n const [editText, setEditText] = React.useState(String(value));\n React.useEffect(() => { setEditText(String(value)); }, [value]);\n\n const showLabel = label || showValue || editableValue;\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {showLabel && (\n <View style={styles.labelRow}>\n {label && <Text style={styles.label}>{label}</Text>}\n {editableValue ? (\n <TextInput\n style={styles.valueInput}\n value={editText}\n keyboardType=\"numeric\"\n onChangeText={setEditText}\n onSubmitEditing={(e) => handleValueTextSubmit(e.nativeEvent.text)}\n onBlur={() => handleValueTextSubmit(editText)}\n selectTextOnFocus\n editable={!disabled}\n />\n ) : (\n showValue && <Text style={styles.value}>{value}°</Text>\n )}\n </View>\n )}\n <View\n ref={trackRef}\n style={styles.trackContainer}\n onLayout={(e) => {\n trackWidth.current = e.nativeEvent.layout.width;\n trackRef.current?.measure((_x, _y, _w, _h, pageX) => {\n if (pageX != null) trackPageX.current = pageX;\n });\n }}\n {...panResponder.panHandlers}\n >\n <View style={styles.gradientTrack}>\n {segments.map((color, i) => (\n <View key={i} style={[styles.segment, { backgroundColor: color }]} />\n ))}\n </View>\n <View style={[styles.thumb, { left: thumbLeft }]} />\n </View>\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nconst TRACK_HEIGHT = 22;\nexport const THUMB_SIZE = 18;\n\nexport function getColorScaleSliderStyles(tokens: ResolvedTokens, disabled: boolean) {\n return StyleSheet.create({\n container: {\n gap: tokens.spacing.xs,\n opacity: disabled ? 0.5 : 1,\n },\n labelRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n label: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n trackContainer: {\n height: TRACK_HEIGHT + THUMB_SIZE,\n justifyContent: 'center',\n position: 'relative',\n },\n gradientTrack: {\n position: 'absolute',\n left: 0,\n right: 0,\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n flexDirection: 'row',\n overflow: 'hidden',\n },\n segment: {\n flex: 1,\n },\n thumb: {\n position: 'absolute',\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: '#ffffff',\n borderWidth: 2,\n borderColor: srgbToHex(tokens.border.srgb),\n },\n warning: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.xs,\n fontWeight: tokens.typography.weight.medium as any,\n color: srgbToHex(tokens.error.srgb),\n },\n });\n}\n\nexport { TRACK_HEIGHT };\n","import React from 'react';\nimport { View, Text, PanResponder, Animated } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ColorScaleSliderProps } from './ColorScaleSlider.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getColorScaleSliderStyles, THUMB_SIZE } from './ColorScaleSlider.styles';\n\n/**\n * Interactive color scale slider.\n *\n * Renders an array of colors as the track (lightest on left, darkest on right)\n * with a draggable thumb. The value is a normalizedValue [0, 1] where\n * 0 = darkest (right) and 1 = lightest (left).\n *\n * Used by PalettePanel for key color selection on non-neutral palettes.\n */\nexport function ColorScaleSlider({\n colors,\n value,\n onValueChange,\n label,\n warning,\n trimEnds = false,\n snap = false,\n disabled = false,\n animateValue = false,\n style,\n}: ColorScaleSliderProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getColorScaleSliderStyles(tokens, disabled),\n [tokens, disabled]\n );\n\n const trackRef = React.useRef<View>(null);\n const trackWidth = React.useRef(0);\n const trackPageX = React.useRef(0);\n const isDragging = React.useRef(false);\n const thumbAnim = React.useRef(new Animated.Value(0)).current;\n\n // Mutable refs to avoid stale closures in PanResponder\n const onValueChangeRef = React.useRef(onValueChange);\n const disabledRef = React.useRef(disabled);\n const colorsLengthRef = React.useRef(colors.length);\n const trimEndsRef = React.useRef(trimEnds);\n const snapRef = React.useRef(snap);\n\n React.useEffect(() => { onValueChangeRef.current = onValueChange; }, [onValueChange]);\n React.useEffect(() => { disabledRef.current = disabled; }, [disabled]);\n React.useEffect(() => { colorsLengthRef.current = colors.length; }, [colors.length]);\n React.useEffect(() => { trimEndsRef.current = trimEnds; }, [trimEnds]);\n React.useEffect(() => { snapRef.current = snap; }, [snap]);\n\n const computeNv = React.useCallback((pageX: number) => {\n const localX = pageX - trackPageX.current;\n const ratio = Math.min(1, Math.max(0, localX / trackWidth.current));\n const totalSteps = colorsLengthRef.current - 1;\n const minNV = trimEndsRef.current ? 1 / totalSteps : 0;\n const maxNV = trimEndsRef.current ? 1 - 1 / totalSteps : 1;\n const range = maxNV - minNV;\n\n // Left = lightest (maxNV), right = darkest (minNV)\n let nv = maxNV - ratio * range;\n\n if (snapRef.current && totalSteps > 0) {\n const stepNv = 1 / totalSteps;\n nv = Math.round(nv / stepNv) * stepNv;\n nv = Math.min(maxNV, Math.max(minNV, nv));\n }\n\n return nv;\n }, []);\n\n const panResponder = React.useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => !disabledRef.current,\n onMoveShouldSetPanResponder: () => !disabledRef.current,\n onPanResponderGrant: (evt) => {\n isDragging.current = true;\n onValueChangeRef.current(computeNv(evt.nativeEvent.pageX));\n },\n onPanResponderMove: (_evt, gestureState) => {\n onValueChangeRef.current(computeNv(gestureState.moveX));\n },\n onPanResponderRelease: () => {\n isDragging.current = false;\n },\n onPanResponderTerminate: () => {\n isDragging.current = false;\n },\n })\n ).current;\n\n // Visible colors: trim interpolation endpoints if requested\n const visibleColors = trimEnds ? colors.slice(1, -1) : colors;\n\n // Thumb position mapped to the visible range\n const totalSteps = colors.length - 1;\n const minNV = trimEnds ? 1 / totalSteps : 0;\n const maxNV = trimEnds ? 1 - 1 / totalSteps : 1;\n const range = maxNV - minNV;\n const clampedValue = value !== undefined\n ? Math.min(maxNV, Math.max(minNV, value))\n : (maxNV + minNV) / 2;\n const ratio = range > 0 ? (maxNV - clampedValue) / range : 0.5;\n const usableWidth = Math.max(0, trackWidth.current - THUMB_SIZE);\n const thumbLeft = ratio * usableWidth;\n\n // Sync animated thumb position: animate on prop-driven changes, instant during drag\n React.useEffect(() => {\n if (isDragging.current || !animateValue) {\n thumbAnim.setValue(thumbLeft);\n } else {\n Animated.timing(thumbAnim, {\n toValue: thumbLeft,\n duration: 300,\n useNativeDriver: false,\n }).start();\n }\n }, [thumbLeft, animateValue, thumbAnim]);\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {label && (\n <View style={styles.labelRow}>\n <Text style={styles.label}>{label}</Text>\n </View>\n )}\n <View\n ref={trackRef}\n style={styles.trackContainer}\n onLayout={(e) => {\n trackWidth.current = e.nativeEvent.layout.width;\n // Set thumb position immediately on layout (no animation)\n const newUsableWidth = Math.max(0, e.nativeEvent.layout.width - THUMB_SIZE);\n thumbAnim.setValue(ratio * newUsableWidth);\n trackRef.current?.measure((_x, _y, _w, _h, pageX) => {\n if (pageX != null) trackPageX.current = pageX;\n });\n }}\n {...panResponder.panHandlers}\n >\n <View style={styles.gradientTrack}>\n {visibleColors.map((color, i) => (\n <View key={i} style={[styles.segment, { backgroundColor: srgbToHex(color.srgb) }]} />\n ))}\n </View>\n <Animated.View style={[styles.thumb, { left: thumbAnim }]} />\n </View>\n {warning && (\n <Text style={styles.warning}>{warning}</Text>\n )}\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nexport function getAppShellStyles(tokens: ResolvedTokens) {\n return StyleSheet.create({\n container: {\n flex: 1,\n flexDirection: 'row',\n overflow: 'hidden',\n backgroundColor: srgbToHex(tokens.background.srgb),\n },\n main: {\n flex: 1,\n flexDirection: 'column',\n minWidth: 0,\n overflow: 'hidden',\n },\n });\n}\n","import React from 'react';\nimport { View } from 'react-native';\nimport type { AppShellProps } from './AppShell.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getAppShellStyles } from './AppShell.styles';\n\nexport function AppShell({ sidebar, children }: AppShellProps) {\n const tokens = useTokens();\n const styles = React.useMemo(() => getAppShellStyles(tokens), [tokens]);\n\n return (\n <View style={styles.container}>\n {sidebar}\n <View style={styles.main}>{children}</View>\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\ninterface SidebarStyleInput {\n readonly tokens: ResolvedTokens;\n readonly width: number;\n readonly bordered: boolean;\n}\n\nexport function getSidebarStyles({ tokens, width, bordered }: SidebarStyleInput) {\n const borderColor = srgbToHex(tokens.border.srgb);\n\n return StyleSheet.create({\n container: {\n width,\n flexShrink: 0,\n flexDirection: 'column',\n flex: 1,\n backgroundColor: srgbToHex(tokens.background.srgb),\n borderRightWidth: bordered ? 1 : 0,\n borderRightColor: borderColor,\n },\n header: {\n flexShrink: 0,\n borderBottomWidth: 1,\n borderBottomColor: borderColor,\n },\n body: {\n flex: 1,\n },\n footer: {\n flexShrink: 0,\n borderTopWidth: 1,\n borderTopColor: borderColor,\n },\n });\n}\n","import React from 'react';\nimport { View, ScrollView } from 'react-native';\nimport type { SidebarProps } from './Sidebar.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getSidebarStyles } from './Sidebar.styles';\n\nexport function Sidebar({\n children,\n header,\n footer,\n width = 260,\n bordered = true,\n}: SidebarProps) {\n const tokens = useTokens();\n const styles = React.useMemo(\n () => getSidebarStyles({ tokens, width, bordered }),\n [tokens, width, bordered]\n );\n\n return (\n <View style={styles.container}>\n {header && <View style={styles.header}>{header}</View>}\n <ScrollView style={styles.body}>{children}</ScrollView>\n {footer && <View style={styles.footer}>{footer}</View>}\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\ninterface NavbarStyleInput {\n readonly tokens: ResolvedTokens;\n readonly height: number;\n readonly bordered: boolean;\n}\n\nexport function getNavbarStyles({ tokens, height, bordered }: NavbarStyleInput) {\n const borderColor = srgbToHex(tokens.border.srgb);\n\n return StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n height,\n flexShrink: 0,\n paddingHorizontal: 24,\n backgroundColor: srgbToHex(tokens.background.srgb),\n borderBottomWidth: bordered ? 1 : 0,\n borderBottomColor: borderColor,\n },\n left: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n },\n right: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n },\n });\n}\n","import React from 'react';\nimport { View } from 'react-native';\nimport type { NavbarProps } from './Navbar.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getNavbarStyles } from './Navbar.styles';\n\nexport function Navbar({\n children,\n left,\n right,\n height = 56,\n bordered = true,\n}: NavbarProps) {\n const tokens = useTokens();\n const styles = React.useMemo(\n () => getNavbarStyles({ tokens, height, bordered }),\n [tokens, height, bordered]\n );\n\n return (\n <View style={styles.container}>\n {children ? (\n children\n ) : (\n <>\n <View style={styles.left}>{left}</View>\n <View style={styles.right}>{right}</View>\n </>\n )}\n </View>\n );\n}\n","import type { CategoryMeta, ComponentMeta } from './types';\n\nexport const CATEGORIES: readonly CategoryMeta[] = [\n { id: 'actions', name: 'Actions', description: 'Interactive elements that trigger actions' },\n { id: 'form-controls', name: 'Form Controls', description: 'Input elements for user data entry' },\n { id: 'range-inputs', name: 'Range Inputs', description: 'Slider controls for numeric values' },\n { id: 'layout', name: 'Layout', description: 'Structural and container components' },\n];\n\nexport const COMPONENTS: readonly ComponentMeta[] = [\n {\n id: 'button',\n name: 'Button',\n importName: 'Button',\n categoryId: 'actions',\n description: 'Interactive button with multiple variants, sizes, and optional icon',\n hasChildren: true,\n variants: [\n { id: 'primary-md', label: 'Primary', props: { variant: 'primary', size: 'md' } },\n { id: 'secondary-md', label: 'Secondary', props: { variant: 'secondary', size: 'md' } },\n { id: 'ghost-md', label: 'Ghost', props: { variant: 'ghost', size: 'md' } },\n { id: 'outline-md', label: 'Outline', props: { variant: 'outline', size: 'md' } },\n { id: 'primary-sm', label: 'Primary Small', props: { variant: 'primary', size: 'sm' } },\n { id: 'primary-lg', label: 'Primary Large', props: { variant: 'primary', size: 'lg' } },\n { id: 'icon-left', label: 'Icon Left', props: { variant: 'primary', size: 'md', icon: 'add' } },\n { id: 'icon-right', label: 'Icon Right', props: { variant: 'primary', size: 'md', icon: 'arrow_forward', iconPosition: 'right' } },\n { id: 'icon-only', label: 'Icon Only', props: { variant: 'ghost', size: 'md', icon: 'settings' } },\n ],\n editableProps: [\n {\n name: 'variant',\n label: 'Variant',\n control: 'select',\n options: [\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Ghost', value: 'ghost' },\n { label: 'Outline', value: 'outline' },\n ],\n defaultValue: 'primary',\n },\n {\n name: 'size',\n label: 'Size',\n control: 'select',\n options: [\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n ],\n defaultValue: 'md',\n },\n {\n name: 'icon',\n label: 'Icon',\n control: 'text',\n defaultValue: '',\n },\n {\n name: 'iconPosition',\n label: 'Icon Position',\n control: 'select',\n options: [\n { label: 'Left', value: 'left' },\n { label: 'Right', value: 'right' },\n ],\n defaultValue: 'left',\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'text-input',\n name: 'TextInput',\n importName: 'TextInput',\n categoryId: 'form-controls',\n description: 'Text input field with label support',\n hasChildren: false,\n variants: [\n { id: 'default', label: 'Default', props: { label: 'Label', value: 'Sample text' } },\n { id: 'empty', label: 'Empty', props: { label: 'Email', value: '' } },\n { id: 'disabled', label: 'Disabled', props: { label: 'Disabled', value: 'Read only', disabled: true } },\n ],\n editableProps: [\n {\n name: 'label',\n label: 'Label',\n control: 'text',\n defaultValue: 'Label',\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'select',\n name: 'Select',\n importName: 'Select',\n categoryId: 'form-controls',\n description: 'Dropdown selector with options',\n hasChildren: false,\n variants: [\n {\n id: 'default',\n label: 'Default',\n props: {\n label: 'Choose an option',\n value: 'option-1',\n options: [\n { label: 'Option 1', value: 'option-1' },\n { label: 'Option 2', value: 'option-2' },\n { label: 'Option 3', value: 'option-3' },\n ],\n },\n },\n {\n id: 'disabled',\n label: 'Disabled',\n props: {\n label: 'Disabled select',\n value: 'option-1',\n disabled: true,\n options: [{ label: 'Option 1', value: 'option-1' }],\n },\n },\n ],\n editableProps: [\n {\n name: 'label',\n label: 'Label',\n control: 'text',\n defaultValue: 'Choose an option',\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'toggle',\n name: 'Toggle',\n importName: 'Toggle',\n categoryId: 'form-controls',\n description: 'Binary switch component',\n hasChildren: false,\n variants: [\n { id: 'on', label: 'On', props: { label: 'Enabled', value: true } },\n { id: 'off', label: 'Off', props: { label: 'Disabled', value: false } },\n { id: 'disabled', label: 'Disabled', props: { label: 'Locked', value: true, disabled: true } },\n ],\n editableProps: [\n {\n name: 'label',\n label: 'Label',\n control: 'text',\n defaultValue: 'Toggle',\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'slider',\n name: 'Slider',\n importName: 'Slider',\n categoryId: 'range-inputs',\n description: 'Numeric range slider',\n hasChildren: false,\n variants: [\n { id: 'default', label: 'Default', props: { label: 'Volume', value: 50, min: 0, max: 100 } },\n { id: 'with-step', label: 'With Step', props: { label: 'Steps', value: 3, min: 0, max: 10, step: 1, showValue: true } },\n ],\n editableProps: [\n {\n name: 'label',\n label: 'Label',\n control: 'text',\n defaultValue: 'Slider',\n },\n {\n name: 'min',\n label: 'Min',\n control: 'number',\n defaultValue: 0,\n },\n {\n name: 'max',\n label: 'Max',\n control: 'number',\n defaultValue: 100,\n },\n {\n name: 'showValue',\n label: 'Show Value',\n control: 'toggle',\n defaultValue: false,\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'hue-slider',\n name: 'HueSlider',\n importName: 'HueSlider',\n categoryId: 'range-inputs',\n description: 'Specialized slider for hue selection (0-360\\u00b0)',\n hasChildren: false,\n variants: [\n { id: 'default', label: 'Default', props: { label: 'Hue', value: 180 } },\n { id: 'red', label: 'Red', props: { label: 'Warm Hue', value: 0 } },\n { id: 'blue', label: 'Blue', props: { label: 'Cool Hue', value: 240 } },\n ],\n editableProps: [\n {\n name: 'label',\n label: 'Label',\n control: 'text',\n defaultValue: 'Hue',\n },\n {\n name: 'showValue',\n label: 'Show Value',\n control: 'toggle',\n defaultValue: false,\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'frame',\n name: 'Frame',\n importName: 'Frame',\n categoryId: 'layout',\n description: 'Foundational layout container with theme, elevation, spacing, and interactivity',\n hasChildren: true,\n variants: [\n { id: 'default', label: 'Default', props: {} },\n { id: 'primary', label: 'Primary', props: { theme: 'primary' } },\n { id: 'secondary', label: 'Secondary', props: { theme: 'secondary' } },\n { id: 'strong', label: 'Strong', props: { theme: 'strong' } },\n { id: 'deeply-sunken', label: 'Deeply Sunken', props: { elevation: -2, radius: 'md' } },\n { id: 'sunken', label: 'Sunken', props: { elevation: -1 } },\n { id: 'elevated', label: 'Elevated', props: { elevation: 1 } },\n { id: 'prominent', label: 'Prominent', props: { elevation: 2, radius: 'lg' } },\n { id: 'padded', label: 'Padded', props: { padding: 'lg', gap: 'md' } },\n { id: 'horizontal', label: 'Horizontal', props: { direction: 'horizontal', gap: 'md', align: 'center' } },\n { id: 'grid-3col', label: '3-Column Grid', props: { layout: 'grid', columns: 3, gap: 'md' } },\n { id: 'card-like', label: 'Card-like', props: { radius: 'lg', padding: 'lg', bordered: true, elevation: 1 } },\n ],\n editableProps: [\n {\n name: 'theme',\n label: 'Theme',\n control: 'select',\n options: [\n { label: 'Neutral', value: 'neutral' },\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Strong', value: 'strong' },\n ],\n defaultValue: 'neutral',\n },\n {\n name: 'elevation',\n label: 'Elevation',\n control: 'select',\n options: [\n { label: 'Deeply Sunken (-2)', value: -2 },\n { label: 'Sunken (-1)', value: -1 },\n { label: 'Default (0)', value: 0 },\n { label: 'Elevated (1)', value: 1 },\n { label: 'Prominent (2)', value: 2 },\n ],\n defaultValue: 0,\n },\n {\n name: 'direction',\n label: 'Direction',\n control: 'select',\n options: [\n { label: 'Vertical', value: 'vertical' },\n { label: 'Horizontal', value: 'horizontal' },\n ],\n defaultValue: 'vertical',\n },\n {\n name: 'padding',\n label: 'Padding',\n control: 'select',\n options: [\n { label: 'None', value: '' },\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n { label: 'Extra Large', value: 'xl' },\n ],\n defaultValue: '',\n },\n {\n name: 'gap',\n label: 'Gap',\n control: 'select',\n options: [\n { label: 'None', value: '' },\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n ],\n defaultValue: '',\n },\n {\n name: 'radius',\n label: 'Radius',\n control: 'select',\n options: [\n { label: 'None', value: 'none' },\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n { label: 'Pill', value: 'pill' },\n ],\n defaultValue: 'none',\n },\n {\n name: 'bordered',\n label: 'Bordered',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'card',\n name: 'Card',\n importName: 'Card',\n categoryId: 'layout',\n description: 'Surface container with elevation levels',\n hasChildren: true,\n variants: [\n { id: 'elevation-0', label: 'Elevation 0', props: { elevation: 0 } },\n { id: 'elevation-1', label: 'Elevation 1', props: { elevation: 1 } },\n { id: 'elevation-2', label: 'Elevation 2', props: { elevation: 2 } },\n ],\n editableProps: [\n {\n name: 'elevation',\n label: 'Elevation',\n control: 'select',\n options: [\n { label: 'Level 0', value: 0 },\n { label: 'Level 1', value: 1 },\n { label: 'Level 2', value: 2 },\n ],\n defaultValue: 0,\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n];\n\nexport function getComponent(id: string): ComponentMeta | undefined {\n return COMPONENTS.find((c) => c.id === id);\n}\n\nexport function getCategory(id: string): CategoryMeta | undefined {\n return CATEGORIES.find((c) => c.id === id);\n}\n\nexport function getComponentsByCategory(categoryId: string): readonly ComponentMeta[] {\n return COMPONENTS.filter((c) => c.categoryId === categoryId);\n}\n","import type { ComponentMeta } from './types';\n\n/**\n * Handler props that should be included as placeholders in generated code.\n * Maps component ID to the handler props it needs.\n */\nconst HANDLER_PROPS: Record<string, readonly string[]> = {\n button: ['onPress={() => {}}'],\n 'text-input': ['value={value}', 'onChangeText={setValue}'],\n select: ['value={value}', 'onValueChange={setValue}'],\n toggle: ['value={value}', 'onValueChange={setValue}'],\n slider: ['value={value}', 'onValueChange={setValue}'],\n 'hue-slider': ['value={value}', 'onValueChange={setValue}'],\n};\n\n/**\n * Default children content for components with children.\n */\nconst CHILDREN_CONTENT: Record<string, string> = {\n button: 'Button',\n card: '{/* content */}',\n frame: '{/* content */}',\n};\n\n/**\n * Generates a ready-to-paste JSX code snippet for a component with the given prop overrides.\n *\n * - Includes the import statement\n * - Omits props that match their default values\n * - Adds placeholder handlers for interactive props\n * - Formats Select's options as a const declaration\n */\nexport function generateComponentCode(\n component: ComponentMeta,\n propOverrides: Record<string, unknown>,\n): string {\n const lines: string[] = [];\n\n // Import line\n lines.push(`import { ${component.importName} } from '@newtonedev/components';`);\n\n // Select needs options declaration above JSX\n if (component.id === 'select') {\n lines.push('');\n lines.push('const options = [');\n lines.push(\" { label: 'Option 1', value: 'option-1' },\");\n lines.push(\" { label: 'Option 2', value: 'option-2' },\");\n lines.push(\" { label: 'Option 3', value: 'option-3' },\");\n lines.push('];');\n }\n\n lines.push('');\n\n // Build props string\n const propEntries: string[] = [];\n\n // Add editable props (only non-default values)\n for (const prop of component.editableProps) {\n const value = propOverrides[prop.name] ?? prop.defaultValue;\n if (value === prop.defaultValue) continue;\n\n propEntries.push(formatProp(prop.name, value));\n }\n\n // Add handler/runtime props\n const handlers = HANDLER_PROPS[component.id];\n if (handlers) {\n for (const handler of handlers) {\n propEntries.push(handler);\n }\n }\n\n // Special case: Select gets options={options} reference\n if (component.id === 'select') {\n propEntries.push('options={options}');\n }\n\n // Build the JSX\n const children = CHILDREN_CONTENT[component.id];\n const hasProps = propEntries.length > 0;\n const tag = component.importName;\n\n if (component.hasChildren && children) {\n if (hasProps && propEntries.length <= 3) {\n // Single-line opening tag\n lines.push(`<${tag} ${propEntries.join(' ')}>`);\n lines.push(` ${children}`);\n lines.push(`</${tag}>`);\n } else if (hasProps) {\n // Multi-line opening tag\n lines.push(`<${tag}`);\n for (const entry of propEntries) {\n lines.push(` ${entry}`);\n }\n lines.push('>');\n lines.push(` ${children}`);\n lines.push(`</${tag}>`);\n } else {\n lines.push(`<${tag}>`);\n lines.push(` ${children}`);\n lines.push(`</${tag}>`);\n }\n } else {\n // Self-closing tag\n if (hasProps && propEntries.length <= 3) {\n lines.push(`<${tag} ${propEntries.join(' ')} />`);\n } else if (hasProps) {\n lines.push(`<${tag}`);\n for (const entry of propEntries) {\n lines.push(` ${entry}`);\n }\n lines.push('/>');\n } else {\n lines.push(`<${tag} />`);\n }\n }\n\n return lines.join('\\n');\n}\n\nfunction formatProp(name: string, value: unknown): string {\n if (typeof value === 'string') {\n return `${name}=\"${value}\"`;\n }\n if (typeof value === 'boolean') {\n return value ? name : `${name}={false}`;\n }\n if (typeof value === 'number') {\n return `${name}={${value}}`;\n }\n return `${name}={${JSON.stringify(value)}}`;\n}\n","export interface GoogleFontEntry {\n readonly family: string;\n readonly category: 'sans-serif' | 'serif' | 'monospace' | 'display';\n readonly fallback: string;\n}\n\n/**\n * Curated list of popular Google Fonts organized by category.\n * Used by the font picker UI and the GoogleFontLoader.\n */\nexport const GOOGLE_FONTS: readonly GoogleFontEntry[] = [\n // Sans-serif\n { family: 'Inter', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Roboto', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Open Sans', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Lato', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Montserrat', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Poppins', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Nunito', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Source Sans 3', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Work Sans', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Raleway', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'DM Sans', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Plus Jakarta Sans', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Outfit', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Space Grotesk', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Manrope', category: 'sans-serif', fallback: 'sans-serif' },\n\n // Serif\n { family: 'Playfair Display', category: 'serif', fallback: 'serif' },\n { family: 'Merriweather', category: 'serif', fallback: 'serif' },\n { family: 'Lora', category: 'serif', fallback: 'serif' },\n { family: 'Libre Baskerville', category: 'serif', fallback: 'serif' },\n { family: 'Source Serif 4', category: 'serif', fallback: 'serif' },\n { family: 'Bitter', category: 'serif', fallback: 'serif' },\n { family: 'Cormorant Garamond', category: 'serif', fallback: 'serif' },\n { family: 'EB Garamond', category: 'serif', fallback: 'serif' },\n { family: 'Crimson Text', category: 'serif', fallback: 'serif' },\n { family: 'Noto Serif', category: 'serif', fallback: 'serif' },\n\n // Monospace\n { family: 'Fira Code', category: 'monospace', fallback: 'monospace' },\n { family: 'JetBrains Mono', category: 'monospace', fallback: 'monospace' },\n { family: 'Source Code Pro', category: 'monospace', fallback: 'monospace' },\n { family: 'IBM Plex Mono', category: 'monospace', fallback: 'monospace' },\n { family: 'Roboto Mono', category: 'monospace', fallback: 'monospace' },\n { family: 'Space Mono', category: 'monospace', fallback: 'monospace' },\n { family: 'Ubuntu Mono', category: 'monospace', fallback: 'monospace' },\n { family: 'Inconsolata', category: 'monospace', fallback: 'monospace' },\n\n // Display\n { family: 'Abril Fatface', category: 'display', fallback: 'serif' },\n { family: 'Bebas Neue', category: 'display', fallback: 'sans-serif' },\n { family: 'Oswald', category: 'display', fallback: 'sans-serif' },\n { family: 'Righteous', category: 'display', fallback: 'sans-serif' },\n { family: 'Lobster', category: 'display', fallback: 'cursive' },\n { family: 'Pacifico', category: 'display', fallback: 'cursive' },\n { family: 'Comfortaa', category: 'display', fallback: 'sans-serif' },\n { family: 'Fredoka', category: 'display', fallback: 'sans-serif' },\n];\n\nexport interface SystemFontEntry {\n readonly family: string;\n readonly category: 'sans-serif' | 'serif' | 'monospace';\n readonly fallback: string;\n}\n\n/**\n * System font options that don't require external loading.\n */\nexport const SYSTEM_FONTS: readonly SystemFontEntry[] = [\n {\n family: 'system-ui',\n category: 'sans-serif',\n fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n {\n family: 'ui-monospace',\n category: 'monospace',\n fallback: 'SFMono-Regular, Menlo, Monaco, Consolas, monospace',\n },\n {\n family: 'ui-serif',\n category: 'serif',\n fallback: 'Georgia, \"Times New Roman\", serif',\n },\n];\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/theme/defaults.ts","../src/fonts/buildGoogleFontsUrl.ts","../src/fonts/GoogleFontLoader.tsx","../src/fonts/IconFontLoader.tsx","../src/theme/NewtoneProvider.tsx","../src/theme/FrameContext.tsx","../src/tokens/computeTokens.ts","../src/tokens/useTokens.ts","../src/Button/Button.styles.ts","../src/Icon/Icon.tsx","../src/Button/Button.tsx","../src/Card/Card.styles.ts","../src/Card/Card.tsx","../src/Frame/Frame.utils.ts","../src/Frame/Frame.styles.ts","../src/Frame/Frame.tsx","../src/TextInput/TextInput.styles.ts","../src/TextInput/TextInput.tsx","../src/Popover/Popover.styles.ts","../src/Popover/Popover.tsx","../src/Popover/usePopover.ts","../src/Select/Select.types.ts","../src/Select/Select.styles.ts","../src/Select/useSelect.ts","../src/Select/SelectOption.tsx","../src/Select/Select.tsx","../src/Toggle/Toggle.styles.ts","../src/Toggle/Toggle.tsx","../src/Slider/Slider.styles.ts","../src/Slider/Slider.tsx","../src/HueSlider/HueSlider.styles.ts","../src/HueSlider/HueSlider.tsx","../src/ColorScaleSlider/ColorScaleSlider.styles.ts","../src/ColorScaleSlider/ColorScaleSlider.tsx","../src/AppShell/AppShell.styles.ts","../src/AppShell/AppShell.tsx","../src/Sidebar/Sidebar.styles.ts","../src/Sidebar/Sidebar.tsx","../src/Navbar/Navbar.styles.ts","../src/Navbar/Navbar.tsx","../src/registry/registry.ts","../src/registry/codegen.ts","../src/fonts/googleFonts.ts"],"names":["DEFAULT_NEUTRAL_HUE","DEFAULT_NEUTRAL_SATURATION","DEFAULT_ACCENT_HUE","DEFAULT_ACCENT_SATURATION","DEFAULT_SUCCESS_HUE","DEFAULT_SUCCESS_SATURATION","DEFAULT_WARNING_HUE","DEFAULT_WARNING_SATURATION","DEFAULT_ERROR_HUE","DEFAULT_ERROR_SATURATION","useRef","useEffect","createContext","useState","useMemo","React","useContext","getColor","getColorByContrast","srgbToHex","StyleSheet","Text","Pressable","View","RNTextInput","useCallback","ScrollView","TRACK_HEIGHT","THUMB_SIZE","ratio","PanResponder","TextInput","Animated","totalSteps","minNV","maxNV","range"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { NewtoneThemeConfig } from './types';\nimport {\n DEFAULT_NEUTRAL_HUE,\n DEFAULT_NEUTRAL_SATURATION,\n DEFAULT_ACCENT_HUE,\n DEFAULT_ACCENT_SATURATION,\n DEFAULT_SUCCESS_HUE,\n DEFAULT_SUCCESS_SATURATION,\n DEFAULT_WARNING_HUE,\n DEFAULT_WARNING_SATURATION,\n DEFAULT_ERROR_HUE,\n DEFAULT_ERROR_SATURATION,\n} from 'newtone';\n\n/**\n * Default theme configuration matching playground defaults.\n * Palettes: [0] Neutral, [1] Accent, [2] Success, [3] Warning, [4] Error\n */\nexport const DEFAULT_THEME_CONFIG: NewtoneThemeConfig = {\n colorSystem: {\n dynamicRange: {\n lightest: 1,\n darkest: 1,\n },\n palettes: [\n { hue: DEFAULT_NEUTRAL_HUE, saturation: DEFAULT_NEUTRAL_SATURATION },\n { hue: DEFAULT_ACCENT_HUE, saturation: DEFAULT_ACCENT_SATURATION },\n { hue: DEFAULT_SUCCESS_HUE, saturation: DEFAULT_SUCCESS_SATURATION },\n { hue: DEFAULT_WARNING_HUE, saturation: DEFAULT_WARNING_SATURATION },\n { hue: DEFAULT_ERROR_HUE, saturation: DEFAULT_ERROR_SATURATION },\n ],\n },\n themes: {\n neutral: { paletteIndex: 0, lightModeNv: 0.95, darkModeNv: 0.1 },\n primary: { paletteIndex: 1, lightModeNv: 0.95, darkModeNv: 0.1 },\n secondary: { paletteIndex: 1, lightModeNv: 0.85, darkModeNv: 0.15 },\n strong: { paletteIndex: 0, lightModeNv: 0.1, darkModeNv: 0.95 },\n },\n elevation: {\n offsets: [-0.02, 0, 0.04], // [sunken, default, elevated]\n },\n spacing: {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n xl: 24,\n xxl: 32,\n },\n radius: {\n none: 0,\n sm: 4,\n md: 6,\n lg: 8,\n xl: 12,\n pill: 999,\n },\n typography: {\n fonts: {\n mono: {\n type: 'system',\n family: 'ui-monospace',\n fallback: 'SFMono-Regular, Menlo, Monaco, Consolas, monospace',\n },\n display: {\n type: 'system',\n family: 'system-ui',\n fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n default: {\n type: 'system',\n family: 'system-ui',\n fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n },\n scale: {\n xs: 10, // 16 / 1.25^2\n sm: 13, // 16 / 1.25\n base: 16,\n md: 20, // 16 * 1.25\n lg: 25, // 16 * 1.25^2\n xl: 31, // 16 * 1.25^3\n xxl: 39, // 16 * 1.25^4\n },\n lineHeight: { tight: 1.25, normal: 1.5, relaxed: 1.75 },\n fontWeight: { regular: 400, medium: 500, semibold: 600, bold: 700 },\n },\n icons: {\n variant: 'rounded', // Material Design 3 aesthetic\n weight: 400, // Normal weight\n autoGrade: true, // Enable mode-aware grade\n },\n};\n","import type { FontConfig } from '../theme/types';\n\n/**\n * Build a Google Fonts CSS API v2 URL for all google-type fonts in the config.\n * Returns null if no Google fonts are present.\n *\n * @example\n * ```\n * buildGoogleFontsUrl(fonts)\n * // => \"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Fira+Code:wght@400;500;600;700&display=swap\"\n * ```\n */\nexport function buildGoogleFontsUrl(\n fonts: { readonly mono: FontConfig; readonly display: FontConfig; readonly default: FontConfig },\n): string | null {\n const googleFonts = [fonts.mono, fonts.display, fonts.default].filter(\n (f) => f.type === 'google',\n );\n\n if (googleFonts.length === 0) return null;\n\n // Deduplicate by family name\n const unique = [...new Map(googleFonts.map((f) => [f.family, f])).values()];\n\n const families = unique.map((f) => {\n const encoded = f.family.replace(/ /g, '+');\n return `family=${encoded}:wght@400;500;600;700`;\n });\n\n return `https://fonts.googleapis.com/css2?${families.join('&')}&display=swap`;\n}\n","import { useEffect, useRef } from 'react';\nimport type { FontConfig } from '../theme/types';\nimport { buildGoogleFontsUrl } from './buildGoogleFontsUrl';\n\ninterface GoogleFontLoaderProps {\n readonly fonts: {\n readonly mono: FontConfig;\n readonly display: FontConfig;\n readonly default: FontConfig;\n };\n}\n\n/**\n * Manages a single <link> tag in <head> for Google Fonts.\n * Removes the previous link when fonts change to avoid accumulation.\n * Does nothing when no Google fonts are present.\n *\n * Uses imperative DOM manipulation because react-native-web's View\n * cannot render <link> elements.\n */\nexport function GoogleFontLoader({ fonts }: GoogleFontLoaderProps) {\n const linkRef = useRef<HTMLLinkElement | null>(null);\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n\n const url = buildGoogleFontsUrl(fonts);\n\n // Clean up previous link\n if (linkRef.current) {\n linkRef.current.remove();\n linkRef.current = null;\n }\n\n if (!url) return;\n\n // Check if an identical link already exists (another provider instance)\n const links = Array.from(document.head.querySelectorAll('link[rel=\"stylesheet\"]'));\n if (links.some((el) => (el as HTMLLinkElement).href === url)) return;\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n document.head.appendChild(link);\n linkRef.current = link;\n\n return () => {\n if (linkRef.current) {\n linkRef.current.remove();\n linkRef.current = null;\n }\n };\n }, [\n fonts.mono.family,\n fonts.mono.type,\n fonts.display.family,\n fonts.display.type,\n fonts.default.family,\n fonts.default.type,\n ]);\n\n return null;\n}\n","import { useEffect, useRef } from 'react';\n\ninterface IconFontLoaderProps {\n readonly icons: {\n readonly variant: 'outlined' | 'rounded' | 'sharp';\n };\n}\n\n/**\n * Manages a single <link> tag in <head> for the Material Symbols icon font.\n * Loads the variable font with all axes (FILL, wght, GRAD, opsz).\n * Removes the previous link when the variant changes to avoid accumulation.\n */\nexport function IconFontLoader({ icons }: IconFontLoaderProps) {\n const linkRef = useRef<HTMLLinkElement | null>(null);\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n\n const variantName = icons.variant.charAt(0).toUpperCase() + icons.variant.slice(1);\n const family = `Material+Symbols+${variantName}`;\n const url = `https://fonts.googleapis.com/css2?family=${family}:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block`;\n\n // Clean up previous link\n if (linkRef.current) {\n linkRef.current.remove();\n linkRef.current = null;\n }\n\n // Check if an identical link already exists (another provider instance)\n const links = Array.from(document.head.querySelectorAll('link[rel=\"stylesheet\"]'));\n if (links.some((el) => (el as HTMLLinkElement).href === url)) return;\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n document.head.appendChild(link);\n linkRef.current = link;\n\n return () => {\n if (linkRef.current) {\n linkRef.current.remove();\n linkRef.current = null;\n }\n };\n }, [icons.variant]);\n\n return null;\n}\n","import React, { createContext, useState, useMemo, useContext } from 'react';\nimport type { NewtoneThemeConfig, NewtoneThemeContext, ColorMode, ThemeName } from './types';\nimport { DEFAULT_THEME_CONFIG } from './defaults';\nimport { GoogleFontLoader } from '../fonts/GoogleFontLoader';\nimport { IconFontLoader } from '../fonts/IconFontLoader';\n\nconst ThemeContext = createContext<NewtoneThemeContext | null>(null);\n\nexport interface NewtoneProviderProps {\n readonly config?: NewtoneThemeConfig;\n readonly initialMode?: ColorMode;\n readonly initialTheme?: ThemeName;\n readonly children: React.ReactNode;\n}\n\n/**\n * NewtoneProvider - Provides theme context to all Newtone components\n *\n * Wrap your app with this provider to enable theme and mode switching.\n *\n * @example\n * ```tsx\n * <NewtoneProvider initialMode=\"light\" initialTheme=\"neutral\">\n * <App />\n * </NewtoneProvider>\n * ```\n */\nexport function NewtoneProvider({\n config = DEFAULT_THEME_CONFIG,\n initialMode = 'light',\n initialTheme = 'neutral',\n children,\n}: NewtoneProviderProps) {\n const [mode, setMode] = useState<ColorMode>(initialMode);\n const [theme, setTheme] = useState<ThemeName>(initialTheme);\n\n const value = useMemo(\n () => ({\n config,\n mode,\n theme,\n setMode,\n setTheme,\n }),\n [config, mode, theme]\n );\n\n return (\n <ThemeContext.Provider value={value}>\n <GoogleFontLoader fonts={config.typography.fonts} />\n <IconFontLoader icons={config.icons} />\n {children}\n </ThemeContext.Provider>\n );\n}\n\n/**\n * useNewtoneTheme - Hook to access theme context\n *\n * Must be used within a NewtoneProvider.\n *\n * @example\n * ```tsx\n * const { mode, theme, setMode, setTheme } = useNewtoneTheme();\n * ```\n */\nexport function useNewtoneTheme(): NewtoneThemeContext {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useNewtoneTheme must be used within NewtoneProvider');\n }\n return context;\n}\n","import { createContext, useContext } from 'react';\nimport type { ThemeName, ElevationLevel } from './types';\n\n/**\n * Context value provided by Frame to its descendants.\n * Contains the resolved theme and elevation that children should use.\n */\nexport interface FrameContextValue {\n readonly theme: ThemeName;\n readonly elevation: ElevationLevel;\n}\n\n/**\n * FrameContext - Propagates theme and elevation overrides from Frame to descendants.\n *\n * When null, components fall back to NewtoneProvider's theme and default elevation (1).\n * When present, useTokens() reads from this context instead.\n */\nexport const FrameContext = createContext<FrameContextValue | null>(null);\n\n/**\n * useFrameContext - Read the nearest Frame's context, if any.\n *\n * Returns null when no parent Frame exists. This is intentionally not an error —\n * components outside a Frame simply fall back to the NewtoneProvider defaults.\n */\nexport function useFrameContext(): FrameContextValue | null {\n return useContext(FrameContext);\n}\n","import { getColor, getColorByContrast } from 'newtone';\nimport type { PaletteConfig } from 'newtone';\nimport type { ColorSystemConfig, ColorMode, ThemeMapping, ElevationLevel, FontConfig } from '../theme/types';\nimport type { ResolvedTokens } from './types';\n\n/**\n * Convert FontConfig to CSS font-family string\n */\nfunction fontConfigToFamily(font: FontConfig): string {\n const family = font.family.includes(' ') ? `\"${font.family}\"` : font.family;\n return `${family}, ${font.fallback}`;\n}\n\n/**\n * Compute design tokens for a specific mode/theme/elevation combination.\n *\n * This function calls the Newtone engine to generate all necessary color tokens\n * based on the current theme context. All colors are computed on-demand using\n * the pure functions from the engine.\n *\n * @param config - Complete color system configuration (dynamic range + palettes)\n * @param mode - Current color mode ('light' or 'dark')\n * @param themeMapping - Theme configuration (which palette and NV to use)\n * @param elevation - Elevation level (0=sunken, 1=default, 2=elevated)\n * @param elevationOffsets - NV offsets for each elevation level\n * @param spacing - Spacing scale for paddings, gaps, and margins\n * @param radius - Border radius scale for component roundness\n * @param typography - Typography configuration with fonts and scales\n * @param icons - Icon configuration with variant, weight, and auto-grade setting\n * @returns Resolved design tokens with all necessary colors\n *\n * @example\n * ```typescript\n * const tokens = computeTokens(\n * config.colorSystem,\n * 'light',\n * config.themes.neutral,\n * 1,\n * config.elevation.offsets,\n * config.spacing,\n * config.radius,\n * config.typography,\n * config.icons\n * );\n * console.log(tokens.background.srgb); // { r: 0.95, g: 0.95, b: 0.95 }\n * ```\n */\nexport function computeTokens(\n config: ColorSystemConfig,\n mode: ColorMode,\n themeMapping: ThemeMapping,\n elevation: ElevationLevel,\n elevationOffsets: readonly [number, number, number],\n spacing: { readonly xs: number; readonly sm: number; readonly md: number; readonly lg: number; readonly xl: number; readonly xxl: number },\n radius: { readonly none: number; readonly sm: number; readonly md: number; readonly lg: number; readonly xl: number; readonly pill: 999 },\n typography: {\n readonly fonts: { readonly mono: FontConfig; readonly display: FontConfig; readonly default: FontConfig };\n readonly scale: { readonly xs: number; readonly sm: number; readonly base: number; readonly md: number; readonly lg: number; readonly xl: number; readonly xxl: number };\n readonly lineHeight: { readonly tight: number; readonly normal: number; readonly relaxed: number };\n readonly fontWeight: { readonly regular: number; readonly medium: number; readonly semibold: number; readonly bold: number };\n },\n icons: {\n readonly variant: 'outlined' | 'rounded' | 'sharp';\n readonly weight: 100 | 200 | 300 | 400 | 500 | 600 | 700;\n readonly autoGrade: boolean;\n }\n): ResolvedTokens {\n const { dynamicRange, palettes } = config;\n const palette = palettes[themeMapping.paletteIndex];\n\n if (!palette) {\n throw new Error(`Palette at index ${themeMapping.paletteIndex} not found`);\n }\n\n // Determine base NV for this mode + elevation\n const baseNv = mode === 'light' ? themeMapping.lightModeNv : themeMapping.darkModeNv;\n const elevationOffset = elevationOffsets[elevation];\n const backgroundNv = Math.max(0, Math.min(1, baseNv + elevationOffset));\n\n // Derive effective text mode from actual background lightness.\n // This handles inverted themes (e.g., strong: dark bg in light mode)\n // where the mode flag doesn't match the background's visual lightness.\n const effectiveTextMode: ColorMode = backgroundNv >= 0.5 ? 'light' : 'dark';\n\n // Compute background colors for current elevation\n const background = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n backgroundNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Compute elevated surface (always at elevation 2 offset)\n const elevatedNv = Math.max(0, Math.min(1, baseNv + elevationOffsets[2]));\n const backgroundElevated = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n elevatedNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Compute sunken surface (always at elevation 0 offset)\n const sunkenNv = Math.max(0, Math.min(1, baseNv + elevationOffsets[0]));\n const backgroundSunken = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n sunkenNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Compute text colors with WCAG contrast against actual background\n // Primary text: WCAG AA (4.5:1 for body text)\n const textPrimary = getColorByContrast(\n palette.hue,\n palette.saturation,\n dynamicRange,\n 4.5,\n effectiveTextMode,\n palette.desaturation,\n palette.paletteHueGrading,\n background,\n );\n\n // Secondary text: Lower contrast (3.0:1 for captions)\n const textSecondary = getColorByContrast(\n palette.hue,\n palette.saturation,\n dynamicRange,\n 3.0,\n effectiveTextMode,\n palette.desaturation,\n palette.paletteHueGrading,\n background,\n );\n\n // Interactive colors: Use accent palette (index 1)\n const accentPalette = palettes[1];\n\n if (!accentPalette) {\n throw new Error('Accent palette (index 1) not found');\n }\n\n // Resolve per-mode key color: light mode uses keyNormalizedValue, dark uses keyNormalizedValueDark\n const resolveKeyNv = (p: PaletteConfig): number | undefined =>\n mode === 'dark' ? p.keyNormalizedValueDark : p.keyNormalizedValue;\n\n // Interactive base: use user-chosen key color or auto WCAG AA contrast\n const accentKeyNv = resolveKeyNv(accentPalette);\n const interactive = accentKeyNv !== undefined\n ? getColor(\n accentPalette.hue,\n accentPalette.saturation,\n dynamicRange,\n accentKeyNv,\n accentPalette.desaturation,\n accentPalette.paletteHueGrading\n )\n : getColorByContrast(\n accentPalette.hue,\n accentPalette.saturation,\n dynamicRange,\n 4.5,\n effectiveTextMode,\n accentPalette.desaturation,\n accentPalette.paletteHueGrading,\n background,\n );\n\n // Hover/active states: Shift NV slightly from interactive base\n // In light mode (light bg), go darker; in dark mode (dark bg), go lighter\n const interactiveNv = accentKeyNv ?? (effectiveTextMode === 'light' ? 0.3 : 0.7);\n\n const interactiveHover = getColor(\n accentPalette.hue,\n accentPalette.saturation,\n dynamicRange,\n interactiveNv + (effectiveTextMode === 'light' ? -0.05 : 0.05),\n accentPalette.desaturation,\n accentPalette.paletteHueGrading\n );\n\n const interactiveActive = getColor(\n accentPalette.hue,\n accentPalette.saturation,\n dynamicRange,\n interactiveNv + (effectiveTextMode === 'light' ? -0.1 : 0.1),\n accentPalette.desaturation,\n accentPalette.paletteHueGrading\n );\n\n // Border: Subtle contrast from background\n const borderNv = effectiveTextMode === 'light' ? backgroundNv - 0.1 : backgroundNv + 0.1;\n const border = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n Math.max(0, Math.min(1, borderNv)),\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Semantic status colors: success (palette 2), warning (palette 3), error (palette 4)\n // Each computed at WCAG AA contrast against actual background\n const successPalette = palettes[2];\n const warningPalette = palettes[3];\n const errorPalette = palettes[4];\n\n const successKeyNv = successPalette ? resolveKeyNv(successPalette) : undefined;\n const success = successPalette\n ? (successKeyNv !== undefined\n ? getColor(successPalette.hue, successPalette.saturation, dynamicRange,\n successKeyNv, successPalette.desaturation, successPalette.paletteHueGrading)\n : getColorByContrast(successPalette.hue, successPalette.saturation, dynamicRange,\n 4.5, effectiveTextMode, successPalette.desaturation, successPalette.paletteHueGrading, background))\n : interactive;\n\n const warningKeyNv = warningPalette ? resolveKeyNv(warningPalette) : undefined;\n const warning = warningPalette\n ? (warningKeyNv !== undefined\n ? getColor(warningPalette.hue, warningPalette.saturation, dynamicRange,\n warningKeyNv, warningPalette.desaturation, warningPalette.paletteHueGrading)\n : getColorByContrast(warningPalette.hue, warningPalette.saturation, dynamicRange,\n 4.5, effectiveTextMode, warningPalette.desaturation, warningPalette.paletteHueGrading, background))\n : interactive;\n\n const errorKeyNv = errorPalette ? resolveKeyNv(errorPalette) : undefined;\n const error = errorPalette\n ? (errorKeyNv !== undefined\n ? getColor(errorPalette.hue, errorPalette.saturation, dynamicRange,\n errorKeyNv, errorPalette.desaturation, errorPalette.paletteHueGrading)\n : getColorByContrast(errorPalette.hue, errorPalette.saturation, dynamicRange,\n 4.5, effectiveTextMode, errorPalette.desaturation, errorPalette.paletteHueGrading, background))\n : interactive;\n\n return {\n background,\n backgroundElevated,\n backgroundSunken,\n textPrimary,\n textSecondary,\n interactive,\n interactiveHover,\n interactiveActive,\n border,\n success,\n warning,\n error,\n spacing,\n radius,\n typography: {\n fonts: {\n mono: fontConfigToFamily(typography.fonts.mono),\n display: fontConfigToFamily(typography.fonts.display),\n default: fontConfigToFamily(typography.fonts.default),\n },\n size: typography.scale,\n lineHeight: typography.lineHeight,\n weight: typography.fontWeight,\n },\n icons: {\n variant: icons.variant,\n weight: icons.weight,\n grade: icons.autoGrade\n ? (mode === 'light' ? -25 : 200)\n : 0,\n },\n };\n}\n","import { useMemo } from 'react';\nimport { useNewtoneTheme } from '../theme/NewtoneProvider';\nimport { useFrameContext } from '../theme/FrameContext';\nimport { computeTokens } from './computeTokens';\nimport type { ElevationLevel } from '../theme/types';\nimport type { ResolvedTokens } from './types';\n\n/**\n * Hook to compute design tokens for the current theme/mode/elevation.\n *\n * Resolution order:\n * 1. Explicit elevation parameter takes highest priority\n * 2. FrameContext values (from nearest parent Frame) are used when elevation is omitted\n * 3. Falls back to NewtoneProvider theme + elevation 1\n *\n * Theme always reads from FrameContext if present, falling back to NewtoneProvider.\n *\n * @param elevation - Elevation level (0=sunken, 1=default, 2=elevated).\n * When omitted, reads from FrameContext or defaults to 1.\n * @returns Resolved design tokens with all necessary colors\n *\n * @example\n * ```tsx\n * // Inside a <Frame theme=\"primary\" elevation={1}>:\n * function MyComponent() {\n * const tokens = useTokens(); // Gets primary theme, elevation 2 (mapped from Frame's 1)\n * return (\n * <View style={{ backgroundColor: srgbToHex(tokens.background.srgb) }} />\n * );\n * }\n * ```\n */\nexport function useTokens(elevation?: ElevationLevel): ResolvedTokens {\n const { config, mode, theme: providerTheme } = useNewtoneTheme();\n const frameCtx = useFrameContext();\n\n // Resolve theme: FrameContext overrides provider\n const resolvedTheme = frameCtx?.theme ?? providerTheme;\n\n // Resolve elevation: explicit param > FrameContext > default 1\n const resolvedElevation: ElevationLevel = elevation ?? frameCtx?.elevation ?? 1;\n\n return useMemo(() => {\n const themeMapping = config.themes[resolvedTheme];\n return computeTokens(\n config.colorSystem,\n mode,\n themeMapping,\n resolvedElevation,\n config.elevation.offsets,\n config.spacing,\n config.radius,\n config.typography,\n config.icons\n );\n }, [config, mode, resolvedTheme, resolvedElevation]);\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\nimport type { ButtonVariant, ButtonSize } from './Button.types';\n\n/**\n * Get size configuration for buttons using design tokens\n */\nfunction getSizeConfig(tokens: ResolvedTokens) {\n return {\n sm: {\n paddingVertical: tokens.spacing.xs,\n paddingHorizontal: tokens.spacing.md,\n fontSize: tokens.typography.size.sm,\n borderRadius: tokens.radius.sm,\n gap: tokens.spacing.xs,\n iconSize: tokens.typography.size.sm,\n },\n md: {\n paddingVertical: tokens.spacing.sm,\n paddingHorizontal: tokens.spacing.lg,\n fontSize: tokens.typography.size.base,\n borderRadius: tokens.radius.md,\n gap: tokens.spacing.sm,\n iconSize: tokens.typography.size.base,\n },\n lg: {\n paddingVertical: tokens.spacing.md,\n paddingHorizontal: tokens.spacing.xl,\n fontSize: tokens.typography.size.base,\n borderRadius: tokens.radius.lg,\n gap: tokens.spacing.sm,\n iconSize: tokens.typography.size.base,\n },\n };\n}\n\n/**\n * Compute button styles based on tokens, variant, size, and state\n *\n * @param tokens - Resolved design tokens from useTokens\n * @param variant - Button variant (primary, secondary, ghost, outline)\n * @param size - Button size (sm, md, lg)\n * @param disabled - Whether button is disabled\n * @param isIconOnly - Whether the button shows only an icon (no text)\n * @returns StyleSheet with button styles + iconColor for the Icon component\n */\nexport function getButtonStyles(\n tokens: ResolvedTokens,\n variant: ButtonVariant,\n size: ButtonSize,\n disabled: boolean,\n isIconOnly: boolean\n) {\n const sizeConfig = getSizeConfig(tokens)[size];\n\n // Base styles\n const base = {\n paddingVertical: sizeConfig.paddingVertical,\n paddingHorizontal: isIconOnly ? sizeConfig.paddingVertical : sizeConfig.paddingHorizontal,\n borderRadius: sizeConfig.borderRadius,\n alignItems: 'center' as const,\n justifyContent: 'center' as const,\n flexDirection: 'row' as const,\n gap: sizeConfig.gap,\n };\n\n // Variant-specific colors\n let backgroundColor: string;\n let textColor: string;\n let borderColor: string | undefined;\n let borderWidth = 0;\n\n switch (variant) {\n case 'primary':\n backgroundColor = srgbToHex(tokens.interactive.srgb);\n textColor = srgbToHex(tokens.background.srgb); // Contrast inversion\n break;\n case 'secondary':\n backgroundColor = srgbToHex(tokens.backgroundElevated.srgb);\n textColor = srgbToHex(tokens.textPrimary.srgb);\n break;\n case 'outline':\n backgroundColor = 'transparent';\n textColor = srgbToHex(tokens.interactive.srgb);\n borderColor = srgbToHex(tokens.border.srgb);\n borderWidth = 1;\n break;\n case 'ghost':\n backgroundColor = 'transparent';\n textColor = srgbToHex(tokens.interactive.srgb);\n break;\n }\n\n const resolvedTextColor = disabled ? srgbToHex(tokens.textSecondary.srgb) : textColor;\n\n return {\n iconColor: resolvedTextColor,\n iconSize: sizeConfig.iconSize,\n styles: StyleSheet.create({\n base: {\n ...base,\n backgroundColor: disabled ? srgbToHex(tokens.backgroundSunken.srgb) : backgroundColor,\n borderWidth,\n ...(borderColor && { borderColor }),\n },\n pressed: {\n backgroundColor:\n variant === 'primary'\n ? srgbToHex(tokens.interactiveActive.srgb)\n : variant === 'secondary'\n ? srgbToHex(tokens.backgroundSunken.srgb)\n : 'transparent',\n opacity: variant === 'ghost' || variant === 'outline' ? 0.7 : 1,\n },\n disabled: {\n opacity: 0.4,\n },\n text: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: sizeConfig.fontSize,\n fontWeight: tokens.typography.weight.semibold as any,\n color: resolvedTextColor,\n },\n textPressed: {\n // Color changes handled by parent opacity\n },\n textDisabled: {\n // Color already set in text style via disabled check\n },\n }),\n };\n}\n","import React from 'react';\nimport { Text, type ViewStyle, type TextStyle } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport { useTokens } from '../tokens/useTokens';\nimport type { ElevationLevel } from '../theme/types';\n\nexport interface IconProps {\n /** Icon ligature name (e.g., 'home', 'settings', 'check') */\n readonly name: string;\n /** Font size in pixels (default: tokens.typography.size.base) */\n readonly size?: number;\n /** Optical size for variable font axis (default: same as size) */\n readonly opticalSize?: number;\n /** Fill state: 0=outlined, 1=filled (default: 0) */\n readonly fill?: 0 | 1;\n /** Icon color as hex string (default: tokens.textPrimary) */\n readonly color?: string;\n /** Elevation level for token computation (default: 1) */\n readonly elevation?: ElevationLevel;\n /** Additional styles */\n readonly style?: ViewStyle;\n /** Press handler */\n readonly onPress?: () => void;\n}\n\n/**\n * Material Symbols icon component with variable font support.\n *\n * Uses global icon configuration (variant, weight, auto-grade) from theme config,\n * with per-instance control over size, fill, and color.\n *\n * @example\n * ```tsx\n * <Icon name=\"home\" />\n * <Icon name=\"settings\" size={24} fill={1} />\n * <Icon name=\"check\" color=\"#00ff00\" />\n * ```\n */\nexport function Icon({\n name,\n size,\n opticalSize,\n fill = 0,\n color,\n elevation = 1,\n style,\n onPress,\n}: IconProps) {\n const tokens = useTokens(elevation);\n\n const fontSize = size ?? tokens.typography.size.base;\n const opsz = opticalSize ?? fontSize;\n const iconColor = color ?? srgbToHex(tokens.textPrimary.srgb);\n\n // Font family varies by variant: 'Material Symbols Rounded', etc.\n const fontFamily = `Material Symbols ${tokens.icons.variant.charAt(0).toUpperCase() + tokens.icons.variant.slice(1)}`;\n\n // Font variation settings for Material Symbols variable font\n const fontVariationSettings = `'FILL' ${fill}, 'wght' ${tokens.icons.weight}, 'GRAD' ${tokens.icons.grade}, 'opsz' ${opsz}`;\n\n return (\n <Text\n style={{\n fontFamily,\n fontSize,\n color: iconColor,\n userSelect: 'none',\n fontVariationSettings,\n ...style,\n } as TextStyle}\n onPress={onPress}\n >\n {name}\n </Text>\n );\n}\n","import React from 'react';\nimport { Pressable, Text } from 'react-native';\nimport type { ButtonProps } from './Button.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getButtonStyles } from './Button.styles';\nimport { Icon } from '../Icon/Icon';\n\n/**\n * Button component with support for multiple variants, sizes, and optional icons.\n *\n * Automatically adapts to the current theme and mode from NewtoneProvider.\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" size=\"md\" onPress={() => console.log('Pressed')}>\n * Click me\n * </Button>\n * ```\n *\n * @example\n * ```tsx\n * <Button icon=\"add\" variant=\"primary\" onPress={handleAdd}>\n * New Item\n * </Button>\n * ```\n *\n * @example\n * ```tsx\n * <Button icon=\"delete\" variant=\"ghost\" size=\"sm\" onPress={handleDelete} />\n * ```\n */\nexport function Button({\n children,\n icon,\n iconPosition = 'left',\n variant = 'primary',\n size = 'md',\n disabled = false,\n style,\n textStyle,\n ...pressableProps\n}: ButtonProps) {\n const tokens = useTokens(1);\n const isIconOnly = !!icon && !children;\n\n const { styles, iconColor, iconSize } = React.useMemo(\n () => getButtonStyles(tokens, variant, size, disabled, isIconOnly),\n [tokens, variant, size, disabled, isIconOnly]\n );\n\n const renderIcon = () => (\n <Icon name={icon!} size={iconSize} color={iconColor} />\n );\n\n return (\n <Pressable\n style={({ pressed }) => [\n styles.base,\n pressed && !disabled && styles.pressed,\n disabled && styles.disabled,\n ...(Array.isArray(style) ? style : [style]),\n ]}\n disabled={disabled}\n {...pressableProps}\n >\n {({ pressed }) => (\n <>\n {icon && iconPosition === 'left' && renderIcon()}\n {children != null && (\n <Text\n style={[\n styles.text,\n pressed && !disabled && styles.textPressed,\n disabled && styles.textDisabled,\n ...(Array.isArray(textStyle) ? textStyle : [textStyle]),\n ]}\n >\n {children}\n </Text>\n )}\n {icon && iconPosition === 'right' && renderIcon()}\n </>\n )}\n </Pressable>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nexport function getCardStyles(tokens: ResolvedTokens, disabled: boolean) {\n return StyleSheet.create({\n container: {\n backgroundColor: srgbToHex(tokens.background.srgb),\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: tokens.radius.lg,\n padding: tokens.spacing.lg,\n opacity: disabled ? 0.5 : 1,\n },\n });\n}\n","import React from 'react';\nimport { View } from 'react-native';\nimport type { CardProps } from './Card.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getCardStyles } from './Card.styles';\n\nexport function Card({\n children,\n elevation = 1,\n style,\n disabled = false,\n}: CardProps) {\n const tokens = useTokens(elevation);\n\n const styles = React.useMemo(\n () => getCardStyles(tokens, disabled),\n [tokens, disabled]\n );\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {children}\n </View>\n );\n}\n","import type { ViewStyle } from 'react-native';\nimport type { ResolvedTokens } from '../tokens/types';\nimport type {\n SpacingValue,\n SpacingAxes,\n SpacingSides,\n PaddingProp,\n GapProp,\n RadiusValue,\n RadiusProp,\n SizingMode,\n Direction,\n Alignment,\n Justification,\n} from './Frame.types';\n\n// ── Spacing ──────────────────────────────────────────────────────\n\n/** Resolve a spacing token or number to a pixel value */\nexport function resolveSpacing(\n value: SpacingValue,\n tokens: ResolvedTokens,\n): number {\n if (typeof value === 'number') return value;\n return tokens.spacing[value];\n}\n\n/** Resolve padding prop to per-side pixel values */\nexport function resolvePadding(\n prop: PaddingProp,\n tokens: ResolvedTokens,\n): { readonly top: number; readonly right: number; readonly bottom: number; readonly left: number } {\n if (typeof prop === 'string' || typeof prop === 'number') {\n const px = resolveSpacing(prop, tokens);\n return { top: px, right: px, bottom: px, left: px };\n }\n\n // Axis shorthand: { x?, y? }\n if ('x' in prop || 'y' in prop) {\n const axes = prop as SpacingAxes;\n const x = axes.x !== undefined ? resolveSpacing(axes.x, tokens) : 0;\n const y = axes.y !== undefined ? resolveSpacing(axes.y, tokens) : 0;\n return { top: y, right: x, bottom: y, left: x };\n }\n\n // Per-side: { top?, right?, bottom?, left? }\n const sides = prop as SpacingSides;\n return {\n top: sides.top !== undefined ? resolveSpacing(sides.top, tokens) : 0,\n right: sides.right !== undefined ? resolveSpacing(sides.right, tokens) : 0,\n bottom: sides.bottom !== undefined ? resolveSpacing(sides.bottom, tokens) : 0,\n left: sides.left !== undefined ? resolveSpacing(sides.left, tokens) : 0,\n };\n}\n\n/** Resolve gap prop to rowGap/columnGap pixel values */\nexport function resolveGap(\n prop: GapProp,\n tokens: ResolvedTokens,\n): { readonly rowGap: number; readonly columnGap: number } {\n if (typeof prop === 'string' || typeof prop === 'number') {\n const px = resolveSpacing(prop, tokens);\n return { rowGap: px, columnGap: px };\n }\n\n // { row?, column? }\n return {\n rowGap: prop.row !== undefined ? resolveSpacing(prop.row, tokens) : 0,\n columnGap: prop.column !== undefined ? resolveSpacing(prop.column, tokens) : 0,\n };\n}\n\n// ── Radius ───────────────────────────────────────────────────────\n\n/** Resolve a radius token or number to a pixel value */\nexport function resolveRadius(\n value: RadiusValue,\n tokens: ResolvedTokens,\n): number {\n if (typeof value === 'number') return value;\n return tokens.radius[value];\n}\n\n/** Resolved per-corner radius values */\nexport interface ResolvedCorners {\n readonly topLeft: number;\n readonly topRight: number;\n readonly bottomLeft: number;\n readonly bottomRight: number;\n}\n\n/** Resolve radius prop to per-corner pixel values */\nexport function resolveRadiusCorners(\n prop: RadiusProp,\n tokens: ResolvedTokens,\n): ResolvedCorners {\n if (typeof prop === 'string' || typeof prop === 'number') {\n const px = resolveRadius(prop, tokens);\n return { topLeft: px, topRight: px, bottomLeft: px, bottomRight: px };\n }\n\n // Per-corner object\n return {\n topLeft: prop.topLeft !== undefined ? resolveRadius(prop.topLeft, tokens) : 0,\n topRight: prop.topRight !== undefined ? resolveRadius(prop.topRight, tokens) : 0,\n bottomLeft: prop.bottomLeft !== undefined ? resolveRadius(prop.bottomLeft, tokens) : 0,\n bottomRight: prop.bottomRight !== undefined ? resolveRadius(prop.bottomRight, tokens) : 0,\n };\n}\n\n/** Check if any corner has a positive radius (for auto-clip) */\nexport function hasPositiveRadius(corners: ResolvedCorners): boolean {\n return corners.topLeft > 0\n || corners.topRight > 0\n || corners.bottomLeft > 0\n || corners.bottomRight > 0;\n}\n\n// ── Sizing ───────────────────────────────────────────────────────\n\n/** Resolve width/height sizing modes to ViewStyle properties */\nexport function resolveSizing(\n width: SizingMode | undefined,\n height: SizingMode | undefined,\n): ViewStyle {\n const style: Record<string, unknown> = {};\n\n if (width !== undefined) {\n if (width === 'fill') {\n style.flexGrow = 1;\n style.width = '100%';\n } else if (typeof width === 'number') {\n style.width = width;\n }\n // 'hug' = default RN behavior, no explicit dimension\n }\n\n if (height !== undefined) {\n if (height === 'fill') {\n style.flexGrow = style.flexGrow === 1 ? 1 : 1;\n style.height = '100%';\n } else if (typeof height === 'number') {\n style.height = height;\n }\n // 'hug' = default RN behavior\n }\n\n return style as ViewStyle;\n}\n\n// ── Layout ───────────────────────────────────────────────────────\n\nconst ALIGN_MAP: Record<Alignment, ViewStyle['alignItems']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst JUSTIFY_MAP: Record<Justification, ViewStyle['justifyContent']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n};\n\n/** Resolve alignment prop to ViewStyle alignItems */\nexport function resolveAlignment(align: Alignment): ViewStyle['alignItems'] {\n return ALIGN_MAP[align];\n}\n\n/** Resolve justification prop to ViewStyle justifyContent */\nexport function resolveJustification(justify: Justification): ViewStyle['justifyContent'] {\n return JUSTIFY_MAP[justify];\n}\n\n/** Resolve direction + reverse to ViewStyle flexDirection */\nexport function resolveFlexDirection(\n direction: Direction,\n reverse: boolean,\n): ViewStyle['flexDirection'] {\n if (direction === 'horizontal') {\n return reverse ? 'row-reverse' : 'row';\n }\n return reverse ? 'column-reverse' : 'column';\n}\n","import type { ViewStyle } from 'react-native';\nimport { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\nimport type { FrameElevation } from '../theme/types';\nimport type {\n PaddingProp,\n GapProp,\n SizingMode,\n Direction,\n Alignment,\n Justification,\n RadiusProp,\n LayoutMode,\n} from './Frame.types';\nimport {\n resolvePadding,\n resolveGap,\n resolveSizing,\n resolveFlexDirection,\n resolveAlignment,\n resolveJustification,\n resolveRadiusCorners,\n hasPositiveRadius,\n} from './Frame.utils';\n\n// ── Input ────────────────────────────────────────────────────────\n\nexport interface FrameStyleInput {\n readonly tokens: ResolvedTokens;\n readonly frameElevation: FrameElevation;\n\n // Layout\n readonly layout?: LayoutMode;\n readonly direction?: Direction;\n readonly wrap?: boolean;\n readonly reverse?: boolean;\n readonly columns?: number;\n readonly rows?: number;\n\n // Alignment\n readonly align?: Alignment;\n readonly justify?: Justification;\n\n // Spacing\n readonly padding?: PaddingProp;\n readonly gap?: GapProp;\n\n // Sizing\n readonly width?: SizingMode;\n readonly height?: SizingMode;\n readonly minWidth?: number;\n readonly maxWidth?: number;\n readonly minHeight?: number;\n readonly maxHeight?: number;\n\n // Appearance\n readonly radius?: RadiusProp;\n readonly bordered?: boolean;\n readonly disabled?: boolean;\n}\n\n// ── Output ───────────────────────────────────────────────────────\n\nexport interface FrameStyles {\n /** Main container style (ViewStyle) */\n readonly container: ViewStyle;\n /** Style applied when pressed (background shift) */\n readonly pressed: ViewStyle;\n /** Web-only CSS Grid properties (cast to ViewStyle at render) */\n readonly gridWebStyle: React.CSSProperties | null;\n /** Web-only inset box-shadow string for elevation -2 */\n readonly insetBoxShadow: string | null;\n}\n\n// ── Builder ──────────────────────────────────────────────────────\n\nexport function getFrameStyles(input: FrameStyleInput): FrameStyles {\n const {\n tokens,\n frameElevation,\n layout = 'flex',\n direction = 'vertical',\n wrap = false,\n reverse = false,\n columns,\n rows,\n align,\n justify,\n padding,\n gap,\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n radius,\n bordered = false,\n disabled = false,\n } = input;\n\n const container: Record<string, unknown> = {};\n\n // ── Background & foreground ──\n container.backgroundColor = srgbToHex(tokens.background.srgb);\n container.color = srgbToHex(tokens.textPrimary.srgb);\n\n // ── Layout mode ──\n if (layout === 'flex') {\n container.display = 'flex';\n container.flexDirection = resolveFlexDirection(direction, reverse);\n if (wrap) container.flexWrap = 'wrap';\n }\n // Grid: set flex as RN fallback; actual grid applied via gridWebStyle\n if (layout === 'grid') {\n container.display = 'flex';\n container.flexDirection = 'row';\n container.flexWrap = 'wrap';\n }\n\n // ── Alignment ──\n if (align) container.alignItems = resolveAlignment(align);\n if (justify) container.justifyContent = resolveJustification(justify);\n\n // ── Padding ──\n if (padding !== undefined) {\n const p = resolvePadding(padding, tokens);\n container.paddingTop = p.top;\n container.paddingRight = p.right;\n container.paddingBottom = p.bottom;\n container.paddingLeft = p.left;\n }\n\n // ── Gap ──\n if (gap !== undefined) {\n const g = resolveGap(gap, tokens);\n container.rowGap = g.rowGap;\n container.columnGap = g.columnGap;\n }\n\n // ── Sizing ──\n const sizing = resolveSizing(width, height);\n Object.assign(container, sizing);\n\n // ── Constraints ──\n if (minWidth !== undefined) container.minWidth = minWidth;\n if (maxWidth !== undefined) container.maxWidth = maxWidth;\n if (minHeight !== undefined) container.minHeight = minHeight;\n if (maxHeight !== undefined) container.maxHeight = maxHeight;\n\n // ── Radius ──\n if (radius !== undefined) {\n const corners = resolveRadiusCorners(radius, tokens);\n container.borderTopLeftRadius = corners.topLeft;\n container.borderTopRightRadius = corners.topRight;\n container.borderBottomLeftRadius = corners.bottomLeft;\n container.borderBottomRightRadius = corners.bottomRight;\n\n // Auto-clip when any corner has radius\n if (hasPositiveRadius(corners)) {\n container.overflow = 'hidden';\n }\n }\n\n // ── Border ──\n if (bordered) {\n container.borderWidth = 1;\n container.borderColor = srgbToHex(tokens.border.srgb);\n }\n\n // ── Outer shadow (elevation 2) ──\n if (frameElevation === 2) {\n container.shadowColor = '#000';\n container.shadowOffset = { width: 0, height: 2 };\n container.shadowOpacity = 0.12;\n container.shadowRadius = 6;\n // Android elevation prop (react-native-web maps to box-shadow)\n container.elevation = 4;\n }\n\n // ── Disabled ──\n if (disabled) {\n container.opacity = 0.5;\n }\n\n // ── Pressed state (background shift to sunken) ──\n const pressed = StyleSheet.create({\n s: { backgroundColor: srgbToHex(tokens.backgroundSunken.srgb) },\n }).s;\n\n // ── Grid web style ──\n let gridWebStyle: React.CSSProperties | null = null;\n if (layout === 'grid') {\n gridWebStyle = {\n display: 'grid' as const,\n gridTemplateColumns: columns ? `repeat(${columns}, 1fr)` : undefined,\n gridTemplateRows: rows ? `repeat(${rows}, 1fr)` : undefined,\n };\n }\n\n // ── Inset shadow (elevation -2) ──\n const insetBoxShadow = frameElevation === -2\n ? 'inset 0 2px 4px rgba(0,0,0,0.12)'\n : null;\n\n return {\n container: StyleSheet.create({ c: container as ViewStyle }).c,\n pressed,\n gridWebStyle,\n insetBoxShadow,\n };\n}\n","import React, { useMemo } from 'react';\nimport { View, Pressable, Text } from 'react-native';\nimport type { ViewStyle, TextStyle } from 'react-native';\nimport type { FrameProps } from './Frame.types';\nimport type { ElevationLevel, FrameElevation } from '../theme/types';\nimport { srgbToHex } from 'newtone';\nimport { FrameContext, useFrameContext } from '../theme/FrameContext';\nimport { useNewtoneTheme } from '../theme/NewtoneProvider';\nimport { computeTokens } from '../tokens/computeTokens';\nimport { getFrameStyles } from './Frame.styles';\n\n/**\n * Wrap raw string/number children in <Text> to prevent\n * react-native-web \"Unexpected text node\" console errors.\n */\nfunction wrapTextChildren(\n children: React.ReactNode,\n textStyle: TextStyle,\n): React.ReactNode {\n return React.Children.map(children, (child) => {\n if (typeof child === 'string' || typeof child === 'number') {\n return <Text style={textStyle}>{child}</Text>;\n }\n return child;\n });\n}\n\n/**\n * Convert user-facing FrameElevation (-2..2) to internal ElevationLevel (0..2).\n *\n * | Frame | Internal | Background |\n * |:-----:|:--------:|:-----------|\n * | -2 | 0 | Sunken |\n * | -1 | 0 | Sunken |\n * | 0 | 1 | Default |\n * | 1 | 2 | Elevated |\n * | 2 | 2 | Elevated |\n */\nfunction toElevationLevel(frameElevation: FrameElevation): ElevationLevel {\n if (frameElevation <= -1) return 0;\n if (frameElevation === 0) return 1;\n return 2;\n}\n\n/**\n * Frame — Foundational layout building block.\n *\n * Frame is a container that provides theme and elevation context to all\n * descendants, plus layout (flex/grid), spacing, sizing, appearance,\n * and interactivity capabilities.\n *\n * Frames can be nested. Inner frames override outer frames for their subtree.\n * Unspecified props inherit from the nearest parent Frame.\n *\n * @example\n * ```tsx\n * // Basic layout\n * <Frame direction=\"horizontal\" gap=\"md\" padding=\"lg\" align=\"center\">\n * <Button onPress={() => {}}>Save</Button>\n * <Button variant=\"ghost\" onPress={() => {}}>Cancel</Button>\n * </Frame>\n * ```\n *\n * @example\n * ```tsx\n * // Card-like frame\n * <Frame\n * theme=\"primary\"\n * elevation={2}\n * radius=\"lg\"\n * padding=\"xl\"\n * bordered\n * onPress={() => navigate('/details')}\n * >\n * <Text>Clickable card</Text>\n * </Frame>\n * ```\n *\n * @example\n * ```tsx\n * // Grid layout (web)\n * <Frame layout=\"grid\" columns={3} gap=\"md\" padding=\"lg\">\n * <Frame radius=\"md\" padding=\"md\" bordered>Cell 1</Frame>\n * <Frame radius=\"md\" padding=\"md\" bordered>Cell 2</Frame>\n * <Frame radius=\"md\" padding=\"md\" bordered>Cell 3</Frame>\n * </Frame>\n * ```\n */\nexport function Frame({\n children,\n // Theme & elevation\n theme,\n elevation,\n // Layout\n layout,\n direction,\n wrap,\n reverse,\n columns,\n rows,\n // Alignment\n align,\n justify,\n // Spacing\n padding,\n gap,\n // Sizing\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n // Appearance\n radius,\n bordered,\n // Interactivity\n onPress,\n href,\n disabled = false,\n // Style override\n style,\n}: FrameProps) {\n const { config, mode, theme: providerTheme } = useNewtoneTheme();\n const parentFrameCtx = useFrameContext();\n\n // Resolve theme: prop > parent Frame > NewtoneProvider\n const resolvedTheme = theme ?? parentFrameCtx?.theme ?? providerTheme;\n\n // Resolve frame elevation (user-facing, for shadow/style decisions)\n const resolvedFrameElevation: FrameElevation = elevation ?? 0;\n\n // Map to internal elevation level for token computation\n const resolvedElevation: ElevationLevel = elevation !== undefined\n ? toElevationLevel(elevation)\n : parentFrameCtx?.elevation ?? 1;\n\n // Compute tokens directly (not useTokens) to avoid reading our own FrameContext\n const tokens = useMemo(() => {\n const themeMapping = config.themes[resolvedTheme];\n return computeTokens(\n config.colorSystem,\n mode,\n themeMapping,\n resolvedElevation,\n config.elevation.offsets,\n config.spacing,\n config.radius,\n config.typography,\n config.icons,\n );\n }, [config, mode, resolvedTheme, resolvedElevation]);\n\n const styles = useMemo(\n () => getFrameStyles({\n tokens,\n frameElevation: resolvedFrameElevation,\n layout,\n direction,\n wrap,\n reverse,\n columns,\n rows,\n align,\n justify,\n padding,\n gap,\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n radius,\n bordered,\n disabled,\n }),\n [\n tokens, resolvedFrameElevation,\n layout, direction, wrap, reverse, columns, rows,\n align, justify, padding, gap,\n width, height, minWidth, maxWidth, minHeight, maxHeight,\n radius, bordered, disabled,\n ],\n );\n\n // Memoize context value\n const contextValue = useMemo(\n () => ({ theme: resolvedTheme, elevation: resolvedElevation }),\n [resolvedTheme, resolvedElevation],\n );\n\n // Build the style array with web-specific overrides\n const webOverrides: ViewStyle[] = [];\n if (styles.gridWebStyle) {\n webOverrides.push(styles.gridWebStyle as unknown as ViewStyle);\n }\n if (styles.insetBoxShadow) {\n webOverrides.push({ boxShadow: styles.insetBoxShadow } as unknown as ViewStyle);\n }\n\n const userStyles = Array.isArray(style) ? style : style ? [style] : [];\n\n const isInteractive = onPress !== undefined || href !== undefined;\n\n // Wrap raw string/number children in <Text> for RN compatibility\n const textStyle = useMemo<TextStyle>(\n () => ({\n color: srgbToHex(tokens.textPrimary.srgb),\n fontSize: tokens.typography.size.base,\n fontFamily: tokens.typography.fonts.default,\n lineHeight: tokens.typography.size.base * tokens.typography.lineHeight.normal,\n }),\n [tokens],\n );\n const wrappedChildren = wrapTextChildren(children, textStyle);\n\n return (\n <FrameContext.Provider value={contextValue}>\n {isInteractive ? (\n <Pressable\n onPress={onPress}\n disabled={disabled}\n // react-native-web renders Pressable with href as <a>\n {...(href ? { href, accessibilityRole: 'link' as const } : { accessibilityRole: 'button' as const })}\n style={({ pressed }) => [\n styles.container,\n pressed && !disabled && styles.pressed,\n ...webOverrides,\n ...userStyles,\n ]}\n >\n {wrappedChildren}\n </Pressable>\n ) : (\n <View style={[styles.container, ...webOverrides, ...userStyles]}>\n {wrappedChildren}\n </View>\n )}\n </FrameContext.Provider>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nexport function getTextInputStyles(tokens: ResolvedTokens, disabled: boolean) {\n return StyleSheet.create({\n container: {\n gap: tokens.spacing.xs,\n },\n label: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n input: {\n fontFamily: tokens.typography.fonts.default,\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: tokens.radius.md,\n paddingVertical: tokens.spacing.sm,\n paddingHorizontal: tokens.spacing.md,\n fontSize: tokens.typography.size.base,\n color: disabled\n ? srgbToHex(tokens.textSecondary.srgb)\n : srgbToHex(tokens.textPrimary.srgb),\n opacity: disabled ? 0.5 : 1,\n },\n });\n}\n","import React from 'react';\nimport { View, Text, TextInput as RNTextInput } from 'react-native';\nimport type { TextInputProps } from './TextInput.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getTextInputStyles } from './TextInput.styles';\nimport { srgbToHex } from 'newtone';\n\nexport function TextInput({\n label,\n disabled = false,\n style,\n ...textInputProps\n}: TextInputProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getTextInputStyles(tokens, disabled),\n [tokens, disabled]\n );\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {label && <Text style={styles.label}>{label}</Text>}\n <RNTextInput\n style={styles.input}\n editable={!disabled}\n placeholderTextColor={srgbToHex(tokens.textSecondary.srgb)}\n {...textInputProps}\n />\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nexport function getPopoverStyles(\n tokens: ResolvedTokens,\n triggerHeight: number,\n offset: number,\n maxHeight: number,\n width: 'trigger' | 'auto' | number,\n isOpen: boolean\n) {\n const widthStyle =\n width === 'trigger'\n ? { left: 0 as const, right: 0 as const }\n : typeof width === 'number'\n ? { width, left: 0 as const }\n : { left: 0 as const };\n\n return StyleSheet.create({\n container: {\n position: 'relative',\n zIndex: isOpen ? 999 : 1,\n },\n content: {\n position: 'absolute',\n top: triggerHeight + offset,\n ...widthStyle,\n backgroundColor: srgbToHex(tokens.backgroundElevated.srgb),\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: tokens.radius.md,\n maxHeight,\n zIndex: 1000,\n overflow: 'hidden',\n ...({ boxShadow: '0 4px 12px rgba(0,0,0,0.15)' } as any),\n },\n });\n}\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { View } from 'react-native';\nimport type { PopoverProps } from './Popover.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getPopoverStyles } from './Popover.styles';\n\n// Module-level: set of close callbacks for all open Popovers.\n// Opening one Popover automatically closes all others.\nconst openPopovers = new Set<() => void>();\n\nexport function Popover({\n isOpen,\n onClose,\n trigger,\n children,\n width = 'trigger',\n maxHeight = 240,\n offset = 4,\n closeOnEscape = true,\n style,\n contentStyle,\n}: PopoverProps) {\n const tokens = useTokens(1);\n const containerRef = useRef<View>(null);\n const [triggerHeight, setTriggerHeight] = useState(0);\n\n const onTriggerLayout = useCallback(\n (e: { nativeEvent: { layout: { height: number } } }) => {\n setTriggerHeight(e.nativeEvent.layout.height);\n },\n []\n );\n\n // Mutual exclusion: opening this Popover closes all others\n useEffect(() => {\n if (!isOpen) return;\n openPopovers.forEach((closeFn) => closeFn());\n openPopovers.clear();\n openPopovers.add(onClose);\n return () => {\n openPopovers.delete(onClose);\n };\n }, [isOpen, onClose]);\n\n // Click-outside: capture phase so RNW Pressable can't swallow the event\n useEffect(() => {\n if (!isOpen) return;\n const handleMouseDown = (e: MouseEvent) => {\n const node = containerRef.current as unknown as HTMLElement;\n if (node && !node.contains(e.target as Node)) {\n onClose();\n }\n };\n document.addEventListener('mousedown', handleMouseDown, true);\n return () => document.removeEventListener('mousedown', handleMouseDown, true);\n }, [isOpen, onClose]);\n\n const handleKeyDown = useCallback(\n (e: any) => {\n if (closeOnEscape && e.key === 'Escape') {\n e.stopPropagation();\n onClose();\n }\n },\n [closeOnEscape, onClose]\n );\n\n const styles = useMemo(\n () => getPopoverStyles(tokens, triggerHeight, offset, maxHeight, width, isOpen),\n [tokens, triggerHeight, offset, maxHeight, width, isOpen]\n );\n\n const containerStyles = useMemo(\n () => [styles.container, ...(Array.isArray(style) ? style : style ? [style] : [])],\n [styles.container, style]\n );\n\n const mergedContentStyles = useMemo(\n () => [styles.content, ...(Array.isArray(contentStyle) ? contentStyle : contentStyle ? [contentStyle] : [])],\n [styles.content, contentStyle]\n );\n\n // onKeyDown is a web-only prop supported by react-native-web but not in RN types\n const webProps = { onKeyDown: handleKeyDown } as any;\n\n return (\n <View\n ref={containerRef}\n style={containerStyles}\n {...webProps}\n >\n <View onLayout={onTriggerLayout}>\n {trigger}\n </View>\n\n {isOpen && (\n <View style={mergedContentStyles}>\n {children}\n </View>\n )}\n </View>\n );\n}\n","import { useCallback, useState } from 'react';\nimport type { UsePopoverOptions, UsePopoverReturn } from './Popover.types';\n\nexport function usePopover(options?: UsePopoverOptions): UsePopoverReturn {\n const [isOpen, setIsOpen] = useState(options?.initialOpen ?? false);\n\n const open = useCallback(() => {\n setIsOpen(true);\n options?.onOpenChange?.(true);\n }, [options]);\n\n const close = useCallback(() => {\n setIsOpen(false);\n options?.onOpenChange?.(false);\n }, [options]);\n\n const toggle = useCallback(() => {\n setIsOpen((prev) => {\n const next = !prev;\n options?.onOpenChange?.(next);\n return next;\n });\n }, [options]);\n\n return { isOpen, open, close, toggle };\n}\n","import type { ViewStyle } from 'react-native';\n\nexport interface SelectOption {\n readonly label: string;\n readonly value: string;\n readonly disabled?: boolean;\n}\n\nexport interface SelectOptionGroup {\n readonly label: string;\n readonly options: readonly SelectOption[];\n}\n\nexport type SelectItem = SelectOption | SelectOptionGroup;\n\nexport function isOptionGroup(item: SelectItem): item is SelectOptionGroup {\n return 'options' in item;\n}\n\nexport interface SelectProps {\n /** Flat options or grouped options */\n readonly options: readonly SelectItem[];\n /** Currently selected value */\n readonly value: string;\n /** Callback when selection changes */\n readonly onValueChange: (value: string) => void;\n /** Field label displayed above the trigger */\n readonly label?: string;\n /** Placeholder text when no value is selected */\n readonly placeholder?: string;\n /** Disabled state */\n readonly disabled?: boolean;\n /** Custom render for each option row */\n readonly renderOption?: (\n option: SelectOption,\n state: { readonly isSelected: boolean; readonly isFocused: boolean }\n ) => React.ReactNode;\n /** Custom render for the trigger display text */\n readonly renderValue?: (option: SelectOption | undefined) => React.ReactNode;\n /** Size variant. @default 'md' */\n readonly size?: 'sm' | 'md';\n /** Container style override */\n readonly style?: ViewStyle | ViewStyle[];\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nexport function getSelectStyles(\n tokens: ResolvedTokens,\n disabled: boolean,\n size: 'sm' | 'md',\n isOpen: boolean\n) {\n const isSm = size === 'sm';\n const fontSize = isSm ? tokens.typography.size.sm : tokens.typography.size.base;\n const iconSize = fontSize + 2;\n const iconSpace = iconSize + tokens.spacing.sm;\n const paddingVertical = isSm ? tokens.spacing.xs : tokens.spacing.sm;\n const paddingHorizontal = isSm ? tokens.spacing.sm : tokens.spacing.md;\n\n return StyleSheet.create({\n container: {\n gap: tokens.spacing.xs,\n zIndex: isOpen ? 999 : 0,\n },\n label: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n trigger: {\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: tokens.radius.md,\n paddingVertical,\n paddingLeft: paddingHorizontal,\n paddingRight: iconSpace + (isSm ? tokens.spacing.xs : tokens.spacing.sm),\n opacity: disabled ? 0.5 : 1,\n },\n triggerText: {\n flex: 1,\n fontFamily: tokens.typography.fonts.default,\n fontSize,\n color: disabled\n ? srgbToHex(tokens.textSecondary.srgb)\n : srgbToHex(tokens.textPrimary.srgb),\n },\n iconWrapper: {\n position: 'absolute',\n right: isSm ? tokens.spacing.xs : tokens.spacing.sm,\n top: 0,\n bottom: 0,\n justifyContent: 'center',\n },\n groupLabel: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.xs,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n textTransform: 'uppercase',\n letterSpacing: 0.5,\n paddingVertical: tokens.spacing.xs,\n paddingHorizontal: isSm ? tokens.spacing.sm : tokens.spacing.md,\n paddingTop: tokens.spacing.sm,\n },\n });\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { SelectOption } from './Select.types';\n\ninterface UseSelectOptions {\n readonly flatOptions: readonly SelectOption[];\n readonly value: string;\n readonly isOpen: boolean;\n readonly onSelect: (value: string) => void;\n readonly onClose: () => void;\n readonly onOpen: () => void;\n}\n\nfunction findNextEnabled(\n options: readonly SelectOption[],\n startIndex: number,\n direction: 1 | -1\n): number {\n const len = options.length;\n if (len === 0) return -1;\n\n for (let i = 1; i <= len; i++) {\n const idx = (startIndex + i * direction + len) % len;\n if (!options[idx].disabled) return idx;\n }\n return -1;\n}\n\nexport function useSelect({\n flatOptions,\n value,\n isOpen,\n onSelect,\n onClose,\n onOpen,\n}: UseSelectOptions) {\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const typeAheadRef = useRef('');\n const typeAheadTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n // When opening, focus the selected option or first enabled option\n useEffect(() => {\n if (isOpen) {\n const selectedIdx = flatOptions.findIndex((o) => o.value === value);\n if (selectedIdx >= 0 && !flatOptions[selectedIdx].disabled) {\n setFocusedIndex(selectedIdx);\n } else {\n const firstEnabled = flatOptions.findIndex((o) => !o.disabled);\n setFocusedIndex(firstEnabled >= 0 ? firstEnabled : -1);\n }\n } else {\n setFocusedIndex(-1);\n }\n }, [isOpen, flatOptions, value]);\n\n const handleKeyDown = useCallback(\n (e: any) => {\n const key: string = e.key;\n\n // When closed, open on ArrowDown/ArrowUp/Enter/Space\n if (!isOpen) {\n if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Enter' || key === ' ') {\n e.preventDefault();\n onOpen();\n }\n return;\n }\n\n switch (key) {\n case 'ArrowDown': {\n e.preventDefault();\n const next = findNextEnabled(flatOptions, focusedIndex, 1);\n if (next >= 0) setFocusedIndex(next);\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prev = findNextEnabled(flatOptions, focusedIndex, -1);\n if (prev >= 0) setFocusedIndex(prev);\n break;\n }\n case 'Enter':\n case ' ': {\n e.preventDefault();\n if (focusedIndex >= 0 && !flatOptions[focusedIndex].disabled) {\n onSelect(flatOptions[focusedIndex].value);\n }\n break;\n }\n case 'Escape': {\n e.preventDefault();\n onClose();\n break;\n }\n case 'Home': {\n e.preventDefault();\n const first = flatOptions.findIndex((o) => !o.disabled);\n if (first >= 0) setFocusedIndex(first);\n break;\n }\n case 'End': {\n e.preventDefault();\n const lastEnabled = [...flatOptions].reverse().findIndex((o) => !o.disabled);\n if (lastEnabled >= 0) setFocusedIndex(flatOptions.length - 1 - lastEnabled);\n break;\n }\n default: {\n // Type-ahead: single character matching\n if (key.length === 1 && !e.ctrlKey && !e.metaKey) {\n clearTimeout(typeAheadTimerRef.current);\n typeAheadRef.current += key.toLowerCase();\n\n const match = flatOptions.findIndex(\n (o) => !o.disabled && o.label.toLowerCase().startsWith(typeAheadRef.current)\n );\n if (match >= 0) setFocusedIndex(match);\n\n typeAheadTimerRef.current = setTimeout(() => {\n typeAheadRef.current = '';\n }, 500);\n }\n break;\n }\n }\n },\n [isOpen, focusedIndex, flatOptions, onSelect, onClose, onOpen]\n );\n\n return { focusedIndex, handleKeyDown };\n}\n","import React from 'react';\nimport { Pressable, Text, View } from 'react-native';\nimport type { SelectOption as SelectOptionType, SelectProps } from './Select.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { Icon } from '../Icon/Icon';\nimport { srgbToHex } from 'newtone';\n\ninterface SelectOptionRowProps {\n readonly option: SelectOptionType;\n readonly isSelected: boolean;\n readonly isFocused: boolean;\n readonly onSelect: () => void;\n readonly renderOption?: SelectProps['renderOption'];\n readonly size: 'sm' | 'md';\n}\n\nexport function SelectOptionRow({\n option,\n isSelected,\n isFocused,\n onSelect,\n renderOption,\n size,\n}: SelectOptionRowProps) {\n const tokens = useTokens(1);\n\n const paddingVertical = size === 'sm' ? tokens.spacing.xs : tokens.spacing.sm;\n const paddingHorizontal = size === 'sm' ? tokens.spacing.sm : tokens.spacing.md;\n const fontSize = size === 'sm' ? tokens.typography.size.sm : tokens.typography.size.base;\n\n if (renderOption) {\n return (\n <Pressable\n onPress={option.disabled ? undefined : onSelect}\n disabled={option.disabled}\n role=\"option\"\n aria-selected={isSelected}\n >\n {renderOption(option, { isSelected, isFocused })}\n </Pressable>\n );\n }\n\n return (\n <Pressable\n onPress={option.disabled ? undefined : onSelect}\n disabled={option.disabled}\n role=\"option\"\n aria-selected={isSelected}\n style={({ pressed }) => [\n {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n justifyContent: 'space-between' as const,\n paddingVertical,\n paddingHorizontal,\n },\n isSelected && {\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n },\n isFocused &&\n !isSelected && {\n backgroundColor: `${srgbToHex(tokens.border.srgb)}20`,\n },\n option.disabled && {\n opacity: 0.5,\n },\n pressed && {\n opacity: 0.7,\n },\n ]}\n >\n <Text\n style={[\n {\n flex: 1,\n fontFamily: tokens.typography.fonts.default,\n fontSize,\n color: srgbToHex(tokens.textPrimary.srgb),\n },\n isSelected && {\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.interactive.srgb),\n },\n option.disabled && {\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n ]}\n numberOfLines={1}\n >\n {option.label}\n </Text>\n {isSelected && (\n <View style={{ marginLeft: tokens.spacing.sm }}>\n <Icon\n name=\"check\"\n size={fontSize}\n color={srgbToHex(tokens.interactive.srgb)}\n />\n </View>\n )}\n </Pressable>\n );\n}\n","import React, { useMemo } from 'react';\nimport { View, Text, Pressable, ScrollView } from 'react-native';\nimport type { SelectProps, SelectOption } from './Select.types';\nimport { isOptionGroup } from './Select.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getSelectStyles } from './Select.styles';\nimport { Icon } from '../Icon/Icon';\nimport { Popover } from '../Popover/Popover';\nimport { usePopover } from '../Popover/usePopover';\nimport { useSelect } from './useSelect';\nimport { SelectOptionRow } from './SelectOption';\nimport { srgbToHex } from 'newtone';\n\nfunction flattenOptions(items: readonly (SelectOption | { readonly label: string; readonly options: readonly SelectOption[] })[]): SelectOption[] {\n const result: SelectOption[] = [];\n for (const item of items) {\n if ('options' in item) {\n result.push(...item.options);\n } else {\n result.push(item);\n }\n }\n return result;\n}\n\nexport function Select({\n options,\n value,\n onValueChange,\n label,\n placeholder,\n disabled = false,\n renderOption,\n renderValue,\n size = 'md',\n style,\n}: SelectProps) {\n const tokens = useTokens(1);\n const { isOpen, open, close, toggle } = usePopover();\n\n const flatOptions = useMemo(() => flattenOptions(options), [options]);\n\n const { focusedIndex, handleKeyDown } = useSelect({\n flatOptions,\n value,\n isOpen,\n onSelect: (v) => {\n onValueChange(v);\n close();\n },\n onClose: close,\n onOpen: open,\n });\n\n const styles = useMemo(\n () => getSelectStyles(tokens, disabled, size, isOpen),\n [tokens, disabled, size, isOpen]\n );\n\n const selectedOption = flatOptions.find((o) => o.value === value);\n const displayLabel = selectedOption?.label ?? placeholder ?? value;\n\n const iconColor = disabled\n ? srgbToHex(tokens.textSecondary.srgb)\n : srgbToHex(tokens.textPrimary.srgb);\n\n // onKeyDown is a web-only prop supported by react-native-web but not in RN types\n const triggerWebProps = { onKeyDown: handleKeyDown } as any;\n\n const trigger = (\n <Pressable\n onPress={disabled ? undefined : toggle}\n disabled={disabled}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup={'listbox' as any}\n {...triggerWebProps}\n style={styles.trigger}\n >\n {renderValue ? (\n renderValue(selectedOption)\n ) : (\n <Text style={styles.triggerText} numberOfLines={1}>\n {displayLabel}\n </Text>\n )}\n <View style={styles.iconWrapper} pointerEvents=\"none\">\n <Icon\n name={isOpen ? 'expand_less' : 'expand_more'}\n size={size === 'sm' ? tokens.typography.size.sm + 2 : tokens.typography.size.base + 2}\n color={iconColor}\n />\n </View>\n </Pressable>\n );\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : style ? [style] : [])]}>\n {label && <Text style={styles.label}>{label}</Text>}\n <Popover\n isOpen={isOpen && !disabled}\n onClose={close}\n trigger={trigger}\n >\n <ScrollView\n bounces={false}\n keyboardShouldPersistTaps=\"handled\"\n role={'listbox' as any}\n >\n {options.map((item) => {\n if (isOptionGroup(item)) {\n return (\n <View key={item.label}>\n <Text style={styles.groupLabel}>{item.label}</Text>\n {item.options.map((opt) => (\n <SelectOptionRow\n key={opt.value}\n option={opt}\n isSelected={opt.value === value}\n isFocused={flatOptions[focusedIndex]?.value === opt.value}\n onSelect={() => {\n onValueChange(opt.value);\n close();\n }}\n renderOption={renderOption}\n size={size}\n />\n ))}\n </View>\n );\n }\n return (\n <SelectOptionRow\n key={item.value}\n option={item}\n isSelected={item.value === value}\n isFocused={flatOptions[focusedIndex]?.value === item.value}\n onSelect={() => {\n onValueChange(item.value);\n close();\n }}\n renderOption={renderOption}\n size={size}\n />\n );\n })}\n </ScrollView>\n </Popover>\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nconst TRACK_WIDTH = 40;\nconst TRACK_HEIGHT = 22;\nconst THUMB_SIZE = 18;\nconst THUMB_OFFSET = 2;\n\nexport function getToggleStyles(\n tokens: ResolvedTokens,\n value: boolean,\n disabled: boolean\n) {\n return StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: tokens.spacing.sm,\n opacity: disabled ? 0.5 : 1,\n },\n label: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n track: {\n width: TRACK_WIDTH,\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n backgroundColor: value\n ? srgbToHex(tokens.interactive.srgb)\n : srgbToHex(tokens.border.srgb),\n justifyContent: 'center',\n paddingHorizontal: THUMB_OFFSET,\n },\n thumb: {\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: srgbToHex(tokens.background.srgb),\n alignSelf: value ? 'flex-end' : 'flex-start',\n },\n });\n}\n","import React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport type { ToggleProps } from './Toggle.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getToggleStyles } from './Toggle.styles';\n\nexport function Toggle({\n value,\n onValueChange,\n label,\n disabled = false,\n style,\n}: ToggleProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getToggleStyles(tokens, value, disabled),\n [tokens, value, disabled]\n );\n\n const handlePress = React.useCallback(() => {\n if (!disabled) {\n onValueChange(!value);\n }\n }, [disabled, value, onValueChange]);\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {label && <Text style={styles.label}>{label}</Text>}\n <Pressable\n onPress={handlePress}\n disabled={disabled}\n accessibilityRole=\"switch\"\n accessibilityState={{ checked: value, disabled }}\n >\n <View style={styles.track}>\n <View style={styles.thumb} />\n </View>\n </Pressable>\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nconst TRACK_HEIGHT = 6;\nexport const THUMB_SIZE = 16;\n\nexport function getSliderStyles(tokens: ResolvedTokens, disabled: boolean) {\n return StyleSheet.create({\n container: {\n gap: tokens.spacing.xs,\n opacity: disabled ? 0.5 : 1,\n },\n labelRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n label: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n value: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.medium as any,\n color: srgbToHex(tokens.textPrimary.srgb),\n },\n valueInput: {\n width: 48,\n paddingVertical: 0,\n paddingHorizontal: 4,\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: 4,\n backgroundColor: 'transparent',\n color: srgbToHex(tokens.textPrimary.srgb),\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.medium as any,\n textAlign: 'right',\n },\n trackContainer: {\n height: TRACK_HEIGHT + THUMB_SIZE,\n justifyContent: 'center',\n position: 'relative',\n },\n trackRail: {\n position: 'absolute',\n left: 0,\n right: 0,\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n backgroundColor: srgbToHex(tokens.border.srgb),\n },\n trackFill: {\n position: 'absolute',\n left: 0,\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n backgroundColor: srgbToHex(tokens.interactive.srgb),\n },\n thumb: {\n position: 'absolute',\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: srgbToHex(tokens.interactive.srgb),\n },\n });\n}\n","import React from 'react';\nimport { View, Text, TextInput, PanResponder } from 'react-native';\nimport type { SliderProps } from './Slider.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getSliderStyles, THUMB_SIZE } from './Slider.styles';\n\nexport function Slider({\n value,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n showValue = false,\n editableValue = false,\n disabled = false,\n style,\n}: SliderProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getSliderStyles(tokens, disabled),\n [tokens, disabled]\n );\n\n const trackRef = React.useRef<View>(null);\n const trackWidth = React.useRef(0);\n const trackPageX = React.useRef(0);\n\n // Mutable refs to avoid stale closures in PanResponder\n const onValueChangeRef = React.useRef(onValueChange);\n const minRef = React.useRef(min);\n const maxRef = React.useRef(max);\n const stepRef = React.useRef(step);\n const disabledRef = React.useRef(disabled);\n\n React.useEffect(() => { onValueChangeRef.current = onValueChange; }, [onValueChange]);\n React.useEffect(() => { minRef.current = min; }, [min]);\n React.useEffect(() => { maxRef.current = max; }, [max]);\n React.useEffect(() => { stepRef.current = step; }, [step]);\n React.useEffect(() => { disabledRef.current = disabled; }, [disabled]);\n\n const computeValue = React.useCallback((pageX: number) => {\n const localX = pageX - trackPageX.current;\n const ratio = Math.min(1, Math.max(0, localX / trackWidth.current));\n const raw = minRef.current + ratio * (maxRef.current - minRef.current);\n const stepped = Math.round(raw / stepRef.current) * stepRef.current;\n return Math.min(maxRef.current, Math.max(minRef.current, stepped));\n }, []);\n\n const panResponder = React.useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => !disabledRef.current,\n onMoveShouldSetPanResponder: () => !disabledRef.current,\n onPanResponderGrant: (evt) => {\n onValueChangeRef.current(computeValue(evt.nativeEvent.pageX));\n },\n onPanResponderMove: (_evt, gestureState) => {\n onValueChangeRef.current(computeValue(gestureState.moveX));\n },\n })\n ).current;\n\n const ratio = max > min ? (value - min) / (max - min) : 0;\n const usableWidth = Math.max(0, trackWidth.current - THUMB_SIZE);\n const thumbLeft = ratio * usableWidth;\n const fillWidth = thumbLeft + THUMB_SIZE / 2;\n\n const handleValueTextSubmit = React.useCallback(\n (text: string) => {\n const raw = Number(text);\n if (!Number.isNaN(raw)) {\n onValueChange(Math.min(max, Math.max(min, raw)));\n }\n },\n [onValueChange, min, max]\n );\n\n const [editText, setEditText] = React.useState(String(value));\n React.useEffect(() => { setEditText(String(value)); }, [value]);\n\n const showLabel = label || showValue || editableValue;\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {showLabel && (\n <View style={styles.labelRow}>\n {label && <Text style={styles.label}>{label}</Text>}\n {editableValue ? (\n <TextInput\n style={styles.valueInput}\n value={editText}\n keyboardType=\"numeric\"\n onChangeText={setEditText}\n onSubmitEditing={(e) => handleValueTextSubmit(e.nativeEvent.text)}\n onBlur={() => handleValueTextSubmit(editText)}\n selectTextOnFocus\n editable={!disabled}\n />\n ) : (\n showValue && <Text style={styles.value}>{value}</Text>\n )}\n </View>\n )}\n <View\n ref={trackRef}\n style={styles.trackContainer}\n onLayout={(e) => {\n trackWidth.current = e.nativeEvent.layout.width;\n trackRef.current?.measure((_x, _y, _w, _h, pageX) => {\n if (pageX != null) trackPageX.current = pageX;\n });\n }}\n {...panResponder.panHandlers}\n >\n <View style={styles.trackRail} />\n <View style={[styles.trackFill, { width: fillWidth }]} />\n <View style={[styles.thumb, { left: thumbLeft }]} />\n </View>\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nconst TRACK_HEIGHT = 22;\nexport const THUMB_SIZE = 18;\nconst SEGMENT_COUNT = 48;\n\n/** Convert an HSL hue (S=100%, L=50%) to a hex string. */\nexport function hueToHex(hue: number): string {\n const h = ((hue % 360) + 360) % 360;\n const x = 1 - Math.abs((h / 60) % 2 - 1);\n let r: number, g: number, b: number;\n if (h < 60) { r = 1; g = x; b = 0; }\n else if (h < 120) { r = x; g = 1; b = 0; }\n else if (h < 180) { r = 0; g = 1; b = x; }\n else if (h < 240) { r = 0; g = x; b = 1; }\n else if (h < 300) { r = x; g = 0; b = 1; }\n else { r = 1; g = 0; b = x; }\n const toHex = (v: number) => Math.round(v * 255).toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\n/** Build an array of hex colors for the gradient track segments. */\nexport function buildHueSegments(min: number, max: number): string[] {\n return Array.from({ length: SEGMENT_COUNT }, (_, i) => {\n const hue = min + (max - min) * (i / (SEGMENT_COUNT - 1));\n return hueToHex(hue);\n });\n}\n\nexport function getHueSliderStyles(tokens: ResolvedTokens, disabled: boolean) {\n return StyleSheet.create({\n container: {\n gap: tokens.spacing.xs,\n opacity: disabled ? 0.5 : 1,\n },\n labelRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n label: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n value: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.medium as any,\n color: srgbToHex(tokens.textPrimary.srgb),\n },\n valueInput: {\n width: 48,\n paddingVertical: 0,\n paddingHorizontal: 4,\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: 4,\n backgroundColor: 'transparent',\n color: srgbToHex(tokens.textPrimary.srgb),\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.medium as any,\n textAlign: 'right',\n },\n trackContainer: {\n height: TRACK_HEIGHT + THUMB_SIZE,\n justifyContent: 'center',\n position: 'relative',\n },\n gradientTrack: {\n position: 'absolute',\n left: 0,\n right: 0,\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n flexDirection: 'row',\n overflow: 'hidden',\n },\n segment: {\n flex: 1,\n },\n thumb: {\n position: 'absolute',\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: '#ffffff',\n borderWidth: 2,\n borderColor: srgbToHex(tokens.border.srgb),\n },\n });\n}\n","import React from 'react';\nimport { View, Text, TextInput, PanResponder } from 'react-native';\nimport type { HueSliderProps } from './HueSlider.types';\nimport { useTokens } from '../tokens/useTokens';\nimport {\n getHueSliderStyles,\n buildHueSegments,\n THUMB_SIZE,\n} from './HueSlider.styles';\n\n/**\n * Hue slider with rainbow gradient track.\n *\n * Value range: 0-359 (traditional color wheel hue).\n * 0=red, 60=yellow, 120=green, 180=cyan, 240=blue, 300=magenta.\n *\n * Optional min/max constrain the selectable range.\n * For wrapping ranges (e.g. red: min=345 max=375), max may exceed 359;\n * the returned value is always normalized to [0, 359].\n */\nexport function HueSlider({\n value,\n onValueChange,\n min = 0,\n max = 359,\n label,\n showValue = false,\n editableValue = false,\n disabled = false,\n style,\n}: HueSliderProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getHueSliderStyles(tokens, disabled),\n [tokens, disabled]\n );\n\n const segments = React.useMemo(\n () => buildHueSegments(min, max),\n [min, max]\n );\n\n const trackRef = React.useRef<View>(null);\n const trackWidth = React.useRef(0);\n const trackPageX = React.useRef(0);\n\n // Mutable refs to avoid stale closures in PanResponder\n const onValueChangeRef = React.useRef(onValueChange);\n const minRef = React.useRef(min);\n const maxRef = React.useRef(max);\n const disabledRef = React.useRef(disabled);\n\n React.useEffect(() => { onValueChangeRef.current = onValueChange; }, [onValueChange]);\n React.useEffect(() => { minRef.current = min; }, [min]);\n React.useEffect(() => { maxRef.current = max; }, [max]);\n React.useEffect(() => { disabledRef.current = disabled; }, [disabled]);\n\n const computeHue = React.useCallback((pageX: number) => {\n const localX = pageX - trackPageX.current;\n const ratio = Math.min(1, Math.max(0, localX / trackWidth.current));\n const raw = minRef.current + ratio * (maxRef.current - minRef.current);\n const stepped = Math.round(raw);\n return ((stepped % 360) + 360) % 360;\n }, []);\n\n const panResponder = React.useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => !disabledRef.current,\n onMoveShouldSetPanResponder: () => !disabledRef.current,\n onPanResponderGrant: (evt) => {\n onValueChangeRef.current(computeHue(evt.nativeEvent.pageX));\n },\n onPanResponderMove: (_evt, gestureState) => {\n onValueChangeRef.current(computeHue(gestureState.moveX));\n },\n })\n ).current;\n\n // For wrapping ranges (max > 359), convert stored value to slider range\n const sliderValue = max > 359 && value < min ? value + 360 : value;\n const ratio = max > min ? (sliderValue - min) / (max - min) : 0;\n const usableWidth = Math.max(0, trackWidth.current - THUMB_SIZE);\n const thumbLeft = ratio * usableWidth;\n\n const handleValueTextSubmit = React.useCallback(\n (text: string) => {\n const raw = Number(text);\n if (!Number.isNaN(raw)) {\n onValueChange(((raw % 360) + 360) % 360);\n }\n },\n [onValueChange]\n );\n\n const [editText, setEditText] = React.useState(String(value));\n React.useEffect(() => { setEditText(String(value)); }, [value]);\n\n const showLabel = label || showValue || editableValue;\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {showLabel && (\n <View style={styles.labelRow}>\n {label && <Text style={styles.label}>{label}</Text>}\n {editableValue ? (\n <TextInput\n style={styles.valueInput}\n value={editText}\n keyboardType=\"numeric\"\n onChangeText={setEditText}\n onSubmitEditing={(e) => handleValueTextSubmit(e.nativeEvent.text)}\n onBlur={() => handleValueTextSubmit(editText)}\n selectTextOnFocus\n editable={!disabled}\n />\n ) : (\n showValue && <Text style={styles.value}>{value}°</Text>\n )}\n </View>\n )}\n <View\n ref={trackRef}\n style={styles.trackContainer}\n onLayout={(e) => {\n trackWidth.current = e.nativeEvent.layout.width;\n trackRef.current?.measure((_x, _y, _w, _h, pageX) => {\n if (pageX != null) trackPageX.current = pageX;\n });\n }}\n {...panResponder.panHandlers}\n >\n <View style={styles.gradientTrack}>\n {segments.map((color, i) => (\n <View key={i} style={[styles.segment, { backgroundColor: color }]} />\n ))}\n </View>\n <View style={[styles.thumb, { left: thumbLeft }]} />\n </View>\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nconst TRACK_HEIGHT = 22;\nexport const THUMB_SIZE = 18;\n\nexport function getColorScaleSliderStyles(tokens: ResolvedTokens, disabled: boolean) {\n return StyleSheet.create({\n container: {\n gap: tokens.spacing.xs,\n opacity: disabled ? 0.5 : 1,\n },\n labelRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n label: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.sm,\n fontWeight: tokens.typography.weight.semibold as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n trackContainer: {\n height: TRACK_HEIGHT + THUMB_SIZE,\n justifyContent: 'center',\n position: 'relative',\n },\n gradientTrack: {\n position: 'absolute',\n left: 0,\n right: 0,\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n flexDirection: 'row',\n overflow: 'hidden',\n },\n segment: {\n flex: 1,\n },\n thumb: {\n position: 'absolute',\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: '#ffffff',\n borderWidth: 2,\n borderColor: srgbToHex(tokens.border.srgb),\n },\n warning: {\n fontFamily: tokens.typography.fonts.default,\n fontSize: tokens.typography.size.xs,\n fontWeight: tokens.typography.weight.medium as any,\n color: srgbToHex(tokens.error.srgb),\n },\n });\n}\n\nexport { TRACK_HEIGHT };\n","import React from 'react';\nimport { View, Text, PanResponder, Animated } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ColorScaleSliderProps } from './ColorScaleSlider.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getColorScaleSliderStyles, THUMB_SIZE } from './ColorScaleSlider.styles';\n\n/**\n * Interactive color scale slider.\n *\n * Renders an array of colors as the track (lightest on left, darkest on right)\n * with a draggable thumb. The value is a normalizedValue [0, 1] where\n * 0 = darkest (right) and 1 = lightest (left).\n *\n * Used by PalettePanel for key color selection on non-neutral palettes.\n */\nexport function ColorScaleSlider({\n colors,\n value,\n onValueChange,\n label,\n warning,\n trimEnds = false,\n snap = false,\n disabled = false,\n animateValue = false,\n style,\n}: ColorScaleSliderProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getColorScaleSliderStyles(tokens, disabled),\n [tokens, disabled]\n );\n\n const trackRef = React.useRef<View>(null);\n const trackWidth = React.useRef(0);\n const trackPageX = React.useRef(0);\n const isDragging = React.useRef(false);\n const thumbAnim = React.useRef(new Animated.Value(0)).current;\n\n // Mutable refs to avoid stale closures in PanResponder\n const onValueChangeRef = React.useRef(onValueChange);\n const disabledRef = React.useRef(disabled);\n const colorsLengthRef = React.useRef(colors.length);\n const trimEndsRef = React.useRef(trimEnds);\n const snapRef = React.useRef(snap);\n\n React.useEffect(() => { onValueChangeRef.current = onValueChange; }, [onValueChange]);\n React.useEffect(() => { disabledRef.current = disabled; }, [disabled]);\n React.useEffect(() => { colorsLengthRef.current = colors.length; }, [colors.length]);\n React.useEffect(() => { trimEndsRef.current = trimEnds; }, [trimEnds]);\n React.useEffect(() => { snapRef.current = snap; }, [snap]);\n\n const computeNv = React.useCallback((pageX: number) => {\n const localX = pageX - trackPageX.current;\n const ratio = Math.min(1, Math.max(0, localX / trackWidth.current));\n const totalSteps = colorsLengthRef.current - 1;\n const minNV = trimEndsRef.current ? 1 / totalSteps : 0;\n const maxNV = trimEndsRef.current ? 1 - 1 / totalSteps : 1;\n const range = maxNV - minNV;\n\n // Left = lightest (maxNV), right = darkest (minNV)\n let nv = maxNV - ratio * range;\n\n if (snapRef.current && totalSteps > 0) {\n const stepNv = 1 / totalSteps;\n nv = Math.round(nv / stepNv) * stepNv;\n nv = Math.min(maxNV, Math.max(minNV, nv));\n }\n\n return nv;\n }, []);\n\n const panResponder = React.useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => !disabledRef.current,\n onMoveShouldSetPanResponder: () => !disabledRef.current,\n onPanResponderGrant: (evt) => {\n isDragging.current = true;\n onValueChangeRef.current(computeNv(evt.nativeEvent.pageX));\n },\n onPanResponderMove: (_evt, gestureState) => {\n onValueChangeRef.current(computeNv(gestureState.moveX));\n },\n onPanResponderRelease: () => {\n isDragging.current = false;\n },\n onPanResponderTerminate: () => {\n isDragging.current = false;\n },\n })\n ).current;\n\n // Visible colors: trim interpolation endpoints if requested\n const visibleColors = trimEnds ? colors.slice(1, -1) : colors;\n\n // Thumb position mapped to the visible range\n const totalSteps = colors.length - 1;\n const minNV = trimEnds ? 1 / totalSteps : 0;\n const maxNV = trimEnds ? 1 - 1 / totalSteps : 1;\n const range = maxNV - minNV;\n const clampedValue = value !== undefined\n ? Math.min(maxNV, Math.max(minNV, value))\n : (maxNV + minNV) / 2;\n const ratio = range > 0 ? (maxNV - clampedValue) / range : 0.5;\n const usableWidth = Math.max(0, trackWidth.current - THUMB_SIZE);\n const thumbLeft = ratio * usableWidth;\n\n // Sync animated thumb position: animate on prop-driven changes, instant during drag\n React.useEffect(() => {\n if (isDragging.current || !animateValue) {\n thumbAnim.setValue(thumbLeft);\n } else {\n Animated.timing(thumbAnim, {\n toValue: thumbLeft,\n duration: 300,\n useNativeDriver: false,\n }).start();\n }\n }, [thumbLeft, animateValue, thumbAnim]);\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {label && (\n <View style={styles.labelRow}>\n <Text style={styles.label}>{label}</Text>\n </View>\n )}\n <View\n ref={trackRef}\n style={styles.trackContainer}\n onLayout={(e) => {\n trackWidth.current = e.nativeEvent.layout.width;\n // Set thumb position immediately on layout (no animation)\n const newUsableWidth = Math.max(0, e.nativeEvent.layout.width - THUMB_SIZE);\n thumbAnim.setValue(ratio * newUsableWidth);\n trackRef.current?.measure((_x, _y, _w, _h, pageX) => {\n if (pageX != null) trackPageX.current = pageX;\n });\n }}\n {...panResponder.panHandlers}\n >\n <View style={styles.gradientTrack}>\n {visibleColors.map((color, i) => (\n <View key={i} style={[styles.segment, { backgroundColor: srgbToHex(color.srgb) }]} />\n ))}\n </View>\n <Animated.View style={[styles.thumb, { left: thumbAnim }]} />\n </View>\n {warning && (\n <Text style={styles.warning}>{warning}</Text>\n )}\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nexport function getAppShellStyles(tokens: ResolvedTokens) {\n return StyleSheet.create({\n container: {\n flex: 1,\n flexDirection: 'row',\n overflow: 'hidden',\n backgroundColor: srgbToHex(tokens.background.srgb),\n },\n main: {\n flex: 1,\n flexDirection: 'column',\n minWidth: 0,\n overflow: 'hidden',\n },\n });\n}\n","import React from 'react';\nimport { View } from 'react-native';\nimport type { AppShellProps } from './AppShell.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getAppShellStyles } from './AppShell.styles';\n\nexport function AppShell({ sidebar, children }: AppShellProps) {\n const tokens = useTokens();\n const styles = React.useMemo(() => getAppShellStyles(tokens), [tokens]);\n\n return (\n <View style={styles.container}>\n {sidebar}\n <View style={styles.main}>{children}</View>\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\ninterface SidebarStyleInput {\n readonly tokens: ResolvedTokens;\n readonly width: number;\n readonly bordered: boolean;\n}\n\nexport function getSidebarStyles({ tokens, width, bordered }: SidebarStyleInput) {\n const borderColor = srgbToHex(tokens.border.srgb);\n\n return StyleSheet.create({\n container: {\n width,\n flexShrink: 0,\n flexDirection: 'column',\n backgroundColor: srgbToHex(tokens.background.srgb),\n borderRightWidth: bordered ? 1 : 0,\n borderRightColor: borderColor,\n },\n header: {\n flexShrink: 0,\n borderBottomWidth: 1,\n borderBottomColor: borderColor,\n },\n body: {\n flex: 1,\n },\n footer: {\n flexShrink: 0,\n borderTopWidth: 1,\n borderTopColor: borderColor,\n },\n });\n}\n","import React from 'react';\nimport { View, ScrollView } from 'react-native';\nimport type { SidebarProps } from './Sidebar.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getSidebarStyles } from './Sidebar.styles';\n\nexport function Sidebar({\n children,\n header,\n footer,\n width = 260,\n bordered = true,\n}: SidebarProps) {\n const tokens = useTokens();\n const styles = React.useMemo(\n () => getSidebarStyles({ tokens, width, bordered }),\n [tokens, width, bordered]\n );\n\n return (\n <View style={styles.container}>\n {header && <View style={styles.header}>{header}</View>}\n <ScrollView style={styles.body}>{children}</ScrollView>\n {footer && <View style={styles.footer}>{footer}</View>}\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\ninterface NavbarStyleInput {\n readonly tokens: ResolvedTokens;\n readonly height: number;\n readonly bordered: boolean;\n}\n\nexport function getNavbarStyles({ tokens, height, bordered }: NavbarStyleInput) {\n const borderColor = srgbToHex(tokens.border.srgb);\n\n return StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n height,\n flexShrink: 0,\n paddingHorizontal: 24,\n backgroundColor: srgbToHex(tokens.background.srgb),\n borderBottomWidth: bordered ? 1 : 0,\n borderBottomColor: borderColor,\n },\n left: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n },\n right: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n },\n });\n}\n","import React from 'react';\nimport { View } from 'react-native';\nimport type { NavbarProps } from './Navbar.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getNavbarStyles } from './Navbar.styles';\n\nexport function Navbar({\n children,\n left,\n right,\n height = 56,\n bordered = true,\n}: NavbarProps) {\n const tokens = useTokens();\n const styles = React.useMemo(\n () => getNavbarStyles({ tokens, height, bordered }),\n [tokens, height, bordered]\n );\n\n return (\n <View style={styles.container}>\n {children ? (\n children\n ) : (\n <>\n <View style={styles.left}>{left}</View>\n <View style={styles.right}>{right}</View>\n </>\n )}\n </View>\n );\n}\n","import type { CategoryMeta, ComponentMeta } from './types';\n\nexport const CATEGORIES: readonly CategoryMeta[] = [\n { id: 'actions', name: 'Actions', description: 'Interactive elements that trigger actions' },\n { id: 'form-controls', name: 'Form Controls', description: 'Input elements for user data entry' },\n { id: 'range-inputs', name: 'Range Inputs', description: 'Slider controls for numeric values' },\n { id: 'layout', name: 'Layout', description: 'Structural and container components' },\n];\n\nexport const COMPONENTS: readonly ComponentMeta[] = [\n {\n id: 'button',\n name: 'Button',\n importName: 'Button',\n categoryId: 'actions',\n description: 'Interactive button with multiple variants, sizes, and optional icon',\n hasChildren: true,\n variants: [\n { id: 'primary-md', label: 'Primary', props: { variant: 'primary', size: 'md' } },\n { id: 'secondary-md', label: 'Secondary', props: { variant: 'secondary', size: 'md' } },\n { id: 'ghost-md', label: 'Ghost', props: { variant: 'ghost', size: 'md' } },\n { id: 'outline-md', label: 'Outline', props: { variant: 'outline', size: 'md' } },\n { id: 'primary-sm', label: 'Primary Small', props: { variant: 'primary', size: 'sm' } },\n { id: 'primary-lg', label: 'Primary Large', props: { variant: 'primary', size: 'lg' } },\n { id: 'icon-left', label: 'Icon Left', props: { variant: 'primary', size: 'md', icon: 'add' } },\n { id: 'icon-right', label: 'Icon Right', props: { variant: 'primary', size: 'md', icon: 'arrow_forward', iconPosition: 'right' } },\n { id: 'icon-only', label: 'Icon Only', props: { variant: 'ghost', size: 'md', icon: 'settings' } },\n ],\n editableProps: [\n {\n name: 'variant',\n label: 'Variant',\n control: 'select',\n options: [\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Ghost', value: 'ghost' },\n { label: 'Outline', value: 'outline' },\n ],\n defaultValue: 'primary',\n },\n {\n name: 'size',\n label: 'Size',\n control: 'select',\n options: [\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n ],\n defaultValue: 'md',\n },\n {\n name: 'icon',\n label: 'Icon',\n control: 'text',\n defaultValue: '',\n },\n {\n name: 'iconPosition',\n label: 'Icon Position',\n control: 'select',\n options: [\n { label: 'Left', value: 'left' },\n { label: 'Right', value: 'right' },\n ],\n defaultValue: 'left',\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'text-input',\n name: 'TextInput',\n importName: 'TextInput',\n categoryId: 'form-controls',\n description: 'Text input field with label support',\n hasChildren: false,\n variants: [\n { id: 'default', label: 'Default', props: { label: 'Label', value: 'Sample text' } },\n { id: 'empty', label: 'Empty', props: { label: 'Email', value: '' } },\n { id: 'disabled', label: 'Disabled', props: { label: 'Disabled', value: 'Read only', disabled: true } },\n ],\n editableProps: [\n {\n name: 'label',\n label: 'Label',\n control: 'text',\n defaultValue: 'Label',\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'select',\n name: 'Select',\n importName: 'Select',\n categoryId: 'form-controls',\n description: 'Dropdown selector with options',\n hasChildren: false,\n variants: [\n {\n id: 'default',\n label: 'Default',\n props: {\n label: 'Choose an option',\n value: 'option-1',\n options: [\n { label: 'Option 1', value: 'option-1' },\n { label: 'Option 2', value: 'option-2' },\n { label: 'Option 3', value: 'option-3' },\n ],\n },\n },\n {\n id: 'disabled',\n label: 'Disabled',\n props: {\n label: 'Disabled select',\n value: 'option-1',\n disabled: true,\n options: [{ label: 'Option 1', value: 'option-1' }],\n },\n },\n ],\n editableProps: [\n {\n name: 'label',\n label: 'Label',\n control: 'text',\n defaultValue: 'Choose an option',\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'toggle',\n name: 'Toggle',\n importName: 'Toggle',\n categoryId: 'form-controls',\n description: 'Binary switch component',\n hasChildren: false,\n variants: [\n { id: 'on', label: 'On', props: { label: 'Enabled', value: true } },\n { id: 'off', label: 'Off', props: { label: 'Disabled', value: false } },\n { id: 'disabled', label: 'Disabled', props: { label: 'Locked', value: true, disabled: true } },\n ],\n editableProps: [\n {\n name: 'label',\n label: 'Label',\n control: 'text',\n defaultValue: 'Toggle',\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'slider',\n name: 'Slider',\n importName: 'Slider',\n categoryId: 'range-inputs',\n description: 'Numeric range slider',\n hasChildren: false,\n variants: [\n { id: 'default', label: 'Default', props: { label: 'Volume', value: 50, min: 0, max: 100 } },\n { id: 'with-step', label: 'With Step', props: { label: 'Steps', value: 3, min: 0, max: 10, step: 1, showValue: true } },\n ],\n editableProps: [\n {\n name: 'label',\n label: 'Label',\n control: 'text',\n defaultValue: 'Slider',\n },\n {\n name: 'min',\n label: 'Min',\n control: 'number',\n defaultValue: 0,\n },\n {\n name: 'max',\n label: 'Max',\n control: 'number',\n defaultValue: 100,\n },\n {\n name: 'showValue',\n label: 'Show Value',\n control: 'toggle',\n defaultValue: false,\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'hue-slider',\n name: 'HueSlider',\n importName: 'HueSlider',\n categoryId: 'range-inputs',\n description: 'Specialized slider for hue selection (0-360\\u00b0)',\n hasChildren: false,\n variants: [\n { id: 'default', label: 'Default', props: { label: 'Hue', value: 180 } },\n { id: 'red', label: 'Red', props: { label: 'Warm Hue', value: 0 } },\n { id: 'blue', label: 'Blue', props: { label: 'Cool Hue', value: 240 } },\n ],\n editableProps: [\n {\n name: 'label',\n label: 'Label',\n control: 'text',\n defaultValue: 'Hue',\n },\n {\n name: 'showValue',\n label: 'Show Value',\n control: 'toggle',\n defaultValue: false,\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'frame',\n name: 'Frame',\n importName: 'Frame',\n categoryId: 'layout',\n description: 'Foundational layout container with theme, elevation, spacing, and interactivity',\n hasChildren: true,\n variants: [\n { id: 'default', label: 'Default', props: {} },\n { id: 'primary', label: 'Primary', props: { theme: 'primary' } },\n { id: 'secondary', label: 'Secondary', props: { theme: 'secondary' } },\n { id: 'strong', label: 'Strong', props: { theme: 'strong' } },\n { id: 'deeply-sunken', label: 'Deeply Sunken', props: { elevation: -2, radius: 'md' } },\n { id: 'sunken', label: 'Sunken', props: { elevation: -1 } },\n { id: 'elevated', label: 'Elevated', props: { elevation: 1 } },\n { id: 'prominent', label: 'Prominent', props: { elevation: 2, radius: 'lg' } },\n { id: 'padded', label: 'Padded', props: { padding: 'lg', gap: 'md' } },\n { id: 'horizontal', label: 'Horizontal', props: { direction: 'horizontal', gap: 'md', align: 'center' } },\n { id: 'grid-3col', label: '3-Column Grid', props: { layout: 'grid', columns: 3, gap: 'md' } },\n { id: 'card-like', label: 'Card-like', props: { radius: 'lg', padding: 'lg', bordered: true, elevation: 1 } },\n ],\n editableProps: [\n {\n name: 'theme',\n label: 'Theme',\n control: 'select',\n options: [\n { label: 'Neutral', value: 'neutral' },\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Strong', value: 'strong' },\n ],\n defaultValue: 'neutral',\n },\n {\n name: 'elevation',\n label: 'Elevation',\n control: 'select',\n options: [\n { label: 'Deeply Sunken (-2)', value: -2 },\n { label: 'Sunken (-1)', value: -1 },\n { label: 'Default (0)', value: 0 },\n { label: 'Elevated (1)', value: 1 },\n { label: 'Prominent (2)', value: 2 },\n ],\n defaultValue: 0,\n },\n {\n name: 'direction',\n label: 'Direction',\n control: 'select',\n options: [\n { label: 'Vertical', value: 'vertical' },\n { label: 'Horizontal', value: 'horizontal' },\n ],\n defaultValue: 'vertical',\n },\n {\n name: 'padding',\n label: 'Padding',\n control: 'select',\n options: [\n { label: 'None', value: '' },\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n { label: 'Extra Large', value: 'xl' },\n ],\n defaultValue: '',\n },\n {\n name: 'gap',\n label: 'Gap',\n control: 'select',\n options: [\n { label: 'None', value: '' },\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n ],\n defaultValue: '',\n },\n {\n name: 'radius',\n label: 'Radius',\n control: 'select',\n options: [\n { label: 'None', value: 'none' },\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n { label: 'Pill', value: 'pill' },\n ],\n defaultValue: 'none',\n },\n {\n name: 'bordered',\n label: 'Bordered',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'card',\n name: 'Card',\n importName: 'Card',\n categoryId: 'layout',\n description: 'Surface container with elevation levels',\n hasChildren: true,\n variants: [\n { id: 'elevation-0', label: 'Elevation 0', props: { elevation: 0 } },\n { id: 'elevation-1', label: 'Elevation 1', props: { elevation: 1 } },\n { id: 'elevation-2', label: 'Elevation 2', props: { elevation: 2 } },\n ],\n editableProps: [\n {\n name: 'elevation',\n label: 'Elevation',\n control: 'select',\n options: [\n { label: 'Level 0', value: 0 },\n { label: 'Level 1', value: 1 },\n { label: 'Level 2', value: 2 },\n ],\n defaultValue: 0,\n },\n {\n name: 'disabled',\n label: 'Disabled',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n];\n\nexport function getComponent(id: string): ComponentMeta | undefined {\n return COMPONENTS.find((c) => c.id === id);\n}\n\nexport function getCategory(id: string): CategoryMeta | undefined {\n return CATEGORIES.find((c) => c.id === id);\n}\n\nexport function getComponentsByCategory(categoryId: string): readonly ComponentMeta[] {\n return COMPONENTS.filter((c) => c.categoryId === categoryId);\n}\n","import type { ComponentMeta } from './types';\n\n/**\n * Handler props that should be included as placeholders in generated code.\n * Maps component ID to the handler props it needs.\n */\nconst HANDLER_PROPS: Record<string, readonly string[]> = {\n button: ['onPress={() => {}}'],\n 'text-input': ['value={value}', 'onChangeText={setValue}'],\n select: ['value={value}', 'onValueChange={setValue}'],\n toggle: ['value={value}', 'onValueChange={setValue}'],\n slider: ['value={value}', 'onValueChange={setValue}'],\n 'hue-slider': ['value={value}', 'onValueChange={setValue}'],\n};\n\n/**\n * Default children content for components with children.\n */\nconst CHILDREN_CONTENT: Record<string, string> = {\n button: 'Button',\n card: '{/* content */}',\n frame: '{/* content */}',\n};\n\n/**\n * Generates a ready-to-paste JSX code snippet for a component with the given prop overrides.\n *\n * - Includes the import statement\n * - Omits props that match their default values\n * - Adds placeholder handlers for interactive props\n * - Formats Select's options as a const declaration\n */\nexport function generateComponentCode(\n component: ComponentMeta,\n propOverrides: Record<string, unknown>,\n): string {\n const lines: string[] = [];\n\n // Import line\n lines.push(`import { ${component.importName} } from '@newtonedev/components';`);\n\n // Select needs options declaration above JSX\n if (component.id === 'select') {\n lines.push('');\n lines.push('const options = [');\n lines.push(\" { label: 'Option 1', value: 'option-1' },\");\n lines.push(\" { label: 'Option 2', value: 'option-2' },\");\n lines.push(\" { label: 'Option 3', value: 'option-3' },\");\n lines.push('];');\n }\n\n lines.push('');\n\n // Build props string\n const propEntries: string[] = [];\n\n // Add editable props (only non-default values)\n for (const prop of component.editableProps) {\n const value = propOverrides[prop.name] ?? prop.defaultValue;\n if (value === prop.defaultValue) continue;\n\n propEntries.push(formatProp(prop.name, value));\n }\n\n // Add handler/runtime props\n const handlers = HANDLER_PROPS[component.id];\n if (handlers) {\n for (const handler of handlers) {\n propEntries.push(handler);\n }\n }\n\n // Special case: Select gets options={options} reference\n if (component.id === 'select') {\n propEntries.push('options={options}');\n }\n\n // Build the JSX\n const children = CHILDREN_CONTENT[component.id];\n const hasProps = propEntries.length > 0;\n const tag = component.importName;\n\n if (component.hasChildren && children) {\n if (hasProps && propEntries.length <= 3) {\n // Single-line opening tag\n lines.push(`<${tag} ${propEntries.join(' ')}>`);\n lines.push(` ${children}`);\n lines.push(`</${tag}>`);\n } else if (hasProps) {\n // Multi-line opening tag\n lines.push(`<${tag}`);\n for (const entry of propEntries) {\n lines.push(` ${entry}`);\n }\n lines.push('>');\n lines.push(` ${children}`);\n lines.push(`</${tag}>`);\n } else {\n lines.push(`<${tag}>`);\n lines.push(` ${children}`);\n lines.push(`</${tag}>`);\n }\n } else {\n // Self-closing tag\n if (hasProps && propEntries.length <= 3) {\n lines.push(`<${tag} ${propEntries.join(' ')} />`);\n } else if (hasProps) {\n lines.push(`<${tag}`);\n for (const entry of propEntries) {\n lines.push(` ${entry}`);\n }\n lines.push('/>');\n } else {\n lines.push(`<${tag} />`);\n }\n }\n\n return lines.join('\\n');\n}\n\nfunction formatProp(name: string, value: unknown): string {\n if (typeof value === 'string') {\n return `${name}=\"${value}\"`;\n }\n if (typeof value === 'boolean') {\n return value ? name : `${name}={false}`;\n }\n if (typeof value === 'number') {\n return `${name}={${value}}`;\n }\n return `${name}={${JSON.stringify(value)}}`;\n}\n","export interface GoogleFontEntry {\n readonly family: string;\n readonly category: 'sans-serif' | 'serif' | 'monospace' | 'display';\n readonly fallback: string;\n}\n\n/**\n * Curated list of popular Google Fonts organized by category.\n * Used by the font picker UI and the GoogleFontLoader.\n */\nexport const GOOGLE_FONTS: readonly GoogleFontEntry[] = [\n // Sans-serif\n { family: 'Inter', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Roboto', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Open Sans', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Lato', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Montserrat', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Poppins', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Nunito', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Source Sans 3', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Work Sans', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Raleway', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'DM Sans', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Plus Jakarta Sans', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Outfit', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Space Grotesk', category: 'sans-serif', fallback: 'sans-serif' },\n { family: 'Manrope', category: 'sans-serif', fallback: 'sans-serif' },\n\n // Serif\n { family: 'Playfair Display', category: 'serif', fallback: 'serif' },\n { family: 'Merriweather', category: 'serif', fallback: 'serif' },\n { family: 'Lora', category: 'serif', fallback: 'serif' },\n { family: 'Libre Baskerville', category: 'serif', fallback: 'serif' },\n { family: 'Source Serif 4', category: 'serif', fallback: 'serif' },\n { family: 'Bitter', category: 'serif', fallback: 'serif' },\n { family: 'Cormorant Garamond', category: 'serif', fallback: 'serif' },\n { family: 'EB Garamond', category: 'serif', fallback: 'serif' },\n { family: 'Crimson Text', category: 'serif', fallback: 'serif' },\n { family: 'Noto Serif', category: 'serif', fallback: 'serif' },\n\n // Monospace\n { family: 'Fira Code', category: 'monospace', fallback: 'monospace' },\n { family: 'JetBrains Mono', category: 'monospace', fallback: 'monospace' },\n { family: 'Source Code Pro', category: 'monospace', fallback: 'monospace' },\n { family: 'IBM Plex Mono', category: 'monospace', fallback: 'monospace' },\n { family: 'Roboto Mono', category: 'monospace', fallback: 'monospace' },\n { family: 'Space Mono', category: 'monospace', fallback: 'monospace' },\n { family: 'Ubuntu Mono', category: 'monospace', fallback: 'monospace' },\n { family: 'Inconsolata', category: 'monospace', fallback: 'monospace' },\n\n // Display\n { family: 'Abril Fatface', category: 'display', fallback: 'serif' },\n { family: 'Bebas Neue', category: 'display', fallback: 'sans-serif' },\n { family: 'Oswald', category: 'display', fallback: 'sans-serif' },\n { family: 'Righteous', category: 'display', fallback: 'sans-serif' },\n { family: 'Lobster', category: 'display', fallback: 'cursive' },\n { family: 'Pacifico', category: 'display', fallback: 'cursive' },\n { family: 'Comfortaa', category: 'display', fallback: 'sans-serif' },\n { family: 'Fredoka', category: 'display', fallback: 'sans-serif' },\n];\n\nexport interface SystemFontEntry {\n readonly family: string;\n readonly category: 'sans-serif' | 'serif' | 'monospace';\n readonly fallback: string;\n}\n\n/**\n * System font options that don't require external loading.\n */\nexport const SYSTEM_FONTS: readonly SystemFontEntry[] = [\n {\n family: 'system-ui',\n category: 'sans-serif',\n fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n {\n family: 'ui-monospace',\n category: 'monospace',\n fallback: 'SFMono-Regular, Menlo, Monaco, Consolas, monospace',\n },\n {\n family: 'ui-serif',\n category: 'serif',\n fallback: 'Georgia, \"Times New Roman\", serif',\n },\n];\n"]}
|