Skip to content

refactor(core): migrate studio screens, announcements and scheduled publishing tool to vanilla-extract - #14992

Draft
stipsan wants to merge 1 commit into
cody/ve-lite2-05-form-chrome-diffs-0ee6from
cody/ve-lite2-06-studio-screens-scheduling-0ee6
Draft

stipsan wants to merge 1 commit into
cody/ve-lite2-05-form-chrome-diffs-0ee6from
cody/ve-lite2-06-studio-screens-scheduling-0ee6

Conversation

@stipsan

@stipsan stipsan commented Sep 24, 2026 •

Copy link
Copy Markdown
Member

Description

Layer 6/10 of a second low-risk cherry-pick stack from the styled-components to vanilla-extract migration in #14566 (the 12-PR ve-stack series, #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 with main is 455717e. On top of static rules and && overrides, this tier allows attribute and pseudo selectors, keyframes, globalStyle scoped under a local class, closed-set styleVariants, a few prop- or theme-driven values (createVar with assignInlineVars, or useTheme_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 #14990.

This layer covers studio screens: announcements, schema problem groups, the CORS and config error screens, the upsell panel, the studio layout's fullscreen search portal, and the scheduled publishing tool with its releases upsell.

What to review

  • UpsellPanel: the _responsive() direction array becomes a single @media rule at media[1] (600px), as its comment explains; the horizontal layout's image is the only value that changes by breakpoint.
  • StudioLayoutComponent.tsx was already a three-way merge when the stack was built: main had added a comment in another hunk after the reference's merge base, so it is not a byte-for-byte copy of the reference file.
  • ConfigErrorScreen and CorsOriginErrorScreen use && for min-height, while their link and inline-code classes stay single-class on purpose because Text's & a and & code rules outranked the originals too.
  • Package: sanity (core/studio, core/scheduled-publishing, core/releases).

Testing

Each layer passes oxfmt --check and a type-aware oxlint --type-check of its files plus every file importing them, on its own commit. At the stack tip pnpm check:oxlint passes, the packages build with the migrated rules in lib/bundle.css, and pnpm vitest run --project=sanity --changed origin/main passes (227 files, 1885 tests, rebased on main at 4cebde0), 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 on main and 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 SchemaProblemGroups, UpsellPanel and CorsOriginError stories are pixel-identical. The UpsellPanel comparison, with the negative control:

UpsellPanel story on main and on this stack, identical, plus the negative control diff

Notes for release

N/A – Internal styling migration.


To show artifacts inline, enable in settings.

Open in Web Open in Cursor 

@vercel

vercel Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
auth-test-studio Ready Ready Preview Sep 25, 2026 7:49am UTC
page-building-studio Ready Ready Preview Sep 25, 2026 7:49am UTC
studio-diagnostics Ready Ready Preview Sep 25, 2026 7:49am UTC
studio-radar Ready Ready Preview Sep 25, 2026 7:49am UTC
studio-storybook Ready Ready Preview Sep 25, 2026 7:49am UTC
test-studio Ready Ready Preview Sep 25, 2026 7:49am UTC
test-studio-preview-iframe Ready Ready Preview Sep 25, 2026 7:49am UTC

Request Review

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

📦 Bundle Stats — sanity

Compared against cody/ve-lite2-05-form-chrome-diffs-0ee6 (cbbc6857) · v6.16.0 (npm)

sanity

Metric Value vs cody/ve-lite2-05-form-chrome-diffs-0ee6 (cbbc685) vs v6.16.0
Internal (raw) 4.46 MB -2.1 KB, -0.0% +31.0 KB, +0.7%
Internal (gzip) 1.11 MB -612 B, -0.1% +9.6 KB, +0.9%
Bundled (raw) 13.29 MB -1.8 KB, -0.0% +29.0 KB, +0.2%
Bundled (gzip) 3.14 MB -445 B, -0.0% +8.4 KB, +0.3%
Import time 1.06s -20ms, -1.8% +23ms, +2.2%

bin:sanity

