@tamagui/web 1.124.4 → 1.124.5

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 (35) hide show
  1. package/dist/cjs/helpers/insertStyleRule.js.map +1 -1
  2. package/dist/cjs/helpers/insertStyleRule.native.js.map +1 -1
  3. package/dist/cjs/hooks/getThemeProxied.cjs +21 -15
  4. package/dist/cjs/hooks/getThemeProxied.js +20 -12
  5. package/dist/cjs/hooks/getThemeProxied.js.map +1 -1
  6. package/dist/cjs/hooks/getThemeProxied.native.js +25 -21
  7. package/dist/cjs/hooks/getThemeProxied.native.js.map +2 -2
  8. package/dist/cjs/hooks/useThemeState.cjs +76 -62
  9. package/dist/cjs/hooks/useThemeState.js +51 -39
  10. package/dist/cjs/hooks/useThemeState.js.map +2 -2
  11. package/dist/cjs/hooks/useThemeState.native.js +38 -30
  12. package/dist/cjs/hooks/useThemeState.native.js.map +2 -2
  13. package/dist/esm/helpers/insertStyleRule.js.map +1 -1
  14. package/dist/esm/helpers/insertStyleRule.mjs.map +1 -1
  15. package/dist/esm/helpers/insertStyleRule.native.js.map +1 -1
  16. package/dist/esm/hooks/getThemeProxied.js +20 -11
  17. package/dist/esm/hooks/getThemeProxied.js.map +1 -1
  18. package/dist/esm/hooks/getThemeProxied.mjs +20 -14
  19. package/dist/esm/hooks/getThemeProxied.mjs.map +1 -1
  20. package/dist/esm/hooks/getThemeProxied.native.js +26 -21
  21. package/dist/esm/hooks/getThemeProxied.native.js.map +2 -2
  22. package/dist/esm/hooks/useThemeState.js +51 -39
  23. package/dist/esm/hooks/useThemeState.js.map +2 -2
  24. package/dist/esm/hooks/useThemeState.mjs +76 -63
  25. package/dist/esm/hooks/useThemeState.mjs.map +1 -1
  26. package/dist/esm/hooks/useThemeState.native.js +37 -30
  27. package/dist/esm/hooks/useThemeState.native.js.map +2 -2
  28. package/package.json +11 -11
  29. package/src/hooks/getThemeProxied.ts +19 -13
  30. package/src/hooks/useThemeState.ts +99 -57
  31. package/types/helpers/insertStyleRule.d.ts.map +1 -1
  32. package/types/hooks/getThemeProxied.d.ts +2 -2
  33. package/types/hooks/getThemeProxied.d.ts.map +1 -1
  34. package/types/hooks/useThemeState.d.ts +1 -0
  35. 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
