@hanzogui/themes 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/componentThemeDefinitions.cjs +124 -0
  3. package/dist/cjs/componentThemeDefinitions.native.js +127 -0
  4. package/dist/cjs/componentThemeDefinitions.native.js.map +1 -0
  5. package/dist/cjs/generated-new.cjs +2021 -0
  6. package/dist/cjs/generated-new.native.js +2040 -0
  7. package/dist/cjs/generated-new.native.js.map +1 -0
  8. package/dist/cjs/generated-v3.cjs +1099 -0
  9. package/dist/cjs/generated-v3.native.js +1118 -0
  10. package/dist/cjs/generated-v3.native.js.map +1 -0
  11. package/dist/cjs/generated-v4-gui.cjs +933 -0
  12. package/dist/cjs/generated-v4-gui.native.js +952 -0
  13. package/dist/cjs/generated-v4-gui.native.js.map +1 -0
  14. package/dist/cjs/generated-v4.cjs +391 -0
  15. package/dist/cjs/generated-v4.native.js +410 -0
  16. package/dist/cjs/generated-v4.native.js.map +1 -0
  17. package/dist/cjs/generated-v5-subtle.cjs +549 -0
  18. package/dist/cjs/generated-v5-subtle.native.js +568 -0
  19. package/dist/cjs/generated-v5-subtle.native.js.map +1 -0
  20. package/dist/cjs/generated-v5.cjs +549 -0
  21. package/dist/cjs/generated-v5.native.js +568 -0
  22. package/dist/cjs/generated-v5.native.js.map +1 -0
  23. package/dist/cjs/helpers.cjs +34 -0
  24. package/dist/cjs/helpers.native.js +39 -0
  25. package/dist/cjs/helpers.native.js.map +1 -0
  26. package/dist/cjs/index.cjs +25 -0
  27. package/dist/cjs/index.native.js +28 -0
  28. package/dist/cjs/index.native.js.map +1 -0
  29. package/dist/cjs/opacify.cjs +96 -0
  30. package/dist/cjs/opacify.native.js +106 -0
  31. package/dist/cjs/opacify.native.js.map +1 -0
  32. package/dist/cjs/palettes.cjs +52 -0
  33. package/dist/cjs/palettes.native.js +63 -0
  34. package/dist/cjs/palettes.native.js.map +1 -0
  35. package/dist/cjs/shadows.cjs +43 -0
  36. package/dist/cjs/shadows.native.js +46 -0
  37. package/dist/cjs/shadows.native.js.map +1 -0
  38. package/dist/cjs/subtleChildrenThemes.cjs +65 -0
  39. package/dist/cjs/subtleChildrenThemes.native.js +74 -0
  40. package/dist/cjs/subtleChildrenThemes.native.js.map +1 -0
  41. package/dist/cjs/templates.cjs +118 -0
  42. package/dist/cjs/templates.native.js +121 -0
  43. package/dist/cjs/templates.native.js.map +1 -0
  44. package/dist/cjs/themes-new.cjs +86 -0
  45. package/dist/cjs/themes-new.native.js +88 -0
  46. package/dist/cjs/themes-new.native.js.map +1 -0
  47. package/dist/cjs/themes-old.cjs +284 -0
  48. package/dist/cjs/themes-old.native.js +303 -0
  49. package/dist/cjs/themes-old.native.js.map +1 -0
  50. package/dist/cjs/themes.cjs +26 -0
  51. package/dist/cjs/themes.native.js +29 -0
  52. package/dist/cjs/themes.native.js.map +1 -0
  53. package/dist/cjs/tokens.cjs +155 -0
  54. package/dist/cjs/tokens.native.js +167 -0
  55. package/dist/cjs/tokens.native.js.map +1 -0
  56. package/dist/cjs/utils.cjs +40 -0
  57. package/dist/cjs/utils.native.js +46 -0
  58. package/dist/cjs/utils.native.js.map +1 -0
  59. package/dist/cjs/v3-themes.cjs +472 -0
  60. package/dist/cjs/v3-themes.native.js +487 -0
  61. package/dist/cjs/v3-themes.native.js.map +1 -0
  62. package/dist/cjs/v3-tokens.cjs +99 -0
  63. package/dist/cjs/v3-tokens.native.js +108 -0
  64. package/dist/cjs/v3-tokens.native.js.map +1 -0
  65. package/dist/cjs/v3.cjs +52 -0
  66. package/dist/cjs/v3.native.js +55 -0
  67. package/dist/cjs/v3.native.js.map +1 -0
  68. package/dist/cjs/v4-default.cjs +167 -0
  69. package/dist/cjs/v4-default.native.js +170 -0
  70. package/dist/cjs/v4-default.native.js.map +1 -0
  71. package/dist/cjs/v4-gui.cjs +235 -0
  72. package/dist/cjs/v4-gui.native.js +243 -0
  73. package/dist/cjs/v4-gui.native.js.map +1 -0
  74. package/dist/cjs/v4-tokens.cjs +99 -0
  75. package/dist/cjs/v4-tokens.native.js +108 -0
  76. package/dist/cjs/v4-tokens.native.js.map +1 -0
  77. package/dist/cjs/v4.cjs +32 -0
  78. package/dist/cjs/v4.native.js +35 -0
  79. package/dist/cjs/v4.native.js.map +1 -0
  80. package/dist/cjs/v5-subtle.cjs +34 -0
  81. package/dist/cjs/v5-subtle.native.js +37 -0
  82. package/dist/cjs/v5-subtle.native.js.map +1 -0
  83. package/dist/cjs/v5-templates.cjs +110 -0
  84. package/dist/cjs/v5-templates.native.js +126 -0
  85. package/dist/cjs/v5-templates.native.js.map +1 -0
  86. package/dist/cjs/v5-themes-subtle.cjs +37 -0
  87. package/dist/cjs/v5-themes-subtle.native.js +40 -0
  88. package/dist/cjs/v5-themes-subtle.native.js.map +1 -0
  89. package/dist/cjs/v5-themes.cjs +400 -0
  90. package/dist/cjs/v5-themes.native.js +445 -0
  91. package/dist/cjs/v5-themes.native.js.map +1 -0
  92. package/dist/cjs/v5-tokens.cjs +99 -0
  93. package/dist/cjs/v5-tokens.native.js +108 -0
  94. package/dist/cjs/v5-tokens.native.js.map +1 -0
  95. package/dist/cjs/v5.cjs +34 -0
  96. package/dist/cjs/v5.native.js +37 -0
  97. package/dist/cjs/v5.native.js.map +1 -0
  98. package/dist/esm/componentThemeDefinitions.mjs +100 -0
  99. package/dist/esm/componentThemeDefinitions.mjs.map +1 -0
  100. package/dist/esm/componentThemeDefinitions.native.js +100 -0
  101. package/dist/esm/componentThemeDefinitions.native.js.map +1 -0
  102. package/dist/esm/generated-new.mjs +1997 -0
  103. package/dist/esm/generated-new.mjs.map +1 -0
  104. package/dist/esm/generated-new.native.js +2013 -0
  105. package/dist/esm/generated-new.native.js.map +1 -0
  106. package/dist/esm/generated-v3.mjs +1075 -0
  107. package/dist/esm/generated-v3.mjs.map +1 -0
  108. package/dist/esm/generated-v3.native.js +1091 -0
  109. package/dist/esm/generated-v3.native.js.map +1 -0
  110. package/dist/esm/generated-v4-gui.mjs +909 -0
  111. package/dist/esm/generated-v4-gui.mjs.map +1 -0
  112. package/dist/esm/generated-v4-gui.native.js +925 -0
  113. package/dist/esm/generated-v4-gui.native.js.map +1 -0
  114. package/dist/esm/generated-v4.mjs +367 -0
  115. package/dist/esm/generated-v4.mjs.map +1 -0
  116. package/dist/esm/generated-v4.native.js +383 -0
  117. package/dist/esm/generated-v4.native.js.map +1 -0
  118. package/dist/esm/generated-v5-subtle.mjs +525 -0
  119. package/dist/esm/generated-v5-subtle.mjs.map +1 -0
  120. package/dist/esm/generated-v5-subtle.native.js +541 -0
  121. package/dist/esm/generated-v5-subtle.native.js.map +1 -0
  122. package/dist/esm/generated-v5.mjs +525 -0
  123. package/dist/esm/generated-v5.mjs.map +1 -0
  124. package/dist/esm/generated-v5.native.js +541 -0
  125. package/dist/esm/generated-v5.native.js.map +1 -0
  126. package/dist/esm/helpers.mjs +9 -0
  127. package/dist/esm/helpers.mjs.map +1 -0
  128. package/dist/esm/helpers.native.js +11 -0
  129. package/dist/esm/helpers.native.js.map +1 -0
  130. package/dist/esm/index.js +9 -0
  131. package/dist/esm/index.js.map +1 -0
  132. package/dist/esm/index.mjs +9 -0
  133. package/dist/esm/index.mjs.map +1 -0
  134. package/dist/esm/index.native.js +9 -0
  135. package/dist/esm/index.native.js.map +1 -0
  136. package/dist/esm/opacify.mjs +72 -0
  137. package/dist/esm/opacify.mjs.map +1 -0
  138. package/dist/esm/opacify.native.js +79 -0
  139. package/dist/esm/opacify.native.js.map +1 -0
  140. package/dist/esm/palettes.mjs +29 -0
  141. package/dist/esm/palettes.mjs.map +1 -0
  142. package/dist/esm/palettes.native.js +37 -0
  143. package/dist/esm/palettes.native.js.map +1 -0
  144. package/dist/esm/shadows.mjs +20 -0
  145. package/dist/esm/shadows.mjs.map +1 -0
  146. package/dist/esm/shadows.native.js +20 -0
  147. package/dist/esm/shadows.native.js.map +1 -0
  148. package/dist/esm/subtleChildrenThemes.mjs +41 -0
  149. package/dist/esm/subtleChildrenThemes.mjs.map +1 -0
  150. package/dist/esm/subtleChildrenThemes.native.js +47 -0
  151. package/dist/esm/subtleChildrenThemes.native.js.map +1 -0
  152. package/dist/esm/templates.mjs +94 -0
  153. package/dist/esm/templates.mjs.map +1 -0
  154. package/dist/esm/templates.native.js +94 -0
  155. package/dist/esm/templates.native.js.map +1 -0
  156. package/dist/esm/themes-new.mjs +63 -0
  157. package/dist/esm/themes-new.mjs.map +1 -0
  158. package/dist/esm/themes-new.native.js +62 -0
  159. package/dist/esm/themes-new.native.js.map +1 -0
  160. package/dist/esm/themes-old.mjs +261 -0
  161. package/dist/esm/themes-old.mjs.map +1 -0
  162. package/dist/esm/themes-old.native.js +277 -0
  163. package/dist/esm/themes-old.native.js.map +1 -0
  164. package/dist/esm/themes.mjs +3 -0
  165. package/dist/esm/themes.mjs.map +1 -0
  166. package/dist/esm/themes.native.js +3 -0
  167. package/dist/esm/themes.native.js.map +1 -0
  168. package/dist/esm/tokens.mjs +124 -0
  169. package/dist/esm/tokens.mjs.map +1 -0
  170. package/dist/esm/tokens.native.js +133 -0
  171. package/dist/esm/tokens.native.js.map +1 -0
  172. package/dist/esm/utils.mjs +14 -0
  173. package/dist/esm/utils.mjs.map +1 -0
  174. package/dist/esm/utils.native.js +17 -0
  175. package/dist/esm/utils.native.js.map +1 -0
  176. package/dist/esm/v3-themes.mjs +444 -0
  177. package/dist/esm/v3-themes.mjs.map +1 -0
  178. package/dist/esm/v3-themes.native.js +456 -0
  179. package/dist/esm/v3-themes.native.js.map +1 -0
  180. package/dist/esm/v3-tokens.mjs +70 -0
  181. package/dist/esm/v3-tokens.mjs.map +1 -0
  182. package/dist/esm/v3-tokens.native.js +76 -0
  183. package/dist/esm/v3-tokens.native.js.map +1 -0
  184. package/dist/esm/v3.mjs +12 -0
  185. package/dist/esm/v3.mjs.map +1 -0
  186. package/dist/esm/v3.native.js +12 -0
  187. package/dist/esm/v3.native.js.map +1 -0
  188. package/dist/esm/v4-default.mjs +133 -0
  189. package/dist/esm/v4-default.mjs.map +1 -0
  190. package/dist/esm/v4-default.native.js +133 -0
  191. package/dist/esm/v4-default.native.js.map +1 -0
  192. package/dist/esm/v4-gui.mjs +201 -0
  193. package/dist/esm/v4-gui.mjs.map +1 -0
  194. package/dist/esm/v4-gui.native.js +206 -0
  195. package/dist/esm/v4-gui.native.js.map +1 -0
  196. package/dist/esm/v4-tokens.mjs +70 -0
  197. package/dist/esm/v4-tokens.mjs.map +1 -0
  198. package/dist/esm/v4-tokens.native.js +76 -0
  199. package/dist/esm/v4-tokens.native.js.map +1 -0
  200. package/dist/esm/v4.mjs +6 -0
  201. package/dist/esm/v4.mjs.map +1 -0
  202. package/dist/esm/v4.native.js +6 -0
  203. package/dist/esm/v4.native.js.map +1 -0
  204. package/dist/esm/v5-subtle.mjs +7 -0
  205. package/dist/esm/v5-subtle.mjs.map +1 -0
  206. package/dist/esm/v5-subtle.native.js +7 -0
  207. package/dist/esm/v5-subtle.native.js.map +1 -0
  208. package/dist/esm/v5-templates.mjs +87 -0
  209. package/dist/esm/v5-templates.mjs.map +1 -0
  210. package/dist/esm/v5-templates.native.js +100 -0
  211. package/dist/esm/v5-templates.native.js.map +1 -0
  212. package/dist/esm/v5-themes-subtle.mjs +13 -0
  213. package/dist/esm/v5-themes-subtle.mjs.map +1 -0
  214. package/dist/esm/v5-themes-subtle.native.js +13 -0
  215. package/dist/esm/v5-themes-subtle.native.js.map +1 -0
  216. package/dist/esm/v5-themes.mjs +361 -0
  217. package/dist/esm/v5-themes.mjs.map +1 -0
  218. package/dist/esm/v5-themes.native.js +403 -0
  219. package/dist/esm/v5-themes.native.js.map +1 -0
  220. package/dist/esm/v5-tokens.mjs +70 -0
  221. package/dist/esm/v5-tokens.mjs.map +1 -0
  222. package/dist/esm/v5-tokens.native.js +76 -0
  223. package/dist/esm/v5-tokens.native.js.map +1 -0
  224. package/dist/esm/v5.mjs +7 -0
  225. package/dist/esm/v5.mjs.map +1 -0
  226. package/dist/esm/v5.native.js +7 -0
  227. package/dist/esm/v5.native.js.map +1 -0
  228. package/package.json +95 -0
  229. package/src/componentThemeDefinitions.tsx +129 -0
  230. package/src/generated-new.ts +2571 -0
  231. package/src/generated-v3.ts +1826 -0
  232. package/src/generated-v4-gui.ts +2200 -0
  233. package/src/generated-v4.ts +1004 -0
  234. package/src/generated-v5-subtle.ts +2170 -0
  235. package/src/generated-v5.ts +2188 -0
  236. package/src/helpers.ts +44 -0
  237. package/src/index.tsx +8 -0
  238. package/src/opacify.ts +125 -0
  239. package/src/palettes.tsx +91 -0
  240. package/src/shadows.tsx +19 -0
  241. package/src/subtleChildrenThemes.ts +54 -0
  242. package/src/templates.tsx +104 -0
  243. package/src/themes-new.ts +74 -0
  244. package/src/themes-old.tsx +378 -0
  245. package/src/themes.tsx +1 -0
  246. package/src/tokens.tsx +199 -0
  247. package/src/utils.ts +51 -0
  248. package/src/v3-themes.ts +650 -0
  249. package/src/v3-tokens.ts +103 -0
  250. package/src/v3.tsx +12 -0
  251. package/src/v4-default.ts +191 -0
  252. package/src/v4-gui.ts +287 -0
  253. package/src/v4-tokens.ts +105 -0
  254. package/src/v4.tsx +4 -0
  255. package/src/v5-subtle.tsx +11 -0
  256. package/src/v5-templates.ts +126 -0
  257. package/src/v5-themes-subtle.ts +18 -0
  258. package/src/v5-themes.ts +626 -0
  259. package/src/v5-tokens.ts +107 -0
  260. package/src/v5.tsx +11 -0
  261. package/tests/v5-themes.test.ts +215 -0
  262. package/tsconfig.json +43 -0
  263. package/types/componentThemeDefinitions.d.ts +771 -0
  264. package/types/generated-new.d.ts +135 -0
  265. package/types/generated-v3.d.ts +144 -0
  266. package/types/generated-v4-gui.d.ts +190 -0
  267. package/types/generated-v4.d.ts +137 -0
  268. package/types/generated-v5-subtle.d.ts +244 -0
  269. package/types/generated-v5.d.ts +244 -0
  270. package/types/helpers.d.ts +24 -0
  271. package/types/index.d.ts +9 -0
  272. package/types/opacify.d.ts +9 -0
  273. package/types/palettes.d.ts +21 -0
  274. package/types/shadows.d.ts +15 -0
  275. package/types/subtleChildrenThemes.d.ts +305 -0
  276. package/types/templates.d.ts +155 -0
  277. package/types/themes-new.d.ts +42243 -0
  278. package/types/themes-old.d.ts +51411 -0
  279. package/types/themes.d.ts +2 -0
  280. package/types/tokens.d.ts +1308 -0
  281. package/types/utils.d.ts +21 -0
  282. package/types/v3-themes.d.ts +16304 -0
  283. package/types/v3-tokens.d.ts +184 -0
  284. package/types/v3.d.ts +11 -0
  285. package/types/v4-default.d.ts +274 -0
  286. package/types/v4-gui.d.ts +195 -0
  287. package/types/v4-tokens.d.ts +184 -0
  288. package/types/v4.d.ts +5 -0
  289. package/types/v5-subtle.d.ts +8 -0
  290. package/types/v5-templates.d.ts +42 -0
  291. package/types/v5-themes-subtle.d.ts +250 -0
  292. package/types/v5-themes.d.ts +752 -0
  293. package/types/v5-tokens.d.ts +185 -0
  294. package/types/v5.d.ts +8 -0
  295. package/v3/index.cjs +2 -0
  296. package/v3/index.js +2 -0
  297. package/v3/index.native.cjs +2 -0
  298. package/v3/index.native.js +2 -0
  299. package/v3-themes/index.cjs +2 -0
  300. package/v3-themes/index.js +2 -0
  301. package/v3-themes/index.native.cjs +2 -0
  302. package/v3-themes/index.native.js +2 -0
  303. package/v3-themes.cjs +1 -0
  304. package/v3-themes.d.ts +1 -0
  305. package/v3.cjs +1 -0
  306. package/v3.d.ts +1 -0
  307. package/v4/index.cjs +2 -0
  308. package/v4/index.js +2 -0
  309. package/v4/index.native.cjs +2 -0
  310. package/v4/index.native.js +2 -0
  311. package/v4.cjs +1 -0
  312. package/v4.d.ts +1 -0
  313. package/v5/index.cjs +2 -0
  314. package/v5/index.js +2 -0
  315. package/v5/index.native.cjs +2 -0
  316. package/v5/index.native.js +2 -0
  317. package/v5-subtle/index.cjs +2 -0
  318. package/v5-subtle/index.js +2 -0
  319. package/v5-subtle/index.native.cjs +2 -0
  320. package/v5-subtle/index.native.js +2 -0
  321. package/v5-subtle.cjs +1 -0
  322. package/v5-subtle.d.ts +1 -0
  323. package/v5.cjs +1 -0
  324. package/v5.d.ts +1 -0
