@@ -733,13 +733,173 @@ export const EXTENDED_COLOR_LABELS: Record<string, string> = Object.fromEntries(
733733 EXTENDED_COLOR_ROLES . map ( r => [ r . key , r . label ] )
734734) ;
735735
736- export const EXTRACTION_MODES = [
737- { value : 'normal' , label : 'Auto Detect' } ,
738- { value : 'monochromatic' , label : 'Monochromatic' } ,
739- { value : 'analogous' , label : 'Analogous' } ,
740- { value : 'pastel' , label : 'Pastel' } ,
741- { value : 'material' , label : 'Material' } ,
742- { value : 'colorful' , label : 'Colorful' } ,
743- { value : 'muted' , label : 'Muted' } ,
744- { value : 'bright' , label : 'Bright' } ,
736+ export type ExtractionModeGroup =
737+ | 'auto'
738+ | 'theory'
739+ | 'style'
740+ | 'mood'
741+ | 'practical' ;
742+
743+ export interface ExtractionMode {
744+ value : string ;
745+ label : string ;
746+ group : ExtractionModeGroup ;
747+ description : string ;
748+ }
749+
750+ export const EXTRACTION_MODES : ExtractionMode [ ] = [
751+ {
752+ value : 'normal' ,
753+ label : 'Auto Detect' ,
754+ group : 'auto' ,
755+ description : 'Picks monochrome or chromatic based on image analysis' ,
756+ } ,
757+
758+ {
759+ value : 'monochromatic' ,
760+ label : 'Monochromatic' ,
761+ group : 'theory' ,
762+ description : 'Single hue across all slots, varying lightness' ,
763+ } ,
764+ {
765+ value : 'analogous' ,
766+ label : 'Analogous' ,
767+ group : 'theory' ,
768+ description : 'Hues within ±30° of the dominant color' ,
769+ } ,
770+ {
771+ value : 'complementary' ,
772+ label : 'Complementary' ,
773+ group : 'theory' ,
774+ description : 'Base hue alternating with its 180° opposite' ,
775+ } ,
776+ {
777+ value : 'triadic' ,
778+ label : 'Triadic' ,
779+ group : 'theory' ,
780+ description : 'Three hues evenly spaced at 120°' ,
781+ } ,
782+ {
783+ value : 'split-complementary' ,
784+ label : 'Split-Complementary' ,
785+ group : 'theory' ,
786+ description : 'Base hue plus 150° and 210° (softer complement)' ,
787+ } ,
788+ {
789+ value : 'tetradic' ,
790+ label : 'Tetradic' ,
791+ group : 'theory' ,
792+ description : 'Four hues at 90° on the color wheel' ,
793+ } ,
794+
795+ {
796+ value : 'pastel' ,
797+ label : 'Pastel' ,
798+ group : 'style' ,
799+ description : 'Soft, low chroma, high lightness' ,
800+ } ,
801+ {
802+ value : 'muted' ,
803+ label : 'Muted' ,
804+ group : 'style' ,
805+ description : 'Subdued, low chroma, lightness-staggered' ,
806+ } ,
807+ {
808+ value : 'bright' ,
809+ label : 'Bright' ,
810+ group : 'style' ,
811+ description : 'High lightness with healthy chroma' ,
812+ } ,
813+ {
814+ value : 'colorful' ,
815+ label : 'Colorful' ,
816+ group : 'style' ,
817+ description : 'Vivid, high chroma, mid lightness' ,
818+ } ,
819+ {
820+ value : 'material' ,
821+ label : 'Material' ,
822+ group : 'style' ,
823+ description : 'Material Design-inspired with fixed bg/fg' ,
824+ } ,
825+
826+ {
827+ value : 'fire' ,
828+ label : 'Fire' ,
829+ group : 'mood' ,
830+ description : 'Bonfire warmth — deep dark, warm ANSI' ,
831+ } ,
832+ {
833+ value : 'ocean' ,
834+ label : 'Ocean' ,
835+ group : 'mood' ,
836+ description : 'Deep blue-black, cool-shifted ANSI' ,
837+ } ,
838+ {
839+ value : 'forest' ,
840+ label : 'Forest' ,
841+ group : 'mood' ,
842+ description : 'Dark green-black, sage-shifted ANSI' ,
843+ } ,
844+ {
845+ value : 'earthtone' ,
846+ label : 'Earthtone' ,
847+ group : 'mood' ,
848+ description : 'Warm browns and beiges, very low chroma' ,
849+ } ,
850+ {
851+ value : 'neon' ,
852+ label : 'Neon' ,
853+ group : 'mood' ,
854+ description : 'Cyberpunk: very dark bg, max chroma' ,
855+ } ,
856+ {
857+ value : 'sunset' ,
858+ label : 'Sunset' ,
859+ group : 'mood' ,
860+ description : 'Warm dark with magenta cast, peach fg' ,
861+ } ,
862+ {
863+ value : 'vaporwave' ,
864+ label : 'Vaporwave' ,
865+ group : 'mood' ,
866+ description : 'Pinks, purples, cyans on a soft dark' ,
867+ } ,
868+ {
869+ value : 'midnight' ,
870+ label : 'Midnight' ,
871+ group : 'mood' ,
872+ description : 'Peaceful deep indigo, subdued silver' ,
873+ } ,
874+ {
875+ value : 'aurora' ,
876+ label : 'Aurora' ,
877+ group : 'mood' ,
878+ description : 'Shimmery green-cyan glow on deep blue-night' ,
879+ } ,
880+
881+ {
882+ value : 'high-contrast' ,
883+ label : 'High Contrast' ,
884+ group : 'practical' ,
885+ description : 'WCAG AAA (7:1) for maximum readability' ,
886+ } ,
887+ {
888+ value : 'duotone' ,
889+ label : 'Duotone' ,
890+ group : 'practical' ,
891+ description : 'Two hues only at varying lightness' ,
892+ } ,
893+ ] ;
894+
895+ export const EXTRACTION_MODE_GROUPS : {
896+ id : ExtractionModeGroup ;
897+ label : string ;
898+ defaultOpen : boolean ;
899+ } [ ] = [
900+ { id : 'auto' , label : 'Auto' , defaultOpen : true } ,
901+ { id : 'style' , label : 'Style' , defaultOpen : true } ,
902+ { id : 'theory' , label : 'Color Theory' , defaultOpen : false } ,
903+ { id : 'mood' , label : 'Mood' , defaultOpen : false } ,
904+ { id : 'practical' , label : 'Practical' , defaultOpen : false } ,
745905] ;
0 commit comments