Skip to content

refactor(form): migrate portable text toolbar, decorators and reference autocomplete to vanilla-extract - #14996

Draft
stipsan wants to merge 1 commit into
cody/ve-lite2-08-shared-components-0ee6from
cody/ve-lite2-09-portable-text-references-0ee6
Draft

stipsan wants to merge 1 commit into
cody/ve-lite2-08-shared-components-0ee6from
cody/ve-lite2-09-portable-text-references-0ee6

Conversation

@stipsan

@stipsan stipsan commented Sep 24, 2026 •

Copy link
Copy Markdown
Member

Description

Layer 9/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 #14995.

This layer covers the portable text toolbar, block style select, decorators, change indicator and popover modal, the three reference autocomplete popovers, and form field status.

What to review

  • Decorator: the scheme branch becomes styleVariants keyed by useTheme_v2().color._dark; a custom decorator with no tag now renders an explicit span, which is what styled.span did when as was undefined.
  • Review fix on top of the reference: it read the theme in Decorator, above any custom decorator component, so a custom decorator that wraps renderDefault() in a Card with another scheme got the outer scheme's blend mode. A module-level DecoratorRoot now reads the theme where the mark renders, as the styled Root did. A new case in Decorators.browser.test.tsx renders a custom code decorator inside a dark Card in the light studio and asserts mix-blend-mode: screen; it fails with multiply against the reference version. Because Decorator no longer reads the theme itself, Decorator.test.tsx needs no ThemeProvider and stays as on main.
  • PopoverModal.styles.ts becomes .tsx wrappers. ReferenceAutocomplete (three copies) and StyledChangeIndicatorWithProvidedFullPath move their & > div rules to globalStyle under the local class.
  • Rebase note: Toolbar.tsx also carries fix(core): let a container block config add portable text toolbar actions #14961 (useToolbarSchemaTypes), which main added in a separate hunk; the rebase kept both.
  • Package: sanity (core/form).

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 EditorChrome story (which renders Toolbar) is pixel-identical, and the Decorators, SchemaLessValues and ToolbarApplicableSchema browser tests pass in Chromium, including the new nested-scheme case.

Notes for release

N/A – Internal styling migration.


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 9:02am UTC
page-building-studio Ready Ready Preview Sep 25, 2026 9:02am UTC
studio-diagnostics Ready Ready Preview Sep 25, 2026 9:02am UTC
studio-radar Ready Ready Preview Sep 25, 2026 9:02am UTC
studio-storybook Ready Ready Preview Sep 25, 2026 9:02am UTC
test-studio Ready Ready Preview Sep 25, 2026 9:02am UTC
test-studio-preview-iframe Ready Ready Preview Sep 25, 2026 9:02am 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-08-shared-components-0ee6 (8cc6c991) · v6.16.0 (npm)

sanity

Metric Value vs cody/ve-lite2-08-shared-components-0ee6 (8cc6c99) vs v6.16.0
Internal (raw) 4.46 MB -32 B, -0.0% +29.4 KB, +0.6%
Internal (gzip) 1.11 MB -322 B, -0.0% +9.1 KB, +0.8%
Bundled (raw) 13.29 MB -19 B, -0.0% +27.1 KB, +0.2%
Bundled (gzip) 3.14 MB -262 B, -0.0% +7.7 KB, +0.2%
Import time 1.84s -38ms, -2.0% +87ms, +5.0%

bin:sanity

Metric Value vs cody/ve-lite2-08-shared-components-0ee6 (8cc6c99) 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, -3.6% +0ms, +4.8%

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

📚 TypeDoc Generation Result

✅ TypeDoc generated successfully!

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

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

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Visual regression coverage

166 changed UI files: 34 covered, 10 pending, 122 uncovered.

