@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.
Files changed (111) hide show
  1. package/README.md +506 -0
  2. package/dist/Button/Button.d.ts +23 -0
  3. package/dist/Button/Button.d.ts.map +1 -0
  4. package/dist/Button/Button.styles.d.ts +39 -0
  5. package/dist/Button/Button.styles.d.ts.map +1 -0
  6. package/dist/Button/Button.types.d.ts +42 -0
  7. package/dist/Button/Button.types.d.ts.map +1 -0
  8. package/dist/Button/index.d.ts +3 -0
  9. package/dist/Button/index.d.ts.map +1 -0
  10. package/dist/Card/Card.d.ts +4 -0
  11. package/dist/Card/Card.d.ts.map +1 -0
  12. package/dist/Card/Card.styles.d.ts +12 -0
  13. package/dist/Card/Card.styles.d.ts.map +1 -0
  14. package/dist/Card/Card.types.d.ts +9 -0
  15. package/dist/Card/Card.types.d.ts.map +1 -0
  16. package/dist/Card/index.d.ts +3 -0
  17. package/dist/Card/index.d.ts.map +1 -0
  18. package/dist/HueSlider/HueSlider.d.ts +14 -0
  19. package/dist/HueSlider/HueSlider.d.ts.map +1 -0
  20. package/dist/HueSlider/HueSlider.styles.d.ts +28 -0
  21. package/dist/HueSlider/HueSlider.styles.d.ts.map +1 -0
  22. package/dist/HueSlider/HueSlider.types.d.ts +12 -0
  23. package/dist/HueSlider/HueSlider.types.d.ts.map +1 -0
  24. package/dist/HueSlider/index.d.ts +3 -0
  25. package/dist/HueSlider/index.d.ts.map +1 -0
  26. package/dist/Select/Select.d.ts +11 -0
  27. package/dist/Select/Select.d.ts.map +1 -0
  28. package/dist/Select/Select.styles.d.ts +23 -0
  29. package/dist/Select/Select.styles.d.ts.map +1 -0
  30. package/dist/Select/Select.types.d.ts +14 -0
  31. package/dist/Select/Select.types.d.ts.map +1 -0
  32. package/dist/Select/index.d.ts +3 -0
  33. package/dist/Select/index.d.ts.map +1 -0
  34. package/dist/Slider/Slider.d.ts +4 -0
  35. package/dist/Slider/Slider.d.ts.map +1 -0
  36. package/dist/Slider/Slider.styles.d.ts +27 -0
  37. package/dist/Slider/Slider.styles.d.ts.map +1 -0
  38. package/dist/Slider/Slider.types.d.ts +13 -0
  39. package/dist/Slider/Slider.types.d.ts.map +1 -0
  40. package/dist/Slider/index.d.ts +3 -0
  41. package/dist/Slider/index.d.ts.map +1 -0
  42. package/dist/TextInput/TextInput.d.ts +4 -0
  43. package/dist/TextInput/TextInput.d.ts.map +1 -0
  44. package/dist/TextInput/TextInput.styles.d.ts +23 -0
  45. package/dist/TextInput/TextInput.styles.d.ts.map +1 -0
  46. package/dist/TextInput/TextInput.types.d.ts +7 -0
  47. package/dist/TextInput/TextInput.types.d.ts.map +1 -0
  48. package/dist/TextInput/index.d.ts +3 -0
  49. package/dist/TextInput/index.d.ts.map +1 -0
  50. package/dist/Toggle/Toggle.d.ts +4 -0
  51. package/dist/Toggle/Toggle.d.ts.map +1 -0
  52. package/dist/Toggle/Toggle.styles.d.ts +30 -0
  53. package/dist/Toggle/Toggle.styles.d.ts.map +1 -0
  54. package/dist/Toggle/Toggle.types.d.ts +9 -0
  55. package/dist/Toggle/Toggle.types.d.ts.map +1 -0
  56. package/dist/Toggle/index.d.ts +3 -0
  57. package/dist/Toggle/index.d.ts.map +1 -0
  58. package/dist/index.cjs +736 -0
  59. package/dist/index.cjs.map +1 -0
  60. package/dist/index.d.ts +22 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +719 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/theme/NewtoneProvider.d.ts +33 -0
  65. package/dist/theme/NewtoneProvider.d.ts.map +1 -0
  66. package/dist/theme/defaults.d.ts +7 -0
  67. package/dist/theme/defaults.d.ts.map +1 -0
  68. package/dist/theme/types.d.ts +56 -0
  69. package/dist/theme/types.d.ts.map +1 -0
  70. package/dist/tokens/computeTokens.d.ts +30 -0
  71. package/dist/tokens/computeTokens.d.ts.map +1 -0
  72. package/dist/tokens/types.d.ts +31 -0
  73. package/dist/tokens/types.d.ts.map +1 -0
  74. package/dist/tokens/useTokens.d.ts +26 -0
  75. package/dist/tokens/useTokens.d.ts.map +1 -0
  76. package/package.json +57 -0
  77. package/src/Button/Button.styles.ts +100 -0
  78. package/src/Button/Button.tsx +67 -0
  79. package/src/Button/Button.types.ts +49 -0
  80. package/src/Button/index.ts +2 -0
  81. package/src/Card/Card.styles.ts +16 -0
  82. package/src/Card/Card.tsx +25 -0
  83. package/src/Card/Card.types.ts +9 -0
  84. package/src/Card/index.ts +2 -0
  85. package/src/HueSlider/HueSlider.styles.ts +77 -0
  86. package/src/HueSlider/HueSlider.tsx +70 -0
  87. package/src/HueSlider/HueSlider.types.ts +12 -0
  88. package/src/HueSlider/index.ts +2 -0
  89. package/src/Select/Select.styles.ts +29 -0
  90. package/src/Select/Select.tsx +60 -0
  91. package/src/Select/Select.types.ts +15 -0
  92. package/src/Select/index.ts +2 -0
  93. package/src/Slider/Slider.styles.ts +45 -0
  94. package/src/Slider/Slider.tsx +57 -0
  95. package/src/Slider/Slider.types.ts +13 -0
  96. package/src/Slider/index.ts +2 -0
  97. package/src/TextInput/TextInput.styles.ts +29 -0
  98. package/src/TextInput/TextInput.tsx +32 -0
  99. package/src/TextInput/TextInput.types.ts +7 -0
  100. package/src/TextInput/index.ts +2 -0
  101. package/src/Toggle/Toggle.styles.ts +45 -0
  102. package/src/Toggle/Toggle.tsx +42 -0
  103. package/src/Toggle/Toggle.types.ts +9 -0
  104. package/src/Toggle/index.ts +2 -0
  105. package/src/index.ts +49 -0
  106. package/src/theme/NewtoneProvider.tsx +65 -0
  107. package/src/theme/defaults.ts +42 -0
  108. package/src/theme/types.ts +62 -0
  109. package/src/tokens/computeTokens.ts +217 -0
  110. package/src/tokens/types.ts +31 -0
  111. 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,2 @@
1
+ export { Button } from './Button';
2
+ export type { ButtonProps, ButtonVariant, ButtonSize } from './Button.types';
@@ -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
+ }