Compare commits

...

7 Commits

Author SHA1 Message Date
徐涛
3f2e655b1c build: 添加上传脚本
- 新增 upload 脚本文件
- 使用 rsync 命令将 dist 目录内容同步到 archgrid.net 服务器的 /var/www/color-lab/ 目录
2025-07-31 08:14:12 +08:00
徐涛
ae37903673 feat(color): 调整 QStyle2 基准配色方案
- 修改 outline_color、outline_variant_color 和 overlay_color 的生成逻辑
- 优化暗黑和明亮主题下的颜色选择
- 简化颜色计算公式,提高代码可读性
2025-07-31 08:12:57 +08:00
徐涛
d88eebe356 feat(color): 调整中性色 swatch 的倍率以适应新的颜色方案
- 调整了 neutral_swatch.get 方法中的倍率参数
- 针对暗黑模式和普通模式分别设置了不同的倍率值
- 修改了 outline_color 和 outline_variant_color 的生成逻辑
2025-07-31 06:06:48 +08:00
徐涛
f6ff4b10e6 fix(color-module): 修正surface变量的命名格式
统一surface变量的命名格式,在CSS、SCSS和JavaScript中使用一致的命名规则
2025-07-28 06:08:42 +08:00
徐涛
1e4a9fd858 feat(颜色方案): 增加中性色板生成功能
- 在`baseline.rs`中添加新的CSS变量生成逻辑
- 在`swatch.rs`中添加`generate_neutral_swatch_list`函数
- 优化danger、success、warn和info的CSS变量生成
- 修复CSS变量生成中的拼写错误
- 更新JavaScript字段生成逻辑
2025-07-23 06:35:36 +08:00
徐涛
034f12c99b fix: 将自定义颜色名称转换为小写以保持一致性 2025-07-21 22:37:47 +08:00
徐涛
61ff3eff5c fix(swatch): 修正颜色样本键名前缀格式 2025-07-21 22:33:59 +08:00
3 changed files with 96 additions and 23 deletions

View File

