@tamagui/themes 2.0.0-1768586279389 → 2.0.0-1768696252732

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 (127) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/cjs/defaultColorThemes.cjs +103 -0
  3. package/dist/cjs/defaultColorThemes.js +96 -0
  4. package/dist/cjs/defaultColorThemes.js.map +6 -0
  5. package/dist/cjs/defaultColorThemes.native.js +120 -0
  6. package/dist/cjs/defaultColorThemes.native.js.map +1 -0
  7. package/dist/cjs/defaultGrandChildrenThemes.cjs +45 -0
  8. package/dist/cjs/defaultGrandChildrenThemes.js +28 -0
  9. package/dist/cjs/defaultGrandChildrenThemes.js.map +6 -0
  10. package/dist/cjs/defaultGrandChildrenThemes.native.js +48 -0
  11. package/dist/cjs/defaultGrandChildrenThemes.native.js.map +1 -0
  12. package/dist/cjs/generated-v4-tamagui.cjs +49 -49
  13. package/dist/cjs/generated-v4-tamagui.js +49 -49
  14. package/dist/cjs/generated-v4-tamagui.js.map +1 -1
  15. package/dist/cjs/generated-v4-tamagui.native.js +49 -49
  16. package/dist/cjs/generated-v4.cjs +29 -29
  17. package/dist/cjs/generated-v4.js +29 -29
  18. package/dist/cjs/generated-v4.js.map +1 -1
  19. package/dist/cjs/generated-v4.native.js +29 -29
  20. package/dist/cjs/generated-v5.cjs +454 -1040
  21. package/dist/cjs/generated-v5.js +694 -1420
  22. package/dist/cjs/generated-v5.js.map +1 -1
  23. package/dist/cjs/generated-v5.native.js +454 -1040
  24. package/dist/cjs/generated-v5.native.js.map +1 -1
  25. package/dist/cjs/opacify.cjs +53 -0
  26. package/dist/cjs/opacify.js +46 -0
  27. package/dist/cjs/opacify.js.map +2 -2
  28. package/dist/cjs/opacify.native.js +57 -0
  29. package/dist/cjs/opacify.native.js.map +1 -1
  30. package/dist/cjs/v5-palettes.cjs +124 -0
  31. package/dist/cjs/v5-palettes.js +149 -0
  32. package/dist/cjs/v5-palettes.js.map +6 -0
  33. package/dist/cjs/v5-palettes.native.js +127 -0
  34. package/dist/cjs/v5-palettes.native.js.map +1 -0
  35. package/dist/cjs/v5-themes.cjs +114 -288
  36. package/dist/cjs/v5-themes.js +88 -290
  37. package/dist/cjs/v5-themes.js.map +2 -2
  38. package/dist/cjs/v5-themes.native.js +125 -299
  39. package/dist/cjs/v5-themes.native.js.map +1 -1
  40. package/dist/cjs/v5.cjs +5 -0
  41. package/dist/cjs/v5.js +5 -0
  42. package/dist/cjs/v5.js.map +1 -1
  43. package/dist/cjs/v5.native.js +5 -0
  44. package/dist/cjs/v5.native.js.map +1 -1
  45. package/dist/esm/defaultColorThemes.js +92 -0
  46. package/dist/esm/defaultColorThemes.js.map +6 -0
  47. package/dist/esm/defaultColorThemes.mjs +79 -0
  48. package/dist/esm/defaultColorThemes.mjs.map +1 -0
  49. package/dist/esm/defaultColorThemes.native.js +93 -0
  50. package/dist/esm/defaultColorThemes.native.js.map +1 -0
  51. package/dist/esm/defaultGrandChildrenThemes.js +12 -0
  52. package/dist/esm/defaultGrandChildrenThemes.js.map +6 -0
  53. package/dist/esm/defaultGrandChildrenThemes.mjs +22 -0
  54. package/dist/esm/defaultGrandChildrenThemes.mjs.map +1 -0
  55. package/dist/esm/defaultGrandChildrenThemes.native.js +22 -0
  56. package/dist/esm/defaultGrandChildrenThemes.native.js.map +1 -0
  57. package/dist/esm/generated-v4-tamagui.js +49 -49
  58. package/dist/esm/generated-v4-tamagui.js.map +1 -1
  59. package/dist/esm/generated-v4-tamagui.mjs +49 -49
  60. package/dist/esm/generated-v4-tamagui.mjs.map +1 -1
  61. package/dist/esm/generated-v4-tamagui.native.js +49 -49
  62. package/dist/esm/generated-v4.js +29 -29
  63. package/dist/esm/generated-v4.js.map +1 -1
  64. package/dist/esm/generated-v4.mjs +29 -29
  65. package/dist/esm/generated-v4.mjs.map +1 -1
  66. package/dist/esm/generated-v4.native.js +29 -29
  67. package/dist/esm/generated-v5.js +694 -1420
  68. package/dist/esm/generated-v5.js.map +1 -1
  69. package/dist/esm/generated-v5.mjs +454 -1040
  70. package/dist/esm/generated-v5.mjs.map +1 -1
  71. package/dist/esm/generated-v5.native.js +454 -1040
  72. package/dist/esm/generated-v5.native.js.map +1 -1
  73. package/dist/esm/opacify.js +46 -0
  74. package/dist/esm/opacify.js.map +2 -2
  75. package/dist/esm/opacify.mjs +53 -1
  76. package/dist/esm/opacify.mjs.map +1 -1
  77. package/dist/esm/opacify.native.js +57 -1
  78. package/dist/esm/opacify.native.js.map +1 -1
  79. package/dist/esm/v5-palettes.js +144 -0
  80. package/dist/esm/v5-palettes.js.map +6 -0
  81. package/dist/esm/v5-palettes.mjs +92 -0
  82. package/dist/esm/v5-palettes.mjs.map +1 -0
  83. package/dist/esm/v5-palettes.native.js +92 -0
  84. package/dist/esm/v5-palettes.native.js.map +1 -0
  85. package/dist/esm/v5-themes.js +99 -309
  86. package/dist/esm/v5-themes.js.map +1 -1
  87. package/dist/esm/v5-themes.mjs +112 -287
  88. package/dist/esm/v5-themes.mjs.map +1 -1
  89. package/dist/esm/v5-themes.native.js +123 -298
  90. package/dist/esm/v5-themes.native.js.map +1 -1
  91. package/dist/esm/v5.js +13 -2
  92. package/dist/esm/v5.js.map +1 -1
  93. package/dist/esm/v5.mjs +3 -3
  94. package/dist/esm/v5.mjs.map +1 -1
  95. package/dist/esm/v5.native.js +3 -3
  96. package/dist/esm/v5.native.js.map +1 -1
  97. package/package.json +7 -7
  98. package/src/defaultColorThemes.ts +120 -0
  99. package/src/defaultGrandChildrenThemes.ts +27 -0
  100. package/src/generated-v4-tamagui.ts +48 -48
  101. package/src/generated-v4.ts +28 -28
  102. package/src/generated-v5.ts +859 -2036
  103. package/src/opacify.ts +89 -0
  104. package/src/v5-palettes.ts +158 -0
  105. package/src/v5-themes.ts +215 -415
  106. package/src/v5.tsx +8 -2
  107. package/tests/v5-themes.test.ts +197 -0
  108. package/tsconfig.json +1 -0
  109. package/types/defaultColorThemes.d.ts +69 -0
  110. package/types/defaultColorThemes.d.ts.map +1 -0
  111. package/types/defaultGrandChildrenThemes.d.ts +31 -0
  112. package/types/defaultGrandChildrenThemes.d.ts.map +1 -0
  113. package/types/generated-v5.d.ts +83 -138
  114. package/types/generated-v5.d.ts.map +1 -1
  115. package/types/opacify.d.ts +7 -0
  116. package/types/opacify.d.ts.map +1 -1
  117. package/types/v3-themes.d.ts +1 -1
  118. package/types/v4-default.d.ts +10 -10
  119. package/types/v4-default.d.ts.map +1 -1
  120. package/types/v4-tamagui.d.ts +6 -6
  121. package/types/v4-tamagui.d.ts.map +1 -1
  122. package/types/v5-palettes.d.ts +94 -0
  123. package/types/v5-palettes.d.ts.map +1 -0
  124. package/types/v5-themes.d.ts +190 -590
  125. package/types/v5-themes.d.ts.map +1 -1
  126. package/types/v5.d.ts +2 -2
  127. package/types/v5.d.ts.map +1 -1
