@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,218 +0,0 @@
1
- import {
2
- colorPalettes,
3
- intentMappings,
4
- colorMappings,
5
- darkThemeOverrides,
6
- type ColorPalette,
7
- type ColorShade,
8
- type IntentName,
9
- type ColorName
10
- } from './colors';
11
-
12
- // Type for color references
13
- export type ColorReference =
14
- | string // Direct hex color like '#ffffff'
15
- | `${ColorPalette}.${ColorShade}` // Palette reference like 'blue.500'
16
- | IntentName // Intent reference like 'primary'
17
- | `intent.${IntentName}.${keyof typeof intentMappings.primary}` // Intent property like 'intent.primary.main'
18
- | `color.${ColorName}` // Color mapping like 'color.text.primary'
19
- | keyof typeof colorMappings; // Direct color mapping like 'primary'
20
-
21
- // Theme context for color resolution
22
- export interface ThemeContext {
23
- isDark: boolean;
24
- colorPalettes: typeof colorPalettes;
25
- intentMappings: any; // Use any to allow theme overrides
26
- colorMappings: any; // Use any to allow theme overrides
27
- }
28
-
29
- // Create theme context
30
- export function createThemeContext(isDark: boolean = false): ThemeContext {
31
- const baseIntentMappings = isDark
32
- ? { ...intentMappings, ...darkThemeOverrides.intentMappings }
33
- : intentMappings;
34
-
35
- const baseColorMappings = isDark
36
- ? { ...colorMappings, ...darkThemeOverrides.colorMappings }
37
- : colorMappings;
38
-
39
- return {
40
- isDark,
41
- colorPalettes,
42
- intentMappings: baseIntentMappings,
43
- colorMappings: baseColorMappings,
44
- };
45
- }
46
-
47
- // Resolve a color reference to a hex color
48
- export function resolveColor(
49
- colorRef: ColorReference,
50
- context: ThemeContext
51
- ): string {
52
- // If it's already a hex color, return as is
53
- if (typeof colorRef === 'string' && colorRef.startsWith('#')) {
54
- return colorRef;
55
- }
56
-
57
- // Handle palette references like 'blue.500'
58
- if (typeof colorRef === 'string' && colorRef.includes('.')) {
59
- const [paletteOrCategory, property] = colorRef.split('.');
60
-
61
- // Handle palette references
62
- if (paletteOrCategory in context.colorPalettes) {
63
- const palette = context.colorPalettes[paletteOrCategory as ColorPalette];
64
- if (property in palette) {
65
- return palette[property as unknown as ColorShade];
66
- }
67
- }
68
-
69
- // Handle color mappings like 'text.primary'
70
- if (paletteOrCategory in context.colorMappings) {
71
- const colorCategory = context.colorMappings[paletteOrCategory as keyof typeof context.colorMappings];
72
- if (typeof colorCategory === 'object' && property in colorCategory) {
73
- const nestedRef = colorCategory[property as keyof typeof colorCategory];
74
- return resolveColor(nestedRef as ColorReference, context);
75
- }
76
- }
77
- }
78
-
79
- // Handle intent references like 'intent.primary.main'
80
- if (typeof colorRef === 'string' && colorRef.startsWith('intent.')) {
81
- const parts = colorRef.split('.');
82
- if (parts.length === 3) {
83
- const [, intentName, property] = parts;
84
- return resolveIntentColor(
85
- intentName as IntentName,
86
- property as keyof typeof intentMappings.primary,
87
- context
88
- );
89
- }
90
- }
91
-
92
- // Handle color mappings like 'color.text.primary'
93
- if (typeof colorRef === 'string' && colorRef.startsWith('color.')) {
94
- const path = colorRef.substring(6); // Remove 'color.' prefix
95
- const [category, property] = path.split('.');
96
-
97
- if (category in context.colorMappings) {
98
- const colorCategory = context.colorMappings[category as keyof typeof context.colorMappings];
99
- if (typeof colorCategory === 'object' && property in colorCategory) {
100
- const nestedRef = colorCategory[property as keyof typeof colorCategory];
101
- return resolveColor(nestedRef as ColorReference, context);
102
- }
103
- }
104
- }
105
-
106
- // Handle direct intent references like 'primary'
107
- if (typeof colorRef === 'string' && colorRef in context.intentMappings) {
108
- return resolveIntentColor(colorRef as IntentName, 'main', context);
109
- }
110
-
111
- // Handle direct color mappings like 'primary' (when it's in colorMappings)
112
- if (typeof colorRef === 'string' && colorRef in context.colorMappings) {
113
- const mapping = context.colorMappings[colorRef as keyof typeof context.colorMappings];
114
- return resolveColor(mapping as ColorReference, context);
115
- }
116
-
117
- // If we can't resolve it, return it as is (might be a CSS variable or other valid color)
118
- console.warn(`Could not resolve color reference: ${colorRef}`);
119
- return colorRef as string;
120
- }
121
-
122
- // Resolve a specific intent color property
123
- export function resolveIntentColor(
124
- intentName: IntentName,
125
- property: keyof typeof intentMappings.primary,
126
- context: ThemeContext
127
- ): string {
128
- const intent = context.intentMappings[intentName];
129
- if (!intent) {
130
- console.warn(`Intent ${intentName} not found`);
131
- return '#000000'; // Fallback color
132
- }
133
-
134
- const value = intent[property];
135
-
136
- // Handle palette references
137
- if (typeof value === 'number') {
138
- const palette = context.colorPalettes[intent.palette];
139
- const shade = value as ColorShade;
140
- if (shade in palette) {
141
- return palette[shade];
142
- }
143
- }
144
-
145
- // Handle string references (like 'gray.900')
146
- if (typeof value === 'string') {
147
- return resolveColor(value, context);
148
- }
149
-
150
- // If we can't resolve it, return it as is
151
- return value as string;
152
- }
153
-
154
- // Helper function to get all colors for an intent
155
- export function getIntentColors(intentName: IntentName, context: ThemeContext) {
156
- const intent = context.intentMappings[intentName];
157
- if (!intent) {
158
- return {};
159
- }
160
-
161
- const colors: Record<string, string> = {};
162
-
163
- // Resolve all properties of the intent
164
- for (const [key, value] of Object.entries(intent)) {
165
- if (key === 'palette') continue; // Skip the palette reference
166
-
167
- colors[key] = resolveIntentColor(
168
- intentName,
169
- key as keyof typeof intentMappings.primary,
170
- context
171
- );
172
- }
173
-
174
- return colors;
175
- }
176
-
177
- // Helper function to get all colors for a palette
178
- export function getPaletteColors(paletteName: ColorPalette, context: ThemeContext) {
179
- const palette = context.colorPalettes[paletteName];
180
- if (!palette) {
181
- return {};
182
- }
183
-
184
- return { ...palette };
185
- }
186
-
187
- // Helper function to validate color references
188
- export function isValidColorReference(colorRef: string, context: ThemeContext): boolean {
189
- try {
190
- const resolved = resolveColor(colorRef as ColorReference, context);
191
- return resolved !== colorRef || colorRef.startsWith('#');
192
- } catch {
193
- return false;
194
- }
195
- }
196
-
197
- // Helper function to get color with opacity
198
- export function getColorWithOpacity(colorRef: ColorReference, opacity: number, context: ThemeContext): string {
199
- const resolvedColor = resolveColor(colorRef, context);
200
-
201
- // Convert hex to rgba
202
- if (resolvedColor.startsWith('#')) {
203
- const hex = resolvedColor.slice(1);
204
- const r = parseInt(hex.slice(0, 2), 16);
205
- const g = parseInt(hex.slice(2, 4), 16);
206
- const b = parseInt(hex.slice(4, 6), 16);
207
-
208
- return `rgba(${r}, ${g}, ${b}, ${opacity})`;
209
- }
210
-
211
- // For non-hex colors, return as is with opacity warning
212
- console.warn(`Cannot add opacity to non-hex color: ${resolvedColor}`);
213
- return resolvedColor;
214
- }
215
-
216
- // Export commonly used theme contexts
217
- export const lightThemeContext = createThemeContext(false);
218
- export const darkThemeContext = createThemeContext(true);
@@ -1,315 +0,0 @@
1
- // Base color palettes - these are the source of truth for all colors
2
- export const colorPalettes = {
3
- blue: {
4
- 50: '#eff6ff',
5
- 100: '#dbeafe',
6
- 200: '#bfdbfe',
7
- 300: '#93c5fd',
8
- 400: '#60a5fa',
9
- 500: '#3b82f6',
10
- 600: '#2563eb',
11
- 700: '#1d4ed8',
12
- 800: '#1e40af',
13
- 900: '#1e3a8a',
14
- },
15
-
16
- green: {
17
- 50: '#f0fdf4',
18
- 100: '#dcfce7',
19
- 200: '#bbf7d0',
20
- 300: '#86efac',
21
- 400: '#4ade80',
22
- 500: '#22c55e',
23
- 600: '#16a34a',
24
- 700: '#15803d',
25
- 800: '#166534',
26
- 900: '#14532d',
27
- },
28
-
29
- red: {
30
- 50: '#fef2f2',
31
- 100: '#fee2e2',
32
- 200: '#fecaca',
33
- 300: '#fca5a5',
34
- 400: '#f87171',
35
- 500: '#ef4444',
36
- 600: '#dc2626',
37
- 700: '#b91c1c',
38
- 800: '#991b1b',
39
- 900: '#7f1d1d',
40
- },
41
-
42
- amber: {
43
- 50: '#fffbeb',
44
- 100: '#fef3c7',
45
- 200: '#fde68a',
46
- 300: '#fcd34d',
47
- 400: '#fbbf24',
48
- 500: '#f59e0b',
49
- 600: '#d97706',
50
- 700: '#b45309',
51
- 800: '#92400e',
52
- 900: '#78350f',
53
- },
54
-
55
- gray: {
56
- 50: '#f9fafb',
57
- 100: '#f3f4f6',
58
- 200: '#e5e7eb',
59
- 300: '#d1d5db',
60
- 400: '#9ca3af',
61
- 500: '#6b7280',
62
- 600: '#4b5563',
63
- 700: '#374151',
64
- 800: '#1f2937',
65
- 900: '#111827',
66
- },
67
-
68
- purple: {
69
- 50: '#f8fafc',
70
- 100: '#f1f5f9',
71
- 200: '#e2e8f0',
72
- 300: '#cbd5e1',
73
- 400: '#94a3b8',
74
- 500: '#64748b',
75
- 600: '#475569',
76
- 700: '#334155',
77
- 800: '#1e293b',
78
- 900: '#0f172a',
79
- },
80
-
81
- pink: {
82
- 50: '#fdf2f8',
83
- 100: '#fce7f3',
84
- 200: '#fbcfe8',
85
- 300: '#f9a8d4',
86
- 400: '#f472b6',
87
- 500: '#ec4899',
88
- 600: '#db2777',
89
- 700: '#be185d',
90
- 800: '#9d174d',
91
- 900: '#831843',
92
- },
93
-
94
- cyan: {
95
- 50: '#ecfeff',
96
- 100: '#cffafe',
97
- 200: '#a5f3fc',
98
- 300: '#67e8f9',
99
- 400: '#22d3ee',
100
- 500: '#06b6d4',
101
- 600: '#0891b2',
102
- 700: '#0e7490',
103
- 800: '#155e75',
104
- 900: '#164e63',
105
- },
106
- } as const;
107
-
108
- // Intent system - maps semantic meanings to color palettes
109
- export const intentMappings = {
110
- primary: {
111
- palette: 'blue' as const,
112
- main: 500 as const,
113
- on: '#ffffff',
114
- container: 100 as const,
115
- onContainer: 800 as const,
116
- light: 200 as const,
117
- dark: 700 as const,
118
- border: 300 as const,
119
- },
120
-
121
- success: {
122
- palette: 'green' as const,
123
- main: 500 as const,
124
- on: '#ffffff',
125
- container: 100 as const,
126
- onContainer: 800 as const,
127
- light: 200 as const,
128
- dark: 700 as const,
129
- border: 300 as const,
130
- },
131
-
132
- error: {
133
- palette: 'red' as const,
134
- main: 500 as const,
135
- on: '#ffffff',
136
- container: 100 as const,
137
- onContainer: 800 as const,
138
- light: 200 as const,
139
- dark: 700 as const,
140
- border: 300 as const,
141
- },
142
-
143
- warning: {
144
- palette: 'amber' as const,
145
- main: 500 as const,
146
- on: '#ffffff',
147
- container: 100 as const,
148
- onContainer: 800 as const,
149
- light: 200 as const,
150
- dark: 700 as const,
151
- border: 300 as const,
152
- },
153
-
154
- neutral: {
155
- palette: 'gray' as const,
156
- main: 500 as const,
157
- on: '#ffffff',
158
- container: 100 as const,
159
- onContainer: 800 as const,
160
- light: 200 as const,
161
- dark: 700 as const,
162
- border: 300 as const,
163
- },
164
-
165
- info: {
166
- palette: 'cyan' as const,
167
- main: 500 as const,
168
- on: '#ffffff',
169
- container: 100 as const,
170
- onContainer: 800 as const,
171
- light: 200 as const,
172
- dark: 700 as const,
173
- border: 300 as const,
174
- },
175
- } as const;
176
-
177
- // Color system for display components (non-actionable)
178
- export const colorMappings = {
179
- // Text colors
180
- text: {
181
- primary: 'gray.900' as const,
182
- secondary: 'gray.600' as const,
183
- disabled: 'gray.400' as const,
184
- inverse: '#ffffff',
185
- },
186
-
187
- // Surface colors
188
- surface: {
189
- primary: '#ffffff',
190
- secondary: 'gray.50' as const,
191
- tertiary: 'gray.100' as const,
192
- inverse: 'gray.900' as const,
193
- },
194
-
195
- // Border colors
196
- border: {
197
- primary: 'gray.200' as const,
198
- secondary: 'gray.300' as const,
199
- focus: 'primary' as const, // References intent.primary.main
200
- },
201
-
202
- // Direct color references (for backward compatibility and special cases)
203
- primary: 'primary' as const, // References intent.primary.main
204
- success: 'success' as const, // References intent.success.main
205
- error: 'error' as const, // References intent.error.main
206
- warning: 'warning' as const, // References intent.warning.main
207
- neutral: 'neutral' as const, // References intent.neutral.main
208
- info: 'info' as const, // References intent.info.main
209
- } as const;
210
-
211
- // Dark theme overrides
212
- export const darkThemeOverrides = {
213
- colorMappings: {
214
- text: {
215
- primary: 'gray.50' as const,
216
- secondary: 'gray.300' as const,
217
- disabled: 'gray.500' as const,
218
- inverse: 'gray.900' as const,
219
- },
220
-
221
- surface: {
222
- primary: 'gray.900' as const,
223
- secondary: 'gray.800' as const,
224
- tertiary: 'gray.700' as const,
225
- inverse: '#ffffff',
226
- },
227
-
228
- border: {
229
- primary: 'gray.700' as const,
230
- secondary: 'gray.600' as const,
231
- focus: 'primary' as const,
232
- },
233
- },
234
-
235
- // Dark theme intent adjustments
236
- intentMappings: {
237
- primary: {
238
- palette: 'blue' as const,
239
- main: 400 as const, // Lighter blue for dark theme
240
- on: 'gray.900' as const, // Dark text on light blue
241
- container: 900 as const, // Very dark blue container
242
- onContainer: 100 as const, // Light text on dark container
243
- light: 800 as const,
244
- dark: 300 as const,
245
- border: 400 as const,
246
- },
247
-
248
- success: {
249
- palette: 'green' as const,
250
- main: 400 as const,
251
- on: 'gray.900' as const,
252
- container: 900 as const,
253
- onContainer: 100 as const,
254
- light: 800 as const,
255
- dark: 300 as const,
256
- border: 400 as const,
257
- },
258
-
259
- error: {
260
- palette: 'red' as const,
261
- main: 400 as const,
262
- on: 'gray.900' as const,
263
- container: 900 as const,
264
- onContainer: 100 as const,
265
- light: 800 as const,
266
- dark: 300 as const,
267
- border: 400 as const,
268
- },
269
-
270
- warning: {
271
- palette: 'amber' as const,
272
- main: 400 as const,
273
- on: 'gray.900' as const,
274
- container: 900 as const,
275
- onContainer: 100 as const,
276
- light: 800 as const,
277
- dark: 300 as const,
278
- border: 400 as const,
279
- },
280
-
281
- neutral: {
282
- palette: 'gray' as const,
283
- main: 400 as const,
284
- on: 'gray.900' as const,
285
- container: 800 as const,
286
- onContainer: 100 as const,
287
- light: 700 as const,
288
- dark: 300 as const,
289
- border: 400 as const,
290
- },
291
-
292
- info: {
293
- palette: 'cyan' as const,
294
- main: 400 as const,
295
- on: 'gray.900' as const,
296
- container: 900 as const,
297
- onContainer: 100 as const,
298
- light: 800 as const,
299
- dark: 300 as const,
300
- border: 400 as const,
301
- },
302
- },
303
- } as const;
304
-
305
- // Import variant types
306
- import type { IntentVariant, ColorVariant, ColorPaletteShade } from './variants';
307
-
308
- // Export types for TypeScript
309
- export type ColorPalette = keyof typeof colorPalettes;
310
- export type ColorShade = keyof typeof colorPalettes.blue;
311
- export type IntentName = keyof typeof intentMappings;
312
- export type ColorName = keyof typeof colorMappings;
313
-
314
- // Ensure our variant types match the actual data structures
315
- export type { IntentVariant, ColorVariant, ColorPaletteShade };