@korsolutions/ui 0.0.77 → 0.0.79

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.
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useState } from "react";
4
+ import { useColorScheme as useSystemColorScheme } from "react-native";
5
+ const getColorScheme = (storageGetCallback, systemColorScheme) => {
6
+ if (storageGetCallback) {
7
+ const storedScheme = storageGetCallback();
8
+ if (storedScheme) return storedScheme;
9
+ }
10
+ if (systemColorScheme) {
11
+ return systemColorScheme === "dark" ? "dark" : "light";
12
+ }
13
+ return "light";
14
+ };
15
+ export function useColorScheme({
16
+ colorSchemeStorage
17
+ }) {
18
+ const systemColorScheme = useSystemColorScheme();
19
+ const [_colorScheme, _setColorScheme] = useState(getColorScheme(colorSchemeStorage?.get, systemColorScheme));
20
+ const setColorScheme = scheme => {
21
+ _setColorScheme(scheme);
22
+ colorSchemeStorage?.set(scheme);
23
+ };
24
+ useEffect(() => {
25
+ const newScheme = getColorScheme(colorSchemeStorage?.get, systemColorScheme);
26
+ if (newScheme === _colorScheme) return;
27
+ setColorScheme(newScheme);
28
+ }, [systemColorScheme]);
29
+ return {
30
+ colorScheme: _colorScheme,
31
+ setColorScheme
32
+ };
33
+ }
34
+ //# sourceMappingURL=use-color-scheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useState","useColorScheme","useSystemColorScheme","getColorScheme","storageGetCallback","systemColorScheme","storedScheme","colorSchemeStorage","_colorScheme","_setColorScheme","get","setColorScheme","scheme","set","newScheme","colorScheme"],"sourceRoot":"../../../src","sources":["hooks/use-color-scheme.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,cAAc,IAAIC,oBAAoB,QAAQ,cAAc;AAGrE,MAAMC,cAAc,GAAGA,CACrBC,kBAA6C,EAC7CC,iBAA2D,KAC3C;EAChB,IAAID,kBAAkB,EAAE;IACtB,MAAME,YAAY,GAAGF,kBAAkB,CAAC,CAAC;IACzC,IAAIE,YAAY,EAAE,OAAOA,YAAY;EACvC;EACA,IAAID,iBAAiB,EAAE;IACrB,OAAOA,iBAAiB,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO;EACxD;EACA,OAAO,OAAO;AAChB,CAAC;AAMD,OAAO,SAASJ,cAAcA,CAAC;EAAEM;AAAwC,CAAC,EAAE;EAC1E,MAAMF,iBAAiB,GAAGH,oBAAoB,CAAC,CAAC;EAChD,MAAM,CAACM,YAAY,EAAEC,eAAe,CAAC,GAAGT,QAAQ,CAC9CG,cAAc,CAACI,kBAAkB,EAAEG,GAAG,EAAEL,iBAAiB,CAC3D,CAAC;EAED,MAAMM,cAAc,GAAIC,MAAmB,IAAK;IAC9CH,eAAe,CAACG,MAAM,CAAC;IACvBL,kBAAkB,EAAEM,GAAG,CAACD,MAAM,CAAC;EACjC,CAAC;EAEDb,SAAS,CAAC,MAAM;IACd,MAAMe,SAAS,GAAGX,cAAc,CAC9BI,kBAAkB,EAAEG,GAAG,EACvBL,iBACF,CAAC;IACD,IAAIS,SAAS,KAAKN,YAAY,EAAE;IAChCG,cAAc,CAACG,SAAS,CAAC;EAC3B,CAAC,EAAE,CAACT,iBAAiB,CAAC,CAAC;EAEvB,OAAO;IAAEU,WAAW,EAAEP,YAAY;IAAEG;EAAe,CAAC;AACtD","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import { createContext, useContext, useEffect, useState } from "react";
4
- import { useColorScheme } from "react-native";
3
+ import { createContext, useContext } from "react";
4
+ import { useColorScheme } from "../hooks/use-color-scheme.js";
5
5
  import { defaultThemeAssets } from "./default/index.js";
6
6
  import { mergeThemeAssets } from "./utils.js";
7
7
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -12,15 +12,14 @@ export const ThemeProvider = props => {
12
12
  theme,
13
13
  components
14
14
  } = props;
