## sanity-io/sanity — v6.16.0…v6.17.0

_129 commits._

### Features
- **feat(sanity): singleton document badge (#14443)** (c21d524)
- **feat(sanity): first-class singletons API (#12810)** (02890f3)
- **feat(core): add beta.reactActivityMode to keep recent tools mounted (#14901)** (f5821c3)
- **feat(structure): add opt-in live document count badges to document type list items (#14163)** (23ee1df)
- **feat(core): render one variant menu per type and update variant creation form (#14884)** (45e733c)
- **feat(core): add sanity/_dangerously_use_private_internals_that_do_not_follow_semver entry (additive) (#14837)** (d0e8253)
- **feat(core): read every selected variant from perspective (#14918)** (b15b556)
- **feat(core): configure variant conditions under types (#14883)** (b3e7efd)
- **feat(structure): support list pane widths (#14967)** (b12fb38)
- **feat(test-studio): throw the style migrations widget between viewport corners (#14945)** (9702372)
- **feat(telemetry): report portable text editor and app sdk versions (#14922)** (b699078)
- **feat(form): collapse long arrays behind a show all items toggle (#13870)** (83a9f83)

### Fixes
- **fix(deps): update sanity-sdk to ^3.6.0 (#15091)** (aac614c)
- **perf(form): create presence cursor components via a compiler-friendly factory (#15069)** (090696e)
- **fix(deps): update dev-non-major (#15076)** (c23a168)
- **fix(structure): suppress deprecated selectedVariantName lint error in useListPaneCounts (#15061)** (30dcbdf)
- **fix(studio): collapse navbar tools into the overflow menu when the studio is narrower than the viewport (#15030)** (adbe052)
- **fix(presentation): handle review feedback on the open preview link (#15020)** (a6f6a91)
- **fix(deps): update sanity-sdk to ^3.5.0 (#14891)** (a4c50e0)
- **fix(deps): update portabletext (#14982)** (06b0b03)
- **fix(deps): update dependency @sanity/cli to ^8.13.0 (#15012)** (d0bc976)
- **fix(deps): update dependency get-it to ^9.6.0 (#15013)** (a3e1534)
- **fix(deps): update dependency motion to ^13.4.4 (#14977)** (be2e1aa)
- **fix(deps): update dev-non-major (#15040)** (2adc86f)
- **fix(form): keep a grown portable text editor from scrolling to top on focus (#14954)** (56113a4)
- **fix(deps): update dev-non-major (#15025)** (e80674d)
- **fix(presentation): enable preview mode when opening preview (#14936)** (8ef1e7c)
- **fix(core): let a container block config add portable text toolbar actions (#14961)** (4cebde0)
- **fix(core): treat empty variant conditions as an error (#14586)** (0c10e61)
- **fix(deps): update codemirror (#14976)** (abe61ba)
- **fix(e2e): exit playwright webServer after the suite (#14988)** (3fbbb6e)
- **fix(ui): prevent resizable layout props leaking to DOM (#14937)** (907d651)
- **fix(deps): update dev-non-major (#14984)** (68e6096)
- **fix(structure): remove the pane layout observer on unsubscribe (#14980)** (455bd45)
- **fix(structure): forward pane widths from the document type list input (#14968)** (632128d)
- **fix(deps): update dependency get-it to ^9.5.8 (#14951)** (37abe77)
- **fix(deps): update dependency @sanity/client to ^8.7.0 (#14953)** (ed409c5)
- **fix(schema): inline object-inspect parts (#14902)** (3efc395)
- **fix(structure): keep pane widths when releasing a resize divider (#14964)** (c97d0e3)
- **perf(structure): keep pane router context stable while resizing panes (#14966)** (3b92c51)
- **fix(core): move middleware Suspense fallbacks to the render sites (#14687)** (8737940)
- **fix(comments-v2): exclude pathless comments from field queries (#14860)** (9f36804)
- **fix(deps): update dependency get-it to ^9.5.7 (#14921)** (455717e)
- **fix(search): close vstack tags in SearchChromeStory (#14927)** (4e3733d)
- **fix(releases): detect scheduled draft edits when deleting a schedule (#14787)** (a28d84a)
- **fix(deps): update portabletext (#14890)** (b2f1c73)
- **fix(studio): show draft indicator for draft-only documents (#14859)** (5813869)

### Tests
- **test(config): cover flattenConfig plugin order and deprecation (#14776)** (c6c7457)
- **test(store): cover listenQuery welcome refetch and error paths (#15008)** (21663c2)
- **test(ailf): add literacy tasks for the first-class singleton API (#15017)** (8588609)
- **test(portable-text): add sync conformance fuzzer (#14981)** (d32d341)
- **test(field): cover path helper edge cases (#14777)** (69cb821)
- **test(form): cover patch application edge cases (#14772)** (0969836)
- **test(config): cover config property reducer edge cases (#14789)** (ee7eee2)
- **test(storybook): add chromatic sentinels for studio navbar drawer menus, search no-results and dev server stopped screen (#14900)** (e639361)

### Docs
- **docs(skills): point the sharded chromatic capture recipe at .vitest/blob (#14960)** (ad9864e)

### Chore
- **chore(release): publish v6.17.0 (#14904)** (a9944b0)
- **chore(deps): update dependency @sanity/logos to ^2.2.6 (#15073)** (1ff510c)
- **chore(lint): fix linter issues 🤖 ✨ (#15094)** (6ab2ad0)
- **chore(deps): update dependency prettier to ^3.9.9 (#15084)** (d608086)
- **chore(deps): update renovatebot/github-action action to v46.3.5 (#14870)** (4d4d6fe)
- **chore(deps): update dependency @sanity/vanilla-extract-vite-plugin to ^0.2.20 (#15075)** (9c62421)
- **chore(deps): update dependency @sanity/color to ^3.0.9 (#15072)** (e2688fe)
- **chore(deps): update dependency @sanity/tsdown-config to ^0.28.2 (#15074)** (dfd10dd)
- **refactor(test-studio): migrate singleton examples to first-class singletons API (#14442)** (89aa947)
- **chore: stack migration final pass (#15032)** (b801550)
- **chore(tests): generate dts tests 🤖 ✨ (#15065)** (6b7460e)
- **chore(deps): upgrade vite to 8.3.1 and repin bundled dev rolldown to 1.2.9 (#15055)** (eb9aba6)
- **ci(chromatic): gate pull request runs behind the trigger:chromatic label (#15062)** (0add91d)
- **ci(fuzz): add a single Fuzz Status job to require for merge (#15057)** (f43d049)
- **chore(radar): track total CSS weight + style tag CSS per scenario (#15049)** (6685243)
- **chore(tests): generate dts tests 🤖 ✨ (#15050)** (9c26a66)
- **chore(deps): enable trustPolicyExcludePrune (#14892)** (eef4e15)
- **chore(deps): update dependency @uiw/react-codemirror to ^4.25.12 (#15045)** (b1b41a9)
- **chore(deps): dedupe pnpm-lock.yaml (#15044)** (af3eccf)
- **chore(deps): update dependency oxlint-tsgolint to ^7.0.2003 (#14999)** (797f644)
- **chore(deps): update dependency @sanity/ailf to ^7.38.1 (#14983)** (0af0a39)
- **chore: container migration final pass (#15036)** (30f1530)
- **chore(deps): update dependency @sanity/themer to ^0.8.0 (#15043)** (485ae5c)
- **chore(deps): update dependency chromatic to ^18.9.5 (#14947)** (d2668ee)
- **chore(deps): update dependency @sanity/ui to ^4.2.6 (#15024)** (651dcdb)
- **chore(deps): update dependency sanity-plugin-internationalized-array to ^5.3.1 (#15041)** (b2a7e20)
- **chore(deps): enable pnpm autoDedupe (#14930)** (6619338)
- **chore(tests): generate dts tests 🤖 ✨ (#15028)** (7ab39a0)
- **chore(deps): dedupe pnpm-lock.yaml (#15027)** (5327419)
- **chore(deps): update dependency @sanity/media-library-types to ^1.7.1 (#14973)** (de1b3b1)
- **chore: migrate container in core (#15006)** (85f52d8)
- **chore: migrate stack in core components (#15004)** (fe56a87)
- **chore: migrate stack in dev (#15003)** (6c7ea7b)
- **refactor(sanity): add reusable structure node id validator** (d85a6b8)
- **chore(deps): update dependency knip to ^6.38.0 (#14978)** (bd63eff)
- **chore: install sanity-tsdown-config agent skill (#14956)** (f66b1ae)
- **chore(tests): generate dts tests 🤖 ✨ (#15009)** (4138fe1)
- **chore(core): add condition resolver for variants (#14857)** (f2a7cfc)
- **chore(deps): update dependency @sanity/themer to ^0.5.0 (#15001)** (f5a99eb)
- **chore(deps): enable catalogMode prefer (#14929)** (af20efe)
- **chore(deps): dedupe pnpm-lock.yaml (#14971)** (25bdb5c)
- **chore(tests): generate dts tests 🤖 ✨ (#14998)** (becc23e)
- **chore(deps): update dependency @sanity/ui to ^4.2.4 (#14974)** (ac6a8be)
- **chore(deps): update dependency ui5 to v5.0.0-alpha.11 (#14950)** (fcc68ea)
- **chore: migrate stack in structure (#14943)** (88778ce)
- **chore(deps): update dependency react-i18next to ^17.0.15 (#14948)** (9ff12d1)
- **chore(deps): update dependency @sentry/react to ^10.75.3 (#14920)** (4b21f17)
- **chore(deps): update dependency react-rx to ^7.0.1 (#14949)** (17755c5)
- **chore(deps): update dependency sanity-plugin-internationalized-array to ^5.3.1 (#14889)** (c82ed26)
- **chore(deps): lock file maintenance (#14962)** (5c997f5)
- **chore(deps): update dependency @conventional-changelog/git-client to v3 (#14829)** (f2d4891)
- **chore(deps): update chromaui/action action to v18.9.5 (#14946)** (a08998e)
- **chore(deps): upgrade to vitest 5 (#14881)** (baf7aac)
- **chore(deps): update actions/github-script action to v9** (5b704c5)
- **chore(deps): update pnpm to v12.6.0 (#14952)** (070a9b1)
- **chore: migrate stack in core/perspective to core/variants (#14940)** (e7f74b2)
- **chore(radar): load scenarios for login, tool and editable milestones (#14931)** (c091e24)
- **chore(radar): declarative INP steps with scroll and press kinds (#14924)** (700c3cb)
- **refactor(sanity): migrate presentation panels and release activity wrappers to vanilla-extract (#14914)** (eed01c3)
- **refactor(tasks): migrate task sidebar, list and activity wrappers to vanilla-extract (#14913)** (7ae880e)
- **refactor(form): migrate form field status, reference previews and small editor wrappers to vanilla-extract (#14912)** (c238567)
- **refactor(form): migrate asset input chrome and simple input wrappers to vanilla-extract (#14911)** (30d7b10)
- **refactor(core): migrate navbar search filter and result wrappers to vanilla-extract (#14910)** (322d172)
- **refactor(comments): migrate comments v2 reactions, popovers and inspector header to vanilla-extract (#14909)** (59cbcec)
- **refactor(structure): migrate dialog, diff view and pane content styles to vanilla-extract (#14908)** (b649f10)
- **refactor(structure): migrate document pane inspector and timeline styles to vanilla-extract (#14907)** (458ab08)
- **refactor(field): migrate static field preview and diff wrapper styles to vanilla-extract (#14906)** (724b84c)
- **refactor(sanity): migrate shared ui primitives and trivial styled wrappers to vanilla-extract (#14905)** (859b35c)
- **ci(e2e): install chromium in every playwright shard when the browser cache misses (#14916)** (3e2f281)
- **chore: migrate stack in core/studio/components (#14898)** (cee91bc)
- **chore: migrate stack in misc form directories (#14886)** (d8c86b1)
- **chore: migrate stack in misc core/studio directories (#14896)** (90b3b6d)
- **chore: migrate stack in form/inputs (#14744)** (e99e4c2)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/sanity-io/sanity?utm_source=github-action)._