@tamagui/web 1.124.4 → 1.124.6
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/insertStyleRule.js.map +1 -1
- package/dist/cjs/helpers/insertStyleRule.native.js.map +1 -1
- package/dist/cjs/hooks/getThemeProxied.cjs +21 -15
- package/dist/cjs/hooks/getThemeProxied.js +20 -12
- package/dist/cjs/hooks/getThemeProxied.js.map +1 -1
- package/dist/cjs/hooks/getThemeProxied.native.js +25 -21
- package/dist/cjs/hooks/getThemeProxied.native.js.map +2 -2
- package/dist/cjs/hooks/useThemeState.cjs +76 -62
- package/dist/cjs/hooks/useThemeState.js +51 -39
- package/dist/cjs/hooks/useThemeState.js.map +2 -2
- package/dist/cjs/hooks/useThemeState.native.js +38 -30
- package/dist/cjs/hooks/useThemeState.native.js.map +2 -2
- package/dist/esm/helpers/insertStyleRule.js.map +1 -1
- package/dist/esm/helpers/insertStyleRule.mjs.map +1 -1
- package/dist/esm/helpers/insertStyleRule.native.js.map +1 -1
- package/dist/esm/hooks/getThemeProxied.js +20 -11
- package/dist/esm/hooks/getThemeProxied.js.map +1 -1
- package/dist/esm/hooks/getThemeProxied.mjs +20 -14
- package/dist/esm/hooks/getThemeProxied.mjs.map +1 -1
- package/dist/esm/hooks/getThemeProxied.native.js +26 -21
- package/dist/esm/hooks/getThemeProxied.native.js.map +2 -2
- package/dist/esm/hooks/useThemeState.js +51 -39
- package/dist/esm/hooks/useThemeState.js.map +2 -2
- package/dist/esm/hooks/useThemeState.mjs +76 -63
- package/dist/esm/hooks/useThemeState.mjs.map +1 -1
- package/dist/esm/hooks/useThemeState.native.js +37 -30
- package/dist/esm/hooks/useThemeState.native.js.map +2 -2
- package/package.json +11 -11
- package/src/hooks/getThemeProxied.ts +19 -13
- package/src/hooks/useThemeState.ts +99 -57
- package/types/helpers/insertStyleRule.d.ts.map +1 -1
- package/types/hooks/getThemeProxied.d.ts +2 -2
- package/types/hooks/getThemeProxied.d.ts.map +1 -1
- package/types/hooks/useThemeState.d.ts +1 -0
- package/types/hooks/useThemeState.d.ts.map +1 -1
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { useIsomorphicLayoutEffect } from "@tamagui/constants";
|
|
2
2
|
import { createContext, useCallback, useContext, useId, useSyncExternalStore } from "react";
|
|
3
3
|
import { getConfig } from "../config";
|
|
4
|
-
var ThemeStateContext = createContext(""), allListeners = /* @__PURE__ */ new Map(), listenersByParent = {}, states = /* @__PURE__ */ new Map(), forceUpdateThemes = function() {
|
|
5
|
-
allListeners.forEach(function(cb) {
|
|
4
|
+
var ThemeStateContext = createContext(""), keysToId = /* @__PURE__ */ new WeakMap(), allListeners = /* @__PURE__ */ new Map(), listenersByParent = {}, hasRenderedOnce = /* @__PURE__ */ new WeakMap(), pendingUpdate = /* @__PURE__ */ new Map(), states = /* @__PURE__ */ new Map(), shouldForce = !1, forceUpdateThemes = function() {
|
|
5
|
+
cacheVersion++, shouldForce = !0, allListeners.forEach(function(cb) {
|
|
6
6
|
return cb();
|
|
7
7
|
});
|
|
8
8
|
}, getThemeState = function(id) {
|
|
9
9
|
return states.get(id);
|
|
10
|
-
}, rootThemeState = null, getRootThemeState = function() {
|
|
10
|
+
}, cache = /* @__PURE__ */ new Map(), cacheVersion = 0, themes = null, rootThemeState = null, getRootThemeState = function() {
|
|
11
11
|
return rootThemeState;
|
|
12
|
-
},
|
|
12
|
+
}, useThemeState = function(props) {
|
|
13
13
|
var isRoot = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : !1, keys = arguments.length > 2 ? arguments[2] : void 0, { disable } = props, parentId = useContext(ThemeStateContext);
|
|
14
14
|
if (disable)
|
|
15
15
|
return states.get(parentId) || {
|
|
@@ -20,24 +20,29 @@ var ThemeStateContext = createContext(""), allListeners = /* @__PURE__ */ new Ma
|
|
|
20
20
|
};
|
|
21
21
|
var id = useId(), subscribe = useCallback(function(cb) {
|
|
22
22
|
var _listenersByParent, _parentId;
|
|
23
|
-
return (_listenersByParent = listenersByParent)[_parentId = parentId] || (_listenersByParent[_parentId] = /* @__PURE__ */ new Set()), listenersByParent[parentId].add(id), allListeners.set(id,
|
|
23
|
+
return (_listenersByParent = listenersByParent)[_parentId = parentId] || (_listenersByParent[_parentId] = /* @__PURE__ */ new Set()), listenersByParent[parentId].add(id), allListeners.set(id, function() {
|
|
24
|
+
pendingUpdate.set(id, shouldForce ? "force" : !0), cb();
|
|
25
|
+
}), function() {
|
|
24
26
|
allListeners.delete(id), listenersByParent[parentId].delete(id);
|
|
25
27
|
};
|
|
26
28
|
}, [
|
|
27
29
|
id,
|
|
28
|
-
parentId
|
|
29
|
-
keys
|
|
30
|
+
parentId
|
|
30
31
|
]), propsKey = getPropsKey(props), getSnapshot = function() {
|
|
31
|
-
|
|
32
|
+
var _keys_current, _props_needsUpdate, last = states.get(id), needsUpdate = props.name === "light" || props.name === "dark" ? !0 : hasRenderedOnce.get(keys) ? !(keys == null || (_keys_current = keys.current) === null || _keys_current === void 0) && _keys_current.size ? !0 : (_props_needsUpdate = props.needsUpdate) === null || _props_needsUpdate === void 0 ? void 0 : _props_needsUpdate.call(props) : !0, parentState = states.get(parentId), cacheKey = `${cacheVersion}${id}${propsKey}${parentState?.name || ""}${isRoot}`;
|
|
33
|
+
if (!needsUpdate && cache.has(cacheKey))
|
|
34
|
+
return cache.get(cacheKey);
|
|
35
|
+
var next = getSnapshotFrom(last, props, propsKey, isRoot, id, parentId, needsUpdate, pendingUpdate.get(id));
|
|
36
|
+
return last !== next && (pendingUpdate.delete(id), states.set(id, next), cache.set(id, next), process.env.NODE_ENV === "development" && props.debug && props.debug !== "profile" && console.warn(` \xB7 useTheme(${id}) UPDATE from`, last, "to", next)), next;
|
|
32
37
|
};
|
|
33
38
|
process.env.NODE_ENV === "development" && globalThis.time && globalThis.time`theme-prep-uses`;
|
|
34
39
|
var state = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
35
40
|
return useIsomorphicLayoutEffect(function() {
|
|
41
|
+
if (!hasRenderedOnce.get(keys)) {
|
|
42
|
+
hasRenderedOnce.set(keys, !0);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
36
45
|
if (propsKey) {
|
|
37
|
-
if (!HasRenderedOnce.has(keys)) {
|
|
38
|
-
HasRenderedOnce.set(keys, !0);
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
46
|
if (process.env.NODE_ENV === "development" && props.debug && props.debug !== "profile") {
|
|
42
47
|
var _states_get;
|
|
43
48
|
console.warn(` \xB7 useTheme(${id}) scheduleUpdate`, propsKey, (_states_get = states.get(id)) === null || _states_get === void 0 ? void 0 : _states_get.name);
|
|
@@ -47,31 +52,31 @@ var ThemeStateContext = createContext(""), allListeners = /* @__PURE__ */ new Ma
|
|
|
47
52
|
}, [
|
|
48
53
|
keys,
|
|
49
54
|
propsKey
|
|
50
|
-
]),
|
|
51
|
-
state,
|
|
52
|
-
parentId,
|
|
53
|
-
props,
|
|
54
|
-
propsKey,
|
|
55
|
-
id,
|
|
56
|
-
parentState: states.get(parentId)
|
|
57
|
-
}), console.groupEnd()), state.id === id ? {
|
|
55
|
+
]), state.id === id ? {
|
|
58
56
|
...state,
|
|
59
57
|
isNew: !0
|
|
60
58
|
} : state;
|
|
61
|
-
},
|
|
62
|
-
var isRoot = arguments.length >
|
|
59
|
+
}, getSnapshotFrom = function(lastState, props, propsKey) {
|
|
60
|
+
var isRoot = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : !1, id = arguments.length > 4 ? arguments[4] : void 0, parentId = arguments.length > 5 ? arguments[5] : void 0, needsUpdate = arguments.length > 6 ? arguments[6] : void 0, pendingUpdate2 = arguments.length > 7 ? arguments[7] : void 0, parentState = states.get(parentId);
|
|
63
61
|
themes || (themes = getConfig().themes);
|
|
64
|
-
var
|
|
62
|
+
var name = !propsKey && pendingUpdate2 !== "force" ? null : getNewThemeName(parentState?.name, props, pendingUpdate2 === "force" ? !0 : !!needsUpdate), isSameAsParent = !!(!name && propsKey);
|
|
65
63
|
if (process.env.NODE_ENV === "development" && props.debug && props.debug !== "profile") {
|
|
66
64
|
var message = ` \xB7 useTheme(${id}) snapshot ${name}, parent ${parentState?.id} needsUpdate ${needsUpdate}`;
|
|
67
65
|
console.info(message);
|
|
68
66
|
}
|
|
69
|
-
var isSameAsParent = !name && propsKey;
|
|
70
67
|
if (parentState && isSameAsParent)
|
|
71
68
|
return parentState;
|
|
72
|
-
if (!name)
|
|
73
|
-
|
|
74
|
-
|
|
69
|
+
if (!name) {
|
|
70
|
+
var next = lastState ?? parentState;
|
|
71
|
+
if (needsUpdate && pendingUpdate2) {
|
|
72
|
+
var updated = {
|
|
73
|
+
...parentState || lastState
|
|
74
|
+
};
|
|
75
|
+
return updated;
|
|
76
|
+
}
|
|
77
|
+
return next;
|
|
78
|
+
}
|
|
79
|
+
if (pendingUpdate2 !== "force" && lastState && lastState.name === name)
|
|
75
80
|
return lastState;
|
|
76
81
|
var scheme = getScheme(name), _parentState_inverses, parentInverses = (_parentState_inverses = parentState?.inverses) !== null && _parentState_inverses !== void 0 ? _parentState_inverses : 0, isInverse = parentState && scheme !== parentState.scheme, inverses = parentInverses + (isInverse ? 1 : 0), nextState = {
|
|
77
82
|
id,
|
|
@@ -83,7 +88,7 @@ var ThemeStateContext = createContext(""), allListeners = /* @__PURE__ */ new Ma
|
|
|
83
88
|
inverses,
|
|
84
89
|
isInverse
|
|
85
90
|
};
|
|
86
|
-
return process.env.NODE_ENV === "development" && props.debug && props.debug !== "profile" && (console.groupCollapsed(` \xB7 useTheme(${id}) \u23ED\
|
|
91
|
+
return process.env.NODE_ENV === "development" && props.debug && props.debug !== "profile" && (console.groupCollapsed(` \xB7 useTheme(${id}) \u23ED\uFE0F2 ${name}`), console.info("state", nextState), console.groupEnd()), isRoot && (rootThemeState = nextState), pendingUpdate2 !== "force" && lastState && !needsUpdate ? (Object.assign(lastState, nextState), lastState) : nextState;
|
|
87
92
|
};
|
|
88
93
|
function scheduleUpdate(id) {
|
|
89
94
|
for (var queue = [
|
|
@@ -122,7 +127,7 @@ function getScheme(name) {
|
|
|
122
127
|
return validSchemes[name.split("_")[0]];
|
|
123
128
|
}
|
|
124
129
|
function getNewThemeName() {
|
|
125
|
-
var parentName = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", { name, reset, componentName, inverse } = arguments.length > 1 ? arguments[1] : void 0, forceUpdate = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : !1;
|
|
130
|
+
var parentName = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", { name, reset, componentName, inverse, debug } = arguments.length > 1 ? arguments[1] : void 0, forceUpdate = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : !1;
|
|
126
131
|
if (name && reset)
|
|
127
132
|
throw new Error(process.env.NODE_ENV === "production" ? "\u274C004" : "Cannot reset and set a new name at the same time.");
|
|
128
133
|
if (reset) {
|
|
@@ -158,7 +163,8 @@ function getNewThemeName() {
|
|
|
158
163
|
}
|
|
159
164
|
if (found) break;
|
|
160
165
|
}
|
|
161
|
-
if (
|
|
166
|
+
if (inverse) {
|
|
167
|
+
found || (found = parentName);
|
|
162
168
|
var scheme = found.split("_")[0];
|
|
163
169
|
found = found.replace(new RegExp(`^${scheme}`), scheme === "light" ? "dark" : "light");
|
|
164
170
|
}
|
|
@@ -178,6 +184,7 @@ export {
|
|
|
178
184
|
getRootThemeState,
|
|
179
185
|
getThemeState,
|
|
180
186
|
hasThemeUpdatingProps,
|
|
187
|
+
keysToId,
|
|
181
188
|
useThemeState
|
|
182
189
|
};
|
|
183
190
|
//# sourceMappingURL=useThemeState.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/hooks/Users/n8/tamagui/code/core/web/src/hooks/useThemeState.ts"],
|
|
4
|
-
"mappings": "AAAA,SAASA,iCAAiC;AAC1C,SACEC,eACAC,aACAC,YACAC,OACAC,4BAEK;AACP,SAASC,iBAAiB;AAiBnB,IAAMC,oBAAoBN,cAAkB,EAAA,
|
|
5
|
-
"names": ["useIsomorphicLayoutEffect", "createContext", "useCallback", "useContext", "useId", "useSyncExternalStore", "getConfig", "ThemeStateContext", "allListeners", "Map", "listenersByParent", "states", "forceUpdateThemes", "forEach", "cb", "getThemeState", "id", "get", "
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["useIsomorphicLayoutEffect", "createContext", "useCallback", "useContext", "useId", "useSyncExternalStore", "getConfig", "ThemeStateContext", "keysToId", "WeakMap", "allListeners", "Map", "listenersByParent", "hasRenderedOnce", "pendingUpdate", "states", "shouldForce", "forceUpdateThemes", "cacheVersion", "forEach", "cb", "getThemeState", "id", "get", "cache", "themes", "rootThemeState", "getRootThemeState", "useThemeState", "props", "isRoot", "keys", "disable", "parentId", "name", "theme", "light", "inverses", "subscribe", "Set", "add", "set", "delete", "propsKey", "getPropsKey", "getSnapshot", "last", "needsUpdate", "current", "size", "parentState", "cacheKey", "has", "next", "getSnapshotFrom", "process", "env", "NODE_ENV", "debug", "console", "warn", "globalThis", "time", "state", "scheduleUpdate", "isNew", "lastState", "getNewThemeName", "isSameAsParent", "Boolean", "message", "info", "updated", "scheme", "getScheme", "parentInverses", "isInverse", "nextState", "parentName", "groupCollapsed", "groupEnd", "Object", "assign", "queue", "visited", "length", "parent", "shift", "children", "childId", "push", "validSchemes", "dark", "split", "reset", "componentName", "inverse", "forceUpdate", "Error", "lastPartIndex", "lastIndexOf", "slice", "parentParts", "lastName", "toLowerCase", "pop", "subNames", "undefined", "filter", "found", "max", "i", "base", "join", "subName", "potential", "replace", "RegExp", "forceClassName", "hasThemeUpdatingProps"]
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/web",
|
|
3
|
-
"version": "1.124.
|
|
3
|
+
"version": "1.124.6",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"main": "dist/cjs",
|
|
6
6
|
"module": "dist/esm",
|
|
@@ -27,22 +27,22 @@
|
|
|
27
27
|
"reset.css"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@tamagui/compose-refs": "1.124.
|
|
31
|
-
"@tamagui/constants": "1.124.
|
|
32
|
-
"@tamagui/helpers": "1.124.
|
|
33
|
-
"@tamagui/normalize-css-color": "1.124.
|
|
34
|
-
"@tamagui/timer": "1.124.
|
|
35
|
-
"@tamagui/types": "1.124.
|
|
36
|
-
"@tamagui/use-did-finish-ssr": "1.124.
|
|
37
|
-
"@tamagui/use-event": "1.124.
|
|
38
|
-
"@tamagui/use-force-update": "1.124.
|
|
30
|
+
"@tamagui/compose-refs": "1.124.6",
|
|
31
|
+
"@tamagui/constants": "1.124.6",
|
|
32
|
+
"@tamagui/helpers": "1.124.6",
|
|
33
|
+
"@tamagui/normalize-css-color": "1.124.6",
|
|
34
|
+
"@tamagui/timer": "1.124.6",
|
|
35
|
+
"@tamagui/types": "1.124.6",
|
|
36
|
+
"@tamagui/use-did-finish-ssr": "1.124.6",
|
|
37
|
+
"@tamagui/use-event": "1.124.6",
|
|
38
|
+
"@tamagui/use-force-update": "1.124.6"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"react": "*",
|
|
42
42
|
"react-dom": "*"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@tamagui/build": "1.124.
|
|
45
|
+
"@tamagui/build": "1.124.6",
|
|
46
46
|
"@testing-library/react": "^16.1.0",
|
|
47
47
|
"csstype": "^3.0.10",
|
|
48
48
|
"react": "*",
|
|
@@ -11,7 +11,7 @@ import type {
|
|
|
11
11
|
VariableValGeneric,
|
|
12
12
|
} from '../types'
|
|
13
13
|
import { doesRootSchemeMatchSystem } from './doesRootSchemeMatchSystem'
|
|
14
|
-
import type
|
|
14
|
+
import { keysToId, type ThemeState } from './useThemeState'
|
|
15
15
|
|
|
16
16
|
export type ThemeProxied = {
|
|
17
17
|
[Key in keyof ThemeParsed | keyof Tokens['color']]: ThemeGettable<
|
|
@@ -52,34 +52,32 @@ const cache: Map<ThemeParsed, ThemeProxied> = new Map()
|
|
|
52
52
|
|
|
53
53
|
let curKeys: MutableRefObject<Set<string> | null>
|
|
54
54
|
let curProps: UseThemeWithStateProps
|
|
55
|
+
let curState: ThemeState | null
|
|
55
56
|
|
|
56
57
|
const emptyObject = {}
|
|
57
58
|
|
|
58
59
|
export function getThemeProxied(
|
|
59
60
|
// underscore to prevent accidental usage below
|
|
60
61
|
_props: UseThemeWithStateProps,
|
|
61
|
-
|
|
62
|
+
_state: ThemeState | null,
|
|
62
63
|
_keys: MutableRefObject<Set<string> | null>
|
|
63
64
|
): ThemeProxied {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (!theme) {
|
|
65
|
+
if (!_state?.theme) {
|
|
67
66
|
return emptyObject
|
|
68
67
|
}
|
|
69
68
|
|
|
70
69
|
curKeys = _keys
|
|
71
70
|
curProps = _props
|
|
71
|
+
curState = _state
|
|
72
72
|
|
|
73
|
-
if (cache.has(theme)) {
|
|
74
|
-
const proxied = cache.get(theme)!
|
|
73
|
+
if (cache.has(curState.theme)) {
|
|
74
|
+
const proxied = cache.get(curState.theme)!
|
|
75
75
|
return proxied
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
// first time running on this theme, create:
|
|
79
79
|
// from here on only use current*
|
|
80
80
|
|
|
81
|
-
const { name, scheme } = state
|
|
82
|
-
|
|
83
81
|
const config = getConfig()
|
|
84
82
|
|
|
85
83
|
function track(key: string) {
|
|
@@ -89,12 +87,17 @@ export function getThemeProxied(
|
|
|
89
87
|
}
|
|
90
88
|
curKeys.current.add(key)
|
|
91
89
|
if (process.env.NODE_ENV === 'development' && curProps.debug) {
|
|
92
|
-
|
|
90
|
+
const realId = keysToId.get(curKeys)
|
|
91
|
+
console.info(
|
|
92
|
+
` 🎨 useTheme(${realId}) tracking new key: ${key}`,
|
|
93
|
+
curKeys,
|
|
94
|
+
globalThis['states']?.get(realId + 1)
|
|
95
|
+
)
|
|
93
96
|
}
|
|
94
97
|
}
|
|
95
98
|
|
|
96
99
|
const proxied = Object.fromEntries(
|
|
97
|
-
Object.entries(theme).flatMap(([key, value]) => {
|
|
100
|
+
Object.entries(_state.theme).flatMap(([key, value]) => {
|
|
98
101
|
const proxied = {
|
|
99
102
|
...value,
|
|
100
103
|
get val() {
|
|
@@ -106,7 +109,10 @@ export function getThemeProxied(
|
|
|
106
109
|
return value.val
|
|
107
110
|
},
|
|
108
111
|
get(platform?: 'web') {
|
|
112
|
+
if (!curState) return
|
|
113
|
+
|
|
109
114
|
const outVal = getVariable(value)
|
|
115
|
+
const { name, scheme, inverses } = curState
|
|
110
116
|
|
|
111
117
|
if (process.env.TAMAGUI_TARGET === 'native') {
|
|
112
118
|
// ios can avoid re-rendering in some cases when we are using a root light/dark
|
|
@@ -117,7 +123,7 @@ export function getThemeProxied(
|
|
|
117
123
|
isIos &&
|
|
118
124
|
!curProps.deopt &&
|
|
119
125
|
getSetting('fastSchemeChange') &&
|
|
120
|
-
|
|
126
|
+
inverses === 0 &&
|
|
121
127
|
doesRootSchemeMatchSystem()
|
|
122
128
|
|
|
123
129
|
if (shouldOptimize) {
|
|
@@ -159,7 +165,7 @@ export function getThemeProxied(
|
|
|
159
165
|
})
|
|
160
166
|
) as ThemeProxied
|
|
161
167
|
|
|
162
|
-
cache.set(theme, proxied)
|
|
168
|
+
cache.set(_state.theme, proxied)
|
|
163
169
|
|
|
164
170
|
return proxied
|
|
165
171
|
}
|
|
@@ -26,23 +26,33 @@ export type ThemeState = {
|
|
|
26
26
|
|
|
27
27
|
export const ThemeStateContext = createContext<ID>('')
|
|
28
28
|
|
|
29
|
+
export const keysToId = new WeakMap()
|
|
30
|
+
|
|
29
31
|
const allListeners = new Map<ID, Function>()
|
|
30
32
|
const listenersByParent: Record<ID, Set<ID>> = {}
|
|
33
|
+
const hasRenderedOnce = new WeakMap<any, boolean>()
|
|
34
|
+
const pendingUpdate = new Map<any, boolean | 'force'>()
|
|
31
35
|
|
|
32
36
|
// TODO this will gain memory over time but its not going to be a ton
|
|
33
37
|
const states: Map<ID, ThemeState | undefined> = new Map()
|
|
34
38
|
|
|
39
|
+
let shouldForce = false
|
|
35
40
|
export const forceUpdateThemes = () => {
|
|
41
|
+
cacheVersion++
|
|
42
|
+
shouldForce = true
|
|
36
43
|
allListeners.forEach((cb) => cb())
|
|
37
44
|
}
|
|
38
45
|
|
|
39
46
|
export const getThemeState = (id: ID) => states.get(id)
|
|
40
47
|
|
|
48
|
+
const cache = new Map<string, ThemeState>()
|
|
49
|
+
let cacheVersion = 0
|
|
50
|
+
|
|
51
|
+
let themes: Record<string, ThemeParsed> | null = null
|
|
52
|
+
|
|
41
53
|
let rootThemeState: ThemeState | null = null
|
|
42
54
|
export const getRootThemeState = () => rootThemeState
|
|
43
55
|
|
|
44
|
-
const HasRenderedOnce = new WeakMap<any, boolean>()
|
|
45
|
-
|
|
46
56
|
export const useThemeState = (
|
|
47
57
|
props: UseThemeWithStateProps,
|
|
48
58
|
isRoot = false,
|
|
@@ -63,23 +73,70 @@ export const useThemeState = (
|
|
|
63
73
|
}
|
|
64
74
|
|
|
65
75
|
const id = useId()
|
|
76
|
+
|
|
66
77
|
const subscribe = useCallback(
|
|
67
78
|
(cb: Function) => {
|
|
68
79
|
listenersByParent[parentId] ||= new Set()
|
|
69
80
|
listenersByParent[parentId].add(id)
|
|
70
|
-
allListeners.set(id,
|
|
81
|
+
allListeners.set(id, () => {
|
|
82
|
+
pendingUpdate.set(id, shouldForce ? 'force' : true)
|
|
83
|
+
cb()
|
|
84
|
+
})
|
|
71
85
|
return () => {
|
|
72
86
|
allListeners.delete(id)
|
|
73
87
|
listenersByParent[parentId].delete(id)
|
|
74
88
|
}
|
|
75
89
|
},
|
|
76
|
-
[id, parentId
|
|
90
|
+
[id, parentId]
|
|
77
91
|
)
|
|
78
92
|
|
|
79
93
|
const propsKey = getPropsKey(props)
|
|
80
94
|
|
|
81
95
|
const getSnapshot = () => {
|
|
82
|
-
|
|
96
|
+
const last = states.get(id)
|
|
97
|
+
const needsUpdate =
|
|
98
|
+
props.name === 'light' || props.name === 'dark'
|
|
99
|
+
? true
|
|
100
|
+
: !hasRenderedOnce.get(keys)
|
|
101
|
+
? true
|
|
102
|
+
: keys?.current?.size
|
|
103
|
+
? true
|
|
104
|
+
: props.needsUpdate?.()
|
|
105
|
+
|
|
106
|
+
const parentState = states.get(parentId)
|
|
107
|
+
const cacheKey = `${cacheVersion}${id}${propsKey}${parentState?.name || ''}${isRoot}`
|
|
108
|
+
|
|
109
|
+
if (!needsUpdate) {
|
|
110
|
+
if (cache.has(cacheKey)) {
|
|
111
|
+
return cache.get(cacheKey)!
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const next = getSnapshotFrom(
|
|
116
|
+
last,
|
|
117
|
+
props,
|
|
118
|
+
propsKey,
|
|
119
|
+
isRoot,
|
|
120
|
+
id,
|
|
121
|
+
parentId,
|
|
122
|
+
needsUpdate,
|
|
123
|
+
pendingUpdate.get(id)
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
if (last !== next) {
|
|
127
|
+
pendingUpdate.delete(id)
|
|
128
|
+
states.set(id, next)
|
|
129
|
+
cache.set(id, next)
|
|
130
|
+
if (
|
|
131
|
+
process.env.NODE_ENV === 'development' &&
|
|
132
|
+
props.debug &&
|
|
133
|
+
props.debug !== 'profile'
|
|
134
|
+
) {
|
|
135
|
+
console.warn(` · useTheme(${id}) UPDATE from`, last, 'to', next)
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return next
|
|
83
140
|
}
|
|
84
141
|
|
|
85
142
|
if (process.env.NODE_ENV === 'development' && globalThis.time)
|
|
@@ -88,11 +145,11 @@ export const useThemeState = (
|
|
|
88
145
|
const state = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)
|
|
89
146
|
|
|
90
147
|
useIsomorphicLayoutEffect(() => {
|
|
91
|
-
if (!
|
|
92
|
-
|
|
93
|
-
HasRenderedOnce.set(keys, true)
|
|
148
|
+
if (!hasRenderedOnce.get(keys)) {
|
|
149
|
+
hasRenderedOnce.set(keys, true)
|
|
94
150
|
return
|
|
95
151
|
}
|
|
152
|
+
if (!propsKey) return
|
|
96
153
|
if (
|
|
97
154
|
process.env.NODE_ENV === 'development' &&
|
|
98
155
|
props.debug &&
|
|
@@ -103,52 +160,35 @@ export const useThemeState = (
|
|
|
103
160
|
scheduleUpdate(id)
|
|
104
161
|
}, [keys, propsKey])
|
|
105
162
|
|
|
106
|
-
if (process.env.NODE_ENV === 'development' && props.debug) {
|
|
107
|
-
console.groupCollapsed(
|
|
108
|
-
` · useTheme(${id}) =>`,
|
|
109
|
-
state.name,
|
|
110
|
-
id === state.id ? '🎉' : '⏭️'
|
|
111
|
-
)
|
|
112
|
-
console.info({
|
|
113
|
-
state,
|
|
114
|
-
parentId,
|
|
115
|
-
props,
|
|
116
|
-
propsKey,
|
|
117
|
-
id,
|
|
118
|
-
parentState: states.get(parentId),
|
|
119
|
-
})
|
|
120
|
-
console.groupEnd()
|
|
121
|
-
}
|
|
122
|
-
|
|
123
163
|
return state.id === id ? { ...state, isNew: true } : state
|
|
124
164
|
}
|
|
125
165
|
|
|
126
|
-
// const cache = new Map<string, ThemeState>()
|
|
127
|
-
let themes: Record<string, ThemeParsed> | null = null
|
|
128
|
-
|
|
129
166
|
const getSnapshotFrom = (
|
|
167
|
+
lastState: ThemeState | undefined,
|
|
130
168
|
props: UseThemeWithStateProps,
|
|
131
169
|
propsKey: string,
|
|
132
170
|
isRoot = false,
|
|
133
171
|
id: string,
|
|
134
172
|
parentId: string,
|
|
135
|
-
|
|
173
|
+
needsUpdate: boolean | undefined,
|
|
174
|
+
pendingUpdate: boolean | 'force' | undefined
|
|
136
175
|
): ThemeState => {
|
|
137
|
-
const needsUpdate = keys?.current?.size || props.needsUpdate?.()
|
|
138
176
|
const parentState = states.get(parentId)
|
|
139
177
|
|
|
140
|
-
// const cacheKey = `${id}${propsKey}${needsUpdate}${parentState?.name || ''}${isRoot}`
|
|
141
|
-
// if (cache.has(cacheKey)) {
|
|
142
|
-
// return cache.get(cacheKey)!
|
|
143
|
-
// }
|
|
144
|
-
|
|
145
178
|
if (!themes) {
|
|
146
179
|
themes = getConfig().themes
|
|
147
180
|
}
|
|
148
181
|
|
|
149
|
-
const
|
|
182
|
+
const name =
|
|
183
|
+
!propsKey && pendingUpdate !== 'force'
|
|
184
|
+
? null
|
|
185
|
+
: getNewThemeName(
|
|
186
|
+
parentState?.name,
|
|
187
|
+
props,
|
|
188
|
+
pendingUpdate === 'force' ? true : !!needsUpdate
|
|
189
|
+
)
|
|
150
190
|
|
|
151
|
-
const
|
|
191
|
+
const isSameAsParent = Boolean(!name && propsKey) // name = null if matching parent and has props
|
|
152
192
|
|
|
153
193
|
if (
|
|
154
194
|
process.env.NODE_ENV === 'development' &&
|
|
@@ -160,32 +200,27 @@ const getSnapshotFrom = (
|
|
|
160
200
|
console.info(message)
|
|
161
201
|
} else {
|
|
162
202
|
console.groupCollapsed(message)
|
|
163
|
-
console.
|
|
203
|
+
console.trace({ name, lastState, parentState, props, propsKey, id, isSameAsParent })
|
|
164
204
|
console.groupEnd()
|
|
165
205
|
}
|
|
166
206
|
}
|
|
167
207
|
|
|
168
|
-
const isSameAsParent = !name && propsKey // name = null if matching parent and has props
|
|
169
208
|
if (parentState && isSameAsParent) {
|
|
170
209
|
return parentState
|
|
171
210
|
}
|
|
172
211
|
|
|
173
212
|
if (!name) {
|
|
174
|
-
|
|
175
|
-
|
|
213
|
+
const next = lastState ?? parentState!
|
|
214
|
+
|
|
215
|
+
if (needsUpdate && pendingUpdate) {
|
|
216
|
+
const updated = { ...(parentState || lastState)! }
|
|
217
|
+
return updated
|
|
176
218
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
return parentState!
|
|
219
|
+
|
|
220
|
+
return next
|
|
180
221
|
}
|
|
181
222
|
|
|
182
|
-
if (
|
|
183
|
-
lastState &&
|
|
184
|
-
lastState.name === name
|
|
185
|
-
// &&
|
|
186
|
-
// (!parentState || parentState.name === lastState.parentName)
|
|
187
|
-
) {
|
|
188
|
-
// cache.set(cacheKey, lastState!)
|
|
223
|
+
if (pendingUpdate !== 'force' && lastState && lastState.name === name) {
|
|
189
224
|
return lastState
|
|
190
225
|
}
|
|
191
226
|
|
|
@@ -210,18 +245,24 @@ const getSnapshotFrom = (
|
|
|
210
245
|
props.debug &&
|
|
211
246
|
props.debug !== 'profile'
|
|
212
247
|
) {
|
|
213
|
-
console.groupCollapsed(` · useTheme(${id}) ⏭️ ${name}`)
|
|
248
|
+
console.groupCollapsed(` · useTheme(${id}) ⏭️2 ${name}`)
|
|
214
249
|
console.info('state', nextState)
|
|
215
250
|
console.groupEnd()
|
|
216
251
|
}
|
|
217
252
|
|
|
218
|
-
states.set(id, nextState)
|
|
219
|
-
// cache.set(cacheKey, nextState)
|
|
220
|
-
|
|
221
253
|
if (isRoot) {
|
|
222
254
|
rootThemeState = nextState
|
|
223
255
|
}
|
|
224
256
|
|
|
257
|
+
// we still update the state (not changing identity), that way children can properly resolve the right state
|
|
258
|
+
// but this one wont trigger an update
|
|
259
|
+
if (pendingUpdate !== 'force') {
|
|
260
|
+
if (lastState && !needsUpdate) {
|
|
261
|
+
Object.assign(lastState, nextState)
|
|
262
|
+
return lastState
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
225
266
|
return nextState
|
|
226
267
|
}
|
|
227
268
|
|
|
@@ -259,7 +300,7 @@ function getScheme(name: string) {
|
|
|
259
300
|
|
|
260
301
|
function getNewThemeName(
|
|
261
302
|
parentName = '',
|
|
262
|
-
{ name, reset, componentName, inverse }: UseThemeWithStateProps,
|
|
303
|
+
{ name, reset, componentName, inverse, debug }: UseThemeWithStateProps,
|
|
263
304
|
forceUpdate = false
|
|
264
305
|
): string | null {
|
|
265
306
|
if (name && reset) {
|
|
@@ -310,7 +351,8 @@ function getNewThemeName(
|
|
|
310
351
|
if (found) break
|
|
311
352
|
}
|
|
312
353
|
|
|
313
|
-
if (
|
|
354
|
+
if (inverse) {
|
|
355
|
+
found ||= parentName
|
|
314
356
|
const scheme = found.split('_')[0]
|
|
315
357
|
found = found.replace(new RegExp(`^${scheme}`), scheme === 'light' ? 'dark' : 'light')
|
|
316
358
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insertStyleRule.d.ts","sourceRoot":"","sources":["../../src/helpers/insertStyleRule.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,aAAa,EACb,aAAa,EAEb,YAAY,EACb,MAAM,UAAU,CAAA;AAQjB,eAAO,MAAM,kBAAkB,IAAK,CAAA;AAEpC,eAAO,MAAM,eAAe,8BAAqB,CAAA;AACjD,eAAO,MAAM,WAAW,gBAAgC,CAAA;AACxD,eAAO,MAAM,gBAAgB,UAA2B,CAAA;AA8BxD,wBAAgB,qBAAqB,SAkBpC;AAID,wBAAgB,aAAa,CAC3B,aAAa,UAAQ,EACrB,MAAM,CAAC,EAAE,YAAY,GACpB,aAAa,GAAG,SAAS,CA8B3B;AAiOD,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,uBAW9D;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,QAEjC;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,aAAa,QAqC5D;AAUD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"insertStyleRule.d.ts","sourceRoot":"","sources":["../../src/helpers/insertStyleRule.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,aAAa,EACb,aAAa,EAEb,YAAY,EACb,MAAM,UAAU,CAAA;AAQjB,eAAO,MAAM,kBAAkB,IAAK,CAAA;AAEpC,eAAO,MAAM,eAAe,8BAAqB,CAAA;AACjD,eAAO,MAAM,WAAW,gBAAgC,CAAA;AACxD,eAAO,MAAM,gBAAgB,UAA2B,CAAA;AA8BxD,wBAAgB,qBAAqB,SAkBpC;AAID,wBAAgB,aAAa,CAC3B,aAAa,UAAQ,EACrB,MAAM,CAAC,EAAE,YAAY,GACpB,aAAa,GAAG,SAAS,CA8B3B;AAiOD,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,uBAW9D;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,QAEjC;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,aAAa,QAqC5D;AAUD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,WAsBxD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { MutableRefObject } from 'react';
|
|
2
2
|
import type { Variable } from '../createVariable';
|
|
3
3
|
import type { ThemeParsed, Tokens, UseThemeWithStateProps, VariableVal, VariableValGeneric } from '../types';
|
|
4
|
-
import type
|
|
4
|
+
import { type ThemeState } from './useThemeState';
|
|
5
5
|
export type ThemeProxied = {
|
|
6
6
|
[Key in keyof ThemeParsed | keyof Tokens['color']]: ThemeGettable<Key extends keyof ThemeParsed ? ThemeParsed[Key] : Variable<any>>;
|
|
7
7
|
} & {
|
|
@@ -20,6 +20,6 @@ type ThemeGettable<Val> = Val & {
|
|
|
20
20
|
*/
|
|
21
21
|
get: (platform?: 'web') => string | (Val extends Variable<infer X> ? X extends VariableValGeneric ? any : Exclude<X, Variable> : Val extends VariableVal ? string | number : unknown);
|
|
22
22
|
};
|
|
23
|
-
export declare function getThemeProxied(_props: UseThemeWithStateProps,
|
|
23
|
+
export declare function getThemeProxied(_props: UseThemeWithStateProps, _state: ThemeState | null, _keys: MutableRefObject<Set<string> | null>): ThemeProxied;
|
|
24
24
|
export {};
|
|
25
25
|
//# sourceMappingURL=getThemeProxied.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getThemeProxied.d.ts","sourceRoot":"","sources":["../../src/hooks/getThemeProxied.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,KAAK,EACV,WAAW,EACX,MAAM,EACN,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EACnB,MAAM,UAAU,CAAA;AAEjB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"getThemeProxied.d.ts","sourceRoot":"","sources":["../../src/hooks/getThemeProxied.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,KAAK,EACV,WAAW,EACX,MAAM,EACN,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EACnB,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE3D,MAAM,MAAM,YAAY,GAAG;KACxB,GAAG,IAAI,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,aAAa,CAC/D,GAAG,SAAS,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CACjE;CACF,GAAG;KAED,GAAG,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;CACpD,CAAA;AAED,KAAK,aAAa,CAAC,GAAG,IAAI,GAAG,GAAG;IAC9B;;;;;;;;;OASG;IACH,GAAG,EAAE,CACH,QAAQ,CAAC,EAAE,KAAK,KAEd,MAAM,GACN,CAAC,GAAG,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAC1B,CAAC,SAAS,kBAAkB,GAC1B,GAAG,GACH,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,GACtB,GAAG,SAAS,WAAW,GACrB,MAAM,GAAG,MAAM,GACf,OAAO,CAAC,CAAA;CACnB,CAAA;AAYD,wBAAgB,eAAe,CAE7B,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAC1C,YAAY,CA2Gd"}
|