Skip to content

Commit b85123f

Browse files
committed
Implement advencedSelector
1 parent 70d30f4 commit b85123f

14 files changed

+376
-70
lines changed

.changeset/wacky-snails-show.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@devup-ui/wasm': patch
3+
'@devup-ui/react': patch
4+
---
5+
6+
Support selector with params

Cargo.lock

Lines changed: 23 additions & 46 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/landing/src/app/DevupUICard.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ import { Box, Flex, Image, Text, VStack } from '@devup-ui/react'
33
export function DevupUICard() {
44
return (
55
<Flex
6+
_hover={{
7+
params: [],
8+
_active: {
9+
bg: 'red',
10+
},
11+
}}
612
bg="$containerBackground"
713
border="1px solid $border"
814
borderRadius="20px"

bindings/devup-ui-wasm/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ crate-type = ["cdylib", "rlib"]
1515
default = ["console_error_panic_hook"]
1616

1717
[dependencies]
18-
wasm-bindgen = "0.2.104"
18+
wasm-bindgen = "0.2.105"
1919
extractor = { path = "../../libs/extractor" }
2020
sheet = { path = "../../libs/sheet" }
2121
css = { path = "../../libs/css" }
@@ -26,13 +26,13 @@ css = { path = "../../libs/css" }
2626
# code size when deploying.
2727
console_error_panic_hook = { version = "0.1.7", optional = true }
2828
once_cell = "1.21.3"
29-
js-sys = "0.3.81"
29+
js-sys = "0.3.82"
3030
serde_json = "1.0.145"
3131
serde-wasm-bindgen = "0.6.5"
3232
bimap = { version = "0.6.3", features = ["serde"] }
3333

3434
[dev-dependencies]
35-
wasm-bindgen-test = "0.3.54"
35+
wasm-bindgen-test = "0.3.55"
3636
serial_test = "3.2.0"
3737
insta = "1.43.2"
3838
rstest = "0.26.1"

libs/extractor/src/extractor/extract_style_from_expression.rs

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -562,16 +562,56 @@ pub fn extract_style_from_expression<'a>(
562562
}
563563
Expression::ObjectExpression(obj) => {
564564
let mut props = vec![];
565+
let params = obj.properties.iter().find_map(|p| {
566+
if let ObjectPropertyKind::ObjectProperty(o) = p
567+
&& o.key.name().unwrap() == "params"
568+
&& selector.is_some()
569+
&& let Expression::ArrayExpression(array) = &o.value
570+
{
571+
Some(
572+
array
573+
.elements
574+
.iter()
575+
.filter_map(|e| {
576+
if let Some(e) = e.as_expression()
577+
&& let Some(s) = get_string_by_literal_expression(e)
578+
&& !s.is_empty()
579+
{
580+
Some(s)
581+
} else {
582+
None
583+
}
584+
})
585+
.collect::<Vec<String>>()
586+
.join(","),
587+
)
588+
} else {
589+
None
590+
}
591+
});
592+
593+
let selector = selector.clone().map(|s| {
594+
if let Some(params) = params
595+
&& let StyleSelector::Selector(selector) = s
596+
{
597+
StyleSelector::Selector(format!("{}({})", selector, params))
598+
} else {
599+
s
600+
}
601+
});
602+
565603
for p in obj.properties.iter_mut() {
566-
if let ObjectPropertyKind::ObjectProperty(o) = p {
604+
if let ObjectPropertyKind::ObjectProperty(o) = p
605+
&& o.key.name().unwrap() != "params"
606+
{
567607
for name in disassemble_property(&o.key.name().unwrap()) {
568608
props.extend(
569609
extract_style_from_expression(
570610
ast_builder,
571611
Some(&name),
572612
&mut o.value,
573613
level,
574-
selector,
614+
&selector,
575615
)
576616
.styles,
577617
);

0 commit comments

Comments
 (0)