@newtonedev/components 0.1.2 → 0.1.4
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/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.styles.d.ts +64 -1
- package/dist/Popover/Popover.styles.d.ts.map +1 -1
- package/dist/Select/Select.d.ts.map +1 -1
- package/dist/_COMPONENT_TEMPLATE/ComponentName.d.ts +70 -0
- package/dist/_COMPONENT_TEMPLATE/ComponentName.d.ts.map +1 -0
- package/dist/_COMPONENT_TEMPLATE/ComponentName.styles.d.ts +22 -0
- package/dist/_COMPONENT_TEMPLATE/ComponentName.styles.d.ts.map +1 -0
- package/dist/_COMPONENT_TEMPLATE/ComponentName.types.d.ts +45 -0
- package/dist/_COMPONENT_TEMPLATE/ComponentName.types.d.ts.map +1 -0
- package/dist/_COMPONENT_TEMPLATE/index.d.ts +3 -0
- package/dist/_COMPONENT_TEMPLATE/index.d.ts.map +1 -0
- package/dist/fonts/GoogleFontLoader.d.ts.map +1 -1
- package/dist/fonts/IconFontLoader.d.ts.map +1 -1
- package/dist/index.cjs +371 -74
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +11 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +370 -76
- package/dist/index.js.map +1 -1
- package/dist/{Frame → primitives/Frame}/Frame.d.ts +1 -1
- package/dist/primitives/Frame/Frame.d.ts.map +1 -0
- package/dist/{Frame → primitives/Frame}/Frame.styles.d.ts +11 -2
- package/dist/primitives/Frame/Frame.styles.d.ts.map +1 -0
- package/dist/primitives/Frame/Frame.types.d.ts +240 -0
- package/dist/primitives/Frame/Frame.types.d.ts.map +1 -0
- package/dist/{Frame → primitives/Frame}/Frame.utils.d.ts +12 -12
- package/dist/primitives/Frame/Frame.utils.d.ts.map +1 -0
- package/dist/primitives/Frame/index.d.ts.map +1 -0
- package/dist/primitives/Icon/Icon.d.ts +17 -0
- package/dist/primitives/Icon/Icon.d.ts.map +1 -0
- package/dist/primitives/Icon/Icon.types.d.ts +55 -0
- package/dist/primitives/Icon/Icon.types.d.ts.map +1 -0
- package/dist/primitives/Icon/index.d.ts +3 -0
- package/dist/primitives/Icon/index.d.ts.map +1 -0
- package/dist/primitives/Text/Text.d.ts +17 -0
- package/dist/primitives/Text/Text.d.ts.map +1 -0
- package/dist/primitives/Text/Text.types.d.ts +85 -0
- package/dist/primitives/Text/Text.types.d.ts.map +1 -0
- package/dist/primitives/Text/index.d.ts +3 -0
- package/dist/primitives/Text/index.d.ts.map +1 -0
- package/dist/primitives/Wrapper/Wrapper.d.ts +29 -0
- package/dist/primitives/Wrapper/Wrapper.d.ts.map +1 -0
- package/dist/primitives/Wrapper/Wrapper.styles.d.ts +28 -0
- package/dist/primitives/Wrapper/Wrapper.styles.d.ts.map +1 -0
- package/dist/primitives/Wrapper/Wrapper.types.d.ts +113 -0
- package/dist/primitives/Wrapper/Wrapper.types.d.ts.map +1 -0
- package/dist/primitives/Wrapper/index.d.ts +3 -0
- package/dist/primitives/Wrapper/index.d.ts.map +1 -0
- package/dist/primitives/index.d.ts +12 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/useFocusVisible.d.ts +29 -0
- package/dist/primitives/useFocusVisible.d.ts.map +1 -0
- package/dist/theme/defaults.d.ts.map +1 -1
- package/dist/theme/types.d.ts +13 -6
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/tokens/computeTokens.d.ts +13 -6
- package/dist/tokens/computeTokens.d.ts.map +1 -1
- package/dist/tokens/types.d.ts +16 -7
- package/dist/tokens/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Button/Button.styles.ts +9 -9
- package/src/Button/Button.tsx +1 -1
- package/src/Card/Card.styles.ts +1 -1
- package/src/ColorScaleSlider/ColorScaleSlider.styles.ts +1 -1
- package/src/HueSlider/HueSlider.styles.ts +1 -1
- package/src/Popover/Popover.styles.ts +5 -1
- package/src/Popover/Popover.tsx +3 -1
- package/src/Select/Select.styles.ts +9 -9
- package/src/Select/Select.tsx +2 -3
- package/src/Select/SelectOption.tsx +6 -6
- package/src/Slider/Slider.styles.ts +1 -1
- package/src/TextInput/TextInput.styles.ts +3 -3
- package/src/Toggle/Toggle.styles.ts +1 -1
- package/src/_COMPONENT_TEMPLATE/ComponentName.styles.ts +29 -0
- package/src/_COMPONENT_TEMPLATE/ComponentName.tsx +106 -0
- package/src/_COMPONENT_TEMPLATE/ComponentName.types.ts +86 -0
- package/src/_COMPONENT_TEMPLATE/index.ts +2 -0
- package/src/fonts/GoogleFontLoader.tsx +2 -0
- package/src/fonts/IconFontLoader.tsx +2 -0
- package/src/index.ts +22 -5
- package/src/{Frame → primitives/Frame}/Frame.styles.ts +46 -9
- package/src/{Frame → primitives/Frame}/Frame.tsx +90 -16
- package/src/primitives/Frame/Frame.types.ts +315 -0
- package/src/{Frame → primitives/Frame}/Frame.utils.ts +56 -20
- package/src/primitives/Icon/Icon.tsx +89 -0
- package/src/primitives/Icon/Icon.types.ts +70 -0
- package/src/primitives/Icon/index.ts +2 -0
- package/src/primitives/Text/Text.tsx +90 -0
- package/src/primitives/Text/Text.types.ts +108 -0
- package/src/primitives/Text/index.ts +10 -0
- package/src/primitives/Wrapper/Wrapper.styles.ts +113 -0
- package/src/primitives/Wrapper/Wrapper.tsx +104 -0
- package/src/primitives/Wrapper/Wrapper.types.ts +149 -0
- package/src/primitives/Wrapper/index.ts +2 -0
- package/src/primitives/index.ts +46 -0
- package/src/primitives/useFocusVisible.ts +102 -0
- package/src/theme/defaults.ts +13 -6
- package/src/theme/types.ts +13 -6
- package/src/tokens/computeTokens.ts +1 -1
- package/src/tokens/types.ts +16 -7
- package/dist/Frame/Frame.d.ts.map +0 -1
- package/dist/Frame/Frame.styles.d.ts.map +0 -1
- package/dist/Frame/Frame.types.d.ts +0 -115
- package/dist/Frame/Frame.types.d.ts.map +0 -1
- package/dist/Frame/Frame.utils.d.ts.map +0 -1
- package/dist/Frame/index.d.ts.map +0 -1
- package/dist/Icon/Icon.d.ts +0 -36
- package/dist/Icon/Icon.d.ts.map +0 -1
- package/src/Frame/Frame.types.ts +0 -181
- package/src/Icon/Icon.tsx +0 -76
- /package/dist/{Frame → primitives/Frame}/index.d.ts +0 -0
- /package/src/{Frame → primitives/Frame}/index.ts +0 -0
package/dist/index.js.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":["useRef","useEffect","React","createContext","useContext","useMemo","srgbToHex","Text","StyleSheet","Pressable","View","RNTextInput","useState","useCallback","TRACK_HEIGHT","THUMB_SIZE","ratio","TextInput","PanResponder","totalSteps","minNV","maxNV","range","ScrollView"],"mappings":"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","file":"index.js","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"]}
|
|
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/primitives/Icon/Icon.tsx","../src/Button/Button.tsx","../src/Card/Card.styles.ts","../src/Card/Card.tsx","../src/primitives/useFocusVisible.ts","../src/primitives/Frame/Frame.utils.ts","../src/primitives/Frame/Frame.styles.ts","../src/primitives/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/primitives/Wrapper/Wrapper.styles.ts","../src/primitives/Wrapper/Wrapper.tsx","../src/primitives/Text/Text.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":["useRef","useEffect","React","createContext","useContext","useMemo","srgbToHex","Text","StyleSheet","useState","Pressable","View","RNTextInput","useCallback","TRACK_HEIGHT","THUMB_SIZE","ratio","TextInput","PanResponder","totalSteps","minNV","maxNV","range","RNText","ScrollView"],"mappings":"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","file":"index.js","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 '00': 0, // base * 0\n '02': 2, // base * 0.25\n '04': 4, // base * 0.5\n '06': 6, // base * 0.75\n '08': 8, // base * 1 (Medium preset, 8px base)\n '10': 10, // base * 1.25\n '12': 12, // base * 1.5\n '16': 16, // base * 2\n '20': 20, // base * 2.5\n '24': 24, // base * 3\n '32': 32, // base * 4\n '40': 40, // base * 5\n '48': 48, // base * 6\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 // Web-only: on native, fonts are linked at build time (no DOM to inject <link> tags).\n // Also guards against SSR where document is undefined.\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 // Web-only: on native, fonts are linked at build time (no DOM to inject <link> tags).\n // Also guards against SSR where document is undefined.\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 '00': number; readonly '02': number; readonly '04': number; readonly '06': number; readonly '08': number; readonly '10': number; readonly '12': number; readonly '16': number; readonly '20': number; readonly '24': number; readonly '32': number; readonly '40': number; readonly '48': 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['04'],\n paddingHorizontal: tokens.spacing['12'],\n fontSize: tokens.typography.size.sm,\n borderRadius: tokens.radius.sm,\n gap: tokens.spacing['04'],\n iconSize: tokens.typography.size.sm,\n },\n md: {\n paddingVertical: tokens.spacing['08'],\n paddingHorizontal: tokens.spacing['16'],\n fontSize: tokens.typography.size.base,\n borderRadius: tokens.radius.md,\n gap: tokens.spacing['08'],\n iconSize: tokens.typography.size.base,\n },\n lg: {\n paddingVertical: tokens.spacing['12'],\n paddingHorizontal: tokens.spacing['24'],\n fontSize: tokens.typography.size.base,\n borderRadius: tokens.radius.lg,\n gap: tokens.spacing['08'],\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, { useMemo } from 'react';\nimport { Text, type TextStyle } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport { useTokens } from '../../tokens/useTokens';\nimport type { IconProps } from './Icon.types';\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 // Accessibility\n accessibilityLabel,\n // Testing & platform\n testID,\n nativeID,\n ref,\n}: IconProps) {\n // Get the current theme's design tokens for colors, typography, and icon settings.\n const tokens = useTokens(elevation);\n\n // Build the icon's style from the theme tokens and props.\n // Wrapped in useMemo so it only recalculates when the inputs change,\n // instead of rebuilding the style object on every render.\n const iconStyle = useMemo<TextStyle>(() => {\n // Use the provided size, or fall back to the theme's default text size.\n const fontSize = size ?? tokens.typography.size.base;\n // Optical size adjusts stroke weight for readability at small sizes.\n const opsz = opticalSize ?? fontSize;\n // Use the provided color, or fall back to the theme's primary text color.\n const iconColor = color ?? srgbToHex(tokens.textPrimary.srgb);\n\n // Build the font family name from the theme's icon variant setting.\n // Example: variant 'rounded' → 'Material Symbols Rounded'\n // The charAt(0).toUpperCase() + slice(1) capitalizes the first letter.\n const fontFamily = `Material Symbols ${tokens.icons.variant.charAt(0).toUpperCase() + tokens.icons.variant.slice(1)}`;\n\n // Material Symbols is a variable font with 4 adjustable axes:\n // FILL: 0 = outlined (hollow), 1 = filled (solid)\n // wght: font weight (thinner or bolder strokes)\n // GRAD: grade (fine-tune weight without changing overall size)\n // opsz: optical size (adjusts detail level for the display size)\n const fontVariationSettings = `'FILL' ${fill}, 'wght' ${tokens.icons.weight}, 'GRAD' ${tokens.icons.grade}, 'opsz' ${opsz}`;\n\n return {\n fontFamily,\n fontSize,\n color: iconColor,\n userSelect: 'none', // web-only: prevents users from selecting the icon as text\n fontVariationSettings, // web-only: controls the variable font axes listed above\n ...style,\n } as TextStyle; // Cast needed because web-only properties aren't in RN's type definitions\n }, [tokens, size, opticalSize, fill, color, style]);\n\n // Material Symbols renders icons as text ligatures — the icon name (like \"home\")\n // is passed as text content, and the font renders it as the icon glyph.\n return (\n <Text\n ref={ref}\n testID={testID}\n nativeID={nativeID}\n accessibilityLabel={accessibilityLabel}\n // When no label is provided, the icon is decorative — hide it from screen readers\n // so assistive technology doesn't try to read the ligature text (e.g. \"home\").\n importantForAccessibility={accessibilityLabel ? 'yes' : 'no-hide-descendants'}\n style={iconStyle}\n onPress={onPress} // When provided, makes the icon tappable\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 '../primitives/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['16'],\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","/**\n * useFocusVisible — Keyboard-only focus detection hook.\n *\n * Tracks whether the user's last input was keyboard (Tab, arrows, etc.)\n * or pointer (mouse, touch). When an element receives focus after a\n * keyboard event, `isFocusVisible` is true — matching the browser's\n * native `:focus-visible` pseudo-class behavior.\n *\n * This is the same approach used by the `:focus-visible` polyfill.\n * On native platforms, the document listeners are skipped (guarded by\n * `typeof document`), and the hook returns false for `isFocusVisible`.\n *\n * @example\n * ```tsx\n * const { isFocusVisible, focusProps } = useFocusVisible();\n *\n * <Pressable {...focusProps} style={isFocusVisible ? focusRingStyle : undefined}>\n * <Text>Keyboard-focusable</Text>\n * </Pressable>\n * ```\n */\n\nimport { useState, useEffect, useCallback } from 'react';\n\n// ── Module-level input modality tracking ────────────────────────\n// Shared across all hook instances — a single set of document listeners\n// tracks whether the most recent user input was keyboard or pointer.\n\nlet hadKeyboardEvent = false;\nlet isListenerSetup = false;\n\n/**\n * Attach document-level listeners once. Keyboard events (Tab, arrows,\n * Enter, Space, Escape) set the flag; pointer/mouse events clear it.\n * Capture phase ensures we see the event before any component handler.\n */\nfunction setupModality() {\n // Guard: skip on native platforms and during SSR (no document).\n if (isListenerSetup || typeof document === 'undefined') return;\n isListenerSetup = true;\n\n // Keyboard navigation keys that should trigger focus-visible.\n // We don't flag every keydown (e.g. typing in a TextInput shouldn't\n // make the next focused element show a ring).\n const NAVIGATION_KEYS = new Set([\n 'Tab', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight',\n 'Enter', ' ', 'Escape',\n ]);\n\n document.addEventListener('keydown', (e) => {\n if (NAVIGATION_KEYS.has(e.key)) {\n hadKeyboardEvent = true;\n }\n }, true);\n\n // Any pointer activity means the user is using a mouse/touch,\n // so the next focus should NOT show a visible ring.\n document.addEventListener('pointerdown', () => {\n hadKeyboardEvent = false;\n }, true);\n\n // Fallback for environments without PointerEvent (older browsers).\n document.addEventListener('mousedown', () => {\n hadKeyboardEvent = false;\n }, true);\n}\n\n// ── Hook ────────────────────────────────────────────────────────\n\nexport interface FocusVisibleResult {\n /** True when the element is focused AND focus was keyboard-initiated. */\n readonly isFocusVisible: boolean;\n /** Spread these onto the interactive element (web-only, ignored on native). */\n readonly focusProps: Record<string, unknown>;\n}\n\nexport function useFocusVisible(): FocusVisibleResult {\n const [isFocusVisible, setIsFocusVisible] = useState(false);\n\n // Set up document-level modality tracking on first render.\n useEffect(() => {\n setupModality();\n }, []);\n\n // On focus: show ring only if the last input was keyboard.\n const onFocus = useCallback(() => {\n if (hadKeyboardEvent) {\n setIsFocusVisible(true);\n }\n }, []);\n\n // On blur: always hide the ring.\n const onBlur = useCallback(() => {\n setIsFocusVisible(false);\n }, []);\n\n // Return props as a spreadable object. These are web-only event handlers\n // supported by react-native-web — silently ignored on native.\n const focusProps = { onFocus, onBlur } as Record<string, unknown>; // web-only\n\n return { isFocusVisible, focusProps };\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// These functions convert spacing props (token names like 'md' or pixel numbers)\n// into actual pixel values that React Native can use for padding and gap.\n\n/** Convert a spacing token name (like 'md') or raw number into pixels. */\nexport function resolveSpacing(\n value: SpacingValue,\n tokens: ResolvedTokens,\n): number {\n // If already a number, use it directly as pixels.\n if (typeof value === 'number') return value;\n // Otherwise look up the token name in the theme's spacing scale.\n return tokens.spacing[value];\n}\n\n/** Convert a padding prop into pixel values for all four sides. */\nexport function resolvePadding(\n prop: PaddingProp,\n tokens: ResolvedTokens,\n): { readonly top: number; readonly right: number; readonly bottom: number; readonly left: number } {\n // Uniform: same padding on all sides (e.g. padding=\"md\" or padding={16}).\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: separate horizontal (x) and vertical (y) padding.\n // Example: padding={{ x: 'lg', y: 'sm' }}\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: different padding on each side.\n // Example: padding={{ top: 8, bottom: 16, left: 'md', right: 'md' }}\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/** Convert a gap prop into row and column gap pixel values. */\nexport function resolveGap(\n prop: GapProp,\n tokens: ResolvedTokens,\n): { readonly rowGap: number; readonly columnGap: number } {\n // Uniform: same gap in both directions (e.g. gap=\"md\" or gap={12}).\n if (typeof prop === 'string' || typeof prop === 'number') {\n const px = resolveSpacing(prop, tokens);\n return { rowGap: px, columnGap: px };\n }\n\n // Per-axis: different gap for rows vs columns.\n // Example: gap={{ row: 'sm', column: 'lg' }}\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// These functions convert radius props (token names like 'lg' or pixel numbers)\n// into actual pixel values for rounding corners.\n\n/** Convert a radius token name (like 'lg') or raw number into pixels. */\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/** Pixel values for each corner of a rounded rectangle. */\nexport interface ResolvedCorners {\n readonly topLeft: number;\n readonly topRight: number;\n readonly bottomLeft: number;\n readonly bottomRight: number;\n}\n\n/** Convert a radius prop into pixel values for all four corners. */\nexport function resolveRadiusCorners(\n prop: RadiusProp,\n tokens: ResolvedTokens,\n): ResolvedCorners {\n // Uniform: same radius on all corners (e.g. radius=\"lg\" or radius={8}).\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: different radius on each corner.\n // Example: radius={{ topLeft: 'lg', topRight: 'lg', bottomLeft: 0, bottomRight: 0 }}\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 is rounded (used to decide whether to clip overflowing content). */\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// Converts Figma-like sizing modes into React Native style properties.\n\n/** Convert width/height sizing modes to style 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 // 'fill' = expand to take all available space in the parent.\n // flexGrow tells the layout engine to give this element extra space.\n // width: 100% ensures it spans the full width.\n style.flexGrow = 1;\n style.width = '100%';\n } else if (typeof width === 'number') {\n // Fixed pixel width (e.g. 300).\n style.width = width;\n }\n // 'hug' = shrink to fit the content (React Native's default behavior).\n }\n\n if (height !== undefined) {\n if (height === 'fill') {\n // Same as width 'fill' — expand to fill all available vertical space.\n style.flexGrow = 1;\n style.height = '100%';\n } else if (typeof height === 'number') {\n // Fixed pixel height (e.g. 200).\n style.height = height;\n }\n // 'hug' = shrink to fit the content (React Native's default behavior).\n }\n\n return style as ViewStyle;\n}\n\n// ── Layout ───────────────────────────────────────────────────────\n// These functions convert our friendly prop names (like 'start', 'between')\n// into the actual CSS flexbox values that React Native uses internally.\n\n// Maps our alignment names to flexbox cross-axis values:\n// 'start' → push children to the top/left edge\n// 'center' → center children in the cross direction\n// 'end' → push children to the bottom/right edge\n// 'stretch' → stretch children to fill the cross dimension\n// 'baseline' → align children by their text baseline\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\n// Maps our justification names to flexbox main-axis values:\n// 'start' → pack children at the beginning\n// 'center' → pack children in the middle\n// 'end' → pack children at the end\n// 'between' → spread children with equal space between them\n// 'around' → spread children with equal space around each\n// 'evenly' → spread children with equal space everywhere\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/** Convert our alignment name to the flexbox value React Native expects. */\nexport function resolveAlignment(align: Alignment): ViewStyle['alignItems'] {\n return ALIGN_MAP[align];\n}\n\n/** Convert our justification name to the flexbox value React Native expects. */\nexport function resolveJustification(justify: Justification): ViewStyle['justifyContent'] {\n return JUSTIFY_MAP[justify];\n}\n\n/** Convert direction ('horizontal'/'vertical') + reverse flag to flexbox direction. */\nexport function resolveFlexDirection(\n direction: Direction,\n reverse: boolean,\n): ViewStyle['flexDirection'] {\n // 'horizontal' → children in a row, 'vertical' → children in a column.\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\n/**\n * Build all visual styles for a Frame.\n *\n * Takes the Frame's props + design tokens and produces:\n * - container: the main style (background, layout, spacing, border, shadow, etc.)\n * - pressed: style override applied when the user is pressing/clicking\n * - gridWebStyle: CSS Grid properties (only works on web, null otherwise)\n * - insetBoxShadow: inner shadow CSS string for sunken frames (web-only)\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 // We build styles as a plain object first, then validate it through\n // StyleSheet.create() at the end. Using Record<string, unknown> lets us\n // set properties conditionally without TypeScript complaining.\n const container: Record<string, unknown> = {};\n\n // ── Background & foreground ──\n // Set the surface color and default text color from the current theme.\n container.backgroundColor = srgbToHex(tokens.background.srgb);\n container.color = srgbToHex(tokens.textPrimary.srgb);\n\n // ── Layout mode ──\n if (layout === 'flex') {\n // Standard flex layout: children arranged in a row or column.\n container.display = 'flex';\n container.flexDirection = resolveFlexDirection(direction, reverse);\n if (wrap) container.flexWrap = 'wrap';\n }\n if (layout === 'grid') {\n // Grid layout: uses CSS Grid on web, but React Native doesn't support grid.\n // So we set flex as a fallback (wrapping row) for native platforms.\n // The actual CSS Grid styles are applied separately via gridWebStyle below.\n container.display = 'flex';\n container.flexDirection = 'row';\n container.flexWrap = 'wrap';\n }\n\n // ── Alignment ──\n // Cross-axis: how children are positioned perpendicular to the main direction.\n if (align) container.alignItems = resolveAlignment(align);\n // Main-axis: how children are distributed along the main direction.\n if (justify) container.justifyContent = resolveJustification(justify);\n\n // ── Padding ──\n // Convert spacing tokens (like 'md') or pixel values into actual 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 // Space between children (row gap for vertical stacks, column gap for horizontal).\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 // Apply width/height settings: 'hug' (shrink), 'fill' (expand), or fixed pixels.\n const sizing = resolveSizing(width, height);\n Object.assign(container, sizing);\n\n // ── Constraints ──\n // Set min/max boundaries for width and height.\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 // Round the corners of the Frame (e.g. for cards, buttons, pills).\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 // Clip overflowing content when corners are rounded,\n // otherwise children would visually leak outside the rounded edges.\n if (hasPositiveRadius(corners)) {\n container.overflow = 'hidden';\n }\n }\n\n // ── Border ──\n // Add a thin border using the theme's border color.\n if (bordered) {\n container.borderWidth = 1;\n container.borderColor = srgbToHex(tokens.border.srgb);\n }\n\n // ── Outer shadow (elevation 2) ──\n // Add a subtle drop shadow to make the Frame look raised above the surface.\n // These are React Native shadow properties — react-native-web converts them\n // to CSS box-shadow automatically.\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 container.elevation = 4; // Android-specific shadow depth\n }\n\n // ── Disabled ──\n // Make the Frame look faded when disabled.\n if (disabled) {\n container.opacity = 0.5;\n }\n\n // ── Pressed state ──\n // When the user is pressing an interactive Frame, shift the background\n // to a darker \"sunken\" shade to give visual feedback.\n const pressed = StyleSheet.create({\n s: { backgroundColor: srgbToHex(tokens.backgroundSunken.srgb) },\n }).s;\n\n // ── Grid web style (web-only) ──\n // CSS Grid only works in web browsers. On native platforms this stays null,\n // and the flex fallback (set above) handles the layout instead.\n let gridWebStyle: React.CSSProperties | null = null;\n if (layout === 'grid') {\n gridWebStyle = {\n display: 'grid' as const,\n // Divide into equal-width columns (e.g. 3 columns → \"repeat(3, 1fr)\").\n gridTemplateColumns: columns ? `repeat(${columns}, 1fr)` : undefined,\n gridTemplateRows: rows ? `repeat(${rows}, 1fr)` : undefined,\n };\n }\n\n // ── Inset shadow (elevation -2, web-only) ──\n // Creates an inner shadow effect to make the Frame look sunken/recessed.\n // Only used for the deepest sunken level (-2).\n const insetBoxShadow = frameElevation === -2\n ? 'inset 0 2px 4px rgba(0,0,0,0.12)'\n : null;\n\n return {\n // Validate and optimize the container styles through StyleSheet.create(),\n // then extract the single style object with `.c`.\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';\nimport { useFocusVisible } from '../useFocusVisible';\n\n/**\n * Wrap raw string/number children in <Text> so they display correctly.\n *\n * In React Native, raw text like <View>\"hello\"</View> will crash on native\n * and show console warnings on web. All text must be inside a <Text> element.\n * This helper scans children and auto-wraps any bare strings or numbers.\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 // Accessibility\n accessibilityLabel,\n accessibilityHint,\n // Testing & platform\n testID,\n nativeID,\n ref,\n // Style override\n style,\n}: FrameProps) {\n // Read the global theme configuration, current color mode (light/dark),\n // and the default theme name from the nearest NewtoneProvider.\n const { config, mode, theme: providerTheme } = useNewtoneTheme();\n // Read the theme/elevation from the nearest parent Frame (if nested).\n const parentFrameCtx = useFrameContext();\n\n // Decide which theme to use. Priority: this Frame's prop > parent Frame > NewtoneProvider.\n const resolvedTheme = theme ?? parentFrameCtx?.theme ?? providerTheme;\n\n // The user-facing elevation (-2 to 2) controls visual depth (shadows, background).\n const resolvedFrameElevation: FrameElevation = elevation ?? 0;\n\n // Convert user-facing elevation to internal level (0-2) for token computation.\n // When no elevation is set, inherit from parent Frame or default to 1.\n const resolvedElevation: ElevationLevel = elevation !== undefined\n ? toElevationLevel(elevation)\n : parentFrameCtx?.elevation ?? 1;\n\n // Generate the design tokens (colors, spacing, fonts) for this Frame.\n // Frame computes its own tokens instead of using useTokens() because\n // useTokens() reads from FrameContext — but this Frame IS the provider,\n // so it needs to compute fresh tokens from the resolved theme/elevation.\n // Wrapped in useMemo so it only recalculates when the theme/mode/elevation changes.\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 // Calculate all visual styles (background, layout, border, shadow, etc.).\n // Only recalculates when one of the style-related props changes.\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 // This is the value that child components will inherit via FrameContext.\n // Any nested Frame, Text, Icon, etc. will read this theme and elevation.\n const contextValue = useMemo(\n () => ({ theme: resolvedTheme, elevation: resolvedElevation }),\n [resolvedTheme, resolvedElevation],\n );\n\n // Some styles only work on web browsers (CSS grid, inset shadows).\n // We collect them separately and cast them to ViewStyle so React Native\n // doesn't complain about unknown properties (they're silently ignored on native).\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 // Normalize user's custom styles into an array for merging.\n const userStyles = Array.isArray(style) ? style : style ? [style] : [];\n\n // If the Frame has onPress or href, it needs to respond to taps/clicks.\n // In that case we render a Pressable (tappable); otherwise a plain View.\n const isInteractive = onPress !== undefined || href !== undefined;\n\n // Detect keyboard-only focus (Tab, arrows) vs mouse/touch focus.\n // Only shows a visible focus ring when the user navigated via keyboard,\n // matching the browser's native :focus-visible behavior.\n const { isFocusVisible, focusProps } = useFocusVisible();\n\n // Focus ring style: 2px solid outline in the theme's interactive color,\n // offset by 2px so it doesn't overlap the Frame's border.\n // Uses CSS outline properties — silently ignored on native platforms.\n const focusRingStyle = isFocusVisible && !disabled ? {\n outlineWidth: 2,\n outlineStyle: 'solid',\n outlineColor: srgbToHex(tokens.interactive.srgb),\n outlineOffset: 2,\n } as unknown as ViewStyle : undefined; // web-only\n\n // Spread focus event handlers onto the Pressable. These are web-only\n // handlers supported by react-native-web — silently ignored on native.\n const webFocusProps = isInteractive ? focusProps as any : {}; // web-only\n\n // Default text style for any raw strings/numbers passed as children.\n // Uses the theme's primary text color, default font, and base size.\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 // Auto-wrap bare text (\"hello\") in <Text> elements (required by React Native).\n // Wrapped in useMemo so it only re-scans children when they or the text style changes.\n const wrappedChildren = useMemo(\n () => wrapTextChildren(children, textStyle),\n [children, textStyle],\n );\n\n // FrameContext.Provider shares this Frame's theme and elevation with all\n // descendants, so nested components automatically pick up the right colors.\n return (\n <FrameContext.Provider value={contextValue}>\n {isInteractive ? (\n // Pressable handles taps. When href is set, react-native-web renders\n // it as an <a> tag so it works like a regular link on the web.\n <Pressable\n ref={ref}\n testID={testID}\n nativeID={nativeID}\n accessibilityLabel={accessibilityLabel}\n accessibilityHint={accessibilityHint}\n // Tell screen readers this is disabled so assistive technology can announce it.\n accessibilityState={disabled ? { disabled: true } : undefined}\n onPress={onPress}\n disabled={disabled}\n {...(href ? { href, accessibilityRole: 'link' as const } : { accessibilityRole: 'button' as const })}\n {...webFocusProps}\n // The style callback receives { pressed: true/false } so we can\n // change the background when the user is actively pressing.\n style={({ pressed }) => [\n styles.container,\n pressed && !disabled && styles.pressed,\n focusRingStyle,\n ...webOverrides,\n ...userStyles,\n ]}\n >\n {wrappedChildren}\n </Pressable>\n ) : (\n // Non-interactive Frame: just a plain View with no tap handling.\n <View\n ref={ref}\n testID={testID}\n nativeID={nativeID}\n accessibilityLabel={accessibilityLabel}\n accessibilityHint={accessibilityHint}\n style={[styles.container, ...webOverrides, ...userStyles]}\n >\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['04'],\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['08'],\n paddingHorizontal: tokens.spacing['12'],\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 shadowColor: '#000',\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 0.15,\n shadowRadius: 12,\n elevation: 8,\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 // Web-only: on native, document is undefined (click-outside needs a portal/Modal rearchitecture).\n useEffect(() => {\n if (!isOpen) return;\n if (typeof document === 'undefined') 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['08'];\n const paddingVertical = isSm ? tokens.spacing['04'] : tokens.spacing['08'];\n const paddingHorizontal = isSm ? tokens.spacing['08'] : tokens.spacing['12'];\n\n return StyleSheet.create({\n container: {\n gap: tokens.spacing['04'],\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['04'] : tokens.spacing['08']),\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['04'] : tokens.spacing['08'],\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['04'],\n paddingHorizontal: isSm ? tokens.spacing['08'] : tokens.spacing['12'],\n paddingTop: tokens.spacing['08'],\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 '../primitives/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['04'] : tokens.spacing['08'];\n const paddingHorizontal = size === 'sm' ? tokens.spacing['08'] : tokens.spacing['12'];\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 accessibilityState={{ 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 accessibilityState={{ 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['08'] }}>\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 '../primitives/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 accessibilityState={{ expanded: isOpen }}\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['08'],\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['04'],\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['04'],\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['04'],\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 type { ViewStyle } from 'react-native';\nimport { StyleSheet } from 'react-native';\nimport type { ResolvedTokens } from '../../tokens/types';\nimport type {\n Direction,\n Alignment,\n Justification,\n PaddingProp,\n GapProp,\n SizingMode,\n} from '../Frame/Frame.types';\nimport {\n resolvePadding,\n resolveGap,\n resolveSizing,\n resolveFlexDirection,\n resolveAlignment,\n resolveJustification,\n} from '../Frame/Frame.utils';\n\nexport interface WrapperStyleInput {\n readonly tokens: ResolvedTokens;\n readonly direction?: Direction;\n readonly wrap?: boolean;\n readonly reverse?: boolean;\n readonly align?: Alignment;\n readonly justify?: Justification;\n readonly padding?: PaddingProp;\n readonly gap?: GapProp;\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\n/**\n * Build the layout styles for a Wrapper.\n *\n * Unlike Frame, this only handles structure (direction, spacing, sizing).\n * No background, border, shadow, or radius — Wrapper is always invisible.\n * Reuses the same helper functions that Frame uses for layout.\n */\nexport function getWrapperStyles(input: WrapperStyleInput): ViewStyle {\n const {\n tokens,\n direction = 'vertical',\n wrap = false,\n reverse = false,\n align,\n justify,\n padding,\n gap,\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n } = input;\n\n // We build styles as a plain object first, then validate it through\n // StyleSheet.create() at the end. Using Record<string, unknown> allows us\n // to set properties conditionally without TypeScript complaining.\n const container: Record<string, unknown> = {};\n\n // ── Layout ──\n // Set whether children are arranged in a row or column (and optionally reversed).\n container.flexDirection = resolveFlexDirection(direction, reverse);\n // Allow children to flow onto multiple lines when they don't fit in one.\n if (wrap) container.flexWrap = 'wrap';\n\n // ── Alignment ──\n // Cross-axis: how children are positioned perpendicular to the main direction.\n if (align) container.alignItems = resolveAlignment(align);\n // Main-axis: how children are distributed along the main direction.\n if (justify) container.justifyContent = resolveJustification(justify);\n\n // ── Padding ──\n // Convert spacing tokens (like 'md') or pixel values into actual 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 // Space between children (row gap for vertical stacks, column gap for horizontal).\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 // Merge width/height settings into the container.\n // 'hug' = shrink to fit content, 'fill' = expand to fill parent, number = fixed pixels.\n Object.assign(container, resolveSizing(width, height));\n\n // ── Constraints ──\n // Set min/max boundaries for width and height.\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 // Pass through StyleSheet.create() to validate and optimize the styles,\n // then extract the single style object with `.c`.\n return StyleSheet.create({ c: container as ViewStyle }).c;\n}\n","import React, { useMemo } from 'react';\nimport { View } from 'react-native';\nimport type { WrapperProps } from './Wrapper.types';\nimport { getWrapperStyles } from './Wrapper.styles';\nimport { useTokens } from '../../tokens/useTokens';\n\n/**\n * Wrapper — Lightweight, invisible layout container.\n *\n * Same layout API as Frame (direction, spacing, alignment, sizing)\n * but with zero appearance overhead. No background, border, shadow,\n * theme context, or interactivity. Always renders a plain View.\n *\n * Use Wrapper for structural layout. Use Frame when you need visual\n * appearance or theme/elevation context.\n *\n * @example\n * ```tsx\n * <Wrapper direction=\"horizontal\" gap=\"md\" align=\"center\">\n * <Button onPress={() => {}}>Save</Button>\n * <Button variant=\"ghost\" onPress={() => {}}>Cancel</Button>\n * </Wrapper>\n * ```\n *\n * @example\n * ```tsx\n * <Wrapper padding={{ x: 'lg', y: 'md' }} gap=\"sm\">\n * <Text>Spaced content with no background</Text>\n * </Wrapper>\n * ```\n */\nexport function Wrapper({\n children,\n direction,\n wrap,\n reverse,\n align,\n justify,\n padding,\n gap,\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n style,\n // Testing & platform\n testID,\n nativeID,\n ref,\n}: WrapperProps) {\n // Get the theme's design tokens so we can convert spacing names (like 'md')\n // into pixel values. The \"1\" is the default elevation level — Wrapper doesn't\n // have its own elevation, but tokens need one for the spacing lookups.\n const tokens = useTokens(1);\n\n // Calculate the layout styles (direction, spacing, alignment, sizing).\n // Wrapped in useMemo so it only recalculates when one of the props changes,\n // instead of running on every render.\n const containerStyle = useMemo(\n () => getWrapperStyles({\n tokens,\n direction,\n wrap,\n reverse,\n align,\n justify,\n padding,\n gap,\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n }),\n [\n tokens, direction, wrap, reverse,\n align, justify, padding, gap,\n width, height, minWidth, maxWidth, minHeight, maxHeight,\n ],\n );\n\n // Normalize user's custom styles into an array so we can merge them.\n // The user can pass a single style object or an array of style objects.\n const userStyles = Array.isArray(style) ? style : style ? [style] : [];\n\n // Render a plain View — no background, no border, no interactivity.\n // User's custom styles are applied last so they can override layout defaults.\n return (\n <View\n ref={ref}\n testID={testID}\n nativeID={nativeID}\n // Wrapper is a layout-only container with no semantic meaning.\n // \"none\" tells screen readers to skip this element and read its children directly.\n accessibilityRole=\"none\"\n style={[containerStyle, ...userStyles]}\n >\n {children}\n </View>\n );\n}\n","import React, { useMemo } from 'react';\nimport { Text as RNText } from 'react-native';\nimport type { TextStyle } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport { useTokens } from '../../tokens/useTokens';\nimport type { TextProps, TextColor } from './Text.types';\n\n// Maps user-friendly color names to the actual token keys in the theme.\n// Example: color=\"primary\" → looks up tokens.textPrimary to get the hex color.\nconst COLOR_MAP: Record<TextColor, 'textPrimary' | 'textSecondary' | 'interactive'> = {\n primary: 'textPrimary',\n secondary: 'textSecondary',\n interactive: 'interactive',\n};\n\n/**\n * Token-aware text primitive.\n *\n * Reads typography tokens from the nearest NewtoneProvider and maps\n * semantic props (size, weight, color, font, lineHeight) to resolved values.\n *\n * @example\n * ```tsx\n * <Text>Body text</Text>\n * <Text size=\"sm\" weight=\"semibold\" color=\"secondary\">Label</Text>\n * <Text size=\"xl\" font=\"display\">Heading</Text>\n * ```\n */\nexport function Text({\n children,\n size = 'base',\n weight = 'regular',\n color = 'primary',\n font = 'default',\n lineHeight = 'normal',\n align,\n numberOfLines,\n elevation = 1,\n style,\n // Accessibility\n accessibilityRole,\n // Testing & platform\n testID,\n nativeID,\n ref,\n}: TextProps) {\n // Get the current theme's design tokens (colors, fonts, spacing).\n // The elevation parameter affects which background shade the tokens reference.\n const tokens = useTokens(elevation);\n\n // Build the text style from the theme tokens.\n // Wrapped in useMemo so it only recalculates when the inputs actually change,\n // instead of recalculating on every render (which would be wasteful).\n const resolvedStyle = useMemo<TextStyle>(() => {\n // Look up the pixel size for the chosen size token (e.g. 'base' → 16px).\n const fontSize = tokens.typography.size[size];\n return {\n // Font family from the theme (e.g. 'default' → 'Inter', 'mono' → 'JetBrains Mono').\n fontFamily: tokens.typography.fonts[font],\n fontSize,\n // Font weight is stored as a number (e.g. 400, 600) but React Native expects a string.\n fontWeight: String(tokens.typography.weight[weight]) as TextStyle['fontWeight'],\n // Convert the theme color from internal sRGB format to a hex string (e.g. '#1a1a1a').\n color: srgbToHex(tokens[COLOR_MAP[color]].srgb),\n // Line height = font size × multiplier (e.g. 16px × 1.5 = 24px line height).\n lineHeight: fontSize * tokens.typography.lineHeight[lineHeight],\n textAlign: align,\n };\n }, [tokens, size, weight, color, font, lineHeight, align]);\n\n return (\n <RNText\n ref={ref}\n testID={testID}\n nativeID={nativeID}\n accessibilityRole={accessibilityRole}\n // If the user passed custom styles, merge them after the theme styles.\n // The last style in the array wins, so user styles can override theme defaults.\n // Normalize: the user can pass a single style or an array of styles.\n style={style\n ? [resolvedStyle, ...(Array.isArray(style) ? style : [style])]\n : resolvedStyle\n }\n // When set, text is cut off after this many lines with \"...\" at the end.\n numberOfLines={numberOfLines}\n >\n {children}\n </RNText>\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"]}
|