Skip to content

fix(deps): update dependency @uiw/react-codemirror to ^4.25.11 - #1540

Merged
squiggler-app[bot] merged 2 commits into
mainfrom
renovate/uiw-react-codemirror-4.x
Jul 13, 2026
Merged

squiggler-app[bot] merged 2 commits into
mainfrom
renovate/uiw-react-codemirror-4.x

Conversation

@squiggler-app

@squiggler-app squiggler-app Bot commented Jul 13, 2026 •

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
@uiw/react-codemirror (source) ^4.25.10 → ^4.25.11 age confidence

Release Notes

uiwjs/react-codemirror (@​uiw/react-codemirror)

v4.25.11

Compare Source

Buy me a coffee

Documentation v4.25.11: https://raw.githack.com/uiwjs/react-codemirror/22c79da/index.html
Comparing Changes: uiwjs/react-codemirror@v4.25.10...v4.25.11

npm i @​uiw/react-codemirror@4.25.11

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • "before 3am on Monday"
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate using a curated preset maintained by Sanity. View repository job log here


Note

Low Risk
Dependency-only patch with no plugin code changes; upstream fix is a targeted memory-leak patch in the React CodeMirror wrapper.

Overview
Bumps @uiw/react-codemirror from ^4.25.10 to ^4.25.11 in @sanity/code-input, with matching pnpm-lock.yaml resolution (including @uiw/codemirror-extensions-basic-setup@4.25.11). A changeset records a patch release for the plugin.

There are no application source changes—only dependency and lockfile updates. Upstream 4.25.11 includes a fix for a memory leak when default themes are recreated; reviewers may want a quick smoke test of the Studio code field editor.

Reviewed by Cursor Bugbot for commit b945a35. Bugbot is set up for automated code reviews on this repo. Configure here.

@vercel

vercel Bot commented Jul 13, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
plugins-studio Ready Ready Preview, Comment Jul 13, 2026 12:25am

Request Review

@squiggler-app
squiggler-app Bot requested a review from a team as a code owner July 13, 2026 00:09
@squiggler-app
squiggler-app Bot requested review from juice49 and removed request for a team July 13, 2026 00:09
@squiggler-app
squiggler-app Bot enabled auto-merge (squash) July 13, 2026 00:09
@changeset-bot

changeset-bot Bot commented Jul 13, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: b945a35

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@sanity/code-input Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@socket-security

socket-security Bot commented Jul 13, 2026 •

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​uiw/​react-codemirror@​4.25.1110010010093100

View full report

stipsan
stipsan previously approved these changes Jul 13, 2026
@squiggler-app
squiggler-app Bot force-pushed the renovate/uiw-react-codemirror-4.x branch from 7107ae7 to 5522ff9 Compare July 13, 2026 00:25
@squiggler-app
squiggler-app Bot merged commit 724f04e into main Jul 13, 2026
12 checks passed
@squiggler-app
squiggler-app Bot deleted the renovate/uiw-react-codemirror-4.x branch July 13, 2026 00:32
@squiggler-app squiggler-app Bot mentioned this pull request Jul 13, 2026
cursor Bot pushed a commit that referenced this pull request Jul 28, 2026
Replace styled-components and inline style objects with colocated
vanilla-extract stylesheets, using assignInlineVars for dynamic
theme/color values. Builds on the function-component + useDrag
refactor from the ban-react-class-components branch.

fix: address review feedback on drag attach timing and imperative handle

- useDrag: attach the mousedown listener in useLayoutEffect so it exists
  before paint (matches the previous synchronous JSX onMouseDown wiring).
- OrderableDocumentList: give useImperativeHandle a dependency list so a
  new handle object is not installed on every render (the structure pane
  stores the handle in state, so per-render handles could loop).

refactor(color-input): extract shared useDrag hook for picker surfaces

Replace the per-component propsRef/AbortController plumbing in
Alpha/Hue/Saturation/EditableInput with a single useDrag hook. It wires a
native mousedown listener via useEffect and keeps callbacks fresh with
useEffectEvent, so drag events always read the latest props. mousemove and
mouseup listeners attach per-gesture and abort on mouseup or unmount.

fix(color-input): address review feedback on drag listeners

- Keep latest props in a ref so window mousemove listeners registered on
  mousedown see current values (matches class `this.props` behavior).
- Normalize EditableInput value comparisons to avoid number/string mismatch.
- Correct orderable-document-list changeset wording (ref-as-prop, not forwardRef).

Merge origin/main into cursor/ban-react-class-components-ca2a

Resolve color-input conflicts from #1673 (simplify components, remove
CustomPicker HOC). Main kept Alpha/Hue/Saturation/EditableInput as class
components pending a follow-up conversion; this PR is that follow-up:
- Accept ColorWrap.tsx deletion (HOC replaced by ColorInput state).
- Re-apply function-component conversions on top of main's AbortController
  listener cleanup, using useRef instead of createRef.

