@tamagui/core 1.5.13 → 1.5.15

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 (126) hide show
  1. package/dist/cjs/config.js +2 -2
  2. package/dist/cjs/config.js.map +2 -2
  3. package/dist/cjs/createComponent.js +1 -1
  4. package/dist/cjs/createComponent.js.map +2 -2
  5. package/dist/cjs/createFont.web.test.js +125 -0
  6. package/dist/cjs/createFont.web.test.js.map +7 -0
  7. package/dist/cjs/createTamagui.js +1 -3
  8. package/dist/cjs/createTamagui.js.map +2 -2
  9. package/dist/cjs/createTokens.web.test.js +28 -0
  10. package/dist/cjs/createTokens.web.test.js.map +7 -0
  11. package/dist/cjs/createVariable.js.map +1 -1
  12. package/dist/cjs/createVariable.web.test.js +7 -0
  13. package/dist/cjs/createVariable.web.test.js.map +7 -0
  14. package/dist/cjs/helpers/ThemeManager.test.js +465 -0
  15. package/dist/cjs/helpers/ThemeManager.test.js.map +7 -0
  16. package/dist/cjs/helpers/expandStyles.js +12 -2
  17. package/dist/cjs/helpers/expandStyles.js.map +3 -3
  18. package/dist/cjs/helpers/getSplitStyles.js +15 -20
  19. package/dist/cjs/helpers/getSplitStyles.js.map +2 -2
  20. package/dist/cjs/helpers/getStylesAtomic.native.js +5 -8
  21. package/dist/cjs/helpers/getStylesAtomic.native.js.map +2 -2
  22. package/dist/cjs/helpers/normalizeColor.js +5 -5
  23. package/dist/cjs/helpers/normalizeColor.js.map +3 -3
  24. package/dist/cjs/helpers/useShallowSetState.js +14 -15
  25. package/dist/cjs/helpers/useShallowSetState.js.map +2 -2
  26. package/dist/cjs/hooks/useMedia.js +12 -13
  27. package/dist/cjs/hooks/useMedia.js.map +2 -2
  28. package/dist/cjs/hooks/useTheme.js +21 -17
  29. package/dist/cjs/hooks/useTheme.js.map +2 -2
  30. package/dist/cjs/index.js.map +2 -2
  31. package/dist/cjs/setupReactNative.js +8 -9
  32. package/dist/cjs/setupReactNative.js.map +2 -2
  33. package/dist/cjs/styled.js.map +2 -2
  34. package/dist/cjs/types.js.map +1 -1
  35. package/dist/cjs/views/Stack.web.test.js +22 -0
  36. package/dist/cjs/views/Stack.web.test.js.map +7 -0
  37. package/dist/esm/config.js +2 -2
  38. package/dist/esm/config.js.map +2 -2
  39. package/dist/esm/config.mjs +2 -2
  40. package/dist/esm/config.mjs.map +2 -2
  41. package/dist/esm/createComponent.js +1 -1
  42. package/dist/esm/createComponent.js.map +2 -2
  43. package/dist/esm/createComponent.mjs +1 -1
  44. package/dist/esm/createComponent.mjs.map +2 -2
  45. package/dist/esm/createFont.web.test.js +124 -0
  46. package/dist/esm/createFont.web.test.js.map +7 -0
  47. package/dist/esm/createFont.web.test.mjs +124 -0
  48. package/dist/esm/createFont.web.test.mjs.map +7 -0
  49. package/dist/esm/createTamagui.js +1 -3
  50. package/dist/esm/createTamagui.js.map +2 -2
  51. package/dist/esm/createTamagui.mjs +1 -3
  52. package/dist/esm/createTamagui.mjs.map +2 -2
  53. package/dist/esm/createTokens.web.test.js +27 -0
  54. package/dist/esm/createTokens.web.test.js.map +7 -0
  55. package/dist/esm/createTokens.web.test.mjs +27 -0
  56. package/dist/esm/createTokens.web.test.mjs.map +7 -0
  57. package/dist/esm/createVariable.js.map +1 -1
  58. package/dist/esm/createVariable.mjs.map +1 -1
  59. package/dist/esm/createVariable.web.test.js +6 -0
  60. package/dist/esm/createVariable.web.test.js.map +7 -0
  61. package/dist/esm/createVariable.web.test.mjs +6 -0
  62. package/dist/esm/createVariable.web.test.mjs.map +7 -0
  63. package/dist/esm/helpers/ThemeManager.test.js +464 -0
  64. package/dist/esm/helpers/ThemeManager.test.js.map +7 -0
  65. package/dist/esm/helpers/ThemeManager.test.mjs +464 -0
  66. package/dist/esm/helpers/ThemeManager.test.mjs.map +7 -0
  67. package/dist/esm/helpers/expandStyles.js +1 -1
  68. package/dist/esm/helpers/expandStyles.js.map +2 -2
  69. package/dist/esm/helpers/expandStyles.mjs +1 -1
  70. package/dist/esm/helpers/expandStyles.mjs.map +2 -2
  71. package/dist/esm/helpers/getSplitStyles.js +15 -20
  72. package/dist/esm/helpers/getSplitStyles.js.map +2 -2
  73. package/dist/esm/helpers/getSplitStyles.mjs +15 -20
  74. package/dist/esm/helpers/getSplitStyles.mjs.map +2 -2
  75. package/dist/esm/helpers/getStylesAtomic.native.js +4 -6
  76. package/dist/esm/helpers/getStylesAtomic.native.js.map +2 -2
  77. package/dist/esm/helpers/getStylesAtomic.native.mjs +4 -6
  78. package/dist/esm/helpers/getStylesAtomic.native.mjs.map +2 -2
  79. package/dist/esm/helpers/normalizeColor.js +4 -4
  80. package/dist/esm/helpers/normalizeColor.js.map +3 -3
  81. package/dist/esm/helpers/normalizeColor.mjs +4 -4
  82. package/dist/esm/helpers/normalizeColor.mjs.map +3 -3
  83. package/dist/esm/helpers/useShallowSetState.js +14 -15
  84. package/dist/esm/helpers/useShallowSetState.js.map +2 -2
  85. package/dist/esm/helpers/useShallowSetState.mjs +14 -15
  86. package/dist/esm/helpers/useShallowSetState.mjs.map +2 -2
  87. package/dist/esm/hooks/useMedia.js +12 -13
  88. package/dist/esm/hooks/useMedia.js.map +2 -2
  89. package/dist/esm/hooks/useMedia.mjs +12 -13
  90. package/dist/esm/hooks/useMedia.mjs.map +2 -2
  91. package/dist/esm/hooks/useTheme.js +21 -17
  92. package/dist/esm/hooks/useTheme.js.map +2 -2
  93. package/dist/esm/hooks/useTheme.mjs +21 -17
  94. package/dist/esm/hooks/useTheme.mjs.map +2 -2
  95. package/dist/esm/index.js.map +2 -2
  96. package/dist/esm/index.mjs.map +2 -2
  97. package/dist/esm/setupReactNative.js +8 -9
  98. package/dist/esm/setupReactNative.js.map +2 -2
  99. package/dist/esm/setupReactNative.mjs +8 -9
  100. package/dist/esm/setupReactNative.mjs.map +2 -2
  101. package/dist/esm/styled.js.map +2 -2
  102. package/dist/esm/styled.mjs.map +2 -2
  103. package/dist/esm/views/Stack.web.test.js +21 -0
  104. package/dist/esm/views/Stack.web.test.js.map +7 -0
  105. package/dist/esm/views/Stack.web.test.mjs +21 -0
  106. package/dist/esm/views/Stack.web.test.mjs.map +7 -0
  107. package/package.json +5 -5
  108. package/src/index.ts +0 -1
  109. package/types/config.d.ts.map +1 -1
  110. package/types/createFont.web.test.d.ts.map +1 -0
  111. package/types/createTamagui.d.ts.map +1 -1
  112. package/types/createTokens.web.test.d.ts.map +1 -0
  113. package/types/createVariable.d.ts.map +1 -1
  114. package/types/createVariable.web.test.d.ts.map +1 -0
  115. package/types/helpers/ThemeManager.test.d.ts.map +1 -0
  116. package/types/helpers/getSplitStyles.d.ts.map +1 -1
  117. package/types/helpers/getStylesAtomic.native.d.ts.map +1 -1
  118. package/types/helpers/normalizeColor.d.ts.map +1 -1
  119. package/types/helpers/useShallowSetState.d.ts.map +1 -1
  120. package/types/hooks/useMedia.d.ts.map +1 -1
  121. package/types/hooks/useTheme.d.ts.map +1 -1
  122. package/types/index.d.ts.map +1 -1
  123. package/types/setupReactNative.d.ts.map +1 -1
  124. package/types/styled.d.ts.map +1 -1
  125. package/types/types.d.ts.map +1 -1
  126. package/types/views/Stack.web.test.d.ts.map +1 -0
@@ -1,12 +1,10 @@
1
- const empty = () => {
1
+ function getStylesAtomic() {
2
2
  console.warn("no-op native");
3
+ }
4
+ const startClearStyleCacheInterval = () => {
3
5
  };
4
- const getStylesAtomic = empty;
5
- const getAtomicStyle = empty;
6
- const styleToCSS = empty;
7
6
  export {
8
- getAtomicStyle,
9
7
  getStylesAtomic,
10
- styleToCSS
8
+ startClearStyleCacheInterval
11
9
  };
12
10
  //# sourceMappingURL=getStylesAtomic.native.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/helpers/getStylesAtomic.native.ts"],
4
- "sourcesContent": ["const empty = () => {\n // eslint-disable-next-line no-console\n console.warn('no-op native')\n}\n\nexport const getStylesAtomic = empty\nexport const getAtomicStyle = empty\nexport const styleToCSS = empty\n"],
5
- "mappings": "AAAA,MAAM,QAAQ,MAAM;AAElB,UAAQ,KAAK,cAAc;AAC7B;AAEO,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,aAAa;",
4
+ "sourcesContent": ["export function getStylesAtomic() {\n // eslint-disable-next-line no-console\n console.warn('no-op native')\n}\n\nexport const startClearStyleCacheInterval = () => {}\n"],
5
+ "mappings": "AAAO,SAAS,kBAAkB;AAEhC,UAAQ,KAAK,cAAc;AAC7B;AAEO,MAAM,+BAA+B,MAAM;AAAC;",
6
6
  "names": []
7
7
  }
