@ankjs/react-ui 1.0.13 → 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.
@@ -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,24 +12,106 @@ const AnkThemeContext = react.createContext(undefined);
12
12
  const ColorContext = react.createContext(undefined);
13
13
 
14
14
  const useSystemTheme = () => {
15
- const [sysTheme, setSysTheme] = react.useState(window.matchMedia('(prefers-color-scheme: dark)').matches
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
- //import MainUiView from './MainUiView';
31
+ const light = {
32
+ primary: 'red',
33
+ primaryColor: 'red',
34
+ pageBg: '#8d8d8d',
35
+ mainBgColor: '#fff',
36
+ backgroundColor: '#f0f0f0',
37
+ secondryBgColor: '#808080',
38
+ color: '#000',
39
+ };
40
+ const dark = {
41
+ primary: 'red',
42
+ primaryColor: 'red',
43
+ mainBgColor: '#000',
44
+ pageBg: '#333',
45
+ backgroundColor: '#444',
46
+ secondryBgColor: '808080',
47
+ color: '#eee',
48
+ };
49
+
50
+ const defaultColorsObject = {
51
+ light: light,
52
+ dark: dark,
53
+ };
54
+ const useThemeColors = () => {
55
+ const context = react.useContext(AnkThemeContext);
56
+ if (!context) {
57
+ throw new Error(` * useThemeColors must be used within a AnkThemeProvider * \n like this - \n import AnkThemeProvider from '@ankjs/react-ui;
58
+
59
+ <AnkThemeProvider>
60
+ <App />
61
+ </AnkThemeProvider>
62
+ `);
63
+ }
64
+ const { light: light$1, dark: dark$1 } = react.useContext(ColorContext) ?? defaultColorsObject;
65
+ const reLight = light$1 ?? light;
66
+ const reDark = dark$1 ?? dark;
67
+ const theme = context.theme || undefined;
68
+ const themeMode = context.themeType || undefined;
69
+ if (theme === undefined || themeMode === undefined) {
70
+ throw new Error(` * useThemeColors must be used within a AnkThemeProvider * \n like this - \n import AnkThemeProvider from '@ankjs/react-ui;
71
+
72
+ <AnkThemeProvider>
73
+ <App />
74
+ </AnkThemeProvider>
75
+ `);
76
+ }
77
+ else if (context.theme === "light") {
78
+ return {
79
+ ...reLight,
80
+ themeMode,
81
+ };
82
+ }
83
+ else if (context.theme === "dark") {
84
+ return {
85
+ ...reDark,
86
+ themeMode,
87
+ };
88
+ }
89
+ return {
90
+ ...reLight,
91
+ themeMode: "light"
92
+ };
93
+ };
94
+
95
+ const MainUiView = (props) => {
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] }));
110
+ };
111
+
30
112
  const AnkThemeProvider = (props) => {
31
113
  //PROPERTY
32
- const { children, colorsObjectProvide = "", colorsObject = "", defaultThemeMode = "system", style = {} } = props;
114
+ const { children, colorsObjectProvide = "", colorsObject = "", defaultThemeMode = "system", autoApply = true, style = {}, overflow = 'scroll', backgroundColor = "pink", color = "black" } = props;
33
115
  // SYSTEM THEME MODE 🪝
34
116
  // Assumed returns 'light' | 'dark'
35
117
  const system = useSystemTheme();
@@ -39,24 +121,30 @@ const AnkThemeProvider = (props) => {
39
121
  const [theme, setTheme] = react.useState(initialActiveTheme);
40
122
  // State for the user's selected preference
41
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]);
42
130
  const setDarkTheme = react.useCallback(() => {
43
131
  if (theme === 'dark')
44
132
  return;
45
133
  setThemeType('dark');
46
- setTheme('dark');
134
+ return setTheme('dark');
47
135
  }, [theme, setThemeType, setTheme]);
48
136
  const setLightTheme = react.useCallback(() => {
49
137
  if (theme === 'light')
50
138
  return;
51
139
  setThemeType('light');
52
- setTheme('light');
140
+ return setTheme('light');
53
141
  }, [theme, setThemeType, setTheme]);
54
142
  const setSystemTheme = react.useCallback(() => {
55
143
  if (themeType === 'system')
56
144
  return;
57
145
  setThemeType('system');
58
- setTheme(system);
59
- }, [theme, setTheme, system, setThemeType]);
146
+ return setTheme(system);
147
+ }, [themeType, setTheme, system, setThemeType]);
60
148
  // Memoize the context value to prevent unnecessary re-renders in consumers
