@cerberus-design/react 0.9.2-next-32b3154 → 0.9.2-next-e9d1b6e
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/build/legacy/_tsup-dts-rollup.d.cts +20 -5
- package/build/legacy/context/theme.cjs +35 -25
- package/build/legacy/context/theme.cjs.map +1 -1
- package/build/legacy/hooks/useTheme.cjs +39 -34
- package/build/legacy/hooks/useTheme.cjs.map +1 -1
- package/build/legacy/index.cjs +35 -21
- package/build/legacy/index.cjs.map +1 -1
- package/build/modern/_tsup-dts-rollup.d.ts +20 -5
- package/build/modern/chunk-EIQKX73Y.js +31 -0
- package/build/modern/chunk-EIQKX73Y.js.map +1 -0
- package/build/modern/chunk-ETAK2CSW.js +71 -0
- package/build/modern/chunk-ETAK2CSW.js.map +1 -0
- package/build/modern/context/theme.js +2 -5
- package/build/modern/hooks/useTheme.js +5 -1
- package/build/modern/index.js +6 -4
- package/build/modern/index.js.map +1 -1
- package/package.json +2 -2
- package/src/context/theme.tsx +18 -9
- package/src/hooks/useTheme.ts +37 -19
- package/build/modern/chunk-SXXWC6UD.js +0 -83
- package/build/modern/chunk-SXXWC6UD.js.map +0 -1
|
@@ -282,7 +282,7 @@ export { CollisionDescriptor }
|
|
|
282
282
|
|
|
283
283
|
export { CollisionDetection }
|
|
284
284
|
|
|
285
|
-
declare type ColorModes = 'light' | 'dark';
|
|
285
|
+
declare type ColorModes = 'light' | 'dark' | 'system';
|
|
286
286
|
export { ColorModes }
|
|
287
287
|
export { ColorModes as ColorModes_alias_1 }
|
|
288
288
|
|
|
@@ -349,7 +349,7 @@ export declare const defaultIcons: DefinedIcons;
|
|
|
349
349
|
|
|
350
350
|
export { defaultScreenReaderInstructions }
|
|
351
351
|
|
|
352
|
-
declare type DefaultThemes = 'cerberus';
|
|
352
|
+
declare type DefaultThemes = 'cerberus' | 'acheron';
|
|
353
353
|
export { DefaultThemes }
|
|
354
354
|
export { DefaultThemes as DefaultThemes_alias_1 }
|
|
355
355
|
|
|
@@ -1603,7 +1603,7 @@ declare interface ThemeContextValue<T extends string = DefaultThemes> {
|
|
|
1603
1603
|
theme: CustomThemes<T>;
|
|
1604
1604
|
mode: ColorModes;
|
|
1605
1605
|
updateTheme: (theme: T) => void;
|
|
1606
|
-
updateMode: () => void;
|
|
1606
|
+
updateMode: (mode: ColorModes) => void;
|
|
1607
1607
|
}
|
|
1608
1608
|
export { ThemeContextValue }
|
|
1609
1609
|
export { ThemeContextValue as ThemeContextValue_alias_1 }
|
|
@@ -1617,10 +1617,17 @@ export { ThemeContextValue as ThemeContextValue_alias_1 }
|
|
|
1617
1617
|
* </ThemeProvider>
|
|
1618
1618
|
* ```
|
|
1619
1619
|
*/
|
|
1620
|
-
declare function ThemeProvider(props: PropsWithChildren<
|
|
1620
|
+
declare function ThemeProvider(props: PropsWithChildren<ThemeProviderProps>): JSX.Element;
|
|
1621
1621
|
export { ThemeProvider }
|
|
1622
1622
|
export { ThemeProvider as ThemeProvider_alias_1 }
|
|
1623
1623
|
|
|
1624
|
+
declare interface ThemeProviderProps extends UseThemeOptions {
|
|
1625
|
+
defaultTheme?: DefaultThemes;
|
|
1626
|
+
defaultColorMode?: ColorModes;
|
|
1627
|
+
}
|
|
1628
|
+
export { ThemeProviderProps }
|
|
1629
|
+
export { ThemeProviderProps as ThemeProviderProps_alias_1 }
|
|
1630
|
+
|
|
1624
1631
|
declare type ThProps = ThBaseProps & ThVariantProps;
|
|
1625
1632
|
export { ThProps }
|
|
1626
1633
|
export { ThProps as ThProps_alias_1 }
|
|
@@ -1759,7 +1766,7 @@ declare function useTabsKeyboardNavigation(): {
|
|
|
1759
1766
|
export { useTabsKeyboardNavigation }
|
|
1760
1767
|
export { useTabsKeyboardNavigation as useTabsKeyboardNavigation_alias_1 }
|
|
1761
1768
|
|
|
1762
|
-
declare function useTheme<C extends string = DefaultThemes>(defaultTheme?: CustomThemes<C>, defaultColorMode?: ColorModes): ThemeContextValue<C>;
|
|
1769
|
+
declare function useTheme<C extends string = DefaultThemes>(defaultTheme?: CustomThemes<C>, defaultColorMode?: ColorModes, options?: UseThemeOptions<C>): ThemeContextValue<C>;
|
|
1763
1770
|
export { useTheme }
|
|
1764
1771
|
export { useTheme as useTheme_alias_1 }
|
|
1765
1772
|
|
|
@@ -1767,6 +1774,14 @@ declare function useThemeContext(): ThemeContextValue<DefaultThemes>;
|
|
|
1767
1774
|
export { useThemeContext }
|
|
1768
1775
|
export { useThemeContext as useThemeContext_alias_1 }
|
|
1769
1776
|
|
|
1777
|
+
declare interface UseThemeOptions<T extends string = DefaultThemes> {
|
|
1778
|
+
cache?: boolean;
|
|
1779
|
+
updateTheme?: (theme: T) => void;
|
|
1780
|
+
updateMode?: (mode: ColorModes) => void;
|
|
1781
|
+
}
|
|
1782
|
+
export { UseThemeOptions }
|
|
1783
|
+
export { UseThemeOptions as UseThemeOptions_alias_1 }
|
|
1784
|
+
|
|
1770
1785
|
declare function useToggle(options?: UseToggleOptions): ToggleHookReturn;
|
|
1771
1786
|
export { useToggle }
|
|
1772
1787
|
export { useToggle as useToggle_alias_1 }
|
|
@@ -21,8 +21,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
// src/context/theme.tsx
|
|
22
22
|
var theme_exports = {};
|
|
23
23
|
__export(theme_exports, {
|
|
24
|
-
MODE_KEY: () => MODE_KEY,
|
|
25
|
-
THEME_KEY: () => THEME_KEY,
|
|
26
24
|
ThemeProvider: () => ThemeProvider,
|
|
27
25
|
useThemeContext: () => useThemeContext
|
|
28
26
|
});
|
|
@@ -31,20 +29,26 @@ var import_react2 = require("react");
|
|
|
31
29
|
|
|
32
30
|
// src/hooks/useTheme.ts
|
|
33
31
|
var import_react = require("react");
|
|
34
|
-
|
|
32
|
+
var THEME_KEY = "cerberus-theme";
|
|
33
|
+
var MODE_KEY = "cerberus-mode";
|
|
34
|
+
function useTheme(defaultTheme = "cerberus", defaultColorMode = "light", options = {}) {
|
|
35
|
+
const { updateMode, updateTheme, cache } = options;
|
|
35
36
|
const [theme, setTheme] = (0, import_react.useState)(defaultTheme);
|
|
36
37
|
const [colorMode, setColorMode] = (0, import_react.useState)(defaultColorMode);
|
|
37
|
-
const handleThemeChange = (0, import_react.useCallback)(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
38
|
+
const handleThemeChange = (0, import_react.useCallback)(
|
|
39
|
+
(newTheme) => {
|
|
40
|
+
setTheme(newTheme);
|
|
41
|
+
updateTheme == null ? void 0 : updateTheme(newTheme);
|
|
42
|
+
},
|
|
43
|
+
[updateTheme]
|
|
44
|
+
);
|
|
45
|
+
const handleColorModeChange = (0, import_react.useCallback)(
|
|
46
|
+
(newMode) => {
|
|
47
|
+
setColorMode(newMode);
|
|
48
|
+
updateMode == null ? void 0 : updateMode(newMode);
|
|
49
|
+
},
|
|
50
|
+
[updateMode]
|
|
51
|
+
);
|
|
48
52
|
(0, import_react.useLayoutEffect)(() => {
|
|
49
53
|
const theme2 = localStorage.getItem(THEME_KEY);
|
|
50
54
|
if (theme2) {
|
|
@@ -58,13 +62,19 @@ function useTheme(defaultTheme = "cerberus", defaultColorMode = "light") {
|
|
|
58
62
|
}
|
|
59
63
|
}, []);
|
|
60
64
|
(0, import_react.useEffect)(() => {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
65
|
+
if (cache) {
|
|
66
|
+
const root = document.documentElement;
|
|
67
|
+
root.dataset.pandaTheme = theme;
|
|
68
|
+
localStorage.setItem(THEME_KEY, theme);
|
|
69
|
+
}
|
|
70
|
+
}, [theme, cache]);
|
|
64
71
|
(0, import_react.useEffect)(() => {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
72
|
+
if (cache) {
|
|
73
|
+
const root = document.documentElement;
|
|
74
|
+
root.dataset.colorMode = colorMode;
|
|
75
|
+
localStorage.setItem(MODE_KEY, colorMode);
|
|
76
|
+
}
|
|
77
|
+
}, [colorMode, cache]);
|
|
68
78
|
return (0, import_react.useMemo)(
|
|
69
79
|
() => ({
|
|
70
80
|
theme,
|
|
@@ -78,13 +88,15 @@ function useTheme(defaultTheme = "cerberus", defaultColorMode = "light") {
|
|
|
78
88
|
|
|
79
89
|
// src/context/theme.tsx
|
|
80
90
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
81
|
-
var THEME_KEY = "cerberus-theme";
|
|
82
|
-
var MODE_KEY = "cerberus-mode";
|
|
83
91
|
var ThemeContext = (0, import_react2.createContext)(
|
|
84
92
|
null
|
|
85
93
|
);
|
|
86
94
|
function ThemeProvider(props) {
|
|
87
|
-
const state = useTheme(
|
|
95
|
+
const state = useTheme(props.defaultTheme, props.defaultColorMode, {
|
|
96
|
+
cache: props.cache,
|
|
97
|
+
updateMode: props.updateMode,
|
|
98
|
+
updateTheme: props.updateTheme
|
|
99
|
+
});
|
|
88
100
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThemeContext.Provider, { value: state, children: props.children });
|
|
89
101
|
}
|
|
90
102
|
function useThemeContext() {
|
|
@@ -96,8 +108,6 @@ function useThemeContext() {
|
|
|
96
108
|
}
|
|
97
109
|
// Annotate the CommonJS export names for ESM import in node:
|
|
98
110
|
0 && (module.exports = {
|
|
99
|
-
MODE_KEY,
|
|
100
|
-
THEME_KEY,
|
|
101
111
|
ThemeProvider,
|
|
102
112
|
useThemeContext
|
|
103
113
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/context/theme.tsx","../../../src/hooks/useTheme.ts"],"sourcesContent":["'use client'\n\nimport { createContext, useContext, type PropsWithChildren } from 'react'\nimport { useTheme } from '../hooks/useTheme'\n\nexport type DefaultThemes = 'cerberus'\nexport type CustomThemes<K extends string = DefaultThemes> = 'cerberus' | K\nexport type ColorModes = 'light' | 'dark'\n\nexport interface ThemeContextValue<T extends string = DefaultThemes> {\n theme: CustomThemes<T>\n mode: ColorModes\n updateTheme: (theme: T) => void\n updateMode: () => void\n}\n\
|
|
1
|
+
{"version":3,"sources":["../../../src/context/theme.tsx","../../../src/hooks/useTheme.ts"],"sourcesContent":["'use client'\n\nimport { createContext, useContext, type PropsWithChildren } from 'react'\nimport { useTheme, type UseThemeOptions } from '../hooks/useTheme'\n\nexport type DefaultThemes = 'cerberus' | 'acheron'\nexport type CustomThemes<K extends string = DefaultThemes> = 'cerberus' | K\nexport type ColorModes = 'light' | 'dark' | 'system'\n\nexport interface ThemeContextValue<T extends string = DefaultThemes> {\n theme: CustomThemes<T>\n mode: ColorModes\n updateTheme: (theme: T) => void\n updateMode: (mode: ColorModes) => void\n}\n\nconst ThemeContext = createContext<ThemeContextValue<DefaultThemes> | null>(\n null,\n)\n\nexport interface ThemeProviderProps extends UseThemeOptions {\n defaultTheme?: DefaultThemes\n defaultColorMode?: ColorModes\n}\n\n/**\n * A context provider that allows the user to set the theme and mode of the application.\n * @example\n * ```tsx\n * <ThemeProvider>\n * <App />\n * </ThemeProvider>\n * ```\n */\nexport function ThemeProvider(\n props: PropsWithChildren<ThemeProviderProps>,\n): JSX.Element {\n const state = useTheme(props.defaultTheme, props.defaultColorMode, {\n cache: props.cache,\n updateMode: props.updateMode,\n updateTheme: props.updateTheme,\n }) as ThemeContextValue<DefaultThemes>\n\n return (\n <ThemeContext.Provider value={state}>\n {props.children}\n </ThemeContext.Provider>\n )\n}\n\nexport function useThemeContext(): ThemeContextValue<DefaultThemes> {\n const context = useContext(ThemeContext)\n if (!context) {\n throw new Error('useThemeContext must be used within a ThemeProvider')\n }\n return context\n}\n","'use client'\n\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react'\nimport {\n type ColorModes,\n type CustomThemes,\n type DefaultThemes,\n type ThemeContextValue,\n} from '../context/theme'\n\nexport const THEME_KEY = 'cerberus-theme'\nexport const MODE_KEY = 'cerberus-mode'\n\nexport interface UseThemeOptions<T extends string = DefaultThemes> {\n cache?: boolean\n updateTheme?: (theme: T) => void\n updateMode?: (mode: ColorModes) => void\n}\n\nexport function useTheme<C extends string = DefaultThemes>(\n defaultTheme: CustomThemes<C> = 'cerberus',\n defaultColorMode: ColorModes = 'light',\n options: UseThemeOptions<C> = {},\n): ThemeContextValue<C> {\n const { updateMode, updateTheme, cache } = options\n const [theme, setTheme] = useState<CustomThemes<C>>(defaultTheme)\n const [colorMode, setColorMode] = useState<ColorModes>(defaultColorMode)\n\n const handleThemeChange = useCallback(\n (newTheme: C) => {\n setTheme(newTheme)\n updateTheme?.(newTheme)\n },\n [updateTheme],\n )\n\n const handleColorModeChange = useCallback(\n (newMode: ColorModes) => {\n setColorMode(newMode)\n updateMode?.(newMode)\n },\n [updateMode],\n )\n\n useLayoutEffect(() => {\n const theme = localStorage.getItem(THEME_KEY)\n if (theme) {\n setTheme(theme as CustomThemes<C>)\n }\n }, [])\n\n useLayoutEffect(() => {\n const mode = localStorage.getItem(MODE_KEY)\n if (mode) {\n setColorMode(mode as ColorModes)\n }\n }, [])\n\n useEffect(() => {\n if (cache) {\n const root = document.documentElement\n root.dataset.pandaTheme = theme\n localStorage.setItem(THEME_KEY, theme)\n }\n }, [theme, cache])\n\n useEffect(() => {\n if (cache) {\n const root = document.documentElement\n root.dataset.colorMode = colorMode\n localStorage.setItem(MODE_KEY, colorMode)\n }\n }, [colorMode, cache])\n\n return useMemo(\n () => ({\n theme,\n mode: colorMode,\n updateTheme: handleThemeChange,\n updateMode: handleColorModeChange,\n }),\n [theme, colorMode, handleThemeChange, handleColorModeChange],\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,IAAAA,gBAAkE;;;ACAlE,mBAMO;AAQA,IAAM,YAAY;AAClB,IAAM,WAAW;AAQjB,SAAS,SACd,eAAgC,YAChC,mBAA+B,SAC/B,UAA8B,CAAC,GACT;AACtB,QAAM,EAAE,YAAY,aAAa,MAAM,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAA0B,YAAY;AAChE,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAqB,gBAAgB;AAEvE,QAAM,wBAAoB;AAAA,IACxB,CAAC,aAAgB;AACf,eAAS,QAAQ;AACjB,iDAAc;AAAA,IAChB;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,4BAAwB;AAAA,IAC5B,CAAC,YAAwB;AACvB,mBAAa,OAAO;AACpB,+CAAa;AAAA,IACf;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAEA,oCAAgB,MAAM;AACpB,UAAMC,SAAQ,aAAa,QAAQ,SAAS;AAC5C,QAAIA,QAAO;AACT,eAASA,MAAwB;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,oCAAgB,MAAM;AACpB,UAAM,OAAO,aAAa,QAAQ,QAAQ;AAC1C,QAAI,MAAM;AACR,mBAAa,IAAkB;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,8BAAU,MAAM;AACd,QAAI,OAAO;AACT,YAAM,OAAO,SAAS;AACtB,WAAK,QAAQ,aAAa;AAC1B,mBAAa,QAAQ,WAAW,KAAK;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,OAAO,KAAK,CAAC;AAEjB,8BAAU,MAAM;AACd,QAAI,OAAO;AACT,YAAM,OAAO,SAAS;AACtB,WAAK,QAAQ,YAAY;AACzB,mBAAa,QAAQ,UAAU,SAAS;AAAA,IAC1C;AAAA,EACF,GAAG,CAAC,WAAW,KAAK,CAAC;AAErB,aAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,IACA,CAAC,OAAO,WAAW,mBAAmB,qBAAqB;AAAA,EAC7D;AACF;;;AD7CI;AA5BJ,IAAM,mBAAe;AAAA,EACnB;AACF;AAgBO,SAAS,cACd,OACa;AACb,QAAM,QAAQ,SAAS,MAAM,cAAc,MAAM,kBAAkB;AAAA,IACjE,OAAO,MAAM;AAAA,IACb,YAAY,MAAM;AAAA,IAClB,aAAa,MAAM;AAAA,EACrB,CAAC;AAED,SACE,4CAAC,aAAa,UAAb,EAAsB,OAAO,OAC3B,gBAAM,UACT;AAEJ;AAEO,SAAS,kBAAoD;AAClE,QAAM,cAAU,0BAAW,YAAY;AACvC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACA,SAAO;AACT;","names":["import_react","theme"]}
|
|
@@ -21,56 +21,59 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
// src/hooks/useTheme.ts
|
|
22
22
|
var useTheme_exports = {};
|
|
23
23
|
__export(useTheme_exports, {
|
|
24
|
+
MODE_KEY: () => MODE_KEY,
|
|
25
|
+
THEME_KEY: () => THEME_KEY,
|
|
24
26
|
useTheme: () => useTheme
|
|
25
27
|
});
|
|
26
28
|
module.exports = __toCommonJS(useTheme_exports);
|
|
27
|
-
var import_react2 = require("react");
|
|
28
|
-
|
|
29
|
-
// src/context/theme.tsx
|
|
30
29
|
var import_react = require("react");
|
|
31
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
32
30
|
var THEME_KEY = "cerberus-theme";
|
|
33
31
|
var MODE_KEY = "cerberus-mode";
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
(0, import_react2.useLayoutEffect)(() => {
|
|
32
|
+
function useTheme(defaultTheme = "cerberus", defaultColorMode = "light", options = {}) {
|
|
33
|
+
const { updateMode, updateTheme, cache } = options;
|
|
34
|
+
const [theme, setTheme] = (0, import_react.useState)(defaultTheme);
|
|
35
|
+
const [colorMode, setColorMode] = (0, import_react.useState)(defaultColorMode);
|
|
36
|
+
const handleThemeChange = (0, import_react.useCallback)(
|
|
37
|
+
(newTheme) => {
|
|
38
|
+
setTheme(newTheme);
|
|
39
|
+
updateTheme == null ? void 0 : updateTheme(newTheme);
|
|
40
|
+
},
|
|
41
|
+
[updateTheme]
|
|
42
|
+
);
|
|
43
|
+
const handleColorModeChange = (0, import_react.useCallback)(
|
|
44
|
+
(newMode) => {
|
|
45
|
+
setColorMode(newMode);
|
|
46
|
+
updateMode == null ? void 0 : updateMode(newMode);
|
|
47
|
+
},
|
|
48
|
+
[updateMode]
|
|
49
|
+
);
|
|
50
|
+
(0, import_react.useLayoutEffect)(() => {
|
|
54
51
|
const theme2 = localStorage.getItem(THEME_KEY);
|
|
55
52
|
if (theme2) {
|
|
56
53
|
setTheme(theme2);
|
|
57
54
|
}
|
|
58
55
|
}, []);
|
|
59
|
-
(0,
|
|
56
|
+
(0, import_react.useLayoutEffect)(() => {
|
|
60
57
|
const mode = localStorage.getItem(MODE_KEY);
|
|
61
58
|
if (mode) {
|
|
62
59
|
setColorMode(mode);
|
|
63
60
|
}
|
|
64
61
|
}, []);
|
|
65
|
-
(0,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
62
|
+
(0, import_react.useEffect)(() => {
|
|
63
|
+
if (cache) {
|
|
64
|
+
const root = document.documentElement;
|
|
65
|
+
root.dataset.pandaTheme = theme;
|
|
66
|
+
localStorage.setItem(THEME_KEY, theme);
|
|
67
|
+
}
|
|
68
|
+
}, [theme, cache]);
|
|
69
|
+
(0, import_react.useEffect)(() => {
|
|
70
|
+
if (cache) {
|
|
71
|
+
const root = document.documentElement;
|
|
72
|
+
root.dataset.colorMode = colorMode;
|
|
73
|
+
localStorage.setItem(MODE_KEY, colorMode);
|
|
74
|
+
}
|
|
75
|
+
}, [colorMode, cache]);
|
|
76
|
+
return (0, import_react.useMemo)(
|
|
74
77
|
() => ({
|
|
75
78
|
theme,
|
|
76
79
|
mode: colorMode,
|
|
@@ -82,6 +85,8 @@ function useTheme(defaultTheme = "cerberus", defaultColorMode = "light") {
|
|
|
82
85
|
}
|
|
83
86
|
// Annotate the CommonJS export names for ESM import in node:
|
|
84
87
|
0 && (module.exports = {
|
|
88
|
+
MODE_KEY,
|
|
89
|
+
THEME_KEY,
|
|
85
90
|
useTheme
|
|
86
91
|
});
|
|
87
92
|
//# sourceMappingURL=useTheme.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/useTheme.ts"
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/useTheme.ts"],"sourcesContent":["'use client'\n\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react'\nimport {\n type ColorModes,\n type CustomThemes,\n type DefaultThemes,\n type ThemeContextValue,\n} from '../context/theme'\n\nexport const THEME_KEY = 'cerberus-theme'\nexport const MODE_KEY = 'cerberus-mode'\n\nexport interface UseThemeOptions<T extends string = DefaultThemes> {\n cache?: boolean\n updateTheme?: (theme: T) => void\n updateMode?: (mode: ColorModes) => void\n}\n\nexport function useTheme<C extends string = DefaultThemes>(\n defaultTheme: CustomThemes<C> = 'cerberus',\n defaultColorMode: ColorModes = 'light',\n options: UseThemeOptions<C> = {},\n): ThemeContextValue<C> {\n const { updateMode, updateTheme, cache } = options\n const [theme, setTheme] = useState<CustomThemes<C>>(defaultTheme)\n const [colorMode, setColorMode] = useState<ColorModes>(defaultColorMode)\n\n const handleThemeChange = useCallback(\n (newTheme: C) => {\n setTheme(newTheme)\n updateTheme?.(newTheme)\n },\n [updateTheme],\n )\n\n const handleColorModeChange = useCallback(\n (newMode: ColorModes) => {\n setColorMode(newMode)\n updateMode?.(newMode)\n },\n [updateMode],\n )\n\n useLayoutEffect(() => {\n const theme = localStorage.getItem(THEME_KEY)\n if (theme) {\n setTheme(theme as CustomThemes<C>)\n }\n }, [])\n\n useLayoutEffect(() => {\n const mode = localStorage.getItem(MODE_KEY)\n if (mode) {\n setColorMode(mode as ColorModes)\n }\n }, [])\n\n useEffect(() => {\n if (cache) {\n const root = document.documentElement\n root.dataset.pandaTheme = theme\n localStorage.setItem(THEME_KEY, theme)\n }\n }, [theme, cache])\n\n useEffect(() => {\n if (cache) {\n const root = document.documentElement\n root.dataset.colorMode = colorMode\n localStorage.setItem(MODE_KEY, colorMode)\n }\n }, [colorMode, cache])\n\n return useMemo(\n () => ({\n theme,\n mode: colorMode,\n updateTheme: handleThemeChange,\n updateMode: handleColorModeChange,\n }),\n [theme, colorMode, handleThemeChange, handleColorModeChange],\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAMO;AAQA,IAAM,YAAY;AAClB,IAAM,WAAW;AAQjB,SAAS,SACd,eAAgC,YAChC,mBAA+B,SAC/B,UAA8B,CAAC,GACT;AACtB,QAAM,EAAE,YAAY,aAAa,MAAM,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAA0B,YAAY;AAChE,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAqB,gBAAgB;AAEvE,QAAM,wBAAoB;AAAA,IACxB,CAAC,aAAgB;AACf,eAAS,QAAQ;AACjB,iDAAc;AAAA,IAChB;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,4BAAwB;AAAA,IAC5B,CAAC,YAAwB;AACvB,mBAAa,OAAO;AACpB,+CAAa;AAAA,IACf;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAEA,oCAAgB,MAAM;AACpB,UAAMA,SAAQ,aAAa,QAAQ,SAAS;AAC5C,QAAIA,QAAO;AACT,eAASA,MAAwB;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,oCAAgB,MAAM;AACpB,UAAM,OAAO,aAAa,QAAQ,QAAQ;AAC1C,QAAI,MAAM;AACR,mBAAa,IAAkB;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,8BAAU,MAAM;AACd,QAAI,OAAO;AACT,YAAM,OAAO,SAAS;AACtB,WAAK,QAAQ,aAAa;AAC1B,mBAAa,QAAQ,WAAW,KAAK;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,OAAO,KAAK,CAAC;AAEjB,8BAAU,MAAM;AACd,QAAI,OAAO;AACT,YAAM,OAAO,SAAS;AACtB,WAAK,QAAQ,YAAY;AACzB,mBAAa,QAAQ,UAAU,SAAS;AAAA,IAC1C;AAAA,EACF,GAAG,CAAC,WAAW,KAAK,CAAC;AAErB,aAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,IACA,CAAC,OAAO,WAAW,mBAAmB,qBAAqB;AAAA,EAC7D;AACF;","names":["theme"]}
|
package/build/legacy/index.cjs
CHANGED
|
@@ -2133,20 +2133,26 @@ var import_react20 = require("react");
|
|
|
2133
2133
|
|
|
2134
2134
|
// src/hooks/useTheme.ts
|
|
2135
2135
|
var import_react19 = require("react");
|
|
2136
|
-
|
|
2136
|
+
var THEME_KEY = "cerberus-theme";
|
|
2137
|
+
var MODE_KEY = "cerberus-mode";
|
|
2138
|
+
function useTheme(defaultTheme = "cerberus", defaultColorMode = "light", options = {}) {
|
|
2139
|
+
const { updateMode, updateTheme, cache } = options;
|
|
2137
2140
|
const [theme, setTheme] = (0, import_react19.useState)(defaultTheme);
|
|
2138
2141
|
const [colorMode, setColorMode] = (0, import_react19.useState)(defaultColorMode);
|
|
2139
|
-
const handleThemeChange = (0, import_react19.useCallback)(
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2142
|
+
const handleThemeChange = (0, import_react19.useCallback)(
|
|
2143
|
+
(newTheme) => {
|
|
2144
|
+
setTheme(newTheme);
|
|
2145
|
+
updateTheme == null ? void 0 : updateTheme(newTheme);
|
|
2146
|
+
},
|
|
2147
|
+
[updateTheme]
|
|
2148
|
+
);
|
|
2149
|
+
const handleColorModeChange = (0, import_react19.useCallback)(
|
|
2150
|
+
(newMode) => {
|
|
2151
|
+
setColorMode(newMode);
|
|
2152
|
+
updateMode == null ? void 0 : updateMode(newMode);
|
|
2153
|
+
},
|
|
2154
|
+
[updateMode]
|
|
2155
|
+
);
|
|
2150
2156
|
(0, import_react19.useLayoutEffect)(() => {
|
|
2151
2157
|
const theme2 = localStorage.getItem(THEME_KEY);
|
|
2152
2158
|
if (theme2) {
|
|
@@ -2160,13 +2166,19 @@ function useTheme(defaultTheme = "cerberus", defaultColorMode = "light") {
|
|
|
2160
2166
|
}
|
|
2161
2167
|
}, []);
|
|
2162
2168
|
(0, import_react19.useEffect)(() => {
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2169
|
+
if (cache) {
|
|
2170
|
+
const root = document.documentElement;
|
|
2171
|
+
root.dataset.pandaTheme = theme;
|
|
2172
|
+
localStorage.setItem(THEME_KEY, theme);
|
|
2173
|
+
}
|
|
2174
|
+
}, [theme, cache]);
|
|
2166
2175
|
(0, import_react19.useEffect)(() => {
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2176
|
+
if (cache) {
|
|
2177
|
+
const root = document.documentElement;
|
|
2178
|
+
root.dataset.colorMode = colorMode;
|
|
2179
|
+
localStorage.setItem(MODE_KEY, colorMode);
|
|
2180
|
+
}
|
|
2181
|
+
}, [colorMode, cache]);
|
|
2170
2182
|
return (0, import_react19.useMemo)(
|
|
2171
2183
|
() => ({
|
|
2172
2184
|
theme,
|
|
@@ -2180,13 +2192,15 @@ function useTheme(defaultTheme = "cerberus", defaultColorMode = "light") {
|
|
|
2180
2192
|
|
|
2181
2193
|
// src/context/theme.tsx
|
|
2182
2194
|
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
2183
|
-
var THEME_KEY = "cerberus-theme";
|
|
2184
|
-
var MODE_KEY = "cerberus-mode";
|
|
2185
2195
|
var ThemeContext = (0, import_react20.createContext)(
|
|
2186
2196
|
null
|
|
2187
2197
|
);
|
|
2188
2198
|
function ThemeProvider(props) {
|
|
2189
|
-
const state = useTheme(
|
|
2199
|
+
const state = useTheme(props.defaultTheme, props.defaultColorMode, {
|
|
2200
|
+
cache: props.cache,
|
|
2201
|
+
updateMode: props.updateMode,
|
|
2202
|
+
updateTheme: props.updateTheme
|
|
2203
|
+
});
|
|
2190
2204
|
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ThemeContext.Provider, { value: state, children: props.children });
|
|
2191
2205
|
}
|
|
2192
2206
|
function useThemeContext() {
|