Releases: sanity-io/sanity
v3.44.0
Installation and upgrading
To initiate a new Studio without installing the CLI globally:
npm create sanity@latest
To upgrade a v3 Studio, run this command in its folder:
npm install sanity@latest
🐛 Notable bugfixes
Customizing restore action now works
This releases fixes a bug preventing developers removing or customising the "restore" document action using the document.actions
Studio configuration property.
Studio will now respect changes you make to the "restore" document action, but please note that you must set the action
property to "restore"
on your DocumentActionComponent
. The action
property allows Studio to identify the restore action.
Example
import {RocketIcon} from '@sanity/icons'
import {type DocumentActionComponent} from 'sanity'
export const TestCustomRestoreAction: (
action: DocumentActionComponent,
) => DocumentActionComponent = (restoreAction) => {
const action: DocumentActionComponent = (props) => ({
...restoreAction(props),
label: 'Custom restore',
tone: 'positive',
icon: RocketIcon,
})
+ action.action = 'restore'
return action
}
Other bugfixes
- Fixes an issue that could under certain conditions cause a circular structure to enter an infinite loop. Shoutout to @sarahsvedenborg and @stian-svedenborg for identifying the issue and proposing a fix.
- Resolves a type error caused by the missing
preview
property inDocumentComponents
. - Fixes an issue causing cross dataset reference search not returning hits in certain cases.
- Improves text selection of full screen Portable Text editors (PTE).
- Fixes issue where nested fullscreen PTEs were unable to open the block style dropdown.
- Fixes issue causing EXIF metadata not being included when uplading multiple images through drag + drop. Thanks @xuzuodong!
- Fixes bugs related to when the PTE is using a Reference input directly as the annotation type (not wrapped in a object type).
- Add automatically resolving of some validation errors in the PTE.
- Fixes bug causing "Untitled" to appear as title for array and object fields, even when explicitly passing undefined as title to renderDefault().
📓 Full changelog
Author | Message | Commit |
---|---|---|
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6731) | 1587dfe |
Pedro Bonamin | fix(core): add retry to image observer and loading state (#6709) | 0f51f9d |
Ash | feat(sanity): use optimistic locking when publishing documents (#6711) | 6fe8c69 |
jordanl17 | EDX-1352: batch select sheet list documents (#6713) | 10b596a |
Michael | fix(cli): graphql api flag is respected during validation (#6615) | c739eea |
renovate[bot] | chore(lockfile): update dependency @sanity/telemetry to v0.7.8 (#6732) | 4307a3c |
renovate[bot] | chore(lockfile): update dependency i18next to v23.11.5 (#6733) | 922235f |
Per-Kristian Nordnes | refactor(portable-text-editor): automatically resolve some validation errors (#6705) | 6062a9a |
Per-Kristian Nordnes | fix(core/form): prohibit focus and unset on root input (#6706) | 4a2f141 |
Cody Olsen | chore: setup CI check for react compiler errors (#6730) | 9c7175f |
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6734) | fe807a8 |
Hash Brown | fix: EXIF data on Image asset not included when uploading multiple images to array type, or via drag-and-drop (#6708) | 222418a |
Robin Pyon | fix(pte): improve text selection in fullscreen inputs (#6642) | 6163d96 |
renovate[bot] | fix(deps): Update dev-non-major (#6719) | dadfcfa |
Rune Botten | fix(core): avoid attribute names being scanned as symbols | 23f6c67 |
Cody Olsen | chore: change the action to use warnings and only fail on new ones (#6740) | ebef5cb |
renovate[bot] | chore(lockfile): update dependency @sanity/telemetry to v0.7.8 (#6743) | a230bbf |
renovate[bot] | chore(deps): update dependency @vitejs/plugin-react to ^4.3.0 (#6744) | 7551264 |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.18 (#6746) | 913740d |
renovate[bot] | chore(lockfile): update dependency @sanity/import to v3.37.4 (#6749) | e5b04d1 |
renovate[bot] | chore(lockfile): update dependency @sanity/export to v3.38.1 (#6748) | 0dbf0c5 |
renovate[bot] | fix(deps): Update dev-non-major (#6745) | 7c44121 |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.65 (#6747) | 79a79a3 |
Cody Olsen | fix: handle React Compiler errors (#6750) | 403f485 |
Ash | feat(sanity): use Actions API when restoring drafts | 47e5420 |
Ash | feat(sanity): add timeline test ids | 038a1a2 |
Ash | test(e2e): add test for restore document action |
e9b967f |
Christian Grøngaard | chore: add initial page-building test studio (#6735) | cca14f3 |
Bjørge Næss | fix(core): remove id from patch when using server actions (#6751) | 7b90cad |
Ash | fix(sanity): respect Studio configuration when rendering "restore" document action (#6637) | 6ba71f2 |
Binoy Patel | chore(ci): set a shorter cache on manifest (#6660) | 069dd31 |
renovate[bot] | chore(lockfile): update dependency i18next to v23.11.5 (#6755) | 6043919 |
renovate[bot] | chore(lockfile): update dependency react-barcode to v1.5.3 (#6756) | 89c86c6 |
renovate[bot] | fix(deps): update dependency @sanity/ui to ^2.1.12 (#6757) | 9025619 |
renovate[bot] | fix(deps): update dependency get-it to ^8.5.0 (#6758) | 6b98663 |
renovate[bot] | fix(deps): Update dev-non-major (#6759) | 5893609 |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.67 (#6761) | 543d755 |
renovate[bot] | fix(deps): update dependency @sanity/client to ^6.18.3 (#6762) | 3e1bc3e |
RitaDias | fix(core): unable to open block style select when in nested PTEs in fullscreen (#6738) | 9f7ab8b |
Per-Kristian Nordnes | test(portable-text-editor): add test for empty array value (#6764) | a13e22c |
Christian Grøngaard | chore(page-building): configure build outputs (#6768) | 076f9b8 |
Bjørge Næss | fix(core): fix issue with nested preview fields not being included in legacy text search (#6767) | 044ac39 |
jordanl17 | feat(structure): sheet list prototype (#6741) | f0670bf |
Espen Hovlandsdal | chore(deps): update dependency @sanity/bifur-client to ^0.4.0 (#6645) | a79ea02 |
Simeon Griggs | chore: correct grammar for open-source (#6766) | f8ee0f2 |
Rico Kahler | fix: resolve type error by inlining DocumentComponents definition (#6703) | 10e1bc3 |
Herman Wikner | fix(core): reactions menu open issue (#6765) | 3f52b83 |
Bjørge Næss | fix(form): fix issue making circular structures sometimes causing infinite loop (#6699) | 7efdeeb |
Per-Kristian Nordnes | fix(portable-text-editor): add autoresolving validations and fix normalization issues (#6770) | c458289 |
renovate[bot] | fix(deps): update dependency @sanity/client to ^6.19.0 (#6781) | 1961904 |
Bjørge Næss | fix(form): properly support passing undefined as title to renderDefault() for array and object fields (#6774) |
f341c2d |
Binoy Patel | feat: store all versions in the manifest (#6769) | 1fcc0f2 |
renovate[bot] | chore(lockfile): update dependency @portabletext/react to v3.1.0 (#6788) | 02fa562 |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.15.10 (#6786) | 517a1a9 |
renovate[bot] | fix(deps): update dependency @sanity/ui to ^2.1.13 (#6787) | 43f1766 |
renovate[bot] | fix(deps): Update dev-non-major (#6789) | 772d464 |
renovate[bot] | chore(deps): update linters (#6790) | 674a6cb |
renovate[bot] | chore(deps): update dependency @sanity/visual-editing to v2 (#6792) | 8665a16 |
renovate[bot] | chore(lockfile): update dependency @sanity/logos to v2.1.12 (#6793) | 9d7c67d |
Christian Grøngaard | fix(form): avoid spreading key prop (#6776) | eeba7f2 |
renovate[bot] | chore(lockfile): update dependency @sanity/logos to v2.1.12 (#6794) | 7d0d86a |
renovate[bot] | chore(lockfile): update dependency @sanity/telemetry to v0.7.9 (#6795) | be1065f |
Cody Olsen | chore(deps): bump eslint-plugin-react-compiler (#6791) | ea7db00 |
renovate[bot] | chore(deps): update dependency @sanity/icons to v3 (#6797) | 63e3c32 |
Cody Olsen | chore(react-compiler): up the max warnings limit (#6801) | aa95805 |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.15.11 (#6799) | 42fd4bf |
renovate[bot] | fix(deps): update dependency @sanity/ui to ^2.1.14 (#6800) | faa5bcf |
renovate[bot] | fix(deps): Update dev-non-major (#6798) | 6640ad4 |
Bjørge Næss | refactor(core): stabilize studio usage of actions API (#6783) | 112b66c |
v3.43.0
Install or upgrade Sanity Studio
To initiate a new Sanity Studio project or upgrade an existing one, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.
If you are updating from a version earlier than 3.37.0, you should also check out this article to ensure your dependencies are up to date.
✨ Highlights
- The
sanity init
command for Next.js-embedded Studios is updated to installnext-sanity v9
andnext v14
as per best practices. - Adds support for
// @sanity-typegen-ignore
comments that will ignore certain queries from type generation (thanks @largis21!).
🐛 Notable Bugfixes
- Fixes an issue where the scheduled publishing tool is displayed as the only available plugin when no other plugins are added.
- Adds memoization to minimize unnecessary calls to initial value functions, improving performance.
- Removes a circular reference to
usePaneRouter
that caused build warnings and potential execution order issues. - Fixes bugs related to the Portable Text Input when using a Reference input directly as the annotation type. This change prohibits focus and unset on the root input, preventing abrupt modal closures and ensuring proper cleanup and function execution.
📓 Full changelog
Author | Message | Commit |
---|---|---|
renovate[bot] | fix(deps): Update dev-non-major (#6659) | ab0f97d |
Pedro Bonamin | fix(scheduled-publishing): don't include it if it's the only plugin available (#6530) | b2fa80b |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.15 (#6666) | 30c1f4c |
renovate[bot] | fix(deps): update dependency groq-js to ^1.9.0 (#6655) | 71a0758 |
renovate[bot] | chore(lockfile): update dependency @sanity/export to v3.38.0 (#6654) | 1f6b8a8 |
Ash | feat(sanity): use actions API when discarding drafts | c1755d1 |
Ash | feat(sanity): add test ids to confirm dialog buttons | 73d51cb |
Ash | test(e2e): add tests for discardChanges document action |
33564a2 |
renovate[bot] | chore(deps): update dependency framer-motion to v11.2.0 (#6668) | 673ba0c |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.15.3 (#6667) | 71e6319 |
renovate[bot] | chore(deps): update dependency esbuild to ^0.21.2 (#6656) | fc79956 |
renovate[bot] | chore(deps): update dependency lerna to ^8.1.3 (#6657) | 7960627 |
renovate[bot] | fix(deps): Update dev-non-major (#6673) | 409d7df |
Carolina Gonzalez | feat: fetch feature toggle to enable serverside document actions (#6418) | 8610fc6 |
renovate[bot] | fix(deps): update dependency @sanity/client to ^6.18.2 (#6674) | 4da4ae5 |
renovate[bot] | fix(deps): update dependency @sanity/ui to ^2.1.8 (#6675) | e8a40e2 |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.55 (#6672) | 7b5bbe7 |
renovate[bot] | fix(deps): update dependency get-it to ^8.4.30 (#6676) | 0715793 |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.15.4 (#6681) | f97c348 |
renovate[bot] | fix(deps): Update dev-non-major (#6680) | ab4a9e8 |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.15.5 (#6687) | a61a679 |
renovate[bot] | chore(deps): update dependency framer-motion to v11.2.2 (#6689) | e27e063 |
renovate[bot] | fix(deps): update dependency @sanity/ui to ^2.1.9 (#6691) | 3aa444f |
renovate[bot] | chore(deps): update dependency recast to ^0.23.7 (#6658) | 3912e82 |
renovate[bot] | fix(deps): Update dev-non-major (#6690) | ec179d0 |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.16 (#6692) | 80d4620 |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.59 (#6693) | 1164a6b |
Robin Pyon | feat(pte): add initialActive prop to PortableTextInput (#6638) |
5add977 |
Pedro Bonamin | fix(schedule-publishing): avoid polling in upsell mode (#6670) | 87889d1 |
Cody Olsen | chore: setup dev:next-studio to use react v19 (#6685) |
61d1bc3 |
renovate[bot] | chore(deps): update dependency framer-motion to v11.2.3 (#6696) | e6b4fdc |
renovate[bot] | fix(deps): update dependency @sanity/ui to ^2.1.10 (#6701) | af0eee4 |
renovate[bot] | fix(deps): Update dev-non-major (#6700) | 77785ff |
Pedro Bonamin | feat(structure): add sheet list table view. (#6647) | c5916d4 |
Ash | feat(sanity): memoize initial value resolver (#6614) | 39bab8a |
Cody Olsen | fix: update @sanity/presentation and remove deprecated internal exports no longer in use (#6694) |
69246c1 |
Cody Olsen | fix: remove circular reference to usePaneRouter (#6664) |
d66def2 |
jordanl17 | feat(structure): Sheet View columns (#6661) | d8a37a8 |
Christian Grøngaard | fix: pin framer-motion to an earlier version (#6717) | 6c2aea2 |
renovate[bot] | fix(deps): update dependency @sanity/ui to ^2.1.11 (#6720) | 61cc315 |
Pedro Bonamin | fix(tasks): reduce tasks sidebar zoffset (#6718) | 5ab0819 |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.17 (#6722) | babfd2d |
Pedro Bonamin | fix(tasks): hide footer button until the active document is set (#6695) | 93c7d66 |
jordanl17 | fix(structure): fixing incorrect way of setting col visibility (#6716) | 06f7902 |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.15.8 (#6724) | 17ca815 |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.62 (#6723) | c6c1724 |
Cody Olsen | feat: upgrade sanity init for Next.js to next-sanity v9 (#6644) |
f48e38b |
largis21 | Add support for @sanity-typegen-ignore to ignore queries (#6578) | efe8bca |
Sindre Gulseth | chore(cli): symlink in local packages for the installed sanity cli (#6728) | c4b8558 |
Bjørge Næss | fix(i18n): remove extraneous curly brace (#6726) | 74f2fd5 |
Sindre Gulseth | feat(typegen): add optout for prettier formatting (#6702) | ac5103a |
v3.42.1
Install or upgrade Sanity Studio
To initiate a new Sanity Studio project or upgrade an existing one, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.
If you are updating from a version earlier than 3.37.0, you should also check out this article to ensure your dependencies are up to date.
🐛 Notable bugfixes
- Fixes regression introduced in v3.42.0 that crashes the document list pane in Presentation Tool
📓 Full changelog
Author | Message | Commit |
---|---|---|
Cody Olsen | fix: regression crashing the document list pane in presentation (#6684) | 7ae3afd |
v3.42.0
Install or upgrade Sanity Studio
To initiate a new Sanity Studio project or upgrade an existing one, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.
If you are updating from a version earlier than 3.37.0, you should also check out this article to ensure your dependencies are up to date.
✨ Highlights
Save Vision Query Results
You can now conveniently save the results of your Sanity Vision queries as JSON or CSV files. Simply run your query and click on the new "save result as" buttons in the bottom right corner.
Custom Components with Intent Handling in Structure Builder
Custom components included in the Structure Builder (like S.component(MyCustomComponent)
) can now handle intents. This is especially useful for routing to custom components from global search results or other links. You can achieve this by using the canHandleIntent
parameter.
S.listItem()
.id('translate')
.title('Translate Test')
.child(S.component(TranslateExample).id('example')
.canHandleIntent((intent, params, context) => {
console.log(intent, params, context)
return true
}
))
🐛 Notable Bugfixes
- Fixes an issue where Boolean inputs were not always clearly indicated as read-only and disabled.
- Makes the search/filter in the document "Inspect" dialog case-insensitive.
- Prevents inputs within the Portable Text Editor from calling
element.onFocus()
on any opened block or inline-object, thus avoiding unintended modal closures. - Prevents extra work on preview prepare functions, ensuring better performance.
- Fixes miscellaneous bugs and performance issues with Portable Text Editor's block extras and highlight rendering. For example, pointer events are now correctly disabled to avoid unnecessary cursor changes or rendering thrashes.
- Fixes an issue where the document history panel would appear to load indefinitely
📓 Full changelog
Author | Message | Commit |
---|---|---|
jordanl17 | fix(studio): adding tooltip to read-only bool inputs (#6580) | 55153ac |
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6607) | 48674b7 |
Carolina Gonzalez | feat: add canHandleIntent to Structure Builder component (#6516) | d3d0c04 |
Espen Hovlandsdal | fix(structure): use case insensitive search for inspect dialog (#6588) | 1dca6db |
Carolina Gonzalez | test(core): await publish action to prevent test flakiness (#6609) | fad1628 |
renovate[bot] | fix(deps): update dependency get-it to ^8.4.29 (#6603) | cc08614 |
renovate[bot] | fix(deps): update dependency @sanity/client to ^6.18.0 (#6604) | c2b143e |
Rostislav Melkumyan | feat(vision): add "save result as json/csv" buttons (#6158) | 14be9b6 |
Per-Kristian Nordnes | fix(core/form): prevent onFocus for root object paths being called by editing form (#6610) | 516ada5 |
jordanl17 | feat(core, structure) sheet list menu option (#6593) | 724da99 |
Binoy Patel | chore(bundle): remove unnecessary bundles and make root imports index (#6616) | 5f0227c |
Robin Pyon | feat(pte): add hideToolbar and fullscreen props to PortableTextInput (#6621) |
800149f |
Robin Pyon | fix(pte): don't render the PTE block extras container when not in use, disable pointer events on highlights (#6620) | 4c73ded |
Evensix | skip recalling invokePrepare (#6608) | 2729437 |
Bjørge Næss | fix(core): update test snapshots (#6629) | 20b66b1 |
Bjørge Næss | fix(e2e): support headless/headful env var toggle (#6558) | 92260a4 |
Robin Pyon | feat: add icon to BlockStyleDefinition (#6613) | 2e69eee |
Robin Pyon | feat(pte): initial support for renderEditable in portable text inputs (#6627) |
1d0fd3e |
Binoy Patel | chore(ci): add a circleci config to bundle packages (#6446) | f4c7cfe |
renovate[bot] | chore(lockfile): update dependency esbuild to v0.21.2 (#6602) | b63af70 |
Pedro Bonamin | fix(pte): cursor presence causes pte error (#6622) | b13fff4 |
Robin Pyon | feat(pte): expose data-attributes on PTE Text + Object blocks (#6641) | fceff23 |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.14 (#6630) | dd5cc7d |
renovate[bot] | fix(deps): update dependency @sanity/ui to ^2.1.7 (#6633) | 34b4754 |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.53 (#6631) | f58a005 |
Cody Olsen | chore(ci): tweak renovate preset to better align with branch rulesets (#6648) | ef39982 |
renovate[bot] | chore(deps): update dependency styled-components to ^6.1.11 (#6636) | 55ab489 |
Cody Olsen | refactor(renovate): group non major dev deps (#6652) | 1812de6 |
renovate[bot] | fix(deps): update dependency @sanity/client to ^6.18.1 (#6653) | 083960f |
Binoy Patel | fix(core): fixes issue with history loading indefinitely (#6539) | 52a5308 |
Sindre Gulseth | fix(typegen): move type new line separator into formatter (#6649) | 109a180 |
Sindre Gulseth | chore(schemaExtraction): add a newline to the extracted schema.json (#6650) | 4beb29e |
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6662) | c7ad47b |
v3.41.2
Install or upgrade Sanity Studio
To initiate a new Sanity Studio project or upgrade an existing one, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.
If you are updating from a version earlier than 3.37.0, you should also check out this article to ensure your dependencies are up to date.
🐛 Notable bugfixes
- Resolves a
Maximum update depth exceeded
crash in Presentation Tool.
📓 Full changelog
Author | Message | Commit |
---|---|---|
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.15.2 (#6632) | 43823f6 |
v3.41.1
Installation and upgrading
To initiate a new Studio without installing the CLI globally:
npm create sanity@latest
To upgrade a v3 Studio, run this command in its folder:
npm install sanity@latest
🐛 Notable bugfixes
- Fixes a regression in Presentation Tool introduced in v3.41.0 that causes it to crash in embedded studios.
📓 Full changelog
Author | Message | Commit |
---|---|---|
Binoy Patel | test(core): fixes flaky test with document publish (#6595) | 2a8375a |
renovate[bot] | chore(deps): update linters (#6590) | 59b8ce8 |
renovate[bot] | chore(deps): update dependency styled-components to ^6.1.10 (#6585) | 5e727e0 |
renovate[bot] | chore(lockfile): update dependency zod to v3.23.7 (#6527) | 571dd56 |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.13 (#6599) | d9f9188 |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.51 (#6600) | 56a8a79 |
renovate[bot] | chore(lockfile): update dependency @sanity/react-loader to v1.9.17 (#6584) | 0819c40 |
Cody Olsen | fix(presentation): regression causing a crash when in an embedded studio (#6606) | 99dfb60 |
v3.41.0
Install or upgrade Sanity Studio
To initiate a new Sanity Studio project or upgrade an existing one, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.
If you are updating from a version earlier than 3.37.0, you should also check out this article to ensure your dependencies are up to date.
✨ Highlights
- The Portable Text Editor (PTE) now supports drag-n-dropping + pasting of images and files into
Image
andFile
blocks.
🐛 Notable bugfixes
- Fixes a bug where importing a variable inside an imported file would fail in Typegen.
- Fixes issues in the PTE where tools would show as being active for a selection when only part of the selection used the tool. Now tools will show as active only when all highlighted selections use the tool.
- Fixes an
Attempted import error
related to usingswr
in embedded studios. - Fixes an issue in which listeners would sometimes not close if they were unsubscribed from shortly after opening.
- Fixes an issue in which users were incorrectly seeing the scheduled publishing upsell UI.
- When child within the PTE is created without a
_key
, we now automatically create one for it, avoiding unnecessary warning. - Fixes an issue in tasks in which the UI showed that they were created but the transaction didn't end.
📓 Full changelog
Author | Message | Commit |
---|---|---|
Herman Wikner | feat(comments): add telemetry (#6541) | 2d35256 |
Sindre Gulseth | fix(typegen): pass resolved path instead of the imported path (#6540) | e7ffe93 |
Cody Olsen | fix: use vercelStegaClean util from @vercel/stega (#6544) |
790bc8f |
Pedro Bonamin | fix(pte): preserve block key when pressing enter at start of block (#6521) | 7df5396 |
Ash | fix(sanity): do not order by _updatedAt when relevance ordering is used with Text Search API search strategy (#6537) |
0ede4cf |
Pedro Bonamin | chore(test-studio): bump vercel stega version (#6545) | 96f3841 |
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6547) | ad28225 |
renovate[bot] | fix(deps): update dependency @sanity/client to ^6.16.0 (#6548) | 35b19c2 |
Tommy Petty | chore(i18n): fix imports for useTranslation (#6517) |
869b698 |
jordanl17 | fix(pte): tools are active only when all blocks use the tool (#6524) | 169e5fd |
renovate[bot] | chore(deps): update dependency @sanity/visual-editing to v1.8.17 (#6551) | 24f97ab |
Binoy Patel | chore: package build (#6394) | 5a889fc |
Rico Kahler | fix: remove unconditional external from vite build (#6554) | f1e9546 |
Cody Olsen | fix: inline swr , date-fns-tz and @vvo/tzdb to restore embedded studios (#6553) |
9a50252 |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.10 (#6549) | f8f1b47 |
renovate[bot] | chore(deps): update dependency @vercel/stega to v0.1.2 (#6546) | 6a2cdda |
Bjørge Næss | fix(deps): replace hashlru with quicklru (#6557) | d634727 |
Espen Hovlandsdal | chore(deps): update dependency @sanity/client to v6.17.1 (#6561) | 7dd2d84 |
Cody Olsen | fix: remove cleanStegaUnicode helper (#6564) |
2e224d4 |
renovate[bot] | fix(deps): update dependency @sanity/client to ^6.17.2 (#6567) | 154d90b |
shur | feat: add cliInitializedAt field to project metadata (#6538) | 15486f7 |
Pedro Bonamin | fix(schedule-publishing): update flag used to check scheduledPublishing (#6543) | 57fcbac |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.47 (#6550) | 25cbd4e |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.11 (#6573) | b31a151 |
renovate[bot] | chore(deps): update dependency @sanity/visual-editing to v1.8.18 (#6574) | 77654c1 |
Herman Wikner | fix(core): collapsed range decorations (#6568) | 70ab283 |
Pedro Bonamin | chore(scheduled-publishing): update schedule tool upsell layout (#6572) | 295ea72 |
Pedro Bonamin | fix(tasks): update tasks panel z index (#6571) | 3b3125c |
Pedro Bonamin | feat(pte): create new text blocks if needed (#6560) | cadd496 |
RitaDias | refactor(@sanity): remove warning for when child within PTE has no key (#6565) | e1fc2a0 |
Binoy Patel | test(core): add test that only one listener is open when navigating list (#6569) | 161b926 |
renovate[bot] | fix(deps): update dependency get-it to ^8.4.28 (#6576) | 47ef785 |
Pedro Bonamin | fix(tasks): close the form only after the task is created (#6450) | e089eb7 |
renovate[bot] | fix(deps): update dependency @sanity/ui to ^2.1.6 (#6575) | 48321e6 |
Fred Carlsen | feat(form/inputs): add support for image drop+paste in PTE input (#6534) | e964b1e |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.14.0 (#6577) | 0812390 |
renovate[bot] | chore(deps): update dependency vite to ^4.5.3 (#6583) | ed5aca8 |
Carolina Gonzalez | fix: use discard when doc is not published (#6535) | 9c86166 |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.15.0 (#6591) | 1d88df6 |
renovate[bot] | chore(deps): update dependency esbuild to ^0.21.0 (#6589) | fada62f |
Pedro Bonamin | fix(pte): insert empty text block after removing void block (#6552) | 379510f |
Binoy Patel | test(core, desk): add tests for keyvalue storage (#6587) | ab94bea |
v3.40.0
Install or upgrade Sanity Studio
To initiate a new Sanity Studio project or upgrade an existing one, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.
If you are updating from a version earlier than 3.37.0, you should also check out this article to ensure your dependencies are up to date.
✨ Highlights
Presence cursors in the Portable Text Editor
Sanity Studio has always supported real-time collaboration, but you have yet to be able to see where others are working within the Portable Text Editor. By upgrading, you'll get a similar experience to Google Docs when editing block content.
This release also includes bug fixes for the Portable Text Editor:
- The Portable Text Editor will now remove the invisible Stega-encoded characters if you copy-paste from a preview using Visual Editing
- The cursor will not move out of viewpoint when deleting a character in PTE.
- Creating an annotation at the bottom of a PTE will no longer scroll you to the top.
- Fixes an issue where changing positions of items of an array within PTE would launch a cryptic error
Comments and Tasks are now out of beta
Comments and Tasks are now officially out of beta; hence, we have updated the configuration APIs. Both comments and tasks are enabled by default and for all document types.
Comments configuration migration
Configuration during beta:
// ./sanity.config.ts|js
export default defineConfig({
// ... rest of config
document: {
unstable_comments: {
enabled: false,
},
},
});
New configuration (remove unstable_
):
// ./sanity.config.ts|js
export default defineConfig({
// ... rest of config
document: {
- unstable_comments: {
+ comments: {
enabled: false,
},
},
});
Tasks configuration migration
Configuration during beta:
// ./sanity.config.ts|js
export default defineConfig({
// ... rest of config
unstable_tasks: { enabled: false },
})
New configuration (remove unstable_
):
// ./sanity.config.ts|js
export default defineConfig({
// ... rest of config
- unstable_tasks: { enabled: false },
+ tasks: { enabled: false },
})
Sanity TypeGen improvements
Thanks for all the feedback about Sanity TypeGen so far! This release ships several improvements and bug fixes:
- Sanity Typegen now supports
count
in GROQ projections - TypeGen code (
sanity.types.ts
) is now formatted when a project has a Prettier configuration - The TypeGen search path now includes
src
,app
, andsanity
folders by default - Various bug fixes for type generation
- Fixes an issue where
typegen
command would fail on relative imports - Fixes a bug where we could not extract or validate schema when the
sanity-plugin-mux-input
plugin was installed.
Do continue to give us feedback in #typescript in the community!
🐛 Notable bugfixes
- Fixes ambiguous aria-labels on some Status buttons
- Fixes issue with inline text comments that would include an inline object.
- Fixes toast message for document duplicate action
📓 Full changelog
Author | Message | Commit |
---|---|---|
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6463) | a2faad2 |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.4 (#6460) | 34a1ae6 |
Sindre Gulseth | fix(cli): mock matchMedia window function (#6472) | ea715e8 |
Bjørge Næss | chore: add perf runner to workspace (#6427) | 9af065a |
Sindre Gulseth | fix(typegen): fixes a bug where we imported the wrong relative path (#6457) | e1bd1f0 |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.39 (#6464) | f6af636 |
Sindre Gulseth | feat(typegen): also search for queries in app and sanity folders (#6475) | 03cbb12 |
Sindre Gulseth | chore: upgrade groq-js (#6474) | 68bb282 |
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6476) | 076b2fc |
renovate[bot] | chore(deps): update dependency @sanity/visual-editing to v1.8.15 (#6465) | 2f7674c |
renovate[bot] | chore(lockfile): update dependency @sanity/react-loader to v1.9.14 (#6466) | 9887e7c |
renovate[bot] | chore(lockfile): update dependency date-fns-tz to v2.0.1 (#6467) | 14b4365 |
renovate[bot] | chore(lockfile): update dependency i18next to v23.11.2 (#6468) | 3fcfa42 |
renovate[bot] | chore(lockfile): update dependency zod to v3.23.4 (#6470) | bef170b |
renovate[bot] | chore(lockfile): update dependency next to v14.2.2 (#6469) | cb957a6 |
renovate[bot] | chore(lockfile): update dependency react-focus-lock to v2.12.1 (#6471) | 05a019a |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.6 (#6482) | c903cde |
renovate[bot] | chore(deps): update react monorepo (#6484) | 3c8a329 |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.40 (#6483) | 0163210 |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.12.8 (#6485) | 05aad5c |
renovate[bot] | chore(deps): update react monorepo to ^18.3.0 (#6490) | 144bb21 |
renovate[bot] | chore(lockfile): update dependency @types/react-is to v18.3.0 (#6491) | 2225589 |
Cody Olsen | chore: setup next test that embeds the test studio (#6487) | edefb66 |
Bjørge Næss | fix(test): remove hydrateroot warning test (#6494) | d50a0f1 |
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6493) | c1f9071 |
Rostislav Melkumyan | feat: set print width to 40 (#6068) | 2e24fcd |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.7 (#6496) | 2b840ba |
renovate[bot] | chore(deps): update dependency turbo to ^1.13.3 (#6497) | fc80d2b |
renovate[bot] | chore(lockfile): update dependency @sanity/logos to v2.1.11 (#6498) | 69b3c64 |
renovate[bot] | chore(lockfile): update dependency @sanity/react-loader to v1.9.15 (#6499) | c8b1d5e |
renovate[bot] | chore(deps): update dependency @sanity/visual-editing to v1.8.16 (#6500) | 2dff2bd |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.12.10 (#6501) | 06ef31d |
Herman Wikner | feat(core): implement presence cursors (#6081) | 1522806 |
renovate[bot] | fix(deps): Update react monorepo (#6502) | fa9d145 |
Espen Hovlandsdal | chore(lint): add certain unicorn eslint rules (#6352) | ba83971 |
Espen Hovlandsdal | test: increase timeout for cross-dataset reference test | afea9cf |
Espen Hovlandsdal | chore: fix incorrect path used in workshop story | 61daf0c |
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6506) | 6486e34 |
RitaDias | fix(structure): uncaught error while swapping images in array in PTE (#6399) | c9bfc31 |
renovate[bot] | chore(deps): update dependency @types/react to v18.3.1 (#6507) | 311d722 |
Nina Andal Aarvik | fix(core): change scrollintoview block to be nearest (#6328) | 509757c |
Nina Andal Aarvik | fix(core): set scroll boundary to nearest (#6310) | 0dae0da |
RitaDias | fix(@sanity): issue where hidden unicode characters were bloating document in PTE (#6440) | ffa68ec |
Per-Kristian Nordnes | chore: add codeowners to block-tools | 479e71f |
ecospark[bot] | chore(deps): dedupe pnpm-lock.yaml (#6508) | ff26edd |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.8 (#6509) | 4bb667d |
cngonzalez | feat: use prefersLatestPublished parameter in DocumentPaneProvider (#6486) | 3da55ae |
cngonzalez | fix: prevent looping requests to keyvalue in recent searches (#6480) | 232385e |
Binoy Patel | feat(singletons): add a singleton package exports | 884fca1 |
Binoy Patel | feat(singletons): add eslint rule for boundaries | bfd9a30 |
Binoy Patel | refactor(core): move ConnectorContext to singletons | 3008a1c |
Binoy Patel | refactor(core): move PreviewCardContext to singletons | 30cc592 |
Binoy Patel | refactor(core): move scrollContext to singletons | 5ca1b00 |
Binoy Patel | refactor(core): move ZIndexContext to singletons | d1a1d40 |
Binoy Patel | refactor(core): move DiffContext to singletons | ef08d0a |
Binoy Patel | refactor(core): move DocumentChangeContext to singletons | 0509e58 |
Binoy Patel | refactor(core): move FormBuilderContext to singletons | 0f9cf43 |
Binoy Patel | refactor(core): move DocumentIdContext to singletons | 79343e4 |
Binoy Patel | refactor(core): move FormValueContext to singletons | 2b46b43 |
Binoy Patel | refactor(core): move GetFormValueContext to singletons | 3dc7e62 |
Binoy Patel | refactor(core): move HoveredFieldContext to singletons | dbedca6 |
Binoy Patel | refactor(core): move FieldActionsContext to singletons | c7374f7 |
Binoy Patel | refactor(core): move VirtualizerScrollInstanceContext to singletons | 372774e |
Binoy Patel | refactor(core): move SortableItemIdContext to singletons | ffea136 |
Binoy Patel | refactor(core): move PortableTextMarkersContext to singletons | ed8f318 |
Binoy Patel | refactor(core): move PortableTextMemberItemsContext to singletons | 6325629 |
Binoy Patel | refactor(core): move ReferenceItemRefContext to singletons | a25a30b |
Binoy Patel | refactor(core): move DocumentFieldActionsContext to singletons | 6f08a7d |
Binoy Patel | refactor(core): move FormCallbacksContext to singletons | 2518910 |
Binoy Patel | refactor(core): move PresenceContext to singletons | 6a02f80 |
Binoy Patel | refactor(core): move ReferenceInputOptionsConte... |
v3.39.1
Installation and upgrading
To initiate a new Studio without installing the CLI globally:
npm create sanity@latest
To upgrade a v3 Studio, run this command in its folder:
npm install sanity@latest
🐛 Notable bugfixes
- Disables the new search API introduced in v3.38.0 due to a few discovered issues. We'll re-enable it in a future release.
- Fixes an issue when using the "movie database" template when running
npm create sanity
📓 Full changelog
Author | Message | Commit |
---|---|---|
Espen Hovlandsdal | fix(cli): remove comments from moviedb template, hide location field (#6488) | 80f8daf |
Espen Hovlandsdal | fix(search): revert to old search API for now (#6503) | 8a08212 |
v3.39.0
Install or upgrade Sanity Studio
To initiate a new Sanity Studio project or upgrade an existing one, please refer to our comprehensive guide on Installing and Upgrading Sanity Studio.
If you are updating from a version earlier than 3.37.0, you should also check out this article to ensure your dependencies are up to date.
✨ Highlights
Scheduled Publishing is now part of the core Sanity Studio package
The Scheduled Publishing feature, which up until this release has been available as a plugin for Sanity Studio, has been moved into the core sanity
package and enabled by default. Scheduled Publishing is available on all paid plans and trials.
If you wish to opt out of Scheduled Publishing, you can do so in your Studio configuration:
// sanity.config.ts
export default defineConfig({
// ....
scheduledPublishing: {
enabled: false,
}
)
Go to docs and feature announcement blog post to learn more.
Migrating from the Scheduled Publishing plugin to the new built-in configuration:
If you are already using Scheduled Publishing plugin, the first step is to get rid of it and update your studio to the latest release. If you already updated your studio you might have gotten an alert about this.
Run the following command in your project root to uninstall the plugin:
npm uninstall @sanity/scheduled-publishing
Next, remove the plugin from your studio configuration. Typically you'll find this in ./sanity.config.ts|js
. Find the scheduledPublishing
plugin and do the following changes in your configuration file:
Before:
// sanity.config.ts
import {scheduledPublishing} from '@sanity/scheduled-publishing'
export default defineConfig({
//....
plugins: [
scheduledPublishing({
// e.g. 12/25/2024 6:30 AM
inputDateTimeFormat: 'MM/dd/yyyy h:mm a',
})
]
})
After:
- import {scheduledPublishing} from '@sanity/scheduled-publishing'
export default defineConfig({
// ...
plugins: [
- scheduledPublishing({
- inputDateTimeFormat: 'MM/dd/yyyy h:mm a',
- })
],
+ scheduledPublishing: {
+ enabled: true,
+ inputDateTimeFormat: 'MM/dd/yyyy h:mm a',
+ }
})
🐛 Notable bugfixes
- Fixes a bug that caused negations to be transformed to wildcard search prefixes if they appeared at the end of a search query.
- Improves error handling when attempting to run a migration against invalid project configurations.
- Fixes an issue where a document's validation panel would show a system error message when a field with a validation error was deleted.
- Fixes a bug that caused
_type
to be incorrectly parsed from statements in thefilter
parameter of document lists. - Fixes an issue that sometimes caused the Studio to load indefinitely when visited from a task notification email.
Author | Message | Commit |
---|---|---|
cngonzalez | fix: refactor checkoutPair to allow mutations for liveEdit documents (#6393) | f6ae402 |
Ash | fix(core): prevent transformation of negation tokens into wildcard prefix tokens (#6396) | f28ef7e |
Bjørge Næss | fix(migrate): forward possible API error response to error thrown for non 2xx (#6387) | 9316475 |
Rico Kahler | refactor(tasks, comments): core plugins (#6333) | 3c917d2 |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.34 (#6402) | 5fc2775 |
renovate[bot] | chore(lockfile): update dependency @sanity/react-loader to v1.9.12 (#6405) | d3e924e |
renovate[bot] | chore(lockfile): update dependency @sanity/preview-url-secret to v1.6.9 (#6404) | 4c6f1e2 |
renovate[bot] | chore(deps): update dependency @sanity/visual-editing to v1.8.12 (#6403) | 6802d29 |
renovate[bot] | fix(deps): update dependency @sanity/client to ^6.15.17 (#6406) | 82e505f |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.12.5 (#6407) | 98bb233 |
renovate[bot] | fix(deps): update dependency @sanity/ui to ^2.1.4 (#6408) | 59cad0b |
renovate[bot] | fix(deps): update dependency get-it to ^8.4.26 (#6409) | 159f542 |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.7.1 (#6410) | e5252e1 |
Pedro Bonamin | fix(codeowners): update codeowners for tasks and comments (#6414) | d286050 |
Rico Kahler | test: add sanity-plugin-hotspot-array (#6401) | d591b18 |
Binoy Patel | fix: TS import paths importing index.ts twice incorrectly (#6415) | 6066e92 |
Pedro Bonamin | fix(tasks): update tasks upsell provider client version (#6413) | 61a887c |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.0 (#6421) | 72e34f8 |
renovate[bot] | chore(lockfile): update dependency zod to v3.22.5 (#6420) | 5c7352c |
Cody Olsen | refactor: use @sanity/prettier-config (#6423) |
e75e390 |
renovate[bot] | chore(deps): update dependency recast to ^0.23.6 (#6422) | 2b30eb6 |
Bjørge Næss | chore: turn server actions on by default in test-studio (#6425) | dd61ead |
RitaDias | fix(@sanity): issue where hidden unicode characters were bloating document in PTE (#6424) | ce46077 |
Per-Kristian Nordnes | Revert "fix(@sanity): issue where hidden unicode characters were bloating document in PTE (#6424)" | cac48bb |
Per-Kristian Nordnes | fix(portable-text-editor): support collapsed range decorations (#6428) | 2d02d62 |
renovate[bot] | fix(deps): update dependency get-it to ^8.4.27 (#6434) | 5fb7ddf |
renovate[bot] | chore(deps): update dependency @sanity/visual-editing to v1.8.13 (#6432) | f4e482d |
renovate[bot] | fix(deps): update dependency @sanity/client to ^6.15.19 (#6433) | 4e32715 |
renovate[bot] | chore(deps): update dependency @sanity/pkg-utils to v6.8.1 (#6431) | 26b8c76 |
renovate[bot] | chore(lockfile): update dependency @sanity/react-loader to v1.9.13 (#6436) | 846cf68 |
renovate[bot] | chore(lockfile): update dependency @sanity/preview-url-secret to v1.6.10 (#6435) | 7b20162 |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.12.6 (#6437) | 3eb44db |
renovate[bot] | chore(deps): update dependency @sanity/visual-editing to v1.8.14 (#6438) | 177b4b5 |
renovate[bot] | chore(deps): update dependency @sanity/tsdoc to v1.0.36 (#6444) | 8f05301 |
renovate[bot] | chore(deps): update peter-evans/create-pull-request digest to 9153d83 (#6443) | 035c59d |
Tommy Petty | fix(structure): update to not crash validation panel if unable to get path title (#6417) | d5f8fb6 |
renovate[bot] | chore(lockfile): update dependency @sanity/eventsource to v5.0.2 (#6445) | b8f3666 |
Herman Wikner | fix(comments): conditional rendering of CommentsProvider (#6412) |
379396e |
Per-Kristian Nordnes | perf(portable-text-editor): improve range deocration render perf (#6441) | c9b1ebb |
Rico Kahler | fix(structure): resolve static types in document list filters (#6439) | 048ce0b |
Rico Kahler | fix(core): fix autocomplete for defineType in VSCode (#6447) |
3ff78f6 |
Ash | test(e2e): fix unawaited assertion (#6442) | 37b6291 |
renovate[bot] | fix(deps): update dependency @sanity/presentation to v1.12.7 (#6448) | f9634f4 |
Pedro Bonamin | fix(tasks): update taskURL for notification target (#6395) | 7c8cebf |
Sindre Gulseth | fix(typegen): fixes a case where we track ratio as NaN (#6309) | b0f405e |
renovate[bot] | fix(deps): update dependency @sanity/client to ^6.15.20 (#6461) | d7f1067 |
Cody Olsen | chore: remove _internalBrowser from typesVersions (#6451) |
c1f1fdf |
Rico Kahler | chore(deps): bump @sanity/export (#6462) | 348a3a9 |
Pedro Bonamin | feat(scheduled-publishing): move scheduled publishing into core. (#6416) | a6fc5af |