@ankjs/react-ui 1.0.14 → 1.0.15
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/constants/colors.d.ts +4 -4
- package/dist/index.cjs +38 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +38 -19
- package/dist/index.esm.js.map +1 -1
- package/dist/types/mainViewType.d.ts +1 -0
- package/dist/types/themeTypes.d.ts +1 -0
- package/package.json +1 -1
- package/src/constants/colors.ts +5 -5
- package/src/hook/useSystemTheme.ts +8 -6
- package/src/hook/useThemeColors.ts +7 -1
- package/src/providers/AnkThemeProvider.tsx +24 -7
- package/src/providers/MainUiView.tsx +20 -2
- package/src/types/mainViewType.ts +2 -1
- package/src/types/themeTypes.ts +1 -0
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
export declare const light: {
|
|
2
2
|
primary: string;
|
|
3
3
|
primaryColor: string;
|
|
4
|
+
pageBg: string;
|
|
4
5
|
mainBgColor: string;
|
|
5
6
|
backgroundColor: string;
|
|
6
7
|
secondryBgColor: string;
|
|
7
|
-
pageBg: string;
|
|
8
8
|
color: string;
|
|
9
9
|
};
|
|
10
10
|
export declare const dark: {
|
|
11
11
|
primary: string;
|
|
12
12
|
primaryColor: string;
|
|
13
13
|
mainBgColor: string;
|
|
14
|
-
secondryBgColor: string;
|
|
15
14
|
pageBg: string;
|
|
16
15
|
backgroundColor: string;
|
|
16
|
+
secondryBgColor: string;
|
|
17
17
|
color: string;
|
|
18
18
|
};
|
|
19
19
|
declare const colors: {
|
|
20
20
|
light: {
|
|
21
21
|
primary: string;
|
|
22
22
|
primaryColor: string;
|
|
23
|
+
pageBg: string;
|
|
23
24
|
mainBgColor: string;
|
|
24
25
|
backgroundColor: string;
|
|
25
26
|
secondryBgColor: string;
|
|
26
|
-
pageBg: string;
|
|
27
27
|
color: string;
|
|
28
28
|
};
|
|
29
29
|
dark: {
|
|
30
30
|
primary: string;
|
|
31
31
|
primaryColor: string;
|
|
32
32
|
mainBgColor: string;
|
|
33
|
-
secondryBgColor: string;
|
|
34
33
|
pageBg: string;
|
|
35
34
|
backgroundColor: string;
|
|
35
|
+
secondryBgColor: string;
|
|
36
36
|
color: string;
|
|
37
37
|
};
|
|
38
38
|
};
|
package/dist/index.cjs
CHANGED
|
@@ -12,36 +12,38 @@ const AnkThemeContext = react.createContext(undefined);
|
|
|
12
12
|
const ColorContext = react.createContext(undefined);
|
|
13
13
|
|
|
14
14
|
const useSystemTheme = () => {
|
|
15
|
-
const
|
|
15
|
+
const theme = window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
16
16
|
? "dark"
|
|
17
|
-
: "light"
|
|
17
|
+
: "light";
|
|
18
|
+
const [sysTheme, setSysTheme] = react.useState(theme);
|
|
18
19
|
react.useEffect(() => {
|
|
19
20
|
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
|
20
21
|
const handleChange = () => {
|
|
21
22
|
setSysTheme(media.matches ? "dark" : "light");
|
|
22
23
|
};
|
|
24
|
+
handleChange();
|
|
23
25
|
media.addEventListener("change", handleChange);
|
|
24
26
|
return () => media.removeEventListener("change", handleChange);
|
|
25
|
-
}, []);
|
|
27
|
+
}, [theme, setSysTheme]);
|
|
26
28
|
return sysTheme;
|
|
27
29
|
};
|
|
28
30
|
|
|
29
31
|
const light = {
|
|
30
|
-
primary: '
|
|
32
|
+
primary: 'red',
|
|
31
33
|
primaryColor: 'red',
|
|
34
|
+
pageBg: '#8d8d8d',
|
|
32
35
|
mainBgColor: '#fff',
|
|
33
36
|
backgroundColor: '#f0f0f0',
|
|
34
37
|
secondryBgColor: '#808080',
|
|
35
|
-
pageBg: '#8d8d8d',
|
|
36
38
|
color: '#000',
|
|
37
39
|
};
|
|
38
40
|
const dark = {
|
|
39
|
-
primary: '
|
|
41
|
+
primary: 'red',
|
|
40
42
|
primaryColor: 'red',
|
|
41
|
-
mainBgColor: '#
|
|
42
|
-
secondryBgColor: '808080',
|
|
43
|
+
mainBgColor: '#000',
|
|
43
44
|
pageBg: '#333',
|
|
44
45
|
backgroundColor: '#444',
|
|
46
|
+
secondryBgColor: '808080',
|
|
45
47
|
color: '#eee',
|
|
46
48
|
};
|
|
47
49
|
|
|
@@ -63,7 +65,7 @@ const useThemeColors = () => {
|
|
|
63
65
|
const reLight = light$1 ?? light;
|
|
64
66
|
const reDark = dark$1 ?? dark;
|
|
65
67
|
const theme = context.theme || undefined;
|
|
66
|
-
const themeMode = context.
|
|
68
|
+
const themeMode = context.themeType || undefined;
|
|
67
69
|
if (theme === undefined || themeMode === undefined) {
|
|
68
70
|
throw new Error(` * useThemeColors must be used within a AnkThemeProvider * \n like this - \n import AnkThemeProvider from '@ankjs/react-ui;
|
|
69
71
|
|
|
@@ -91,14 +93,25 @@ const useThemeColors = () => {
|
|
|
91
93
|
};
|
|
92
94
|
|
|
93
95
|
const MainUiView = (props) => {
|
|
94
|
-
const { children, autoApply, style, overflow, } = props;
|
|
95
|
-
const
|
|
96
|
-
|
|
96
|
+
const { children, autoApply, style, overflow, backgroundColor, fontolor } = props;
|
|
97
|
+
const colors = useThemeColors();
|
|
98
|
+
const { mainBgColor, color } = useThemeColors();
|
|
99
|
+
const bg = autoApply ? mainBgColor : backgroundColor;
|
|
100
|
+
const text = autoApply ? color : fontolor;
|
|
101
|
+
const styleContener = {
|
|
102
|
+
backgroundColor: bg,
|
|
103
|
+
color: text,
|
|
104
|
+
height: "100dvh",
|
|
105
|
+
width: "100%",
|
|
106
|
+
overflow,
|
|
107
|
+
...style
|
|
108
|
+
};
|
|
109
|
+
return (jsxRuntime.jsxs("div", { style: styleContener, children: [JSON.stringify(colors), children] }));
|
|
97
110
|
};
|
|
98
111
|
|
|
99
112
|
const AnkThemeProvider = (props) => {
|
|
100
113
|
//PROPERTY
|
|
101
|
-
const { children, colorsObjectProvide = "", colorsObject = "", defaultThemeMode = "system", autoApply = true, style = {}, overflow = '
|
|
114
|
+
const { children, colorsObjectProvide = "", colorsObject = "", defaultThemeMode = "system", autoApply = true, style = {}, overflow = 'scroll', backgroundColor = "pink", color = "black" } = props;
|
|
102
115
|
// SYSTEM THEME MODE 🪝
|
|
103
116
|
// Assumed returns 'light' | 'dark'
|
|
104
117
|
const system = useSystemTheme();
|
|
@@ -108,24 +121,30 @@ const AnkThemeProvider = (props) => {
|
|
|
108
121
|
const [theme, setTheme] = react.useState(initialActiveTheme);
|
|
109
122
|
// State for the user's selected preference
|
|
110
123
|
const [themeType, setThemeType] = react.useState(defaultThemeMode);
|
|
124
|
+
react.useEffect(() => {
|
|
125
|
+
if (defaultThemeMode === 'system') {
|
|
126
|
+
setTheme(initialActiveTheme);
|
|
127
|
+
return setThemeType('system');
|
|
128
|
+
}
|
|
129
|
+
}, [defaultThemeMode, initialActiveTheme, setTheme, setThemeType]);
|
|
111
130
|
const setDarkTheme = react.useCallback(() => {
|
|
112
131
|
if (theme === 'dark')
|
|
113
132
|
return;
|
|
114
133
|
setThemeType('dark');
|
|
115
|
-
setTheme('dark');
|
|
134
|
+
return setTheme('dark');
|
|
116
135
|
}, [theme, setThemeType, setTheme]);
|
|
117
136
|
const setLightTheme = react.useCallback(() => {
|
|
118
137
|
if (theme === 'light')
|
|
119
138
|
return;
|
|
120
139
|
setThemeType('light');
|
|
121
|
-
setTheme('light');
|
|
140
|
+
return setTheme('light');
|
|
122
141
|
}, [theme, setThemeType, setTheme]);
|
|
123
142
|
const setSystemTheme = react.useCallback(() => {
|
|
124
143
|
if (themeType === 'system')
|
|
125
144
|
return;
|
|
126
145
|
setThemeType('system');
|
|
127
|
-
setTheme(system);
|
|
128
|
-
}, [
|
|
146
|
+
return setTheme(system);
|
|
147
|
+
}, [themeType, setTheme, system, setThemeType]);
|
|
129
148
|
// Memoize the context value to prevent unnecessary re-renders in consumers
|
|
130
149
|
const contextValue = react.useMemo(() => ({
|
|
131
150
|
theme,
|
|
@@ -134,13 +153,13 @@ const AnkThemeProvider = (props) => {
|
|
|
134
153
|
setDarkTheme,
|
|
135
154
|
setLightTheme,
|
|
136
155
|
setSystemTheme,
|
|
137
|
-
}), [theme, setTheme, setDarkTheme, setLightTheme, setSystemTheme]);
|
|
156
|
+
}), [theme, themeType, setTheme, setDarkTheme, setLightTheme, setSystemTheme]);
|
|
138
157
|
// WONER COLOUR OBJECT
|
|
139
158
|
const colorObj = react.useMemo(() => ({
|
|
140
159
|
...colorsObject,
|
|
141
160
|
...colorsObjectProvide,
|
|
142
161
|
}), [colorsObject, colorsObjectProvide]);
|
|
143
|
-
return (jsxRuntime.jsx(AnkThemeContext.Provider, { value: contextValue, children: jsxRuntime.jsx(ColorContext.Provider, { value: colorObj, children: jsxRuntime.jsx(MainUiView, { autoApply: autoApply, style: style, overflow: overflow, children: children }) }) }));
|
|
162
|
+
return (jsxRuntime.jsx(AnkThemeContext.Provider, { value: contextValue, children: jsxRuntime.jsx(ColorContext.Provider, { value: colorObj, children: jsxRuntime.jsx(MainUiView, { autoApply: autoApply, style: style, overflow: overflow, backgroundColor: backgroundColor, fontolor: color, children: children }) }) }));
|
|
144
163
|
};
|
|
145
164
|
|
|
146
165
|
exports.default = AnkThemeProvider;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/contexts/AnkThemeContext.ts","../src/hook/useSystemTheme.ts","../src/constants/colors.ts","../src/hook/useThemeColors.ts","../src/providers/MainUiView.tsx","../src/providers/AnkThemeProvider.tsx"],"sourcesContent":[null,null,null,null,null,null],"names":["createContext","useState","useEffect","defaultLight","defaultDark","useContext","light","dark","_jsxs","useCallback","useMemo","_jsx"],"mappings":";;;;;;;AAAA;;AAEG;AASI,MAAM,eAAe,GAAGA,mBAAa,CAA+B,SAAS,CAAC;AAG9E,MAAM,YAAY,GAAGA,mBAAa,CAA2B,SAAS,CAAC;;
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/contexts/AnkThemeContext.ts","../src/hook/useSystemTheme.ts","../src/constants/colors.ts","../src/hook/useThemeColors.ts","../src/providers/MainUiView.tsx","../src/providers/AnkThemeProvider.tsx"],"sourcesContent":[null,null,null,null,null,null],"names":["createContext","useState","useEffect","defaultLight","defaultDark","useContext","light","dark","_jsxs","useCallback","useMemo","_jsx"],"mappings":"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"}
|
package/dist/index.esm.js
CHANGED
|
@@ -8,36 +8,38 @@ const AnkThemeContext = createContext(undefined);
|
|
|
8
8
|
const ColorContext = createContext(undefined);
|
|
9
9
|
|
|
10
10
|
const useSystemTheme = () => {
|
|
11
|
-
const
|
|
11
|
+
const theme = window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
12
12
|
? "dark"
|
|
13
|
-
: "light"
|
|
13
|
+
: "light";
|
|
14
|
+
const [sysTheme, setSysTheme] = useState(theme);
|
|
14
15
|
useEffect(() => {
|
|
15
16
|
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
|
16
17
|
const handleChange = () => {
|
|
17
18
|
setSysTheme(media.matches ? "dark" : "light");
|
|
18
19
|
};
|
|
20
|
+
handleChange();
|
|
19
21
|
media.addEventListener("change", handleChange);
|
|
20
22
|
return () => media.removeEventListener("change", handleChange);
|
|
21
|
-
}, []);
|
|
23
|
+
}, [theme, setSysTheme]);
|
|
22
24
|
return sysTheme;
|
|
23
25
|
};
|
|
24
26
|
|
|
25
27
|
const light = {
|
|
26
|
-
primary: '
|
|
28
|
+
primary: 'red',
|
|
27
29
|
primaryColor: 'red',
|
|
30
|
+
pageBg: '#8d8d8d',
|
|
28
31
|
mainBgColor: '#fff',
|
|
29
32
|
backgroundColor: '#f0f0f0',
|
|
30
33
|
secondryBgColor: '#808080',
|
|
31
|
-
pageBg: '#8d8d8d',
|
|
32
34
|
color: '#000',
|
|
33
35
|
};
|
|
34
36
|
const dark = {
|
|
35
|
-
primary: '
|
|
37
|
+
primary: 'red',
|
|
36
38
|
primaryColor: 'red',
|
|
37
|
-
mainBgColor: '#
|
|
38
|
-
secondryBgColor: '808080',
|
|
39
|
+
mainBgColor: '#000',
|
|
39
40
|
pageBg: '#333',
|
|
40
41
|
backgroundColor: '#444',
|
|
42
|
+
secondryBgColor: '808080',
|
|
41
43
|
color: '#eee',
|
|
42
44
|
};
|
|
43
45
|
|
|
@@ -59,7 +61,7 @@ const useThemeColors = () => {
|
|
|
59
61
|
const reLight = light$1 ?? light;
|
|
60
62
|
const reDark = dark$1 ?? dark;
|
|
61
63
|
const theme = context.theme || undefined;
|
|
62
|
-
const themeMode = context.
|
|
64
|
+
const themeMode = context.themeType || undefined;
|
|
63
65
|
if (theme === undefined || themeMode === undefined) {
|
|
64
66
|
throw new Error(` * useThemeColors must be used within a AnkThemeProvider * \n like this - \n import AnkThemeProvider from '@ankjs/react-ui;
|
|
65
67
|
|
|
@@ -87,14 +89,25 @@ const useThemeColors = () => {
|
|
|
87
89
|
};
|
|
88
90
|
|
|
89
91
|
const MainUiView = (props) => {
|
|
90
|
-
const { children, autoApply, style, overflow, } = props;
|
|
91
|
-
const
|
|
92
|
-
|
|
92
|
+
const { children, autoApply, style, overflow, backgroundColor, fontolor } = props;
|
|
93
|
+
const colors = useThemeColors();
|
|
94
|
+
const { mainBgColor, color } = useThemeColors();
|
|
95
|
+
const bg = autoApply ? mainBgColor : backgroundColor;
|
|
96
|
+
const text = autoApply ? color : fontolor;
|
|
97
|
+
const styleContener = {
|
|
98
|
+
backgroundColor: bg,
|
|
99
|
+
color: text,
|
|
100
|
+
height: "100dvh",
|
|
101
|
+
width: "100%",
|
|
102
|
+
overflow,
|
|
103
|
+
...style
|
|
104
|
+
};
|
|
105
|
+
return (jsxs("div", { style: styleContener, children: [JSON.stringify(colors), children] }));
|
|
93
106
|
};
|
|
94
107
|
|
|
95
108
|
const AnkThemeProvider = (props) => {
|
|
96
109
|
//PROPERTY
|
|
97
|
-
const { children, colorsObjectProvide = "", colorsObject = "", defaultThemeMode = "system", autoApply = true, style = {}, overflow = '
|
|
110
|
+
const { children, colorsObjectProvide = "", colorsObject = "", defaultThemeMode = "system", autoApply = true, style = {}, overflow = 'scroll', backgroundColor = "pink", color = "black" } = props;
|
|
98
111
|
// SYSTEM THEME MODE 🪝
|
|
99
112
|
// Assumed returns 'light' | 'dark'
|
|
100
113
|
const system = useSystemTheme();
|
|
@@ -104,24 +117,30 @@ const AnkThemeProvider = (props) => {
|
|
|
104
117
|
const [theme, setTheme] = useState(initialActiveTheme);
|
|
105
118
|
// State for the user's selected preference
|
|
106
119
|
const [themeType, setThemeType] = useState(defaultThemeMode);
|
|
120
|
+
useEffect(() => {
|
|
121
|
+
if (defaultThemeMode === 'system') {
|
|
122
|
+
setTheme(initialActiveTheme);
|
|
123
|
+
return setThemeType('system');
|
|
124
|
+
}
|
|
125
|
+
}, [defaultThemeMode, initialActiveTheme, setTheme, setThemeType]);
|
|
107
126
|
const setDarkTheme = useCallback(() => {
|
|
108
127
|
if (theme === 'dark')
|
|
109
128
|
return;
|
|
110
129
|
setThemeType('dark');
|
|
111
|
-
setTheme('dark');
|
|
130
|
+
return setTheme('dark');
|
|
112
131
|
}, [theme, setThemeType, setTheme]);
|
|
113
132
|
const setLightTheme = useCallback(() => {
|
|
114
133
|
if (theme === 'light')
|
|
115
134
|
return;
|
|
116
135
|
setThemeType('light');
|
|
117
|
-
setTheme('light');
|
|
136
|
+
return setTheme('light');
|
|
118
137
|
}, [theme, setThemeType, setTheme]);
|
|
119
138
|
const setSystemTheme = useCallback(() => {
|
|
120
139
|
if (themeType === 'system')
|
|
121
140
|
return;
|
|
122
141
|
setThemeType('system');
|
|
123
|
-
setTheme(system);
|
|
124
|
-
}, [
|
|
142
|
+
return setTheme(system);
|
|
143
|
+
}, [themeType, setTheme, system, setThemeType]);
|
|
125
144
|
// Memoize the context value to prevent unnecessary re-renders in consumers
|
|
126
145
|
const contextValue = useMemo(() => ({
|
|
127
146
|
theme,
|
|
@@ -130,13 +149,13 @@ const AnkThemeProvider = (props) => {
|
|
|
130
149
|
setDarkTheme,
|
|
131
150
|
setLightTheme,
|
|
132
151
|
setSystemTheme,
|
|
133
|
-
}), [theme, setTheme, setDarkTheme, setLightTheme, setSystemTheme]);
|
|
152
|
+
}), [theme, themeType, setTheme, setDarkTheme, setLightTheme, setSystemTheme]);
|
|
134
153
|
// WONER COLOUR OBJECT
|
|
135
154
|
const colorObj = useMemo(() => ({
|
|
136
155
|
...colorsObject,
|
|
137
156
|
...colorsObjectProvide,
|
|
138
157
|
}), [colorsObject, colorsObjectProvide]);
|
|
139
|
-
return (jsx(AnkThemeContext.Provider, { value: contextValue, children: jsx(ColorContext.Provider, { value: colorObj, children: jsx(MainUiView, { autoApply: autoApply, style: style, overflow: overflow, children: children }) }) }));
|
|
158
|
+
return (jsx(AnkThemeContext.Provider, { value: contextValue, children: jsx(ColorContext.Provider, { value: colorObj, children: jsx(MainUiView, { autoApply: autoApply, style: style, overflow: overflow, backgroundColor: backgroundColor, fontolor: color, children: children }) }) }));
|
|
140
159
|
};
|
|
141
160
|
|
|
142
161
|
export { AnkThemeProvider as default };
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/contexts/AnkThemeContext.ts","../src/hook/useSystemTheme.ts","../src/constants/colors.ts","../src/hook/useThemeColors.ts","../src/providers/MainUiView.tsx","../src/providers/AnkThemeProvider.tsx"],"sourcesContent":[null,null,null,null,null,null],"names":["defaultLight","defaultDark","light","dark","_jsxs","_jsx"],"mappings":";;;AAAA;;AAEG;AASI,MAAM,eAAe,GAAG,aAAa,CAA+B,SAAS,CAAC;AAG9E,MAAM,YAAY,GAAG,aAAa,CAA2B,SAAS,CAAC;;
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/contexts/AnkThemeContext.ts","../src/hook/useSystemTheme.ts","../src/constants/colors.ts","../src/hook/useThemeColors.ts","../src/providers/MainUiView.tsx","../src/providers/AnkThemeProvider.tsx"],"sourcesContent":[null,null,null,null,null,null],"names":["defaultLight","defaultDark","light","dark","_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ export type ThemeProviderProps = {
|
|
|
17
17
|
defaultThemeMode?: 'light' | 'dark' | 'system';
|
|
18
18
|
style?: CSSProperties;
|
|
19
19
|
overflow?: CSSProperties['overflow'];
|
|
20
|
+
color?: CSSProperties['color'];
|
|
20
21
|
};
|
|
21
22
|
export type ThemeContextType = {
|
|
22
23
|
theme?: 'light' | 'dark' | 'system';
|
package/package.json
CHANGED
package/src/constants/colors.ts
CHANGED
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
export const light = {
|
|
5
|
-
primary: '
|
|
5
|
+
primary: 'red',
|
|
6
6
|
primaryColor: 'red',
|
|
7
|
+
pageBg: '#8d8d8d',
|
|
7
8
|
mainBgColor: '#fff',
|
|
8
9
|
backgroundColor: '#f0f0f0',
|
|
9
10
|
secondryBgColor: '#808080',
|
|
10
|
-
pageBg: '#8d8d8d',
|
|
11
11
|
color: '#000',
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export const dark = {
|
|
15
|
-
primary: '
|
|
15
|
+
primary: 'red',
|
|
16
16
|
primaryColor: 'red',
|
|
17
|
-
mainBgColor: '#
|
|
18
|
-
secondryBgColor: '808080',
|
|
17
|
+
mainBgColor: '#000',
|
|
19
18
|
pageBg: '#333',
|
|
20
19
|
backgroundColor: '#444',
|
|
20
|
+
secondryBgColor: '808080',
|
|
21
21
|
color: '#eee',
|
|
22
22
|
}
|
|
23
23
|
|
|
@@ -2,25 +2,27 @@ import { useEffect, useState } from "react";
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
|
|
6
7
|
const useSystemTheme = () => {
|
|
7
8
|
|
|
9
|
+
const theme = window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
10
|
+
? "dark"
|
|
11
|
+
: "light"
|
|
8
12
|
|
|
9
13
|
const [sysTheme, setSysTheme] = useState<'light' | 'dark'>(
|
|
10
|
-
|
|
11
|
-
? "dark"
|
|
12
|
-
: "light"
|
|
14
|
+
theme
|
|
13
15
|
);
|
|
14
16
|
|
|
15
|
-
|
|
16
17
|
useEffect(() => {
|
|
17
18
|
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
|
18
19
|
const handleChange = () => {
|
|
19
20
|
setSysTheme(media.matches ? "dark" : "light");
|
|
20
21
|
};
|
|
22
|
+
handleChange();
|
|
21
23
|
media.addEventListener("change", handleChange);
|
|
22
24
|
return () => media.removeEventListener("change", handleChange);
|
|
23
|
-
}, []);
|
|
25
|
+
}, [theme, setSysTheme]);
|
|
24
26
|
|
|
25
27
|
return sysTheme;
|
|
26
28
|
};
|
|
@@ -15,6 +15,7 @@ const defaultColorsObject = {
|
|
|
15
15
|
const useThemeColors = (): ThemeContextType | undefined => {
|
|
16
16
|
const context = useContext(AnkThemeContext);
|
|
17
17
|
|
|
18
|
+
|
|
18
19
|
if (!context) {
|
|
19
20
|
throw new Error(` * useThemeColors must be used within a AnkThemeProvider * \n like this - \n import AnkThemeProvider from '@ankjs/react-ui;
|
|
20
21
|
|
|
@@ -23,13 +24,18 @@ const useThemeColors = (): ThemeContextType | undefined => {
|
|
|
23
24
|
</AnkThemeProvider>
|
|
24
25
|
`)
|
|
25
26
|
};
|
|
27
|
+
|
|
28
|
+
|
|
26
29
|
const { light, dark } = useContext(ColorContext) ?? defaultColorsObject;
|
|
27
30
|
|
|
28
31
|
const reLight = light ?? defaultLight;
|
|
29
32
|
const reDark = dark ?? defaultDark;
|
|
30
33
|
|
|
31
34
|
const theme = context.theme || undefined;
|
|
32
|
-
const themeMode = context.
|
|
35
|
+
const themeMode = context.themeType || undefined;
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
33
39
|
|
|
34
40
|
if (theme === undefined || themeMode === undefined) {
|
|
35
41
|
throw new Error(` * useThemeColors must be used within a AnkThemeProvider * \n like this - \n import AnkThemeProvider from '@ankjs/react-ui;
|
|
@@ -5,7 +5,7 @@ Copyright (c) [2026] [ankjs]
|
|
|
5
5
|
Filename: AnkThemeProvider.tsx
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import React, { useState, useCallback, useMemo } from 'react';
|
|
8
|
+
import React, { useState, useCallback, useMemo, useEffect } from 'react';
|
|
9
9
|
import {
|
|
10
10
|
AnkThemeContext,
|
|
11
11
|
ColorContext
|
|
@@ -28,7 +28,9 @@ const AnkThemeProvider = (props: ThemeProviderProps) => {
|
|
|
28
28
|
defaultThemeMode = "system",
|
|
29
29
|
autoApply = true,
|
|
30
30
|
style = {},
|
|
31
|
-
overflow = '
|
|
31
|
+
overflow = 'scroll',
|
|
32
|
+
backgroundColor = "pink",
|
|
33
|
+
color = "black"
|
|
32
34
|
} = props;
|
|
33
35
|
|
|
34
36
|
|
|
@@ -48,23 +50,32 @@ const AnkThemeProvider = (props: ThemeProviderProps) => {
|
|
|
48
50
|
|
|
49
51
|
|
|
50
52
|
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
if (defaultThemeMode === 'system') {
|
|
55
|
+
setTheme(initialActiveTheme);
|
|
56
|
+
return setThemeType('system');
|
|
57
|
+
};
|
|
58
|
+
}, [defaultThemeMode, initialActiveTheme, setTheme, setThemeType]);
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
51
62
|
const setDarkTheme = useCallback(() => {
|
|
52
63
|
if (theme === 'dark') return;
|
|
53
64
|
setThemeType('dark');
|
|
54
|
-
setTheme('dark');
|
|
65
|
+
return setTheme('dark');
|
|
55
66
|
}, [theme, setThemeType, setTheme]);
|
|
56
67
|
|
|
57
68
|
const setLightTheme = useCallback(() => {
|
|
58
69
|
if (theme === 'light') return;
|
|
59
70
|
setThemeType('light');
|
|
60
|
-
setTheme('light');
|
|
71
|
+
return setTheme('light');
|
|
61
72
|
}, [theme, setThemeType, setTheme]);
|
|
62
73
|
|
|
63
74
|
const setSystemTheme = useCallback(() => {
|
|
64
75
|
if (themeType === 'system') return
|
|
65
76
|
setThemeType('system');
|
|
66
|
-
setTheme(system);
|
|
67
|
-
}, [
|
|
77
|
+
return setTheme(system);
|
|
78
|
+
}, [themeType, setTheme, system, setThemeType]);
|
|
68
79
|
|
|
69
80
|
|
|
70
81
|
|
|
@@ -78,7 +89,7 @@ const AnkThemeProvider = (props: ThemeProviderProps) => {
|
|
|
78
89
|
setLightTheme,
|
|
79
90
|
setSystemTheme,
|
|
80
91
|
}),
|
|
81
|
-
[theme, setTheme, setDarkTheme, setLightTheme, setSystemTheme],
|
|
92
|
+
[theme, themeType, setTheme, setDarkTheme, setLightTheme, setSystemTheme],
|
|
82
93
|
);
|
|
83
94
|
|
|
84
95
|
|
|
@@ -100,7 +111,10 @@ const AnkThemeProvider = (props: ThemeProviderProps) => {
|
|
|
100
111
|
autoApply={autoApply}
|
|
101
112
|
style={style}
|
|
102
113
|
overflow={overflow}
|
|
114
|
+
backgroundColor={backgroundColor}
|
|
115
|
+
fontolor={color}
|
|
103
116
|
>
|
|
117
|
+
|
|
104
118
|
{children}
|
|
105
119
|
</MainUiView>
|
|
106
120
|
</ColorContext.Provider>
|
|
@@ -108,3 +122,6 @@ const AnkThemeProvider = (props: ThemeProviderProps) => {
|
|
|
108
122
|
)
|
|
109
123
|
};
|
|
110
124
|
export default AnkThemeProvider;
|
|
125
|
+
|
|
126
|
+
/*
|
|
127
|
+
*/
|
|
@@ -12,16 +12,34 @@ const MainUiView = (props: MainPropsType) => {
|
|
|
12
12
|
autoApply,
|
|
13
13
|
style,
|
|
14
14
|
overflow,
|
|
15
|
+
backgroundColor,
|
|
16
|
+
fontolor
|
|
15
17
|
} = props;
|
|
16
18
|
|
|
17
|
-
const
|
|
19
|
+
const colors = useThemeColors();
|
|
20
|
+
const {
|
|
21
|
+
mainBgColor, color
|
|
22
|
+
} = useThemeColors();
|
|
23
|
+
|
|
24
|
+
const bg = autoApply ? mainBgColor : backgroundColor
|
|
25
|
+
const text = autoApply ? color: fontolor ;
|
|
26
|
+
|
|
27
|
+
const styleContener = {
|
|
28
|
+
backgroundColor: bg,
|
|
29
|
+
color: text,
|
|
30
|
+
height: "100dvh",
|
|
31
|
+
width: "100%",
|
|
32
|
+
overflow,
|
|
33
|
+
...style
|
|
34
|
+
}
|
|
18
35
|
|
|
19
36
|
|
|
20
37
|
return (
|
|
21
38
|
<div
|
|
39
|
+
style={styleContener}
|
|
22
40
|
>
|
|
23
41
|
{
|
|
24
|
-
JSON.stringify(
|
|
42
|
+
JSON.stringify(colors)
|
|
25
43
|
}
|
|
26
44
|
{children}
|
|
27
45
|
</div>
|
package/src/types/themeTypes.ts
CHANGED