61
149
  const contextValue = react.useMemo(() => ({
62
150
  theme,
@@ -65,13 +153,13 @@ const AnkThemeProvider = (props) => {
65
153
  setDarkTheme,
66
154
  setLightTheme,
67
155
  setSystemTheme,
68
- }), [theme, setTheme, setDarkTheme, setLightTheme, setSystemTheme]);
156
+ }), [theme, themeType, setTheme, setDarkTheme, setLightTheme, setSystemTheme]);
69
157
  // WONER COLOUR OBJECT
70
158
  const colorObj = react.useMemo(() => ({
71
159
  ...colorsObject,
72
160
  ...colorsObjectProvide,
73
161
  }), [colorsObject, colorsObjectProvide]);
74
- return (jsxRuntime.jsx(AnkThemeContext.Provider, { value: contextValue, children: jsxRuntime.jsx(ColorContext.Provider, { value: colorObj, 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 }) }) }));
75
163
  };
76
164
 
77
165
  exports.default = AnkThemeProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/contexts/AnkThemeContext.ts","../src/hook/useSystemTheme.ts","../src/providers/AnkThemeProvider.tsx"],"sourcesContent":[null,null,null],"names":["createContext","useState","useEffect","useCallback","useMemo","_jsx"],"mappings":"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"}
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
@@ -1,5 +1,5 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { createContext, useState, useEffect, useCallback, useMemo } from 'react';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { createContext, useState, useEffect, useContext, useCallback, useMemo } from 'react';
3
3
 