@@ -12,7 +12,10 @@ use crate::{
errors, errors,
schemes::{ schemes::{
q_style::{ColorExpand, NeutralSwatch, SchemeSetting}, q_style::{ColorExpand, NeutralSwatch, SchemeSetting},
q_style_2::{color_set::ColorSet, swatch::Swatch}, q_style_2::{
color_set::ColorSet,
swatch::{Swatch, generate_neutral_swatch_list},
},
}, },
}; };
@@ -46,7 +49,10 @@ impl ColorUnit {
let mut css_variables = Vec::new(); let mut css_variables = Vec::new();
css_variables.extend(self.root.to_css_variables(prefix, name)); css_variables.extend(self.root.to_css_variables(prefix, name));
css_variables.extend(self.surface.to_css_variables(prefix, name)); css_variables.extend(
self.surface
.to_css_variables(prefix, &format!("{name}-surface")),
);
css_variables.extend(self.swatch.to_css_variables(prefix, name)); css_variables.extend(self.swatch.to_css_variables(prefix, name));
css_variables css_variables
@@ -56,7 +62,10 @@ impl ColorUnit {
let mut css_auto_scheme_collection = LinkedHashMap::new(); let mut css_auto_scheme_collection = LinkedHashMap::new();
css_auto_scheme_collection.extend(self.root.to_css_auto_scheme_collection(name)); css_auto_scheme_collection.extend(self.root.to_css_auto_scheme_collection(name));
css_auto_scheme_collection.extend(self.surface.to_css_auto_scheme_collection(name)); css_auto_scheme_collection.extend(
self.surface
.to_css_auto_scheme_collection(&format!("{name}-surface")),
);
css_auto_scheme_collection.extend(self.swatch.to_css_auto_scheme_collection(name)); css_auto_scheme_collection.extend(self.swatch.to_css_auto_scheme_collection(name));
css_auto_scheme_collection css_auto_scheme_collection
@@ -66,7 +75,10 @@ impl ColorUnit {
let mut scss_variables = Vec::new(); let mut scss_variables = Vec::new();
scss_variables.extend(self.root.to_scss_variables(prefix, name)); scss_variables.extend(self.root.to_scss_variables(prefix, name));
scss_variables.extend(self.surface.to_scss_variables(prefix, name)); scss_variables.extend(
self.surface
.to_scss_variables(prefix, &format!("{name}-surface")),
);
scss_variables.extend(self.swatch.to_scss_variables(prefix, name)); scss_variables.extend(self.swatch.to_scss_variables(prefix, name));
scss_variables scss_variables
@@ -76,7 +88,7 @@ impl ColorUnit {
let mut js_object_fields = Vec::new(); let mut js_object_fields = Vec::new();
js_object_fields.extend(self.root.to_javascript_fields(name)); js_object_fields.extend(self.root.to_javascript_fields(name));
js_object_fields.extend(self.surface.to_javascript_fields(name)); js_object_fields.extend(self.surface.to_javascript_fields(&format!("{name}Surface")));
js_object_fields.extend(self.swatch.to_javascript_fields(name)); js_object_fields.extend(self.swatch.to_javascript_fields(name));
js_object_fields js_object_fields
@@ -195,13 +207,10 @@ impl Baseline {
neutral_lightest.l neutral_lightest.l
}; };
let neutral_swatch = Arc::new(NeutralSwatch::new(*neutral_lightest, *neutral_darkest)); let neutral_swatch = Arc::new(NeutralSwatch::new(*neutral_lightest, *neutral_darkest));
let outline_color = let outline_color = neutral_swatch.get(if is_dark { 0.25 } else { 0.7 });
neutral_swatch.get(neutral_lightest.l * if is_dark { 0.5 } else { 0.7 }); let outline_variant_color = neutral_swatch.get(if is_dark { 0.2 } else { 0.8 });
let outline_variant_color =
neutral_swatch.get(neutral_lightest.l * if is_dark { 0.3 } else { 0.8 });
let shadow_color = neutral_swatch.get(0.1); let shadow_color = neutral_swatch.get(0.1);
let overlay_color = let overlay_color = neutral_swatch.get(0.3);
neutral_swatch.get(neutral_lightest.l * if is_dark { 0.4 } else { 0.5 });
let neutral_color = neutral_swatch.get(if is_dark { 0.35 } else { 0.65 }); let neutral_color = neutral_swatch.get(if is_dark { 0.35 } else { 0.65 });
let neutral_variant_color = neutral_swatch.get(if is_dark { 0.45 } else { 0.55 }); let neutral_variant_color = neutral_swatch.get(if is_dark { 0.45 } else { 0.55 });
@@ -301,6 +310,11 @@ impl Baseline {
if let Some(accent) = &self.accent { if let Some(accent) = &self.accent {
css_variables.extend(accent.to_css_variables(scheme_mode, "accent")); css_variables.extend(accent.to_css_variables(scheme_mode, "accent"));
} }
css_variables.extend(self.danger.to_css_variables(scheme_mode, "danger"));
css_variables.extend(self.success.to_css_variables(scheme_mode, "success"));
css_variables.extend(self.warn.to_css_variables(scheme_mode, "warn"));
css_variables.extend(self.info.to_css_variables(scheme_mode, "info"));
css_variables.extend(self.neutral.to_css_variables(scheme_mode, "neutral")); css_variables.extend(self.neutral.to_css_variables(scheme_mode, "neutral"));
css_variables.extend( css_variables.extend(
self.neutral_variant self.neutral_variant
@@ -311,10 +325,11 @@ impl Baseline {
self.surface_variant self.surface_variant
.to_css_variables(scheme_mode, "surface-variant"), .to_css_variables(scheme_mode, "surface-variant"),
); );
css_variables.extend(self.danger.to_css_variables(scheme_mode, "danger"));
css_variables.extend(self.success.to_css_variables(scheme_mode, "success")); let neutral_swatch = generate_neutral_swatch_list(&self.neutral_swatch);
css_variables.extend(self.warn.to_css_variables(scheme_mode, "warn")); for (n, c) in neutral_swatch {
css_variables.extend(self.info.to_css_variables(scheme_mode, "info")); css_variables.push(format!("--color-{scheme_mode}-swatch-neutral-{n}: #{c};"));
}
css_variables.push(format!( css_variables.push(format!(
"--color-{scheme_mode}-shadow: #{};", "--color-{scheme_mode}-shadow: #{};",
@@ -334,7 +349,8 @@ impl Baseline {
)); ));
for (name, color_unit) in &self.custom_colors { for (name, color_unit) in &self.custom_colors {
css_variables.extend(color_unit.to_css_variables(scheme_mode, name)); let lowercased_name = name.to_lowercase();
css_variables.extend(color_unit.to_css_variables(scheme_mode, &lowercased_name));
} }
css_variables css_variables
@@ -353,6 +369,10 @@ impl Baseline {
if let Some(accent) = &self.accent { if let Some(accent) = &self.accent {
css_variables.extend(accent.to_css_auto_scheme_collection("accent")); css_variables.extend(accent.to_css_auto_scheme_collection("accent"));
} }
css_variables.extend(self.danger.to_css_auto_scheme_collection("danger"));
css_variables.extend(self.success.to_css_auto_scheme_collection("success"));
css_variables.extend(self.warn.to_css_auto_scheme_collection("warn"));
css_variables.extend(self.info.to_css_auto_scheme_collection("info"));
css_variables.extend(self.neutral.to_css_auto_scheme_collection("neutral")); css_variables.extend(self.neutral.to_css_auto_scheme_collection("neutral"));
css_variables.extend( css_variables.extend(
self.neutral_variant self.neutral_variant
@@ -364,6 +384,11 @@ impl Baseline {
.to_css_auto_scheme_collection("surface-variant"), .to_css_auto_scheme_collection("surface-variant"),
); );
let neutral_swatch = generate_neutral_swatch_list(&self.neutral_swatch);
for (n, c) in neutral_swatch {
css_variables.insert(format!("swatch-neutral-{n}"), c);
}
css_variables.insert("shadow".to_string(), map_oklch_to_srgb_hex(&self.shadow)); css_variables.insert("shadow".to_string(), map_oklch_to_srgb_hex(&self.shadow));
css_variables.insert("overlay".to_string(), map_oklch_to_srgb_hex(&self.overlay)); css_variables.insert("overlay".to_string(), map_oklch_to_srgb_hex(&self.overlay));
css_variables.insert("outline".to_string(), map_oklch_to_srgb_hex(&self.outline)); css_variables.insert("outline".to_string(), map_oklch_to_srgb_hex(&self.outline));
@@ -373,7 +398,8 @@ impl Baseline {
); );
for (name, color) in &self.custom_colors { for (name, color) in &self.custom_colors {
css_variables.extend(color.to_css_auto_scheme_collection(name)); let lowercased_name = name.to_lowercase();
css_variables.extend(color.to_css_auto_scheme_collection(&lowercased_name));
} }
css_variables css_variables
@@ -393,6 +419,10 @@ impl Baseline {
if let Some(accent) = &self.accent { if let Some(accent) = &self.accent {
scss_variables.extend(accent.to_scss_variables(scheme_mode, "accent")); scss_variables.extend(accent.to_scss_variables(scheme_mode, "accent"));
} }
scss_variables.extend(self.danger.to_scss_variables(scheme_mode, "danger"));
scss_variables.extend(self.success.to_scss_variables(scheme_mode, "success"));
scss_variables.extend(self.warn.to_scss_variables(scheme_mode, "warn"));
scss_variables.extend(self.info.to_scss_variables(scheme_mode, "info"));
scss_variables.extend(self.neutral.to_scss_variables(scheme_mode, "neutral")); scss_variables.extend(self.neutral.to_scss_variables(scheme_mode, "neutral"));
scss_variables.extend( scss_variables.extend(
@@ -405,23 +435,33 @@ impl Baseline {
.to_scss_variables(scheme_mode, "surface-variant"), .to_scss_variables(scheme_mode, "surface-variant"),
); );
let neutral_swatch = generate_neutral_swatch_list(&self.neutral_swatch);
for (n, c) in neutral_swatch {
scss_variables.push(format!("$color-{scheme_mode}-swatch-neutral-{n}: #{c};"));
}
scss_variables.push(format!( scss_variables.push(format!(
"--color-{scheme_mode}-shadow: #{};", "$color-{scheme_mode}-shadow: #{};",
map_oklch_to_srgb_hex(&self.shadow) map_oklch_to_srgb_hex(&self.shadow)
)); ));
scss_variables.push(format!( scss_variables.push(format!(
"--color-{scheme_mode}-overlay: #{};", "$color-{scheme_mode}-overlay: #{};",
map_oklch_to_srgb_hex(&self.overlay) map_oklch_to_srgb_hex(&self.overlay)
)); ));
scss_variables.push(format!( scss_variables.push(format!(
"--color-{scheme_mode}-outlint: #{};", "$color-{scheme_mode}-outlint: #{};",
map_oklch_to_srgb_hex(&self.outline) map_oklch_to_srgb_hex(&self.outline)
)); ));
scss_variables.push(format!( scss_variables.push(format!(
"--color-{scheme_mode}-outline-variant: #{};", "$color-{scheme_mode}-outline-variant: #{};",
map_oklch_to_srgb_hex(&self.outline_variant) map_oklch_to_srgb_hex(&self.outline_variant)
)); ));
for (name, color) in &self.custom_colors {
let lowercased_name = name.to_lowercase();
scss_variables.extend(color.to_scss_variables(scheme_mode, &lowercased_name));
}
scss_variables scss_variables
} }
@@ -463,6 +503,18 @@ impl Baseline {
javascript_fields.push(format!("{indent}{line:4}")); javascript_fields.push(format!("{indent}{line:4}"));
} }
for line in self.danger.to_javascript_fields("danger").iter() {
javascript_fields.push(format!("{indent}{line:4}"));
}
for line in self.success.to_javascript_fields("success").iter() {
javascript_fields.push(format!("{indent}{line:4}"));
}
for line in self.warn.to_javascript_fields("warn").iter() {
javascript_fields.push(format!("{indent}{line:4}"));
}
for line in self.info.to_javascript_fields("info").iter() {
javascript_fields.push(format!("{indent}{line:4}"));
}
for line in self.neutral.to_javascript_fields("neutral").iter() { for line in self.neutral.to_javascript_fields("neutral").iter() {
javascript_fields.push(format!("{indent}{line:4}")); javascript_fields.push(format!("{indent}{line:4}"));
} }
@@ -484,6 +536,11 @@ impl Baseline {
javascript_fields.push(format!("{indent}{line:4}")); javascript_fields.push(format!("{indent}{line:4}"));
} }
let neurtal_swatch = generate_neutral_swatch_list(&self.neutral_swatch);
for (n, c) in neurtal_swatch {
javascript_fields.push(format!("{indent}neutralSwatch{n}: '#{c}',"));
}
javascript_fields.push(format!( javascript_fields.push(format!(
"{indent}shadow: '#{}',", "{indent}shadow: '#{}',",
map_oklch_to_srgb_hex(&self.shadow) map_oklch_to_srgb_hex(&self.shadow)
@@ -502,7 +559,8 @@ impl Baseline {
)); ));
for (name, color) in &self.custom_colors { for (name, color) in &self.custom_colors {
let color_lines = color.to_javascript_fields(name); let lowercased_name = name.to_lowercase();
let color_lines = color.to_javascript_fields(&lowercased_name);
javascript_fields.extend(color_lines.iter().map(|s| format!("{indent}{s}"))); javascript_fields.extend(color_lines.iter().map(|s| format!("{indent}{s}")));
} }

View File

@@ -51,7 +51,7 @@ impl Swatch {
let mut collection = LinkedHashMap::new(); let mut collection = LinkedHashMap::new();
for l in SWATCH_LIGHTINGS { for l in SWATCH_LIGHTINGS {
collection.insert(format!("{name}-{l:02}"), self.get_hex(l)); collection.insert(format!("swatch-{name}-{l:02}"), self.get_hex(l));
} }
collection collection
@@ -98,6 +98,19 @@ impl Serialize for Swatch {
} }
} }
pub fn generate_neutral_swatch_list(swatch: &Arc<NeutralSwatch>) -> LinkedHashMap<String, String> {
let swatch = swatch.clone();
let mut collection = LinkedHashMap::new();
for l in SWATCH_LIGHTINGS {
let color = swatch.get((l as f32) / 100.0);
let color = map_oklch_to_srgb_hex(&color);
collection.insert(format!("{l:02}"), color);
}
collection
}
pub fn serialize_neutral_swatch<S>( pub fn serialize_neutral_swatch<S>(
swatch: &Arc<NeutralSwatch>, swatch: &Arc<NeutralSwatch>,
serailizer: S, serailizer: S,

2
upload Executable file
View File

@@ -0,0 +1,2 @@
#!/bin/bash
rsync -rzvPh ./dist/ archgrid.net:/var/www/color-lab/