@xanui/core 1.2.7 → 1.2.8
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/AppRoot/index.js +0 -1
- package/AppRoot/index.js.map +1 -1
- package/AppRoot/index.mjs +0 -1
- package/AppRoot/index.mjs.map +1 -1
- package/css/getProps.js +23 -3
- package/css/getProps.js.map +1 -1
- package/css/getProps.mjs +23 -3
- package/css/getProps.mjs.map +1 -1
- package/css/getValue.js +11 -6
- package/css/getValue.js.map +1 -1
- package/css/getValue.mjs +11 -6
- package/css/getValue.mjs.map +1 -1
- package/hooks/useColorTemplate.d.ts +3 -16
- package/hooks/useColorTemplate.js +19 -24
- package/hooks/useColorTemplate.js.map +1 -1
- package/hooks/useColorTemplate.mjs +19 -24
- package/hooks/useColorTemplate.mjs.map +1 -1
- package/hooks/useInterface.d.ts +1 -1
- package/hooks/useInterface.js +1 -1
- package/hooks/useInterface.js.map +1 -1
- package/hooks/useInterface.mjs +1 -1
- package/hooks/useInterface.mjs.map +1 -1
- package/hooks/usePortal.js +1 -1
- package/hooks/usePortal.js.map +1 -1
- package/hooks/usePortal.mjs +1 -1
- package/hooks/usePortal.mjs.map +1 -1
- package/hooks/useScrollbar.d.ts +1 -2
- package/hooks/useScrollbar.js +14 -26
- package/hooks/useScrollbar.js.map +1 -1
- package/hooks/useScrollbar.mjs +14 -26
- package/hooks/useScrollbar.mjs.map +1 -1
- package/index.d.ts +2 -1
- package/index.js +1 -1
- package/index.mjs +1 -1
- package/package.json +1 -1
- package/theme/ThemeCssVars.js +1 -1
- package/theme/ThemeCssVars.js.map +1 -1
- package/theme/ThemeCssVars.mjs +1 -1
- package/theme/ThemeCssVars.mjs.map +1 -1
- package/theme/ThemeDefaultOptions.js +19 -92
- package/theme/ThemeDefaultOptions.js.map +1 -1
- package/theme/ThemeDefaultOptions.mjs +19 -92
- package/theme/ThemeDefaultOptions.mjs.map +1 -1
- package/theme/ThemeProvider.js +3 -4
- package/theme/ThemeProvider.js.map +1 -1
- package/theme/ThemeProvider.mjs +3 -4
- package/theme/ThemeProvider.mjs.map +1 -1
- package/theme/createColorScale.d.ts +17 -0
- package/theme/createColorScale.js +55 -0
- package/theme/createColorScale.js.map +1 -0
- package/theme/createColorScale.mjs +55 -0
- package/theme/createColorScale.mjs.map +1 -0
- package/theme/createTheme.d.ts +1 -1
- package/theme/createTheme.js +17 -2
- package/theme/createTheme.js.map +1 -1
- package/theme/createTheme.mjs +17 -2
- package/theme/createTheme.mjs.map +1 -1
- package/theme/index.js +1 -1
- package/theme/index.js.map +1 -1
- package/theme/index.mjs +1 -1
- package/theme/index.mjs.map +1 -1
- package/theme/types.d.ts +23 -20
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});function createColorScale(hex) {
|
|
2
|
+
const clamp = (v) => Math.min(255, Math.max(0, Math.round(v)));
|
|
3
|
+
const hexToRgb = (hex) => {
|
|
4
|
+
let h = hex.replace("#", "");
|
|
5
|
+
if (h.length === 3)
|
|
6
|
+
h = h.split("").map(c => c + c).join("");
|
|
7
|
+
const n = parseInt(h, 16);
|
|
8
|
+
return { r: (n >> 16) & 255, g: (n >> 8) & 255, b: n & 255 };
|
|
9
|
+
};
|
|
10
|
+
const rgbToHex = ({ r, g, b }) => `#${[r, g, b].map(v => clamp(v).toString(16).padStart(2, "0")).join("")}`;
|
|
11
|
+
const mix = (a, b, w) => ({
|
|
12
|
+
r: clamp(a.r * (1 - w) + b.r * w),
|
|
13
|
+
g: clamp(a.g * (1 - w) + b.g * w),
|
|
14
|
+
b: clamp(a.b * (1 - w) + b.b * w),
|
|
15
|
+
});
|
|
16
|
+
const luminance = ({ r, g, b }) => (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;
|
|
17
|
+
const base = hexToRgb(hex);
|
|
18
|
+
const lum = luminance(base);
|
|
19
|
+
const isLight = lum > 0.6;
|
|
20
|
+
const textRgb = isLight
|
|
21
|
+
? { r: 0, g: 0, b: 0 }
|
|
22
|
+
: { r: 255, g: 255, b: 255 };
|
|
23
|
+
// Determine mode
|
|
24
|
+
let mode = "other";
|
|
25
|
+
if (lum < 0.15)
|
|
26
|
+
mode = "black";
|
|
27
|
+
else if (lum > 0.9)
|
|
28
|
+
mode = "white";
|
|
29
|
+
let rgbW = { r: 255, g: 255, b: 255 };
|
|
30
|
+
let rgbB = { r: 0, g: 0, b: 0 };
|
|
31
|
+
let scale = {
|
|
32
|
+
mode,
|
|
33
|
+
// core
|
|
34
|
+
base: rgbToHex(base),
|
|
35
|
+
// lighter variants
|
|
36
|
+
light: rgbToHex(mix(base, rgbW, 0.15)),
|
|
37
|
+
lighter: rgbToHex(mix(base, rgbW, 0.35)),
|
|
38
|
+
// darker variants
|
|
39
|
+
dark: rgbToHex(mix(base, rgbB, 0.15)),
|
|
40
|
+
darker: rgbToHex(mix(base, rgbB, 0.35)),
|
|
41
|
+
// soft backgrounds
|
|
42
|
+
soft: rgbToHex(mix(base, rgbW, 0.85)),
|
|
43
|
+
softer: rgbToHex(mix(base, rgbW, 0.92)),
|
|
44
|
+
// text colors
|
|
45
|
+
text: isLight ? "#000000" : "#FFFFFF",
|
|
46
|
+
subtext: rgbToHex(mix(textRgb, base, 0.35)), // muted but readable
|
|
47
|
+
};
|
|
48
|
+
if (mode === "white") {
|
|
49
|
+
scale = Object.assign(Object.assign({}, scale), { light: rgbToHex(mix(base, rgbB, 0.20)), lighter: rgbToHex(mix(base, rgbB, 0.30)), dark: rgbToHex(mix(base, rgbB, 0.08)), darker: rgbToHex(mix(base, rgbB, 0.12)), soft: rgbToHex(mix(base, rgbB, 0.08)), softer: rgbToHex(mix(base, rgbB, 0.12)) });
|
|
50
|
+
}
|
|
51
|
+
else if (mode === "black") {
|
|
52
|
+
scale = Object.assign(Object.assign({}, scale), { light: rgbToHex(mix(base, rgbW, 0.20)), lighter: rgbToHex(mix(base, rgbW, 0.30)), dark: rgbToHex(mix(base, rgbW, 0.08)), darker: rgbToHex(mix(base, rgbW, 0.12)), soft: rgbToHex(mix(base, rgbW, 0.08)), softer: rgbToHex(mix(base, rgbW, 0.12)) });
|
|
53
|
+
}
|
|
54
|
+
return scale;
|
|
55
|
+
}exports.default=createColorScale;//# sourceMappingURL=createColorScale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createColorScale.js","sources":["../../src/theme/createColorScale.ts"],"sourcesContent":["export type ColorScale = {\r\n mode: \"black\" | \"white\" | \"other\"; // semantic color mode\r\n base: string;\r\n light: string;\r\n lighter: string;\r\n dark: string;\r\n darker: string;\r\n soft: string;\r\n softer: string;\r\n divider: string;\r\n text: string;\r\n subtext: string;\r\n};\r\n\r\nfunction createColorScale(hex: string): ColorScale {\r\n type RGB = { r: number; g: number; b: number };\r\n\r\n const clamp = (v: number): number =>\r\n Math.min(255, Math.max(0, Math.round(v)));\r\n\r\n const hexToRgb = (hex: string): RGB => {\r\n let h = hex.replace(\"#\", \"\");\r\n if (h.length === 3) h = h.split(\"\").map(c => c + c).join(\"\");\r\n const n = parseInt(h, 16);\r\n return { r: (n >> 16) & 255, g: (n >> 8) & 255, b: n & 255 };\r\n };\r\n\r\n const rgbToHex = ({ r, g, b }: RGB): string =>\r\n `#${[r, g, b].map(v => clamp(v).toString(16).padStart(2, \"0\")).join(\"\")}`;\r\n\r\n const mix = (a: RGB, b: RGB, w: number): RGB => ({\r\n r: clamp(a.r * (1 - w) + b.r * w),\r\n g: clamp(a.g * (1 - w) + b.g * w),\r\n b: clamp(a.b * (1 - w) + b.b * w),\r\n });\r\n\r\n const luminance = ({ r, g, b }: RGB): number =>\r\n (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;\r\n\r\n const base = hexToRgb(hex);\r\n const lum = luminance(base);\r\n const isLight = lum > 0.6;\r\n\r\n const textRgb: RGB = isLight\r\n ? { r: 0, g: 0, b: 0 }\r\n : { r: 255, g: 255, b: 255 };\r\n\r\n // Determine mode\r\n let mode: \"black\" | \"white\" | \"other\" = \"other\";\r\n if (lum < 0.15) mode = \"black\";\r\n else if (lum > 0.9) mode = \"white\";\r\n\r\n let rgbW = { r: 255, g: 255, b: 255 }\r\n let rgbB = { r: 0, g: 0, b: 0 }\r\n\r\n let scale: any = {\r\n mode,\r\n\r\n // core\r\n base: rgbToHex(base),\r\n\r\n // lighter variants\r\n light: rgbToHex(mix(base, rgbW, 0.15)),\r\n lighter: rgbToHex(mix(base, rgbW, 0.35)),\r\n\r\n // darker variants\r\n dark: rgbToHex(mix(base, rgbB, 0.15)),\r\n darker: rgbToHex(mix(base, rgbB, 0.35)),\r\n\r\n // soft backgrounds\r\n soft: rgbToHex(mix(base, rgbW, 0.85)),\r\n softer: rgbToHex(mix(base, rgbW, 0.92)),\r\n\r\n // text colors\r\n text: isLight ? \"#000000\" : \"#FFFFFF\",\r\n subtext: rgbToHex(mix(textRgb, base, 0.35)), // muted but readable\r\n };\r\n\r\n if (mode === \"white\") {\r\n scale = {\r\n ...scale,\r\n\r\n light: rgbToHex(mix(base, rgbB, 0.20)),\r\n lighter: rgbToHex(mix(base, rgbB, 0.30)),\r\n\r\n dark: rgbToHex(mix(base, rgbB, 0.08)),\r\n darker: rgbToHex(mix(base, rgbB, 0.12)),\r\n\r\n soft: rgbToHex(mix(base, rgbB, 0.08)),\r\n softer: rgbToHex(mix(base, rgbB, 0.12)),\r\n\r\n }\r\n } else if (mode === \"black\") {\r\n scale = {\r\n ...scale,\r\n\r\n light: rgbToHex(mix(base, rgbW, 0.20)),\r\n lighter: rgbToHex(mix(base, rgbW, 0.30)),\r\n\r\n dark: rgbToHex(mix(base, rgbW, 0.08)),\r\n darker: rgbToHex(mix(base, rgbW, 0.12)),\r\n\r\n soft: rgbToHex(mix(base, rgbW, 0.08)),\r\n softer: rgbToHex(mix(base, rgbW, 0.12)),\r\n\r\n }\r\n }\r\n\r\n return scale\r\n}\r\n\r\nexport default createColorScale;\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
function createColorScale(hex) {
|
|
2
|
+
const clamp = (v) => Math.min(255, Math.max(0, Math.round(v)));
|
|
3
|
+
const hexToRgb = (hex) => {
|
|
4
|
+
let h = hex.replace("#", "");
|
|
5
|
+
if (h.length === 3)
|
|
6
|
+
h = h.split("").map(c => c + c).join("");
|
|
7
|
+
const n = parseInt(h, 16);
|
|
8
|
+
return { r: (n >> 16) & 255, g: (n >> 8) & 255, b: n & 255 };
|
|
9
|
+
};
|
|
10
|
+
const rgbToHex = ({ r, g, b }) => `#${[r, g, b].map(v => clamp(v).toString(16).padStart(2, "0")).join("")}`;
|
|
11
|
+
const mix = (a, b, w) => ({
|
|
12
|
+
r: clamp(a.r * (1 - w) + b.r * w),
|
|
13
|
+
g: clamp(a.g * (1 - w) + b.g * w),
|
|
14
|
+
b: clamp(a.b * (1 - w) + b.b * w),
|
|
15
|
+
});
|
|
16
|
+
const luminance = ({ r, g, b }) => (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;
|
|
17
|
+
const base = hexToRgb(hex);
|
|
18
|
+
const lum = luminance(base);
|
|
19
|
+
const isLight = lum > 0.6;
|
|
20
|
+
const textRgb = isLight
|
|
21
|
+
? { r: 0, g: 0, b: 0 }
|
|
22
|
+
: { r: 255, g: 255, b: 255 };
|
|
23
|
+
// Determine mode
|
|
24
|
+
let mode = "other";
|
|
25
|
+
if (lum < 0.15)
|
|
26
|
+
mode = "black";
|
|
27
|
+
else if (lum > 0.9)
|
|
28
|
+
mode = "white";
|
|
29
|
+
let rgbW = { r: 255, g: 255, b: 255 };
|
|
30
|
+
let rgbB = { r: 0, g: 0, b: 0 };
|
|
31
|
+
let scale = {
|
|
32
|
+
mode,
|
|
33
|
+
// core
|
|
34
|
+
base: rgbToHex(base),
|
|
35
|
+
// lighter variants
|
|
36
|
+
light: rgbToHex(mix(base, rgbW, 0.15)),
|
|
37
|
+
lighter: rgbToHex(mix(base, rgbW, 0.35)),
|
|
38
|
+
// darker variants
|
|
39
|
+
dark: rgbToHex(mix(base, rgbB, 0.15)),
|
|
40
|
+
darker: rgbToHex(mix(base, rgbB, 0.35)),
|
|
41
|
+
// soft backgrounds
|
|
42
|
+
soft: rgbToHex(mix(base, rgbW, 0.85)),
|
|
43
|
+
softer: rgbToHex(mix(base, rgbW, 0.92)),
|
|
44
|
+
// text colors
|
|
45
|
+
text: isLight ? "#000000" : "#FFFFFF",
|
|
46
|
+
subtext: rgbToHex(mix(textRgb, base, 0.35)), // muted but readable
|
|
47
|
+
};
|
|
48
|
+
if (mode === "white") {
|
|
49
|
+
scale = Object.assign(Object.assign({}, scale), { light: rgbToHex(mix(base, rgbB, 0.20)), lighter: rgbToHex(mix(base, rgbB, 0.30)), dark: rgbToHex(mix(base, rgbB, 0.08)), darker: rgbToHex(mix(base, rgbB, 0.12)), soft: rgbToHex(mix(base, rgbB, 0.08)), softer: rgbToHex(mix(base, rgbB, 0.12)) });
|
|
50
|
+
}
|
|
51
|
+
else if (mode === "black") {
|
|
52
|
+
scale = Object.assign(Object.assign({}, scale), { light: rgbToHex(mix(base, rgbW, 0.20)), lighter: rgbToHex(mix(base, rgbW, 0.30)), dark: rgbToHex(mix(base, rgbW, 0.08)), darker: rgbToHex(mix(base, rgbW, 0.12)), soft: rgbToHex(mix(base, rgbW, 0.08)), softer: rgbToHex(mix(base, rgbW, 0.12)) });
|
|
53
|
+
}
|
|
54
|
+
return scale;
|
|
55
|
+
}export{createColorScale as default};//# sourceMappingURL=createColorScale.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createColorScale.mjs","sources":["../../src/theme/createColorScale.ts"],"sourcesContent":["export type ColorScale = {\r\n mode: \"black\" | \"white\" | \"other\"; // semantic color mode\r\n base: string;\r\n light: string;\r\n lighter: string;\r\n dark: string;\r\n darker: string;\r\n soft: string;\r\n softer: string;\r\n divider: string;\r\n text: string;\r\n subtext: string;\r\n};\r\n\r\nfunction createColorScale(hex: string): ColorScale {\r\n type RGB = { r: number; g: number; b: number };\r\n\r\n const clamp = (v: number): number =>\r\n Math.min(255, Math.max(0, Math.round(v)));\r\n\r\n const hexToRgb = (hex: string): RGB => {\r\n let h = hex.replace(\"#\", \"\");\r\n if (h.length === 3) h = h.split(\"\").map(c => c + c).join(\"\");\r\n const n = parseInt(h, 16);\r\n return { r: (n >> 16) & 255, g: (n >> 8) & 255, b: n & 255 };\r\n };\r\n\r\n const rgbToHex = ({ r, g, b }: RGB): string =>\r\n `#${[r, g, b].map(v => clamp(v).toString(16).padStart(2, \"0\")).join(\"\")}`;\r\n\r\n const mix = (a: RGB, b: RGB, w: number): RGB => ({\r\n r: clamp(a.r * (1 - w) + b.r * w),\r\n g: clamp(a.g * (1 - w) + b.g * w),\r\n b: clamp(a.b * (1 - w) + b.b * w),\r\n });\r\n\r\n const luminance = ({ r, g, b }: RGB): number =>\r\n (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;\r\n\r\n const base = hexToRgb(hex);\r\n const lum = luminance(base);\r\n const isLight = lum > 0.6;\r\n\r\n const textRgb: RGB = isLight\r\n ? { r: 0, g: 0, b: 0 }\r\n : { r: 255, g: 255, b: 255 };\r\n\r\n // Determine mode\r\n let mode: \"black\" | \"white\" | \"other\" = \"other\";\r\n if (lum < 0.15) mode = \"black\";\r\n else if (lum > 0.9) mode = \"white\";\r\n\r\n let rgbW = { r: 255, g: 255, b: 255 }\r\n let rgbB = { r: 0, g: 0, b: 0 }\r\n\r\n let scale: any = {\r\n mode,\r\n\r\n // core\r\n base: rgbToHex(base),\r\n\r\n // lighter variants\r\n light: rgbToHex(mix(base, rgbW, 0.15)),\r\n lighter: rgbToHex(mix(base, rgbW, 0.35)),\r\n\r\n // darker variants\r\n dark: rgbToHex(mix(base, rgbB, 0.15)),\r\n darker: rgbToHex(mix(base, rgbB, 0.35)),\r\n\r\n // soft backgrounds\r\n soft: rgbToHex(mix(base, rgbW, 0.85)),\r\n softer: rgbToHex(mix(base, rgbW, 0.92)),\r\n\r\n // text colors\r\n text: isLight ? \"#000000\" : \"#FFFFFF\",\r\n subtext: rgbToHex(mix(textRgb, base, 0.35)), // muted but readable\r\n };\r\n\r\n if (mode === \"white\") {\r\n scale = {\r\n ...scale,\r\n\r\n light: rgbToHex(mix(base, rgbB, 0.20)),\r\n lighter: rgbToHex(mix(base, rgbB, 0.30)),\r\n\r\n dark: rgbToHex(mix(base, rgbB, 0.08)),\r\n darker: rgbToHex(mix(base, rgbB, 0.12)),\r\n\r\n soft: rgbToHex(mix(base, rgbB, 0.08)),\r\n softer: rgbToHex(mix(base, rgbB, 0.12)),\r\n\r\n }\r\n } else if (mode === \"black\") {\r\n scale = {\r\n ...scale,\r\n\r\n light: rgbToHex(mix(base, rgbW, 0.20)),\r\n lighter: rgbToHex(mix(base, rgbW, 0.30)),\r\n\r\n dark: rgbToHex(mix(base, rgbW, 0.08)),\r\n darker: rgbToHex(mix(base, rgbW, 0.12)),\r\n\r\n soft: rgbToHex(mix(base, rgbW, 0.08)),\r\n softer: rgbToHex(mix(base, rgbW, 0.12)),\r\n\r\n }\r\n }\r\n\r\n return scale\r\n}\r\n\r\nexport default createColorScale;\r\n"],"names":[],"mappings":"AAcA,SAAS,gBAAgB,CAAC,GAAW,EAAA;IAGlC,MAAM,KAAK,GAAG,CAAC,CAAS,KACrB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5C,IAAA,MAAM,QAAQ,GAAG,CAAC,GAAW,KAAS;QACnC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE;AAC/D,IAAA,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAO,KAC/B,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAE;IAE5E,MAAM,GAAG,GAAG,CAAC,CAAM,EAAE,CAAM,EAAE,CAAS,MAAW;AAC9C,QAAA,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,QAAA,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,QAAA,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACnC,KAAA,CAAC;AAEF,IAAA,MAAM,SAAS,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAO,KAChC,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,GAAG;AAE/C,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC;AAC1B,IAAA,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC;AAC3B,IAAA,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG;IAEzB,MAAM,OAAO,GAAQ;AAClB,UAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACpB,UAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;;IAG/B,IAAI,IAAI,GAAgC,OAAO;IAC/C,IAAI,GAAG,GAAG,IAAI;QAAE,IAAI,GAAG,OAAO;SACzB,IAAI,GAAG,GAAG,GAAG;QAAE,IAAI,GAAG,OAAO;AAElC,IAAA,IAAI,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AACrC,IAAA,IAAI,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAE/B,IAAA,IAAI,KAAK,GAAQ;QACd,IAAI;;AAGJ,QAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;;QAGpB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;;QAGxC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;;QAGvC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;;QAGvC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;AACrC,QAAA,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KAC7C;AAED,IAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AACnB,QAAA,KAAK,mCACC,KAAK,CAAA,EAAA,EAER,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EACtC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAExC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EACrC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAEvC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EACrC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,GAEzC;IACJ;AAAO,SAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AAC1B,QAAA,KAAK,mCACC,KAAK,CAAA,EAAA,EAER,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EACtC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAExC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EACrC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAEvC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EACrC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,GAEzC;IACJ;AAEA,IAAA,OAAO,KAAK;AACf"}
|
package/theme/createTheme.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ThemeOptionInput, ThemeOptions } from './types.js';
|
|
2
2
|
|
|
3
|
-
declare const createTheme: (name: string, options: ThemeOptionInput
|
|
3
|
+
declare const createTheme: (name: string, options: ThemeOptionInput) => ThemeOptions;
|
|
4
4
|
|
|
5
5
|
export { createTheme };
|
package/theme/createTheme.js
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
|
-
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var core=require('./core.js'),index=require('../css/index.js'),ThemeDefaultOptions=require('./ThemeDefaultOptions.js');const createTheme = (name, options
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var core=require('./core.js'),index=require('../css/index.js'),ThemeDefaultOptions=require('./ThemeDefaultOptions.js'),createColorScale=require('./createColorScale.js');const createTheme = (name, options) => {
|
|
2
2
|
if (core.ThemeFactory.has(name)) {
|
|
3
3
|
console.error(`createTheme: The theme '${name}' is already defined. Please choose a different name for the theme.`);
|
|
4
4
|
return core.ThemeFactory.get(name);
|
|
5
5
|
}
|
|
6
|
-
let theme = core.mergeObject(
|
|
6
|
+
let theme = core.mergeObject(ThemeDefaultOptions.lightThemeOptions, Object.assign(Object.assign({}, options), { name, breakpoints: index.breakpoints }));
|
|
7
|
+
// create color scales if needed
|
|
8
|
+
for (let key in theme.colors) {
|
|
9
|
+
const color = theme.colors[key];
|
|
10
|
+
if (typeof color === "string") {
|
|
11
|
+
theme.colors[key] = createColorScale.default(color);
|
|
12
|
+
delete theme.colors[key].mode;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
const c = createColorScale.default(color.base);
|
|
16
|
+
delete c.mode;
|
|
17
|
+
theme.colors[key] = Object.assign(Object.assign({}, c), theme.colors[key]);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const c = createColorScale.default(theme.colors.common.base);
|
|
21
|
+
theme.isDark = c.mode === "black";
|
|
7
22
|
core.ThemeFactory.set(name, theme);
|
|
8
23
|
return theme;
|
|
9
24
|
};exports.createTheme=createTheme;//# sourceMappingURL=createTheme.js.map
|
package/theme/createTheme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTheme.js","sources":["../../src/theme/createTheme.ts"],"sourcesContent":["import { ThemeOptions, ThemeOptionInput } from \"./types\"\r\nimport { mergeObject, ThemeFactory } from \"./core\"\r\nimport { breakpoints } from \"../css\"\r\nimport {
|
|
1
|
+
{"version":3,"file":"createTheme.js","sources":["../../src/theme/createTheme.ts"],"sourcesContent":["import { ThemeOptions, ThemeOptionInput } from \"./types\"\r\nimport { mergeObject, ThemeFactory } from \"./core\"\r\nimport { breakpoints } from \"../css\"\r\nimport { lightThemeOptions } from \"./ThemeDefaultOptions\"\r\nimport createColorScale from \"./createColorScale\"\r\n\r\nexport const createTheme = (name: string, options: ThemeOptionInput): ThemeOptions => {\r\n if (ThemeFactory.has(name)) {\r\n console.error(`createTheme: The theme '${name}' is already defined. Please choose a different name for the theme.`)\r\n return ThemeFactory.get(name) as ThemeOptions\r\n }\r\n\r\n let theme: any = mergeObject(lightThemeOptions, {\r\n ...options,\r\n name,\r\n breakpoints: breakpoints\r\n })\r\n\r\n // create color scales if needed\r\n for (let key in theme.colors) {\r\n const color = theme.colors[key]\r\n if (typeof color === \"string\") {\r\n theme.colors[key] = createColorScale(color)\r\n delete theme.colors[key].mode\r\n } else {\r\n const c = createColorScale(color.base)\r\n delete (c as any).mode\r\n theme.colors[key] = {\r\n ...c,\r\n ...theme.colors[key],\r\n }\r\n }\r\n }\r\n\r\n const c = createColorScale(theme.colors.common.base)\r\n theme.isDark = c.mode === \"black\"\r\n\r\n ThemeFactory.set(name, theme)\r\n\r\n return theme as ThemeOptions\r\n}\r\n"],"names":["ThemeFactory","mergeObject","lightThemeOptions","breakpoints","createColorScale"],"mappings":"qPAMa,WAAW,GAAG,CAAC,IAAY,EAAE,OAAyB,KAAkB;AAClF,IAAA,IAAIA,iBAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACzB,QAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAA,mEAAA,CAAqE,CAAC;AACnH,QAAA,OAAOA,iBAAY,CAAC,GAAG,CAAC,IAAI,CAAiB;IAChD;AAEA,IAAA,IAAI,KAAK,GAAQC,gBAAW,CAACC,qCAAiB,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACxC,OAAO,CAAA,EAAA,EACV,IAAI,EACJ,WAAW,EAAEC,iBAAW,IACzB;;AAGF,IAAA,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AAC/B,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC5B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAGC,wBAAgB,CAAC,KAAK,CAAC;YAC3C,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI;QAChC;aAAO;YACJ,MAAM,CAAC,GAAGA,wBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;YACtC,OAAQ,CAAS,CAAC,IAAI;AACtB,YAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACX,CAAC,CAAA,EACD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CACtB;QACJ;IACH;AAEA,IAAA,MAAM,CAAC,GAAGA,wBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IACpD,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO;AAEjC,IAAAJ,iBAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AAE7B,IAAA,OAAO,KAAqB;AAC/B"}
|
package/theme/createTheme.mjs
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
|
-
import {ThemeFactory,mergeObject}from'./core.mjs';import {breakpoints}from'../css/index.mjs';import {lightThemeOptions
|
|
1
|
+
import {ThemeFactory,mergeObject}from'./core.mjs';import {breakpoints}from'../css/index.mjs';import {lightThemeOptions}from'./ThemeDefaultOptions.mjs';import createColorScale from'./createColorScale.mjs';const createTheme = (name, options) => {
|
|
2
2
|
if (ThemeFactory.has(name)) {
|
|
3
3
|
console.error(`createTheme: The theme '${name}' is already defined. Please choose a different name for the theme.`);
|
|
4
4
|
return ThemeFactory.get(name);
|
|
5
5
|
}
|
|
6
|
-
let theme = mergeObject(
|
|
6
|
+
let theme = mergeObject(lightThemeOptions, Object.assign(Object.assign({}, options), { name, breakpoints: breakpoints }));
|
|
7
|
+
// create color scales if needed
|
|
8
|
+
for (let key in theme.colors) {
|
|
9
|
+
const color = theme.colors[key];
|
|
10
|
+
if (typeof color === "string") {
|
|
11
|
+
theme.colors[key] = createColorScale(color);
|
|
12
|
+
delete theme.colors[key].mode;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
const c = createColorScale(color.base);
|
|
16
|
+
delete c.mode;
|
|
17
|
+
theme.colors[key] = Object.assign(Object.assign({}, c), theme.colors[key]);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const c = createColorScale(theme.colors.common.base);
|
|
21
|
+
theme.isDark = c.mode === "black";
|
|
7
22
|
ThemeFactory.set(name, theme);
|
|
8
23
|
return theme;
|
|
9
24
|
};export{createTheme};//# sourceMappingURL=createTheme.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTheme.mjs","sources":["../../src/theme/createTheme.ts"],"sourcesContent":["import { ThemeOptions, ThemeOptionInput } from \"./types\"\r\nimport { mergeObject, ThemeFactory } from \"./core\"\r\nimport { breakpoints } from \"../css\"\r\nimport {
|
|
1
|
+
{"version":3,"file":"createTheme.mjs","sources":["../../src/theme/createTheme.ts"],"sourcesContent":["import { ThemeOptions, ThemeOptionInput } from \"./types\"\r\nimport { mergeObject, ThemeFactory } from \"./core\"\r\nimport { breakpoints } from \"../css\"\r\nimport { lightThemeOptions } from \"./ThemeDefaultOptions\"\r\nimport createColorScale from \"./createColorScale\"\r\n\r\nexport const createTheme = (name: string, options: ThemeOptionInput): ThemeOptions => {\r\n if (ThemeFactory.has(name)) {\r\n console.error(`createTheme: The theme '${name}' is already defined. Please choose a different name for the theme.`)\r\n return ThemeFactory.get(name) as ThemeOptions\r\n }\r\n\r\n let theme: any = mergeObject(lightThemeOptions, {\r\n ...options,\r\n name,\r\n breakpoints: breakpoints\r\n })\r\n\r\n // create color scales if needed\r\n for (let key in theme.colors) {\r\n const color = theme.colors[key]\r\n if (typeof color === \"string\") {\r\n theme.colors[key] = createColorScale(color)\r\n delete theme.colors[key].mode\r\n } else {\r\n const c = createColorScale(color.base)\r\n delete (c as any).mode\r\n theme.colors[key] = {\r\n ...c,\r\n ...theme.colors[key],\r\n }\r\n }\r\n }\r\n\r\n const c = createColorScale(theme.colors.common.base)\r\n theme.isDark = c.mode === \"black\"\r\n\r\n ThemeFactory.set(name, theme)\r\n\r\n return theme as ThemeOptions\r\n}\r\n"],"names":[],"mappings":"kNAMa,WAAW,GAAG,CAAC,IAAY,EAAE,OAAyB,KAAkB;AAClF,IAAA,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACzB,QAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAA,mEAAA,CAAqE,CAAC;AACnH,QAAA,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAiB;IAChD;AAEA,IAAA,IAAI,KAAK,GAAQ,WAAW,CAAC,iBAAiB,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACxC,OAAO,CAAA,EAAA,EACV,IAAI,EACJ,WAAW,EAAE,WAAW,IACzB;;AAGF,IAAA,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AAC/B,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC5B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC;YAC3C,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI;QAChC;aAAO;YACJ,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;YACtC,OAAQ,CAAS,CAAC,IAAI;AACtB,YAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACX,CAAC,CAAA,EACD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CACtB;QACJ;IACH;AAEA,IAAA,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IACpD,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO;AAEjC,IAAA,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AAE7B,IAAA,OAAO,KAAqB;AAC/B"}
|
package/theme/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var core=require('./core.js');require('../css/getValue.js'),require('oncss')
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var core=require('./core.js');require('../css/getValue.js'),require('oncss');var ThemeProvider=require('./ThemeProvider.js');require('react-state-bucket');const themeRootClass = (theme) => `.xui-${theme}-theme-root`;exports.getTheme=core.getTheme;exports.useTheme=core.useTheme;exports.ThemeProvider=ThemeProvider.default;exports.themeRootClass=themeRootClass;//# sourceMappingURL=index.js.map
|
package/theme/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/theme/index.tsx"],"sourcesContent":["import { createTheme } from \"./createTheme\"\r\nimport ThemeProvider from './ThemeProvider'\r\nimport createThemeSwitcher from './createThemeSwitcher'\r\nimport { getTheme, useTheme } from './core'\r\nexport type { ThemeProviderProps } from './ThemeProvider'\r\nexport type { ThemeSwitcherOption } from './createThemeSwitcher'\r\n\r\nexport const themeRootClass = (theme: string) => `.xui-${theme}-theme-root`\r\n\r\nexport {\r\n ThemeProvider,\r\n createThemeSwitcher,\r\n createTheme,\r\n getTheme,\r\n useTheme\r\n}\r\n\r\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/theme/index.tsx"],"sourcesContent":["import { createTheme } from \"./createTheme\"\r\nimport ThemeProvider from './ThemeProvider'\r\nimport createThemeSwitcher from './createThemeSwitcher'\r\nimport { getTheme, useTheme } from './core'\r\nimport createColorScale from \"./createColorScale\"\r\nexport type { ThemeProviderProps } from './ThemeProvider'\r\nexport type { ThemeSwitcherOption } from './createThemeSwitcher'\r\n\r\nexport const themeRootClass = (theme: string) => `.xui-${theme}-theme-root`\r\n\r\nexport {\r\n ThemeProvider,\r\n createThemeSwitcher,\r\n createTheme,\r\n createColorScale,\r\n getTheme,\r\n useTheme\r\n}\r\n\r\n"],"names":[],"mappings":"iOAQO,MAAM,cAAc,GAAG,CAAC,KAAa,KAAK,CAAA,KAAA,EAAQ,KAAK,CAAA,WAAA"}
|
package/theme/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getTheme,useTheme}from'./core.mjs';import'../css/getValue.mjs';import'oncss';
|
|
1
|
+
export{getTheme,useTheme}from'./core.mjs';import'../css/getValue.mjs';import'oncss';export{default as ThemeProvider}from'./ThemeProvider.mjs';import'react-state-bucket';const themeRootClass = (theme) => `.xui-${theme}-theme-root`;export{themeRootClass};//# sourceMappingURL=index.mjs.map
|
package/theme/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/theme/index.tsx"],"sourcesContent":["import { createTheme } from \"./createTheme\"\r\nimport ThemeProvider from './ThemeProvider'\r\nimport createThemeSwitcher from './createThemeSwitcher'\r\nimport { getTheme, useTheme } from './core'\r\nexport type { ThemeProviderProps } from './ThemeProvider'\r\nexport type { ThemeSwitcherOption } from './createThemeSwitcher'\r\n\r\nexport const themeRootClass = (theme: string) => `.xui-${theme}-theme-root`\r\n\r\nexport {\r\n ThemeProvider,\r\n createThemeSwitcher,\r\n createTheme,\r\n getTheme,\r\n useTheme\r\n}\r\n\r\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/theme/index.tsx"],"sourcesContent":["import { createTheme } from \"./createTheme\"\r\nimport ThemeProvider from './ThemeProvider'\r\nimport createThemeSwitcher from './createThemeSwitcher'\r\nimport { getTheme, useTheme } from './core'\r\nimport createColorScale from \"./createColorScale\"\r\nexport type { ThemeProviderProps } from './ThemeProvider'\r\nexport type { ThemeSwitcherOption } from './createThemeSwitcher'\r\n\r\nexport const themeRootClass = (theme: string) => `.xui-${theme}-theme-root`\r\n\r\nexport {\r\n ThemeProvider,\r\n createThemeSwitcher,\r\n createTheme,\r\n createColorScale,\r\n getTheme,\r\n useTheme\r\n}\r\n\r\n"],"names":[],"mappings":"yKAQO,MAAM,cAAc,GAAG,CAAC,KAAa,KAAK,CAAA,KAAA,EAAQ,KAAK,CAAA,WAAA"}
|
package/theme/types.d.ts
CHANGED
|
@@ -1,28 +1,22 @@
|
|
|
1
1
|
import { GlobalCSS, BreakpointKeys } from '../css/types.js';
|
|
2
|
+
import { ColorScale } from './createColorScale.js';
|
|
2
3
|
|
|
3
4
|
type ObjectType = {
|
|
4
5
|
[key: string]: any;
|
|
5
6
|
};
|
|
6
|
-
type ThemeColorItem = {
|
|
7
|
-
primary: string;
|
|
8
|
-
secondary: string;
|
|
9
|
-
text: string;
|
|
10
|
-
};
|
|
11
7
|
type ThemeTypographyItem = {
|
|
12
8
|
fontSize: number;
|
|
13
9
|
lineHeight: number;
|
|
14
10
|
fontWeight: number;
|
|
15
11
|
};
|
|
16
12
|
type ThemeColor = {
|
|
17
|
-
common:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
warning: ThemeColorItem;
|
|
25
|
-
danger: ThemeColorItem;
|
|
13
|
+
common: ColorScale;
|
|
14
|
+
brand: ColorScale;
|
|
15
|
+
accent: ColorScale;
|
|
16
|
+
success: ColorScale;
|
|
17
|
+
info: ColorScale;
|
|
18
|
+
warning: ColorScale;
|
|
19
|
+
danger: ColorScale;
|
|
26
20
|
};
|
|
27
21
|
type ThemeTypographyType = {
|
|
28
22
|
h1: ThemeTypographyItem;
|
|
@@ -38,6 +32,7 @@ type ThemeTypographyType = {
|
|
|
38
32
|
};
|
|
39
33
|
interface ThemeOptions {
|
|
40
34
|
name: string;
|
|
35
|
+
isDark: boolean;
|
|
41
36
|
rtl: boolean;
|
|
42
37
|
globalStyle: GlobalCSS;
|
|
43
38
|
breakpoints: {
|
|
@@ -50,12 +45,19 @@ interface ThemeOptions {
|
|
|
50
45
|
colors: ThemeColor;
|
|
51
46
|
typography: ThemeTypographyType;
|
|
52
47
|
}
|
|
53
|
-
type ThemeColorItemInput =
|
|
54
|
-
|
|
48
|
+
type ThemeColorItemInput = string | {
|
|
49
|
+
base: string;
|
|
50
|
+
light?: string;
|
|
51
|
+
lighter?: string;
|
|
52
|
+
dark?: string;
|
|
53
|
+
darker?: string;
|
|
54
|
+
soft?: string;
|
|
55
|
+
softer?: string;
|
|
56
|
+
text?: string;
|
|
57
|
+
subtext?: string;
|
|
58
|
+
};
|
|
55
59
|
type ThemeColorInput = {
|
|
56
60
|
common?: ThemeColorItemInput;
|
|
57
|
-
text?: Omit<ThemeColorItem, "text">;
|
|
58
|
-
divider?: Omit<ThemeColorItem, "text">;
|
|
59
61
|
brand?: ThemeColorItemInput;
|
|
60
62
|
accent?: ThemeColorItemInput;
|
|
61
63
|
success?: ThemeColorItemInput;
|
|
@@ -63,6 +65,7 @@ type ThemeColorInput = {
|
|
|
63
65
|
warning?: ThemeColorItemInput;
|
|
64
66
|
danger?: ThemeColorItemInput;
|
|
65
67
|
};
|
|
68
|
+
type ThemeTypographyItemInput = Partial<ThemeTypographyItem>;
|
|
66
69
|
type ThemeTypographyInputType = {
|
|
67
70
|
h1?: ThemeTypographyItemInput;
|
|
68
71
|
h2?: ThemeTypographyItemInput;
|
|
@@ -84,6 +87,6 @@ interface ThemeOptionInput {
|
|
|
84
87
|
typography?: ThemeTypographyInputType;
|
|
85
88
|
}
|
|
86
89
|
type TypographyRefTypes = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "text" | "button" | "small";
|
|
87
|
-
type ColorsRefTypes = "common.
|
|
90
|
+
type ColorsRefTypes = "common" | "common.light" | "common.lighter" | "common.dark" | "common.darker" | "common.soft" | "common.softer" | "common.text" | "common.subtext" | "brand" | "brand.light" | "brand.lighter" | "brand.dark" | "brand.darker" | "brand.soft" | "brand.softer" | "brand.text" | "brand.subtext" | "accent" | "accent.light" | "accent.lighter" | "accent.dark" | "accent.darker" | "accent.soft" | "accent.softer" | "accent.text" | "accent.subtext" | "info" | "info.light" | "info.lighter" | "info.dark" | "info.darker" | "info.soft" | "info.softer" | "info.text" | "info.subtext" | "success" | "success.light" | "success.lighter" | "success.dark" | "success.darker" | "success.soft" | "success.softer" | "success.text" | "success.subtext" | "warning" | "warning.light" | "warning.lighter" | "warning.dark" | "warning.darker" | "warning.soft" | "warning.softer" | "warning.text" | "warning.subtext" | "danger" | "danger.light" | "danger.lighter" | "danger.dark" | "danger.darker" | "danger.soft" | "danger.softer" | "danger.text" | "danger.subtext";
|
|
88
91
|
|
|
89
|
-
export type { ColorsRefTypes, ObjectType, ThemeColor, ThemeColorInput,
|
|
92
|
+
export type { ColorsRefTypes, ObjectType, ThemeColor, ThemeColorInput, ThemeColorItemInput, ThemeOptionInput, ThemeOptions, ThemeTypographyInputType, ThemeTypographyItem, ThemeTypographyItemInput, ThemeTypographyType, TypographyRefTypes };
|