From 8f3060b11aa37ebcb79d7e7fcabdf3f8864f515a Mon Sep 17 00:00:00 2001 From: owjs3901 Date: Mon, 22 Dec 2025 13:14:26 +0900 Subject: [PATCH 1/2] Fix korean value issue --- .../changepack_log_aZkr01n8w9JggF7hpTEkr.json | 5 + apps/next/src/app/page.tsx | 147 ++++++++++-------- libs/css/src/optimize_value.rs | 24 +-- libs/extractor/src/lib.rs | 29 ++++ ...r__tests__mask_properties_with_korean.snap | 72 +++++++++ 5 files changed, 197 insertions(+), 80 deletions(-) create mode 100644 .changepacks/changepack_log_aZkr01n8w9JggF7hpTEkr.json create mode 100644 libs/extractor/src/snapshots/extractor__tests__mask_properties_with_korean.snap diff --git a/.changepacks/changepack_log_aZkr01n8w9JggF7hpTEkr.json b/.changepacks/changepack_log_aZkr01n8w9JggF7hpTEkr.json new file mode 100644 index 00000000..9613c30c --- /dev/null +++ b/.changepacks/changepack_log_aZkr01n8w9JggF7hpTEkr.json @@ -0,0 +1,5 @@ +{ + "changes": { "bindings/devup-ui-wasm/package.json": "Patch" }, + "note": "Fix korean css issue", + "date": "2025-12-22T04:14:13.781847800Z" +} diff --git a/apps/next/src/app/page.tsx b/apps/next/src/app/page.tsx index 37a5e314..1cf064d5 100644 --- a/apps/next/src/app/page.tsx +++ b/apps/next/src/app/page.tsx @@ -1,69 +1,78 @@ -'use client' - -import { Box, css, styled, Text } from '@devup-ui/react' -import { useState } from 'react' -import { Lib } from 'vite-lib-example' -const color = 'yellow' - -const StyledFooter = styled.footer<{ type: '1' | '2' }>` - background-color: ${color}; - color: ${(props) => (props.type === '1' ? 'red' : 'white')}; -` - -export default function HomePage() { - const [color, setColor] = useState('yellow') - const [enabled, setEnabled] = useState(false) - - return ( -
- IMPLEMENTATION~ -

- Track & field champions: -

- - hello - - hello - - - text typo - - text - - hello - - hello - -
- ) -} +'use client' + +import { Box, css, styled, Text } from '@devup-ui/react' +import { useState } from 'react' +import { Lib } from 'vite-lib-example' +const color = 'yellow' + +const StyledFooter = styled.footer<{ type: '1' | '2' }>` + background-color: ${color}; + color: ${(props) => (props.type === '1' ? 'red' : 'white')}; +` + +export default function HomePage() { + const [color, setColor] = useState('yellow') + const [enabled, setEnabled] = useState(false) + + return ( +
+ IMPLEMENTATION~ + +

+ Track & field champions: +

+ + hello + + hello + + + text typo + + text + + hello + + hello + +
+ ) +} diff --git a/libs/css/src/optimize_value.rs b/libs/css/src/optimize_value.rs index 611045b2..f8dda860 100644 --- a/libs/css/src/optimize_value.rs +++ b/libs/css/src/optimize_value.rs @@ -54,18 +54,20 @@ pub fn optimize_value(value: &str) -> String { let index = tmp.find(f).unwrap() + f.len(); let mut zero_idx = vec![]; let mut depth = 0; - for i in index..tmp.len() { - if tmp[i..i + 1].eq("(") { + let chars: Vec = tmp.chars().collect(); + let byte_indices: Vec = tmp.char_indices().map(|(i, _)| i).collect(); + + for (char_idx, &ch) in chars.iter().enumerate().skip(index) { + if ch == '(' { depth += 1; - } else if tmp[i..i + 1].eq(")") { + } else if ch == ')' { depth -= 1; - } else if tmp[i..i + 1].eq("0") - && !tmp[i - 1..i].chars().next().unwrap().is_ascii_digit() - && (tmp.len() == i + 1 - || !tmp[i + 1..i + 2].chars().next().unwrap().is_ascii_digit()) + } else if ch == '0' + && (char_idx == 0 || !chars[char_idx - 1].is_ascii_digit()) + && (char_idx + 1 >= chars.len() || !chars[char_idx + 1].is_ascii_digit()) && depth == 0 { - zero_idx.push(i); + zero_idx.push(byte_indices[char_idx]); } } for i in zero_idx.iter().rev() { @@ -93,10 +95,10 @@ pub fn optimize_value(value: &str) -> String { if ret.contains("(") || ret.contains(")") { let mut depth = 0; - for i in 0..ret.len() { - if ret[i..i + 1].eq("(") { + for ch in ret.chars() { + if ch == '(' { depth += 1; - } else if ret[i..i + 1].eq(")") { + } else if ch == ')' { depth -= 1; } } diff --git a/libs/extractor/src/lib.rs b/libs/extractor/src/lib.rs index b201ae69..5780de0a 100644 --- a/libs/extractor/src/lib.rs +++ b/libs/extractor/src/lib.rs @@ -8204,4 +8204,33 @@ keyframes({ .unwrap() )); } + + #[test] + #[serial] + fn test_mask_properties_with_korean() { + 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(), + css_dir: "@devup-ui/core".to_string(), + single_css: true, + import_main_css: false + } + ) + .unwrap() + )); + } } diff --git a/libs/extractor/src/snapshots/extractor__tests__mask_properties_with_korean.snap b/libs/extractor/src/snapshots/extractor__tests__mask_properties_with_korean.snap new file mode 100644 index 00000000..5f9b7dcd --- /dev/null +++ b/libs/extractor/src/snapshots/extractor__tests__mask_properties_with_korean.snap @@ -0,0 +1,72 @@ +--- +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: "aspect-ratio", + value: "5.49", + level: 0, + selector: None, + style_order: None, + }, + ), + Static( + ExtractStaticStyle { + property: "background", + value: "#752E2E", + level: 0, + selector: None, + style_order: None, + }, + ), + Static( + ExtractStaticStyle { + property: "height", + value: "22px", + level: 0, + selector: None, + style_order: None, + }, + ), + Static( + ExtractStaticStyle { + property: "mask-image", + value: "url('/icons/BI-타이틀.svg')", + level: 0, + selector: None, + style_order: None, + }, + ), + Static( + ExtractStaticStyle { + property: "mask-repeat", + value: "no-repeat", + level: 0, + selector: None, + style_order: None, + }, + ), + Static( + ExtractStaticStyle { + property: "mask-size", + value: "contain", + level: 0, + selector: None, + style_order: None, + }, + ), + Static( + ExtractStaticStyle { + property: "width", + value: "121px", + level: 0, + selector: None, + style_order: None, + }, + ), + }, + code: "import \"@devup-ui/core/devup-ui.css\";\n
;\n", +} From a2a99e41d59a155c77fcee3df23ed5c63b773dfb Mon Sep 17 00:00:00 2001 From: owjs3901 Date: Mon, 22 Dec 2025 13:17:28 +0900 Subject: [PATCH 2/2] Fix example --- apps/next/src/app/page.tsx | 9 --------- 1 file changed, 9 deletions(-) diff --git a/apps/next/src/app/page.tsx b/apps/next/src/app/page.tsx index 1cf064d5..41d903ef 100644 --- a/apps/next/src/app/page.tsx +++ b/apps/next/src/app/page.tsx @@ -17,15 +17,6 @@ export default function HomePage() { return (
IMPLEMENTATION~ -