Skip to content

Commit db978a3

Browse files
committed
refactor: Generate theme colors dynamically in quartz.config.ts
This commit refactors the `quartz.config.ts` file to generate theme colors dynamically using the `generateTheme` function. This change improves maintainability and allows for easier customization of the theme colors. Affected file: - quartz.config.ts
1 parent bb4f7b3 commit db978a3

File tree

1 file changed

+77
-24
lines changed

1 file changed

+77
-24
lines changed

quartz.config.ts

Lines changed: 77 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,74 @@
1-
import { QuartzConfig } from "./quartz/cfg";
2-
import * as Plugin from "./quartz/plugins";
1+
import { QuartzConfig } from "./quartz/cfg"
2+
import * as Plugin from "./quartz/plugins"
3+
4+
type ThemeColors = {
5+
light: string
6+
lightgray: string
7+
gray: string
8+
darkgray: string
9+
dark: string
10+
secondary: string
11+
tertiary: string
12+
highlight: string
13+
}
14+
15+
type Themes = {
16+
lightMode: ThemeColors
17+
darkMode: ThemeColors
18+
}
19+
20+
function hslToHex(h: number, s: number, l: number): string {
21+
l /= 100
22+
const a = (s * Math.min(l, 1 - l)) / 100
23+
const f = (n: number) => {
24+
const k = (n + h / 30) % 12
25+
const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1)
26+
return Math.round(255 * color)
27+
.toString(16)
28+
.padStart(2, "0")
29+
}
30+
return `#${f(0)}${f(8)}${f(4)}`
31+
}
32+
33+
function hslToRgba(h: number, s: number, l: number, a: number): string {
34+
l /= 100
35+
const a_s = (s * Math.min(l, 1 - l)) / 100
36+
const f = (n: number) => {
37+
const k = (n + h / 30) % 12
38+
const color = l - a_s * Math.max(Math.min(k - 3, 9 - k, 1), -1)
39+
return Math.round(255 * color)
40+
}
41+
const r = f(0)
42+
const g = f(8)
43+
const b = f(4)
44+
return `rgba(${r}, ${g}, ${b}, ${a})`
45+
}
46+
47+
function generateTheme(baseHue: number, baseSaturation: number, baseLightness: number): Themes {
48+
const lightMode: ThemeColors = {
49+
light: hslToHex(baseHue, baseSaturation, baseLightness + 80),
50+
lightgray: hslToHex(baseHue, baseSaturation, baseLightness + 50),
51+
gray: hslToHex(baseHue, baseSaturation, baseLightness + 20),
52+
darkgray: hslToHex(baseHue, baseSaturation, baseLightness - 30),
53+
dark: hslToHex(baseHue, baseSaturation, baseLightness - 50),
54+
secondary: hslToHex((baseHue + 30) % 360, baseSaturation, baseLightness),
55+
tertiary: hslToHex((baseHue + 60) % 360, baseSaturation, baseLightness),
56+
highlight: hslToRgba(baseHue, baseSaturation, baseLightness, 0.15),
57+
}
58+
59+
const darkMode: ThemeColors = {
60+
light: hslToHex(baseHue, baseSaturation, baseLightness - 80),
61+
lightgray: hslToHex(baseHue, baseSaturation, baseLightness - 50),
62+
gray: hslToHex(baseHue, baseSaturation, baseLightness - 20),
63+
darkgray: hslToHex(baseHue, baseSaturation, baseLightness + 30),
64+
dark: hslToHex(baseHue, baseSaturation, baseLightness + 50),
65+
secondary: hslToHex((baseHue + 210) % 360, baseSaturation, baseLightness),
66+
tertiary: hslToHex((baseHue + 60) % 360, baseSaturation, baseLightness),
67+
highlight: hslToRgba(baseHue, baseSaturation, baseLightness, 0.15),
68+
}
69+
70+
return { lightMode, darkMode }
71+
}
372

473
/**
574
* Quartz 4.0 Configuration
@@ -26,28 +95,12 @@ const config: QuartzConfig = {
2695
body: "Source Sans Pro",
2796
code: "IBM Plex Mono",
2897
},
29-
colors: {
30-
lightMode: {
31-
light: "#faf8f8",
32-
lightgray: "#e5e5e5",
33-
gray: "#b8b8b8",
34-
darkgray: "#4e4e4e",
35-
dark: "#2b2b2b",
36-
secondary: "#284b63",
37-
tertiary: "#84a59d",
38-
highlight: "rgba(143, 159, 169, 0.15)",
39-
},
40-
darkMode: {
41-
light: "#161618",
42-
lightgray: "#393639",
43-
gray: "#646464",
44-
darkgray: "#d4d4d4",
45-
dark: "#ebebec",
46-
secondary: "#7b97aa",
47-
tertiary: "#84a59d",
48-
highlight: "rgba(143, 159, 169, 0.15)",
49-
},
50-
},
98+
colors: generateTheme(
99+
// 210, // blue
100+
20, // blue
101+
50, // 50%
102+
50, // 50%
103+
),
51104
},
52105
},
53106
plugins: {

0 commit comments

Comments
 (0)