refactor(releases): migrate release table, document header and variant inventory wrappers to vanilla-extract - #14989
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📦 Bundle Stats —
|
| Metric | Value | vs cody/ve-lite2-03-comments-menus-tasks-0ee6 (30076fd) | vs v6.16.0 |
|---|---|---|---|
| Internal (raw) | 4.46 MB | +988 B, +0.0% | +31.1 KB, +0.7% |
| Internal (gzip) | 1.11 MB | +44 B, +0.0% | +9.8 KB, +0.9% |
| Bundled (raw) | 13.29 MB | +40 B, +0.0% | +28.8 KB, +0.2% |
| Bundled (gzip) | 3.14 MB | -222 B, -0.0% | +8.6 KB, +0.3% |
| Import time | 1.85s | +2ms, +0.1% | +104ms, +5.9% |
bin:sanity
| Metric | Value | vs cody/ve-lite2-03-comments-menus-tasks-0ee6 (30076fd) | vs v6.16.0 |
|---|---|---|---|
| Internal (raw) | 7.1 KB | - | - |
| Internal (gzip) | 2.9 KB | - | - |
| Bundled (raw) | 7.1 KB | - | - |
| Bundled (gzip) | 2.8 KB | - | - |
| Import time | 5ms | -0ms, -0.7% | +0ms, +2.6% |
🗺️ View treemap · Artifacts
Details
- Import time regressions over 10% are flagged with
⚠️ - Sizes shown as raw / gzip 🗜️. Internal bytes = own code only. Total bytes = with all dependencies. Import time = Node.js cold-start median.
📚 TypeDoc Generation Result✅ TypeDoc generated successfully!
The TypeDoc JSON file has been generated and validated. All documentation scripts completed successfully. |
❌ E2E Tests🟢 115 passed • 🔴 16 failed • 🟡 86 flaky • (⚪ 93 skipped) • view full report • view run 🤖 Share with an AI agent: Debug failing tests locallySANITY_E2E_PROJECT_ID=ittbm412 \
SANITY_E2E_BASE_URL=https://e2e-studio-oslp08ia7.sanity.dev \
SANITY_E2E_DATASET=pr-14989-chromium-36109501175 \
SANITY_E2E_DATASET_CHROMIUM=pr-14989-chromium-36109501175 \
SANITY_E2E_DATASET_FIREFOX=pr-14989-firefox-36109501175 \
pnpm test:e2e --headed \
e2e/tests/comments/inline.spec.ts \
e2e/tests/components-api/studio.spec.ts \
e2e/tests/enhanced-object-dialog/componentItemSmoke.spec.ts \
e2e/tests/inputs/text.spec.ts \
e2e/tests/inputs/reference.spec.ts \
e2e/tests/inputs/object.spec.ts \
e2e/tests/tasks/tasks.spec.ts \
e2e/tests/structure/menuItemSelectedIndicator.spec.ts |
Visual regression coverage77 changed UI files: 16 covered, 0 pending, 61 uncovered. Per-file coverage (77)
covered: a committed |
…t inventory wrappers to vanilla-extract Layer 4/10 of the second low-risk cherry-pick series from the styled-components to vanilla-extract migration in #14566. Files are taken from the tip of that stack.
d937670 to
a16cc68
Compare
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Most migrated UI states lack visual coverage, and the cited Table test does not render the changed sortable header.
Get a fresh assessment by requesting another Copilot review.
Review effort: Balanced
Findings: 9
Open (9)
Add visual coverage for header title truncation · New Add visual coverage for status label truncation · New Add visual coverage for checkbox hit target · New Add visual coverage for card edge overflow · New Add overflow coverage for release list scrolling · New Add visual coverage for VersionChip states · New Add browser coverage for sortable header styling · New Add visual coverage for editable trigger styling · New Add visual coverage for type title truncation · New
What changed in this PR
Migrates release and document-group inventory UI wrappers from styled-components to vanilla-extract without intended behavior changes.
Changes:
- Moves static, descendant, and specificity-sensitive styles into
.css.tsfiles. - Preserves wrapper APIs, refs, class names, and default props.
- Replaces internal styled elements with native elements or existing primitives.
| File | Description |
|---|---|
ReleaseTypePicker.tsx |
Applies the extracted trigger class. |
ReleaseTypePicker.css.ts |
Defines the schedule trigger styling. |
DocumentTableColumnDefs.tsx |
Uses a styled native span for truncation. |
DocumentTableColumnDefs.css.ts |
Defines ellipsis behavior. |
TableHeader.tsx |
Applies the sortable-header class. |
TableHeader.css.ts |
Preserves descendant font-weight specificity. |
documentHeader/styles.tsx |
Adds class-merging chip wrappers. |
documentHeader/styles.ts |
Removes styled-components wrappers. |
documentHeader/styles.css.ts |
Recreates chip layout and cascade rules. |
CopyToReleaseMenuGroup.tsx |
Applies extracted list styling. |
CopyToReleaseMenuGroup.css.ts |
Defines scrolling and child sizing. |
VariantSet.tsx |
Replaces the styled Card wrapper. |
VariantSet.css.ts |
Preserves clipped overflow. |
VariantCheckbox.tsx |
Replaces the styled Checkbox wrapper. |
VariantCheckbox.css.ts |
Preserves the expanded hit-area selector. |
DocumentGroupInventoryAction.tsx |
Applies extracted button truncation styling. |
DocumentGroupInventoryAction.css.ts |
Defines width and ellipsis rules. |
SelectBundle.tsx |
Applies extracted title truncation styling. |
SelectBundle.css.ts |
Defines flex-item ellipsis behavior. |
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Description
Layer 4/10 of a second low-risk cherry-pick stack from the styled-components to vanilla-extract migration in #14566 (the 12-PR
ve-stackseries, #14616 to #14627). The first stack (#14905 to #14914) took the purely static rules and has merged; this one takes the lowest-risk tier that is left, in the same shape: at most 20 files per layer, one commit each, every file copied verbatim from the reference tip, whose merge base withmainis455717e. On top of static rules and&&overrides, this tier allows attribute and pseudo selectors,keyframes,globalStylescoped under a local class, closed-setstyleVariants, a few prop- or theme-driven values (createVarwithassignInlineVars, oruseTheme_v2) and a few media or container queries with default-theme literal breakpoints. Layers are ordered by risk, lowest first, so the stack can be merged bottom-up and stopped at any layer. Based on #14987.This layer covers the release document table column definitions, the release type picker, the document header chips and copy-to-release menu, the releases table header, and the variant inventory set, action, bundle picker and checkbox.
What to review
documentHeader/styles.tsbecomesstyles.tsxwrappers.ChipButtonscopes its--card-border-coloroverride to:not([data-disabled='true']); the comment instyles.css.tswalks through why that reproduces exactly which ofButton's (0,1,0), (0,2,0) and (0,3,0) rules the original beat.TableHeaderandVariantCheckboxdouble their class inside aglobalStyleso the descendant rule outranks the primitive's own.sanity(core/releases,core/documentGroupInventory).Testing
Each layer passes
oxfmt --checkand a type-awareoxlint --type-checkof its files plus every file importing them, on its own commit. At the stack tippnpm check:oxlintpasses, the packages build with the migrated rules inlib/bundle.css, andpnpm vitest run --project=sanity --changed origin/mainpasses (227 files, 1885 tests, rebased onmainat4cebde0), as does the exports snapshot test, so no public export changes shape. Every Storybook story that renders a file from this stack (17 stories) was screenshotted onmainand at the tip and compared pixel by pixel: all 17 are identical, while a one-value negative control produced 42,739 changed pixels. For this layer, the Table browser test passes, but its columns only useBasicHeader, so it does not render the sortable header button that carries the migratedTableHeaderclass; no story or browser test renders the other files.Notes for release
N/A – Internal styling migration.