15
- const systemColorScheme = useColorScheme();
16
- const [colorScheme, setColorScheme] = useState(systemColorScheme === "dark" ? "dark" : "light");
15
+ const {
16
+ colorScheme,
17
+ setColorScheme
18
+ } = useColorScheme({
19
+ colorSchemeStorage: components?.colorScheme?.storage
20
+ });
17
21
  const themeAssets = theme ? mergeThemeAssets(defaultThemeAssets, theme) : defaultThemeAssets;
18
22
  const colors = themeAssets.colors[colorScheme];
19
- useEffect(() => {
20
- if (systemColorScheme) {
21
- setColorScheme(systemColorScheme === "dark" ? "dark" : "light");
22
- }
23
- }, [systemColorScheme]);
24
23
  return /*#__PURE__*/_jsx(ThemeContext.Provider, {
25
24
  value: {
26
25
  colorScheme,
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","useEffect","useState","useColorScheme","defaultThemeAssets","mergeThemeAssets","jsx","_jsx","ThemeContext","ThemeProvider","props","children","theme","components","systemColorScheme","colorScheme","setColorScheme","themeAssets","colors","Provider","value","radius","fontFamily","letterSpacing","fontSize","useTheme","context","Error","useComponentsConfig"],"sourceRoot":"../../../src","sources":["themes/provider.tsx"],"mappings":";;AAAA,SACEA,aAAa,EAEbC,UAAU,EACVC,SAAS,EACTC,QAAQ,QACH,OAAO;AACd,SAASC,cAAc,QAAQ,cAAc;AAI7C,SAASC,kBAAkB,QAAQ,oBAAW;AAU9C,SAASC,gBAAgB,QAAQ,YAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;AA4B3C,MAAMC,YAAY,gBAAGT,aAAa,CAAsB,IAAI,CAAC;AAO7D,OAAO,MAAMU,aAAa,GAAIC,KAAyB,IAAK;EAC1D,MAAM;IAAEC,QAAQ;IAAEC,KAAK;IAAEC;EAAW,CAAC,GAAGH,KAAK;EAE7C,MAAMI,iBAAiB,GAAGX,cAAc,CAAC,CAAC;EAC1C,MAAM,CAACY,WAAW,EAAEC,cAAc,CAAC,GAAGd,QAAQ,CAC5CY,iBAAiB,KAAK,MAAM,GAAG,MAAM,GAAG,OAC1C,CAAC;EAED,MAAMG,WAAW,GAAGL,KAAK,GACrBP,gBAAgB,CAACD,kBAAkB,EAAEQ,KAAK,CAAC,GAC3CR,kBAAkB;EAEtB,MAAMc,MAAM,GAAGD,WAAW,CAACC,MAAM,CAACH,WAAW,CAAC;EAE9Cd,SAAS,CAAC,MAAM;IACd,IAAIa,iBAAiB,EAAE;MACrBE,cAAc,CAACF,iBAAiB,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACjE;EACF,CAAC,EAAE,CAACA,iBAAiB,CAAC,CAAC;EAEvB,oBACEP,IAAA,CAACC,YAAY,CAACW,QAAQ;IACpBC,KAAK,EAAE;MACLL,WAAW;MACXC,cAAc;MACdE,MAAM;MACNG,MAAM,EAAEJ,WAAW,CAACI,MAAM;MAC1BC,UAAU,EAAEL,WAAW,CAACK,UAAU;MAClCC,aAAa,EAAEN,WAAW,CAACM,aAAa;MACxCC,QAAQ,EAAEP,WAAW,CAACO,QAAQ;MAC9BX;IACF,CAAE;IAAAF,QAAA,EAEDA;EAAQ,CACY,CAAC;AAE5B,CAAC;AAED,OAAO,MAAMc,QAAQ,GAAGA,CAAA,KAAM;EAC5B,MAAMC,OAAO,GAAG1B,UAAU,CAACQ,YAAY,CAAC;EACxC,IAAI,CAACkB,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,8CAA8C,CAAC;EACjE;EACA,OAAOD,OAAO;AAChB,CAAC;AAED,OAAO,MAAME,mBAAmB,GAAGA,CAAA,KAAM;EACvC,MAAMF,OAAO,GAAG1B,UAAU,CAACQ,YAAY,CAAC;EACxC,IAAI,CAACkB,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,yDAAyD,CAAC;EAC5E;EACA,OAAOD,OAAO,CAACb,UAAU;AAC3B,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createContext","useContext","useColorScheme","defaultThemeAssets","mergeThemeAssets","jsx","_jsx","ThemeContext","ThemeProvider","props","children","theme","components","colorScheme","setColorScheme","colorSchemeStorage","storage","themeAssets","colors","Provider","value","radius","fontFamily","letterSpacing","fontSize","useTheme","context","Error","useComponentsConfig"],"sourceRoot":"../../../src","sources":["themes/provider.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAA0BC,UAAU,QAAQ,OAAO;AAEzE,SAASC,cAAc,QAAQ,8BAA2B;AAG1D,SAASC,kBAAkB,QAAQ,oBAAW;AAW9C,SAASC,gBAAgB,QAAQ,YAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;AA+B3C,MAAMC,YAAY,gBAAGP,aAAa,CAAsB,IAAI,CAAC;AAO7D,OAAO,MAAMQ,aAAa,GAAIC,KAAyB,IAAK;EAC1D,MAAM;IAAEC,QAAQ;IAAEC,KAAK;IAAEC;EAAW,CAAC,GAAGH,KAAK;EAC7C,MAAM;IAAEI,WAAW;IAAEC;EAAe,CAAC,GAAGZ,cAAc,CAAC;IACrDa,kBAAkB,EAAEH,UAAU,EAAEC,WAAW,EAAEG;EAC/C,CAAC,CAAC;EAEF,MAAMC,WAAW,GAAGN,KAAK,GACrBP,gBAAgB,CAACD,kBAAkB,EAAEQ,KAAK,CAAC,GAC3CR,kBAAkB;EAEtB,MAAMe,MAAM,GAAGD,WAAW,CAACC,MAAM,CAACL,WAAW,CAAC;EAE9C,oBACEP,IAAA,CAACC,YAAY,CAACY,QAAQ;IACpBC,KAAK,EAAE;MACLP,WAAW;MACXC,cAAc;MACdI,MAAM;MACNG,MAAM,EAAEJ,WAAW,CAACI,MAAM;MAC1BC,UAAU,EAAEL,WAAW,CAACK,UAAU;MAClCC,aAAa,EAAEN,WAAW,CAACM,aAAa;MACxCC,QAAQ,EAAEP,WAAW,CAACO,QAAQ;MAC9BZ;IACF,CAAE;IAAAF,QAAA,EAEDA;EAAQ,CACY,CAAC;AAE5B,CAAC;AAED,OAAO,MAAMe,QAAQ,GAAGA,CAAA,KAAM;EAC5B,MAAMC,OAAO,GAAGzB,UAAU,CAACM,YAAY,CAAC;EACxC,IAAI,CAACmB,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,8CAA8C,CAAC;EACjE;EACA,OAAOD,OAAO;AAChB,CAAC;AAED,OAAO,MAAME,mBAAmB,GAAGA,CAAA,KAAM;EACvC,MAAMF,OAAO,GAAGzB,UAAU,CAACM,YAAY,CAAC;EACxC,IAAI,CAACmB,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,yDAAyD,CAAC;EAC5E;EACA,OAAOD,OAAO,CAACd,UAAU;AAC3B,CAAC","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ import type { ColorScheme, StorageClient } from "../themes/types";
2
+ interface UseColorSchemeProps {
3
+ colorSchemeStorage?: StorageClient<ColorScheme>;
4
+ }
5
+ export declare function useColorScheme({ colorSchemeStorage }: UseColorSchemeProps): {
6
+ colorScheme: ColorScheme;
7
+ setColorScheme: (scheme: ColorScheme) => void;
8
+ };
9
+ export {};
10
+ //# sourceMappingURL=use-color-scheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-color-scheme.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-color-scheme.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAgBlE,UAAU,mBAAmB;IAC3B,kBAAkB,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CACjD;AAED,wBAAgB,cAAc,CAAC,EAAE,kBAAkB,EAAE,EAAE,mBAAmB;;6BAMxC,WAAW;EAe5C"}
@@ -2,7 +2,7 @@ import { type PropsWithChildren } from "react";
2
2
  import type { ToastVariants } from "../components/toast/variants";
3
3
  import type { SvgProps } from "../types/props.types";
4
4
  import type { DeepPartial } from "../types/util.types";
5
- import type { Colors, ColorScheme, FontFamily, FontSize, LetterSpacing, Radius, ThemeAssets } from "./types";
5
+ import type { Colors, ColorScheme, FontFamily, FontSize, LetterSpacing, Radius, StorageClient, ThemeAssets } from "./types";
6
6
  interface ThemeContext {
7
7
  colors: Colors;
8
8
  radius: Radius;
@@ -14,6 +14,9 @@ interface ThemeContext {
14
14
  components?: ComponentsConfig;
15
15
  }
16
16
  export interface ComponentsConfig {
17
+ colorScheme?: {
18
+ storage?: StorageClient<ColorScheme>;
19
+ };
17
20
  toast?: {
18
21
  icons?: Partial<Record<keyof typeof ToastVariants, React.ComponentType<SvgProps>>>;
19
22
  };
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/themes/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAIvB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,UAAU,EACV,QAAQ,EACR,aAAa,EACb,MAAM,EACN,WAAW,EACZ,MAAM,SAAS,CAAC;AAGjB,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,OAAO,CACb,MAAM,CAAC,MAAM,OAAO,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAClE,CAAC;KACH,CAAC;IACF,IAAI,CAAC,EAAE;QACL,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;KAC/C,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACzC,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;KAC1C,CAAC;CACH;AAED,QAAA,MAAM,YAAY,8CAA2C,CAAC;AAE9D,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,KAAK,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,kBAAkB,gCAoCtD,CAAC;AAEF,eAAO,MAAM,QAAQ,oBAMpB,CAAC;AAEF,eAAO,MAAM,mBAAmB,oCAM/B,CAAC"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/themes/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAc,MAAM,OAAO,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,UAAU,EACV,QAAQ,EACR,aAAa,EACb,MAAM,EACN,aAAa,EACb,WAAW,EACZ,MAAM,SAAS,CAAC;AAGjB,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;KACtC,CAAC;IACF,KAAK,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,OAAO,CACb,MAAM,CAAC,MAAM,OAAO,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAClE,CAAC;KACH,CAAC;IACF,IAAI,CAAC,EAAE;QACL,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;KAC/C,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACzC,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;KAC1C,CAAC;CACH;AAED,QAAA,MAAM,YAAY,8CAA2C,CAAC;AAE9D,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,KAAK,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,kBAAkB,gCA4BtD,CAAC;AAEF,eAAO,MAAM,QAAQ,oBAMpB,CAAC;AAEF,eAAO,MAAM,mBAAmB,oCAM/B,CAAC"}
@@ -27,5 +27,9 @@ export interface ThemeAssets {
27
27
  letterSpacing: LetterSpacing;
28
28
  fontSize: FontSize;
29
29
  }
30
+ export type StorageClient<T> = {
31
+ set: (value: T) => void;
32
+ get: () => T | null;
33
+ };
30
34
  export {};
31
35
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/themes/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3C,KAAK,KAAK,GAAG,OAAO,MAAM,KAAK,MAAM,MAAM,MAAM,IAAI,CAAC;AAEtD,MAAM,WAAW,MAAM;IACrB,UAAU,EAAE,KAAK,CAAC;IAClB,UAAU,EAAE,KAAK,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;IACf,iBAAiB,EAAE,KAAK,CAAC;IACzB,SAAS,EAAE,KAAK,CAAC;IACjB,mBAAmB,EAAE,KAAK,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,eAAe,EAAE,KAAK,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,KAAK,CAAC;CACb;AAED,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAC5B,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAChC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AACnC,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,QAAQ,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/themes/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3C,KAAK,KAAK,GAAG,OAAO,MAAM,KAAK,MAAM,MAAM,MAAM,IAAI,CAAC;AAEtD,MAAM,WAAW,MAAM;IACrB,UAAU,EAAE,KAAK,CAAC;IAClB,UAAU,EAAE,KAAK,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;IACf,iBAAiB,EAAE,KAAK,CAAC;IACzB,SAAS,EAAE,KAAK,CAAC;IACjB,mBAAmB,EAAE,KAAK,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,eAAe,EAAE,KAAK,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,KAAK,CAAC;CACb;AAED,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAC5B,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAChC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AACnC,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAC7B,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACrB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@korsolutions/ui",
3
- "version": "0.0.77",
3
+ "version": "0.0.79",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,44 @@
1
+ import { useEffect, useState } from "react";
2
+ import { useColorScheme as useSystemColorScheme } from "react-native";
3
+ import type { ColorScheme, StorageClient } from "../themes/types";
4
+
5
+ const getColorScheme = (
6
+ storageGetCallback?: () => ColorScheme | null,
7
+ systemColorScheme?: ReturnType<typeof useSystemColorScheme>,
8
+ ): ColorScheme => {
9
+ if (storageGetCallback) {
10
+ const storedScheme = storageGetCallback();
11
+ if (storedScheme) return storedScheme;
12
+ }
13
+ if (systemColorScheme) {
14
+ return systemColorScheme === "dark" ? "dark" : "light";
15
+ }
16
+ return "light";
17
+ };
18
+
19
+ interface UseColorSchemeProps {
20
+ colorSchemeStorage?: StorageClient<ColorScheme>;
21
+ }
22
+
23
+ export function useColorScheme({ colorSchemeStorage }: UseColorSchemeProps) {
24
+ const systemColorScheme = useSystemColorScheme();
25
+ const [_colorScheme, _setColorScheme] = useState<ColorScheme>(
26
+ getColorScheme(colorSchemeStorage?.get, systemColorScheme),
27
+ );
28
+
29
+ const setColorScheme = (scheme: ColorScheme) => {
30
+ _setColorScheme(scheme);
31
+ colorSchemeStorage?.set(scheme);
32
+ };
33
+
34
+ useEffect(() => {
35
+ const newScheme = getColorScheme(
36
+ colorSchemeStorage?.get,
37
+ systemColorScheme,
38
+ );
39
+ if (newScheme === _colorScheme) return;
40
+ setColorScheme(newScheme);
41
+ }, [systemColorScheme]);
42
+
43
+ return { colorScheme: _colorScheme, setColorScheme };
44
+ }
@@ -1,12 +1,6 @@
1
- import {
2
- createContext,
3
- type PropsWithChildren,
4
- useContext,
5
- useEffect,
6
- useState,
7
- } from "react";
8
- import { useColorScheme } from "react-native";
1
+ import { createContext, type PropsWithChildren, useContext } from "react";
9
2
  import type { ToastVariants } from "../components/toast/variants";
3
+ import { useColorScheme } from "../hooks/use-color-scheme";
10
4
  import type { SvgProps } from "../types/props.types";
11
5
  import type { DeepPartial } from "../types/util.types";
12
6
  import { defaultThemeAssets } from "./default";
@@ -17,6 +11,7 @@ import type {
17
11
  FontSize,
18
12
  LetterSpacing,
19
13
  Radius,
14
+ StorageClient,
20
15
  ThemeAssets,
21
16
  } from "./types";
22
17
  import { mergeThemeAssets } from "./utils";
@@ -33,6 +28,9 @@ interface ThemeContext {
33
28
  }
34
29
 
35
30
  export interface ComponentsConfig {
31
+ colorScheme?: {
32
+ storage?: StorageClient<ColorScheme>;
33
+ };
36
34
  toast?: {
37
35
  icons?: Partial<
38
36
  Record<keyof typeof ToastVariants, React.ComponentType<SvgProps>>
@@ -56,11 +54,9 @@ export interface ThemeProviderProps extends PropsWithChildren {
56
54
 
57
55
  export const ThemeProvider = (props: ThemeProviderProps) => {
58
56
  const { children, theme, components } = props;
59
-
60
- const systemColorScheme = useColorScheme();
61
- const [colorScheme, setColorScheme] = useState<ColorScheme>(
62
- systemColorScheme === "dark" ? "dark" : "light",
63
- );
57
+ const { colorScheme, setColorScheme } = useColorScheme({
58
+ colorSchemeStorage: components?.colorScheme?.storage,
59
+ });
64
60
 
65
61
  const themeAssets = theme
66
62
  ? mergeThemeAssets(defaultThemeAssets, theme)
@@ -68,12 +64,6 @@ export const ThemeProvider = (props: ThemeProviderProps) => {
68
64
 
69
65
  const colors = themeAssets.colors[colorScheme];
70
66
 
71
- useEffect(() => {
72
- if (systemColorScheme) {
73
- setColorScheme(systemColorScheme === "dark" ? "dark" : "light");
74
- }
75
- }, [systemColorScheme]);
76
-
77
67
  return (
78
68
  <ThemeContext.Provider
79
69
  value={{
@@ -31,3 +31,8 @@ export interface ThemeAssets {
31
31
  letterSpacing: LetterSpacing;
32
32
  fontSize: FontSize;
33
33
  }
34
+
35
+ export type StorageClient<T> = {
36
+ set: (value: T) => void;
37
+ get: () => T | null;
38
+ };