@newtonedev/components 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/theme/defaults.ts","../src/fonts/GoogleFontLoader.tsx","../src/fonts/SelfHostedFontLoader.tsx","../src/fonts/IconFontLoader.tsx","../src/theme/NewtoneProvider.tsx","../src/theme/FrameContext.tsx","../src/tokens/computeTokens.ts","../src/tokens/useTokens.ts","../src/composites/actions/Button/Button.styles.ts","../src/primitives/Icon/Icon.tsx","../src/fonts/measureFont.ts","../src/fonts/useLocalCalibration.ts","../src/fonts/useTypographyCalibrations.ts","../src/fonts/reportQueue.ts","../src/theme/useBreakpoint.ts","../src/primitives/Text/Text.tsx","../src/primitives/Text/Text.spans.ts","../src/primitives/Text/index.ts","../src/primitives/Frame/Frame.utils.ts","../src/primitives/Wrapper/Wrapper.styles.ts","../src/primitives/Wrapper/Wrapper.tsx","../src/composites/actions/Button/Button.tsx","../src/composites/layout/Card/Card.styles.ts","../src/composites/layout/Card/Card.tsx","../src/primitives/useFocusVisible.ts","../src/primitives/Frame/Frame.styles.ts","../src/primitives/Frame/Frame.tsx","../src/composites/form-controls/TextInput/TextInput.styles.ts","../src/composites/form-controls/TextInput/TextInput.tsx","../src/composites/overlays/Popover/Popover.styles.ts","../src/composites/overlays/Popover/Popover.tsx","../src/composites/overlays/Popover/usePopover.ts","../src/composites/form-controls/Select/Select.types.ts","../src/composites/form-controls/Select/Select.styles.ts","../src/composites/form-controls/Select/useSelect.ts","../src/composites/form-controls/Select/SelectOption.tsx","../src/composites/form-controls/Select/Select.tsx","../src/composites/form-controls/Toggle/Toggle.styles.ts","../src/composites/form-controls/Toggle/Toggle.tsx","../src/composites/range-inputs/Slider/Slider.styles.ts","../src/composites/range-inputs/Slider/Slider.tsx","../src/composites/range-inputs/HueSlider/HueSlider.styles.ts","../src/composites/range-inputs/HueSlider/HueSlider.tsx","../src/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.styles.ts","../src/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.tsx","../src/composites/layout/AppShell/AppShell.styles.ts","../src/composites/layout/AppShell/AppShell.tsx","../src/composites/layout/Sidebar/Sidebar.styles.ts","../src/composites/layout/Sidebar/Sidebar.tsx","../src/composites/layout/Navbar/Navbar.styles.ts","../src/composites/layout/Navbar/Navbar.tsx","../src/registry/registry.ts","../src/registry/codegen.ts","../src/registry/icons.ts"],"names":["useRef","useEffect","React","createContext","useContext","useMemo","size","srgbToHex","useState","RNText","Text","View","StyleSheet","Pressable","RNTextInput","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';\nimport { DEFAULT_FONT_SLOTS, DEFAULT_FONT_SIZES, DEFAULT_LINE_HEIGHTS, DEFAULT_ROLE_SCALES } from '@newtonedev/fonts';\n\n// Re-export typography defaults from @newtonedev/fonts (canonical source)\nexport { DEFAULT_FONT_SIZES, DEFAULT_LINE_HEIGHTS, DEFAULT_ROLE_SCALES } from '@newtonedev/fonts';\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 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: DEFAULT_FONT_SLOTS,\n fontSizes: DEFAULT_FONT_SIZES,\n lineHeights: DEFAULT_LINE_HEIGHTS,\n roles: DEFAULT_ROLE_SCALES,\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 { useEffect, useRef } from 'react';\nimport type { FontSlot } from '../theme/types';\nimport { buildGoogleFontsUrl } from './buildGoogleFontsUrl';\n\ninterface GoogleFontLoaderProps {\n readonly fonts: {\n readonly main: FontSlot;\n readonly display: FontSlot;\n readonly mono: FontSlot;\n readonly currency: FontSlot;\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.main.config.family,\n fonts.main.config.type,\n fonts.main.weights.regular,\n fonts.main.weights.medium,\n fonts.main.weights.bold,\n fonts.display.config.family,\n fonts.display.config.type,\n fonts.display.weights.regular,\n fonts.display.weights.medium,\n fonts.display.weights.bold,\n fonts.mono.config.family,\n fonts.mono.config.type,\n fonts.mono.weights.regular,\n fonts.mono.weights.medium,\n fonts.mono.weights.bold,\n fonts.currency.config.family,\n fonts.currency.config.type,\n fonts.currency.weights.regular,\n fonts.currency.weights.medium,\n fonts.currency.weights.bold,\n ]);\n\n return null;\n}\n","import { useEffect, useRef } from 'react';\n\ninterface SelfHostedFontLoaderProps {\n /** Raw @font-face CSS string from the theme API. */\n readonly fontFaceCss: string;\n}\n\n/**\n * Injects self-hosted @font-face CSS into <head> via a <style> tag.\n * Used instead of GoogleFontLoader when self-hosted font CSS is available.\n *\n * Uses imperative DOM manipulation because react-native-web's View\n * cannot render <style> elements.\n */\nexport function SelfHostedFontLoader({ fontFaceCss }: SelfHostedFontLoaderProps) {\n const styleRef = useRef<HTMLStyleElement | null>(null);\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n\n // Clean up previous style\n if (styleRef.current) {\n styleRef.current.remove();\n styleRef.current = null;\n }\n\n if (!fontFaceCss) return;\n\n const style = document.createElement('style');\n style.setAttribute('data-newtone-fonts', 'self-hosted');\n style.textContent = fontFaceCss;\n document.head.appendChild(style);\n styleRef.current = style;\n\n return () => {\n if (styleRef.current) {\n styleRef.current.remove();\n styleRef.current = null;\n }\n };\n }, [fontFaceCss]);\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 } from './types';\nimport { DEFAULT_THEME_CONFIG } from './defaults';\nimport { GoogleFontLoader } from '../fonts/GoogleFontLoader';\nimport { SelfHostedFontLoader } from '../fonts/SelfHostedFontLoader';\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 children: React.ReactNode;\n /** Optional URL for typography telemetry. When set, adaptive Text instances report observations. */\n readonly reportingEndpoint?: string;\n /**\n * Self-hosted @font-face CSS from the theme API.\n * When provided, injects this CSS instead of loading from Google CDN.\n * Falls back to Google CDN when absent or null.\n */\n readonly fontFaceCss?: string | null;\n}\n\n/**\n * NewtoneProvider - Provides theme context to all Newtone components\n *\n * Wrap your app with this provider to enable mode switching.\n *\n * @example\n * ```tsx\n * <NewtoneProvider initialMode=\"light\">\n * <App />\n * </NewtoneProvider>\n * ```\n */\nexport function NewtoneProvider({\n config = DEFAULT_THEME_CONFIG,\n initialMode = 'light',\n children,\n reportingEndpoint,\n fontFaceCss,\n}: NewtoneProviderProps) {\n const [mode, setMode] = useState<ColorMode>(initialMode);\n\n const value = useMemo(\n () => ({\n config,\n mode,\n setMode,\n reportingEndpoint,\n }),\n [config, mode, reportingEndpoint]\n );\n\n return (\n <ThemeContext.Provider value={value}>\n {fontFaceCss ? (\n <SelfHostedFontLoader fontFaceCss={fontFaceCss} />\n ) : (\n <GoogleFontLoader fonts={config.typography.fonts} />\n )}\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, setMode } = 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 { ElevationLevel } from './types';\nimport type { ResolvedTokens } from '../tokens/types';\n\n/**\n * Context value provided by Frame to its descendants.\n * Contains the resolved elevation and pre-computed tokens.\n * Tokens are included to avoid redundant computeTokens calls in child components.\n */\nexport interface FrameContextValue {\n readonly elevation: ElevationLevel;\n readonly tokens: ResolvedTokens;\n}\n\n/**\n * FrameContext - Propagates elevation overrides from Frame to descendants.\n *\n * When null, components fall back to 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 } from 'newtone';\nimport type { PaletteConfig } from 'newtone';\nimport { fontConfigToFamily } from '@newtonedev/fonts';\nimport type { ColorSystemConfig, ColorMode, ElevationLevel, FontSlot, TokenOverrides } from '../theme/types';\nimport type { ResolvedTokens, PaletteTokens } from './types';\n\n/**\n * Per-mode fallback defaults shape shared by all palette defaults.\n */\nexport type PaletteDefaults = {\n readonly light: {\n readonly background: { readonly elevated: number; readonly ground: number; readonly sunken: number };\n readonly text: { readonly primary: number; readonly secondary: number; readonly tertiary: number; readonly disabled: number };\n readonly action: { readonly enabled: number; readonly hovered: number; readonly pressed: number };\n readonly border: { readonly enabled: number; readonly focused: number; readonly filled: number };\n };\n readonly dark: {\n readonly background: { readonly elevated: number; readonly ground: number; readonly sunken: number };\n readonly text: { readonly primary: number; readonly secondary: number; readonly tertiary: number; readonly disabled: number };\n readonly action: { readonly enabled: number; readonly hovered: number; readonly pressed: number };\n readonly border: { readonly enabled: number; readonly focused: number; readonly filled: number };\n };\n};\n\n/**\n * Per-mode fallback defaults for the neutral palette (normalized scale).\n * Single source of truth — consumed by computeTokens and the admin Token Tuner.\n *\n * Light: 0 = lightest, 1 = darkest. Dark: 0 = darkest, 1 = lightest.\n * Structured by token group so all per-palette defaults follow the same shape.\n */\nexport const NEUTRAL_DEFAULTS: PaletteDefaults = {\n light: {\n background: { elevated: 0, ground: 0.03, sunken: 0.06 },\n text: { primary: 0.9, secondary: 0.7, tertiary: 0.5, disabled: 0.3 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n dark: {\n background: { elevated: 0.24, ground: 0.20, sunken: 0.16 },\n text: { primary: 1.0, secondary: 0.85, tertiary: 0.7, disabled: 0.55 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n};\n\n/**\n * Accent palette defaults. Initial values match neutral — will be tuned per-palette later.\n */\nexport const ACCENT_DEFAULTS: PaletteDefaults = {\n light: {\n background: { elevated: 0, ground: 0.03, sunken: 0.06 },\n text: { primary: 0.9, secondary: 0.7, tertiary: 0.5, disabled: 0.3 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n dark: {\n background: { elevated: 0.24, ground: 0.20, sunken: 0.16 },\n text: { primary: 1.0, secondary: 0.85, tertiary: 0.7, disabled: 0.55 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n};\n\n/**\n * Success palette defaults. Initial values match neutral — will be tuned per-palette later.\n */\nexport const SUCCESS_DEFAULTS: PaletteDefaults = {\n light: {\n background: { elevated: 0, ground: 0.03, sunken: 0.06 },\n text: { primary: 0.9, secondary: 0.7, tertiary: 0.5, disabled: 0.3 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n dark: {\n background: { elevated: 0.24, ground: 0.20, sunken: 0.16 },\n text: { primary: 1.0, secondary: 0.85, tertiary: 0.7, disabled: 0.55 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n};\n\n/**\n * Warning palette defaults. Initial values match neutral — will be tuned per-palette later.\n */\nexport const WARNING_DEFAULTS: PaletteDefaults = {\n light: {\n background: { elevated: 0, ground: 0.03, sunken: 0.06 },\n text: { primary: 0.9, secondary: 0.7, tertiary: 0.5, disabled: 0.3 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n dark: {\n background: { elevated: 0.24, ground: 0.20, sunken: 0.16 },\n text: { primary: 1.0, secondary: 0.85, tertiary: 0.7, disabled: 0.55 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n};\n\n/**\n * Error palette defaults. Initial values match neutral — will be tuned per-palette later.\n */\nexport const ERROR_DEFAULTS: PaletteDefaults = {\n light: {\n background: { elevated: 0, ground: 0.03, sunken: 0.06 },\n text: { primary: 0.9, secondary: 0.7, tertiary: 0.5, disabled: 0.3 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n dark: {\n background: { elevated: 0.24, ground: 0.20, sunken: 0.16 },\n text: { primary: 1.0, secondary: 0.85, tertiary: 0.7, disabled: 0.55 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n};\n\nconst clamp = (n: number) => Math.max(0, Math.min(1, n));\n\n/**\n * Compute the complete PaletteTokens for a non-neutral palette.\n *\n * Uses the palette's hue/saturation with positions from the palette's defaults,\n * plus fill tokens at the palette's key NV position.\n *\n * @param palette - The palette config (hue, saturation, key NV, etc.)\n * @param defaults - Per-mode defaults for this palette (positions + offsets)\n * @param mode - Current color mode\n * @param elevation - Current elevation level\n * @param dynamicRange - Global dynamic range\n * @param elevationDelta - Compensation delta (current surface vs elevated reference)\n * @param effectiveTextMode - Derived from actual background lightness\n * @param autoAccentNv - Auto-derived key NV fallback\n * @param neutralTextPrimary - Neutral textPrimary for onFill (dark text on light fills)\n * @param neutralBgElevated - Neutral backgroundElevated for onFill (light text on dark fills)\n */\nfunction computePaletteTokens(\n palette: PaletteConfig,\n defaults: PaletteDefaults,\n mode: ColorMode,\n elevation: ElevationLevel,\n dynamicRange: { readonly lightest: number; readonly darkest: number },\n elevationDelta: number,\n effectiveTextMode: ColorMode,\n autoAccentNv: number,\n neutralTextPrimary: ReturnType<typeof getColor>,\n neutralBgElevated: ReturnType<typeof getColor>,\n): PaletteTokens {\n const modeDefaults = defaults[mode];\n const toEngineNv = (nv: number) => mode === 'light' ? 1 - nv : nv;\n const textToEngineNv = (nv: number) => effectiveTextMode === 'light' ? 1 - nv : nv;\n\n const colorAt = (engineNv: number) => getColor(\n palette.hue, palette.saturation, dynamicRange,\n clamp(engineNv), palette.desaturation, palette.paletteHueGrading\n );\n\n // --- Fill: key color (user-chosen or auto-derived), elevation-compensated ---\n const resolveKeyNv = (p: PaletteConfig): number | undefined =>\n mode === 'dark' ? p.keyNormalizedValueDark : p.keyNormalizedValue;\n\n const keyNv = resolveKeyNv(palette);\n const fillBaseNv = keyNv ?? autoAccentNv;\n const fillNv = clamp(fillBaseNv + elevationDelta);\n const fill = colorAt(fillNv);\n\n const hoverDir = effectiveTextMode === 'light' ? -modeDefaults.action.hovered : modeDefaults.action.hovered;\n const activeDir = effectiveTextMode === 'light' ? -modeDefaults.action.pressed : modeDefaults.action.pressed;\n const fillHover = colorAt(clamp(fillNv + hoverDir));\n const fillActive = colorAt(clamp(fillNv + activeDir));\n\n // onFill: high-contrast text on the fill color\n const onFill = fill.oklch.L > 0.6 ? neutralTextPrimary : neutralBgElevated;\n\n // --- Surface: palette-tinted backgrounds at standard positions ---\n const bgNormalized = elevation === 2\n ? modeDefaults.background.elevated\n : elevation === 1\n ? modeDefaults.background.ground\n : modeDefaults.background.sunken;\n const bgNv = clamp(toEngineNv(bgNormalized));\n const background = colorAt(bgNv);\n const backgroundElevated = colorAt(clamp(toEngineNv(modeDefaults.background.elevated)));\n const backgroundSunken = colorAt(clamp(toEngineNv(modeDefaults.background.sunken)));\n\n // --- Interactive surface: offset from palette background ---\n const interactiveOffset = modeDefaults.action.enabled;\n const interactiveNv = clamp(bgNv + (effectiveTextMode === 'light' ? -interactiveOffset : interactiveOffset));\n const backgroundInteractive = colorAt(interactiveNv);\n\n const hoverShift = modeDefaults.action.hovered;\n const activeShift = modeDefaults.action.pressed;\n const backgroundInteractiveHover = colorAt(clamp(interactiveNv + (effectiveTextMode === 'light' ? -hoverShift : hoverShift)));\n const backgroundInteractiveActive = colorAt(clamp(interactiveNv + (effectiveTextMode === 'light' ? -activeShift : activeShift)));\n\n // --- Text: palette-hued text at standard positions, elevation-compensated ---\n const textPrimary = colorAt(clamp(textToEngineNv(modeDefaults.text.primary) + elevationDelta));\n const textSecondary = colorAt(clamp(textToEngineNv(modeDefaults.text.secondary) + elevationDelta));\n const textTertiary = colorAt(clamp(textToEngineNv(modeDefaults.text.tertiary) + elevationDelta));\n const textDisabled = colorAt(clamp(textToEngineNv(modeDefaults.text.disabled) + elevationDelta));\n\n // --- Border: offset from palette background ---\n const borderOffset = modeDefaults.border.enabled;\n const borderNv = effectiveTextMode === 'light' ? bgNv - borderOffset : bgNv + borderOffset;\n const border = colorAt(clamp(borderNv));\n\n return {\n fill, fillHover, fillActive, onFill,\n background, backgroundElevated, backgroundSunken,\n backgroundInteractive, backgroundInteractiveHover, backgroundInteractiveActive,\n textPrimary, textSecondary, textTertiary, textDisabled,\n border,\n };\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 * Background surfaces use absolute positions from NEUTRAL_DEFAULTS (or tokenOverrides\n * when present). Elevation compensation is derived from the difference between\n * the current surface and the elevated reference surface.\n *\n * @param config - Complete color system configuration (dynamic range + palettes)\n * @param mode - Current color mode ('light' or 'dark')\n * @param elevation - Elevation level (0=sunken, 1=default, 2=elevated)\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 * 1,\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 elevation: ElevationLevel,\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 main: FontSlot; readonly display: FontSlot; readonly mono: FontSlot; readonly currency: FontSlot };\n readonly fontSizes: { readonly [key: string]: number };\n readonly lineHeights: { readonly [key: string]: 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 tokenOverrides?: TokenOverrides\n): ResolvedTokens {\n const { dynamicRange, palettes } = config;\n const palette = palettes[0]; // Always neutral palette for backgrounds\n\n if (!palette) {\n throw new Error('Neutral palette (index 0) not found');\n }\n\n const neutralDefaults = NEUTRAL_DEFAULTS[mode];\n\n // --- Mode-specific normalized field resolution ---\n const toEngineNv = (nv: number) => mode === 'light' ? 1 - nv : nv;\n const bgElevatedNorm = mode === 'light' ? tokenOverrides?.backgroundElevated : tokenOverrides?.backgroundElevatedDark;\n const bgDefaultNorm = mode === 'light' ? tokenOverrides?.backgroundDefault : tokenOverrides?.backgroundDefaultDark;\n const bgSunkenNorm = mode === 'light' ? tokenOverrides?.backgroundSunken : tokenOverrides?.backgroundSunkenDark;\n const textPrimaryNorm = mode === 'light' ? tokenOverrides?.textPrimaryNormalized : tokenOverrides?.textPrimaryNormalizedDark;\n const textSecondaryNorm = mode === 'light' ? tokenOverrides?.textSecondaryNormalized : tokenOverrides?.textSecondaryNormalizedDark;\n const textTertiaryNorm = mode === 'light' ? tokenOverrides?.textTertiaryNormalized : tokenOverrides?.textTertiaryNormalizedDark;\n const textDisabledNorm = mode === 'light' ? tokenOverrides?.textDisabledNormalized : tokenOverrides?.textDisabledNormalizedDark;\n\n // --- Background NV resolution ---\n // Absolute positions from tokenOverrides or NEUTRAL_DEFAULTS.\n // Ground = Background/01 (elevated). Everything diverges from there.\n const bgNormalized = elevation === 2\n ? (bgElevatedNorm ?? neutralDefaults.background.elevated)\n : elevation === 1\n ? (bgDefaultNorm ?? neutralDefaults.background.ground)\n : (bgSunkenNorm ?? neutralDefaults.background.sunken);\n const backgroundNv = clamp(toEngineNv(bgNormalized));\n const elevatedNv = clamp(toEngineNv(bgElevatedNorm ?? neutralDefaults.background.elevated));\n const sunkenNv = clamp(toEngineNv(bgSunkenNorm ?? neutralDefaults.background.sunken));\n\n // Elevation compensation: how far the current surface is from the reference (bg01/elevated).\n // Tokens designed at bg01 shift by this delta on deeper surfaces to preserve perceptual contrast.\n // Always 0 on bg01. Negative on bg02/bg03 in both modes (surface is darker → tokens darken too).\n const elevationDelta = backgroundNv - elevatedNv;\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\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\n const backgroundSunken = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n sunkenNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // --- Tunable constants (overridable via tokenOverrides, per-mode) ---\n // All values are magnitudes — direction auto-inverts per effectiveTextMode\n // (darker in light mode, lighter in dark mode)\n const INTERACTIVE_COMPONENT_OFFSET = mode === 'light'\n ? (tokenOverrides?.interactiveComponentOffset ?? neutralDefaults.action.enabled)\n : (tokenOverrides?.interactiveComponentOffsetDark ?? neutralDefaults.action.enabled);\n const HOVER_SHIFT = mode === 'light'\n ? (tokenOverrides?.hoverShift ?? neutralDefaults.action.hovered)\n : (tokenOverrides?.hoverShiftDark ?? neutralDefaults.action.hovered);\n const ACTIVE_SHIFT = mode === 'light'\n ? (tokenOverrides?.activeShift ?? neutralDefaults.action.pressed)\n : (tokenOverrides?.activeShiftDark ?? neutralDefaults.action.pressed);\n const BORDER_OFFSET = mode === 'light'\n ? (tokenOverrides?.borderOffset ?? neutralDefaults.border.enabled)\n : (tokenOverrides?.borderOffsetDark ?? neutralDefaults.border.enabled);\n // Compute interactive component background (FIXED NV offset from current elevation)\n // Unlike backgroundElevated/backgroundSunken which use discrete levels, this uses a fixed\n // luminosity offset to ensure CONSISTENT visual contrast across all elevations (-2 to 2).\n // Used by: Button (neutral primary variant) and future components with neutral filled backgrounds.\n const interactiveComponentNv = clamp(backgroundNv + (effectiveTextMode === 'light' ? -INTERACTIVE_COMPONENT_OFFSET : INTERACTIVE_COMPONENT_OFFSET));\n const backgroundInteractive = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n interactiveComponentNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Neutral hover/active: shift from interactive component base (same direction as accent hover/active)\n const neutralHoverNv = clamp(interactiveComponentNv + (effectiveTextMode === 'light' ? -HOVER_SHIFT : HOVER_SHIFT));\n const backgroundInteractiveHover = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n neutralHoverNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n const neutralActiveNv = clamp(interactiveComponentNv + (effectiveTextMode === 'light' ? -ACTIVE_SHIFT : ACTIVE_SHIFT));\n const backgroundInteractiveActive = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n neutralActiveNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // --- Text color resolution (elevation-compensated) ---\n // Normalized positions define text contrast at bg01 (elevated). On deeper surfaces,\n // elevationDelta shifts text toward the background to preserve the same contrast distance.\n // Uses effectiveTextMode for NV conversion so inverted themes (e.g., strong: dark bg in\n // light mode) auto-correct text direction — light text on dark bg, dark text on light bg.\n const textToEngineNv = (nv: number) => effectiveTextMode === 'light' ? 1 - nv : nv;\n\n const textPrimary = getColor(palette.hue, palette.saturation, dynamicRange,\n clamp(textToEngineNv(textPrimaryNorm ?? neutralDefaults.text.primary) + elevationDelta),\n palette.desaturation, palette.paletteHueGrading);\n\n const textSecondary = getColor(palette.hue, palette.saturation, dynamicRange,\n clamp(textToEngineNv(textSecondaryNorm ?? neutralDefaults.text.secondary) + elevationDelta),\n palette.desaturation, palette.paletteHueGrading);\n\n const textTertiary = getColor(palette.hue, palette.saturation, dynamicRange,\n clamp(textToEngineNv(textTertiaryNorm ?? neutralDefaults.text.tertiary) + elevationDelta),\n palette.desaturation, palette.paletteHueGrading);\n\n const textDisabled = getColor(palette.hue, palette.saturation, dynamicRange,\n clamp(textToEngineNv(textDisabledNorm ?? neutralDefaults.text.disabled) + elevationDelta),\n palette.desaturation, palette.paletteHueGrading);\n\n // Border: Subtle contrast from background\n const borderNv = effectiveTextMode === 'light' ? backgroundNv - BORDER_OFFSET : backgroundNv + BORDER_OFFSET;\n const border = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n clamp(borderNv),\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // --- Per-palette token computation ---\n // Auto accent NV: derived from text primary position (used when no explicit key color is set)\n const autoAccentNv = clamp(textToEngineNv(textPrimaryNorm ?? neutralDefaults.text.primary));\n\n const accentPalette = palettes[1];\n if (!accentPalette) {\n throw new Error('Accent palette (index 1) not found');\n }\n\n const accent = computePaletteTokens(\n accentPalette, ACCENT_DEFAULTS, mode, elevation, dynamicRange,\n elevationDelta, effectiveTextMode, autoAccentNv,\n textPrimary, backgroundElevated,\n );\n\n const successPalette = palettes[2];\n const warningPalette = palettes[3];\n const errorPalette = palettes[4];\n\n // Semantic palettes: fall back to accent palette if not present\n const success = successPalette\n ? computePaletteTokens(\n successPalette, SUCCESS_DEFAULTS, mode, elevation, dynamicRange,\n elevationDelta, effectiveTextMode, autoAccentNv,\n textPrimary, backgroundElevated,\n )\n : accent;\n\n const warning = warningPalette\n ? computePaletteTokens(\n warningPalette, WARNING_DEFAULTS, mode, elevation, dynamicRange,\n elevationDelta, effectiveTextMode, autoAccentNv,\n textPrimary, backgroundElevated,\n )\n : accent;\n\n const error = errorPalette\n ? computePaletteTokens(\n errorPalette, ERROR_DEFAULTS, mode, elevation, dynamicRange,\n elevationDelta, effectiveTextMode, autoAccentNv,\n textPrimary, backgroundElevated,\n )\n : accent;\n\n return {\n background,\n backgroundElevated,\n backgroundSunken,\n backgroundInteractive,\n backgroundInteractiveHover,\n backgroundInteractiveActive,\n textPrimary,\n textSecondary,\n textTertiary,\n textDisabled,\n border,\n accent,\n success,\n warning,\n error,\n spacing,\n radius,\n typography: {\n fonts: {\n main: {\n family: fontConfigToFamily(typography.fonts.main.config),\n weights: typography.fonts.main.weights,\n },\n display: {\n family: fontConfigToFamily(typography.fonts.display.config),\n weights: typography.fonts.display.weights,\n },\n mono: {\n family: fontConfigToFamily(typography.fonts.mono.config),\n weights: typography.fonts.mono.weights,\n },\n currency: {\n family: fontConfigToFamily(typography.fonts.currency.config),\n weights: typography.fonts.currency.weights,\n },\n },\n fontSizes: typography.fontSizes,\n lineHeights: typography.lineHeights,\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 * Extended tokens result that includes the resolved elevation level.\n * This allows components to make elevation-aware styling decisions.\n */\nexport interface UseTokensResult extends ResolvedTokens {\n elevation: ElevationLevel;\n}\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 * When inside a Frame and no explicit elevation override is given, reuses the\n * Frame's pre-computed tokens to avoid redundant computeTokens calls.\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 + resolved elevation\n */\nexport function useTokens(elevation?: ElevationLevel): UseTokensResult {\n const { config, mode } = useNewtoneTheme();\n const frameCtx = useFrameContext();\n\n // Resolve elevation: explicit param > FrameContext > default 1\n const resolvedElevation: ElevationLevel = elevation ?? frameCtx?.elevation ?? 1;\n\n // Optimization: reuse Frame's pre-computed tokens when elevation matches\n // and no explicit elevation override was given.\n const canReuse = frameCtx !== null\n && elevation === undefined\n && frameCtx.elevation === resolvedElevation;\n\n return useMemo(() => {\n if (canReuse) {\n return { ...frameCtx!.tokens, elevation: resolvedElevation };\n }\n\n const tokens = computeTokens(\n config.colorSystem,\n mode,\n resolvedElevation,\n config.spacing,\n config.radius,\n config.typography,\n config.icons,\n config.tokenOverrides\n );\n\n return { ...tokens, elevation: resolvedElevation };\n }, [config, mode, resolvedElevation, canReuse, frameCtx?.tokens]);\n}\n","import { srgbToHex } from 'newtone';\nimport type { UseTokensResult } from '../../../tokens/useTokens';\nimport type { PaletteTokens } from '../../../tokens/types';\nimport type { ButtonVariant, ButtonSemantic, ButtonSize } from './Button.types';\nimport type { TextSize } from '../../../primitives/Text/Text.types';\n\n/**\n * Configuration returned by getButtonConfig\n */\nexport interface ButtonConfig {\n variantColors: {\n bg: string;\n hoveredBg: string;\n pressedBg: string;\n textColor: string;\n iconColor: string;\n borderWidth: number;\n borderColor?: string;\n };\n sizeTokens: {\n padding: number;\n gap: number;\n borderRadius: number;\n textSize: TextSize;\n iconSize: number;\n };\n}\n\n/**\n * Padding object for asymmetric horizontal padding\n */\nexport interface ButtonPadding {\n paddingLeft: number;\n paddingRight: number;\n paddingTop: number;\n paddingBottom: number;\n}\n\n/**\n * Compute asymmetric button padding based on icon/text presence.\n *\n * Text appears visually closer to borders than icons, so we add 8px extra\n * horizontal padding on the text side for optical balance.\n *\n * @param size - Button size (determines base padding)\n * @param hasIcon - Whether button has an icon\n * @param hasText - Whether button has text\n * @param iconPosition - Icon position relative to text\n * @returns Padding object with all four sides\n */\nexport function computeButtonPadding(\n size: ButtonSize,\n hasIcon: boolean,\n hasText: boolean,\n iconPosition: 'left' | 'right'\n): ButtonPadding {\n // Size-specific base padding\n const basePadding: Record<ButtonSize, number> = {\n sm: 8,\n md: 12,\n lg: 16,\n };\n\n const base = basePadding[size];\n const textExtra = 8; // Optical correction for text vs icon\n\n // Icon-only: square button\n if (!hasText && hasIcon) {\n return {\n paddingLeft: base,\n paddingRight: base,\n paddingTop: base,\n paddingBottom: base,\n };\n }\n\n // Text-only: extra padding on both sides\n if (hasText && !hasIcon) {\n return {\n paddingLeft: base + textExtra,\n paddingRight: base + textExtra,\n paddingTop: base,\n paddingBottom: base,\n };\n }\n\n // Icon + text: extra padding on text side only\n if (hasText && hasIcon) {\n if (iconPosition === 'left') {\n return {\n paddingLeft: base,\n paddingRight: base + textExtra,\n paddingTop: base,\n paddingBottom: base,\n };\n } else {\n return {\n paddingLeft: base + textExtra,\n paddingRight: base,\n paddingTop: base,\n paddingBottom: base,\n };\n }\n }\n\n // Fallback: symmetric base padding\n return {\n paddingLeft: base,\n paddingRight: base,\n paddingTop: base,\n paddingBottom: base,\n };\n}\n\n/**\n * Resolve the PaletteTokens for a given semantic.\n * Returns undefined for 'neutral' (handled separately).\n */\nfunction getPaletteTokens(semantic: ButtonSemantic, tokens: UseTokensResult): PaletteTokens | undefined {\n switch (semantic) {\n case 'accent': return tokens.accent;\n case 'success': return tokens.success;\n case 'error': return tokens.error;\n case 'warning': return tokens.warning;\n default: return undefined;\n }\n}\n\n/**\n * Compute button configuration based on variant, semantic, size, and state.\n *\n * This function ONLY computes variant colors + size tokens.\n * Layout concerns (flexbox, spacing, alignment) are handled by Wrapper primitive.\n * Typography concerns (font, size, weight) are handled by Text primitive.\n *\n * Elevation-aware: neutral primary uses backgroundInteractive for consistent contrast.\n * Semantic variants use proper PaletteTokens — no opacity hacks.\n *\n * @param variant - Button type (primary, secondary, tertiary)\n * @param semantic - Button semantic meaning (neutral, accent, success, error, warning)\n * @param size - Button size (sm, md, lg)\n * @param disabled - Whether button is disabled\n * @param tokens - Resolved tokens for current elevation\n * @returns ButtonConfig with variantColors and sizeTokens\n */\nexport function getButtonConfig(\n variant: ButtonVariant,\n semantic: ButtonSemantic,\n size: ButtonSize,\n disabled: boolean,\n tokens: UseTokensResult\n): ButtonConfig {\n // Get size configuration\n const sizeConfig = getSizeConfig(size, tokens);\n\n // Get variant-specific colors\n const variantColors = getVariantColors(variant, semantic, disabled, tokens);\n\n return {\n variantColors,\n sizeTokens: {\n padding: sizeConfig.padding,\n gap: sizeConfig.gap,\n borderRadius: sizeConfig.borderRadius,\n textSize: sizeConfig.textSize,\n iconSize: sizeConfig.iconSize,\n },\n };\n}\n\n/**\n * Get size configuration with unified icon/text sizes across all sizes.\n * Only padding and radius scale with size.\n */\nfunction getSizeConfig(size: ButtonSize, tokens: UseTokensResult) {\n const configs: Record<ButtonSize, {\n padding: number;\n gap: number;\n borderRadius: number;\n textSize: TextSize;\n iconSize: number;\n }> = {\n sm: {\n padding: 8,\n gap: tokens.spacing['08'],\n borderRadius: 8,\n textSize: 'md', // 16px\n iconSize: 24,\n },\n md: {\n padding: 12,\n gap: tokens.spacing['08'],\n borderRadius: 12,\n textSize: 'md', // 16px\n iconSize: 24,\n },\n lg: {\n padding: 16,\n gap: tokens.spacing['08'],\n borderRadius: 16,\n textSize: 'md', // 16px\n iconSize: 24,\n },\n };\n\n return configs[size];\n}\n\n/**\n * Get variant-specific colors from theme tokens.\n * Handles disabled state override for all variants.\n */\nfunction getVariantColors(\n variant: ButtonVariant,\n semantic: ButtonSemantic,\n disabled: boolean,\n tokens: UseTokensResult\n) {\n // Disabled state overrides for all variants\n if (disabled) {\n const baseColors = getVariantColorsForState(variant, semantic, tokens);\n const disabledBg = srgbToHex(tokens.backgroundSunken.srgb);\n return {\n ...baseColors,\n bg: disabledBg,\n hoveredBg: disabledBg,\n pressedBg: disabledBg,\n textColor: srgbToHex(tokens.textSecondary.srgb),\n iconColor: srgbToHex(tokens.textSecondary.srgb),\n };\n }\n\n return getVariantColorsForState(variant, semantic, tokens);\n}\n\n/**\n * Get variant colors for non-disabled state.\n * Implements 3 types × 5 semantics = 15 combinations.\n * Uses proper PaletteTokens for all semantic variants — no opacity hacks.\n */\nfunction getVariantColorsForState(\n variant: ButtonVariant,\n semantic: ButtonSemantic,\n tokens: UseTokensResult\n) {\n const paletteTokens = getPaletteTokens(semantic, tokens);\n\n // PRIMARY VARIANT: Filled background\n if (variant === 'primary') {\n if (semantic === 'neutral') {\n // Neutral primary - uses backgroundInteractive tokens for consistent contrast across elevations\n return {\n bg: srgbToHex(tokens.backgroundInteractive.srgb),\n hoveredBg: srgbToHex(tokens.backgroundInteractiveHover.srgb),\n pressedBg: srgbToHex(tokens.backgroundInteractiveActive.srgb),\n textColor: srgbToHex(tokens.textPrimary.srgb),\n iconColor: srgbToHex(tokens.textPrimary.srgb),\n borderWidth: 1,\n borderColor: 'transparent',\n };\n }\n\n // Semantic primary (accent, success, error, warning) — uses palette fill tokens\n return {\n bg: srgbToHex(paletteTokens!.fill.srgb),\n hoveredBg: srgbToHex(paletteTokens!.fillHover.srgb),\n pressedBg: srgbToHex(paletteTokens!.fillActive.srgb),\n textColor: srgbToHex(paletteTokens!.onFill.srgb),\n iconColor: srgbToHex(paletteTokens!.onFill.srgb),\n borderWidth: 1,\n borderColor: 'transparent',\n };\n }\n\n // SECONDARY VARIANT: Outlined (border + subtle background for non-neutral)\n if (variant === 'secondary') {\n if (semantic === 'neutral') {\n // Shifted action scale: transparent → 01 (hover) → 02 (pressed)\n return {\n bg: 'transparent',\n hoveredBg: srgbToHex(tokens.backgroundInteractive.srgb),\n pressedBg: srgbToHex(tokens.backgroundInteractiveHover.srgb),\n textColor: srgbToHex(tokens.textPrimary.srgb),\n iconColor: srgbToHex(tokens.textPrimary.srgb),\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n };\n }\n\n // Semantic secondary — uses palette surface tokens for subtle bg\n return {\n bg: srgbToHex(paletteTokens!.background.srgb),\n hoveredBg: srgbToHex(paletteTokens!.backgroundInteractive.srgb),\n pressedBg: srgbToHex(paletteTokens!.backgroundInteractiveHover.srgb),\n textColor: srgbToHex(paletteTokens!.fill.srgb),\n iconColor: srgbToHex(paletteTokens!.fill.srgb),\n borderWidth: 1,\n borderColor: 'transparent',\n };\n }\n\n // TERTIARY VARIANT: Ghost (text-only, no visible border)\n if (variant === 'tertiary') {\n if (semantic === 'neutral') {\n // Shifted action scale: transparent → 01 (hover) → 02 (pressed)\n return {\n bg: 'transparent',\n hoveredBg: srgbToHex(tokens.backgroundInteractive.srgb),\n pressedBg: srgbToHex(tokens.backgroundInteractiveHover.srgb),\n textColor: srgbToHex(tokens.textPrimary.srgb),\n iconColor: srgbToHex(tokens.textPrimary.srgb),\n borderWidth: 1,\n borderColor: 'transparent',\n };\n }\n\n // Semantic tertiary — uses palette surface tokens for hover/pressed\n return {\n bg: 'transparent',\n hoveredBg: srgbToHex(paletteTokens!.background.srgb),\n pressedBg: srgbToHex(paletteTokens!.backgroundInteractive.srgb),\n textColor: srgbToHex(paletteTokens!.fill.srgb),\n iconColor: srgbToHex(paletteTokens!.fill.srgb),\n borderWidth: 1,\n borderColor: 'transparent',\n };\n }\n\n // Fallback (should never reach here with proper types)\n return {\n bg: 'transparent',\n hoveredBg: 'transparent',\n pressedBg: 'transparent',\n textColor: srgbToHex(tokens.textPrimary.srgb),\n iconColor: srgbToHex(tokens.textPrimary.srgb),\n borderWidth: 0,\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 style,\n // Accessibility\n accessibilityLabel,\n // Testing & platform\n testID,\n nativeID,\n ref,\n}: IconProps) {\n // Inherit tokens from nearest parent Frame via FrameContext.\n const tokens = useTokens();\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.fontSizes['05'];\n\n // Round to nearest Material Symbols optical size (20, 24, 40, 48)\n // for optimal stroke weight and detail rendering.\n const getOpticalSize = (size: number): number => {\n if (size <= 22) return 20;\n if (size <= 32) return 24;\n if (size <= 44) return 40;\n return 48;\n };\n\n // Optical size adjusts stroke weight for readability at small sizes.\n // Use explicit opticalSize if provided, otherwise auto-calculate from fontSize.\n const opsz = opticalSize ?? getOpticalSize(fontSize);\n\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 fillValue = typeof fill === 'boolean' ? (fill ? 1 : 0) : fill;\n const fontVariationSettings = `'FILL' ${fillValue}, 'wght' ${tokens.icons.weight}, 'GRAD' ${tokens.icons.grade}, 'opsz' ${opsz}`;\n\n return {\n fontFamily,\n fontSize,\n width: fontSize, // Explicit width ensures square rendering\n height: fontSize, // Explicit height ensures square rendering\n lineHeight: fontSize, // Prevent text line-height from affecting total height\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 >\n {name}\n </Text>\n );\n}\n","/**\n * Reference string for character width measurement.\n * Covers uppercase, lowercase, digits, and a space — 63 characters total.\n */\nconst REF_STRING =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ';\n\n/** Race a promise against a timeout. Resolves with fallback if the promise doesn't settle in time. */\nfunction withTimeout<T>(promise: Promise<T>, ms: number, fallback: T): Promise<T> {\n return Promise.race([\n promise,\n new Promise<T>((resolve) => setTimeout(() => resolve(fallback), ms)),\n ]);\n}\n\n/**\n * Measure the average character width ratio for a font using the Canvas API.\n *\n * Waits for the font to load via `document.fonts.load()` before measuring,\n * with a 3-second timeout to prevent hangs when fonts fail to load silently.\n * Falls back to 0.55 if the browser context is unavailable, the font fails\n * to load, or canvas is not supported.\n *\n * The returned ratio represents `avgCharWidth / fontSize`. Multiply by a\n * desired fontSize to estimate character widths for that font.\n *\n * @param fontFamily - Font family name, e.g. \"Inter\" or \"system-ui\"\n * @param fontWeight - CSS font-weight number, e.g. 400\n * @param fallback - CSS fallback stack, e.g. \"sans-serif\"\n * @param fontSize - Reference font size in px (default 16)\n * @returns Average character width ratio, e.g. 0.52 for Inter\n */\nexport async function measureAvgCharWidth(\n fontFamily: string,\n fontWeight: number,\n fallback: string,\n fontSize = 16,\n): Promise<number> {\n if (typeof document === 'undefined') return 0.55;\n try {\n await withTimeout(\n document.fonts.load(`${fontWeight} ${fontSize}px \"${fontFamily}\"`),\n 3000,\n [] as FontFace[],\n );\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) return 0.55;\n ctx.font = `${fontWeight} ${fontSize}px \"${fontFamily}\", ${fallback}`;\n const ratio = ctx.measureText(REF_STRING).width / REF_STRING.length / fontSize;\n return Math.round(ratio * 1000) / 1000;\n } catch {\n return 0.55;\n }\n}\n","import { useState, useEffect } from 'react';\nimport { measureAvgCharWidth } from './measureFont';\n\nconst STORAGE_KEY = 'newtone:font-metrics:v1';\nconst TTL_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\n\ninterface CacheEntry {\n readonly ratio: number;\n readonly measuredAt: number;\n}\n\ntype FontMetricsCache = Record<string, CacheEntry>;\n\nfunction readCache(): FontMetricsCache {\n if (typeof localStorage === 'undefined') return {};\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n return raw ? (JSON.parse(raw) as FontMetricsCache) : {};\n } catch {\n return {};\n }\n}\n\nfunction writeCache(cache: FontMetricsCache): void {\n if (typeof localStorage === 'undefined') return;\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(cache));\n } catch {\n // Ignore write errors (quota exceeded, private browsing)\n }\n}\n\nfunction cacheKey(fontFamily: string, fontWeight: number): string {\n return `${fontFamily}:${fontWeight}`;\n}\n\n/**\n * Returns the avgCharWidth ratio for a font, using a device-local measurement\n * cached in localStorage (Layer 2 calibration).\n *\n * Resolution order:\n * 1. localStorage cache (if fresh, < 7 days old)\n * 2. `baseCalibration` (Layer 1 — editor-time canvas measurement from theme config)\n * 3. 0.55 (fallback constant)\n *\n * On mount, measures the font if the cache is stale or absent, then updates\n * localStorage and triggers a re-render with the device-accurate ratio.\n *\n * @param fontFamily - CSS font family name, e.g. \"Inter\"\n * @param fontWeight - CSS font-weight number, e.g. 400\n * @param fallback - CSS fallback stack, e.g. \"sans-serif\"\n * @param baseCalibration - Layer 1 ratio from `themeConfig.typography.calibrations`\n */\nexport function useLocalCalibration(\n fontFamily: string,\n fontWeight: number,\n fallback: string,\n baseCalibration?: number,\n): number {\n const key = cacheKey(fontFamily, fontWeight);\n\n // Initialise synchronously from cache so the first render uses a calibrated ratio\n const [ratio, setRatio] = useState<number>(() => {\n const cache = readCache();\n const entry = cache[key];\n if (entry && Date.now() - entry.measuredAt < TTL_MS) {\n return entry.ratio;\n }\n return baseCalibration ?? 0.55;\n });\n\n useEffect(() => {\n const cache = readCache();\n const entry = cache[key];\n if (entry && Date.now() - entry.measuredAt < TTL_MS) {\n // Cache is fresh — no re-measurement needed\n if (entry.ratio !== ratio) setRatio(entry.ratio);\n return;\n }\n\n // Cache is stale or absent — measure in the background\n let cancelled = false;\n measureAvgCharWidth(fontFamily, fontWeight, fallback).then((measured) => {\n if (cancelled) return;\n const updated = { ...readCache(), [key]: { ratio: measured, measuredAt: Date.now() } };\n writeCache(updated);\n setRatio(measured);\n });\n return () => {\n cancelled = true;\n };\n // Intentionally excluding `ratio` from deps — we only want to re-measure on key/font change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [key, fontFamily, fontWeight, fallback]);\n\n return ratio;\n}\n","import { useNewtoneTheme } from '../theme/NewtoneProvider';\n\n/**\n * Returns the per-font avgCharWidth calibrations from the current theme config.\n *\n * These are Layer 1 (editor-time) calibrations — measured with canvas at publish\n * time and stored in `themeConfig.typography.calibrations`. Use `useLocalCalibration`\n * to overlay device-local (Layer 2) measurements on top.\n *\n * @returns Record of fontFamily → avgCharWidthRatio, or an empty object if absent.\n */\nexport function useTypographyCalibrations(): Record<string, number> {\n const { config } = useNewtoneTheme();\n return config.typography.calibrations ?? {};\n}\n","import type { ObserverPayload } from '@newtonedev/fonts';\n\n/**\n * Module-level batch queue for typography observations (Layer 3 reporting).\n *\n * Lives outside React's component lifecycle so it survives re-renders.\n * Observations are enqueued immediately and flushed in a single batch after\n * a 2s debounce — minimising network requests and allowing coalescence.\n *\n * Usage: call `enqueueObservation(endpoint, payload)` from responsive Text\n * instances. Set `reportingEndpoint` on `NewtoneProvider` to opt in.\n */\n\ninterface QueuedObservation {\n readonly endpoint: string;\n readonly payload: ObserverPayload;\n}\n\nconst queue: QueuedObservation[] = [];\nlet flushTimer: ReturnType<typeof setTimeout> | undefined;\n\nfunction flush(): void {\n if (queue.length === 0) return;\n\n // Group by endpoint so a page with multiple endpoints gets one request each\n const byEndpoint = new Map<string, ObserverPayload[]>();\n for (const item of queue) {\n const group = byEndpoint.get(item.endpoint) ?? [];\n group.push(item.payload);\n byEndpoint.set(item.endpoint, group);\n }\n queue.length = 0;\n\n for (const [endpoint, observations] of byEndpoint) {\n // Fire-and-forget — reporting failures are silent and never affect the UI\n fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ observations }),\n // keepalive: true allows the request to outlive the page\n keepalive: true,\n }).catch(() => {});\n }\n}\n\n/**\n * Enqueue a typography observation for batch reporting.\n * Resets the 2s debounce timer on each call.\n */\nexport function enqueueObservation(endpoint: string, payload: ObserverPayload): void {\n queue.push({ endpoint, payload });\n if (flushTimer !== undefined) clearTimeout(flushTimer);\n flushTimer = setTimeout(flush, 2000);\n}\n","import { useWindowDimensions } from 'react-native';\nimport { getBreakpointForWidth } from '@newtonedev/fonts';\nimport type { BreakpointKey } from '@newtonedev/fonts';\n\n/**\n * Returns the current viewport breakpoint key ('sm' | 'md' | 'lg').\n *\n * Uses `useWindowDimensions` from react-native (cross-platform — works\n * on web via react-native-web) and re-evaluates on window resize.\n */\nexport function useBreakpoint(): BreakpointKey {\n const { width } = useWindowDimensions();\n return getBreakpointForWidth(width);\n}\n","import React, { createContext, useMemo, useState, useEffect } from 'react';\nimport { Text as RNText, View } from 'react-native';\nimport type { LayoutChangeEvent, TextStyle } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport { resolveResponsiveSize, estimateLineWidths, BREAKPOINT_ROLE_SCALE, scaleRoleStep, REFERENCE_LINE_HEIGHT_RATIO, buildFontFeatureSettings, SEMANTIC_WEIGHT_MAP, ROLE_DEFAULT_WEIGHTS } from '@newtonedev/fonts';\nimport { useTokens } from '../../tokens/useTokens';\nimport { useNewtoneTheme } from '../../theme/NewtoneProvider';\nimport type { UseTokensResult } from '../../tokens/useTokens';\nimport type { TextProps, TextColor } from './Text.types';\nimport { useLocalCalibration } from '../../fonts/useLocalCalibration';\nimport { useTypographyCalibrations } from '../../fonts/useTypographyCalibrations';\nimport { enqueueObservation } from '../../fonts/reportQueue';\nimport { useBreakpoint } from '../../theme/useBreakpoint';\n\n/**\n * Context to pass the active scope's weight map to span sub-components.\n * Spans inherit font family from the parent RN Text, but need the scope's\n * weight mapping to resolve semantic weight tokens (regular/medium/bold)\n * to numeric CSS values.\n */\nexport const TextScopeContext = createContext<{\n readonly weights: { readonly regular: number; readonly medium: number; readonly bold: number };\n} | null>(null);\n\n/**\n * Resolve a semantic text color to a hex string from the current tokens.\n * Neutral text colors are top-level; palette colors use nested PaletteTokens.fill.\n */\nexport function resolveTextColor(color: TextColor, tokens: UseTokensResult): string {\n switch (color) {\n case 'primary': return srgbToHex(tokens.textPrimary.srgb);\n case 'secondary': return srgbToHex(tokens.textSecondary.srgb);\n case 'tertiary': return srgbToHex(tokens.textTertiary.srgb);\n case 'disabled': return srgbToHex(tokens.textDisabled.srgb);\n case 'accent': return srgbToHex(tokens.accent.fill.srgb);\n case 'success': return srgbToHex(tokens.success.fill.srgb);\n case 'warning': return srgbToHex(tokens.warning.fill.srgb);\n case 'error': return srgbToHex(tokens.error.fill.srgb);\n }\n}\n\n/** Adaptive roles that support responsive font sizing. */\nconst ADAPTIVE_ROLES = new Set(['headline', 'title', 'heading', 'subheading']);\n\n/** Maps heading-like roles to HTML heading levels for semantic rendering on web. */\nconst ROLE_HEADING_LEVEL: Readonly<Record<string, number>> = {\n headline: 1,\n title: 2,\n heading: 3,\n};\n\n/** Estimate total character count from potentially nested React children. */\nfunction extractCharacterCount(node: React.ReactNode): number {\n if (typeof node === 'string') return node.length;\n if (typeof node === 'number') return String(node).length;\n if (!node) return 0;\n if (Array.isArray(node)) {\n return node.reduce((sum: number, child) => sum + extractCharacterCount(child), 0);\n }\n if (typeof node === 'object' && 'props' in node) {\n return extractCharacterCount((node as React.ReactElement).props?.children);\n }\n return 0;\n}\n\n/**\n * Token-aware text primitive with semantic scope + role API.\n *\n * - `scope` selects the font family (main, display, mono, currency)\n * - `role` sets default weight; fontSize and lineHeight resolved from config's role mapping\n * - `size` selects within the role's 3-step scale (sm, md, lg)\n * - `responsive` enables container-width-aware font sizing for adaptive roles\n *\n * @example\n * ```tsx\n * <Text>Body text (default)</Text>\n * <Text role=\"headline\" scope=\"display\">Hero title</Text>\n * <Text role=\"label\">Form label</Text>\n * <Text scope=\"mono\" role=\"caption\">const x = 42;</Text>\n * <Text role=\"body\">Regular <Text.Bold>bold</Text.Bold> text</Text>\n * <Text role=\"headline\" responsive>Responsive headline</Text>\n * ```\n */\nfunction TextBase({\n children,\n scope = 'main',\n role = 'body',\n color = 'primary',\n size: sizeOverride,\n weight: weightOverride,\n align,\n numberOfLines,\n elevation = 1,\n style,\n accessibilityRole: accessibilityRoleOverride,\n testID,\n nativeID,\n ref,\n responsive = false,\n centerVertically = false,\n features,\n}: TextProps) {\n const tokens = useTokens(elevation);\n const { config, reportingEndpoint } = useNewtoneTheme();\n\n const size = sizeOverride ?? 'md';\n const fontSlot = tokens.typography.fonts[scope];\n // roleWeights from config (user-customized), falling back to canonical defaults\n const resolvedFontWeight = weightOverride\n ? SEMANTIC_WEIGHT_MAP[weightOverride]\n : (config.typography.roleWeights?.[role] ?? ROLE_DEFAULT_WEIGHTS[role]);\n\n // --- Breakpoint-aware step ---\n const breakpoint = useBreakpoint();\n const baseStep = config.typography.roles[role][size];\n const bpScale = BREAKPOINT_ROLE_SCALE[breakpoint][role];\n const step = bpScale === 1.0 ? baseStep : scaleRoleStep(baseStep, bpScale);\n\n // --- Responsive sizing (Layer 2 calibration) ---\n // Hooks are called unconditionally; results are used only when `responsive && isAdaptive`.\n const calibrations = useTypographyCalibrations();\n const fontSlotFull = config.typography.fonts[scope]; // FontSlot with config.fallback\n const localRatio = useLocalCalibration(\n fontSlot.family,\n SEMANTIC_WEIGHT_MAP.regular,\n fontSlotFull.config.fallback,\n calibrations[fontSlot.family],\n );\n\n const isAdaptive = ADAPTIVE_ROLES.has(role);\n const [containerWidth, setContainerWidth] = useState<number | null>(null);\n const characterCount = useMemo(() => extractCharacterCount(children), [children]);\n\n const resolvedStep = useMemo(\n () =>\n resolveResponsiveSize(\n {\n role,\n size,\n responsive: responsive && isAdaptive,\n fontFamily: fontSlot.family,\n maxFontSize: step.fontSize,\n minFontSize: Math.max(8, Math.round(step.fontSize * 0.7)),\n },\n config.typography.roles,\n containerWidth != null ? { containerWidth, characterCount } : undefined,\n { [fontSlot.family]: localRatio },\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [role, size, responsive, isAdaptive, fontSlot.family, step.fontSize, config.typography.roles, containerWidth, characterCount, localRatio],\n );\n\n // --- Layer 3: report observations for cross-site rolling averages ---\n useEffect(() => {\n if (!reportingEndpoint || !responsive || !isAdaptive || containerWidth == null) return;\n const lineWidths = estimateLineWidths(characterCount, containerWidth, resolvedStep.fontSize, localRatio);\n const lastLine = lineWidths[lineWidths.length - 1];\n enqueueObservation(reportingEndpoint, {\n fontFamily: fontSlot.family,\n fontWeight: resolvedFontWeight,\n role,\n size,\n fontSize: resolvedStep.fontSize,\n containerWidth,\n characterCount,\n lineCount: lineWidths.length,\n lastLineRatio: containerWidth > 0 ? lastLine / containerWidth : 1,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [reportingEndpoint, resolvedStep.fontSize, containerWidth]);\n\n const resolvedStyle = useMemo<TextStyle>(() => {\n const activeStep = responsive && isAdaptive ? resolvedStep : step;\n\n // Font metrics corrections (adjustLineHeight, verticalCenterOffset, features)\n const currentMetrics = config.typography.fontMetrics?.[fontSlot.family];\n\n // Phase 3: Correct line height for font's natural vertical extent (snap to 4px grid)\n const correctedLineHeight = currentMetrics\n ? Math.round((activeStep.lineHeight * currentMetrics.naturalLineHeightRatio / REFERENCE_LINE_HEIGHT_RATIO) / 4) * 4\n : activeStep.lineHeight;\n\n // Phase 4: Visual centering correction (opt-in via centerVertically prop, snap to 0.5px)\n const vcOffset = centerVertically && currentMetrics\n ? Math.round(currentMetrics.verticalCenterOffset * activeStep.fontSize * 2) / 2\n : 0;\n\n // Phase 5: OpenType feature settings\n const activeFeatures = features\n ? (currentMetrics?.features ? features.filter(tag => currentMetrics.features.includes(tag)) : [...features])\n : [];\n const featureSettings = activeFeatures.length > 0 ? buildFontFeatureSettings(activeFeatures) : undefined;\n\n return {\n fontFamily: fontSlot.family,\n fontSize: activeStep.fontSize,\n fontWeight: String(resolvedFontWeight) as TextStyle['fontWeight'],\n color: resolveTextColor(color, tokens),\n lineHeight: correctedLineHeight,\n textAlign: align,\n ...(vcOffset !== 0 ? { transform: [{ translateY: vcOffset }] } : {}),\n ...(featureSettings ? { fontFeatureSettings: featureSettings } as any : {}),\n };\n }, [tokens, fontSlot, step, resolvedStep, responsive, isAdaptive, resolvedFontWeight, color, align, config.typography.fontMetrics, centerVertically, features]);\n\n // Auto-derive accessibility role and heading level for heading-like typography roles.\n // react-native-web uses aria-level to render the correct <h1>/<h2>/<h3> element.\n const inferredA11yRole = (role === 'headline' || role === 'title' || role === 'heading')\n ? 'header' as const\n : undefined;\n const effectiveA11yRole = accessibilityRoleOverride ?? inferredA11yRole;\n const ariaLevel = effectiveA11yRole === 'header' ? ROLE_HEADING_LEVEL[role] : undefined;\n\n // Scope context value for span sub-components (stable reference — weights are constant)\n const scopeCtx = useMemo(() => ({ weights: SEMANTIC_WEIGHT_MAP }), []);\n\n const textNode = (\n <TextScopeContext.Provider value={scopeCtx}>\n <RNText\n ref={ref}\n testID={testID}\n nativeID={nativeID}\n accessibilityRole={effectiveA11yRole}\n aria-level={ariaLevel}\n style={style\n ? [resolvedStyle, ...(Array.isArray(style) ? style : [style])]\n : resolvedStyle\n }\n numberOfLines={numberOfLines}\n >\n {children}\n </RNText>\n </TextScopeContext.Provider>\n );\n\n // Wrap in a View for container measurement when responsive mode is active on an adaptive role.\n // onLayout fires whenever the container's dimensions change, providing the measured width.\n if (responsive && isAdaptive) {\n return (\n <View\n onLayout={(e: LayoutChangeEvent) => {\n const w = e.nativeEvent.layout.width;\n if (w > 0) setContainerWidth(w);\n }}\n style={{ width: '100%' }}\n >\n {textNode}\n </View>\n );\n }\n\n return textNode;\n}\n\nexport { TextBase };\n","import React, { useContext, useMemo } from 'react';\nimport { Text as RNText } from 'react-native';\nimport type { TextStyle } from 'react-native';\nimport { useTokens } from '../../tokens/useTokens';\nimport { TextScopeContext, resolveTextColor } from './Text';\nimport type { TextSpanProps, TextWeight } from './Text.types';\n\n/**\n * Generic inline span — constrained sub-component for inline text formatting.\n * Inherits font family, size, and line height from the parent Text.\n * Only inline formatting properties (color, weight, italic, underline, highlight) are exposed.\n */\nexport function TextSpan({ children, color, weight, italic, underline, highlight, style }: TextSpanProps) {\n const tokens = useTokens(1);\n const scopeCtx = useContext(TextScopeContext);\n\n const spanStyle = useMemo<TextStyle>(() => {\n const s: TextStyle = {};\n if (color) s.color = resolveTextColor(color, tokens);\n if (weight && scopeCtx) s.fontWeight = String(scopeCtx.weights[weight]) as TextStyle['fontWeight'];\n if (italic) s.fontStyle = 'italic';\n if (underline) s.textDecorationLine = 'underline';\n if (highlight) s.backgroundColor = resolveTextColor(highlight, tokens);\n return s;\n }, [tokens, scopeCtx, color, weight, italic, underline, highlight]);\n\n return React.createElement(\n RNText,\n { style: style ? [spanStyle, ...(Array.isArray(style) ? style : [style])] : spanStyle },\n children,\n );\n}\n\n/** Bold span — applies bold weight inline. */\nexport function TextBold(props: Omit<TextSpanProps, 'weight'>) {\n return React.createElement(TextSpan, { ...props, weight: 'bold' as TextWeight });\n}\n\n/** Medium-weight span — applies medium weight inline. */\nexport function TextMedium(props: Omit<TextSpanProps, 'weight'>) {\n return React.createElement(TextSpan, { ...props, weight: 'medium' as TextWeight });\n}\n\n/** Italic span — applies italic style inline. */\nexport function TextItalic(props: Omit<TextSpanProps, 'italic'>) {\n return React.createElement(TextSpan, { ...props, italic: true });\n}\n\n/** Underline span — applies underline decoration inline. */\nexport function TextUnderline(props: Omit<TextSpanProps, 'underline'>) {\n return React.createElement(TextSpan, { ...props, underline: true });\n}\n\n/** Highlight span — applies background highlight using a semantic color token. */\nexport function TextHighlight(props: Omit<TextSpanProps, 'highlight'> & { readonly highlight: TextSpanProps['highlight'] }) {\n return React.createElement(TextSpan, props as TextSpanProps);\n}\n","import { TextBase } from './Text';\nimport { TextSpan, TextBold, TextMedium, TextItalic, TextUnderline, TextHighlight } from './Text.spans';\n\n/**\n * Token-aware text primitive with span sub-components.\n *\n * Primary API: `scope` (font family) + `role` (semantic preset) + `color`.\n *\n * @example\n * ```tsx\n * <Text role=\"headline\" scope=\"display\">Hero</Text>\n * <Text role=\"body\">Regular <Text.Bold>bold</Text.Bold> text</Text>\n * <Text role=\"label\" color=\"secondary\">Field label</Text>\n * ```\n */\nexport const Text = Object.assign(TextBase, {\n Span: TextSpan,\n Bold: TextBold,\n Medium: TextMedium,\n Italic: TextItalic,\n Underline: TextUnderline,\n Highlight: TextHighlight,\n});\n\nexport type {\n TextProps,\n TextSize,\n TextWeight,\n TextColor,\n TextScope,\n TextRole,\n TextAlign,\n TextSpanProps,\n} from './Text.types';\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 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=\"tertiary\" 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 from 'react';\nimport { Pressable } from 'react-native';\nimport type { ButtonProps } from './Button.types';\nimport { getButtonConfig, computeButtonPadding } from './Button.styles';\nimport { useTokens } from '../../../tokens/useTokens';\nimport { Icon } from '../../../primitives/Icon/Icon';\nimport { Text } from '../../../primitives/Text';\nimport { Wrapper } from '../../../primitives/Wrapper/Wrapper';\n\n/**\n * Button — A composite component demonstrating the primitive composition pattern.\n *\n * **Composition Architecture:**\n * - Pressable (RN primitive) — handles interaction\n * - Wrapper (primitive) — handles layout (direction, gap, padding, alignment)\n * - Icon (primitive) — handles icon rendering with theme tokens\n * - Text (primitive) — handles typography with theme tokens\n *\n * This component does NOT manually compute flexbox, spacing, or typography styles.\n * Instead, it delegates to primitives which already handle these concerns.\n *\n * Automatically adapts to the current theme and mode from NewtoneProvider.\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" semantic=\"accent\" size=\"md\" onPress={() => console.log('Pressed')}>\n * Click me\n * </Button>\n * ```\n *\n * @example\n * ```tsx\n * <Button icon=\"add\" variant=\"primary\" semantic=\"accent\" onPress={handleAdd}>\n * New Item\n * </Button>\n * ```\n *\n * @example\n * ```tsx\n * <Button icon=\"delete\" variant=\"tertiary\" semantic=\"neutral\" size=\"sm\" onPress={handleDelete} />\n * ```\n */\nexport function Button({\n children,\n icon,\n iconPosition = 'left',\n variant = 'primary',\n semantic = 'neutral',\n size = 'md',\n disabled = false,\n style,\n textStyle,\n ...pressableProps\n}: ButtonProps) {\n // Read tokens from current elevation context\n // backgroundInteractive provides consistent contrast across all elevations\n const tokens = useTokens();\n\n // Get color tokens + size config (now using backgroundInteractive for consistent contrast)\n const { variantColors, sizeTokens } = React.useMemo(\n () => getButtonConfig(variant, semantic, size, disabled, tokens),\n [variant, semantic, size, disabled, tokens]\n );\n\n // Compute asymmetric padding (+8px on text side for optical balance)\n const padding = React.useMemo(\n () => computeButtonPadding(size, !!icon, !!children, iconPosition),\n [size, icon, children, iconPosition]\n );\n\n return (\n <Pressable disabled={disabled} {...pressableProps}>\n {({ pressed, hovered }: { pressed: boolean; hovered?: boolean }) => (\n // Wrapper handles layout: direction, gap, alignment (padding via style)\n <Wrapper\n direction=\"horizontal\"\n align=\"center\"\n justify=\"center\"\n gap={sizeTokens.gap}\n style={[\n {\n ...padding, // Asymmetric horizontal padding for text optical balance\n backgroundColor: pressed && !disabled\n ? variantColors.pressedBg\n : hovered && !disabled\n ? variantColors.hoveredBg\n : variantColors.bg,\n borderRadius: sizeTokens.borderRadius,\n borderWidth: variantColors.borderWidth, // Always 1 for consistent sizing\n borderColor: variantColors.borderColor || 'transparent',\n opacity: disabled ? 0.4 : 1,\n },\n ...(Array.isArray(style) ? style : style ? [style] : []),\n ]}\n >\n {icon && iconPosition === 'left' && (\n <Icon name={icon} size={sizeTokens.iconSize} color={variantColors.iconColor} />\n )}\n {children && (\n // Text primitive with semantic props + color style override\n <Text\n role=\"label\"\n size={sizeTokens.textSize}\n centerVertically\n style={[\n { color: variantColors.textColor },\n ...(Array.isArray(textStyle) ? textStyle : textStyle ? [textStyle] : []),\n ]}\n >\n {children}\n </Text>\n )}\n {icon && iconPosition === 'right' && (\n <Icon name={icon} size={sizeTokens.iconSize} color={variantColors.iconColor} />\n )}\n </Wrapper>\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 { 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=\"tertiary\" onPress={() => {}}>Cancel</Button>\n * </Frame>\n * ```\n *\n * @example\n * ```tsx\n * // Card-like frame\n * <Frame\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 // Elevation\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 and current color mode (light/dark).\n const { config, mode } = useNewtoneTheme();\n // Read the elevation from the nearest parent Frame (if nested).\n const parentFrameCtx = useFrameContext();\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 return computeTokens(\n config.colorSystem,\n mode,\n resolvedElevation,\n config.spacing,\n config.radius,\n config.typography,\n config.icons,\n config.tokenOverrides,\n );\n }, [config, mode, 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 () => ({ elevation: resolvedElevation, tokens }),\n [resolvedElevation, tokens],\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.accent.fill.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.fontSizes['05'],\n fontFamily: tokens.typography.fonts.main.family,\n lineHeight: tokens.typography.lineHeights['06'],\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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.medium as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n input: {\n fontFamily: tokens.typography.fonts.main.family,\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.fontSizes['05'],\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.fontSizes['04'] : tokens.typography.fontSizes['05'];\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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.medium 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.main.family,\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.main.family,\n fontSize: tokens.typography.fontSizes['01'],\n fontWeight: tokens.typography.fonts.main.weights.medium 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.fontSizes['04'] : tokens.typography.fontSizes['05'];\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.main.family,\n fontSize,\n color: srgbToHex(tokens.textPrimary.srgb),\n },\n isSelected && {\n fontWeight: tokens.typography.fonts.main.weights.medium as any,\n color: srgbToHex(tokens.accent.fill.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.accent.fill.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 '../../overlays/Popover/Popover';\nimport { usePopover } from '../../overlays/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.fontSizes['04'] + 2 : tokens.typography.fontSizes['05'] + 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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.medium 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.accent.fill.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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.medium as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n value: {\n fontFamily: tokens.typography.fonts.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.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.accent.fill.srgb),\n },\n thumb: {\n position: 'absolute',\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: srgbToHex(tokens.accent.fill.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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.medium as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n value: {\n fontFamily: tokens.typography.fonts.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.medium 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.main.family,\n fontSize: tokens.typography.fontSizes['01'],\n fontWeight: tokens.typography.fonts.main.weights.medium as any,\n color: srgbToHex(tokens.error.fill.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: 'colors', name: 'Colors', description: 'Color palettes and token visualization', icon: 'palette' },\n { id: 'typography', name: 'Typography', description: 'Text roles, scopes, and weight control', icon: 'text_fields' },\n { id: 'symbols', name: 'Symbols', description: 'Material Symbols icon browser', icon: 'grid_view' },\n { id: 'layout', name: 'Layout', description: 'Structural containers — Frame and Wrapper', icon: 'grid_on' },\n { id: 'components', name: 'Components', description: 'Interactive UI components', icon: 'widgets' },\n];\n\nexport const COMPONENTS: readonly ComponentMeta[] = [\n {\n id: 'button',\n name: 'Button',\n importName: 'Button',\n categoryId: 'components',\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: 'tertiary-md', label: 'Tertiary', props: { variant: 'tertiary', 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: 'accent-primary', label: 'Accent Primary', props: { variant: 'primary', size: 'md', semantic: 'accent' } },\n { id: 'accent-secondary', label: 'Accent Secondary', props: { variant: 'secondary', size: 'md', semantic: 'accent' } },\n { id: 'success-primary', label: 'Success Primary', props: { variant: 'primary', size: 'md', semantic: 'success' } },\n { id: 'error-primary', label: 'Error Primary', props: { variant: 'primary', size: 'md', semantic: 'error' } },\n { id: 'warning-primary', label: 'Warning Primary', props: { variant: 'primary', size: 'md', semantic: 'warning' } },\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: 'tertiary', 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: 'Tertiary', value: 'tertiary' },\n ],\n defaultValue: 'primary',\n },\n {\n name: 'semantic',\n label: 'Semantic',\n control: 'select',\n options: [\n { label: 'Neutral', value: 'neutral' },\n { label: 'Accent', value: 'accent' },\n { label: 'Success', value: 'success' },\n { label: 'Warning', value: 'warning' },\n { label: 'Error', value: 'error' },\n ],\n defaultValue: 'neutral',\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: 'components',\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: 'components',\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: 'components',\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: 'components',\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: 'components',\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: 'components',\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 // ── Design Primitives ──\n {\n id: 'text',\n name: 'Text',\n importName: 'Text',\n categoryId: 'typography',\n description: 'Typography primitive with semantic scope (font family) and role (purpose)',\n hasChildren: true,\n previewLayout: 'list',\n variants: [\n { id: 'body', label: 'Body', props: { role: 'body' } },\n { id: 'headline', label: 'Headline', props: { role: 'headline', scope: 'display' } },\n { id: 'title', label: 'Title', props: { role: 'title', scope: 'display' } },\n { id: 'heading', label: 'Heading', props: { role: 'heading' } },\n { id: 'subheading', label: 'Subheading', props: { role: 'subheading' } },\n { id: 'label', label: 'Label', props: { role: 'label' } },\n { id: 'caption', label: 'Caption', props: { role: 'caption', color: 'secondary' } },\n { id: 'mono', label: 'Monospace', props: { scope: 'mono', role: 'body' } },\n { id: 'currency', label: 'Currency', props: { scope: 'currency', role: 'body' } },\n ],\n editableProps: [\n {\n name: 'scope',\n label: 'Scope',\n control: 'select',\n options: [\n { label: 'Main', value: 'main' },\n { label: 'Display', value: 'display' },\n { label: 'Mono', value: 'mono' },\n { label: 'Currency', value: 'currency' },\n ],\n defaultValue: 'main',\n },\n {\n name: 'role',\n label: 'Role',\n control: 'select',\n options: [\n { label: 'Headline', value: 'headline' },\n { label: 'Title', value: 'title' },\n { label: 'Heading', value: 'heading' },\n { label: 'Subheading', value: 'subheading' },\n { label: 'Body', value: 'body' },\n { label: 'Label', value: 'label' },\n { label: 'Caption', value: 'caption' },\n ],\n defaultValue: 'body',\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: 'color',\n label: 'Color',\n control: 'select',\n options: [\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Tertiary', value: 'tertiary' },\n { label: 'Disabled', value: 'disabled' },\n { label: 'Accent', value: 'accent' },\n { label: 'Success', value: 'success' },\n { label: 'Warning', value: 'warning' },\n { label: 'Error', value: 'error' },\n ],\n defaultValue: 'primary',\n },\n ],\n },\n {\n id: 'icon',\n name: 'Icon',\n importName: 'Icon',\n categoryId: 'symbols',\n description: 'Material Symbols icon with size and fill',\n hasChildren: false,\n variants: [\n { id: 'default', label: 'Default', props: { name: 'add' } },\n ],\n editableProps: [\n {\n name: 'name',\n label: 'Icon Name',\n control: 'text',\n defaultValue: 'add',\n },\n {\n name: 'size',\n label: 'Size',\n control: 'discrete-slider',\n options: [\n { label: '20', value: 20 },\n { label: '24', value: 24 },\n { label: '40', value: 40 },\n { label: '48', value: 48 },\n ],\n defaultValue: 24,\n },\n {\n name: 'fill',\n label: 'Fill',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'wrapper',\n name: 'Wrapper',\n importName: 'Wrapper',\n categoryId: 'layout',\n description: 'Lightweight layout container with direction, spacing, and alignment (no theming)',\n hasChildren: true,\n variants: [\n { id: 'vertical', label: 'Vertical Stack', props: { direction: 'vertical', gap: 'md' } },\n { id: 'horizontal', label: 'Horizontal Row', props: { direction: 'horizontal', gap: 'md', align: 'center' } },\n { id: 'padded', label: 'Padded', props: { padding: 'lg', gap: 'md' } },\n { id: 'centered', label: 'Centered', props: { align: 'center', justify: 'center', padding: 'xl' } },\n ],\n editableProps: [\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: '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: '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 ],\n defaultValue: '',\n },\n {\n name: 'align',\n label: 'Align',\n control: 'select',\n options: [\n { label: 'Start', value: 'start' },\n { label: 'Center', value: 'center' },\n { label: 'End', value: 'end' },\n ],\n defaultValue: 'start',\n },\n {\n name: 'justify',\n label: 'Justify',\n control: 'select',\n options: [\n { label: 'Start', value: 'start' },\n { label: 'Center', value: 'center' },\n { label: 'End', value: 'end' },\n { label: 'Space Between', value: 'space-between' },\n ],\n defaultValue: 'start',\n },\n ],\n },\n // ── Range Inputs (Addition: ColorScaleSlider) ──\n {\n id: 'color-scale-slider',\n name: 'ColorScaleSlider',\n importName: 'ColorScaleSlider',\n categoryId: 'components',\n description: 'Interactive palette preview slider with color segments',\n hasChildren: false,\n variants: [\n { id: 'default', label: 'Default', props: { label: 'Key Color' } },\n ],\n editableProps: [\n {\n name: 'label',\n label: 'Label',\n control: 'text',\n defaultValue: 'Key Color',\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 text: 'The quick brown fox',\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 IconCatalogCategory {\n readonly id: string;\n readonly label: string;\n readonly icons: readonly string[];\n}\n\nexport const ICON_CATALOG: readonly IconCatalogCategory[] = [\n {\n id: 'navigation',\n label: 'Navigation',\n icons: [\n 'home', 'menu', 'close', 'arrow_back', 'arrow_forward',\n 'arrow_upward', 'arrow_downward', 'chevron_left', 'chevron_right',\n 'expand_more', 'expand_less', 'first_page', 'last_page',\n 'more_vert', 'more_horiz', 'unfold_more', 'unfold_less',\n 'subdirectory_arrow_right',\n ],\n },\n {\n id: 'actions',\n label: 'Actions',\n icons: [\n 'search', 'settings', 'done', 'add', 'remove',\n 'delete', 'edit', 'save', 'refresh', 'undo',\n 'redo', 'download', 'upload', 'share', 'print',\n 'content_copy', 'content_paste', 'open_in_new', 'launch',\n 'drag_indicator', 'tune', 'sort', 'filter_list',\n ],\n },\n {\n id: 'communication',\n label: 'Communication',\n icons: [\n 'mail', 'chat', 'call', 'notifications', 'forum',\n 'send', 'inbox', 'drafts', 'mark_email_read',\n 'contact_mail', 'alternate_email', 'comment',\n 'chat_bubble', 'sms', 'voicemail',\n ],\n },\n {\n id: 'content',\n label: 'Content',\n icons: [\n 'add_circle', 'remove_circle', 'check_circle', 'cancel',\n 'flag', 'bookmark', 'star', 'favorite',\n 'thumb_up', 'thumb_down', 'push_pin', 'link',\n 'link_off', 'bolt', 'label', 'inventory_2',\n 'visibility', 'visibility_off',\n ],\n },\n {\n id: 'media',\n label: 'Media',\n icons: [\n 'play_arrow', 'pause', 'stop', 'skip_next', 'skip_previous',\n 'fast_forward', 'fast_rewind', 'replay', 'shuffle',\n 'repeat', 'volume_up', 'volume_off', 'music_note',\n 'image', 'photo_camera', 'videocam', 'mic',\n ],\n },\n {\n id: 'file',\n label: 'File & Folder',\n icons: [\n 'folder', 'folder_open', 'create_new_folder', 'description',\n 'file_copy', 'attach_file', 'cloud', 'cloud_upload',\n 'cloud_download', 'cloud_off', 'storage', 'snippet_folder',\n ],\n },\n {\n id: 'social',\n label: 'Social & People',\n icons: [\n 'person', 'group', 'person_add', 'person_remove',\n 'people', 'face', 'sentiment_satisfied', 'sentiment_dissatisfied',\n 'public', 'workspace_premium', 'emoji_events', 'military_tech',\n ],\n },\n {\n id: 'alerts',\n label: 'Alerts & Status',\n icons: [\n 'error', 'warning', 'info', 'help',\n 'check_circle', 'report', 'new_releases',\n 'notification_important', 'priority_high',\n 'verified', 'shield', 'security',\n 'lock', 'lock_open',\n ],\n },\n {\n id: 'device',\n label: 'Device & Hardware',\n icons: [\n 'phone_android', 'computer', 'tablet_mac', 'watch',\n 'keyboard', 'mouse', 'headphones', 'speaker',\n 'monitor', 'devices', 'memory', 'battery_full',\n 'wifi', 'bluetooth', 'usb', 'dark_mode', 'light_mode',\n ],\n },\n {\n id: 'editor',\n label: 'Editor & Formatting',\n icons: [\n 'format_bold', 'format_italic', 'format_underlined',\n 'format_list_bulleted', 'format_list_numbered', 'format_quote',\n 'format_align_left', 'format_align_center', 'format_align_right',\n 'title', 'text_fields', 'code', 'palette',\n 'color_lens', 'brush', 'auto_fix_high',\n ],\n },\n];\n"]}
1
+ {"version":3,"sources":["../src/theme/defaults.ts","../src/fonts/GoogleFontLoader.tsx","../src/fonts/SelfHostedFontLoader.tsx","../src/fonts/IconFontLoader.tsx","../src/theme/NewtoneProvider.tsx","../src/theme/FrameContext.tsx","../src/tokens/computeTokens.ts","../src/tokens/useTokens.ts","../src/composites/actions/Button/Button.styles.ts","../src/primitives/Icon/Icon.tsx","../src/fonts/measureFont.ts","../src/fonts/useLocalCalibration.ts","../src/fonts/useTypographyCalibrations.ts","../src/fonts/reportQueue.ts","../src/theme/useBreakpoint.ts","../src/primitives/Text/Text.tsx","../src/primitives/Text/Text.spans.ts","../src/primitives/Text/index.ts","../src/primitives/Frame/Frame.utils.ts","../src/primitives/Wrapper/Wrapper.styles.ts","../src/primitives/Wrapper/Wrapper.tsx","../src/composites/actions/Button/Button.tsx","../src/composites/layout/Card/Card.styles.ts","../src/composites/layout/Card/Card.tsx","../src/primitives/useFocusVisible.ts","../src/primitives/Frame/Frame.styles.ts","../src/primitives/Frame/Frame.tsx","../src/composites/form-controls/TextInput/TextInput.styles.ts","../src/composites/form-controls/TextInput/TextInput.tsx","../src/composites/overlays/Popover/Popover.styles.ts","../src/composites/overlays/Popover/Popover.tsx","../src/composites/overlays/Popover/usePopover.ts","../src/composites/form-controls/Select/Select.types.ts","../src/composites/form-controls/Select/Select.styles.ts","../src/composites/form-controls/Select/useSelect.ts","../src/composites/form-controls/Select/SelectOption.tsx","../src/composites/form-controls/Select/Select.tsx","../src/composites/form-controls/Toggle/Toggle.styles.ts","../src/composites/form-controls/Toggle/Toggle.tsx","../src/composites/range-inputs/Slider/Slider.styles.ts","../src/composites/range-inputs/Slider/Slider.tsx","../src/composites/range-inputs/HueSlider/HueSlider.styles.ts","../src/composites/range-inputs/HueSlider/HueSlider.tsx","../src/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.styles.ts","../src/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.tsx","../src/composites/layout/AppShell/AppShell.styles.ts","../src/composites/layout/AppShell/AppShell.tsx","../src/composites/layout/Sidebar/Sidebar.styles.ts","../src/composites/layout/Sidebar/Sidebar.tsx","../src/composites/layout/Navbar/Navbar.styles.ts","../src/composites/layout/Navbar/Navbar.tsx","../src/registry/registry.ts","../src/registry/codegen.ts","../src/registry/icons.ts"],"names":["useRef","useEffect","React","createContext","useContext","useMemo","size","srgbToHex","useState","RNText","Text","View","StyleSheet","Pressable","RNTextInput","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';\nimport { DEFAULT_FONT_SLOTS, DEFAULT_FONT_SIZES, DEFAULT_LINE_HEIGHTS, DEFAULT_ROLE_SCALES } from '@newtonedev/fonts';\n\n// Re-export typography defaults from @newtonedev/fonts (canonical source)\nexport { DEFAULT_FONT_SIZES, DEFAULT_LINE_HEIGHTS, DEFAULT_ROLE_SCALES } from '@newtonedev/fonts';\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 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: DEFAULT_FONT_SLOTS,\n fontSizes: DEFAULT_FONT_SIZES,\n lineHeights: DEFAULT_LINE_HEIGHTS,\n roles: DEFAULT_ROLE_SCALES,\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 { useEffect, useRef } from 'react';\nimport type { FontSlot } from '../theme/types';\nimport { buildGoogleFontsUrl } from './buildGoogleFontsUrl';\n\ninterface GoogleFontLoaderProps {\n readonly fonts: {\n readonly main: FontSlot;\n readonly display: FontSlot;\n readonly mono: FontSlot;\n readonly currency: FontSlot;\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.main.config.family,\n fonts.main.config.type,\n fonts.main.weights.regular,\n fonts.main.weights.medium,\n fonts.main.weights.bold,\n fonts.display.config.family,\n fonts.display.config.type,\n fonts.display.weights.regular,\n fonts.display.weights.medium,\n fonts.display.weights.bold,\n fonts.mono.config.family,\n fonts.mono.config.type,\n fonts.mono.weights.regular,\n fonts.mono.weights.medium,\n fonts.mono.weights.bold,\n fonts.currency.config.family,\n fonts.currency.config.type,\n fonts.currency.weights.regular,\n fonts.currency.weights.medium,\n fonts.currency.weights.bold,\n ]);\n\n return null;\n}\n","import { useEffect, useRef } from 'react';\n\ninterface SelfHostedFontLoaderProps {\n /** Raw @font-face CSS string from the theme API. */\n readonly fontFaceCss: string;\n}\n\n/**\n * Injects self-hosted @font-face CSS into <head> via a <style> tag.\n * Used instead of GoogleFontLoader when self-hosted font CSS is available.\n *\n * Uses imperative DOM manipulation because react-native-web's View\n * cannot render <style> elements.\n */\nexport function SelfHostedFontLoader({ fontFaceCss }: SelfHostedFontLoaderProps) {\n const styleRef = useRef<HTMLStyleElement | null>(null);\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n\n // Clean up previous style\n if (styleRef.current) {\n styleRef.current.remove();\n styleRef.current = null;\n }\n\n if (!fontFaceCss) return;\n\n const style = document.createElement('style');\n style.setAttribute('data-newtone-fonts', 'self-hosted');\n style.textContent = fontFaceCss;\n document.head.appendChild(style);\n styleRef.current = style;\n\n return () => {\n if (styleRef.current) {\n styleRef.current.remove();\n styleRef.current = null;\n }\n };\n }, [fontFaceCss]);\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 } from './types';\nimport { DEFAULT_THEME_CONFIG } from './defaults';\nimport { GoogleFontLoader } from '../fonts/GoogleFontLoader';\nimport { SelfHostedFontLoader } from '../fonts/SelfHostedFontLoader';\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 children: React.ReactNode;\n /** Optional URL for typography telemetry. When set, adaptive Text instances report observations. */\n readonly reportingEndpoint?: string;\n /**\n * Self-hosted @font-face CSS from the theme API.\n * When provided, injects this CSS instead of loading from Google CDN.\n * Falls back to Google CDN when absent or null.\n */\n readonly fontFaceCss?: string | null;\n}\n\n/**\n * NewtoneProvider - Provides theme context to all Newtone components\n *\n * Wrap your app with this provider to enable mode switching.\n *\n * @example\n * ```tsx\n * <NewtoneProvider initialMode=\"light\">\n * <App />\n * </NewtoneProvider>\n * ```\n */\nexport function NewtoneProvider({\n config = DEFAULT_THEME_CONFIG,\n initialMode = 'light',\n children,\n reportingEndpoint,\n fontFaceCss,\n}: NewtoneProviderProps) {\n const [mode, setMode] = useState<ColorMode>(initialMode);\n\n const value = useMemo(\n () => ({\n config,\n mode,\n setMode,\n reportingEndpoint,\n }),\n [config, mode, reportingEndpoint]\n );\n\n return (\n <ThemeContext.Provider value={value}>\n {fontFaceCss ? (\n <SelfHostedFontLoader fontFaceCss={fontFaceCss} />\n ) : (\n <GoogleFontLoader fonts={config.typography.fonts} />\n )}\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, setMode } = 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 { ElevationLevel } from './types';\nimport type { ResolvedTokens } from '../tokens/types';\n\n/**\n * Context value provided by Frame to its descendants.\n * Contains the resolved elevation and pre-computed tokens.\n * Tokens are included to avoid redundant computeTokens calls in child components.\n */\nexport interface FrameContextValue {\n readonly elevation: ElevationLevel;\n readonly tokens: ResolvedTokens;\n}\n\n/**\n * FrameContext - Propagates elevation overrides from Frame to descendants.\n *\n * When null, components fall back to 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 } from 'newtone';\nimport type { PaletteConfig } from 'newtone';\nimport { fontConfigToFamily } from '@newtonedev/fonts';\nimport type { ColorSystemConfig, ColorMode, ElevationLevel, FontSlot, TokenOverrides } from '../theme/types';\nimport type { ResolvedTokens, PaletteTokens } from './types';\n\n/**\n * Per-mode fallback defaults shape shared by all palette defaults.\n */\nexport type PaletteDefaults = {\n readonly light: {\n readonly background: { readonly elevated: number; readonly ground: number; readonly sunken: number };\n readonly text: { readonly primary: number; readonly secondary: number; readonly tertiary: number; readonly disabled: number };\n readonly action: { readonly enabled: number; readonly hovered: number; readonly pressed: number };\n readonly border: { readonly enabled: number; readonly focused: number; readonly filled: number };\n };\n readonly dark: {\n readonly background: { readonly elevated: number; readonly ground: number; readonly sunken: number };\n readonly text: { readonly primary: number; readonly secondary: number; readonly tertiary: number; readonly disabled: number };\n readonly action: { readonly enabled: number; readonly hovered: number; readonly pressed: number };\n readonly border: { readonly enabled: number; readonly focused: number; readonly filled: number };\n };\n};\n\n/**\n * Per-mode fallback defaults for the neutral palette (normalized scale).\n * Single source of truth — consumed by computeTokens and the admin Token Tuner.\n *\n * Light: 0 = lightest, 1 = darkest. Dark: 0 = darkest, 1 = lightest.\n * Structured by token group so all per-palette defaults follow the same shape.\n */\nexport const NEUTRAL_DEFAULTS: PaletteDefaults = {\n light: {\n background: { elevated: 0, ground: 0.03, sunken: 0.06 },\n text: { primary: 0.9, secondary: 0.7, tertiary: 0.5, disabled: 0.3 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n dark: {\n background: { elevated: 0.24, ground: 0.20, sunken: 0.16 },\n text: { primary: 1.0, secondary: 0.85, tertiary: 0.7, disabled: 0.55 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n};\n\n/**\n * Accent palette defaults. Initial values match neutral — will be tuned per-palette later.\n */\nexport const ACCENT_DEFAULTS: PaletteDefaults = {\n light: {\n background: { elevated: 0, ground: 0.03, sunken: 0.06 },\n text: { primary: 0.9, secondary: 0.7, tertiary: 0.5, disabled: 0.3 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n dark: {\n background: { elevated: 0.24, ground: 0.20, sunken: 0.16 },\n text: { primary: 1.0, secondary: 0.85, tertiary: 0.7, disabled: 0.55 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n};\n\n/**\n * Success palette defaults. Initial values match neutral — will be tuned per-palette later.\n */\nexport const SUCCESS_DEFAULTS: PaletteDefaults = {\n light: {\n background: { elevated: 0, ground: 0.03, sunken: 0.06 },\n text: { primary: 0.9, secondary: 0.7, tertiary: 0.5, disabled: 0.3 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n dark: {\n background: { elevated: 0.24, ground: 0.20, sunken: 0.16 },\n text: { primary: 1.0, secondary: 0.85, tertiary: 0.7, disabled: 0.55 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n};\n\n/**\n * Warning palette defaults. Initial values match neutral — will be tuned per-palette later.\n */\nexport const WARNING_DEFAULTS: PaletteDefaults = {\n light: {\n background: { elevated: 0, ground: 0.03, sunken: 0.06 },\n text: { primary: 0.9, secondary: 0.7, tertiary: 0.5, disabled: 0.3 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n dark: {\n background: { elevated: 0.24, ground: 0.20, sunken: 0.16 },\n text: { primary: 1.0, secondary: 0.85, tertiary: 0.7, disabled: 0.55 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n};\n\n/**\n * Error palette defaults. Initial values match neutral — will be tuned per-palette later.\n */\nexport const ERROR_DEFAULTS: PaletteDefaults = {\n light: {\n background: { elevated: 0, ground: 0.03, sunken: 0.06 },\n text: { primary: 0.9, secondary: 0.7, tertiary: 0.5, disabled: 0.3 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n dark: {\n background: { elevated: 0.24, ground: 0.20, sunken: 0.16 },\n text: { primary: 1.0, secondary: 0.85, tertiary: 0.7, disabled: 0.55 },\n action: { enabled: 0.04, hovered: 0.06, pressed: 0.08 },\n border: { enabled: 0.08, focused: 0.16, filled: 0.24 },\n },\n};\n\nconst clamp = (n: number) => Math.max(0, Math.min(1, n));\n\n/**\n * Compute the complete PaletteTokens for a non-neutral palette.\n *\n * Uses the palette's hue/saturation with positions from the palette's defaults,\n * plus fill tokens at the palette's key NV position.\n *\n * @param palette - The palette config (hue, saturation, key NV, etc.)\n * @param defaults - Per-mode defaults for this palette (positions + offsets)\n * @param mode - Current color mode\n * @param elevation - Current elevation level\n * @param dynamicRange - Global dynamic range\n * @param elevationDelta - Compensation delta (current surface vs elevated reference)\n * @param effectiveTextMode - Derived from actual background lightness\n * @param autoAccentNv - Auto-derived key NV fallback\n * @param neutralTextPrimary - Neutral textPrimary for onFill (dark text on light fills)\n * @param neutralBgElevated - Neutral backgroundElevated for onFill (light text on dark fills)\n */\nfunction computePaletteTokens(\n palette: PaletteConfig,\n defaults: PaletteDefaults,\n mode: ColorMode,\n elevation: ElevationLevel,\n dynamicRange: { readonly lightest: number; readonly darkest: number },\n elevationDelta: number,\n effectiveTextMode: ColorMode,\n autoAccentNv: number,\n neutralTextPrimary: ReturnType<typeof getColor>,\n neutralBgElevated: ReturnType<typeof getColor>,\n): PaletteTokens {\n const modeDefaults = defaults[mode];\n const toEngineNv = (nv: number) => mode === 'light' ? 1 - nv : nv;\n const textToEngineNv = (nv: number) => effectiveTextMode === 'light' ? 1 - nv : nv;\n\n const colorAt = (engineNv: number) => getColor(\n palette.hue, palette.saturation, dynamicRange,\n clamp(engineNv), palette.desaturation, palette.paletteHueGrading\n );\n\n // --- Fill: key color (user-chosen or auto-derived), elevation-compensated ---\n const resolveKeyNv = (p: PaletteConfig): number | undefined =>\n mode === 'dark' ? p.keyNormalizedValueDark : p.keyNormalizedValue;\n\n const keyNv = resolveKeyNv(palette);\n const fillBaseNv = keyNv ?? autoAccentNv;\n const fillNv = clamp(fillBaseNv + elevationDelta);\n const fill = colorAt(fillNv);\n\n const hoverDir = effectiveTextMode === 'light' ? -modeDefaults.action.hovered : modeDefaults.action.hovered;\n const activeDir = effectiveTextMode === 'light' ? -modeDefaults.action.pressed : modeDefaults.action.pressed;\n const fillHover = colorAt(clamp(fillNv + hoverDir));\n const fillActive = colorAt(clamp(fillNv + activeDir));\n\n // onFill: high-contrast text on the fill color\n const onFill = fill.oklch.L > 0.6 ? neutralTextPrimary : neutralBgElevated;\n\n // --- Surface: palette-tinted backgrounds at standard positions ---\n const bgNormalized = elevation === 2\n ? modeDefaults.background.elevated\n : elevation === 1\n ? modeDefaults.background.ground\n : modeDefaults.background.sunken;\n const bgNv = clamp(toEngineNv(bgNormalized));\n const background = colorAt(bgNv);\n const backgroundElevated = colorAt(clamp(toEngineNv(modeDefaults.background.elevated)));\n const backgroundSunken = colorAt(clamp(toEngineNv(modeDefaults.background.sunken)));\n\n // --- Interactive surface: offset from palette background ---\n const interactiveOffset = modeDefaults.action.enabled;\n const interactiveNv = clamp(bgNv + (effectiveTextMode === 'light' ? -interactiveOffset : interactiveOffset));\n const backgroundInteractive = colorAt(interactiveNv);\n\n const hoverShift = modeDefaults.action.hovered;\n const activeShift = modeDefaults.action.pressed;\n const backgroundInteractiveHover = colorAt(clamp(interactiveNv + (effectiveTextMode === 'light' ? -hoverShift : hoverShift)));\n const backgroundInteractiveActive = colorAt(clamp(interactiveNv + (effectiveTextMode === 'light' ? -activeShift : activeShift)));\n\n // --- Text: palette-hued text at standard positions, elevation-compensated ---\n const textPrimary = colorAt(clamp(textToEngineNv(modeDefaults.text.primary) + elevationDelta));\n const textSecondary = colorAt(clamp(textToEngineNv(modeDefaults.text.secondary) + elevationDelta));\n const textTertiary = colorAt(clamp(textToEngineNv(modeDefaults.text.tertiary) + elevationDelta));\n const textDisabled = colorAt(clamp(textToEngineNv(modeDefaults.text.disabled) + elevationDelta));\n\n // --- Border: offset from palette background ---\n const borderOffset = modeDefaults.border.enabled;\n const borderNv = effectiveTextMode === 'light' ? bgNv - borderOffset : bgNv + borderOffset;\n const border = colorAt(clamp(borderNv));\n\n return {\n fill, fillHover, fillActive, onFill,\n background, backgroundElevated, backgroundSunken,\n backgroundInteractive, backgroundInteractiveHover, backgroundInteractiveActive,\n textPrimary, textSecondary, textTertiary, textDisabled,\n border,\n };\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 * Background surfaces use absolute positions from NEUTRAL_DEFAULTS (or tokenOverrides\n * when present). Elevation compensation is derived from the difference between\n * the current surface and the elevated reference surface.\n *\n * @param config - Complete color system configuration (dynamic range + palettes)\n * @param mode - Current color mode ('light' or 'dark')\n * @param elevation - Elevation level (0=sunken, 1=default, 2=elevated)\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 * 1,\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 elevation: ElevationLevel,\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 main: FontSlot; readonly display: FontSlot; readonly mono: FontSlot; readonly currency: FontSlot };\n readonly fontSizes: { readonly [key: string]: number };\n readonly lineHeights: { readonly [key: string]: 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 tokenOverrides?: TokenOverrides\n): ResolvedTokens {\n const { dynamicRange, palettes } = config;\n const palette = palettes[0]; // Always neutral palette for backgrounds\n\n if (!palette) {\n throw new Error('Neutral palette (index 0) not found');\n }\n\n const neutralDefaults = NEUTRAL_DEFAULTS[mode];\n\n // --- Mode-specific normalized field resolution ---\n const toEngineNv = (nv: number) => mode === 'light' ? 1 - nv : nv;\n const bgElevatedNorm = mode === 'light' ? tokenOverrides?.backgroundElevated : tokenOverrides?.backgroundElevatedDark;\n const bgDefaultNorm = mode === 'light' ? tokenOverrides?.backgroundDefault : tokenOverrides?.backgroundDefaultDark;\n const bgSunkenNorm = mode === 'light' ? tokenOverrides?.backgroundSunken : tokenOverrides?.backgroundSunkenDark;\n const textPrimaryNorm = mode === 'light' ? tokenOverrides?.textPrimaryNormalized : tokenOverrides?.textPrimaryNormalizedDark;\n const textSecondaryNorm = mode === 'light' ? tokenOverrides?.textSecondaryNormalized : tokenOverrides?.textSecondaryNormalizedDark;\n const textTertiaryNorm = mode === 'light' ? tokenOverrides?.textTertiaryNormalized : tokenOverrides?.textTertiaryNormalizedDark;\n const textDisabledNorm = mode === 'light' ? tokenOverrides?.textDisabledNormalized : tokenOverrides?.textDisabledNormalizedDark;\n\n // --- Background NV resolution ---\n // Absolute positions from tokenOverrides or NEUTRAL_DEFAULTS.\n // Ground = Background/01 (elevated). Everything diverges from there.\n const bgNormalized = elevation === 2\n ? (bgElevatedNorm ?? neutralDefaults.background.elevated)\n : elevation === 1\n ? (bgDefaultNorm ?? neutralDefaults.background.ground)\n : (bgSunkenNorm ?? neutralDefaults.background.sunken);\n const backgroundNv = clamp(toEngineNv(bgNormalized));\n const elevatedNv = clamp(toEngineNv(bgElevatedNorm ?? neutralDefaults.background.elevated));\n const sunkenNv = clamp(toEngineNv(bgSunkenNorm ?? neutralDefaults.background.sunken));\n\n // Elevation compensation: how far the current surface is from the reference (bg01/elevated).\n // Tokens designed at bg01 shift by this delta on deeper surfaces to preserve perceptual contrast.\n // Always 0 on bg01. Negative on bg02/bg03 in both modes (surface is darker → tokens darken too).\n const elevationDelta = backgroundNv - elevatedNv;\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\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\n const backgroundSunken = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n sunkenNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // --- Tunable constants (overridable via tokenOverrides, per-mode) ---\n // All values are magnitudes — direction auto-inverts per effectiveTextMode\n // (darker in light mode, lighter in dark mode)\n const INTERACTIVE_COMPONENT_OFFSET = mode === 'light'\n ? (tokenOverrides?.interactiveComponentOffset ?? neutralDefaults.action.enabled)\n : (tokenOverrides?.interactiveComponentOffsetDark ?? neutralDefaults.action.enabled);\n const HOVER_SHIFT = mode === 'light'\n ? (tokenOverrides?.hoverShift ?? neutralDefaults.action.hovered)\n : (tokenOverrides?.hoverShiftDark ?? neutralDefaults.action.hovered);\n const ACTIVE_SHIFT = mode === 'light'\n ? (tokenOverrides?.activeShift ?? neutralDefaults.action.pressed)\n : (tokenOverrides?.activeShiftDark ?? neutralDefaults.action.pressed);\n const BORDER_OFFSET = mode === 'light'\n ? (tokenOverrides?.borderOffset ?? neutralDefaults.border.enabled)\n : (tokenOverrides?.borderOffsetDark ?? neutralDefaults.border.enabled);\n // Compute interactive component background (FIXED NV offset from current elevation)\n // Unlike backgroundElevated/backgroundSunken which use discrete levels, this uses a fixed\n // luminosity offset to ensure CONSISTENT visual contrast across all elevations (-2 to 2).\n // Used by: Button (neutral primary variant) and future components with neutral filled backgrounds.\n const interactiveComponentNv = clamp(backgroundNv + (effectiveTextMode === 'light' ? -INTERACTIVE_COMPONENT_OFFSET : INTERACTIVE_COMPONENT_OFFSET));\n const backgroundInteractive = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n interactiveComponentNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Neutral hover/active: shift from interactive component base (same direction as accent hover/active)\n const neutralHoverNv = clamp(interactiveComponentNv + (effectiveTextMode === 'light' ? -HOVER_SHIFT : HOVER_SHIFT));\n const backgroundInteractiveHover = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n neutralHoverNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n const neutralActiveNv = clamp(interactiveComponentNv + (effectiveTextMode === 'light' ? -ACTIVE_SHIFT : ACTIVE_SHIFT));\n const backgroundInteractiveActive = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n neutralActiveNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // --- Text color resolution (elevation-compensated) ---\n // Normalized positions define text contrast at bg01 (elevated). On deeper surfaces,\n // elevationDelta shifts text toward the background to preserve the same contrast distance.\n // Uses effectiveTextMode for NV conversion so inverted themes (e.g., strong: dark bg in\n // light mode) auto-correct text direction — light text on dark bg, dark text on light bg.\n const textToEngineNv = (nv: number) => effectiveTextMode === 'light' ? 1 - nv : nv;\n\n const textPrimary = getColor(palette.hue, palette.saturation, dynamicRange,\n clamp(textToEngineNv(textPrimaryNorm ?? neutralDefaults.text.primary) + elevationDelta),\n palette.desaturation, palette.paletteHueGrading);\n\n const textSecondary = getColor(palette.hue, palette.saturation, dynamicRange,\n clamp(textToEngineNv(textSecondaryNorm ?? neutralDefaults.text.secondary) + elevationDelta),\n palette.desaturation, palette.paletteHueGrading);\n\n const textTertiary = getColor(palette.hue, palette.saturation, dynamicRange,\n clamp(textToEngineNv(textTertiaryNorm ?? neutralDefaults.text.tertiary) + elevationDelta),\n palette.desaturation, palette.paletteHueGrading);\n\n const textDisabled = getColor(palette.hue, palette.saturation, dynamicRange,\n clamp(textToEngineNv(textDisabledNorm ?? neutralDefaults.text.disabled) + elevationDelta),\n palette.desaturation, palette.paletteHueGrading);\n\n // Border: Subtle contrast from background\n const borderNv = effectiveTextMode === 'light' ? backgroundNv - BORDER_OFFSET : backgroundNv + BORDER_OFFSET;\n const border = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n clamp(borderNv),\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // --- Per-palette token computation ---\n // Auto accent NV: derived from text primary position (used when no explicit key color is set)\n const autoAccentNv = clamp(textToEngineNv(textPrimaryNorm ?? neutralDefaults.text.primary));\n\n const accentPalette = palettes[1];\n if (!accentPalette) {\n throw new Error('Accent palette (index 1) not found');\n }\n\n const accent = computePaletteTokens(\n accentPalette, ACCENT_DEFAULTS, mode, elevation, dynamicRange,\n elevationDelta, effectiveTextMode, autoAccentNv,\n textPrimary, backgroundElevated,\n );\n\n const successPalette = palettes[2];\n const warningPalette = palettes[3];\n const errorPalette = palettes[4];\n\n // Semantic palettes: fall back to accent palette if not present\n const success = successPalette\n ? computePaletteTokens(\n successPalette, SUCCESS_DEFAULTS, mode, elevation, dynamicRange,\n elevationDelta, effectiveTextMode, autoAccentNv,\n textPrimary, backgroundElevated,\n )\n : accent;\n\n const warning = warningPalette\n ? computePaletteTokens(\n warningPalette, WARNING_DEFAULTS, mode, elevation, dynamicRange,\n elevationDelta, effectiveTextMode, autoAccentNv,\n textPrimary, backgroundElevated,\n )\n : accent;\n\n const error = errorPalette\n ? computePaletteTokens(\n errorPalette, ERROR_DEFAULTS, mode, elevation, dynamicRange,\n elevationDelta, effectiveTextMode, autoAccentNv,\n textPrimary, backgroundElevated,\n )\n : accent;\n\n return {\n background,\n backgroundElevated,\n backgroundSunken,\n backgroundInteractive,\n backgroundInteractiveHover,\n backgroundInteractiveActive,\n textPrimary,\n textSecondary,\n textTertiary,\n textDisabled,\n border,\n accent,\n success,\n warning,\n error,\n spacing,\n radius,\n typography: {\n fonts: {\n main: {\n family: fontConfigToFamily(typography.fonts.main.config),\n weights: typography.fonts.main.weights,\n },\n display: {\n family: fontConfigToFamily(typography.fonts.display.config),\n weights: typography.fonts.display.weights,\n },\n mono: {\n family: fontConfigToFamily(typography.fonts.mono.config),\n weights: typography.fonts.mono.weights,\n },\n currency: {\n family: fontConfigToFamily(typography.fonts.currency.config),\n weights: typography.fonts.currency.weights,\n },\n },\n fontSizes: typography.fontSizes,\n lineHeights: typography.lineHeights,\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 * Extended tokens result that includes the resolved elevation level.\n * This allows components to make elevation-aware styling decisions.\n */\nexport interface UseTokensResult extends ResolvedTokens {\n elevation: ElevationLevel;\n}\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 * When inside a Frame and no explicit elevation override is given, reuses the\n * Frame's pre-computed tokens to avoid redundant computeTokens calls.\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 + resolved elevation\n */\nexport function useTokens(elevation?: ElevationLevel): UseTokensResult {\n const { config, mode } = useNewtoneTheme();\n const frameCtx = useFrameContext();\n\n // Resolve elevation: explicit param > FrameContext > default 1\n const resolvedElevation: ElevationLevel = elevation ?? frameCtx?.elevation ?? 1;\n\n // Optimization: reuse Frame's pre-computed tokens when elevation matches\n // and no explicit elevation override was given.\n const canReuse = frameCtx !== null\n && elevation === undefined\n && frameCtx.elevation === resolvedElevation;\n\n return useMemo(() => {\n if (canReuse) {\n return { ...frameCtx!.tokens, elevation: resolvedElevation };\n }\n\n const tokens = computeTokens(\n config.colorSystem,\n mode,\n resolvedElevation,\n config.spacing,\n config.radius,\n config.typography,\n config.icons,\n config.tokenOverrides\n );\n\n return { ...tokens, elevation: resolvedElevation };\n }, [config, mode, resolvedElevation, canReuse, frameCtx?.tokens]);\n}\n","import { srgbToHex } from 'newtone';\nimport type { UseTokensResult } from '../../../tokens/useTokens';\nimport type { PaletteTokens } from '../../../tokens/types';\nimport type { ButtonVariant, ButtonSemantic, ButtonSize } from './Button.types';\nimport type { TextSize } from '../../../primitives/Text/Text.types';\n\n/**\n * Configuration returned by getButtonConfig\n */\nexport interface ButtonConfig {\n variantColors: {\n bg: string;\n hoveredBg: string;\n pressedBg: string;\n textColor: string;\n iconColor: string;\n borderWidth: number;\n borderColor?: string;\n };\n sizeTokens: {\n padding: number;\n gap: number;\n borderRadius: number;\n textSize: TextSize;\n iconSize: number;\n };\n}\n\n/**\n * Padding object for asymmetric horizontal padding\n */\nexport interface ButtonPadding {\n paddingLeft: number;\n paddingRight: number;\n paddingTop: number;\n paddingBottom: number;\n}\n\n/**\n * Compute asymmetric button padding based on icon/text presence.\n *\n * Text appears visually closer to borders than icons, so we add 8px extra\n * horizontal padding on the text side for optical balance.\n *\n * @param size - Button size (determines base padding)\n * @param hasIcon - Whether button has an icon\n * @param hasText - Whether button has text\n * @param iconPosition - Icon position relative to text\n * @returns Padding object with all four sides\n */\nexport function computeButtonPadding(\n size: ButtonSize,\n hasIcon: boolean,\n hasText: boolean,\n iconPosition: 'left' | 'right'\n): ButtonPadding {\n // Size-specific base padding\n const basePadding: Record<ButtonSize, number> = {\n sm: 8,\n md: 12,\n lg: 16,\n };\n\n const base = basePadding[size];\n const textExtra = 8; // Optical correction for text vs icon\n\n // Icon-only: square button\n if (!hasText && hasIcon) {\n return {\n paddingLeft: base,\n paddingRight: base,\n paddingTop: base,\n paddingBottom: base,\n };\n }\n\n // Text-only: extra padding on both sides\n if (hasText && !hasIcon) {\n return {\n paddingLeft: base + textExtra,\n paddingRight: base + textExtra,\n paddingTop: base,\n paddingBottom: base,\n };\n }\n\n // Icon + text: extra padding on text side only\n if (hasText && hasIcon) {\n if (iconPosition === 'left') {\n return {\n paddingLeft: base,\n paddingRight: base + textExtra,\n paddingTop: base,\n paddingBottom: base,\n };\n } else {\n return {\n paddingLeft: base + textExtra,\n paddingRight: base,\n paddingTop: base,\n paddingBottom: base,\n };\n }\n }\n\n // Fallback: symmetric base padding\n return {\n paddingLeft: base,\n paddingRight: base,\n paddingTop: base,\n paddingBottom: base,\n };\n}\n\n/**\n * Resolve the PaletteTokens for a given semantic.\n * Returns undefined for 'neutral' (handled separately).\n */\nfunction getPaletteTokens(semantic: ButtonSemantic, tokens: UseTokensResult): PaletteTokens | undefined {\n switch (semantic) {\n case 'accent': return tokens.accent;\n case 'success': return tokens.success;\n case 'error': return tokens.error;\n case 'warning': return tokens.warning;\n default: return undefined;\n }\n}\n\n/**\n * Compute button configuration based on variant, semantic, size, and state.\n *\n * This function ONLY computes variant colors + size tokens.\n * Layout concerns (flexbox, spacing, alignment) are handled by Wrapper primitive.\n * Typography concerns (font, size, weight) are handled by Text primitive.\n *\n * Elevation-aware: neutral primary uses backgroundInteractive for consistent contrast.\n * Semantic variants use proper PaletteTokens — no opacity hacks.\n *\n * @param variant - Button type (primary, secondary, tertiary)\n * @param semantic - Button semantic meaning (neutral, accent, success, error, warning)\n * @param size - Button size (sm, md, lg)\n * @param disabled - Whether button is disabled\n * @param tokens - Resolved tokens for current elevation\n * @returns ButtonConfig with variantColors and sizeTokens\n */\nexport function getButtonConfig(\n variant: ButtonVariant,\n semantic: ButtonSemantic,\n size: ButtonSize,\n disabled: boolean,\n tokens: UseTokensResult\n): ButtonConfig {\n // Get size configuration\n const sizeConfig = getSizeConfig(size, tokens);\n\n // Get variant-specific colors\n const variantColors = getVariantColors(variant, semantic, disabled, tokens);\n\n return {\n variantColors,\n sizeTokens: {\n padding: sizeConfig.padding,\n gap: sizeConfig.gap,\n borderRadius: sizeConfig.borderRadius,\n textSize: sizeConfig.textSize,\n iconSize: sizeConfig.iconSize,\n },\n };\n}\n\n/**\n * Get size configuration with unified icon/text sizes across all sizes.\n * Only padding and radius scale with size.\n */\nfunction getSizeConfig(size: ButtonSize, tokens: UseTokensResult) {\n const configs: Record<ButtonSize, {\n padding: number;\n gap: number;\n borderRadius: number;\n textSize: TextSize;\n iconSize: number;\n }> = {\n sm: {\n padding: 8,\n gap: tokens.spacing['08'],\n borderRadius: 8,\n textSize: 'md', // 16px\n iconSize: 24,\n },\n md: {\n padding: 12,\n gap: tokens.spacing['08'],\n borderRadius: 12,\n textSize: 'md', // 16px\n iconSize: 24,\n },\n lg: {\n padding: 16,\n gap: tokens.spacing['08'],\n borderRadius: 16,\n textSize: 'md', // 16px\n iconSize: 24,\n },\n };\n\n return configs[size];\n}\n\n/**\n * Get variant-specific colors from theme tokens.\n * Handles disabled state override for all variants.\n */\nfunction getVariantColors(\n variant: ButtonVariant,\n semantic: ButtonSemantic,\n disabled: boolean,\n tokens: UseTokensResult\n) {\n // Disabled state overrides for all variants\n if (disabled) {\n const baseColors = getVariantColorsForState(variant, semantic, tokens);\n const disabledBg = srgbToHex(tokens.backgroundSunken.srgb);\n return {\n ...baseColors,\n bg: disabledBg,\n hoveredBg: disabledBg,\n pressedBg: disabledBg,\n textColor: srgbToHex(tokens.textSecondary.srgb),\n iconColor: srgbToHex(tokens.textSecondary.srgb),\n };\n }\n\n return getVariantColorsForState(variant, semantic, tokens);\n}\n\n/**\n * Get variant colors for non-disabled state.\n * Implements 3 types × 5 semantics = 15 combinations.\n * Uses proper PaletteTokens for all semantic variants — no opacity hacks.\n */\nfunction getVariantColorsForState(\n variant: ButtonVariant,\n semantic: ButtonSemantic,\n tokens: UseTokensResult\n) {\n const paletteTokens = getPaletteTokens(semantic, tokens);\n\n // PRIMARY VARIANT: Filled background\n if (variant === 'primary') {\n if (semantic === 'neutral') {\n // Neutral primary - uses backgroundInteractive tokens for consistent contrast across elevations\n return {\n bg: srgbToHex(tokens.backgroundInteractive.srgb),\n hoveredBg: srgbToHex(tokens.backgroundInteractiveHover.srgb),\n pressedBg: srgbToHex(tokens.backgroundInteractiveActive.srgb),\n textColor: srgbToHex(tokens.textPrimary.srgb),\n iconColor: srgbToHex(tokens.textPrimary.srgb),\n borderWidth: 1,\n borderColor: 'transparent',\n };\n }\n\n // Semantic primary (accent, success, error, warning) — uses palette fill tokens\n return {\n bg: srgbToHex(paletteTokens!.fill.srgb),\n hoveredBg: srgbToHex(paletteTokens!.fillHover.srgb),\n pressedBg: srgbToHex(paletteTokens!.fillActive.srgb),\n textColor: srgbToHex(paletteTokens!.onFill.srgb),\n iconColor: srgbToHex(paletteTokens!.onFill.srgb),\n borderWidth: 1,\n borderColor: 'transparent',\n };\n }\n\n // SECONDARY VARIANT: Outlined (border + subtle background for non-neutral)\n if (variant === 'secondary') {\n if (semantic === 'neutral') {\n // Shifted action scale: transparent → 01 (hover) → 02 (pressed)\n return {\n bg: 'transparent',\n hoveredBg: srgbToHex(tokens.backgroundInteractive.srgb),\n pressedBg: srgbToHex(tokens.backgroundInteractiveHover.srgb),\n textColor: srgbToHex(tokens.textPrimary.srgb),\n iconColor: srgbToHex(tokens.textPrimary.srgb),\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n };\n }\n\n // Semantic secondary — uses palette surface tokens for subtle bg\n return {\n bg: srgbToHex(paletteTokens!.background.srgb),\n hoveredBg: srgbToHex(paletteTokens!.backgroundInteractive.srgb),\n pressedBg: srgbToHex(paletteTokens!.backgroundInteractiveHover.srgb),\n textColor: srgbToHex(paletteTokens!.fill.srgb),\n iconColor: srgbToHex(paletteTokens!.fill.srgb),\n borderWidth: 1,\n borderColor: 'transparent',\n };\n }\n\n // TERTIARY VARIANT: Ghost (text-only, no visible border)\n if (variant === 'tertiary') {\n if (semantic === 'neutral') {\n // Shifted action scale: transparent → 01 (hover) → 02 (pressed)\n return {\n bg: 'transparent',\n hoveredBg: srgbToHex(tokens.backgroundInteractive.srgb),\n pressedBg: srgbToHex(tokens.backgroundInteractiveHover.srgb),\n textColor: srgbToHex(tokens.textPrimary.srgb),\n iconColor: srgbToHex(tokens.textPrimary.srgb),\n borderWidth: 1,\n borderColor: 'transparent',\n };\n }\n\n // Semantic tertiary — uses palette surface tokens for hover/pressed\n return {\n bg: 'transparent',\n hoveredBg: srgbToHex(paletteTokens!.background.srgb),\n pressedBg: srgbToHex(paletteTokens!.backgroundInteractive.srgb),\n textColor: srgbToHex(paletteTokens!.fill.srgb),\n iconColor: srgbToHex(paletteTokens!.fill.srgb),\n borderWidth: 1,\n borderColor: 'transparent',\n };\n }\n\n // Fallback (should never reach here with proper types)\n return {\n bg: 'transparent',\n hoveredBg: 'transparent',\n pressedBg: 'transparent',\n textColor: srgbToHex(tokens.textPrimary.srgb),\n iconColor: srgbToHex(tokens.textPrimary.srgb),\n borderWidth: 0,\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 style,\n // Accessibility\n accessibilityLabel,\n // Testing & platform\n testID,\n nativeID,\n ref,\n}: IconProps) {\n // Inherit tokens from nearest parent Frame via FrameContext.\n const tokens = useTokens();\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.fontSizes['05'];\n\n // Round to nearest Material Symbols optical size (20, 24, 40, 48)\n // for optimal stroke weight and detail rendering.\n const getOpticalSize = (size: number): number => {\n if (size <= 22) return 20;\n if (size <= 32) return 24;\n if (size <= 44) return 40;\n return 48;\n };\n\n // Optical size adjusts stroke weight for readability at small sizes.\n // Use explicit opticalSize if provided, otherwise auto-calculate from fontSize.\n const opsz = opticalSize ?? getOpticalSize(fontSize);\n\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 fillValue = typeof fill === 'boolean' ? (fill ? 1 : 0) : fill;\n const fontVariationSettings = `'FILL' ${fillValue}, 'wght' ${tokens.icons.weight}, 'GRAD' ${tokens.icons.grade}, 'opsz' ${opsz}`;\n\n return {\n fontFamily,\n fontSize,\n width: fontSize, // Explicit width ensures square rendering\n height: fontSize, // Explicit height ensures square rendering\n lineHeight: fontSize, // Prevent text line-height from affecting total height\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 >\n {name}\n </Text>\n );\n}\n","/**\n * Reference string for character width measurement.\n * Covers uppercase, lowercase, digits, and a space — 63 characters total.\n */\nconst REF_STRING =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ';\n\n/** Race a promise against a timeout. Resolves with fallback if the promise doesn't settle in time. */\nfunction withTimeout<T>(promise: Promise<T>, ms: number, fallback: T): Promise<T> {\n return Promise.race([\n promise,\n new Promise<T>((resolve) => setTimeout(() => resolve(fallback), ms)),\n ]);\n}\n\n/**\n * Measure the average character width ratio for a font using the Canvas API.\n *\n * Waits for the font to load via `document.fonts.load()` before measuring,\n * with a 3-second timeout to prevent hangs when fonts fail to load silently.\n * Falls back to 0.55 if the browser context is unavailable, the font fails\n * to load, or canvas is not supported.\n *\n * The returned ratio represents `avgCharWidth / fontSize`. Multiply by a\n * desired fontSize to estimate character widths for that font.\n *\n * @param fontFamily - Font family name, e.g. \"Inter\" or \"system-ui\"\n * @param fontWeight - CSS font-weight number, e.g. 400\n * @param fallback - CSS fallback stack, e.g. \"sans-serif\"\n * @param fontSize - Reference font size in px (default 16)\n * @returns Average character width ratio, e.g. 0.52 for Inter\n */\nexport async function measureAvgCharWidth(\n fontFamily: string,\n fontWeight: number,\n fallback: string,\n fontSize = 16,\n): Promise<number> {\n if (typeof document === 'undefined') return 0.55;\n try {\n await withTimeout(\n document.fonts.load(`${fontWeight} ${fontSize}px \"${fontFamily}\"`),\n 3000,\n [] as FontFace[],\n );\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) return 0.55;\n ctx.font = `${fontWeight} ${fontSize}px \"${fontFamily}\", ${fallback}`;\n const ratio = ctx.measureText(REF_STRING).width / REF_STRING.length / fontSize;\n return Math.round(ratio * 1000) / 1000;\n } catch {\n return 0.55;\n }\n}\n","import { useState, useEffect } from 'react';\nimport { measureAvgCharWidth } from './measureFont';\n\nconst STORAGE_KEY = 'newtone:font-metrics:v1';\nconst TTL_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\n\ninterface CacheEntry {\n readonly ratio: number;\n readonly measuredAt: number;\n}\n\ntype FontMetricsCache = Record<string, CacheEntry>;\n\nfunction readCache(): FontMetricsCache {\n if (typeof localStorage === 'undefined') return {};\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n return raw ? (JSON.parse(raw) as FontMetricsCache) : {};\n } catch {\n return {};\n }\n}\n\nfunction writeCache(cache: FontMetricsCache): void {\n if (typeof localStorage === 'undefined') return;\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(cache));\n } catch {\n // Ignore write errors (quota exceeded, private browsing)\n }\n}\n\nfunction cacheKey(fontFamily: string, fontWeight: number): string {\n return `${fontFamily}:${fontWeight}`;\n}\n\n/**\n * Returns the avgCharWidth ratio for a font, using a device-local measurement\n * cached in localStorage (Layer 2 calibration).\n *\n * Resolution order:\n * 1. localStorage cache (if fresh, < 7 days old)\n * 2. `baseCalibration` (Layer 1 — editor-time canvas measurement from theme config)\n * 3. 0.55 (fallback constant)\n *\n * On mount, measures the font if the cache is stale or absent, then updates\n * localStorage and triggers a re-render with the device-accurate ratio.\n *\n * @param fontFamily - CSS font family name, e.g. \"Inter\"\n * @param fontWeight - CSS font-weight number, e.g. 400\n * @param fallback - CSS fallback stack, e.g. \"sans-serif\"\n * @param baseCalibration - Layer 1 ratio from `themeConfig.typography.calibrations`\n */\nexport function useLocalCalibration(\n fontFamily: string,\n fontWeight: number,\n fallback: string,\n baseCalibration?: number,\n): number {\n const key = cacheKey(fontFamily, fontWeight);\n\n // Initialise synchronously from cache so the first render uses a calibrated ratio\n const [ratio, setRatio] = useState<number>(() => {\n const cache = readCache();\n const entry = cache[key];\n if (entry && Date.now() - entry.measuredAt < TTL_MS) {\n return entry.ratio;\n }\n return baseCalibration ?? 0.55;\n });\n\n useEffect(() => {\n const cache = readCache();\n const entry = cache[key];\n if (entry && Date.now() - entry.measuredAt < TTL_MS) {\n // Cache is fresh — no re-measurement needed\n if (entry.ratio !== ratio) setRatio(entry.ratio);\n return;\n }\n\n // Cache is stale or absent — measure in the background\n let cancelled = false;\n measureAvgCharWidth(fontFamily, fontWeight, fallback).then((measured) => {\n if (cancelled) return;\n const updated = { ...readCache(), [key]: { ratio: measured, measuredAt: Date.now() } };\n writeCache(updated);\n setRatio(measured);\n });\n return () => {\n cancelled = true;\n };\n // Intentionally excluding `ratio` from deps — we only want to re-measure on key/font change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [key, fontFamily, fontWeight, fallback]);\n\n return ratio;\n}\n","import { useNewtoneTheme } from '../theme/NewtoneProvider';\n\n/**\n * Returns the per-font avgCharWidth calibrations from the current theme config.\n *\n * These are Layer 1 (editor-time) calibrations — measured with canvas at publish\n * time and stored in `themeConfig.typography.calibrations`. Use `useLocalCalibration`\n * to overlay device-local (Layer 2) measurements on top.\n *\n * @returns Record of fontFamily → avgCharWidthRatio, or an empty object if absent.\n */\nexport function useTypographyCalibrations(): Record<string, number> {\n const { config } = useNewtoneTheme();\n return config.typography.calibrations ?? {};\n}\n","import type { ObserverPayload } from '@newtonedev/fonts';\n\n/**\n * Module-level batch queue for typography observations (Layer 3 reporting).\n *\n * Lives outside React's component lifecycle so it survives re-renders.\n * Observations are enqueued immediately and flushed in a single batch after\n * a 2s debounce — minimising network requests and allowing coalescence.\n *\n * Usage: call `enqueueObservation(endpoint, payload)` from responsive Text\n * instances. Set `reportingEndpoint` on `NewtoneProvider` to opt in.\n */\n\ninterface QueuedObservation {\n readonly endpoint: string;\n readonly payload: ObserverPayload;\n}\n\nconst queue: QueuedObservation[] = [];\nlet flushTimer: ReturnType<typeof setTimeout> | undefined;\n\nfunction flush(): void {\n if (queue.length === 0) return;\n\n // Group by endpoint so a page with multiple endpoints gets one request each\n const byEndpoint = new Map<string, ObserverPayload[]>();\n for (const item of queue) {\n const group = byEndpoint.get(item.endpoint) ?? [];\n group.push(item.payload);\n byEndpoint.set(item.endpoint, group);\n }\n queue.length = 0;\n\n for (const [endpoint, observations] of byEndpoint) {\n // Fire-and-forget — reporting failures are silent and never affect the UI\n fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ observations }),\n // keepalive: true allows the request to outlive the page\n keepalive: true,\n }).catch(() => {});\n }\n}\n\n/**\n * Enqueue a typography observation for batch reporting.\n * Resets the 2s debounce timer on each call.\n */\nexport function enqueueObservation(endpoint: string, payload: ObserverPayload): void {\n queue.push({ endpoint, payload });\n if (flushTimer !== undefined) clearTimeout(flushTimer);\n flushTimer = setTimeout(flush, 2000);\n}\n","import { useWindowDimensions } from 'react-native';\nimport { getBreakpointForWidth } from '@newtonedev/fonts';\nimport type { BreakpointKey } from '@newtonedev/fonts';\n\n/**\n * Returns the current viewport breakpoint key ('sm' | 'md' | 'lg').\n *\n * Uses `useWindowDimensions` from react-native (cross-platform — works\n * on web via react-native-web) and re-evaluates on window resize.\n */\nexport function useBreakpoint(): BreakpointKey {\n const { width } = useWindowDimensions();\n return getBreakpointForWidth(width);\n}\n","import React, { createContext, useMemo, useState, useEffect } from 'react';\nimport { Text as RNText, View } from 'react-native';\nimport type { LayoutChangeEvent, TextStyle } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport { resolveResponsiveSize, estimateLineWidths, BREAKPOINT_ROLE_SCALE, scaleRoleStep, REFERENCE_LINE_HEIGHT_RATIO, buildFontFeatureSettings, SEMANTIC_WEIGHT_MAP, ROLE_DEFAULT_WEIGHTS } from '@newtonedev/fonts';\nimport { useTokens } from '../../tokens/useTokens';\nimport { useNewtoneTheme } from '../../theme/NewtoneProvider';\nimport type { UseTokensResult } from '../../tokens/useTokens';\nimport type { TextProps, TextColor } from './Text.types';\nimport { useLocalCalibration } from '../../fonts/useLocalCalibration';\nimport { useTypographyCalibrations } from '../../fonts/useTypographyCalibrations';\nimport { enqueueObservation } from '../../fonts/reportQueue';\nimport { useBreakpoint } from '../../theme/useBreakpoint';\n\n/**\n * Context to pass the active scope's weight map to span sub-components.\n * Spans inherit font family from the parent RN Text, but need the scope's\n * weight mapping to resolve semantic weight tokens (regular/medium/bold)\n * to numeric CSS values.\n */\nexport const TextScopeContext = createContext<{\n readonly weights: { readonly regular: number; readonly medium: number; readonly bold: number };\n} | null>(null);\n\n/**\n * Resolve a semantic text color to a hex string from the current tokens.\n * Neutral text colors are top-level; palette colors use nested PaletteTokens.fill.\n */\nexport function resolveTextColor(color: TextColor, tokens: UseTokensResult): string {\n switch (color) {\n case 'primary': return srgbToHex(tokens.textPrimary.srgb);\n case 'secondary': return srgbToHex(tokens.textSecondary.srgb);\n case 'tertiary': return srgbToHex(tokens.textTertiary.srgb);\n case 'disabled': return srgbToHex(tokens.textDisabled.srgb);\n case 'accent': return srgbToHex(tokens.accent.fill.srgb);\n case 'success': return srgbToHex(tokens.success.fill.srgb);\n case 'warning': return srgbToHex(tokens.warning.fill.srgb);\n case 'error': return srgbToHex(tokens.error.fill.srgb);\n }\n}\n\n/** Adaptive roles that support responsive font sizing. */\nconst ADAPTIVE_ROLES = new Set(['headline', 'title', 'heading', 'subheading']);\n\n/** Maps heading-like roles to HTML heading levels for semantic rendering on web. */\nconst ROLE_HEADING_LEVEL: Readonly<Record<string, number>> = {\n headline: 1,\n title: 2,\n heading: 3,\n};\n\n/** Estimate total character count from potentially nested React children. */\nfunction extractCharacterCount(node: React.ReactNode): number {\n if (typeof node === 'string') return node.length;\n if (typeof node === 'number') return String(node).length;\n if (!node) return 0;\n if (Array.isArray(node)) {\n return node.reduce((sum: number, child) => sum + extractCharacterCount(child), 0);\n }\n if (typeof node === 'object' && 'props' in node) {\n return extractCharacterCount((node as React.ReactElement).props?.children);\n }\n return 0;\n}\n\n/**\n * Token-aware text primitive with semantic scope + role API.\n *\n * - `scope` selects the font family (main, display, mono, currency)\n * - `role` sets default weight; fontSize and lineHeight resolved from config's role mapping\n * - `size` selects within the role's 3-step scale (sm, md, lg)\n * - `responsive` enables container-width-aware font sizing for adaptive roles\n *\n * @example\n * ```tsx\n * <Text>Body text (default)</Text>\n * <Text role=\"headline\" scope=\"display\">Hero title</Text>\n * <Text role=\"label\">Form label</Text>\n * <Text scope=\"mono\" role=\"caption\">const x = 42;</Text>\n * <Text role=\"body\">Regular <Text.Bold>bold</Text.Bold> text</Text>\n * <Text role=\"headline\" responsive>Responsive headline</Text>\n * ```\n */\nfunction TextBase({\n children,\n scope = 'main',\n role = 'body',\n color = 'primary',\n size: sizeOverride,\n weight: weightOverride,\n align,\n numberOfLines,\n elevation = 1,\n style,\n accessibilityRole: accessibilityRoleOverride,\n testID,\n nativeID,\n ref,\n responsive = false,\n centerVertically = false,\n features,\n}: TextProps) {\n const tokens = useTokens(elevation);\n const { config, reportingEndpoint } = useNewtoneTheme();\n\n const size = sizeOverride ?? 'md';\n const fontSlot = tokens.typography.fonts[scope];\n // roleWeights from config (user-customized), falling back to canonical defaults\n const resolvedFontWeight = weightOverride\n ? SEMANTIC_WEIGHT_MAP[weightOverride]\n : (config.typography.roleWeights?.[role] ?? ROLE_DEFAULT_WEIGHTS[role]);\n\n // --- Breakpoint-aware step ---\n const breakpoint = useBreakpoint();\n const baseStep = config.typography.roles[role][size];\n const bpScale = BREAKPOINT_ROLE_SCALE[breakpoint][role];\n const step = bpScale === 1.0 ? baseStep : scaleRoleStep(baseStep, bpScale);\n\n // --- Responsive sizing (Layer 2 calibration) ---\n // Hooks are called unconditionally; results are used only when `responsive && isAdaptive`.\n const calibrations = useTypographyCalibrations();\n const fontSlotFull = config.typography.fonts[scope]; // FontSlot with config.fallback\n const localRatio = useLocalCalibration(\n fontSlot.family,\n SEMANTIC_WEIGHT_MAP.regular,\n fontSlotFull.config.fallback,\n calibrations[fontSlot.family],\n );\n\n const isAdaptive = ADAPTIVE_ROLES.has(role);\n const [containerWidth, setContainerWidth] = useState<number | null>(null);\n const characterCount = useMemo(() => extractCharacterCount(children), [children]);\n\n const resolvedStep = useMemo(\n () =>\n resolveResponsiveSize(\n {\n role,\n size,\n responsive: responsive && isAdaptive,\n fontFamily: fontSlot.family,\n maxFontSize: step.fontSize,\n minFontSize: Math.max(8, Math.round(step.fontSize * 0.7)),\n },\n config.typography.roles,\n containerWidth != null ? { containerWidth, characterCount } : undefined,\n { [fontSlot.family]: localRatio },\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [role, size, responsive, isAdaptive, fontSlot.family, step.fontSize, config.typography.roles, containerWidth, characterCount, localRatio],\n );\n\n // --- Layer 3: report observations for cross-site rolling averages ---\n useEffect(() => {\n if (!reportingEndpoint || !responsive || !isAdaptive || containerWidth == null) return;\n const lineWidths = estimateLineWidths(characterCount, containerWidth, resolvedStep.fontSize, localRatio);\n const lastLine = lineWidths[lineWidths.length - 1];\n enqueueObservation(reportingEndpoint, {\n fontFamily: fontSlot.family,\n fontWeight: resolvedFontWeight,\n role,\n size,\n fontSize: resolvedStep.fontSize,\n containerWidth,\n characterCount,\n lineCount: lineWidths.length,\n lastLineRatio: containerWidth > 0 ? lastLine / containerWidth : 1,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [reportingEndpoint, resolvedStep.fontSize, containerWidth]);\n\n const resolvedStyle = useMemo<TextStyle>(() => {\n const activeStep = responsive && isAdaptive ? resolvedStep : step;\n\n // Font metrics corrections (adjustLineHeight, verticalCenterOffset, features)\n const currentMetrics = config.typography.fontMetrics?.[fontSlot.family];\n\n // Phase 3: Correct line height for font's natural vertical extent (snap to 4px grid)\n const correctedLineHeight = currentMetrics\n ? Math.round((activeStep.lineHeight * currentMetrics.naturalLineHeightRatio / REFERENCE_LINE_HEIGHT_RATIO) / 4) * 4\n : activeStep.lineHeight;\n\n // Phase 4: Visual centering correction (opt-in via centerVertically prop, snap to 0.5px)\n const vcOffset = centerVertically && currentMetrics\n ? Math.round(currentMetrics.verticalCenterOffset * activeStep.fontSize * 2) / 2\n : 0;\n\n // Phase 5: OpenType feature settings\n const activeFeatures = features\n ? (currentMetrics?.features ? features.filter(tag => currentMetrics.features.includes(tag)) : [...features])\n : [];\n const featureSettings = activeFeatures.length > 0 ? buildFontFeatureSettings(activeFeatures) : undefined;\n\n return {\n fontFamily: fontSlot.family,\n fontSize: activeStep.fontSize,\n fontWeight: String(resolvedFontWeight) as TextStyle['fontWeight'],\n color: resolveTextColor(color, tokens),\n lineHeight: correctedLineHeight,\n textAlign: align,\n ...(vcOffset !== 0 ? { transform: [{ translateY: vcOffset }] } : {}),\n ...(featureSettings ? { fontFeatureSettings: featureSettings } as any : {}),\n };\n }, [tokens, fontSlot, step, resolvedStep, responsive, isAdaptive, resolvedFontWeight, color, align, config.typography.fontMetrics, centerVertically, features]);\n\n // Auto-derive accessibility role and heading level for heading-like typography roles.\n // react-native-web uses aria-level to render the correct <h1>/<h2>/<h3> element.\n const inferredA11yRole = (role === 'headline' || role === 'title' || role === 'heading')\n ? 'header' as const\n : undefined;\n const effectiveA11yRole = accessibilityRoleOverride ?? inferredA11yRole;\n const ariaLevel = effectiveA11yRole === 'header' ? ROLE_HEADING_LEVEL[role] : undefined;\n\n // Scope context value for span sub-components (stable reference — weights are constant)\n const scopeCtx = useMemo(() => ({ weights: SEMANTIC_WEIGHT_MAP }), []);\n\n const textNode = (\n <TextScopeContext.Provider value={scopeCtx}>\n <RNText\n ref={ref}\n testID={testID}\n nativeID={nativeID}\n accessibilityRole={effectiveA11yRole}\n aria-level={ariaLevel}\n style={style\n ? [resolvedStyle, ...(Array.isArray(style) ? style : [style])]\n : resolvedStyle\n }\n numberOfLines={numberOfLines}\n >\n {children}\n </RNText>\n </TextScopeContext.Provider>\n );\n\n // Wrap in a View for container measurement when responsive mode is active on an adaptive role.\n // onLayout fires whenever the container's dimensions change, providing the measured width.\n if (responsive && isAdaptive) {\n return (\n <View\n onLayout={(e: LayoutChangeEvent) => {\n const w = e.nativeEvent.layout.width;\n if (w > 0) setContainerWidth(w);\n }}\n style={{ width: '100%' }}\n >\n {textNode}\n </View>\n );\n }\n\n return textNode;\n}\n\nexport { TextBase };\n","import React, { useContext, useMemo } from 'react';\nimport { Text as RNText } from 'react-native';\nimport type { TextStyle } from 'react-native';\nimport { useTokens } from '../../tokens/useTokens';\nimport { TextScopeContext, resolveTextColor } from './Text';\nimport type { TextSpanProps, TextWeight } from './Text.types';\n\n/**\n * Generic inline span — constrained sub-component for inline text formatting.\n * Inherits font family, size, and line height from the parent Text.\n * Only inline formatting properties (color, weight, italic, underline, highlight) are exposed.\n */\nexport function TextSpan({ children, color, weight, italic, underline, highlight, style }: TextSpanProps) {\n const tokens = useTokens(1);\n const scopeCtx = useContext(TextScopeContext);\n\n const spanStyle = useMemo<TextStyle>(() => {\n const s: TextStyle = {};\n if (color) s.color = resolveTextColor(color, tokens);\n if (weight && scopeCtx) s.fontWeight = String(scopeCtx.weights[weight]) as TextStyle['fontWeight'];\n if (italic) s.fontStyle = 'italic';\n if (underline) s.textDecorationLine = 'underline';\n if (highlight) s.backgroundColor = resolveTextColor(highlight, tokens);\n return s;\n }, [tokens, scopeCtx, color, weight, italic, underline, highlight]);\n\n return React.createElement(\n RNText,\n { style: style ? [spanStyle, ...(Array.isArray(style) ? style : [style])] : spanStyle },\n children,\n );\n}\n\n/** Bold span — applies bold weight inline. */\nexport function TextBold(props: Omit<TextSpanProps, 'weight'>) {\n return React.createElement(TextSpan, { ...props, weight: 'bold' as TextWeight });\n}\n\n/** Medium-weight span — applies medium weight inline. */\nexport function TextMedium(props: Omit<TextSpanProps, 'weight'>) {\n return React.createElement(TextSpan, { ...props, weight: 'medium' as TextWeight });\n}\n\n/** Italic span — applies italic style inline. */\nexport function TextItalic(props: Omit<TextSpanProps, 'italic'>) {\n return React.createElement(TextSpan, { ...props, italic: true });\n}\n\n/** Underline span — applies underline decoration inline. */\nexport function TextUnderline(props: Omit<TextSpanProps, 'underline'>) {\n return React.createElement(TextSpan, { ...props, underline: true });\n}\n\n/** Highlight span — applies background highlight using a semantic color token. */\nexport function TextHighlight(props: Omit<TextSpanProps, 'highlight'> & { readonly highlight: TextSpanProps['highlight'] }) {\n return React.createElement(TextSpan, props as TextSpanProps);\n}\n","import { TextBase } from './Text';\nimport { TextSpan, TextBold, TextMedium, TextItalic, TextUnderline, TextHighlight } from './Text.spans';\n\n/**\n * Token-aware text primitive with span sub-components.\n *\n * Primary API: `scope` (font family) + `role` (semantic preset) + `color`.\n *\n * @example\n * ```tsx\n * <Text role=\"headline\" scope=\"display\">Hero</Text>\n * <Text role=\"body\">Regular <Text.Bold>bold</Text.Bold> text</Text>\n * <Text role=\"label\" color=\"secondary\">Field label</Text>\n * ```\n */\nexport const Text = Object.assign(TextBase, {\n Span: TextSpan,\n Bold: TextBold,\n Medium: TextMedium,\n Italic: TextItalic,\n Underline: TextUnderline,\n Highlight: TextHighlight,\n});\n\nexport type {\n TextProps,\n TextSize,\n TextWeight,\n TextColor,\n TextScope,\n TextRole,\n TextAlign,\n TextSpanProps,\n} from './Text.types';\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 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=\"tertiary\" 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 from 'react';\nimport { Pressable } from 'react-native';\nimport type { ButtonProps } from './Button.types';\nimport { getButtonConfig, computeButtonPadding } from './Button.styles';\nimport { useTokens } from '../../../tokens/useTokens';\nimport { Icon } from '../../../primitives/Icon/Icon';\nimport { Text } from '../../../primitives/Text';\nimport { Wrapper } from '../../../primitives/Wrapper/Wrapper';\n\n/**\n * Button — A composite component demonstrating the primitive composition pattern.\n *\n * **Composition Architecture:**\n * - Pressable (RN primitive) — handles interaction\n * - Wrapper (primitive) — handles layout (direction, gap, padding, alignment)\n * - Icon (primitive) — handles icon rendering with theme tokens\n * - Text (primitive) — handles typography with theme tokens\n *\n * This component does NOT manually compute flexbox, spacing, or typography styles.\n * Instead, it delegates to primitives which already handle these concerns.\n *\n * Automatically adapts to the current theme and mode from NewtoneProvider.\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" semantic=\"accent\" size=\"md\" onPress={() => console.log('Pressed')}>\n * Click me\n * </Button>\n * ```\n *\n * @example\n * ```tsx\n * <Button icon=\"add\" variant=\"primary\" semantic=\"accent\" onPress={handleAdd}>\n * New Item\n * </Button>\n * ```\n *\n * @example\n * ```tsx\n * <Button icon=\"delete\" variant=\"tertiary\" semantic=\"neutral\" size=\"sm\" onPress={handleDelete} />\n * ```\n */\nexport function Button({\n children,\n icon,\n iconPosition = 'left',\n variant = 'primary',\n semantic = 'neutral',\n size = 'md',\n disabled = false,\n style,\n textStyle,\n ...pressableProps\n}: ButtonProps) {\n // Read tokens from current elevation context\n // backgroundInteractive provides consistent contrast across all elevations\n const tokens = useTokens();\n\n // Get color tokens + size config (now using backgroundInteractive for consistent contrast)\n const { variantColors, sizeTokens } = React.useMemo(\n () => getButtonConfig(variant, semantic, size, disabled, tokens),\n [variant, semantic, size, disabled, tokens]\n );\n\n // Compute asymmetric padding (+8px on text side for optical balance)\n const padding = React.useMemo(\n () => computeButtonPadding(size, !!icon, !!children, iconPosition),\n [size, icon, children, iconPosition]\n );\n\n return (\n <Pressable disabled={disabled} {...pressableProps}>\n {({ pressed, hovered }: { pressed: boolean; hovered?: boolean }) => (\n // Wrapper handles layout: direction, gap, alignment (padding via style)\n <Wrapper\n direction=\"horizontal\"\n align=\"center\"\n justify=\"center\"\n gap={sizeTokens.gap}\n style={[\n {\n ...padding, // Asymmetric horizontal padding for text optical balance\n backgroundColor: pressed && !disabled\n ? variantColors.pressedBg\n : hovered && !disabled\n ? variantColors.hoveredBg\n : variantColors.bg,\n borderRadius: sizeTokens.borderRadius,\n borderWidth: variantColors.borderWidth, // Always 1 for consistent sizing\n borderColor: variantColors.borderColor || 'transparent',\n opacity: disabled ? 0.4 : 1,\n },\n ...(Array.isArray(style) ? style : style ? [style] : []),\n ]}\n >\n {icon && iconPosition === 'left' && (\n <Icon name={icon} size={sizeTokens.iconSize} color={variantColors.iconColor} />\n )}\n {children && (\n // Text primitive with semantic props + color style override\n <Text\n role=\"label\"\n size={sizeTokens.textSize}\n centerVertically\n style={[\n { color: variantColors.textColor },\n ...(Array.isArray(textStyle) ? textStyle : textStyle ? [textStyle] : []),\n ]}\n >\n {children}\n </Text>\n )}\n {icon && iconPosition === 'right' && (\n <Icon name={icon} size={sizeTokens.iconSize} color={variantColors.iconColor} />\n )}\n </Wrapper>\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 { 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=\"tertiary\" onPress={() => {}}>Cancel</Button>\n * </Frame>\n * ```\n *\n * @example\n * ```tsx\n * // Card-like frame\n * <Frame\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 // Elevation\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 and current color mode (light/dark).\n const { config, mode } = useNewtoneTheme();\n // Read the elevation from the nearest parent Frame (if nested).\n const parentFrameCtx = useFrameContext();\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 return computeTokens(\n config.colorSystem,\n mode,\n resolvedElevation,\n config.spacing,\n config.radius,\n config.typography,\n config.icons,\n config.tokenOverrides,\n );\n }, [config, mode, 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 () => ({ elevation: resolvedElevation, tokens }),\n [resolvedElevation, tokens],\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.accent.fill.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.fontSizes['05'],\n fontFamily: tokens.typography.fonts.main.family,\n lineHeight: tokens.typography.lineHeights['06'],\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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.medium as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n input: {\n fontFamily: tokens.typography.fonts.main.family,\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.fontSizes['05'],\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.fontSizes['04'] : tokens.typography.fontSizes['05'];\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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.medium 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.main.family,\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.main.family,\n fontSize: tokens.typography.fontSizes['01'],\n fontWeight: tokens.typography.fonts.main.weights.medium 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.fontSizes['04'] : tokens.typography.fontSizes['05'];\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.main.family,\n fontSize,\n color: srgbToHex(tokens.textPrimary.srgb),\n },\n isSelected && {\n fontWeight: tokens.typography.fonts.main.weights.medium as any,\n color: srgbToHex(tokens.accent.fill.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.accent.fill.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 '../../overlays/Popover/Popover';\nimport { usePopover } from '../../overlays/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.fontSizes['04'] + 2 : tokens.typography.fontSizes['05'] + 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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.medium 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.accent.fill.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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.medium as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n value: {\n fontFamily: tokens.typography.fonts.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.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.accent.fill.srgb),\n },\n thumb: {\n position: 'absolute',\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: srgbToHex(tokens.accent.fill.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 const [layoutWidth, setLayoutWidth] = React.useState(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, layoutWidth - THUMB_SIZE);\n const thumbLeft = ratio * usableWidth;\n\n // Center-origin fill: when range spans zero, fill extends from center to thumb\n const isCenterOrigin = min < 0 && max > 0;\n let fillLeft: number;\n let fillWidth: number;\n if (isCenterOrigin) {\n const centerRatio = (0 - min) / (max - min);\n const centerX = centerRatio * usableWidth + THUMB_SIZE / 2;\n const thumbCenterX = thumbLeft + THUMB_SIZE / 2;\n fillLeft = Math.min(centerX, thumbCenterX);\n fillWidth = Math.abs(thumbCenterX - centerX);\n } else {\n fillLeft = 0;\n fillWidth = thumbLeft + THUMB_SIZE / 2;\n }\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 const w = e.nativeEvent.layout.width;\n trackWidth.current = w;\n setLayoutWidth(w);\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, { left: fillLeft, 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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.medium as any,\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n value: {\n fontFamily: tokens.typography.fonts.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.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 const [layoutWidth, setLayoutWidth] = React.useState(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, layoutWidth - 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 const w = e.nativeEvent.layout.width;\n trackWidth.current = w;\n setLayoutWidth(w);\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.main.family,\n fontSize: tokens.typography.fontSizes['04'],\n fontWeight: tokens.typography.fonts.main.weights.medium 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.main.family,\n fontSize: tokens.typography.fontSizes['01'],\n fontWeight: tokens.typography.fonts.main.weights.medium as any,\n color: srgbToHex(tokens.error.fill.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 const [layoutWidth, setLayoutWidth] = React.useState(0);\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, layoutWidth - 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 const w = e.nativeEvent.layout.width;\n trackWidth.current = w;\n setLayoutWidth(w);\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: 'colors', name: 'Colors', description: 'Color palettes and token visualization', icon: 'palette' },\n { id: 'typography', name: 'Typography', description: 'Text roles, scopes, and weight control', icon: 'text_fields' },\n { id: 'symbols', name: 'Symbols', description: 'Material Symbols icon browser', icon: 'grid_view' },\n { id: 'layout', name: 'Layout', description: 'Structural containers — Frame and Wrapper', icon: 'grid_on' },\n { id: 'components', name: 'Components', description: 'Interactive UI components', icon: 'widgets' },\n];\n\nexport const COMPONENTS: readonly ComponentMeta[] = [\n {\n id: 'button',\n name: 'Button',\n importName: 'Button',\n categoryId: 'components',\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: 'tertiary-md', label: 'Tertiary', props: { variant: 'tertiary', 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: 'accent-primary', label: 'Accent Primary', props: { variant: 'primary', size: 'md', semantic: 'accent' } },\n { id: 'accent-secondary', label: 'Accent Secondary', props: { variant: 'secondary', size: 'md', semantic: 'accent' } },\n { id: 'success-primary', label: 'Success Primary', props: { variant: 'primary', size: 'md', semantic: 'success' } },\n { id: 'error-primary', label: 'Error Primary', props: { variant: 'primary', size: 'md', semantic: 'error' } },\n { id: 'warning-primary', label: 'Warning Primary', props: { variant: 'primary', size: 'md', semantic: 'warning' } },\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: 'tertiary', 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: 'Tertiary', value: 'tertiary' },\n ],\n defaultValue: 'primary',\n },\n {\n name: 'semantic',\n label: 'Semantic',\n control: 'select',\n options: [\n { label: 'Neutral', value: 'neutral' },\n { label: 'Accent', value: 'accent' },\n { label: 'Success', value: 'success' },\n { label: 'Warning', value: 'warning' },\n { label: 'Error', value: 'error' },\n ],\n defaultValue: 'neutral',\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: 'components',\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: 'components',\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: 'components',\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: 'components',\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: 'components',\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: 'components',\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 // ── Design Primitives ──\n {\n id: 'text',\n name: 'Text',\n importName: 'Text',\n categoryId: 'typography',\n description: 'Typography primitive with semantic scope (font family) and role (purpose)',\n hasChildren: true,\n previewLayout: 'list',\n variants: [\n { id: 'body', label: 'Body', props: { role: 'body' } },\n { id: 'headline', label: 'Headline', props: { role: 'headline', scope: 'display' } },\n { id: 'title', label: 'Title', props: { role: 'title', scope: 'display' } },\n { id: 'heading', label: 'Heading', props: { role: 'heading' } },\n { id: 'subheading', label: 'Subheading', props: { role: 'subheading' } },\n { id: 'label', label: 'Label', props: { role: 'label' } },\n { id: 'caption', label: 'Caption', props: { role: 'caption', color: 'secondary' } },\n { id: 'mono', label: 'Monospace', props: { scope: 'mono', role: 'body' } },\n { id: 'currency', label: 'Currency', props: { scope: 'currency', role: 'body' } },\n ],\n editableProps: [\n {\n name: 'scope',\n label: 'Scope',\n control: 'select',\n options: [\n { label: 'Main', value: 'main' },\n { label: 'Display', value: 'display' },\n { label: 'Mono', value: 'mono' },\n { label: 'Currency', value: 'currency' },\n ],\n defaultValue: 'main',\n },\n {\n name: 'role',\n label: 'Role',\n control: 'select',\n options: [\n { label: 'Headline', value: 'headline' },\n { label: 'Title', value: 'title' },\n { label: 'Heading', value: 'heading' },\n { label: 'Subheading', value: 'subheading' },\n { label: 'Body', value: 'body' },\n { label: 'Label', value: 'label' },\n { label: 'Caption', value: 'caption' },\n ],\n defaultValue: 'body',\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: 'color',\n label: 'Color',\n control: 'select',\n options: [\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Tertiary', value: 'tertiary' },\n { label: 'Disabled', value: 'disabled' },\n { label: 'Accent', value: 'accent' },\n { label: 'Success', value: 'success' },\n { label: 'Warning', value: 'warning' },\n { label: 'Error', value: 'error' },\n ],\n defaultValue: 'primary',\n },\n ],\n },\n {\n id: 'icon',\n name: 'Icon',\n importName: 'Icon',\n categoryId: 'symbols',\n description: 'Material Symbols icon with size and fill',\n hasChildren: false,\n variants: [\n { id: 'default', label: 'Default', props: { name: 'add' } },\n ],\n editableProps: [\n {\n name: 'name',\n label: 'Icon Name',\n control: 'text',\n defaultValue: 'add',\n },\n {\n name: 'size',\n label: 'Size',\n control: 'discrete-slider',\n options: [\n { label: '20', value: 20 },\n { label: '24', value: 24 },\n { label: '40', value: 40 },\n { label: '48', value: 48 },\n ],\n defaultValue: 24,\n },\n {\n name: 'fill',\n label: 'Fill',\n control: 'toggle',\n defaultValue: false,\n },\n ],\n },\n {\n id: 'wrapper',\n name: 'Wrapper',\n importName: 'Wrapper',\n categoryId: 'layout',\n description: 'Lightweight layout container with direction, spacing, and alignment (no theming)',\n hasChildren: true,\n variants: [\n { id: 'vertical', label: 'Vertical Stack', props: { direction: 'vertical', gap: 'md' } },\n { id: 'horizontal', label: 'Horizontal Row', props: { direction: 'horizontal', gap: 'md', align: 'center' } },\n { id: 'padded', label: 'Padded', props: { padding: 'lg', gap: 'md' } },\n { id: 'centered', label: 'Centered', props: { align: 'center', justify: 'center', padding: 'xl' } },\n ],\n editableProps: [\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: '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: '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 ],\n defaultValue: '',\n },\n {\n name: 'align',\n label: 'Align',\n control: 'select',\n options: [\n { label: 'Start', value: 'start' },\n { label: 'Center', value: 'center' },\n { label: 'End', value: 'end' },\n ],\n defaultValue: 'start',\n },\n {\n name: 'justify',\n label: 'Justify',\n control: 'select',\n options: [\n { label: 'Start', value: 'start' },\n { label: 'Center', value: 'center' },\n { label: 'End', value: 'end' },\n { label: 'Space Between', value: 'space-between' },\n ],\n defaultValue: 'start',\n },\n ],\n },\n // ── Range Inputs (Addition: ColorScaleSlider) ──\n {\n id: 'color-scale-slider',\n name: 'ColorScaleSlider',\n importName: 'ColorScaleSlider',\n categoryId: 'components',\n description: 'Interactive palette preview slider with color segments',\n hasChildren: false,\n variants: [\n { id: 'default', label: 'Default', props: { label: 'Key Color' } },\n ],\n editableProps: [\n {\n name: 'label',\n label: 'Label',\n control: 'text',\n defaultValue: 'Key Color',\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 text: 'The quick brown fox',\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 IconCatalogCategory {\n readonly id: string;\n readonly label: string;\n readonly icons: readonly string[];\n}\n\nexport const ICON_CATALOG: readonly IconCatalogCategory[] = [\n {\n id: 'navigation',\n label: 'Navigation',\n icons: [\n 'home', 'menu', 'close', 'arrow_back', 'arrow_forward',\n 'arrow_upward', 'arrow_downward', 'chevron_left', 'chevron_right',\n 'expand_more', 'expand_less', 'first_page', 'last_page',\n 'more_vert', 'more_horiz', 'unfold_more', 'unfold_less',\n 'subdirectory_arrow_right',\n ],\n },\n {\n id: 'actions',\n label: 'Actions',\n icons: [\n 'search', 'settings', 'done', 'add', 'remove',\n 'delete', 'edit', 'save', 'refresh', 'undo',\n 'redo', 'download', 'upload', 'share', 'print',\n 'content_copy', 'content_paste', 'open_in_new', 'launch',\n 'drag_indicator', 'tune', 'sort', 'filter_list',\n ],\n },\n {\n id: 'communication',\n label: 'Communication',\n icons: [\n 'mail', 'chat', 'call', 'notifications', 'forum',\n 'send', 'inbox', 'drafts', 'mark_email_read',\n 'contact_mail', 'alternate_email', 'comment',\n 'chat_bubble', 'sms', 'voicemail',\n ],\n },\n {\n id: 'content',\n label: 'Content',\n icons: [\n 'add_circle', 'remove_circle', 'check_circle', 'cancel',\n 'flag', 'bookmark', 'star', 'favorite',\n 'thumb_up', 'thumb_down', 'push_pin', 'link',\n 'link_off', 'bolt', 'label', 'inventory_2',\n 'visibility', 'visibility_off',\n ],\n },\n {\n id: 'media',\n label: 'Media',\n icons: [\n 'play_arrow', 'pause', 'stop', 'skip_next', 'skip_previous',\n 'fast_forward', 'fast_rewind', 'replay', 'shuffle',\n 'repeat', 'volume_up', 'volume_off', 'music_note',\n 'image', 'photo_camera', 'videocam', 'mic',\n ],\n },\n {\n id: 'file',\n label: 'File & Folder',\n icons: [\n 'folder', 'folder_open', 'create_new_folder', 'description',\n 'file_copy', 'attach_file', 'cloud', 'cloud_upload',\n 'cloud_download', 'cloud_off', 'storage', 'snippet_folder',\n ],\n },\n {\n id: 'social',\n label: 'Social & People',\n icons: [\n 'person', 'group', 'person_add', 'person_remove',\n 'people', 'face', 'sentiment_satisfied', 'sentiment_dissatisfied',\n 'public', 'workspace_premium', 'emoji_events', 'military_tech',\n ],\n },\n {\n id: 'alerts',\n label: 'Alerts & Status',\n icons: [\n 'error', 'warning', 'info', 'help',\n 'check_circle', 'report', 'new_releases',\n 'notification_important', 'priority_high',\n 'verified', 'shield', 'security',\n 'lock', 'lock_open',\n ],\n },\n {\n id: 'device',\n label: 'Device & Hardware',\n icons: [\n 'phone_android', 'computer', 'tablet_mac', 'watch',\n 'keyboard', 'mouse', 'headphones', 'speaker',\n 'monitor', 'devices', 'memory', 'battery_full',\n 'wifi', 'bluetooth', 'usb', 'dark_mode', 'light_mode',\n ],\n },\n {\n id: 'editor',\n label: 'Editor & Formatting',\n icons: [\n 'format_bold', 'format_italic', 'format_underlined',\n 'format_list_bulleted', 'format_list_numbered', 'format_quote',\n 'format_align_left', 'format_align_center', 'format_align_right',\n 'title', 'text_fields', 'code', 'palette',\n 'color_lens', 'brush', 'auto_fix_high',\n ],\n },\n];\n"]}