@idealyst/components 1.0.82 → 1.0.84

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 (316) hide show
  1. package/CLAUDE.md +199 -232
  2. package/README.md +5 -5
  3. package/package.json +25 -7
  4. package/plugin/README.md +272 -0
  5. package/plugin/test-cases.jsx +112 -0
  6. package/plugin/web-legacy.js +320 -0
  7. package/plugin/web.js +422 -124
  8. package/src/Accordion/Accordion.native.tsx +182 -0
  9. package/src/Accordion/Accordion.styles.tsx +260 -0
  10. package/src/Accordion/Accordion.web.tsx +147 -0
  11. package/src/Accordion/index.native.tsx +3 -0
  12. package/src/Accordion/index.ts +3 -0
  13. package/src/Accordion/index.web.tsx +3 -0
  14. package/src/Accordion/types.ts +23 -0
  15. package/src/ActivityIndicator/ActivityIndicator.native.tsx +17 -12
  16. package/src/ActivityIndicator/ActivityIndicator.styles.tsx +83 -109
  17. package/src/ActivityIndicator/ActivityIndicator.web.tsx +23 -17
  18. package/src/ActivityIndicator/index.ts +5 -2
  19. package/src/ActivityIndicator/index.web.ts +5 -2
  20. package/src/ActivityIndicator/types.ts +15 -10
  21. package/src/Alert/Alert.native.tsx +113 -0
  22. package/src/Alert/Alert.styles.tsx +304 -0
  23. package/src/Alert/Alert.web.tsx +123 -0
  24. package/src/Alert/index.native.ts +5 -0
  25. package/src/Alert/index.ts +5 -0
  26. package/src/Alert/index.web.ts +5 -0
  27. package/src/Alert/types.ts +21 -0
  28. package/src/Avatar/Avatar.native.tsx +8 -6
  29. package/src/Avatar/Avatar.styles.tsx +64 -58
  30. package/src/Avatar/Avatar.web.tsx +13 -8
  31. package/src/Avatar/index.ts +5 -2
  32. package/src/Avatar/index.web.ts +5 -2
  33. package/src/Avatar/types.ts +19 -13
  34. package/src/Badge/Badge.native.tsx +59 -14
  35. package/src/Badge/Badge.styles.tsx +125 -139
  36. package/src/Badge/Badge.web.tsx +72 -16
  37. package/src/Badge/index.ts +5 -2
  38. package/src/Badge/index.web.ts +5 -2
  39. package/src/Badge/types.ts +23 -11
  40. package/src/Breadcrumb/Breadcrumb.native.tsx +225 -0
  41. package/src/Breadcrumb/Breadcrumb.styles.tsx +234 -0
  42. package/src/Breadcrumb/Breadcrumb.web.tsx +268 -0
  43. package/src/Breadcrumb/index.native.ts +5 -0
  44. package/src/Breadcrumb/index.ts +5 -0
  45. package/src/Breadcrumb/index.web.ts +5 -0
  46. package/src/Breadcrumb/types.ts +56 -0
  47. package/src/Button/Button.native.tsx +75 -24
  48. package/src/Button/Button.styles.tsx +248 -205
  49. package/src/Button/Button.web.tsx +82 -25
  50. package/src/Button/index.ts +5 -5
  51. package/src/Button/index.web.ts +5 -3
  52. package/src/Button/types.ts +32 -15
  53. package/src/Card/Card.native.tsx +14 -11
  54. package/src/Card/Card.styles.tsx +146 -220
  55. package/src/Card/Card.web.tsx +20 -21
  56. package/src/Card/index.ts +5 -5
  57. package/src/Card/index.web.ts +5 -3
  58. package/src/Card/types.ts +24 -17
  59. package/src/Checkbox/Checkbox.native.tsx +24 -34
  60. package/src/Checkbox/Checkbox.styles.tsx +223 -275
  61. package/src/Checkbox/Checkbox.web.tsx +30 -37
  62. package/src/Checkbox/index.ts +5 -5
  63. package/src/Checkbox/index.web.ts +5 -3
  64. package/src/Checkbox/types.ts +26 -20
  65. package/src/Chip/Chip.native.tsx +126 -0
  66. package/src/Chip/Chip.styles.tsx +138 -0
  67. package/src/Chip/Chip.web.tsx +154 -0
  68. package/src/Chip/index.native.ts +5 -0
  69. package/src/Chip/index.ts +5 -0
  70. package/src/Chip/index.web.ts +5 -0
  71. package/src/Chip/types.ts +51 -0
  72. package/src/Dialog/Dialog.native.tsx +65 -12
  73. package/src/Dialog/Dialog.styles.tsx +154 -136
  74. package/src/Dialog/Dialog.web.tsx +16 -11
  75. package/src/Dialog/index.ts +5 -2
  76. package/src/Dialog/index.web.ts +5 -2
  77. package/src/Dialog/types.ts +22 -16
  78. package/src/Divider/Divider.native.tsx +19 -14
  79. package/src/Divider/Divider.styles.tsx +273 -595
  80. package/src/Divider/Divider.web.tsx +19 -12
  81. package/src/Divider/index.ts +5 -5
  82. package/src/Divider/index.web.ts +5 -3
  83. package/src/Divider/types.ts +28 -19
  84. package/src/Icon/Icon.native.tsx +17 -24
  85. package/src/Icon/Icon.styles.tsx +64 -48
  86. package/src/Icon/Icon.web.tsx +14 -11
  87. package/src/Icon/IconSvg/IconSvg.native.tsx +42 -0
  88. package/src/Icon/IconSvg/IconSvg.web.tsx +40 -0
  89. package/src/Icon/IconSvg/index.native.ts +1 -0
  90. package/src/Icon/IconSvg/index.ts +1 -0
  91. package/src/Icon/icon-resolver.native.ts +27 -0
  92. package/src/Icon/icon-resolver.ts +70 -0
  93. package/src/Icon/index.ts +5 -5
  94. package/src/Icon/index.web.ts +5 -3
  95. package/src/Icon/types.ts +17 -11
  96. package/src/Image/Image.native.tsx +86 -0
  97. package/src/Image/Image.styles.tsx +57 -0
  98. package/src/Image/Image.web.tsx +92 -0
  99. package/src/Image/index.native.ts +5 -0
  100. package/src/Image/index.ts +5 -0
  101. package/src/Image/types.ts +21 -0
  102. package/src/Input/Input.native.tsx +103 -26
  103. package/src/Input/Input.styles.tsx +240 -177
  104. package/src/Input/Input.web.tsx +141 -38
  105. package/src/Input/index.ts +5 -5
  106. package/src/Input/index.web.ts +5 -3
  107. package/src/Input/types.ts +43 -20
  108. package/src/List/List.native.tsx +56 -0
  109. package/src/List/List.styles.tsx +257 -0
  110. package/src/List/List.web.tsx +43 -0
  111. package/src/List/ListContext.tsx +16 -0
  112. package/src/List/ListItem.native.tsx +111 -0
  113. package/src/List/ListItem.web.tsx +110 -0
  114. package/src/List/ListSection.native.tsx +31 -0
  115. package/src/List/ListSection.web.tsx +33 -0
  116. package/src/List/index.native.tsx +5 -0
  117. package/src/List/index.ts +5 -0
  118. package/src/List/index.web.tsx +5 -0
  119. package/src/List/types.ts +42 -0
  120. package/src/Menu/Menu.native.tsx +150 -0
  121. package/src/Menu/Menu.styles.tsx +185 -0
  122. package/src/Menu/Menu.web.tsx +99 -0
  123. package/src/Menu/MenuItem.native.tsx +66 -0
  124. package/src/Menu/MenuItem.styles.tsx +119 -0
  125. package/src/Menu/MenuItem.web.tsx +67 -0
  126. package/src/Menu/index.native.ts +3 -0
  127. package/src/Menu/index.ts +3 -0
  128. package/src/Menu/index.web.ts +3 -0
  129. package/src/Menu/types.ts +30 -0
  130. package/src/Popover/Popover.native.tsx +102 -32
  131. package/src/Popover/Popover.styles.tsx +100 -67
  132. package/src/Popover/Popover.web.tsx +36 -260
  133. package/src/Popover/index.ts +5 -2
  134. package/src/Popover/index.web.ts +5 -2
  135. package/src/Popover/types.ts +14 -13
  136. package/src/Pressable/Pressable.native.tsx +7 -6
  137. package/src/Pressable/Pressable.web.tsx +8 -6
  138. package/src/Pressable/index.ts +5 -2
  139. package/src/Pressable/index.web.ts +5 -2
  140. package/src/Pressable/types.ts +11 -10
  141. package/src/Progress/Progress.native.tsx +179 -0
  142. package/src/Progress/Progress.styles.tsx +164 -0
  143. package/src/Progress/Progress.web.tsx +144 -0
  144. package/src/Progress/index.native.ts +1 -0
  145. package/src/Progress/index.ts +5 -0
  146. package/src/Progress/index.web.ts +5 -0
  147. package/src/Progress/types.ts +21 -0
  148. package/src/RadioButton/RadioButton.native.tsx +88 -0
  149. package/src/RadioButton/RadioButton.styles.tsx +163 -0
  150. package/src/RadioButton/RadioButton.web.tsx +85 -0
  151. package/src/RadioButton/RadioGroup.native.tsx +43 -0
  152. package/src/RadioButton/RadioGroup.web.tsx +49 -0
  153. package/src/RadioButton/index.native.ts +2 -0
  154. package/src/RadioButton/index.ts +2 -0
  155. package/src/RadioButton/index.web.ts +2 -0
  156. package/src/RadioButton/types.ts +29 -0
  157. package/src/SVGImage/SVGImage.native.tsx +9 -7
  158. package/src/SVGImage/SVGImage.styles.tsx +63 -55
  159. package/src/SVGImage/SVGImage.web.tsx +16 -13
  160. package/src/SVGImage/index.ts +5 -5
  161. package/src/SVGImage/index.web.ts +5 -2
  162. package/src/SVGImage/types.ts +7 -3
  163. package/src/Screen/Screen.native.tsx +43 -17
  164. package/src/Screen/Screen.styles.tsx +58 -54
  165. package/src/Screen/Screen.web.tsx +11 -5
  166. package/src/Screen/index.ts +5 -2
  167. package/src/Screen/index.web.ts +5 -2
  168. package/src/Screen/types.ts +23 -9
  169. package/src/Select/Select.native.tsx +347 -0
  170. package/src/Select/Select.styles.tsx +335 -0
  171. package/src/Select/Select.web.tsx +276 -0
  172. package/src/Select/index.native.ts +2 -0
  173. package/src/Select/index.ts +5 -0
  174. package/src/Select/index.web.ts +5 -0
  175. package/src/Select/types.ts +124 -0
  176. package/src/Skeleton/Skeleton.native.tsx +139 -0
  177. package/src/Skeleton/Skeleton.styles.tsx +59 -0
  178. package/src/Skeleton/Skeleton.web.tsx +112 -0
  179. package/src/Skeleton/index.native.ts +4 -0
  180. package/src/Skeleton/index.ts +5 -0
  181. package/src/Skeleton/index.web.ts +5 -0
  182. package/src/Skeleton/types.ts +75 -0
  183. package/src/Slider/Slider.native.tsx +248 -0
  184. package/src/Slider/Slider.styles.tsx +241 -0
  185. package/src/Slider/Slider.web.tsx +226 -0
  186. package/src/Slider/index.native.ts +3 -0
  187. package/src/Slider/index.ts +5 -0
  188. package/src/Slider/index.web.ts +5 -0
  189. package/src/Slider/types.ts +31 -0
  190. package/src/Switch/Switch.native.tsx +131 -0
  191. package/src/Switch/Switch.styles.tsx +169 -0
  192. package/src/Switch/Switch.web.tsx +121 -0
  193. package/src/Switch/index.native.ts +3 -0
  194. package/src/Switch/index.ts +5 -0
  195. package/src/Switch/index.web.ts +5 -0
  196. package/src/Switch/types.ts +21 -0
  197. package/src/TabBar/TabBar.native.tsx +142 -0
  198. package/src/TabBar/TabBar.styles.tsx +399 -0
  199. package/src/TabBar/TabBar.web.tsx +205 -0
  200. package/src/TabBar/index.native.tsx +3 -0
  201. package/src/TabBar/index.ts +3 -0
  202. package/src/TabBar/index.web.tsx +3 -0
  203. package/src/TabBar/types.ts +26 -0
  204. package/src/Table/Table.native.tsx +122 -0
  205. package/src/Table/Table.styles.tsx +283 -0
  206. package/src/Table/Table.web.tsx +112 -0
  207. package/src/Table/index.native.tsx +3 -0
  208. package/src/Table/index.ts +3 -0
  209. package/src/Table/index.web.tsx +3 -0
  210. package/src/Table/types.ts +28 -0
  211. package/src/Text/Text.native.tsx +12 -11
  212. package/src/Text/Text.styles.tsx +76 -64
  213. package/src/Text/Text.web.tsx +14 -9
  214. package/src/Text/index.ts +5 -5
  215. package/src/Text/index.web.ts +5 -3
  216. package/src/Text/types.ts +20 -13
  217. package/src/TextArea/TextArea.native.tsx +134 -0
  218. package/src/TextArea/TextArea.styles.tsx +175 -0
  219. package/src/TextArea/TextArea.web.tsx +156 -0
  220. package/src/TextArea/index.native.ts +3 -0
  221. package/src/TextArea/index.ts +3 -0
  222. package/src/TextArea/index.web.ts +3 -0
  223. package/src/TextArea/types.ts +30 -0
  224. package/src/Tooltip/Tooltip.native.tsx +165 -0
  225. package/src/Tooltip/Tooltip.styles.tsx +73 -0
  226. package/src/Tooltip/Tooltip.web.tsx +87 -0
  227. package/src/Tooltip/index.native.ts +3 -0
  228. package/src/Tooltip/index.ts +3 -0
  229. package/src/Tooltip/types.ts +18 -0
  230. package/src/Video/Video.native.tsx +105 -0
  231. package/src/Video/Video.styles.tsx +39 -0
  232. package/src/Video/Video.web.tsx +115 -0
  233. package/src/Video/index.native.ts +5 -0
  234. package/src/Video/index.ts +5 -0
  235. package/src/Video/types.ts +29 -0
  236. package/src/View/View.native.tsx +9 -14
  237. package/src/View/View.styles.tsx +101 -93
  238. package/src/View/View.web.tsx +16 -17
  239. package/src/View/index.ts +5 -5
  240. package/src/View/index.web.ts +5 -3
  241. package/src/View/types.ts +29 -21
  242. package/src/examples/AccordionExamples.tsx +126 -0
  243. package/src/examples/AlertExamples.tsx +280 -0
  244. package/src/examples/AvatarExamples.tsx +23 -23
  245. package/src/examples/BadgeExamples.tsx +109 -41
  246. package/src/examples/BreadcrumbExamples.tsx +312 -0
  247. package/src/examples/ButtonExamples.tsx +160 -33
  248. package/src/examples/CardExamples.tsx +40 -40
  249. package/src/examples/CheckboxExamples.tsx +12 -12
  250. package/src/examples/ChipExamples.tsx +197 -0
  251. package/src/examples/DialogExamples.tsx +22 -22
  252. package/src/examples/DividerExamples.tsx +49 -49
  253. package/src/examples/IconExamples.tsx +270 -54
  254. package/src/examples/ImageExamples.tsx +174 -0
  255. package/src/examples/InputExamples.tsx +75 -17
  256. package/src/examples/ListExamples.tsx +288 -0
  257. package/src/examples/MenuExamples.tsx +144 -0
  258. package/src/examples/PopoverExamples.tsx +69 -73
  259. package/src/examples/ProgressExamples.tsx +137 -0
  260. package/src/examples/RadioButtonExamples.tsx +161 -0
  261. package/src/examples/SVGImageExamples.tsx +19 -17
  262. package/src/examples/ScreenExamples.tsx +31 -31
  263. package/src/examples/SelectExamples.tsx +423 -0
  264. package/src/examples/SkeletonExamples.tsx +206 -0
  265. package/src/examples/SliderExamples.tsx +200 -0
  266. package/src/examples/SwitchExamples.tsx +182 -0
  267. package/src/examples/TabBarExamples.tsx +143 -0
  268. package/src/examples/TableExamples.tsx +280 -0
  269. package/src/examples/TextAreaExamples.tsx +173 -0
  270. package/src/examples/TextExamples.tsx +28 -32
  271. package/src/examples/ThemeExtensionExamples.tsx +10 -10
  272. package/src/examples/TooltipExamples.tsx +126 -0
  273. package/src/examples/VideoExamples.tsx +144 -0
  274. package/src/examples/ViewExamples.tsx +64 -56
  275. package/src/examples/index.ts +18 -3
  276. package/src/hooks/useMergeRefs.ts +16 -0
  277. package/src/hooks/useSmartPosition.native.ts +169 -0
  278. package/src/index.native.ts +80 -9
  279. package/src/index.ts +75 -1
  280. package/src/internal/BoundedModalContent.native.tsx +58 -0
  281. package/src/internal/PositionedPortal.tsx +254 -0
  282. package/src/internal/SafeAreaDebugOverlay.native.tsx +173 -0
  283. package/src/unistyles.d.ts +6 -0
  284. package/src/utils/buildSizeVariants.ts +16 -0
  285. package/src/utils/deepMerge.ts +43 -0
  286. package/src/utils/positionUtils.native.ts +280 -0
  287. package/src/utils/styleHelpers.ts +48 -0
  288. package/LLM-ACCESS-GUIDE.md +0 -143
  289. package/src/ActivityIndicator/README.md +0 -132
  290. package/src/Avatar/README.md +0 -139
  291. package/src/Badge/README.md +0 -170
  292. package/src/Button/Button.types.ts +0 -12
  293. package/src/Button/README.md +0 -262
  294. package/src/Card/README.md +0 -258
  295. package/src/Checkbox/README.md +0 -102
  296. package/src/Dialog/README.md +0 -210
  297. package/src/Divider/README.md +0 -108
  298. package/src/Icon/README.md +0 -81
  299. package/src/Input/README.md +0 -100
  300. package/src/SVGImage/README.md +0 -209
  301. package/src/Screen/README.md +0 -86
  302. package/src/Text/README.md +0 -94
  303. package/src/View/README.md +0 -107
  304. package/src/examples/AllExamples.tsx +0 -84
  305. package/src/examples/README.md +0 -136
  306. package/src/examples/ValidationExamples.tsx +0 -95
  307. package/src/examples/extendedTheme.ts +0 -329
  308. package/src/theme/breakpoints.ts +0 -8
  309. package/src/theme/colorResolver.ts +0 -218
  310. package/src/theme/colors.ts +0 -315
  311. package/src/theme/defaultThemes.ts +0 -326
  312. package/src/theme/index.ts +0 -188
  313. package/src/theme/themeBuilder.ts +0 -602
  314. package/src/theme/unistyles.d.ts +0 -6
  315. package/src/theme/variantHelpers.ts +0 -584
  316. package/src/theme/variants.ts +0 -56