Per-file coverage (166)
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/components/collapseMenu/CollapseMenu.css.ts pending #14539 packages/sanity/src/core/components/collapseMenu/__tests__/CollapseMenu.stories.tsx
packages/sanity/src/core/components/collapseMenu/CollapseMenu.tsx pending #14539 packages/sanity/src/core/components/collapseMenu/__tests__/CollapseMenu.stories.tsx
packages/sanity/src/core/components/documentStatusIndicator/DocumentVersionsStatusIndicator.css.ts covered packages/sanity/src/core/components/documentStatusIndicator/__tests__/DocumentVersionsStatusIndicator.stories.tsx
packages/sanity/src/core/components/documentStatusIndicator/DocumentVersionsStatusIndicator.tsx covered packages/sanity/src/core/components/documentStatusIndicator/__tests__/DocumentVersionsStatusIndicator.stories.tsx
packages/sanity/src/core/components/documentTable/EditedByCell.css.ts uncovered
packages/sanity/src/core/components/documentTable/EditedByCell.tsx uncovered
packages/sanity/src/core/components/previews/general/CompactPreview.css.ts covered packages/sanity/src/core/components/previews/general/__tests__/DocumentPreviews.stories.tsx
packages/sanity/src/core/components/previews/general/CompactPreview.tsx covered packages/sanity/src/core/components/previews/general/__tests__/DocumentPreviews.stories.tsx
packages/sanity/src/core/components/previews/portableText/BlockPreview.css.ts pending #15005 packages/sanity/src/core/components/previews/portableText/__tests__/PortableTextPreviews.stories.tsx
packages/sanity/src/core/components/previews/portableText/BlockPreview.tsx pending #15005 packages/sanity/src/core/components/previews/portableText/__tests__/PortableTextPreviews.stories.tsx
packages/sanity/src/core/components/progress/LinearProgress.css.ts uncovered
packages/sanity/src/core/components/progress/LinearProgress.tsx uncovered
packages/sanity/src/core/components/resizer/Resizable.css.ts uncovered
packages/sanity/src/core/components/resizer/Resizable.tsx uncovered
packages/sanity/src/core/components/textWithTone/TextWithTone.css.ts pending #14539 packages/sanity/src/core/components/previewCard/__tests__/PreviewCard.stories.tsx
#14539 packages/sanity/src/core/components/textWithTone/__tests__/TextWithTone.stories.tsx
packages/sanity/src/core/components/textWithTone/TextWithTone.tsx pending #14539 packages/sanity/src/core/components/previewCard/__tests__/PreviewCard.stories.tsx
#14539 packages/sanity/src/core/components/textWithTone/__tests__/TextWithTone.stories.tsx
packages/sanity/src/core/config/createDefaultIcon.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/components/formField/FormFieldStatus.css.ts uncovered
packages/sanity/src/core/form/components/formField/FormFieldStatus.tsx uncovered
packages/sanity/src/core/form/inputs/CrossDatasetReferenceInput/ReferenceAutocomplete.css.ts uncovered
packages/sanity/src/core/form/inputs/CrossDatasetReferenceInput/ReferenceAutocomplete.tsx uncovered
packages/sanity/src/core/form/inputs/GlobalDocumentReferenceInput/ReferenceAutocomplete.css.ts uncovered
packages/sanity/src/core/form/inputs/GlobalDocumentReferenceInput/ReferenceAutocomplete.tsx uncovered
packages/sanity/src/core/form/inputs/PortableText/_common/StyledChangeIndicatorWithProvidedFullPath.css.ts uncovered
packages/sanity/src/core/form/inputs/PortableText/_common/StyledChangeIndicatorWithProvidedFullPath.tsx uncovered
packages/sanity/src/core/form/inputs/PortableText/object/modals/PopoverModal.styles.css.ts uncovered
packages/sanity/src/core/form/inputs/PortableText/object/modals/PopoverModal.styles.tsx uncovered
packages/sanity/src/core/form/inputs/PortableText/text/Decorator.css.ts uncovered
packages/sanity/src/core/form/inputs/PortableText/text/Decorator.tsx uncovered
packages/sanity/src/core/form/inputs/PortableText/toolbar/BlockStyleSelect.css.ts uncovered
packages/sanity/src/core/form/inputs/PortableText/toolbar/BlockStyleSelect.tsx uncovered
packages/sanity/src/core/form/inputs/PortableText/toolbar/Toolbar.css.ts covered packages/sanity/src/core/form/inputs/PortableText/__tests__/EditorChrome.stories.tsx
packages/sanity/src/core/form/inputs/PortableText/toolbar/Toolbar.tsx covered packages/sanity/src/core/form/inputs/PortableText/__tests__/EditorChrome.stories.tsx
packages/sanity/src/core/form/inputs/ReferenceInput/ReferenceAutocomplete.css.ts uncovered
packages/sanity/src/core/form/inputs/ReferenceInput/ReferenceAutocomplete.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/StudioNavbar.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/StudioNavbar.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/navDrawer/NavDrawer.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/navDrawer/NavDrawer.tsx uncovered
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/resources/ResourcesButton.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/resources/ResourcesButton.tsx uncovered
packages/sanity/src/core/studio/components/navbar/resources/StudioInfoDialog.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/resources/StudioInfoDialog.tsx uncovered
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/SearchHeader.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/search/components/SearchHeader.tsx uncovered
packages/sanity/src/core/studio/components/navbar/search/components/common/FilterLabel.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/search/components/common/FilterLabel.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/asset/preview/ImageReferencePreview.css.ts uncovered
packages/sanity/src/core/studio/components/navbar/search/components/filters/filter/inputs/asset/preview/ImageReferencePreview.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/components/navbar/workspace/WorkspacePreview.css.ts covered packages/sanity/src/core/studio/components/navbar/workspace/__tests__/WorkspacePreview.stories.tsx
packages/sanity/src/core/studio/components/navbar/workspace/WorkspaceAuth/__tests__/WorkspaceAuthLayout.stories.tsx
packages/sanity/src/core/studio/components/navbar/workspace/WorkspacePreview.tsx covered packages/sanity/src/core/studio/components/navbar/workspace/__tests__/WorkspacePreview.stories.tsx
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
packages/sanity/src/structure/components/incomingReferencesDecoration/shared.css.ts uncovered
packages/sanity/src/structure/components/incomingReferencesDecoration/shared.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.79% 40018 / 80358
🔵 Statements 44.99% 53242 / 118335
🔵 Functions 45.06% 8141 / 18065
🔵 Branches 40.01% 30777 / 76910
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
packages/sanity/src/core/form/components/formField/FormFieldStatus.css.ts 0% 0% 0% 0%
packages/sanity/src/core/form/components/formField/FormFieldStatus.tsx 88.88% 50% 100% 100% 14-17
packages/sanity/src/core/form/inputs/CrossDatasetReferenceInput/ReferenceAutocomplete.css.ts 0% 0% 0% 0%
packages/sanity/src/core/form/inputs/CrossDatasetReferenceInput/ReferenceAutocomplete.tsx 88.88% 95.65% 100% 100% 25-81
packages/sanity/src/core/form/inputs/GlobalDocumentReferenceInput/ReferenceAutocomplete.css.ts 0% 0% 0% 0%
packages/sanity/src/core/form/inputs/GlobalDocumentReferenceInput/ReferenceAutocomplete.tsx 88.88% 82.6% 100% 100% 32-88
packages/sanity/src/core/form/inputs/PortableText/_common/StyledChangeIndicatorWithProvidedFullPath.css.ts 0% 0% 0% 0%
packages/sanity/src/core/form/inputs/PortableText/_common/StyledChangeIndicatorWithProvidedFullPath.tsx 0% 0% 0% 0% 10-11
packages/sanity/src/core/form/inputs/PortableText/object/modals/PopoverModal.styles.css.ts 0% 0% 0% 0%
packages/sanity/src/core/form/inputs/PortableText/object/modals/PopoverModal.styles.tsx 90% 80% 100% 100% 10-22
packages/sanity/src/core/form/inputs/PortableText/text/Decorator.css.ts 0% 0% 0% 0%
packages/sanity/src/core/form/inputs/PortableText/text/Decorator.tsx 43.85% 25% 16.66% 53.12% 19-23, 40, 47-49, 66-72, 22-76
packages/sanity/src/core/form/inputs/PortableText/toolbar/BlockStyleSelect.css.ts 0% 0% 0% 0%
packages/sanity/src/core/form/inputs/PortableText/toolbar/BlockStyleSelect.tsx 13.28% 0% 0% 23.61% 46-53, 56, 68-192, 88-93, 102-106
packages/sanity/src/core/form/inputs/PortableText/toolbar/Toolbar.css.ts 0% 0% 0% 0%
packages/sanity/src/core/form/inputs/PortableText/toolbar/Toolbar.tsx 3.97% 1.66% 0% 5.15% 66-81, 176-263
packages/sanity/src/core/form/inputs/ReferenceInput/ReferenceAutocomplete.css.ts 0% 0% 0% 0%
packages/sanity/src/core/form/inputs/ReferenceInput/ReferenceAutocomplete.tsx 91.66% 90% 100% 100% 49-112
Generated in workflow #71964 for commit e6e61f3 by the Vitest Coverage Report Action