Metric Value vs cody/ve-lite2-05-form-chrome-diffs-0ee6 (cbbc685) 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 3ms -0ms, -3.6% -0ms, -0.5%

🗺️ 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.

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

❌ E2E Tests

🟢 134 passed • 🔴 17 failed • 🟡 58 flaky • (⚪ 101 skipped) • view full report • view run

🤖 Share with an AI agent:

Fix the failing e2e tests. The failure report with error messages and page snapshots is at https://e2e-studio-pgx7lf6mb.sanity.dev/agent-report.md
Debug failing tests locally
SANITY_E2E_PROJECT_ID=ittbm412 \
SANITY_E2E_BASE_URL=https://e2e-studio-1lyvepunx.sanity.dev \
SANITY_E2E_DATASET=pr-14992-chromium-36109501521 \
SANITY_E2E_DATASET_CHROMIUM=pr-14992-chromium-36109501521 \
SANITY_E2E_DATASET_FIREFOX=pr-14992-firefox-36109501521 \
pnpm test:e2e --headed \
  e2e/tests/default-layout/versionStatus.spec.ts \
  e2e/tests/comments/inline.spec.ts \
  e2e/tests/desk/documentTypeListContextMenu.spec.ts \
  e2e/tests/desk/documentList.spec.ts \
  e2e/tests/document-actions/delete.spec.ts \
  e2e/tests/document-actions/unpublish.spec.ts \
  e2e/tests/expanded-document/expanded.spec.ts \
  e2e/tests/inputs/array-capabilities.spec.ts \
  e2e/tests/inputs/array.spec.ts \
  e2e/tests/releases/displayDocument/DisplayedDocument.spec.ts \
  e2e/tests/pte/FullScreenEscape.spec.ts \
  e2e/tests/tasks/tasks.spec.ts \
  e2e/tests/variants/variantTool.spec.ts \
  e2e/tests/vision/vision.spec.ts

Studio: https://e2e-studio-1lyvepunx.sanity.dev

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

📚 TypeDoc Generation Result

✅ TypeDoc generated successfully!

  • File size: 8.7M
  • Total exports: 1105
  • Artifact: sanity-typedoc-cb630c2b92263de85599cd410a01a87df516fe36

The TypeDoc JSON file has been generated and validated. All documentation scripts completed successfully.

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Visual regression coverage

113 changed UI files: 26 covered, 4 pending, 83 uncovered.

