Repository navigation
Conversation
…rations css(a, b) composing classes whose styles the build knows, bound to css() in the file or exported by another module, merges their atoms per property, selector, breakpoint and layer, conditions included, instead of joining classes whose winner the stylesheet order picked. vanilla-extract style([...]) passes each composed style as its own argument, keeping a style composed again later. Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…asurable Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…JSX spreads win Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…led order and JSX element className Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #689 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…uate shouldForwardProp at build time Refs #689 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ring Refs #689 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #691 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
… and conditional styles Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…h Emotion Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ed parameters Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ins and inline css() by styles Refs #688, #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ClassNames cx calls, read style functions of props Refs #690, #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690, #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Contributor
Changepacks@devup-ui/wasm@1.0.83 → 1.0.84 - bindings/devup-ui-wasm/package.jsonPatch
@devup-ui/bun-plugin@1.0.22 → 1.0.23 - packages/bun-plugin/package.jsonPatch
@devup-ui/components@0.1.60 → 0.1.61 - packages/components/package.jsonPatch
@devup-ui/eslint-plugin@1.0.22 → 1.0.23 - packages/eslint-plugin/package.jsonPatch
@devup-ui/next-plugin@1.0.90 → 1.0.91 - packages/next-plugin/package.jsonPatch
@devup-ui/plugin-utils@1.0.17 → 1.0.18 - packages/plugin-utils/package.jsonPatch
@devup-ui/react@1.0.44 → 1.0.45 - packages/react/package.jsonPatch
@devup-ui/reset-css@1.0.31 → 1.0.32 - packages/reset-css/package.jsonPatch
@devup-ui/rsbuild-plugin@1.0.67 → 1.0.68 - packages/rsbuild-plugin/package.jsonPatch
@devup-ui/vite-plugin@1.0.73 → 1.0.74 - packages/vite-plugin/package.jsonPatch
@devup-ui/webpack-plugin@1.0.71 → 1.0.72 - packages/webpack-plugin/package.jsonPatch
|
Codecov Report✅ All modified and coverable lines are covered by tests.
🚀 New features to boost your workflow:
|
No conflicted files; preserve composition changes and main ESLint checks.
No conflicted files; combine updated parent and PR changes.
No conflicted files; combine updated parent and PR changes.
Conflicted file: libs/extractor/src/lib.rs. Retain both composition helper and regression tests from PR 706 and Tailwind per-class regression tests from main 11790be; take rewritten main Tailwind implementation with Rust 1.99 assertions. bun.lock regenerated by bun install; no snapshots were hand-merged. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Merge updated parent PR 706 (30247ba), containing main 11790be. Conflicted file: libs/extractor/src/prop_modify_utils.rs. Preserve PR 707's last-written className/style spread semantics and no spread_props parameter with capacity 2, together with main's per-class Tailwind compiler. No snapshots were hand-merged. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Merge updated parent PR 727 (12328b9), containing main 11790be. Conflicted file: packages/bun-plugin/src/plugin.ts. Preserve PR 728's readJsxImportSource alias discovery and main PR 703's compiledPackages scanner, Bun.build stylesheet deferral, runtime writes and debug policy; keep main PR 704 plugin CSS behavior. WASM/root builds and real Bun stylesheet regression passed; no snapshots were hand-merged. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901
added a commit
that referenced
this pull request
Oct 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #690, #695 (함수 안의 스타일 객체, ClassNames
cx, Emotion 스타일 함수). #740(fix/emotion-rule-numbers-and-mixins) 위에 쌓인 브랜치입니다. #706 #707 #710 #711 #722 #727 #728 #729 #730 #740이 먼저 병합되어야 합니다.요약
다른 작업에서 발견된 다섯 가지를 고칩니다.
const inner = { color: 'red' }로 선언한 객체를css(inner)에 넘기면 클래스도 오류도 없이return inner로 컴파일되었습니다. 인라인되지 않은 식별자가 "알 수 없는 클래스"로 읽혀 그대로 남았기 때문입니다.<ClassNames>의cx(getClass())가 빌드 오류였습니다(@emotion/css의cx는 호출 결과를 런타임 클래스로 유지).css(cond && [{ ... }, { ... }])처럼 조건 아래의 규칙 객체 배열이Cannot compose오류였습니다.styled.div({ ... }).attrs({ ... })가 런타임 호출로 남아 던졌습니다.styled.div((props) => ({ ... })),styled.div({ ... }, (props) => ({ ... }))스타일 함수가Cannot compose오류였습니다.동작
1. 함수 안의 스타일 객체. 함수 안
const가 전부 리터럴로 쓰인 객체/배열이면, 최상위 상수와 똑같이 스타일 위치에서 인라인합니다(css(),styled(),globalCss(),keyframes(), 스타일 prop과 펼침, Emotion·styled-components·vanilla-extract 별칭,Global styles,ClassNames의css). 그 바인딩이 스타일에서만 읽힐 때만 컴파일하고, 다른 곳에서도 읽히면(바뀔 수 있으므로) 바인딩 위치에 오류를 냅니다. 리터럴이 아닌 값을 가진 객체({ color: c })는 호출 위치에LOCAL_STYLES오류를 냅니다. 객체를 그대로 돌려주는 경우는 없습니다.2.
ClassNames의cx. 함수 호출(cx(getClass()),cx(o.getClass()))의 결과를 빌드가 모르는 클래스로 보고 쓰인 그대로 둡니다. 나머지 부분은 정적으로 조합합니다.css는 여전히 읽을 수 있는 스타일을 요구합니다. 오류 상수CLASS_NAMES_PART의 문구를 이에 맞게 고쳤습니다.3. 조건 아래의 배열.
css()는known_parts조합 경로로,styled()는 조건을 각 요소에 분배해(cond && [a, b]→[cond && a, cond && b], 삼항도 같은 방식, 조건이 같은 값을 내야 하므로 순수한 조건만) 조합합니다. 순수하지 않은 조건(get() && [...])은 이전처럼Cannot compose오류입니다.4.
.attrs뒤에 붙이기. 위치가 표시되는 빌드 오류입니다.5. props의 함수. 규칙 객체 하나를 한 번에 돌려주는 함수는 값마다 props를 읽는 함수로 풀어 템플릿 보간과 같은 경로로 컴파일합니다. props에서 읽은 값은 컴포넌트가 설정하는 CSS 변수가 되고(숫자는 Emotion처럼
px, 단위 없는 속성은 그대로), 조건은 값마다 고르며, 테마 읽기(theme.a.b,theme.a[2],theme['a'])는var(--a-b)가 됩니다. 리터럴 값(padding: 8)은 정적8px입니다. 규칙 객체 값에 직접 쓴(p) => p.color도 같은 방식으로 읽습니다.새로 생기는 오류
Cannot readinneras styles at build time: ...(바인딩 위치).cannot useinner` at build time: a style object it composes must be written in it, or declared with `const` at the top level of the module, where the build reads it`.styled(...)(...)뒤에.attrs(...): 위의chain .attrs before the styles오류.async가 있을 때): ``styled()cannot use<함수>` at build time: a style function of the props must give one rule object at once, with every entry written out, ...`.ClassNamescx(getClass())오류와, 일부Cannot compose ... [y && base]중복 오류가 사라집니다.남는 한계
p.on && { ... }처럼 조건으로 규칙 객체 자체를 고르면 오류입니다(값마다 조건은 지원).const객체와 달리, 함수 안 객체는 값이 전부 리터럴이어야 컴파일됩니다.get() && [...])이 고르는 배열은 오류입니다.{...inner}처럼 런타임 값이 있는 객체를Box에 펼치는 동작은 이 PR의 범위 밖입니다(이전과 같음).검증
@devup-ui/react의css/styled/globalCss/keyframes/스타일 prop/펼침, Emotion·styled-components·vanilla-extract·Global·ClassNames·css prop; 컴파일되는 경우, 다른 곳에서도 읽는 경우, 값이 런타임인 경우),ClassNamescx호출, props 스타일 함수와 조건 아래 배열(.attrs오류 포함). 기존styled_object_form_theme_interpolation의 두 번째 단언은 오류에서 컴파일 결과 스냅샷으로,changed_constants와emotion_class_names_reports_what_it_cannot_compile는 오류 목록 변경으로 갱신했습니다.cargo fmt --all,cargo +1.99 clippy --workspace --all-targets -- -D warnings,cargo test --workspace, CI와 같은 넓은 rustfmt 설정의cargo tarpaulin --engine llvm(이 PR의 줄 모두 덮임), WASM 재빌드 후bun run build,bun test(5487 pass, 0 fail, 100%),bun lint(이전부터 있던 경고 2개만).2026-10-08 main 11790bef를 병합하여 업데이트했습니다. 충돌 없이 갱신된 부모 PR의 변경과 main의 변경을 모두 보존했습니다.