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>
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:
|
This was referenced Oct 3, 2026
Open
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
Refs #688 #707 #776 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #688 #707 Keep the visitor unchanged at module scope so coverage analysis does not invent an uncovered nested declaration Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #688 #710 #707 Retain inherited captures for withComponent and as in JSX and TypeScript renderers 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>
Refs #691 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #691 #695 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>
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>
Refs #682 #695 #688 #689 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #682 #695 #688 #689 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #682 #695 #688 #689 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #682 #695 #688 #689 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #682 #689 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 16, 2026
Refs #682 #695 #688 #689 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This was referenced Oct 16, 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 (EMO-05 나머지:
ClassNames). #728 위에 쌓은 브랜치입니다. #727, #728이 먼저 병합되어야 합니다.요약
Emotion의
<ClassNames>를 런타임 없이 빌드 때 컴파일합니다. 요소는 자식 함수가 렌더링하는 것으로 바뀌고, 그 안의css/cx호출은 각각 합성되는 클래스 문자열이 됩니다.동작
css(...): Emotion과 같이 문자열은 CSS 텍스트로 읽습니다. 태그드 템플릿css`${mixin}; color: red;`는 mixin 앞뒤로 나뉘어 합성됩니다. 숫자는 Emotion처럼px가 되고(단위 없는 속성 제외), 최상위 상수는 인라인됩니다.cx(...): 문자열과 식별자는 그대로 남는 클래스입니다.{ name: condition }객체는 조건부 클래스가 되고, 안에 있는css(...)/cx(...)호출은 풀어서 합성합니다.&&/||/??도 합성됩니다.theme.a.b/theme.a[2]는ThemeProvider가 설정하는var(--a-b)가 됩니다.@devup-ui/react/compat가ClassNames(빌드 전용, 런타임에 호출하면 throw)와ClassNamesContent,ClassNamesArg타입을 내보냅니다.@emotion/react선언에도 포함되어, Emotion을 설치하지 않아도 타입 검사가 통과합니다.새로 생기는 오류
모두
파일:줄:열, 문제가 된 코드, 이유, 고칠 방법과 함께 빌드 오류로 보고됩니다.<ClassNames>에{ css, cx, theme }를 받아 렌더링할 것을 바로 돌려주는 자식 함수가 정확히 하나 있지 않은 경우: 속성, 다른 자식, rest/기본값/계산된 키/중첩 구조분해 매개변수, async/generator 함수, 여러 문장으로 된 본문theme을css값 안의theme.a.b가 아닌 방식으로 읽는 경우 (예:theme.space(2), 조건식에서 읽기, JSX에서 읽기)css/cx를 호출하지 않고 쓰는 경우 (예:ref={css})cx객체에 spread, getter, 메서드가 있는 경우css/cx가 합성할 수 없는 부분이 있는 경우: 런타임 호출(cx(getClass())), 인자 spread(css(...s)), 조건 하나가 스타일과 클래스를 함께 고르는 경우css()와 같은 오류)남는 한계
cx인자에서 런타임 호출 결과는 변수에 담아 넘겨야 합니다. 변수는 클래스로 그대로 남습니다.css결과는 지금처럼 런타임 클래스로 붙습니다. 모듈 해석을 통한 합성은 A 이슈에서 따로 처리합니다.검증
cargo fmt,cargo +1.99 clippy --workspace --all-targets -- -D warnings,cargo test --workspace통과bun run build,bun test5487 통과, 커버리지 100%bun lint: 기존 경고 2개 외 없음survey/emotion/react-classnames.tsx프로브: 런타임 import 없이"external a",.a{color:var(--color)}@emotion/react의ClassNames타입 검사 통과2026-10-08 main 11790bef를 병합하여 업데이트했습니다. 충돌 없이 갱신된 부모 PR의 변경과 main의 변경을 모두 보존했습니다.
2026-10-15 갱신: #728 3e6c24c (main 76b1a15)을 병합했습니다. 충돌 파일 lib.rs; compat/index.ts and utils/emotion-classes.ts type clash은 both complete ClassNames and parent Emotion namespace/cx/merge test blocks retained; coordinator-approved single canonical ClassNamesArg keeps number/boolean/map and widens only recursive array to readonly, ClassNamesContent imports it, duplicate alias removed; type regression RED on both cx APIs then GREEN, no runtime change and no snapshot changes 방식으로 해결했으며 부모 PR의 동작을 함께 보존했습니다. 새로 생기는 오류 없음.
실제 WASM/공개 API 검증 출력:
2026-10-16 갱신: 확정 main a6ecc125를 포함한 갱신된 #728 716b4841를 병합했습니다. 충돌 파일 import_alias_visit.rs/emotion.d.ts는 부모 fallback 변환·kebab_property와 자식 ClassNames의 scoped css 호출 push/walk/pop를 하나의 올바른 lifetime visitor로 합치고 CacheProvider/ClassNames 및 모든 타입·기존 export를 함께 보존하여 해결했습니다. 두 부모 4aa0b56/716b4841 확인, 새로 생기는 오류 없음.
실제 공개 WASM 검증에서 ClassNames cx가 타입상 허용된 숫자 1/0과 부호 리터럴을 거부하는 기존 불일치를 발견하여 coordinator의 두 단계 승인 후 RED-first로 수정했습니다. 정적으로 주어진 숫자 및 숫자 리터럴에 직접 적용한 unary +/-만 클래스 준비 단계에서 처리합니다. 0/-0/+0은 빈 문자열(비-nullish)이라 0||fallback은 fallback을 선택하지만 0??fallback은 fallback을 되살리지 않습니다. 나머지 숫자는 기존 ordinary cx와 같은 JS 숫자 문자열이 됩니다. recursive 배열·분기에도 적용하되 string/boolean coercion·산술식·동적 operand/call·중첩 unary 등은 기존 오류를 유지합니다. CSS 숫자/fallback, class-map 조건, 기존 unknown-call guard, 런타임 helper 부재 및 production 공백 동작은 바꾸지 않았습니다.
기존 모든 assertion/스냅샷과 canonical readonly recursive ClassNamesArg 및 두 cx API의 숫자 타입 검증을 유지했습니다. 새 native 회귀의 관찰만 class-token 공백을 정규화하여 이름·순서·중복을 그대로 비교합니다. 최초 numeric RED 13개 실패/controls 6개 통과 → 19개 GREEN, signed RED 12개 실패/controls 32개 통과 → 최종 44개 GREEN입니다. 기본 스택/CARGO_BUILD_JOBS=2/전체 트리 6 GiB 한도로 fmt, Rust 1.99 all-target Clippy(-D warnings), 정상 workspace 4,489개/실패 0개가 통과했고 새 스냅샷 후보는 없습니다.
최종 fresh WASM/root build 후 실제 React SSR 33개(부모 20개+ClassNames D1/fallback 3개+numeric/signed/zero논리 10개)와 ordinary cx control이 통과했습니다. readonly 숫자 type gate도 유지됩니다. 전체 commit hook은 기본 스택/12 GiB 한도에서 520.625초, 전체 Job 피크 3.273 GiB로 통과했고 Bun 5,922개/실패 0개/함수·라인 100%입니다. 기존 React 경고 9개 외 새 lint 오류는 없습니다. Windows Rust 97.82%(19726/20166)는 Linux 100%로 주장하지 않으며 head 744b145a의 새 CI에서 별도 확인합니다. LSP는 기존 미설치/daemon timeout으로 검증 불가이며 clean으로 주장하지 않습니다. SSR은 DOM ref 부착을 검증한 것이 아닙니다.
실제 WASM/공개 API 검증 출력:
2026-10-16 CI 보완: 첫 head 744b145a의 run 38887548040은 기능 테스트 및 다른 세 job은 통과했지만 Rust coverage 14147/14148(99.99%)로 publish가 실패했습니다. Codecov 장애가 아닙니다. CI와 같은 wide rustfmt로 정확한 head의 visit.rs:1149를 매핑하여, 숫자 operand라도 허용되지 않은 unary operator일 때 기존 오류로 돌아가는 한 줄임을 확인했습니다.
main a6ecc12 및 갱신된 #728은 그대로 포함한 채, class_names_numeric_tests.rs에 기존 거부 계약을 확인하는 cx(~1) 한 경우만 추가한 새 일반 커밋 b312482로 보완했습니다. production 코드/기존 assertion/오류 정책/워크플로/coverage 설정은 바꾸지 않았습니다. 새 focused 45개와 정상 workspace 4,490개/실패 0개, fmt 및 Rust 1.99 all-target Clippy가 기본 스택/전체 트리 6 GiB/CARGO_BUILD_JOBS=2로 통과했습니다. fresh WASM/root와 실제 numeric/signed/zero 논리 SSR 10개도 통과했습니다.
새 커밋의 전체 hook은 기본 스택/12 GiB에서 473.975초, 전체 Job 피크 3.216 GiB로 통과했고 Bun 5,922개/실패 0개/100%입니다. Windows Rust 97.83%(19729/20166)는 Linux 100%로 주장하지 않으며, b312482b의 새 CI만 최종 검증으로 사용합니다. #730에도 이 갱신된 head를 병합한 뒤 push합니다. 새로 생기는 오류 없음.
2026-10-16 CI 확인: head b312482b45f8d08bdb262eb20325ad051f980d85의 run 38893266967은 모든 job 및 Codecov가 통과했습니다. publish job 116947627465 실제 로그에서 Linux Rust 100.00% coverage, 14148/14148 lines covered, Bun 5922개/실패 0개/전체 커버리지 100%를 확인했습니다. 확정 main a6ecc12 포함 및 현재 merge 상태는 최신 PR audit로 재확인했습니다.