colbrush 1.6.0 → 1.7.0

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,104 @@
1
+ // src/react/ThemeProvider.tsx
2
+ import {
3
+ createContext,
4
+ useContext,
5
+ useEffect,
6
+ useMemo,
7
+ useState
8
+ } from "react";
9
+ import { jsx } from "react/jsx-runtime";
10
+ var THEME_KEYS = [
11
+ "default",
12
+ "protanopia",
13
+ "deuteranopia",
14
+ "tritanopia"
15
+ ];
16
+ var THEME_LABEL = {
17
+ English: {
18
+ default: "default",
19
+ protanopia: "protanopia",
20
+ deuteranopia: "deuteranopia",
21
+ tritanopia: "tritanopia"
22
+ },
23
+ Korean: {
24
+ default: "\uAE30\uBCF8",
25
+ protanopia: "\uC801\uC0C9\uB9F9",
26
+ deuteranopia: "\uB179\uC0C9\uB9F9",
27
+ tritanopia: "\uCCAD\uC0C9\uB9F9"
28
+ }
29
+ };
30
+ var getThemeOptions = (lang) => THEME_KEYS.map((key) => ({ key, label: THEME_LABEL[lang][key] }));
31
+ var KEY = "theme";
32
+ var LANG_KEY = "theme_lang";
33
+ var ThemeContext = createContext({
34
+ theme: "default",
35
+ language: "English",
36
+ updateTheme: () => {
37
+ },
38
+ updateLanguage: () => {
39
+ },
40
+ simulationFilter: "none",
41
+ setSimulationFilter: () => {
42
+ }
43
+ });
44
+ var useTheme = () => useContext(ThemeContext);
45
+ function normalizeToKey(value) {
46
+ if (!value) return "default";
47
+ if (THEME_KEYS.includes(value))
48
+ return value;
49
+ const reverse = {};
50
+ ["English", "Korean"].forEach((lang) => {
51
+ Object.entries(THEME_LABEL[lang]).forEach(
52
+ ([k, label]) => {
53
+ reverse[label] = k;
54
+ }
55
+ );
56
+ });
57
+ return reverse[value] ?? "default";
58
+ }
59
+ function ThemeProvider({ children }) {
60
+ const [theme, setTheme] = useState("default");
61
+ const [simulationFilter, setSimulationFilter] = useState("none");
62
+ const [language, setLanguage] = useState("English");
63
+ useEffect(() => {
64
+ if (typeof window === "undefined") return;
65
+ const storedTheme = normalizeToKey(localStorage.getItem(KEY));
66
+ const storedLang = localStorage.getItem(LANG_KEY) || "English";
67
+ setTheme(storedTheme);
68
+ setLanguage(storedLang);
69
+ document.documentElement.setAttribute("data-theme", storedTheme);
70
+ }, []);
71
+ const updateTheme = (k) => {
72
+ setTheme(k);
73
+ if (typeof window !== "undefined") {
74
+ localStorage.setItem(KEY, k);
75
+ document.documentElement.setAttribute("data-theme", k);
76
+ }
77
+ };
78
+ const updateLanguage = (t) => {
79
+ setLanguage(t);
80
+ if (typeof window !== "undefined") {
81
+ localStorage.setItem(LANG_KEY, t);
82
+ }
83
+ };
84
+ const value = useMemo(
85
+ () => ({
86
+ theme,
87
+ language,
88
+ updateTheme,
89
+ updateLanguage,
90
+ simulationFilter,
91
+ setSimulationFilter
92
+ }),
93
+ [theme, language, simulationFilter]
94
+ );
95
+ return /* @__PURE__ */ jsx(ThemeContext.Provider, { value, children });
96
+ }
97
+ var THEMES = THEME_LABEL;
98
+
99
+ export {
100
+ getThemeOptions,
101
+ useTheme,
102
+ ThemeProvider,
103
+ THEMES
104
+ };
package/dist/client.cjs CHANGED
@@ -60,6 +60,9 @@ var ThemeContext = (0, import_react.createContext)({
60
60
  updateTheme: () => {
61
61
  },
62
62
  updateLanguage: () => {
63
+ },
64
+ simulationFilter: "none",
65
+ setSimulationFilter: () => {
63
66
  }
64
67
  });
65
68
  var useTheme = () => (0, import_react.useContext)(ThemeContext);
@@ -79,6 +82,7 @@ function normalizeToKey(value) {
79
82
  }
