@vxrn/color-scheme 2.0.0-beta.33.1 → 2.0.0-beta.45.1
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/index.cjs +63 -87
- package/dist/cjs/index.native.cjs +75 -0
- package/dist/cjs/index.native.js +47 -66
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/safeStorage.cjs +23 -25
- package/dist/cjs/safeStorage.native.cjs +40 -0
- package/dist/cjs/safeStorage.native.js +23 -24
- package/dist/cjs/safeStorage.native.js.map +1 -1
- package/dist/cjs/systemScheme.cjs +24 -26
- package/dist/cjs/systemScheme.native.cjs +59 -0
- package/dist/cjs/systemScheme.native.js +38 -41
- package/dist/cjs/systemScheme.native.js.map +1 -1
- package/dist/cjs/userScheme.cjs +104 -106
- package/dist/cjs/userScheme.native.cjs +169 -0
- package/dist/cjs/userScheme.native.js +116 -116
- package/dist/cjs/userScheme.native.js.map +1 -1
- package/dist/cjs/userSchemeAppearance.cjs +17 -19
- package/dist/cjs/userSchemeAppearance.native.cjs +39 -0
- package/dist/cjs/userSchemeAppearance.native.js +19 -20
- package/dist/cjs/userSchemeAppearance.native.js.map +1 -1
- package/dist/esm/index.js +44 -64
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +44 -64
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +28 -44
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/safeStorage.mjs +9 -8
- package/dist/esm/safeStorage.mjs.map +1 -1
- package/dist/esm/safeStorage.native.js +9 -8
- package/dist/esm/safeStorage.native.js.map +1 -1
- package/dist/esm/systemScheme.mjs +11 -9
- package/dist/esm/systemScheme.mjs.map +1 -1
- package/dist/esm/systemScheme.native.js +27 -27
- package/dist/esm/systemScheme.native.js.map +1 -1
- package/dist/esm/userScheme.mjs +87 -85
- package/dist/esm/userScheme.mjs.map +1 -1
- package/dist/esm/userScheme.native.js +99 -96
- package/dist/esm/userScheme.native.js.map +1 -1
- package/dist/esm/userSchemeAppearance.mjs +3 -1
- package/dist/esm/userSchemeAppearance.mjs.map +1 -1
- package/dist/esm/userSchemeAppearance.native.js +5 -3
- package/dist/esm/userSchemeAppearance.native.js.map +1 -1
- package/package.json +3 -3
- package/dist/cjs/safeStorage.test.cjs +0 -49
- package/dist/cjs/safeStorage.test.native.js +0 -66
- package/dist/cjs/safeStorage.test.native.js.map +0 -1
- package/dist/esm/safeStorage.test.mjs +0 -50
- package/dist/esm/safeStorage.test.mjs.map +0 -1
- package/dist/esm/safeStorage.test.native.js +0 -64
- package/dist/esm/safeStorage.test.native.js.map +0 -1
- package/types/safeStorage.test.d.ts +0 -2
- package/types/safeStorage.test.d.ts.map +0 -1
|
@@ -3,42 +3,40 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
5
|
var __export = (target, all) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
10
|
};
|
|
11
11
|
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
19
|
};
|
|
20
|
-
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
-
value: true
|
|
22
|
-
}), mod);
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
23
21
|
var systemScheme_exports = {};
|
|
24
22
|
__export(systemScheme_exports, {
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
getSystemScheme: () => getSystemScheme,
|
|
24
|
+
useSystemScheme: () => useSystemScheme
|
|
27
25
|
});
|
|
28
26
|
module.exports = __toCommonJS(systemScheme_exports);
|
|
29
27
|
var import_use_isomorphic_layout_effect = require("@vxrn/use-isomorphic-layout-effect");
|
|
30
28
|
var import_react = require("react");
|
|
31
29
|
const media = typeof window !== "undefined" && window.matchMedia ? window.matchMedia("(prefers-color-scheme: dark)") : null;
|
|
32
30
|
function getSystemScheme() {
|
|
33
|
-
|
|
31
|
+
return media?.matches ? "dark" : "light";
|
|
34
32
|
}
|
|
35
33
|
function useSystemScheme() {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
34
|
+
const [scheme, setScheme] = (0, import_react.useState)("light");
|
|
35
|
+
(0, import_use_isomorphic_layout_effect.useIsomorphicLayoutEffect)(() => {
|
|
36
|
+
setScheme(getSystemScheme());
|
|
37
|
+
const onChange = () => setScheme(getSystemScheme());
|
|
38
|
+
media?.addEventListener("change", onChange);
|
|
39
|
+
return () => media?.removeEventListener("change", onChange);
|
|
40
|
+
}, []);
|
|
41
|
+
return scheme;
|
|
42
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
16
|
+
get: () => from[key],
|
|
17
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
23
|
+
var systemScheme_native_exports = {};
|
|
24
|
+
__export(systemScheme_native_exports, {
|
|
25
|
+
getSystemScheme: () => getSystemScheme,
|
|
26
|
+
useSystemScheme: () => useSystemScheme
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(systemScheme_native_exports);
|
|
29
|
+
var import_react = require("react");
|
|
30
|
+
var import_react_native = require("react-native");
|
|
31
|
+
function toScheme(colorScheme) {
|
|
32
|
+
return colorScheme === "dark" ? "dark" : "light";
|
|
33
|
+
}
|
|
34
|
+
function getSystemScheme() {
|
|
35
|
+
return toScheme(import_react_native.Appearance.getColorScheme());
|
|
36
|
+
}
|
|
37
|
+
function useSystemScheme() {
|
|
38
|
+
var [scheme, setScheme] = (0, import_react.useState)(getSystemScheme);
|
|
39
|
+
(0, import_react.useEffect)(function() {
|
|
40
|
+
var appearanceSubscription = import_react_native.Appearance.addChangeListener(function(param) {
|
|
41
|
+
var { colorScheme } = param;
|
|
42
|
+
setScheme(toScheme(colorScheme));
|
|
43
|
+
});
|
|
44
|
+
var handleAppStateChange = function(nextAppState) {
|
|
45
|
+
if (nextAppState === "active") {
|
|
46
|
+
var currentScheme = getSystemScheme();
|
|
47
|
+
setScheme(function(prev) {
|
|
48
|
+
return prev !== currentScheme ? currentScheme : prev;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
var appStateSubscription = import_react_native.AppState.addEventListener("change", handleAppStateChange);
|
|
53
|
+
return function() {
|
|
54
|
+
appearanceSubscription.remove();
|
|
55
|
+
appStateSubscription.remove();
|
|
56
|
+
};
|
|
57
|
+
}, []);
|
|
58
|
+
return scheme;
|
|
59
|
+
}
|
|
@@ -5,60 +5,57 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
7
|
var __export = (target, all) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
12
|
};
|
|
13
13
|
var __copyProps = (to, from, except, desc) => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
16
|
+
get: () => from[key],
|
|
17
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
21
|
};
|
|
22
|
-
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
23
|
-
value: true
|
|
24
|
-
}), mod);
|
|
22
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
23
|
var systemScheme_native_exports = {};
|
|
26
24
|
__export(systemScheme_native_exports, {
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
getSystemScheme: () => getSystemScheme,
|
|
26
|
+
useSystemScheme: () => useSystemScheme
|
|
29
27
|
});
|
|
30
28
|
module.exports = __toCommonJS(systemScheme_native_exports);
|
|
31
29
|
var import_react = require("react");
|
|
32
30
|
var import_react_native = require("react-native");
|
|
33
31
|
function toScheme(colorScheme) {
|
|
34
|
-
|
|
32
|
+
return colorScheme === "dark" ? "dark" : "light";
|
|
35
33
|
}
|
|
36
34
|
function getSystemScheme() {
|
|
37
|
-
|
|
35
|
+
return toScheme(import_react_native.Appearance.getColorScheme());
|
|
38
36
|
}
|
|
39
37
|
function useSystemScheme() {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}, []);
|
|
62
|
-
return scheme;
|
|
38
|
+
var [scheme, setScheme] = (0, import_react.useState)(getSystemScheme);
|
|
39
|
+
(0, import_react.useEffect)(function() {
|
|
40
|
+
var appearanceSubscription = import_react_native.Appearance.addChangeListener(function(param) {
|
|
41
|
+
var { colorScheme } = param;
|
|
42
|
+
setScheme(toScheme(colorScheme));
|
|
43
|
+
});
|
|
44
|
+
var handleAppStateChange = function(nextAppState) {
|
|
45
|
+
if (nextAppState === "active") {
|
|
46
|
+
var currentScheme = getSystemScheme();
|
|
47
|
+
setScheme(function(prev) {
|
|
48
|
+
return prev !== currentScheme ? currentScheme : prev;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
var appStateSubscription = import_react_native.AppState.addEventListener("change", handleAppStateChange);
|
|
53
|
+
return function() {
|
|
54
|
+
appearanceSubscription.remove();
|
|
55
|
+
appStateSubscription.remove();
|
|
56
|
+
};
|
|
57
|
+
}, []);
|
|
58
|
+
return scheme;
|
|
63
59
|
}
|
|
60
|
+
|
|
64
61
|
//# sourceMappingURL=systemScheme.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"systemScheme.native.js","names":[],"sources":["cjs/systemScheme.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar systemScheme_native_exports = {};\n__export(systemScheme_native_exports, {\n getSystemScheme: () => getSystemScheme,\n useSystemScheme: () => useSystemScheme\n});\nmodule.exports = __toCommonJS(systemScheme_native_exports);\nvar import_react = require(\"react\");\nvar import_react_native = require(\"react-native\");\nfunction toScheme(colorScheme) {\n return colorScheme === \"dark\" ? \"dark\" : \"light\";\n}\nfunction getSystemScheme() {\n return toScheme(import_react_native.Appearance.getColorScheme());\n}\nfunction useSystemScheme() {\n var [scheme, setScheme] = (0, import_react.useState)(getSystemScheme);\n (0, import_react.useEffect)(function() {\n var appearanceSubscription = import_react_native.Appearance.addChangeListener(function(param) {\n var { colorScheme } = param;\n setScheme(toScheme(colorScheme));\n });\n var handleAppStateChange = function(nextAppState) {\n if (nextAppState === \"active\") {\n var currentScheme = getSystemScheme();\n setScheme(function(prev) {\n return prev !== currentScheme ? currentScheme : prev;\n });\n }\n };\n var appStateSubscription = import_react_native.AppState.addEventListener(\"change\", handleAppStateChange);\n return function() {\n appearanceSubscription.remove();\n appStateSubscription.remove();\n };\n }, []);\n return scheme;\n}\n//# sourceMappingURL=systemScheme.native.js.map\n"],"mappings":";;;AACA,IAAI,YAAY,OAAO;AACvB,IAAI,mBAAmB,OAAO;AAC9B,IAAI,oBAAoB,OAAO;AAC/B,IAAI,eAAe,OAAO,UAAU;AACpC,IAAI,YAAY,QAAQ,QAAQ;CAC9B,KAAK,IAAI,QAAQ,KACf,UAAU,QAAQ,MAAM;EAAE,KAAK,IAAI;EAAO,YAAY;CAAK,CAAC;AAChE;AACA,IAAI,eAAe,IAAI,MAAM,QAAQ,SAAS;CAC5C,IAAI,QAAQ,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY;EAClE,KAAK,IAAI,OAAO,kBAAkB,IAAI,GACpC,IAAI,CAAC,aAAa,KAAK,IAAI,GAAG,KAAK,QAAQ,QACzC,UAAU,IAAI,KAAK;GAAE,WAAW,KAAK;GAAM,YAAY,EAAE,OAAO,iBAAiB,MAAM,GAAG,MAAM,KAAK;EAAW,CAAC;CACvH;CACA,OAAO;AACT;AACA,IAAI,gBAAgB,QAAQ,YAAY,UAAU,CAAC,GAAG,cAAc,EAAE,OAAO,KAAK,CAAC,GAAG,GAAG;AACzF,IAAI,8BAA8B,CAAC;AACnC,SAAS,6BAA6B;CACpC,uBAAuB;CACvB,uBAAuB;AACzB,CAAC;AACD,OAAO,UAAU,aAAa,2BAA2B;AACzD,IAAI,eAAe,QAAQ,OAAO;AAClC,IAAI,sBAAsB,QAAQ,cAAc;AAChD,SAAS,SAAS,aAAa;CAC7B,OAAO,gBAAgB,SAAS,SAAS;AAC3C;AACA,SAAS,kBAAkB;CACzB,OAAO,SAAS,oBAAoB,WAAW,eAAe,CAAC;AACjE;AACA,SAAS,kBAAkB;CACzB,IAAI,CAAC,QAAQ,cAAc,GAAG,aAAa,SAAQ,CAAE,eAAe;CACpE,CAAC,GAAG,aAAa,UAAS,CAAE,WAAW;EACrC,IAAI,yBAAyB,oBAAoB,WAAW,kBAAkB,SAAS,OAAO;GAC5F,IAAI,EAAE,gBAAgB;GACtB,UAAU,SAAS,WAAW,CAAC;EACjC,CAAC;EACD,IAAI,uBAAuB,SAAS,cAAc;GAChD,IAAI,iBAAiB,UAAU;IAC7B,IAAI,gBAAgB,gBAAgB;IACpC,UAAU,SAAS,MAAM;KACvB,OAAO,SAAS,gBAAgB,gBAAgB;IAClD,CAAC;GACH;EACF;EACA,IAAI,uBAAuB,oBAAoB,SAAS,iBAAiB,UAAU,oBAAoB;EACvG,OAAO,WAAW;GAChB,uBAAuB,OAAO;GAC9B,qBAAqB,OAAO;EAC9B;CACF,GAAG,CAAC,CAAC;CACL,OAAO;AACT"}
|
package/dist/cjs/userScheme.cjs
CHANGED
|
@@ -3,31 +3,29 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
5
|
var __export = (target, all) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
10
|
};
|
|
11
11
|
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
19
|
};
|
|
20
|
-
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
-
value: true
|
|
22
|
-
}), mod);
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
23
21
|
var userScheme_exports = {};
|
|
24
22
|
__export(userScheme_exports, {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
getForceScheme: () => getForceScheme,
|
|
24
|
+
getUserScheme: () => getUserScheme,
|
|
25
|
+
onUserSchemeChange: () => onUserSchemeChange,
|
|
26
|
+
setForceScheme: () => setForceScheme,
|
|
27
|
+
setUserScheme: () => setUserScheme,
|
|
28
|
+
useUserScheme: () => useUserScheme
|
|
31
29
|
});
|
|
32
30
|
module.exports = __toCommonJS(userScheme_exports);
|
|
33
31
|
var import_use_isomorphic_layout_effect = require("@vxrn/use-isomorphic-layout-effect");
|
|
@@ -35,122 +33,122 @@ var import_react = require("react");
|
|
|
35
33
|
var import_safeStorage = require("./safeStorage.cjs");
|
|
36
34
|
var import_systemScheme = require("./systemScheme.cjs");
|
|
37
35
|
require("./userSchemeAppearance.cjs");
|
|
38
|
-
const listeners = /* @__PURE__ */new Set();
|
|
36
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
39
37
|
const storageKey = "vxrn-scheme";
|
|
40
38
|
let _forceScheme = null;
|
|
41
39
|
function notifyListeners() {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
listeners.forEach((listener) => {
|
|
41
|
+
listener(currentSetting, currentValue);
|
|
42
|
+
});
|
|
45
43
|
}
|
|
46
44
|
function restoreUnforcedScheme() {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
const stored = (0, import_safeStorage.getStorageItem)(storageKey);
|
|
46
|
+
if (stored) {
|
|
47
|
+
currentSetting = stored;
|
|
48
|
+
currentValue = stored === "system" ? resolveValue("system") : stored;
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
currentSetting = "system";
|
|
52
|
+
currentValue = resolveValue("system");
|
|
55
53
|
}
|
|
56
54
|
function setForceScheme(scheme) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
55
|
+
const wasForced = _forceScheme;
|
|
56
|
+
if (wasForced === scheme) return;
|
|
57
|
+
_forceScheme = scheme;
|
|
58
|
+
if (scheme) {
|
|
59
|
+
currentSetting = scheme;
|
|
60
|
+
currentValue = scheme;
|
|
61
|
+
} else if (wasForced) {
|
|
62
|
+
restoreUnforcedScheme();
|
|
63
|
+
startWebListener();
|
|
64
|
+
}
|
|
67
65
|
}
|
|
68
66
|
function getForceScheme() {
|
|
69
|
-
|
|
67
|
+
return _forceScheme;
|
|
70
68
|
}
|
|
71
69
|
function getInitialSetting() {
|
|
72
|
-
|
|
70
|
+
return "system";
|
|
73
71
|
}
|
|
74
72
|
function getInitialValue(setting) {
|
|
75
|
-
|
|
73
|
+
return "light";
|
|
76
74
|
}
|
|
77
75
|
const initialSetting = getInitialSetting();
|
|
78
76
|
let currentSetting = initialSetting;
|
|
79
77
|
let currentValue = getInitialValue(initialSetting);
|
|
80
78
|
let isWebListening = false;
|
|
81
79
|
function startWebListener() {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
80
|
+
if (isWebListening) return;
|
|
81
|
+
isWebListening = true;
|
|
82
|
+
const matcher = typeof window !== "undefined" ? window.matchMedia?.("(prefers-color-scheme: dark)") : null;
|
|
83
|
+
const onSystemChange = () => {
|
|
84
|
+
if (currentSetting === "system") updateValueFromSystem();
|
|
85
|
+
};
|
|
86
|
+
onSystemChange();
|
|
87
|
+
matcher?.addEventListener?.("change", onSystemChange);
|
|
90
88
|
}
|
|
91
89
|
function resolveValue(setting) {
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
if (setting === "system") return (0, import_systemScheme.getSystemScheme)();
|
|
91
|
+
return setting;
|
|
94
92
|
}
|
|
95
93
|
function updateValueFromSystem() {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
94
|
+
if (_forceScheme) return;
|
|
95
|
+
const value = resolveValue("system");
|
|
96
|
+
if (value !== currentValue) {
|
|
97
|
+
currentValue = value;
|
|
98
|
+
notifyListeners();
|
|
99
|
+
}
|
|
102
100
|
}
|
|
103
101
|
function updateScheme(setting) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
102
|
+
if (_forceScheme) return;
|
|
103
|
+
const value = setting === "system" ? resolveValue("system") : setting;
|
|
104
|
+
if (value !== currentValue || currentSetting !== setting) {
|
|
105
|
+
currentSetting = setting;
|
|
106
|
+
currentValue = value;
|
|
107
|
+
notifyListeners();
|
|
108
|
+
}
|
|
111
109
|
}
|
|
112
110
|
function setUserScheme(setting) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
111
|
+
if (_forceScheme) return;
|
|
112
|
+
(0, import_safeStorage.setStorageItem)(storageKey, setting);
|
|
113
|
+
updateScheme(setting);
|
|
116
114
|
}
|
|
117
115
|
function getUserScheme() {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
116
|
+
if (_forceScheme) return {
|
|
117
|
+
setting: _forceScheme,
|
|
118
|
+
value: _forceScheme
|
|
119
|
+
};
|
|
120
|
+
return {
|
|
121
|
+
setting: currentSetting,
|
|
122
|
+
value: currentValue
|
|
123
|
+
};
|
|
126
124
|
}
|
|
127
125
|
function onUserSchemeChange(listener) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
126
|
+
listeners.add(listener);
|
|
127
|
+
listener(currentSetting, currentValue);
|
|
128
|
+
return () => {
|
|
129
|
+
listeners.delete(listener);
|
|
130
|
+
};
|
|
133
131
|
}
|
|
134
132
|
function useUserScheme() {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
}
|
|
133
|
+
const [state, setState] = (0, import_react.useState)(() => getUserScheme());
|
|
134
|
+
const snapshot = getUserScheme();
|
|
135
|
+
const resolvedState = state.setting === snapshot.setting && state.value === snapshot.value ? state : snapshot;
|
|
136
|
+
(0, import_use_isomorphic_layout_effect.useIsomorphicLayoutEffect)(() => {
|
|
137
|
+
if (!_forceScheme) {
|
|
138
|
+
const stored = (0, import_safeStorage.getStorageItem)(storageKey);
|
|
139
|
+
if (stored) updateScheme(stored);
|
|
140
|
+
startWebListener();
|
|
141
|
+
}
|
|
142
|
+
return onUserSchemeChange((setting, value) => {
|
|
143
|
+
setState({
|
|
144
|
+
setting,
|
|
145
|
+
value
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
}, []);
|
|
149
|
+
return (0, import_react.useMemo)(() => ({
|
|
150
|
+
setting: resolvedState.setting,
|
|
151
|
+
value: resolvedState.value,
|
|
152
|
+
set: setUserScheme
|
|
153
|
+
}), [resolvedState.setting, resolvedState.value]);
|
|
154
|
+
}
|