4
4
  /**
5
5
  * Copyright (c) [2026] [ankjs]
@@ -8,24 +8,106 @@ const AnkThemeContext = createContext(undefined);
8
8
  const ColorContext = createContext(undefined);
9
9
 
10
10
  const useSystemTheme = () => {
11
- const [sysTheme, setSysTheme] = useState(window.matchMedia('(prefers-color-scheme: dark)').matches
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
- //import MainUiView from './MainUiView';
27
+ const light = {
28
+ primary: 'red',
29
+ primaryColor: 'red',
30
+ pageBg: '#8d8d8d',
31
+ mainBgColor: '#fff',
32
+ backgroundColor: '#f0f0f0',
33
+ secondryBgColor: '#808080',
34
+ color: '#000',
35
+ };
36
+ const dark = {
37
+ primary: 'red',
38
+ primaryColor: 'red',
39
+ mainBgColor: '#000',
40
+ pageBg: '#333',
41
+ backgroundColor: '#444',
42
+ secondryBgColor: '808080',
43
+ color: '#eee',
44
+ };
45
+
46
+ const defaultColorsObject = {
47
+ light: light,
48
+ dark: dark,
49
+ };
50
+ const useThemeColors = () => {
51
+ const context = useContext(AnkThemeContext);
52
+ if (!context) {
53
+ throw new Error(` * useThemeColors must be used within a AnkThemeProvider * \n like this - \n import AnkThemeProvider from '@ankjs/react-ui;
54
+
55
+ <AnkThemeProvider>
56
+ <App />
57
+ </AnkThemeProvider>
58
+ `);
59
+ }
60
+ const { light: light$1, dark: dark$1 } = useContext(ColorContext) ?? defaultColorsObject;
61
+ const reLight = light$1 ?? light;
62
+ const reDark = dark$1 ?? dark;
63
+ const theme = context.theme || undefined;
64
+ const themeMode = context.themeType || undefined;
65
+ if (theme === undefined || themeMode === undefined) {
66
+ throw new Error(` * useThemeColors must be used within a AnkThemeProvider * \n like this - \n import AnkThemeProvider from '@ankjs/react-ui;
67
+
68
+ <AnkThemeProvider>
69
+ <App />
70
+ </AnkThemeProvider>
71
+ `);
72
+ }
73
+ else if (context.theme === "light") {
74
+ return {
75
+ ...reLight,
76
+ themeMode,
77
+ };
78
+ }
79
+ else if (context.theme === "dark") {
80
+ return {
81
+ ...reDark,
82
+ themeMode,
83
+ };
84
+ }
85
+ return {
86
+ ...reLight,
87
+ themeMode: "light"
88
+ };
89
+ };
90
+
91
+ const MainUiView = (props) => {
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] }));
106
+ };
107
+
26
108
  const AnkThemeProvider = (props) => {
27
109
  //PROPERTY
28
- const { children, colorsObjectProvide = "", colorsObject = "", defaultThemeMode = "system", style = {} } = props;
110
+ const { children, colorsObjectProvide = "", colorsObject = "", defaultThemeMode = "system", autoApply = true, style = {}, overflow = 'scroll', backgroundColor = "pink", color = "black" } = props;
29
111
  // SYSTEM THEME MODE 🪝
30
112
  // Assumed returns 'light' | 'dark'
31
113
  const system = useSystemTheme();
@@ -35,24 +117,30 @@ const AnkThemeProvider = (props) => {
35
117
  const [theme, setTheme] = useState(initialActiveTheme);
36
118
  // State for the user's selected preference
37
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]);
38
126
  const setDarkTheme = useCallback(() => {
39
127
  if (theme === 'dark')
40
128
  return;
41
129
  setThemeType('dark');
42
- setTheme('dark');
130
+ return setTheme('dark');
43
131
  }, [theme, setThemeType, setTheme]);
44
132
  const setLightTheme = useCallback(() => {
45
133
  if (theme === 'light')
46
134
  return;
47
135
  setThemeType('light');
48
- setTheme('light');
136
+ return setTheme('light');
49
137
  }, [theme, setThemeType, setTheme]);
50
138
  const setSystemTheme = useCallback(() => {
51
139
  if (themeType === 'system')
52
140
  return;
53
141
  setThemeType('system');
54
- setTheme(system);
55
- }, [theme, setTheme, system, setThemeType]);
142
+ return setTheme(system);
143
+ }, [themeType, setTheme, system, setThemeType]);
56
144
  // Memoize the context value to prevent unnecessary re-renders in consumers
57
145
  const contextValue = useMemo(() => ({
58
146
  theme,
@@ -61,13 +149,13 @@ const AnkThemeProvider = (props) => {
61
149
  setDarkTheme,
62
150
  setLightTheme,
63
151
  setSystemTheme,
64
- }), [theme, setTheme, setDarkTheme, setLightTheme, setSystemTheme]);
152
+ }), [theme, themeType, setTheme, setDarkTheme, setLightTheme, setSystemTheme]);
65
153
  // WONER COLOUR OBJECT
66
154
  const colorObj = useMemo(() => ({
67
155
  ...colorsObject,
68
156
  ...colorsObjectProvide,
69
157
  }), [colorsObject, colorsObjectProvide]);
70
- return (jsx(AnkThemeContext.Provider, { value: contextValue, children: jsx(ColorContext.Provider, { value: colorObj, 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 }) }) }));
71
159
  };
72
160
 
73
161
  export { AnkThemeProvider as default };
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/contexts/AnkThemeContext.ts","../src/hook/useSystemTheme.ts","../src/providers/AnkThemeProvider.tsx"],"sourcesContent":[null,null,null],"names":["_jsx"],"mappings":"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"}
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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"}
@@ -0,0 +1,3 @@
1
+ import type { MainPropsType } from '../types/mainViewType';
2
+ declare const MainUiView: (props: MainPropsType) => import("react/jsx-runtime").JSX.Element;
3
+ export default MainUiView;
@@ -0,0 +1,8 @@
1
+ import { CSSProperties, ReactNode } from 'react';
2
+ export type MainPropsType = {
3
+ children: ReactNode;
4
+ autoApply: boolean;
5
+ style?: CSSProperties;
6
+ overflow?: CSSProperties['overflow'];
7
+ fontolor?: CSSProperties['color'];
8
+ };
@@ -10,11 +10,14 @@ export interface ThemeHookReturn extends ColorPalette {
10
10
  themeMode: ThemeModeType | undefined;
11
11
  }
12
12
  export type ThemeProviderProps = {
13
+ children: ReactNode;
13
14
  colorsObjectProvide?: any;
14
15
  colorsObject?: any;
16
+ autoApply?: boolean;
15
17
  defaultThemeMode?: 'light' | 'dark' | 'system';
16
18
  style?: CSSProperties;
17
- children: ReactNode;
19
+ overflow?: CSSProperties['overflow'];
20
+ color?: CSSProperties['color'];
18
21
  };
19
22
  export type ThemeContextType = {
20
23
  theme?: 'light' | 'dark' | 'system';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankjs/react-ui",
3
- "version": "1.0.13",
3
+ "version": "1.0.15",
4
4
  "description": "A simple React UI Library",
5
5
  "main": "index.js",
6
6
  "module": "dist/index.esm.js",
@@ -2,22 +2,22 @@
2
2
 
3
3
 
4
4
  export const light = {
5
- primary: '#eee',
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: '#b30303',
15
+ primary: 'red',
16
16
  primaryColor: 'red',
17
- mainBgColor: '#009',
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
- type Theme = "light" | "dark";
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
- window.matchMedia('(prefers-color-scheme: dark)').matches
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.themeMode || undefined;
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,14 +5,14 @@ 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
12
12
  } from '../contexts/AnkThemeContext';
13
13
  import type { ThemeProviderProps } from '../types/themeTypes';
14
14
  import useSystemTheme from '../hook/useSystemTheme';
15
- //import MainUiView from './MainUiView';
15
+ import MainUiView from './MainUiView';
16
16
 
17
17
 
18
18
 
@@ -26,7 +26,11 @@ const AnkThemeProvider = (props: ThemeProviderProps) => {
26
26
  colorsObjectProvide = "",
27
27
  colorsObject = "",
28
28
  defaultThemeMode = "system",
29
- style = {}
29
+ autoApply = true,
30
+ style = {},
31
+ overflow = 'scroll',
32
+ backgroundColor = "pink",
33
+ color = "black"
30
34
  } = props;
31
35
 
32
36
 
@@ -46,23 +50,32 @@ const AnkThemeProvider = (props: ThemeProviderProps) => {
46
50
 
47
51
 
48
52
 
53
+ useEffect(() => {
54
+ if (defaultThemeMode === 'system') {
55
+ setTheme(initialActiveTheme);
56
+ return setThemeType('system');
57
+ };
58
+ }, [defaultThemeMode, initialActiveTheme, setTheme, setThemeType]);
59
+
60
+
61
+
49
62
  const setDarkTheme = useCallback(() => {
50
63
  if (theme === 'dark') return;
51
64
  setThemeType('dark');
52
- setTheme('dark');
65
+ return setTheme('dark');
53
66
  }, [theme, setThemeType, setTheme]);
54
67
 
55
68
  const setLightTheme = useCallback(() => {
56
69
  if (theme === 'light') return;
57
70
  setThemeType('light');
58
- setTheme('light');
71
+ return setTheme('light');
59
72
  }, [theme, setThemeType, setTheme]);
60
73
 
61
74
  const setSystemTheme = useCallback(() => {
62
75
  if (themeType === 'system') return
63
76
  setThemeType('system');
64
- setTheme(system);
65
- }, [theme, setTheme, system, setThemeType]);
77
+ return setTheme(system);
78
+ }, [themeType, setTheme, system, setThemeType]);
66
79
 
67
80
 
68
81
 
@@ -72,13 +85,11 @@ const AnkThemeProvider = (props: ThemeProviderProps) => {
72
85
  theme,
73
86
  themeType,
74
87
  setTheme,
75
-
76
-
77
88
  setDarkTheme,
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
 
@@ -96,7 +107,16 @@ const AnkThemeProvider = (props: ThemeProviderProps) => {
96
107
  <ColorContext.Provider
97
108
  value={colorObj}
98
109
  >
99
- {children}
110
+ <MainUiView
111
+ autoApply={autoApply}
112
+ style={style}
113
+ overflow={overflow}
114
+ backgroundColor={backgroundColor}
115
+ fontolor={color}
116
+ >
117
+
118
+ {children}
119
+ </MainUiView>
100
120
  </ColorContext.Provider>
101
121
  </AnkThemeContext.Provider>
102
122
  )
@@ -104,76 +124,4 @@ const AnkThemeProvider = (props: ThemeProviderProps) => {
104
124
  export default AnkThemeProvider;
105
125
 
106
126
  /*
107
-
108
- import React, { useState, useCallback, useMemo, ReactNode } from 'react';
109
-
110
- interface ThemeProviderProps {
111
- children: ReactNode; // Fixes the "Type {} is not assignable to ReactNode" error
112
- colorsObjectProvide?: any;
113
- colorsObject?: any;
114
- defaultThemeMode?: 'light' | 'dark' | 'system';
115
- style?: React.CSSProperties;
116
- }
117
-
118
- const AnkThemeProvider = (props: ThemeProviderProps) => {
119
- const {
120
- children,
121
- colorsObjectProvide = {},
122
- colorsObject = {},
123
- defaultThemeMode = "system",
124
- } = props;
125
-
126
- const system = useSystemTheme(); // Assumed returns 'light' | 'dark'
127
-
128
- // Determine initial active theme
129
- const initialActiveTheme = defaultThemeMode === "system" ? system : defaultThemeMode;
130
-
131
- // State for the active visual mode
132
- const [theme, setTheme] = useState<'light' | 'dark'>(initialActiveTheme as 'light' | 'dark');
133
-
134
- // State for the user's selected preference
135
- const [themeType, setType] = useState<'light' | 'dark' | 'system'>(defaultThemeMode);
136
-
137
- const setDarkTheme = useCallback(() => {
138
- setTheme('dark');
139
- setType('dark');
140
- }, []);
141
-
142
- const setLightTheme = useCallback(() => {
143
- setTheme('light');
144
- setType('light');
145
- }, []);
146
-
147
- const setSystemTheme = useCallback(() => {
148
- setType('system');
149
- setTheme(system);
150
- }, [system]);
151
-
152
-
153
-
154
- const contextValue = useMemo(
155
- () => ({
156
- theme,
157
- themeType,
158
- setTheme,
159
- setDarkTheme,
160
- setLightTheme,
161
- setSystemTheme,
162
- }),
163
- [theme, themeType, setTheme, setDarkTheme, setLightTheme, setSystemTheme],
164
- );
165
-
166
- const colorObj = useMemo(() => ({
167
- ...colorsObject,
168
- ...colorsObjectProvide,
169
- }), [colorsObject, colorsObjectProvide]);
170
-
171
- return (
172
- <AnkThemeContext.Provider value={contextValue}>
173
- <ColorContext.Provider value={colorObj}>
174
- {children}
175
- </ColorContext.Provider>
176
- </AnkThemeContext.Provider>
177
- );
178
- };
179
- */
127
+ */
@@ -0,0 +1,48 @@
1
+ import useThemeColors from '../hook/useThemeColors';
2
+ import type { MainPropsType } from '../types/mainViewType';
3
+
4
+
5
+
6
+
7
+
8
+
9
+ const MainUiView = (props: MainPropsType) => {
10
+ const {
11
+ children,
12
+ autoApply,
13
+ style,
14
+ overflow,
15
+ backgroundColor,
16
+ fontolor
17
+ } = props;
18
+
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
+ }
35
+
36
+
37
+ return (
38
+ <div
39
+ style={styleContener}
40
+ >
41
+ {
42
+ JSON.stringify(colors)
43
+ }
44
+ {children}
45
+ </div>
46
+ )
47
+ };
48
+ export default MainUiView;
@@ -0,0 +1,14 @@
1
+
2
+
3
+
4
+
5
+ import React, { CSSProperties, ReactNode } from 'react'
6
+
7
+
8
+ export type MainPropsType = {
9
+ children: ReactNode,
10
+ autoApply: boolean,
11
+ style?: CSSProperties,
12
+ overflow?: CSSProperties['overflow'],
13
+ fontolor?: CSSProperties['color']
14
+ }
@@ -13,11 +13,14 @@ export interface ThemeHookReturn extends ColorPalette {
13
13
  }
