Skip to content

chore(deps): update app dependencies to v4 - #1780

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/major-4-app-dependencies
Open

chore(deps): update app dependencies to v4#1780
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/major-4-app-dependencies

Conversation

@renovate

@renovate renovate Bot commented Jan 26, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
@sanity/icons (source) 3.7.44.1.0 age confidence
@sanity/ui (source) 3.0.144.0.0 age confidence
@sanity/vercel-protection-bypass (source) 2.0.14.0.6 age confidence
@sanity/visual-editing (source) 3.0.44.0.3 age confidence

Release Notes

sanity-io/ui (@​sanity/icons)

v4.1.0

Minor Changes
  • #​182 e7538d4 Thanks @​stipsan! - Every icon is now available on its own export path, e.g. import {RocketIcon} from '@sanity/icons/Rocket', letting userland opt in to smaller bundles and faster treeshaking. Each subpath exposes the icon both as a named export (identical to the barrel export) and as the default export, so React.lazy(() => import('@sanity/icons/Rocket')) works out of the box. Importing individual icons from the root barrel (import {RocketIcon} from '@sanity/icons') still works but is now marked @deprecated, pointing to the per-icon subpath to avoid barrel file performance issues.

v4.0.0

Major Changes
  • #​200 26b9248 Thanks @​stipsan! - Drop CommonJS support and require Node.js >=22.12

    @sanity/icons is now ESM-only. The require export condition and the CommonJS build output (./dist/index.cjs) have been removed, so the package must be consumed via ESM import. The minimum supported Node.js version has been raised to >=22.12 to match sanity.

  • #​201 01e3807 Thanks @​stipsan! - Drop React 18 support — React 19 is now required.

    Icon components no longer use forwardRef. Refs are now accepted as a regular prop (typed via React.ComponentPropsWithRef), following React 19's ref-as-prop model. The react peer dependency range is now ^19, and the exported IconComponent type has changed accordingly.

v3.8.0

Minor Changes
Patch Changes

v3.7.7

Patch Changes
  • #​181 5b9d2cb Thanks @​stipsan! - Bumped @testing-library/react, @types/node, and @types/react devDependencies to their latest versions.

v3.7.6

Bug Fixes
  • enable trusted publishing (925545b)
sanity-io/ui (@​sanity/ui)

v4.0.0

Compare Source