Per-file coverage (113)
File Status Evidence
packages/sanity/src/core/comments-v2/components/avatars/CommentsAvatar.css.ts uncovered
packages/sanity/src/core/comments-v2/components/avatars/CommentsAvatar.tsx uncovered
packages/sanity/src/core/comments-v2/components/list/CommentOriginBadge.css.ts covered packages/sanity/src/core/comments-v2/components/list/__tests__/CommentOriginBadge.stories.tsx
packages/sanity/src/core/comments-v2/components/list/CommentOriginBadge.tsx covered packages/sanity/src/core/comments-v2/components/list/__tests__/CommentOriginBadge.stories.tsx
packages/sanity/src/core/comments-v2/components/list/CommentsListItemContextMenu.css.ts uncovered
packages/sanity/src/core/comments-v2/components/list/CommentsListItemContextMenu.tsx uncovered
packages/sanity/src/core/comments-v2/components/mentions/MentionsMenu.css.ts covered packages/sanity/src/core/comments-v2/components/mentions/__tests__/MentionsMenu.stories.tsx
packages/sanity/src/core/comments-v2/components/mentions/MentionsMenu.tsx covered packages/sanity/src/core/comments-v2/components/mentions/__tests__/MentionsMenu.stories.tsx
packages/sanity/src/core/comments-v2/components/onboarding/CommentsOnboardingPopover.css.ts uncovered
packages/sanity/src/core/comments-v2/components/onboarding/CommentsOnboardingPopover.tsx uncovered
packages/sanity/src/core/comments-v2/plugin/inspector/CommentsInspector.css.ts uncovered
packages/sanity/src/core/comments-v2/plugin/inspector/CommentsInspector.tsx uncovered
packages/sanity/src/core/comments/components/avatars/CommentsAvatar.css.ts uncovered
packages/sanity/src/core/comments/components/avatars/CommentsAvatar.tsx uncovered
packages/sanity/src/core/comments/components/list/CommentsListItemContextMenu.css.ts uncovered
packages/sanity/src/core/comments/components/list/CommentsListItemContextMenu.tsx uncovered
packages/sanity/src/core/comments/components/mentions/MentionsMenu.css.ts covered packages/sanity/src/core/comments/components/mentions/__tests__/MentionsMenu.stories.tsx
packages/sanity/src/core/comments/components/mentions/MentionsMenu.tsx covered packages/sanity/src/core/comments/components/mentions/__tests__/MentionsMenu.stories.tsx
packages/sanity/src/core/comments/components/mentions/MentionsMenuItem.tsx uncovered
packages/sanity/src/core/comments/components/onboarding/CommentsOnboardingPopover.css.ts uncovered
packages/sanity/src/core/comments/components/onboarding/CommentsOnboardingPopover.tsx uncovered
packages/sanity/src/core/comments/components/pte/blocks/NormalBlock.css.ts uncovered
packages/sanity/src/core/comments/components/pte/blocks/NormalBlock.tsx uncovered
packages/sanity/src/core/comments/components/reactions/TransparentCard.css.ts uncovered
packages/sanity/src/core/comments/components/reactions/TransparentCard.styled.tsx uncovered
packages/sanity/src/core/comments/plugin/field/CommentsFieldButton.css.ts uncovered
packages/sanity/src/core/comments/plugin/field/CommentsFieldButton.tsx uncovered
packages/sanity/src/core/comments/plugin/input/components/FloatingButtonPopover.css.ts uncovered
packages/sanity/src/core/comments/plugin/input/components/FloatingButtonPopover.tsx uncovered
packages/sanity/src/core/comments/plugin/input/components/InlineCommentInputPopover.css.ts covered packages/sanity/src/core/comments/components/pte/comment-input/__tests__/InlineComposerMentions.browser.test.tsx (browser test)
packages/sanity/src/core/comments/plugin/input/components/InlineCommentInputPopover.tsx covered packages/sanity/src/core/comments/components/pte/comment-input/__tests__/InlineComposerMentions.browser.test.tsx (browser test)
packages/sanity/src/core/comments/plugin/inspector/CommentsInspector.css.ts uncovered
packages/sanity/src/core/comments/plugin/inspector/CommentsInspector.tsx uncovered
packages/sanity/src/core/comments/plugin/inspector/CommentsInspectorHeader.css.ts uncovered
packages/sanity/src/core/comments/plugin/inspector/CommentsInspectorHeader.tsx uncovered
packages/sanity/src/core/documentGroupInventory/components/CreateVariant/SelectBundle.css.ts uncovered
packages/sanity/src/core/documentGroupInventory/components/CreateVariant/SelectBundle.tsx uncovered
packages/sanity/src/core/documentGroupInventory/components/DocumentGroupInventoryAction.css.ts uncovered
packages/sanity/src/core/documentGroupInventory/components/DocumentGroupInventoryAction.tsx uncovered
packages/sanity/src/core/documentGroupInventory/components/VariantSet/VariantCheckbox.css.ts uncovered
packages/sanity/src/core/documentGroupInventory/components/VariantSet/VariantCheckbox.tsx uncovered
packages/sanity/src/core/documentGroupInventory/components/VariantSet/VariantSet.css.ts uncovered
packages/sanity/src/core/documentGroupInventory/components/VariantSet/VariantSet.tsx uncovered
packages/sanity/src/core/field/diff/components/DiffInspectWrapper.css.ts uncovered
packages/sanity/src/core/field/diff/components/DiffInspectWrapper.tsx uncovered
packages/sanity/src/core/field/diff/components/MetaInfo.css.ts covered packages/sanity/src/core/field/diff/components/__tests__/FieldDiffChrome.stories.tsx
packages/sanity/src/core/field/diff/components/MetaInfo.tsx covered packages/sanity/src/core/field/diff/components/__tests__/FieldDiffChrome.stories.tsx
packages/sanity/src/core/field/types/portableText/diff/components/Header.css.ts uncovered
packages/sanity/src/core/field/types/portableText/diff/components/Header.tsx uncovered
packages/sanity/src/core/form/inputs/TextInput.css.ts uncovered
packages/sanity/src/core/form/inputs/TextInput.tsx uncovered
packages/sanity/src/core/form/inputs/arrays/common/DragHandle.css.ts uncovered
packages/sanity/src/core/form/inputs/arrays/common/DragHandle.tsx uncovered
packages/sanity/src/core/form/inputs/files/ImageToolInput/imagetool/HotspotImage.css.ts uncovered
packages/sanity/src/core/form/inputs/files/ImageToolInput/imagetool/HotspotImage.styles.tsx uncovered
packages/sanity/src/core/presence/FieldPresence.styled.css.ts covered packages/sanity/src/core/form/inputs/arrays/__tests__/ArrayItemLayouts.stories.tsx
packages/sanity/src/core/presence/FieldPresence.styled.tsx covered packages/sanity/src/core/form/inputs/arrays/__tests__/ArrayItemLayouts.stories.tsx
packages/sanity/src/core/releases/components/documentHeader/contextMenu/CopyToReleaseMenuGroup.css.ts uncovered
packages/sanity/src/core/releases/components/documentHeader/contextMenu/CopyToReleaseMenuGroup.tsx uncovered
packages/sanity/src/core/releases/components/documentHeader/styles.css.ts uncovered
packages/sanity/src/core/releases/components/documentHeader/styles.tsx uncovered
packages/sanity/src/core/releases/tool/components/Table/TableHeader.css.ts covered packages/sanity/src/core/releases/tool/components/Table/__tests__/Table.browser.test.tsx (browser test)
packages/sanity/src/core/releases/tool/components/Table/TableHeader.tsx covered packages/sanity/src/core/releases/tool/components/Table/__tests__/Table.browser.test.tsx (browser test)
packages/sanity/src/core/releases/tool/detail/ReleaseTypePicker.css.ts uncovered
packages/sanity/src/core/releases/tool/detail/ReleaseTypePicker.tsx uncovered
packages/sanity/src/core/releases/tool/detail/documentTable/DocumentTableColumnDefs.css.ts uncovered
packages/sanity/src/core/releases/tool/detail/documentTable/DocumentTableColumnDefs.tsx uncovered
packages/sanity/src/core/releases/tool/overview/SchedulesUpsell.css.ts pending #15007 packages/sanity/src/core/studio/upsell/__tests__/UpsellPanelHosts.stories.tsx
packages/sanity/src/core/releases/tool/overview/SchedulesUpsell.tsx pending #15007 packages/sanity/src/core/studio/upsell/__tests__/UpsellPanelHosts.stories.tsx
packages/sanity/src/core/scheduled-publishing/tool/Tool.css.ts uncovered
packages/sanity/src/core/scheduled-publishing/tool/Tool.tsx uncovered
packages/sanity/src/core/scheduled-publishing/tool/schedules/Schedules.css.ts uncovered
packages/sanity/src/core/scheduled-publishing/tool/schedules/Schedules.tsx uncovered
packages/sanity/src/core/studio/StudioLayoutComponent.css.ts uncovered
packages/sanity/src/core/studio/StudioLayoutComponent.tsx uncovered
packages/sanity/src/core/studio/components/navbar/free-trial/FreeTrialButton.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/free-trial/FreeTrialButton.tsx uncovered
packages/sanity/src/core/studio/components/navbar/free-trial/PopoverContent.css.ts covered packages/sanity/src/core/studio/components/navbar/free-trial/__tests__/FreeTrialPopoverContent.stories.tsx
packages/sanity/src/core/studio/components/navbar/free-trial/PopoverContent.tsx covered packages/sanity/src/core/studio/components/navbar/free-trial/__tests__/FreeTrialPopoverContent.stories.tsx
packages/sanity/src/core/studio/components/navbar/new-document/NewDocumentList.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/new-document/NewDocumentList.tsx uncovered
packages/sanity/src/core/studio/components/navbar/presence/PresenceMenu.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/presence/PresenceMenu.tsx uncovered
packages/sanity/src/core/studio/components/navbar/resources/DiagnosticsReport.css.ts covered packages/sanity/src/core/studio/components/navbar/resources/__tests__/DiagnosticsReport.stories.tsx
packages/sanity/src/core/studio/components/navbar/resources/DiagnosticsReport.tsx covered packages/sanity/src/core/studio/components/navbar/resources/__tests__/DiagnosticsReport.stories.tsx
packages/sanity/src/core/studio/components/navbar/search/SearchDialog.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/search/SearchDialog.tsx uncovered
packages/sanity/src/core/studio/components/navbar/search/components/common/FilterPill.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/search/components/common/FilterPill.tsx uncovered
packages/sanity/src/core/studio/components/navbar/search/components/filters/filter/FilterPopoverContent.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/search/components/filters/filter/FilterPopoverContent.tsx uncovered
packages/sanity/src/core/studio/components/navbar/search/components/filters/filter/inputs/date/datePicker/calendar/CalendarMonth.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/search/components/filters/filter/inputs/date/datePicker/calendar/CalendarMonth.tsx uncovered
packages/sanity/src/core/studio/components/navbar/workspace/WorkspaceAuth/Layout.css.ts covered packages/sanity/src/core/studio/components/navbar/workspace/WorkspaceAuth/__tests__/WorkspaceAuthLayout.stories.tsx
packages/sanity/src/core/studio/components/navbar/workspace/WorkspaceAuth/Layout.tsx covered packages/sanity/src/core/studio/components/navbar/workspace/WorkspaceAuth/__tests__/WorkspaceAuthLayout.stories.tsx
packages/sanity/src/core/studio/screens/schemaErrors/SchemaProblemGroups.css.ts covered packages/sanity/src/core/studio/screens/schemaErrors/__tests__/SchemaProblemGroups.stories.tsx
packages/sanity/src/core/studio/screens/schemaErrors/SchemaProblemGroups.tsx covered packages/sanity/src/core/studio/screens/schemaErrors/__tests__/SchemaProblemGroups.stories.tsx
packages/sanity/src/core/studio/studioAnnouncements/Divider.css.ts uncovered
packages/sanity/src/core/studio/studioAnnouncements/Divider.tsx uncovered
packages/sanity/src/core/studio/studioAnnouncements/StudioAnnouncementsDialog.css.ts uncovered
packages/sanity/src/core/studio/studioAnnouncements/StudioAnnouncementsDialog.tsx uncovered
packages/sanity/src/core/studio/upsell/UpsellPanel.css.ts covered packages/sanity/src/core/studio/upsell/__tests__/UpsellPanel.stories.tsx
packages/sanity/src/core/studio/upsell/UpsellPanel.tsx covered packages/sanity/src/core/studio/upsell/__tests__/UpsellPanel.stories.tsx
packages/sanity/src/core/studio/workspaces/ConfigErrorScreen.css.ts pending #14897 packages/sanity/src/core/studio/workspaces/__tests__/ConfigErrorScreen.stories.tsx
packages/sanity/src/core/studio/workspaces/ConfigErrorScreen.tsx pending #14897 packages/sanity/src/core/studio/workspaces/__tests__/ConfigErrorScreen.stories.tsx
packages/sanity/src/core/studio/workspaces/CorsOriginErrorScreen.css.ts covered packages/sanity/src/core/studio/workspaces/__tests__/CorsOriginError.stories.tsx
packages/sanity/src/core/studio/workspaces/CorsOriginErrorScreen.tsx covered packages/sanity/src/core/studio/workspaces/__tests__/CorsOriginError.stories.tsx
packages/sanity/src/core/tasks/components/activity/helpers/index.css.ts uncovered
packages/sanity/src/core/tasks/components/activity/helpers/index.tsx uncovered
packages/sanity/src/core/tasks/plugin/TasksFooterOpenTasks.css.ts uncovered
packages/sanity/src/core/tasks/plugin/TasksFooterOpenTasks.tsx uncovered
packages/sanity/src/media-library/plugin/VideoInput/styles.css.ts uncovered
packages/sanity/src/media-library/plugin/VideoInput/styles.tsx uncovered