@@ -1,12 +1,10 @@
1
- const empty = () => {
1
+ function getStylesAtomic() {
2
2
  console.warn("no-op native");
3
+ }
4
+ const startClearStyleCacheInterval = () => {
3
5
  };
4
- const getStylesAtomic = empty;
5
- const getAtomicStyle = empty;
6
- const styleToCSS = empty;
7
6
  export {
8
- getAtomicStyle,
9
7
  getStylesAtomic,
10
- styleToCSS
8
+ startClearStyleCacheInterval
11
9
  };
12
10
  //# sourceMappingURL=getStylesAtomic.native.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/helpers/getStylesAtomic.native.ts"],
4
- "sourcesContent": ["const empty = () => {\n // eslint-disable-next-line no-console\n console.warn('no-op native')\n}\n\nexport const getStylesAtomic = empty\nexport const getAtomicStyle = empty\nexport const styleToCSS = empty\n"],
5
- "mappings": "AAAA,MAAM,QAAQ,MAAM;AAElB,UAAQ,KAAK,cAAc;AAC7B;AAEO,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,aAAa;",
4
+ "sourcesContent": ["export function getStylesAtomic() {\n // eslint-disable-next-line no-console\n console.warn('no-op native')\n}\n\nexport const startClearStyleCacheInterval = () => {}\n"],
5
+ "mappings": "AAAO,SAAS,kBAAkB;AAEhC,UAAQ,KAAK,cAAc;AAC7B;AAEO,MAAM,+BAA+B,MAAM;AAAC;",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import { isWeb } from "@tamagui/constants";
2
- import * as NCC from "@tamagui/normalize-css-color";
3
- const rgba = NCC.rgba;
2
+ import normalizeCSSColor, { rgba } from "@tamagui/normalize-css-color";
3
+ import { rgba as rgba2 } from "@tamagui/normalize-css-color";
4
4
  const normalizeColor = (color, opacity) => {
5
5
  if (color === null || color === void 0) {
6
6
  return;
@@ -11,7 +11,7 @@ const normalizeColor = (color, opacity) => {
11
11
  if (color[0] === "$" || isWeb && (webColors[color] || color[0] === "_" || color.startsWith("var("))) {
12
12
  return color;
13
13
  }
14
- const colorProcessed = NCC.normalizeCSSColor(color);
14
+ const colorProcessed = normalizeCSSColor(color);
15
15
  if (colorProcessed !== null) {
16
16
  const { r, g, b, a } = rgba(colorProcessed);
17
17
  return `rgba(${r},${g},${b},${(opacity ?? a).toFixed(2)})`;
@@ -31,6 +31,6 @@ const webColors = {
31
31
  };
32
32
  export {
33
33
  normalizeColor,
34
- rgba
34
+ rgba2 as rgba
35
35
  };
36
36
  //# sourceMappingURL=normalizeColor.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/helpers/normalizeColor.ts"],
4
- "sourcesContent": ["import { isWeb } from '@tamagui/constants'\nimport * as NCC from '@tamagui/normalize-css-color'\n\nexport const rgba = NCC.rgba\n\nexport const normalizeColor = (color?: string | null, opacity?: number) => {\n if (color === null || color === undefined) {\n return\n }\n if (color === 'transparent') {\n return `rgba(0,0,0,0)`\n }\n if (\n color[0] === '$' ||\n (isWeb && (webColors[color] || color[0] === '_' || color.startsWith('var(')))\n ) {\n return color\n }\n const colorProcessed = NCC.normalizeCSSColor(color)\n if (colorProcessed !== null) {\n const { r, g, b, a } = rgba(colorProcessed)\n return `rgba(${r},${g},${b},${(opacity ?? a).toFixed(2)})`\n }\n\n if (isWeb) {\n return color\n } else {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`Unknown color value: ${color}`)\n }\n }\n}\n\nconst webColors = {\n currentColor: true,\n currentcolor: true,\n inherit: true,\n}\n"],
5
- "mappings": "AAAA,SAAS,aAAa;AACtB,YAAY,SAAS;AAEd,MAAM,OAAO,IAAI;AAEjB,MAAM,iBAAiB,CAAC,OAAuB,YAAqB;AACzE,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC;AAAA,EACF;AACA,MAAI,UAAU,eAAe;AAC3B,WAAO;AAAA,EACT;AACA,MACE,MAAM,CAAC,MAAM,OACZ,UAAU,UAAU,KAAK,KAAK,MAAM,CAAC,MAAM,OAAO,MAAM,WAAW,MAAM,IAC1E;AACA,WAAO;AAAA,EACT;AACA,QAAM,iBAAiB,IAAI,kBAAkB,KAAK;AAClD,MAAI,mBAAmB,MAAM;AAC3B,UAAM,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,KAAK,cAAc;AAC1C,WAAO,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG,QAAQ,CAAC;AAAA,EACxD;AAEA,MAAI,OAAO;AACT,WAAO;AAAA,EACT,OAAO;AACL,QAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,cAAQ,KAAK,wBAAwB,OAAO;AAAA,IAC9C;AAAA,EACF;AACF;AAEA,MAAM,YAAY;AAAA,EAChB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,SAAS;AACX;",
6
- "names": []
4
+ "sourcesContent": ["import { isWeb } from '@tamagui/constants'\nimport normalizeCSSColor, { rgba } from '@tamagui/normalize-css-color'\n\nexport { rgba } from '@tamagui/normalize-css-color'\n\nexport const normalizeColor = (color?: string | null, opacity?: number) => {\n if (color === null || color === undefined) {\n return\n }\n if (color === 'transparent') {\n return `rgba(0,0,0,0)`\n }\n if (\n color[0] === '$' ||\n (isWeb && (webColors[color] || color[0] === '_' || color.startsWith('var(')))\n ) {\n return color\n }\n const colorProcessed = normalizeCSSColor(color)\n if (colorProcessed !== null) {\n const { r, g, b, a } = rgba(colorProcessed)\n return `rgba(${r},${g},${b},${(opacity ?? a).toFixed(2)})`\n }\n\n if (isWeb) {\n return color\n } else {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`Unknown color value: ${color}`)\n }\n }\n}\n\nconst webColors = {\n currentColor: true,\n currentcolor: true,\n inherit: true,\n}\n"],
5
+ "mappings": "AAAA,SAAS,aAAa;AACtB,OAAO,qBAAqB,YAAY;AAExC,SAAS,QAAAA,aAAY;AAEd,MAAM,iBAAiB,CAAC,OAAuB,YAAqB;AACzE,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC;AAAA,EACF;AACA,MAAI,UAAU,eAAe;AAC3B,WAAO;AAAA,EACT;AACA,MACE,MAAM,CAAC,MAAM,OACZ,UAAU,UAAU,KAAK,KAAK,MAAM,CAAC,MAAM,OAAO,MAAM,WAAW,MAAM,IAC1E;AACA,WAAO;AAAA,EACT;AACA,QAAM,iBAAiB,kBAAkB,KAAK;AAC9C,MAAI,mBAAmB,MAAM;AAC3B,UAAM,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,KAAK,cAAc;AAC1C,WAAO,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG,QAAQ,CAAC;AAAA,EACxD;AAEA,MAAI,OAAO;AACT,WAAO;AAAA,EACT,OAAO;AACL,QAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,cAAQ,KAAK,wBAAwB,OAAO;AAAA,IAC9C;AAAA,EACF;AACF;AAEA,MAAM,YAAY;AAAA,EAChB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,SAAS;AACX;",
6
+ "names": ["rgba"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import { isWeb } from "@tamagui/constants";
2
- import * as NCC from "@tamagui/normalize-css-color";
3
- const rgba = NCC.rgba;
2
+ import normalizeCSSColor, { rgba } from "@tamagui/normalize-css-color";
3
+ import { rgba as rgba2 } from "@tamagui/normalize-css-color";
4
4
  const normalizeColor = (color, opacity) => {
5
5
  if (color === null || color === void 0) {
6
6
  return;
@@ -11,7 +11,7 @@ const normalizeColor = (color, opacity) => {
11
11
  if (color[0] === "$" || isWeb && (webColors[color] || color[0] === "_" || color.startsWith("var("))) {
12
12
  return color;
13
13
  }
14
- const colorProcessed = NCC.normalizeCSSColor(color);
14
+ const colorProcessed = normalizeCSSColor(color);
15
15
  if (colorProcessed !== null) {
16
16
  const { r, g, b, a } = rgba(colorProcessed);
17
17
  return `rgba(${r},${g},${b},${(opacity ?? a).toFixed(2)})`;
@@ -31,6 +31,6 @@ const webColors = {
31
31
  };
32
32
  export {
33
33
  normalizeColor,
34
- rgba
34
+ rgba2 as rgba
35
35
  };
36
36
  //# sourceMappingURL=normalizeColor.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/helpers/normalizeColor.ts"],
4
- "sourcesContent": ["import { isWeb } from '@tamagui/constants'\nimport * as NCC from '@tamagui/normalize-css-color'\n\nexport const rgba = NCC.rgba\n\nexport const normalizeColor = (color?: string | null, opacity?: number) => {\n if (color === null || color === undefined) {\n return\n }\n if (color === 'transparent') {\n return `rgba(0,0,0,0)`\n }\n if (\n color[0] === '$' ||\n (isWeb && (webColors[color] || color[0] === '_' || color.startsWith('var(')))\n ) {\n return color\n }\n const colorProcessed = NCC.normalizeCSSColor(color)\n if (colorProcessed !== null) {\n const { r, g, b, a } = rgba(colorProcessed)\n return `rgba(${r},${g},${b},${(opacity ?? a).toFixed(2)})`\n }\n\n if (isWeb) {\n return color\n } else {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`Unknown color value: ${color}`)\n }\n }\n}\n\nconst webColors = {\n currentColor: true,\n currentcolor: true,\n inherit: true,\n}\n"],
5
- "mappings": "AAAA,SAAS,aAAa;AACtB,YAAY,SAAS;AAEd,MAAM,OAAO,IAAI;AAEjB,MAAM,iBAAiB,CAAC,OAAuB,YAAqB;AACzE,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC;AAAA,EACF;AACA,MAAI,UAAU,eAAe;AAC3B,WAAO;AAAA,EACT;AACA,MACE,MAAM,CAAC,MAAM,OACZ,UAAU,UAAU,KAAK,KAAK,MAAM,CAAC,MAAM,OAAO,MAAM,WAAW,MAAM,IAC1E;AACA,WAAO;AAAA,EACT;AACA,QAAM,iBAAiB,IAAI,kBAAkB,KAAK;AAClD,MAAI,mBAAmB,MAAM;AAC3B,UAAM,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,KAAK,cAAc;AAC1C,WAAO,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG,QAAQ,CAAC;AAAA,EACxD;AAEA,MAAI,OAAO;AACT,WAAO;AAAA,EACT,OAAO;AACL,QAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,cAAQ,KAAK,wBAAwB,OAAO;AAAA,IAC9C;AAAA,EACF;AACF;AAEA,MAAM,YAAY;AAAA,EAChB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,SAAS;AACX;",
6
- "names": []
4
+ "sourcesContent": ["import { isWeb } from '@tamagui/constants'\nimport normalizeCSSColor, { rgba } from '@tamagui/normalize-css-color'\n\nexport { rgba } from '@tamagui/normalize-css-color'\n\nexport const normalizeColor = (color?: string | null, opacity?: number) => {\n if (color === null || color === undefined) {\n return\n }\n if (color === 'transparent') {\n return `rgba(0,0,0,0)`\n }\n if (\n color[0] === '$' ||\n (isWeb && (webColors[color] || color[0] === '_' || color.startsWith('var(')))\n ) {\n return color\n }\n const colorProcessed = normalizeCSSColor(color)\n if (colorProcessed !== null) {\n const { r, g, b, a } = rgba(colorProcessed)\n return `rgba(${r},${g},${b},${(opacity ?? a).toFixed(2)})`\n }\n\n if (isWeb) {\n return color\n } else {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`Unknown color value: ${color}`)\n }\n }\n}\n\nconst webColors = {\n currentColor: true,\n currentcolor: true,\n inherit: true,\n}\n"],
5
+ "mappings": "AAAA,SAAS,aAAa;AACtB,OAAO,qBAAqB,YAAY;AAExC,SAAS,QAAAA,aAAY;AAEd,MAAM,iBAAiB,CAAC,OAAuB,YAAqB;AACzE,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC;AAAA,EACF;AACA,MAAI,UAAU,eAAe;AAC3B,WAAO;AAAA,EACT;AACA,MACE,MAAM,CAAC,MAAM,OACZ,UAAU,UAAU,KAAK,KAAK,MAAM,CAAC,MAAM,OAAO,MAAM,WAAW,MAAM,IAC1E;AACA,WAAO;AAAA,EACT;AACA,QAAM,iBAAiB,kBAAkB,KAAK;AAC9C,MAAI,mBAAmB,MAAM;AAC3B,UAAM,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,KAAK,cAAc;AAC1C,WAAO,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG,QAAQ,CAAC;AAAA,EACxD;AAEA,MAAI,OAAO;AACT,WAAO;AAAA,EACT,OAAO;AACL,QAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,cAAQ,KAAK,wBAAwB,OAAO;AAAA,IAC9C;AAAA,EACF;AACF;AAEA,MAAM,YAAY;AAAA,EAChB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,SAAS;AACX;",
6
+ "names": ["rgba"]
7
7
  }
@@ -1,34 +1,33 @@
1
1
  import { startTransition, useCallback } from "react";
2
- function useShallowSetState(setter, debug, debugName) {
2
+ function useShallowSetState(setter, transition, debug, debugName) {
3
3
  return useCallback(
4
4
  (next) => {
5
- const shouldTransition = Object.keys(next).every(
6
- (k) => transitionKeys.has(k)
7
- );
8
- const run = shouldTransition ? startTransition : (_) => _();
9
- run(() => {
5
+ const run = () => {
10
6
  setter((prev) => {
11
7
  for (const key in next) {
12
8
  if (prev[key] !== next[key]) {
13
- if (process.env.NODE_ENV === "development" && debug === "verbose") {
14
- console.log(` \u25B2 setState ${debugName}`, next);
9
+ if (process.env.NODE_ENV === "development") {
10
+ if (debug === "verbose") {
11
+ console.log(` \u25B2 setState ${debugName}`, next);
12
+ }
15
13
  }
16
14
  return { ...prev, ...next };
17
15
  }
18
16
  }
19
17
  return prev;
20
18
  });
21
- });
19
+ };
20
+ if (transition) {
21
+ startTransition(() => {
22
+ run();
23
+ });
24
+ } else {
25
+ run();
26
+ }
22
27
  },
23
28
  [setter]
24
29
  );
25
30
  }
26
- const transitionKeys = /* @__PURE__ */ new Set([
27
- "press",
28
- "pressIn",
29
- "focus",
30
- "unmounted"
31
- ]);
32
31
  export {
33
32
  useShallowSetState
34
33
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/helpers/useShallowSetState.tsx"],
4
- "sourcesContent": ["import React, { startTransition, useCallback } from 'react'\n\nimport { DebugProp } from '../types'\nimport { TamaguiComponentState } from '..'\n\nexport function useShallowSetState<State extends TamaguiComponentState>(\n setter: React.Dispatch<React.SetStateAction<State>>,\n debug?: DebugProp,\n debugName?: string\n) {\n return useCallback(\n (next: Partial<State>) => {\n const shouldTransition = Object.keys(next).every((k) =>\n transitionKeys.has(k as any)\n )\n const run = shouldTransition ? startTransition : (_) => _()\n run(() => {\n setter((prev) => {\n for (const key in next) {\n if (prev[key] !== next[key]) {\n if (process.env.NODE_ENV === 'development' && debug === 'verbose') {\n // eslint-disable-next-line no-console\n console.log(` \u25B2 setState ${debugName}`, next)\n }\n return { ...prev, ...next }\n }\n }\n return prev\n })\n })\n },\n [setter]\n )\n}\n\nconst transitionKeys = new Set<keyof TamaguiComponentState>([\n 'press',\n 'pressIn',\n 'focus',\n 'unmounted',\n])\n"],
5
- "mappings": "AAAA,SAAgB,iBAAiB,mBAAmB;AAK7C,SAAS,mBACd,QACA,OACA,WACA;AACA,SAAO;AAAA,IACL,CAAC,SAAyB;AACxB,YAAM,mBAAmB,OAAO,KAAK,IAAI,EAAE;AAAA,QAAM,CAAC,MAChD,eAAe,IAAI,CAAQ;AAAA,MAC7B;AACA,YAAM,MAAM,mBAAmB,kBAAkB,CAAC,MAAM,EAAE;AAC1D,UAAI,MAAM;AACR,eAAO,CAAC,SAAS;AACf,qBAAW,OAAO,MAAM;AACtB,gBAAI,KAAK,GAAG,MAAM,KAAK,GAAG,GAAG;AAC3B,kBAAI,QAAQ,IAAI,aAAa,iBAAiB,UAAU,WAAW;AAEjE,wBAAQ,IAAI,oBAAe,aAAa,IAAI;AAAA,cAC9C;AACA,qBAAO,EAAE,GAAG,MAAM,GAAG,KAAK;AAAA,YAC5B;AAAA,UACF;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AACF;AAEA,MAAM,iBAAiB,oBAAI,IAAiC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;",
4
+ "sourcesContent": ["import React, { startTransition, useCallback } from 'react'\n\nimport { DebugProp } from '../types'\n\nexport function useShallowSetState<State extends Object>(\n setter: React.Dispatch<React.SetStateAction<State>>,\n transition?: boolean,\n debug?: DebugProp,\n debugName?: string\n) {\n return useCallback(\n (next: Partial<State>) => {\n const run = () => {\n setter((prev) => {\n for (const key in next) {\n if (prev[key] !== next[key]) {\n if (process.env.NODE_ENV === 'development') {\n if (debug === 'verbose') {\n // eslint-disable-next-line no-console\n console.log(` \u25B2 setState ${debugName}`, next)\n }\n }\n return { ...prev, ...next }\n }\n }\n return prev\n })\n }\n if (transition) {\n startTransition(() => {\n run()\n })\n } else {\n run()\n }\n },\n [setter]\n )\n}\n"],
5
+ "mappings": "AAAA,SAAgB,iBAAiB,mBAAmB;AAI7C,SAAS,mBACd,QACA,YACA,OACA,WACA;AACA,SAAO;AAAA,IACL,CAAC,SAAyB;AACxB,YAAM,MAAM,MAAM;AAChB,eAAO,CAAC,SAAS;AACf,qBAAW,OAAO,MAAM;AACtB,gBAAI,KAAK,GAAG,MAAM,KAAK,GAAG,GAAG;AAC3B,kBAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,oBAAI,UAAU,WAAW;AAEvB,0BAAQ,IAAI,oBAAe,aAAa,IAAI;AAAA,gBAC9C;AAAA,cACF;AACA,qBAAO,EAAE,GAAG,MAAM,GAAG,KAAK;AAAA,YAC5B;AAAA,UACF;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AACA,UAAI,YAAY;AACd,wBAAgB,MAAM;AACpB,cAAI;AAAA,QACN,CAAC;AAAA,MACH,OAAO;AACL,YAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,34 +1,33 @@
1
1
  import { startTransition, useCallback } from "react";
2
- function useShallowSetState(setter, debug, debugName) {
2
+ function useShallowSetState(setter, transition, debug, debugName) {
3
3
  return useCallback(
4
4
  (next) => {
5
- const shouldTransition = Object.keys(next).every(
6
- (k) => transitionKeys.has(k)
7
- );
8
- const run = shouldTransition ? startTransition : (_) => _();
9
- run(() => {
5
+ const run = () => {
10
6
  setter((prev) => {
11
7
  for (const key in next) {
12
8
  if (prev[key] !== next[key]) {
13
- if (process.env.NODE_ENV === "development" && debug === "verbose") {
14
- console.log(` \u25B2 setState ${debugName}`, next);
9
+ if (process.env.NODE_ENV === "development") {
10
+ if (debug === "verbose") {
11
+ console.log(` \u25B2 setState ${debugName}`, next);
12
+ }
15
13
  }
16
14
  return { ...prev, ...next };
17
15
  }
18
16
  }
19
17
  return prev;
20
18
  });
21
- });
19
+ };
20
+ if (transition) {
21
+ startTransition(() => {
22
+ run();
23
+ });
24
+ } else {
25
+ run();
26
+ }
22
27
  },
23
28
  [setter]
24
29
  );
25
30
  }
26
- const transitionKeys = /* @__PURE__ */ new Set([
27
- "press",
28
- "pressIn",
29
- "focus",
30
- "unmounted"
31
- ]);
32
31
  export {
33
32
  useShallowSetState
34
33
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/helpers/useShallowSetState.tsx"],
4
- "sourcesContent": ["import React, { startTransition, useCallback } from 'react'\n\nimport { DebugProp } from '../types'\nimport { TamaguiComponentState } from '..'\n\nexport function useShallowSetState<State extends TamaguiComponentState>(\n setter: React.Dispatch<React.SetStateAction<State>>,\n debug?: DebugProp,\n debugName?: string\n) {\n return useCallback(\n (next: Partial<State>) => {\n const shouldTransition = Object.keys(next).every((k) =>\n transitionKeys.has(k as any)\n )\n const run = shouldTransition ? startTransition : (_) => _()\n run(() => {\n setter((prev) => {\n for (const key in next) {\n if (prev[key] !== next[key]) {\n if (process.env.NODE_ENV === 'development' && debug === 'verbose') {\n // eslint-disable-next-line no-console\n console.log(` \u25B2 setState ${debugName}`, next)\n }\n return { ...prev, ...next }\n }\n }\n return prev\n })\n })\n },\n [setter]\n )\n}\n\nconst transitionKeys = new Set<keyof TamaguiComponentState>([\n 'press',\n 'pressIn',\n 'focus',\n 'unmounted',\n])\n"],
5
- "mappings": "AAAA,SAAgB,iBAAiB,mBAAmB;AAK7C,SAAS,mBACd,QACA,OACA,WACA;AACA,SAAO;AAAA,IACL,CAAC,SAAyB;AACxB,YAAM,mBAAmB,OAAO,KAAK,IAAI,EAAE;AAAA,QAAM,CAAC,MAChD,eAAe,IAAI,CAAQ;AAAA,MAC7B;AACA,YAAM,MAAM,mBAAmB,kBAAkB,CAAC,MAAM,EAAE;AAC1D,UAAI,MAAM;AACR,eAAO,CAAC,SAAS;AACf,qBAAW,OAAO,MAAM;AACtB,gBAAI,KAAK,GAAG,MAAM,KAAK,GAAG,GAAG;AAC3B,kBAAI,QAAQ,IAAI,aAAa,iBAAiB,UAAU,WAAW;AAEjE,wBAAQ,IAAI,oBAAe,aAAa,IAAI;AAAA,cAC9C;AACA,qBAAO,EAAE,GAAG,MAAM,GAAG,KAAK;AAAA,YAC5B;AAAA,UACF;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AACF;AAEA,MAAM,iBAAiB,oBAAI,IAAiC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;",
4
+ "sourcesContent": ["import React, { startTransition, useCallback } from 'react'\n\nimport { DebugProp } from '../types'\n\nexport function useShallowSetState<State extends Object>(\n setter: React.Dispatch<React.SetStateAction<State>>,\n transition?: boolean,\n debug?: DebugProp,\n debugName?: string\n) {\n return useCallback(\n (next: Partial<State>) => {\n const run = () => {\n setter((prev) => {\n for (const key in next) {\n if (prev[key] !== next[key]) {\n if (process.env.NODE_ENV === 'development') {\n if (debug === 'verbose') {\n // eslint-disable-next-line no-console\n console.log(` \u25B2 setState ${debugName}`, next)\n }\n }\n return { ...prev, ...next }\n }\n }\n return prev\n })\n }\n if (transition) {\n startTransition(() => {\n run()\n })\n } else {\n run()\n }\n },\n [setter]\n )\n}\n"],
5
+ "mappings": "AAAA,SAAgB,iBAAiB,mBAAmB;AAI7C,SAAS,mBACd,QACA,YACA,OACA,WACA;AACA,SAAO;AAAA,IACL,CAAC,SAAyB;AACxB,YAAM,MAAM,MAAM;AAChB,eAAO,CAAC,SAAS;AACf,qBAAW,OAAO,MAAM;AACtB,gBAAI,KAAK,GAAG,MAAM,KAAK,GAAG,GAAG;AAC3B,kBAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,oBAAI,UAAU,WAAW;AAEvB,0BAAQ,IAAI,oBAAe,aAAa,IAAI;AAAA,gBAC9C;AAAA,cACF;AACA,qBAAO,EAAE,GAAG,MAAM,GAAG,KAAK;AAAA,YAC5B;AAAA,UACF;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AACA,UAAI,YAAY;AACd,wBAAgB,MAAM;AACpB,cAAI;AAAA,QACN,CAAC;AAAA,MACH,OAAO;AACL,YAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
@@ -90,26 +90,26 @@ function useMediaListeners(config) {
90
90
  setupMediaListeners();
91
91
  }, []);
92
92
  }
93
- const listeners = /* @__PURE__ */ new Set();
94
- let flushing = false;
93
+ const currentStateListeners = /* @__PURE__ */ new Set();
94
+ let isFlushing = false;
95
95
  function updateCurrentState() {
96
- if (flushing)
96
+ if (isFlushing)
97
97
  return;
98
- flushing = true;
99
- Promise.resolve().then(() => {
100
- flushing = false;
98
+ isFlushing = true;
99
+ setTimeout(() => {
101
100
  startTransition(() => {
102
- listeners.forEach((cb) => cb(mediaState));
101
+ currentStateListeners.forEach((cb) => cb(mediaState));
103
102
  });
104
- });
103
+ isFlushing = false;
104
+ }, 0);
105
105
  }
106
106
  const shouldUpdate = /* @__PURE__ */ new WeakMap();
107
107
  function setMediaShouldUpdate(ref, props) {
108
108
  return shouldUpdate.set(ref, props);
109
109
  }
110
110
  function subscribe(subscriber) {
111
- listeners.add(subscriber);
112
- return () => listeners.delete(subscriber);
111
+ currentStateListeners.add(subscriber);
112
+ return () => currentStateListeners.delete(subscriber);
113
113
  }
114
114
  function useMedia(uid, debug) {
115
115
  const internal = useSafeRef(void 0);
@@ -126,9 +126,8 @@ function useMedia(uid, debug) {
126
126
  if ((componentState == null ? void 0 : componentState.enabled) === false) {
127
127
  return prev;
128
128
  }
129
- const testKeys = (componentState == null ? void 0 : componentState.keys) ?? ((!componentState || componentState.enabled) && touched ? [...touched] : null);
130
- const hasntUpdated = testKeys == null ? void 0 : testKeys.every((key) => mediaState[key] === prev[key]);
131
- if (hasntUpdated) {
129
+ const testKeys = (componentState == null ? void 0 : componentState.keys) ?? ((componentState == null ? void 0 : componentState.enabled) && touched ? [...touched] : null);
130
+ if (testKeys == null ? void 0 : testKeys.every((key) => mediaState[key] === prev[key])) {
132
131
  return prev;
133
132
  }
134
133
  internal.current.prev = mediaState;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useMedia.tsx"],
4
- "sourcesContent": ["import { startTransition, useEffect, useMemo, useSyncExternalStore } from 'react'\n\nimport { getConfig } from '../config'\nimport { createProxy } from '../helpers/createProxy'\nimport { matchMedia } from '../helpers/matchMedia'\nimport {\n MediaQueries,\n MediaQueryKey,\n MediaQueryObject,\n MediaQueryState,\n TamaguiInternalConfig,\n} from '../types'\nimport { useSafeRef } from './useSafeRef'\n\nexport let mediaState: MediaQueryState =\n // development only safeguard\n process.env.NODE_ENV === 'development'\n ? createProxy(\n {},\n {\n get(target, key) {\n if (\n typeof key === 'string' &&\n key[0] === '$' &&\n // dont error on $$typeof\n key[1] !== '$'\n ) {\n throw new Error(`Access mediaState should not use \"$\": ${key}`)\n }\n return Reflect.get(target, key)\n },\n }\n )\n : ({} as any)\n\nexport const mediaQueryConfig: MediaQueries = {}\nexport const getMedia = () => mediaState\nexport const mediaKeysWithAndWithout$ = new Set<string>()\n\n// for SSR capture it at time of startup\nlet initState: MediaQueryState\nexport const getInitialMediaState = () => {\n return (getConfig().disableSSR ? mediaState : initState) || {}\n}\n\nlet mediaKeysOrdered: string[]\nexport const getMediaKeyImportance = (key: string) => {\n if (process.env.NODE_ENV === 'development' && key[0] === '$') {\n throw new Error('use short key')\n }\n // + 2 because we set base usedKeys=1 in getSplitStyles and all media go above 1\n return mediaKeysOrdered.indexOf(key) + 2\n}\n\nconst dispose = new Set<Function>()\n\nexport const configureMedia = (config: TamaguiInternalConfig) => {\n const { media, mediaQueryDefaultActive } = config\n if (!media) return\n for (const key in media) {\n mediaState[key] = mediaQueryDefaultActive?.[key] || false\n mediaKeysWithAndWithout$.add(key)\n mediaKeysWithAndWithout$.add(`$${key}`)\n }\n Object.assign(mediaQueryConfig, media)\n initState = { ...mediaState }\n updateCurrentState()\n mediaKeysOrdered = Object.keys(media)\n if (config.disableSSR) {\n setupMediaListeners()\n }\n}\n\nfunction unlisten() {\n dispose.forEach((cb) => cb())\n dispose.clear()\n}\n\n/**\n * Note: This should *not* set the state on the first render!\n * Because to avoid hydration issues SSR must match the server\n * *and then* re-render with the actual media query state.\n */\nlet configuredKey = ''\nfunction setupMediaListeners() {\n // avoid setting up more than once per config\n const nextKey = JSON.stringify(mediaQueryConfig)\n if (nextKey === configuredKey) return\n configuredKey = nextKey\n\n // hmr, undo existing before re-binding\n unlisten()\n\n for (const key in mediaQueryConfig) {\n const str = mediaObjectToString(mediaQueryConfig[key])\n const getMatch = () => matchMedia(str)\n const match = getMatch()\n if (!match) {\n throw new Error('\u26A0\uFE0F No match')\n }\n // react native needs these deprecated apis for now\n match.addListener(update)\n dispose.add(() => {\n match.removeListener(update)\n })\n\n update()\n\n function update() {\n const next = !!getMatch().matches\n if (next === mediaState[key]) return\n mediaState = { ...mediaState, [key]: next }\n updateCurrentState()\n }\n }\n}\n\nexport function useMediaListeners(config: TamaguiInternalConfig) {\n if (config.disableSSR) return\n useEffect(() => {\n setupMediaListeners()\n }, [])\n}\n\nconst listeners = new Set<any>()\nlet flushing = false\nfunction updateCurrentState() {\n if (flushing) return\n flushing = true\n Promise.resolve().then(() => {\n flushing = false\n startTransition(() => {\n listeners.forEach((cb) => cb(mediaState))\n })\n })\n}\n\ntype MediaKeysState = {\n [key: string]: any\n}\n\ntype UseMediaState = {\n [key in MediaQueryKey]: boolean\n}\n\ntype UpdateState = {\n enabled: boolean\n keys: MediaQueryKey[]\n}\n\nconst shouldUpdate = new WeakMap<any, UpdateState>()\n\nexport function setMediaShouldUpdate(ref: any, props: UpdateState) {\n return shouldUpdate.set(ref, props)\n}\n\ntype UseMediaInternalState = {\n prev: MediaKeysState\n touched?: Set<string>\n}\n\nfunction subscribe(subscriber: any) {\n listeners.add(subscriber)\n return () => listeners.delete(subscriber)\n}\n\nexport function useMedia(uid?: any, debug?: any): UseMediaState {\n const internal = useSafeRef<UseMediaInternalState>(undefined as any)\n if (!internal.current) {\n internal.current = {\n prev: initState,\n }\n }\n const state = useSyncExternalStore<MediaQueryState>(\n subscribe,\n () => {\n const { touched, prev } = internal.current\n const componentState = uid ? shouldUpdate.get(uid) : undefined\n if (componentState?.enabled === false) {\n return prev\n }\n\n const testKeys =\n componentState?.keys ??\n ((!componentState || componentState.enabled) && touched ? [...touched] : null)\n\n const hasntUpdated = testKeys?.every((key) => mediaState[key] === prev[key])\n if (hasntUpdated) {\n return prev\n }\n\n internal.current.prev = mediaState\n return mediaState\n },\n () => initState\n )\n\n return useMemo(() => {\n return new Proxy(state, {\n get(_, key) {\n if (typeof key === 'string') {\n internal.current.touched ||= new Set()\n internal.current.touched.add(key)\n }\n return Reflect.get(state, key)\n },\n })\n }, [state])\n}\n\n/**\n * Useful for more complex components that need access to the currently active props,\n * accounting for the currently active media queries.\n *\n * Use sparingly, it will loop props and trigger re-render on all media queries.\n *\n * */\nexport function useMediaPropsActive<A extends Object>(\n props: A\n): {\n // remove all media\n [Key in keyof A extends `$${string}` ? never : keyof A]?: A[Key]\n} {\n const media = useMedia()\n\n return useMemo(() => {\n const next = {} as A\n const importancesUsed = {}\n const propNames = Object.keys(props)\n\n for (let i = propNames.length - 1; i >= 0; i--) {\n const key = propNames[i]\n const val = props[key]\n if (key[0] === '$') {\n const mediaKey = key.slice(1)\n if (!media[mediaKey]) continue\n if (val && typeof val === 'object') {\n const subKeys = Object.keys(val)\n for (let j = subKeys.length; j--; j >= 0) {\n const subKey = subKeys[j]\n mergeMediaByImportance(next, mediaKey, subKey, val[subKey], importancesUsed)\n }\n }\n } else {\n mergeMediaByImportance(next, '', key, val, importancesUsed)\n }\n }\n\n return next\n }, [media, props])\n}\n\nexport const getMediaImportanceIfMoreImportant = (\n mediaKey: string,\n key: string,\n importancesUsed: Record<string, number>\n) => {\n const importance = getMediaKeyImportance(mediaKey)\n return !importancesUsed[key] || importance > importancesUsed[key] ? importance : null\n}\n\nexport function mergeMediaByImportance(\n onto: Record<string, any>,\n mediaKey: string,\n key: string,\n value: any,\n importancesUsed: Record<string, number>\n) {\n const importance = getMediaImportanceIfMoreImportant(mediaKey, key, importancesUsed)\n if (importance === null) {\n return false\n }\n importancesUsed[key] = importance\n onto[key] = value\n return true\n}\n\nfunction camelToHyphen(str: string) {\n return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).toLowerCase()\n}\n\nexport function mediaObjectToString(query: string | MediaQueryObject) {\n if (typeof query === 'string') {\n return query\n }\n return Object.entries(query)\n .map(([feature, value]) => {\n feature = camelToHyphen(feature)\n if (typeof value === 'string') {\n return `(${feature}: ${value})`\n }\n if (typeof value === 'number' && /[height|width]$/.test(feature)) {\n value = `${value}px`\n }\n return `(${feature}: ${value})`\n })\n .join(' and ')\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { startTransition, useEffect, useMemo, useSyncExternalStore } from 'react'\n\nimport { getConfig } from '../config'\nimport { createProxy } from '../helpers/createProxy'\nimport { matchMedia } from '../helpers/matchMedia'\nimport {\n MediaQueries,\n MediaQueryKey,\n MediaQueryObject,\n MediaQueryState,\n TamaguiInternalConfig,\n} from '../types'\nimport { useSafeRef } from './useSafeRef'\n\nexport let mediaState: MediaQueryState =\n // development only safeguard\n process.env.NODE_ENV === 'development'\n ? createProxy(\n {},\n {\n get(target, key) {\n if (\n typeof key === 'string' &&\n key[0] === '$' &&\n // dont error on $$typeof\n key[1] !== '$'\n ) {\n throw new Error(`Access mediaState should not use \"$\": ${key}`)\n }\n return Reflect.get(target, key)\n },\n }\n )\n : ({} as any)\n\nexport const mediaQueryConfig: MediaQueries = {}\nexport const getMedia = () => mediaState\nexport const mediaKeysWithAndWithout$ = new Set<string>()\n\n// for SSR capture it at time of startup\nlet initState: MediaQueryState\nexport const getInitialMediaState = () => {\n return (getConfig().disableSSR ? mediaState : initState) || {}\n}\n\nlet mediaKeysOrdered: string[]\nexport const getMediaKeyImportance = (key: string) => {\n if (process.env.NODE_ENV === 'development' && key[0] === '$') {\n throw new Error('use short key')\n }\n // + 2 because we set base usedKeys=1 in getSplitStyles and all media go above 1\n return mediaKeysOrdered.indexOf(key) + 2\n}\n\nconst dispose = new Set<Function>()\n\nexport const configureMedia = (config: TamaguiInternalConfig) => {\n const { media, mediaQueryDefaultActive } = config\n if (!media) return\n for (const key in media) {\n mediaState[key] = mediaQueryDefaultActive?.[key] || false\n mediaKeysWithAndWithout$.add(key)\n mediaKeysWithAndWithout$.add(`$${key}`)\n }\n Object.assign(mediaQueryConfig, media)\n initState = { ...mediaState }\n updateCurrentState()\n mediaKeysOrdered = Object.keys(media)\n if (config.disableSSR) {\n setupMediaListeners()\n }\n}\n\nfunction unlisten() {\n dispose.forEach((cb) => cb())\n dispose.clear()\n}\n\n/**\n * Note: This should *not* set the state on the first render!\n * Because to avoid hydration issues SSR must match the server\n * *and then* re-render with the actual media query state.\n */\nlet configuredKey = ''\nfunction setupMediaListeners() {\n // avoid setting up more than once per config\n const nextKey = JSON.stringify(mediaQueryConfig)\n if (nextKey === configuredKey) return\n configuredKey = nextKey\n\n // hmr, undo existing before re-binding\n unlisten()\n\n for (const key in mediaQueryConfig) {\n const str = mediaObjectToString(mediaQueryConfig[key])\n const getMatch = () => matchMedia(str)\n const match = getMatch()\n if (!match) {\n throw new Error('\u26A0\uFE0F No match')\n }\n // react native needs these deprecated apis for now\n match.addListener(update)\n dispose.add(() => {\n match.removeListener(update)\n })\n\n update()\n\n function update() {\n const next = !!getMatch().matches\n if (next === mediaState[key]) return\n mediaState = { ...mediaState, [key]: next }\n updateCurrentState()\n }\n }\n}\n\nexport function useMediaListeners(config: TamaguiInternalConfig) {\n if (config.disableSSR) return\n useEffect(() => {\n setupMediaListeners()\n }, [])\n}\n\nconst currentStateListeners = new Set<any>()\nlet isFlushing = false\n\nfunction updateCurrentState() {\n if (isFlushing) return\n isFlushing = true\n setTimeout(() => {\n startTransition(() => {\n currentStateListeners.forEach((cb) => cb(mediaState))\n })\n isFlushing = false\n }, 0)\n}\n\ntype MediaKeysState = {\n [key: string]: any\n}\n\ntype UseMediaState = {\n [key in MediaQueryKey]: boolean\n}\n\ntype UpdateState = {\n enabled: boolean\n keys: MediaQueryKey[]\n}\n\nconst shouldUpdate = new WeakMap<any, UpdateState>()\n\nexport function setMediaShouldUpdate(ref: any, props: UpdateState) {\n return shouldUpdate.set(ref, props)\n}\n\ntype UseMediaInternalState = {\n prev: MediaKeysState\n touched?: Set<string>\n}\n\nfunction subscribe(subscriber: any) {\n currentStateListeners.add(subscriber)\n return () => currentStateListeners.delete(subscriber)\n}\n\nexport function useMedia(uid?: any, debug?: any): UseMediaState {\n const internal = useSafeRef<UseMediaInternalState>(undefined as any)\n if (!internal.current) {\n internal.current = {\n prev: initState,\n }\n }\n const state = useSyncExternalStore<MediaQueryState>(\n subscribe,\n () => {\n const { touched, prev } = internal.current\n const componentState = uid ? shouldUpdate.get(uid) : undefined\n if (componentState?.enabled === false) {\n return prev\n }\n const testKeys =\n componentState?.keys ?? (componentState?.enabled && touched ? [...touched] : null)\n\n if (testKeys?.every((key) => mediaState[key] === prev[key])) {\n return prev\n }\n\n internal.current.prev = mediaState\n return mediaState\n },\n () => initState\n )\n\n return useMemo(() => {\n return new Proxy(state, {\n get(_, key) {\n if (typeof key === 'string') {\n internal.current.touched ||= new Set()\n internal.current.touched.add(key)\n }\n return Reflect.get(state, key)\n },\n })\n }, [state])\n}\n\n/**\n * Useful for more complex components that need access to the currently active props,\n * accounting for the currently active media queries.\n *\n * Use sparingly, it will loop props and trigger re-render on all media queries.\n *\n * */\nexport function useMediaPropsActive<A extends Object>(\n props: A\n): {\n // remove all media\n [Key in keyof A extends `$${string}` ? never : keyof A]?: A[Key]\n} {\n const media = useMedia()\n\n return useMemo(() => {\n const next = {} as A\n const importancesUsed = {}\n const propNames = Object.keys(props)\n\n for (let i = propNames.length - 1; i >= 0; i--) {\n const key = propNames[i]\n const val = props[key]\n if (key[0] === '$') {\n const mediaKey = key.slice(1)\n if (!media[mediaKey]) continue\n if (val && typeof val === 'object') {\n const subKeys = Object.keys(val)\n for (let j = subKeys.length; j--; j >= 0) {\n const subKey = subKeys[j]\n mergeMediaByImportance(next, mediaKey, subKey, val[subKey], importancesUsed)\n }\n }\n } else {\n mergeMediaByImportance(next, '', key, val, importancesUsed)\n }\n }\n\n return next\n }, [media, props])\n}\n\nexport const getMediaImportanceIfMoreImportant = (\n mediaKey: string,\n key: string,\n importancesUsed: Record<string, number>\n) => {\n const importance = getMediaKeyImportance(mediaKey)\n return !importancesUsed[key] || importance > importancesUsed[key] ? importance : null\n}\n\nexport function mergeMediaByImportance(\n onto: Record<string, any>,\n mediaKey: string,\n key: string,\n value: any,\n importancesUsed: Record<string, number>\n) {\n const importance = getMediaImportanceIfMoreImportant(mediaKey, key, importancesUsed)\n if (importance === null) {\n return false\n }\n importancesUsed[key] = importance\n onto[key] = value\n return true\n}\n\nfunction camelToHyphen(str: string) {\n return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).toLowerCase()\n}\n\nexport function mediaObjectToString(query: string | MediaQueryObject) {\n if (typeof query === 'string') {\n return query\n }\n return Object.entries(query)\n .map(([feature, value]) => {\n feature = camelToHyphen(feature)\n if (typeof value === 'string') {\n return `(${feature}: ${value})`\n }\n if (typeof value === 'number' && /[height|width]$/.test(feature)) {\n value = `${value}px`\n }\n return `(${feature}: ${value})`\n })\n .join(' and ')\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["update"]
7
7
  }
@@ -90,26 +90,26 @@ function useMediaListeners(config) {
90
90
  setupMediaListeners();
91
91
  }, []);
92
92
  }
93
- const listeners = /* @__PURE__ */ new Set();
94
- let flushing = false;
93
+ const currentStateListeners = /* @__PURE__ */ new Set();
94
+ let isFlushing = false;
95
95
  function updateCurrentState() {
96
- if (flushing)
96
+ if (isFlushing)
97
97
  return;
98
- flushing = true;
99
- Promise.resolve().then(() => {
100
- flushing = false;
98
+ isFlushing = true;
99
+ setTimeout(() => {
101
100
  startTransition(() => {
102
- listeners.forEach((cb) => cb(mediaState));
101
+ currentStateListeners.forEach((cb) => cb(mediaState));
103
102
  });
104
- });
103
+ isFlushing = false;
104
+ }, 0);
105
105
  }
106
106
  const shouldUpdate = /* @__PURE__ */ new WeakMap();
107
107
  function setMediaShouldUpdate(ref, props) {
108
108
  return shouldUpdate.set(ref, props);
109
109
  }
110
110
  function subscribe(subscriber) {
111
- listeners.add(subscriber);
112
- return () => listeners.delete(subscriber);
111
+ currentStateListeners.add(subscriber);
112
+ return () => currentStateListeners.delete(subscriber);
113
113
  }
114
114
  function useMedia(uid, debug) {
115
115
  const internal = useSafeRef(void 0);
@@ -126,9 +126,8 @@ function useMedia(uid, debug) {
126
126
  if ((componentState == null ? void 0 : componentState.enabled) === false) {
127
127
  return prev;
128
128
  }
129
- const testKeys = (componentState == null ? void 0 : componentState.keys) ?? ((!componentState || componentState.enabled) && touched ? [...touched] : null);
130
- const hasntUpdated = testKeys == null ? void 0 : testKeys.every((key) => mediaState[key] === prev[key]);
131
- if (hasntUpdated) {
129
+ const testKeys = (componentState == null ? void 0 : componentState.keys) ?? ((componentState == null ? void 0 : componentState.enabled) && touched ? [...touched] : null);
130
+ if (testKeys == null ? void 0 : testKeys.every((key) => mediaState[key] === prev[key])) {
132
131
  return prev;
133
132
  }
134
133
  internal.current.prev = mediaState;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useMedia.tsx"],
4
- "sourcesContent": ["import { startTransition, useEffect, useMemo, useSyncExternalStore } from 'react'\n\nimport { getConfig } from '../config'\nimport { createProxy } from '../helpers/createProxy'\nimport { matchMedia } from '../helpers/matchMedia'\nimport {\n MediaQueries,\n MediaQueryKey,\n MediaQueryObject,\n MediaQueryState,\n TamaguiInternalConfig,\n} from '../types'\nimport { useSafeRef } from './useSafeRef'\n\nexport let mediaState: MediaQueryState =\n // development only safeguard\n process.env.NODE_ENV === 'development'\n ? createProxy(\n {},\n {\n get(target, key) {\n if (\n typeof key === 'string' &&\n key[0] === '$' &&\n // dont error on $$typeof\n key[1] !== '$'\n ) {\n throw new Error(`Access mediaState should not use \"$\": ${key}`)\n }\n return Reflect.get(target, key)\n },\n }\n )\n : ({} as any)\n\nexport const mediaQueryConfig: MediaQueries = {}\nexport const getMedia = () => mediaState\nexport const mediaKeysWithAndWithout$ = new Set<string>()\n\n// for SSR capture it at time of startup\nlet initState: MediaQueryState\nexport const getInitialMediaState = () => {\n return (getConfig().disableSSR ? mediaState : initState) || {}\n}\n\nlet mediaKeysOrdered: string[]\nexport const getMediaKeyImportance = (key: string) => {\n if (process.env.NODE_ENV === 'development' && key[0] === '$') {\n throw new Error('use short key')\n }\n // + 2 because we set base usedKeys=1 in getSplitStyles and all media go above 1\n return mediaKeysOrdered.indexOf(key) + 2\n}\n\nconst dispose = new Set<Function>()\n\nexport const configureMedia = (config: TamaguiInternalConfig) => {\n const { media, mediaQueryDefaultActive } = config\n if (!media) return\n for (const key in media) {\n mediaState[key] = mediaQueryDefaultActive?.[key] || false\n mediaKeysWithAndWithout$.add(key)\n mediaKeysWithAndWithout$.add(`$${key}`)\n }\n Object.assign(mediaQueryConfig, media)\n initState = { ...mediaState }\n updateCurrentState()\n mediaKeysOrdered = Object.keys(media)\n if (config.disableSSR) {\n setupMediaListeners()\n }\n}\n\nfunction unlisten() {\n dispose.forEach((cb) => cb())\n dispose.clear()\n}\n\n/**\n * Note: This should *not* set the state on the first render!\n * Because to avoid hydration issues SSR must match the server\n * *and then* re-render with the actual media query state.\n */\nlet configuredKey = ''\nfunction setupMediaListeners() {\n // avoid setting up more than once per config\n const nextKey = JSON.stringify(mediaQueryConfig)\n if (nextKey === configuredKey) return\n configuredKey = nextKey\n\n // hmr, undo existing before re-binding\n unlisten()\n\n for (const key in mediaQueryConfig) {\n const str = mediaObjectToString(mediaQueryConfig[key])\n const getMatch = () => matchMedia(str)\n const match = getMatch()\n if (!match) {\n throw new Error('\u26A0\uFE0F No match')\n }\n // react native needs these deprecated apis for now\n match.addListener(update)\n dispose.add(() => {\n match.removeListener(update)\n })\n\n update()\n\n function update() {\n const next = !!getMatch().matches\n if (next === mediaState[key]) return\n mediaState = { ...mediaState, [key]: next }\n updateCurrentState()\n }\n }\n}\n\nexport function useMediaListeners(config: TamaguiInternalConfig) {\n if (config.disableSSR) return\n useEffect(() => {\n setupMediaListeners()\n }, [])\n}\n\nconst listeners = new Set<any>()\nlet flushing = false\nfunction updateCurrentState() {\n if (flushing) return\n flushing = true\n Promise.resolve().then(() => {\n flushing = false\n startTransition(() => {\n listeners.forEach((cb) => cb(mediaState))\n })\n })\n}\n\ntype MediaKeysState = {\n [key: string]: any\n}\n\ntype UseMediaState = {\n [key in MediaQueryKey]: boolean\n}\n\ntype UpdateState = {\n enabled: boolean\n keys: MediaQueryKey[]\n}\n\nconst shouldUpdate = new WeakMap<any, UpdateState>()\n\nexport function setMediaShouldUpdate(ref: any, props: UpdateState) {\n return shouldUpdate.set(ref, props)\n}\n\ntype UseMediaInternalState = {\n prev: MediaKeysState\n touched?: Set<string>\n}\n\nfunction subscribe(subscriber: any) {\n listeners.add(subscriber)\n return () => listeners.delete(subscriber)\n}\n\nexport function useMedia(uid?: any, debug?: any): UseMediaState {\n const internal = useSafeRef<UseMediaInternalState>(undefined as any)\n if (!internal.current) {\n internal.current = {\n prev: initState,\n }\n }\n const state = useSyncExternalStore<MediaQueryState>(\n subscribe,\n () => {\n const { touched, prev } = internal.current\n const componentState = uid ? shouldUpdate.get(uid) : undefined\n if (componentState?.enabled === false) {\n return prev\n }\n\n const testKeys =\n componentState?.keys ??\n ((!componentState || componentState.enabled) && touched ? [...touched] : null)\n\n const hasntUpdated = testKeys?.every((key) => mediaState[key] === prev[key])\n if (hasntUpdated) {\n return prev\n }\n\n internal.current.prev = mediaState\n return mediaState\n },\n () => initState\n )\n\n return useMemo(() => {\n return new Proxy(state, {\n get(_, key) {\n if (typeof key === 'string') {\n internal.current.touched ||= new Set()\n internal.current.touched.add(key)\n }\n return Reflect.get(state, key)\n },\n })\n }, [state])\n}\n\n/**\n * Useful for more complex components that need access to the currently active props,\n * accounting for the currently active media queries.\n *\n * Use sparingly, it will loop props and trigger re-render on all media queries.\n *\n * */\nexport function useMediaPropsActive<A extends Object>(\n props: A\n): {\n // remove all media\n [Key in keyof A extends `$${string}` ? never : keyof A]?: A[Key]\n} {\n const media = useMedia()\n\n return useMemo(() => {\n const next = {} as A\n const importancesUsed = {}\n const propNames = Object.keys(props)\n\n for (let i = propNames.length - 1; i >= 0; i--) {\n const key = propNames[i]\n const val = props[key]\n if (key[0] === '$') {\n const mediaKey = key.slice(1)\n if (!media[mediaKey]) continue\n if (val && typeof val === 'object') {\n const subKeys = Object.keys(val)\n for (let j = subKeys.length; j--; j >= 0) {\n const subKey = subKeys[j]\n mergeMediaByImportance(next, mediaKey, subKey, val[subKey], importancesUsed)\n }\n }\n } else {\n mergeMediaByImportance(next, '', key, val, importancesUsed)\n }\n }\n\n return next\n }, [media, props])\n}\n\nexport const getMediaImportanceIfMoreImportant = (\n mediaKey: string,\n key: string,\n importancesUsed: Record<string, number>\n) => {\n const importance = getMediaKeyImportance(mediaKey)\n return !importancesUsed[key] || importance > importancesUsed[key] ? importance : null\n}\n\nexport function mergeMediaByImportance(\n onto: Record<string, any>,\n mediaKey: string,\n key: string,\n value: any,\n importancesUsed: Record<string, number>\n) {\n const importance = getMediaImportanceIfMoreImportant(mediaKey, key, importancesUsed)\n if (importance === null) {\n return false\n }\n importancesUsed[key] = importance\n onto[key] = value\n return true\n}\n\nfunction camelToHyphen(str: string) {\n return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).toLowerCase()\n}\n\nexport function mediaObjectToString(query: string | MediaQueryObject) {\n if (typeof query === 'string') {\n return query\n }\n return Object.entries(query)\n .map(([feature, value]) => {\n feature = camelToHyphen(feature)\n if (typeof value === 'string') {\n return `(${feature}: ${value})`\n }\n if (typeof value === 'number' && /[height|width]$/.test(feature)) {\n value = `${value}px`\n }\n return `(${feature}: ${value})`\n })\n .join(' and ')\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { startTransition, useEffect, useMemo, useSyncExternalStore } from 'react'\n\nimport { getConfig } from '../config'\nimport { createProxy } from '../helpers/createProxy'\nimport { matchMedia } from '../helpers/matchMedia'\nimport {\n MediaQueries,\n MediaQueryKey,\n MediaQueryObject,\n MediaQueryState,\n TamaguiInternalConfig,\n} from '../types'\nimport { useSafeRef } from './useSafeRef'\n\nexport let mediaState: MediaQueryState =\n // development only safeguard\n process.env.NODE_ENV === 'development'\n ? createProxy(\n {},\n {\n get(target, key) {\n if (\n typeof key === 'string' &&\n key[0] === '$' &&\n // dont error on $$typeof\n key[1] !== '$'\n ) {\n throw new Error(`Access mediaState should not use \"$\": ${key}`)\n }\n return Reflect.get(target, key)\n },\n }\n )\n : ({} as any)\n\nexport const mediaQueryConfig: MediaQueries = {}\nexport const getMedia = () => mediaState\nexport const mediaKeysWithAndWithout$ = new Set<string>()\n\n// for SSR capture it at time of startup\nlet initState: MediaQueryState\nexport const getInitialMediaState = () => {\n return (getConfig().disableSSR ? mediaState : initState) || {}\n}\n\nlet mediaKeysOrdered: string[]\nexport const getMediaKeyImportance = (key: string) => {\n if (process.env.NODE_ENV === 'development' && key[0] === '$') {\n throw new Error('use short key')\n }\n // + 2 because we set base usedKeys=1 in getSplitStyles and all media go above 1\n return mediaKeysOrdered.indexOf(key) + 2\n}\n\nconst dispose = new Set<Function>()\n\nexport const configureMedia = (config: TamaguiInternalConfig) => {\n const { media, mediaQueryDefaultActive } = config\n if (!media) return\n for (const key in media) {\n mediaState[key] = mediaQueryDefaultActive?.[key] || false\n mediaKeysWithAndWithout$.add(key)\n mediaKeysWithAndWithout$.add(`$${key}`)\n }\n Object.assign(mediaQueryConfig, media)\n initState = { ...mediaState }\n updateCurrentState()\n mediaKeysOrdered = Object.keys(media)\n if (config.disableSSR) {\n setupMediaListeners()\n }\n}\n\nfunction unlisten() {\n dispose.forEach((cb) => cb())\n dispose.clear()\n}\n\n/**\n * Note: This should *not* set the state on the first render!\n * Because to avoid hydration issues SSR must match the server\n * *and then* re-render with the actual media query state.\n */\nlet configuredKey = ''\nfunction setupMediaListeners() {\n // avoid setting up more than once per config\n const nextKey = JSON.stringify(mediaQueryConfig)\n if (nextKey === configuredKey) return\n configuredKey = nextKey\n\n // hmr, undo existing before re-binding\n unlisten()\n\n for (const key in mediaQueryConfig) {\n const str = mediaObjectToString(mediaQueryConfig[key])\n const getMatch = () => matchMedia(str)\n const match = getMatch()\n if (!match) {\n throw new Error('\u26A0\uFE0F No match')\n }\n // react native needs these deprecated apis for now\n match.addListener(update)\n dispose.add(() => {\n match.removeListener(update)\n })\n\n update()\n\n function update() {\n const next = !!getMatch().matches\n if (next === mediaState[key]) return\n mediaState = { ...mediaState, [key]: next }\n updateCurrentState()\n }\n }\n}\n\nexport function useMediaListeners(config: TamaguiInternalConfig) {\n if (config.disableSSR) return\n useEffect(() => {\n setupMediaListeners()\n }, [])\n}\n\nconst currentStateListeners = new Set<any>()\nlet isFlushing = false\n\nfunction updateCurrentState() {\n if (isFlushing) return\n isFlushing = true\n setTimeout(() => {\n startTransition(() => {\n currentStateListeners.forEach((cb) => cb(mediaState))\n })\n isFlushing = false\n }, 0)\n}\n\ntype MediaKeysState = {\n [key: string]: any\n}\n\ntype UseMediaState = {\n [key in MediaQueryKey]: boolean\n}\n\ntype UpdateState = {\n enabled: boolean\n keys: MediaQueryKey[]\n}\n\nconst shouldUpdate = new WeakMap<any, UpdateState>()\n\nexport function setMediaShouldUpdate(ref: any, props: UpdateState) {\n return shouldUpdate.set(ref, props)\n}\n\ntype UseMediaInternalState = {\n prev: MediaKeysState\n touched?: Set<string>\n}\n\nfunction subscribe(subscriber: any) {\n currentStateListeners.add(subscriber)\n return () => currentStateListeners.delete(subscriber)\n}\n\nexport function useMedia(uid?: any, debug?: any): UseMediaState {\n const internal = useSafeRef<UseMediaInternalState>(undefined as any)\n if (!internal.current) {\n internal.current = {\n prev: initState,\n }\n }\n const state = useSyncExternalStore<MediaQueryState>(\n subscribe,\n () => {\n const { touched, prev } = internal.current\n const componentState = uid ? shouldUpdate.get(uid) : undefined\n if (componentState?.enabled === false) {\n return prev\n }\n const testKeys =\n componentState?.keys ?? (componentState?.enabled && touched ? [...touched] : null)\n\n if (testKeys?.every((key) => mediaState[key] === prev[key])) {\n return prev\n }\n\n internal.current.prev = mediaState\n return mediaState\n },\n () => initState\n )\n\n return useMemo(() => {\n return new Proxy(state, {\n get(_, key) {\n if (typeof key === 'string') {\n internal.current.touched ||= new Set()\n internal.current.touched.add(key)\n }\n return Reflect.get(state, key)\n },\n })\n }, [state])\n}\n\n/**\n * Useful for more complex components that need access to the currently active props,\n * accounting for the currently active media queries.\n *\n * Use sparingly, it will loop props and trigger re-render on all media queries.\n *\n * */\nexport function useMediaPropsActive<A extends Object>(\n props: A\n): {\n // remove all media\n [Key in keyof A extends `$${string}` ? never : keyof A]?: A[Key]\n} {\n const media = useMedia()\n\n return useMemo(() => {\n const next = {} as A\n const importancesUsed = {}\n const propNames = Object.keys(props)\n\n for (let i = propNames.length - 1; i >= 0; i--) {\n const key = propNames[i]\n const val = props[key]\n if (key[0] === '$') {\n const mediaKey = key.slice(1)\n if (!media[mediaKey]) continue\n if (val && typeof val === 'object') {\n const subKeys = Object.keys(val)\n for (let j = subKeys.length; j--; j >= 0) {\n const subKey = subKeys[j]\n mergeMediaByImportance(next, mediaKey, subKey, val[subKey], importancesUsed)\n }\n }\n } else {\n mergeMediaByImportance(next, '', key, val, importancesUsed)\n }\n }\n\n return next\n }, [media, props])\n}\n\nexport const getMediaImportanceIfMoreImportant = (\n mediaKey: string,\n key: string,\n importancesUsed: Record<string, number>\n) => {\n const importance = getMediaKeyImportance(mediaKey)\n return !importancesUsed[key] || importance > importancesUsed[key] ? importance : null\n}\n\nexport function mergeMediaByImportance(\n onto: Record<string, any>,\n mediaKey: string,\n key: string,\n value: any,\n importancesUsed: Record<string, number>\n) {\n const importance = getMediaImportanceIfMoreImportant(mediaKey, key, importancesUsed)\n if (importance === null) {\n return false\n }\n importancesUsed[key] = importance\n onto[key] = value\n return true\n}\n\nfunction camelToHyphen(str: string) {\n return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).toLowerCase()\n}\n\nexport function mediaObjectToString(query: string | MediaQueryObject) {\n if (typeof query === 'string') {\n return query\n }\n return Object.entries(query)\n .map(([feature, value]) => {\n feature = camelToHyphen(feature)\n if (typeof value === 'string') {\n return `(${feature}: ${value})`\n }\n if (typeof value === 'number' && /[height|width]$/.test(feature)) {\n value = `${value}px`\n }\n return `(${feature}: ${value})`\n })\n .join(' and ')\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["update"]
7
7
  }
@@ -24,19 +24,25 @@ const useTheme = (props = emptyProps) => {
24
24
  return (isRSC ? null : (_a = useThemeWithState(props)) == null ? void 0 : _a.theme) || getDefaultThemeProxied();
25
25
  };
26
26
  const useThemeWithState = (props) => {
27
- var _a;
28
- const keys = useServerRef([]);
27
+ var _a, _b;
28
+ const state = useServerRef();
29
+ if (isClient && !state.current) {
30
+ state.current = {
31
+ keys: /* @__PURE__ */ new Set()
32
+ };
33
+ }
34
+ (_a = state.current) == null ? void 0 : _a.keys.clear();
29
35
  const changedTheme = useChangeThemeEffect(
30
36
  props,
31
37
  false,
32
38
  isClient ? () => {
33
39
  var _a2;
34
- return ((_a2 = props.shouldUpdate) == null ? void 0 : _a2.call(props)) ?? keys.current.length === 0;
40
+ return ((_a2 = props.shouldUpdate) == null ? void 0 : _a2.call(props)) ?? state.current.keys.size === 0;
35
41
  } : void 0
36
42
  );
37
43
  const { themeManager, isNewTheme, theme, name, className } = changedTheme;
38
44
  if (process.env.NODE_ENV === "development") {
39
- if (isWeb && isNewTheme && className === ((_a = themeManager == null ? void 0 : themeManager.parentManager) == null ? void 0 : _a.state.className)) {
45
+ if (isWeb && isNewTheme && className === ((_b = themeManager == null ? void 0 : themeManager.parentManager) == null ? void 0 : _b.state.className)) {
40
46
  console.error("Should always change, duplicating ThemeMananger bug", themeManager);
41
47
  }
42
48
  if (props.debug === "verbose") {
@@ -65,7 +71,7 @@ const useThemeWithState = (props) => {
65
71
  function getThemeProxied({
66
72
  theme,
67
73
  themeManager,
68
- keys
74
+ state
69
75
  }) {
70
76
  return createProxy(theme, {
71
77
  has(_, key) {
@@ -83,23 +89,21 @@ function getThemeProxied({
83
89
  if (key === "undefined" || key === "__proto__" || key === "$typeof" || typeof key !== "string" || !themeManager) {
84
90
  return Reflect.get(_, key);
85
91
  }
86
- const keyString = key;
87
92
  if (key[0] === "$") {
88
93
  key = key.slice(1);
89
94
  }
90
95
  const val = themeManager.getValue(key);
91
- const currentKeys = keys == null ? void 0 : keys.current;
92
- if (val && currentKeys) {
93
- return new Proxy(val, {
94
- // when they touch the actual value we only track it
95
- // if its a variable (web), its ignored!
96
- get(_2, subkey) {
97
- if (subkey === "val" && !currentKeys.includes(keyString)) {
98
- currentKeys.push(keyString);
96
+ if (val && state) {
97
+ if (isClient) {
98
+ return new Proxy(val, {
99
+ get(_2, subkey) {
100
+ if (subkey === "val") {
101
+ state.current.keys.add(key);
102
+ }
103
+ return Reflect.get(val, subkey);
99
104
  }
100
- return Reflect.get(val, subkey);
101
- }
102
- });
105
+ });
106
+ }
103
107
  }
104
108
  return val;
105
109
  }