Repository navigation
Conversation
…and declarations Classes Tailwind does not define stay in the className as written, a class with a variant the compiler does not understand is left unchanged instead of applying unconditionally, and utilities emit every declaration Tailwind v4 writes: multi-declaration utilities in full, translate/rotate/scale/skew through their own properties so they compose, and arbitrary values read with Tailwind's grammar. Template classNames keep text that runs into an interpolation attached to it. Refs #687 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…and composed utilities Refs #687 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…f Tailwind v4 Refs #687 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…it with digits Refs #687 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/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:
|
Resolve libs/extractor/src/tailwind.rs by preserving the new TailwindClass declaration/condition structure and the removal of the obsolete parser helper, matching the main integration in #749. Keep the Rust 1.99 assertion fixes and regenerate bun.lock workspace metadata for main published versions. Refs #687 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Merge #705 head 031e8b5, which contains main a935315. Resolve libs/css/src/theme_tokens.rs by retaining the color/shadow token test and the Rust 1.99 typography assertion together, byte-for-byte matching #749; preserve all main integration and published versions. Refs #687 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Merge #734 head faf23c5, which contains main a935315. No unresolved conflict files remain: lower-stack resolutions flow cleanly through theme_tokens.rs and tailwind.rs. Auto-merged packages/vite-plugin/src/plugin.ts and its plugin.test.ts retain both Tailwind definition watching and main RSC CSS forwarding/restoration, byte-for-byte matching reference merge 753f418 in #749; preserve main published versions. Refs #687 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.
owjs3901
added a commit
that referenced
this pull request
Oct 8, 2026
Resolved libs/extractor/src/tailwind.rs by retaining #749's nested declarations alongside #705's per-class v4 compilation and #734/#739 theme and utility integration. Resolved packages/bun-plugin/src/plugin.ts by retaining #703's SourceLoader/scanner/build stylesheet emission and #749's Tailwind watcher with its returned file list. Resolved packages/rsbuild-plugin/src/plugin.ts by combining #704's synchronous complete stylesheet helpers with #749's stat-based Tailwind watch invalidation. Resolved packages/rsbuild-plugin/src/__tests__/checkout-isolation.test.ts and plugin.test.ts by retaining #704's onBeforeBuild/rootPath setup alongside all Tailwind watcher tests. After reproducing four failing stylesheet tests, their shared test setup now selects the second Rspack config callback (stylesheet completion), while the first remains the Tailwind watcher. No snapshots or lockfiles were hand-merged, no PR intent was removed, and #734/#739/#749 remain separate PRs. Refs #687 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
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 #687 (B, 권장 항목 2부: TW-14, TW-15, TW-16, TW-17, TW-18,
@theme/@utility/@custom-variant, 문서). #734(feat/tailwind-v4-theme) 위에 쌓은 PR이며 #705 → #734 → 이 PR 순서로 병합되어야 합니다. base가main이라 병합 전에는 앞선 PR의 커밋도 함께 보입니다.요약
tailwindcss를 import하는 CSS 파일(devup.json의tailwind.css, 없으면src/app/globals.css등 관례 경로에서 처음으로tailwindcss를 import하는 파일)과 상대 경로로 import한 CSS 파일을 빌드 시작 때 읽습니다.@theme: 색(--color-*), 간격(--spacing,--spacing-*), 그림자, blur, radius, ease, animate(@keyframes와 함께),--default-transition-*, breakpoint.--color-*: initial,--*: initial같은 초기화도 따릅니다.@utility name { 선언 },@custom-variant name (선택자)와@slot을 쓰는 블록 형태. 같은 이름의 내장 variant(dark)는 대체됩니다.--text-*,--font-*,--leading-*,--tracking-*,--container-*,--perspective-*,--aspect-*)를 프로젝트가 바꾸면 그 값을 읽는 class(text-lg등)도 원문 그대로 둡니다(바뀐 기본값으로 틀리게 컴파일하지 않음).ring-*,inset-ring-*,ring-offset-*가 v4처럼--tw-ring-*변수와box-shadow합성으로shadow-*와 합쳐집니다(이전 구현은 정의되지 않은--tw-ring-color를 읽어 효과가 없었음).drop-shadow-*는 다른 필터처럼filter에 합성됩니다(크기, 색, 임의 값, none, inherit).border/border-N/border-x|y|s|e|t|r|b|l,border-dashed등은border-style: var(--tw-border-style)를 함께 써서 테두리가 실제로 보입니다(이전에는 style이 없어 그려지지 않았음).outline,outline-N,outline-none|dashed|dotted|double|solid도 같은 방식입니다. 그 밖에line-clamp-*,decoration-*(두께·색·스타일),underline-offset-*,outline-offset-*,border-spacing-*,indent-*,start-*/end-*,scroll-m*/scroll-p*(모든 변),table-auto|fixed,caption-*,transform-none|flat|3d,backface-*,perspective-*,antialiased,forced-color-adjust-*,field-sizing-*,scheme-*,wrap-*,font-stretch-*,list-image-none.rounded-*는 v4 값(rounded-sm0.25rem,rounded-xs,4xl,rounded-full은calc(infinity * 1px))으로 고쳤습니다. 숫자 간격은 0.25 배수라면p-13처럼 계산합니다.shadow-inner,shadow-*의 색 치환은 hex/함수/이름 색 모두를 처리합니다.clsx(...),classnames(...),classNames(...)의 인자(문자열, 템플릿, 조건식, 배열, 객체 키)와['a', cond && 'b'].join(' ')의 class가 그 자리에서 컴파일됩니다.cn/twMerge/cva는 class를 합치거나 버리는 규칙이 있어 정확히 재현할 수 없으므로 건드리지 않습니다.<div className>)과 Devup 컴포넌트가 아닌 컴포넌트의className은 지금처럼 그대로 둡니다(기본값 유지). 컴파일하려면<Box as="div">를 씁니다. 문서에 계약으로 적었습니다.docs/migration/tailwind페이지를 새로 만들어 메뉴에 연결했습니다(class가 컴파일되는 조건과 원문으로 남는 조건, 읽는 위치, 테마 값, 정의 읽기, 우선순위, 남는 목록).동작
probe.ts(devup.json 테마primary/text색,cardshadow와 아래 Tailwind CSS)로 확인한 실제 출력:새로 생기는 오류
없음.
남는 한계
container와@container쿼리,mask-*,text-shadow-*,inset-shadow-*,font-variant-numeric합성(tabular-nums등),rotate-x-*/translate-z-*/scale-z-*,contain-*,outline-hidden, 함수형@utility(tab-*의--value()),@utility안의 중첩 규칙과@apply,@plugin,@config,theme()값.cn/twMerge/cva로 합쳐지는 class와 런타임 변수의 class는 컴파일하지 않습니다(원리상 불가). 상수 식별자(const base = 'p-4')에 묶인 문자열도 이 PR은 읽지 않습니다.@theme의--breakpoint-md로md:를 바꾸지는 않습니다. 새 이름의--breakpoint-3xl만 variant가 됩니다).className의 border 클래스는 이제border-style도 씁니다(v4와 같음). 테두리가 보이지 않던 코드가 이제 보일 수 있습니다.검증
cargo fmt --all,cargo +1.99 clippy --workspace --all-targets -- -D warnings,cargo test --workspace통과. WASM 재빌드 후bun run build,bun test(5493 pass, 0 fail, 커버리지 100%),bun lint(기존 경고 2개 외 추가 없음).@theme/@utility/@custom-variant/초기화/읽을 수 없는 파일), 테마 값 적용(색, 간격, 그림자, blur, radius, ease, animate와 키프레임, 기본 transition, breakpoint, custom variant, custom utility, 바뀐 namespace의 class), ring/drop-shadow/그 밖의 군마다 v4 CSS와 비교,clsx호출과 배열/객체/join(컴파일되는 경우와 그대로 남는 경우), 플러그인별(Vite 다시 읽기·모든 모듈 무효화, webpack mtime/파일 의존성, Next 로더 의존성, Rsbuild 등록) 테스트.ring-*문제는 이 PR에서 고쳤습니다.)W40 main 반영 (2026-10-06)
a935315c34b45aeda6dc156e29a5c76df51b76bd까지 병합했습니다 (병합 head:6aa6d9bdf4dff6b14472f4ff7dbda009352b76b1).<div className="card a b c d e unknown:p-2" />출력 확인. feat(extractor): read the Tailwind CSS definitions and compile more of Tailwind v4 #739→feat(extractor): compile containers, masks, 3D transforms, functional @utility and class helpers #749 기본 시험 병합의 단일 nested 필드 충돌은 두 비교 불가능한 merge-base가 만드는 criss-cross 이력 문제로, 코디네이터가2026-10-06 17:58KST에 clean-trial 조건을 명시적으로 면제하고18:39KST에 재확인했습니다(w40-739-decision). 후속 해결 한 줄: #749의 TailwindClass.nested 필드를 유지합니다. #749는 변경하지 않았고 scaffold·가짜 이력·추가 커밋도 만들지 않았습니다.2026-10-08 업데이트: main 11790bef를 merge commit으로 병합했습니다; 충돌 파일: 없음; 충돌 없이 자동 병합했고, 이미 포함된 squash 원본은 조상 확인 후 ours 전략으로 중복 적용하지 않았습니다.