Skip to content

Commit 1dd32af

Browse files
committed
Convert light-dark and optimize theme
1 parent 798b58d commit 1dd32af

17 files changed

+224
-97
lines changed

.changeset/lemon-coats-spend.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@devup-ui/wasm": patch
3+
---
4+
5+
Convert light-dark and optimize theme

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bindings/devup-ui-wasm/src/lib.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -267,10 +267,7 @@ mod tests {
267267
sheet.set_theme(theme);
268268
}
269269

270-
assert_eq!(
271-
get_css().unwrap(),
272-
":root{color-scheme:light;--primary:#FFF;}\n:root[data-theme=dark]{color-scheme:dark;--primary:#000;}\n"
273-
);
270+
assert_debug_snapshot!(get_css().unwrap());
274271
}
275272

276273
#[test]
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
source: bindings/devup-ui-wasm/src/lib.rs
3+
expression: get_css().unwrap()
4+
---
5+
":root{color-scheme:light;--primary:light-dark(#FFF,#000)}:root[data-theme=dark]{color-scheme:dark}"

bindings/devup-ui-wasm/src/snapshots/devup_ui_wasm__tests__deserialize_theme.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
source: bindings/devup-ui-wasm/src/lib.rs
33
expression: theme.to_css()
44
---
5-
":root{color-scheme:light;--primary:#000;}\n:root[data-theme=dark]{color-scheme:dark;--primary:#fff;}\n.typo-default{font-family:Arial;font-size:16px;font-weight:400;line-height:1.5;letter-spacing:0.5em}\n@media (min-width:480px){.typo-default{font-family:Arial;font-size:24px;font-weight:400;line-height:1.5;letter-spacing:0.5em}}\n@media (min-width:768px){.typo-default{font-family:Arial;font-size:24px;line-height:1.5;letter-spacing:0.5em}}"
5+
":root{color-scheme:light;--primary:light-dark(#000,#FFF)}:root[data-theme=dark]{color-scheme:dark}.typo-default{font-family:Arial;font-size:16px;font-weight:400;line-height:1.5;letter-spacing:0.5em}@media(min-width:480px){.typo-default{font-family:Arial;font-size:24px;font-weight:400;line-height:1.5;letter-spacing:0.5em}}@media(min-width:768px){.typo-default{font-family:Arial;font-size:24px;line-height:1.5;letter-spacing:0.5em}}"

libs/css/src/lib.rs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@ pub fn merge_selector(class_name: &str, selector: Option<&StyleSelector>) -> Str
2020
if let Some(selector) = selector {
2121
match selector {
2222
StyleSelector::Selector(value) => value.replace("&", &format!(".{class_name}")),
23-
StyleSelector::Media {
24-
selector: s,
25-
query: _,
26-
} => {
23+
StyleSelector::Media { selector: s, .. } => {
2724
if let Some(s) = s {
2825
s.replace("&", &format!(".{class_name}"))
2926
} else {
@@ -452,6 +449,27 @@ mod tests {
452449
merge_selector("cls", Some(&["themeDark", "hover"].into()),),
453450
":root[data-theme=dark] .cls:hover"
454451
);
452+
assert_eq!(
453+
merge_selector(
454+
"cls",
455+
Some(&StyleSelector::Media {
456+
query: "print".to_string(),
457+
selector: None,
458+
})
459+
),
460+
".cls"
461+
);
462+
463+
assert_eq!(
464+
merge_selector(
465+
"cls",
466+
Some(&StyleSelector::Media {
467+
query: "print".to_string(),
468+
selector: Some("&:hover".to_string()),
469+
})
470+
),
471+
".cls:hover"
472+
);
455473
}
456474

457475
#[test]

libs/extractor/src/extractor/extract_style_from_jsx.rs

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,23 @@ pub fn extract_style_from_jsx<'a>(
1313
value: &mut JSXAttributeValue<'a>,
1414
) -> ExtractResult<'a> {
1515
match value {
16-
JSXAttributeValue::ExpressionContainer(expression) => {
17-
if expression.expression.is_expression() {
18-
extract_style_from_expression(
19-
ast_builder,
20-
Some(name),
21-
expression.expression.to_expression_mut(),
22-
0,
23-
&None,
24-
)
25-
} else {
26-
ExtractResult::default()
27-
}
16+
JSXAttributeValue::ExpressionContainer(expression)
17+
if expression.expression.is_expression() =>
18+
{
19+
Some(
20+
expression
21+
.expression
22+
.to_expression()
23+
.clone_in(ast_builder.allocator),
24+
)
2825
}
29-
JSXAttributeValue::StringLiteral(literal) => extract_style_from_expression(
30-
ast_builder,
31-
Some(name),
32-
&mut Expression::StringLiteral(literal.clone_in(ast_builder.allocator)),
33-
0,
34-
&None,
35-
),
36-
_ => ExtractResult::default(),
26+
JSXAttributeValue::StringLiteral(literal) => Some(Expression::StringLiteral(
27+
literal.clone_in(ast_builder.allocator),
28+
)),
29+
_ => None,
3730
}
31+
.map(|mut expression| {
32+
extract_style_from_expression(ast_builder, Some(name), &mut expression, 0, &None)
33+
})
34+
.unwrap_or_default()
3835
}

libs/extractor/src/extractor/extract_style_from_member_expression.rs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,7 @@ pub(super) fn extract_style_from_member_expression<'a>(
3131
let mut ret: Vec<ExtractStyleProp> = vec![];
3232

3333
match &mut mem.object {
34-
Expression::ArrayExpression(array) => {
35-
if array.elements.is_empty() {
36-
return ExtractResult::default();
37-
}
38-
34+
Expression::ArrayExpression(array) if !array.elements.is_empty() => {
3935
if let Some(num) = get_number_by_literal_expression(mem_expression) {
4036
if num < 0f64 {
4137
return ExtractResult::default();
@@ -125,11 +121,7 @@ pub(super) fn extract_style_from_member_expression<'a>(
125121
map,
126122
});
127123
}
128-
Expression::ObjectExpression(obj) => {
129-
if obj.properties.is_empty() {
130-
return ExtractResult::default();
131-
}
132-
124+
Expression::ObjectExpression(obj) if !obj.properties.is_empty() => {
133125
let mut map = BTreeMap::new();
134126
if let Some(k) = get_string_by_literal_expression(mem_expression) {
135127
let mut etc = None;
@@ -156,9 +148,7 @@ pub(super) fn extract_style_from_member_expression<'a>(
156148
}
157149

158150
match etc {
159-
None => {
160-
return ExtractResult::default();
161-
}
151+
None => return ExtractResult::default(),
162152
Some(etc) => ret.push(ExtractStyleProp::Static(ExtractStyleValue::Dynamic(
163153
ExtractDynamicStyle::new(
164154
name.unwrap(),

libs/sheet/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ extractor = { path = "../extractor" }
1414
insta = "1.43.1"
1515
serde_json = "1.0.141"
1616
criterion = { version = "0.6", features = ["html_reports"] }
17+
rstest = "0.25.0"
1718

1819
[[bench]]
1920
name = "my_benchmark"

libs/sheet/src/snapshots/sheet__theme__tests__to_css_from_theme-2.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
source: libs/sheet/src/theme.rs
33
expression: theme.to_css()
44
---
5-
":root{color-scheme:light;--primary:#000;}\n:root[data-theme=dark]{color-scheme:dark;--primary:#000;}\n"
5+
":root{color-scheme:light;--primary:#000}:root[data-theme=dark]{color-scheme:dark}"

0 commit comments

Comments
 (0)