14
14
 
15
15
  export type ThemeProviderProps = {
16
+ children: ReactNode; // Fixes the "Type {} is not assignable to ReactNode" error
16
17
  colorsObjectProvide?: any,
17
18
  colorsObject?: any,
19
+ autoApply?: boolean,
18
20
  defaultThemeMode?: 'light' | 'dark' | 'system',
19
21
  style?: CSSProperties,
20
- children: ReactNode; // Fixes the "Type {} is not assignable to ReactNode" error
22
+ overflow?: CSSProperties['overflow']
23
+ color?: CSSProperties['color']
21
24
  }
22
25
 
23
26
  export type ThemeContextType = {
@@ -1,33 +0,0 @@
1
-
2
- import useThemeColors from '../hook/useThemeColors'
3
-
4
-
5
-
6
-
7
- export default function MainUiView(props) {
8
- const {
9
- children,
10
- autoColorApply,
11
- colorObject,
12
- style,
13
- others,
14
- } = props;
15
-
16
- const colors = useThemeColors();
17
-
18
-
19
- const styleContener = {
20
- ...style
21
- };
22
-
23
- return (
24
- <div
25
- style={styleContener}
26
- >
27
- {
28
- JSON.stringify(colors)
29
- }
30
- {children}
31
- </div>
32
- )
33
- };