@tamagui/web 1.124.3 → 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 (43) 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/helpers/webPropsToSkip.native.js +0 -2
  4. package/dist/cjs/helpers/webPropsToSkip.native.js.map +2 -2
  5. package/dist/cjs/hooks/getThemeProxied.cjs +21 -15
  6. package/dist/cjs/hooks/getThemeProxied.js +20 -12
  7. package/dist/cjs/hooks/getThemeProxied.js.map +1 -1
  8. package/dist/cjs/hooks/getThemeProxied.native.js +25 -21
  9. package/dist/cjs/hooks/getThemeProxied.native.js.map +2 -2
  10. package/dist/cjs/hooks/useThemeState.cjs +76 -62
  11. package/dist/cjs/hooks/useThemeState.js +51 -39
  12. package/dist/cjs/hooks/useThemeState.js.map +2 -2
  13. package/dist/cjs/hooks/useThemeState.native.js +38 -30
  14. package/dist/cjs/hooks/useThemeState.native.js.map +2 -2
  15. package/dist/esm/helpers/insertStyleRule.js.map +1 -1
  16. package/dist/esm/helpers/insertStyleRule.mjs.map +1 -1
  17. package/dist/esm/helpers/insertStyleRule.native.js.map +1 -1
  18. package/dist/esm/helpers/webPropsToSkip.native.js +0 -2
  19. package/dist/esm/helpers/webPropsToSkip.native.js.map +2 -2
  20. package/dist/esm/hooks/getThemeProxied.js +20 -11
  21. package/dist/esm/hooks/getThemeProxied.js.map +1 -1
  22. package/dist/esm/hooks/getThemeProxied.mjs +20 -14
  23. package/dist/esm/hooks/getThemeProxied.mjs.map +1 -1
  24. package/dist/esm/hooks/getThemeProxied.native.js +26 -21
  25. package/dist/esm/hooks/getThemeProxied.native.js.map +2 -2
  26. package/dist/esm/hooks/useThemeState.js +51 -39
  27. package/dist/esm/hooks/useThemeState.js.map +2 -2
  28. package/dist/esm/hooks/useThemeState.mjs +76 -63
  29. package/dist/esm/hooks/useThemeState.mjs.map +1 -1
  30. package/dist/esm/hooks/useThemeState.native.js +37 -30
  31. package/dist/esm/hooks/useThemeState.native.js.map +2 -2
  32. package/package.json +11 -11
  33. package/src/helpers/insertStyleRule.tsx +0 -1
  34. package/src/helpers/webPropsToSkip.native.ts +0 -2
  35. package/src/hooks/getThemeProxied.ts +19 -13
  36. package/src/hooks/useThemeState.ts +99 -57
  37. package/types/helpers/insertStyleRule.d.ts.map +1 -1
  38. package/types/helpers/webPropsToSkip.native.d.ts +0 -2
  39. package/types/helpers/webPropsToSkip.native.d.ts.map +1 -1
  40. package/types/hooks/getThemeProxied.d.ts +2 -2
  41. package/types/hooks/getThemeProxied.d.ts.map +1 -1
  42. package/types/hooks/useThemeState.d.ts +1 -0
  43. package/types/hooks/useThemeState.d.ts.map +1 -1
@@ -2,28 +2,37 @@ import "@tamagui/constants";
2
2
  import { getConfig } from "../config";
3
3
  import { getVariable } from "../createVariable";
4
4
  import "./doesRootSchemeMatchSystem";
5
+ import { keysToId } from "./useThemeState";
5
6
  const cache = /* @__PURE__ */ new Map();
6
- let curKeys, curProps;
7
+ let curKeys, curProps, curState;
7
8
  const emptyObject = {};
