Skip to content

Commit e14570e

Browse files
authored
Merge pull request #109 from dev-five-git/negative-issue
Negative issue
2 parents 223eb17 + 3d7bd1a commit e14570e

16 files changed

+723
-275
lines changed

.changeset/rude-wasps-judge.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+
Fix negative issue, literal issue

apps/landing/src/components/SearchModal/SearchContent.tsx

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import { Box, Center, css, Flex, Text, VStack } from '@devup-ui/react'
33
import Link from 'next/link'
44
import { useSearchParams } from 'next/navigation'
5-
import { Fragment, useEffect, useState } from 'react'
5+
import { Fragment, useEffect, useMemo, useState } from 'react'
66

77
import { URL_PREFIX } from '../../constants'
88

@@ -38,6 +38,7 @@ export function SearchContent() {
3838
)
3939
}
4040
}, [query])
41+
const reg = useMemo(() => new RegExp(`(${query})`, 'gi'), [query])
4142
if (!query) return
4243
const inner = data ? (
4344
<>
@@ -58,8 +59,22 @@ export function SearchContent() {
5859
p="10px"
5960
>
6061
<Text typography="textSbold">{item.title}</Text>
61-
<Text color="$search" typography="caption">
62-
{item.text}
62+
<Text color="$caption" typography="caption">
63+
{item.text
64+
.substring(0, 100)
65+
.split(reg)
66+
.map((part, idx) =>
67+
part.toLowerCase() === query.toLowerCase() ? (
68+
<Text key={idx} color="$search" fontWeight="bold">
69+
{part}
70+
</Text>
71+
) : (
72+
<Text key={idx} as="span">
73+
{part}
74+
</Text>
75+
),
76+
)}
77+
...
6378
</Text>
6479
</VStack>
6580
</Link>

libs/extractor/src/lib.rs

Lines changed: 166 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,20 @@ mod prop_modify_utils;
66
mod style_extractor;
77
mod utils;
88
mod visit;
9-
10-
use oxc_codegen::Codegen;
11-
use std::collections::BTreeMap;
12-
139
use crate::extract_style::ExtractStyleValue;
1410
use crate::visit::DevupVisitor;
1511
use oxc_allocator::Allocator;
1612
use oxc_ast::ast::Expression;
1713
use oxc_ast::VisitMut;
14+
use oxc_codegen::Codegen;
1815
use oxc_parser::{Parser, ParserReturn};
1916
use oxc_span::SourceType;
17+
use std::collections::BTreeMap;
2018
use std::error::Error;
21-
22-
/// result of extracting style properties from props
2319
#[derive(Debug)]
2420
pub enum ExtractStyleProp<'a> {
2521
Static(ExtractStyleValue),
2622
StaticArray(Vec<ExtractStyleProp<'a>>),
27-
/// static + static ex) margin={test?"4px":"8px"} --> className={test?"margin-4px-0":"margin-8px-0"}
28-
/// static + dynamic ex) margin={test?a:"8px"} --> className={test?"margin-0":"margin-8px-0"} style={{ "--margin-0": a }}
29-
/// dynamic + dynamic ex) margin={test?a:b} --> className="margin-0" style={{ "--margin-0": test?a:b }}
30-
/// issue case: dynamic + dynamic ex) margin={test?a:(b ? "8px": c)} --> className="margin-0" style={{ "--margin-0": test?a:(b ? "8px": c) }}
3123
Conditional {
3224
condition: Expression<'a>,
3325
consequent: Option<Box<ExtractStyleProp<'a>>>,
@@ -42,6 +34,7 @@ pub enum ExtractStyleProp<'a> {
4234
expression: Expression<'a>,
4335
},
4436
}
37+
4538
impl ExtractStyleProp<'_> {
4639
pub fn extract(&self) -> Vec<ExtractStyleValue> {
4740
match self {
@@ -345,6 +338,19 @@ mod tests {
345338
}
346339
)
347340
.unwrap());
341+
342+
reset_class_map();
343+
assert_debug_snapshot!(extract(
344+
"test.tsx",
345+
r"import {Flex} from '@devup-ui/core'
346+
<Flex padding={('-1')}/>
347+
",
348+
ExtractOption {
349+
package: "@devup-ui/core".to_string(),
350+
css_file: None
351+
}
352+
)
353+
.unwrap());
348354
}
349355

350356
#[test]
@@ -1427,6 +1433,100 @@ export {
14271433
)
14281434
.unwrap());
14291435
}
1436+
#[test]
1437+
#[serial]
1438+
fn negative_props() {
1439+
reset_class_map();
1440+
assert_debug_snapshot!(extract(
1441+
"test.js",
1442+
r#"import {Box} from '@devup-ui/core'
1443+
<Box zIndex={-1} />
1444+
"#,
1445+
ExtractOption {
1446+
package: "@devup-ui/core".to_string(),
1447+
css_file: None
1448+
}
1449+
)
1450+
.unwrap());
1451+
1452+
reset_class_map();
1453+
assert_debug_snapshot!(extract(
1454+
"test.js",
1455+
r#"import {Box} from '@devup-ui/core'
1456+
<Box zIndex={-a} />
1457+
"#,
1458+
ExtractOption {
1459+
package: "@devup-ui/core".to_string(),
1460+
css_file: None
1461+
}
1462+
)
1463+
.unwrap());
1464+
1465+
reset_class_map();
1466+
assert_debug_snapshot!(extract(
1467+
"test.js",
1468+
r#"import {Box} from '@devup-ui/core'
1469+
<Box zIndex={-(1+a)} />
1470+
"#,
1471+
ExtractOption {
1472+
package: "@devup-ui/core".to_string(),
1473+
css_file: None
1474+
}
1475+
)
1476+
.unwrap());
1477+
1478+
reset_class_map();
1479+
assert_debug_snapshot!(extract(
1480+
"test.js",
1481+
r#"import {Box} from '@devup-ui/core'
1482+
<Box zIndex={-1*a} />
1483+
"#,
1484+
ExtractOption {
1485+
package: "@devup-ui/core".to_string(),
1486+
css_file: None
1487+
}
1488+
)
1489+
.unwrap());
1490+
1491+
reset_class_map();
1492+
assert_debug_snapshot!(extract(
1493+
"test.js",
1494+
r#"import {Box} from '@devup-ui/core'
1495+
<Box zIndex={-(1)} />
1496+
"#,
1497+
ExtractOption {
1498+
package: "@devup-ui/core".to_string(),
1499+
css_file: None
1500+
}
1501+
)
1502+
.unwrap());
1503+
1504+
reset_class_map();
1505+
assert_debug_snapshot!(extract(
1506+
"test.js",
1507+
r#"import {Box} from '@devup-ui/core'
1508+
<Box zIndex={(-1)} />
1509+
"#,
1510+
ExtractOption {
1511+
package: "@devup-ui/core".to_string(),
1512+
css_file: None
1513+
}
1514+
)
1515+
.unwrap());
1516+
1517+
reset_class_map();
1518+
assert_debug_snapshot!(extract(
1519+
"test.js",
1520+
r#"import {Box} from '@devup-ui/core'
1521+
<Box zIndex={[(-1),-2, -(3)]} />
1522+
"#,
1523+
ExtractOption {
1524+
package: "@devup-ui/core".to_string(),
1525+
css_file: None
1526+
}
1527+
)
1528+
.unwrap());
1529+
}
14301530