- }, HasRenderedOnce = /* @__PURE__ */ new WeakMap(), useThemeState = function(props) {
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, cb), function() {
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
- return getSnapshotFrom(props, propsKey, isRoot, id, parentId, keys);
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
- ]), process.env.NODE_ENV === "development" && props.debug && (console.groupCollapsed(` \xB7 useTheme(${id}) =>`, state.name, id === state.id ? "\u{1F389}" : "\u23ED\uFE0F"), console.info({
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
- }, themes = null, getSnapshotFrom = function(props, propsKey) {
62
- var isRoot = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : !1, id = arguments.length > 3 ? arguments[3] : void 0, parentId = arguments.length > 4 ? arguments[4] : void 0, keys = arguments.length > 5 ? arguments[5] : void 0, _keys_current, _props_needsUpdate, needsUpdate = (keys == null || (_keys_current = keys.current) === null || _keys_current === void 0 ? void 0 : _keys_current.size) || ((_props_needsUpdate = props.needsUpdate) === null || _props_needsUpdate === void 0 ? void 0 : _props_needsUpdate.call(props)), parentState = states.get(parentId);
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 lastState = states.get(id), name = propsKey ? getNewThemeName(parentState?.name, props, !!needsUpdate) : null;
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
- return lastState && !needsUpdate ? lastState : (states.set(id, parentState), parentState);
74
- if (lastState && lastState.name === name)
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\uFE0F ${name}`), console.info("state", nextState), console.groupEnd()), states.set(id, nextState), isRoot && (rootThemeState = nextState), nextState;
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 (found && inverse) {
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,GAE7CO,eAAe,oBAAIC,IAAAA,GACnBC,oBAAyC,CAAC,GAG1CC,SAA0C,oBAAIF,IAAAA,GAEvCG,oBAAoB,WAAA;AAC/BJ,eAAaK,QAAQ,SAACC,IAAAA;WAAOA,GAAAA;;AAC/B,GAEaC,gBAAgB,SAACC,IAAAA;SAAWL,OAAOM,IAAID,EAAAA;GAEhDE,iBAAoC,MAC3BC,oBAAoB,WAAA;SAAMD;GAEjCE,kBAAkB,oBAAIC,QAAAA,GAEfC,gBAAgB,SAC3BC,OAAAA;MACAC,SAAAA,UAAAA,SAAAA,KAAAA,UAAAA,CAAAA,MAAAA,SAAAA,UAAAA,CAAAA,IAAS,IACTC,OAAAA,UAAAA,SAAAA,IAAAA,UAAAA,CAAAA,IAAAA,QAEM,EAAEC,QAAO,IAAKH,OACdI,WAAWxB,WAAWI,iBAAAA;AAE5B,MAAImB;AACF,WACEf,OAAOM,IAAIU,QAAAA,KAAa;MACtBX,IAAI;MACJY,MAAM;MACNC,OAAOvB,UAAAA,EAAYwB,OAAOC;MAC1BC,UAAU;IACZ;AAIJ,MAAMhB,KAAKZ,MAAAA,GACL6B,YAAY/B,YAChB,SAACY,IAAAA;QACCJ,oBAAkBiB;AAAlBjB,YAAAA,qBAAAA,mBAAkBiB,YAAAA,QAAAA,MAAlBjB,mBAAkBiB,SAAAA,IAAc,oBAAIO,IAAAA,IACpCxB,kBAAkBiB,QAAAA,EAAUQ,IAAInB,EAAAA,GAChCR,aAAa4B,IAAIpB,IAAIF,EAAAA,GACd,WAAA;AACLN,mBAAa6B,OAAOrB,EAAAA,GACpBN,kBAAkBiB,QAAAA,EAAUU,OAAOrB,EAAAA;IACrC;EACF,GACA;IAACA;IAAIW;IAAUF;GAAK,GAGhBa,WAAWC,YAAYhB,KAAAA,GAEvBiB,cAAc,WAAA;AAClB,WAAOC,gBAAgBlB,OAAOe,UAAUd,QAAQR,IAAIW,UAAUF,IAAAA;EAChE;AAEA,EAAIiB,QAAQC,IAAIC,aAAa,iBAAiBC,WAAWC,QACvDD,WAAWC;AAEb,MAAMC,QAAQ1C,qBAAqB4B,WAAWO,aAAaA,WAAAA;AAE3DxC,mCAA0B,WAAA;AACxB,QAAKsC,UACL;UAAI,CAAClB,gBAAgB4B,IAAIvB,IAAAA,GAAO;AAC9BL,wBAAgBgB,IAAIX,MAAM,EAAA;AAC1B;MACF;AACA,UACEiB,QAAQC,IAAIC,aAAa,iBACzBrB,MAAM0B,SACN1B,MAAM0B,UAAU,WAChB;YAC4DtC;AAA5DuC,gBAAQC,KAAK,kBAAenC,EAAAA,oBAAsBsB,WAAU3B,cAAAA,OAAOM,IAAID,EAAAA,OAAAA,QAAXL,gBAAAA,SAAAA,SAAAA,YAAgBiB,IAAI;MAClF;AACAwB,qBAAepC,EAAAA;;EACjB,GAAG;IAACS;IAAMa;GAAS,GAEfI,QAAQC,IAAIC,aAAa,iBAAiBrB,MAAM0B,UAClDC,QAAQG,eACN,kBAAerC,EAAAA,QACf+B,MAAMnB,MACNZ,OAAO+B,MAAM/B,KAAK,cAAO,cAAA,GAE3BkC,QAAQI,KAAK;IACXP;IACApB;IACAJ;IACAe;IACAtB;IACAuC,aAAa5C,OAAOM,IAAIU,QAAAA;EAC1B,CAAA,GACAuB,QAAQM,SAAQ,IAGXT,MAAM/B,OAAOA,KAAK;IAAE,GAAG+B;IAAOU,OAAO;EAAK,IAAIV;AACvD,GAGIjB,SAA6C,MAE3CW,kBAAkB,SACtBlB,OACAe,UAAAA;MACAd,SAAAA,UAAAA,SAAAA,KAAAA,UAAAA,CAAAA,MAAAA,SAAAA,UAAAA,CAAAA,IAAS,IACTR,KAAAA,UAAAA,SAAAA,IAAAA,UAAAA,CAAAA,IAAAA,QACAW,WAAAA,UAAAA,SAAAA,IAAAA,UAAAA,CAAAA,IAAAA,QACAF,OAAAA,UAAAA,SAAAA,IAAAA,UAAAA,CAAAA,IAAAA,QAEoBA,eAAuBF,oBAArCmC,eAAcjC,QAAAA,SAAAA,gBAAAA,KAAMkC,aAAO,QAAblC,kBAAAA,SAAAA,SAAAA,cAAemC,WAAQrC,qBAAAA,MAAMmC,iBAAW,QAAjBnC,uBAAAA,SAAAA,SAAAA,mBAAAA,KAAAA,KAAAA,IACrCgC,cAAc5C,OAAOM,IAAIU,QAAAA;AAO/B,EAAKG,WACHA,SAASxB,UAAAA,EAAYwB;AAGvB,MAAM+B,YAAYlD,OAAOM,IAAID,EAAAA,GAEvBY,OAAQU,WAAkBwB,gBAAgBP,aAAa3B,MAAML,OAAO,CAAC,CAACmC,WAAAA,IAAnD;AAEzB,MACEhB,QAAQC,IAAIC,aAAa,iBACzBrB,MAAM0B,SACN1B,MAAM0B,UAAU,WAChB;AACA,QAAMc,UAAU,kBAAe/C,EAAAA,cAAgBY,IAAAA,YAAgB2B,aAAavC,EAAE,gBAAgB0C,WAAAA;AAE5FR,YAAQI,KAAKS,OAAAA;EAMjB;AAEA,MAAMC,iBAAiB,CAACpC,QAAQU;AAChC,MAAIiB,eAAeS;AACjB,WAAOT;AAGT,MAAI,CAAC3B;AACH,WAAIiC,aAAa,CAACH,cACTG,aAETlD,OAAOyB,IAAIpB,IAAIuC,WAAAA,GAERA;AAGT,MACEM,aACAA,UAAUjC,SAASA;AAKnB,WAAOiC;AAGT,MAAMI,SAASC,UAAUtC,IAAAA,GACF2B,uBAAjBY,kBAAiBZ,wBAAAA,aAAavB,cAAQ,QAArBuB,0BAAAA,SAAAA,wBAAyB,GAC1Ca,YAAYb,eAAeU,WAAWV,YAAYU,QAClDjC,WAAWmC,kBAAkBC,YAAY,IAAI,IAE7CC,YAAY;IAChBrD;IACAY;IACAC,OAAOC,OAAOF,IAAAA;IACdqC;IACAtC;IACA2C,YAAYf,aAAa3B;IACzBI;IACAoC;EACF;AAEA,SACE1B,QAAQC,IAAIC,aAAa,iBACzBrB,MAAM0B,SACN1B,MAAM0B,UAAU,cAEhBC,QAAQG,eAAe,kBAAerC,EAAAA,kBAAUY,IAAAA,EAAM,GACtDsB,QAAQI,KAAK,SAASe,SAAAA,GACtBnB,QAAQM,SAAQ,IAGlB7C,OAAOyB,IAAIpB,IAAIqD,SAAAA,GAGX7C,WACFN,iBAAiBmD,YAGZA;AACT;AAEA,SAASjB,eAAepC,IAAU;AAIhC,WAHMuD,QAAQ;IAACvD;KACTwD,UAAU,oBAAItC,IAAAA,GAEbqC,MAAME,UAAQ;AACnB,QAAMC,SAASH,MAAMI,MAAK,GACpBC,WAAWlE,kBAAkBgE,MAAAA;AACnC,QAAIE,UAAU;UACP,4BAAA,IAAA,oBAAA,IAAA,iBAAA;;AAAL,iBAAK,YAAiBA,SAAAA,OAAAA,QAAAA,EAAAA,GAAjB,OAAA,EAAA,6BAAA,QAAA,UAAA,KAAA,GAAA,OAAA,4BAAA,IAA2B;AAA3B,cAAMC,UAAN,MAAA;AACH,UAAKL,QAAQxB,IAAI6B,OAAAA,MACfL,QAAQrC,IAAI0C,OAAAA,GACZN,MAAMO,KAAKD,OAAAA;QAEf;;AALK,4BAAA,IAAA,iBAAA;;;WAAA,6BAAA,UAAA,UAAA,QAAA,UAAA,OAAA;;cAAA;kBAAA;;;IAMP;EACF;AAEAL,UAAQ3D,QAAQ,SAACgE,UAAAA;AACf,QAAM/D,KAAKN,aAAaS,IAAI4D,QAAAA;AAC5B/D,IAAAA,KAAAA;EACF,CAAA;AACF;AAEA,IAAMiE,eAAe;EACnBhD,OAAO;EACPiD,MAAM;AACR;AAEA,SAASd,UAAUtC,MAAY;AAC7B,SAAOmD,aAAanD,KAAKqD,MAAM,GAAA,EAAK,CAAA,CAAE;AACxC;AAEA,SAASnB,kBAAAA;MACPQ,aAAAA,UAAAA,SAAAA,KAAAA,UAAAA,CAAAA,MAAAA,SAAAA,UAAAA,CAAAA,IAAa,IACb,EAAE1C,MAAMsD,OAAOC,eAAeC,QAAO,IAA0B,UAAA,SAAA,IAAA,UAAA,CAAA,IAAA,QAC/DC,cAAAA,UAAAA,SAAAA,KAAAA,UAAAA,CAAAA,MAAAA,SAAAA,UAAAA,CAAAA,IAAc;AAEd,MAAIzD,QAAQsD;AACV,UAAM,IAAII,MACR5C,QAAQC,IAAIC,aAAa,eACrB,cACA,mDAAA;AAIR,MAAIsC,OAAO;AACT,QAAI,CAACZ,WAAY,OAAM,IAAIgB,MAAM,cAAI;AACrC,QAAMC,gBAAgBjB,WAAWkB,YAAY,GAAA;AAC7C,WAAOD,iBAAiB,IAAIjB,aAAaA,WAAWmB,MAAMF,aAAAA;EAC5D;AAEA,MAAM,EAAEzD,QAAAA,QAAM,IAAKxB,UAAAA,GACboF,cAAcpB,WAAWW,MAAM,GAAA,GAG/BU,WAAWD,YAAYA,YAAYjB,SAAS,CAAA;AAClD,EAAIkB,YAAYA,SAAS,CAAA,EAAGC,YAAW,MAAOD,SAAS,CAAA,KACrDD,YAAYG,IAAG;AAajB,WAVMC,WAAW;IACflE,QAAQuD,gBAAgB,GAAGvD,IAAAA,IAAQuD,aAAAA,KAAkBY;IACrDnE;IACAuD;IACAa,OAAOC,OAAAA,GAELC,QAAuB,MAErBC,MAAMT,YAAYjB,QAEf2B,IAAI,GAAGA,KAAKD,KAAKC,KAAK;AAC7B,QAAMC,QAAQD,MAAM,IAAIV,cAAcA,YAAYD,MAAM,GAAG,CAACW,CAAAA,GAAIE,KAAK,GAAA,GAEhE,4BAAA,IAAA,oBAAA,IAAA,iBAAA;;AAAL,eAAK,YAAiBR,SAAAA,OAAAA,QAAAA,EAAAA,GAAjB,OAAA,EAAA,6BAAA,QAAA,UAAA,KAAA,GAAA,OAAA,4BAAA,IAA2B;AAA3B,YAAMS,UAAN,MAAA,OACGC,YAAYH,OAAO,GAAGA,IAAAA,IAAQE,OAAAA,KAAYA;AAEhD,YAAIC,aAAa1E,SAAQ;AACvBoE,kBAAQM;AACR;QACF;MACF;;AAPK,0BAAA,IAAA,iBAAA;;;SAAA,6BAAA,UAAA,UAAA,QAAA,UAAA,OAAA;;YAAA;gBAAA;;;AASL,QAAIN,MAAO;EACb;AAEA,MAAIA,SAASd,SAAS;AACpB,QAAMnB,SAASiC,MAAMjB,MAAM,GAAA,EAAK,CAAA;AAChCiB,YAAQA,MAAMO,QAAQ,IAAIC,OAAO,IAAIzC,MAAAA,EAAQ,GAAGA,WAAW,UAAU,SAAS,OAAA;EAChF;AAEA,SACE,CAACoB,eACDa,UAAU5B;;EAGV,CAACS,aAAamB,KAAAA,IAEP,OAGFA;AACT;AAEA,IAAM3D,cAAc,SAAA,OAAA;MAAC,EACnBX,MACAsD,OACAE,SACAuB,gBACAxB,cAAa,IACF;SACX,GAAGvD,QAAQ,EAAA,GAAKwD,WAAW,EAAA,GAAKF,SAAS,EAAA,GAAKyB,kBAAkB,EAAA,GAAKxB,iBAAiB,EAAA;GAE3EyB,wBAAwB,SAACrF,OAAAA;SACpC,aAAaA,SAAS,UAAUA,SAAS,WAAWA,SAAS,oBAAoBA;;",
5
- "names": ["useIsomorphicLayoutEffect", "createContext", "useCallback", "useContext", "useId", "useSyncExternalStore", "getConfig", "ThemeStateContext", "allListeners", "Map", "listenersByParent", "states", "forceUpdateThemes", "forEach", "cb", "getThemeState", "id", "get", "rootThemeState", "getRootThemeState", "HasRenderedOnce", "WeakMap", "useThemeState", "props", "isRoot", "keys", "disable", "parentId", "name", "theme", "themes", "light", "inverses", "subscribe", "Set", "add", "set", "delete", "propsKey", "getPropsKey", "getSnapshot", "getSnapshotFrom", "process", "env", "NODE_ENV", "globalThis", "time", "state", "has", "debug", "console", "warn", "scheduleUpdate", "groupCollapsed", "info", "parentState", "groupEnd", "isNew", "needsUpdate", "current", "size", "lastState", "getNewThemeName", "message", "isSameAsParent", "scheme", "getScheme", "parentInverses", "isInverse", "nextState", "parentName", "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", "Boolean", "found", "max", "i", "base", "join", "subName", "potential", "replace", "RegExp", "forceClassName", "hasThemeUpdatingProps"]
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.4",
3
+ "version": "1.124.5",
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.4",
31
- "@tamagui/constants": "1.124.4",
32
- "@tamagui/helpers": "1.124.4",
33
- "@tamagui/normalize-css-color": "1.124.4",
34
- "@tamagui/timer": "1.124.4",
35
- "@tamagui/types": "1.124.4",
36
- "@tamagui/use-did-finish-ssr": "1.124.4",
37
- "@tamagui/use-event": "1.124.4",
38
- "@tamagui/use-force-update": "1.124.4"
30
+ "@tamagui/compose-refs": "1.124.5",
31
+ "@tamagui/constants": "1.124.5",
32
+ "@tamagui/helpers": "1.124.5",
33
+ "@tamagui/normalize-css-color": "1.124.5",
34
+ "@tamagui/timer": "1.124.5",
35
+ "@tamagui/types": "1.124.5",
36
+ "@tamagui/use-did-finish-ssr": "1.124.5",
37
+ "@tamagui/use-event": "1.124.5",
38
+ "@tamagui/use-force-update": "1.124.5"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "react": "*",
42
42
  "react-dom": "*"
43
43
  },
44
44
  "devDependencies": {
45
- "@tamagui/build": "1.124.4",
45
+ "@tamagui/build": "1.124.5",
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 { ThemeState } from './useThemeState'
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
- state: ThemeState | null,
62
+ _state: ThemeState | null,
62
63
  _keys: MutableRefObject<Set<string> | null>
63
64
  ): ThemeProxied {
64
- const theme = state?.theme
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
- console.info(` 🎨 useTheme() tracking new key: ${key}`)
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
- state.inverses === 0 &&
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, cb)
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, keys]
90
+ [id, parentId]
77
91
  )
78
92
 
79
93
  const propsKey = getPropsKey(props)
80
94
 
81
95
  const getSnapshot = () => {
82
- return getSnapshotFrom(props, propsKey, isRoot, id, parentId, keys)
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 (!propsKey) return
92
- if (!HasRenderedOnce.has(keys)) {
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
- keys: MutableRefObject<Set<string> | null> | undefined
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 lastState = states.get(id)
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 name = !propsKey ? null : getNewThemeName(parentState?.name, props, !!needsUpdate)
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.info({ lastState, parentState, props, propsKey, id, keys })
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
- if (lastState && !needsUpdate) {
175
- return lastState
213
+ const next = lastState ?? parentState!
214
+
215
+ if (needsUpdate && pendingUpdate) {
216
+ const updated = { ...(parentState || lastState)! }
217
+ return updated
176
218
  }
177
- states.set(id, parentState)
178
- // cache.set(cacheKey, parentState!)
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 (found && inverse) {
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,WAuBxD"}
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 { ThemeState } from './useThemeState';
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, state: ThemeState | null, _keys: MutableRefObject<Set<string> | null>): ThemeProxied;
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,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,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;AAWD,wBAAgB,eAAe,CAE7B,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,UAAU,GAAG,IAAI,EACxB,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAC1C,YAAY,CAsGd"}
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"}