Major Changes
  • #​2505 6069d4e Thanks @​stipsan! - @sanity/ui 4.0. The full upgrade procedure is in the migration guide. TypeScript walks you through most of it: every removed or moved API stays in the types as a @deprecated tombstone whose message names its replacement.

    ESM-only. Node.js 22.12+ required.

    • The CommonJS build (.cjs / .d.cts) and the require export condition are removed — the package now ships ESM only.
    • Node.js below 22.12 is no longer supported (engines is now >=22.12, matching sanity).
    • TypeScript needs an exports-aware moduleResolution (node16, nodenext, or bundler): v4 resolves everything through package exports and no longer ships typesVersions, so the legacy node (node10) mode cannot resolve the subpath entry points' types.
    • What to do: run Node.js 22.12 or later — that's it. Modern Node supports require(esm), so require('@sanity/ui') keeps working; things only break if the Node.js version is too old.

    React 19.2+ required.

    • Peer dependency ranges are tightened to react: ^19.2 and react-dom: ^19.2. The 19.2 floor is set by the new <Activity> component, which shipped in React 19.2.0 and which v4 uses to keep closed Tooltip and Popover content mounted.
    • Components are compiled with the React Compiler targeting '19', which uses React's built-in runtime — the react-compiler-runtime dependency is dropped.
    • What to do: upgrade react and react-dom to 19.2 or later. No code changes needed.

    New required import: @sanity/ui/styles.css.

    Static styles (the ones that don't depend on theme or props) are now extracted into a stylesheet at build time instead of being injected at runtime. The stylesheet is not loaded automatically — add this import once, next to where the app renders <ThemeProvider>:

    import "@sanity/ui/styles.css";

    Without it, SrOnly, Spinner and internal text-overflow styling render unstyled. These components have moved off styled-components — more components follow in future 4.x minors, and UI5 ships without styled-components or any other runtime CSS-in-JS.

    Heavy components moved out of the root entry point.

    Importing @sanity/ui no longer pulls in @floating-ui/react-dom, motion or react-refractor — even without bundler treeshaking. What moved where:

    • @sanity/ui/toastToast, ToastProvider, useToast (motion)
    • @sanity/ui/popoverPopover (@​floating-ui/react-dom, motion)
    • @sanity/ui/tooltipTooltip, TooltipDelayGroupProvider, useTooltipDelayGroup (@​floating-ui/react-dom, motion)
    • @sanity/ui/menuMenu, MenuButton, MenuDivider, MenuGroup, MenuItem (renders Popover)
    • @sanity/ui/autocompleteAutocomplete (renders Popover)
    • @sanity/ui/breadcrumbsBreadcrumbs (renders Popover)
    • @sanity/ui/codeCode (lazy-loads react-refractor)

    Prop, context and message types moved along with their components (PopoverProps, ToastParams, MenuItemProps, AutocompleteState, TooltipDelayGroupContextValue, …). Update the imports:

    -import {MenuButton, ToastProvider, useToast} from '@sanity/ui'
    +import {MenuButton} from '@sanity/ui/menu'
    +import {ToastProvider, useToast} from '@sanity/ui/toast'

    Also part of this change: ErrorBoundary renders a plain <pre><code> instead of the Code primitive, keeping the root entry free of the react-refractor module graph.

    Deprecated props, hooks, and components are removed.

    Removed props stay on the public types as @deprecated never, so you get the migration message instead of a bare "does not exist" error. The removed hooks and ConditionalWrapper are still exported but throw when called. What to replace:

    • spacegap
    • Grid columns / rows / column* / row*gridTemplateColumns / gridTemplateRows / gridColumn* / gridRow*
    • Menu focusFirst / focusLastshouldFocus
    • MenuButton top-level popover props → popover={{…}}
    • Popover boundaryElementfloatingBoundary / referenceBoundary (and BoundaryElementProvider for max-width / constrainSize)
    • Tooltip allowedAutoPlacementsfallbackPlacements
    • useClickOutsideuseClickOutsideEvent
    • useElementRectuseElementSize
    • useForwardedRefuseRef + useImperativeHandle
    • useArrayProp(value)Array.isArray(value) ? value : [value]
    • ConditionalWrapper → inline the conditional wrapping logic

    The private @sanity/ui/_visual-editing entry point is removed.

    Import from @sanity/ui instead — except the moved components (Menu, MenuDivider, MenuGroup, MenuItem, Popover), which now live on @sanity/ui/menu and @sanity/ui/popover. The slim subset is no longer needed: displayName side effects are gone, so unused components tree-shake out of consuming bundles.

    The @juggle/resize-observer polyfill is removed — the native ResizeObserver is used directly.

    The internal _ResizeObserver export is gone. If you imported it, use the global ResizeObserver instead.

    Tooltip and Popover keep closed content mounted with React's <Activity>.

    • Internal state is preserved and hidden content pre-renders while closed.
    • With animate enabled, hiding is deferred until exit animations finish (via AnimateActivity, vendored from Motion).
    • Watch out: popovers with recursive content must gate the recursion on open — otherwise they render an infinitely deep hidden tree.

    All components are plain function components — ref is a regular prop (React 19 semantics).

    Refs keep working exactly as before. The one observable change: components no longer pass react-is checks such as isForwardRef.

v3.5.2

Compare Source

Patch Changes
  • #​2637 df34007 Thanks @​squiggler-app! - fix(deps): update dependency vite to ^8.2.1

  • #​2609 c3726c9 Thanks @​stipsan! - fix(deps): update dependency motion to ^13.0.0

    Motion 13 no longer loads the optional @emotion/is-prop-valid dependency to decide which props a
    motion component forwards to the DOM; it now only does so when an isValidProp function is passed
    to MotionConfig. @sanity/ui composes motion the way the upgrade guide recommends
    (motion.create(StyledComponent), never styled(motion.div)), so its own components are unaffected:
    for custom components motion still forwards every non-motion prop and lets the styled component
    filter, exactly as before. Apps that wrap a DOM-level motion component in a CSS-in-JS factory —
    styled(motion.div) — may need to pass isValidProp to MotionConfig, use transient props, or
    reverse the composition.

  • #​2632 5207572 Thanks @​stipsan! - fix(deps): update dependency styled-components to ^6.5.0

    styled-components 6.5 tightens polymorphic call-site and style prop typing. Adjust @sanity/ui for the new checks: narrow as at Box/VirtualList call sites to avoid TS2589, align Card's $tone/$muted with the values actually passed, and drop now-unnecessary assertions on motion.create(Card) wrappers.

v3.5.1

Compare Source

Patch Changes

v3.5.0

Compare Source

Minor Changes
  • #​2457 834c3d6 Thanks @​stipsan! - TreeItem accepts a new linkProps prop with additional props for the link element that is rendered when href is set — for example next/link's prefetch: <TreeItem linkAs={Link} linkProps={{prefetch: true}} href="…">. Props controlled by TreeItem itself (href, role, tabIndex, aria-expanded and the ref) take precedence.

  • #​2440 e72e56b Thanks @​stipsan! - Ship a 'use client' directive on the @sanity/ui and @sanity/ui/_visual-editing entrypoints so React Compiler output loads correctly under Next.js App Router / RSC. Components can now be rendered directly from Server Components without a hand-written client wrapper. @sanity/ui/theme is left unmarked — it remains a pure theme-token export safe for Server Components.

Patch Changes
  • #​2461 cf1a9d0 Thanks @​stipsan! - fix: replace deprecated external APIs instead of suppressing them

    • Toast now orchestrates its child animations with delayChildren: stagger(interval) instead of motion's deprecated staggerChildren.
    • useForwardedRef and the internal menu controller type refs as RefObject instead of React's deprecated MutableRefObject (identical shape, so no API change).
    • Toast and Autocomplete pass gap instead of the deprecated space prop internally.
  • #​2457 834c3d6 Thanks @​stipsan! - TreeItem now renders custom link components passed via linkAs correctly. Previously the internal styled wrapper forwarded a stray as="a" prop to the custom component — breaking components like next/link, which interpret as as a URL override — and dropped the display: block/text-decoration: none styles from the rendered link. <TreeItem linkAs={Link} href="…"> now behaves like <Button as={Link} href="…">.

v3.4.5

Compare Source

Patch Changes

v3.4.4

Compare Source

Patch Changes
  • #​2408 3989592 Thanks @​stipsan! - The package now declares "type": "module". It continues to ship both ESM (import) and CJS (require) builds with identical entry points and named exports — only the file extensions in dist changed: the ESM build is now .js/.d.ts (was .mjs/.d.mts) and the CJS build is now .cjs/.d.cts (was .js/.d.ts).

  • Updated dependencies [3989592]:

v3.4.3

Compare Source

Patch Changes
  • #​2435 f3638b5 Thanks @​stipsan! - Remove the displayName assignments that followed every component definition. As top-level Component.displayName = '…' statements in the published dist they were side effects that pinned every component into consuming bundles, defeating tree-shaking of unused components (see sanity-io/visual-editing#3535 for the kind of workaround this forced downstream). They were also redundant: every component is declared as a named function (e.g. forwardRef(function Button(…) {…})), so React DevTools derives the exact same name from Function.name — the build now passes keepNames so those function names survive into the dist.

    If you profile or debug production builds with React DevTools and want component names to survive your own app's minification, configure the bundler to keep identifier names instead of relying on displayName, e.g. in Vite:

    export default defineConfig({
      // Allows running React Profiler and better debugging
      resolve: {
        alias: { "react-dom/client": require.resolve("react-dom/profiling") },
      },
      build: {
        // Enable production source maps to easier debug deployed test studios
        sourcemap: true,
        rolldownOptions: {
          output: {
            // Disabling `mangle` (while keeping compression and whitespace removal) ensures that
            // the React DevTools components inspector has readable component names.
            // This overrides the `build.minify: 'oxc'` default set by `sanity build`, replacing
            // `esbuild: {minifyIdentifiers: false}` which the rolldown-powered Vite silently ignores.
            minify: { compress: true, mangle: false, codegen: true },
          },
        },
      },
    });

v3.4.2

Compare Source

Patch Changes

v3.4.1

Compare Source

Patch Changes

v3.4.0

Compare Source

Minor Changes
  • #​2410 e151988 Thanks @​stipsan! - update dependency @​sanity/icons to ^5.2.0

    @sanity/ui now imports every icon from its per-icon export path (e.g. @sanity/icons/Close) instead of the root barrel, so only the handful of icons the components actually render are pulled into your bundle.

Patch Changes

v3.3.6

Compare Source

Patch Changes

v3.3.5

Compare Source

Patch Changes
  • #​2275 6546a45 Thanks @​stipsan! - fix(build): restore named exports in dist/theme.d.ts so import {buildTheme} from '@sanity/ui/theme' type-checks again (TS2460). Shared chunks are now emitted to dist/_chunks/ so they can no longer take an entry point's .d.ts filename.

v3.3.4

Compare Source

Patch Changes
  • #​2267 5553766 Thanks @​stipsan! - fix(deps): update dependency csstype to ^3.2.3, and use regular styled-components instead of the @sanity/styled-components fork for development and testing

v3.3.3

Compare Source

Patch Changes

v3.3.2

Compare Source

Patch Changes
  • #​2220 edb7248 Thanks @​stipsan! - The package is now built with tsdown. It continues to ship both CJS (require) and ESM (import) builds with identical entry points and named exports.

v3.3.1

Compare Source

Patch Changes

v3.3.0

Compare Source

Features

v3.2.0

Compare Source

Features

v3.1.14

Compare Source

Bug Fixes

v3.1.13

Compare Source

Bug Fixes

v3.1.12

Compare Source

Bug Fixes

v3.1.11

Compare Source

Bug Fixes
  • deps: replace framer-motion with motion/react (cc49ab6)

v3.1.10

Compare Source

Bug Fixes

v3.1.9

Compare Source

Bug Fixes
  • deps: update dependency framer-motion to ^12.23.24 (main) (#​2128) (4ac4680)

v3.1.8

Compare Source

Bug Fixes
  • deps: update dependency framer-motion to ^12.23.22 (main) (#​2109) (2d605cf)

v3.1.7

Compare Source

Bug Fixes
  • deps: update dependency framer-motion to ^12.23.21 (main) (#​2101) (0ee41d2)

v3.1.6

Compare Source

Bug Fixes
  • deps: update dependency framer-motion to ^12.23.19 (main) (#​2097) (43a8ee2)

v3.1.5

Compare Source

Bug Fixes
  • deps: update dependency framer-motion to ^12.23.18 (main) (#​2084) (cd740ab)

v3.1.4

Compare Source

Bug Fixes
  • deps: update dependency framer-motion to ^12.23.16 (main) (#​2080) (11bc8d0)

v3.1.3

Compare Source

Bug Fixes

v3.1.2

Compare Source

Bug Fixes
  • deps: update dependency framer-motion to ^12.23.15 (main) (#​2064) (ee0ca00)

v3.1.1

Compare Source

Bug Fixes

v3.1.0

Compare Source

Features
sanity-io/plugins (@​sanity/vercel-protection-bypass)

v4.0.6

Compare Source

Patch Changes

v4.0.5

Compare Source

Patch Changes

v4.0.4

Compare Source

Patch Changes

v4.0.3

Compare Source

Patch Changes

v4.0.2

Compare Source

Patch Changes

v4.0.1

Compare Source

Patch Changes

v4.0.0

Compare Source

Major Changes

v3.1.0

Compare Source

Minor Changes
Patch Changes

v3.0.0

Compare Source

Major Changes
Patch Changes

v2.1.1

Patch Changes

v2.1.0

Features

v2.0.2

Dependencies
sanity-io/visual-editing (@​sanity/visual-editing)

v4.0.3

Bug Fixes

v4.0.2

Dependencies

v4.0.1

Dependencies

v4.0.0

⚠ BREAKING CHANGES
Bug Fixes

v3.2.4

Bug Fixes
  • if in frame open links in same frame (ee88227)

v3.2.3

Bug Fixes

v3.2.2

Bug Fixes
Dependencies

v3.2.1

Bug Fixes
  • comlink has moved to a new repo (8ee9b2d)

v3.2.0

Features
Dependencies

v3.1.0

Features

v3.0.5

Bug Fixes
Dependencies

Configuration

📅 Schedule: (UTC)

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

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates 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

@vercel

vercel Bot commented Jan 26, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
preview-kit-next-app-router Ready Ready Preview Aug 10, 2026 11:43am
preview-kit-next-pages-router Ready Ready Preview Aug 10, 2026 11:43am
preview-kit-remix Ready Ready Preview Aug 10, 2026 11:43am
preview-kit-test-studio Error Error Aug 10, 2026 11:43am

Request Review

@socket-security

socket-security Bot commented Jan 26, 2026

Copy link
Copy Markdown

@renovate
renovate Bot force-pushed the renovate/major-4-app-dependencies branch from 26ce19b to 02a2750 Compare January 29, 2026 13:02
@renovate
renovate Bot force-pushed the renovate/major-4-app-dependencies branch from 02a2750 to 5da9f70 Compare February 2, 2026 16:35
@renovate
renovate Bot force-pushed the renovate/major-4-app-dependencies branch from 5da9f70 to 047ee4a Compare February 12, 2026 14:49
@renovate
renovate Bot force-pushed the renovate/major-4-app-dependencies branch from 047ee4a to df3e938 Compare February 17, 2026 18:33
@renovate
renovate Bot force-pushed the renovate/major-4-app-dependencies branch from 1d31919 to f82dd6d Compare April 1, 2026 16:02
@renovate
renovate Bot force-pushed the renovate/major-4-app-dependencies branch from f82dd6d to f82aea9 Compare April 29, 2026 19:55
@renovate
renovate Bot force-pushed the renovate/major-4-app-dependencies branch from f82aea9 to 7203c8a Compare May 12, 2026 15:37
@renovate renovate Bot changed the title chore(deps): update app dependencies to v4 (major) chore(deps): update app dependencies to v4 May 12, 2026
@renovate
renovate Bot force-pushed the renovate/major-4-app-dependencies branch from 7203c8a to 933eed0 Compare May 28, 2026 22:12
@renovate
renovate Bot force-pushed the renovate/major-4-app-dependencies branch from 933eed0 to 8467e17 Compare June 2, 2026 01:19
@renovate
renovate Bot force-pushed the renovate/major-4-app-dependencies branch from 8467e17 to d821a92 Compare June 11, 2026 12:58
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.

0 participants