@@ -305,7 +305,7 @@ function IconSynthwave({ bg, text, accent }: IC): ReactElement {
305305 ) ;
306306}
307307
308- function IconGruvbox ( { text, accent } : IC ) : ReactElement {
308+ function IconGruvbox ( { bg , text, accent } : IC ) : ReactElement {
309309 return (
310310 < svg width = "22" height = "22" viewBox = "0 0 28 28" fill = "none" aria-hidden = "true" >
311311 { /* top handle */ }
@@ -327,7 +327,7 @@ function IconGruvbox({ text, accent }: IC): ReactElement {
327327 { /* lantern body */ }
328328 < rect x = "8" y = "11" width = "12" height = "11" rx = "2.5" fill = { text } opacity = "0.82" />
329329 { /* glass chamber */ }
330- < rect x = "10.2" y = "13" width = "7.6" height = "6.8" rx = "1.5" fill = "#1d2021" opacity = "0.9" />
330+ < rect x = "10.2" y = "13" width = "7.6" height = "6.8" rx = "1.5" fill = { bg } opacity = "0.9" />
331331 { /* warm glow */ }
332332 < ellipse cx = "14" cy = "16.5" rx = "2.8" ry = "3.2" fill = { accent } opacity = "0.95" />
333333 { /* flame */ }
@@ -353,7 +353,145 @@ function IconHighcontrast({ text, accent }: IC): ReactElement {
353353 ) ;
354354}
355355
356- const ICON_MAP : Record < ThemeKey , ( c : IC ) => ReactElement > = {
356+ function IconCatppuccinLatte ( { text, accent } : IC ) : ReactElement {
357+ return (
358+ < svg width = "22" height = "22" viewBox = "0 0 28 28" fill = "none" aria-hidden = "true" >
359+ { /* Cup body */ }
360+ < path d = "M6 10 C6 17, 7 20, 14 20 C21 20, 22 17, 22 10 Z" fill = { accent } opacity = "0.9" />
361+ { /* Cup handle */ }
362+ < path
363+ d = "M22 12 C24.5 12, 24.5 16, 22 16"
364+ stroke = { accent }
365+ strokeWidth = "2.2"
366+ strokeLinecap = "round"
367+ fill = "none"
368+ />
369+ { /* Latte art / foam */ }
370+ < ellipse cx = "14" cy = "10" rx = "6.5" ry = "1.8" fill = { text } opacity = "0.9" />
371+ { /* Steam lines */ }
372+ < path
373+ d = "M11 7 C11 5, 13 5, 13 3"
374+ stroke = { text }
375+ strokeWidth = "1.2"
376+ strokeLinecap = "round"
377+ fill = "none"
378+ opacity = "0.6"
379+ />
380+ < path
381+ d = "M15 7 C15 5, 17 5, 17 3"
382+ stroke = { text }
383+ strokeWidth = "1.2"
384+ strokeLinecap = "round"
385+ fill = "none"
386+ opacity = "0.6"
387+ />
388+ </ svg >
389+ ) ;
390+ }
391+
392+ function IconSolarizedLight ( { text, accent } : IC ) : ReactElement {
393+ return (
394+ < svg width = "22" height = "22" viewBox = "0 0 28 28" fill = "none" aria-hidden = "true" >
395+ < circle cx = "14" cy = "14" r = "5" stroke = { accent } strokeWidth = "2" opacity = "0.95" />
396+ < circle cx = "14" cy = "14" r = "2" fill = { text } opacity = "0.9" />
397+ { /* Solar/Astronomical clean geometric rays */ }
398+ < line x1 = "14" y1 = "3" x2 = "14" y2 = "6" stroke = { accent } strokeWidth = "1.8" strokeLinecap = "round" />
399+ < line
400+ x1 = "14"
401+ y1 = "22"
402+ x2 = "14"
403+ y2 = "25"
404+ stroke = { accent }
405+ strokeWidth = "1.8"
406+ strokeLinecap = "round"
407+ />
408+ < line x1 = "3" y1 = "14" x2 = "6" y2 = "14" stroke = { accent } strokeWidth = "1.8" strokeLinecap = "round" />
409+ < line
410+ x1 = "22"
411+ y1 = "14"
412+ x2 = "25"
413+ y2 = "14"
414+ stroke = { accent }
415+ strokeWidth = "1.8"
416+ strokeLinecap = "round"
417+ />
418+ < line
419+ x1 = "6.2"
420+ y1 = "6.2"
421+ x2 = "8.3"
422+ y2 = "8.3"
423+ stroke = { accent }
424+ strokeWidth = "1.5"
425+ strokeLinecap = "round"
426+ opacity = "0.7"
427+ />
428+ < line
429+ x1 = "19.7"
430+ y1 = "19.7"
431+ x2 = "21.8"
432+ y2 = "21.8"
433+ stroke = { accent }
434+ strokeWidth = "1.5"
435+ strokeLinecap = "round"
436+ opacity = "0.7"
437+ />
438+ < line
439+ x1 = "19.7"
440+ y1 = "6.2"
441+ x2 = "17.6"
442+ y2 = "8.3"
443+ stroke = { accent }
444+ strokeWidth = "1.5"
445+ strokeLinecap = "round"
446+ opacity = "0.7"
447+ />
448+ < line
449+ x1 = "6.2"
450+ y1 = "19.7"
451+ x2 = "8.3"
452+ y2 = "17.6"
453+ stroke = { accent }
454+ strokeWidth = "1.5"
455+ strokeLinecap = "round"
456+ opacity = "0.7"
457+ />
458+ </ svg >
459+ ) ;
460+ }
461+
462+ function IconAuroraCyberpunk ( { text, accent } : IC ) : ReactElement {
463+ return (
464+ < svg width = "22" height = "22" viewBox = "0 0 28 28" fill = "none" aria-hidden = "true" >
465+ { /* Cyberpunk double triangles */ }
466+ < polygon
467+ points = "14,4 24,20 4,20"
468+ stroke = { accent }
469+ strokeWidth = "2.2"
470+ strokeLinejoin = "round"
471+ opacity = "0.9"
472+ />
473+ < polygon
474+ points = "14,10 20,20 8,20"
475+ stroke = { text }
476+ strokeWidth = "1.2"
477+ strokeLinejoin = "round"
478+ opacity = "0.7"
479+ />
480+ < line
481+ x1 = "14"
482+ y1 = "4"
483+ x2 = "14"
484+ y2 = "20"
485+ stroke = { accent }
486+ strokeWidth = "1"
487+ strokeDasharray = "2 2"
488+ opacity = "0.5"
489+ />
490+ </ svg >
491+ ) ;
492+ }
493+
494+ const ICON_MAP : Record < string , ( c : IC ) => ReactElement > = {
357495 dark : ( c ) => < IconDark { ...c } /> ,
358496 light : ( c ) => < IconLight { ...c } /> ,
359497 neon : ( c ) => < IconNeon { ...c } /> ,
@@ -367,6 +505,11 @@ const ICON_MAP: Record<ThemeKey, (c: IC) => ReactElement> = {
367505 synthwave : ( c ) => < IconSynthwave { ...c } /> ,
368506 gruvbox : ( c ) => < IconGruvbox { ...c } /> ,
369507 highcontrast : ( c ) => < IconHighcontrast { ...c } /> ,
508+ aurora_cyberpunk : ( c ) => < IconAuroraCyberpunk { ...c } /> ,
509+ catppuccin_latte : ( c ) => < IconCatppuccinLatte { ...c } /> ,
510+ solarized_light : ( c ) => < IconSolarizedLight { ...c } /> ,
511+ gruvbox_light : ( c ) => < IconGruvbox { ...c } /> ,
512+ nord_light : ( c ) => < IconNord { ...c } /> ,
370513} ;
371514
372515export function ThemeQuickPresets ( { theme, onThemeChange } : ThemeQuickPresetsProps ) : ReactElement {
0 commit comments