14311531
#[test]
14321532
#[serial]
@@ -1932,4 +2032,60 @@ import {Button} from '@devup/ui'
19322032
)
19332033
.unwrap());
19342034
}
2035+
2036+
#[test]
2037+
#[serial]
2038+
fn template_literal_props() {
2039+
reset_class_map();
2040+
assert_debug_snapshot!(extract(
2041+
"test.js",
2042+
r#"import {Box} from '@devup-ui/core'
2043+
<Box bg={`${"red"}`} />
2044+
"#,
2045+
ExtractOption {
2046+
package: "@devup-ui/core".to_string(),
2047+
css_file: None
2048+
}
2049+
)
2050+
.unwrap());
2051+
2052+
reset_class_map();
2053+
assert_debug_snapshot!(extract(
2054+
"test.js",
2055+
r#"import {Box} from '@devup-ui/core'
2056+
<Box m={`${1}`} />
2057+
"#,
2058+
ExtractOption {
2059+
package: "@devup-ui/core".to_string(),
2060+
css_file: None
2061+
}
2062+
)
2063+
.unwrap());
2064+
2065+
reset_class_map();
2066+
assert_debug_snapshot!(extract(
2067+
"test.js",
2068+
r#"import {Box} from '@devup-ui/core'
2069+
<Box m={`${-1}`} />
2070+
"#,
2071+
ExtractOption {
2072+
package: "@devup-ui/core".to_string(),
2073+
css_file: None
2074+
}
2075+
)
2076+
.unwrap());
2077+
2078+
reset_class_map();
2079+
assert_debug_snapshot!(extract(
2080+
"test.js",
2081+
r#"import {Box} from '@devup-ui/core'
2082+
<Box m={`${1} ${2}`} />
2083+
"#,
2084+
ExtractOption {
2085+
package: "@devup-ui/core".to_string(),
2086+
css_file: None
2087+
}
2088+
)
2089+
.unwrap());
2090+
}
19352091
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
expression: "extract(\"test.tsx\",\nr\"import {Flex} from '@devup-ui/core'\n <Flex padding={('-1')}/>\n \",\nExtractOption\n{ package: \"@devup-ui/core\".to_string(), css_file: None }).unwrap()"
4+
---
5+
ExtractOutput {
6+
styles: [
7+
Static(
8+
ExtractStaticStyle {
9+
property: "display",
10+
value: "flex",
11+
level: 0,
12+
selector: None,
13+
basic: true,
14+
},
15+
),
16+
Static(
17+
ExtractStaticStyle {
18+
property: "padding",
19+
value: "-4px",
20+
level: 0,
21+
selector: None,
22+
basic: false,
23+
},
24+
),
25+
],
26+
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className=\"d0 d1\" />;\n",
27+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
expression: "extract(\"test.js\",\nr#\"import {Box} from '@devup-ui/core'\n <Box zIndex={-a} />\n \"#,\nExtractOption\n{ package: \"@devup-ui/core\".to_string(), css_file: None }).unwrap()"
4+
---
5+
ExtractOutput {
6+
styles: [
7+
Dynamic(
8+
ExtractDynamicStyle {
9+
property: "zIndex",
10+
level: 0,
11+
identifier: "-a",
12+
selector: None,
13+
},
14+
),
15+
],
16+
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className=\"d0\" style={{ \"--d1\": -a }} />;\n",
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
expression: "extract(\"test.js\",\nr#\"import {Box} from '@devup-ui/core'\n <Box zIndex={-(1+a)} />\n \"#,\nExtractOption\n{ package: \"@devup-ui/core\".to_string(), css_file: None }).unwrap()"
4+
---
5+
ExtractOutput {
6+
styles: [
7+
Dynamic(
8+
ExtractDynamicStyle {
9+
property: "zIndex",
10+
level: 0,
11+
identifier: "-(1 + a)",
12+
selector: None,
13+
},
14+
),
15+
],
16+
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className=\"d0\" style={{ \"--d1\": -(1 + a) }} />;\n",
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
expression: "extract(\"test.js\",\nr#\"import {Box} from '@devup-ui/core'\n <Box zIndex={-1*a} />\n \"#,\nExtractOption\n{ package: \"@devup-ui/core\".to_string(), css_file: None }).unwrap()"
4+
---
5+
ExtractOutput {
6+
styles: [
7+
Dynamic(
8+
ExtractDynamicStyle {
9+
property: "zIndex",
10+
level: 0,
11+
identifier: "-1 * a",
12+
selector: None,
13+
},
14+
),
15+
],
16+
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className=\"d0\" style={{ \"--d1\": -1 * a }} />;\n",
17+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
expression: "extract(\"test.js\",\nr#\"import {Box} from '@devup-ui/core'\n <Box zIndex={-(1)} />\n \"#,\nExtractOption\n{ package: \"@devup-ui/core\".to_string(), css_file: None }).unwrap()"
4+
---
5+
ExtractOutput {
6+
styles: [
7+
Static(
8+
ExtractStaticStyle {
9+
property: "zIndex",
10+
value: "-1",
11+
level: 0,
12+
selector: None,
13+
basic: false,
14+
},
15+
),
16+
],
17+
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className=\"d0\" />;\n",
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
expression: "extract(\"test.js\",\nr#\"import {Box} from '@devup-ui/core'\n <Box zIndex={(-1)} />\n \"#,\nExtractOption\n{ package: \"@devup-ui/core\".to_string(), css_file: None }).unwrap()"
4+
---
5+
ExtractOutput {
6+
styles: [
7+
Static(
8+
ExtractStaticStyle {
9+
property: "zIndex",
10+
value: "-1",
11+
level: 0,
12+
selector: None,
13+
basic: false,
14+
},
15+
),
16+
],
17+
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className=\"d0\" />;\n",
18+
}

0 commit comments

Comments
 (0)