Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/red-shrimps-buy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@devup-ui/react": patch
"@devup-ui/wasm": patch
---

Support for conditional selector
59 changes: 31 additions & 28 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions libs/extractor/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ version = "0.1.0"
edition = "2021"

[dependencies]
oxc_parser = "0.51.0"
oxc_syntax = "0.51.0"
oxc_span = "0.51.0"
oxc_allocator = "0.51.0"
oxc_ast = "0.51.0"
oxc_codegen = "0.51.0"
oxc_parser = "0.52.0"
oxc_syntax = "0.52.0"
oxc_span = "0.52.0"
oxc_allocator = "0.52.0"
oxc_ast = "0.52.0"
oxc_codegen = "0.52.0"
css = { path = "../css" }
once_cell = "1.20.3"

Expand Down
63 changes: 63 additions & 0 deletions libs/extractor/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -914,6 +914,69 @@ mod tests {
.unwrap());
}

#[test]
#[serial]
fn extract_conditional_selector() {
reset_class_map();
assert_debug_snapshot!(extract(
"test.tsx",
r"import {Box} from '@devup-ui/core'
<Box _hover={a===b ? undefined : {
mx: 1
}} />
",
ExtractOption {
package: "@devup-ui/core".to_string(),
css_file: None
}
)
.unwrap());

reset_class_map();
assert_debug_snapshot!(extract(
"test.tsx",
r"import {Box} from '@devup-ui/core'
<Box _hover={a===b && {
mx: 1
}} />
",
ExtractOption {
package: "@devup-ui/core".to_string(),
css_file: None
}
)
.unwrap());

reset_class_map();
assert_debug_snapshot!(extract(
"test.tsx",
r"import {Box} from '@devup-ui/core'
<Box _hover={a===b && {}} />
",
ExtractOption {
package: "@devup-ui/core".to_string(),
css_file: None
}
)
.unwrap());

reset_class_map();
assert_debug_snapshot!(extract(
"test.tsx",
r"import {Box} from '@devup-ui/core'
<Box _hover={a===b && {
mx: 1,
my: 1
}} />
",
ExtractOption {
package: "@devup-ui/core".to_string(),
css_file: None
}
)
.unwrap());
}

#[test]
#[serial]
fn extract_selector_with_responsive() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
source: libs/extractor/src/lib.rs
expression: "extract(\"test.tsx\",\nr\"import {Box} from '@devup-ui/core'\n <Box _hover={a===b && {\n mx: 1\n }} />\n \",\nExtractOption\n{ package: \"@devup-ui/core\".to_string(), css_file: None }).unwrap()"
---
ExtractOutput {
styles: [
Static(
ExtractStaticStyle {
property: "mx",
value: "4px",
level: 0,
selector: Some(
Selector(
"&:hover",
),
),
style_order: None,
},
),
],
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className={a === b ? \"d0\" : \"\"} />;\n",
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
source: libs/extractor/src/lib.rs
expression: "extract(\"test.tsx\",\nr\"import {Box} from '@devup-ui/core'\n <Box _hover={a===b && {}} />\n \",\nExtractOption\n{ package: \"@devup-ui/core\".to_string(), css_file: None }).unwrap()"
---
ExtractOutput {
styles: [],
code: "<div />;\n",
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
source: libs/extractor/src/lib.rs
expression: "extract(\"test.tsx\",\nr\"import {Box} from '@devup-ui/core'\n <Box _hover={a===b && {\n mx: 1,\n my: 1\n }} />\n \",\nExtractOption\n{ package: \"@devup-ui/core\".to_string(), css_file: None }).unwrap()"
---
ExtractOutput {
styles: [
Static(
ExtractStaticStyle {
property: "mx",
value: "4px",
level: 0,
selector: Some(
Selector(
"&:hover",
),
),
style_order: None,
},
),
Static(
ExtractStaticStyle {
property: "my",
value: "4px",
level: 0,
selector: Some(
Selector(
"&:hover",
),
),
style_order: None,
},
),
],
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className={a === b ? \"d0 d1\" : \"\"} />;\n",
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
source: libs/extractor/src/lib.rs
expression: "extract(\"test.tsx\",\nr\"import {Box} from '@devup-ui/core'\n <Box _hover={a===b ? undefined : {\n mx: 1\n }} />\n \",\nExtractOption\n{ package: \"@devup-ui/core\".to_string(), css_file: None }).unwrap()"
---
ExtractOutput {
styles: [
Static(
ExtractStaticStyle {
property: "mx",
value: "4px",
level: 0,
selector: Some(
Selector(
"&:hover",
),
),
style_order: None,
},
),
],
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className={a === b ? \"\" : \"d0\"} />;\n",
}
28 changes: 13 additions & 15 deletions libs/extractor/src/style_extractor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -466,21 +466,19 @@
}
}
Expression::LogicalExpression(logical) => {
let res = name.and_then(|name| {
match extract_style_from_expression(
ast_builder,
Some(name),
&mut logical.right,
level,
selector,
) {
ExtractResult::Extract {
styles: Some(styles),
..
} => Some(Box::new(ExtractStyleProp::StaticArray(styles))),
_ => None,
}
});
let res = match extract_style_from_expression(
ast_builder,
name,

Check warning on line 471 in libs/extractor/src/style_extractor.rs

View check run for this annotation

Codecov / codecov/patch

libs/extractor/src/style_extractor.rs#L470-L471

Added lines #L470 - L471 were not covered by tests
&mut logical.right,
level,
selector,

Check warning on line 474 in libs/extractor/src/style_extractor.rs

View check run for this annotation

Codecov / codecov/patch

libs/extractor/src/style_extractor.rs#L473-L474

Added lines #L473 - L474 were not covered by tests
) {
ExtractResult::Extract {
styles: Some(styles),
..
} => Some(Box::new(ExtractStyleProp::StaticArray(styles))),
_ => None,

Check warning on line 480 in libs/extractor/src/style_extractor.rs

View check run for this annotation

Codecov / codecov/patch

libs/extractor/src/style_extractor.rs#L477-L480

Added lines #L477 - L480 were not covered by tests
};
match logical.operator {
LogicalOperator::Or => ExtractResult::Extract {
styles: Some(vec![ExtractStyleProp::Conditional {
Expand Down
Loading