fix(color-input): simplify components, remove HOC (#1673)
Version Packages (#1668)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1671)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Migrate sanity-plugin-workflow styling to vanilla-extract (#1450)

* Migrate sanity-plugin-workflow styling to vanilla-extract

* Keep styled-components catalog:devDependency for peer alignment

After the vanilla-extract migration, the peer can go, but the catalog
devDependency must remain so pnpm resolves the workspace
@sanity/styled-components override (same as google-maps-input).

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Merge origin/main into cursor/ban-react-class-components-ca2a

Resolve the modify/delete conflict on .oxlintrc.json: main moved shared
lint rules into @sanity/plugin-kit/oxlint (#1565). Accept the deletion
and port the Component/PureComponent/createRef bans into
packages/@sanity/plugin-kit/src/oxlint.ts alongside the existing
createElement/forwardRef restrictions.

Also rewrite OrderableDocumentList to use React 19 ref-as-prop instead
of forwardRef so it complies with main's forwardRef ban, and update
skill docs that still pointed at .oxlintrc.json.

ci: request workflows permission for typegen app token (#935)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Cody Olsen <81981+stipsan@users.noreply.github.com>
feat(@sanity/plugin-kit)!: remove Studio v2 upgrade and compatibility tooling (#1588)

* feat(@sanity/plugin-kit)!: remove Studio v2 upgrade and compatibility tooling

Drop verify-studio and all verify-package checks that existed to migrate from
or stay compatible with Sanity Studio v2 (incompatible-plugin shim, part:/config:
imports, merged @sanity/* packages, sanity.json parts validation). Package
verification now focuses on current plugin-kit conventions.

* chore(@sanity/plugin-kit): drop unused json5/knip ignores and refresh snapshots

Remove the json5 dependency and readJson5File helper that only served v2
sanity.json parsing, prune stale eslint knip ignoreDependencies, and update
verify-package snapshots after removing v2-upgrade checks.

* fix(@sanity/plugin-kit): address review feedback on path validation and studio detection

Drop the dist-hardcoded path existence check in getPackage entirely: compiled
entry points legitimately don't exist pre-build regardless of outDir, and
verify-package's esmOnly check already bans main/module fields. Also detect
sanity.cli.(js|ts) in findStudioConfig so init/inject refuse cli-config-only
studio directories too.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
chore(deps): dedupe pnpm-lock.yaml (#1669)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(sanity-plugin-markdown): declare @sanity/client as a regular dependency (#1667)

* fix(sanity-plugin-markdown): declare @sanity/client and rxjs as regular deps

Move @sanity/client and rxjs out of inlinedDependencies into dependencies
so they are resolved at runtime instead of bundled into the package.

* chore: update lockfile for sanity-plugin-markdown deps

* fix(sanity-plugin-markdown): declare @sanity/client as a regular dependency

Move @sanity/client from devDependencies to dependencies so tsdown
externalizes it instead of writing it (and transitive rxjs) to
inlinedDependencies. rxjs is not imported by the plugin and is not
needed as a direct dependency once client is externalized.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
fix(typegen): 🤖 ✨ (#1666)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @tanstack/react-virtual to ^3.14.7 (#1664)

* fix(deps): update dependency @tanstack/react-virtual to ^3.14.7

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1665)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Version Packages (#1663)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
feat: add @sanity/block-insert-picker (#1601)

* feat(block-insert-picker): add @sanity/block-insert-picker

Slash-command block-insert picker and markdown input rules for Portable
Text fields, extracted from the sanity-io/www-sanity-io docs Studio
(apps/studio/src/plugins/pte, PR #4003 there parameterized the docs
knowledge out in preparation).

Public API: blockInsertPicker({arrayTypeName, items?, inputRules?,
onItemInserted?}) returning the component for an array type's
components.portableText.plugins, plus the codeFenceRule/blockquoteRule
config factories and fence-language helpers. Items derive from the host
array's members with metadata-driven curation (triggers, keywords,
grouping, rank); inserts resolve member initial values, land as one
undo step, and open for editing.

Ported against sanity 6.5.0 / @portabletext/editor 7.10.7 /
@portabletext/plugin-input-rule 6.0.4 (peer editor ^7.10.7 to match the
input-rule plugin's requirement; editor stays a peer, never bundled).
112 tests ported with the source; test-studio example wired under
Home > Block Insert Picker.

* refactor(block-insert-picker): zero-config detection and reviewed v1 API

Applies the pre-publication design review (DESIGN-REVIEW.md in the
pte-plugin-extraction research):

- blockInsertPicker() now works with zero config: the containing array and
  its members are detected via PortableTextMemberSchemaTypesContext
  (quarantined in memberSchemaTypes.ts); arrayTypeName becomes an escape
  hatch. Peer narrowed to sanity ^5.6 (the context export's floor).
- Text blocks are excluded by resolved type chain, fixing aliased
  {name, type: 'block'} members being offered as object inserts (picker and
  input-rule allow-list both).
- New options: labels (translatable chrome), shortcut, openOnInsert
  (global + per-item), presets (well-known-type triggers/keywords),
  filter (receives the bare query in both modes), resolveItems middleware
  with custom item actions (query cleanup included); onItemInserted renamed
  onInsert, events carry mode/query.
- Presentation matches core: icon fallback chain, upperFirst titles, and
  curated descriptions now win over schema descriptions.
- New exports: BlockInsertPicker, MarkdownInputRules, derivePickerItems,
  filterPickerItems, standardBlockPresets, wellKnownInputRules, PickerMode.
- Input rules resolve blockType through member type chains, so
  wellKnownInputRules serves aliased code-input members.
- Review fixes: host-callback errors surface as toasts instead of unhandled
  rejections; anchor-deletion mid-insert shows a warning toast; positional
  row indices tolerate duplicate item ids; replacement-pattern-safe label
  formatting; screen-reader position announcement is translatable.

Deliberate deviations from the review doc: presets carry no description
(avoids a three-way precedence chain).

* test(block-insert-picker): lift cold-start timeout on first picker popover test

* docs: add @sanity/block-insert-picker to Current Plugins table

* chore: trigger pkg.pr.new preview publish

* refactor(block-insert-picker): address Copilot review comments

- insertPickerItem: spread the resolved initialValue before `_key`/`_type`
  so the generated key and target type always win. Sanity's initial-value
  resolver sets `_type` on object values; the values coincide by
  construction here, but ordering keeps the insert correct regardless.
- openBlockOnInsert: correct the stale rationale comment. The package
  enables the React Compiler, so the old "not active" claim was wrong; the
  point is the empty-dep useCallback keeps a stable reference for consumers.
- blockInsertPicker: fix the comment naming the wrong mouse events. Rows
  select via onClick and highlight via onMouseMove (not onMouseDown /
  onMouseEnter), passing an explicit idx to avoid a not-yet-flushed
  highlightedIndex.

* fix(block-insert-picker): case-insensitive fence language table match; trim README install

- normalizeFenceLanguage now compares the typed token to language-table
  `value`/`aliases` case-insensitively, returning the canonical value
  (casing preserved). Previously a table with mixed-case entries never
  matched and the mapped filename was skipped (Cursor Bugbot, low severity).
  Built-in rules and code-input's lowercase table were unaffected; this
  hardens host-supplied custom tables. Adds a mixed-case-table test.
- README: collapse the three install commands to a single `npm install`
  (no --save), matching @sanity/code-input's install section.

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix(block-insert-picker): restore bracket notation for process.env access

The Copilot Autofix commit rewrote `process.env['NODE_ENV']` to dot
notation, which fails this repo's type-aware lint: `noPropertyAccessFrom
IndexSignature` (TS4111) requires index-signature properties like
`process.env.NODE_ENV` to be accessed with brackets. Restore the bracket
form so `pnpm lint` passes.

* fix(block-insert-picker): address Cursor Bugbot findings

- inputRules: preserve case for unknown fence tokens (`return token`, not the
  lowercased form) so the "pass through as typed" contract holds — e.g.
  `GraphQL` stays `GraphQL` for wellKnownInputRules' no-table path.
- inputRules: spread host `buildValue` before `_key`/`_type` in createInsertRule
  so a stray `_key`/`_type` can't hijack block identity (mirrors the
  insertPickerItem fix).
- blockInsertPicker: close the picker when a select bails on an in-flight
  insert, so a menu reopened during a slow initial-value resolution can't get
  stuck swallowing Enter.
- blockInsertPicker: key sections on the namespaced raw group instead of the
  display label, so a curated group named like `ungroupedSection` can't collide
  with the null-group section's React key.

Two other Bugbot findings need no change: the text-block exclusion
(`isTextBlockMember`) already mirrors Sanity's own `findBlockType` (walk the
type chain to root, match `name === 'block'`), and the initial-value spread in
insertPickerItem was already reordered in an earlier commit.

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
feat(code-input): export SUPPORTED_LANGUAGES and LANGUAGE_ALIASES (#1600)

Downstream tooling that resolves external language tokens (markdown
fence infostrings, paste/import pipelines) onto code field values has
had to vendor this list and hand-sync it with the Language selector.
Exporting the canonical table (and the alias map) removes the drift.
Version Packages (#1662)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(changeset): note npm provenance re-enabled for sanity-plugin-utils (#1661)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Version Packages (#1660)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(changeset): bump google maps input for css dts cleanup (#1659)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1658)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/client to ^7.24.0 (#1581)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): lock file maintenance (#1657)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Version Packages (#1640)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(test-studio): use turbo transit for build cache invalidation (#1655)

Replace empty dependsOn with a transit node so sanity build still skips
workspace package builds while Turbo invalidates when dependency source changes.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
chore(deps): bump pkg-utils, tsdown-config, and vanilla-extract plugins (#1656)

Update catalog entries to @sanity/pkg-utils ^11.0.13,
@sanity/tsdown-config ^0.19.6, and @sanity/vanilla-extract-vite-plugin
^0.2.5. Exclude lightningcss@1.33.0 (and platform packages) from
minimumReleaseAge so pnpm update/dedupe can resolve the new transitive
deps, and align turbo/generators tsdown with the workspace catalog.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
chore(deps): dedupe pnpm-lock.yaml (#1653)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore: remove @typescript/native-preview (use TypeScript 7 native tsc) (#1650)

* chore: remove @typescript/native-preview now that TypeScript 7 ships native tsc

TypeScript 7.0.2 includes the native compiler as `tsc`, so the preview package
and its `tsgo` binary are no longer needed. VS Code settings now point the
TypeScript 7 extension at the workspace `typescript` install.

* Update settings.json

* Update settings.json

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
chore(deps): lock file maintenance (#1651)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(test-studio): stop waiting on dependency builds (#1652)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Delete dependencies-GH-1642.md
Migrate to date-fns v4 and official @date-fns/tz, matching sanity core (#1569)
chore(deps): dedupe pnpm-lock.yaml (#1649)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/pkg-utils to ^11.0.12 (#1647)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1645)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update renovatebot/github-action action to v46.1.20 (#1646)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): bump @sanity/vanilla-extract-vite-plugin to ^0.2.4

Drop the Bynder Styles.css.js Vite workaround from the test studio —
0.2.4 keeps the compiler alive under unstable_bundledDev, so plain
*.css.js modules no longer hang processVanillaFile.

fix(deps): update dependency tsdown to ^0.22.12 (#1642)
fix(deps): update dependency styled-components to ^6.4.4 (#1566)
chore(deps): dedupe pnpm-lock.yaml (#1643)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency react-virtuoso to ^4.18.11 (#1641)

* fix(deps): update dependency react-virtuoso to ^4.18.11

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
docs(agents): catalog shared deps + enable pnpm catalogMode prefer (#1374)
chore(deps): dedupe pnpm-lock.yaml (#1637)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency react-hook-form to ^7.82.0 (#1639)

* fix(deps): update dependency react-hook-form to ^7.82.0

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update davelosert/vitest-coverage-report-action action to v2.12.2 (#1638)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Version Packages (#1612)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
ci: shard Vitest suite (#1584)

* ci: shard vitest suite

* ci: report sharded test coverage

* chore: ignore Vitest blob reports

* ci: require test shards to succeed in aggregate check

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
fix(typegen): 🤖 ✨ (#1634)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(format): 🤖 ✨ (#1633)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1632)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency tsdown to ^0.22.9 (#1622)

* fix(deps): update dependency tsdown to ^0.22.9

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
fix(assist): keep field group selection while editing AI Assist inputs (#1467)

* fix(assist): keep field group selection while editing AI Assist inputs

The AI Assist instruction inspector renders a nested document form that
reused the host document's pane router. Sanity's document pane mirrors the
router `path` param to programmatic focus, and focus drives the selected
field group. Navigating the instruction form therefore overwrote the host
`path`, re-focused the host document, and reset its field group tab.

Isolate the nested pane's `path` navigation in local state while still
forwarding other params (e.g. selected instruction) to the host router.

Co-authored-by: Cody Olsen <stipsan@users.noreply.github.com>

* test(test-studio): add AI Assist + field groups fixture (SAPP-3970)

Adds an 'AI Assist: Field groups' document type with Content/SEO field
group tabs so the field-group-reset behavior with AI Assist can be
manually reproduced and verified.

Co-authored-by: Cody Olsen <stipsan@users.noreply.github.com>

* refactor(assist): use react-fast-compare for param equality

Addresses PR review: the hand-rolled shallowEqualParams returned a false
positive when two param objects had the same key count but different keys
whose values were undefined (e.g. {foo: undefined} vs {bar: undefined}),
because it never verified the key existed on the other object. Reuse
react-fast-compare (already a plugin dependency, used in _lib/useListeningQuery)
instead of a custom check, and add a regression test.

Co-authored-by: Cody Olsen <stipsan@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Cody Olsen <stipsan@users.noreply.github.com>
fix(bynder-input): restore Compact View modal visibility in Studio v6 (#1553)

* fix(bynder-input): restore Compact View modal visibility in Studio v6

Upgrade @bynder/compact-view from 5.1.2 to 5.4.0 and patch its shadow DOM
integration for Sanity Studio v6:

- disableCSSOMInjection on StyleSheetManager so styled-components injects
  CSS into the shadow root instead of leaving empty style tags
- position:fixed + z-index on CompactViewContainer so the portal host
  stacks above Studio UI layers
- widen React peer dependency range to support React 19

Also render BynderModalLayout outside the button flex row.

* fix: unmount bynder layout when not open

* fix(bynder-input): take @bynder/compact-view 5.4.0 as a regular pinned dependency

Implements review feedback on the patch-based approach:
- drop the pnpm patch and the bundling of @bynder/compact-view; pin it
  as a regular dependency instead
- style the Compact View modal host from the plugin with a
  vanilla-extract globalStyle instead of patching Modal.js
- document how to allow the stale react peer range (npm
  --legacy-peer-deps, pnpm peerDependencyRules.allowedVersions) in the
  README, and use the pnpm rule for the workspace itself

* fix(bynder-input): survive Compact View shadow-root re-attachment and fix dev-studio css.js crash

- append a <slot> fallback to Compact View's shadow root while the modal
  is mounted: its attachShadow effect has no cleanup, so when React
  reconnects passive effects on the same host (StrictMode, Activity),
  the second attachShadow() throws and Compact View falls back to the
  host's light DOM, which the slotless shadow tree kept invisible
- work around @bynder/compact-view's Styles.css.js (a plain JS module
  whose name matches vanilla-extract's cssFileFilter and deadlocks the
  compiler under sanity dev's bundled dev mode) in the test studio
- move the container globalStyle to BynderInput.css.ts so it loads with
  the input instead of the lazy modal chunk

* chore(bynder-input): bump changeset to major

Taking @bynder/compact-view as an unbundled regular dependency with a
stale react peer range can fail npm installs without --legacy-peer-deps,
so it's a breaking change.

* chore(bynder-input): widen @bynder/compact-view to ^5.4.0

The exact pin was only needed while the package was patched and
inlined; as a plain regular dependency a caret range is fine.

* chore: merge main and regenerate lockfile

The PR lockfile was generated against a main where
@sanity/vanilla-extract-vite-plugin resolved to 0.2.1; main has since
bumped it to 0.2.2, and the git-merged lockfile on the PR merge ref was
internally inconsistent (ERR_PNPM_LOCKFILE_MISSING_DEPENDENCY in CI).

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Cody Olsen <stipsan@users.noreply.github.com>
fix(deps): update dependency @sanity/tsdown-config to ^0.19.3 (#1598)

* fix(deps): update dependency @sanity/tsdown-config to ^0.19.3

* chore: dedupe lockfile and add release-age excludes for tsdown transitive deps

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Co-authored-by: Cody Olsen <81981+stipsan@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1631)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/vanilla-extract-vite-plugin to ^0.2.2 (#1614)

* fix(deps): update dependency @sanity/vanilla-extract-vite-plugin to ^0.2.2

* chore(deps): exempt yuku-parser from minimum release age for dedupe

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Move turbo/**/*.hbs oxfmt ignore to root config (#1604)

The turbo generator template ignore is monorepo-specific and should
not ship in the shared @sanity/plugin-kit/oxfmt preset consumed by
standalone plugins.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
fix(deps): update dependency @sanity/pkg-utils to ^11.0.10 (#1630)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
docs(assist): fix README markdown formatting and document English-only image descriptions (#1628)

* fix(@sanity/assist): respect document language when generating image descriptions

Pass the configured translate.document.languageField as languagePath to the
generate-caption task (both the automatic generation triggered on image
change, and the manual 'Generate image description' field action), so
generated alt text/captions are written in the document's language instead
of always defaulting to English.

Fixes https://github.com/sanity-io/plugins/issues/1606

* docs(@sanity/assist): clarify caption generation language limitation

Testing against the live AI Assist backend confirms that the generate-caption
task currently always writes descriptions in English, regardless of the
languagePath sent from the client (this matches Sanity's own documentation,
which states the automatic image description feature is English-only today
and recommends the Transform Agent Action's image-description operation as a
workaround). Update the changeset and README to accurately describe the
change as forward-compatible plumbing rather than a full fix, and point users
at the documented workaround for non-English alt text today.

* refactor(assist): resolve languagePath inside useGenerateCaption

Compute languagePath from config.translate.document.languageField once
inside useGenerateCaption itself (via useAiAssistanceConfig), instead of
requiring every call site to read the config and thread it through as an
argument. This removes the duplicated config lookup from both
ImageContextProvider and generateCaptionsActions, and matches the cleaner
approach used in sanity-io/plugins#1627.

Also documents in translate/types.ts JSDoc that languageField is reused
for image description generation.

* docs(assist): fix README markdown formatting and add known limitations

The README relied on markdown block elements (headings, lists, code
fences, images) interrupting paragraphs without blank lines between
them. GitHub tolerates this, but stricter renderers (e.g. the plugin
listing on sanity.io) join everything into unreadable walls of text
with literal '### Heading' and '- list item' fragments inline.

- Separate all block elements with blank lines throughout
- Add a 'Known limitations' section documenting that image descriptions
  are always generated in English regardless of
  translate.document.languageField (backend limitation, see #1606),
  with Transform Agent Action and translate-after workarounds
- Fix broken links: empty-href heading, HOW-TO-USE pointing at the old
  standalone repo layout, LICENSE pointing at a non-existent file
- Fix broken bold markup in the 'Enabling the AI Assist API' steps and
  the useExampleFieldActions TOC anchor
- Add missing TOC entries (Known limitations, Caveats, Third party
  sub-processors)

Also reverts the languagePath client plumbing from this branch: the
backend ignores it, so the plugin change had no effect. This PR is now
docs-only.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
chore(deps): dedupe pnpm-lock.yaml (#1619)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update pnpm to v11.13.1 (#1624)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/pkg-utils to ^11.0.9 (#1625)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update turbo monorepo to v2.10.5 (#1626)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update dependency knip to ^6.27.0

chore: fix css

fix(deps): update dependency @codemirror/lang-markdown to ^6.5.1 (#1610)

* fix(deps): update dependency @codemirror/lang-markdown to ^6.5.1

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency oxfmt to ^0.59.0 (#1599)

* fix(deps): update dependency oxfmt to ^0.59.0

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/pkg-utils to ^11.0.7 (#1594)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Fix TypeGen workflow failure by pinning `@sanity/vanilla-extract-vite-plugin` to 0.1.1 (#1616)

* Initial plan

* fix(typegen): pin vanilla-extract vite plugin to 0.1.1

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
chore(deps): bump tsdown and vanilla-extract

fix(deps): update dependency oxlint to ^1.74.0 (#1603)

* fix(deps): update dependency oxlint to ^1.74.0

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update zizmorcore/zizmor-action action to v0.6.0 (#1609)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): lock file maintenance (#1611)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): replace @vanilla-extract/vite-plugin with @sanity/vanilla-extract-vite-plugin (#1590)

* chore(deps): replace @vanilla-extract/vite-plugin with @sanity/vanilla-extract-vite-plugin

Swap the vanilla-extract Vite plugin used by the test studio and
@sanity/google-maps-input's vitest config to @sanity/vanilla-extract-vite-plugin,
a Vite 8 rewrite with plugin hook filters and a caching compiler on Vite's
Environment API / ModuleRunner instead of the legacy vite-node. Bump tsdown to
^0.22.8 and @sanity/tsdown-config to ^0.17.0 alongside it.

google-maps-input's vitest.config.ts also needed a small stub plugin: its
dist/bundle.css.js Node/SSR shim matches the upstream cssFileFilter by
filename alone (*.css.js), which made the new plugin try to evaluate it as
real .css.ts source and throw ReferenceError: require is not defined via
ModuleRunner (vite-node tolerated this). The stub renames that module id away
from a .css.js shape before vanillaExtractPlugin() ever sees it.

Documented both the plugin swap and the shim workaround in the
sanity-plugin-best-practices skill and the new-plugin generator templates so
future vanilla-extract plugins get this for free.

* chore(deps): bump @sanity/tsdown-config to ^0.17.1, drop bundle.css.js shim workaround

@sanity/tsdown-config 0.17.1 (via @sanity/vanilla-extract-tsdown-plugin
0.2.1 / @sanity/vanilla-extract-rolldown-plugin 0.1.1) renames the
vanilla-extract Node/SSR compat shim from bundle.css.js to bundle-css.js so
it no longer matches vanillaExtractPlugin()'s cssFileFilter by filename
alone (sanity-io/pkg-utils#3043). That was the root cause of the
require-is-not-defined regression worked around in the previous commit, so
the stub-bundle-css-js-shim plugin is no longer needed.

Rebuilding @sanity/google-maps-input picked up the renamed dist/bundle-css.js
shim and auto-rewrote its package.json ./bundle.css export map (adding a
types condition too). Reverted the vitest.config.ts workaround and the
matching documentation/generator-template changes back to the plain
vanillaExtractPlugin() registration, now noted as a historical gotcha
instead of a live workaround.

* docs(test-studio): note that unstable_bundledDev breaks .css.ts HMR

Document the trade-off discovered while testing the vanilla-extract Vite
plugin swap: with unstable_bundledDev: true, editing a .css.ts file doesn't
hot-reload (a sanity dev restart is required), while plain .ts/.tsx HMR is
unaffected. Comment out the line for a session if fast CSS HMR is needed
(confirmed sub-10ms with it unset).

* docs(styling skill): trim verbose vanilla-extract setup section

The ./bundle.css export map (and its dist/bundle-css.js shim/types) is
generated and kept in sync automatically by @sanity/tsdown-config's
vanillaExtract option, so it doesn't need explaining or a JSON example to
copy. Simplify the vitest.config.ts guidance to why (@sanity/vanilla-extract-
vite-plugin is faster than upstream) without the ModuleRunner/hook-filter/
sanity-build internals. Drop the sanity.cli.ts snippet, since the test studio
already registers the plugin globally in this repo and doesn't need to be
touched per-plugin. Drop the bundle.css.js->bundle-css.js rename history
note, a one-off gotcha now fixed upstream rather than evergreen guidance.

* chore(deps): bump @sanity/tsdown-config to ^0.17.2, @sanity/vanilla-extract-vite-plugin to ^0.1.1

Both are latest-available patch releases (0.17.1 -> 0.17.2 pulls in
@sanity/vanilla-extract-tsdown-plugin 0.2.2 / @sanity/vanilla-extract-
rolldown-plugin 0.1.2; 0.1.0 -> 0.1.1 is the vite plugin's own patch).
tsdown stays at ^0.22.8, already the latest. Benchmarked in the next commit's
message to confirm this doesn't regress anything.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
fix(deps): update dependency @changesets/cli to ^2.31.1 (#1607)

* fix(deps): update dependency @changesets/cli to ^2.31.1

* chore(deps): exempt @changesets/cli and refresh lockfile with dedupe

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
chore(deps): update dependency @vitejs/devtools to ^0.4.1 (#1593)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Version Packages (#1591)
chore(deps): dedupe pnpm-lock.yaml (#1602)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(media): use useMediaIndex so Tags panel works on wide viewports (#1592)

The home-rolled useBreakpointIndex returned -1 above 1920px, which
force-hid the Tags panel. Switch Items to @sanity/ui's useMediaIndex,
which includes a min-width catch-all and matches Controls breakpoints.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
fix(deps): update dependency xstate to ^5.32.5 (#1597)

* fix(deps): update dependency xstate to ^5.32.5

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency tsdown to ^0.22.8 (#1596)

* fix(deps): update dependency tsdown to ^0.22.8

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/tsconfig to ^2.2.1 (#1595)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update actions/setup-node action to v7 (#1586)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update pnpm to v11 (#1579)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency nanoid to v6 (#1577)

* fix(deps): update dependency nanoid to v6

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency groq to ^6.5.0 (#1523)

* fix(deps): update dependency groq to ^6.5.0

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Migrate plugin-kit and the monorepo from prettier/eslint to oxfmt/oxlint (#1565)

* Migrate plugin-kit and monorepo formatting from prettier to oxfmt

- Ship the monorepo's oxfmt settings as a @sanity/plugin-kit/oxfmt preset
- Re-export the preset from the root oxfmt.config.ts (replaces .oxfmtrc.json)
- init/inject scaffold oxfmt (config, devDependency, format script) instead
  of prettier; --no-prettier is now --no-oxfmt
- verify-package: replace the duplicate-prettier-config check with a
  monorepo-aware oxfmt check that expects the config at the workspace root
  (or next to package.json outside monorepos) and flags leftover prettier
  configuration with migration instructions

* Migrate plugin-kit and monorepo linting from eslint to oxlint, drop tsc

- Ship the monorepo's oxlint settings as @sanity/plugin-kit/oxlint-config.json
  (type-aware rules, type checking via oxlint-tsgolint, warnings denied); the
  root .oxlintrc.json extends it and keeps only workspace-specific ignores and
  overrides
- init/inject scaffold oxlint (.oxlintrc.json, oxlint + oxlint-tsgolint
  devDependencies, lint script) instead of eslint; --no-eslint is now
  --no-oxlint, and the typescript flag now controls TypeScript scaffolding
  instead of piggybacking on the eslint flag
- verify-package: drop the tsc run (oxlint type-checks as part of linting) and
  the duplicate-eslint-config check; add a monorepo-aware oxlint config check
  with legacy eslint detection; the v2-imports check (eslintImports -> imports)
  now runs a bundled oxlint pass instead of the package's eslint
- pin typescript in dev/test-studio so the sanity peer keeps resolving to the
  catalog version now that plugin-kit no longer pulls eslint/typescript peers

* Pin oxlint imports-check output format so CI matches snapshots

oxlint auto-switches to GitHub annotations format on CI; --format=agent keeps
the compact per-diagnostic output (including help: messages) everywhere

* Ship the oxlint config as @sanity/plugin-kit/oxlint (oxlint.config.ts pattern)

Replaces the oxlint-config.json + .oxlintrc.json extends-by-file-path setup
with a TS config module, mirroring the oxfmt preset: the shared config is
authored in src/oxlint.ts (typed OxlintConfig, built to plain JS in dist), the
root and scaffolded configs are oxlint.config.ts files that re-export or extend
it via defineConfig({extends: [...]})

* Drop the Sanity v2 imports check from verify-package/verify-studio

v2-era imports are no longer linted for; with the bundled oxlint pass gone,
oxlint moves from a runtime dependency of plugin-kit to a dev/peer dependency
(it is only needed by consumers, which the scaffolding already installs)

* Address Bugbot review: opt-out scaffolds must verify, root legacy configs detected

- init/inject with --no-oxfmt/--no-oxlint now write the matching
  sanityPlugin.verifyPackage opt-outs, so the scaffolded build script
  (which runs verify-package) works out of the box
- the oxfmt/oxlint checks now also flag leftover prettier/eslint configs at
  the detected workspace root, not only next to the plugin's package.json

* Scaffold ESM semver-workflow configs so fresh presets pass oxlint

The preset's lint-staged.config.js and commitlint.config.js templates
still used module.exports, but scaffolded plugins are ESM
("type": "module") and the shared oxlint config bans CommonJS via
import/no-commonjs (the old .eslintignore that excluded these files is
gone). A fresh 'init --preset semver-workflow' failed 'oxlint' out of
the box; switch the templates to 'export default' and cover the preset
configs in the inject test.

* Validate package-local oxfmt/oxlint configs that override the workspace root

verify-package treated a valid workspace-root config as sufficient and only
looked at the plugin directory when the root check failed. But oxfmt/oxlint
discover nested configs, so a local oxfmt.config.ts / oxlint.config.ts
overrides the root for that package's files — verify could pass while the
package wasn't actually using the shared plugin-kit settings.

In a monorepo the validators now check the plugin directory first: when a
local config exists it must use the shared preset/config (the error notes it
overrides the root config), and only when no local config exists does the
workspace root config decide the result.

* Flag legacy prettier/eslintConfig keys in the workspace root package.json

The oxfmt/oxlint checks scanned the workspace root for leftover
prettier/eslint config files but only looked at the plugin's own
package.json for the prettier / eslintConfig keys. In monorepos those
keys often live in the root package.json, where they still configure
the whole workspace — verify-package now inspects the root manifest
too and reports them alongside the legacy config files.

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Move oxfmt, oxlint and oxlint-tsgolint to the pnpm catalog

plugin-kit's oxfmt/oxlint peers now reference the default catalog
(catalog:) rather than catalog:peer or explicit ranges: the shared
configs may rely on rules and features that ship in a new minor, so
the peer range must stay in lockstep with the version the monorepo
develops against.

* Mark oxfmt/oxlint as optional peer dependencies of plugin-kit

Unlike @sanity/pkg-utils (a hard requirement, checked unconditionally
by verify-package), the oxfmt/oxlint verify-package checks are
individually opt-outable via sanityPlugin.verifyPackage.oxfmt/oxlint:
false, and plugin-kit's own code only ever imports their types. So a
consumer can legitimately use plugin-kit without oxfmt or oxlint
installed; peerDependenciesMeta now reflects that.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
chore(deps): bump sanity to 6.5.0 and enable unstable_bundledDev (#1589)

* chore(deps): bump sanity to 6.5.0 and enable bundledDev

Align @sanity/client (7.23.2) and @sanity/eventsource (5.0.4) so
unstable_bundledDev can be enabled without EventSource2 crashes in Structure.

* chore(markdown): sync inlined @sanity/client to 7.23.2

* chore(deps): drop client/eventsource overrides after lockfile bump

Keep @sanity/client@7.23.2 and @sanity/eventsource@5.0.4 via the
lockfile after pnpm dedupe; remove the temporary overrides and markdown
changeset.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
chore(deps): dedupe pnpm-lock.yaml (#1585)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update dependency @vitejs/devtools to ^0.4.0 (#1578)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/pkg-utils to ^11.0.3 (#1582)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Remove redundant `dts` option from tsdown configs (#1567)

* Remove redundant dts option from tsdown configs

Since typescript v7 (tsgo) landed, tsdown enables dts generation
automatically (packages declare types, or the resolved tsconfig sets
declaration: true) and rolldown-plugin-dts picks the tsgo generator
whenever the installed typescript major is >= 7. The explicit
dts: {tsgo: true} / dts: true options are therefore no-ops.

Verified: dist output across all 50 packages is byte-identical
before/after this change.

Co-authored-by: Cody Olsen <stipsan@users.noreply.github.com>

* Mention tsconfig declaration fallback in AGENTS.md dts note

Not all packages declare a types field (@repo/generators,
@sanity/form-toolkit); for those, tsdown enables dts generation via
declaration: true inherited from the @sanity/tsconfig presets.

Co-authored-by: Cody Olsen <stipsan@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Cody Olsen <stipsan@users.noreply.github.com>
fix(deps): update dependency @sanity/tsdown-config to ^0.14.2 (#1583)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore: simplify, rely on default options

fix(deps): update build tooling dependencies (#1580)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Version Packages (#1572)
chore(deps): dedupe pnpm-lock.yaml (#1575)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @tanstack/react-virtual to ^3.14.6 (#1573)

* fix(deps): update dependency @tanstack/react-virtual to ^3.14.6

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/icons to ^5.1.0 (#1574)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update renovatebot/github-action action to v46.1.19 (#1570)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Prevent Renovate from rewriting pnpm `peer` catalog ranges (#1568)
fix(deps): update tsdown to ^0.22.7 and @sanity/tsdown-config to ^0.14.0 (#1571)
Version Packages (#1563)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Add pnpm `peer` catalog for peer dependency ranges (#1562)

Centralize all external peerDependencies ranges in a named `peer` catalog
in pnpm-workspace.yaml, referenced as `catalog:peer`. Conflicting ranges
resolve to the most-used one: react/react-dom `^19.2` and
styled-components `^6.1` (aligning sanity-plugin-media and
sanity-plugin-mux-input with what Sanity Studio v5+ already requires).

Peers on other workspace packages keep `workspace:^` (or an explicit
range in @sanity/sfcc) so changesets can keep tracking dependents.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Version Packages (#1558)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
feat: enable React Compiler for media and mux-input (#1560)

* feat: enable React Compiler for media, mux-input and debug-preview-url-secret-plugin

Enables the reactCompiler tsdown option for the last three plugins that
were still built without it. For sanity-plugin-media and
sanity-plugin-mux-input the react peer dependency is tightened to ^19.2
(matching every other plugin) since the compiled output imports
react/compiler-runtime, which requires React 19. Their sanity peer
(^5 || ^6.0.0-0) already mandates React 19.2, so no supported setup is
dropped.

* chore: don't enable React Compiler for debug-preview-url-secret-plugin

This plugin has no React components, so running the build through React
Compiler is a no-op (its dist output is byte-identical with or without
it). Drop the reactCompiler flag, the babel-plugin-react-compiler devDep,
and the changeset; keep the change limited to the two plugins that
actually ship components (media and mux-input).

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Handle TS7 `@typescript-eslint` config crashes in plugin-kit import validation (#1561)

* Initial plan

* fix(plugin-kit): fallback eslint import check for TS7 parser crash

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
fix(deps): update dependency typescript to v7 (#1531)

* fix(deps): update dependency typescript to v7

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
refactor: simplify how the PKG_VERSION is handled in mjux

Version Packages (#1556)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1557)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update sanity monorepo to ^6.4.0 (#1555)

Bumps the workspace catalog (@sanity/mutator, @sanity/schema, @sanity/util, @sanity/vision, sanity) and groq in sanity-plugin-media from ^6.3.0 to ^6.4.0.

- mux-input: replace the DocumentPreviewLink render-function workaround with IntentLink passed directly to PreviewCard's as prop, dropping the FIXME cast and the react-compiler lint suppression.
- orderable-document-list: keep using useDocumentVersionInfo (the useDocumentVersions replacement would need the unexported getDocumentVersionInfoFromVersions util) with an oxlint suppression for the new deprecation, and drop a ts-expect-error made obsolete by the 6.4.0 PreviewCard typings.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Version Packages (#1527)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
feat!: support TypeScript 7 in plugin-kit, require typescript 6.x || 7.x (#1554)

* feat!: support TypeScript 7, require typescript 6.x || 7.x in plugin-kit

* fix: scaffold typescript ^6 in plugin-kit init to avoid @typescript-eslint peer conflict

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
chore(deps): ts doesn't need to be a dep to plugin packages

fix(deps): update turbo monorepo to v2.10.4 (#1543)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1552)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/tsdown-config to ^0.13.1 (#1551)
fix(deps): update dependency vitest to ^4.1.10 (#1542)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @uiw/react-codemirror to ^4.25.11 (#1540)

* fix(deps): update dependency @uiw/react-codemirror to ^4.25.11

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/pkg-utils to ^11.0.1 (#1550)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1549)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update linters (#1548)

* fix(deps): update linters

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency get-it to ^9.1.0 (#1546)

* fix(deps): update dependency get-it to ^9.1.0

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency react-hook-form to ^7.81.0 (#1547)

* fix(deps): update dependency react-hook-form to ^7.81.0

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update dependency knip to ^6.26.0 (#1545)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update dependency @tsconfig/vite-react to ^8.1.1 (#1544)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency iso-639-1 to ^3.1.6 (#1541)

* fix(deps): update dependency iso-639-1 to ^3.1.6

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @uiw/codemirror-themes to ^4.25.11 (#1539)

* fix(deps): update dependency @uiw/codemirror-themes to ^4.25.11

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @types/node to ^24.13.3 (#1538)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @tanstack/react-virtual to ^3.14.5 (#1536)

* fix(deps): update dependency @tanstack/react-virtual to ^3.14.5

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1537)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @tanstack/react-query to ^5.101.2 (#1535)

* fix(deps): update dependency @tanstack/react-query to ^5.101.2

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update pnpm to v10.34.5 (#1533)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @portabletext/block-tools to ^5.1.11 (#1534)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1532)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency tsdown to ^0.22.4 (#1519)

* fix(deps): update dependency tsdown to ^0.22.5

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/tsdown-config to ^0.13.0 (#1529)
fix(deps): update dependency @vanilla-extract/vite-plugin to ^5.2.4 (#1517)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/pkg-utils to v11 (#1530)
fix(deps): update dependency react-virtuoso to ^4.18.10 (#1518)

* fix(deps): update dependency react-virtuoso to ^4.18.10

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update dependency knip to ^6.25.0 (#1520)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1526)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency react-icons to ^5.7.0 (#1486)

* fix(deps): update dependency react-icons to ^5.7.0

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/pkg-utils to ^10.9.1 (#1515)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1502)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Merge pull request #1524 from sanity-io/actions/format-main

chore(format): 🤖 ✨
fix(deps): update dependency @sanity/tsdown-config to ^0.12.0 (#1521)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency oxfmt to ^0.58.0 (#1522)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/ui to ^3.3.5 (#1516)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): update renovatebot/github-action action to v46.1.18 (#1505)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(typegen): 🤖 ✨ (#1511)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore: disable automatic issue triage (#1514)

* chore: disable automatic issue triage
Version Packages (#1504)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Merge pull request #1513 from sanity-io/cursor/orderable-intent-repro-1506-bf83

fix(orderable-document-list): scope canHandleIntent to list's own type (#1506)
test(test-studio): reframe issue #1506 repro as regression fixture

Now that canHandleIntent is scoped to the list's own type, update labels
and comments to describe regression verification rather than active repro.

chore: remove repro step, add fix

test(test-studio): add repro case for orderable-document-list issue #1506

Add dedicated schema types and structure section that mirrors the issue
report: a regular document list alongside an orderable list at the same
level. Creating a Page via the global create menu incorrectly routes into
the Team Members orderable list due to canHandleIntent claiming all types.

Includes REPRO.md with step-by-step verification instructions.

Add orderable document list readme (#1508)
fix(deps): update dependency react-rx to ^4.2.3 (#1493)

* fix(deps): update dependency react-rx to ^4.2.3

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @codemirror/view to ^6.43.5 (#1500)

* fix(deps): update codemirror

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Version Packages (#1496)
chore(deps): update linters (#1499)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(@sanity/assist): render instruction preview icons from @sanity/icons v5 (#1503)

The instruction schema's prepare() returns a rendered <Icon symbol> element
for instructions with a custom icon (since the icons v5 lazy-map migration),
but the preview component still rendered props.icon as a component, crashing
the instruction list with 'Element type is invalid ... got: <Icon />'.
Handle both the element and the component (SparklesIcon fallback) shapes.

Also add a README troubleshooting section for MISSING_EXPORT icon build
errors, which come from code importing icons from the @sanity/icons package
root - a pattern removed in v5 (the plugin itself already uses the per-icon
export paths).

Fixes #1495

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Cody Olsen <stipsan@users.noreply.github.com>
fix(deps): update dependency @sanity/ui to ^3.3.1 (#1498)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/preview-url-secret to ^4.0.8 (#1492)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @vis.gl/react-google-maps to ^1.9.0 (#1501)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1497)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency xstate to ^5.32.4 (#1494)

* fix(deps): update dependency xstate to ^5.32.4

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Upgrade oxlint-tsgolint to ^0.24.0 and fix new lint findings (#1476)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Version Packages (#1489)
refactor: move all plugins and packages to tsdown (#1491)
refactor: move dbeug-live-sync-tags to tsdown (#1490)
Version Packages (#1487)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
chore(deps): dedupe pnpm-lock.yaml (#1488)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Remove isolatedDeclarations and collapse to one tsconfig per plugin (#1460)

* Remove isolatedDeclarations and use a single tsconfig per plugin

Drop the @sanity/tsconfig/isolated-declarations preset from the shared
@repo/tsconfig/build.json (now removed) and @repo/package.config, and
delete every per-plugin tsconfig.build.json. @sanity/pkg-utils now builds
declarations from each plugin's single tsconfig.json; dts: 'rolldown' is
kept, so isolated declarations can be re-adopted later by re-adding the
preset.

Co-authored-by: Cody Olsen <stipsan@users.noreply.github.com>

* Scaffold a single tsconfig in the plugin generator

Remove the isolatedDeclarations prompt and the tsconfig.build.json
scaffolding action from both generators, and delete the now-unused
tsconfig.build.json.hbs template.

Co-authored-by: Cody Olsen <stipsan@users.noreply.github.com>

* Drop tsconfig.build.json from plugin-transfer docs

Co-authored-by: Cody Olsen <stipsan@users.noreply.github.com>

* Add changesets for plugins with regenerated declarations

Patch bumps for the 8 published packages whose dist declaration output
(.d.ts and/or .d.ts.map) changed when dts generation moved off
isolatedDeclarations. The differences are cosmetic (quote style, JSDoc
indentation, union member order); runtime JS is unchanged.

* Remove @repo/tsconfig and extend @sanity/tsconfig/strictest directly

With a single tsconfig per plugin the @repo/tsconfig wrapper package no
longer earns its keep. Each plugin now extends @sanity/tsconfig/strictest
directly and sets customConditions: ['development'] inline (temporarily
needed until the planned move to tsdown, which handles dev conditions
differently). Swaps the @repo/tsconfig workspace devDependency for
@sanity/tsconfig (catalog) in all 48 packages and updates the generator
templates and knip config. Built dist output is byte-identical.

* Generate declarations with tsgo

Enable the tsgo pipeline (@typescript/native-preview) in
@repo/package.config, the same engine oxlint's type-check runs on.
tsgo requires inferred exported types to be portable (TS2883), so a few
sites gain explicit annotations: the xstate form machine in
sanity-plugin-dashboard-widget-vercel, the schema test fixtures in
sanity-naive-html-serializer, and the render helper in
sanity-plugin-media's tests. Documents the TS2883 failure mode in
AGENTS.md.

* Add changesets for tsgo-regenerated declarations

Unifies the earlier isolatedDeclarations changesets and adds patch bumps
for the 21 additional published packages whose dist declaration output
changed when dts generation switched to tsgo (cosmetic quote-style and
union-ordering differences only).

* Relax minimumReleaseAge to the pnpm v11 default

Drops the release-age gate from 3 days to pnpm v11's default of 1440
minutes (1 day), unblocking resolution of @vitejs/devtools releases the
test studio tracks closely.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Cody Olsen <stipsan@users.noreply.github.com>
Version Packages (#1484)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(@sanity/assist): open icon picker reliably with lazy-loaded icons (#1485)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
chore(deps): update dependency @vitejs/devtools to ^0.3.4 (#1479)

* chore(deps): update dependency @vitejs/devtools to ^0.3.4

* chore: dedupe lockfile with pnpm

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
fix(deps): update dependency motion to ^12.42.2 (#1480)

* fix(deps): update dependency motion to ^12.42.2

* chore(deps): changeset for dependency update

* chore: run pnpm dedupe for motion update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Version Packages (#1483)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @vanilla-extract/css to ^1.21.1 (#1477)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Add changesets for plugins using styledComponents tree-shaking upgrade (#1478) (#1481)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
fix: update icon lazy loading

fix(deps): update dependency @sanity/icons to v5 (#1482)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency @sanity/pkg-utils to ^10.9.0 (#1478)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
Version Packages (#1473)

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(deps): update dependency typescript to v6 (#1474)

* fix(deps): update dependency typescript to v6

* chore(deps): changeset for dependency update

---------

Co-authored-by: squiggler-app[bot] <265501495+squiggler-app[bot]@users.noreply.github.com>
fix(document-internationalization): enable creating language copies for documents in releases (#1475)

* fix(document-internationalization): enable translations for documents in releases

When …

This branch was successfully deployed

1 active deployment
Preview — b945a352 Deployed Jul 13, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant