diff --git a/.changeset/cuddly-showers-shine.md b/.changeset/cuddly-showers-shine.md new file mode 100644 index 00000000..fd7ce8a5 --- /dev/null +++ b/.changeset/cuddly-showers-shine.md @@ -0,0 +1,5 @@ +--- +"@devup-ui/wasm": patch +--- + +Support void 0 diff --git a/libs/extractor/src/extractor/extract_style_from_expression.rs b/libs/extractor/src/extractor/extract_style_from_expression.rs index 510dea1c..7a4498bc 100644 --- a/libs/extractor/src/extractor/extract_style_from_expression.rs +++ b/libs/extractor/src/extractor/extract_style_from_expression.rs @@ -22,7 +22,7 @@ use oxc_ast::{ AstBuilder, ast::{ BinaryOperator, Expression, LogicalOperator, ObjectPropertyKind, PropertyKey, - TemplateElementValue, + TemplateElementValue, UnaryOperator, }, }; use oxc_span::SPAN; @@ -37,6 +37,7 @@ pub fn extract_style_from_expression<'a>( selector: &Option, ) -> ExtractResult<'a> { let mut typo = false; + println!("expression: {:?}", expression); if name.is_none() && selector.is_none() { let mut style_order = None; @@ -287,8 +288,22 @@ pub fn extract_style_from_expression<'a>( } } else { match expression { - Expression::UnaryExpression(_) - | Expression::BinaryExpression(_) + Expression::UnaryExpression(un) => ExtractResult { + styles: if un.operator == UnaryOperator::Void { + vec![] + } else { + vec![ExtractStyleProp::Static(ExtractStyleValue::Dynamic( + ExtractDynamicStyle::new( + name.unwrap(), + level, + &expression_to_code(expression), + selector.clone(), + ), + ))] + }, + ..ExtractResult::default() + }, + Expression::BinaryExpression(_) | Expression::StaticMemberExpression(_) | Expression::CallExpression(_) => ExtractResult { styles: vec![ExtractStyleProp::Static(ExtractStyleValue::Dynamic( diff --git a/libs/extractor/src/lib.rs b/libs/extractor/src/lib.rs index 66ac074f..6ea16db1 100644 --- a/libs/extractor/src/lib.rs +++ b/libs/extractor/src/lib.rs @@ -1513,6 +1513,23 @@ import clsx from 'clsx' "test.tsx", r#"import { Box } from "@devup-ui/core"; ; +"#, + ExtractOption { + package: "@devup-ui/core".to_string(), + css_dir: "@devup-ui/core".to_string(), + single_css: true, + import_main_css: false + } + ) + .unwrap() + )); + + reset_class_map(); + assert_debug_snapshot!(ToBTreeSet::from( + extract( + "test.tsx", + r#"import { Box } from "@devup-ui/core"; +; "#, ExtractOption { package: "@devup-ui/core".to_string(), diff --git a/libs/extractor/src/snapshots/extractor__tests__extract_conditional_style_props-11.snap b/libs/extractor/src/snapshots/extractor__tests__extract_conditional_style_props-11.snap new file mode 100644 index 00000000..8fff99cf --- /dev/null +++ b/libs/extractor/src/snapshots/extractor__tests__extract_conditional_style_props-11.snap @@ -0,0 +1,22 @@ +--- +source: libs/extractor/src/lib.rs +expression: "ToBTreeSet::from(extract(\"test.tsx\",\nr#\"import { Box } from \"@devup-ui/core\";\n;\n\"#,\nExtractOption\n{\n package: \"@devup-ui/core\".to_string(), css_dir:\n \"@devup-ui/core\".to_string(), single_css: true, import_main_css: false\n}).unwrap())" +--- +ToBTreeSet { + styles: { + Static( + ExtractStaticStyle { + property: "background", + value: "blue", + level: 0, + selector: Some( + Selector( + "&:hover", + ), + ), + style_order: None, + }, + ), + }, + code: "import \"@devup-ui/core/devup-ui.css\";\n
;\n", +}