@kbach/react 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -142,14 +142,28 @@ declare function useTheme(): ThemeContextValue;
142
142
 
143
143
  interface ThemeProviderProps {
144
144
  children: ReactNode;
145
- /** Default mode on first render. Falls back to persisted value, then 'system'. */
145
+ /** Initial mode. Falls back to persisted value, then 'system'. */
146
146
  defaultMode?: ThemeMode;
147
+ /**
148
+ * System color scheme for native `defaultMode="system"`.
149
+ *
150
+ * Pass the value of `useColorScheme()` from `react-native`. When importing
151
+ * `ThemeProvider` from `@kbach/native` this is handled automatically.
152
+ *
153
+ * @example
154
+ * ```tsx
155
+ * import { useColorScheme } from 'react-native';
156
+ * const colorScheme = useColorScheme();
157
+ * <ThemeProvider defaultMode="system" colorScheme={colorScheme}>…</ThemeProvider>
158
+ * ```
159
+ */
160
+ colorScheme?: 'light' | 'dark' | null;
147
161
  /** Override the config (useful for per-tree config). Defaults to global getConfig(). */
148
162
  config?: FrameworkConfig;
149
- /** Disable persistence to localStorage / AsyncStorage */
163
+ /** Disable persistence to localStorage */
150
164
  disablePersistence?: boolean;
151
165
  }
152
- declare function ThemeProvider({ children, defaultMode, config: configOverride, disablePersistence, }: ThemeProviderProps): React__default.JSX.Element;
166
+ declare function ThemeProvider({ children, defaultMode, colorScheme, config: configOverride, disablePersistence, }: ThemeProviderProps): React__default.JSX.Element;
153
167
 
154
168
  type ToggleVariant = 'button' | 'switch' | 'icon-button';
155
169
  interface ThemeToggleProps {
package/dist/index.d.ts CHANGED
@@ -142,14 +142,28 @@ declare function useTheme(): ThemeContextValue;
142
142
 
143
143
  interface ThemeProviderProps {
144
144
  children: ReactNode;
145
- /** Default mode on first render. Falls back to persisted value, then 'system'. */
145
+ /** Initial mode. Falls back to persisted value, then 'system'. */
146
146
  defaultMode?: ThemeMode;
147
+ /**
148
+ * System color scheme for native `defaultMode="system"`.
149
+ *
150
+ * Pass the value of `useColorScheme()` from `react-native`. When importing
151
+ * `ThemeProvider` from `@kbach/native` this is handled automatically.
152
+ *
153
+ * @example
154
+ * ```tsx
155
+ * import { useColorScheme } from 'react-native';
156
+ * const colorScheme = useColorScheme();
157
+ * <ThemeProvider defaultMode="system" colorScheme={colorScheme}>…</ThemeProvider>
158
+ * ```
159
+ */
160
+ colorScheme?: 'light' | 'dark' | null;
147
161
  /** Override the config (useful for per-tree config). Defaults to global getConfig(). */
148
162
  config?: FrameworkConfig;
149
- /** Disable persistence to localStorage / AsyncStorage */
163
+ /** Disable persistence to localStorage */
150
164
  disablePersistence?: boolean;
151
165
  }
152
- declare function ThemeProvider({ children, defaultMode, config: configOverride, disablePersistence, }: ThemeProviderProps): React__default.JSX.Element;
166
+ declare function ThemeProvider({ children, defaultMode, colorScheme, config: configOverride, disablePersistence, }: ThemeProviderProps): React__default.JSX.Element;
153
167
 
154
168
  type ToggleVariant = 'button' | 'switch' | 'icon-button';
155
169
  interface ThemeToggleProps {
package/dist/index.js CHANGED
@@ -2065,11 +2065,6 @@ function subscribeGlobalDarkMode(callback) {
2065
2065
 
2066
2066
  // src/ThemeProvider.tsx
2067
2067
  var import_jsx_runtime = require("react/jsx-runtime");
2068
- var _useColorScheme;
2069
- try {
2070
- ({ useColorScheme: _useColorScheme } = require("react-native"));
2071
- } catch {
2072
- }
2073
2068
  var STORAGE_KEY = "kbach-theme";
2074
2069
  function loadPersistedMode() {
2075
2070
  try {
@@ -2098,20 +2093,20 @@ function applyWebTheme(resolvedMode, strategy) {
2098
2093
  function ThemeProvider({
2099
2094
  children,
2100
2095
  defaultMode = "system",
2096
+ colorScheme,
2101
2097
  config: configOverride,
2102
2098
  disablePersistence = false
2103
2099
  }) {
2104
2100
  const [resolvedConfig, setResolvedConfig] = (0, import_react2.useState)(
2105
2101
  () => configOverride ? buildConfig(configOverride) : getConfig()
2106
2102
  );
2107
- const nativeScheme = _useColorScheme?.();
2108
2103
  const [webScheme, setWebScheme] = (0, import_react2.useState)(() => {
2109
2104
  if (isWeb && typeof window !== "undefined") {
2110
2105
  return window.matchMedia?.("(prefers-color-scheme: dark)").matches ? "dark" : "light";
2111
2106
  }
2112
2107
  return "light";
2113
2108
  });
2114
- const systemScheme = isWeb ? webScheme : nativeScheme === "dark" ? "dark" : "light";
2109
+ const systemScheme = isWeb ? webScheme : colorScheme === "dark" ? "dark" : "light";
2115
2110
  const [mode, _setMode] = (0, import_react2.useState)(() => {
2116
2111
  if (!disablePersistence) {
2117
2112
  const persisted = loadPersistedMode();
package/dist/index.mjs CHANGED
@@ -39,11 +39,6 @@ import {
39
39
  useState
40
40
  } from "react";
41
41
  import { jsx } from "react/jsx-runtime";
42
- var _useColorScheme;
43
- try {
44
- ({ useColorScheme: _useColorScheme } = __require("react-native"));
45
- } catch {
46
- }
47
42
  var STORAGE_KEY = "kbach-theme";
48
43
  function loadPersistedMode() {
49
44
  try {
@@ -72,20 +67,20 @@ function applyWebTheme(resolvedMode, strategy) {
72
67
  function ThemeProvider({
73
68
  children,
74
69
  defaultMode = "system",
70
+ colorScheme,
75
71
  config: configOverride,
76
72
  disablePersistence = false
77
73
  }) {
78
74
  const [resolvedConfig, setResolvedConfig] = useState(
79
75
  () => configOverride ? buildConfig(configOverride) : getConfig()
80
76
  );
81
- const nativeScheme = _useColorScheme?.();
82
77
  const [webScheme, setWebScheme] = useState(() => {
83
78
  if (isWeb && typeof window !== "undefined") {
84
79
  return window.matchMedia?.("(prefers-color-scheme: dark)").matches ? "dark" : "light";
85
80
  }
86
81
  return "light";
87
82
  });
88
- const systemScheme = isWeb ? webScheme : nativeScheme === "dark" ? "dark" : "light";
83
+ const systemScheme = isWeb ? webScheme : colorScheme === "dark" ? "dark" : "light";
89
84
  const [mode, _setMode] = useState(() => {
90
85
  if (!disablePersistence) {
91
86
  const persisted = loadPersistedMode();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kbach/react",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
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",