@xanui/core 1.3.8 → 1.3.9

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.
Files changed (73) hide show
  1. package/AppRoot/index.cjs +5 -4
  2. package/AppRoot/index.cjs.map +1 -1
  3. package/AppRoot/index.d.ts +2 -1
  4. package/AppRoot/index.js +5 -4
  5. package/AppRoot/index.js.map +1 -1
  6. package/Iframe/index.cjs +1 -0
  7. package/Iframe/index.cjs.map +1 -1
  8. package/Iframe/index.js +1 -0
  9. package/Iframe/index.js.map +1 -1
  10. package/Tag/types.d.ts +1 -1
  11. package/Tag/useTagProps.cjs +5 -1
  12. package/Tag/useTagProps.cjs.map +1 -1
  13. package/Tag/useTagProps.js +5 -1
  14. package/Tag/useTagProps.js.map +1 -1
  15. package/Transition/index.cjs +1 -1
  16. package/Transition/index.cjs.map +1 -1
  17. package/Transition/index.d.ts +7 -2
  18. package/Transition/index.js +1 -1
  19. package/Transition/index.js.map +1 -1
  20. package/css/getProps.cjs +9 -6
  21. package/css/getProps.cjs.map +1 -1
  22. package/css/getProps.js +9 -6
  23. package/css/getProps.js.map +1 -1
  24. package/css/getValue.cjs +11 -10
  25. package/css/getValue.cjs.map +1 -1
  26. package/css/getValue.js +11 -10
  27. package/css/getValue.js.map +1 -1
  28. package/css/index.cjs +0 -32
  29. package/css/index.cjs.map +1 -1
  30. package/css/index.d.ts +1 -4
  31. package/css/index.js +1 -30
  32. package/css/index.js.map +1 -1
  33. package/hooks/useColorTemplate.cjs +26 -29
  34. package/hooks/useColorTemplate.cjs.map +1 -1
  35. package/hooks/useColorTemplate.d.ts +8 -6
  36. package/hooks/useColorTemplate.js +26 -29
  37. package/hooks/useColorTemplate.js.map +1 -1
  38. package/hooks/useInterface.cjs +1 -0
  39. package/hooks/useInterface.cjs.map +1 -1
  40. package/hooks/useInterface.d.ts +1 -3
  41. package/hooks/useInterface.js +1 -0
  42. package/hooks/useInterface.js.map +1 -1
  43. package/index.cjs +0 -3
  44. package/index.cjs.map +1 -1
  45. package/index.d.ts +3 -3
  46. package/index.js +1 -1
  47. package/package.json +1 -1
  48. package/readme.md +2 -2
  49. package/theme/ThemeCssVars.cjs +36 -147
  50. package/theme/ThemeCssVars.cjs.map +1 -1
  51. package/theme/ThemeCssVars.js +36 -147
  52. package/theme/ThemeCssVars.js.map +1 -1
  53. package/theme/ThemeDefaultOptions.cjs +20 -86
  54. package/theme/ThemeDefaultOptions.cjs.map +1 -1
  55. package/theme/ThemeDefaultOptions.js +20 -86
  56. package/theme/ThemeDefaultOptions.js.map +1 -1
  57. package/theme/ThemeProvider.cjs +2 -2
  58. package/theme/ThemeProvider.cjs.map +1 -1
  59. package/theme/ThemeProvider.js +2 -2
  60. package/theme/ThemeProvider.js.map +1 -1
  61. package/theme/core.cjs +14 -9
  62. package/theme/core.cjs.map +1 -1
  63. package/theme/core.js +15 -10
  64. package/theme/core.js.map +1 -1
  65. package/theme/index.cjs +3 -0
  66. package/theme/index.cjs.map +1 -1
  67. package/theme/index.js +1 -0
  68. package/theme/index.js.map +1 -1
  69. package/theme/oklch.cjs +249 -0
  70. package/theme/oklch.cjs.map +1 -0
  71. package/theme/oklch.js +246 -0
  72. package/theme/oklch.js.map +1 -0
  73. package/theme/types.d.ts +26 -72
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/theme/index.tsx"],"sourcesContent":["\"use client\"\nimport ThemeProvider from './ThemeProvider'\nimport { useTheme, createTheme } from './core'\nimport { lightThemeOptions, darkThemeOptions } from './ThemeDefaultOptions'\nexport type { ThemeProviderProps } from './ThemeProvider'\n\nexport const themeRootClass = (theme: string) => `.xui-${theme}-theme-root`\n\nexport {\n ThemeProvider,\n createTheme,\n useTheme,\n lightThemeOptions,\n darkThemeOptions\n}\n\n"],"names":[],"mappings":";;;;;;;;;;;AAMO;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/theme/index.tsx"],"sourcesContent":["\"use client\"\nimport ThemeProvider from './ThemeProvider'\nimport { useTheme, createTheme } from './core'\nimport { lightThemeOptions, darkThemeOptions } from './ThemeDefaultOptions'\nexport type { ThemeProviderProps } from './ThemeProvider'\n\nexport const themeRootClass = (theme: string) => `.xui-${theme}-theme-root`\n\nexport {\n ThemeProvider,\n createTheme,\n useTheme,\n lightThemeOptions,\n darkThemeOptions\n}\n\n"],"names":[],"mappings":";;;;;;;;;;;;AAMO;;"}
@@ -0,0 +1,249 @@
1
+ 'use strict';
2
+
3
+ /* ---------------- PARSERS ---------------- */
4
+ function toOKLCH(input) {
5
+ if (input.startsWith("oklch")) {
6
+ const values = input.match(/[\d.]+/g);
7
+ if (!values || values.length < 3) {
8
+ throw new Error("Invalid OKLCH format");
9
+ }
10
+ let [l, c, h] = values.map(Number);
11
+ return {
12
+ l: l > 1 ? l / 100 : l,
13
+ c,
14
+ h,
15
+ };
16
+ }
17
+ const rgb = parseToRgb(input);
18
+ const lab = rgbToOklab(rgb.r, rgb.g, rgb.b);
19
+ return oklabToOklch(lab.L, lab.a, lab.b);
20
+ }
21
+ function parseToRgb(input) {
22
+ input = input.trim().toLowerCase();
23
+ if (input.startsWith("#"))
24
+ return parseHex(input);
25
+ if (input.startsWith("rgb"))
26
+ return parseRgb(input);
27
+ if (input.startsWith("hsl"))
28
+ return parseHsl(input);
29
+ throw new Error("Unsupported format");
30
+ }
31
+ /* ---------------- CORE MATH ---------------- */
32
+ function srgbToLinear(c) {
33
+ return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
34
+ }
35
+ function rgbToOklab(r, g, b) {
36
+ r = srgbToLinear(r);
37
+ g = srgbToLinear(g);
38
+ b = srgbToLinear(b);
39
+ const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;
40
+ const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;
41
+ const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;
42
+ const l_ = Math.cbrt(l);
43
+ const m_ = Math.cbrt(m);
44
+ const s_ = Math.cbrt(s);
45
+ return {
46
+ L: 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,
47
+ a: 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,
48
+ b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_,
49
+ };
50
+ }
51
+ function oklabToOklch(L, a, b) {
52
+ const c = Math.sqrt(a * a + b * b);
53
+ let h = Math.atan2(b, a) * (180 / Math.PI);
54
+ if (h < 0)
55
+ h += 360;
56
+ return { l: L, c, h };
57
+ }
58
+ /* ---------------- FORMAT ---------------- */
59
+ function formatOklch(color, alpha = 1) {
60
+ const l = (color.l * 100).toFixed(2) + "%";
61
+ const c = color.c.toFixed(4);
62
+ const h = color.h.toFixed(2);
63
+ return alpha === 1
64
+ ? `oklch(${l} ${c} ${h})`
65
+ : `oklch(${l} ${c} ${h} / ${alpha})`;
66
+ }
67
+ /* ---------------- UTILS ---------------- */
68
+ function clamp(v, min = 0, max = 1) {
69
+ return Math.min(max, Math.max(min, v));
70
+ }
71
+ function createPalette(input) {
72
+ const base = toOKLCH(input);
73
+ const isTrueBlack = base.l < 0.2 && base.c < 0.02;
74
+ const isTrueWhite = base.l > 0.92 && base.c < 0.015;
75
+ const isDark = base.l < 0.75;
76
+ if (isTrueBlack) {
77
+ return {
78
+ main: formatOklch(base),
79
+ light: formatOklch({
80
+ l: clamp(base.l + (1 - base.l) * 0.10),
81
+ c: base.c * 0.85,
82
+ h: base.h,
83
+ }),
84
+ dark: formatOklch({
85
+ l: 0.04,
86
+ c: 0.005,
87
+ h: base.h,
88
+ }),
89
+ muted: formatOklch({
90
+ l: 0.72,
91
+ c: 0.01,
92
+ h: base.h,
93
+ }),
94
+ disabled: formatOklch({
95
+ l: 0.30,
96
+ c: 0,
97
+ h: base.h,
98
+ }),
99
+ contrast: formatOklch({
100
+ l: 0.98,
101
+ c: 0.01,
102
+ h: base.h,
103
+ }),
104
+ divider: formatOklch({
105
+ l: 0.30,
106
+ c: 0.002,
107
+ h: 0,
108
+ }),
109
+ ghost: formatOklch({
110
+ l: clamp(base.l + (1 - base.l) * 0.10),
111
+ c: base.c * 0.85,
112
+ h: base.h,
113
+ }, 0.6),
114
+ };
115
+ }
116
+ if (isTrueWhite) {
117
+ return {
118
+ main: formatOklch(base),
119
+ light: formatOklch({
120
+ l: 0.95,
121
+ c: 0,
122
+ h: base.h
123
+ }),
124
+ dark: formatOklch({
125
+ l: 0.86,
126
+ c: 0,
127
+ h: base.h,
128
+ }),
129
+ muted: formatOklch({
130
+ l: 0.55,
131
+ c: 0,
132
+ h: base.h,
133
+ }),
134
+ disabled: formatOklch({
135
+ l: 0.75,
136
+ c: 0,
137
+ h: base.h,
138
+ }),
139
+ contrast: formatOklch({
140
+ l: 0.15,
141
+ c: 0,
142
+ h: base.h,
143
+ }),
144
+ divider: formatOklch({
145
+ l: 0.85,
146
+ c: 0,
147
+ h: 0,
148
+ }),
149
+ ghost: formatOklch({
150
+ l: 0.85,
151
+ c: 0,
152
+ h: base.h
153
+ }, 0.2),
154
+ };
155
+ }
156
+ return {
157
+ main: formatOklch(base),
158
+ light: formatOklch({
159
+ l: clamp(base.l + 0.10),
160
+ c: clamp(base.c * 1.2),
161
+ h: base.h
162
+ }),
163
+ dark: formatOklch({
164
+ l: clamp(base.l - 0.06),
165
+ c: clamp(base.c * 1),
166
+ h: base.h
167
+ }),
168
+ muted: formatOklch({
169
+ l: clamp(base.l + (isDark ? 0.25 : -0.25)),
170
+ c: clamp(base.c * 0.22),
171
+ h: base.h
172
+ }),
173
+ disabled: formatOklch({
174
+ l: clamp(base.l + (isDark ? 0.01 : -0.01)),
175
+ c: clamp(base.c * 0.15),
176
+ h: base.h
177
+ }),
178
+ contrast: formatOklch({
179
+ l: isDark ? 0.97 : 0.11,
180
+ c: 0.01,
181
+ h: base.h
182
+ }),
183
+ divider: formatOklch({
184
+ l: clamp(base.l - 0.20),
185
+ c: clamp(base.c * 1.08),
186
+ h: base.h
187
+ }, .3),
188
+ ghost: formatOklch(base, isDark ? 0.1 : .22),
189
+ };
190
+ }
191
+ /* ---------------- PARSERS ---------------- */
192
+ function parseHex(hex) {
193
+ hex = hex.replace("#", "").trim();
194
+ if (hex.length === 3) {
195
+ hex = hex.split("").map(c => c + c).join("");
196
+ }
197
+ const num = parseInt(hex, 16);
198
+ return {
199
+ r: ((num >> 16) & 255) / 255,
200
+ g: ((num >> 8) & 255) / 255,
201
+ b: (num & 255) / 255,
202
+ };
203
+ }
204
+ function parseRgb(input) {
205
+ const values = input.match(/[\d.]+/g);
206
+ if (!values || values.length < 3) {
207
+ throw new Error("Invalid RGB format");
208
+ }
209
+ const [r, g, b] = values.map(Number);
210
+ return {
211
+ r: r / 255,
212
+ g: g / 255,
213
+ b: b / 255,
214
+ };
215
+ }
216
+ function parseHsl(input) {
217
+ const values = input.match(/[\d.]+/g);
218
+ if (!values || values.length < 3) {
219
+ throw new Error("Invalid HSL format");
220
+ }
221
+ let [h, s, l] = values.map(Number);
222
+ h /= 360;
223
+ s /= 100;
224
+ l /= 100;
225
+ const hue2rgb = (p, q, t) => {
226
+ if (t < 0)
227
+ t += 1;
228
+ if (t > 1)
229
+ t -= 1;
230
+ if (t < 1 / 6)
231
+ return p + (q - p) * 6 * t;
232
+ if (t < 1 / 2)
233
+ return q;
234
+ if (t < 2 / 3)
235
+ return p + (q - p) * (2 / 3 - t) * 6;
236
+ return p;
237
+ };
238
+ const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
239
+ const p = 2 * l - q;
240
+ return {
241
+ r: hue2rgb(p, q, h + 1 / 3),
242
+ g: hue2rgb(p, q, h),
243
+ b: hue2rgb(p, q, h - 1 / 3),
244
+ };
245
+ }
246
+
247
+ exports.createPalette = createPalette;
248
+ exports.toOKLCH = toOKLCH;
249
+ //# sourceMappingURL=oklch.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oklch.cjs","sources":["../../src/theme/oklch.ts"],"sourcesContent":["type OKLCH = {\n l: number;\n c: number;\n h: number;\n};\n\ntype ColorRole = {\n main: string;\n light: string;\n dark: string;\n contrast: string;\n muted: string;\n divider: string;\n disabled: string;\n ghost: string;\n};\n\n/* ---------------- PARSERS ---------------- */\n\nexport function toOKLCH(input: string): OKLCH {\n if (input.startsWith(\"oklch\")) {\n const values = input.match(/[\\d.]+/g);\n if (!values || values.length < 3) {\n throw new Error(\"Invalid OKLCH format\");\n }\n\n let [l, c, h] = values.map(Number);\n\n return {\n l: l > 1 ? l / 100 : l,\n c,\n h,\n };\n }\n\n const rgb = parseToRgb(input);\n const lab = rgbToOklab(rgb.r, rgb.g, rgb.b);\n return oklabToOklch(lab.L, lab.a, lab.b);\n}\n\nfunction parseToRgb(input: string) {\n input = input.trim().toLowerCase();\n\n if (input.startsWith(\"#\")) return parseHex(input);\n if (input.startsWith(\"rgb\")) return parseRgb(input);\n if (input.startsWith(\"hsl\")) return parseHsl(input);\n\n throw new Error(\"Unsupported format\");\n}\n\n/* ---------------- CORE MATH ---------------- */\n\nfunction srgbToLinear(c: number) {\n return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n}\n\nfunction rgbToOklab(r: number, g: number, b: number) {\n r = srgbToLinear(r);\n g = srgbToLinear(g);\n b = srgbToLinear(b);\n\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\n\n const l_ = Math.cbrt(l);\n const m_ = Math.cbrt(m);\n const s_ = Math.cbrt(s);\n\n return {\n L: 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,\n a: 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,\n b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_,\n };\n}\n\nfunction oklabToOklch(L: number, a: number, b: number): OKLCH {\n const c = Math.sqrt(a * a + b * b);\n let h = Math.atan2(b, a) * (180 / Math.PI);\n\n if (h < 0) h += 360;\n\n return { l: L, c, h };\n}\n\n/* ---------------- FORMAT ---------------- */\n\nfunction formatOklch(color: OKLCH, alpha = 1): string {\n const l = (color.l * 100).toFixed(2) + \"%\";\n const c = color.c.toFixed(4);\n const h = color.h.toFixed(2);\n\n return alpha === 1\n ? `oklch(${l} ${c} ${h})`\n : `oklch(${l} ${c} ${h} / ${alpha})`;\n}\n\n/* ---------------- UTILS ---------------- */\n\nfunction clamp(v: number, min = 0, max = 1) {\n return Math.min(max, Math.max(min, v));\n}\n\n\nexport function createPalette(input: string): ColorRole {\n const base = toOKLCH(input);\n const isTrueBlack = base.l < 0.2 && base.c < 0.02;\n const isTrueWhite = base.l > 0.92 && base.c < 0.015;\n const isDark = base.l < 0.75;\n\n if (isTrueBlack) {\n return {\n main: formatOklch(base),\n\n light: formatOklch({\n l: clamp(base.l + (1 - base.l) * 0.10),\n c: base.c * 0.85,\n h: base.h,\n }),\n\n dark: formatOklch({\n l: 0.04,\n c: 0.005,\n h: base.h,\n }),\n\n muted: formatOklch({\n l: 0.72,\n c: 0.01,\n h: base.h,\n }),\n\n disabled: formatOklch({\n l: 0.30,\n c: 0,\n h: base.h,\n }),\n\n contrast: formatOklch({\n l: 0.98,\n c: 0.01,\n h: base.h,\n }),\n\n divider: formatOklch({\n l: 0.30,\n c: 0.002,\n h: 0,\n }),\n\n ghost: formatOklch({\n l: clamp(base.l + (1 - base.l) * 0.10),\n c: base.c * 0.85,\n h: base.h,\n }, 0.6),\n\n };\n }\n\n if (isTrueWhite) {\n return {\n main: formatOklch(base),\n\n light: formatOklch({\n l: 0.95,\n c: 0,\n h: base.h\n }),\n\n dark: formatOklch({\n l: 0.86,\n c: 0,\n h: base.h,\n }),\n\n muted: formatOklch({\n l: 0.55,\n c: 0,\n h: base.h,\n }),\n\n disabled: formatOklch({\n l: 0.75,\n c: 0,\n h: base.h,\n }),\n\n contrast: formatOklch({\n l: 0.15,\n c: 0,\n h: base.h,\n }),\n\n divider: formatOklch({\n l: 0.85,\n c: 0,\n h: 0,\n }),\n\n ghost: formatOklch({\n l: 0.85,\n c: 0,\n h: base.h\n }, 0.2),\n };\n }\n\n\n return {\n main: formatOklch(base),\n\n light: formatOklch({\n l: clamp(base.l + 0.10),\n c: clamp(base.c * 1.2),\n h: base.h\n }),\n\n dark: formatOklch({\n l: clamp(base.l - 0.06),\n c: clamp(base.c * 1),\n h: base.h\n }),\n\n muted: formatOklch({\n l: clamp(base.l + (isDark ? 0.25 : -0.25)),\n c: clamp(base.c * 0.22),\n h: base.h\n }),\n\n disabled: formatOklch({\n l: clamp(base.l + (isDark ? 0.01 : -0.01)),\n c: clamp(base.c * 0.15),\n h: base.h\n }),\n\n contrast: formatOklch({\n l: isDark ? 0.97 : 0.11,\n c: 0.01,\n h: base.h\n }),\n\n divider: formatOklch({\n l: clamp(base.l - 0.20),\n c: clamp(base.c * 1.08),\n h: base.h\n }, .3),\n\n ghost: formatOklch(base, isDark ? 0.1 : .22),\n };\n}\n\n/* ---------------- PARSERS ---------------- */\n\nfunction parseHex(hex: string) {\n hex = hex.replace(\"#\", \"\").trim();\n\n if (hex.length === 3) {\n hex = hex.split(\"\").map(c => c + c).join(\"\");\n }\n\n const num = parseInt(hex, 16);\n\n return {\n r: ((num >> 16) & 255) / 255,\n g: ((num >> 8) & 255) / 255,\n b: (num & 255) / 255,\n };\n}\n\nfunction parseRgb(input: string) {\n const values = input.match(/[\\d.]+/g);\n if (!values || values.length < 3) {\n throw new Error(\"Invalid RGB format\");\n }\n\n const [r, g, b] = values.map(Number);\n\n return {\n r: r / 255,\n g: g / 255,\n b: b / 255,\n };\n}\n\nfunction parseHsl(input: string) {\n const values = input.match(/[\\d.]+/g);\n if (!values || values.length < 3) {\n throw new Error(\"Invalid HSL format\");\n }\n\n let [h, s, l] = values.map(Number);\n\n h /= 360;\n s /= 100;\n l /= 100;\n\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n return {\n r: hue2rgb(p, q, h + 1 / 3),\n g: hue2rgb(p, q, h),\n b: hue2rgb(p, q, h - 1 / 3),\n };\n}"],"names":[],"mappings":"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"}
package/theme/oklch.js ADDED
@@ -0,0 +1,246 @@
1
+ /* ---------------- PARSERS ---------------- */
2
+ function toOKLCH(input) {
3
+ if (input.startsWith("oklch")) {
4
+ const values = input.match(/[\d.]+/g);
5
+ if (!values || values.length < 3) {
6
+ throw new Error("Invalid OKLCH format");
7
+ }
8
+ let [l, c, h] = values.map(Number);
9
+ return {
10
+ l: l > 1 ? l / 100 : l,
11
+ c,
12
+ h,
13
+ };
14
+ }
15
+ const rgb = parseToRgb(input);
16
+ const lab = rgbToOklab(rgb.r, rgb.g, rgb.b);
17
+ return oklabToOklch(lab.L, lab.a, lab.b);
18
+ }
19
+ function parseToRgb(input) {
20
+ input = input.trim().toLowerCase();
21
+ if (input.startsWith("#"))
22
+ return parseHex(input);
23
+ if (input.startsWith("rgb"))
24
+ return parseRgb(input);
25
+ if (input.startsWith("hsl"))
26
+ return parseHsl(input);
27
+ throw new Error("Unsupported format");
28
+ }
29
+ /* ---------------- CORE MATH ---------------- */
30
+ function srgbToLinear(c) {
31
+ return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
32
+ }
33
+ function rgbToOklab(r, g, b) {
34
+ r = srgbToLinear(r);
35
+ g = srgbToLinear(g);
36
+ b = srgbToLinear(b);
37
+ const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;
38
+ const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;
39
+ const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;
40
+ const l_ = Math.cbrt(l);
41
+ const m_ = Math.cbrt(m);
42
+ const s_ = Math.cbrt(s);
43
+ return {
44
+ L: 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,
45
+ a: 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,
46
+ b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_,
47
+ };
48
+ }
49
+ function oklabToOklch(L, a, b) {
50
+ const c = Math.sqrt(a * a + b * b);
51
+ let h = Math.atan2(b, a) * (180 / Math.PI);
52
+ if (h < 0)
53
+ h += 360;
54
+ return { l: L, c, h };
55
+ }
56
+ /* ---------------- FORMAT ---------------- */
57
+ function formatOklch(color, alpha = 1) {
58
+ const l = (color.l * 100).toFixed(2) + "%";
59
+ const c = color.c.toFixed(4);
60
+ const h = color.h.toFixed(2);
61
+ return alpha === 1
62
+ ? `oklch(${l} ${c} ${h})`
63
+ : `oklch(${l} ${c} ${h} / ${alpha})`;
64
+ }
65
+ /* ---------------- UTILS ---------------- */
66
+ function clamp(v, min = 0, max = 1) {
67
+ return Math.min(max, Math.max(min, v));
68
+ }
69
+ function createPalette(input) {
70
+ const base = toOKLCH(input);
71
+ const isTrueBlack = base.l < 0.2 && base.c < 0.02;
72
+ const isTrueWhite = base.l > 0.92 && base.c < 0.015;
73
+ const isDark = base.l < 0.75;
74
+ if (isTrueBlack) {
75
+ return {
76
+ main: formatOklch(base),
77
+ light: formatOklch({
78
+ l: clamp(base.l + (1 - base.l) * 0.10),
79
+ c: base.c * 0.85,
80
+ h: base.h,
81
+ }),
82
+ dark: formatOklch({
83
+ l: 0.04,
84
+ c: 0.005,
85
+ h: base.h,
86
+ }),
87
+ muted: formatOklch({
88
+ l: 0.72,
89
+ c: 0.01,
90
+ h: base.h,
91
+ }),
92
+ disabled: formatOklch({
93
+ l: 0.30,
94
+ c: 0,
95
+ h: base.h,
96
+ }),
97
+ contrast: formatOklch({
98
+ l: 0.98,
99
+ c: 0.01,
100
+ h: base.h,
101
+ }),
102
+ divider: formatOklch({
103
+ l: 0.30,
104
+ c: 0.002,
105
+ h: 0,
106
+ }),
107
+ ghost: formatOklch({
108
+ l: clamp(base.l + (1 - base.l) * 0.10),
109
+ c: base.c * 0.85,
110
+ h: base.h,
111
+ }, 0.6),
112
+ };
113
+ }
114
+ if (isTrueWhite) {
115
+ return {
116
+ main: formatOklch(base),
117
+ light: formatOklch({
118
+ l: 0.95,
119
+ c: 0,
120
+ h: base.h
121
+ }),
122
+ dark: formatOklch({
123
+ l: 0.86,
124
+ c: 0,
125
+ h: base.h,
126
+ }),
127
+ muted: formatOklch({
128
+ l: 0.55,
129
+ c: 0,
130
+ h: base.h,
131
+ }),
132
+ disabled: formatOklch({
133
+ l: 0.75,
134
+ c: 0,
135
+ h: base.h,
136
+ }),
137
+ contrast: formatOklch({
138
+ l: 0.15,
139
+ c: 0,
140
+ h: base.h,
141
+ }),
142
+ divider: formatOklch({
143
+ l: 0.85,
144
+ c: 0,
145
+ h: 0,
146
+ }),
147
+ ghost: formatOklch({
148
+ l: 0.85,
149
+ c: 0,
150
+ h: base.h
151
+ }, 0.2),
152
+ };
153
+ }
154
+ return {
155
+ main: formatOklch(base),
156
+ light: formatOklch({
157
+ l: clamp(base.l + 0.10),
158
+ c: clamp(base.c * 1.2),
159
+ h: base.h
160
+ }),
161
+ dark: formatOklch({
162
+ l: clamp(base.l - 0.06),
163
+ c: clamp(base.c * 1),
164
+ h: base.h
165
+ }),
166
+ muted: formatOklch({
167
+ l: clamp(base.l + (isDark ? 0.25 : -0.25)),
168
+ c: clamp(base.c * 0.22),
169
+ h: base.h
170
+ }),
171
+ disabled: formatOklch({
172
+ l: clamp(base.l + (isDark ? 0.01 : -0.01)),
173
+ c: clamp(base.c * 0.15),
174
+ h: base.h
175
+ }),
176
+ contrast: formatOklch({
177
+ l: isDark ? 0.97 : 0.11,
178
+ c: 0.01,
179
+ h: base.h
180
+ }),
181
+ divider: formatOklch({
182
+ l: clamp(base.l - 0.20),
183
+ c: clamp(base.c * 1.08),
184
+ h: base.h
185
+ }, .3),
186
+ ghost: formatOklch(base, isDark ? 0.1 : .22),
187
+ };
188
+ }
189
+ /* ---------------- PARSERS ---------------- */
190
+ function parseHex(hex) {
191
+ hex = hex.replace("#", "").trim();
192
+ if (hex.length === 3) {
193
+ hex = hex.split("").map(c => c + c).join("");
194
+ }
195
+ const num = parseInt(hex, 16);
196
+ return {
197
+ r: ((num >> 16) & 255) / 255,
198
+ g: ((num >> 8) & 255) / 255,
199
+ b: (num & 255) / 255,
200
+ };
201
+ }
202
+ function parseRgb(input) {
203
+ const values = input.match(/[\d.]+/g);
204
+ if (!values || values.length < 3) {
205
+ throw new Error("Invalid RGB format");
206
+ }
207
+ const [r, g, b] = values.map(Number);
208
+ return {
209
+ r: r / 255,
210
+ g: g / 255,
211
+ b: b / 255,
212
+ };
213
+ }
214
+ function parseHsl(input) {
215
+ const values = input.match(/[\d.]+/g);
216
+ if (!values || values.length < 3) {
217
+ throw new Error("Invalid HSL format");
218
+ }
219
+ let [h, s, l] = values.map(Number);
220
+ h /= 360;
221
+ s /= 100;
222
+ l /= 100;
223
+ const hue2rgb = (p, q, t) => {
224
+ if (t < 0)
225
+ t += 1;
226
+ if (t > 1)
227
+ t -= 1;
228
+ if (t < 1 / 6)
229
+ return p + (q - p) * 6 * t;
230
+ if (t < 1 / 2)
231
+ return q;
232
+ if (t < 2 / 3)
233
+ return p + (q - p) * (2 / 3 - t) * 6;
234
+ return p;
235
+ };
236
+ const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
237
+ const p = 2 * l - q;
238
+ return {
239
+ r: hue2rgb(p, q, h + 1 / 3),
240
+ g: hue2rgb(p, q, h),
241
+ b: hue2rgb(p, q, h - 1 / 3),
242
+ };
243
+ }
244
+
245
+ export { createPalette, toOKLCH };
246
+ //# sourceMappingURL=oklch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oklch.js","sources":["../../src/theme/oklch.ts"],"sourcesContent":["type OKLCH = {\n l: number;\n c: number;\n h: number;\n};\n\ntype ColorRole = {\n main: string;\n light: string;\n dark: string;\n contrast: string;\n muted: string;\n divider: string;\n disabled: string;\n ghost: string;\n};\n\n/* ---------------- PARSERS ---------------- */\n\nexport function toOKLCH(input: string): OKLCH {\n if (input.startsWith(\"oklch\")) {\n const values = input.match(/[\\d.]+/g);\n if (!values || values.length < 3) {\n throw new Error(\"Invalid OKLCH format\");\n }\n\n let [l, c, h] = values.map(Number);\n\n return {\n l: l > 1 ? l / 100 : l,\n c,\n h,\n };\n }\n\n const rgb = parseToRgb(input);\n const lab = rgbToOklab(rgb.r, rgb.g, rgb.b);\n return oklabToOklch(lab.L, lab.a, lab.b);\n}\n\nfunction parseToRgb(input: string) {\n input = input.trim().toLowerCase();\n\n if (input.startsWith(\"#\")) return parseHex(input);\n if (input.startsWith(\"rgb\")) return parseRgb(input);\n if (input.startsWith(\"hsl\")) return parseHsl(input);\n\n throw new Error(\"Unsupported format\");\n}\n\n/* ---------------- CORE MATH ---------------- */\n\nfunction srgbToLinear(c: number) {\n return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n}\n\nfunction rgbToOklab(r: number, g: number, b: number) {\n r = srgbToLinear(r);\n g = srgbToLinear(g);\n b = srgbToLinear(b);\n\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\n\n const l_ = Math.cbrt(l);\n const m_ = Math.cbrt(m);\n const s_ = Math.cbrt(s);\n\n return {\n L: 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,\n a: 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,\n b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_,\n };\n}\n\nfunction oklabToOklch(L: number, a: number, b: number): OKLCH {\n const c = Math.sqrt(a * a + b * b);\n let h = Math.atan2(b, a) * (180 / Math.PI);\n\n if (h < 0) h += 360;\n\n return { l: L, c, h };\n}\n\n/* ---------------- FORMAT ---------------- */\n\nfunction formatOklch(color: OKLCH, alpha = 1): string {\n const l = (color.l * 100).toFixed(2) + \"%\";\n const c = color.c.toFixed(4);\n const h = color.h.toFixed(2);\n\n return alpha === 1\n ? `oklch(${l} ${c} ${h})`\n : `oklch(${l} ${c} ${h} / ${alpha})`;\n}\n\n/* ---------------- UTILS ---------------- */\n\nfunction clamp(v: number, min = 0, max = 1) {\n return Math.min(max, Math.max(min, v));\n}\n\n\nexport function createPalette(input: string): ColorRole {\n const base = toOKLCH(input);\n const isTrueBlack = base.l < 0.2 && base.c < 0.02;\n const isTrueWhite = base.l > 0.92 && base.c < 0.015;\n const isDark = base.l < 0.75;\n\n if (isTrueBlack) {\n return {\n main: formatOklch(base),\n\n light: formatOklch({\n l: clamp(base.l + (1 - base.l) * 0.10),\n c: base.c * 0.85,\n h: base.h,\n }),\n\n dark: formatOklch({\n l: 0.04,\n c: 0.005,\n h: base.h,\n }),\n\n muted: formatOklch({\n l: 0.72,\n c: 0.01,\n h: base.h,\n }),\n\n disabled: formatOklch({\n l: 0.30,\n c: 0,\n h: base.h,\n }),\n\n contrast: formatOklch({\n l: 0.98,\n c: 0.01,\n h: base.h,\n }),\n\n divider: formatOklch({\n l: 0.30,\n c: 0.002,\n h: 0,\n }),\n\n ghost: formatOklch({\n l: clamp(base.l + (1 - base.l) * 0.10),\n c: base.c * 0.85,\n h: base.h,\n }, 0.6),\n\n };\n }\n\n if (isTrueWhite) {\n return {\n main: formatOklch(base),\n\n light: formatOklch({\n l: 0.95,\n c: 0,\n h: base.h\n }),\n\n dark: formatOklch({\n l: 0.86,\n c: 0,\n h: base.h,\n }),\n\n muted: formatOklch({\n l: 0.55,\n c: 0,\n h: base.h,\n }),\n\n disabled: formatOklch({\n l: 0.75,\n c: 0,\n h: base.h,\n }),\n\n contrast: formatOklch({\n l: 0.15,\n c: 0,\n h: base.h,\n }),\n\n divider: formatOklch({\n l: 0.85,\n c: 0,\n h: 0,\n }),\n\n ghost: formatOklch({\n l: 0.85,\n c: 0,\n h: base.h\n }, 0.2),\n };\n }\n\n\n return {\n main: formatOklch(base),\n\n light: formatOklch({\n l: clamp(base.l + 0.10),\n c: clamp(base.c * 1.2),\n h: base.h\n }),\n\n dark: formatOklch({\n l: clamp(base.l - 0.06),\n c: clamp(base.c * 1),\n h: base.h\n }),\n\n muted: formatOklch({\n l: clamp(base.l + (isDark ? 0.25 : -0.25)),\n c: clamp(base.c * 0.22),\n h: base.h\n }),\n\n disabled: formatOklch({\n l: clamp(base.l + (isDark ? 0.01 : -0.01)),\n c: clamp(base.c * 0.15),\n h: base.h\n }),\n\n contrast: formatOklch({\n l: isDark ? 0.97 : 0.11,\n c: 0.01,\n h: base.h\n }),\n\n divider: formatOklch({\n l: clamp(base.l - 0.20),\n c: clamp(base.c * 1.08),\n h: base.h\n }, .3),\n\n ghost: formatOklch(base, isDark ? 0.1 : .22),\n };\n}\n\n/* ---------------- PARSERS ---------------- */\n\nfunction parseHex(hex: string) {\n hex = hex.replace(\"#\", \"\").trim();\n\n if (hex.length === 3) {\n hex = hex.split(\"\").map(c => c + c).join(\"\");\n }\n\n const num = parseInt(hex, 16);\n\n return {\n r: ((num >> 16) & 255) / 255,\n g: ((num >> 8) & 255) / 255,\n b: (num & 255) / 255,\n };\n}\n\nfunction parseRgb(input: string) {\n const values = input.match(/[\\d.]+/g);\n if (!values || values.length < 3) {\n throw new Error(\"Invalid RGB format\");\n }\n\n const [r, g, b] = values.map(Number);\n\n return {\n r: r / 255,\n g: g / 255,\n b: b / 255,\n };\n}\n\nfunction parseHsl(input: string) {\n const values = input.match(/[\\d.]+/g);\n if (!values || values.length < 3) {\n throw new Error(\"Invalid HSL format\");\n }\n\n let [h, s, l] = values.map(Number);\n\n h /= 360;\n s /= 100;\n l /= 100;\n\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n return {\n r: hue2rgb(p, q, h + 1 / 3),\n g: hue2rgb(p, q, h),\n b: hue2rgb(p, q, h - 1 / 3),\n };\n}"],"names":[],"mappings":"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"}