@silvery/theme 0.3.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.
Files changed (47) hide show
  1. package/package.json +36 -0
  2. package/src/ThemeContext.tsx +62 -0
  3. package/src/alias.ts +94 -0
  4. package/src/auto-generate.ts +126 -0
  5. package/src/builder.ts +218 -0
  6. package/src/cli.ts +275 -0
  7. package/src/color.ts +142 -0
  8. package/src/contrast.ts +75 -0
  9. package/src/css.ts +51 -0
  10. package/src/derive.ts +167 -0
  11. package/src/detect.ts +263 -0
  12. package/src/export/base16.ts +64 -0
  13. package/src/generate.ts +79 -0
  14. package/src/generators.ts +255 -0
  15. package/src/import/base16.ts +150 -0
  16. package/src/import/types.ts +47 -0
  17. package/src/index.ts +2 -0
  18. package/src/palettes/ayu.ts +92 -0
  19. package/src/palettes/catppuccin.ts +118 -0
  20. package/src/palettes/dracula.ts +34 -0
  21. package/src/palettes/edge.ts +63 -0
  22. package/src/palettes/everforest.ts +63 -0
  23. package/src/palettes/gruvbox.ts +62 -0
  24. package/src/palettes/horizon.ts +35 -0
  25. package/src/palettes/index.ts +293 -0
  26. package/src/palettes/kanagawa.ts +91 -0
  27. package/src/palettes/material.ts +64 -0
  28. package/src/palettes/modus.ts +63 -0
  29. package/src/palettes/monokai.ts +64 -0
  30. package/src/palettes/moonfly.ts +35 -0
  31. package/src/palettes/nightfly.ts +35 -0
  32. package/src/palettes/nightfox.ts +63 -0
  33. package/src/palettes/nord.ts +34 -0
  34. package/src/palettes/one-dark.ts +34 -0
  35. package/src/palettes/oxocarbon.ts +63 -0
  36. package/src/palettes/palenight.ts +36 -0
  37. package/src/palettes/rose-pine.ts +90 -0
  38. package/src/palettes/snazzy.ts +35 -0
  39. package/src/palettes/solarized.ts +62 -0
  40. package/src/palettes/sonokai.ts +35 -0
  41. package/src/palettes/tokyo-night.ts +90 -0
  42. package/src/resolve.ts +44 -0
  43. package/src/state.ts +58 -0
  44. package/src/theme.ts +148 -0
  45. package/src/types.ts +223 -0
  46. package/src/validate-theme.ts +100 -0
  47. package/src/validate.ts +56 -0
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Built-in themes and palette registry.
3
+ *
4
+ * Exports:
5
+ * - Pre-derived Theme objects (ansi16Dark, ansi16Light, defaultDark, defaultLight)
6
+ * - ColorPalette definitions from popular theme systems (45 palettes)
7
+ * - Registry functions (getThemeByName, getPaletteByName)
8
+ */
9
+
10
+ import { deriveTheme } from "../derive"
11
+ import type { Theme, ColorPalette } from "../types"
12
+
13
+ // ── Re-export all palette definitions ──────────────────────────────
14
+ export { catppuccinMocha, catppuccinFrappe, catppuccinMacchiato, catppuccinLatte } from "./catppuccin"
15
+ export { nord } from "./nord"
16
+ export { dracula } from "./dracula"
17
+ export { solarizedDark, solarizedLight } from "./solarized"
18
+ export { tokyoNight, tokyoNightStorm, tokyoNightDay } from "./tokyo-night"
19
+ export { oneDark } from "./one-dark"
20
+ export { gruvboxDark, gruvboxLight } from "./gruvbox"
21
+ export { rosePine, rosePineMoon, rosePineDawn } from "./rose-pine"
22
+ export { kanagawaWave, kanagawaDragon, kanagawaLotus } from "./kanagawa"
23
+ export { everforestDark, everforestLight } from "./everforest"
24
+ export { monokai, monokaiPro } from "./monokai"
25
+ export { snazzy } from "./snazzy"
26
+ export { materialDark, materialLight } from "./material"
27
+ export { palenight } from "./palenight"
28
+ export { ayuDark, ayuMirage, ayuLight } from "./ayu"
29
+ export { nightfox, dawnfox } from "./nightfox"
30
+ export { horizon } from "./horizon"
31
+ export { moonfly } from "./moonfly"
32
+ export { nightfly } from "./nightfly"
33
+ export { oxocarbonDark, oxocarbonLight } from "./oxocarbon"
34
+ export { sonokai } from "./sonokai"
35
+ export { edgeDark, edgeLight } from "./edge"
36
+ export { modusVivendi, modusOperandi } from "./modus"
37
+
38
+ // ── Import for registry ────────────────────────────────────────────
39
+ import { catppuccinMocha, catppuccinFrappe, catppuccinMacchiato, catppuccinLatte } from "./catppuccin"
40
+ import { nord } from "./nord"
41
+ import { dracula } from "./dracula"
42
+ import { solarizedDark, solarizedLight } from "./solarized"
43
+ import { tokyoNight, tokyoNightStorm, tokyoNightDay } from "./tokyo-night"
44
+ import { oneDark } from "./one-dark"
45
+ import { gruvboxDark, gruvboxLight } from "./gruvbox"
46
+ import { rosePine, rosePineMoon, rosePineDawn } from "./rose-pine"
47
+ import { kanagawaWave, kanagawaDragon, kanagawaLotus } from "./kanagawa"
48
+ import { everforestDark, everforestLight } from "./everforest"
49
+ import { monokai, monokaiPro } from "./monokai"
50
+ import { snazzy } from "./snazzy"
51
+ import { materialDark, materialLight } from "./material"
52
+ import { palenight } from "./palenight"
53
+ import { ayuDark, ayuMirage, ayuLight } from "./ayu"
54
+ import { nightfox, dawnfox } from "./nightfox"
55
+ import { horizon } from "./horizon"
56
+ import { moonfly } from "./moonfly"
57
+ import { nightfly } from "./nightfly"
58
+ import { oxocarbonDark, oxocarbonLight } from "./oxocarbon"
59
+ import { sonokai } from "./sonokai"
60
+ import { edgeDark, edgeLight } from "./edge"
61
+ import { modusVivendi, modusOperandi } from "./modus"
62
+
63
+ // ============================================================================
64
+ // ANSI 16 Themes (no palette required — hardcoded for any terminal)
65
+ // ============================================================================
66
+
67
+ /** Dark ANSI 16 theme — works on any terminal. Primary = yellow. */
68
+ export const ansi16DarkTheme: Theme = {
69
+ name: "dark-ansi16",
70
+ bg: "",
71
+ fg: "whiteBright",
72
+ muted: "white",
73
+ mutedbg: "black",
74
+ surface: "whiteBright",
75
+ surfacebg: "black",
76
+ popover: "whiteBright",
77
+ popoverbg: "black",
78
+ inverse: "black",
79
+ inversebg: "whiteBright",
80
+ cursor: "black",
81
+ cursorbg: "yellow",
82
+ selection: "black",
83
+ selectionbg: "yellow",
84
+ primary: "yellow",
85
+ primaryfg: "black",
86
+ secondary: "yellow",
87
+ secondaryfg: "black",
88
+ accent: "yellow",
89
+ accentfg: "black",
90
+ error: "redBright",
91
+ errorfg: "black",
92
+ warning: "yellow",
93
+ warningfg: "black",
94
+ success: "greenBright",
95
+ successfg: "black",
96
+ info: "cyanBright",
97
+ infofg: "black",
98
+ border: "gray",
99
+ inputborder: "gray",
100
+ focusborder: "blueBright",
101
+ link: "blueBright",
102
+ disabledfg: "gray",
103
+ palette: [
104
+ "black",
105
+ "red",
106
+ "green",
107
+ "yellow",
108
+ "blue",
109
+ "magenta",
110
+ "cyan",
111
+ "white",
112
+ "blackBright",
113
+ "redBright",
114
+ "greenBright",
115
+ "yellowBright",
116
+ "blueBright",
117
+ "magentaBright",
118
+ "cyanBright",
119
+ "whiteBright",
120
+ ],
121
+ }
122
+
123
+ /** Light ANSI 16 theme — works on any terminal. Primary = blue. */
124
+ export const ansi16LightTheme: Theme = {
125
+ name: "light-ansi16",
126
+ bg: "",
127
+ fg: "black",
128
+ muted: "blackBright",
129
+ mutedbg: "white",
130
+ surface: "black",
131
+ surfacebg: "white",
132
+ popover: "black",
133
+ popoverbg: "white",
134
+ inverse: "whiteBright",
135
+ inversebg: "black",
136
+ cursor: "black",
137
+ cursorbg: "blue",
138
+ selection: "black",
139
+ selectionbg: "cyan",
140
+ primary: "blue",
141
+ primaryfg: "black",
142
+ secondary: "blue",
143
+ secondaryfg: "black",
144
+ accent: "cyan",
145
+ accentfg: "black",
146
+ error: "red",
147
+ errorfg: "black",
148
+ warning: "yellow",
149
+ warningfg: "black",
150
+ success: "green",
151
+ successfg: "black",
152
+ info: "cyan",
153
+ infofg: "black",
154
+ border: "gray",
155
+ inputborder: "gray",
156
+ focusborder: "blue",
157
+ link: "blueBright",
158
+ disabledfg: "gray",
159
+ palette: [
160
+ "black",
161
+ "red",
162
+ "green",
163
+ "yellow",
164
+ "blue",
165
+ "magenta",
166
+ "cyan",
167
+ "white",
168
+ "blackBright",
169
+ "redBright",
170
+ "greenBright",
171
+ "yellowBright",
172
+ "blueBright",
173
+ "magentaBright",
174
+ "cyanBright",
175
+ "whiteBright",
176
+ ],
177
+ }
178
+
179
+ // ============================================================================
180
+ // Default Truecolor Themes (derived from Nord palette)
181
+ // ============================================================================
182
+
183
+ /** Dark truecolor theme — derived from Nord. */
184
+ export const defaultDarkTheme: Theme = deriveTheme(nord)
185
+
186
+ /** Light truecolor theme — derived from Catppuccin Latte. */
187
+ export const defaultLightTheme: Theme = deriveTheme(catppuccinLatte)
188
+
189
+ // ============================================================================
190
+ // Registry
191
+ // ============================================================================
192
+
193
+ /** All built-in ColorPalette definitions (45 palettes). */
194
+ export const builtinPalettes: Record<string, ColorPalette> = {
195
+ // Catppuccin
196
+ "catppuccin-mocha": catppuccinMocha,
197
+ "catppuccin-frappe": catppuccinFrappe,
198
+ "catppuccin-macchiato": catppuccinMacchiato,
199
+ "catppuccin-latte": catppuccinLatte,
200
+ // Nord
201
+ nord: nord,
202
+ // Dracula
203
+ dracula: dracula,
204
+ // Solarized
205
+ "solarized-dark": solarizedDark,
206
+ "solarized-light": solarizedLight,
207
+ // Tokyo Night
208
+ "tokyo-night": tokyoNight,
209
+ "tokyo-night-storm": tokyoNightStorm,
210
+ "tokyo-night-day": tokyoNightDay,
211
+ // One Dark
212
+ "one-dark": oneDark,
213
+ // Gruvbox
214
+ "gruvbox-dark": gruvboxDark,
215
+ "gruvbox-light": gruvboxLight,
216
+ // Rose Pine
217
+ "rose-pine": rosePine,
218
+ "rose-pine-moon": rosePineMoon,
219
+ "rose-pine-dawn": rosePineDawn,
220
+ // Kanagawa
221
+ "kanagawa-wave": kanagawaWave,
222
+ "kanagawa-dragon": kanagawaDragon,
223
+ "kanagawa-lotus": kanagawaLotus,
224
+ // Everforest
225
+ "everforest-dark": everforestDark,
226
+ "everforest-light": everforestLight,
227
+ // Monokai
228
+ monokai: monokai,
229
+ "monokai-pro": monokaiPro,
230
+ // Snazzy
231
+ snazzy: snazzy,
232
+ // Material
233
+ "material-dark": materialDark,
234
+ "material-light": materialLight,
235
+ // Palenight
236
+ palenight: palenight,
237
+ // Ayu
238
+ "ayu-dark": ayuDark,
239
+ "ayu-mirage": ayuMirage,
240
+ "ayu-light": ayuLight,
241
+ // Nightfox
242
+ nightfox: nightfox,
243
+ dawnfox: dawnfox,
244
+ // Horizon
245
+ horizon: horizon,
246
+ // Moonfly
247
+ moonfly: moonfly,
248
+ // Nightfly
249
+ nightfly: nightfly,
250
+ // Oxocarbon
251
+ "oxocarbon-dark": oxocarbonDark,
252
+ "oxocarbon-light": oxocarbonLight,
253
+ // Sonokai
254
+ sonokai: sonokai,
255
+ // Edge
256
+ "edge-dark": edgeDark,
257
+ "edge-light": edgeLight,
258
+ // Modus
259
+ "modus-vivendi": modusVivendi,
260
+ "modus-operandi": modusOperandi,
261
+ }
262
+
263
+ /** All built-in themes, indexed by name (includes backward-compat aliases). */
264
+ export const builtinThemes: Record<string, Theme> = {
265
+ // ANSI 16
266
+ "dark-ansi16": ansi16DarkTheme,
267
+ "light-ansi16": ansi16LightTheme,
268
+ // Truecolor defaults
269
+ "dark-truecolor": defaultDarkTheme,
270
+ "light-truecolor": defaultLightTheme,
271
+ // Old names as aliases
272
+ dark: defaultDarkTheme,
273
+ light: defaultLightTheme,
274
+ "ansi16-dark": ansi16DarkTheme,
275
+ "ansi16-light": ansi16LightTheme,
276
+ }
277
+
278
+ /** Resolve a theme by name. Defaults to dark-ansi16. */
279
+ export function getThemeByName(name?: string): Theme {
280
+ if (!name) return ansi16DarkTheme
281
+ // Check pre-built themes first
282
+ const builtin = builtinThemes[name]
283
+ if (builtin) return builtin
284
+ // Check palettes (derive on first access)
285
+ const palette = builtinPalettes[name]
286
+ if (palette) return deriveTheme(palette)
287
+ return ansi16DarkTheme
288
+ }
289
+
290
+ /** Resolve a palette by name. Returns undefined if not found. */
291
+ export function getPaletteByName(name: string): ColorPalette | undefined {
292
+ return builtinPalettes[name]
293
+ }
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Kanagawa palettes — inspired by Katsushika Hokusai's famous paintings.
3
+ * Source: https://github.com/rebelot/kanagawa.nvim (palette.lua)
4
+ */
5
+
6
+ import type { ColorPalette } from "../types"
7
+ import { brighten } from "../color"
8
+
9
+ /** Kanagawa Wave — the default dark variant, inspired by "The Great Wave off Kanagawa". */
10
+ export const kanagawaWave: ColorPalette = {
11
+ name: "kanagawa-wave",
12
+ dark: true,
13
+ black: "#16161D", // sumiInk0
14
+ red: "#C34043", // autumnRed
15
+ green: "#98BB6C", // springGreen
16
+ yellow: "#E6C384", // carpYellow
17
+ blue: "#7E9CD8", // crystalBlue
18
+ magenta: "#957FB8", // oniViolet
19
+ cyan: "#6A9589", // waveAqua1
20
+ white: "#727169", // fujiGray
21
+ brightBlack: "#2A2A37", // sumiInk4
22
+ brightRed: "#FFA066", // surimiOrange
23
+ brightGreen: brighten("#98BB6C", 0.15),
24
+ brightYellow: brighten("#E6C384", 0.15),
25
+ brightBlue: brighten("#7E9CD8", 0.15),
26
+ brightMagenta: "#D27E99", // sakuraPink
27
+ brightCyan: brighten("#6A9589", 0.15),
28
+ brightWhite: "#DCD7BA", // fujiWhite
29
+ foreground: "#DCD7BA", // fujiWhite
30
+ background: "#1F1F28", // sumiInk3
31
+ cursorColor: "#DCD7BA", // fujiWhite
32
+ cursorText: "#1F1F28", // sumiInk3
33
+ selectionBackground: "#54546D", // sumiInk6
34
+ selectionForeground: "#DCD7BA", // fujiWhite
35
+ }
36
+
37
+ /** Kanagawa Dragon — a muted, earthy dark variant. */
38
+ export const kanagawaDragon: ColorPalette = {
39
+ name: "kanagawa-dragon",
40
+ dark: true,
41
+ black: "#0d0c0c", // dragonBlack0
42
+ red: "#c4746e", // dragonRed
43
+ green: "#87a987", // dragonGreen
44
+ yellow: "#c4b28a", // dragonYellow
45
+ blue: "#8ba4b0", // dragonBlue2
46
+ magenta: "#8992a7", // dragonViolet
47
+ cyan: "#8ea4a2", // dragonAqua
48
+ white: "#737c73", // dragonAsh
49
+ brightBlack: "#282727", // dragonBlack4
50
+ brightRed: "#b6927b", // dragonOrange
51
+ brightGreen: brighten("#87a987", 0.15),
52
+ brightYellow: brighten("#c4b28a", 0.15),
53
+ brightBlue: brighten("#8ba4b0", 0.15),
54
+ brightMagenta: "#a292a3", // dragonPink
55
+ brightCyan: brighten("#8ea4a2", 0.15),
56
+ brightWhite: "#c5c9c5", // dragonWhite
57
+ foreground: "#c5c9c5", // dragonWhite
58
+ background: "#181616", // dragonBlack3
59
+ cursorColor: "#c5c9c5", // dragonWhite
60
+ cursorText: "#181616", // dragonBlack3
61
+ selectionBackground: "#625e5a", // dragonBlack6
62
+ selectionForeground: "#c5c9c5", // dragonWhite
63
+ }
64
+
65
+ /** Kanagawa Lotus — the light variant, inspired by lotus flowers. */
66
+ export const kanagawaLotus: ColorPalette = {
67
+ name: "kanagawa-lotus",
68
+ dark: false,
69
+ black: "#e5ddb0", // lotusWhite2
70
+ red: "#c84053", // lotusRed
71
+ green: "#6f894e", // lotusGreen
72
+ yellow: "#de9800", // lotusYellow3
73
+ blue: "#4d699b", // lotusBlue4
74
+ magenta: "#624c83", // lotusViolet4
75
+ cyan: "#597b75", // lotusAqua
76
+ white: "#716e61", // lotusGray2
77
+ brightBlack: "#dcd5ac", // lotusWhite1
78
+ brightRed: "#cc6d00", // lotusOrange
79
+ brightGreen: brighten("#6f894e", 0.15),
80
+ brightYellow: brighten("#de9800", 0.15),
81
+ brightBlue: brighten("#4d699b", 0.15),
82
+ brightMagenta: "#b35b79", // lotusPink
83
+ brightCyan: brighten("#597b75", 0.15),
84
+ brightWhite: "#545464", // lotusInk1
85
+ foreground: "#545464", // lotusInk1
86
+ background: "#f2ecbc", // lotusWhite3
87
+ cursorColor: "#545464", // lotusInk1
88
+ cursorText: "#f2ecbc", // lotusWhite3
89
+ selectionBackground: "#8a8980", // lotusGray3
90
+ selectionForeground: "#545464", // lotusInk1
91
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Material Theme palettes — material design-inspired editor theme.
3
+ * Source: https://github.com/kaicataldo/material.vim (material.vim)
4
+ * Reference: https://material-theme.com/docs/reference/color-palette/
5
+ */
6
+
7
+ import type { ColorPalette } from "../types"
8
+ import { brighten } from "../color"
9
+
10
+ /** Material Darker — the deep dark Material variant. */
11
+ export const materialDark: ColorPalette = {
12
+ name: "material-dark",
13
+ dark: true,
14
+ black: "#171717", // line_highlight (deepest)
15
+ red: "#ff5370",
16
+ green: "#c3e88d",
17
+ yellow: "#ffcb6b",
18
+ blue: "#82aaff",
19
+ magenta: "#c792ea",
20
+ cyan: "#89ddff", // cyan
21
+ white: "#545454", // comments
22
+ brightBlack: "#2c2c2c", // selection
23
+ brightRed: "#f78c6c",
24
+ brightGreen: brighten("#c3e88d", 0.15),
25
+ brightYellow: brighten("#ffcb6b", 0.15),
26
+ brightBlue: brighten("#82aaff", 0.15),
27
+ brightMagenta: "#f07178",
28
+ brightCyan: brighten("#89ddff", 0.15),
29
+ brightWhite: "#eeffff", // foreground
30
+ foreground: "#eeffff", // foreground
31
+ background: "#212121", // background
32
+ cursorColor: "#eeffff", // foreground
33
+ cursorText: "#212121", // background
34
+ selectionBackground: "#424242", // guides/line_numbers
35
+ selectionForeground: "#eeffff", // foreground
36
+ }
37
+
38
+ /** Material Lighter — the light Material variant. */
39
+ export const materialLight: ColorPalette = {
40
+ name: "material-light",
41
+ dark: false,
42
+ black: "#ecf0f1", // line_highlight
43
+ red: "#e53935",
44
+ green: "#91b859",
45
+ yellow: "#ffb62c",
46
+ blue: "#6182b8",
47
+ magenta: "#7c4dff",
48
+ cyan: "#39adb5", // cyan
49
+ white: "#90a4ae", // comments/fg
50
+ brightBlack: "#ebf4f3", // selection
51
+ brightRed: "#f76d47",
52
+ brightGreen: brighten("#91b859", 0.15),
53
+ brightYellow: brighten("#ffb62c", 0.15),
54
+ brightBlue: brighten("#6182b8", 0.15),
55
+ brightMagenta: "#ff5370",
56
+ brightCyan: brighten("#39adb5", 0.15),
57
+ brightWhite: "#546E7A", // foreground (darker than comments for light theme)
58
+ foreground: "#546E7A", // foreground (darker than comments for light theme)
59
+ background: "#fafafa", // background
60
+ cursorColor: "#546E7A", // foreground
61
+ cursorText: "#fafafa", // background
62
+ selectionBackground: "#cfd8dc", // line_numbers
63
+ selectionForeground: "#546E7A", // foreground
64
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Modus palettes — GNU Emacs themes conforming to WCAG AAA contrast.
3
+ * Source: https://github.com/protesilaos/modus-themes
4
+ */
5
+
6
+ import type { ColorPalette } from "../types"
7
+ import { brighten } from "../color"
8
+
9
+ /** Modus Vivendi — elegant dark theme with maximum legibility. */
10
+ export const modusVivendi: ColorPalette = {
11
+ name: "modus-vivendi",
12
+ dark: true,
13
+ black: "#000000",
14
+ red: "#FF5F59",
15
+ green: "#44BC44",
16
+ yellow: "#D0BC00",
17
+ blue: "#2FAFFF",
18
+ magenta: "#B6A0FF",
19
+ cyan: "#00D3D0",
20
+ white: "#989898",
21
+ brightBlack: "#1E1E1E",
22
+ brightRed: "#FEC43F",
23
+ brightGreen: brighten("#44BC44", 0.15),
24
+ brightYellow: brighten("#D0BC00", 0.15),
25
+ brightBlue: brighten("#2FAFFF", 0.15),
26
+ brightMagenta: "#FEACD0",
27
+ brightCyan: brighten("#00D3D0", 0.15),
28
+ brightWhite: "#FFFFFF",
29
+ foreground: "#FFFFFF",
30
+ background: "#000000",
31
+ cursorColor: "#FFFFFF",
32
+ cursorText: "#000000",
33
+ selectionBackground: "#535353",
34
+ selectionForeground: "#FFFFFF",
35
+ }
36
+
37
+ /** Modus Operandi — elegant light theme with maximum legibility. */
38
+ export const modusOperandi: ColorPalette = {
39
+ name: "modus-operandi",
40
+ dark: false,
41
+ black: "#E0E0E0",
42
+ red: "#A60000",
43
+ green: "#006800",
44
+ yellow: "#6F5500",
45
+ blue: "#0031A9",
46
+ magenta: "#531AB6",
47
+ cyan: "#005E8B",
48
+ white: "#595959",
49
+ brightBlack: "#F2F2F2",
50
+ brightRed: "#884900",
51
+ brightGreen: brighten("#006800", 0.15),
52
+ brightYellow: brighten("#6F5500", 0.15),
53
+ brightBlue: brighten("#0031A9", 0.15),
54
+ brightMagenta: "#721045",
55
+ brightCyan: brighten("#005E8B", 0.15),
56
+ brightWhite: "#000000",
57
+ foreground: "#000000",
58
+ background: "#FFFFFF",
59
+ cursorColor: "#000000",
60
+ cursorText: "#FFFFFF",
61
+ selectionBackground: "#9F9F9F",
62
+ selectionForeground: "#000000",
63
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Monokai palettes — the iconic syntax highlighting theme.
3
+ * Classic source: Sublime Text default (Wimer Hazenberg, 2006)
4
+ * Pro source: https://monokai.pro/ (default "Pro" filter)
5
+ */
6
+
7
+ import type { ColorPalette } from "../types"
8
+ import { brighten } from "../color"
9
+
10
+ /** Monokai Classic — the original Sublime Text Monokai colors. */
11
+ export const monokai: ColorPalette = {
12
+ name: "monokai",
13
+ dark: true,
14
+ black: "#1a1a1a", // darker than bg
15
+ red: "#F92672", // keywords/pink-red
16
+ green: "#A6E22E", // functions
17
+ yellow: "#E6DB74", // strings
18
+ blue: "#66D9EF", // classic Monokai has no distinct blue; cyan doubles
19
+ magenta: "#AE81FF", // numbers/constants
20
+ cyan: "#66D9EF", // types/builtins (cyan)
21
+ white: "#a59f85", // muted text (between comments and fg)
22
+ brightBlack: "#3e3d32", // line highlight
23
+ brightRed: "#FD971F", // parameters/constants
24
+ brightGreen: brighten("#A6E22E", 0.15),
25
+ brightYellow: brighten("#E6DB74", 0.15),
26
+ brightBlue: brighten("#66D9EF", 0.15),
27
+ brightMagenta: "#F92672", // classic Monokai pink == red
28
+ brightCyan: brighten("#66D9EF", 0.15),
29
+ brightWhite: "#F8F8F2", // foreground
30
+ foreground: "#F8F8F2", // foreground
31
+ background: "#272822", // classic Monokai background
32
+ cursorColor: "#F8F8F2", // foreground
33
+ cursorText: "#272822", // classic Monokai background
34
+ selectionBackground: "#75715E", // comments
35
+ selectionForeground: "#F8F8F2", // foreground
36
+ }
37
+
38
+ /** Monokai Pro — the modern, refined Monokai with balanced colors. */
39
+ export const monokaiPro: ColorPalette = {
40
+ name: "monokai-pro",
41
+ dark: true,
42
+ black: "#221f22", // darker than base
43
+ red: "#ff6188", // keywords
44
+ green: "#a9dc76", // functions
45
+ yellow: "#ffd866", // strings/types
46
+ blue: "#78dce8", // Pro shares cyan as blue
47
+ magenta: "#ab9df2", // decorative/numbers
48
+ cyan: "#78dce8", // cyan — support/builtins
49
+ white: "#939293", // secondary text
50
+ brightBlack: "#403e41", // raised surfaces
51
+ brightRed: "#fc9867", // constants/parameters
52
+ brightGreen: brighten("#a9dc76", 0.15),
53
+ brightYellow: brighten("#ffd866", 0.15),
54
+ brightBlue: brighten("#78dce8", 0.15),
55
+ brightMagenta: "#ff6188", // Pro pink == red
56
+ brightCyan: brighten("#78dce8", 0.15),
57
+ brightWhite: "#fcfcfa", // foreground
58
+ foreground: "#fcfcfa", // foreground
59
+ background: "#2d2a2e", // editor background
60
+ cursorColor: "#fcfcfa", // foreground
61
+ cursorText: "#2d2a2e", // editor background
62
+ selectionBackground: "#727072", // borders/muted chrome
63
+ selectionForeground: "#fcfcfa", // foreground
64
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Moonfly palette — dark charcoal theme with pastel accents.
3
+ * Source: https://github.com/bluz71/vim-moonfly-colors
4
+ */
5
+
6
+ import type { ColorPalette } from "../types"
7
+ import { brighten } from "../color"
8
+
9
+ /** Moonfly — dark charcoal theme. */
10
+ export const moonfly: ColorPalette = {
11
+ name: "moonfly",
12
+ dark: true,
13
+ black: "#121212",
14
+ red: "#FF5D5D",
15
+ green: "#8CC85F",
16
+ yellow: "#E3C78A",
17
+ blue: "#80A0FF",
18
+ magenta: "#AE81FF",
19
+ cyan: "#79DAC8",
20
+ white: "#808080",
21
+ brightBlack: "#1C1C1C",
22
+ brightRed: "#DE935F",
23
+ brightGreen: brighten("#8CC85F", 0.15),
24
+ brightYellow: brighten("#E3C78A", 0.15),
25
+ brightBlue: brighten("#80A0FF", 0.15),
26
+ brightMagenta: "#FF5189",
27
+ brightCyan: brighten("#79DAC8", 0.15),
28
+ brightWhite: "#C6C6C6",
29
+ foreground: "#C6C6C6",
30
+ background: "#080808",
31
+ cursorColor: "#C6C6C6",
32
+ cursorText: "#080808",
33
+ selectionBackground: "#323437",
34
+ selectionForeground: "#C6C6C6",
35
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Nightfly palette — dark midnight-blue theme with neon accents.
3
+ * Source: https://github.com/bluz71/vim-nightfly-colors
4
+ */
5
+
6
+ import type { ColorPalette } from "../types"
7
+ import { brighten } from "../color"
8
+
9
+ /** Nightfly — midnight-blue dark theme. */
10
+ export const nightfly: ColorPalette = {
11
+ name: "nightfly",
12
+ dark: true,
13
+ black: "#081E2F",
14
+ red: "#FC514E",
15
+ green: "#A1CD5E",
16
+ yellow: "#E3D18A",
17
+ blue: "#82AAFF",
18
+ magenta: "#C792EA",
19
+ cyan: "#7FDBCA",
20
+ white: "#7C8F8F",
21
+ brightBlack: "#0E293F",
22
+ brightRed: "#F78C6C",
23
+ brightGreen: brighten("#A1CD5E", 0.15),
24
+ brightYellow: brighten("#E3D18A", 0.15),
25
+ brightBlue: brighten("#82AAFF", 0.15),
26
+ brightMagenta: "#FF5874",
27
+ brightCyan: brighten("#7FDBCA", 0.15),
28
+ brightWhite: "#C3CCDC",
29
+ foreground: "#C3CCDC",
30
+ background: "#011627",
31
+ cursorColor: "#C3CCDC",
32
+ cursorText: "#011627",
33
+ selectionBackground: "#2C3043",
34
+ selectionForeground: "#C3CCDC",
35
+ }