package/src/opacify.ts CHANGED
@@ -1,3 +1,92 @@
1
+ /**
2
+ * Interpolate between two colors
3
+ * @param color1 - First color (hex or hsl)
4
+ * @param color2 - Second color (hex or hsl)
5
+ * @param amount - 0 = color1, 1 = color2, 0.5 = middle
6
+ */
7
+ export function interpolateColor(color1: string, color2: string, amount: number): string {
8
+ const rgb1 = parseToRgb(color1)
9
+ const rgb2 = parseToRgb(color2)
10
+ if (!rgb1 || !rgb2) return color1
11
+
12
+ const r = Math.round(rgb1.r + (rgb2.r - rgb1.r) * amount)
13
+ const g = Math.round(rgb1.g + (rgb2.g - rgb1.g) * amount)
14
+ const b = Math.round(rgb1.b + (rgb2.b - rgb1.b) * amount)
15
+
16
+ return `rgb(${r}, ${g}, ${b})`
17
+ }
18
+
19
+ function parseToRgb(color: string): { r: number; g: number; b: number } | null {
20
+ if (typeof color !== 'string') return null
21
+
22
+ // Handle hex
23
+ if (color.startsWith('#')) {
24
+ let hex = color.slice(1)
25
+ if (hex.length === 3) {
26
+ hex = hex
27
+ .split('')
28
+ .map((c) => c + c)
29
+ .join('')
30
+ }
31
+ if (hex.length >= 6) {
32
+ return {
33
+ r: Number.parseInt(hex.slice(0, 2), 16),
34
+ g: Number.parseInt(hex.slice(2, 4), 16),
35
+ b: Number.parseInt(hex.slice(4, 6), 16),
36
+ }
37
+ }
38
+ }
39
+
40
+ // Handle rgb/rgba
41
+ if (color.startsWith('rgb')) {
42
+ const match = color.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/)
43
+ if (match) {
44
+ return {
45
+ r: Number.parseInt(match[1], 10),
46
+ g: Number.parseInt(match[2], 10),
47
+ b: Number.parseInt(match[3], 10),
48
+ }
49
+ }
50
+ }
51
+
52
+ // Handle hsl/hsla
53
+ if (color.startsWith('hsl')) {
54
+ const match = color.match(/hsla?\((\d+),\s*(\d+)%,\s*(\d+)%/)
55
+ if (match) {
56
+ const h = Number.parseInt(match[1], 10)
57
+ const s = Number.parseInt(match[2], 10) / 100
58
+ const l = Number.parseInt(match[3], 10) / 100
59
+ return hslToRgb(h, s, l)
60
+ }
61
+ }
62
+
63
+ return null
64
+ }
65
+
66
+ function hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } {
67
+ let r: number
68
+ let g: number
69
+ let b: number
70
+ if (s === 0) {
71
+ r = g = b = l
72
+ } else {
73
+ const hue2rgb = (p: number, q: number, t: number) => {
74
+ if (t < 0) t += 1
75
+ if (t > 1) t -= 1
76
+ if (t < 1 / 6) return p + (q - p) * 6 * t
77
+ if (t < 1 / 2) return q
78
+ if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6
79
+ return p
80
+ }
81
+ const q = l < 0.5 ? l * (1 + s) : l + s - l * s
82
+ const p = 2 * l - q
83
+ r = hue2rgb(p, q, h / 360 + 1 / 3)
84
+ g = hue2rgb(p, q, h / 360)
85
+ b = hue2rgb(p, q, h / 360 - 1 / 3)
86
+ }
87
+ return { r: Math.round(r * 255), g: Math.round(g * 255), b: Math.round(b * 255) }
88
+ }
89
+
1
90
  export function opacify(color: string, opacity = 0.1): string {
2
91
  // Handle dynamic color objects (from $theme-dark/$theme-light)
3
92
  if (typeof color !== 'string') return color
@@ -0,0 +1,158 @@
1
+ import {
2
+ blue,
3
+ blueDark,
4
+ gray,
5
+ grayDark,
6
+ green,
7
+ greenDark,
8
+ red,
9
+ redDark,
10
+ yellow,
11
+ yellowDark,
12
+ } from '@tamagui/colors'
13
+
14
+ // Base palettes (12 colors each)
15
+ export const darkPalette = [
16
+ '#050505',
17
+ '#151515',
18
+ '#191919',
19
+ '#232323',
20
+ '#282828',
21
+ '#323232',
22
+ '#424242',
23
+ '#494949',
24
+ '#545454',
25
+ '#626262',
26
+ '#a5a5a5',
27
+ '#fff',
28
+ ]
29
+
30
+ export const lightPalette = [
31
+ '#fff',
32
+ '#f8f8f8',
33
+ 'hsl(0, 0%, 93%)',
34
+ 'hsl(0, 0%, 87%)',
35
+ 'hsl(0, 0%, 80%)',
36
+ 'hsl(0, 0%, 74%)',
37
+ 'hsl(0, 0%, 68%)',
38
+ 'hsl(0, 0%, 60%)',
39
+ 'hsl(0, 0%, 48%)',
40
+ 'hsl(0, 0%, 38%)',
41
+ 'hsl(0, 0%, 20%)',
42
+ 'hsl(0, 0%, 2%)',
43
+ ]
44
+
45
+ /**
46
+ * Neutral grey palette with sufficient contrast on both white and black backgrounds.
47
+ * Uses the same values for both light and dark themes.
48
+ */
49
+ export const neutralPalette = [
50
+ 'hsl(0, 0%, 68%)',
51
+ 'hsl(0, 0%, 65%)',
52
+ 'hsl(0, 0%, 62%)',
53
+ 'hsl(0, 0%, 59%)',
54
+ 'hsl(0, 0%, 56%)',
55
+ 'hsl(0, 0%, 53%)',
56
+ 'hsl(0, 0%, 50%)',
57
+ 'hsl(0, 0%, 47%)',
58
+ 'hsl(0, 0%, 44%)',
59
+ 'hsl(0, 0%, 41%)',
60
+ 'hsl(0, 0%, 38%)',
61
+ 'hsl(0, 0%, 32%)',
62
+ ]
63
+
64
+ // White/black with opacity variants (same on both light and dark)
65
+ export const whiteBlack = {
66
+ white: 'rgba(255,255,255,1)',
67
+ white0: 'rgba(255,255,255,0)',
68
+ white02: 'rgba(255,255,255,0.2)',
69
+ white04: 'rgba(255,255,255,0.4)',
70
+ white06: 'rgba(255,255,255,0.6)',
71
+ white08: 'rgba(255,255,255,0.8)',
72
+ black: 'rgba(0,0,0,1)',
73
+ black0: 'rgba(0,0,0,0)',
74
+ black02: 'rgba(0,0,0,0.2)',
75
+ black04: 'rgba(0,0,0,0.4)',
76
+ black06: 'rgba(0,0,0,0.6)',
77
+ black08: 'rgba(0,0,0,0.8)',
78
+ }
79
+
80
+ export const darkShadows = {
81
+ shadow1: 'rgba(0,0,0,0.1)',
82
+ shadow2: 'rgba(0,0,0,0.18)',
83
+ shadow3: 'rgba(0,0,0,0.25)',
84
+ shadow4: 'rgba(0,0,0,0.4)',
85
+ shadow5: 'rgba(0,0,0,0.55)',
86
+ shadow6: 'rgba(0,0,0,0.66)',
87
+ }
88
+
89
+ export const lightShadows = {
90
+ shadow1: 'rgba(0,0,0,0.025)',
91
+ shadow2: 'rgba(0,0,0,0.04)',
92
+ shadow3: 'rgba(0,0,0,0.06)',
93
+ shadow4: 'rgba(0,0,0,0.095)',
94
+ shadow5: 'rgba(0,0,0,0.195)',
95
+ shadow6: 'rgba(0,0,0,0.3)',
96
+ }
97
+
98
+ // Named palette colors (for base.extra)
99
+ export const blackColors = {
100
+ black1: darkPalette[0]!,
101
+ black2: darkPalette[1]!,
102
+ black3: darkPalette[2]!,
103
+ black4: darkPalette[3]!,
104
+ black5: darkPalette[4]!,
105
+ black6: darkPalette[5]!,
106
+ black7: darkPalette[6]!,
107
+ black8: darkPalette[7]!,
108
+ black9: darkPalette[8]!,
109
+ black10: darkPalette[9]!,
110
+ black11: darkPalette[10]!,
111
+ black12: darkPalette[11]!,
112
+ }
113
+
114
+ export const whiteColors = {
115
+ white1: lightPalette[0]!,
116
+ white2: lightPalette[1]!,
117
+ white3: lightPalette[2]!,
118
+ white4: lightPalette[3]!,
119
+ white5: lightPalette[4]!,
120
+ white6: lightPalette[5]!,
121
+ white7: lightPalette[6]!,
122
+ white8: lightPalette[7]!,
123
+ white9: lightPalette[8]!,
124
+ white10: lightPalette[9]!,
125
+ white11: lightPalette[10]!,
126
+ white12: lightPalette[11]!,
127
+ }
128
+
129
+ export const neutral = {
130
+ neutral1: neutralPalette[0]!,
131
+ neutral2: neutralPalette[1]!,
132
+ neutral3: neutralPalette[2]!,
133
+ neutral4: neutralPalette[3]!,
134
+ neutral5: neutralPalette[4]!,
135
+ neutral6: neutralPalette[5]!,
136
+ neutral7: neutralPalette[6]!,
137
+ neutral8: neutralPalette[7]!,
138
+ neutral9: neutralPalette[8]!,
139
+ neutral10: neutralPalette[9]!,
140
+ neutral11: neutralPalette[10]!,
141
+ neutral12: neutralPalette[11]!,
142
+ }
143
+
144
+ // Legacy palettes object (used by themes-new.ts, templates.tsx)
145
+ export const palettes = {
146
+ dark: darkPalette,
147
+ light: lightPalette,
148
+ dark_blue: Object.values(blueDark),
149
+ light_blue: Object.values(blue),
150
+ dark_gray: Object.values(grayDark),
151
+ light_gray: Object.values(gray),
152
+ dark_green: Object.values(greenDark),
153
+ light_green: Object.values(green),
154
+ dark_red: Object.values(redDark),
155
+ light_red: Object.values(red),
156
+ dark_yellow: Object.values(yellowDark),
157
+ light_yellow: Object.values(yellow),
158
+ }