@stipsan
stipsan added this pull request to stack #14991 September 25, 2026 07:47
@cursor
cursor Bot force-pushed the cody/ve-lite2-09-portable-text-references-0ee6 branch from 9dd365c to 6813d50 Compare September 25, 2026 08:07
Copilot AI balanced review requested due to automatic review settings September 25, 2026 08:15
@cursor
cursor Bot force-pushed the cody/ve-lite2-09-portable-text-references-0ee6 branch from 6813d50 to e37b30b Compare September 25, 2026 08:15

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

🟡 Changes recommended

Decorator theme resolution no longer follows a nested theme where custom components mount renderDefault().

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 1 Medium severity

Open (1)
What changed in this PR

Migrates form and Portable Text components from styled-components to vanilla-extract while preserving existing UI behavior.

Changes:

  • Extracts toolbar, autocomplete, modal, decorator, indicator, and field-status styles.
  • Replaces styled wrappers with class-based components.
  • Adds theme support to decorator tests.
File Description
ReferenceInput/​ReferenceAutocomplete.tsx Applies extracted autocomplete styles.
ReferenceInput/​ReferenceAutocomplete.css.ts Defines popover and text styles.
PortableText/​toolbar/​Toolbar.tsx Replaces styled toolbar wrappers.
PortableText/​toolbar/​Toolbar.css.ts Defines toolbar layout styles.
PortableText/​toolbar/​BlockStyleSelect.tsx Applies the extracted menu-item class.
PortableText/​toolbar/​BlockStyleSelect.css.ts Styles selected blockquote options.
PortableText/​text/​Decorator.tsx Uses theme-based style variants.
PortableText/​text/​Decorator.test.tsx Adds the required theme provider.
PortableText/​text/​Decorator.css.ts Defines dark and light code-mark variants.
PortableText/​object/​modals/​PopoverModal.styles.tsx Adds class-merging wrapper components.
PortableText/​object/​modals/​PopoverModal.styles.ts Removes styled-components wrappers.
PortableText/​object/​modals/​PopoverModal.styles.css.ts Defines modal layout and overflow styles.
PortableText/​_common/​StyledChangeIndicatorWithProvidedFullPath.tsx Replaces the styled indicator wrapper.
PortableText/​_common/​StyledChangeIndicatorWithProvidedFullPath.css.ts Defines change-indicator sizing.
GlobalDocumentReferenceInput/​ReferenceAutocomplete.tsx Applies extracted autocomplete styles.
GlobalDocumentReferenceInput/​ReferenceAutocomplete.css.ts Defines autocomplete styles.
CrossDatasetReferenceInput/​ReferenceAutocomplete.tsx Applies extracted autocomplete styles.
CrossDatasetReferenceInput/​ReferenceAutocomplete.css.ts Defines autocomplete styles.
formField/​FormFieldStatus.tsx Replaces the styled root element.
formField/​FormFieldStatus.css.ts Defines status layout variants.

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread packages/sanity/src/core/form/inputs/PortableText/text/Decorator.tsx Outdated

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

🟡 Changes recommended

The new nested-theme decorator behavior lacks an effective regression test.

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 1 Low severity

Open (1)

Comment thread packages/sanity/src/core/form/inputs/PortableText/text/Decorator.test.tsx Outdated
…ce autocomplete to vanilla-extract

Layer 9/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 styling behavior, with regression coverage for the scheme-sensitive change.

Review effort: Balanced
Findings: None

This branch was successfully deployed

7 active deployments
Preview – test-studio — e6e61f3b Deployed Sep 25, 2026 by vercel[bot]
Preview – studio-storybook — e6e61f3b Deployed Sep 25, 2026 by vercel[bot]
Preview – page-building-studio — e6e61f3b Deployed Sep 25, 2026 by vercel[bot]
Preview – studio-radar — e6e61f3b Deployed Sep 25, 2026 by vercel[bot]
Preview – studio-diagnostics — e6e61f3b Deployed Sep 25, 2026 by vercel[bot]
Preview – auth-test-studio — e6e61f3b Deployed Sep 25, 2026 by vercel[bot]
Preview – test-studio-preview-iframe — e6e61f3b 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