@tamagui/web 1.5.8 → 1.5.10
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.
- package/dist/cjs/helpers/ThemeManager.js +4 -3
- package/dist/cjs/helpers/ThemeManager.js.map +2 -2
- package/dist/cjs/helpers/getThemeCSSRules.js +57 -40
- package/dist/cjs/helpers/getThemeCSSRules.js.map +2 -2
- package/dist/cjs/helpers/themes.js +10 -12
- package/dist/cjs/helpers/themes.js.map +2 -2
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/esm/helpers/ThemeManager.js +4 -3
- package/dist/esm/helpers/ThemeManager.js.map +2 -2
- package/dist/esm/helpers/ThemeManager.mjs +4 -3
- package/dist/esm/helpers/ThemeManager.mjs.map +2 -2
- package/dist/esm/helpers/getThemeCSSRules.js +57 -40
- package/dist/esm/helpers/getThemeCSSRules.js.map +2 -2
- package/dist/esm/helpers/getThemeCSSRules.mjs +57 -40
- package/dist/esm/helpers/getThemeCSSRules.mjs.map +2 -2
- package/dist/esm/helpers/themes.js +10 -12
- package/dist/esm/helpers/themes.js.map +2 -2
- package/dist/esm/helpers/themes.mjs +10 -12
- package/dist/esm/helpers/themes.mjs.map +2 -2
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/index.mjs.map +2 -2
- package/package.json +9 -9
- package/src/helpers/ThemeManager.tsx +4 -4
- package/src/helpers/getThemeCSSRules.ts +82 -50
- package/src/helpers/themes.ts +10 -13
- package/src/index.ts +1 -0
- package/types/helpers/getThemeCSSRules.d.ts.map +1 -1
- package/types/helpers/themes.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
|
@@ -41,80 +41,112 @@ export function getThemeCSSRules({
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
const isDarkOrLightBase = themeName === 'dark' || themeName === 'light'
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
const selectorsSet = new Set(
|
|
45
|
+
names.map((name) => {
|
|
46
|
+
return `${CNP}${name}`
|
|
47
|
+
})
|
|
48
|
+
)
|
|
47
49
|
|
|
48
50
|
// since we dont specify dark/light in classnames we have to do an awkward specificity war
|
|
49
51
|
// use config.maxDarkLightNesting to determine how deep you can nest until it breaks
|
|
50
52
|
if (hasDarkLight) {
|
|
51
53
|
for (const subName of names) {
|
|
52
|
-
const isDark =
|
|
53
|
-
const
|
|
54
|
+
const isDark = themeName === 'dark' || subName.startsWith('dark_')
|
|
55
|
+
const maxDepth = config.maxDarkLightNesting ?? 3
|
|
54
56
|
|
|
55
57
|
if (!(isDark || subName.startsWith('light_'))) {
|
|
56
58
|
// neither light nor dark subtheme, just generate one selector with :root:root which
|
|
57
59
|
// will override all :root light/dark selectors generated below
|
|
58
|
-
|
|
60
|
+
selectorsSet.add(`:root:root ${CNP}${subName}`)
|
|
59
61
|
continue
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
const childSelector = `${CNP}${subName.replace(isDark ? 'dark_' : 'light_', '')}`
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (isOdd && pi < 3) continue
|
|
73
|
-
const parents = new Array(pi + 1).fill(undefined).map((_, psi) => {
|
|
74
|
-
return `${CNP}${psi % 2 === 0 ? stronger : weaker}`
|
|
75
|
-
})
|
|
76
|
-
let parentSelectors = parents.length > 1 ? parents.slice(1) : parents
|
|
77
|
-
if (isOdd) {
|
|
78
|
-
const [_first, second, ...rest] = parentSelectors
|
|
79
|
-
parentSelectors = [second, ...rest, second]
|
|
65
|
+
|
|
66
|
+
const [altLightDark, altSubTheme] = [
|
|
67
|
+
isDark ? ['dark', 'light'] : ['light', 'dark'],
|
|
68
|
+
isDark ? ['dark', 'sub_theme'] : ['light', 'sub_theme'],
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
for (const order of [altLightDark, altSubTheme]) {
|
|
72
|
+
if (isDarkOrLightBase) {
|
|
73
|
+
order.reverse()
|
|
80
74
|
}
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
75
|
+
const [stronger, weaker] = order
|
|
76
|
+
const numSelectors = Math.round(maxDepth * 1.5)
|
|
77
|
+
|
|
78
|
+
for (let depth = 0; depth < numSelectors; depth++) {
|
|
79
|
+
const isOdd = depth % 2 === 1
|
|
80
|
+
|
|
81
|
+
// wtf is this continue:
|
|
82
|
+
if (isOdd && depth < 3) {
|
|
83
|
+
continue
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const parents = new Array(depth + 1).fill(0).map((_, psi) => {
|
|
87
|
+
return `${CNP}${psi % 2 === 0 ? stronger : weaker}`
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
let parentSelectors = parents.length > 1 ? parents.slice(1) : parents
|
|
91
|
+
|
|
92
|
+
if (isOdd) {
|
|
93
|
+
const [_first, second, ...rest] = parentSelectors
|
|
94
|
+
parentSelectors = [second, ...rest, second]
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const lastParentSelector = parentSelectors[parentSelectors.length - 1]
|
|
98
|
+
const nextChildSelector =
|
|
85
99
|
childSelector === lastParentSelector ? '' : childSelector
|
|
86
|
-
|
|
87
|
-
|
|
100
|
+
|
|
101
|
+
// for light/dark/light:
|
|
102
|
+
selectorsSet.add(`${parentSelectors.join(' ')} ${nextChildSelector}`.trim())
|
|
103
|
+
}
|
|
88
104
|
}
|
|
89
105
|
}
|
|
90
106
|
}
|
|
91
107
|
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
x.
|
|
99
|
-
x
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const css = `${selectorsString
|
|
108
|
+
const selectors = [...selectorsSet]
|
|
109
|
+
|
|
110
|
+
// only do our :root attach if it's not light/dark - not support sub themes on root saves a lot of effort/size
|
|
111
|
+
// this isBaseTheme logic could probably be done more efficiently above
|
|
112
|
+
const selectorsString = selectors
|
|
113
|
+
.map((x) => {
|
|
114
|
+
const rootSep = isBaseTheme(x) && config.themeClassNameOnRoot ? '' : ' '
|
|
115
|
+
return `:root${rootSep}${x}`
|
|
116
|
+
})
|
|
117
|
+
.join(', ')
|
|
118
|
+
|
|
119
|
+
const css = `${selectorsString} {${vars}}`
|
|
104
120
|
cssRuleSets.push(css)
|
|
105
121
|
|
|
106
|
-
if (config.shouldAddPrefersColorThemes
|
|
107
|
-
|
|
122
|
+
if (config.shouldAddPrefersColorThemes) {
|
|
123
|
+
const bgString = variableToString(theme.background)
|
|
124
|
+
const fgString = variableToString(theme.color)
|
|
125
|
+
const bodyRules = `body{background:${bgString};color:${fgString};}`
|
|
108
126
|
const isDark = themeName.startsWith('dark')
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
127
|
+
const baseName = isDark ? 'dark' : 'light'
|
|
128
|
+
const lessSpecificSelectors = selectors
|
|
129
|
+
.map((x) => {
|
|
130
|
+
if (x == darkSelector || x === lightSelector) return `:root`
|
|
131
|
+
return x.replace(/^\.t_(dark|light) /, '').trim()
|
|
132
|
+
})
|
|
133
|
+
.filter(Boolean)
|
|
134
|
+
.join(', ')
|
|
135
|
+
const themeRules = `${lessSpecificSelectors} {${vars}}`
|
|
136
|
+
const prefersMediaSelectors = `@media(prefers-color-scheme:${baseName}){
|
|
137
|
+
${bodyRules}
|
|
138
|
+
${themeRules}
|
|
115
139
|
}`
|
|
116
|
-
)
|
|
140
|
+
cssRuleSets.push(prefersMediaSelectors)
|
|
117
141
|
}
|
|
118
142
|
|
|
119
143
|
return cssRuleSets
|
|
120
144
|
}
|
|
145
|
+
|
|
146
|
+
const darkSelector = '.t_dark'
|
|
147
|
+
const lightSelector = '.t_light'
|
|
148
|
+
const isBaseTheme = (x: string) =>
|
|
149
|
+
x === darkSelector ||
|
|
150
|
+
x === lightSelector ||
|
|
151
|
+
x.startsWith('.t_dark ') ||
|
|
152
|
+
x.startsWith('.t_light ')
|
package/src/helpers/themes.ts
CHANGED
|
@@ -42,23 +42,20 @@ export function proxyThemeToParents(
|
|
|
42
42
|
return cur.join('_')
|
|
43
43
|
})
|
|
44
44
|
|
|
45
|
-
const
|
|
45
|
+
const numParents = parents.length
|
|
46
46
|
|
|
47
47
|
// proxy fallback values to parent theme values
|
|
48
48
|
return new Proxy(theme, {
|
|
49
49
|
get(target, key) {
|
|
50
|
-
if (key === GetThemeUnwrapped)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (!parent) continue
|
|
60
|
-
if (Reflect.has(parent, key)) {
|
|
61
|
-
return Reflect.get(parent, key)
|
|
50
|
+
if (key === GetThemeUnwrapped) return theme
|
|
51
|
+
if (numParents && !Reflect.has(target, key)) {
|
|
52
|
+
// check parents
|
|
53
|
+
for (let i = numParents - 1; i >= 0; i--) {
|
|
54
|
+
const parent = themes[parents[i]]
|
|
55
|
+
if (!parent) continue
|
|
56
|
+
if (Reflect.has(parent, key)) {
|
|
57
|
+
return Reflect.get(parent, key)
|
|
58
|
+
}
|
|
62
59
|
}
|
|
63
60
|
}
|
|
64
61
|
return Reflect.get(target, key)
|
package/src/index.ts
CHANGED
|
@@ -33,6 +33,7 @@ export * from './helpers/matchMedia.js'
|
|
|
33
33
|
export * from './helpers/proxyThemeVariables.js'
|
|
34
34
|
export * from './helpers/themeable.js'
|
|
35
35
|
export * from './helpers/withStaticProperties.js'
|
|
36
|
+
export * from './helpers/normalizeColor.js'
|
|
36
37
|
|
|
37
38
|
export * from './contexts/ButtonNestingContext.js'
|
|
38
39
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getThemeCSSRules.d.ts","sourceRoot":"","sources":["../../src/helpers/getThemeCSSRules.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGlE,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,SAAS,EACT,KAAK,EACL,KAAK,GACN,EAAE;IACD,MAAM,EAAE,kBAAkB,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,
|
|
1
|
+
{"version":3,"file":"getThemeCSSRules.d.ts","sourceRoot":"","sources":["../../src/helpers/getThemeCSSRules.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGlE,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,SAAS,EACT,KAAK,EACL,KAAK,GACN,EAAE;IACD,MAAM,EAAE,kBAAkB,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,YA8HA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/helpers/themes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIhD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,QAmB1D;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/helpers/themes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIhD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,QAmB1D;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,OAiCrC"}
|
package/types/index.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ export * from './helpers/matchMedia.js';
|
|
|
30
30
|
export * from './helpers/proxyThemeVariables.js';
|
|
31
31
|
export * from './helpers/themeable.js';
|
|
32
32
|
export * from './helpers/withStaticProperties.js';
|
|
33
|
+
export * from './helpers/normalizeColor.js';
|
|
33
34
|
export * from './contexts/ButtonNestingContext.js';
|
|
34
35
|
export * from './hooks/useId.js';
|
|
35
36
|
export * from './hooks/useIsTouchDevice.js';
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AAErC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE/E,cAAc,0BAA0B,CAAA;AAExC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,oCAAoC,CAAA;AAClD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,kCAAkC,CAAA;AAChD,cAAc,wBAAwB,CAAA;AACtC,cAAc,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AAErC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE/E,cAAc,0BAA0B,CAAA;AAExC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,oCAAoC,CAAA;AAClD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,kCAAkC,CAAA;AAChD,cAAc,wBAAwB,CAAA;AACtC,cAAc,mCAAmC,CAAA;AACjD,cAAc,6BAA6B,CAAA;AAE3C,cAAc,oCAAoC,CAAA;AAElD,cAAc,kBAAkB,CAAA;AAChC,cAAc,6BAA6B,CAAA;AAE3C,OAAO,EACL,cAAc,EACd,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,qBAAqB,CAAA;AAC5B,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AAEnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mCAAmC,CAAA;AACjD,cAAc,kBAAkB,CAAA;AAChC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,cAAc,4BAA4B,CAAA;AAE1C,cAAc,2BAA2B,CAAA;AACzC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAElC,cAAc,iBAAiB,CAAA"}
|