@newtonedev/components 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +506 -0
- package/dist/Button/Button.d.ts +23 -0
- package/dist/Button/Button.d.ts.map +1 -0
- package/dist/Button/Button.styles.d.ts +39 -0
- package/dist/Button/Button.styles.d.ts.map +1 -0
- package/dist/Button/Button.types.d.ts +42 -0
- package/dist/Button/Button.types.d.ts.map +1 -0
- package/dist/Button/index.d.ts +3 -0
- package/dist/Button/index.d.ts.map +1 -0
- package/dist/Card/Card.d.ts +4 -0
- package/dist/Card/Card.d.ts.map +1 -0
- package/dist/Card/Card.styles.d.ts +12 -0
- package/dist/Card/Card.styles.d.ts.map +1 -0
- package/dist/Card/Card.types.d.ts +9 -0
- package/dist/Card/Card.types.d.ts.map +1 -0
- package/dist/Card/index.d.ts +3 -0
- package/dist/Card/index.d.ts.map +1 -0
- package/dist/HueSlider/HueSlider.d.ts +14 -0
- package/dist/HueSlider/HueSlider.d.ts.map +1 -0
- package/dist/HueSlider/HueSlider.styles.d.ts +28 -0
- package/dist/HueSlider/HueSlider.styles.d.ts.map +1 -0
- package/dist/HueSlider/HueSlider.types.d.ts +12 -0
- package/dist/HueSlider/HueSlider.types.d.ts.map +1 -0
- package/dist/HueSlider/index.d.ts +3 -0
- package/dist/HueSlider/index.d.ts.map +1 -0
- package/dist/Select/Select.d.ts +11 -0
- package/dist/Select/Select.d.ts.map +1 -0
- package/dist/Select/Select.styles.d.ts +23 -0
- package/dist/Select/Select.styles.d.ts.map +1 -0
- package/dist/Select/Select.types.d.ts +14 -0
- package/dist/Select/Select.types.d.ts.map +1 -0
- package/dist/Select/index.d.ts +3 -0
- package/dist/Select/index.d.ts.map +1 -0
- package/dist/Slider/Slider.d.ts +4 -0
- package/dist/Slider/Slider.d.ts.map +1 -0
- package/dist/Slider/Slider.styles.d.ts +27 -0
- package/dist/Slider/Slider.styles.d.ts.map +1 -0
- package/dist/Slider/Slider.types.d.ts +13 -0
- package/dist/Slider/Slider.types.d.ts.map +1 -0
- package/dist/Slider/index.d.ts +3 -0
- package/dist/Slider/index.d.ts.map +1 -0
- package/dist/TextInput/TextInput.d.ts +4 -0
- package/dist/TextInput/TextInput.d.ts.map +1 -0
- package/dist/TextInput/TextInput.styles.d.ts +23 -0
- package/dist/TextInput/TextInput.styles.d.ts.map +1 -0
- package/dist/TextInput/TextInput.types.d.ts +7 -0
- package/dist/TextInput/TextInput.types.d.ts.map +1 -0
- package/dist/TextInput/index.d.ts +3 -0
- package/dist/TextInput/index.d.ts.map +1 -0
- package/dist/Toggle/Toggle.d.ts +4 -0
- package/dist/Toggle/Toggle.d.ts.map +1 -0
- package/dist/Toggle/Toggle.styles.d.ts +30 -0
- package/dist/Toggle/Toggle.styles.d.ts.map +1 -0
- package/dist/Toggle/Toggle.types.d.ts +9 -0
- package/dist/Toggle/Toggle.types.d.ts.map +1 -0
- package/dist/Toggle/index.d.ts +3 -0
- package/dist/Toggle/index.d.ts.map +1 -0
- package/dist/index.cjs +736 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +719 -0
- package/dist/index.js.map +1 -0
- package/dist/theme/NewtoneProvider.d.ts +33 -0
- package/dist/theme/NewtoneProvider.d.ts.map +1 -0
- package/dist/theme/defaults.d.ts +7 -0
- package/dist/theme/defaults.d.ts.map +1 -0
- package/dist/theme/types.d.ts +56 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/tokens/computeTokens.d.ts +30 -0
- package/dist/tokens/computeTokens.d.ts.map +1 -0
- package/dist/tokens/types.d.ts +31 -0
- package/dist/tokens/types.d.ts.map +1 -0
- package/dist/tokens/useTokens.d.ts +26 -0
- package/dist/tokens/useTokens.d.ts.map +1 -0
- package/package.json +57 -0
- package/src/Button/Button.styles.ts +100 -0
- package/src/Button/Button.tsx +67 -0
- package/src/Button/Button.types.ts +49 -0
- package/src/Button/index.ts +2 -0
- package/src/Card/Card.styles.ts +16 -0
- package/src/Card/Card.tsx +25 -0
- package/src/Card/Card.types.ts +9 -0
- package/src/Card/index.ts +2 -0
- package/src/HueSlider/HueSlider.styles.ts +77 -0
- package/src/HueSlider/HueSlider.tsx +70 -0
- package/src/HueSlider/HueSlider.types.ts +12 -0
- package/src/HueSlider/index.ts +2 -0
- package/src/Select/Select.styles.ts +29 -0
- package/src/Select/Select.tsx +60 -0
- package/src/Select/Select.types.ts +15 -0
- package/src/Select/index.ts +2 -0
- package/src/Slider/Slider.styles.ts +45 -0
- package/src/Slider/Slider.tsx +57 -0
- package/src/Slider/Slider.types.ts +13 -0
- package/src/Slider/index.ts +2 -0
- package/src/TextInput/TextInput.styles.ts +29 -0
- package/src/TextInput/TextInput.tsx +32 -0
- package/src/TextInput/TextInput.types.ts +7 -0
- package/src/TextInput/index.ts +2 -0
- package/src/Toggle/Toggle.styles.ts +45 -0
- package/src/Toggle/Toggle.tsx +42 -0
- package/src/Toggle/Toggle.types.ts +9 -0
- package/src/Toggle/index.ts +2 -0
- package/src/index.ts +49 -0
- package/src/theme/NewtoneProvider.tsx +65 -0
- package/src/theme/defaults.ts +42 -0
- package/src/theme/types.ts +62 -0
- package/src/tokens/computeTokens.ts +217 -0
- package/src/tokens/types.ts +31 -0
- package/src/tokens/useTokens.ts +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme/defaults.ts","../src/theme/NewtoneProvider.tsx","../src/tokens/computeTokens.ts","../src/tokens/useTokens.ts","../src/Button/Button.styles.ts","../src/Button/Button.tsx","../src/Card/Card.styles.ts","../src/Card/Card.tsx","../src/TextInput/TextInput.styles.ts","../src/TextInput/TextInput.tsx","../src/Select/Select.styles.ts","../src/Select/Select.tsx","../src/Toggle/Toggle.styles.ts","../src/Toggle/Toggle.tsx","../src/Slider/Slider.styles.ts","../src/Slider/Slider.tsx","../src/HueSlider/HueSlider.styles.ts","../src/HueSlider/HueSlider.tsx"],"names":["React","useMemo","StyleSheet","srgbToHex","View","Text","RNTextInput","Pressable"],"mappings":"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","file":"index.js","sourcesContent":["import type { NewtoneThemeConfig } from './types';\nimport {\n DEFAULT_NEUTRAL_HUE,\n DEFAULT_NEUTRAL_SATURATION,\n DEFAULT_ACCENT_HUE,\n DEFAULT_ACCENT_SATURATION,\n DEFAULT_SUCCESS_HUE,\n DEFAULT_SUCCESS_SATURATION,\n DEFAULT_WARNING_HUE,\n DEFAULT_WARNING_SATURATION,\n DEFAULT_ERROR_HUE,\n DEFAULT_ERROR_SATURATION,\n} from 'newtone';\n\n/**\n * Default theme configuration matching playground defaults.\n * Palettes: [0] Neutral, [1] Accent, [2] Success, [3] Warning, [4] Error\n */\nexport const DEFAULT_THEME_CONFIG: NewtoneThemeConfig = {\n colorSystem: {\n dynamicRange: {\n lightest: 1,\n darkest: 1,\n },\n palettes: [\n { hue: DEFAULT_NEUTRAL_HUE, saturation: DEFAULT_NEUTRAL_SATURATION },\n { hue: DEFAULT_ACCENT_HUE, saturation: DEFAULT_ACCENT_SATURATION },\n { hue: DEFAULT_SUCCESS_HUE, saturation: DEFAULT_SUCCESS_SATURATION },\n { hue: DEFAULT_WARNING_HUE, saturation: DEFAULT_WARNING_SATURATION },\n { hue: DEFAULT_ERROR_HUE, saturation: DEFAULT_ERROR_SATURATION },\n ],\n },\n themes: {\n neutral: { paletteIndex: 0, lightModeNv: 0.95, darkModeNv: 0.1 },\n primary: { paletteIndex: 1, lightModeNv: 0.95, darkModeNv: 0.1 },\n secondary: { paletteIndex: 1, lightModeNv: 0.85, darkModeNv: 0.15 },\n strong: { paletteIndex: 0, lightModeNv: 0.1, darkModeNv: 0.95 },\n },\n elevation: {\n offsets: [-0.02, 0, 0.04], // [sunken, default, elevated]\n },\n};\n","import React, { createContext, useState, useMemo, useContext } from 'react';\nimport type { NewtoneThemeConfig, NewtoneThemeContext, ColorMode, ThemeName } from './types';\nimport { DEFAULT_THEME_CONFIG } from './defaults';\n\nconst ThemeContext = createContext<NewtoneThemeContext | null>(null);\n\nexport interface NewtoneProviderProps {\n readonly config?: NewtoneThemeConfig;\n readonly initialMode?: ColorMode;\n readonly initialTheme?: ThemeName;\n readonly children: React.ReactNode;\n}\n\n/**\n * NewtoneProvider - Provides theme context to all Newtone components\n *\n * Wrap your app with this provider to enable theme and mode switching.\n *\n * @example\n * ```tsx\n * <NewtoneProvider initialMode=\"light\" initialTheme=\"neutral\">\n * <App />\n * </NewtoneProvider>\n * ```\n */\nexport function NewtoneProvider({\n config = DEFAULT_THEME_CONFIG,\n initialMode = 'light',\n initialTheme = 'neutral',\n children,\n}: NewtoneProviderProps) {\n const [mode, setMode] = useState<ColorMode>(initialMode);\n const [theme, setTheme] = useState<ThemeName>(initialTheme);\n\n const value = useMemo(\n () => ({\n config,\n mode,\n theme,\n setMode,\n setTheme,\n }),\n [config, mode, theme]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\n/**\n * useNewtoneTheme - Hook to access theme context\n *\n * Must be used within a NewtoneProvider.\n *\n * @example\n * ```tsx\n * const { mode, theme, setMode, setTheme } = useNewtoneTheme();\n * ```\n */\nexport function useNewtoneTheme(): NewtoneThemeContext {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useNewtoneTheme must be used within NewtoneProvider');\n }\n return context;\n}\n","import { getColor, getColorByContrast } from 'newtone';\nimport type { ColorSystemConfig, ColorMode, ThemeMapping, ElevationLevel } from '../theme/types';\nimport type { ResolvedTokens } from './types';\n\n/**\n * Compute design tokens for a specific mode/theme/elevation combination.\n *\n * This function calls the Newtone engine to generate all necessary color tokens\n * based on the current theme context. All colors are computed on-demand using\n * the pure functions from the engine.\n *\n * @param config - Complete color system configuration (dynamic range + palettes)\n * @param mode - Current color mode ('light' or 'dark')\n * @param themeMapping - Theme configuration (which palette and NV to use)\n * @param elevation - Elevation level (0=sunken, 1=default, 2=elevated)\n * @param elevationOffsets - NV offsets for each elevation level\n * @returns Resolved design tokens with all necessary colors\n *\n * @example\n * ```typescript\n * const tokens = computeTokens(\n * config.colorSystem,\n * 'light',\n * config.themes.neutral,\n * 1,\n * config.elevation.offsets\n * );\n * console.log(tokens.background.srgb); // { r: 0.95, g: 0.95, b: 0.95 }\n * ```\n */\nexport function computeTokens(\n config: ColorSystemConfig,\n mode: ColorMode,\n themeMapping: ThemeMapping,\n elevation: ElevationLevel,\n elevationOffsets: readonly [number, number, number]\n): ResolvedTokens {\n const { dynamicRange, palettes } = config;\n const palette = palettes[themeMapping.paletteIndex];\n\n if (!palette) {\n throw new Error(`Palette at index ${themeMapping.paletteIndex} not found`);\n }\n\n // Determine base NV for this mode + elevation\n const baseNv = mode === 'light' ? themeMapping.lightModeNv : themeMapping.darkModeNv;\n const elevationOffset = elevationOffsets[elevation];\n const backgroundNv = Math.max(0, Math.min(1, baseNv + elevationOffset));\n\n // Derive effective text mode from actual background lightness.\n // This handles inverted themes (e.g., strong: dark bg in light mode)\n // where the mode flag doesn't match the background's visual lightness.\n const effectiveTextMode: ColorMode = backgroundNv >= 0.5 ? 'light' : 'dark';\n\n // Compute background colors for current elevation\n const background = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n backgroundNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Compute elevated surface (always at elevation 2 offset)\n const elevatedNv = Math.max(0, Math.min(1, baseNv + elevationOffsets[2]));\n const backgroundElevated = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n elevatedNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Compute sunken surface (always at elevation 0 offset)\n const sunkenNv = Math.max(0, Math.min(1, baseNv + elevationOffsets[0]));\n const backgroundSunken = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n sunkenNv,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Compute text colors with WCAG contrast requirements\n // Primary text: WCAG AA (4.5:1 for body text)\n const textPrimary = getColorByContrast(\n palette.hue,\n palette.saturation,\n dynamicRange,\n 4.5,\n effectiveTextMode,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Secondary text: Lower contrast (3.0:1 for captions)\n const textSecondary = getColorByContrast(\n palette.hue,\n palette.saturation,\n dynamicRange,\n 3.0,\n effectiveTextMode,\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Interactive colors: Use accent palette (index 1)\n const accentPalette = palettes[1];\n\n if (!accentPalette) {\n throw new Error('Accent palette (index 1) not found');\n }\n\n // Interactive base: WCAG AA contrast against current background\n const interactive = getColorByContrast(\n accentPalette.hue,\n accentPalette.saturation,\n dynamicRange,\n 4.5,\n effectiveTextMode,\n accentPalette.desaturation,\n accentPalette.paletteHueGrading\n );\n\n // Hover/active states: Shift NV slightly from interactive base\n // In light mode (light bg), go darker; in dark mode (dark bg), go lighter\n const interactiveNv = effectiveTextMode === 'light' ? 0.3 : 0.7;\n\n const interactiveHover = getColor(\n accentPalette.hue,\n accentPalette.saturation,\n dynamicRange,\n interactiveNv + (effectiveTextMode === 'light' ? -0.05 : 0.05),\n accentPalette.desaturation,\n accentPalette.paletteHueGrading\n );\n\n const interactiveActive = getColor(\n accentPalette.hue,\n accentPalette.saturation,\n dynamicRange,\n interactiveNv + (effectiveTextMode === 'light' ? -0.1 : 0.1),\n accentPalette.desaturation,\n accentPalette.paletteHueGrading\n );\n\n // Border: Subtle contrast from background\n const borderNv = effectiveTextMode === 'light' ? backgroundNv - 0.1 : backgroundNv + 0.1;\n const border = getColor(\n palette.hue,\n palette.saturation,\n dynamicRange,\n Math.max(0, Math.min(1, borderNv)),\n palette.desaturation,\n palette.paletteHueGrading\n );\n\n // Semantic status colors: success (palette 2), warning (palette 3), error (palette 4)\n // Each computed at WCAG AA contrast against the mode background, same as interactive\n const successPalette = palettes[2];\n const warningPalette = palettes[3];\n const errorPalette = palettes[4];\n\n const success = successPalette\n ? getColorByContrast(\n successPalette.hue,\n successPalette.saturation,\n dynamicRange,\n 4.5,\n effectiveTextMode,\n successPalette.desaturation,\n successPalette.paletteHueGrading\n )\n : interactive; // Fallback to interactive if palette missing\n\n const warning = warningPalette\n ? getColorByContrast(\n warningPalette.hue,\n warningPalette.saturation,\n dynamicRange,\n 4.5,\n effectiveTextMode,\n warningPalette.desaturation,\n warningPalette.paletteHueGrading\n )\n : interactive;\n\n const error = errorPalette\n ? getColorByContrast(\n errorPalette.hue,\n errorPalette.saturation,\n dynamicRange,\n 4.5,\n effectiveTextMode,\n errorPalette.desaturation,\n errorPalette.paletteHueGrading\n )\n : interactive;\n\n return {\n background,\n backgroundElevated,\n backgroundSunken,\n textPrimary,\n textSecondary,\n interactive,\n interactiveHover,\n interactiveActive,\n border,\n success,\n warning,\n error,\n };\n}\n","import { useMemo } from 'react';\nimport { useNewtoneTheme } from '../theme/NewtoneProvider';\nimport { computeTokens } from './computeTokens';\nimport type { ElevationLevel } from '../theme/types';\nimport type { ResolvedTokens } from './types';\n\n/**\n * Hook to compute design tokens for the current theme/mode/elevation.\n *\n * This hook automatically recomputes tokens when the theme configuration,\n * mode, theme name, or elevation changes. Results are memoized to avoid\n * unnecessary computation.\n *\n * @param elevation - Elevation level (0=sunken, 1=default, 2=elevated)\n * @returns Resolved design tokens with all necessary colors\n *\n * @example\n * ```tsx\n * function Button() {\n * const tokens = useTokens(1); // Default elevation\n * return (\n * <button style={{ backgroundColor: srgbToHex(tokens.interactive.srgb) }}>\n * Click me\n * </button>\n * );\n * }\n * ```\n */\nexport function useTokens(elevation: ElevationLevel = 1): ResolvedTokens {\n const { config, mode, theme } = useNewtoneTheme();\n\n return useMemo(() => {\n const themeMapping = config.themes[theme];\n return computeTokens(\n config.colorSystem,\n mode,\n themeMapping,\n elevation,\n config.elevation.offsets\n );\n }, [config, mode, theme, elevation]);\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\nimport type { ButtonVariant, ButtonSize } from './Button.types';\n\n/**\n * Size configuration for buttons\n */\nconst SIZE_CONFIG = {\n sm: { paddingVertical: 6, paddingHorizontal: 12, fontSize: 12, borderRadius: 4 },\n md: { paddingVertical: 10, paddingHorizontal: 20, fontSize: 14, borderRadius: 6 },\n lg: { paddingVertical: 14, paddingHorizontal: 28, fontSize: 16, borderRadius: 8 },\n} as const;\n\n/**\n * Compute button styles based on tokens, variant, size, and state\n *\n * @param tokens - Resolved design tokens from useTokens\n * @param variant - Button variant (primary, secondary, ghost, outline)\n * @param size - Button size (sm, md, lg)\n * @param disabled - Whether button is disabled\n * @returns StyleSheet with button styles\n */\nexport function getButtonStyles(\n tokens: ResolvedTokens,\n variant: ButtonVariant,\n size: ButtonSize,\n disabled: boolean\n) {\n const sizeConfig = SIZE_CONFIG[size];\n\n // Base styles\n const base = {\n paddingVertical: sizeConfig.paddingVertical,\n paddingHorizontal: sizeConfig.paddingHorizontal,\n borderRadius: sizeConfig.borderRadius,\n alignItems: 'center' as const,\n justifyContent: 'center' as const,\n flexDirection: 'row' as const,\n };\n\n // Variant-specific colors\n let backgroundColor: string;\n let textColor: string;\n let borderColor: string | undefined;\n let borderWidth = 0;\n\n switch (variant) {\n case 'primary':\n backgroundColor = srgbToHex(tokens.interactive.srgb);\n textColor = srgbToHex(tokens.background.srgb); // Contrast inversion\n break;\n case 'secondary':\n backgroundColor = srgbToHex(tokens.backgroundElevated.srgb);\n textColor = srgbToHex(tokens.textPrimary.srgb);\n break;\n case 'outline':\n backgroundColor = 'transparent';\n textColor = srgbToHex(tokens.interactive.srgb);\n borderColor = srgbToHex(tokens.border.srgb);\n borderWidth = 1;\n break;\n case 'ghost':\n backgroundColor = 'transparent';\n textColor = srgbToHex(tokens.interactive.srgb);\n break;\n }\n\n return StyleSheet.create({\n base: {\n ...base,\n backgroundColor: disabled ? srgbToHex(tokens.backgroundSunken.srgb) : backgroundColor,\n borderWidth,\n ...(borderColor && { borderColor }),\n },\n pressed: {\n backgroundColor:\n variant === 'primary'\n ? srgbToHex(tokens.interactiveActive.srgb)\n : variant === 'secondary'\n ? srgbToHex(tokens.backgroundSunken.srgb)\n : 'transparent',\n opacity: variant === 'ghost' || variant === 'outline' ? 0.7 : 1,\n },\n disabled: {\n opacity: 0.4,\n },\n text: {\n fontSize: sizeConfig.fontSize,\n fontWeight: '600' as const,\n color: disabled ? srgbToHex(tokens.textSecondary.srgb) : textColor,\n },\n textPressed: {\n // Color changes handled by parent opacity\n },\n textDisabled: {\n // Color already set in text style via disabled check\n },\n });\n}\n","import React from 'react';\nimport { Pressable, Text } from 'react-native';\nimport type { ButtonProps } from './Button.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getButtonStyles } from './Button.styles';\n\n/**\n * Button component with support for multiple variants and sizes.\n *\n * Automatically adapts to the current theme and mode from NewtoneProvider.\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" size=\"md\" onPress={() => console.log('Pressed')}>\n * Click me\n * </Button>\n * ```\n *\n * @example\n * ```tsx\n * <Button variant=\"outline\" size=\"lg\" disabled>\n * Disabled button\n * </Button>\n * ```\n */\nexport function Button({\n children,\n variant = 'primary',\n size = 'md',\n disabled = false,\n style,\n textStyle,\n ...pressableProps\n}: ButtonProps) {\n const tokens = useTokens(1); // Default elevation\n\n const styles = React.useMemo(\n () => getButtonStyles(tokens, variant, size, disabled),\n [tokens, variant, size, disabled]\n );\n\n return (\n <Pressable\n style={({ pressed }) => [\n styles.base,\n pressed && !disabled && styles.pressed,\n disabled && styles.disabled,\n ...(Array.isArray(style) ? style : [style]),\n ]}\n disabled={disabled}\n {...pressableProps}\n >\n {({ pressed }) => (\n <Text\n style={[\n styles.text,\n pressed && !disabled && styles.textPressed,\n disabled && styles.textDisabled,\n ...(Array.isArray(textStyle) ? textStyle : [textStyle]),\n ]}\n >\n {children}\n </Text>\n )}\n </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: 8,\n padding: 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","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: 4,\n },\n label: {\n fontSize: 12,\n fontWeight: '600',\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n input: {\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: 6,\n paddingVertical: 8,\n paddingHorizontal: 12,\n fontSize: 14,\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 getSelectStyles(tokens: ResolvedTokens, disabled: boolean) {\n return StyleSheet.create({\n container: {\n gap: 4,\n },\n label: {\n fontSize: 12,\n fontWeight: '600',\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n select: {\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n borderWidth: 1,\n borderColor: srgbToHex(tokens.border.srgb),\n borderRadius: 6,\n paddingVertical: 8,\n paddingHorizontal: 12,\n fontSize: 14,\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, StyleSheet } from 'react-native';\nimport type { SelectProps } from './Select.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getSelectStyles } from './Select.styles';\n\n/**\n * Select dropdown component.\n *\n * Renders a native HTML <select> element styled with design tokens.\n * On web (via react-native-web), View renders as a div which can contain\n * standard HTML elements.\n */\nexport function Select({\n options,\n value,\n onValueChange,\n label,\n disabled = false,\n style,\n}: SelectProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getSelectStyles(tokens, disabled),\n [tokens, disabled]\n );\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => {\n onValueChange(e.target.value);\n },\n [onValueChange]\n );\n\n // Flatten StyleSheet styles into inline style for the native <select>\n const selectStyle = StyleSheet.flatten(styles.select);\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {label && <Text style={styles.label}>{label}</Text>}\n <select\n value={value}\n onChange={handleChange}\n disabled={disabled}\n style={{\n ...selectStyle,\n cursor: disabled ? 'default' : 'pointer',\n appearance: 'auto',\n } as React.CSSProperties}\n >\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\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: 8,\n opacity: disabled ? 0.5 : 1,\n },\n label: {\n fontSize: 12,\n fontWeight: '600',\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n track: {\n width: TRACK_WIDTH,\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n backgroundColor: value\n ? srgbToHex(tokens.interactive.srgb)\n : srgbToHex(tokens.border.srgb),\n justifyContent: 'center',\n paddingHorizontal: THUMB_OFFSET,\n },\n thumb: {\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: srgbToHex(tokens.background.srgb),\n alignSelf: value ? 'flex-end' : 'flex-start',\n },\n });\n}\n","import React from 'react';\nimport { View, Text, Pressable } from 'react-native';\nimport type { ToggleProps } from './Toggle.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getToggleStyles } from './Toggle.styles';\n\nexport function Toggle({\n value,\n onValueChange,\n label,\n disabled = false,\n style,\n}: ToggleProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getToggleStyles(tokens, value, disabled),\n [tokens, value, disabled]\n );\n\n const handlePress = React.useCallback(() => {\n if (!disabled) {\n onValueChange(!value);\n }\n }, [disabled, value, onValueChange]);\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {label && <Text style={styles.label}>{label}</Text>}\n <Pressable\n onPress={handlePress}\n disabled={disabled}\n accessibilityRole=\"switch\"\n accessibilityState={{ checked: value, disabled }}\n >\n <View style={styles.track}>\n <View style={styles.thumb} />\n </View>\n </Pressable>\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\nexport function getSliderStyles(tokens: ResolvedTokens) {\n return StyleSheet.create({\n container: {\n gap: 4,\n },\n labelRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n label: {\n fontSize: 12,\n fontWeight: '600',\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n value: {\n fontSize: 12,\n fontWeight: '500',\n color: srgbToHex(tokens.textPrimary.srgb),\n },\n });\n}\n\n/**\n * Generate CSS for the range input styling.\n * Returns inline CSS properties for the native <input type=\"range\">.\n */\nexport function getSliderInputStyle(\n tokens: ResolvedTokens,\n disabled: boolean\n): React.CSSProperties {\n return {\n width: '100%',\n height: 6,\n borderRadius: 3,\n appearance: 'auto' as const,\n cursor: disabled ? 'default' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n accentColor: srgbToHex(tokens.interactive.srgb),\n };\n}\n","import React from 'react';\nimport { View, Text } from 'react-native';\nimport type { SliderProps } from './Slider.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getSliderStyles, getSliderInputStyle } 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 disabled = false,\n style,\n}: SliderProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getSliderStyles(tokens),\n [tokens]\n );\n\n const inputStyle = React.useMemo(\n () => getSliderInputStyle(tokens, disabled),\n [tokens, disabled]\n );\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onValueChange(Number(e.target.value));\n },\n [onValueChange]\n );\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {(label || showValue) && (\n <View style={styles.labelRow}>\n {label && <Text style={styles.label}>{label}</Text>}\n {showValue && <Text style={styles.value}>{value}</Text>}\n </View>\n )}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={handleChange}\n disabled={disabled}\n style={inputStyle}\n />\n </View>\n );\n}\n","import { StyleSheet } from 'react-native';\nimport { srgbToHex } from 'newtone';\nimport type { ResolvedTokens } from '../tokens/types';\n\n/** Rainbow gradient for hue slider track */\nconst HUE_GRADIENT =\n 'linear-gradient(to right, #ff0000, #ffff00, #00ff00, #00ffff, #0000ff, #ff00ff, #ff0000)';\n\n/** Convert an HSL hue (S=100%, L=50%) to a hex string for gradient stops. */\nfunction 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\nfunction buildHueGradient(min: number, max: number): string {\n if (min === 0 && max === 359) return HUE_GRADIENT;\n const steps = 7;\n const stops: string[] = [];\n for (let i = 0; i <= steps; i++) {\n const hue = min + (max - min) * (i / steps);\n stops.push(hueToHex(hue));\n }\n return `linear-gradient(to right, ${stops.join(', ')})`;\n}\n\nexport function getHueSliderStyles(tokens: ResolvedTokens) {\n return StyleSheet.create({\n container: {\n gap: 4,\n },\n labelRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n label: {\n fontSize: 12,\n fontWeight: '600',\n color: srgbToHex(tokens.textSecondary.srgb),\n },\n value: {\n fontSize: 12,\n fontWeight: '500',\n color: srgbToHex(tokens.textPrimary.srgb),\n },\n sliderTrack: {\n height: 22,\n borderRadius: 11,\n overflow: 'hidden',\n },\n });\n}\n\nexport function getHueSliderInputStyle(\n disabled: boolean,\n min: number = 0,\n max: number = 359,\n): React.CSSProperties {\n return {\n width: '100%',\n height: 22,\n borderRadius: 11,\n cursor: disabled ? 'default' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n background: buildHueGradient(min, max),\n appearance: 'auto' as const,\n };\n}\n","import React from 'react';\nimport { View, Text } from 'react-native';\nimport type { HueSliderProps } from './HueSlider.types';\nimport { useTokens } from '../tokens/useTokens';\nimport { getHueSliderStyles, getHueSliderInputStyle } 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 disabled = false,\n style,\n}: HueSliderProps) {\n const tokens = useTokens(1);\n\n const styles = React.useMemo(\n () => getHueSliderStyles(tokens),\n [tokens]\n );\n\n const inputStyle = React.useMemo(\n () => getHueSliderInputStyle(disabled, min, max),\n [disabled, min, max]\n );\n\n // For wrapping ranges (max > 359), convert stored value to slider range.\n const sliderValue = (max > 359 && value < min) ? value + 360 : value;\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = Number(e.target.value);\n onValueChange(((raw % 360) + 360) % 360);\n },\n [onValueChange]\n );\n\n return (\n <View style={[styles.container, ...(Array.isArray(style) ? style : [style])]}>\n {(label || showValue) && (\n <View style={styles.labelRow}>\n {label && <Text style={styles.label}>{label}</Text>}\n {showValue && <Text style={styles.value}>{value}°</Text>}\n </View>\n )}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={1}\n value={sliderValue}\n onChange={handleChange}\n disabled={disabled}\n style={inputStyle}\n />\n </View>\n );\n}\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { NewtoneThemeConfig, NewtoneThemeContext, ColorMode, ThemeName } from './types';
|
|
3
|
+
export interface NewtoneProviderProps {
|
|
4
|
+
readonly config?: NewtoneThemeConfig;
|
|
5
|
+
readonly initialMode?: ColorMode;
|
|
6
|
+
readonly initialTheme?: ThemeName;
|
|
7
|
+
readonly children: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* NewtoneProvider - Provides theme context to all Newtone components
|
|
11
|
+
*
|
|
12
|
+
* Wrap your app with this provider to enable theme and mode switching.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <NewtoneProvider initialMode="light" initialTheme="neutral">
|
|
17
|
+
* <App />
|
|
18
|
+
* </NewtoneProvider>
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function NewtoneProvider({ config, initialMode, initialTheme, children, }: NewtoneProviderProps): React.JSX.Element;
|
|
22
|
+
/**
|
|
23
|
+
* useNewtoneTheme - Hook to access theme context
|
|
24
|
+
*
|
|
25
|
+
* Must be used within a NewtoneProvider.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```tsx
|
|
29
|
+
* const { mode, theme, setMode, setTheme } = useNewtoneTheme();
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function useNewtoneTheme(): NewtoneThemeContext;
|
|
33
|
+
//# sourceMappingURL=NewtoneProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NewtoneProvider.d.ts","sourceRoot":"","sources":["../../src/theme/NewtoneProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuD,MAAM,OAAO,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAK7F,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CACpC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAA6B,EAC7B,WAAqB,EACrB,YAAwB,EACxB,QAAQ,GACT,EAAE,oBAAoB,qBAgBtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,mBAAmB,CAMrD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NewtoneThemeConfig } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Default theme configuration matching playground defaults.
|
|
4
|
+
* Palettes: [0] Neutral, [1] Accent, [2] Success, [3] Warning, [4] Error
|
|
5
|
+
*/
|
|
6
|
+
export declare const DEFAULT_THEME_CONFIG: NewtoneThemeConfig;
|
|
7
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/theme/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAclD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,kBAuBlC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { DynamicRange, PaletteConfig } from 'newtone';
|
|
2
|
+
/**
|
|
3
|
+
* Color mode: light or dark
|
|
4
|
+
*/
|
|
5
|
+
export type ColorMode = 'light' | 'dark';
|
|
6
|
+
/**
|
|
7
|
+
* Theme names for different UI contexts
|
|
8
|
+
*/
|
|
9
|
+
export type ThemeName = 'neutral' | 'primary' | 'secondary' | 'strong';
|
|
10
|
+
/**
|
|
11
|
+
* Elevation levels for surfaces
|
|
12
|
+
* 0 = sunken, 1 = default, 2 = elevated
|
|
13
|
+
*/
|
|
14
|
+
export type ElevationLevel = 0 | 1 | 2;
|
|
15
|
+
/**
|
|
16
|
+
* Theme mapping: which palette and normalizedValue to use for backgrounds/text
|
|
17
|
+
* Based on playground theme preview logic
|
|
18
|
+
*/
|
|
19
|
+
export interface ThemeMapping {
|
|
20
|
+
readonly paletteIndex: number;
|
|
21
|
+
readonly lightModeNv: number;
|
|
22
|
+
readonly darkModeNv: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Complete color system configuration
|
|
26
|
+
*/
|
|
27
|
+
export interface ColorSystemConfig {
|
|
28
|
+
readonly dynamicRange: DynamicRange;
|
|
29
|
+
readonly palettes: ReadonlyArray<PaletteConfig>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Newtone theme configuration
|
|
33
|
+
*/
|
|
34
|
+
export interface NewtoneThemeConfig {
|
|
35
|
+
readonly colorSystem: ColorSystemConfig;
|
|
36
|
+
readonly themes: {
|
|
37
|
+
readonly neutral: ThemeMapping;
|
|
38
|
+
readonly primary: ThemeMapping;
|
|
39
|
+
readonly secondary: ThemeMapping;
|
|
40
|
+
readonly strong: ThemeMapping;
|
|
41
|
+
};
|
|
42
|
+
readonly elevation: {
|
|
43
|
+
readonly offsets: readonly [number, number, number];
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Current theme context state
|
|
48
|
+
*/
|
|
49
|
+
export interface NewtoneThemeContext {
|
|
50
|
+
readonly config: NewtoneThemeConfig;
|
|
51
|
+
readonly mode: ColorMode;
|
|
52
|
+
readonly theme: ThemeName;
|
|
53
|
+
readonly setMode: (mode: ColorMode) => void;
|
|
54
|
+
readonly setTheme: (theme: ThemeName) => void;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEvE;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEvC;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;QAC/B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;QAC/B,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;QACjC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACrD,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CAC/C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ColorSystemConfig, ColorMode, ThemeMapping, ElevationLevel } from '../theme/types';
|
|
2
|
+
import type { ResolvedTokens } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Compute design tokens for a specific mode/theme/elevation combination.
|
|
5
|
+
*
|
|
6
|
+
* This function calls the Newtone engine to generate all necessary color tokens
|
|
7
|
+
* based on the current theme context. All colors are computed on-demand using
|
|
8
|
+
* the pure functions from the engine.
|
|
9
|
+
*
|
|
10
|
+
* @param config - Complete color system configuration (dynamic range + palettes)
|
|
11
|
+
* @param mode - Current color mode ('light' or 'dark')
|
|
12
|
+
* @param themeMapping - Theme configuration (which palette and NV to use)
|
|
13
|
+
* @param elevation - Elevation level (0=sunken, 1=default, 2=elevated)
|
|
14
|
+
* @param elevationOffsets - NV offsets for each elevation level
|
|
15
|
+
* @returns Resolved design tokens with all necessary colors
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const tokens = computeTokens(
|
|
20
|
+
* config.colorSystem,
|
|
21
|
+
* 'light',
|
|
22
|
+
* config.themes.neutral,
|
|
23
|
+
* 1,
|
|
24
|
+
* config.elevation.offsets
|
|
25
|
+
* );
|
|
26
|
+
* console.log(tokens.background.srgb); // { r: 0.95, g: 0.95, b: 0.95 }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function computeTokens(config: ColorSystemConfig, mode: ColorMode, themeMapping: ThemeMapping, elevation: ElevationLevel, elevationOffsets: readonly [number, number, number]): ResolvedTokens;
|
|
30
|
+
//# sourceMappingURL=computeTokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeTokens.d.ts","sourceRoot":"","sources":["../../src/tokens/computeTokens.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,cAAc,EACzB,gBAAgB,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAClD,cAAc,CAoLhB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ColorResult } from 'newtone';
|
|
2
|
+
/**
|
|
3
|
+
* Resolved design tokens for a specific mode/theme/elevation combination
|
|
4
|
+
*/
|
|
5
|
+
export interface ResolvedTokens {
|
|
6
|
+
/** Background color for the current surface */
|
|
7
|
+
readonly background: ColorResult;
|
|
8
|
+
/** Background color for elevated surfaces (cards, modals) */
|
|
9
|
+
readonly backgroundElevated: ColorResult;
|
|
10
|
+
/** Background color for sunken surfaces (input fields, wells) */
|
|
11
|
+
readonly backgroundSunken: ColorResult;
|
|
12
|
+
/** Primary text color (high contrast for body text) */
|
|
13
|
+
readonly textPrimary: ColorResult;
|
|
14
|
+
/** Secondary text color (lower contrast for captions, labels) */
|
|
15
|
+
readonly textSecondary: ColorResult;
|
|
16
|
+
/** Interactive element color (buttons, links) */
|
|
17
|
+
readonly interactive: ColorResult;
|
|
18
|
+
/** Interactive element hover state */
|
|
19
|
+
readonly interactiveHover: ColorResult;
|
|
20
|
+
/** Interactive element active/pressed state */
|
|
21
|
+
readonly interactiveActive: ColorResult;
|
|
22
|
+
/** Border color for subtle separators */
|
|
23
|
+
readonly border: ColorResult;
|
|
24
|
+
/** Success state color (from success palette, index 2) */
|
|
25
|
+
readonly success: ColorResult;
|
|
26
|
+
/** Warning state color (from warning palette, index 3) */
|
|
27
|
+
readonly warning: ColorResult;
|
|
28
|
+
/** Error/destructive state color (from error palette, index 4) */
|
|
29
|
+
readonly error: ColorResult;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tokens/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,6DAA6D;IAC7D,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC;IACzC,iEAAiE;IACjE,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC;IACvC,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,iEAAiE;IACjE,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;IACpC,iDAAiD;IACjD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,sCAAsC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC;IACvC,+CAA+C;IAC/C,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC;IACxC,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ElevationLevel } from '../theme/types';
|
|
2
|
+
import type { ResolvedTokens } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Hook to compute design tokens for the current theme/mode/elevation.
|
|
5
|
+
*
|
|
6
|
+
* This hook automatically recomputes tokens when the theme configuration,
|
|
7
|
+
* mode, theme name, or elevation changes. Results are memoized to avoid
|
|
8
|
+
* unnecessary computation.
|
|
9
|
+
*
|
|
10
|
+
* @param elevation - Elevation level (0=sunken, 1=default, 2=elevated)
|
|
11
|
+
* @returns Resolved design tokens with all necessary colors
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* function Button() {
|
|
16
|
+
* const tokens = useTokens(1); // Default elevation
|
|
17
|
+
* return (
|
|
18
|
+
* <button style={{ backgroundColor: srgbToHex(tokens.interactive.srgb) }}>
|
|
19
|
+
* Click me
|
|
20
|
+
* </button>
|
|
21
|
+
* );
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function useTokens(elevation?: ElevationLevel): ResolvedTokens;
|
|
26
|
+
//# sourceMappingURL=useTokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTokens.d.ts","sourceRoot":"","sources":["../../src/tokens/useTokens.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CAAC,SAAS,GAAE,cAAkB,GAAG,cAAc,CAavE"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@newtonedev/components",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "React + React Native Web component library for Newtone",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/joshuaallenmx/newtone-api.git",
|
|
9
|
+
"directory": "packages/components"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://newtone.dev",
|
|
12
|
+
"main": "./dist/index.cjs",
|
|
13
|
+
"module": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"react-native": "./src/index.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"react-native": "./src/index.ts",
|
|
20
|
+
"import": "./dist/index.js",
|
|
21
|
+
"require": "./dist/index.cjs"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"src"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsup && rm -f tsconfig.tsbuildinfo && tsc --emitDeclarationOnly",
|
|
30
|
+
"dev": "tsup --watch",
|
|
31
|
+
"test": "vitest run",
|
|
32
|
+
"test:watch": "vitest",
|
|
33
|
+
"typecheck": "tsc --noEmit"
|
|
34
|
+
},
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"react": ">=18.0.0",
|
|
37
|
+
"react-native": ">=0.70.0"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"newtone": "^0.1.0",
|
|
41
|
+
"react-native-web": "^0.19.10"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@testing-library/react": "^14.0.0",
|
|
45
|
+
"@types/react": "^18.2.0",
|
|
46
|
+
"@types/react-native": "^0.72.0",
|
|
47
|
+
"@vitejs/plugin-react": "^4.2.0",
|
|
48
|
+
"jsdom": "^24.0.0",
|
|
49
|
+
"react": "^18.2.0",
|
|
50
|
+
"react-dom": "^18.2.0",
|
|
51
|
+
"react-native": "^0.73.0",
|
|
52
|
+
"react-test-renderer": "^18.2.0",
|
|
53
|
+
"tsup": "^8.0.0",
|
|
54
|
+
"typescript": "^5.4.0",
|
|
55
|
+
"vitest": "^2.0.0"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { StyleSheet } from 'react-native';
|
|
2
|
+
import { srgbToHex } from 'newtone';
|
|
3
|
+
import type { ResolvedTokens } from '../tokens/types';
|
|
4
|
+
import type { ButtonVariant, ButtonSize } from './Button.types';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Size configuration for buttons
|
|
8
|
+
*/
|
|
9
|
+
const SIZE_CONFIG = {
|
|
10
|
+
sm: { paddingVertical: 6, paddingHorizontal: 12, fontSize: 12, borderRadius: 4 },
|
|
11
|
+
md: { paddingVertical: 10, paddingHorizontal: 20, fontSize: 14, borderRadius: 6 },
|
|
12
|
+
lg: { paddingVertical: 14, paddingHorizontal: 28, fontSize: 16, borderRadius: 8 },
|
|
13
|
+
} as const;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Compute button styles based on tokens, variant, size, and state
|
|
17
|
+
*
|
|
18
|
+
* @param tokens - Resolved design tokens from useTokens
|
|
19
|
+
* @param variant - Button variant (primary, secondary, ghost, outline)
|
|
20
|
+
* @param size - Button size (sm, md, lg)
|
|
21
|
+
* @param disabled - Whether button is disabled
|
|
22
|
+
* @returns StyleSheet with button styles
|
|
23
|
+
*/
|
|
24
|
+
export function getButtonStyles(
|
|
25
|
+
tokens: ResolvedTokens,
|
|
26
|
+
variant: ButtonVariant,
|
|
27
|
+
size: ButtonSize,
|
|
28
|
+
disabled: boolean
|
|
29
|
+
) {
|
|
30
|
+
const sizeConfig = SIZE_CONFIG[size];
|
|
31
|
+
|
|
32
|
+
// Base styles
|
|
33
|
+
const base = {
|
|
34
|
+
paddingVertical: sizeConfig.paddingVertical,
|
|
35
|
+
paddingHorizontal: sizeConfig.paddingHorizontal,
|
|
36
|
+
borderRadius: sizeConfig.borderRadius,
|
|
37
|
+
alignItems: 'center' as const,
|
|
38
|
+
justifyContent: 'center' as const,
|
|
39
|
+
flexDirection: 'row' as const,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// Variant-specific colors
|
|
43
|
+
let backgroundColor: string;
|
|
44
|
+
let textColor: string;
|
|
45
|
+
let borderColor: string | undefined;
|
|
46
|
+
let borderWidth = 0;
|
|
47
|
+
|
|
48
|
+
switch (variant) {
|
|
49
|
+
case 'primary':
|
|
50
|
+
backgroundColor = srgbToHex(tokens.interactive.srgb);
|
|
51
|
+
textColor = srgbToHex(tokens.background.srgb); // Contrast inversion
|
|
52
|
+
break;
|
|
53
|
+
case 'secondary':
|
|
54
|
+
backgroundColor = srgbToHex(tokens.backgroundElevated.srgb);
|
|
55
|
+
textColor = srgbToHex(tokens.textPrimary.srgb);
|
|
56
|
+
break;
|
|
57
|
+
case 'outline':
|
|
58
|
+
backgroundColor = 'transparent';
|
|
59
|
+
textColor = srgbToHex(tokens.interactive.srgb);
|
|
60
|
+
borderColor = srgbToHex(tokens.border.srgb);
|
|
61
|
+
borderWidth = 1;
|
|
62
|
+
break;
|
|
63
|
+
case 'ghost':
|
|
64
|
+
backgroundColor = 'transparent';
|
|
65
|
+
textColor = srgbToHex(tokens.interactive.srgb);
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return StyleSheet.create({
|
|
70
|
+
base: {
|
|
71
|
+
...base,
|
|
72
|
+
backgroundColor: disabled ? srgbToHex(tokens.backgroundSunken.srgb) : backgroundColor,
|
|
73
|
+
borderWidth,
|
|
74
|
+
...(borderColor && { borderColor }),
|
|
75
|
+
},
|
|
76
|
+
pressed: {
|
|
77
|
+
backgroundColor:
|
|
78
|
+
variant === 'primary'
|
|
79
|
+
? srgbToHex(tokens.interactiveActive.srgb)
|
|
80
|
+
: variant === 'secondary'
|
|
81
|
+
? srgbToHex(tokens.backgroundSunken.srgb)
|
|
82
|
+
: 'transparent',
|
|
83
|
+
opacity: variant === 'ghost' || variant === 'outline' ? 0.7 : 1,
|
|
84
|
+
},
|
|
85
|
+
disabled: {
|
|
86
|
+
opacity: 0.4,
|
|
87
|
+
},
|
|
88
|
+
text: {
|
|
89
|
+
fontSize: sizeConfig.fontSize,
|
|
90
|
+
fontWeight: '600' as const,
|
|
91
|
+
color: disabled ? srgbToHex(tokens.textSecondary.srgb) : textColor,
|
|
92
|
+
},
|
|
93
|
+
textPressed: {
|
|
94
|
+
// Color changes handled by parent opacity
|
|
95
|
+
},
|
|
96
|
+
textDisabled: {
|
|
97
|
+
// Color already set in text style via disabled check
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Pressable, Text } from 'react-native';
|
|
3
|
+
import type { ButtonProps } from './Button.types';
|
|
4
|
+
import { useTokens } from '../tokens/useTokens';
|
|
5
|
+
import { getButtonStyles } from './Button.styles';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Button component with support for multiple variants and sizes.
|
|
9
|
+
*
|
|
10
|
+
* Automatically adapts to the current theme and mode from NewtoneProvider.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* <Button variant="primary" size="md" onPress={() => console.log('Pressed')}>
|
|
15
|
+
* Click me
|
|
16
|
+
* </Button>
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* <Button variant="outline" size="lg" disabled>
|
|
22
|
+
* Disabled button
|
|
23
|
+
* </Button>
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function Button({
|
|
27
|
+
children,
|
|
28
|
+
variant = 'primary',
|
|
29
|
+
size = 'md',
|
|
30
|
+
disabled = false,
|
|
31
|
+
style,
|
|
32
|
+
textStyle,
|
|
33
|
+
...pressableProps
|
|
34
|
+
}: ButtonProps) {
|
|
35
|
+
const tokens = useTokens(1); // Default elevation
|
|
36
|
+
|
|
37
|
+
const styles = React.useMemo(
|
|
38
|
+
() => getButtonStyles(tokens, variant, size, disabled),
|
|
39
|
+
[tokens, variant, size, disabled]
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<Pressable
|
|
44
|
+
style={({ pressed }) => [
|
|
45
|
+
styles.base,
|
|
46
|
+
pressed && !disabled && styles.pressed,
|
|
47
|
+
disabled && styles.disabled,
|
|
48
|
+
...(Array.isArray(style) ? style : [style]),
|
|
49
|
+
]}
|
|
50
|
+
disabled={disabled}
|
|
51
|
+
{...pressableProps}
|
|
52
|
+
>
|
|
53
|
+
{({ pressed }) => (
|
|
54
|
+
<Text
|
|
55
|
+
style={[
|
|
56
|
+
styles.text,
|
|
57
|
+
pressed && !disabled && styles.textPressed,
|
|
58
|
+
disabled && styles.textDisabled,
|
|
59
|
+
...(Array.isArray(textStyle) ? textStyle : [textStyle]),
|
|
60
|
+
]}
|
|
61
|
+
>
|
|
62
|
+
{children}
|
|
63
|
+
</Text>
|
|
64
|
+
)}
|
|
65
|
+
</Pressable>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { PressableProps, ViewStyle, TextStyle } from 'react-native';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Visual variants for the Button component
|
|
5
|
+
*/
|
|
6
|
+
export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'outline';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Size presets for the Button component
|
|
10
|
+
*/
|
|
11
|
+
export type ButtonSize = 'sm' | 'md' | 'lg';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Props for the Button component
|
|
15
|
+
*/
|
|
16
|
+
export interface ButtonProps extends Omit<PressableProps, 'children' | 'style'> {
|
|
17
|
+
/**
|
|
18
|
+
* Button text or custom content
|
|
19
|
+
*/
|
|
20
|
+
readonly children: React.ReactNode;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Visual variant
|
|
24
|
+
* @default 'primary'
|
|
25
|
+
*/
|
|
26
|
+
readonly variant?: ButtonVariant;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Size preset
|
|
30
|
+
* @default 'md'
|
|
31
|
+
*/
|
|
32
|
+
readonly size?: ButtonSize;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Disabled state
|
|
36
|
+
* @default false
|
|
37
|
+
*/
|
|
38
|
+
readonly disabled?: boolean;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Custom style overrides for container
|
|
42
|
+
*/
|
|
43
|
+
readonly style?: ViewStyle | ViewStyle[];
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Custom style overrides for text
|
|
47
|
+
*/
|
|
48
|
+
readonly textStyle?: TextStyle | TextStyle[];
|
|
49
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { StyleSheet } from 'react-native';
|
|
2
|
+
import { srgbToHex } from 'newtone';
|
|
3
|
+
import type { ResolvedTokens } from '../tokens/types';
|
|
4
|
+
|
|
5
|
+
export function getCardStyles(tokens: ResolvedTokens, disabled: boolean) {
|
|
6
|
+
return StyleSheet.create({
|
|
7
|
+
container: {
|
|
8
|
+
backgroundColor: srgbToHex(tokens.background.srgb),
|
|
9
|
+
borderWidth: 1,
|
|
10
|
+
borderColor: srgbToHex(tokens.border.srgb),
|
|
11
|
+
borderRadius: 8,
|
|
12
|
+
padding: 16,
|
|
13
|
+
opacity: disabled ? 0.5 : 1,
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
}
|