From 21b538af99969429f42a5081e426260491fdaa4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Sun, 9 Mar 2025 10:16:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4CSS=E8=87=AA=E5=8A=A8Scheme?= =?UTF-8?q?=E7=9A=84=E8=BE=93=E5=87=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/schemes/material_design_2/baseline.rs | 5 +- .../schemes/material_design_2/color_set.rs | 7 ++- .../src/schemes/material_design_2/mod.rs | 13 +++-- .../src/schemes/material_design_3/baseline.rs | 5 +- .../schemes/material_design_3/color_set.rs | 7 ++- .../src/schemes/material_design_3/mod.rs | 13 ++--- .../src/schemes/material_design_3/surface.rs | 7 ++- color-module/src/schemes/q_style/baseline.rs | 7 ++- color-module/src/schemes/q_style/color_set.rs | 7 ++- color-module/src/schemes/q_style/mod.rs | 11 ++-- color-module/src/schemes/swatch_style/mod.rs | 52 ++++++++----------- 11 files changed, 62 insertions(+), 72 deletions(-) diff --git a/color-module/src/schemes/material_design_2/baseline.rs b/color-module/src/schemes/material_design_2/baseline.rs index 6a0a9f0..06ecadb 100644 --- a/color-module/src/schemes/material_design_2/baseline.rs +++ b/color-module/src/schemes/material_design_2/baseline.rs @@ -1,5 +1,6 @@ use std::collections::HashMap; +use linked_hash_map::LinkedHashMap; use serde::{ser::SerializeStruct, Serialize}; use crate::{convert::map_hsl_to_srgb_hex, errors, schemes::material_design_2::swatch::M2Swatch}; @@ -81,8 +82,8 @@ impl M2BaselineColors { variable_lines } - pub fn to_css_auto_scheme_collection(&self) -> HashMap { - let mut variables = HashMap::new(); + pub fn to_css_auto_scheme_collection(&self) -> LinkedHashMap { + let mut variables = LinkedHashMap::new(); variables.extend(self.primary.to_css_auto_scheme_collection("primary")); variables.extend(self.secondary.to_css_auto_scheme_collection("secondary")); diff --git a/color-module/src/schemes/material_design_2/color_set.rs b/color-module/src/schemes/material_design_2/color_set.rs index 5597e2e..ca77f96 100644 --- a/color-module/src/schemes/material_design_2/color_set.rs +++ b/color-module/src/schemes/material_design_2/color_set.rs @@ -1,5 +1,4 @@ -use std::collections::HashMap; - +use linked_hash_map::LinkedHashMap; use serde::Serialize; use crate::{convert::map_hsl_to_srgb_hex, errors}; @@ -84,8 +83,8 @@ impl M2ColorSet { variable_lines } - pub fn to_css_auto_scheme_collection(&self, name: &str) -> HashMap { - let mut variables = HashMap::new(); + pub fn to_css_auto_scheme_collection(&self, name: &str) -> LinkedHashMap { + let mut variables = LinkedHashMap::new(); variables.insert(format!("{}", name), self.root.clone()); variables.insert(format!("{}-variant", name), self.variant.clone()); diff --git a/color-module/src/schemes/material_design_2/mod.rs b/color-module/src/schemes/material_design_2/mod.rs index d191734..3641f85 100644 --- a/color-module/src/schemes/material_design_2/mod.rs +++ b/color-module/src/schemes/material_design_2/mod.rs @@ -1,6 +1,5 @@ -use std::collections::HashSet; - use baseline::M2BaselineColors; +use linked_hash_set::LinkedHashSet; use palette::Hsl; use serde::Serialize; @@ -52,20 +51,20 @@ impl SchemeExport for MaterialDesign2Scheme { fn output_css_auto_scheme_variables(&self) -> String { let mut auto_scheme_variables = Vec::new(); - let mut keys = HashSet::new(); + let mut keys = LinkedHashSet::new(); let light_baseline = self.light.to_css_auto_scheme_collection(); let dark_baseline = self.dark.to_css_auto_scheme_collection(); auto_scheme_variables.push(format!("--color-white: #{};", self.white)); auto_scheme_variables.push(format!("--color-black: #{};", self.black)); - keys.extend(light_baseline.keys()); - keys.extend(dark_baseline.keys()); + keys.extend(light_baseline.keys().cloned()); + keys.extend(dark_baseline.keys().cloned()); for key in keys { - match (light_baseline.get(key), dark_baseline.get(key)) { + match (light_baseline.get(&key), dark_baseline.get(&key)) { (Some(light), Some(dark)) => { auto_scheme_variables.push(format!( - "--color-{}: light-dark(#{}, #{}):", + "--color-{}: light-dark(#{}, #{});", key, light, dark )); } diff --git a/color-module/src/schemes/material_design_3/baseline.rs b/color-module/src/schemes/material_design_3/baseline.rs index 79dccae..5a174a8 100644 --- a/color-module/src/schemes/material_design_3/baseline.rs +++ b/color-module/src/schemes/material_design_3/baseline.rs @@ -1,5 +1,6 @@ use std::collections::HashMap; +use linked_hash_map::LinkedHashMap; use serde::Serialize; use crate::convert::map_lch_to_srgb_hex; @@ -131,8 +132,8 @@ impl M3BaselineColors { css_variables } - pub fn to_css_auto_scheme_collection(&self) -> HashMap { - let mut collection = HashMap::new(); + pub fn to_css_auto_scheme_collection(&self) -> LinkedHashMap { + let mut collection = LinkedHashMap::new(); collection.extend(self.primary.to_css_auto_scheme_collection("primary")); collection.extend(self.secondary.to_css_auto_scheme_collection("secondary")); diff --git a/color-module/src/schemes/material_design_3/color_set.rs b/color-module/src/schemes/material_design_3/color_set.rs index e38e25f..1f05479 100644 --- a/color-module/src/schemes/material_design_3/color_set.rs +++ b/color-module/src/schemes/material_design_3/color_set.rs @@ -1,5 +1,4 @@ -use std::collections::HashMap; - +use linked_hash_map::LinkedHashMap; use serde::Serialize; use crate::convert::map_lch_to_srgb_hex; @@ -108,8 +107,8 @@ impl M3ColorSet { variable_lines } - pub fn to_css_auto_scheme_collection(&self, name: &str) -> HashMap { - let mut variables = HashMap::new(); + pub fn to_css_auto_scheme_collection(&self, name: &str) -> LinkedHashMap { + let mut variables = LinkedHashMap::new(); variables.insert(format!("{}", name), self.root.clone()); variables.insert(format!("on-{}", name), self.on_root.clone()); diff --git a/color-module/src/schemes/material_design_3/mod.rs b/color-module/src/schemes/material_design_3/mod.rs index fc69e63..08c5ab7 100644 --- a/color-module/src/schemes/material_design_3/mod.rs +++ b/color-module/src/schemes/material_design_3/mod.rs @@ -1,8 +1,9 @@ -use std::collections::{HashMap, HashSet}; +use std::collections::HashMap; use std::str::FromStr; pub use baseline::M3BaselineColors; pub use color_set::M3ColorSet; +use linked_hash_set::LinkedHashSet; use palette::{IntoColor, Lch, Srgb}; use serde::Serialize; pub use surface::M3SurfaceSet; @@ -113,19 +114,19 @@ impl SchemeExport for MaterialDesign3Scheme { fn output_css_auto_scheme_variables(&self) -> String { let mut auto_scheme_variables = Vec::new(); - let mut keys = HashSet::new(); + let mut keys = LinkedHashSet::new(); let light_baseline = self.light_baseline.to_css_auto_scheme_collection(); let dark_baseline = self.dark_baseline.to_css_auto_scheme_collection(); auto_scheme_variables.push(format!("--color-white: #{};", self.white)); auto_scheme_variables.push(format!("--color-black: #{};", self.black)); - keys.extend(light_baseline.keys()); - keys.extend(dark_baseline.keys()); + keys.extend(light_baseline.keys().cloned()); + keys.extend(dark_baseline.keys().cloned()); for key in keys { - match (light_baseline.get(key), dark_baseline.get(key)) { + match (light_baseline.get(&key), dark_baseline.get(&key)) { (Some(light), Some(dark)) => { auto_scheme_variables.push(format!( - "--color-{}: light-dark(#{}, #{}):", + "--color-{}: light-dark(#{}, #{});", key, light, dark )); } diff --git a/color-module/src/schemes/material_design_3/surface.rs b/color-module/src/schemes/material_design_3/surface.rs index 8e1cbf3..cd8551d 100644 --- a/color-module/src/schemes/material_design_3/surface.rs +++ b/color-module/src/schemes/material_design_3/surface.rs @@ -1,5 +1,4 @@ -use std::collections::HashMap; - +use linked_hash_map::LinkedHashMap; use serde::Serialize; use crate::convert::map_lch_to_srgb_hex; @@ -138,8 +137,8 @@ impl M3SurfaceSet { css_variables } - pub fn to_css_auto_scheme_collection(&self) -> HashMap { - let mut auto_scheme_collection = HashMap::new(); + pub fn to_css_auto_scheme_collection(&self) -> LinkedHashMap { + let mut auto_scheme_collection = LinkedHashMap::new(); auto_scheme_collection.insert(format!("surface"), self.root.clone()); auto_scheme_collection.insert(format!("surface-dim"), self.dim.clone()); diff --git a/color-module/src/schemes/q_style/baseline.rs b/color-module/src/schemes/q_style/baseline.rs index 87bbea8..91a7e59 100644 --- a/color-module/src/schemes/q_style/baseline.rs +++ b/color-module/src/schemes/q_style/baseline.rs @@ -1,5 +1,4 @@ -use std::collections::HashMap; - +use linked_hash_map::LinkedHashMap; use palette::{ color_theory::{Analogous, Complementary, SplitComplementary, Tetradic, Triadic}, Oklch, ShiftHue, @@ -160,8 +159,8 @@ impl Baseline { variables } - pub fn to_css_auto_scheme_collection(&self) -> HashMap { - let mut collection = HashMap::new(); + pub fn to_css_auto_scheme_collection(&self) -> LinkedHashMap { + let mut collection = LinkedHashMap::new(); collection.extend(self.primary.to_css_auto_scheme_collection("primary")); if let Some(secondary) = &self.secondary { diff --git a/color-module/src/schemes/q_style/color_set.rs b/color-module/src/schemes/q_style/color_set.rs index 845d08d..fee30d3 100644 --- a/color-module/src/schemes/q_style/color_set.rs +++ b/color-module/src/schemes/q_style/color_set.rs @@ -1,5 +1,4 @@ -use std::collections::HashMap; - +use linked_hash_map::LinkedHashMap; use palette::{color_difference::Wcag21RelativeContrast, luma::Luma, Oklch}; use serde::{ser::SerializeStruct, Serialize}; @@ -181,8 +180,8 @@ impl ColorSet { variables } - pub fn to_css_auto_scheme_collection(&self, name: &str) -> HashMap { - let mut collection = HashMap::new(); + pub fn to_css_auto_scheme_collection(&self, name: &str) -> LinkedHashMap { + let mut collection = LinkedHashMap::new(); collection.insert(format!("{}", name), map_oklch_to_srgb_hex(&self.root)); collection.insert( diff --git a/color-module/src/schemes/q_style/mod.rs b/color-module/src/schemes/q_style/mod.rs index 808fc9d..c44e0a7 100644 --- a/color-module/src/schemes/q_style/mod.rs +++ b/color-module/src/schemes/q_style/mod.rs @@ -1,6 +1,7 @@ -use std::{collections::HashSet, str::FromStr}; +use std::str::FromStr; use baseline::Baseline; +use linked_hash_set::LinkedHashSet; use palette::FromColor; use scheme_setting::{ColorExpand, WACGSetting}; use serde::Serialize; @@ -132,14 +133,14 @@ impl SchemeExport for QScheme { fn output_css_auto_scheme_variables(&self) -> String { let mut collection = Vec::new(); - let mut keys = HashSet::new(); + let mut keys = LinkedHashSet::new(); let light_collection = self.light.to_css_auto_scheme_collection(); let dark_collection = self.dark.to_css_auto_scheme_collection(); - keys.extend(light_collection.keys()); - keys.extend(dark_collection.keys()); + keys.extend(light_collection.keys().cloned()); + keys.extend(dark_collection.keys().cloned()); for key in keys { - match (light_collection.get(key), dark_collection.get(key)) { + match (light_collection.get(&key), dark_collection.get(&key)) { (Some(light), Some(dark)) => { collection.push(format!( "--color-{}: light-dark(#{}, #{});", diff --git a/color-module/src/schemes/swatch_style/mod.rs b/color-module/src/schemes/swatch_style/mod.rs index 92db56e..7a03ee8 100644 --- a/color-module/src/schemes/swatch_style/mod.rs +++ b/color-module/src/schemes/swatch_style/mod.rs @@ -1,6 +1,8 @@ +use linked_hash_map::LinkedHashMap; +use linked_hash_set::LinkedHashSet; use palette::FromColor; use serde::{Deserialize, Serialize}; -use std::collections::{HashMap, HashSet}; +use std::collections::HashMap; use std::str::FromStr; pub use setting::SwatchSchemeSetting; @@ -95,42 +97,32 @@ impl SchemeExport for SwatchScheme { fn output_css_auto_scheme_variables(&self) -> String { let mut variables = Vec::new(); - let mut keys = HashSet::new(); - let mut names = HashSet::new(); - let mut light_collections = HashMap::new(); - let mut dark_collections = HashMap::new(); - - names.extend(self.light.keys()); - names.extend(self.dark.keys()); + let mut keys = LinkedHashSet::new(); + let mut light_collections = LinkedHashMap::new(); + let mut dark_collections = LinkedHashMap::new(); for (name, swatch) in &self.light { - let collection = swatch.to_css_auto_scheme_collection(&name); - keys.extend(collection.keys().cloned()); - light_collections.insert(name.clone(), collection.clone()); + light_collections.extend(swatch.to_css_auto_scheme_collection(&name.to_lowercase())); } for (name, swatch) in &self.dark { - let collection = swatch.to_css_auto_scheme_collection(&name); - keys.extend(collection.keys().cloned()); - dark_collections.insert(name.clone(), collection.clone()); + dark_collections.extend(swatch.to_css_auto_scheme_collection(&name.to_lowercase())); } - for name in names { - for key in keys.iter() { - match ( - light_collections.get(name).and_then(|lc| lc.get(key)), - dark_collections.get(name).and_then(|dc| dc.get(key)), - ) { - (Some(light), Some(dark)) => { - variables.push(format!( - "--color-{}-{}: light-dark(#{}, #{});", - name, key, light, dark - )); - } - (Some(color), None) | (None, Some(color)) => { - variables.push(format!("--color-{}-{}: #{};", name, key, color)); - } - (None, None) => {} + keys.extend(light_collections.keys().cloned()); + keys.extend(dark_collections.keys().cloned()); + + for key in keys.iter() { + match (light_collections.get(key), dark_collections.get(key)) { + (Some(light), Some(dark)) => { + variables.push(format!( + "--color-{}: light-dark(#{}, #{});", + key, light, dark + )); } + (Some(color), None) | (None, Some(color)) => { + variables.push(format!("--color-{}: #{};", key, color)); + } + (None, None) => {} } } variables.join("\n")