covered: a committed *.stories.tsx (snapshotted by the "sanity studio" Chromatic project) or *.browser.test.tsx (end state snapshotted by "sanity studio vitest") imports the file, directly or through its *Story.tsx harness. pending: an open PR adds such a story; do not open a duplicate. uncovered: no story or browser test renders this file. How to add one: .agents/skills/sanity-visual-coverage/SKILL.md.

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 49.83% 40053 / 80377
🔵 Statements 45.01% 53238 / 118271
🔵 Functions 45.05% 8140 / 18065
🔵 Branches 40.02% 30759 / 76846
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
packages/sanity/src/core/releases/tool/overview/SchedulesUpsell.css.ts 0% 0% 0% 0%
packages/sanity/src/core/releases/tool/overview/SchedulesUpsell.tsx 47.36% 38.46% 28.57% 51.21% 15-29, 64, 68, 72, 109, 114
packages/sanity/src/core/scheduled-publishing/tool/Tool.css.ts 0% 0% 0% 0%
packages/sanity/src/core/scheduled-publishing/tool/Tool.tsx 0% 0% 0% 0% 38-242
packages/sanity/src/core/scheduled-publishing/tool/schedules/Schedules.css.ts 0% 0% 0% 0%
packages/sanity/src/core/scheduled-publishing/tool/schedules/Schedules.tsx 0% 0% 0% 0% 13-19
packages/sanity/src/core/studio/StudioLayoutComponent.css.ts 0% 0% 0% 0%
packages/sanity/src/core/studio/StudioLayoutComponent.tsx 86.45% 73.87% 31.81% 90.47% 29-32, 99, 108, 121, 125, 163-166, 170-156, 53-223
packages/sanity/src/core/studio/screens/schemaErrors/SchemaProblemGroups.css.ts 0% 0% 0% 0%
packages/sanity/src/core/studio/screens/schemaErrors/SchemaProblemGroups.tsx 3.12% 0% 0% 3.84% 23-126
packages/sanity/src/core/studio/studioAnnouncements/Divider.css.ts 0% 0% 0% 0%
packages/sanity/src/core/studio/studioAnnouncements/Divider.tsx 84% 77.77% 75% 88.88% 31, 33-34, 47-52
packages/sanity/src/core/studio/studioAnnouncements/StudioAnnouncementsDialog.css.ts 0% 0% 0% 0%
packages/sanity/src/core/studio/studioAnnouncements/StudioAnnouncementsDialog.tsx 87.03% 57.14% 77.77% 93.84% 43, 87, 89-93, 42-194
packages/sanity/src/core/studio/upsell/UpsellPanel.css.ts 0% 0% 0% 0%
packages/sanity/src/core/studio/upsell/UpsellPanel.tsx 98.14% 57.14% 100% 100% 42-90
packages/sanity/src/core/studio/workspaces/ConfigErrorScreen.css.ts 0% 0% 0% 0%
packages/sanity/src/core/studio/workspaces/ConfigErrorScreen.tsx 0% 0% 0% 0% 21-327
packages/sanity/src/core/studio/workspaces/CorsOriginErrorScreen.css.ts 0% 0% 0% 0%
packages/sanity/src/core/studio/workspaces/CorsOriginErrorScreen.tsx 88.88% 67.3% 50% 100% 83, 59-270
Generated in workflow #71943 for commit aea264f by the Vitest Coverage Report Action