8
- function getThemeProxied(_props, state, _keys) {
9
- const theme = state?.theme;
10
- if (!theme)
9
+ function getThemeProxied(_props, _state, _keys) {
10
+ if (!_state?.theme)
11
11
  return emptyObject;
12
- if (curKeys = _keys, curProps = _props, cache.has(theme))
13
- return cache.get(theme);
14
- const { name, scheme } = state, config = getConfig();
12
+ if (curKeys = _keys, curProps = _props, curState = _state, cache.has(curState.theme))
13
+ return cache.get(curState.theme);
14
+ const config = getConfig();
15
15
  function track(key) {
16
- curKeys && (curKeys.current || (curKeys.current = /* @__PURE__ */ new Set()), curKeys.current.add(key), process.env.NODE_ENV === "development" && curProps.debug && console.info(` \u{1F3A8} useTheme() tracking new key: ${key}`));
16
+ if (curKeys && (curKeys.current || (curKeys.current = /* @__PURE__ */ new Set()), curKeys.current.add(key), process.env.NODE_ENV === "development" && curProps.debug)) {
17
+ const realId = keysToId.get(curKeys);
18
+ console.info(
19
+ ` \u{1F3A8} useTheme(${realId}) tracking new key: ${key}`,
20
+ curKeys,
21
+ globalThis.states?.get(realId + 1)
22
+ );
23
+ }
17
24
  }
18
25
  const proxied = Object.fromEntries(
19
- Object.entries(theme).flatMap(([key, value]) => {
26
+ Object.entries(_state.theme).flatMap(([key, value]) => {
20
27
  const proxied2 = {
21
28
  ...value,
22
29
  get val() {
23
30
  return globalThis.tamaguiAvoidTracking || track(key), value.val;
24
31
  },
25
32
  get(platform) {
26
- return getVariable(value);
33
+ if (!curState) return;
34
+ const outVal = getVariable(value), { name, scheme, inverses } = curState;
35
+ return outVal;
27
36
  }
28
37
  };
29
38
  return [
@@ -32,7 +41,7 @@ function getThemeProxied(_props, state, _keys) {
32
41
  ];
33
42
  })
34
43
  );
35
- return cache.set(theme, proxied), proxied;
44
+ return cache.set(_state.theme, proxied), proxied;
36
45
  }
37
46
  export {
38
47
  getThemeProxied
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/getThemeProxied.ts"],
4
- "mappings": "AAAA,OAAsB;AAEtB,SAAS,iBAA6B;AAEtC,SAAS,mBAAmB;AAQ5B,OAA0C;AAsC1C,MAAM,QAAwC,oBAAI,IAAI;AAEtD,IAAI,SACA;AAEJ,MAAM,cAAc,CAAC;AAEd,SAAS,gBAEd,QACA,OACA,OACc;AACd,QAAM,QAAQ,OAAO;AAErB,MAAI,CAAC;AACH,WAAO;AAMT,MAHA,UAAU,OACV,WAAW,QAEP,MAAM,IAAI,KAAK;AAEjB,WADgB,MAAM,IAAI,KAAK;AAOjC,QAAM,EAAE,MAAM,OAAO,IAAI,OAEnB,SAAS,UAAU;AAEzB,WAAS,MAAM,KAAa;AAC1B,IAAK,YACA,QAAQ,YACX,QAAQ,UAAU,oBAAI,IAAI,IAE5B,QAAQ,QAAQ,IAAI,GAAG,GACnB,QAAQ,IAAI,aAAa,iBAAiB,SAAS,SACrD,QAAQ,KAAK,2CAAoC,GAAG,EAAE;AAAA,EAE1D;AAEA,QAAM,UAAU,OAAO;AAAA,IACrB,OAAO,QAAQ,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC9C,YAAMA,WAAU;AAAA,QACd,GAAG;AAAA,QACH,IAAI,MAAM;AAER,iBAAK,WAAW,wBAEd,MAAM,GAAG,GAEJ,MAAM;AAAA,QACf;AAAA,QACA,IAAI,UAAkB;AA2CpB,iBA1Ce,YAAY,KAAK;AAAA,QA2ClC;AAAA,MACF;AAEA,aAAO;AAAA,QACL,CAAC,KAAKA,QAAO;AAAA,QACb,CAAC,IAAI,GAAG,IAAIA,QAAO;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,eAAM,IAAI,OAAO,OAAO,GAEjB;AACT;",
4
+ "mappings": "AAAA,OAAsB;AAEtB,SAAS,iBAA6B;AAEtC,SAAS,mBAAmB;AAQ5B,OAA0C;AAC1C,SAAS,gBAAiC;AAqC1C,MAAM,QAAwC,oBAAI,IAAI;AAEtD,IAAI,SACA,UACA;AAEJ,MAAM,cAAc,CAAC;AAEd,SAAS,gBAEd,QACA,QACA,OACc;AACd,MAAI,CAAC,QAAQ;AACX,WAAO;AAOT,MAJA,UAAU,OACV,WAAW,QACX,WAAW,QAEP,MAAM,IAAI,SAAS,KAAK;AAE1B,WADgB,MAAM,IAAI,SAAS,KAAK;AAO1C,QAAM,SAAS,UAAU;AAEzB,WAAS,MAAM,KAAa;AAC1B,QAAK,YACA,QAAQ,YACX,QAAQ,UAAU,oBAAI,IAAI,IAE5B,QAAQ,QAAQ,IAAI,GAAG,GACnB,QAAQ,IAAI,aAAa,iBAAiB,SAAS,QAAO;AAC5D,YAAM,SAAS,SAAS,IAAI,OAAO;AACnC,cAAQ;AAAA,QACN,uBAAgB,MAAM,uBAAuB,GAAG;AAAA,QAChD;AAAA,QACA,WAAW,QAAW,IAAI,SAAS,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,OAAO;AAAA,IACrB,OAAO,QAAQ,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACrD,YAAMA,WAAU;AAAA,QACd,GAAG;AAAA,QACH,IAAI,MAAM;AAER,iBAAK,WAAW,wBAEd,MAAM,GAAG,GAEJ,MAAM;AAAA,QACf;AAAA,QACA,IAAI,UAAkB;AACpB,cAAI,CAAC,SAAU;AAEf,gBAAM,SAAS,YAAY,KAAK,GAC1B,EAAE,MAAM,QAAQ,SAAS,IAAI;AA0CnC,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,QACL,CAAC,KAAKA,QAAO;AAAA,QACb,CAAC,IAAI,GAAG,IAAIA,QAAO;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,eAAM,IAAI,OAAO,OAAO,OAAO,GAExB;AACT;",
5
5
  "names": ["proxied"]
6
6
  }
@@ -2,34 +2,40 @@ import "@tamagui/constants";
2
2
  import { getConfig } from "../config.mjs";
3
3
  import { getVariable } from "../createVariable.mjs";
4
4
  import "./doesRootSchemeMatchSystem.mjs";
5
+ import { keysToId } from "./useThemeState.mjs";
5
6
  const cache = /* @__PURE__ */new Map();
6
- let curKeys, curProps;
7
+ let curKeys, curProps, curState;
7
8
  const emptyObject = {};
8
- function getThemeProxied(_props, state, _keys) {
9
- const theme = state?.theme;
10
- if (!theme) return emptyObject;
11
- if (curKeys = _keys, curProps = _props, cache.has(theme)) return cache.get(theme);
12
- const {
13
- name,
14
- scheme
15
- } = state,
16
- config = getConfig();
9
+ function getThemeProxied(_props, _state, _keys) {
10
+ if (!_state?.theme) return emptyObject;
11
+ if (curKeys = _keys, curProps = _props, curState = _state, cache.has(curState.theme)) return cache.get(curState.theme);
12
+ const config = getConfig();
17
13
  function track(key) {
18
- curKeys && (curKeys.current || (curKeys.current = /* @__PURE__ */new Set()), curKeys.current.add(key), process.env.NODE_ENV === "development" && curProps.debug && console.info(` \u{1F3A8} useTheme() tracking new key: ${key}`));
14
+ if (curKeys && (curKeys.current || (curKeys.current = /* @__PURE__ */new Set()), curKeys.current.add(key), process.env.NODE_ENV === "development" && curProps.debug)) {
15
+ const realId = keysToId.get(curKeys);
16
+ console.info(` \u{1F3A8} useTheme(${realId}) tracking new key: ${key}`, curKeys, globalThis.states?.get(realId + 1));
17
+ }
19
18
  }
20
- const proxied = Object.fromEntries(Object.entries(theme).flatMap(([key, value]) => {
19
+ const proxied = Object.fromEntries(Object.entries(_state.theme).flatMap(([key, value]) => {
21
20
  const proxied2 = {
22
21
  ...value,
23
22
  get val() {
24
23
  return globalThis.tamaguiAvoidTracking || track(key), value.val;
25
24
  },
26
25
  get(platform) {
27
- return getVariable(value);
26
+ if (!curState) return;
27
+ const outVal = getVariable(value),
28
+ {
29
+ name,
30
+ scheme,
31
+ inverses
32
+ } = curState;
33
+ return outVal;
28
34
  }
29
35
  };
30
36
  return [[key, proxied2], [`$${key}`, proxied2]];
31
37
  }));
32
- return cache.set(theme, proxied), proxied;
38
+ return cache.set(_state.theme, proxied), proxied;
33
39
  }
34
40
  export { getThemeProxied };
35
41
  //# sourceMappingURL=getThemeProxied.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["getConfig","getVariable","cache","Map","curKeys","curProps","emptyObject","getThemeProxied","_props","state","_keys","theme","has","get","name","scheme","config","track","key","current","Set","add","process","env","NODE_ENV","debug","console","info","proxied","Object","fromEntries","entries","flatMap","value","proxied2","val","globalThis","tamaguiAvoidTracking","platform","set"],"sources":["../../../src/hooks/getThemeProxied.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAsB;AAEtB,SAASA,SAAA,QAA6B;AAEtC,SAASC,WAAA,QAAmB;AAQ5B,OAA0C;AAsC1C,MAAMC,KAAA,GAAwC,mBAAIC,GAAA,CAAI;AAEtD,IAAIC,OAAA,EACAC,QAAA;AAEJ,MAAMC,WAAA,GAAc,CAAC;AAEd,SAASC,gBAEdC,MAAA,EACAC,KAAA,EACAC,KAAA,EACc;EACd,MAAMC,KAAA,GAAQF,KAAA,EAAOE,KAAA;EAErB,IAAI,CAACA,KAAA,EACH,OAAOL,WAAA;EAMT,IAHAF,OAAA,GAAUM,KAAA,EACVL,QAAA,GAAWG,MAAA,EAEPN,KAAA,CAAMU,GAAA,CAAID,KAAK,GAEjB,OADgBT,KAAA,CAAMW,GAAA,CAAIF,KAAK;EAOjC,MAAM;MAAEG,IAAA;MAAMC;IAAO,IAAIN,KAAA;IAEnBO,MAAA,GAAShB,SAAA,CAAU;EAEzB,SAASiB,MAAMC,GAAA,EAAa;IACrBd,OAAA,KACAA,OAAA,CAAQe,OAAA,KACXf,OAAA,CAAQe,OAAA,GAAU,mBAAIC,GAAA,CAAI,IAE5BhB,OAAA,CAAQe,OAAA,CAAQE,GAAA,CAAIH,GAAG,GACnBI,OAAA,CAAQC,GAAA,CAAIC,QAAA,KAAa,iBAAiBnB,QAAA,CAASoB,KAAA,IACrDC,OAAA,CAAQC,IAAA,CAAK,2CAAoCT,GAAG,EAAE;EAE1D;EAEA,MAAMU,OAAA,GAAUC,MAAA,CAAOC,WAAA,CACrBD,MAAA,CAAOE,OAAA,CAAQpB,KAAK,EAAEqB,OAAA,CAAQ,CAAC,CAACd,GAAA,EAAKe,KAAK,MAAM;IAC9C,MAAMC,QAAA,GAAU;MACd,GAAGD,KAAA;MACH,IAAIE,IAAA,EAAM;QAER,OAAKC,UAAA,CAAWC,oBAAA,IAEdpB,KAAA,CAAMC,GAAG,GAEJe,KAAA,CAAME,GAAA;MACf;MACAtB,IAAIyB,QAAA,EAAkB;QA2CpB,OA1CerC,WAAA,CAAYgC,KAAK;MA2ClC;IACF;IAEA,OAAO,CACL,CAACf,GAAA,EAAKgB,QAAO,GACb,CAAC,IAAIhB,GAAG,IAAIgB,QAAO,EACrB;EACF,CAAC,CACH;EAEA,OAAAhC,KAAA,CAAMqC,GAAA,CAAI5B,KAAA,EAAOiB,OAAO,GAEjBA,OAAA;AACT","ignoreList":[]}
1
+ {"version":3,"names":["getConfig","getVariable","keysToId","cache","Map","curKeys","curProps","curState","emptyObject","getThemeProxied","_props","_state","_keys","theme","has","get","config","track","key","current","Set","add","process","env","NODE_ENV","debug","realId","console","info","globalThis","states","proxied","Object","fromEntries","entries","flatMap","value","proxied2","val","tamaguiAvoidTracking","platform","outVal","name","scheme","inverses","set"],"sources":["../../../src/hooks/getThemeProxied.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAsB;AAEtB,SAASA,SAAA,QAA6B;AAEtC,SAASC,WAAA,QAAmB;AAQ5B,OAA0C;AAC1C,SAASC,QAAA,QAAiC;AAqC1C,MAAMC,KAAA,GAAwC,mBAAIC,GAAA,CAAI;AAEtD,IAAIC,OAAA,EACAC,QAAA,EACAC,QAAA;AAEJ,MAAMC,WAAA,GAAc,CAAC;AAEd,SAASC,gBAEdC,MAAA,EACAC,MAAA,EACAC,KAAA,EACc;EACd,IAAI,CAACD,MAAA,EAAQE,KAAA,EACX,OAAOL,WAAA;EAOT,IAJAH,OAAA,GAAUO,KAAA,EACVN,QAAA,GAAWI,MAAA,EACXH,QAAA,GAAWI,MAAA,EAEPR,KAAA,CAAMW,GAAA,CAAIP,QAAA,CAASM,KAAK,GAE1B,OADgBV,KAAA,CAAMY,GAAA,CAAIR,QAAA,CAASM,KAAK;EAO1C,MAAMG,MAAA,GAAShB,SAAA,CAAU;EAEzB,SAASiB,MAAMC,GAAA,EAAa;IAC1B,IAAKb,OAAA,KACAA,OAAA,CAAQc,OAAA,KACXd,OAAA,CAAQc,OAAA,GAAU,mBAAIC,GAAA,CAAI,IAE5Bf,OAAA,CAAQc,OAAA,CAAQE,GAAA,CAAIH,GAAG,GACnBI,OAAA,CAAQC,GAAA,CAAIC,QAAA,KAAa,iBAAiBlB,QAAA,CAASmB,KAAA,GAAO;MAC5D,MAAMC,MAAA,GAASxB,QAAA,CAASa,GAAA,CAAIV,OAAO;MACnCsB,OAAA,CAAQC,IAAA,CACN,uBAAgBF,MAAM,uBAAuBR,GAAG,IAChDb,OAAA,EACAwB,UAAA,CAAWC,MAAA,EAAWf,GAAA,CAAIW,MAAA,GAAS,CAAC,CACtC;IACF;EACF;EAEA,MAAMK,OAAA,GAAUC,MAAA,CAAOC,WAAA,CACrBD,MAAA,CAAOE,OAAA,CAAQvB,MAAA,CAAOE,KAAK,EAAEsB,OAAA,CAAQ,CAAC,CAACjB,GAAA,EAAKkB,KAAK,MAAM;IACrD,MAAMC,QAAA,GAAU;MACd,GAAGD,KAAA;MACH,IAAIE,IAAA,EAAM;QAER,OAAKT,UAAA,CAAWU,oBAAA,IAEdtB,KAAA,CAAMC,GAAG,GAEJkB,KAAA,CAAME,GAAA;MACf;MACAvB,IAAIyB,QAAA,EAAkB;QACpB,IAAI,CAACjC,QAAA,EAAU;QAEf,MAAMkC,MAAA,GAASxC,WAAA,CAAYmC,KAAK;UAC1B;YAAEM,IAAA;YAAMC,MAAA;YAAQC;UAAS,IAAIrC,QAAA;QA0CnC,OAAOkC,MAAA;MACT;IACF;IAEA,OAAO,CACL,CAACvB,GAAA,EAAKmB,QAAO,GACb,CAAC,IAAInB,GAAG,IAAImB,QAAO,EACrB;EACF,CAAC,CACH;EAEA,OAAAlC,KAAA,CAAM0C,GAAA,CAAIlC,MAAA,CAAOE,KAAA,EAAOkB,OAAO,GAExBA,OAAA;AACT","ignoreList":[]}
@@ -2,42 +2,47 @@ import { isIos } from "@tamagui/constants";
2
2
  import { getConfig, getSetting } from "../config";
3
3
  import { getVariable } from "../createVariable";
4
4
  import { doesRootSchemeMatchSystem } from "./doesRootSchemeMatchSystem";
5
- var cache = /* @__PURE__ */ new Map(), curKeys, curProps, emptyObject = {};
6
- function getThemeProxied(_props, state, _keys) {
7
- var theme = state?.theme;
8
- if (!theme)
5
+ import { keysToId } from "./useThemeState";
6
+ var cache = /* @__PURE__ */ new Map(), curKeys, curProps, curState, emptyObject = {};
7
+ function getThemeProxied(_props, _state, _keys) {
8
+ if (!_state?.theme)
9
9
  return emptyObject;
10
- if (curKeys = _keys, curProps = _props, cache.has(theme)) {
11
- var proxied = cache.get(theme);
10
+ if (curKeys = _keys, curProps = _props, curState = _state, cache.has(curState.theme)) {
11
+ var proxied = cache.get(curState.theme);
12
12
  return proxied;
13
13
  }
14
- var { name, scheme } = state, config = getConfig();
14
+ var config = getConfig();
15
15
  function track(key) {
16
- curKeys && (curKeys.current || (curKeys.current = /* @__PURE__ */ new Set()), curKeys.current.add(key), process.env.NODE_ENV === "development" && curProps.debug && console.info(` \u{1F3A8} useTheme() tracking new key: ${key}`));
16
+ if (curKeys && (curKeys.current || (curKeys.current = /* @__PURE__ */ new Set()), curKeys.current.add(key), process.env.NODE_ENV === "development" && curProps.debug)) {
17
+ var _globalThis_states, realId = keysToId.get(curKeys);
18
+ console.info(` \u{1F3A8} useTheme(${realId}) tracking new key: ${key}`, curKeys, (_globalThis_states = globalThis.states) === null || _globalThis_states === void 0 ? void 0 : _globalThis_states.get(realId + 1));
19
+ }
17
20
  }
18
- var proxied1 = Object.fromEntries(Object.entries(theme).flatMap(function(param) {
21
+ var proxied1 = Object.fromEntries(Object.entries(_state.theme).flatMap(function(param) {
19
22
  var [key, value] = param, proxied2 = {
20
23
  ...value,
21
24
  get val() {
22
25
  return globalThis.tamaguiAvoidTracking || track(key), value.val;
23
26
  },
24
27
  get(platform) {
25
- var outVal = getVariable(value), shouldOptimize = scheme && platform !== "web" && isIos && !curProps.deopt && getSetting("fastSchemeChange") && state.inverses === 0 && doesRootSchemeMatchSystem();
26
- if (shouldOptimize) {
27
- var _config_themes_name, _config_themes_oppositeName, oppositeScheme = scheme === "dark" ? "light" : "dark", oppositeName = name.replace(scheme, oppositeScheme), color = getVariable((_config_themes_name = config.themes[name]) === null || _config_themes_name === void 0 ? void 0 : _config_themes_name[key]), oppositeColor = getVariable((_config_themes_oppositeName = config.themes[oppositeName]) === null || _config_themes_oppositeName === void 0 ? void 0 : _config_themes_oppositeName[key]), dynamicVal = {
28
- dynamic: {
29
- [scheme]: color,
30
- [oppositeScheme]: oppositeColor
31
- }
32
- };
33
- return dynamicVal;
34
- }
35
- return process.env.NODE_ENV === "development" && curProps.debug && console.info(` \u{1F3A8} useTheme() tracking new key because of:
28
+ if (curState) {
29
+ var outVal = getVariable(value), { name, scheme, inverses } = curState, shouldOptimize = scheme && platform !== "web" && isIos && !curProps.deopt && getSetting("fastSchemeChange") && inverses === 0 && doesRootSchemeMatchSystem();
30
+ if (shouldOptimize) {
31
+ var _config_themes_name, _config_themes_oppositeName, oppositeScheme = scheme === "dark" ? "light" : "dark", oppositeName = name.replace(scheme, oppositeScheme), color = getVariable((_config_themes_name = config.themes[name]) === null || _config_themes_name === void 0 ? void 0 : _config_themes_name[key]), oppositeColor = getVariable((_config_themes_oppositeName = config.themes[oppositeName]) === null || _config_themes_oppositeName === void 0 ? void 0 : _config_themes_oppositeName[key]), dynamicVal = {
32
+ dynamic: {
33
+ [scheme]: color,
34
+ [oppositeScheme]: oppositeColor
35
+ }
36
+ };
37
+ return dynamicVal;
38
+ }
39
+ return process.env.NODE_ENV === "development" && curProps.debug && console.info(` \u{1F3A8} useTheme() tracking new key because of:
36
40
  not web: ${platform !== "web"}
37
41
  isIOS: ${isIos}
38
42
  deopt: ${curProps.deopt}
39
43
  fastScheme: ${getSetting("fastSchemeChange")}
40
44
  `), track(key), outVal;
45
+ }
41
46
  }
42
47
  };
43
48
  return [
@@ -51,7 +56,7 @@ function getThemeProxied(_props, state, _keys) {
51
56
  ]
52
57
  ];
53
58
  }));
54
- return cache.set(theme, proxied1), proxied1;
59
+ return cache.set(_state.theme, proxied1), proxied1;
55
60
  }
56
61
  export {
57
62
  getThemeProxied
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/Users/n8/tamagui/code/core/web/src/hooks/getThemeProxied.ts"],
4
- "mappings": "AAAA,SAASA,aAAa;AAEtB,SAASC,WAAWC,kBAAkB;AAEtC,SAASC,mBAAmB;AAQ5B,SAASC,iCAAiC;AAsC1C,IAAMC,QAAwC,oBAAIC,IAAAA,GAE9CC,SACAC,UAEEC,cAAc,CAAC;AAEd,SAASC,gBAEdC,QACAC,OACAC,OAA2C;AAE3C,MAAMC,QAAQF,OAAOE;AAErB,MAAI,CAACA;AACH,WAAOL;AAMT,MAHAF,UAAUM,OACVL,WAAWG,QAEPN,MAAMU,IAAID,KAAAA,GAAQ;AACpB,QAAME,UAAUX,MAAMY,IAAIH,KAAAA;AAC1B,WAAOE;EACT;AAKA,MAAM,EAAEE,MAAMC,OAAM,IAAKP,OAEnBQ,SAASnB,UAAAA;AAEf,WAASoB,MAAMC,KAAW;AACxB,IAAKf,YACAA,QAAQgB,YACXhB,QAAQgB,UAAU,oBAAIC,IAAAA,IAExBjB,QAAQgB,QAAQE,IAAIH,GAAAA,GAChBI,QAAQC,IAAIC,aAAa,iBAAiBpB,SAASqB,SACrDC,QAAQC,KAAK,2CAAoCT,GAAAA,EAAK;EAE1D;AAEA,MAAMN,WAAUgB,OAAOC,YACrBD,OAAOE,QAAQpB,KAAAA,EAAOqB,QAAQ,SAAA,OAAA;QAAC,CAACb,KAAKc,KAAAA,IAAM,OACnCpB,WAAU;MACd,GAAGoB;MACH,IAAIC,MAAM;AAER,eAAKC,WAAWC,wBAEdlB,MAAMC,GAAAA,GAEDc,MAAMC;MACf;MACApB,IAAIuB,UAAgB;AAClB,YAAMC,SAAStC,YAAYiC,KAAAA,GAKnBM,iBACJvB,UACAqB,aAAa,SACbxC,SACA,CAACQ,SAASmC,SACVzC,WAAW,kBAAA,KACXU,MAAMgC,aAAa,KACnBxC,0BAAAA;AAEF,YAAIsC,gBAAgB;cAGQtB,qBACQA,6BAH5ByB,iBAAiB1B,WAAW,SAAS,UAAU,QAC/C2B,eAAe5B,KAAK6B,QAAQ5B,QAAQ0B,cAAAA,GACpCG,QAAQ7C,aAAYiB,sBAAAA,OAAO6B,OAAO/B,IAAAA,OAAK,QAAnBE,wBAAAA,SAAAA,SAAAA,oBAAsBE,GAAAA,CAAI,GAC9C4B,gBAAgB/C,aAAYiB,8BAAAA,OAAO6B,OAAOH,YAAAA,OAAa,QAA3B1B,gCAAAA,SAAAA,SAAAA,4BAA8BE,GAAAA,CAAI,GAE9D6B,aAAa;YACjBC,SAAS;cACP,CAACjC,MAAAA,GAAS6B;cACV,CAACH,cAAAA,GAAiBK;YACpB;UACF;AAEA,iBAAOC;QACT;AAEA,eAAIzB,QAAQC,IAAIC,aAAa,iBAAiBpB,SAASqB,SACrDC,QAAQC,KAAK;2BACAS,aAAa,KAAA;yBACfxC,KAAAA;yBACAQ,SAASmC,KAAK;8BACTzC,WAAW,kBAAA,CAAA;eAC1B,GAGHmB,MAAMC,GAAAA,GAGDmB;MACT;IACF;AAEA,WAAO;MACL;QAACnB;QAAKN;;MACN;QAAC,IAAIM,GAAAA;QAAON;;;EAEhB,CAAA,CAAA;AAGFX,eAAMgD,IAAIvC,OAAOE,QAAAA,GAEVA;AACT;",
5
- "names": ["isIos", "getConfig", "getSetting", "getVariable", "doesRootSchemeMatchSystem", "cache", "Map", "curKeys", "curProps", "emptyObject", "getThemeProxied", "_props", "state", "_keys", "theme", "has", "proxied", "get", "name", "scheme", "config", "track", "key", "current", "Set", "add", "process", "env", "NODE_ENV", "debug", "console", "info", "Object", "fromEntries", "entries", "flatMap", "value", "val", "globalThis", "tamaguiAvoidTracking", "platform", "outVal", "shouldOptimize", "deopt", "inverses", "oppositeScheme", "oppositeName", "replace", "color", "themes", "oppositeColor", "dynamicVal", "dynamic", "set"]
4
+ "mappings": "AAAA,SAASA,aAAa;AAEtB,SAASC,WAAWC,kBAAkB;AAEtC,SAASC,mBAAmB;AAQ5B,SAASC,iCAAiC;AAC1C,SAASC,gBAAiC;AAqC1C,IAAMC,QAAwC,oBAAIC,IAAAA,GAE9CC,SACAC,UACAC,UAEEC,cAAc,CAAC;AAEd,SAASC,gBAEdC,QACAC,QACAC,OAA2C;AAE3C,MAAI,CAACD,QAAQE;AACX,WAAOL;AAOT,MAJAH,UAAUO,OACVN,WAAWI,QACXH,WAAWI,QAEPR,MAAMW,IAAIP,SAASM,KAAK,GAAG;AAC7B,QAAME,UAAUZ,MAAMa,IAAIT,SAASM,KAAK;AACxC,WAAOE;EACT;AAKA,MAAME,SAASnB,UAAAA;AAEf,WAASoB,MAAMC,KAAW;AACxB,QAAKd,YACAA,QAAQe,YACXf,QAAQe,UAAU,oBAAIC,IAAAA,IAExBhB,QAAQe,QAAQE,IAAIH,GAAAA,GAChBI,QAAQC,IAAIC,aAAa,iBAAiBnB,SAASoB,QAAO;UAK1DC,oBAJIC,SAAS1B,SAASc,IAAIX,OAAAA;AAC5BwB,cAAQC,KACN,uBAAgBF,MAAAA,uBAA6BT,GAAAA,IAC7Cd,UACAsB,qBAAAA,WAAW,YAAS,QAApBA,uBAAAA,SAAAA,SAAAA,mBAAsBX,IAAIY,SAAS,CAAA,CAAA;IAEvC;EACF;AAEA,MAAMb,WAAUgB,OAAOC,YACrBD,OAAOE,QAAQtB,OAAOE,KAAK,EAAEqB,QAAQ,SAAA,OAAA;QAAC,CAACf,KAAKgB,KAAAA,IAAM,OAC1CpB,WAAU;MACd,GAAGoB;MACH,IAAIC,MAAM;AAER,eAAKT,WAAWU,wBAEdnB,MAAMC,GAAAA,GAEDgB,MAAMC;MACf;MACApB,IAAIsB,UAAgB;AAClB,YAAK/B,UAEL;cAAMgC,SAASvC,YAAYmC,KAAAA,GACrB,EAAEK,MAAMC,QAAQC,SAAQ,IAAKnC,UAK3BoC,iBACJF,UACAH,aAAa,SACbzC,SACA,CAACS,SAASsC,SACV7C,WAAW,kBAAA,KACX2C,aAAa,KACbzC,0BAAAA;AAEF,cAAI0C,gBAAgB;gBAGQ1B,qBACQA,6BAH5B4B,iBAAiBJ,WAAW,SAAS,UAAU,QAC/CK,eAAeN,KAAKO,QAAQN,QAAQI,cAAAA,GACpCG,QAAQhD,aAAYiB,sBAAAA,OAAOgC,OAAOT,IAAAA,OAAK,QAAnBvB,wBAAAA,SAAAA,SAAAA,oBAAsBE,GAAAA,CAAI,GAC9C+B,gBAAgBlD,aAAYiB,8BAAAA,OAAOgC,OAAOH,YAAAA,OAAa,QAA3B7B,gCAAAA,SAAAA,SAAAA,4BAA8BE,GAAAA,CAAI,GAE9DgC,aAAa;cACjBC,SAAS;gBACP,CAACX,MAAAA,GAASO;gBACV,CAACH,cAAAA,GAAiBK;cACpB;YACF;AAEA,mBAAOC;UACT;AAEA,iBAAI5B,QAAQC,IAAIC,aAAa,iBAAiBnB,SAASoB,SACrDG,QAAQC,KAAK;2BACAQ,aAAa,KAAA;yBACfzC,KAAAA;yBACAS,SAASsC,KAAK;8BACT7C,WAAW,kBAAA,CAAA;eAC1B,GAGHmB,MAAMC,GAAAA,GAGDoB;;MACT;IACF;AAEA,WAAO;MACL;QAACpB;QAAKJ;;MACN;QAAC,IAAII,GAAAA;QAAOJ;;;EAEhB,CAAA,CAAA;AAGFZ,eAAMkD,IAAI1C,OAAOE,OAAOE,QAAAA,GAEjBA;AACT;",
5
+ "names": ["isIos", "getConfig", "getSetting", "getVariable", "doesRootSchemeMatchSystem", "keysToId", "cache", "Map", "curKeys", "curProps", "curState", "emptyObject", "getThemeProxied", "_props", "_state", "_keys", "theme", "has", "proxied", "get", "config", "track", "key", "current", "Set", "add", "process", "env", "NODE_ENV", "debug", "globalThis", "realId", "console", "info", "Object", "fromEntries", "entries", "flatMap", "value", "val", "tamaguiAvoidTracking", "platform", "outVal", "name", "scheme", "inverses", "shouldOptimize", "deopt", "oppositeScheme", "oppositeName", "replace", "color", "themes", "oppositeColor", "dynamicVal", "dynamic", "set"]
6
6
  }
@@ -7,11 +7,13 @@ import {
7
7
  useSyncExternalStore
8
8
  } from "react";
9
9
  import { getConfig } from "../config";
10
- const ThemeStateContext = createContext(""), allListeners = /* @__PURE__ */ new Map(), listenersByParent = {}, states = /* @__PURE__ */ new Map(), forceUpdateThemes = () => {
11
- allListeners.forEach((cb) => cb());
12
- }, getThemeState = (id) => states.get(id);
13
- let rootThemeState = null;
14
- const getRootThemeState = () => rootThemeState, HasRenderedOnce = /* @__PURE__ */ new WeakMap(), useThemeState = (props, isRoot = !1, keys) => {
10
+ const ThemeStateContext = createContext(""), keysToId = /* @__PURE__ */ new WeakMap(), allListeners = /* @__PURE__ */ new Map(), listenersByParent = {}, hasRenderedOnce = /* @__PURE__ */ new WeakMap(), pendingUpdate = /* @__PURE__ */ new Map(), states = /* @__PURE__ */ new Map();
11
+ let shouldForce = !1;
12
+ const forceUpdateThemes = () => {
13
+ cacheVersion++, shouldForce = !0, allListeners.forEach((cb) => cb());
14
+ }, getThemeState = (id) => states.get(id), cache = /* @__PURE__ */ new Map();
15
+ let cacheVersion = 0, themes = null, rootThemeState = null;
16
+ const getRootThemeState = () => rootThemeState, useThemeState = (props, isRoot = !1, keys) => {
15
17
  const { disable } = props, parentId = useContext(ThemeStateContext);
16
18
  if (disable)
17
19
  return states.get(parentId) || {
@@ -21,48 +23,56 @@ const getRootThemeState = () => rootThemeState, HasRenderedOnce = /* @__PURE__ *
21
23
  inverses: 0
22
24
  };
23
25
  const id = useId(), subscribe = useCallback(
24
- (cb) => (listenersByParent[parentId] ||= /* @__PURE__ */ new Set(), listenersByParent[parentId].add(id), allListeners.set(id, cb), () => {
26
+ (cb) => (listenersByParent[parentId] ||= /* @__PURE__ */ new Set(), listenersByParent[parentId].add(id), allListeners.set(id, () => {
27
+ pendingUpdate.set(id, shouldForce ? "force" : !0), cb();
28
+ }), () => {
25
29
  allListeners.delete(id), listenersByParent[parentId].delete(id);
26
30
  }),
27
- [id, parentId, keys]
28
- ), propsKey = getPropsKey(props), getSnapshot = () => getSnapshotFrom(props, propsKey, isRoot, id, parentId, keys);
31
+ [id, parentId]
32
+ ), propsKey = getPropsKey(props), getSnapshot = () => {
33
+ const last = states.get(id), needsUpdate = props.name === "light" || props.name === "dark" ? !0 : hasRenderedOnce.get(keys) ? keys?.current?.size ? !0 : props.needsUpdate?.() : !0, parentState = states.get(parentId), cacheKey = `${cacheVersion}${id}${propsKey}${parentState?.name || ""}${isRoot}`;
34
+ if (!needsUpdate && cache.has(cacheKey))
35
+ return cache.get(cacheKey);
36
+ const next = getSnapshotFrom(
37
+ last,
38
+ props,
39
+ propsKey,
40
+ isRoot,
41
+ id,
42
+ parentId,
43
+ needsUpdate,
44
+ pendingUpdate.get(id)
45
+ );
46
+ 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;
47
+ };
29
48
  process.env.NODE_ENV === "development" && globalThis.time && globalThis.time`theme-prep-uses`;
30
49
  const state = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
31
50
  return useIsomorphicLayoutEffect(() => {
32
- if (propsKey) {
33
- if (!HasRenderedOnce.has(keys)) {
34
- HasRenderedOnce.set(keys, !0);
35
- return;
36
- }
37
- process.env.NODE_ENV === "development" && props.debug && props.debug !== "profile" && console.warn(` \xB7 useTheme(${id}) scheduleUpdate`, propsKey, states.get(id)?.name), scheduleUpdate(id);
51
+ if (!hasRenderedOnce.get(keys)) {
52
+ hasRenderedOnce.set(keys, !0);
53
+ return;
38
54
  }
39
- }, [keys, propsKey]), process.env.NODE_ENV === "development" && props.debug && (console.groupCollapsed(
40
- ` \xB7 useTheme(${id}) =>`,
41
- state.name,
42
- id === state.id ? "\u{1F389}" : "\u23ED\uFE0F"
43
- ), console.info({
44
- state,
45
- parentId,
46
- props,
47
- propsKey,
48
- id,
49
- parentState: states.get(parentId)
50
- }), console.groupEnd()), state.id === id ? { ...state, isNew: !0 } : state;
51
- };
52
- let themes = null;
53
- const getSnapshotFrom = (props, propsKey, isRoot = !1, id, parentId, keys) => {
54
- const needsUpdate = keys?.current?.size || props.needsUpdate?.(), parentState = states.get(parentId);
55
+ propsKey && (process.env.NODE_ENV === "development" && props.debug && props.debug !== "profile" && console.warn(` \xB7 useTheme(${id}) scheduleUpdate`, propsKey, states.get(id)?.name), scheduleUpdate(id));
56
+ }, [keys, propsKey]), state.id === id ? { ...state, isNew: !0 } : state;
57
+ }, getSnapshotFrom = (lastState, props, propsKey, isRoot = !1, id, parentId, needsUpdate, pendingUpdate2) => {
58
+ const parentState = states.get(parentId);
55
59
  themes || (themes = getConfig().themes);
56
- const lastState = states.get(id), name = propsKey ? getNewThemeName(parentState?.name, props, !!needsUpdate) : null;
60
+ const name = !propsKey && pendingUpdate2 !== "force" ? null : getNewThemeName(
61
+ parentState?.name,
62
+ props,
63
+ pendingUpdate2 === "force" ? !0 : !!needsUpdate
64
+ ), isSameAsParent = !!(!name && propsKey);
57
65
  if (process.env.NODE_ENV === "development" && props.debug && props.debug !== "profile") {
58
66
  const message = ` \xB7 useTheme(${id}) snapshot ${name}, parent ${parentState?.id} needsUpdate ${needsUpdate}`;
59
- console.groupCollapsed(message), console.info({ lastState, parentState, props, propsKey, id, keys }), console.groupEnd();
67
+ console.groupCollapsed(message), console.trace({ name, lastState, parentState, props, propsKey, id, isSameAsParent }), console.groupEnd();
60
68
  }
61
- if (parentState && (!name && propsKey))
69
+ if (parentState && isSameAsParent)
62
70
  return parentState;
63
- if (!name)
64
- return lastState && !needsUpdate ? lastState : (states.set(id, parentState), parentState);
65
- if (lastState && lastState.name === name)
71
+ if (!name) {
72
+ const next = lastState ?? parentState;
73
+ return needsUpdate && pendingUpdate2 ? { ...parentState || lastState } : next;
74
+ }
75
+ if (pendingUpdate2 !== "force" && lastState && lastState.name === name)
66
76
  return lastState;
67
77
  const scheme = getScheme(name), parentInverses = parentState?.inverses ?? 0, isInverse = parentState && scheme !== parentState.scheme, inverses = parentInverses + (isInverse ? 1 : 0), nextState = {
68
78
  id,
@@ -74,7 +84,7 @@ const getSnapshotFrom = (props, propsKey, isRoot = !1, id, parentId, keys) => {
74
84
  inverses,
75
85
  isInverse
76
86
  };
77
- 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;
87
+ 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;
78
88
  };
79
89
  function scheduleUpdate(id) {
80
90
  const queue = [id], visited = /* @__PURE__ */ new Set();
@@ -95,7 +105,7 @@ const validSchemes = {
95
105
  function getScheme(name) {
96
106
  return validSchemes[name.split("_")[0]];
97
107
  }
98
- function getNewThemeName(parentName = "", { name, reset, componentName, inverse }, forceUpdate = !1) {
108
+ function getNewThemeName(parentName = "", { name, reset, componentName, inverse, debug }, forceUpdate = !1) {
99
109
  if (name && reset)
100
110
  throw new Error(
101
111
  process.env.NODE_ENV === "production" ? "\u274C004" : "Cannot reset and set a new name at the same time."
@@ -125,7 +135,8 @@ function getNewThemeName(parentName = "", { name, reset, componentName, inverse
125
135
  }
126
136
  if (found) break;
127
137
  }
128
- if (found && inverse) {
138
+ if (inverse) {
139
+ found ||= parentName;
129
140
  const scheme = found.split("_")[0];
130
141
  found = found.replace(new RegExp(`^${scheme}`), scheme === "light" ? "dark" : "light");
131
142
  }
@@ -146,6 +157,7 @@ export {
146
157
  getRootThemeState,
147
158
  getThemeState,
148
159
  hasThemeUpdatingProps,
160
+ keysToId,
149
161
  useThemeState
150
162
  };
151
163
  //# sourceMappingURL=useThemeState.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useThemeState.ts"],
4
- "mappings": "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",
5
- "names": ["themes"]
4
+ "mappings": "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",
5
+ "names": ["pendingUpdate", "themes"]
6
6
  }
@@ -2,16 +2,22 @@ import { useIsomorphicLayoutEffect } from "@tamagui/constants";
2
2
  import { createContext, useCallback, useContext, useId, useSyncExternalStore } from "react";
3
3
  import { getConfig } from "../config.mjs";
4
4
  const ThemeStateContext = createContext(""),
5
+ keysToId = /* @__PURE__ */new WeakMap(),
5
6
  allListeners = /* @__PURE__ */new Map(),
6
7
  listenersByParent = {},
7
- states = /* @__PURE__ */new Map(),
8
- forceUpdateThemes = () => {
9
- allListeners.forEach(cb => cb());
8
+ hasRenderedOnce = /* @__PURE__ */new WeakMap(),
9
+ pendingUpdate = /* @__PURE__ */new Map(),
10
+ states = /* @__PURE__ */new Map();
11
+ let shouldForce = !1;
12
+ const forceUpdateThemes = () => {
13
+ cacheVersion++, shouldForce = !0, allListeners.forEach(cb => cb());
10
14
  },
11
- getThemeState = id => states.get(id);
12
- let rootThemeState = null;
15
+ getThemeState = id => states.get(id),
16
+ cache = /* @__PURE__ */new Map();
17
+ let cacheVersion = 0,
18
+ themes = null,
19
+ rootThemeState = null;
13
20
  const getRootThemeState = () => rootThemeState,
14
- HasRenderedOnce = /* @__PURE__ */new WeakMap(),
15
21
  useThemeState = (props, isRoot = !1, keys) => {
16
22
  const {
17
23
  disable
@@ -24,70 +30,75 @@ const getRootThemeState = () => rootThemeState,
24
30
  inverses: 0
25
31
  };
26
32
  const id = useId(),
27
- subscribe = useCallback(cb => (listenersByParent[parentId] ||= /* @__PURE__ */new Set(), listenersByParent[parentId].add(id), allListeners.set(id, cb), () => {
33
+ subscribe = useCallback(cb => (listenersByParent[parentId] ||= /* @__PURE__ */new Set(), listenersByParent[parentId].add(id), allListeners.set(id, () => {
34
+ pendingUpdate.set(id, shouldForce ? "force" : !0), cb();
35
+ }), () => {
28
36
  allListeners.delete(id), listenersByParent[parentId].delete(id);
29
- }), [id, parentId, keys]),
37
+ }), [id, parentId]),
30
38
  propsKey = getPropsKey(props),
31
- getSnapshot = () => getSnapshotFrom(props, propsKey, isRoot, id, parentId, keys);
39
+ getSnapshot = () => {
40
+ const last = states.get(id),
41
+ needsUpdate = props.name === "light" || props.name === "dark" ? !0 : hasRenderedOnce.get(keys) ? keys?.current?.size ? !0 : props.needsUpdate?.() : !0,
42
+ parentState = states.get(parentId),
43
+ cacheKey = `${cacheVersion}${id}${propsKey}${parentState?.name || ""}${isRoot}`;
44
+ if (!needsUpdate && cache.has(cacheKey)) return cache.get(cacheKey);
45
+ const next = getSnapshotFrom(last, props, propsKey, isRoot, id, parentId, needsUpdate, pendingUpdate.get(id));
46
+ 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;
47
+ };
32
48
  process.env.NODE_ENV === "development" && globalThis.time && globalThis.time`theme-prep-uses`;
33
49
  const state = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
34
50
  return useIsomorphicLayoutEffect(() => {
35
- if (propsKey) {
36
- if (!HasRenderedOnce.has(keys)) {
37
- HasRenderedOnce.set(keys, !0);
38
- return;
39
- }
40
- process.env.NODE_ENV === "development" && props.debug && props.debug !== "profile" && console.warn(` \xB7 useTheme(${id}) scheduleUpdate`, propsKey, states.get(id)?.name), scheduleUpdate(id);
51
+ if (!hasRenderedOnce.get(keys)) {
52
+ hasRenderedOnce.set(keys, !0);
53
+ return;
41
54
  }
42
- }, [keys, propsKey]), process.env.NODE_ENV === "development" && props.debug && (console.groupCollapsed(` \xB7 useTheme(${id}) =>`, state.name, id === state.id ? "\u{1F389}" : "\u23ED\uFE0F"), console.info({
43
- state,
44
- parentId,
45
- props,
46
- propsKey,
47
- id,
48
- parentState: states.get(parentId)
49
- }), console.groupEnd()), state.id === id ? {
55
+ propsKey && (process.env.NODE_ENV === "development" && props.debug && props.debug !== "profile" && console.warn(` \xB7 useTheme(${id}) scheduleUpdate`, propsKey, states.get(id)?.name), scheduleUpdate(id));
56
+ }, [keys, propsKey]), state.id === id ? {
50
57
  ...state,
51
58
  isNew: !0
52
59
  } : state;
60
+ },
61
+ getSnapshotFrom = (lastState, props, propsKey, isRoot = !1, id, parentId, needsUpdate, pendingUpdate2) => {
62
+ const parentState = states.get(parentId);
63
+ themes || (themes = getConfig().themes);
64
+ const name = !propsKey && pendingUpdate2 !== "force" ? null : getNewThemeName(parentState?.name, props, pendingUpdate2 === "force" ? !0 : !!needsUpdate),
65
+ isSameAsParent = !!(!name && propsKey);
66
+ if (process.env.NODE_ENV === "development" && props.debug && props.debug !== "profile") {
67
+ const message = ` \xB7 useTheme(${id}) snapshot ${name}, parent ${parentState?.id} needsUpdate ${needsUpdate}`;
68
+ console.groupCollapsed(message), console.trace({
69
+ name,
70
+ lastState,
71
+ parentState,
72
+ props,
73
+ propsKey,
74
+ id,
75
+ isSameAsParent
76
+ }), console.groupEnd();
77
+ }
78
+ if (parentState && isSameAsParent) return parentState;
79
+ if (!name) {
80
+ const next = lastState ?? parentState;
81
+ return needsUpdate && pendingUpdate2 ? {
82
+ ...(parentState || lastState)
83
+ } : next;
84
+ }
85
+ if (pendingUpdate2 !== "force" && lastState && lastState.name === name) return lastState;
86
+ const scheme = getScheme(name),
87
+ parentInverses = parentState?.inverses ?? 0,
88
+ isInverse = parentState && scheme !== parentState.scheme,
89
+ inverses = parentInverses + (isInverse ? 1 : 0),
90
+ nextState = {
91
+ id,
92
+ name,
93
+ theme: themes[name],
94
+ scheme,
95
+ parentId,
96
+ parentName: parentState?.name,
97
+ inverses,
98
+ isInverse
99
+ };
100
+ 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;
53
101
  };
54
- let themes = null;
55
- const getSnapshotFrom = (props, propsKey, isRoot = !1, id, parentId, keys) => {
56
- const needsUpdate = keys?.current?.size || props.needsUpdate?.(),
57
- parentState = states.get(parentId);
58
- themes || (themes = getConfig().themes);
59
- const lastState = states.get(id),
60
- name = propsKey ? getNewThemeName(parentState?.name, props, !!needsUpdate) : null;
61
- if (process.env.NODE_ENV === "development" && props.debug && props.debug !== "profile") {
62
- const message = ` \xB7 useTheme(${id}) snapshot ${name}, parent ${parentState?.id} needsUpdate ${needsUpdate}`;
63
- console.groupCollapsed(message), console.info({
64
- lastState,
65
- parentState,
66
- props,
67
- propsKey,
68
- id,
69
- keys
70
- }), console.groupEnd();
71
- }
72
- if (parentState && !name && propsKey) return parentState;
73
- if (!name) return lastState && !needsUpdate ? lastState : (states.set(id, parentState), parentState);
74
- if (lastState && lastState.name === name) return lastState;
75
- const scheme = getScheme(name),
76
- parentInverses = parentState?.inverses ?? 0,
77
- isInverse = parentState && scheme !== parentState.scheme,
78
- inverses = parentInverses + (isInverse ? 1 : 0),
79
- nextState = {
80
- id,
81
- name,
82
- theme: themes[name],
83
- scheme,
84
- parentId,
85
- parentName: parentState?.name,
86
- inverses,
87
- isInverse
88
- };
89
- 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;
90
- };
91
102
  function scheduleUpdate(id) {
92
103
  const queue = [id],
93
104
  visited = /* @__PURE__ */new Set();
@@ -111,7 +122,8 @@ function getNewThemeName(parentName = "", {
111
122
  name,
112
123
  reset,
113
124
  componentName,
114
- inverse
125
+ inverse,
126
+ debug
115
127
  }, forceUpdate = !1) {
116
128
  if (name && reset) throw new Error(process.env.NODE_ENV === "production" ? "\u274C004" : "Cannot reset and set a new name at the same time.");
117
129
  if (reset) {
@@ -139,7 +151,8 @@ function getNewThemeName(parentName = "", {
139
151
  }
140
152
  if (found) break;
141
153
  }
142
- if (found && inverse) {
154
+ if (inverse) {
155
+ found ||= parentName;
143
156
  const scheme = found.split("_")[0];
144
157
  found = found.replace(new RegExp(`^${scheme}`), scheme === "light" ? "dark" : "light");
145
158
  }
@@ -156,5 +169,5 @@ const getPropsKey = ({
156
169
  componentName
157
170
  }) => `${name || ""}${inverse || ""}${reset || ""}${forceClassName || ""}${componentName || ""}`,
158
171
  hasThemeUpdatingProps = props => "inverse" in props || "name" in props || "reset" in props || "forceClassName" in props;
159
- export { ThemeStateContext, forceUpdateThemes, getRootThemeState, getThemeState, hasThemeUpdatingProps, useThemeState };
172
+ export { ThemeStateContext, forceUpdateThemes, getRootThemeState, getThemeState, hasThemeUpdatingProps, keysToId, useThemeState };
160
173
  //# sourceMappingURL=useThemeState.mjs.map