@kbach/react-native 1.0.0-beta.2 → 1.0.0-beta.4
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/README.md +59 -26
- package/android/build.gradle +36 -0
- package/android/src/main/AndroidManifest.xml +14 -0
- package/android/src/main/java/com/kbachnative/KbachModule.kt +83 -0
- package/android/src/main/java/com/kbachnative/KbachPackage.kt +54 -0
- package/android/src/main/jniLibs/arm64-v8a/libkbach_core_engine.so +0 -0
- package/android/src/main/jniLibs/x86_64/libkbach_core_engine.so +0 -0
- package/dist/chunk-4KCCEMEN.mjs +66 -0
- package/dist/{chunk-YHF3QLRL.mjs → chunk-AEVOM2NB.mjs} +9 -12
- package/dist/{chunk-SVMYVXY6.mjs → chunk-DLIXI5OW.mjs} +23 -14
- package/dist/chunk-FG5E4NLJ.mjs +18 -0
- package/dist/chunk-KSDFO34H.mjs +32 -0
- package/dist/chunk-OJQAJLYT.mjs +14 -0
- package/dist/chunk-ZUE6SCTE.mjs +14 -0
- package/dist/index.d.mts +13 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +9 -2
- package/dist/index.mjs +9 -57
- package/dist/index.web.d.mts +7 -0
- package/dist/index.web.d.ts +7 -0
- package/dist/index.web.js +488 -0
- package/dist/index.web.mjs +32 -0
- package/dist/jsx-dev-runtime.d.mts +3 -12
- package/dist/jsx-dev-runtime.d.ts +3 -12
- package/dist/jsx-dev-runtime.js +61 -47
- package/dist/jsx-dev-runtime.mjs +8 -11
- package/dist/jsx-dev-runtime.web.d.mts +10 -0
- package/dist/jsx-dev-runtime.web.d.ts +10 -0
- package/dist/jsx-dev-runtime.web.js +437 -0
- package/dist/jsx-dev-runtime.web.mjs +17 -0
- package/dist/jsx-runtime.d.mts +3 -23
- package/dist/jsx-runtime.d.ts +3 -23
- package/dist/jsx-runtime.js +51 -38
- package/dist/jsx-runtime.mjs +6 -3
- package/dist/jsx-runtime.web.d.mts +7 -0
- package/dist/jsx-runtime.web.d.ts +7 -0
- package/dist/jsx-runtime.web.js +426 -0
- package/dist/jsx-runtime.web.mjs +14 -0
- package/package.json +27 -6
- package/react-native.config.js +29 -0
- package/specs/NativeKbachModule.ts +31 -0
package/dist/index.d.mts
CHANGED
|
@@ -59,6 +59,19 @@ interface StyleObject {
|
|
|
59
59
|
* `Pressable` ever knows this, so it's passed in directly by the caller
|
|
60
60
|
* (jsx-runtime, from Pressable's own style-function callback) rather than
|
|
61
61
|
* queried here. Defaults to `false` for every other element type.
|
|
62
|
+
*
|
|
63
|
+
* `width` gates `sm:`/`md:`/`lg:`/`xl:`/`2xl:` against the active theme's
|
|
64
|
+
* `screens` scale (resolve_style.rs's `native_modifier_state`) — read fresh
|
|
65
|
+
* from `Dimensions.get('window').width` on every call, the same "no
|
|
66
|
+
* caching, no store" choice `colorScheme`/`pressed` already make, and for
|
|
67
|
+
* the same reason: unlike dark mode there's no explicit-override concept to
|
|
68
|
+
* preserve here (nobody manually overrides their screen width), so a plain
|
|
69
|
+
* synchronous read is enough — no need for the subscribable store
|
|
70
|
+
* darkModeStore.ts is for. As with `colorScheme`, this function has no
|
|
71
|
+
* subscription of its own, so rotating/resizing the window doesn't
|
|
72
|
+
* re-render anything by itself — call RN's own `useWindowDimensions()`
|
|
73
|
+
* somewhere in the tree for that (same role `useColorScheme()` plays for
|
|
74
|
+
* `dark:` in apps/native-sandbox/App.tsx).
|
|
62
75
|
*/
|
|
63
76
|
declare function resolveStyle(classString: string, pressed?: boolean): StyleObject;
|
|
64
77
|
|
package/dist/index.d.ts
CHANGED
|
@@ -59,6 +59,19 @@ interface StyleObject {
|
|
|
59
59
|
* `Pressable` ever knows this, so it's passed in directly by the caller
|
|
60
60
|
* (jsx-runtime, from Pressable's own style-function callback) rather than
|
|
61
61
|
* queried here. Defaults to `false` for every other element type.
|
|
62
|
+
*
|
|
63
|
+
* `width` gates `sm:`/`md:`/`lg:`/`xl:`/`2xl:` against the active theme's
|
|
64
|
+
* `screens` scale (resolve_style.rs's `native_modifier_state`) — read fresh
|
|
65
|
+
* from `Dimensions.get('window').width` on every call, the same "no
|
|
66
|
+
* caching, no store" choice `colorScheme`/`pressed` already make, and for
|
|
67
|
+
* the same reason: unlike dark mode there's no explicit-override concept to
|
|
68
|
+
* preserve here (nobody manually overrides their screen width), so a plain
|
|
69
|
+
* synchronous read is enough — no need for the subscribable store
|
|
70
|
+
* darkModeStore.ts is for. As with `colorScheme`, this function has no
|
|
71
|
+
* subscription of its own, so rotating/resizing the window doesn't
|
|
72
|
+
* re-render anything by itself — call RN's own `useWindowDimensions()`
|
|
73
|
+
* somewhere in the tree for that (same role `useColorScheme()` plays for
|
|
74
|
+
* `dark:` in apps/native-sandbox/App.tsx).
|
|
62
75
|
*/
|
|
63
76
|
declare function resolveStyle(classString: string, pressed?: boolean): StyleObject;
|
|
64
77
|
|
package/dist/index.js
CHANGED
|
@@ -326,7 +326,13 @@ var defaultTheme = {
|
|
|
326
326
|
"6": 24,
|
|
327
327
|
"8": 32
|
|
328
328
|
},
|
|
329
|
-
screens: {
|
|
329
|
+
screens: {
|
|
330
|
+
sm: 640,
|
|
331
|
+
md: 768,
|
|
332
|
+
lg: 1024,
|
|
333
|
+
xl: 1280,
|
|
334
|
+
"2xl": 1536
|
|
335
|
+
},
|
|
330
336
|
darkMode: "attribute"
|
|
331
337
|
};
|
|
332
338
|
var activeTheme = defaultTheme;
|
|
@@ -395,7 +401,8 @@ function seedDefaultMode(fallback) {
|
|
|
395
401
|
function resolveStyle(classString, pressed = false) {
|
|
396
402
|
const KbachModule = import_react_native2.TurboModuleRegistry.getEnforcing("KbachModule");
|
|
397
403
|
const colorScheme = getGlobalDarkMode() ? "dark" : "light";
|
|
398
|
-
const
|
|
404
|
+
const width = import_react_native2.Dimensions.get("window").width;
|
|
405
|
+
const json = KbachModule.resolveStyle(classString, getThemeJson(), colorScheme, pressed, width);
|
|
399
406
|
return JSON.parse(json);
|
|
400
407
|
}
|
|
401
408
|
|
package/dist/index.mjs
CHANGED
|
@@ -1,69 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ThemeProvider,
|
|
3
|
+
useGlobalDarkMode,
|
|
4
|
+
useTheme
|
|
5
|
+
} from "./chunk-4KCCEMEN.mjs";
|
|
6
|
+
import {
|
|
7
|
+
resolveStyle
|
|
8
|
+
} from "./chunk-FG5E4NLJ.mjs";
|
|
1
9
|
import {
|
|
2
10
|
defaultTheme,
|
|
3
11
|
getGlobalDarkMode,
|
|
4
12
|
getGlobalThemeMode,
|
|
5
13
|
getTheme,
|
|
6
|
-
resolveStyle,
|
|
7
|
-
seedDefaultMode,
|
|
8
14
|
setGlobalThemeMode,
|
|
9
15
|
setTheme,
|
|
10
16
|
subscribeGlobalDarkMode,
|
|
11
17
|
toggleGlobalDarkMode
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
|
|
14
|
-
// src/useGlobalDarkMode.ts
|
|
15
|
-
import { useSyncExternalStore } from "react";
|
|
16
|
-
function useGlobalDarkMode() {
|
|
17
|
-
return useSyncExternalStore(subscribeGlobalDarkMode, getGlobalDarkMode);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// src/ThemeProvider.tsx
|
|
21
|
-
import { useEffect, useMemo, useRef, useSyncExternalStore as useSyncExternalStore2 } from "react";
|
|
22
|
-
|
|
23
|
-
// src/ThemeContext.tsx
|
|
24
|
-
import { createContext, useContext } from "react";
|
|
25
|
-
var ThemeContext = createContext(null);
|
|
26
|
-
function useTheme() {
|
|
27
|
-
const ctx = useContext(ThemeContext);
|
|
28
|
-
if (!ctx) {
|
|
29
|
-
throw new Error(
|
|
30
|
-
'useTheme() must be called within a <ThemeProvider>. For dark-mode state without a provider, use useGlobalDarkMode() (read) or toggleGlobalDarkMode()/setGlobalThemeMode() (write) from "@kbach/react-native" instead.'
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
return ctx;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// src/ThemeProvider.tsx
|
|
37
|
-
import { jsx } from "react/jsx-runtime";
|
|
38
|
-
var mountedProviderCount = 0;
|
|
39
|
-
var warnedMultipleProviders = false;
|
|
40
|
-
function ThemeProvider({ children, defaultMode = "system" }) {
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
mountedProviderCount++;
|
|
43
|
-
if (mountedProviderCount > 1 && !warnedMultipleProviders) {
|
|
44
|
-
warnedMultipleProviders = true;
|
|
45
|
-
console.warn(
|
|
46
|
-
"[kbach] Multiple <ThemeProvider> instances are mounted at once. Dark-mode state is one global store (the same one useGlobalDarkMode()/toggleGlobalDarkMode() read and write), not scoped per-provider, so they will fight over the same state instead of each getting their own."
|
|
47
|
-
);
|
|
48
|
-
}
|
|
49
|
-
return () => {
|
|
50
|
-
mountedProviderCount--;
|
|
51
|
-
};
|
|
52
|
-
}, []);
|
|
53
|
-
const seeded = useRef(false);
|
|
54
|
-
useEffect(() => {
|
|
55
|
-
if (seeded.current) return;
|
|
56
|
-
seeded.current = true;
|
|
57
|
-
seedDefaultMode(defaultMode);
|
|
58
|
-
}, []);
|
|
59
|
-
const isDark = useSyncExternalStore2(subscribeGlobalDarkMode, getGlobalDarkMode);
|
|
60
|
-
const mode = useSyncExternalStore2(subscribeGlobalDarkMode, getGlobalThemeMode);
|
|
61
|
-
const value = useMemo(
|
|
62
|
-
() => ({ mode, isDark, setMode: setGlobalThemeMode, toggle: toggleGlobalDarkMode }),
|
|
63
|
-
[mode, isDark]
|
|
64
|
-
);
|
|
65
|
-
return /* @__PURE__ */ jsx(ThemeContext.Provider, { value, children });
|
|
66
|
-
}
|
|
18
|
+
} from "./chunk-AEVOM2NB.mjs";
|
|
67
19
|
export {
|
|
68
20
|
ThemeProvider,
|
|
69
21
|
defaultTheme,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { StyleObject } from './index.mjs';
|
|
2
|
+
export { ThemeConfig, ThemeContextValue, ThemeMode, ThemeProvider, ThemeProviderProps, defaultTheme, getGlobalDarkMode, getGlobalThemeMode, getTheme, setGlobalThemeMode, setTheme, subscribeGlobalDarkMode, toggleGlobalDarkMode, useGlobalDarkMode, useTheme } from './index.mjs';
|
|
3
|
+
import 'react';
|
|
4
|
+
|
|
5
|
+
declare function resolveStyle(classString: string, pressed?: boolean): StyleObject;
|
|
6
|
+
|
|
7
|
+
export { StyleObject, resolveStyle };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { StyleObject } from './index.js';
|
|
2
|
+
export { ThemeConfig, ThemeContextValue, ThemeMode, ThemeProvider, ThemeProviderProps, defaultTheme, getGlobalDarkMode, getGlobalThemeMode, getTheme, setGlobalThemeMode, setTheme, subscribeGlobalDarkMode, toggleGlobalDarkMode, useGlobalDarkMode, useTheme } from './index.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
|
|
5
|
+
declare function resolveStyle(classString: string, pressed?: boolean): StyleObject;
|
|
6
|
+
|
|
7
|
+
export { StyleObject, resolveStyle };
|