@idealyst/components 1.0.83 → 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 +20 -2
  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 +140 -63
  170. package/src/Select/Select.styles.tsx +312 -302
  171. package/src/Select/Select.web.tsx +156 -316
  172. package/src/Select/index.ts +5 -2
  173. package/src/Select/index.web.ts +5 -2
  174. package/src/Select/types.ts +13 -7
  175. package/src/Skeleton/Skeleton.native.tsx +139 -0
  176. package/src/Skeleton/Skeleton.styles.tsx +59 -0
  177. package/src/Skeleton/Skeleton.web.tsx +112 -0
  178. package/src/Skeleton/index.native.ts +4 -0
  179. package/src/Skeleton/index.ts +5 -0
  180. package/src/Skeleton/index.web.ts +5 -0
  181. package/src/Skeleton/types.ts +75 -0
  182. package/src/Slider/Slider.native.tsx +248 -0
  183. package/src/Slider/Slider.styles.tsx +241 -0
  184. package/src/Slider/Slider.web.tsx +226 -0
  185. package/src/Slider/index.native.ts +3 -0
  186. package/src/Slider/index.ts +5 -0
  187. package/src/Slider/index.web.ts +5 -0
  188. package/src/Slider/types.ts +31 -0
  189. package/src/Switch/Switch.native.tsx +131 -0
  190. package/src/Switch/Switch.styles.tsx +169 -0
  191. package/src/Switch/Switch.web.tsx +121 -0
  192. package/src/Switch/index.native.ts +3 -0
  193. package/src/Switch/index.ts +5 -0
  194. package/src/Switch/index.web.ts +5 -0
  195. package/src/Switch/types.ts +21 -0
  196. package/src/TabBar/TabBar.native.tsx +142 -0
  197. package/src/TabBar/TabBar.styles.tsx +399 -0
  198. package/src/TabBar/TabBar.web.tsx +205 -0
  199. package/src/TabBar/index.native.tsx +3 -0
  200. package/src/TabBar/index.ts +3 -0
  201. package/src/TabBar/index.web.tsx +3 -0
  202. package/src/TabBar/types.ts +26 -0
  203. package/src/Table/Table.native.tsx +122 -0
  204. package/src/Table/Table.styles.tsx +283 -0
  205. package/src/Table/Table.web.tsx +112 -0
  206. package/src/Table/index.native.tsx +3 -0
  207. package/src/Table/index.ts +3 -0
  208. package/src/Table/index.web.tsx +3 -0
  209. package/src/Table/types.ts +28 -0
  210. package/src/Text/Text.native.tsx +12 -11
  211. package/src/Text/Text.styles.tsx +76 -64
  212. package/src/Text/Text.web.tsx +14 -9
  213. package/src/Text/index.ts +5 -5
  214. package/src/Text/index.web.ts +5 -3
  215. package/src/Text/types.ts +20 -13
  216. package/src/TextArea/TextArea.native.tsx +134 -0
  217. package/src/TextArea/TextArea.styles.tsx +175 -0
  218. package/src/TextArea/TextArea.web.tsx +156 -0
  219. package/src/TextArea/index.native.ts +3 -0
  220. package/src/TextArea/index.ts +3 -0
  221. package/src/TextArea/index.web.ts +3 -0
  222. package/src/TextArea/types.ts +30 -0
  223. package/src/Tooltip/Tooltip.native.tsx +165 -0
  224. package/src/Tooltip/Tooltip.styles.tsx +73 -0
  225. package/src/Tooltip/Tooltip.web.tsx +87 -0
  226. package/src/Tooltip/index.native.ts +3 -0
  227. package/src/Tooltip/index.ts +3 -0
  228. package/src/Tooltip/types.ts +18 -0
  229. package/src/Video/Video.native.tsx +105 -0
  230. package/src/Video/Video.styles.tsx +39 -0
  231. package/src/Video/Video.web.tsx +115 -0
  232. package/src/Video/index.native.ts +5 -0
  233. package/src/Video/index.ts +5 -0
  234. package/src/Video/types.ts +29 -0
  235. package/src/View/View.native.tsx +9 -14
  236. package/src/View/View.styles.tsx +101 -93
  237. package/src/View/View.web.tsx +16 -17
  238. package/src/View/index.ts +5 -5
  239. package/src/View/index.web.ts +5 -3
  240. package/src/View/types.ts +29 -21
  241. package/src/examples/AccordionExamples.tsx +126 -0
  242. package/src/examples/AlertExamples.tsx +280 -0
  243. package/src/examples/AvatarExamples.tsx +23 -23
  244. package/src/examples/BadgeExamples.tsx +109 -41
  245. package/src/examples/BreadcrumbExamples.tsx +312 -0
  246. package/src/examples/ButtonExamples.tsx +160 -33
  247. package/src/examples/CardExamples.tsx +40 -40
  248. package/src/examples/CheckboxExamples.tsx +12 -12
  249. package/src/examples/ChipExamples.tsx +197 -0
  250. package/src/examples/DialogExamples.tsx +22 -22
  251. package/src/examples/DividerExamples.tsx +49 -49
  252. package/src/examples/IconExamples.tsx +270 -54
  253. package/src/examples/ImageExamples.tsx +174 -0
  254. package/src/examples/InputExamples.tsx +75 -17
  255. package/src/examples/ListExamples.tsx +288 -0
  256. package/src/examples/MenuExamples.tsx +144 -0
  257. package/src/examples/PopoverExamples.tsx +69 -73
  258. package/src/examples/ProgressExamples.tsx +137 -0
  259. package/src/examples/RadioButtonExamples.tsx +161 -0
  260. package/src/examples/SVGImageExamples.tsx +19 -17
  261. package/src/examples/ScreenExamples.tsx +31 -31
  262. package/src/examples/SelectExamples.tsx +67 -67
  263. package/src/examples/SkeletonExamples.tsx +206 -0
  264. package/src/examples/SliderExamples.tsx +200 -0
  265. package/src/examples/SwitchExamples.tsx +182 -0
  266. package/src/examples/TabBarExamples.tsx +143 -0
  267. package/src/examples/TableExamples.tsx +280 -0
  268. package/src/examples/TextAreaExamples.tsx +173 -0
  269. package/src/examples/TextExamples.tsx +28 -32
  270. package/src/examples/ThemeExtensionExamples.tsx +10 -10
  271. package/src/examples/TooltipExamples.tsx +126 -0
  272. package/src/examples/VideoExamples.tsx +144 -0
  273. package/src/examples/ViewExamples.tsx +64 -56
  274. package/src/examples/index.ts +17 -3
  275. package/src/hooks/useMergeRefs.ts +16 -0
  276. package/src/hooks/useSmartPosition.native.ts +169 -0
  277. package/src/index.native.ts +80 -9
  278. package/src/index.ts +71 -1
  279. package/src/internal/BoundedModalContent.native.tsx +58 -0
  280. package/src/internal/PositionedPortal.tsx +254 -0
  281. package/src/internal/SafeAreaDebugOverlay.native.tsx +173 -0
  282. package/src/unistyles.d.ts +6 -0
  283. package/src/utils/buildSizeVariants.ts +16 -0
  284. package/src/utils/deepMerge.ts +43 -0
  285. package/src/utils/positionUtils.native.ts +280 -0
  286. package/src/utils/styleHelpers.ts +48 -0
  287. package/LLM-ACCESS-GUIDE.md +0 -143
  288. package/src/ActivityIndicator/README.md +0 -132
  289. package/src/Avatar/README.md +0 -139
  290. package/src/Badge/README.md +0 -170
  291. package/src/Button/Button.types.ts +0 -12
  292. package/src/Button/README.md +0 -262
  293. package/src/Card/README.md +0 -258
  294. package/src/Checkbox/README.md +0 -102
  295. package/src/Dialog/README.md +0 -210
  296. package/src/Divider/README.md +0 -108
  297. package/src/Icon/README.md +0 -81
  298. package/src/Input/README.md +0 -100
  299. package/src/SVGImage/README.md +0 -209
  300. package/src/Screen/README.md +0 -86
  301. package/src/Select/README.md +0 -166
  302. package/src/Text/README.md +0 -94
  303. package/src/View/README.md +0 -107
  304. package/src/examples/AllExamples.tsx +0 -88
  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,329 +0,0 @@
