@kbach/react 0.2.2 → 0.2.3

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/index.js CHANGED
@@ -2065,17 +2065,15 @@ function subscribeGlobalDarkMode(callback) {
2065
2065
 
2066
2066
  // src/ThemeProvider.tsx
2067
2067
  var import_jsx_runtime = require("react/jsx-runtime");
2068
- var Appearance;
2068
+ var _useColorScheme;
2069
2069
  try {
2070
- ({ Appearance } = require("react-native"));
2070
+ ({ useColorScheme: _useColorScheme } = require("react-native"));
2071
2071
  } catch {
2072
2072
  }
2073
2073
  var STORAGE_KEY = "kbach-theme";
2074
2074
  function loadPersistedMode() {
2075
2075
  try {
2076
- if (isWeb) {
2077
- return localStorage.getItem(STORAGE_KEY);
2078
- }
2076
+ if (isWeb) return localStorage.getItem(STORAGE_KEY);
2079
2077
  return null;
2080
2078
  } catch {
2081
2079
  return null;
@@ -2106,17 +2104,14 @@ function ThemeProvider({
2106
2104
  const [resolvedConfig, setResolvedConfig] = (0, import_react2.useState)(
2107
2105
  () => configOverride ? buildConfig(configOverride) : getConfig()
2108
2106
  );
2109
- const getSystemScheme = (0, import_react2.useCallback)(() => {
2107
+ const nativeScheme = _useColorScheme?.();
2108
+ const [webScheme, setWebScheme] = (0, import_react2.useState)(() => {
2110
2109
  if (isWeb && typeof window !== "undefined") {
2111
2110
  return window.matchMedia?.("(prefers-color-scheme: dark)").matches ? "dark" : "light";
2112
2111
  }
2113
- if (Appearance) {
2114
- const scheme = Appearance.getColorScheme();
2115
- return scheme === "dark" ? "dark" : "light";
2116
- }
2117
2112
  return "light";
2118
- }, []);
2119
- const [systemScheme, setSystemScheme] = (0, import_react2.useState)(getSystemScheme);
2113
+ });
2114
+ const systemScheme = isWeb ? webScheme : nativeScheme === "dark" ? "dark" : "light";
2120
2115
  const [mode, _setMode] = (0, import_react2.useState)(() => {
2121
2116
  if (!disablePersistence) {
2122
2117
  const persisted = loadPersistedMode();
@@ -2138,33 +2133,17 @@ function ThemeProvider({
2138
2133
  applyWebTheme(resolvedMode, resolvedConfig.darkMode);
2139
2134
  setGlobalDarkMode(isDark);
2140
2135
  }, [isDark, resolvedMode, resolvedConfig.darkMode]);
2141
- const setSystemSchemeRef = (0, import_react2.useRef)(setSystemScheme);
2142
- setSystemSchemeRef.current = setSystemScheme;
2136
+ const setWebSchemeRef = (0, import_react2.useRef)(setWebScheme);
2137
+ setWebSchemeRef.current = setWebScheme;
2143
2138
  (0, import_react2.useEffect)(() => {
2144
- if (Appearance) {
2145
- const scheme = Appearance.getColorScheme();
2146
- if (scheme != null) {
2147
- setSystemSchemeRef.current(scheme === "dark" ? "dark" : "light");
2148
- }
2149
- }
2150
- }, []);
2151
- (0, import_react2.useEffect)(() => {
2152
- if (isWeb && typeof window !== "undefined") {
2153
- const mq = window.matchMedia?.("(prefers-color-scheme: dark)");
2154
- if (!mq) return;
2155
- const handler = (e) => {
2156
- setSystemSchemeRef.current(e.matches ? "dark" : "light");
2157
- };
2158
- mq.addEventListener("change", handler);
2159
- return () => mq.removeEventListener("change", handler);
2160
- }
2161
- if (Appearance) {
2162
- const sub = Appearance.addChangeListener(({ colorScheme }) => {
2163
- setSystemSchemeRef.current(colorScheme === "dark" ? "dark" : "light");
2164
- });
2165
- return () => sub.remove();
2166
- }
2167
- return void 0;
2139
+ if (!isWeb || typeof window === "undefined") return;
2140
+ const mq = window.matchMedia?.("(prefers-color-scheme: dark)");
2141
+ if (!mq) return;
2142
+ const handler = (e) => {
2143
+ setWebSchemeRef.current(e.matches ? "dark" : "light");
2144
+ };
2145
+ mq.addEventListener("change", handler);
2146
+ return () => mq.removeEventListener("change", handler);
2168
2147
  }, []);
2169
2148
  (0, import_react2.useEffect)(() => {
2170
2149
  if (configOverride) return;
package/dist/index.mjs CHANGED
@@ -39,17 +39,15 @@ import {
39
39
  useState
40
40
  } from "react";
41
41
  import { jsx } from "react/jsx-runtime";
42
- var Appearance;
42
+ var _useColorScheme;
43
43
  try {
44
- ({ Appearance } = __require("react-native"));
44
+ ({ useColorScheme: _useColorScheme } = __require("react-native"));
45
45
  } catch {
46
46
  }
47
47
  var STORAGE_KEY = "kbach-theme";
48
48
  function loadPersistedMode() {
49
49
  try {
50
- if (isWeb) {
51
- return localStorage.getItem(STORAGE_KEY);
52
- }
50
+ if (isWeb) return localStorage.getItem(STORAGE_KEY);
53
51
  return null;
54
52
  } catch {
55
53
  return null;
@@ -80,17 +78,14 @@ function ThemeProvider({
80
78
  const [resolvedConfig, setResolvedConfig] = useState(
81
79
  () => configOverride ? buildConfig(configOverride) : getConfig()
82
80
  );
83
- const getSystemScheme = useCallback(() => {
81
+ const nativeScheme = _useColorScheme?.();
82
+ const [webScheme, setWebScheme] = useState(() => {
84
83
  if (isWeb && typeof window !== "undefined") {
85
84
  return window.matchMedia?.("(prefers-color-scheme: dark)").matches ? "dark" : "light";
86
85
  }
87
- if (Appearance) {
88
- const scheme = Appearance.getColorScheme();
89
- return scheme === "dark" ? "dark" : "light";
90
- }
91
86
  return "light";
92
- }, []);
93
- const [systemScheme, setSystemScheme] = useState(getSystemScheme);
87
+ });
88
+ const systemScheme = isWeb ? webScheme : nativeScheme === "dark" ? "dark" : "light";
94
89
  const [mode, _setMode] = useState(() => {
95
90
  if (!disablePersistence) {
96
91
  const persisted = loadPersistedMode();
@@ -112,33 +107,17 @@ function ThemeProvider({
112
107
  applyWebTheme(resolvedMode, resolvedConfig.darkMode);
113
108
  setGlobalDarkMode(isDark);
114
109
  }, [isDark, resolvedMode, resolvedConfig.darkMode]);
115
- const setSystemSchemeRef = useRef(setSystemScheme);
116
- setSystemSchemeRef.current = setSystemScheme;
110
+ const setWebSchemeRef = useRef(setWebScheme);
111
+ setWebSchemeRef.current = setWebScheme;
117
112
  useEffect(() => {
118
- if (Appearance) {
119
- const scheme = Appearance.getColorScheme();
120
- if (scheme != null) {
121
- setSystemSchemeRef.current(scheme === "dark" ? "dark" : "light");
122
- }
123
- }
124
- }, []);
125
- useEffect(() => {
126
- if (isWeb && typeof window !== "undefined") {
127
- const mq = window.matchMedia?.("(prefers-color-scheme: dark)");
128
- if (!mq) return;
129
- const handler = (e) => {
130
- setSystemSchemeRef.current(e.matches ? "dark" : "light");
131
- };
132
- mq.addEventListener("change", handler);
133
- return () => mq.removeEventListener("change", handler);
134
- }
135
- if (Appearance) {
136
- const sub = Appearance.addChangeListener(({ colorScheme }) => {
137
- setSystemSchemeRef.current(colorScheme === "dark" ? "dark" : "light");
138
- });
139
- return () => sub.remove();
140
- }
141
- return void 0;
113
+ if (!isWeb || typeof window === "undefined") return;
114
+ const mq = window.matchMedia?.("(prefers-color-scheme: dark)");
115
+ if (!mq) return;
116
+ const handler = (e) => {
117
+ setWebSchemeRef.current(e.matches ? "dark" : "light");
118
+ };
119
+ mq.addEventListener("change", handler);
120
+ return () => mq.removeEventListener("change", handler);
142
121
  }, []);
143
122
  useEffect(() => {
144
123
  if (configOverride) return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kbach/react",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "React / React Native components and hooks for the Kbach framework",
5
5
  "source": "./src/index.ts",
6
6
  "main": "./dist/index.js",