@@ -1,602 +0,0 @@
1
- import { commonThemeProperties } from './defaultThemes';
2
- import type { ColorPaletteShade } from './variants';
3
-
4
- // =============================================================================
5
- // TYPES
6
- // =============================================================================
7
-
8
- export interface ThemeColorPalette {
9
- 50: string;
10
- 100: string;
11
- 200: string;
12
- 300: string;
13
- 400: string;
14
- 500: string;
15
- 600: string;
16
- 700: string;
17
- 800: string;
18
- 900: string;
19
- }
20
-
21
- export interface ResolvedIntent {
22
- main: string;
23
- on: string;
24
- container: string;
25
- onContainer: string;
26
- light: string;
27
- dark: string;
28
- border: string;
29
- }
30
-
31
- export interface ThemeColorSystem {
32
- text: {
33
- primary: string;
34
- secondary: string;
35
- disabled: string;
36
- inverse: string;
37
- muted: string;
38
- placeholder: string;
39
- };
40
- surface: {
41
- primary: string;
42
- secondary: string;
43
- tertiary: string;
44
- elevated: string;
45
- overlay: string;
46
- inverse: string;
47
- };
48
- border: {
49
- primary: string;
50
- secondary: string;
51
- strong: string;
52
- focus: string;
53
- disabled: string;
54
- };
55
- interactive: {
56
- hover: string;
57
- pressed: string;
58
- focus: string;
59
- disabled: string;
60
- };
61
- }
62
-
63
- export interface ThemeConfig {
64
- name?: string;
65
- mode?: 'light' | 'dark';
66
-
67
- // Required: Color palettes with actual hex values
68
- palettes: {
69
- red: ThemeColorPalette;
70
- orange: ThemeColorPalette;
71
- yellow: ThemeColorPalette;
72
- green: ThemeColorPalette;
73
- blue: ThemeColorPalette;
74
- purple: ThemeColorPalette;
75
- black: ThemeColorPalette;
76
- gray: ThemeColorPalette;
77
- white: ThemeColorPalette;
78
- };
79
-
80
- // Required: Resolved intent colors (actual hex values)
81
- intents: {
82
- primary: ResolvedIntent;
83
- success: ResolvedIntent;
84
- error: ResolvedIntent;
85
- warning: ResolvedIntent;
86
- neutral: ResolvedIntent;
87
- info: ResolvedIntent;
88
- };
89
-
90
- // Required: Resolved color system (actual hex values)
91
- colors: ThemeColorSystem;
92
-
93
- // Optional: Typography
94
- typography?: {
95
- fontFamily?: string;
96
- fontSize?: Record<string, number>;
97
- fontWeight?: Record<string, string>;
98
- lineHeight?: Record<string, number>;
99
- };
100
-
101
- // Optional: Spacing
102
- spacing?: Record<string, number>;
103
-
104
- // Optional: Border radius
105
- borderRadius?: Record<string, number>;
106
-
107
- // Optional: Shadows
108
- shadows?: Record<string, any>;
109
-
110
- // Optional: Transitions
111
- transitions?: Record<string, string>;
112
-
113
- // Optional: Custom properties
114
- custom?: Record<string, any>;
115
- }
116
-
117
- // =============================================================================
118
- // HELPER FUNCTIONS (exported for optional use)
119
- // =============================================================================
120
-
121
- /**
122
- * Generates a full color palette from a single color
123
- * This is a helper function that users can choose to use
124
- */
125
- export function generateColorPalette(baseColor: string): ThemeColorPalette {
126
- // Simple implementation - in a real app, you'd use a color manipulation library
127
- const colorMap: Record<string, ThemeColorPalette> = {
128
- // Red variants
129
- '#ef4444': { 50: '#fef2f2', 100: '#fee2e2', 200: '#fecaca', 300: '#fca5a5', 400: '#f87171', 500: '#ef4444', 600: '#dc2626', 700: '#b91c1c', 800: '#991b1b', 900: '#7f1d1d' },
130
- '#dc2626': { 50: '#fef2f2', 100: '#fee2e2', 200: '#fecaca', 300: '#fca5a5', 400: '#f87171', 500: '#ef4444', 600: '#dc2626', 700: '#b91c1c', 800: '#991b1b', 900: '#7f1d1d' },
131
-
132
- // Blue variants
133
- '#3b82f6': { 50: '#eff6ff', 100: '#dbeafe', 200: '#bfdbfe', 300: '#93c5fd', 400: '#60a5fa', 500: '#3b82f6', 600: '#2563eb', 700: '#1d4ed8', 800: '#1e40af', 900: '#1e3a8a' },
134
- '#2563eb': { 50: '#eff6ff', 100: '#dbeafe', 200: '#bfdbfe', 300: '#93c5fd', 400: '#60a5fa', 500: '#3b82f6', 600: '#2563eb', 700: '#1d4ed8', 800: '#1e40af', 900: '#1e3a8a' },
135
-
136
- // Green variants
137
- '#22c55e': { 50: '#f0fdf4', 100: '#dcfce7', 200: '#bbf7d0', 300: '#86efac', 400: '#4ade80', 500: '#22c55e', 600: '#16a34a', 700: '#15803d', 800: '#166534', 900: '#14532d' },
138
- '#16a34a': { 50: '#f0fdf4', 100: '#dcfce7', 200: '#bbf7d0', 300: '#86efac', 400: '#4ade80', 500: '#22c55e', 600: '#16a34a', 700: '#15803d', 800: '#166534', 900: '#14532d' },
139
-
140
- // Orange variants
141
- '#f97316': { 50: '#fff7ed', 100: '#ffedd5', 200: '#fed7aa', 300: '#fdba74', 400: '#fb923c', 500: '#f97316', 600: '#ea580c', 700: '#c2410c', 800: '#9a3412', 900: '#7c2d12' },
142
- '#ea580c': { 50: '#fff7ed', 100: '#ffedd5', 200: '#fed7aa', 300: '#fdba74', 400: '#fb923c', 500: '#f97316', 600: '#ea580c', 700: '#c2410c', 800: '#9a3412', 900: '#7c2d12' },
143
-
144
- // Purple variants
145
- '#a855f7': { 50: '#faf5ff', 100: '#f3e8ff', 200: '#e9d5ff', 300: '#d8b4fe', 400: '#c084fc', 500: '#a855f7', 600: '#9333ea', 700: '#7c3aed', 800: '#6b21a8', 900: '#581c87' },
146
- '#9333ea': { 50: '#faf5ff', 100: '#f3e8ff', 200: '#e9d5ff', 300: '#d8b4fe', 400: '#c084fc', 500: '#a855f7', 600: '#9333ea', 700: '#7c3aed', 800: '#6b21a8', 900: '#581c87' },
147
-
148
- // Yellow variants
149
- '#eab308': { 50: '#fefce8', 100: '#fef9c3', 200: '#fef08a', 300: '#fde047', 400: '#facc15', 500: '#eab308', 600: '#ca8a04', 700: '#a16207', 800: '#854d0e', 900: '#713f12' },
150
- '#ca8a04': { 50: '#fefce8', 100: '#fef9c3', 200: '#fef08a', 300: '#fde047', 400: '#facc15', 500: '#eab308', 600: '#ca8a04', 700: '#a16207', 800: '#854d0e', 900: '#713f12' },
151
-
152
- // Gray variants
153
- '#6b7280': { 50: '#f9fafb', 100: '#f3f4f6', 200: '#e5e7eb', 300: '#d1d5db', 400: '#9ca3af', 500: '#6b7280', 600: '#4b5563', 700: '#374151', 800: '#1f2937', 900: '#111827' },
154
- '#4b5563': { 50: '#f9fafb', 100: '#f3f4f6', 200: '#e5e7eb', 300: '#d1d5db', 400: '#9ca3af', 500: '#6b7280', 600: '#4b5563', 700: '#374151', 800: '#1f2937', 900: '#111827' },
155
-
156
- // Black variants
157
- '#000000': { 50: '#f8f9fa', 100: '#f1f3f4', 200: '#e8eaed', 300: '#dadce0', 400: '#bdc1c6', 500: '#9aa0a6', 600: '#80868b', 700: '#5f6368', 800: '#3c4043', 900: '#202124' },
158
- '#202124': { 50: '#f8f9fa', 100: '#f1f3f4', 200: '#e8eaed', 300: '#dadce0', 400: '#bdc1c6', 500: '#9aa0a6', 600: '#80868b', 700: '#5f6368', 800: '#3c4043', 900: '#202124' },
159
-
160
- // White variants
161
- '#ffffff': { 50: '#ffffff', 100: '#fefefe', 200: '#fdfdfd', 300: '#fcfcfc', 400: '#fafafa', 500: '#f8f8f8', 600: '#f5f5f5', 700: '#f0f0f0', 800: '#e8e8e8', 900: '#d4d4d4' },
162
- '#f8f8f8': { 50: '#ffffff', 100: '#fefefe', 200: '#fdfdfd', 300: '#fcfcfc', 400: '#fafafa', 500: '#f8f8f8', 600: '#f5f5f5', 700: '#f0f0f0', 800: '#e8e8e8', 900: '#d4d4d4' },
163
- };
164
-
165
- // Return exact match or fallback to a basic palette
166
- if (colorMap[baseColor]) {
167
- return colorMap[baseColor];
168
- }
169
-
170
- // Fallback: generate a basic palette
171
- return {
172
- 50: lighten(baseColor, 0.9),
173
- 100: lighten(baseColor, 0.8),
174
- 200: lighten(baseColor, 0.6),
175
- 300: lighten(baseColor, 0.4),
176
- 400: lighten(baseColor, 0.2),
177
- 500: baseColor,
178
- 600: darken(baseColor, 0.1),
179
- 700: darken(baseColor, 0.2),
180
- 800: darken(baseColor, 0.3),
181
- 900: darken(baseColor, 0.4),
182
- };
183
- }
184
-
185
- /**
186
- * Simple color lightening function
187
- */
188
- export function lighten(color: string, amount: number): string {
189
- const hex = color.replace('#', '');
190
- const r = parseInt(hex.substr(0, 2), 16);
191
- const g = parseInt(hex.substr(2, 2), 16);
192
- const b = parseInt(hex.substr(4, 2), 16);
193
-
194
- const newR = Math.min(255, Math.round(r + (255 - r) * amount));
195
- const newG = Math.min(255, Math.round(g + (255 - g) * amount));
196
- const newB = Math.min(255, Math.round(b + (255 - b) * amount));
197
-
198
- return `#${newR.toString(16).padStart(2, '0')}${newG.toString(16).padStart(2, '0')}${newB.toString(16).padStart(2, '0')}`;
199
- }
200
-
201
- /**
202
- * Simple color darkening function
203
- */
204
- export function darken(color: string, amount: number): string {
205
- const hex = color.replace('#', '');
206
- const r = parseInt(hex.substr(0, 2), 16);
207
- const g = parseInt(hex.substr(2, 2), 16);
208
- const b = parseInt(hex.substr(4, 2), 16);
209
-
210
- const newR = Math.max(0, Math.round(r * (1 - amount)));
211
- const newG = Math.max(0, Math.round(g * (1 - amount)));
212
- const newB = Math.max(0, Math.round(b * (1 - amount)));
213
-
214
- return `#${newR.toString(16).padStart(2, '0')}${newG.toString(16).padStart(2, '0')}${newB.toString(16).padStart(2, '0')}`;
215
- }
216
-
217
- /**
218
- * Helper function to create standard light theme resolved intents
219
- */
220
- export function createLightResolvedIntents(palettes: ThemeConfig['palettes']): ThemeConfig['intents'] {
221
- return {
222
- primary: {
223
- main: palettes.blue[500],
224
- on: '#ffffff',
225
- container: palettes.blue[50],
226
- onContainer: palettes.blue[900],
227
- light: palettes.blue[100],
228
- dark: palettes.blue[700],
229
- border: palettes.blue[200],
230
- },
231
- success: {
232
- main: palettes.green[500],
233
- on: '#ffffff',
234
- container: palettes.green[50],
235
- onContainer: palettes.green[800],
236
- light: palettes.green[100],
237
- dark: palettes.green[700],
238
- border: palettes.green[200],
239
- },
240
- error: {
241
- main: palettes.red[500],
242
- on: '#ffffff',
243
- container: palettes.red[50],
244
- onContainer: palettes.red[800],
245
- light: palettes.red[100],
246
- dark: palettes.red[700],
247
- border: palettes.red[200],
248
- },
249
- warning: {
250
- main: palettes.orange[500],
251
- on: '#ffffff',
252
- container: palettes.orange[50],
253
- onContainer: palettes.orange[800],
254
- light: palettes.orange[100],
255
- dark: palettes.orange[700],
256
- border: palettes.orange[200],
257
- },
258
- neutral: {
259
- main: palettes.gray[500],
260
- on: '#ffffff',
261
- container: palettes.gray[50],
262
- onContainer: palettes.gray[800],
263
- light: palettes.gray[100],
264
- dark: palettes.gray[700],
265
- border: palettes.gray[200],
266
- },
267
- info: {
268
- main: palettes.blue[500],
269
- on: '#ffffff',
270
- container: palettes.blue[50],
271
- onContainer: palettes.blue[800],
272
- light: palettes.blue[100],
273
- dark: palettes.blue[700],
274
- border: palettes.blue[200],
275
- },
276
- };
277
- }
278
-
279
- /**
280
- * Helper function to create standard dark theme resolved intents
281
- */
282
- export function createDarkResolvedIntents(palettes: ThemeConfig['palettes']): ThemeConfig['intents'] {
283
- return {
284
- primary: {
285
- main: palettes.blue[400],
286
- on: palettes.gray[50], // Dark text on primary background
287
- container: palettes.blue[200], // Darker container for dark mode
288
- onContainer: palettes.blue[800], // Light text on dark container
289
- light: palettes.blue[300],
290
- dark: palettes.blue[600],
291
- border: palettes.blue[400],
292
- },
293
- success: {
294
- main: palettes.green[400],
295
- on: palettes.gray[50], // Dark text on success background
296
- container: palettes.green[200], // Darker container for dark mode
297
- onContainer: palettes.green[800], // Light text on dark container
298
- light: palettes.green[300],
299
- dark: palettes.green[600],
300
- border: palettes.green[400],
301
- },
302
- error: {
303
- main: palettes.red[400],
304
- on: palettes.gray[50], // Dark text on error background
305
- container: palettes.red[200], // Darker container for dark mode
306
- onContainer: palettes.red[800], // Light text on dark container
307
- light: palettes.red[300],
308
- dark: palettes.red[600],
309
- border: palettes.red[400],
310
- },
311
- warning: {
312
- main: palettes.orange[400],
313
- on: palettes.gray[50], // Dark text on warning background
314
- container: palettes.orange[200], // Darker container for dark mode
315
- onContainer: palettes.orange[800], // Light text on dark container
316
- light: palettes.orange[300],
317
- dark: palettes.orange[600],
318
- border: palettes.orange[400],
319
- },
320
- neutral: {
321
- main: palettes.gray[400],
322
- on: palettes.gray[50], // Dark text on neutral background
323
- container: palettes.gray[200], // Medium dark container
324
- onContainer: palettes.gray[800], // Light text on dark container
325
- light: palettes.gray[300],
326
- dark: palettes.gray[600],
327
- border: palettes.gray[400],
328
- },
329
- info: {
330
- main: palettes.blue[400],
331
- on: palettes.gray[50], // Dark text on info background
332
- container: palettes.blue[200], // Darker container for dark mode
333
- onContainer: palettes.blue[800], // Light text on dark container
334
- light: palettes.blue[300],
335
- dark: palettes.blue[600],
336
- border: palettes.blue[400],
337
- },
338
- };
339
- }
340
-
341
- /**
342
- * Helper function to create standard light theme resolved colors
343
- */
344
- export function createLightResolvedColors(palettes: ThemeConfig['palettes']): ThemeColorSystem {
345
- return {
346
- text: {
347
- primary: palettes.gray[900],
348
- secondary: palettes.gray[600],
349
- disabled: palettes.gray[400],
350
- inverse: '#ffffff',
351
- muted: palettes.gray[500],
352
- placeholder: palettes.gray[400],
353
- },
354
- surface: {
355
- primary: '#ffffff',
356
- secondary: palettes.gray[50],
357
- tertiary: palettes.gray[100],
358
- elevated: '#ffffff',
359
- overlay: 'rgba(0, 0, 0, 0.5)',
360
- inverse: palettes.gray[900],
361
- },
362
- border: {
363
- primary: palettes.gray[200],
364
- secondary: palettes.gray[300],
365
- strong: palettes.gray[400],
366
- focus: palettes.blue[500], // Using primary color
367
- disabled: palettes.gray[200],
368
- },
369
- interactive: {
370
- hover: palettes.gray[50],
371
- pressed: palettes.gray[100],
372
- focus: palettes.blue[500], // Using primary color
373
- disabled: palettes.gray[100],
374
- },
375
- };
376
- }
377
-
378
- /**
379
- * Helper function to create standard dark theme resolved colors
380
- */
381
- export function createDarkResolvedColors(palettes: ThemeConfig['palettes']): ThemeColorSystem {
382
- return {
383
- text: {
384
- primary: palettes.gray[900], // Light text on dark background
385
- secondary: palettes.gray[700], // Muted light text
386
- disabled: palettes.gray[500], // Disabled gray
387
- inverse: palettes.gray[100], // Dark text (inverse of primary)
388
- muted: palettes.gray[600], // Muted text
389
- placeholder: palettes.gray[500], // Placeholder text
390
- },
391
- surface: {
392
- primary: palettes.gray[50], // Very dark primary surface
393
- secondary: palettes.gray[100], // Dark secondary surface
394
- tertiary: palettes.gray[200], // Medium dark tertiary surface
395
- elevated: palettes.gray[100], // Elevated surface (slightly lighter)
396
- overlay: 'rgba(0, 0, 0, 0.8)', // Dark overlay
397
- inverse: palettes.gray[900], // Light surface (inverse)
398
- },
399
- border: {
400
- primary: palettes.gray[300], // Primary border
401
- secondary: palettes.gray[200], // Secondary border
402
- strong: palettes.gray[400], // Strong border
403
- focus: palettes.blue[400], // Focus border (primary color)
404
- disabled: palettes.gray[300], // Disabled border
405
- },
406
- interactive: {
407
- hover: palettes.gray[100], // Hover state
408
- pressed: palettes.gray[200], // Pressed state
409
- focus: palettes.blue[400], // Focus state (primary color)
410
- disabled: palettes.gray[100], // Disabled state
411
- },
412
- };
413
- }
414
-
415
- // Default palettes and convenience functions moved to defaultThemes.ts
416
- // This keeps the theme builder focused on core functionality
417
-
418
- // =============================================================================
419
- // MAIN THEME CREATION FUNCTION
420
- // =============================================================================
421
-
422
- /**
423
- * Creates a theme with fully explicit resolved colors
424
- * Users must provide actual hex colors, no automatic resolution
425
- */
426
- export function createTheme(config: ThemeConfig): any {
427
- const {
428
- name = 'CustomTheme',
429
- mode = 'light',
430
- palettes,
431
- intents,
432
- colors,
433
- typography = {},
434
- spacing = {},
435
- borderRadius = {},
436
- shadows = {},
437
- transitions = {},
438
- custom = {},
439
- } = config;
440
-
441
- // Generate final theme - no automatic color resolution, just organization
442
- const theme = {
443
- name,
444
- mode,
445
-
446
- // Merge with common properties
447
- ...commonThemeProperties,
448
-
449
- // Override with custom properties
450
- ...custom,
451
-
452
- // Typography
453
- typography: {
454
- ...commonThemeProperties.typography,
455
- ...typography,
456
- },
457
-
458
- // Spacing
459
- spacing: {
460
- ...commonThemeProperties.spacing,
461
- ...spacing,
462
- },
463
-
464
- // Border radius
465
- borderRadius: {
466
- ...commonThemeProperties.borderRadius,
467
- ...borderRadius,
468
- },
469
-
470
- // Shadows
471
- shadows: {
472
- ...commonThemeProperties.shadows,
473
- ...shadows,
474
- },
475
-
476
- // Transitions
477
- transitions: {
478
- ...commonThemeProperties.transitions,
479
- ...transitions,
480
- },
481
-
482
- // Color palettes - direct access to all color palettes
483
- palettes,
484
-
485
- // Intent system - for actionable components (all resolved)
486
- intents,
487
-
488
- // Color system - for display components (all resolved)
489
- colors: {
490
- // Provided color system
491
- ...colors,
492
-
493
- // Status colors (references to intents)
494
- primary: intents.primary.main,
495
- success: intents.success.main,
496
- error: intents.error.main,
497
- warning: intents.warning.main,
498
- neutral: intents.neutral.main,
499
- info: intents.info.main,
500
-
501
- // Legacy colors for backward compatibility
502
- background: colors.surface.primary,
503
- textSecondary: colors.text.secondary,
504
- secondary: intents.neutral.main,
505
- },
506
- };
507
-
508
- return theme;
509
- }
510
-
511
- // =============================================================================
512
- // UTILITY FUNCTIONS
513
- // =============================================================================
514
-
515
- /**
516
- * Extends an existing theme with new properties
517
- */
518
- export function extendTheme(baseTheme: any, extensions: {
519
- palettes?: Partial<ThemeConfig['palettes']>;
520
- intents?: Partial<ThemeConfig['intents']>;
521
- colors?: Partial<ThemeColorSystem>;
522
- typography?: Partial<ThemeConfig['typography']>;
523
- spacing?: Record<string, number>;
524
- borderRadius?: Record<string, number>;
525
- shadows?: Record<string, any>;
526
- transitions?: Record<string, string>;
527
- custom?: Record<string, any>;
528
- }): any {
529
- return {
530
- ...baseTheme,
531
-
532
- // Merge palettes
533
- palettes: {
534
- ...baseTheme.palettes,
535
- ...extensions.palettes,
536
- },
537
-
538
- // Merge intents
539
- intents: {
540
- ...baseTheme.intents,
541
- ...extensions.intents,
542
- },
543
-
544
- // Merge colors
545
- colors: {
546
- ...baseTheme.colors,
547
- text: {
548
- ...baseTheme.colors.text,
549
- ...extensions.colors?.text,
550
- },
551
- surface: {
552
- ...baseTheme.colors.surface,
553
- ...extensions.colors?.surface,
554
- },
555
- border: {
556
- ...baseTheme.colors.border,
557
- ...extensions.colors?.border,
558
- },
559
- interactive: {
560
- ...baseTheme.colors.interactive,
561
- ...extensions.colors?.interactive,
562
- },
563
- },
564
-
565
- // Merge other properties
566
- typography: {
567
- ...baseTheme.typography,
568
- ...extensions.typography,
569
- },
570
-
571
- spacing: {
572
- ...baseTheme.spacing,
573
- ...extensions.spacing,
574
- },
575
-
576
- borderRadius: {
577
- ...baseTheme.borderRadius,
578
- ...extensions.borderRadius,
579
- },
580
-
581
- shadows: {
582
- ...baseTheme.shadows,
583
- ...extensions.shadows,
584
- },
585
-
586
- transitions: {
587
- ...baseTheme.transitions,
588
- ...extensions.transitions,
589
- },
590
-
591
- custom: {
592
- ...baseTheme.custom,
593
- ...extensions.custom,
594
- },
595
- };
596
- }
597
-
598
- // createThemeVariant function removed - users should create themes explicitly
599
- // using createTheme with the appropriate helper functions like createDarkPalettes(),
600
- // createDarkIntentMappings(), and createDarkColorMappings() (found in defaultThemes.ts)
601
-
602
- // All exports are declared inline above
@@ -1,6 +0,0 @@
1
- import { AppThemes, AppBreakpoints } from './index';
2
-
3
- declare module 'react-native-unistyles' {
4
- export interface UnistylesThemes extends AppThemes {}
5
- export interface UnistylesBreakpoints extends AppBreakpoints {}
6
- }