@stipsan
stipsan added this pull request to stack #14991 September 25, 2026 07:47
…ublishing tool to vanilla-extract

Layer 6/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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟢 Approval recommended

The migration preserves component contracts and cascade behavior, with documented build, test, and visual-parity verification.

Review effort: Balanced
Findings: None

What changed in this PR

Migrates Studio screens and scheduling/release UI from styled-components to vanilla-extract while preserving existing layout, responsiveness, and specificity.

Changes:

  • Replaces styled wrappers with colocated vanilla-extract classes.
  • Preserves responsive upsell layouts and UI primitive overrides.
  • Migrates announcements, error screens, scheduling tools, and release upsells.
File Description
packages/​sanity/​src/​core/​studio/​workspaces/​CorsOriginErrorScreen.tsx Applies extracted error-screen styles.
packages/​sanity/​src/​core/​studio/​workspaces/​CorsOriginErrorScreen.css.ts Defines CORS screen layout and link styles.
packages/​sanity/​src/​core/​studio/​workspaces/​ConfigErrorScreen.tsx Replaces styled configuration-error elements.
packages/​sanity/​src/​core/​studio/​workspaces/​ConfigErrorScreen.css.ts Defines configuration screen and inline-code styles.
packages/​sanity/​src/​core/​studio/​upsell/​UpsellPanel.tsx Applies responsive vanilla-extract upsell styles.
packages/​sanity/​src/​core/​studio/​upsell/​UpsellPanel.css.ts Preserves image breakpoints and content alignment.
packages/​sanity/​src/​core/​studio/​StudioLayoutComponent.tsx Migrates the fullscreen search portal card.
packages/​sanity/​src/​core/​studio/​StudioLayoutComponent.css.ts Defines fixed portal positioning and overflow override.
packages/​sanity/​src/​core/​studio/​studioAnnouncements/​StudioAnnouncementsDialog.tsx Replaces announcement dialog styled wrappers.
packages/​sanity/​src/​core/​studio/​studioAnnouncements/​StudioAnnouncementsDialog.css.ts Defines scrolling, sticky-header, and close-button layout.
packages/​sanity/​src/​core/​studio/​studioAnnouncements/​Divider.tsx Uses state-dependent divider classes.
packages/​sanity/​src/​core/​studio/​studioAnnouncements/​Divider.css.ts Defines divider appearance and visibility transition.
packages/​sanity/​src/​core/​studio/​screens/​schemaErrors/​SchemaProblemGroups.tsx Applies extracted schema-error styles.
packages/​sanity/​src/​core/​studio/​screens/​schemaErrors/​SchemaProblemGroups.css.ts Preserves code and multiline-message styling.
packages/​sanity/​src/​core/​scheduled-publishing/​tool/​Tool.tsx Replaces the styled scheduling column wrapper.
packages/​sanity/​src/​core/​scheduled-publishing/​tool/​Tool.css.ts Defines column divider styling.
packages/​sanity/​src/​core/​scheduled-publishing/​tool/​schedules/​Schedules.tsx Migrates schedule panel containers.
packages/​sanity/​src/​core/​scheduled-publishing/​tool/​schedules/​Schedules.css.ts Preserves container width override.
packages/​sanity/​src/​core/​releases/​tool/​overview/​SchedulesUpsell.tsx Migrates release upsell panel containers.
packages/​sanity/​src/​core/​releases/​tool/​overview/​SchedulesUpsell.css.ts Preserves panel width and flex behavior.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

This branch was successfully deployed

7 active deployments
Preview – studio-storybook — aea264f7 Deployed Sep 25, 2026 by vercel[bot]
Preview – test-studio — aea264f7 Deployed Sep 25, 2026 by vercel[bot]
Preview – auth-test-studio — aea264f7 Deployed Sep 25, 2026 by vercel[bot]
Preview – page-building-studio — aea264f7 Deployed Sep 25, 2026 by vercel[bot]
Preview – studio-radar — aea264f7 Deployed Sep 25, 2026 by vercel[bot]
Preview – studio-diagnostics — aea264f7 Deployed Sep 25, 2026 by vercel[bot]
Preview – test-studio-preview-iframe — aea264f7 Deployed Sep 25, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants