diff --git a/frontend/app/[slug]/page.tsx b/frontend/app/[slug]/page.tsx index 8f51ff02..954d1782 100644 --- a/frontend/app/[slug]/page.tsx +++ b/frontend/app/[slug]/page.tsx @@ -65,9 +65,9 @@ export default async function Page(props: Props) {
-

+

{page.heading} -

+

{page.subheading}

diff --git a/frontend/app/client-utils.ts b/frontend/app/client-utils.ts index b1448409..cf58ae77 100644 --- a/frontend/app/client-utils.ts +++ b/frontend/app/client-utils.ts @@ -1,6 +1,6 @@ 'use client' -import {isCorsOriginError} from 'next-sanity' +import {isCorsOriginError} from 'next-sanity/live' import {toast} from 'sonner' export function handleError(error: unknown) { diff --git a/frontend/app/components/Avatar.tsx b/frontend/app/components/Avatar.tsx index 85d011e0..8549ad96 100644 --- a/frontend/app/components/Avatar.tsx +++ b/frontend/app/components/Avatar.tsx @@ -1,7 +1,5 @@ -import {Image} from 'next-sanity/image' - -import {urlForImage} from '@/sanity/lib/utils' -import DateComponent from '@/app/components/Date' +import Image from "@/app/components/SanityImage"; +import DateComponent from "@/app/components/Date"; type Props = { person: { @@ -21,17 +19,14 @@ export default function Avatar({person, date, small = false}: Props) { {picture?.asset?._ref ? (
{picture?.alt
) : ( @@ -39,7 +34,7 @@ export default function Avatar({person, date, small = false}: Props) { )}
{firstName && lastName && ( -
+
{firstName} {lastName}
)} diff --git a/frontend/app/components/BlockRenderer.tsx b/frontend/app/components/BlockRenderer.tsx index 926ab83e..63aaba02 100644 --- a/frontend/app/components/BlockRenderer.tsx +++ b/frontend/app/components/BlockRenderer.tsx @@ -1,24 +1,20 @@ import React from 'react' -import Cta from '@/app/components/Cta' -import Info from '@/app/components/InfoSection' -import {dataAttr} from '@/sanity/lib/utils' +import Cta from "@/app/components/Cta"; +import Info from "@/app/components/InfoSection"; +import { dataAttr } from "@/sanity/lib/utils"; +import { PageBuilderSection } from "@/sanity/lib/types"; type BlocksType = { [key: string]: React.FC } -type BlockType = { - _type: string - _key: string -} - type BlockProps = { - index: number - block: BlockType - pageId: string - pageType: string -} + index: number; + block: PageBuilderSection; + pageId: string; + pageType: string; +}; const Blocks: BlocksType = { callToAction: Cta, @@ -44,6 +40,8 @@ export default function BlockRenderer({block, index, pageId, pageType}: BlockPro key: block._key, block: block, index: index, + pageId: pageId, + pageType: pageType, })}
) diff --git a/frontend/app/components/CoverImage.tsx b/frontend/app/components/CoverImage.tsx deleted file mode 100644 index 6c9a415b..00000000 --- a/frontend/app/components/CoverImage.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import {stegaClean} from '@sanity/client/stega' -import {Image} from 'next-sanity/image' -import {getImageDimensions} from '@sanity/asset-utils' -import {urlForImage} from '@/sanity/lib/utils' - -interface CoverImageProps { - image: any - priority?: boolean -} - -export default function CoverImage(props: CoverImageProps) { - const {image: source, priority} = props - const image = source?.asset?._ref ? ( - {stegaClean(source?.alt) - ) : null - - return
{image}
-} diff --git a/frontend/app/components/Cta.tsx b/frontend/app/components/Cta.tsx index 0f9be820..e6ea29bc 100644 --- a/frontend/app/components/Cta.tsx +++ b/frontend/app/components/Cta.tsx @@ -1,37 +1,72 @@ import {Suspense} from 'react' +import {PortableTextBlock} from 'next-sanity' import ResolvedLink from '@/app/components/ResolvedLink' -import {CallToAction} from '@/sanity.types' +import PortableText from '@/app/components/PortableText' +import Image from '@/app/components/SanityImage' +import {stegaClean} from '@sanity/client/stega' +import {ExtractPageBuilderType} from '@/sanity/lib/types' type CtaProps = { - block: CallToAction + block: ExtractPageBuilderType<'callToAction'> index: number + // Needed if you want to createDataAttributes to do non-text overlays in Presentation (Visual Editing) + pageType: string + pageId: string } export default function CTA({block}: CtaProps) { + const {heading, eyebrow, body = [], button, image, theme, contentAlignment} = block + + const isDark = theme === 'dark' + const isImageFirst = stegaClean(contentAlignment) === 'imageFirst' + return ( -
-
-
-
-

- {block.heading} -

-

{block.text}

+
+
+
+
+
+ {eyebrow && ( + + {eyebrow} + + )} + {heading && ( +

{heading}

+ )} + {body && ( +
+ +
+ )} + + {button?.buttonText && button?.link && ( +
+ + {button?.buttonText} + +
+ )}
- -
- - {block.buttonText} - -
-
+ {image?.asset?._ref && ( + Demo image + )}
-
+
) } diff --git a/frontend/app/components/InfoSection.tsx b/frontend/app/components/InfoSection.tsx index 01997b39..5467933d 100644 --- a/frontend/app/components/InfoSection.tsx +++ b/frontend/app/components/InfoSection.tsx @@ -4,16 +4,19 @@ import PortableText from '@/app/components/PortableText' import {InfoSection} from '@/sanity.types' type InfoProps = { - block: InfoSection - index: number -} + block: InfoSection; + index: number; + // Needed if you want to createDataAttributes to do non-text overlays in Presentation (Visual Editing) + pageId: string; + pageType: string; +}; export default function CTA({block}: InfoProps) { return (
{block?.heading && ( -

{block.heading}

+

{block.heading}

)} {block?.subheading && ( diff --git a/frontend/app/components/PageBuilder.tsx b/frontend/app/components/PageBuilder.tsx index 2ec7cf58..d84da15c 100644 --- a/frontend/app/components/PageBuilder.tsx +++ b/frontend/app/components/PageBuilder.tsx @@ -2,22 +2,16 @@ import {SanityDocument} from 'next-sanity' import {useOptimistic} from 'next-sanity/hooks' -import Link from 'next/link' import BlockRenderer from '@/app/components/BlockRenderer' import {GetPageQueryResult} from '@/sanity.types' import {dataAttr} from '@/sanity/lib/utils' -import {studioUrl} from '@/sanity/lib/api' +import {PageBuilderSection} from '@/sanity/lib/types' type PageBuilderPageProps = { page: GetPageQueryResult } -type PageBuilderSection = { - _key: string - _type: string -} - type PageData = { _id: string _type: string @@ -28,7 +22,13 @@ type PageData = { * The PageBuilder component is used to render the blocks from the `pageBuilder` field in the Page type in your Sanity Studio. */ -function renderSections(pageBuilderSections: PageBuilderSection[], page: GetPageQueryResult) { +function RenderSections({ + pageBuilderSections, + page, +}: { + pageBuilderSections: PageBuilderSection[] + page: GetPageQueryResult +}) { if (!page) { return null } @@ -40,7 +40,7 @@ function renderSections(pageBuilderSections: PageBuilderSection[], page: GetPage path: `pageBuilder`, }).toString()} > - {pageBuilderSections.map((block: any, index: number) => ( + {pageBuilderSections.map((block: PageBuilderSection, index: number) => ( -

- This page has no content! -

-

Open the page in Sanity Studio to add content.

-
- - Add content to this page - +
+
+

This page has no content!

+

Open the page in Sanity Studio to add content.

) @@ -102,11 +100,9 @@ export default function PageBuilder({page}: PageBuilderPageProps) { return currentSections }) - if (!page) { - return renderEmptyState(page) - } - - return pageBuilderSections && pageBuilderSections.length > 0 - ? renderSections(pageBuilderSections, page) - : renderEmptyState(page) + return pageBuilderSections && pageBuilderSections.length > 0 ? ( + + ) : ( + + ) } diff --git a/frontend/app/components/PortableText.tsx b/frontend/app/components/PortableText.tsx index 5c82e6ae..5615d04b 100644 --- a/frontend/app/components/PortableText.tsx +++ b/frontend/app/components/PortableText.tsx @@ -8,9 +8,13 @@ * */ -import {PortableText, type PortableTextComponents, type PortableTextBlock} from 'next-sanity' - -import ResolvedLink from '@/app/components/ResolvedLink' +import { + PortableText, + type PortableTextComponents, + type PortableTextBlock, +} from "next-sanity"; +import ResolvedLink from "@/app/components/ResolvedLink"; +import Image from "@/app/components/SanityImage"; export default function CustomPortableText({ className, @@ -20,6 +24,25 @@ export default function CustomPortableText({ value: PortableTextBlock[] }) { const components: PortableTextComponents = { + types: { + image: ({ value }) => { + if (!value?.asset?._ref) { + return null; + } + + return ( +
+ +
+ ); + }, + }, block: { h1: ({children, value}) => ( // Add an anchor to the h1 @@ -82,7 +105,7 @@ export default function CustomPortableText({ } return ( -
+
) diff --git a/frontend/app/components/Posts.tsx b/frontend/app/components/Posts.tsx index 48cdb835..dd8216af 100644 --- a/frontend/app/components/Posts.tsx +++ b/frontend/app/components/Posts.tsx @@ -1,25 +1,20 @@ import Link from 'next/link' +import {studioUrl} from '@/sanity/lib/api' import {sanityFetch} from '@/sanity/lib/live' import {morePostsQuery, allPostsQuery} from '@/sanity/lib/queries' import {Post as PostType, AllPostsQueryResult} from '@/sanity.types' import DateComponent from '@/app/components/Date' import OnBoarding from '@/app/components/Onboarding' import Avatar from '@/app/components/Avatar' -import {createDataAttribute} from 'next-sanity' +import {dataAttr} from '@/sanity/lib/utils' const Post = ({post}: {post: AllPostsQueryResult[number]}) => { const {_id, title, slug, excerpt, date, author} = post - const attr = createDataAttribute({ - id: _id, - type: 'post', - path: 'title', - }) - return (
@@ -27,7 +22,7 @@ const Post = ({post}: {post: AllPostsQueryResult[number]}) => {
-

{title}

+

{title}

{excerpt}

@@ -55,11 +50,7 @@ const Posts = ({ subHeading?: string }) => (
- {heading && ( -

- {heading} -

- )} + {heading &&

{heading}

} {subHeading &&

{subHeading}

}
{children}
diff --git a/frontend/app/components/SanityImage.tsx b/frontend/app/components/SanityImage.tsx new file mode 100644 index 00000000..3d369a4f --- /dev/null +++ b/frontend/app/components/SanityImage.tsx @@ -0,0 +1,12 @@ +import { SanityImage, type WrapperProps } from "sanity-image"; + +import { dataset, projectId } from "@/sanity/lib/api"; + +const Image = (props: WrapperProps) => ( + +); + +export default Image; diff --git a/frontend/app/globals.css b/frontend/app/globals.css index c9cfc424..f6e6957b 100644 --- a/frontend/app/globals.css +++ b/frontend/app/globals.css @@ -2,11 +2,24 @@ @plugin "@tailwindcss/typography"; +@layer base { + h1, + h2, + h3, + h4, + h5, + h6 { + @apply font-medium tracking-tight; + } +} + @utility container { margin: 0 auto; padding: 0 2rem; } +@custom-variant dark (&:where(.dark, .dark *)); + @theme { --shadow-layer: 0 35px 60px -15px rgba(0, 0, 0, 0.3); @@ -28,8 +41,5 @@ --color-gray-900: #1b1d27; --color-gray-950: #13141b; - --font-display: 'Inter', 'sans-serif'; - --font-sans: 'Inter', 'sans-serif'; - --default-transition-duration: 250ms; } diff --git a/frontend/app/layout.tsx b/frontend/app/layout.tsx index 737a92ce..45f4a3cd 100644 --- a/frontend/app/layout.tsx +++ b/frontend/app/layout.tsx @@ -2,9 +2,10 @@ import './globals.css' import {SpeedInsights} from '@vercel/speed-insights/next' import type {Metadata} from 'next' -import {Inter} from 'next/font/google' +import {Inter, IBM_Plex_Mono} from 'next/font/google' import {draftMode} from 'next/headers' -import {VisualEditing, toPlainText} from 'next-sanity' +import {toPlainText} from 'next-sanity' +import {VisualEditing} from 'next-sanity/visual-editing' import {Toaster} from 'sonner' import DraftModeToast from '@/app/components/DraftModeToast' @@ -14,7 +15,7 @@ import * as demo from '@/sanity/lib/demo' import {sanityFetch, SanityLive} from '@/sanity/lib/live' import {settingsQuery} from '@/sanity/lib/queries' import {resolveOpenGraphImage} from '@/sanity/lib/utils' -import {handleError} from './client-utils' +import {handleError} from '@/app/client-utils' /** * Generate metadata for the page. @@ -57,11 +58,18 @@ const inter = Inter({ display: 'swap', }) +const ibmPlexMono = IBM_Plex_Mono({ + variable: '--font-ibm-plex-mono', + weight: ['400'], + subsets: ['latin'], + display: 'swap', +}) + export default async function RootLayout({children}: {children: React.ReactNode}) { const {isEnabled: isDraftMode} = await draftMode() return ( - +
{/* The component is responsible for rendering toast notifications used in /app/client-utils.ts and /app/components/DraftModeToast.tsx */} diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx index fa1cdb11..48441c84 100644 --- a/frontend/app/page.tsx +++ b/frontend/app/page.tsx @@ -7,6 +7,7 @@ import GetStartedCode from '@/app/components/GetStartedCode' import SideBySideIcons from '@/app/components/SideBySideIcons' import {settingsQuery} from '@/sanity/lib/queries' import {sanityFetch} from '@/sanity/lib/live' +import {dataAttr} from '@/sanity/lib/utils' export default async function Page() { const {data: settings} = await sanityFetch({ @@ -47,7 +48,17 @@ export default async function Page() {
- {settings?.description && } + {settings?.description && ( +
+ +
+ )}
@@ -33,9 +33,12 @@ export async function generateStaticParams() { * Generate metadata for the page. * Learn more: https://nextjs.org/docs/app/api-reference/functions/generate-metadata#generatemetadata-function */ -export async function generateMetadata(props: Props, parent: ResolvingMetadata): Promise { - const params = await props.params - const {data: post} = await sanityFetch({ +export async function generateMetadata( + props: Props, + parent: ResolvingMetadata +): Promise { + const params = await props.params; + const { data: post } = await sanityFetch({ query: postQuery, params, // Metadata should never contain stega @@ -72,9 +75,9 @@ export default async function PostPage(props: Props) {
-

+

{post.title} -

+
{post.author && post.author.firstName && post.author.lastName && ( @@ -84,10 +87,23 @@ export default async function PostPage(props: Props) {
- {post?.coverImage && } + {post?.coverImage && ( + + )}
{post.content?.length && ( - + )}
diff --git a/frontend/next.config.ts b/frontend/next.config.ts index 451313c0..41ff9ee6 100644 --- a/frontend/next.config.ts +++ b/frontend/next.config.ts @@ -5,6 +5,9 @@ const nextConfig: NextConfig = { // Matches the behavior of `sanity dev` which sets styled-components to use the fastest way of inserting CSS rules in both dev and production. It's default behavior is to disable it in dev mode. SC_DISABLE_SPEEDY: 'false', }, -} + images: { + remotePatterns: [new URL("https://cdn.sanity.io/**")], + }, +}; export default nextConfig diff --git a/frontend/package.json b/frontend/package.json index 43f6d9da..db5d79f9 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -21,13 +21,13 @@ "autoprefixer": "^10.4.22", "date-fns": "^4.1.0", "next": "^15.5.7", - "next-sanity": "^10.1.4", + "next-sanity": "^11.6.10", "postcss": "^8.5.6", "react": "^19.2.1", "react-dom": "^19.2.1", "sanity": "^4.20.0", + "sanity-image": "^1.0.0", "sonner": "^2.0.7", - "styled-components": "^6.1.19", "tailwindcss": "^4.1.17" }, "devDependencies": { diff --git a/frontend/public/images/tile-1-white.png b/frontend/public/images/tile-1-white.png new file mode 100644 index 00000000..28d556b7 Binary files /dev/null and b/frontend/public/images/tile-1-white.png differ diff --git a/frontend/public/images/tile-grid-white.png b/frontend/public/images/tile-grid-white.png new file mode 100644 index 00000000..71cef874 Binary files /dev/null and b/frontend/public/images/tile-grid-white.png differ diff --git a/frontend/sanity.types.ts b/frontend/sanity.types.ts index 33786da4..9ebf6562 100644 --- a/frontend/sanity.types.ts +++ b/frontend/sanity.types.ts @@ -15,36 +15,9 @@ // Source: schema.json export type CallToAction = { _type: 'callToAction' + eyebrow?: string heading: string - text?: string - buttonText?: string - link?: Link -} - -export type Link = { - _type: 'link' - linkType?: 'href' | 'page' | 'post' - href?: string - page?: { - _ref: string - _type: 'reference' - _weak?: boolean - [internalGroqTypeReferenceTo]?: 'page' - } - post?: { - _ref: string - _type: 'reference' - _weak?: boolean - [internalGroqTypeReferenceTo]?: 'post' - } - openInNewTab?: boolean -} - -export type InfoSection = { - _type: 'infoSection' - heading?: string - subheading?: string - content?: Array<{ + body?: Array<{ children?: Array<{ marks?: Array text?: string @@ -54,21 +27,7 @@ export type InfoSection = { style?: 'normal' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'blockquote' listItem?: 'bullet' | 'number' markDefs?: Array<{ - linkType?: 'href' | 'page' | 'post' href?: string - page?: { - _ref: string - _type: 'reference' - _weak?: boolean - [internalGroqTypeReferenceTo]?: 'page' - } - post?: { - _ref: string - _type: 'reference' - _weak?: boolean - [internalGroqTypeReferenceTo]?: 'post' - } - openInNewTab?: boolean _type: 'link' _key: string }> @@ -76,9 +35,77 @@ export type InfoSection = { _type: 'block' _key: string }> + button?: Button + image?: { + asset?: { + _ref: string + _type: 'reference' + _weak?: boolean + [internalGroqTypeReferenceTo]?: 'sanity.imageAsset' + } + media?: unknown + hotspot?: SanityImageHotspot + crop?: SanityImageCrop + _type: 'image' + } + theme?: 'light' | 'dark' + contentAlignment?: 'textFirst' | 'imageFirst' +} + +export type InfoSection = { + _type: 'infoSection' + heading?: string + subheading?: string + content?: Array< + | { + children?: Array<{ + marks?: Array + text?: string + _type: 'span' + _key: string + }> + style?: 'normal' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'blockquote' + listItem?: 'bullet' | 'number' + markDefs?: Array<{ + linkType?: 'href' | 'page' | 'post' + href?: string + page?: { + _ref: string + _type: 'reference' + _weak?: boolean + [internalGroqTypeReferenceTo]?: 'page' + } + post?: { + _ref: string + _type: 'reference' + _weak?: boolean + [internalGroqTypeReferenceTo]?: 'post' + } + openInNewTab?: boolean + _type: 'link' + _key: string + }> + level?: number + _type: 'block' + _key: string + } + | { + asset?: { + _ref: string + _type: 'reference' + _weak?: boolean + [internalGroqTypeReferenceTo]?: 'sanity.imageAsset' + } + media?: unknown + hotspot?: SanityImageHotspot + crop?: SanityImageCrop + _type: 'image' + _key: string + } + > } -export type BlockContent = Array<{ +export type BlockContentTextOnly = Array<{ children?: Array<{ marks?: Array text?: string @@ -88,21 +115,7 @@ export type BlockContent = Array<{ style?: 'normal' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'blockquote' listItem?: 'bullet' | 'number' markDefs?: Array<{ - linkType?: 'href' | 'page' | 'post' href?: string - page?: { - _ref: string - _type: 'reference' - _weak?: boolean - [internalGroqTypeReferenceTo]?: 'page' - } - post?: { - _ref: string - _type: 'reference' - _weak?: boolean - [internalGroqTypeReferenceTo]?: 'post' - } - openInNewTab?: boolean _type: 'link' _key: string }> @@ -111,6 +124,79 @@ export type BlockContent = Array<{ _key: string }> +export type BlockContent = Array< + | { + children?: Array<{ + marks?: Array + text?: string + _type: 'span' + _key: string + }> + style?: 'normal' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'blockquote' + listItem?: 'bullet' | 'number' + markDefs?: Array<{ + linkType?: 'href' | 'page' | 'post' + href?: string + page?: { + _ref: string + _type: 'reference' + _weak?: boolean + [internalGroqTypeReferenceTo]?: 'page' + } + post?: { + _ref: string + _type: 'reference' + _weak?: boolean + [internalGroqTypeReferenceTo]?: 'post' + } + openInNewTab?: boolean + _type: 'link' + _key: string + }> + level?: number + _type: 'block' + _key: string + } + | { + asset?: { + _ref: string + _type: 'reference' + _weak?: boolean + [internalGroqTypeReferenceTo]?: 'sanity.imageAsset' + } + media?: unknown + hotspot?: SanityImageHotspot + crop?: SanityImageCrop + _type: 'image' + _key: string + } +> + +export type Button = { + _type: 'button' + buttonText?: string + link?: Link +} + +export type Link = { + _type: 'link' + linkType?: 'href' | 'page' | 'post' + href?: string + page?: { + _ref: string + _type: 'reference' + _weak?: boolean + [internalGroqTypeReferenceTo]?: 'page' + } + post?: { + _ref: string + _type: 'reference' + _weak?: boolean + [internalGroqTypeReferenceTo]?: 'post' + } + openInNewTab?: boolean +} + export type Settings = { _id: string _type: 'settings' @@ -397,25 +483,25 @@ export type SanityImagePalette = { export type SanityImageDimensions = { _type: 'sanity.imageDimensions' - height?: number - width?: number - aspectRatio?: number + height: number + width: number + aspectRatio: number } export type SanityImageHotspot = { _type: 'sanity.imageHotspot' - x?: number - y?: number - height?: number - width?: number + x: number + y: number + height: number + width: number } export type SanityImageCrop = { _type: 'sanity.imageCrop' - top?: number - bottom?: number - left?: number - right?: number + top: number + bottom: number + left: number + right: number } export type SanityFileAsset = { @@ -496,9 +582,11 @@ export type SanityAssetSourceData = { export type AllSanitySchemaTypes = | CallToAction - | Link | InfoSection + | BlockContentTextOnly | BlockContent + | Button + | Link | Settings | Page | Post @@ -585,7 +673,7 @@ export type SettingsQueryResult = { } } | null // Variable: getPageQuery -// Query: *[_type == 'page' && slug.current == $slug][0]{ _id, _type, name, slug, heading, subheading, "pageBuilder": pageBuilder[]{ ..., _type == "callToAction" => { link { ..., _type == "link" => { "page": page->slug.current, "post": post->slug.current } }, }, _type == "infoSection" => { content[]{ ..., markDefs[]{ ..., _type == "link" => { "page": page->slug.current, "post": post->slug.current } } } }, }, } +// Query: *[_type == 'page' && slug.current == $slug][0]{ _id, _type, name, slug, heading, subheading, "pageBuilder": pageBuilder[]{ ..., _type == "callToAction" => { ..., button { ..., link { ..., _type == "link" => { "page": page->slug.current, "post": post->slug.current } } } }, _type == "infoSection" => { content[]{ ..., markDefs[]{ ..., _type == "link" => { "page": page->slug.current, "post": post->slug.current } } } }, }, } export type GetPageQueryResult = { _id: string _type: 'page' @@ -597,24 +685,9 @@ export type GetPageQueryResult = { | { _key: string _type: 'callToAction' + eyebrow?: string heading: string - text?: string - buttonText?: string - link: { - _type: 'link' - linkType?: 'href' | 'page' | 'post' - href?: string - page: string | null - post: string | null - openInNewTab?: boolean - } | null - } - | { - _key: string - _type: 'infoSection' - heading?: string - subheading?: string - content: Array<{ + body?: Array<{ children?: Array<{ marks?: Array text?: string @@ -623,19 +696,85 @@ export type GetPageQueryResult = { }> style?: 'blockquote' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'normal' listItem?: 'bullet' | 'number' - markDefs: Array<{ - linkType?: 'href' | 'page' | 'post' + markDefs?: Array<{ href?: string - page: string | null - post: string | null - openInNewTab?: boolean _type: 'link' _key: string - }> | null + }> level?: number _type: 'block' _key: string - }> | null + }> + button: { + _type: 'button' + buttonText?: string + link: { + _type: 'link' + linkType?: 'href' | 'page' | 'post' + href?: string + page: string | null + post: string | null + openInNewTab?: boolean + } | null + } | null + image?: { + asset?: { + _ref: string + _type: 'reference' + _weak?: boolean + [internalGroqTypeReferenceTo]?: 'sanity.imageAsset' + } + media?: unknown + hotspot?: SanityImageHotspot + crop?: SanityImageCrop + _type: 'image' + } + theme?: 'dark' | 'light' + contentAlignment?: 'imageFirst' | 'textFirst' + } + | { + _key: string + _type: 'infoSection' + heading?: string + subheading?: string + content: Array< + | { + children?: Array<{ + marks?: Array + text?: string + _type: 'span' + _key: string + }> + style?: 'blockquote' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'normal' + listItem?: 'bullet' | 'number' + markDefs: Array<{ + linkType?: 'href' | 'page' | 'post' + href?: string + page: string | null + post: string | null + openInNewTab?: boolean + _type: 'link' + _key: string + }> | null + level?: number + _type: 'block' + _key: string + } + | { + asset?: { + _ref: string + _type: 'reference' + _weak?: boolean + [internalGroqTypeReferenceTo]?: 'sanity.imageAsset' + } + media?: unknown + hotspot?: SanityImageHotspot + crop?: SanityImageCrop + _type: 'image' + _key: string + markDefs: null + } + > | null } > | null } | null @@ -736,28 +875,44 @@ export type MorePostsQueryResult = Array<{ // Variable: postQuery // Query: *[_type == "post" && slug.current == $slug] [0] { content[]{ ..., markDefs[]{ ..., _type == "link" => { "page": page->slug.current, "post": post->slug.current } } }, _id, "status": select(_originalId in path("drafts.**") => "draft", "published"), "title": coalesce(title, "Untitled"), "slug": slug.current, excerpt, coverImage, "date": coalesce(date, _updatedAt), "author": author->{firstName, lastName, picture}, } export type PostQueryResult = { - content: Array<{ - children?: Array<{ - marks?: Array - text?: string - _type: 'span' - _key: string - }> - style?: 'blockquote' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'normal' - listItem?: 'bullet' | 'number' - markDefs: Array<{ - linkType?: 'href' | 'page' | 'post' - href?: string - page: string | null - post: string | null - openInNewTab?: boolean - _type: 'link' - _key: string - }> | null - level?: number - _type: 'block' - _key: string - }> | null + content: Array< + | { + children?: Array<{ + marks?: Array + text?: string + _type: 'span' + _key: string + }> + style?: 'blockquote' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'normal' + listItem?: 'bullet' | 'number' + markDefs: Array<{ + linkType?: 'href' | 'page' | 'post' + href?: string + page: string | null + post: string | null + openInNewTab?: boolean + _type: 'link' + _key: string + }> | null + level?: number + _type: 'block' + _key: string + } + | { + asset?: { + _ref: string + _type: 'reference' + _weak?: boolean + [internalGroqTypeReferenceTo]?: 'sanity.imageAsset' + } + media?: unknown + hotspot?: SanityImageHotspot + crop?: SanityImageCrop + _type: 'image' + _key: string + markDefs: null + } + > | null _id: string status: 'draft' | 'published' title: string @@ -811,7 +966,7 @@ import '@sanity/client' declare module '@sanity/client' { interface SanityQueries { '*[_type == "settings"][0]': SettingsQueryResult - '\n *[_type == \'page\' && slug.current == $slug][0]{\n _id,\n _type,\n name,\n slug,\n heading,\n subheading,\n "pageBuilder": pageBuilder[]{\n ...,\n _type == "callToAction" => {\n \n link {\n ...,\n \n _type == "link" => {\n "page": page->slug.current,\n "post": post->slug.current\n }\n\n }\n,\n },\n _type == "infoSection" => {\n content[]{\n ...,\n markDefs[]{\n ...,\n \n _type == "link" => {\n "page": page->slug.current,\n "post": post->slug.current\n }\n\n }\n }\n },\n },\n }\n': GetPageQueryResult + '\n *[_type == \'page\' && slug.current == $slug][0]{\n _id,\n _type,\n name,\n slug,\n heading,\n subheading,\n "pageBuilder": pageBuilder[]{\n ...,\n _type == "callToAction" => {\n ...,\n button {\n ...,\n \n link {\n ...,\n \n _type == "link" => {\n "page": page->slug.current,\n "post": post->slug.current\n }\n\n }\n\n }\n },\n _type == "infoSection" => {\n content[]{\n ...,\n markDefs[]{\n ...,\n \n _type == "link" => {\n "page": page->slug.current,\n "post": post->slug.current\n }\n\n }\n }\n },\n },\n }\n': GetPageQueryResult '\n *[_type == "page" || _type == "post" && defined(slug.current)] | order(_type asc) {\n "slug": slug.current,\n _type,\n _updatedAt,\n }\n': SitemapDataResult '\n *[_type == "post" && defined(slug.current)] | order(date desc, _updatedAt desc) {\n \n _id,\n "status": select(_originalId in path("drafts.**") => "draft", "published"),\n "title": coalesce(title, "Untitled"),\n "slug": slug.current,\n excerpt,\n coverImage,\n "date": coalesce(date, _updatedAt),\n "author": author->{firstName, lastName, picture},\n\n }\n': AllPostsQueryResult '\n *[_type == "post" && _id != $skip && defined(slug.current)] | order(date desc, _updatedAt desc) [0...$limit] {\n \n _id,\n "status": select(_originalId in path("drafts.**") => "draft", "published"),\n "title": coalesce(title, "Untitled"),\n "slug": slug.current,\n excerpt,\n coverImage,\n "date": coalesce(date, _updatedAt),\n "author": author->{firstName, lastName, picture},\n\n }\n': MorePostsQueryResult diff --git a/frontend/sanity/lib/client.ts b/frontend/sanity/lib/client.ts index bd5e939c..d2947c25 100644 --- a/frontend/sanity/lib/client.ts +++ b/frontend/sanity/lib/client.ts @@ -1,25 +1,13 @@ import {createClient} from 'next-sanity' import {apiVersion, dataset, projectId, studioUrl} from '@/sanity/lib/api' -import {token} from './token' +import {token} from '@/sanity/lib/token' export const client = createClient({ projectId, dataset, apiVersion, useCdn: true, - perspective: 'published', token, // Required if you have a private dataset - stega: { - studioUrl, - // Set logger to 'console' for more verbose logging - // logger: console, - filter: (props) => { - if (props.sourcePath.at(-1) === 'title') { - return true - } - - return props.filterDefault(props) - }, - }, + stega: {studioUrl}, }) diff --git a/frontend/sanity/lib/live.ts b/frontend/sanity/lib/live.ts index 5c36b36b..0395e7ac 100644 --- a/frontend/sanity/lib/live.ts +++ b/frontend/sanity/lib/live.ts @@ -1,6 +1,6 @@ -import {defineLive} from 'next-sanity' -import {client} from './client' -import {token} from './token' +import {defineLive} from 'next-sanity/live' +import {client} from '@/sanity/lib/client' +import {token} from '@/sanity/lib/token' /** * Use defineLive to enable automatic revalidation and refreshing of your fetched content diff --git a/frontend/sanity/lib/queries.ts b/frontend/sanity/lib/queries.ts index 5e5e05d1..6d525b06 100644 --- a/frontend/sanity/lib/queries.ts +++ b/frontend/sanity/lib/queries.ts @@ -38,7 +38,11 @@ export const getPageQuery = defineQuery(` "pageBuilder": pageBuilder[]{ ..., _type == "callToAction" => { - ${linkFields}, + ..., + button { + ..., + ${linkFields} + } }, _type == "infoSection" => { content[]{ diff --git a/frontend/sanity/lib/types.ts b/frontend/sanity/lib/types.ts new file mode 100644 index 00000000..bc6864f8 --- /dev/null +++ b/frontend/sanity/lib/types.ts @@ -0,0 +1,4 @@ +import { GetPageQueryResult } from "@/sanity.types"; + +export type PageBuilderSection = NonNullable["pageBuilder"]>[number]; +export type ExtractPageBuilderType = Extract; \ No newline at end of file diff --git a/frontend/sanity/lib/utils.ts b/frontend/sanity/lib/utils.ts index 80f6cefc..f2c2435e 100644 --- a/frontend/sanity/lib/utils.ts +++ b/frontend/sanity/lib/utils.ts @@ -1,41 +1,18 @@ -import createImageUrlBuilder from '@sanity/image-url' -import {Link} from '@/sanity.types' -import {dataset, projectId, studioUrl} from '@/sanity/lib/api' -import {createDataAttribute, CreateDataAttributeProps} from 'next-sanity' -import {getImageDimensions} from '@sanity/asset-utils' - -const imageBuilder = createImageUrlBuilder({ - projectId: projectId || '', - dataset: dataset || '', -}) - -export const urlForImage = (source: any) => { - // Ensure that source image contains a valid reference - if (!source?.asset?._ref) { - return undefined - } - - const imageRef = source?.asset?._ref - const crop = source.crop - - // get the image's og dimensions - const {width, height} = getImageDimensions(imageRef) - - if (Boolean(crop)) { - // compute the cropped image's area - const croppedWidth = Math.floor(width * (1 - (crop.right + crop.left))) - - const croppedHeight = Math.floor(height * (1 - (crop.top + crop.bottom))) - - // compute the cropped image's position - const left = Math.floor(width * crop.left) - const top = Math.floor(height * crop.top) - - // gather into a url - return imageBuilder?.image(source).rect(left, top, croppedWidth, croppedHeight).auto('format') - } - - return imageBuilder?.image(source).auto('format') +import { Link } from "@/sanity.types"; +import { dataset, projectId, studioUrl } from "@/sanity/lib/api"; +import { createDataAttribute, CreateDataAttributeProps } from "next-sanity"; +import imageUrlBuilder from "@sanity/image-url"; +import type { SanityImageSource } from "@sanity/image-url/lib/types/types"; + +const builder = imageUrlBuilder({ + projectId: projectId || "", + dataset: dataset || "", +}); + +// Create an image URL builder using the client +// Export a function that can be used to get image URLs +function urlForImage(source: SanityImageSource) { + return builder.image(source); } export function resolveOpenGraphImage(image: any, width = 1200, height = 627) { diff --git a/frontend/tailwind.config.ts b/frontend/tailwind.config.ts index 1d0b0616..0fe26732 100644 --- a/frontend/tailwind.config.ts +++ b/frontend/tailwind.config.ts @@ -95,7 +95,8 @@ export default { }, }, fontFamily: { - sans: ['var(--font-inter)'], + sans: ["var(--font-inter)"], + mono: ["var(--font-ibm-plex-mono)"], }, }, }, diff --git a/package-lock.json b/package-lock.json index 188742bb..2c20fad9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,13 +26,13 @@ "autoprefixer": "^10.4.22", "date-fns": "^4.1.0", "next": "^15.5.7", - "next-sanity": "^10.1.4", + "next-sanity": "^11.6.10", "postcss": "^8.5.6", "react": "^19.2.1", "react-dom": "^19.2.1", "sanity": "^4.20.0", + "sanity-image": "^1.0.0", "sonner": "^2.0.7", - "styled-components": "^6.1.19", "tailwindcss": "^4.1.17" }, "devDependencies": { @@ -45,9 +45,9 @@ } }, "node_modules/@acemir/cssom": { - "version": "0.9.24", - "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.24.tgz", - "integrity": "sha512-5YjgMmAiT2rjJZU7XK1SNI7iqTy92DpaYVgG6x63FxkJ11UpYfLndHJATtinWJClAXiOlW9XWaUyAQf8pMrQPg==", + "version": "0.9.25", + "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.25.tgz", + "integrity": "sha512-ZWKTnGx+py7q6W3Q1q7+ZOW0GLuhgaxjBRMytOxYu5CQwIF6YCu5iCgY7NzuTt+DkpAa4jqKfvxANuCBWTzdVg==", "license": "MIT" }, "node_modules/@actions/core": { @@ -125,118 +125,124 @@ "node": ">=16" } }, + "node_modules/@architect/asap/node_modules/@aws-lite/client": { + "version": "0.21.10", + "resolved": "https://registry.npmjs.org/@aws-lite/client/-/client-0.21.10.tgz", + "integrity": "sha512-fOn3lg1ynBAxqcELRf084bNJ6gu+GGoNyC+hwitW/hg3Vc1z1ZbK5HWWTrDw8HdM/fEQ0UN++g7GXVN1GVctdQ==", + "license": "Apache-2.0", + "workspaces": [ + "plugins/acm", + "plugins/apigateway", + "plugins/apigatewaymanagementapi", + "plugins/apigatewayv2", + "plugins/cloudformation", + "plugins/cloudfront", + "plugins/cloudwatch-logs", + "plugins/dynamodb", + "plugins/iam", + "plugins/lambda", + "plugins/organizations", + "plugins/rds-data", + "plugins/route53", + "plugins/s3", + "plugins/sns", + "plugins/sqs", + "plugins/ssm", + "plugins/sts" + ], + "dependencies": { + "aws4": "^1.13.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@architect/hydrate": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@architect/hydrate/-/hydrate-4.0.10.tgz", - "integrity": "sha512-OLnfBneWfiU+xkdI5MqnMc2p3+7aurYr6Mo9seASbxoeCdh8wFOyqMRvtXZWrSkfc6K59ZZH8MIPEJ9RhOP/vA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@architect/hydrate/-/hydrate-5.0.1.tgz", + "integrity": "sha512-zje5KEhjMB54qGgfEwfFrqtiJ4/w8B/pm10Z1WXmn0P9wBVjfc8uAAC8ssVrsppNtZ6I/cSQ3dvMDOc0jYgQgA==", "license": "Apache-2.0", "dependencies": { - "@architect/inventory": "~4.0.5", - "@architect/utils": "~4.0.6", - "acorn-loose": "~8.4.0", - "chalk": "4.1.2", - "esquery": "~1.6.0", - "glob": "10.4.5", - "minimist": "~1.2.8", - "run-series": "~1.1.9", - "symlink-or-copy": "~1.3.1" + "@architect/inventory": "~5.0.0", + "@architect/utils": "~5.0.0", + "acorn-loose": "8.5.2", + "esquery": "1.6.0" }, "bin": { "arc-hydrate": "src/cli.js" }, "engines": { - "node": ">=16" + "node": ">=20" } }, "node_modules/@architect/inventory": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@architect/inventory/-/inventory-4.0.9.tgz", - "integrity": "sha512-u2huwBc3JgiM0bGLPyBy0NjcF2mtnmFWwgFl7+E72jG3BcJl1QwQqXdaHygI2WblsH4BG8C19A47Er9QKOGdiw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@architect/inventory/-/inventory-5.0.0.tgz", + "integrity": "sha512-Tlwo6wVFMhIZT2k5dBrU4gr21jboAXjaPvqOYsKKeEVG+1HLTdKSWLidAvKU0qDzGeT8T6oRTMH1WDlLTmhQmw==", "license": "Apache-2.0", "dependencies": { "@architect/asap": "~7.0.10", - "@architect/parser": "~7.0.1", - "@architect/utils": "~4.0.6", - "@aws-lite/client": "^0.21.1", - "@aws-lite/ssm": "^0.2.3", - "lambda-runtimes": "~2.0.5" + "@architect/parser": "~8.0.1", + "@architect/utils": "~5.0.0", + "@aws-lite/client": "^0.23.2", + "@aws-lite/ssm": "^0.2.5" }, "engines": { - "node": ">=16" + "node": ">=20" } }, "node_modules/@architect/parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@architect/parser/-/parser-7.0.1.tgz", - "integrity": "sha512-T4Rr/eQbtg/gPvS4HcXR7zYxLJ3gEh6pSKj0s/Y1IrvJY9QG4BDAVZgE7AYGfzqymwIF0pUI2mQ91CLi2CTnQw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@architect/parser/-/parser-8.0.1.tgz", + "integrity": "sha512-uXm4XCnMF7qeIjur69qIUiz4dq40t89M4umJW5hLZ9eEDQ2rtN/+A+kbWmbw+RV3mo2RTp4EeAb+lRnU0basew==", "license": "Apache-2.0", "engines": { - "node": ">=16" + "node": ">=20" } }, "node_modules/@architect/utils": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@architect/utils/-/utils-4.0.6.tgz", - "integrity": "sha512-aa6gNNoHxgKpQrIFOa5zNW5fD10v46AE2VZNcjToxAvm//8itbIBoGw2wj8oF3gqHMKKkeLAtdO8K8tlKVN8ZA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@architect/utils/-/utils-5.0.2.tgz", + "integrity": "sha512-BNVXWpkXj6kDdIu6iu3Qh+Gbl1Ml0DKIDQ7s/VLaugvUBbvs+0cm7DA+N2xF6RtzBbnUm2NoyYaGvN5/0uYoEQ==", "license": "Apache-2.0", "dependencies": { "@aws-lite/client": "^0.21.1", - "chalk": "4.1.2", - "glob": "~10.3.12", - "path-sort": "~0.1.0", - "restore-cursor": "3.1.0", - "run-series": "~1.1.9", - "run-waterfall": "~1.1.7", - "sha": "~3.0.0" + "lambda-runtimes": "2.0.5" }, "engines": { - "node": ">=16" - } - }, - "node_modules/@architect/utils/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@architect/utils/node_modules/glob": { - "version": "10.3.16", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.16.tgz", - "integrity": "sha512-JDKXl1DiuuHJ6fVS2FXjownaavciiHNUU4mOvV/B793RLh05vZL1rcPnCSaOgv1hDT6RDlY7AB7ZUvFYAtPgAw==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.11.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=20" } }, - "node_modules/@architect/utils/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", + "node_modules/@architect/utils/node_modules/@aws-lite/client": { + "version": "0.21.10", + "resolved": "https://registry.npmjs.org/@aws-lite/client/-/client-0.21.10.tgz", + "integrity": "sha512-fOn3lg1ynBAxqcELRf084bNJ6gu+GGoNyC+hwitW/hg3Vc1z1ZbK5HWWTrDw8HdM/fEQ0UN++g7GXVN1GVctdQ==", + "license": "Apache-2.0", + "workspaces": [ + "plugins/acm", + "plugins/apigateway", + "plugins/apigatewaymanagementapi", + "plugins/apigatewayv2", + "plugins/cloudformation", + "plugins/cloudfront", + "plugins/cloudwatch-logs", + "plugins/dynamodb", + "plugins/iam", + "plugins/lambda", + "plugins/organizations", + "plugins/rds-data", + "plugins/route53", + "plugins/s3", + "plugins/sns", + "plugins/sqs", + "plugins/ssm", + "plugins/sts" + ], "dependencies": { - "brace-expansion": "^2.0.1" + "aws4": "^1.13.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/@asamuzakjp/css-color": { @@ -287,9 +293,9 @@ "license": "MIT" }, "node_modules/@aws-lite/client": { - "version": "0.21.10", - "resolved": "https://registry.npmjs.org/@aws-lite/client/-/client-0.21.10.tgz", - "integrity": "sha512-fOn3lg1ynBAxqcELRf084bNJ6gu+GGoNyC+hwitW/hg3Vc1z1ZbK5HWWTrDw8HdM/fEQ0UN++g7GXVN1GVctdQ==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/@aws-lite/client/-/client-0.23.2.tgz", + "integrity": "sha512-K7QgDnYZfe5dTLzZPq9ZSVtpQjT3gPvowJrtzXLZxpKPPWUsyeMbUvtOgfCNemSCH2xK1YCVh7YsLNtYb6ZYtw==", "license": "Apache-2.0", "workspaces": [ "plugins/acm", @@ -312,7 +318,7 @@ "plugins/sts" ], "dependencies": { - "aws4": "^1.13.0" + "aws4": "^1.13.2" }, "engines": { "node": ">=16" @@ -364,7 +370,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2119,7 +2124,6 @@ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.8.tgz", "integrity": "sha512-XcE9fcnkHCbWkjeKyi0lllwXmBLtyYb5dt89dJyx23I9+LSh5vZDIuk7OLG4VM1lgrXZQcY6cxyZyk5WVPRv/A==", "license": "MIT", - "peer": true, "dependencies": { "@codemirror/state": "^6.5.0", "crelt": "^1.0.6", @@ -2211,7 +2215,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -2253,7 +2256,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -2287,7 +2289,6 @@ "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", "license": "MIT", - "peer": true, "dependencies": { "@dnd-kit/accessibility": "^3.1.1", "@dnd-kit/utilities": "^3.2.2", @@ -2374,7 +2375,6 @@ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", "license": "MIT", - "peer": true, "dependencies": { "@emotion/memoize": "^0.8.1" } @@ -4119,25 +4119,25 @@ } }, "node_modules/@mux/mux-player": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@mux/mux-player/-/mux-player-3.9.2.tgz", - "integrity": "sha512-QK7y1fYoxR2XHc5GO2owfpClsb94hN7k+bTNKp2+oolTAfc2PT1ygGVDq7RFUPz6VNTiZUBvDlRn62CylfxTFw==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@mux/mux-player/-/mux-player-3.10.0.tgz", + "integrity": "sha512-p2+ZrBNtSInmlf26MaJofrGsYgZdiAc7r9Wk1tHfttKI0/U9aeTj5xufx28SsfzlNoU2qEkoHyiGQZgQKKdrnA==", "license": "MIT", "dependencies": { - "@mux/mux-video": "0.28.2", - "@mux/playback-core": "0.31.4", + "@mux/mux-video": "0.29.0", + "@mux/playback-core": "0.32.0", "media-chrome": "~4.16.1", "player.style": "^0.3.0" } }, "node_modules/@mux/mux-player-react": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@mux/mux-player-react/-/mux-player-react-3.9.2.tgz", - "integrity": "sha512-BzTQEpjNdxyL2hlbZaUKZmSdw7m6YS00zzmrnuBAxnFDZ3m9z45lo3GrtRmnuy3v30gO0faQ1S34BTRLxGNRLQ==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@mux/mux-player-react/-/mux-player-react-3.10.0.tgz", + "integrity": "sha512-Ec+BSCJFIdwAB3AUWKc+BBap8brgFm7c5eay7MF83TfdC25WVZqsVD8RqUq1gc0g1nZ9mlspR2TIaS/+mLXQ+Q==", "license": "MIT", "dependencies": { - "@mux/mux-player": "3.9.2", - "@mux/playback-core": "0.31.4", + "@mux/mux-player": "3.10.0", + "@mux/playback-core": "0.32.0", "prop-types": "^15.8.1" }, "peerDependencies": { @@ -4155,9 +4155,9 @@ } }, "node_modules/@mux/mux-player/node_modules/player.style": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/player.style/-/player.style-0.3.0.tgz", - "integrity": "sha512-ny1TbqA2ZsUd6jzN+F034+UMXVK7n5SrwepsrZ2gIqVz00Hn0ohCUbbUdst/2IOFCy0oiTbaOXkSFxRw1RmSlg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/player.style/-/player.style-0.3.1.tgz", + "integrity": "sha512-z/T8hJGaTkHT9vdXgWdOgF37eB1FV7/j52VXQZ2lgEhpru9oT8TaUWIxp6GoxTnhPBM4X6nSbpkAHrT7UTjUKg==", "license": "MIT", "workspaces": [ ".", @@ -4167,35 +4167,26 @@ "themes/*" ], "dependencies": { - "media-chrome": "~4.14.0" - } - }, - "node_modules/@mux/mux-player/node_modules/player.style/node_modules/media-chrome": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/media-chrome/-/media-chrome-4.14.0.tgz", - "integrity": "sha512-IEdFb4blyF15vLvQzLIn6USJBv7Kf2ne+TfLQKBYI5Z0f9VEBVZz5MKy4Uhi0iA9lStl2S9ENIujJRuJIa5OiA==", - "license": "MIT", - "dependencies": { - "ce-la-react": "^0.3.0" + "media-chrome": "~4.16.1" } }, "node_modules/@mux/mux-video": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@mux/mux-video/-/mux-video-0.28.2.tgz", - "integrity": "sha512-+ij1EOI7Tx2zYAzIXAIbZJzxqISmIIz3f7aE/R5JFt9dcPxCNIN6/iXGJikiD1JQ4S3T7Mco8bHXaf1S0CJbIQ==", + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/@mux/mux-video/-/mux-video-0.29.0.tgz", + "integrity": "sha512-G33I58GFho6iFdD0gAmud0Q2YvbjjzLoLtbCibt8DRJQa4ULR9WAvsyTi8BM301hguGjxuHKdQjVtgH8cVa7bA==", "license": "MIT", "dependencies": { "@mux/mux-data-google-ima": "0.2.8", - "@mux/playback-core": "0.31.4", + "@mux/playback-core": "0.32.0", "castable-video": "~1.1.11", "custom-media-element": "~1.4.5", "media-tracks": "~0.3.4" } }, "node_modules/@mux/playback-core": { - "version": "0.31.4", - "resolved": "https://registry.npmjs.org/@mux/playback-core/-/playback-core-0.31.4.tgz", - "integrity": "sha512-qQrNAAdJ7vjr1XEObE1hOUmuYngk/fjwmtYhpzkX4jJZwUC8I0rHjeFv7LXuCQD1D/mYJlWEpuyA0gPd6Y2eQw==", + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@mux/playback-core/-/playback-core-0.32.0.tgz", + "integrity": "sha512-uXg7Qo/JvW7BviyDTnlHVqmLKqAxlP40wIE4+fawKQKM9MsmWSoxg6pRMW0wtMJ7pCg3jitefoox9OtKzVAy7g==", "license": "MIT", "dependencies": { "hls.js": "~1.6.15", @@ -4530,7 +4521,6 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", "license": "MIT", - "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -4676,9 +4666,9 @@ } }, "node_modules/@oxc-parser/binding-android-arm64": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.97.0.tgz", - "integrity": "sha512-oLCGuX+1zqTIUjTfCxiZO/Ad4p4wo2MksBSpjdgOC7htyfIg/Se9PK2xU2jzSXlIyzBivwK6AJFqJpcbzJlmsQ==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.99.0.tgz", + "integrity": "sha512-V4jhmKXgQQdRnm73F+r3ZY4pUEsijQeSraFeaCGng7abSNJGs76X6l82wHnmjLGFAeY00LWtjcELs7ZmbJ9+lA==", "cpu": [ "arm64" ], @@ -4693,9 +4683,9 @@ } }, "node_modules/@oxc-parser/binding-darwin-arm64": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.97.0.tgz", - "integrity": "sha512-Rg7Yy0ICS4HiF+/ZcmjB7h67YOw23Iw06ETHP+0UHQkNuecFew9aDycGG62ohCb1/+QC5uVTW9naR4F8L3FndQ==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.99.0.tgz", + "integrity": "sha512-Rp41nf9zD5FyLZciS9l1GfK8PhYqrD5kEGxyTOA2esTLeAy37rZxetG2E3xteEolAkeb2WDkVrlxPtibeAncMg==", "cpu": [ "arm64" ], @@ -4710,9 +4700,9 @@ } }, "node_modules/@oxc-parser/binding-darwin-x64": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.97.0.tgz", - "integrity": "sha512-Kr2rgG7yEnv6ivreQtwKAetGeovfWMxsWzTPlM4BMkhI6jsj10BFN+tP5kUHrES66e7eaoFs0SNepHulCpofdw==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.99.0.tgz", + "integrity": "sha512-WVonp40fPPxo5Gs0POTI57iEFv485TvNKOHMwZRhigwZRhZY2accEAkYIhei9eswF4HN5B44Wybkz7Gd1Qr/5Q==", "cpu": [ "x64" ], @@ -4727,9 +4717,9 @@ } }, "node_modules/@oxc-parser/binding-freebsd-x64": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.97.0.tgz", - "integrity": "sha512-kAWTFHVR3KLcYQ7oEpRQV+WtEAPWZODQ/FsIVGVNAjzIfm9myuiLh7Kys8Vh3QwATPCuPg1w7FGexIm/A1a1lQ==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.99.0.tgz", + "integrity": "sha512-H30bjOOttPmG54gAqu6+HzbLEzuNOYO2jZYrIq4At+NtLJwvNhXz28Hf5iEAFZIH/4hMpLkM4VN7uc+5UlNW3Q==", "cpu": [ "x64" ], @@ -4744,9 +4734,9 @@ } }, "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.97.0.tgz", - "integrity": "sha512-w4wYc5KRO6Mdxq9wXh6fAMuxB1LX7btj74+fTZG7/eP7ZiCTsxIM0GR4l7xQjRJOFd9rzlu7ZPq3LM7e9wmPTg==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.99.0.tgz", + "integrity": "sha512-0Z/Th0SYqzSRDPs6tk5lQdW0i73UCupnim3dgq2oW0//UdLonV/5wIZCArfKGC7w9y4h8TxgXpgtIyD1kKzzlQ==", "cpu": [ "arm" ], @@ -4761,9 +4751,9 @@ } }, "node_modules/@oxc-parser/binding-linux-arm-musleabihf": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.97.0.tgz", - "integrity": "sha512-DY+3aV2k9YyCRQ5/Zw83cG0xXvgnA6d31JSGfWkOAq9Aa22GeBE/NOzqqMw72HcxRKvYcJsCVpBwQaTICuBGIQ==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.99.0.tgz", + "integrity": "sha512-xo0wqNd5bpbzQVNpAIFbHk1xa+SaS/FGBABCd942SRTnrpxl6GeDj/s1BFaGcTl8MlwlKVMwOcyKrw/2Kdfquw==", "cpu": [ "arm" ], @@ -4778,9 +4768,9 @@ } }, "node_modules/@oxc-parser/binding-linux-arm64-gnu": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.97.0.tgz", - "integrity": "sha512-4B/H4CSc8LZSBTzQHMHQbbZww8B1qaQO+1iBxeKYo1LBD5ZAUZwgYCyM1VUPgqEfUY358a1/Nhn4RIwAbnEFWw==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.99.0.tgz", + "integrity": "sha512-u26I6LKoLTPTd4Fcpr0aoAtjnGf5/ulMllo+QUiBhupgbVCAlaj4RyXH/mvcjcsl2bVBv9E/gYJZz2JjxQWXBA==", "cpu": [ "arm64" ], @@ -4795,9 +4785,9 @@ } }, "node_modules/@oxc-parser/binding-linux-arm64-musl": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.97.0.tgz", - "integrity": "sha512-Wg8ZPEXR3HHDlzvxqFH9XVc6xfnXaEjMmAuJ9priQmMin42O4B5TwvLmBNlW5Is30faKopGXiiH/Gjmcw/x4xg==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.99.0.tgz", + "integrity": "sha512-qhftDo2D37SqCEl3ZTa367NqWSZNb1Ddp34CTmShLKFrnKdNiUn55RdokLnHtf1AL5ssaQlYDwBECX7XiBWOhw==", "cpu": [ "arm64" ], @@ -4812,9 +4802,9 @@ } }, "node_modules/@oxc-parser/binding-linux-riscv64-gnu": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.97.0.tgz", - "integrity": "sha512-OJNHq6KGPdOh+YVk67T3MfRzLIy9MDMZCzH1f+xgh+kKPWzC4RqlqDNuoyqYiIxjO6kAVZZUQYvx4XVSKluJxw==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.99.0.tgz", + "integrity": "sha512-zxn/xkf519f12FKkpL5XwJipsylfSSnm36h6c1zBDTz4fbIDMGyIhHfWfwM7uUmHo9Aqw1pLxFpY39Etv398+Q==", "cpu": [ "riscv64" ], @@ -4829,9 +4819,9 @@ } }, "node_modules/@oxc-parser/binding-linux-s390x-gnu": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.97.0.tgz", - "integrity": "sha512-yZV1kKNzewd/lwWYBw6IRy7ckbduQsUt5LisM8NXt8T0Dg+jhkyy4y7M6X57/KyvT//vHCuRvpnwTr9lk1M9IA==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.99.0.tgz", + "integrity": "sha512-Y1eSDKDS5E4IVC7Oxw+NbYAKRmJPMJTIjW+9xOWwteDHkFqpocKe0USxog+Q1uhzalD9M0p9eXWEWdGQCMDBMQ==", "cpu": [ "s390x" ], @@ -4846,9 +4836,9 @@ } }, "node_modules/@oxc-parser/binding-linux-x64-gnu": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.97.0.tgz", - "integrity": "sha512-Ck7cJMsZX19B0dvsl1v9a8VLeL9kEfUc0zMBjkgYmJfhVuINHcnZlQs8E5zTfD+dpP1wYzUhwgqv3o6hl9QaXA==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.99.0.tgz", + "integrity": "sha512-YVJMfk5cFWB8i2/nIrbk6n15bFkMHqWnMIWkVx7r2KwpTxHyFMfu2IpeVKo1ITDSmt5nBrGdLHD36QRlu2nDLg==", "cpu": [ "x64" ], @@ -4863,9 +4853,9 @@ } }, "node_modules/@oxc-parser/binding-linux-x64-musl": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.97.0.tgz", - "integrity": "sha512-COlEtnuyWfVjvylxhxoSd2HkAI85flvrQu3vGtt4Bm3+ZVdteFCNQskk3q8XfD0Cs+FdtnvDMbhApHyFKaEfsQ==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.99.0.tgz", + "integrity": "sha512-2+SDPrie5f90A1b9EirtVggOgsqtsYU5raZwkDYKyS1uvJzjqHCDhG/f4TwQxHmIc5YkczdQfwvN91lwmjsKYQ==", "cpu": [ "x64" ], @@ -4880,9 +4870,9 @@ } }, "node_modules/@oxc-parser/binding-wasm32-wasi": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.97.0.tgz", - "integrity": "sha512-5Rt1uEe1VTw6aUluz8/nBNUbyCVGzwMJbXvPv+b4So+mFlkL+X2cTHb9LH8hcBgJ2TDITLT32J2TcV8Q8EPaKw==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.99.0.tgz", + "integrity": "sha512-DKA4j0QerUWSMADziLM5sAyM7V53Fj95CV9SjP77bPfEfT7MnvFKnneaRMqPK1cpzjAGiQF52OBUIKyk0dwOQA==", "cpu": [ "wasm32" ], @@ -4897,9 +4887,9 @@ } }, "node_modules/@oxc-parser/binding-win32-arm64-msvc": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.97.0.tgz", - "integrity": "sha512-e2HDWO997STh7gADYJcjrZ+Fh5cSF8fwT6rRchNoV/hSwbJSC6ZpYFFFQEw2qZ2qyMeTmqQ6QVf7T9oKV18UXg==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.99.0.tgz", + "integrity": "sha512-EaB3AvsxqdNUhh9FOoAxRZ2L4PCRwDlDb//QXItwyOJrX7XS+uGK9B1KEUV4FZ/7rDhHsWieLt5e07wl2Ti5AQ==", "cpu": [ "arm64" ], @@ -4914,9 +4904,9 @@ } }, "node_modules/@oxc-parser/binding-win32-x64-msvc": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.97.0.tgz", - "integrity": "sha512-DQ92RUXw67ynu6fUzlFN/gr/rN3nxEQ35AC3EJYAgNKy/GFFJbNKGwFxGnmooje29XhBwibaRdxDs1OIgZBHvQ==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.99.0.tgz", + "integrity": "sha512-sJN1Q8h7ggFOyDn0zsHaXbP/MklAVUvhrbq0LA46Qum686P3SZQHjbATqJn9yaVEvaSKXCshgl0vQ1gWkGgpcQ==", "cpu": [ "x64" ], @@ -4931,9 +4921,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.97.0.tgz", - "integrity": "sha512-lxmZK4xFrdvU0yZiDwgVQTCvh2gHWBJCBk5ALsrtsBWhs0uDIi+FTOnXRQeQfs304imdvTdaakT/lqwQ8hkOXQ==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.99.0.tgz", + "integrity": "sha512-LLDEhXB7g1m5J+woRSgfKsFPS3LhR9xRhTeIoEBm5WrkwMxn6eZ0Ld0c0K5eHB57ChZX6I3uSmmLjZ8pcjlRcw==", "dev": true, "license": "MIT", "funding": { @@ -5005,12 +4995,12 @@ } }, "node_modules/@portabletext/block-tools": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@portabletext/block-tools/-/block-tools-4.1.4.tgz", - "integrity": "sha512-/JtaaMzMdkadJBoZ5r7OVGFswGXBsLErLA9NyfaQ5tgk6tDZWG9Q97/uZUNVSIDiH75G8T77GWBbu24jXLSlSQ==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@portabletext/block-tools/-/block-tools-4.1.6.tgz", + "integrity": "sha512-BlUGY3lbKH3dRsdxCR6jNFcgCP11tnOZxkIMZMDqzzrw4VKjuX/My2Nw152QE9sGbRqrpRZ6zDpnYYFiMm8S1A==", "license": "MIT", "dependencies": { - "@portabletext/sanity-bridge": "^1.2.7", + "@portabletext/sanity-bridge": "^1.2.9", "@portabletext/schema": "^2.0.0", "lodash": "^4.17.21" }, @@ -5018,17 +5008,16 @@ "node": ">=20.19 <22 || >=22.12" }, "peerDependencies": { - "@sanity/types": "^4.20.0" + "@sanity/types": "^4.20.3" } }, "node_modules/@portabletext/editor": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@portabletext/editor/-/editor-3.2.1.tgz", - "integrity": "sha512-JFXpuvJBn0Rp5NPZ6vQdtuQpWOeChFCPlfwSg9bPLY0kSI4DHzjVBQtTcTBKYoXgeMOAiMr9daHyvSDQPR2XdQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@portabletext/editor/-/editor-3.2.4.tgz", + "integrity": "sha512-7Rz9U3tO+Fng7uL0Riyqk7Uoajlj0PusclFJ+UyQQXprkzutuXetcWGyZU60ceIyTx5jWADALg0vBKNV1oK1qQ==", "license": "MIT", - "peer": true, "dependencies": { - "@portabletext/block-tools": "^4.1.4", + "@portabletext/block-tools": "^4.1.6", "@portabletext/keyboard-shortcuts": "^2.1.0", "@portabletext/patches": "^2.0.0", "@portabletext/schema": "^2.0.0", @@ -5039,18 +5028,18 @@ "lodash": "^4.17.21", "lodash.startcase": "^4.4.0", "react-compiler-runtime": "1.0.0", - "slate": "0.120.0", + "slate": "^0.118.1", "slate-dom": "^0.119.0", - "slate-react": "0.120.0", + "slate-react": "^0.119.0", "xstate": "^5.24.0" }, "engines": { "node": ">=20.19 <22 || >=22.12" }, "peerDependencies": { - "@portabletext/sanity-bridge": "^1.2.7", - "@sanity/schema": "^4.20.0", - "@sanity/types": "^4.20.0", + "@portabletext/sanity-bridge": "^1.2.9", + "@sanity/schema": "^4.20.2", + "@sanity/types": "^4.20.3", "react": "^18.3 || ^19", "rxjs": "^7.8.2" } @@ -5078,28 +5067,28 @@ } }, "node_modules/@portabletext/plugin-character-pair-decorator": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@portabletext/plugin-character-pair-decorator/-/plugin-character-pair-decorator-4.0.14.tgz", - "integrity": "sha512-ljEK5Rf/0meKYHeyS1dtcXiRvMqc6Go2EiPcAF6XQ7DwWGSLVChlXaH4Bha3zKUWZKF+IjqdFO9Fve56L0/2kg==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@portabletext/plugin-character-pair-decorator/-/plugin-character-pair-decorator-4.0.17.tgz", + "integrity": "sha512-thHhZplRkR2Erw/rdygl95yqrVU4+DybLbetMqgHUVpD3PDuzvlNchHJXfxPVROfFdxU7GFssjFHqQ3ldv5JGg==", "license": "MIT", "dependencies": { "@xstate/react": "^6.0.0", "react-compiler-runtime": "1.0.0", - "remeda": "^2.30.0", + "remeda": "^2.32.0", "xstate": "^5.24.0" }, "engines": { "node": ">=20.19 <22 || >=22.12" }, "peerDependencies": { - "@portabletext/editor": "^3.2.1", + "@portabletext/editor": "^3.2.4", "react": "^18.3 || ^19" } }, "node_modules/@portabletext/plugin-input-rule": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@portabletext/plugin-input-rule/-/plugin-input-rule-1.0.14.tgz", - "integrity": "sha512-RjwVBB540q9J3CuW6HcQHeFow0e+e+GFiyWwu0CHPFn3SWSytFVzpnk2Bbm+jazeULj5jEzIY8GlRTtfAAMjQw==", + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@portabletext/plugin-input-rule/-/plugin-input-rule-1.0.17.tgz", + "integrity": "sha512-FVjEdkIuMSh1Z8Rlkh2Thg1MGFtih0eBFgaF9f9zcT5reUBREvV2iv7HhQIMjYC1tVJlVMX8alN07AqpMwFOBg==", "license": "MIT", "dependencies": { "@xstate/react": "^6.0.0", @@ -5110,32 +5099,32 @@ "node": ">=20.19 <22 || >=22.12" }, "peerDependencies": { - "@portabletext/editor": "^3.2.1", + "@portabletext/editor": "^3.2.4", "react": "^18.3 || ^19" } }, "node_modules/@portabletext/plugin-markdown-shortcuts": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@portabletext/plugin-markdown-shortcuts/-/plugin-markdown-shortcuts-4.0.14.tgz", - "integrity": "sha512-rQjiWRD8sYeKKqNKYOw2UxPXLIIHKu3JUEg5tXmeCDTyKvc0q3PAPHOnu7S1R4SM4ibyjt3RlTOlJPMd7WSUvg==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@portabletext/plugin-markdown-shortcuts/-/plugin-markdown-shortcuts-4.0.17.tgz", + "integrity": "sha512-GigQgq/l4NtlIemixYbXqJ+20NWSGXHlOWHCsn/p2UTzOyTJ4E4WHgQngJAzbfFEzwjik9SEva577l+a4O3mrA==", "license": "MIT", "dependencies": { - "@portabletext/plugin-character-pair-decorator": "^4.0.14", - "@portabletext/plugin-input-rule": "^1.0.14", + "@portabletext/plugin-character-pair-decorator": "^4.0.17", + "@portabletext/plugin-input-rule": "^1.0.17", "react-compiler-runtime": "1.0.0" }, "engines": { "node": ">=20.19 <22 || >=22.12" }, "peerDependencies": { - "@portabletext/editor": "^3.2.1", + "@portabletext/editor": "^3.2.4", "react": "^18.3 || ^19" } }, "node_modules/@portabletext/plugin-one-line": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@portabletext/plugin-one-line/-/plugin-one-line-3.0.14.tgz", - "integrity": "sha512-5tpQ9WuNHr0/rh307am1e8oKoZ80XP7WDafgMS0qtl8kwyy3pk73r3sg/x81hWzolfeG0sN9J9hCggIMsEtxvQ==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/@portabletext/plugin-one-line/-/plugin-one-line-3.0.17.tgz", + "integrity": "sha512-wJFugBRAppFMOcRCyMxdjb6yFI3dVB/PvxVrqyw3m0JOPcwpf5Zro9xCmWRxisY5IwAlRflCZriSbCdNp6KIFQ==", "license": "MIT", "dependencies": { "react-compiler-runtime": "1.0.0" @@ -5144,47 +5133,47 @@ "node": ">=20.19 <22 || >=22.12" }, "peerDependencies": { - "@portabletext/editor": "^3.2.1", + "@portabletext/editor": "^3.2.4", "react": "^18.3 || ^19" } }, "node_modules/@portabletext/plugin-typography": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@portabletext/plugin-typography/-/plugin-typography-4.0.14.tgz", - "integrity": "sha512-JUPn5eaOuKuJJq20evkVqPR+UllE7K8insM50SCITDqc0bdIz63OtEUlXHfw2ZPVjhQuI/nhnngyRZDP0Vq2+Q==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@portabletext/plugin-typography/-/plugin-typography-4.0.17.tgz", + "integrity": "sha512-ib49gk5K2xR0LfAKY/vtoPE32436RP5EENsM96G5mAuUN+cIFA2oyVvUuEXP8NZUqQVU6JixgERFBmUElpNs2A==", "license": "MIT", "dependencies": { - "@portabletext/plugin-input-rule": "^1.0.14", + "@portabletext/plugin-input-rule": "^1.0.17", "react-compiler-runtime": "1.0.0" }, "engines": { "node": ">=20.19 <22 || >=22.12" }, "peerDependencies": { - "@portabletext/editor": "^3.2.1", + "@portabletext/editor": "^3.2.4", "react": "^18.3 || ^19" } }, "node_modules/@portabletext/react": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@portabletext/react/-/react-4.0.3.tgz", - "integrity": "sha512-sdVSXbi0L5MBVb1Ch5KwbBPZjW/Oqe6s5ZkPi4LcItzHl8rqY2jB0VxsFaGywZyn8Jc47cGLaOtyBM9HkW/9Hg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@portabletext/react/-/react-5.0.0.tgz", + "integrity": "sha512-ZEYhjsiUn2Dvrhyao3qAvi6C/re9ZBt2atp14dtwWtPruMNgp1uMf3p+URf0pEEhu+rMEh9JeK0A8FgNejEWCg==", "license": "MIT", "dependencies": { - "@portabletext/toolkit": "^3.0.1", - "@portabletext/types": "^2.0.15" + "@portabletext/toolkit": "^4.0.0", + "@portabletext/types": "^3.0.0" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=20.19 <22 || >=22.12" }, "peerDependencies": { "react": "^18.2 || ^19" } }, "node_modules/@portabletext/sanity-bridge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@portabletext/sanity-bridge/-/sanity-bridge-1.2.7.tgz", - "integrity": "sha512-+YLh2Qt4Sw61fBYgDB/LcvBTgvGVIeczdzQr55Ib1P3SYdyDCA+7xMOz+EXrbfYsGlyCNAPl4B8SAQ8k4Hxj+g==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@portabletext/sanity-bridge/-/sanity-bridge-1.2.9.tgz", + "integrity": "sha512-7n+kSyPIoAsFrUsmjRfoyHqIkNKjSjvTlwNTeP10R4xhed1vsRkQGcr/mkDV+vWENuB17Cjl6M6UNneDGFbhGg==", "license": "MIT", "dependencies": { "@portabletext/schema": "^2.0.0", @@ -5194,8 +5183,8 @@ "node": ">=20.19 <22 || >=22.12" }, "peerDependencies": { - "@sanity/schema": "^4.20.0", - "@sanity/types": "^4.20.0" + "@sanity/schema": "^4.20.2", + "@sanity/types": "^4.20.3" } }, "node_modules/@portabletext/schema": { @@ -5220,7 +5209,7 @@ "node": ">=20.19 <22 || >=22.12" } }, - "node_modules/@portabletext/to-html/node_modules/@portabletext/toolkit": { + "node_modules/@portabletext/toolkit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@portabletext/toolkit/-/toolkit-4.0.0.tgz", "integrity": "sha512-Jj/QIy3vzZCNcxiUGM7KjGhUhyVjch+9pOzotWRARPNe07R6nbF/cRsKL70q5Xizf+6PVtFYwks4CSXKInC+wg==", @@ -5232,7 +5221,7 @@ "node": ">=20.19 <22 || >=22.12" } }, - "node_modules/@portabletext/to-html/node_modules/@portabletext/types": { + "node_modules/@portabletext/types": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@portabletext/types/-/types-3.0.0.tgz", "integrity": "sha512-7U8+bFcnguNtXr4rwMDj0EvJJDRzLaaof2mQqCjUcqxuuJpAppFaATZgrKmPI1uBgtFMi4unk1nIaOOmLHrX8Q==", @@ -5241,35 +5230,14 @@ "node": ">=20.19 <22 || >=22.12" } }, - "node_modules/@portabletext/toolkit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@portabletext/toolkit/-/toolkit-3.0.3.tgz", - "integrity": "sha512-EI59/l4E0E5wCyWUzvW1FPKWfqDsbebCnCf9ZDHjXGH95X4EORlCtnPuA79PpKaHv0LTChORy55trRzW6tYnOQ==", - "license": "MIT", - "dependencies": { - "@portabletext/types": "^2.0.15" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/@portabletext/types": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@portabletext/types/-/types-2.0.15.tgz", - "integrity": "sha512-2e6i2gSQsrA/5OL5Gm4/9bxB9MNO73Fa47zj+0mT93xkoQUCGCWX5fZh1YBJ86hszaRYlqvqG08oULxvvPPp/Q==", - "license": "MIT", - "engines": { - "node": "^14.13.1 || >=16.0.0 || >=18.0.0" - } - }, "node_modules/@prettier/plugin-oxc": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@prettier/plugin-oxc/-/plugin-oxc-0.0.5.tgz", - "integrity": "sha512-A0uIVkwFrEFQJCU/Wpga6pS5t8UQDdVGB+5e7pVMtlPRw69KDmlozcAoLggwdp3FoVpzNGhngMmgfiE8KLs+BA==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@prettier/plugin-oxc/-/plugin-oxc-0.1.3.tgz", + "integrity": "sha512-aABz3zIRilpWMekbt1FL1JVBQrQLR8L4Td2SRctECrWSsXGTNn/G1BqNSKCdbvQS1LWstAXfqcXzDki7GAAJyg==", "dev": true, "license": "MIT", "dependencies": { - "oxc-parser": "0.97.0" + "oxc-parser": "0.99.0" }, "engines": { "node": ">=14" @@ -5607,6 +5575,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@sanity-image/url-builder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sanity-image/url-builder/-/url-builder-1.0.0.tgz", + "integrity": "sha512-PZ8n0FbZgHVYB4uMet8QjMvHLEqrRf+BcXoAUMMrk5OYpRQt1/Vd2hwRbkGhkoXAlD8KlQs9CFryMpXlKZu0Lg==", + "license": "MIT" + }, "node_modules/@sanity/asset-utils": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@sanity/asset-utils/-/asset-utils-2.3.0.tgz", @@ -5672,15 +5646,15 @@ } }, "node_modules/@sanity/cli": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@sanity/cli/-/cli-4.20.0.tgz", - "integrity": "sha512-6Ed5nF08xOLoIQeCGtPRADFwts6F2l5okYM0gYhvRzee5eraNXyImTjg7WAjkaIN6FCFD9zXWcpbAXGELqsrBg==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/@sanity/cli/-/cli-4.20.3.tgz", + "integrity": "sha512-8CWwafxWBrdECX4kcDQaTJ8zktEY1jrhu/sNZK8GR6Bu3loif+zrzvCwF3o1jYHnP68xMpgXbuU57YsJA+7g5Q==", "license": "MIT", "dependencies": { "@babel/parser": "^7.28.5", "@babel/traverse": "^7.28.5", "@sanity/client": "^7.13.1", - "@sanity/codegen": "4.20.0", + "@sanity/codegen": "4.20.3", "@sanity/runtime-cli": "^11.1.4", "@sanity/telemetry": "^0.8.0", "@sanity/template-validator": "^2.4.3", @@ -5690,9 +5664,9 @@ "esbuild-register": "^3.6.0", "get-it": "^8.6.10", "get-latest-version": "^5.1.0", - "groq-js": "^1.21.0", + "groq-js": "^1.22.0", "pkg-dir": "^5.0.0", - "prettier": "^3.7.2", + "prettier": "^3.7.3", "semver": "^7.7.2" }, "bin": { @@ -5727,7 +5701,6 @@ "resolved": "https://registry.npmjs.org/@sanity/client/-/client-7.13.1.tgz", "integrity": "sha512-Bs+Bg5Fd/2tSR7AYS3+ehUlHtHjrXgH9MwNfTaKUfke158KjAQ4jw1mJVX+jp+171BLwlaaVKYw+mfRkmOCvHw==", "license": "MIT", - "peer": true, "dependencies": { "@sanity/eventsource": "^5.0.2", "get-it": "^8.6.9", @@ -5739,9 +5712,9 @@ } }, "node_modules/@sanity/codegen": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@sanity/codegen/-/codegen-4.20.0.tgz", - "integrity": "sha512-PKPly4g9w7E259k4ihMG2ryR/uvAv0a7E8Dk7pcMGS58j1yoWHsUt2ucNH3ZDTlDcU5TgIrK21P6hwDYyQTGaw==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/@sanity/codegen/-/codegen-4.20.3.tgz", + "integrity": "sha512-qzYfuNe9Ae+TqNfP6cIJl3oIUm8/5jrzm95pnKvJuxPFjwRjqYo1JBjUVLP7l8aXVQQI3BNXeLULQtZQgje6YA==", "license": "MIT", "dependencies": { "@babel/core": "^7.28.5", @@ -5754,8 +5727,8 @@ "@babel/types": "^7.28.5", "debug": "^4.4.3", "globby": "^11.1.0", - "groq": "4.20.0", - "groq-js": "^1.21.0", + "groq": "4.20.3", + "groq-js": "^1.22.0", "json5": "^2.2.3", "tsconfig-paths": "^4.2.0", "zod": "^3.25.76" @@ -5788,30 +5761,30 @@ } }, "node_modules/@sanity/comlink": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@sanity/comlink/-/comlink-3.1.1.tgz", - "integrity": "sha512-UyBJG4oWNs+VGVo5Yr5aKir5bgMzF/dnaNYjqxP2+5+iXnvhVOcI6dAtEXDj7kMmn5/ysHNKbLDlW6aVeBm7xg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sanity/comlink/-/comlink-4.0.1.tgz", + "integrity": "sha512-vdGOd6sxNjqTo2H3Q3L2/Gepy+cDBiQ1mr9ck7c/A9o4NnmBLoDliifsNHIwgNwBUz37oH4+EIz/lIjNy8hSew==", "license": "MIT", "dependencies": { "rxjs": "^7.8.2", - "uuid": "^11.1.0", - "xstate": "^5.23.0" + "uuid": "^13.0.0", + "xstate": "^5.24.0" }, "engines": { - "node": ">=18" + "node": ">=20.19 <22 || >=22.12" } }, "node_modules/@sanity/comlink/node_modules/uuid": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", + "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "license": "MIT", "bin": { - "uuid": "dist/esm/bin/uuid" + "uuid": "dist-node/bin/uuid" } }, "node_modules/@sanity/descriptors": { @@ -5827,9 +5800,9 @@ } }, "node_modules/@sanity/diff": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@sanity/diff/-/diff-4.20.0.tgz", - "integrity": "sha512-+7JDGC7Z8gB/u2KzFcwv5Cvfa+6EmC6ASoZ9wWOnIaD+kOcQI15o7jA98ZorUQ7L8Y0ESOI4uOauUC1kTLi+sA==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/@sanity/diff/-/diff-4.20.3.tgz", + "integrity": "sha512-28eEozA8KfO6bzocRD0bXcpyo5hneZQNI4DXlDSnwSJ03kRpdyxo48nc2snjBEEAYWl+JzvURe2mXy6CVSD98A==", "license": "MIT", "dependencies": { "@sanity/diff-match-patch": "^3.2.0" @@ -6239,9 +6212,9 @@ "license": "MIT" }, "node_modules/@sanity/message-protocol": { - "version": "0.17.7", - "resolved": "https://registry.npmjs.org/@sanity/message-protocol/-/message-protocol-0.17.7.tgz", - "integrity": "sha512-CzT8hs70M/eKYvQ8B58GSpAeznH+We9e6fARt99b+BBv52aaJpM/ogz9bCVVRgNJvumiuNyzzOYnl39uWrUBFw==", + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@sanity/message-protocol/-/message-protocol-0.17.8.tgz", + "integrity": "sha512-bx/NvakGt7Pm1JcHGzL5GVnPINa3XLd/YPF5JNo3NOO/yZiHMYM54+HK0u98ECZTLhlDe7+ALtok+lyQh3S+3g==", "license": "MIT", "dependencies": { "@sanity/comlink": "^4.0.1" @@ -6250,47 +6223,20 @@ "node": ">=20.0.0" } }, - "node_modules/@sanity/message-protocol/node_modules/@sanity/comlink": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sanity/comlink/-/comlink-4.0.1.tgz", - "integrity": "sha512-vdGOd6sxNjqTo2H3Q3L2/Gepy+cDBiQ1mr9ck7c/A9o4NnmBLoDliifsNHIwgNwBUz37oH4+EIz/lIjNy8hSew==", - "license": "MIT", - "dependencies": { - "rxjs": "^7.8.2", - "uuid": "^13.0.0", - "xstate": "^5.24.0" - }, - "engines": { - "node": ">=20.19 <22 || >=22.12" - } - }, - "node_modules/@sanity/message-protocol/node_modules/uuid": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", - "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist-node/bin/uuid" - } - }, "node_modules/@sanity/migrate": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@sanity/migrate/-/migrate-4.20.0.tgz", - "integrity": "sha512-eQLTn24zkbOxwvFW5WHfqmPI+F+uQgePhB8Ma9TNTvizXts4FymLnozhWCCHZY1zFPq5sp3IQDz3KPH8g/2aQg==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/@sanity/migrate/-/migrate-4.20.3.tgz", + "integrity": "sha512-q9ZSevnJ3jEfqnSR00oENYmAHksZ15ywMOi/e9F0htzTcMhSYcrbj+cuVE6UEt2yC5xtcC3gVKWuEyjic1MVOw==", "license": "MIT", "dependencies": { "@sanity/client": "^7.13.1", "@sanity/mutate": "^0.14.0", - "@sanity/types": "4.20.0", - "@sanity/util": "4.20.0", + "@sanity/types": "4.20.3", + "@sanity/util": "4.20.3", "arrify": "^2.0.1", "debug": "^4.4.3", "fast-fifo": "^1.3.2", - "groq-js": "^1.21.0", + "groq-js": "^1.22.0", "p-map": "^7.0.1" }, "engines": { @@ -6375,71 +6321,49 @@ } }, "node_modules/@sanity/mutator": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@sanity/mutator/-/mutator-4.20.0.tgz", - "integrity": "sha512-hw5+Y1+4JVqGkE1cqSohnOEJLMsN0FCZBfw0xwD5cU9zSxygaVBKZKBFNcpnt4QGkexY6zRe0Up+2XHrdp0fPw==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/@sanity/mutator/-/mutator-4.20.3.tgz", + "integrity": "sha512-trsp21QLA/eRF/mUn4PrDMADo3rtTUvgfqCDAaiVvxgLScmjNRoQXmGWuj75PSwJyx12O+gsLWrNMJd+4KzGLA==", "license": "MIT", - "peer": true, "dependencies": { "@sanity/diff-match-patch": "^3.2.0", - "@sanity/types": "4.20.0", + "@sanity/types": "4.20.3", "@sanity/uuid": "^3.0.2", "debug": "^4.4.3", "lodash": "^4.17.21" } }, - "node_modules/@sanity/next-loader": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@sanity/next-loader/-/next-loader-2.1.2.tgz", - "integrity": "sha512-9vBkK9/wGfEHTCRhj9L2BxDJRsuyHKatsBwCwRsh9mgn0K6DgAxWd+OYdycCGuPnAK7WR/MHAibW0AdAXk1mOA==", - "deprecated": "This package is deprecated. Please use 'next-sanity/live' instead.", - "license": "MIT", - "dependencies": { - "@sanity/client": "^7.8.2", - "@sanity/comlink": "^3.0.9", - "@sanity/presentation-comlink": "^1.0.29", - "dequal": "^2.0.3", - "use-effect-event": "^2.0.3" - }, - "engines": { - "node": ">=18.18" - }, - "peerDependencies": { - "next": "^14.1 || ^15", - "react": "^18.3 || ^19" - } - }, "node_modules/@sanity/presentation-comlink": { - "version": "1.0.33", - "resolved": "https://registry.npmjs.org/@sanity/presentation-comlink/-/presentation-comlink-1.0.33.tgz", - "integrity": "sha512-8egBjVuXT3O0dChWf7C/zzvNCG5FgA8cK9hHPDArAcrtY1MbNkCqCrC04Nm7egJ/s4vZBcZx4F/dt0GPXfhYNg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@sanity/presentation-comlink/-/presentation-comlink-2.0.1.tgz", + "integrity": "sha512-D0S2CfVyda99cd/8SnXxQ2tsVlVuRq4CAOjxRuF53evYmBhpWezSEpWKqAa0e1lunGBKK1EroxmOzb5ofNRwMg==", "license": "MIT", "dependencies": { - "@sanity/comlink": "^3.1.1", - "@sanity/visual-editing-types": "^1.1.6" + "@sanity/comlink": "^4.0.1", + "@sanity/visual-editing-types": "^1.1.8" }, "engines": { - "node": ">=18" + "node": ">=20.19 <22 || >=22.12" } }, "node_modules/@sanity/prettier-config": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@sanity/prettier-config/-/prettier-config-2.0.2.tgz", - "integrity": "sha512-JNqHc8cHJ7usSzC5DDJZOlq1mLN+uLF9ZLqtzcX5g8hZUC+Rj5vmFHJfxvOiLjGHqiFOmSS0lfyDE9DR34o3lg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@sanity/prettier-config/-/prettier-config-2.0.3.tgz", + "integrity": "sha512-ceKl07z8S0eHh5tcSDAZBjW1OdrYM841xO+46XZ2+ZRex6s9jbzibeupOcaHgPjGwInmqaK8NCRhzPDo2VBgYA==", "dev": true, "license": "MIT", "dependencies": { - "@prettier/plugin-oxc": "^0.0.5", - "prettier-plugin-packagejson": "^2.5.19" + "@prettier/plugin-oxc": "^0.1.2", + "prettier-plugin-packagejson": "^2.5.20" }, "peerDependencies": { - "prettier": "^3.6.2" + "prettier": "^3.7.0" } }, "node_modules/@sanity/preview-url-secret": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@sanity/preview-url-secret/-/preview-url-secret-2.1.16.tgz", - "integrity": "sha512-w8N0x8JL4iJ5BZvt9X9pTiXQcSIvBsqtN9rYp7uD5X7JEOgm7heTCxfBYFJUj3Pv5n8Z8W4d872AXZBI5stB6Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sanity/preview-url-secret/-/preview-url-secret-3.0.0.tgz", + "integrity": "sha512-O7o6hsxbMp7y20znU9seV6h8WeTS+U4ovtqLd6j3oaSRyuriZenN/O6K39LJaKC2TZY1RUsYRvcv5/rNq7sAEQ==", "license": "MIT", "dependencies": { "@sanity/uuid": "3.0.2" @@ -6462,13 +6386,13 @@ } }, "node_modules/@sanity/runtime-cli": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@sanity/runtime-cli/-/runtime-cli-11.2.0.tgz", - "integrity": "sha512-cA00C4gCXn3pQpZrV1eJkZxlmpKurBVJBtm7eHZokrHWkjq+sX4UNudCeZPNhplLAtlCLeDR2QXcS5Qj9FHtag==", + "version": "11.2.5", + "resolved": "https://registry.npmjs.org/@sanity/runtime-cli/-/runtime-cli-11.2.5.tgz", + "integrity": "sha512-KcQdkQMpvC9GgibSGYtmKHPs64Oem/JfaFEwoNIKvRfCqCNgdS4nXAVKW13sSN3CDGRIyfgE2MT9uSjRpQU7jA==", "license": "MIT", "dependencies": { - "@architect/hydrate": "^4.0.10", - "@architect/inventory": "^4.0.9", + "@architect/hydrate": "^5.0.1", + "@architect/inventory": "^5.0.0", "@oclif/core": "^4.8.0", "@oclif/plugin-help": "^6.2.36", "@sanity/blueprints-parser": "^0.3.0", @@ -6745,16 +6669,16 @@ } }, "node_modules/@sanity/schema": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@sanity/schema/-/schema-4.20.0.tgz", - "integrity": "sha512-63hyzm+mPnt74dCVa2tqekIrgzBieEzQ1O6KqScmisQZfq7izNKq0WTG2AQ/bqk4gdn8XkC2TbqNTipZFOxXZw==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/@sanity/schema/-/schema-4.20.3.tgz", + "integrity": "sha512-/7U5mOgwmeE1hFXjsp/by7kJ0+q9sG0SrfPLQSSlfLkvUm/Wl89MdjGaZv2xxNqfkOVYoBNpk8MBKcnsn971AQ==", "license": "MIT", "dependencies": { "@sanity/descriptors": "^1.2.1", "@sanity/generate-help-url": "^3.0.0", - "@sanity/types": "4.20.0", + "@sanity/types": "4.20.3", "arrify": "^2.0.1", - "groq-js": "^1.21.0", + "groq-js": "^1.22.0", "humanize-list": "^1.0.1", "leven": "^3.1.0", "lodash": "^4.17.21", @@ -6786,6 +6710,20 @@ "node": ">=20.0.0" } }, + "node_modules/@sanity/sdk/node_modules/@sanity/comlink": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sanity/comlink/-/comlink-3.1.1.tgz", + "integrity": "sha512-UyBJG4oWNs+VGVo5Yr5aKir5bgMzF/dnaNYjqxP2+5+iXnvhVOcI6dAtEXDj7kMmn5/ysHNKbLDlW6aVeBm7xg==", + "license": "MIT", + "dependencies": { + "rxjs": "^7.8.2", + "uuid": "^11.1.0", + "xstate": "^5.23.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@sanity/sdk/node_modules/@sanity/diff-patch": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@sanity/diff-patch/-/diff-patch-6.0.0.tgz", @@ -6942,9 +6880,9 @@ } }, "node_modules/@sanity/types": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@sanity/types/-/types-4.20.0.tgz", - "integrity": "sha512-T/rpGYHFff44W+AM7v8zP/K8GilNp1xotKb2xhMj+caLpZ4eGbs+Ov8tyGzCNs60ark9e0/qoN9XowyQ2lBunA==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/@sanity/types/-/types-4.20.3.tgz", + "integrity": "sha512-Vuj3JPPvfLJkoeqn0s3uXguc1Sn9uCWaCOzX2dG9qOSjsmGuVvcbA9QI3CvLUjg/TzFUg5MUXf9FoSRNzQkL9w==", "license": "MIT", "dependencies": { "@sanity/client": "^7.13.1", @@ -6981,15 +6919,15 @@ } }, "node_modules/@sanity/util": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@sanity/util/-/util-4.20.0.tgz", - "integrity": "sha512-U5ifvFPThIjOyNDUQ0+VqlUYzq5pltfdW6RqyuziLCCqRUgFEwR+9PUxL4EuJa89XofdXCvCk4gksbuSQD+JUA==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/@sanity/util/-/util-4.20.3.tgz", + "integrity": "sha512-P3TxHa6fYc500es4vp+q6UKXmxt8tMeD1MAZ1pcChNCSbze2xqFKS7it2PPhURO8NNSj2SN3eH9YXZhsyhq9Ug==", "license": "MIT", "dependencies": { "@date-fns/tz": "^1.4.1", "@date-fns/utc": "^2.1.1", "@sanity/client": "^7.13.1", - "@sanity/types": "4.20.0", + "@sanity/types": "4.20.3", "date-fns": "^4.1.0", "rxjs": "^7.8.2" }, @@ -7008,9 +6946,9 @@ } }, "node_modules/@sanity/vision": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@sanity/vision/-/vision-4.20.0.tgz", - "integrity": "sha512-SWM1Vh/q0jWQ3e+Y5QgXUD5KgDbPtUYreMQ9zluqKIQF1YM6LfSxKqpDbddXHMh0ljA4FFHmc6j8UsDIU6g0PA==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/@sanity/vision/-/vision-4.20.3.tgz", + "integrity": "sha512-UKawdSlgZ+xZRNtkff7vtqvLTrUyiW5cSm4uOAw+l8PtDqtoVVi2vxN7bnI4tKI95nV3mmLpvEjb2Uu722gurg==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.20.0", @@ -7046,18 +6984,18 @@ } }, "node_modules/@sanity/visual-editing": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@sanity/visual-editing/-/visual-editing-3.2.4.tgz", - "integrity": "sha512-9tl0WycFXTlFMWH/ZciT/yMZUNUqmn9GAWCGfW+eOKLrlJouyKAJWbYD5+bit/8M7/B19f03rpXCWPgOhE03fg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@sanity/visual-editing/-/visual-editing-4.0.2.tgz", + "integrity": "sha512-+xIoQrNkTbB4DsI5S1J4XfrDHf9sm5X2OK7dA3RhbubY04qGrcf/e33fESjHbKA4Om9rs/077erR+Ldq4JYmWw==", "license": "MIT", "dependencies": { - "@sanity/comlink": "^3.1.1", + "@sanity/comlink": "^4.0.0", "@sanity/icons": "^3.7.4", "@sanity/insert-menu": "^2.1.0", "@sanity/mutate": "0.11.0-canary.4", - "@sanity/presentation-comlink": "^1.0.33", - "@sanity/preview-url-secret": "^2.1.15", - "@sanity/ui": "^3.1.6", + "@sanity/presentation-comlink": "^2.0.0", + "@sanity/preview-url-secret": "^3.0.0", + "@sanity/ui": "^3.1.10", "@sanity/visual-editing-csm": "^2.0.26", "@vercel/stega": "0.1.2", "get-random-values-esm": "^1.0.2", @@ -7072,7 +7010,7 @@ }, "peerDependencies": { "@remix-run/react": ">= 2", - "@sanity/client": "^7.11.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", @@ -7678,7 +7616,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz", "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==", "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -7700,7 +7637,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -7828,7 +7764,6 @@ "integrity": "sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.48.1", "@typescript-eslint/types": "8.48.1", @@ -8490,7 +8425,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -8509,12 +8443,12 @@ } }, "node_modules/acorn-loose": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/acorn-loose/-/acorn-loose-8.4.0.tgz", - "integrity": "sha512-M0EUka6rb+QC4l9Z3T0nJEzNOO7JcoJlYMrBlyBCiFSXRyxjLKayd4TbQs2FDRWQU1h9FR7QVNHt+PEaoNL5rQ==", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/acorn-loose/-/acorn-loose-8.5.2.tgz", + "integrity": "sha512-PPvV6g8UGMGgjrMu+n/f9E/tCSkNQ2Y97eFvuVdJfG11+xdIeDcLyNdC8SHcrHbRqkfwLASdplyR6B6sKM1U4A==", "license": "MIT", "dependencies": { - "acorn": "^8.11.0" + "acorn": "^8.15.0" }, "engines": { "node": ">=0.4.0" @@ -9104,9 +9038,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.0.tgz", - "integrity": "sha512-Mh++g+2LPfzZToywfE1BUzvZbfOY52Nil0rn9H1CPC5DJ7fX+Vir7nToBeoiSbB1zTNeGYbELEvJESujgGrzXw==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.2.tgz", + "integrity": "sha512-PxSsosKQjI38iXkmb3d0Y32efqyA0uW4s41u4IVBsLlWLhCiYNpH/AfNOVWRqCQBlD8TFJTz6OUWNd4DFJCnmw==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" @@ -9221,7 +9155,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -10559,9 +10492,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.263", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.263.tgz", - "integrity": "sha512-DrqJ11Knd+lo+dv+lltvfMDLU27g14LMdH2b0O3Pio4uk0x+z7OR+JrmyacTPN2M8w3BrZ7/RTwG3R9B7irPlg==", + "version": "1.5.265", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.265.tgz", + "integrity": "sha512-B7IkLR1/AE+9jR2LtVF/1/6PFhY5TlnEHnlrKmGk7PvkJibg5jr+mLXLLzq3QYl6PA1T/vLDthQPqIPAlS/PPA==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -10792,7 +10725,6 @@ "integrity": "sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==", "hasInstallScript": true, "license": "MIT", - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -10867,7 +10799,6 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -12140,9 +12071,9 @@ } }, "node_modules/get-it": { - "version": "8.6.10", - "resolved": "https://registry.npmjs.org/get-it/-/get-it-8.6.10.tgz", - "integrity": "sha512-27StIK860ZVp2bhsG/aTWpcoA4OrFxtMqBbesa5sR23m5OxfVQYCnpm2rPQeo3gs5qsUk0FdkISLgXRJ4HynNw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/get-it/-/get-it-8.7.0.tgz", + "integrity": "sha512-uong/+jOz0GiuIWIUJXp2tnQKgQKukC99LEqOxLckPUoHYoerQbV6vC0Tu+/pSgk0tgHh1xX2aJtCk4y35LLLg==", "license": "MIT", "dependencies": { "@types/follow-redirects": "^1.14.4", @@ -12349,9 +12280,9 @@ } }, "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -12497,9 +12428,9 @@ "license": "MIT" }, "node_modules/groq": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/groq/-/groq-4.20.0.tgz", - "integrity": "sha512-OiQZWNf+V+5NG0Ehcx07NDe8SHXcxYTSmQdzeJHUeSunkhflBeUmeJOL7Hw2tmC36AjsFjJPyTGxR4qJsRQzTA==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/groq/-/groq-4.20.3.tgz", + "integrity": "sha512-2x/aXTvEh1let4T0C0MFDMwwvqlg+ge33V1kUoAir9fMvFRFbF6XNzEq0yKSLZ3m07aOXZWiRGxKpnuy17cpmA==", "license": "MIT", "engines": { "node": ">=20.19 <22 || >=22.12" @@ -12826,7 +12757,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.23.2" } @@ -13903,7 +13833,6 @@ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "license": "MIT", - "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -15165,7 +15094,6 @@ "resolved": "https://registry.npmjs.org/next/-/next-15.5.7.tgz", "integrity": "sha512-+t2/0jIJ48kUpGKkdlhgkv+zPTEOoXyr60qXe68eB/pl3CMJaLeIGjzp5D6Oqt25hCBiBTt8wEeeAzfJvUKnPQ==", "license": "MIT", - "peer": true, "dependencies": { "@next/env": "15.5.7", "@swc/helpers": "0.5.15", @@ -15214,28 +15142,32 @@ } }, "node_modules/next-sanity": { - "version": "10.1.4", - "resolved": "https://registry.npmjs.org/next-sanity/-/next-sanity-10.1.4.tgz", - "integrity": "sha512-CeZSDpQRXmLbLbpzg+HbsVMRau+ZL71o2qdtYFk8uKy5o+cBc6U3q8+kS18SW55Tv0do1G8fm4srOCSTzcmeRQ==", + "version": "11.6.10", + "resolved": "https://registry.npmjs.org/next-sanity/-/next-sanity-11.6.10.tgz", + "integrity": "sha512-662AfTZiiPaM46zIuyOmp7E57s/415v8vFAIR16CwyZ7fSvCoFQ6WEymVXoKOSLZGvXBrLOvY6JutLP8hqynCw==", "license": "MIT", "dependencies": { - "@portabletext/react": "^4.0.3", - "@sanity/client": "^7.11.1", - "@sanity/next-loader": "^2.1.2", - "@sanity/preview-url-secret": "^2.1.15", - "@sanity/visual-editing": "^3.0.5", - "groq": "^4.7.0", - "history": "^5.3.0" + "@portabletext/react": "^5.0.0", + "@sanity/client": "^7.13.0", + "@sanity/comlink": "^4.0.1", + "@sanity/presentation-comlink": "^2.0.1", + "@sanity/preview-url-secret": "^3.0.0", + "@sanity/visual-editing": "^4.0.2", + "dequal": "^2.0.3", + "groq": "^4.19.0", + "history": "^5.3.0", + "server-only": "^0.0.1", + "use-effect-event": "^2.0.3" }, "engines": { - "node": ">=20.19" + "node": ">=20.19 <22 || >=22.12" }, "peerDependencies": { - "@sanity/client": "^7.11.1", - "next": "^15.1", + "@sanity/client": "^7.13.0", + "next": "^15.1.0-0 || ^16.0.0-0", "react": "^18.3 || ^19", "react-dom": "^18.3 || ^19", - "sanity": "^4.7.0", + "sanity": "^4.19.0", "styled-components": "^6.1" } }, @@ -15647,13 +15579,13 @@ } }, "node_modules/oxc-parser": { - "version": "0.97.0", - "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.97.0.tgz", - "integrity": "sha512-gxUfidyxJY97BJ+JEN/PxiIxIU1Y1FAPyMTncgNymgd/Cb+TYprsXZqjVnVCmTUlIBoA1XVjbfP0+Iz+uAt7Ow==", + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.99.0.tgz", + "integrity": "sha512-MpS1lbd2vR0NZn1v0drpgu7RUFu3x9Rd0kxExObZc2+F+DIrV0BOMval/RO3BYGwssIOerII6iS8EbbpCCZQpQ==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "^0.97.0" + "@oxc-project/types": "^0.99.0" }, "engines": { "node": "^20.19.0 || >=22.12.0" @@ -15662,21 +15594,21 @@ "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { - "@oxc-parser/binding-android-arm64": "0.97.0", - "@oxc-parser/binding-darwin-arm64": "0.97.0", - "@oxc-parser/binding-darwin-x64": "0.97.0", - "@oxc-parser/binding-freebsd-x64": "0.97.0", - "@oxc-parser/binding-linux-arm-gnueabihf": "0.97.0", - "@oxc-parser/binding-linux-arm-musleabihf": "0.97.0", - "@oxc-parser/binding-linux-arm64-gnu": "0.97.0", - "@oxc-parser/binding-linux-arm64-musl": "0.97.0", - "@oxc-parser/binding-linux-riscv64-gnu": "0.97.0", - "@oxc-parser/binding-linux-s390x-gnu": "0.97.0", - "@oxc-parser/binding-linux-x64-gnu": "0.97.0", - "@oxc-parser/binding-linux-x64-musl": "0.97.0", - "@oxc-parser/binding-wasm32-wasi": "0.97.0", - "@oxc-parser/binding-win32-arm64-msvc": "0.97.0", - "@oxc-parser/binding-win32-x64-msvc": "0.97.0" + "@oxc-parser/binding-android-arm64": "0.99.0", + "@oxc-parser/binding-darwin-arm64": "0.99.0", + "@oxc-parser/binding-darwin-x64": "0.99.0", + "@oxc-parser/binding-freebsd-x64": "0.99.0", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.99.0", + "@oxc-parser/binding-linux-arm-musleabihf": "0.99.0", + "@oxc-parser/binding-linux-arm64-gnu": "0.99.0", + "@oxc-parser/binding-linux-arm64-musl": "0.99.0", + "@oxc-parser/binding-linux-riscv64-gnu": "0.99.0", + "@oxc-parser/binding-linux-s390x-gnu": "0.99.0", + "@oxc-parser/binding-linux-x64-gnu": "0.99.0", + "@oxc-parser/binding-linux-x64-musl": "0.99.0", + "@oxc-parser/binding-wasm32-wasi": "0.99.0", + "@oxc-parser/binding-win32-arm64-msvc": "0.99.0", + "@oxc-parser/binding-win32-x64-msvc": "0.99.0" } }, "node_modules/p-finally": { @@ -15941,12 +15873,6 @@ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, - "node_modules/path-sort": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/path-sort/-/path-sort-0.1.0.tgz", - "integrity": "sha512-70MSq7edKtbODYKkqXYzSMQxtYMjDgP3K6D15Fu4KUvpyBPlxDWPvv8JI9GjNDF2K5baPHFEtlg818dOmf2ifg==", - "license": "MIT" - }, "node_modules/path-to-regexp": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", @@ -16174,7 +16100,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -16232,7 +16157,6 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -16477,7 +16401,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -16508,7 +16431,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -16587,8 +16509,7 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/react-photo-album": { "version": "2.4.1", @@ -17199,46 +17120,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/run-series": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", - "integrity": "sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/run-waterfall": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/run-waterfall/-/run-waterfall-1.1.7.tgz", - "integrity": "sha512-iFPgh7SatHXOG1ClcpdwHI63geV3Hc/iL6crGSyBlH2PY7Rm/za+zoKz6FfY/Qlw5K7JwSol8pseO8fN6CMhhQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", @@ -17351,11 +17232,10 @@ "license": "MIT" }, "node_modules/sanity": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/sanity/-/sanity-4.20.0.tgz", - "integrity": "sha512-o0zp8HOoN/sFTv6/65VpVUyl0sC881ngNe0T61B2MGMioFJsVQ6zWvijFAdVrgfZG9UWrMVUP7ArzkIM+ievpw==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/sanity/-/sanity-4.20.3.tgz", + "integrity": "sha512-4mBh23jQQNqifBX0N0f8B94mt5//nuaf6sr308NaivSKSEhXQ76ko1VSKsDbCYtxFl4vVibYuTCv3POTkHDj6A==", "license": "MIT", - "peer": true, "dependencies": { "@date-fns/tz": "^1.4.1", "@dnd-kit/core": "^6.3.1", @@ -17376,11 +17256,11 @@ "@rexxars/react-json-inspector": "^9.0.1", "@sanity/asset-utils": "^2.3.0", "@sanity/bifur-client": "^0.4.1", - "@sanity/cli": "4.20.0", + "@sanity/cli": "4.20.3", "@sanity/client": "^7.13.1", "@sanity/color": "^3.0.6", "@sanity/comlink": "^4.0.1", - "@sanity/diff": "4.20.0", + "@sanity/diff": "4.20.3", "@sanity/diff-match-patch": "^3.2.0", "@sanity/diff-patch": "^5.0.0", "@sanity/eventsource": "^5.0.2", @@ -17393,16 +17273,16 @@ "@sanity/logos": "^2.2.2", "@sanity/media-library-types": "^1.0.1", "@sanity/message-protocol": "^0.17.6", - "@sanity/migrate": "4.20.0", - "@sanity/mutator": "4.20.0", + "@sanity/migrate": "4.20.3", + "@sanity/mutator": "4.20.3", "@sanity/presentation-comlink": "^2.0.1", "@sanity/preview-url-secret": "^3.0.0", - "@sanity/schema": "4.20.0", + "@sanity/schema": "4.20.3", "@sanity/sdk": "2.1.2", "@sanity/telemetry": "^0.8.0", - "@sanity/types": "4.20.0", + "@sanity/types": "4.20.3", "@sanity/ui": "^3.1.11", - "@sanity/util": "4.20.0", + "@sanity/util": "4.20.3", "@sanity/uuid": "^3.0.2", "@sentry/react": "^8.55.0", "@tanstack/react-table": "^8.21.3", @@ -17434,7 +17314,7 @@ "fast-deep-equal": "3.1.3", "form-data": "^4.0.5", "get-it": "^8.6.10", - "groq-js": "^1.21.0", + "groq-js": "^1.22.0", "gunzip-maybe": "^1.4.2", "history": "^5.3.0", "i18next": "^23.16.8", @@ -17473,7 +17353,7 @@ "react-fast-compare": "^3.2.2", "react-focus-lock": "^2.13.6", "react-i18next": "15.6.1", - "react-is": "^19.2.0", + "react-is": "^19.2.1", "react-refractor": "^4.0.0", "react-rx": "^4.2.2", "read-pkg-up": "^7.0.1", @@ -17515,6 +17395,21 @@ "styled-components": "^6.1.15" } }, + "node_modules/sanity-image": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sanity-image/-/sanity-image-1.0.0.tgz", + "integrity": "sha512-a4JlaYiU5bin7zsZwCCRlkWCyVleL88FOeigAuLkBKiNPYS3px0oAjEBleQnpJNdWs/1aikrwPwhY+VN0PRgpg==", + "license": "MIT", + "dependencies": { + "@sanity-image/url-builder": "1.0.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0" + } + }, "node_modules/sanity-plugin-asset-source-unsplash": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/sanity-plugin-asset-source-unsplash/-/sanity-plugin-asset-source-unsplash-4.0.1.tgz", @@ -17537,74 +17432,10 @@ "styled-components": "^6.1" } }, - "node_modules/sanity/node_modules/@portabletext/react": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@portabletext/react/-/react-5.0.0.tgz", - "integrity": "sha512-ZEYhjsiUn2Dvrhyao3qAvi6C/re9ZBt2atp14dtwWtPruMNgp1uMf3p+URf0pEEhu+rMEh9JeK0A8FgNejEWCg==", - "license": "MIT", - "dependencies": { - "@portabletext/toolkit": "^4.0.0", - "@portabletext/types": "^3.0.0" - }, - "engines": { - "node": ">=20.19 <22 || >=22.12" - }, - "peerDependencies": { - "react": "^18.2 || ^19" - } - }, - "node_modules/sanity/node_modules/@portabletext/toolkit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@portabletext/toolkit/-/toolkit-4.0.0.tgz", - "integrity": "sha512-Jj/QIy3vzZCNcxiUGM7KjGhUhyVjch+9pOzotWRARPNe07R6nbF/cRsKL70q5Xizf+6PVtFYwks4CSXKInC+wg==", - "license": "MIT", - "dependencies": { - "@portabletext/types": "^3.0.0" - }, - "engines": { - "node": ">=20.19 <22 || >=22.12" - } - }, - "node_modules/sanity/node_modules/@portabletext/types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@portabletext/types/-/types-3.0.0.tgz", - "integrity": "sha512-7U8+bFcnguNtXr4rwMDj0EvJJDRzLaaof2mQqCjUcqxuuJpAppFaATZgrKmPI1uBgtFMi4unk1nIaOOmLHrX8Q==", - "license": "MIT", - "engines": { - "node": ">=20.19 <22 || >=22.12" - } - }, - "node_modules/sanity/node_modules/@sanity/comlink": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sanity/comlink/-/comlink-4.0.1.tgz", - "integrity": "sha512-vdGOd6sxNjqTo2H3Q3L2/Gepy+cDBiQ1mr9ck7c/A9o4NnmBLoDliifsNHIwgNwBUz37oH4+EIz/lIjNy8hSew==", - "license": "MIT", - "dependencies": { - "rxjs": "^7.8.2", - "uuid": "^13.0.0", - "xstate": "^5.24.0" - }, - "engines": { - "node": ">=20.19 <22 || >=22.12" - } - }, - "node_modules/sanity/node_modules/@sanity/comlink/node_modules/uuid": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", - "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist-node/bin/uuid" - } - }, "node_modules/sanity/node_modules/@sanity/image-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@sanity/image-url/-/image-url-2.0.1.tgz", - "integrity": "sha512-5PEZiWMa70cTp/+S2shkHkhdh3rKClZd86K3sNbk78tyGP86cdYWnEicA54GZA52ZJ/l4lmpmB8m/FLzR4H5wg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@sanity/image-url/-/image-url-2.0.2.tgz", + "integrity": "sha512-JnwFIHATLXHGVTCKmVwV0xy3xKwGlgVfeUB9cWxu72xJZMsQUyFgGiTz4zD9gRXuncAndkmtzHeIG+2vhKgxHA==", "license": "MIT", "dependencies": { "@sanity/signed-urls": "^2.0.1" @@ -17613,44 +17444,6 @@ "node": ">=20.19.0" } }, - "node_modules/sanity/node_modules/@sanity/presentation-comlink": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@sanity/presentation-comlink/-/presentation-comlink-2.0.1.tgz", - "integrity": "sha512-D0S2CfVyda99cd/8SnXxQ2tsVlVuRq4CAOjxRuF53evYmBhpWezSEpWKqAa0e1lunGBKK1EroxmOzb5ofNRwMg==", - "license": "MIT", - "dependencies": { - "@sanity/comlink": "^4.0.1", - "@sanity/visual-editing-types": "^1.1.8" - }, - "engines": { - "node": ">=20.19 <22 || >=22.12" - } - }, - "node_modules/sanity/node_modules/@sanity/preview-url-secret": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sanity/preview-url-secret/-/preview-url-secret-3.0.0.tgz", - "integrity": "sha512-O7o6hsxbMp7y20znU9seV6h8WeTS+U4ovtqLd6j3oaSRyuriZenN/O6K39LJaKC2TZY1RUsYRvcv5/rNq7sAEQ==", - "license": "MIT", - "dependencies": { - "@sanity/uuid": "3.0.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@sanity/client": "^7.12.0", - "@sanity/icons": "*", - "sanity": "*" - }, - "peerDependenciesMeta": { - "@sanity/icons": { - "optional": true - }, - "sanity": { - "optional": true - } - } - }, "node_modules/sanity/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", @@ -17769,6 +17562,12 @@ "semver": "bin/semver" } }, + "node_modules/server-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", + "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==", + "license": "MIT" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -17818,15 +17617,6 @@ "node": ">= 0.4" } }, - "node_modules/sha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sha/-/sha-3.0.0.tgz", - "integrity": "sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw==", - "license": "(BSD-2-Clause OR MIT)", - "dependencies": { - "graceful-fs": "^4.1.2" - } - }, "node_modules/sha256-uint8array": { "version": "0.10.7", "resolved": "https://registry.npmjs.org/sha256-uint8array/-/sha256-uint8array-0.10.7.tgz", @@ -18047,11 +17837,14 @@ } }, "node_modules/slate": { - "version": "0.120.0", - "resolved": "https://registry.npmjs.org/slate/-/slate-0.120.0.tgz", - "integrity": "sha512-CXK/DADGgMZb4z9RTtXylzIDOxvmNJEF9bXV2bAGkLWhQ3rm7GORY9q0H/W41YJvAGZsLbH7nnrhMYr550hWDQ==", + "version": "0.118.1", + "resolved": "https://registry.npmjs.org/slate/-/slate-0.118.1.tgz", + "integrity": "sha512-6H1DNgnSwAFhq/pIgf+tLvjNzH912M5XrKKhP9Frmbds2zFXdSJ6L/uFNyVKxQIkPzGWPD0m+wdDfmEuGFH5Tg==", "license": "MIT", - "peer": true + "dependencies": { + "immer": "^10.0.3", + "tiny-warning": "^1.0.3" + } }, "node_modules/slate-dom": { "version": "0.119.0", @@ -18081,9 +17874,9 @@ } }, "node_modules/slate-react": { - "version": "0.120.0", - "resolved": "https://registry.npmjs.org/slate-react/-/slate-react-0.120.0.tgz", - "integrity": "sha512-CMEJzozriddBjVmbxNvc2erCkXUuEkgdXIdM+jEMvxWMb51z0zhIVzgoxbGprVpzwBXY8Kv7aZOUDVMomzWH/g==", + "version": "0.119.0", + "resolved": "https://registry.npmjs.org/slate-react/-/slate-react-0.119.0.tgz", + "integrity": "sha512-snHqhQ1NkZXyuqG4JTxywRg1accho/hnioM2JIYqziaQQcgfqLi2Pe1AHL82WIC1pLWdzPjy2O7drnSbO0DBsQ==", "license": "MIT", "dependencies": { "@juggle/resize-observer": "^3.4.0", @@ -18097,7 +17890,17 @@ "react": ">=18.2.0", "react-dom": ">=18.2.0", "slate": ">=0.114.0", - "slate-dom": ">=0.119.0" + "slate-dom": ">=0.116.0" + } + }, + "node_modules/slate/node_modules/immer": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", + "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" } }, "node_modules/sonner": { @@ -18606,7 +18409,6 @@ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.19.tgz", "integrity": "sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==", "license": "MIT", - "peer": true, "dependencies": { "@emotion/is-prop-valid": "1.2.2", "@emotion/unitless": "0.8.1", @@ -18729,12 +18531,6 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "license": "MIT" }, - "node_modules/symlink-or-copy": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz", - "integrity": "sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA==", - "license": "MIT" - }, "node_modules/synckit": { "version": "0.11.11", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", @@ -18755,8 +18551,7 @@ "version": "4.1.17", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz", "integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/tapable": { "version": "2.3.0", @@ -18902,6 +18697,12 @@ "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", "license": "MIT" }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -19201,9 +19002,8 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19417,9 +19217,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.0.tgz", - "integrity": "sha512-Dn+NlSF/7+0lVSEZ57SYQg6/E44arLzsVOGgrElBn/BlG1B8WKdbLppOocFrXwRNTkNlgdGNaBgH1o0lggDPiw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", + "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", "funding": [ { "type": "opencollective", @@ -19551,7 +19351,6 @@ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", "license": "MIT", - "peer": true, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } @@ -19609,7 +19408,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.6.tgz", "integrity": "sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==", "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -20577,7 +20375,6 @@ "resolved": "https://registry.npmjs.org/xstate/-/xstate-5.24.0.tgz", "integrity": "sha512-h/213ThFfZbOefUWrLc9ZvYggEVBr0jrD2dNxErxNMLQfZRN19v+80TaXFho17hs8Q2E1mULtm/6nv12um0C4A==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/xstate" diff --git a/studio/sample-data.tar.gz b/studio/sample-data.tar.gz index 7cf28255..4d37f1a5 100644 Binary files a/studio/sample-data.tar.gz and b/studio/sample-data.tar.gz differ diff --git a/studio/schema.json b/studio/schema.json index e531a711..8126d1ed 100644 --- a/studio/schema.json +++ b/studio/schema.json @@ -12,177 +12,21 @@ "value": "callToAction" } }, - "heading": { - "type": "objectAttribute", - "value": { - "type": "string" - }, - "optional": false - }, - "text": { - "type": "objectAttribute", - "value": { - "type": "string" - }, - "optional": true - }, - "buttonText": { - "type": "objectAttribute", - "value": { - "type": "string" - }, - "optional": true - }, - "link": { - "type": "objectAttribute", - "value": { - "type": "inline", - "name": "link" - }, - "optional": true - } - } - } - }, - { - "name": "link", - "type": "type", - "value": { - "type": "object", - "attributes": { - "_type": { - "type": "objectAttribute", - "value": { - "type": "string", - "value": "link" - } - }, - "linkType": { - "type": "objectAttribute", - "value": { - "type": "union", - "of": [ - { - "type": "string", - "value": "href" - }, - { - "type": "string", - "value": "page" - }, - { - "type": "string", - "value": "post" - } - ] - }, - "optional": true - }, - "href": { + "eyebrow": { "type": "objectAttribute", "value": { "type": "string" }, "optional": true }, - "page": { - "type": "objectAttribute", - "value": { - "type": "object", - "attributes": { - "_ref": { - "type": "objectAttribute", - "value": { - "type": "string" - } - }, - "_type": { - "type": "objectAttribute", - "value": { - "type": "string", - "value": "reference" - } - }, - "_weak": { - "type": "objectAttribute", - "value": { - "type": "boolean" - }, - "optional": true - } - }, - "dereferencesTo": "page" - }, - "optional": true - }, - "post": { - "type": "objectAttribute", - "value": { - "type": "object", - "attributes": { - "_ref": { - "type": "objectAttribute", - "value": { - "type": "string" - } - }, - "_type": { - "type": "objectAttribute", - "value": { - "type": "string", - "value": "reference" - } - }, - "_weak": { - "type": "objectAttribute", - "value": { - "type": "boolean" - }, - "optional": true - } - }, - "dereferencesTo": "post" - }, - "optional": true - }, - "openInNewTab": { - "type": "objectAttribute", - "value": { - "type": "boolean" - }, - "optional": true - } - } - } - }, - { - "name": "infoSection", - "type": "type", - "value": { - "type": "object", - "attributes": { - "_type": { - "type": "objectAttribute", - "value": { - "type": "string", - "value": "infoSection" - } - }, "heading": { "type": "objectAttribute", "value": { "type": "string" }, - "optional": true - }, - "subheading": { - "type": "objectAttribute", - "value": { - "type": "string" - }, - "optional": true + "optional": false }, - "content": { + "body": { "type": "objectAttribute", "value": { "type": "array", @@ -301,27 +145,6 @@ "of": { "type": "object", "attributes": { - "linkType": { - "type": "objectAttribute", - "value": { - "type": "union", - "of": [ - { - "type": "string", - "value": "href" - }, - { - "type": "string", - "value": "page" - }, - { - "type": "string", - "value": "post" - } - ] - }, - "optional": true - }, "href": { "type": "objectAttribute", "value": { @@ -329,73 +152,6 @@ }, "optional": true }, - "page": { - "type": "objectAttribute", - "value": { - "type": "object", - "attributes": { - "_ref": { - "type": "objectAttribute", - "value": { - "type": "string" - } - }, - "_type": { - "type": "objectAttribute", - "value": { - "type": "string", - "value": "reference" - } - }, - "_weak": { - "type": "objectAttribute", - "value": { - "type": "boolean" - }, - "optional": true - } - }, - "dereferencesTo": "page" - }, - "optional": true - }, - "post": { - "type": "objectAttribute", - "value": { - "type": "object", - "attributes": { - "_ref": { - "type": "objectAttribute", - "value": { - "type": "string" - } - }, - "_type": { - "type": "objectAttribute", - "value": { - "type": "string", - "value": "reference" - } - }, - "_weak": { - "type": "objectAttribute", - "value": { - "type": "boolean" - }, - "optional": true - } - }, - "dereferencesTo": "post" - }, - "optional": true - }, - "openInNewTab": { - "type": "objectAttribute", - "value": { - "type": "boolean" - }, - "optional": true - }, "_type": { "type": "objectAttribute", "value": { @@ -448,45 +204,534 @@ } }, "optional": true - } - } - } - }, - { - "name": "blockContent", - "type": "type", - "value": { - "type": "array", - "of": { - "type": "object", - "attributes": { - "children": { - "type": "objectAttribute", - "value": { - "type": "array", - "of": { - "type": "object", - "attributes": { - "marks": { - "type": "objectAttribute", - "value": { - "type": "array", - "of": { - "type": "string" - } - }, - "optional": true - }, - "text": { - "type": "objectAttribute", - "value": { - "type": "string" - }, - "optional": true - }, - "_type": { - "type": "objectAttribute", - "value": { + }, + "button": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "button" + }, + "optional": true + }, + "image": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "sanity.imageAsset" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + } + }, + "optional": true + }, + "theme": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "light" + }, + { + "type": "string", + "value": "dark" + } + ] + }, + "optional": true + }, + "contentAlignment": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "textFirst" + }, + { + "type": "string", + "value": "imageFirst" + } + ] + }, + "optional": true + } + } + } + }, + { + "name": "infoSection", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "infoSection" + } + }, + "heading": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "subheading": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "linkType": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "href" + }, + { + "type": "string", + "value": "page" + }, + { + "type": "string", + "value": "post" + } + ] + }, + "optional": true + }, + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "page": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "page" + }, + "optional": true + }, + "post": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "post" + }, + "optional": true + }, + "openInNewTab": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "sanity.imageAsset" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + } + } + } + }, + { + "name": "blockContentTextOnly", + "type": "type", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { "type": "string", "value": "span" } @@ -572,149 +817,551 @@ "of": { "type": "object", "attributes": { - "linkType": { + "href": { "type": "objectAttribute", "value": { - "type": "union", - "of": [ - { - "type": "string", - "value": "href" + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + } + }, + { + "name": "blockContent", + "type": "type", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } }, - { - "type": "string", - "value": "page" + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" }, - { + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { "type": "string", - "value": "post" + "value": "span" } - ] - }, - "optional": true - }, - "href": { - "type": "objectAttribute", - "value": { - "type": "string" + } }, - "optional": true - }, - "page": { - "type": "objectAttribute", - "value": { + "rest": { "type": "object", "attributes": { - "_ref": { + "_key": { "type": "objectAttribute", "value": { "type": "string" } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "linkType": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "href" + }, + { + "type": "string", + "value": "page" + }, + { + "type": "string", + "value": "post" + } + ] }, - "_type": { - "type": "objectAttribute", - "value": { - "type": "string", - "value": "reference" - } + "optional": true + }, + "href": { + "type": "objectAttribute", + "value": { + "type": "string" }, - "_weak": { - "type": "objectAttribute", - "value": { - "type": "boolean" + "optional": true + }, + "page": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } }, - "optional": true - } + "dereferencesTo": "page" + }, + "optional": true + }, + "post": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "post" + }, + "optional": true + }, + "openInNewTab": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true }, - "dereferencesTo": "page" + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } }, - "optional": true - }, - "post": { - "type": "objectAttribute", - "value": { + "rest": { "type": "object", "attributes": { - "_ref": { + "_key": { "type": "objectAttribute", "value": { "type": "string" } - }, - "_type": { - "type": "objectAttribute", - "value": { - "type": "string", - "value": "reference" - } - }, - "_weak": { - "type": "objectAttribute", - "value": { - "type": "boolean" - }, - "optional": true } - }, - "dereferencesTo": "post" - }, - "optional": true - }, - "openInNewTab": { - "type": "objectAttribute", - "value": { - "type": "boolean" - }, - "optional": true - }, - "_type": { - "type": "objectAttribute", - "value": { - "type": "string", - "value": "link" + } } } }, - "rest": { + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { "type": "object", "attributes": { - "_key": { + "_ref": { "type": "objectAttribute", "value": { "type": "string" } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true } - } + }, + "dereferencesTo": "sanity.imageAsset" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" } } }, - "optional": true + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + } + }, + { + "name": "button", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "button" + } + }, + "buttonText": { + "type": "objectAttribute", + "value": { + "type": "string" }, - "level": { - "type": "objectAttribute", - "value": { - "type": "number" - }, - "optional": true + "optional": true + }, + "link": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "link" }, - "_type": { - "type": "objectAttribute", - "value": { - "type": "string", - "value": "block" - } + "optional": true + } + } + } + }, + { + "name": "link", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" } }, - "rest": { - "type": "object", - "attributes": { - "_key": { - "type": "objectAttribute", - "value": { - "type": "string" + "linkType": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "href" + }, + { + "type": "string", + "value": "page" + }, + { + "type": "string", + "value": "post" } - } - } + ] + }, + "optional": true + }, + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "page": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "page" + }, + "optional": true + }, + "post": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "post" + }, + "optional": true + }, + "openInNewTab": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true } } } @@ -2361,21 +3008,21 @@ "value": { "type": "number" }, - "optional": true + "optional": false }, "width": { "type": "objectAttribute", "value": { "type": "number" }, - "optional": true + "optional": false }, "aspectRatio": { "type": "objectAttribute", "value": { "type": "number" }, - "optional": true + "optional": false } } } @@ -2398,28 +3045,28 @@ "value": { "type": "number" }, - "optional": true + "optional": false }, "y": { "type": "objectAttribute", "value": { "type": "number" }, - "optional": true + "optional": false }, "height": { "type": "objectAttribute", "value": { "type": "number" }, - "optional": true + "optional": false }, "width": { "type": "objectAttribute", "value": { "type": "number" }, - "optional": true + "optional": false } } } @@ -2442,28 +3089,28 @@ "value": { "type": "number" }, - "optional": true + "optional": false }, "bottom": { "type": "objectAttribute", "value": { "type": "number" }, - "optional": true + "optional": false }, "left": { "type": "objectAttribute", "value": { "type": "number" }, - "optional": true + "optional": false }, "right": { "type": "objectAttribute", "value": { "type": "number" }, - "optional": true + "optional": false } } } diff --git a/studio/src/schemaTypes/index.ts b/studio/src/schemaTypes/index.ts index 4d04adde..6e39a053 100644 --- a/studio/src/schemaTypes/index.ts +++ b/studio/src/schemaTypes/index.ts @@ -6,6 +6,8 @@ import {infoSection} from './objects/infoSection' import {settings} from './singletons/settings' import {link} from './objects/link' import {blockContent} from './objects/blockContent' +import button from './objects/button' +import { blockContentTextOnly } from './objects/blockContentTextOnly' // Export an array of all the schema types. This is used in the Sanity Studio configuration. https://www.sanity.io/docs/schema-types @@ -17,7 +19,9 @@ export const schemaTypes = [ post, person, // Objects + button, blockContent, + blockContentTextOnly, infoSection, callToAction, link, diff --git a/studio/src/schemaTypes/objects/blockContent.tsx b/studio/src/schemaTypes/objects/blockContent.tsx index 1670fa5a..d0d20dbd 100644 --- a/studio/src/schemaTypes/objects/blockContent.tsx +++ b/studio/src/schemaTypes/objects/blockContent.tsx @@ -92,5 +92,11 @@ export const blockContent = defineType({ ], }, }), + defineArrayMember({ + type: 'image', + options: { + hotspot: true, + }, + }), ], }) diff --git a/studio/src/schemaTypes/objects/blockContentTextOnly.tsx b/studio/src/schemaTypes/objects/blockContentTextOnly.tsx new file mode 100644 index 00000000..3b58b7ef --- /dev/null +++ b/studio/src/schemaTypes/objects/blockContentTextOnly.tsx @@ -0,0 +1,12 @@ +import {defineArrayMember, defineType, defineField} from 'sanity' + +export const blockContentTextOnly = defineType({ + title: 'Block Content (Simple - Text Only)', + name: 'blockContentTextOnly', + type: 'array', + of: [ + defineArrayMember({ + type: 'block', + }), + ], +}) diff --git a/studio/src/schemaTypes/objects/button.ts b/studio/src/schemaTypes/objects/button.ts new file mode 100644 index 00000000..2c253608 --- /dev/null +++ b/studio/src/schemaTypes/objects/button.ts @@ -0,0 +1,21 @@ +import {defineField, defineType} from 'sanity' + +export default defineType({ + name: 'button', + type: 'object', + description: 'The button of the call to action', + fields: [ + defineField({ + name: 'buttonText', + title: 'Button Text', + type: 'string', + }), + defineField({ + name: 'link', + title: 'Button Link', + type: 'link', + options:{collapsible: true, collapsed: false}, + }), + ], + options:{collapsible: true}, +}) diff --git a/studio/src/schemaTypes/objects/callToAction.ts b/studio/src/schemaTypes/objects/callToAction.ts index 61906183..27753cab 100644 --- a/studio/src/schemaTypes/objects/callToAction.ts +++ b/studio/src/schemaTypes/objects/callToAction.ts @@ -1,5 +1,11 @@ import {defineField, defineType} from 'sanity' -import {BulbOutlineIcon} from '@sanity/icons' +import { + BulbOutlineIcon, + ComposeSparklesIcon, + LinkIcon, + ImageIcon, + ControlsIcon, +} from '@sanity/icons' /** * Call to action schema object. Objects are reusable schema structures document. @@ -11,48 +17,100 @@ export const callToAction = defineType({ title: 'Call to Action', type: 'object', icon: BulbOutlineIcon, - validation: (Rule) => - // This is a custom validation rule that requires both 'buttonText' and 'link' to be set, or neither to be set - Rule.custom((fields) => { - const {buttonText, link} = fields || {} - if ((buttonText && link) || (!buttonText && !link)) { - return true - } - return 'Both Button text and Button link must be set, or both must be empty' - }), + groups: [ + { + name: 'contents', + icon: ComposeSparklesIcon, + default: true, + }, + { + name: 'media', + icon: ImageIcon, + }, + { + name: 'button', + icon: LinkIcon, + }, + { + name: 'designSystem', + icon: ControlsIcon, + }, + ], fields: [ + defineField({ + name: 'eyebrow', + title: 'Eyebrow', + type: 'string', + group: 'contents', + }), defineField({ name: 'heading', title: 'Heading', type: 'string', validation: (Rule) => Rule.required(), + group: 'contents', + }), + defineField({ + name: 'body', + type: 'blockContentTextOnly', + group: 'contents', }), defineField({ - name: 'text', - title: 'Text', - type: 'text', + name: 'button', + type: 'button', + group: 'button', }), defineField({ - name: 'buttonText', - title: 'Button text', + name: 'image', + type: 'image', + group: 'media', + options: { + hotspot: true, + }, + }), + defineField({ + name: 'theme', type: 'string', + title: 'Theme', + options: { + list: [ + {title: 'Light', value: 'light'}, + {title: 'Dark', value: 'dark'}, + ], + layout: 'radio', + }, + description: 'Use dark theme with white tile grid background', + initialValue: 'light', + group: 'designSystem', }), defineField({ - name: 'link', - title: 'Button link', - type: 'link', + name: 'contentAlignment', + title: 'Content Order', + type: 'string', + initialValue: 'textFirst', + description: 'Does text content or image come first?', + options: { + list: [ + {title: 'Text then Image', value: 'textFirst'}, + {title: 'Image then Text', value: 'imageFirst'}, + ], + layout: 'radio', + }, + hidden: ({parent}) => !Boolean(parent?.image?.asset), + group: 'designSystem', }), ], preview: { select: { title: 'heading', + image: 'image.asset', }, prepare(selection) { - const {title} = selection - + const {title, image} = selection return { title: title, subtitle: 'Call to Action', + media: image || undefined, } }, }, diff --git a/studio/static/page-builder-thumbnails/callToAction.webp b/studio/static/page-builder-thumbnails/callToAction.webp index cce776ea..4ec78566 100644 Binary files a/studio/static/page-builder-thumbnails/callToAction.webp and b/studio/static/page-builder-thumbnails/callToAction.webp differ