80
83
  function ThemeProvider({ children }) {
81
84
  const [theme, setTheme] = (0, import_react.useState)("default");
85
+ const [simulationFilter, setSimulationFilter] = (0, import_react.useState)("none");
82
86
  const [language, setLanguage] = (0, import_react.useState)("English");
83
87
  (0, import_react.useEffect)(() => {
84
88
  if (typeof window === "undefined") return;
@@ -102,8 +106,15 @@ function ThemeProvider({ children }) {
102
106
  }
103
107
  };
104
108
  const value = (0, import_react.useMemo)(
105
- () => ({ theme, language, updateTheme, updateLanguage }),
106
- [theme, language]
109
+ () => ({
110
+ theme,
111
+ language,
112
+ updateTheme,
113
+ updateLanguage,
114
+ simulationFilter,
115
+ setSimulationFilter
116
+ }),
117
+ [theme, language, simulationFilter]
107
118
  );
108
119
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThemeContext.Provider, { value, children });
109
120
  }
package/dist/client.d.cts CHANGED
@@ -3,12 +3,16 @@ import { ReactNode } from 'react';
3
3
 
4
4
  type TLanguage = 'English' | 'Korean';
5
5
  declare const THEME_KEYS: readonly ["default", "protanopia", "deuteranopia", "tritanopia"];
6
+ declare const SIMULATION_KEYS: readonly ["none", "deuteranopia", "protanopia", "tritanopia"];
6
7
  type ThemeKey = (typeof THEME_KEYS)[number];
8
+ type SimulationKey = (typeof SIMULATION_KEYS)[number];
7
9
  type ThemeContextType = {
8
10
  theme: ThemeKey;
9
11
  language: TLanguage;
10
12
  updateTheme: (k: ThemeKey) => void;
11
13
  updateLanguage: (t: TLanguage) => void;
14
+ simulationFilter: SimulationKey;
15
+ setSimulationFilter: (value: SimulationKey) => void;
12
16
  };
13
17
  declare const useTheme: () => ThemeContextType;
14
18
  type ThemeProviderProps = {
@@ -16,7 +20,7 @@ type ThemeProviderProps = {
16
20
  };
17
21
  declare function ThemeProvider({ children }: ThemeProviderProps): react_jsx_runtime.JSX.Element;
18
22
  type ThemeType = ThemeKey;
19
- declare const THEMES: Record<TLanguage, Record<"default" | "protanopia" | "deuteranopia" | "tritanopia", string>>;
23
+ declare const THEMES: Record<TLanguage, Record<"deuteranopia" | "protanopia" | "tritanopia" | "default", string>>;
20
24
 
21
25
  type Props = {
22
26
  options?: {
package/dist/client.d.ts CHANGED
@@ -3,12 +3,16 @@ import { ReactNode } from 'react';
3
3
 
4
4
  type TLanguage = 'English' | 'Korean';
5
5
  declare const THEME_KEYS: readonly ["default", "protanopia", "deuteranopia", "tritanopia"];
6
+ declare const SIMULATION_KEYS: readonly ["none", "deuteranopia", "protanopia", "tritanopia"];
6
7
  type ThemeKey = (typeof THEME_KEYS)[number];
8
+ type SimulationKey = (typeof SIMULATION_KEYS)[number];
7
9
  type ThemeContextType = {
8
10
  theme: ThemeKey;
9
11
  language: TLanguage;
10
12
  updateTheme: (k: ThemeKey) => void;
11
13
  updateLanguage: (t: TLanguage) => void;
14
+ simulationFilter: SimulationKey;
15
+ setSimulationFilter: (value: SimulationKey) => void;
12
16
  };
13
17
  declare const useTheme: () => ThemeContextType;
14
18
  type ThemeProviderProps = {
@@ -16,7 +20,7 @@ type ThemeProviderProps = {
16
20
  };
17
21
  declare function ThemeProvider({ children }: ThemeProviderProps): react_jsx_runtime.JSX.Element;
18
22
  type ThemeType = ThemeKey;
19
- declare const THEMES: Record<TLanguage, Record<"default" | "protanopia" | "deuteranopia" | "tritanopia", string>>;
23
+ declare const THEMES: Record<TLanguage, Record<"deuteranopia" | "protanopia" | "tritanopia" | "default", string>>;
20
24
 
21
25
  type Props = {
22
26
  options?: {