Repository navigation
Conversation
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>
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
|
…composition 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 #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Merge main history while preserving this PR implementation. No manual conflict resolutions.
Merge main history while preserving this PR implementation. No manual conflict resolutions.
Merge main history while preserving this PR implementation. No manual conflict resolutions.
Merge main history while preserving this PR implementation. No manual conflict resolutions.
Merge main history while preserving this PR implementation. No manual conflict resolutions.
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 (D 이슈 첫 번째 PR).
main에서 분기했습니다.요약
@emotion/css를 기본 alias에 추가하고,cx는 Emotion처럼 클래스 이름을 받아 합치도록,merge는 빌드 때 클래스 문자열을 합성하도록 컴파일합니다.동작
@emotion/css를 기본 alias에 추가했습니다.css,keyframes: Devup UI와 같이 컴파일합니다. 숫자는 Emotion처럼 px로 읽습니다(padding: 8→8px).injectGlobal:globalCss로 바뀝니다.cx,merge:@devup-ui/react/compat로 옮겨 빌드 때 컴파일합니다(런타임에 호출하면Cannot run on the runtime을 던집니다).cx(...)는css()가 아니라 클래스 이름을 받습니다.cx('external')→"external").cls,props.className등)은 그대로 남는 클래스입니다. falsy 값은 건너뜁니다.{ name: condition }클래스 맵입니다. 조건이 참인 동안name이 붙고, 계산된 키([cls]: on)는 키의 값이 클래스가 됩니다.true/false/null/숫자 같은 리터럴 조건은 빌드 때 접습니다. 객체 안의 숫자는 px로 바뀌지 않습니다.a && 'x',a || 'x',a ?? 'x', 삼항식도 읽습니다.css(...)호출과 빌드가 아는css()클래스는css(a, b)가 쓰는 합성 경로를 그대로 지나갑니다. 이 브랜치에서는 클래스를 이어 붙이고, #706이 병합되면 스타일 기준 합성(뒤가 이김)이 자동으로 따라옵니다.merge(className): 인자를 빌드 때 읽을 수 있는 만큼 나눕니다(문자열 토큰, 공백으로 떨어진 템플릿 리터럴 조각). 알려진css()클래스는cx처럼 합성하고, 나머지 클래스는 그대로 둡니다. 나눌 수 없는 런타임 문자열은 그대로 둡니다(cascade가 정합니다).compat/emotion):cx(...args: ClassNamesArg[]) => string,merge(className: string) => string,ClassNamesArg타입을@emotion/css에 선언했습니다. 소비자 프로젝트에서@ts-expect-error로merge('a', 'b'),merge({}),cx(() => 'a')가 거부되는 것까지 검사했습니다.새로 생기는 오류
모두
파일:줄:열과 함께 빌드 오류로 보고됩니다.cx()/merge()의 인자 spread:cx(...list), 배열 안 spreadcx([...list])cx()클래스 맵의 spread, getter, setter, 메서드:cx({ ...rest }),cx({ get x() { ... } })cx또는merge를 태그드 템플릿으로 호출:cx`a b`merge()에 인자가 하나가 아닌 경우:merge('a', 'b'),merge()남는 한계
merge(props.className)는 그대로 남고, 그 안에 든css()클래스끼리의 우선순위는 CSS cascade가 정합니다.css()결과는 변수로만 합쳐지는 런타임 클래스입니다(모듈 해석을 통한 합성은 A 이슈 범위).cache,flush,hydrate,sheet,getRegisteredStyles,create-instance)는@emotion/css에 남습니다. K #693에서 문서화합니다.검증
cargo fmt,cargo +1.99 clippy --workspace --all-targets -- -D warnings,cargo test --workspace통과. 새 테스트:test_emotion_cx_takes_class_names,test_emotion_merge_splits_what_it_can,test_emotion_cx_and_merge_report_what_they_cannot_compile,test_emotion_class_calls_follow_the_package_namespace_and_aliases,test_emotion_css_maps_onto_devup_equivalents.cargo tarpaulin을 돌려 새 코드(class_arguments.rs,util_type.rs,style_values.rs) 줄 커버리지 100%를 확인했습니다.bun run build,bun test5476 통과, 커버리지 100%bun lint: 기존 경고 2개 외 없음emotion-css-cx.tsx:a = "external",b = "a external picked",.a{color:red}만 생성되고.b{picked:true}규칙은 없습니다.@devup-ui/react/compat/emotion) 통과assert_is_empty수정은 fix(extractor): let a later css() part replace an earlier one's declarations #706 등과 같은 내용입니다.W28: 네임스페이스 Import 보강
요약
import * as E from '@emotion/css'의E.css,E.cx,E.merge,E.keyframes,E.injectGlobal을 기존 named import와 같은 추출 경로로 컴파일합니다. 네임스페이스만 쓰는 파일이 런타임 Emotion 호출과 빈 CSS를 그대로 내보내던 문제를 수정했습니다.동작
const { css, cx: classNames } = E구조분해,const N = E/const c = N.css별칭을 심볼 기준으로 추적합니다. 같은 이름의 지역 변수·매개변수는 변경하지 않습니다.css·keyframes·injectGlobal의 숫자는 px이며 단위 없는 속성은 숫자를 유지합니다. 상수 인라인·Boa 정적 계산 뒤에도 같은 단위를 유지합니다.cx클래스 맵의 숫자는 참/거짓 조건으로만 쓰고 CSS 선언으로 읽지 않습니다.merge와 클래스 합성은 이 PR의 named import와 같은 규칙을 사용합니다.cache,flush,hydrate,sheet,getRegisteredStyles를 읽는 경우 해당 참조와@emotion/cssimport를 유지합니다. 이 멤버들의 중첩 구조분해·기본값·optional 조회도 유지합니다. 스타일 API만 사용하면 Emotion import는 사라집니다.새로 생기는 오류
모두
파일:줄:열: ... cannot use ... at build time: ...형식입니다.@emotion/css에는 default export가 없으므로 value default import를 거부합니다. default export가 있는@emotion/css/create-instance와 혼동하지 않습니다.let·var스타일 별칭, 네임스페이스 rest 구조분해, 스타일 API의 기본값·중첩 구조분해, 스타일 API 바인딩 자체의 exportrequire·TS import-equals·동적 import 등 정적 ESM import가 아닌 경로에서 스타일 API를 읽는 경우: 정적import * as ns from '@emotion/css'사용을 안내합니다. await 없이 namespace를 Promise·callback으로 넘기는 동적 import도 빌드가 추적할 수 없어 오류입니다. 인식되는 런타임 로더의 런타임 전용 API 조회는 보존합니다.css·cx·merge·keyframes·injectGlobal이 읽을 수 없는 입력은 named import와 같은 빌드 오류를 보고합니다.남는 한계
@emotion/react·@vanilla-extract/css네임스페이스와@emotion/css/create-instance는 이 작업 범위가 아닙니다.compat/emotion.d.ts는 런타임 전용 API의 타입을 선언하지 않습니다. 런타임 전용 멤버 보존과 별개인 기존 타입 선언 누락으로 코디네이터에 보고합니다.검증
cargo fmt --all,cargo +1.99 clippy --workspace --all-targets -- -D warnings,cargo test --workspace통과: extractor 테스트 1581개 통과bun test5476개 통과, 커버리지 100%,bun lint는 기존 경고 2개 외 없음100.00% coverage, 10529/10529 lines covered, Bun 5484개/0 fail/100%, publish·benchmark·landing-next-e2e·vinext-rsc-css-e2e 및 codecov/patch SUCCESS. 최초 CI의 미실행 6줄을 실제 테스트와 구조 정리로 보강했으며 제외나 suppression은 추가하지 않았습니다.9b2a04a346d0d9f13748a9bf358512206db5e5bc. 새 커밋은37f692ab(구현·회귀 테스트),112af7b0(Patch note),9b2a04a3(커버리지 보강)이며 기존 PR branch에 fast-forward로 푸시했습니다.아래는 빈 theme를 등록한 실제 WASM 프로브의 출력입니다. 클래스 합성은 named import와 같으며, 런타임 전용 멤버를 읽을 때만 Emotion import가 남습니다.
namespace.tsx
brackets.tsx
runtime.tsx
shadow.tsx
runtime-patterns.tsx
undefined.tsx
alias-wrappers.tsx
string-named.tsx
error.tsx
default.tsx
import-equals.tsx
tdz.tsx
comment.tsx
dynamic-styling.tsx
dynamic-runtime.tsx
module-loader.cjs
alias-off.tsx
wrapped-error.tsx
cast-error.tsx
literal-error.tsx
2026-10-08 업데이트: main 11790bef를 merge commit으로 병합했습니다; 충돌 파일: 없음; 충돌 없이 자동 병합했고, 이미 포함된 squash 원본은 조상 확인 후 ours 전략으로 중복 적용하지 않았습니다.