@tamagui/core 1.5.12 → 1.5.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/config.js +2 -2
- package/dist/cjs/config.js.map +2 -2
- package/dist/cjs/createComponent.js +1 -1
- package/dist/cjs/createComponent.js.map +2 -2
- package/dist/cjs/createFont.web.test.js +125 -0
- package/dist/cjs/createFont.web.test.js.map +7 -0
- package/dist/cjs/createTamagui.js +1 -3
- package/dist/cjs/createTamagui.js.map +2 -2
- package/dist/cjs/createTokens.web.test.js +28 -0
- package/dist/cjs/createTokens.web.test.js.map +7 -0
- package/dist/cjs/createVariable.js.map +1 -1
- package/dist/cjs/createVariable.web.test.js +7 -0
- package/dist/cjs/createVariable.web.test.js.map +7 -0
- package/dist/cjs/helpers/ThemeManager.test.js +465 -0
- package/dist/cjs/helpers/ThemeManager.test.js.map +7 -0
- package/dist/cjs/helpers/expandStyles.js +12 -2
- package/dist/cjs/helpers/expandStyles.js.map +3 -3
- package/dist/cjs/helpers/getSplitStyles.js +15 -20
- package/dist/cjs/helpers/getSplitStyles.js.map +2 -2
- package/dist/cjs/helpers/getStylesAtomic.native.js +5 -8
- package/dist/cjs/helpers/getStylesAtomic.native.js.map +2 -2
- package/dist/cjs/helpers/normalizeColor.js +5 -5
- package/dist/cjs/helpers/normalizeColor.js.map +3 -3
- package/dist/cjs/helpers/useShallowSetState.js +14 -15
- package/dist/cjs/helpers/useShallowSetState.js.map +2 -2
- package/dist/cjs/hooks/useMedia.js +12 -13
- package/dist/cjs/hooks/useMedia.js.map +2 -2
- package/dist/cjs/hooks/useTheme.js +21 -17
- package/dist/cjs/hooks/useTheme.js.map +2 -2
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/setupReactNative.js +8 -9
- package/dist/cjs/setupReactNative.js.map +2 -2
- package/dist/cjs/styled.js.map +2 -2
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/views/Stack.web.test.js +22 -0
- package/dist/cjs/views/Stack.web.test.js.map +7 -0
- package/dist/esm/config.js +2 -2
- package/dist/esm/config.js.map +2 -2
- package/dist/esm/config.mjs +2 -2
- package/dist/esm/config.mjs.map +2 -2
- package/dist/esm/createComponent.js +1 -1
- package/dist/esm/createComponent.js.map +2 -2
- package/dist/esm/createComponent.mjs +1 -1
- package/dist/esm/createComponent.mjs.map +2 -2
- package/dist/esm/createFont.web.test.js +124 -0
- package/dist/esm/createFont.web.test.js.map +7 -0
- package/dist/esm/createFont.web.test.mjs +124 -0
- package/dist/esm/createFont.web.test.mjs.map +7 -0
- package/dist/esm/createTamagui.js +1 -3
- package/dist/esm/createTamagui.js.map +2 -2
- package/dist/esm/createTamagui.mjs +1 -3
- package/dist/esm/createTamagui.mjs.map +2 -2
- package/dist/esm/createTokens.web.test.js +27 -0
- package/dist/esm/createTokens.web.test.js.map +7 -0
- package/dist/esm/createTokens.web.test.mjs +27 -0
- package/dist/esm/createTokens.web.test.mjs.map +7 -0
- package/dist/esm/createVariable.js.map +1 -1
- package/dist/esm/createVariable.mjs.map +1 -1
- package/dist/esm/createVariable.web.test.js +6 -0
- package/dist/esm/createVariable.web.test.js.map +7 -0
- package/dist/esm/createVariable.web.test.mjs +6 -0
- package/dist/esm/createVariable.web.test.mjs.map +7 -0
- package/dist/esm/helpers/ThemeManager.test.js +464 -0
- package/dist/esm/helpers/ThemeManager.test.js.map +7 -0
- package/dist/esm/helpers/ThemeManager.test.mjs +464 -0
- package/dist/esm/helpers/ThemeManager.test.mjs.map +7 -0
- package/dist/esm/helpers/expandStyles.js +1 -1
- package/dist/esm/helpers/expandStyles.js.map +2 -2
- package/dist/esm/helpers/expandStyles.mjs +1 -1
- package/dist/esm/helpers/expandStyles.mjs.map +2 -2
- package/dist/esm/helpers/getSplitStyles.js +15 -20
- package/dist/esm/helpers/getSplitStyles.js.map +2 -2
- package/dist/esm/helpers/getSplitStyles.mjs +15 -20
- package/dist/esm/helpers/getSplitStyles.mjs.map +2 -2
- package/dist/esm/helpers/getStylesAtomic.native.js +4 -6
- package/dist/esm/helpers/getStylesAtomic.native.js.map +2 -2
- package/dist/esm/helpers/getStylesAtomic.native.mjs +4 -6
- package/dist/esm/helpers/getStylesAtomic.native.mjs.map +2 -2
- package/dist/esm/helpers/normalizeColor.js +4 -4
- package/dist/esm/helpers/normalizeColor.js.map +3 -3
- package/dist/esm/helpers/normalizeColor.mjs +4 -4
- package/dist/esm/helpers/normalizeColor.mjs.map +3 -3
- package/dist/esm/helpers/useShallowSetState.js +14 -15
- package/dist/esm/helpers/useShallowSetState.js.map +2 -2
- package/dist/esm/helpers/useShallowSetState.mjs +14 -15
- package/dist/esm/helpers/useShallowSetState.mjs.map +2 -2
- package/dist/esm/hooks/useMedia.js +12 -13
- package/dist/esm/hooks/useMedia.js.map +2 -2
- package/dist/esm/hooks/useMedia.mjs +12 -13
- package/dist/esm/hooks/useMedia.mjs.map +2 -2
- package/dist/esm/hooks/useTheme.js +21 -17
- package/dist/esm/hooks/useTheme.js.map +2 -2
- package/dist/esm/hooks/useTheme.mjs +21 -17
- package/dist/esm/hooks/useTheme.mjs.map +2 -2
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/index.mjs.map +2 -2
- package/dist/esm/setupReactNative.js +8 -9
- package/dist/esm/setupReactNative.js.map +2 -2
- package/dist/esm/setupReactNative.mjs +8 -9
- package/dist/esm/setupReactNative.mjs.map +2 -2
- package/dist/esm/styled.js.map +2 -2
- package/dist/esm/styled.mjs.map +2 -2
- package/dist/esm/views/Stack.web.test.js +21 -0
- package/dist/esm/views/Stack.web.test.js.map +7 -0
- package/dist/esm/views/Stack.web.test.mjs +21 -0
- package/dist/esm/views/Stack.web.test.mjs.map +7 -0
- package/package.json +5 -5
- package/src/index.ts +0 -1
- package/types/config.d.ts.map +1 -1
- package/types/createFont.web.test.d.ts.map +1 -0
- package/types/createTamagui.d.ts.map +1 -1
- package/types/createTokens.web.test.d.ts.map +1 -0
- package/types/createVariable.d.ts.map +1 -1
- package/types/createVariable.web.test.d.ts.map +1 -0
- package/types/helpers/ThemeManager.test.d.ts.map +1 -0
- package/types/helpers/getSplitStyles.d.ts.map +1 -1
- package/types/helpers/getStylesAtomic.native.d.ts.map +1 -1
- package/types/helpers/normalizeColor.d.ts.map +1 -1
- package/types/helpers/useShallowSetState.d.ts.map +1 -1
- package/types/hooks/useMedia.d.ts.map +1 -1
- package/types/hooks/useTheme.d.ts.map +1 -1
- package/types/index.d.ts.map +1 -1
- package/types/setupReactNative.d.ts.map +1 -1
- package/types/styled.d.ts.map +1 -1
- package/types/types.d.ts.map +1 -1
- package/types/views/Stack.web.test.d.ts.map +1 -0
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
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": ["
|
|
5
|
-
"mappings": "
|
|
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
|
-
|
|
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
|
-
|
|
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": ["
|
|
5
|
-
"mappings": "
|
|
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
|
|
3
|
-
|
|
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 =
|
|
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
|
|
5
|
-
"mappings": "AAAA,SAAS,aAAa;AACtB,YAAY,SAAS
|
|
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
|
|
3
|
-
|
|
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 =
|
|
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
|
|
5
|
-
"mappings": "AAAA,SAAS,aAAa;AACtB,YAAY,SAAS
|
|
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
|
|
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"
|
|
14
|
-
|
|
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'\
|
|
5
|
-
"mappings": "AAAA,SAAgB,iBAAiB,mBAAmB;
|
|
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
|
|
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"
|
|
14
|
-
|
|
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'\
|
|
5
|
-
"mappings": "AAAA,SAAgB,iBAAiB,mBAAmB;
|
|
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
|
|
94
|
-
let
|
|
93
|
+
const currentStateListeners = /* @__PURE__ */ new Set();
|
|
94
|
+
let isFlushing = false;
|
|
95
95
|
function updateCurrentState() {
|
|
96
|
-
if (
|
|
96
|
+
if (isFlushing)
|
|
97
97
|
return;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
flushing = false;
|
|
98
|
+
isFlushing = true;
|
|
99
|
+
setTimeout(() => {
|
|
101
100
|
startTransition(() => {
|
|
102
|
-
|
|
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
|
-
|
|
112
|
-
return () =>
|
|
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) ?? ((
|
|
130
|
-
|
|
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
|
|
5
|
-
"mappings": "AAAA,SAAS,iBAAiB,WAAW,SAAS,4BAA4B;AAE1E,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAQ3B,SAAS,kBAAkB;AAEpB,IAAI;AAAA;AAAA,EAET,QAAQ,IAAI,aAAa,gBACrB;AAAA,IACE,CAAC;AAAA,IACD;AAAA,MACE,IAAI,QAAQ,KAAK;AACf,YACE,OAAO,QAAQ,YACf,IAAI,CAAC,MAAM;AAAA,QAEX,IAAI,CAAC,MAAM,KACX;AACA,gBAAM,IAAI,MAAM,yCAAyC,KAAK;AAAA,QAChE;AACA,eAAO,QAAQ,IAAI,QAAQ,GAAG;AAAA,MAChC;AAAA,IACF;AAAA,EACF,IACC,CAAC;AAAA;AAED,MAAM,mBAAiC,CAAC;AACxC,MAAM,WAAW,MAAM;AACvB,MAAM,2BAA2B,oBAAI,IAAY;AAGxD,IAAI;AACG,MAAM,uBAAuB,MAAM;AACxC,UAAQ,UAAU,EAAE,aAAa,aAAa,cAAc,CAAC;AAC/D;AAEA,IAAI;AACG,MAAM,wBAAwB,CAAC,QAAgB;AACpD,MAAI,QAAQ,IAAI,aAAa,iBAAiB,IAAI,CAAC,MAAM,KAAK;AAC5D,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AAEA,SAAO,iBAAiB,QAAQ,GAAG,IAAI;AACzC;AAEA,MAAM,UAAU,oBAAI,IAAc;AAE3B,MAAM,iBAAiB,CAAC,WAAkC;AAC/D,QAAM,EAAE,OAAO,wBAAwB,IAAI;AAC3C,MAAI,CAAC;AAAO;AACZ,aAAW,OAAO,OAAO;AACvB,eAAW,GAAG,KAAI,mEAA0B,SAAQ;AACpD,6BAAyB,IAAI,GAAG;AAChC,6BAAyB,IAAI,IAAI,KAAK;AAAA,EACxC;AACA,SAAO,OAAO,kBAAkB,KAAK;AACrC,cAAY,EAAE,GAAG,WAAW;AAC5B,qBAAmB;AACnB,qBAAmB,OAAO,KAAK,KAAK;AACpC,MAAI,OAAO,YAAY;AACrB,wBAAoB;AAAA,EACtB;AACF;AAEA,SAAS,WAAW;AAClB,UAAQ,QAAQ,CAAC,OAAO,GAAG,CAAC;AAC5B,UAAQ,MAAM;AAChB;AAOA,IAAI,gBAAgB;AACpB,SAAS,sBAAsB;AAE7B,QAAM,UAAU,KAAK,UAAU,gBAAgB;AAC/C,MAAI,YAAY;AAAe;AAC/B,kBAAgB;AAGhB,WAAS;AAET,aAAW,OAAO,kBAAkB;AAelC,QAASA,UAAT,WAAkB;AAChB,YAAM,OAAO,CAAC,CAAC,SAAS,EAAE;AAC1B,UAAI,SAAS,WAAW,GAAG;AAAG;AAC9B,mBAAa,EAAE,GAAG,YAAY,CAAC,GAAG,GAAG,KAAK;AAC1C,yBAAmB;AAAA,IACrB;AALS,iBAAAA;AAdT,UAAM,MAAM,oBAAoB,iBAAiB,GAAG,CAAC;AACrD,UAAM,WAAW,MAAM,WAAW,GAAG;AACrC,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,uBAAa;AAAA,IAC/B;AAEA,UAAM,YAAYA,OAAM;AACxB,YAAQ,IAAI,MAAM;AAChB,YAAM,eAAeA,OAAM;AAAA,IAC7B,CAAC;AAED,IAAAA,QAAO;AAAA,EAQT;AACF;AAEO,SAAS,kBAAkB,QAA+B;AAC/D,MAAI,OAAO;AAAY;AACvB,YAAU,MAAM;AACd,wBAAoB;AAAA,EACtB,GAAG,CAAC,CAAC;AACP;AAEA,MAAM,
|
|
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
|
|
94
|
-
let
|
|
93
|
+
const currentStateListeners = /* @__PURE__ */ new Set();
|
|
94
|
+
let isFlushing = false;
|
|
95
95
|
function updateCurrentState() {
|
|
96
|
-
if (
|
|
96
|
+
if (isFlushing)
|
|
97
97
|
return;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
flushing = false;
|
|
98
|
+
isFlushing = true;
|
|
99
|
+
setTimeout(() => {
|
|
101
100
|
startTransition(() => {
|
|
102
|
-
|
|
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
|
-
|
|
112
|
-
return () =>
|
|
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) ?? ((
|
|
130
|
-
|
|
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
|
|
5
|
-
"mappings": "AAAA,SAAS,iBAAiB,WAAW,SAAS,4BAA4B;AAE1E,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAQ3B,SAAS,kBAAkB;AAEpB,IAAI;AAAA;AAAA,EAET,QAAQ,IAAI,aAAa,gBACrB;AAAA,IACE,CAAC;AAAA,IACD;AAAA,MACE,IAAI,QAAQ,KAAK;AACf,YACE,OAAO,QAAQ,YACf,IAAI,CAAC,MAAM;AAAA,QAEX,IAAI,CAAC,MAAM,KACX;AACA,gBAAM,IAAI,MAAM,yCAAyC,KAAK;AAAA,QAChE;AACA,eAAO,QAAQ,IAAI,QAAQ,GAAG;AAAA,MAChC;AAAA,IACF;AAAA,EACF,IACC,CAAC;AAAA;AAED,MAAM,mBAAiC,CAAC;AACxC,MAAM,WAAW,MAAM;AACvB,MAAM,2BAA2B,oBAAI,IAAY;AAGxD,IAAI;AACG,MAAM,uBAAuB,MAAM;AACxC,UAAQ,UAAU,EAAE,aAAa,aAAa,cAAc,CAAC;AAC/D;AAEA,IAAI;AACG,MAAM,wBAAwB,CAAC,QAAgB;AACpD,MAAI,QAAQ,IAAI,aAAa,iBAAiB,IAAI,CAAC,MAAM,KAAK;AAC5D,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AAEA,SAAO,iBAAiB,QAAQ,GAAG,IAAI;AACzC;AAEA,MAAM,UAAU,oBAAI,IAAc;AAE3B,MAAM,iBAAiB,CAAC,WAAkC;AAC/D,QAAM,EAAE,OAAO,wBAAwB,IAAI;AAC3C,MAAI,CAAC;AAAO;AACZ,aAAW,OAAO,OAAO;AACvB,eAAW,GAAG,KAAI,mEAA0B,SAAQ;AACpD,6BAAyB,IAAI,GAAG;AAChC,6BAAyB,IAAI,IAAI,KAAK;AAAA,EACxC;AACA,SAAO,OAAO,kBAAkB,KAAK;AACrC,cAAY,EAAE,GAAG,WAAW;AAC5B,qBAAmB;AACnB,qBAAmB,OAAO,KAAK,KAAK;AACpC,MAAI,OAAO,YAAY;AACrB,wBAAoB;AAAA,EACtB;AACF;AAEA,SAAS,WAAW;AAClB,UAAQ,QAAQ,CAAC,OAAO,GAAG,CAAC;AAC5B,UAAQ,MAAM;AAChB;AAOA,IAAI,gBAAgB;AACpB,SAAS,sBAAsB;AAE7B,QAAM,UAAU,KAAK,UAAU,gBAAgB;AAC/C,MAAI,YAAY;AAAe;AAC/B,kBAAgB;AAGhB,WAAS;AAET,aAAW,OAAO,kBAAkB;AAelC,QAASA,UAAT,WAAkB;AAChB,YAAM,OAAO,CAAC,CAAC,SAAS,EAAE;AAC1B,UAAI,SAAS,WAAW,GAAG;AAAG;AAC9B,mBAAa,EAAE,GAAG,YAAY,CAAC,GAAG,GAAG,KAAK;AAC1C,yBAAmB;AAAA,IACrB;AALS,iBAAAA;AAdT,UAAM,MAAM,oBAAoB,iBAAiB,GAAG,CAAC;AACrD,UAAM,WAAW,MAAM,WAAW,GAAG;AACrC,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,uBAAa;AAAA,IAC/B;AAEA,UAAM,YAAYA,OAAM;AACxB,YAAQ,IAAI,MAAM;AAChB,YAAM,eAAeA,OAAM;AAAA,IAC7B,CAAC;AAED,IAAAA,QAAO;AAAA,EAQT;AACF;AAEO,SAAS,kBAAkB,QAA+B;AAC/D,MAAI,OAAO;AAAY;AACvB,YAAU,MAAM;AACd,wBAAoB;AAAA,EACtB,GAAG,CAAC,CAAC;AACP;AAEA,MAAM,
|
|
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
|
|
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)) ??
|
|
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 === ((
|
|
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
|
-
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
});
|
|
105
|
+
});
|
|
106
|
+
}
|
|
103
107
|
}
|
|
104
108
|
return val;
|
|
105
109
|
}
|