1
- import {
2
- createTheme,
3
- type ThemeConfig,
4
- createStandardPalettes,
5
- createDarkPalettes,
6
- createLightIntentMappings,
7
- createDarkIntentMappings,
8
- createLightColorMappings,
9
- createDarkColorMappings
10
- } from '@idealyst/theme';
11
-
12
- // Extended color palettes - includes all base colors plus additional ones
13
- export const extendedColorPalettes = {
14
- // Include all base colors
15
- ...createStandardPalettes(),
16
-
17
- // Add extended colors
18
- orange: {
19
- 50: '#fff7ed',
20
- 100: '#ffedd5',
21
- 200: '#fed7aa',
22
- 300: '#fdba74',
23
- 400: '#fb923c',
24
- 500: '#f97316',
25
- 600: '#ea580c',
26
- 700: '#c2410c',
27
- 800: '#9a3412',
28
- 900: '#7c2d12',
29
- },
30
-
31
- teal: {
32
- 50: '#f0fdfa',
33
- 100: '#ccfbf1',
34
- 200: '#99f6e4',
35
- 300: '#5eead4',
36
- 400: '#2dd4bf',
37
- 500: '#14b8a6',
38
- 600: '#0d9488',
39
- 700: '#0f766e',
40
- 800: '#115e59',
41
- 900: '#134e4a',
42
- },
43
-
44
- indigo: {
45
- 50: '#eef2ff',
46
- 100: '#e0e7ff',
47
- 200: '#c7d2fe',
48
- 300: '#a5b4fc',
49
- 400: '#818cf8',
50
- 500: '#6366f1',
51
- 600: '#4f46e5',
52
- 700: '#4338ca',
53
- 800: '#3730a3',
54
- 900: '#312e81',
55
- },
56
-
57
- violet: {
58
- 50: '#faf5ff',
59
- 100: '#f3e8ff',
60
- 200: '#e9d5ff',
61
- 300: '#d8b4fe',
62
- 400: '#c084fc',
63
- 500: '#a855f7',
64
- 600: '#9333ea',
65
- 700: '#7c3aed',
66
- 800: '#6b21a8',
67
- 900: '#581c87',
68
- },
69
-
70
- emerald: {
71
- 50: '#ecfdf5',
72
- 100: '#d1fae5',
73
- 200: '#a7f3d0',
74
- 300: '#6ee7b7',
75
- 400: '#34d399',
76
- 500: '#10b981',
77
- 600: '#059669',
78
- 700: '#047857',
79
- 800: '#065f46',
80
- 900: '#064e3b',
81
- },
82
- } as const;
83
-
84
- // Extended color palettes for dark mode
85
- export const extendedDarkColorPalettes = {
86
- // Include all base dark colors
87
- ...createDarkPalettes(),
88
-
89
- // Add the same extended colors (they work well in both light and dark)
90
- orange: extendedColorPalettes.orange,
91
- teal: extendedColorPalettes.teal,
92
- indigo: extendedColorPalettes.indigo,
93
- violet: extendedColorPalettes.violet,
94
- emerald: extendedColorPalettes.emerald,
95
- } as const;
96
-
97
- // Helper function to create extended light intents
98
- function createExtendedLightIntents(palettes: typeof extendedColorPalettes) {
99
- return {
100
- // Include all base intents
101
- ...createLightIntentMappings(),
102
-
103
- // Add extended intents with resolved colors
104
- accent: {
105
- main: palettes.orange[500],
106
- on: '#ffffff',
107
- container: palettes.orange[100],
108
- onContainer: palettes.orange[800],
109
- light: palettes.orange[200],
110
- dark: palettes.orange[700],
111
- border: palettes.orange[300],
112
- },
113
-
114
- feature: {
115
- main: palettes.teal[500],
116
- on: '#ffffff',
117
- container: palettes.teal[100],
118
- onContainer: palettes.teal[800],
119
- light: palettes.teal[200],
120
- dark: palettes.teal[700],
121
- border: palettes.teal[300],
122
- },
123
-
124
- highlight: {
125
- main: palettes.violet[500],
126
- on: '#ffffff',
127
- container: palettes.violet[100],
128
- onContainer: palettes.violet[800],
129
- light: palettes.violet[200],
130
- dark: palettes.violet[700],
131
- border: palettes.violet[300],
132
- },
133
- } as any; // Type assertion for extended intents
134
- }
135
-
136
- // Helper function to create extended dark intents
137
- function createExtendedDarkIntents(palettes: typeof extendedDarkColorPalettes) {
138
- return {
139
- // Include all base intents
140
- ...createDarkIntentMappings(),
141
-
142
- // Add extended intents with resolved colors
143
- accent: {
144
- main: palettes.orange[400],
145
- on: palettes.gray[50],
146
- container: palettes.orange[200],
147
- onContainer: palettes.orange[800],
148
- light: palettes.orange[300],
149
- dark: palettes.orange[600],
150
- border: palettes.orange[400],
151
- },
152
-
153
- feature: {
154
- main: palettes.teal[400],
155
- on: palettes.gray[50],
156
- container: palettes.teal[200],
157
- onContainer: palettes.teal[800],
158
- light: palettes.teal[300],
159
- dark: palettes.teal[600],
160
- border: palettes.teal[400],
161
- },
162
-
163
- highlight: {
164
- main: palettes.violet[400],
165
- on: palettes.gray[50],
166
- container: palettes.violet[200],
167
- onContainer: palettes.violet[800],
168
- light: palettes.violet[300],
169
- dark: palettes.violet[600],
170
- border: palettes.violet[400],
171
- },
172
- } as any; // Type assertion for extended intents
173
- }
174
-
175
- // Create extended themes using the new theme builder
176
- export const extendedThemes = {
177
- light: createTheme({
178
- name: 'ExtendedLight',
179
- mode: 'light',
180
- palettes: extendedColorPalettes,
181
- intents: createExtendedLightIntents(extendedColorPalettes),
182
- colors: createLightColorMappings(),
183
-
184
- typography: {
185
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
186
- },
187
-
188
- borderRadius: {
189
- sm: 4,
190
- md: 8,
191
- lg: 12,
192
- xl: 16,
193
- xxl: 20,
194
- },
195
-
196
- spacing: {
197
- xs: 4,
198
- sm: 8,
199
- md: 16,
200
- lg: 24,
201
- xl: 32,
202
- xxl: 40,
203
- xxxl: 48,
204
- },
205
-
206
- shadows: {
207
- sm: {
208
- shadowColor: '#000',
209
- shadowOffset: { width: 0, height: 1 },
210
- shadowOpacity: 0.05,
211
- shadowRadius: 2,
212
- elevation: 1,
213
- },
214
- md: {
215
- shadowColor: '#000',
216
- shadowOffset: { width: 0, height: 4 },
217
- shadowOpacity: 0.1,
218
- shadowRadius: 8,
219
- elevation: 4,
220
- },
221
- lg: {
222
- shadowColor: '#000',
223
- shadowOffset: { width: 0, height: 8 },
224
- shadowOpacity: 0.15,
225
- shadowRadius: 16,
226
- elevation: 8,
227
- },
228
- },
229
-
230
- transitions: {
231
- fast: '0.15s ease',
232
- base: '0.2s ease',
233
- slow: '0.3s ease',
234
- button: 'all 0.2s ease',
235
- fade: 'opacity 0.2s ease',
236
- slide: 'transform 0.3s ease',
237
- },
238
- }),
239
-
240
- dark: createTheme({
241
- name: 'ExtendedDark',
242
- mode: 'dark',
243
- palettes: extendedDarkColorPalettes,
244
- intents: createExtendedDarkIntents(extendedDarkColorPalettes),
245
- colors: createDarkColorMappings(),
246
-
247
- typography: {
248
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
249
- },
250
-
251
- borderRadius: {
252
- sm: 4,
253
- md: 8,
254
- lg: 12,
255
- xl: 16,
256
- xxl: 20,
257
- },
258
-
259
- spacing: {
260
- xs: 4,
261
- sm: 8,
262
- md: 16,
263
- lg: 24,
264
- xl: 32,
265
- xxl: 40,
266
- xxxl: 48,
267
- },
268
-
269
- shadows: {
270
- sm: {
271
- shadowColor: '#000',
272
- shadowOffset: { width: 0, height: 1 },
273
- shadowOpacity: 0.2,
274
- shadowRadius: 2,
275
- elevation: 1,
276
- },
277
- md: {
278
- shadowColor: '#000',
279
- shadowOffset: { width: 0, height: 4 },
280
- shadowOpacity: 0.3,
281
- shadowRadius: 8,
282
- elevation: 4,
283
- },
284
- lg: {
285
- shadowColor: '#000',
286
- shadowOffset: { width: 0, height: 8 },
287
- shadowOpacity: 0.4,
288
- shadowRadius: 16,
289
- elevation: 8,
290
- },
291
- },
292
-
293
- transitions: {
294
- fast: '0.15s ease',
295
- base: '0.2s ease',
296
- slow: '0.3s ease',
297
- button: 'all 0.2s ease',
298
- fade: 'opacity 0.2s ease',
299
- slide: 'transform 0.3s ease',
300
- },
301
- }),
302
- } as const;
303
-
304
- // Extended type definitions for TypeScript
305
- export type ExtendedColorVariant =
306
- | 'blue'
307
- | 'green'
308
- | 'red'
309
- | 'amber'
310
- | 'gray'
311
- | 'purple'
312
- | 'pink'
313
- | 'cyan'
314
- | 'orange'
315
- | 'teal'
316
- | 'indigo'
317
- | 'violet'
318
- | 'emerald';
319
-
320
- export type ExtendedIntentVariant =
321
- | 'primary'
322
- | 'success'
323
- | 'error'
324
- | 'warning'
325
- | 'neutral'
326
- | 'info'
327
- | 'accent'
328
- | 'feature'
329
- | 'highlight';
@@ -1,8 +0,0 @@
1
- export const breakpoints = {
2
- xs: 0,
3
- sm: 400,
4
- md: 768,
5
- lg: 1024,
6
- xl: 1280,
7
- } as const;
8
-
@@ -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);