diff --git a/.gitignore b/.gitignore index b8753d48c..1e84cb7b3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ dist/ storybook-static/ next-env.d.ts +packages/icons-react/icons.tsx # editors .idea/ @@ -17,5 +18,4 @@ next-env.d.ts # Secrets .FIGMA_TOKEN -.vercel -packages/icons-react/icons.tsx \ No newline at end of file +.env.local diff --git a/apps/docs/.env.example b/apps/docs/.env.example new file mode 100644 index 000000000..0581ae91a --- /dev/null +++ b/apps/docs/.env.example @@ -0,0 +1,2 @@ +# Creata a viewer token at sanity.io/manage +SANITY_VIEWER_TOKEN= diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore index 841efc183..ec44b59aa 100644 --- a/apps/docs/.gitignore +++ b/apps/docs/.gitignore @@ -4,3 +4,6 @@ public/resources/icons/ public/storybook component-props.ts +docgen.ts + +.env diff --git a/apps/docs/app/routes/_docs.tsx b/apps/docs/app/routes/_docs.tsx new file mode 100644 index 000000000..975b29f5a --- /dev/null +++ b/apps/docs/app/routes/_docs.tsx @@ -0,0 +1,97 @@ +import { previewMiddleware } from '@/lib/preview-middleware'; +import { sanityFetch } from '@/lib/sanity'; +import { VisualEditing } from '@/lib/visual-editing'; +import appCss from '@/styles/app.css?url'; +import { DisablePreviewMode } from '@/ui/disable-preview-mode'; +import { Footer } from '@/ui/footer'; +import { MainNav } from '@/ui/main-nav'; +import { GrunnmurenProvider } from '@obosbbl/grunnmuren-react'; +import { + type NavigateOptions, + Outlet, + ScrollRestoration, + type ToOptions, + createFileRoute, + useRouter, +} from '@tanstack/react-router'; +import { createServerFn } from '@tanstack/start'; +import { defineQuery } from 'groq'; + +const COMPONENTS_NAVIGATION_QUERY = defineQuery( + // make sure the slug is always a string so we don't have add fallback value in code just to make TypeScript happy + `*[_type == "component"]{ _id, name, 'slug': coalesce(slug.current, '')} | order(name asc)`, +); + +const checkIsPreview = createServerFn({ method: 'GET' }) + .middleware([previewMiddleware]) + .handler(({ context }) => { + return context.previewMode; + }); + +// This is the shared layout for all the Grunnmuren docs pages that are "public", ie not the Sanity studio +export const Route = createFileRoute('/_docs')({ + component: RootLayout, + head: () => ({ + links: [{ rel: 'stylesheet', href: appCss }], + meta: [ + { + title: "Grunnmuren - OBOS' Design System", + }, + ], + }), + beforeLoad: async () => { + const isPreview = await checkIsPreview(); + return { isPreview }; + }, + loader: async ({ context }) => { + return { + componentsNavItems: ( + await sanityFetch({ query: COMPONENTS_NAVIGATION_QUERY }) + ).data, + isPreview: context.isPreview, + }; + }, +}); + +function RootLayout() { + const router = useRouter(); + const { isPreview } = Route.useLoaderData(); + + return ( + <> + router.navigate({ to, ...options })} + useHref={(to) => router.buildLocation({ to }).href} + > + {isPreview && ( + <> + + + + )} +
+
+
+ +
+
+
+ +
+
+ + + ); +} + +// See comments on GrunnmurenProvider in +declare module 'react-aria-components' { + interface RouterConfig { + href: ToOptions['to']; + routerOptions: Omit; + } +} diff --git a/apps/docs/app/routes/_docs/komponenter/$slug.tsx b/apps/docs/app/routes/_docs/komponenter/$slug.tsx new file mode 100644 index 000000000..b04ff96bf --- /dev/null +++ b/apps/docs/app/routes/_docs/komponenter/$slug.tsx @@ -0,0 +1,54 @@ +import * as badgeExamples from '@/examples/badge'; +import * as buttonExamples from '@/examples/button'; +import { sanityFetch } from '@/lib/sanity.server'; +import { Content } from '@/ui/content'; +import { PropsTable } from '@/ui/props-table'; +import { createFileRoute, notFound } from '@tanstack/react-router'; +import * as props from 'docgen'; +import { defineQuery } from 'groq'; + +const COMPONENT_QUERY = defineQuery( + `*[_type == "component" && slug.current == $slug][0]{ content, "name": coalesce(name, '') }`, +); + +export const Route = createFileRoute('/_docs/komponenter/$slug')({ + component: Page, + loader: async ({ params, context }) => { + console.log('context in component route', context); + const res = await sanityFetch({ + data: { + query: COMPONENT_QUERY, + params: { slug: params.slug }, + }, + }); + + if (res.data == null) { + throw notFound(); + } + + const componentName = res.data.name; + const componentProps = props[componentName].props; + + return { data: res.data, componentProps }; + }, +}); + +function Page() { + const { data, componentProps } = Route.useLoaderData(); + + // @ts-expect-error this works for now until we figure how to make the examples work better with Sanity + const { scope, examples } = { + Button: buttonExamples, + Badge: badgeExamples, + }[data.name]; + + return ( + <> +