@@ -0,0 +1,378 @@
1
+ import type { MaskOptions } from '@hanzogui/create-theme'
2
+ import {
3
+ addChildren,
4
+ applyMask,
5
+ createStrengthenMask,
6
+ createTheme,
7
+ createWeakenMask,
8
+ skipMask,
9
+ } from '@hanzogui/create-theme'
10
+
11
+ import { colorTokens, darkColors, lightColors } from './tokens'
12
+
13
+ type ColorName = keyof typeof colorTokens.dark
14
+
15
+ const lightTransparent = 'rgba(255,255,255,0)'
16
+ const darkTransparent = 'rgba(10,10,10,0)'
17
+
18
+ // background => foreground
19
+ const palettes = {
20
+ dark: [
21
+ darkTransparent,
22
+ '#050505',
23
+ '#151515',
24
+ '#191919',
25
+ '#232323',
26
+ '#282828',
27
+ '#323232',
28
+ '#424242',
29
+ '#494949',
30
+ '#545454',
31
+ '#626262',
32
+ '#a5a5a5',
33
+ '#fff',
34
+ lightTransparent,
35
+ ],
36
+ light: [
37
+ lightTransparent,
38
+ '#fff',
39
+ '#f9f9f9',
40
+ 'hsl(0, 0%, 97.3%)',
41
+ 'hsl(0, 0%, 95.1%)',
42
+ 'hsl(0, 0%, 94.0%)',
43
+ 'hsl(0, 0%, 92.0%)',
44
+ 'hsl(0, 0%, 89.5%)',
45
+ 'hsl(0, 0%, 81.0%)',
46
+ 'hsl(0, 0%, 56.1%)',
47
+ 'hsl(0, 0%, 50.3%)',
48
+ 'hsl(0, 0%, 42.5%)',
49
+ 'hsl(0, 0%, 9.0%)',
50
+ darkTransparent,
51
+ ],
52
+ }
53
+
54
+ const templateColors = {
55
+ color1: 1,
56
+ color2: 2,
57
+ color3: 3,
58
+ color4: 4,
59
+ color5: 5,
60
+ color6: 6,
61
+ color7: 7,
62
+ color8: 8,
63
+ color9: 9,
64
+ color10: 10,
65
+ color11: 11,
66
+ color12: 12,
67
+ }
68
+
69
+ const templateShadows = {
70
+ shadowColor: 1,
71
+ shadowColorHover: 1,
72
+ shadowColorPress: 2,
73
+ shadowColorFocus: 2,
74
+ }
75
+
76
+ // we can use subset of our template as a "override" so it doesn't get adjusted with masks
77
+ // we want to skip over templateColor + templateShadows
78
+ const toSkip = {
79
+ ...templateShadows,
80
+ }
81
+
82
+ const override = Object.fromEntries(Object.entries(toSkip).map(([k]) => [k, 0]))
83
+ const overrideShadows = Object.fromEntries(
84
+ Object.entries(templateShadows).map(([k]) => [k, 0])
85
+ )
86
+ const overrideWithColors = {
87
+ ...override,
88
+ color: 0,
89
+ colorHover: 0,
90
+ colorFocus: 0,
91
+ colorPress: 0,
92
+ }
93
+
94
+ // templates use the palette and specify index
95
+ // negative goes backwards from end so -1 is the last item
96
+ const template = {
97
+ ...templateColors,
98
+ ...toSkip,
99
+ // the background, color, etc keys here work like generics - they make it so you
100
+ // can publish components for others to use without mandating a specific color scale
101
+ // the @hanzogui/button Button component looks for `$background`, so you set the
102
+ // dark_red_Button theme to have a stronger background than the dark_red theme.
103
+ background: 2,
104
+ backgroundHover: 3,
105
+ backgroundPress: 4,
106
+ backgroundFocus: 5,
107
+ backgroundStrong: 1,
108
+ backgroundTransparent: 0,
109
+ color: -1,
110
+ colorHover: -2,
111
+ colorPress: -1,
112
+ colorFocus: -2,
113
+ colorTransparent: -0,
114
+ borderColor: 4,
115
+ borderColorHover: 5,
116
+ borderColorPress: 3,
117
+ borderColorFocus: 4,
118
+ placeholderColor: -4,
119
+ }
120
+
121
+ const lightShadowColor = 'rgba(0,0,0,0.02)'
122
+ const lightShadowColorStrong = 'rgba(0,0,0,0.066)'
123
+ const darkShadowColor = 'rgba(0,0,0,0.2)'
124
+ const darkShadowColorStrong = 'rgba(0,0,0,0.3)'
125
+
126
+ const lightShadows = {
127
+ shadowColor: lightShadowColorStrong,
128
+ shadowColorHover: lightShadowColorStrong,
129
+ shadowColorPress: lightShadowColor,
130
+ shadowColorFocus: lightShadowColor,
131
+ }
132
+
133
+ const darkShadows = {
134
+ shadowColor: darkShadowColorStrong,
135
+ shadowColorHover: darkShadowColorStrong,
136
+ shadowColorPress: darkShadowColor,
137
+ shadowColorFocus: darkShadowColor,
138
+ }
139
+
140
+ const lightTemplate = {
141
+ ...template,
142
+
143
+ background: 2,
144
+ backgroundHover: 3,
145
+ backgroundPress: 4,
146
+
147
+ // our light color palette is... a bit unique
148
+ borderColor: 6,
149
+ borderColorHover: 7,
150
+ borderColorFocus: 5,
151
+ borderColorPress: 6,
152
+ ...lightShadows,
153
+ }
154
+
155
+ const darkTemplate = { ...template, ...darkShadows }
156
+
157
+ const light = createTheme(palettes.light, lightTemplate)
158
+ const dark = createTheme(palettes.dark, darkTemplate)
159
+
160
+ type SubTheme = typeof light
161
+
162
+ const baseThemes: {
163
+ light: SubTheme
164
+ dark: SubTheme
165
+ } = {
166
+ light,
167
+ dark,
168
+ }
169
+
170
+ const masks = {
171
+ skip: skipMask,
172
+ weaker: createWeakenMask(),
173
+ stronger: createStrengthenMask(),
174
+ }
175
+
176
+ // default mask options for most uses
177
+ const maskOptions: MaskOptions = {
178
+ override,
179
+ skip: toSkip,
180
+ // avoids the transparent ends
181
+ max: palettes.light.length - 2,
182
+ min: 1,
183
+ }
184
+
185
+ const transparent = (hsl: string, opacity = 0) =>
186
+ hsl.replace(`%)`, `%, ${opacity})`).replace(`hsl(`, `hsla(`)
187
+
188
+ // setup colorThemes and their inverses
189
+ const [lightColorThemes, darkColorThemes] = [colorTokens.light, colorTokens.dark].map(
190
+ (colorSet, i) => {
191
+ const isLight = i === 0
192
+ const theme = baseThemes[isLight ? 'light' : 'dark']
193
+
194
+ return Object.fromEntries(
195
+ Object.keys(colorSet).map((color) => {
196
+ const colorPalette = Object.values(colorSet[color]) as string[]
197
+ // were re-ordering these
198
+ const [head, tail] = [
199
+ colorPalette.slice(0, 6),
200
+ colorPalette.slice(colorPalette.length - 5),
201
+ ]
202
+ // add our transparent colors first/last
203
+ // and make sure the last (foreground) color is white/black rather than colorful
204
+ // this is mostly for consistency with the older theme-base
205
+ const palette = [
206
+ transparent(colorPalette[0]),
207
+ ...head,
208
+ ...tail,
209
+ theme.color,
210
+ transparent(colorPalette[colorPalette.length - 1]),
211
+ ]
212
+
213
+ const colorTheme = createTheme(
214
+ palette,
215
+ isLight
216
+ ? {
217
+ ...lightTemplate,
218
+ // light color themes are a bit less sensitive
219
+ borderColor: 4,
220
+ borderColorHover: 5,
221
+ borderColorFocus: 4,
222
+ borderColorPress: 4,
223
+ }
224
+ : darkTemplate
225
+ )
226
+
227
+ return [color, colorTheme]
228
+ })
229
+ ) as Record<ColorName, SubTheme>
230
+ }
231
+ )
232
+
233
+ const allThemes = addChildren(baseThemes, (name, theme) => {
234
+ const isLight = name === 'light'
235
+ const inverseName = isLight ? 'dark' : 'light'
236
+ const inverseTheme = baseThemes[inverseName]
237
+ const colorThemes = isLight ? lightColorThemes : darkColorThemes
238
+ const inverseColorThemes = isLight ? darkColorThemes : lightColorThemes
239
+
240
+ const allColorThemes = addChildren(colorThemes, (colorName, colorTheme) => {
241
+ const inverse = inverseColorThemes[colorName]
242
+ return {
243
+ ...getAltThemes({
244
+ theme: colorTheme,
245
+ inverse,
246
+ isLight,
247
+ }),
248
+ ...getComponentThemes(colorTheme, inverse, isLight),
249
+ }
250
+ })
251
+
252
+ const baseSubThemes = {
253
+ ...getAltThemes({ theme, inverse: inverseTheme, isLight }),
254
+ ...getComponentThemes(theme, inverseTheme, isLight),
255
+ }
256
+
257
+ return {
258
+ ...baseSubThemes,
259
+ ...allColorThemes,
260
+ }
261
+ })
262
+
263
+ function getAltThemes({
264
+ theme,
265
+ inverse,
266
+ isLight,
267
+ activeTheme,
268
+ }: {
269
+ theme: SubTheme
270
+ inverse: SubTheme
271
+ isLight: boolean
272
+ activeTheme?: SubTheme
273
+ }) {
274
+ const maskOptionsAlt = {
275
+ ...maskOptions,
276
+ override: overrideShadows,
277
+ }
278
+ const alt1 = applyMask(theme, masks.weaker, maskOptionsAlt)
279
+ const alt2 = applyMask(alt1, masks.weaker, maskOptionsAlt)
280
+
281
+ const active =
282
+ activeTheme ??
283
+ (process.env.ACTIVE_THEME_INVERSE
284
+ ? inverse
285
+ : (() => {
286
+ return applyMask(theme, masks.weaker, {
287
+ ...maskOptions,
288
+ strength: 3,
289
+ skip: {
290
+ ...maskOptions.skip,
291
+ color: 1,
292
+ },
293
+ })
294
+ })())
295
+
296
+ return addChildren({ alt1, alt2, active }, (_, subTheme) => {
297
+ return getComponentThemes(subTheme, subTheme === inverse ? theme : inverse, isLight)
298
+ })
299
+ }
300
+
301
+ function getComponentThemes(theme: SubTheme, inverse: SubTheme, isLight: boolean) {
302
+ const componentMaskOptions: MaskOptions = {
303
+ ...maskOptions,
304
+ override: overrideWithColors,
305
+ skip: {
306
+ ...maskOptions.skip,
307
+ // skip colors too just for component sub themes
308
+ ...templateColors,
309
+ },
310
+ }
311
+ const weaker1 = applyMask(theme, masks.weaker, componentMaskOptions)
312
+ const base = applyMask(weaker1, masks.stronger, componentMaskOptions)
313
+ const weaker2 = applyMask(weaker1, masks.weaker, componentMaskOptions)
314
+ const stronger1 = applyMask(theme, masks.stronger, componentMaskOptions)
315
+ const inverse1 = applyMask(inverse, masks.weaker, componentMaskOptions)
316
+ const inverse2 = applyMask(inverse1, masks.weaker, componentMaskOptions)
317
+ const strongerBorderLighterBackground: SubTheme = isLight
318
+ ? {
319
+ ...stronger1,
320
+ borderColor: weaker1.borderColor,
321
+ borderColorHover: weaker1.borderColorHover,
322
+ borderColorPress: weaker1.borderColorPress,
323
+ borderColorFocus: weaker1.borderColorFocus,
324
+ }
325
+ : {
326
+ ...applyMask(theme, masks.skip, componentMaskOptions),
327
+ borderColor: weaker1.borderColor,
328
+ borderColorHover: weaker1.borderColorHover,
329
+ borderColorPress: weaker1.borderColorPress,
330
+ borderColorFocus: weaker1.borderColorFocus,
331
+ }
332
+
333
+ const overlayTheme = {
334
+ background: isLight ? 'rgba(0,0,0,0.5)' : 'rgba(0,0,0,0.9)',
335
+ } as SubTheme
336
+
337
+ const weaker2WithoutBorder = {
338
+ ...weaker2,
339
+ borderColor: 'transparent',
340
+ borderColorHover: 'transparent',
341
+ }
342
+
343
+ return {
344
+ ListItem: isLight ? stronger1 : base,
345
+ Card: weaker1,
346
+ Button: weaker2WithoutBorder,
347
+ Checkbox: weaker2,
348
+ DrawerFrame: weaker1,
349
+ SliderTrack: stronger1,
350
+ SliderTrackActive: weaker2,
351
+ SliderThumb: inverse1,
352
+ Progress: weaker1,
353
+ ProgressIndicator: inverse,
354
+ Switch: weaker2,
355
+ SwitchThumb: inverse2,
356
+ TooltipArrow: weaker1,
357
+ TooltipContent: weaker2,
358
+ Input: strongerBorderLighterBackground,
359
+ TextArea: strongerBorderLighterBackground,
360
+ Tooltip: inverse1,
361
+ // make overlays always dark
362
+ SheetOverlay: overlayTheme,
363
+ DialogOverlay: overlayTheme,
364
+ ModalOverlay: overlayTheme,
365
+ }
366
+ }
367
+
368
+ export const themes = {
369
+ ...allThemes,
370
+ // bring back the full type, the rest use a subset to avoid clogging up ts,
371
+ // hanzo-gui will be smart and use the top level themes as the type for useTheme() etc
372
+ light: createTheme(palettes.light, lightTemplate, { nonInheritedValues: lightColors }),
373
+ dark: createTheme(palettes.dark, darkTemplate, { nonInheritedValues: darkColors }),
374
+ }
375
+
376
+ // if (process.env.NODE_ENV === 'development') {
377
+ // console.log(JSON.stringify(themes).length)
378
+ // }
package/src/themes.tsx ADDED
@@ -0,0 +1 @@
1
+ export { themes } from './generated-new'
package/src/tokens.tsx ADDED
@@ -0,0 +1,199 @@
1
+ import {
2
+ blue,
3
+ blueDark,
4
+ gray,
5
+ grayDark,
6
+ green,
7
+ greenDark,
8
+ orange,
9
+ orangeDark,
10
+ pink,
11
+ pinkDark,
12
+ purple,
13
+ purpleDark,
14
+ red,
15
+ redDark,
16
+ yellow,
17
+ yellowDark,
18
+ } from '@hanzogui/colors/legacy'
19
+ import type { Variable } from '@hanzogui/web'
20
+ import { createTokens } from '@hanzogui/web'
21
+
22
+ // should roughly map to button/input etc height at each level
23
+ // fonts should match that height/lineHeight at each stop
24
+ // so these are really non-linear on purpose
25
+ // why?
26
+ // - at sizes <1, used for fine grained things (borders, smallest paddingY)
27
+ // - so smallest padY should be roughly 1-4px so it can join with lineHeight
28
+ // - at sizes >=1, have to consider "pressability" (jumps up)
29
+ // - after that it should go upwards somewhat naturally
30
+ // - H1 / headings top out at 10 naturally, so after 10 we can go upwards faster
31
+ // but also one more wrinkle...
32
+ // space is used in conjunction with size
33
+ // i'm setting space to generally just a fixed fraction of size (~1/3-2/3 still fine tuning)
34
+ export const size = {
35
+ $0: 0,
36
+ '$0.25': 2,
37
+ '$0.5': 4,
38
+ '$0.75': 8,
39
+ $1: 20,
40
+ '$1.5': 24,
41
+ $2: 28,
42
+ '$2.5': 32,
43
+ $3: 36,
44
+ '$3.5': 40,
45
+ $4: 44,
46
+ $true: 44,
47
+ '$4.5': 48,
48
+ $5: 52,
49
+ $6: 64,
50
+ $7: 74,
51
+ $8: 84,
52
+ $9: 94,
53
+ $10: 104,
54
+ $11: 124,
55
+ $12: 144,
56
+ $13: 164,
57
+ $14: 184,
58
+ $15: 204,
59
+ $16: 224,
60
+ $17: 224,
61
+ $18: 244,
62
+ $19: 264,
63
+ $20: 284,
64
+ }
65
+
66
+ type SizeKeysIn = keyof typeof size
67
+ type Sizes = {
68
+ [Key in SizeKeysIn extends `$${infer Key}` ? Key : SizeKeysIn]: number
69
+ }
70
+ type SizeKeys = `${keyof Sizes extends `${infer K}` ? K : never}`
71
+
72
+ const spaces = Object.entries(size).map(([k, v]) => {
73
+ return [k, sizeToSpace(v)] as const
74
+ })
75
+
76
+ // a bit odd but keeping backward compat for values >8 while fixing below
77
+ function sizeToSpace(v: number) {
78
+ if (v === 0) return 0
79
+ if (v === 2) return 0.5
80
+ if (v === 4) return 1
81
+ if (v === 8) return 1.5
82
+ if (v <= 16) return Math.round(v * 0.333)
83
+ return Math.floor(v * 0.7 - 12)
84
+ }
85
+
86
+ const spacesNegative = spaces.slice(1).map(([k, v]) => [`-${k.slice(1)}`, -v])
87
+
88
+ type SizeKeysWithNegatives =
89
+ | Exclude<`-${SizeKeys extends `$${infer Key}` ? Key : SizeKeys}`, '-0'>
90
+ | SizeKeys
91
+
92
+ type SizeKeysWithNegativesString = `$${SizeKeysWithNegatives}`
93
+
94
+ export const space: {
95
+ [Key in SizeKeysWithNegativesString]: Key extends keyof Sizes ? Sizes[Key] : number
96
+ } = {
97
+ ...Object.fromEntries(spaces),
98
+ ...Object.fromEntries(spacesNegative),
99
+ } as any
100
+
101
+ export const zIndex = {
102
+ 0: 0,
103
+ 1: 100,
104
+ 2: 200,
105
+ 3: 300,
106
+ 4: 400,
107
+ 5: 500,
108
+ }
109
+
110
+ export const colorTokens = {
111
+ light: {
112
+ blue: blue,
113
+ gray: gray,
114
+ green: green,
115
+ orange: orange,
116
+ pink: pink,
117
+ purple: purple,
118
+ red: red,
119
+ yellow: yellow,
120
+ },
121
+ dark: {
122
+ blue: blueDark,
123
+ gray: grayDark,
124
+ green: greenDark,
125
+ orange: orangeDark,
126
+ pink: pinkDark,
127
+ purple: purpleDark,
128
+ red: redDark,
129
+ yellow: yellowDark,
130
+ },
131
+ }
132
+
133
+ export const darkColors = {
134
+ ...colorTokens.dark.blue,
135
+ ...colorTokens.dark.gray,
136
+ ...colorTokens.dark.green,
137
+ ...colorTokens.dark.orange,
138
+ ...colorTokens.dark.pink,
139
+ ...colorTokens.dark.purple,
140
+ ...colorTokens.dark.red,
141
+ ...colorTokens.dark.yellow,
142
+ }
143
+
144
+ export const lightColors = {
145
+ ...colorTokens.light.blue,
146
+ ...colorTokens.light.gray,
147
+ ...colorTokens.light.green,
148
+ ...colorTokens.light.orange,
149
+ ...colorTokens.light.pink,
150
+ ...colorTokens.light.purple,
151
+ ...colorTokens.light.red,
152
+ ...colorTokens.light.yellow,
153
+ }
154
+
155
+ export const color = {
156
+ ...postfixObjKeys(lightColors, 'Light'),
157
+ ...postfixObjKeys(darkColors, 'Dark'),
158
+ }
159
+
160
+ function postfixObjKeys<
161
+ A extends { [key: string]: Variable<string> | string },
162
+ B extends string,
163
+ >(
164
+ obj: A,
165
+ postfix: B
166
+ ): {
167
+ [Key in `${keyof A extends string ? keyof A : never}${B}`]: Variable<string> | string
168
+ } {
169
+ return Object.fromEntries(
170
+ Object.entries(obj).map(([k, v]) => [`${k}${postfix}`, v])
171
+ ) as any
172
+ }
173
+
174
+ export const radius = {
175
+ 0: 0,
176
+ 1: 3,
177
+ 2: 5,
178
+ 3: 7,
179
+ 4: 9,
180
+ true: 9,
181
+ 5: 10,
182
+ 6: 16,
183
+ 7: 19,
184
+ 8: 22,
185
+ 9: 26,
186
+ 10: 34,
187
+ 11: 42,
188
+ 12: 50,
189
+ }
190
+
191
+ export const tokens = createTokens({
192
+ color,
193
+ radius,
194
+ zIndex,
195
+ space,
196
+ size,
197
+ })
198
+
199
+ export type hello = 'asdad'
package/src/utils.ts ADDED
@@ -0,0 +1,51 @@
1
+ export function postfixObjKeys<A extends { [key: string]: string }, B extends string>(
2
+ obj: A,
3
+ postfix: B
4
+ ): {
5
+ [Key in `${keyof A extends string ? keyof A : never}${B}`]: string
6
+ } {
7
+ return Object.fromEntries(
8
+ Object.entries(obj).map(([k, v]) => [`${k}${postfix}`, v])
9
+ ) as any
10
+ }
11
+
12
+ // a bit odd but keeping backward compat for values >8 while fixing below
13
+ export function sizeToSpace(v: number) {
14
+ if (v === 0) return 0
15
+ if (v === 2) return 0.5
16
+ if (v === 4) return 1
17
+ if (v === 8) return 1.5
18
+ if (v <= 16) return Math.round(v * 0.333)
19
+ return Math.floor(v * 0.7 - 12)
20
+ }
21
+
22
+ export function objectFromEntries<ARR_T extends EntriesType>(
23
+ arr: ARR_T
24
+ ): EntriesToObject<ARR_T> {
25
+ return Object.fromEntries(arr) as EntriesToObject<ARR_T>
26
+ }
27
+
28
+ export type EntriesType =
29
+ | [PropertyKey, unknown][]
30
+ | ReadonlyArray<readonly [PropertyKey, unknown]>
31
+
32
+ export type DeepWritable<OBJ_T> = { -readonly [P in keyof OBJ_T]: DeepWritable<OBJ_T[P]> }
33
+ export type UnionToIntersection<UNION_T> = // From https://stackoverflow.com/a/50375286
34
+ (UNION_T extends any ? (k: UNION_T) => void : never) extends (k: infer I) => void
35
+ ? I
36
+ : never
37
+
38
+ export type UnionObjectFromArrayOfPairs<ARR_T extends EntriesType> =
39
+ DeepWritable<ARR_T> extends (infer R)[]
40
+ ? R extends [infer key, infer val]
41
+ ? { [prop in key & PropertyKey]: val }
42
+ : never
43
+ : never
44
+ export type MergeIntersectingObjects<ObjT> = { [key in keyof ObjT]: ObjT[key] }
45
+ export type EntriesToObject<ARR_T extends EntriesType> = MergeIntersectingObjects<
46
+ UnionToIntersection<UnionObjectFromArrayOfPairs<ARR_T>>
47
+ >
48
+
49
+ export function objectKeys<O extends object>(obj: O) {
50
+ return Object.keys(obj) as Array<keyof O>
51
+ }