|
1 |
| -import { definePreset, LAYER_PREFLIGHTS } from '@unocss/core' |
2 |
| -import { env } from 'node:process' |
| 1 | +import { createPresetChromatic } from './shared' |
3 | 2 |
|
4 |
| -type Shade = 'DEFAULT' | 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950 |
5 |
| - |
6 |
| -export const VAR_HUE = '--chromatic-hue' |
7 |
| - |
8 |
| -const VAR_CHROMA_SHADES = { |
9 |
| - DEFAULT: '--chromatic-chroma', |
10 |
| - 50: '--chromatic-chroma-50', |
11 |
| - 100: '--chromatic-chroma-100', |
12 |
| - 200: '--chromatic-chroma-200', |
13 |
| - 300: '--chromatic-chroma-300', |
14 |
| - 400: '--chromatic-chroma-400', |
15 |
| - 500: '--chromatic-chroma-500', |
16 |
| - 600: '--chromatic-chroma-600', |
17 |
| - 700: '--chromatic-chroma-700', |
18 |
| - 800: '--chromatic-chroma-800', |
19 |
| - 900: '--chromatic-chroma-900', |
20 |
| - 950: '--chromatic-chroma-950', |
21 |
| -} as const satisfies Record<Shade, string> |
22 |
| - |
23 |
| -function createVarBasedColorShades(hueOffset: number) { |
24 |
| - return { |
25 |
| - DEFAULT: `oklch(62% var(${VAR_CHROMA_SHADES.DEFAULT}) calc(var(${VAR_HUE}) + ${hueOffset}) / %alpha)`, |
26 |
| - 50: `color-mix(in srgb, oklch(95% var(${VAR_CHROMA_SHADES[50]}) calc(var(${VAR_HUE}) + ${hueOffset}) / %alpha) 30%, oklch(100% 0 360 / %alpha))`, |
27 |
| - 100: `color-mix(in srgb, oklch(95% var(${VAR_CHROMA_SHADES[100]}) calc(var(${VAR_HUE}) + ${hueOffset}) / %alpha) 80%, oklch(100% 0 360 / %alpha))`, |
28 |
| - 200: `oklch(90% var(${VAR_CHROMA_SHADES[200]}) calc(var(${VAR_HUE}) + ${hueOffset}) / %alpha)`, |
29 |
| - 300: `oklch(85% var(${VAR_CHROMA_SHADES[300]}) calc(var(${VAR_HUE}) + ${hueOffset}) / %alpha)`, |
30 |
| - 400: `oklch(74% var(${VAR_CHROMA_SHADES[400]}) calc(var(${VAR_HUE}) + ${hueOffset}) / %alpha)`, |
31 |
| - 500: `oklch(62% var(${VAR_CHROMA_SHADES[500]}) calc(var(${VAR_HUE}) + ${hueOffset}) / %alpha)`, |
32 |
| - 600: `oklch(54% var(${VAR_CHROMA_SHADES[600]}) calc(var(${VAR_HUE}) + ${hueOffset}) / %alpha)`, |
33 |
| - 700: `oklch(49% var(${VAR_CHROMA_SHADES[700]}) calc(var(${VAR_HUE}) + ${hueOffset}) / %alpha)`, |
34 |
| - 800: `oklch(42% var(${VAR_CHROMA_SHADES[800]}) calc(var(${VAR_HUE}) + ${hueOffset}) / %alpha)`, |
35 |
| - 900: `oklch(37% var(${VAR_CHROMA_SHADES[900]}) calc(var(${VAR_HUE}) + ${hueOffset}) / %alpha)`, |
36 |
| - 950: `oklch(29% var(${VAR_CHROMA_SHADES[950]}) calc(var(${VAR_HUE}) + ${hueOffset}) / %alpha)`, |
37 |
| - } as const satisfies Record<Shade, string> |
38 |
| -} |
39 |
| - |
40 |
| -function createBakedColorShades(baseHue: number, hueOffset: number) { |
41 |
| - const defaultChroma = 0.18 + Math.cos(baseHue * Math.PI / 180) * 0.04 |
42 |
| - const hue = baseHue + hueOffset |
43 |
| - |
44 |
| - return { |
45 |
| - DEFAULT: `oklch(62% ${defaultChroma} ${hue} / %alpha)`, |
46 |
| - 50: `color-mix(in srgb, oklch(95% ${defaultChroma * 0.3} ${hue} / %alpha) 30%, oklch(100% 0 360 / %alpha))`, |
47 |
| - 100: `color-mix(in srgb, oklch(95% ${defaultChroma * 0.5} ${hue} / %alpha) 80%, oklch(100% 0 360 / %alpha))`, |
48 |
| - 200: `oklch(90% ${defaultChroma * 0.6} ${hue} / %alpha)`, |
49 |
| - 300: `oklch(85% ${defaultChroma * 0.75} ${hue} / %alpha)`, |
50 |
| - 400: `oklch(74% ${defaultChroma * 0.85} ${hue} / %alpha)`, |
51 |
| - 500: `oklch(62% ${defaultChroma} ${hue} / %alpha)`, |
52 |
| - 600: `oklch(54% ${defaultChroma * 1.15} ${hue} / %alpha)`, |
53 |
| - 700: `oklch(49% ${defaultChroma * 1.1} ${hue} / %alpha)`, |
54 |
| - 800: `oklch(42% ${defaultChroma * 0.85} ${hue} / %alpha)`, |
55 |
| - 900: `oklch(37% ${defaultChroma * 0.7} ${hue} / %alpha)`, |
56 |
| - 950: `oklch(29% ${defaultChroma * 0.5} ${hue} / %alpha)`, |
57 |
| - } as const satisfies Record<Shade, string> |
58 |
| -} |
59 |
| - |
60 |
| -export interface PresetChromaticOptions { |
61 |
| - baseHue: number |
62 |
| - colors: Record<string, number> |
63 |
| - bakeColors?: boolean |
64 |
| -} |
65 |
| - |
66 |
| -export const presetChromatic = definePreset<PresetChromaticOptions>((options) => { |
67 |
| - // Some tricks |
68 |
| - const calledFromExtension = (env.VSCODE_ESM_ENTRYPOINT ?? '').includes('extensionHostProcess') |
69 |
| - |
70 |
| - return { |
71 |
| - name: 'preset-chromatic', |
72 |
| - ...options && { |
73 |
| - theme: { |
74 |
| - colors: Object |
75 |
| - .entries(options.colors) |
76 |
| - .reduce((colors, [key, hueOffset]) => { |
77 |
| - colors[key] = (options.bakeColors || calledFromExtension) |
78 |
| - ? createBakedColorShades(options.baseHue, hueOffset) |
79 |
| - : createVarBasedColorShades(hueOffset) |
80 |
| - |
81 |
| - return colors |
82 |
| - }, {} as Record<string, Record<Shade, string>>), |
83 |
| - }, |
84 |
| - preflights: [ |
85 |
| - { |
86 |
| - layer: LAYER_PREFLIGHTS, |
87 |
| - getCSS() { |
88 |
| - return ` |
89 |
| -:root { |
90 |
| - ${VAR_HUE}: ${options.baseHue}; |
91 |
| - ${VAR_CHROMA_SHADES.DEFAULT}: calc(0.18 + (cos(var(${VAR_HUE}) * 3.14159265 / 180) * 0.04)); |
92 |
| - ${VAR_CHROMA_SHADES[50]}: calc(var(${VAR_CHROMA_SHADES.DEFAULT}) * 0.3); |
93 |
| - ${VAR_CHROMA_SHADES[100]}: calc(var(${VAR_CHROMA_SHADES.DEFAULT}) * 0.5); |
94 |
| - ${VAR_CHROMA_SHADES[200]}: calc(var(${VAR_CHROMA_SHADES.DEFAULT}) * 0.6); |
95 |
| - ${VAR_CHROMA_SHADES[300]}: calc(var(${VAR_CHROMA_SHADES.DEFAULT}) * 0.75); |
96 |
| - ${VAR_CHROMA_SHADES[400]}: calc(var(${VAR_CHROMA_SHADES.DEFAULT}) * 0.85); |
97 |
| - ${VAR_CHROMA_SHADES[500]}: var(${VAR_CHROMA_SHADES.DEFAULT}); |
98 |
| - ${VAR_CHROMA_SHADES[600]}: calc(var(${VAR_CHROMA_SHADES.DEFAULT}) * 1.15); |
99 |
| - ${VAR_CHROMA_SHADES[700]}: calc(var(${VAR_CHROMA_SHADES.DEFAULT}) * 1.1); |
100 |
| - ${VAR_CHROMA_SHADES[800]}: calc(var(${VAR_CHROMA_SHADES.DEFAULT}) * 0.85); |
101 |
| - ${VAR_CHROMA_SHADES[900]}: calc(var(${VAR_CHROMA_SHADES.DEFAULT}) * 0.7); |
102 |
| - ${VAR_CHROMA_SHADES[950]}: calc(var(${VAR_CHROMA_SHADES.DEFAULT}) * 0.5); |
103 |
| -} |
104 |
| - ` |
105 |
| - }, |
106 |
| - }, |
107 |
| - ], |
108 |
| - }, |
109 |
| - } |
110 |
| -}) |
| 3 | +export const presetChromatic = createPresetChromatic() |
| 4 | +export { VAR_HUE } from './shared' |
| 5 | +export type { PresetChromaticOptions } from './shared' |
111 | 6 |
|
112 | 7 | export default presetChromatic
|
0 commit comments