{data.name}

+ + + + + + ); +} diff --git a/apps/docs/app/routes/api/preview-mode/disable.ts b/apps/docs/app/routes/api/preview-mode/disable.ts new file mode 100644 index 000000000..3e393cd70 --- /dev/null +++ b/apps/docs/app/routes/api/preview-mode/disable.ts @@ -0,0 +1,14 @@ +import { createAPIFileRoute } from '@tanstack/start/api'; +import { deleteCookie, sendRedirect } from 'vinxi/http'; + +export const APIRoute = createAPIFileRoute('/api/preview-mode/disable')({ + GET: () => { + deleteCookie('__sanity_preview', { + path: '/', + secure: import.meta.env.PROD, + httpOnly: true, + sameSite: 'strict', + }); + sendRedirect('/'); + }, +}); diff --git a/apps/docs/app/routes/api/preview-mode/enable.ts b/apps/docs/app/routes/api/preview-mode/enable.ts new file mode 100644 index 000000000..d1e719a66 --- /dev/null +++ b/apps/docs/app/routes/api/preview-mode/enable.ts @@ -0,0 +1,37 @@ +import { randomBytes } from 'node:crypto'; +import { client } from '@/lib/sanity'; +import { validatePreviewUrl } from '@sanity/preview-url-secret'; +import { createAPIFileRoute } from '@tanstack/start/api'; +import { SanityClient } from 'sanity'; +import { sendRedirect, setCookie } from 'vinxi/http'; + +export const APIRoute = createAPIFileRoute('/api/preview-mode/enable')({ + GET: async ({ request }) => { + if (!process.env.SANITY_VIEWER_TOKEN) { + throw new Response('Preview mode missing token', { status: 401 }); + } + + const clientWithToken = client.withConfig({ + token: process.env.SANITY_VIEWER_TOKEN, + }); + + const { isValid, redirectTo = '/' } = await validatePreviewUrl( + clientWithToken, + request.url, + ); + + if (!isValid) { + throw new Response('Invalid secret', { status: 401 }); + } + + // we can use sameSite: 'strict' because we're running an embedded studio + // setCookie('__sanity_preview', randomBytes(16).toString('hex'), { + setCookie('__sanity_preview', 'true', { + path: '/', + secure: import.meta.env.PROD, + httpOnly: true, + sameSite: 'strict', + }); + sendRedirect(redirectTo); + }, +}); diff --git a/apps/docs/dktp/main.yml b/apps/docs/dktp/main.yml index f873e4973..c9fe44e54 100644 --- a/apps/docs/dktp/main.yml +++ b/apps/docs/dktp/main.yml @@ -16,6 +16,9 @@ properties: containers: - image: dktprodacr.azurecr.io/grunnmuren/docs:${IMAGE_TAG} name: docs + env: + - name: SANITY_VIEWER_TOKEN + secretRef: ${todo} resources: cpu: 0.25 memory: 0.5Gi diff --git a/apps/docs/package.json b/apps/docs/package.json index 7ea096060..4caeced5c 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -29,8 +29,10 @@ "@sanity/client": "7.12.1", "@sanity/code-input": "6.0.3", "@sanity/image-url": "^1.2.0", + "@sanity/preview-url-secret": "2.1.15", "@sanity/table": "2.0.0", "@sanity/vision": "4.14.2", + "@sanity/visual-editing": "4.0.0", "@tanstack/nitro-v2-vite-plugin": "1.133.19", "@tanstack/react-router": "1.135.0", "@tanstack/react-start": "1.135.0", diff --git a/apps/docs/sanity.config.ts b/apps/docs/sanity.config.ts index 34f6c295b..505d12e63 100644 --- a/apps/docs/sanity.config.ts +++ b/apps/docs/sanity.config.ts @@ -3,6 +3,7 @@ import { codeInput } from '@sanity/code-input'; import { table } from '@sanity/table'; import { visionTool } from '@sanity/vision'; import { defineConfig } from 'sanity'; +import { defineDocuments, presentationTool } from 'sanity/presentation'; import { structureTool } from 'sanity/structure'; import { schemaTypes } from './studio/schema-types'; @@ -70,6 +71,22 @@ export default defineConfig({ visionTool(), codeInput(), table(), + presentationTool({ + previewUrl: { + previewMode: { + enable: '/api/preview-mode/enable', + disable: '/api/preview-mode/disable', + }, + }, + resolve: { + mainDocuments: defineDocuments([ + { + route: '/komponenter/:slug', + filter: `_type == "component" && slug.current == $slug`, + }, + ]), + }, + }), ], schema: { types: schemaTypes, diff --git a/apps/docs/src/lib/preview-middleware.ts b/apps/docs/src/lib/preview-middleware.ts new file mode 100644 index 000000000..0870bda75 --- /dev/null +++ b/apps/docs/src/lib/preview-middleware.ts @@ -0,0 +1,12 @@ +import { createMiddleware } from '@tanstack/start'; +import { getCookie } from 'vinxi/http'; + +export const previewMiddleware = createMiddleware().server(({ next }) => { + const isPreview = getCookie('__sanity_preview') === 'true'; + console.log('middleware', { isPreview }); + return next({ + context: { + previewMode: isPreview, + }, + }); +}); diff --git a/apps/docs/src/lib/sanity.server.ts b/apps/docs/src/lib/sanity.server.ts new file mode 100644 index 000000000..e9df71aec --- /dev/null +++ b/apps/docs/src/lib/sanity.server.ts @@ -0,0 +1,22 @@ +import type { QueryParams } from '@sanity/client'; +import { createServerFn } from '@tanstack/start'; +import { previewMiddleware } from './preview-middleware'; +import { sanityFetch as _sanityFetch, client } from './sanity'; + +export const sanityFetch = createServerFn({ method: 'GET' }) + .middleware([previewMiddleware]) + .validator((data: { query: string; params: QueryParams }) => data) + .handler(async ({ data, context }) => { + const { query, params } = data; + + if (context.previewMode) { + const previewClient = client.withConfig({ + perspective: 'previewDrafts', + token: process.env.SANITY_VIEWER_TOKEN, // Needed for accessing previewDrafts perspective + useCdn: false, // the previewDrafts perspective requires this to be `false + }); + return _sanityFetch({ query, params, client: previewClient }); + } + + return _sanityFetch({ query, params }); + }); diff --git a/apps/docs/src/lib/sanity.ts b/apps/docs/src/lib/sanity.ts index 62117192a..405c0a6d3 100644 --- a/apps/docs/src/lib/sanity.ts +++ b/apps/docs/src/lib/sanity.ts @@ -5,17 +5,20 @@ export const client = createClient({ dataset: 'grunnmuren', apiVersion: '2024-09-18', useCdn: true, + perspective: 'published', }); export async function sanityFetch({ query, params = {}, + client: _client = client, }: { query: QueryString; params?: QueryParams; + client?: typeof client; }) { // Not sure what's happening here, but I need to set filterReponse to false to get the data as an array? - const { result } = await client.fetch(query, params, { + const { result } = await _client.fetch(query, params, { filterResponse: false, }); diff --git a/apps/docs/src/lib/visual-editing.ts b/apps/docs/src/lib/visual-editing.ts new file mode 100644 index 000000000..3ec4ad795 --- /dev/null +++ b/apps/docs/src/lib/visual-editing.ts @@ -0,0 +1,41 @@ +import { enableVisualEditing } from '@sanity/visual-editing' +import { useNavigate, useRouter } from '@tanstack/react-router'; +import { useEffect } from 'react' + +export function VisualEditing() { + const router = useRouter(); + + + useEffect(() => { + const disable = enableVisualEditing({ + history: { + // subscribe: (_navigate) => { + // router.history.subscribe + // }, + // subscribe: (_navigate) => { + // }, + // subscribe: (_navigate) => { + // setNavigate(() => _navigate) + // return () => setNavigate(undefined) + // }, + update: (update) => { + console.log(update); + switch (update.type) { + case 'push': + router.history.push(update.url); + break; + case 'replace': + router.history.replace(update.url); + break; + case 'pop': + router.history.back(); + break; + } + }, + } + }) + + }, [router]); + + return null; +} diff --git a/apps/docs/src/lib/visual-editing.tsx b/apps/docs/src/lib/visual-editing.tsx new file mode 100644 index 000000000..de178fc64 --- /dev/null +++ b/apps/docs/src/lib/visual-editing.tsx @@ -0,0 +1,57 @@ +import { + type HistoryAdapterNavigate, + enableVisualEditing, +} from '@sanity/visual-editing'; +import { useNavigate, useRouter } from '@tanstack/react-router'; +import { useEffect, useState } from 'react'; + +export function VisualEditing() { + const router = useRouter(); + const [navigate, setNavigate] = useState< + HistoryAdapterNavigate | undefined + >(); + + useEffect(() => { + const disable = enableVisualEditing({ + history: { + subscribe: (_navigate) => { + console.log('subscribe'); + setNavigate(() => { + _navigate({ type: 'replace', url: router.state.location.href }); + return _navigate; + }); + return () => setNavigate(undefined); + }, + update: (update) => { + console.log('update', update); + switch (update.type) { + case 'push': + router.history.push(update.url); + break; + case 'replace': + router.history.replace(update.url); + break; + case 'pop': + router.history.back(); + break; + } + }, + }, + }); + + return disable; + }, [router]); + + useEffect(() => { + if (navigate) { + const unsubscribe = router.subscribe('onResolved', (evt) => { + console.log(evt); + navigate({ type: 'push', url: evt.toLocation.href }); + }); + + return unsubscribe; + } + }, [router, navigate]); + + return null; +} diff --git a/apps/docs/src/ui/disable-preview-mode.tsx b/apps/docs/src/ui/disable-preview-mode.tsx new file mode 100644 index 000000000..2deecfc59 --- /dev/null +++ b/apps/docs/src/ui/disable-preview-mode.tsx @@ -0,0 +1,10 @@ +export function DisablePreviewMode() { + return ( + + Disable preview mode + + ); +} diff --git a/packages/react/package.json b/packages/react/package.json index 72510b84c..5d48e4f70 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -22,22 +22,22 @@ }, "dependencies": { "@obosbbl/grunnmuren-icons-react": "workspace:^2.1.0", - "@react-aria/form": "^3.0.18", - "@react-aria/interactions": "^3.25.3", - "@react-aria/utils": "^3.29.1", - "@react-stately/form": "^3.1.5", - "@react-stately/utils": "^3.10.7", + "@react-aria/form": "^3.1.2", + "@react-aria/interactions": "^3.25.6", + "@react-aria/utils": "^3.31.0", + "@react-stately/form": "^3.2.2", + "@react-stately/utils": "^3.10.8", "cva": "^1.0.0-0", - "react-aria": "^3.41.1", - "react-aria-components": "^1.10.1", - "react-stately": "^3.39.0", - "use-debounce": "^10.0.4" + "react-aria": "^3.44.0", + "react-aria-components": "^1.13.0", + "react-stately": "^3.42.0", + "use-debounce": "^10.0.6" }, "peerDependencies": { "react": "^19" }, "devDependencies": { - "@types/node": "^24.0.0", + "@types/node": "^24.10.0", "tailwindcss": "4.1.17" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b75f8df9..56a3f7b42 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -79,7 +79,7 @@ importers: dependencies: '@code-obos/sanity-auth': specifier: 1.4.3 - version: 1.4.3(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) + version: 1.4.3(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) '@obosbbl/grunnmuren-icons-react': specifier: workspace:* version: link:../../packages/icons-react @@ -103,16 +103,22 @@ importers: version: 7.12.1(debug@4.4.3) '@sanity/code-input': specifier: 6.0.3 - version: 6.0.3(@babel/runtime@7.28.4)(@codemirror/lint@6.8.4)(@codemirror/theme-one-dark@6.1.2)(@emotion/is-prop-valid@1.2.2)(codemirror@6.0.1)(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) + version: 6.0.3(@babel/runtime@7.28.4)(@codemirror/lint@6.8.4)(@codemirror/theme-one-dark@6.1.2)(@emotion/is-prop-valid@1.2.2)(codemirror@6.0.1)(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) '@sanity/image-url': specifier: ^1.2.0 version: 1.2.0 + '@sanity/preview-url-secret': + specifier: 2.1.15 + version: 2.1.15(@sanity/client@7.12.1)(@sanity/icons@3.7.4(react@19.2.0))(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0)) '@sanity/table': specifier: 2.0.0 - version: 2.0.0(@emotion/is-prop-valid@1.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) + version: 2.0.0(@emotion/is-prop-valid@1.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) '@sanity/vision': specifier: 4.14.2 version: 4.14.2(@babel/runtime@7.28.4)(@codemirror/lint@6.8.4)(@codemirror/theme-one-dark@6.1.2)(@emotion/is-prop-valid@1.2.2)(codemirror@6.0.1)(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) + '@sanity/visual-editing': + specifier: 4.0.0 + version: 4.0.0(@emotion/is-prop-valid@1.2.2)(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2))(next@16.0.1(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) '@tanstack/nitro-v2-vite-plugin': specifier: 1.133.19 version: 1.133.19(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) @@ -151,7 +157,7 @@ importers: version: 4.1.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) sanity: specifier: 4.14.2 - version: 4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0) + version: 4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0) use-debounce: specifier: 10.0.6 version: 10.0.6(react@19.2.0) @@ -249,19 +255,19 @@ importers: specifier: workspace:^2.1.0 version: link:../icons-react '@react-aria/form': - specifier: ^3.0.18 + specifier: ^3.1.2 version: 3.1.2(react-dom@19.2.0(react@19.0.0))(react@19.0.0) '@react-aria/interactions': - specifier: ^3.25.3 + specifier: ^3.25.6 version: 3.25.6(react-dom@19.2.0(react@19.0.0))(react@19.0.0) '@react-aria/utils': - specifier: ^3.29.1 + specifier: ^3.31.0 version: 3.31.0(react-dom@19.2.0(react@19.0.0))(react@19.0.0) '@react-stately/form': - specifier: ^3.1.5 + specifier: ^3.2.2 version: 3.2.2(react@19.0.0) '@react-stately/utils': - specifier: ^3.10.7 + specifier: ^3.10.8 version: 3.10.8(react@19.0.0) cva: specifier: ^1.0.0-0 @@ -270,20 +276,20 @@ importers: specifier: ^19 version: 19.0.0 react-aria: - specifier: ^3.41.1 + specifier: ^3.44.0 version: 3.44.0(react-dom@19.2.0(react@19.0.0))(react@19.0.0) react-aria-components: - specifier: ^1.10.1 + specifier: ^1.13.0 version: 1.13.0(react-dom@19.2.0(react@19.0.0))(react@19.0.0) react-stately: - specifier: ^3.39.0 + specifier: ^3.42.0 version: 3.42.0(react@19.0.0) use-debounce: - specifier: ^10.0.4 + specifier: ^10.0.6 version: 10.0.6(react@19.0.0) devDependencies: '@types/node': - specifier: ^24.0.0 + specifier: ^24.10.0 version: 24.10.0 tailwindcss: specifier: 4.1.17 @@ -3639,6 +3645,15 @@ packages: resolution: {integrity: sha512-ThMeZDWvib5N5OxcJuEh8qGZInPaTR4zizSG5FaLDB6yfrhRh3eOOFCVj0CBklTv1hrrQ5lDwZMn3fb0yZKLvA==} engines: {node: '>=20.19 <22 || >=22.12'} + '@sanity/mutate@0.11.0-canary.4': + resolution: {integrity: sha512-82jU3PvxQepY+jVJU1WaXQOf2Q9Q/fOCE2ksJZ4cnH3/WFOsg7RceYoOWb1XKthchTCD9zSBS9DRmb7FQ0Jlsg==} + engines: {node: '>=18'} + peerDependencies: + xstate: ^5.19.0 + peerDependenciesMeta: + xstate: + optional: true + '@sanity/mutate@0.12.4': resolution: {integrity: sha512-CBPOOTCTyHFyhBL+seWpkGKJIE6lpaFd9yIeTIDt6miluBz6W8OKTNbaU6gPzOztqrr8KbrTaROiQAaMQDndQA==} engines: {node: '>=18'} @@ -3732,6 +3747,12 @@ packages: react: ^18 || ^19.0.0 styled-components: ^6.1.15 + '@sanity/visual-editing-csm@2.0.26': + resolution: {integrity: sha512-u4Rgy526YIJ6kDjM76UdnBGDEW+b+4vtHBVmXgiqYo5PGpgmWn1Tly+5uhqZLbYJ63dqyh1iFLlM0+S7ljrzPQ==} + engines: {node: '>=18'} + peerDependencies: + '@sanity/client': ^7.11.2 + '@sanity/visual-editing-types@1.1.8': resolution: {integrity: sha512-4Hu3J8qDLanymnSapRzKwHlQl6SCsBbkL1o5fSMVbWVHvTk/j2uGLLNTsjASICTqUwSm3fwWlyahzCy2uS/LvQ==} engines: {node: '>=18'} @@ -3742,6 +3763,34 @@ packages: '@sanity/types': optional: true + '@sanity/visual-editing@4.0.0': + resolution: {integrity: sha512-GKhcOecukj9IW1y+uXjY1eT+PJHgUz+HNvf1RoMDMbDtUV4+e/mA3xLSkXkphN/iCNLHgNGhbdhAhVr7x9Iy9g==} + engines: {node: '>=20.19'} + peerDependencies: + '@remix-run/react': '>= 2' + '@sanity/client': ^7.12.0 + '@sveltejs/kit': '>= 2' + next: '>= 13 || >=14.3.0-canary.0 <14.3.0 || >=15.0.0-rc || >=16.0.0-0' + react: ^18.3 || ^19 + react-dom: ^18.3 || ^19 + react-is: ^18.3 || ^19 + react-router: '>= 6 || >= 7' + styled-components: ^6.1.19 + svelte: '>= 4' + peerDependenciesMeta: + '@remix-run/react': + optional: true + '@sanity/client': + optional: true + '@sveltejs/kit': + optional: true + next: + optional: true + react-router: + optional: true + svelte: + optional: true + '@sentry-internal/browser-utils@8.55.0': resolution: {integrity: sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==} engines: {node: '>=14.18'} @@ -4564,6 +4613,9 @@ packages: engines: {node: '>=18'} hasBin: true + '@vercel/stega@0.1.2': + resolution: {integrity: sha512-P7mafQXjkrsoyTRppnt0N21udKS9wUmLXHRyP9saLXLHw32j/FgUJ3FscSWgvSqRs4cj7wKZtwqJEvWJ2jbGmA==} + '@vitejs/plugin-react@4.7.0': resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -5558,6 +5610,9 @@ packages: dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + domelementtype@1.3.1: resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} @@ -6073,6 +6128,13 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-random-values-esm@1.0.2: + resolution: {integrity: sha512-HMSDTgj1HPFAuZG0FqxzHbYt5JeEGDUeT9r1RLXhS6RZQS8rLRjokgjZ0Pd28CN0lhXlRwfH6eviZqZEJ2kIoA==} + + get-random-values@1.2.2: + resolution: {integrity: sha512-lMyPjQyl0cNNdDf2oR+IQ/fM3itDvpoHy45Ymo2r0L1EjazeSl13SfbKZs7KtZ/3MDCeueiaJiuOEfKqRTsSgA==} + engines: {node: 10 || 12 || >=14} + get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -6125,6 +6187,9 @@ packages: resolution: {integrity: sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==} engines: {node: '>=0.10.0'} + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -7185,6 +7250,9 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + min-document@2.19.2: + resolution: {integrity: sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A==} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -9181,6 +9249,14 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} + valibot@1.1.0: + resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -10700,9 +10776,9 @@ snapshots: dependencies: mime: 3.0.0 - '@code-obos/sanity-auth@1.4.3(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': + '@code-obos/sanity-auth@1.4.3(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': dependencies: - sanity: 4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0) + sanity: 4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0) styled-components: 6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@codemirror/autocomplete@6.19.1': @@ -12063,21 +12139,21 @@ snapshots: '@poppinss/exception@1.2.2': {} - '@portabletext/block-tools@4.0.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))': + '@portabletext/block-tools@4.0.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))': dependencies: - '@portabletext/sanity-bridge': 1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)) + '@portabletext/sanity-bridge': 1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)) '@portabletext/schema': 2.0.0 '@sanity/types': 4.14.2(@types/react@19.2.2)(debug@4.4.3) lodash: 4.17.21 transitivePeerDependencies: - '@sanity/schema' - '@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2)': + '@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2)': dependencies: - '@portabletext/block-tools': 4.0.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)) + '@portabletext/block-tools': 4.0.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)) '@portabletext/keyboard-shortcuts': 2.1.0 '@portabletext/patches': 2.0.0 - '@portabletext/sanity-bridge': 1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)) + '@portabletext/sanity-bridge': 1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)) '@portabletext/schema': 2.0.0 '@portabletext/to-html': 4.0.1 '@sanity/schema': 4.14.2(@types/react@19.2.2)(debug@4.4.3) @@ -12106,9 +12182,9 @@ snapshots: '@sanity/diff-match-patch': 3.2.0 lodash: 4.17.21 - '@portabletext/plugin-character-pair-decorator@3.0.6(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(@types/react@19.2.2)(react@19.2.0)': + '@portabletext/plugin-character-pair-decorator@3.0.6(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(@types/react@19.2.2)(react@19.2.0)': dependencies: - '@portabletext/editor': 2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2) + '@portabletext/editor': 2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2) '@xstate/react': 6.0.0(@types/react@19.2.2)(react@19.2.0)(xstate@5.24.0) react: 19.2.0 react-compiler-runtime: 1.0.0(react@19.2.0) @@ -12117,9 +12193,9 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@portabletext/plugin-input-rule@0.6.0(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(@types/react@19.2.2)(react@19.2.0)': + '@portabletext/plugin-input-rule@0.6.0(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(@types/react@19.2.2)(react@19.2.0)': dependencies: - '@portabletext/editor': 2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2) + '@portabletext/editor': 2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2) '@xstate/react': 6.0.0(@types/react@19.2.2)(react@19.2.0)(xstate@5.24.0) react: 19.2.0 react-compiler-runtime: 1.0.0(react@19.2.0) @@ -12127,19 +12203,19 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@portabletext/plugin-markdown-shortcuts@3.0.7(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(@types/react@19.2.2)(react@19.2.0)': + '@portabletext/plugin-markdown-shortcuts@3.0.7(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(@types/react@19.2.2)(react@19.2.0)': dependencies: - '@portabletext/editor': 2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2) - '@portabletext/plugin-character-pair-decorator': 3.0.6(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(@types/react@19.2.2)(react@19.2.0) - '@portabletext/plugin-input-rule': 0.6.0(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(@types/react@19.2.2)(react@19.2.0) + '@portabletext/editor': 2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2) + '@portabletext/plugin-character-pair-decorator': 3.0.6(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(@types/react@19.2.2)(react@19.2.0) + '@portabletext/plugin-input-rule': 0.6.0(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 react-compiler-runtime: 1.0.0(react@19.2.0) transitivePeerDependencies: - '@types/react' - '@portabletext/plugin-one-line@2.1.5(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(react@19.2.0)': + '@portabletext/plugin-one-line@2.1.5(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(react@19.2.0)': dependencies: - '@portabletext/editor': 2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2) + '@portabletext/editor': 2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2) react: 19.2.0 react-compiler-runtime: 1.0.0(react@19.2.0) @@ -12149,7 +12225,7 @@ snapshots: '@portabletext/types': 3.0.0 react: 19.2.0 - '@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))': + '@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))': dependencies: '@portabletext/schema': 2.0.0 '@sanity/schema': 4.14.2(@types/react@19.2.2)(debug@4.4.3) @@ -14461,7 +14537,7 @@ snapshots: transitivePeerDependencies: - debug - '@sanity/code-input@6.0.3(@babel/runtime@7.28.4)(@codemirror/lint@6.8.4)(@codemirror/theme-one-dark@6.1.2)(@emotion/is-prop-valid@1.2.2)(codemirror@6.0.1)(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': + '@sanity/code-input@6.0.3(@babel/runtime@7.28.4)(@codemirror/lint@6.8.4)(@codemirror/theme-one-dark@6.1.2)(@emotion/is-prop-valid@1.2.2)(codemirror@6.0.1)(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': dependencies: '@codemirror/autocomplete': 6.19.1 '@codemirror/commands': 6.9.0 @@ -14486,7 +14562,7 @@ snapshots: '@uiw/react-codemirror': 4.25.2(@babel/runtime@7.28.4)(@codemirror/autocomplete@6.19.1)(@codemirror/language@6.11.3)(@codemirror/lint@6.8.4)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.38.6)(codemirror@6.0.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - sanity: 4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0) + sanity: 4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0) styled-components: 6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0) transitivePeerDependencies: - '@babel/runtime' @@ -14630,7 +14706,7 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - '@sanity/insert-menu@2.1.0(@emotion/is-prop-valid@1.2.2)(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': + '@sanity/insert-menu@2.1.0(@emotion/is-prop-valid@1.2.2)(@sanity/types@4.14.2(@types/react@19.2.2))(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': dependencies: '@sanity/icons': 3.7.4(react@19.2.0) '@sanity/types': 4.14.2(@types/react@19.2.2)(debug@4.4.3) @@ -14676,6 +14752,20 @@ snapshots: - '@types/react' - supports-color + '@sanity/mutate@0.11.0-canary.4(xstate@5.24.0)': + dependencies: + '@sanity/client': 6.28.4(debug@4.4.3) + '@sanity/diff-match-patch': 3.2.0 + hotscript: 1.0.13 + lodash: 4.17.21 + lodash-es: 4.17.21 + mendoza: 3.0.8 + rxjs: 7.8.2 + optionalDependencies: + xstate: 5.24.0 + transitivePeerDependencies: + - debug + '@sanity/mutate@0.12.4(debug@4.4.3)': dependencies: '@sanity/client': 6.28.4(debug@4.4.3) @@ -14724,21 +14814,21 @@ snapshots: - '@types/react' - supports-color - '@sanity/presentation-comlink@2.0.0(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))': + '@sanity/presentation-comlink@2.0.0(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2))': dependencies: '@sanity/comlink': 4.0.0 - '@sanity/visual-editing-types': 1.1.8(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)) + '@sanity/visual-editing-types': 1.1.8(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2)) transitivePeerDependencies: - '@sanity/client' - '@sanity/types' - '@sanity/preview-url-secret@2.1.15(@sanity/client@7.12.1)(@sanity/icons@3.7.4(react@19.2.0))(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))': + '@sanity/preview-url-secret@2.1.15(@sanity/client@7.12.1)(@sanity/icons@3.7.4(react@19.2.0))(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))': dependencies: '@sanity/client': 7.12.1(debug@4.4.3) '@sanity/uuid': 3.0.2 optionalDependencies: '@sanity/icons': 3.7.4(react@19.2.0) - sanity: 4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0) + sanity: 4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0) '@sanity/runtime-cli@11.1.2(@types/node@24.10.0)(debug@4.4.3)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0)': dependencies: @@ -14821,13 +14911,13 @@ snapshots: - react - use-sync-external-store - '@sanity/table@2.0.0(@emotion/is-prop-valid@1.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': + '@sanity/table@2.0.0(@emotion/is-prop-valid@1.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': dependencies: '@sanity/icons': 3.7.0(react@19.2.0) '@sanity/incompatible-plugin': 1.0.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@sanity/ui': 3.1.11(@emotion/is-prop-valid@1.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) react: 19.2.0 - sanity: 4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0) + sanity: 4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0) transitivePeerDependencies: - '@emotion/is-prop-valid' - react-dom @@ -14937,12 +15027,52 @@ snapshots: - react-dom - react-is - '@sanity/visual-editing-types@1.1.8(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))': + '@sanity/visual-editing-csm@2.0.26(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2))(typescript@5.9.3)': + dependencies: + '@sanity/client': 7.12.1(debug@4.4.3) + '@sanity/visual-editing-types': 1.1.8(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2)) + valibot: 1.1.0(typescript@5.9.3) + transitivePeerDependencies: + - '@sanity/types' + - typescript + + '@sanity/visual-editing-types@1.1.8(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2))': dependencies: '@sanity/client': 7.12.1(debug@4.4.3) optionalDependencies: '@sanity/types': 4.14.2(@types/react@19.2.2)(debug@4.4.3) + '@sanity/visual-editing@4.0.0(@emotion/is-prop-valid@1.2.2)(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2))(next@16.0.1(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0))(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)': + dependencies: + '@sanity/comlink': 4.0.0 + '@sanity/icons': 3.7.4(react@19.2.0) + '@sanity/insert-menu': 2.1.0(@emotion/is-prop-valid@1.2.2)(@sanity/types@4.14.2(@types/react@19.2.2))(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) + '@sanity/mutate': 0.11.0-canary.4(xstate@5.24.0) + '@sanity/presentation-comlink': 2.0.0(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2)) + '@sanity/preview-url-secret': 2.1.15(@sanity/client@7.12.1)(@sanity/icons@3.7.4(react@19.2.0))(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0)) + '@sanity/ui': 3.1.11(@emotion/is-prop-valid@1.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) + '@sanity/visual-editing-csm': 2.0.26(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2))(typescript@5.9.3) + '@vercel/stega': 0.1.2 + get-random-values-esm: 1.0.2 + react: 19.2.0 + react-compiler-runtime: 1.0.0(react@19.2.0) + react-dom: 19.2.0(react@19.2.0) + react-is: 19.2.0 + rxjs: 7.8.2 + scroll-into-view-if-needed: 3.1.0 + styled-components: 6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + use-effect-event: 2.0.3(react@19.2.0) + xstate: 5.24.0 + optionalDependencies: + '@sanity/client': 7.12.1(debug@4.4.3) + next: 16.0.1(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + transitivePeerDependencies: + - '@emotion/is-prop-valid' + - '@sanity/types' + - debug + - sanity + - typescript + '@sentry-internal/browser-utils@8.55.0': dependencies: '@sentry/core': 8.55.0 @@ -15914,6 +16044,8 @@ snapshots: - rollup - supports-color + '@vercel/stega@0.1.2': {} + '@vitejs/plugin-react@4.7.0(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.4 @@ -16904,6 +17036,8 @@ snapshots: domhandler: 5.0.3 entities: 4.5.0 + dom-walk@0.1.2: {} + domelementtype@1.3.1: {} domelementtype@2.3.0: {} @@ -17501,6 +17635,14 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-random-values-esm@1.0.2: + dependencies: + get-random-values: 1.2.2 + + get-random-values@1.2.2: + dependencies: + global: 4.4.0 + get-stream@5.2.0: dependencies: pump: 3.0.2 @@ -17584,6 +17726,11 @@ snapshots: is-windows: 0.2.0 which: 1.3.1 + global@4.4.0: + dependencies: + min-document: 2.19.2 + process: 0.11.10 + globals@11.12.0: {} globby@11.1.0: @@ -18878,6 +19025,10 @@ snapshots: mimic-response@3.1.0: {} + min-document@2.19.2: + dependencies: + dom-walk: 0.1.2 + min-indent@1.0.1: {} minimatch@10.0.3: @@ -20288,7 +20439,7 @@ snapshots: safer-buffer@2.1.2: {} - sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0): + sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0): dependencies: '@dnd-kit/core': 6.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@dnd-kit/modifiers': 6.0.1(@dnd-kit/core@6.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) @@ -20297,11 +20448,11 @@ snapshots: '@isaacs/ttlcache': 1.4.1 '@juggle/resize-observer': 3.4.0 '@mux/mux-player-react': 3.7.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@portabletext/block-tools': 4.0.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)) - '@portabletext/editor': 2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2) + '@portabletext/block-tools': 4.0.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)) + '@portabletext/editor': 2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2) '@portabletext/patches': 2.0.0 - '@portabletext/plugin-markdown-shortcuts': 3.0.7(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(@types/react@19.2.2)(react@19.2.0) - '@portabletext/plugin-one-line': 2.1.5(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(react@19.2.0) + '@portabletext/plugin-markdown-shortcuts': 3.0.7(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(@types/react@19.2.2)(react@19.2.0) + '@portabletext/plugin-one-line': 2.1.5(@portabletext/editor@2.21.0(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rxjs@7.8.2))(react@19.2.0) '@portabletext/react': 5.0.0(react@19.2.0) '@portabletext/toolkit': 4.0.0 '@rexxars/react-json-inspector': 9.0.1(react@19.2.0) @@ -20320,14 +20471,14 @@ snapshots: '@sanity/id-utils': 1.0.0 '@sanity/image-url': 1.2.0 '@sanity/import': 3.38.3(@types/react@19.2.2) - '@sanity/insert-menu': 2.1.0(@emotion/is-prop-valid@1.2.2)(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3))(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) + '@sanity/insert-menu': 2.1.0(@emotion/is-prop-valid@1.2.2)(@sanity/types@4.14.2(@types/react@19.2.2))(react-dom@19.2.0(react@19.2.0))(react-is@19.2.0)(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) '@sanity/logos': 2.2.2(react@19.2.0) '@sanity/media-library-types': 1.0.1 '@sanity/message-protocol': 0.17.4 '@sanity/migrate': 4.14.2(@types/react@19.2.2) '@sanity/mutator': 4.14.2(@types/react@19.2.2) - '@sanity/presentation-comlink': 2.0.0(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)) - '@sanity/preview-url-secret': 2.1.15(@sanity/client@7.12.1)(@sanity/icons@3.7.4(react@19.2.0))(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)(debug@4.4.3)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0)) + '@sanity/presentation-comlink': 2.0.0(@sanity/client@7.12.1)(@sanity/types@4.14.2(@types/react@19.2.2)) + '@sanity/preview-url-secret': 2.1.15(@sanity/client@7.12.1)(@sanity/icons@3.7.4(react@19.2.0))(sanity@4.14.2(@emotion/is-prop-valid@1.2.2)(@portabletext/sanity-bridge@1.2.2(@sanity/schema@4.14.2(@types/react@19.2.2)(debug@4.4.3))(@sanity/types@4.14.2(@types/react@19.2.2)))(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(immer@10.2.0)(jiti@2.6.1)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(styled-components@6.1.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.37.0)(tsx@4.19.2)(typescript@5.9.3)(yaml@2.7.0)) '@sanity/schema': 4.14.2(@types/react@19.2.2)(debug@4.4.3) '@sanity/sdk': 2.1.2(@types/react@19.2.2)(debug@4.4.3)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) '@sanity/telemetry': 0.8.1(react@19.2.0) @@ -21406,6 +21557,10 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + valibot@1.1.0(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0