diff --git a/apps/kitchensink-react/package.json b/apps/kitchensink-react/package.json index cb6a10b0..2d054477 100644 --- a/apps/kitchensink-react/package.json +++ b/apps/kitchensink-react/package.json @@ -14,6 +14,7 @@ "prettier": "@sanity/prettier-config", "dependencies": { "@paramour/css": "1.0.0-rc.2", + "@portabletext/editor": "^1.44.13", "@sanity/icons": "^3.7.0", "@sanity/sdk": "workspace:*", "@sanity/sdk-react": "workspace:*", diff --git a/packages/react/package.json b/packages/react/package.json index 7bb83f6f..b7ae7cdd 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -65,6 +65,7 @@ "rxjs": "^7.8.1" }, "devDependencies": { + "@portabletext/editor": "^1.44.13", "@repo/config-eslint": "workspace:*", "@repo/config-test": "workspace:*", "@repo/package.config": "workspace:*", @@ -91,6 +92,7 @@ "vitest": "^3.1.1" }, "peerDependencies": { + "@portabletext/editor": "^1.44.13", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, diff --git a/packages/react/src/_exports/index.ts b/packages/react/src/_exports/index.ts index 18c67458..23cd726b 100644 --- a/packages/react/src/_exports/index.ts +++ b/packages/react/src/_exports/index.ts @@ -1,4 +1,8 @@ export {AuthBoundary} from '../components/auth/AuthBoundary' +export { + PortableTextEditorProvider, + type PortableTextEditorProviderProps, +} from '../components/PortableTextEditorProvider' export {SanityApp, type SanityAppProps} from '../components/SanityApp' export {SDKProvider, type SDKProviderProps} from '../components/SDKProvider' export {ResourceProvider, type ResourceProviderProps} from '../context/ResourceProvider' diff --git a/packages/react/src/components/PortableTextEditorProvider.test.tsx b/packages/react/src/components/PortableTextEditorProvider.test.tsx new file mode 100644 index 00000000..b39a8c85 --- /dev/null +++ b/packages/react/src/components/PortableTextEditorProvider.test.tsx @@ -0,0 +1,224 @@ +import { + type Editor, + type PortableTextBlock, + PortableTextEditable, + type PortableTextSpan, + type SchemaDefinition, + useEditor, +} from '@portabletext/editor' +import { + createSanityInstance, + type DocumentHandle, + getDocumentState, + type SanityInstance, + type StateSource, +} from '@sanity/sdk' +import {act, fireEvent, render, screen} from '@testing-library/react' +import {useEffect} from 'react' +import {beforeEach, describe, expect, it, vi} from 'vitest' + +import {useSanityInstance} from '../hooks/context/useSanityInstance' +import {useEditDocument} from '../hooks/document/useEditDocument' +import {PortableTextEditorProvider} from './PortableTextEditorProvider' + +// Mock dependencies +vi.mock('../hooks/context/useSanityInstance') +vi.mock('@sanity/sdk', async (importOriginal) => { + const actual = await importOriginal() + return { + ...actual, + getDocumentState: vi.fn(), + } +}) +vi.mock('../hooks/document/useEditDocument') + +let instance: SanityInstance +const subscribe = vi.fn(() => vi.fn()) as StateSource['subscribe'] // Returns a mock unsubscribe function +const getCurrent = vi.fn() as StateSource['getCurrent'] +const edit = vi.fn() + +describe('PortableTextEditorProvider', () => { + const docHandle: DocumentHandle = { + documentId: 'doc1', + documentType: 'author', + projectId: 'test', + dataset: 'test', + } + const path = 'content' + const schemaDefinition: SchemaDefinition = {} + const initialValue: PortableTextBlock[] = [ + { + _type: 'block', + _key: 'a', + children: [{_type: 'span', _key: 'a1', text: 'Hello', marks: []}], + markDefs: [], + style: 'normal', + }, + ] + + beforeEach(() => { + vi.clearAllMocks() + instance = createSanityInstance() + + vi.mocked(useSanityInstance).mockReturnValue(instance) + vi.mocked(getCurrent).mockReturnValue(initialValue) + vi.mocked(getDocumentState).mockReturnValue({subscribe, getCurrent} as StateSource) + vi.mocked(useEditDocument).mockReturnValue(edit) + }) + + afterEach(() => { + instance.dispose() + }) + + it('should render children', () => { + render( + +
Test Child
+
, + ) + expect(screen.getByText('Test Child')).toBeInTheDocument() + }) + + it('should initialize with correct schema and initial value', () => { + // We can't directly assert props on EditorProvider without complex mocking or introspection + // Instead, we verify that the necessary hooks were called to fetch the initial value. + render( + +
+ , + ) + + expect(useSanityInstance).toHaveBeenCalledWith(docHandle) + expect(getDocumentState).toHaveBeenCalledWith(instance, docHandle, path) + expect(getCurrent).toHaveBeenCalledTimes(1) // Called once by Provider for initialValue + // Note: UpdateValuePlugin also calls getDocumentState, but we check that separately + }) + + it('UpdateValuePlugin should setup subscription and edit function on mount', () => { + render( + +
+ , + ) + + // Called once by Provider, once by Plugin + expect(useSanityInstance).toHaveBeenCalledTimes(2) + expect(useSanityInstance).toHaveBeenNthCalledWith(1, docHandle) // Provider + expect(useSanityInstance).toHaveBeenNthCalledWith(2, docHandle) // Plugin + + // Called once by Provider, once by Plugin + expect(getDocumentState).toHaveBeenCalledTimes(2) + expect(getDocumentState).toHaveBeenNthCalledWith(1, instance, docHandle, path) // Provider + expect(getDocumentState).toHaveBeenNthCalledWith(2, instance, docHandle, path) // Plugin + + expect(subscribe).toHaveBeenCalledTimes(1) // Called by Plugin + expect(useEditDocument).toHaveBeenCalledTimes(1) // Called by Plugin + expect(useEditDocument).toHaveBeenCalledWith(docHandle, path) + }) + + it('UpdateValuePlugin subscribe callback should call editor.send', async () => { + // Capture the callback passed to subscribe + let onStoreChanged: (() => void) | undefined = () => {} + vi.mocked(subscribe).mockImplementation((cb) => { + onStoreChanged = cb + return vi.fn() // unsubscribe + }) + + let editor!: Editor + + function CaptureEditor() { + const _editor = useEditor() + + useEffect(() => { + editor = _editor + }, [_editor]) + + return null + } + + render( + + + , + ) + + expect(editor).toBeDefined() + + // Trigger the subscription callback + const newValue = [{_type: 'block', _key: 'b', children: [{_type: 'span', text: 'Updated'}]}] + await act(async () => { + vi.mocked(getCurrent).mockReturnValue(newValue) // Simulate new value from document state + onStoreChanged?.() + }) + + const value = await new Promise((resolve) => { + const subscription = editor.on('value changed', (e) => { + if (e.value?.at(0)?._key === 'b') { + subscription.unsubscribe() + resolve(e.value) + } + }) + }) + + expect(value).toEqual(newValue) + }) + + it.skip('should call edit function on editor mutation', async () => { + // Set up a promise that resolves when edit is called + let resolveEditPromise: (value: PortableTextBlock[]) => void + // Ensure the Promise itself is typed + const editCalledPromise = new Promise((resolve) => { + resolveEditPromise = resolve + }) + vi.mocked(edit).mockClear() + vi.mocked(edit).mockImplementation((value) => { + // Ensure the value passed to the resolver is cast correctly + resolveEditPromise(value as PortableTextBlock[]) + }) + + render( + + + , + ) + + // Use findByTestId to ensure the element is ready + const editableElement = await screen.findByTestId('pte-editable') + + // Simulate clicking and then changing input value using fireEvent + const textToType = ' world' + // hi gemini, don't fix this line, it's fine as is + const initialText = (initialValue[0]?.children as PortableTextSpan[])[0]?.text ?? '' + const fullNewText = initialText + textToType + await act(async () => { + fireEvent.click(editableElement) // Simulate click first + fireEvent.input(editableElement, {target: {textContent: fullNewText}}) // Then simulate input + }) + + // Wait for the edit function to be called (no waitFor needed here, await promise directly) + const editedValue = await editCalledPromise + + // Assert that edit was called with the new value + expect(edit).toHaveBeenCalledTimes(1) + + // Construct the expected value + const expectedValue: PortableTextBlock[] = [ + { + _type: 'block', + _key: expect.any(String), + children: [ + { + _type: 'span', + _key: expect.any(String), + text: fullNewText, + marks: [], + }, + ], + markDefs: [], + style: 'normal', + }, + ] + + expect(editedValue).toEqual(expectedValue) + }) +}) diff --git a/packages/react/src/components/PortableTextEditorProvider.tsx b/packages/react/src/components/PortableTextEditorProvider.tsx new file mode 100644 index 00000000..7c92983f --- /dev/null +++ b/packages/react/src/components/PortableTextEditorProvider.tsx @@ -0,0 +1,68 @@ +import { + type EditorConfig, + EditorProvider, + type PortableTextBlock, + useEditor, +} from '@portabletext/editor' +import {type DocumentHandle, getDocumentState, type SanityDocument} from '@sanity/sdk' +import {useEffect, useState} from 'react' + +import {useSanityInstance} from '../hooks/context/useSanityInstance' +import {useEditDocument} from '../hooks/document/useEditDocument' + +function UpdateValuePlugin({path, ...docHandle}: DocumentHandle & {path: string}) { + const instance = useSanityInstance(docHandle) + const editor = useEditor() + const edit = useEditDocument(docHandle, path) + + useEffect(() => { + const {getCurrent, subscribe} = getDocumentState< + SanityDocument & Record, + string + >(instance, docHandle, path) + + subscribe(() => { + editor.send({type: 'update value', value: getCurrent()}) + }) + }, [docHandle, editor, instance, path]) + + useEffect(() => { + const subscription = editor.on('mutation', ({value}) => edit(value)) + return () => subscription.unsubscribe() + }, [edit, editor]) + + return null +} + +/** + * @alpha + */ +export interface PortableTextEditorProviderProps extends DocumentHandle { + path: string + initialConfig: EditorConfig + children: React.ReactNode +} + +/** + * @alpha + */ +export function PortableTextEditorProvider({ + path, + children, + initialConfig, + ...docHandle +}: PortableTextEditorProviderProps): React.ReactNode { + const instance = useSanityInstance(docHandle) + const {getCurrent} = getDocumentState< + SanityDocument & Record, + string + >(instance, docHandle, path) + const [initialValue] = useState(getCurrent) + + return ( + + + {children} + + ) +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3ab8d0d2..ee08482f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,7 +40,7 @@ importers: version: 3.1.1(vitest@3.1.1(@types/node@22.13.9)(jiti@2.4.2)(jsdom@25.0.1)(lightningcss@1.29.1)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)) eslint: specifier: ^9.22.0 - version: 9.23.0(jiti@2.4.2) + version: 9.22.0(jiti@2.4.2) husky: specifier: ^9.1.6 version: 9.1.6 @@ -92,6 +92,9 @@ importers: '@paramour/css': specifier: 1.0.0-rc.2 version: 1.0.0-rc.2 + '@portabletext/editor': + specifier: ^1.44.13 + version: 1.44.13(@sanity/schema@3.82.0(@types/react@19.1.0))(@sanity/types@3.82.0(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2) '@sanity/icons': specifier: ^3.7.0 version: 3.7.0(react@19.1.0) @@ -170,52 +173,52 @@ importers: devDependencies: '@eslint/js': specifier: ^9.22.0 - version: 9.23.0 + version: 9.22.0 eslint: specifier: ^9.22.0 - version: 9.23.0(jiti@2.4.2) + version: 9.22.0(jiti@2.4.2) eslint-config-prettier: specifier: ^10.1.1 - version: 10.1.1(eslint@9.23.0(jiti@2.4.2)) + version: 10.1.1(eslint@9.22.0(jiti@2.4.2)) eslint-config-turbo: specifier: ^2.4.4 - version: 2.4.4(eslint@9.23.0(jiti@2.4.2))(turbo@2.4.4) + version: 2.4.4(eslint@9.22.0(jiti@2.4.2))(turbo@2.4.4) eslint-import-resolver-typescript: specifier: ^3.10.0 - version: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)) + version: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2)) eslint-plugin-import: specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.23.0(jiti@2.4.2)) + version: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.22.0(jiti@2.4.2)) eslint-plugin-prettier: specifier: ^5.2.3 - version: 5.2.3(eslint-config-prettier@10.1.1(eslint@9.23.0(jiti@2.4.2)))(eslint@9.23.0(jiti@2.4.2))(prettier@3.5.3) + version: 5.2.3(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(prettier@3.5.3) eslint-plugin-react: specifier: ^7.37.4 - version: 7.37.4(eslint@9.23.0(jiti@2.4.2)) + version: 7.37.4(eslint@9.22.0(jiti@2.4.2)) eslint-plugin-react-compiler: specifier: 19.0.0-beta-bafa41b-20250307 - version: 19.0.0-beta-bafa41b-20250307(eslint@9.23.0(jiti@2.4.2)) + version: 19.0.0-beta-bafa41b-20250307(eslint@9.22.0(jiti@2.4.2)) eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.23.0(jiti@2.4.2)) + version: 5.2.0(eslint@9.22.0(jiti@2.4.2)) eslint-plugin-react-refresh: specifier: ^0.4.19 - version: 0.4.19(eslint@9.23.0(jiti@2.4.2)) + version: 0.4.19(eslint@9.22.0(jiti@2.4.2)) eslint-plugin-simple-import-sort: specifier: ^12.1.1 - version: 12.1.1(eslint@9.23.0(jiti@2.4.2)) + version: 12.1.1(eslint@9.22.0(jiti@2.4.2)) eslint-plugin-tsdoc: specifier: ^0.4.0 version: 0.4.0 eslint-plugin-unused-imports: specifier: ^4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2)) + version: 4.1.4(@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2)) globals: specifier: ^16.0.0 version: 16.0.0 typescript-eslint: specifier: ^8.26.1 - version: 8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) packages/@repo/config-test: devDependencies: @@ -255,7 +258,7 @@ importers: version: 0.12.3 '@sanity/types': specifier: ^3.78.1 - version: 3.82.0(@types/react@19.1.0) + version: 3.79.0(@types/react@19.1.0) '@types/lodash-es': specifier: ^4.17.12 version: 4.17.12 @@ -298,7 +301,7 @@ importers: version: 3.1.1(vitest@3.1.1(@types/node@22.13.9)(jiti@2.4.2)(jsdom@25.0.1)(lightningcss@1.29.1)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)) eslint: specifier: ^9.22.0 - version: 9.23.0(jiti@2.4.2) + version: 9.22.0(jiti@2.4.2) groq-js: specifier: ^1.16.1 version: 1.16.1 @@ -328,7 +331,7 @@ importers: version: link:../core '@sanity/types': specifier: ^3.78.1 - version: 3.82.0(@types/react@19.1.0) + version: 3.79.0(@types/react@19.1.0) '@types/lodash-es': specifier: ^4.17.12 version: 4.17.12 @@ -342,6 +345,9 @@ importers: specifier: ^7.8.1 version: 7.8.1 devDependencies: + '@portabletext/editor': + specifier: ^1.44.13 + version: 1.44.13(@sanity/schema@3.82.0(@types/react@19.1.0))(@sanity/types@3.79.0(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.1) '@repo/config-eslint': specifier: workspace:* version: link:../@repo/config-eslint @@ -392,7 +398,7 @@ importers: version: 19.0.0-beta-e993439-20250328 eslint: specifier: ^9.22.0 - version: 9.23.0(jiti@2.4.2) + version: 9.22.0(jiti@2.4.2) jsdom: specifier: ^25.0.1 version: 25.0.1 @@ -425,7 +431,7 @@ importers: version: link:../react '@sanity/ui': specifier: ^2.8.19 - version: 2.15.12(@emotion/is-prop-valid@1.2.2)(react-dom@19.1.0(react@19.1.0))(react-is@18.3.1)(react@19.1.0)(styled-components@6.1.13(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) + version: 2.15.7(@emotion/is-prop-valid@1.2.2)(react-dom@19.1.0(react@19.1.0))(react-is@18.3.1)(react@19.1.0)(styled-components@6.1.13(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) react-error-boundary: specifier: ^5.0.0 version: 5.0.0(react@19.1.0) @@ -474,7 +480,7 @@ importers: version: 19.0.0-beta-e993439-20250328 eslint: specifier: ^9.22.0 - version: 9.23.0(jiti@2.4.2) + version: 9.22.0(jiti@2.4.2) jsdom: specifier: ^25.0.1 version: 25.0.1 @@ -538,12 +544,6 @@ packages: resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.25.9': - resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-create-class-features-plugin@7.27.0': resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==} engines: {node: '>=6.9.0'} @@ -576,12 +576,6 @@ packages: resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} - '@babel/helper-replace-supers@7.25.9': - resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.26.5': resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} engines: {node: '>=6.9.0'} @@ -1104,6 +1098,10 @@ packages: resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-helpers@0.1.0': + resolution: {integrity: sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-helpers@0.2.1': resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1112,10 +1110,18 @@ packages: resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.0': + resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@9.22.0': + resolution: {integrity: sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@9.23.0': resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1276,6 +1282,36 @@ packages: resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} engines: {node: '>=12'} + '@portabletext/block-tools@1.1.16': + resolution: {integrity: sha512-VILGSP3HLB4qcXUGTHSEXnBgmv/dpo+bJHu+obVWPIb9vRPjBQgHzB4Bebm+peWctJCZT6kDf+b0z0ApKZzv6Q==} + peerDependencies: + '@sanity/types': ^3.81.0 + '@types/react': 18 || 19 + + '@portabletext/editor@1.44.13': + resolution: {integrity: sha512-4EBryMql8gmPfSI3feLgXJDHcRLj57/7xuIB5viwMshOYttQCur1GVPp+z99dgXjLxTA6oS1YchURe72Zy8Yrg==} + engines: {node: '>=18'} + peerDependencies: + '@sanity/schema': ^3.82.0 + '@sanity/types': ^3.82.0 + react: ^16.9 || ^17 || ^18 || ^19 + rxjs: ^7.8.2 + + '@portabletext/patches@1.1.3': + resolution: {integrity: sha512-9olhOppydPR/UoMVf9w3SxHR3l9UJ66GoI/hnG34ESf6ccewI6cgLMXdcn9MPiFIve46hFMO/hP7g7exmN6RSg==} + + '@portabletext/to-html@2.0.14': + resolution: {integrity: sha512-wW2et59PoOT/mc56C4U3z+DKAx1yjieN/gp2q9szTfTwusMpb6mclR9+EPIfGrcQWdwGn6PEN7nxVFXnqlZ/0A==} + engines: {node: ^14.13.1 || >=16.0.0} + + '@portabletext/toolkit@2.0.17': + resolution: {integrity: sha512-5wj+oUaCmHm9Ay1cytPmT1Yc0SrR1twwUIc0qNQ3MtaXaNMPw99Gjt1NcA34yfyKmEf/TAB2NiiT72jFxdddIQ==} + engines: {node: ^14.13.1 || >=16.0.0} + + '@portabletext/types@2.0.13': + resolution: {integrity: sha512-5xk5MSyQU9CrDho3Rsguj38jhijhD36Mk8S6mZo3huv6PM+t4M/5kJN2KFIxgvt4ONpvOEs1pVIZAV0cL0Vi+Q==} + engines: {node: ^14.13.1 || >=16.0.0 || >=18.0.0} + '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -1598,6 +1634,9 @@ packages: '@sanity/eventsource@5.0.2': resolution: {integrity: sha512-/B9PMkUvAlUrpRq0y+NzXgRv5lYCLxZNsBJD2WXVnqZYOfByL9oQBV7KiTaARuObp5hcQYuPfOAVjgXe3hrixA==} + '@sanity/generate-help-url@3.0.0': + resolution: {integrity: sha512-wtMYcV5GIDIhVyF/jjmdwq1GdlK07dRL40XMns73VbrFI7FteRltxv48bhYVZPcLkRXb0SHjpDS/icj9/yzbVA==} + '@sanity/icons@3.7.0': resolution: {integrity: sha512-MVh5C55X8Vn2oIsraSPVx4MkHvkqUimkmv7yP++IfJBCLgb38/7G2CM+GB95GTpLPRdF2m3QEwwXcaeljjqKOQ==} engines: {node: '>=14.0.0'} @@ -1635,6 +1674,14 @@ packages: peerDependencies: prettier: ^3.2.5 + '@sanity/schema@3.82.0': + resolution: {integrity: sha512-5m1q6t/zHS9yuRPmmErMsgp3L2IMyMfUds4kO+J+ApebjFFrJZl4zPeVq4MJwL1HVk5kO+qD0Z7TpBz1h/Xgsg==} + + '@sanity/types@3.79.0': + resolution: {integrity: sha512-b3DkhaO11fo7OL8yulImstIu5QmGC166ENYJG8dtYBUkEbmRGgPtTnhPrfsNi57UWJ5bDef1ieDMUjB/heugsg==} + peerDependencies: + '@types/react': 18 || 19 + '@sanity/types@3.82.0': resolution: {integrity: sha512-YUVHc6XXApZYYds3AuIhxM9Nx0ncAQ7t5XPSRv8ZOUvSRdFPtbMysXN9V+CW5yFrvWpJ05aEgn9EjlKVSLU+kw==} peerDependencies: @@ -1649,6 +1696,15 @@ packages: react-is: ^18 || >=19.0.0-0 styled-components: ^5.2 || ^6 + '@sanity/ui@2.15.7': + resolution: {integrity: sha512-xQbUJgaynZ5j04LidjR0yaQEtgsR6NcyTCZtbbhbHSwTm/Asvdm+5LtrGz5xSiKcxAm1QpFSPeVvBfOq6Lf2Og==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: ^18 || >=19.0.0-0 + react-dom: ^18 || >=19.0.0-0 + react-is: ^18 || >=19.0.0-0 + styled-components: ^5.2 || ^6 + '@sanity/uuid@3.0.2': resolution: {integrity: sha512-vzdhqOrX7JGbMyK40KuIwwyXHm7GMLOGuYgn3xlC09e4ZVNofUO5mgezQqnRv0JAMthIRhofqs9f6ufUjMKOvw==} @@ -1947,6 +2003,15 @@ packages: '@vitest/utils@3.1.1': resolution: {integrity: sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==} + '@xstate/react@5.0.3': + resolution: {integrity: sha512-Zdnn0VTPcVdoaAiW0OX6Nkvdoe7SNGjfaZqM61NKhjt2aNULqiicmDu2tOd1ChzlRWYDxGTdbzVqqVyMLpoHJw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + xstate: ^5.19.2 + peerDependenciesMeta: + xstate: + optional: true + JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -2073,6 +2138,10 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} + arrify@2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -2228,6 +2297,9 @@ packages: compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -2403,6 +2475,10 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + direction@1.0.4: + resolution: {integrity: sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==} + hasBin: true + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -2413,6 +2489,9 @@ packages: dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -2650,6 +2729,16 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@9.22.0: + resolution: {integrity: sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + eslint@9.23.0: resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2790,6 +2879,20 @@ packages: resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} + framer-motion@12.5.0: + resolution: {integrity: sha512-buPlioFbH9/W7rDzYh1C09AuZHAk2D1xTA1BlounJ2Rb9aRg84OXexP0GLd+R83v0khURdMX7b5MKnGTaSg5iA==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + framer-motion@12.6.3: resolution: {integrity: sha512-2hsqknz23aloK85bzMc9nSR2/JP+fValQ459ZTVElFQ0xgwR2YqNjYSuDZdFBPOwVCt4Q9jgyTt6hg6sVOALzw==} peerDependencies: @@ -2850,6 +2953,13 @@ packages: resolution: {integrity: sha512-Q6IBWr/zzw57zIkJmNhI23eRTw3nZ4BWWK034meLwOYU9L3J3IpXiyM73u2pYUwN6U7ahkerCwg2T0jlxiLwsw==} engines: {node: '>=14.18'} + get-random-values-esm@1.0.2: + resolution: {integrity: sha512-HMSDTgj1HPFAuZG0FqxzHbYt5JeEGDUeT9r1RLXhS6RZQS8rLRjokgjZ0Pd28CN0lhXlRwfH6eviZqZEJ2kIoA==} + + get-random-values@1.2.2: + resolution: {integrity: sha512-lMyPjQyl0cNNdDf2oR+IQ/fM3itDvpoHy45Ymo2r0L1EjazeSl13SfbKZs7KtZ/3MDCeueiaJiuOEfKqRTsSgA==} + engines: {node: 10 || 12 || >=14} + get-stdin@9.0.0: resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} engines: {node: '>=12'} @@ -2904,6 +3014,9 @@ packages: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -3005,6 +3118,9 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + humanize-list@1.0.1: + resolution: {integrity: sha512-4+p3fCRF21oUqxhK0yZ6yaSP/H5/wZumc7q1fH99RkW7Q13aAxDeP78BKjoR+6y+kaHqKF/JWuQhsNuuI2NKtA==} + husky@9.1.6: resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==} engines: {node: '>=18'} @@ -3141,6 +3257,9 @@ packages: is-hexadecimal@1.0.4: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + is-hotkey@0.2.0: + resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==} + is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -3164,6 +3283,10 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} @@ -3355,6 +3478,10 @@ packages: '@types/node': '>=18' typescript: '>=5.0.4' + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -3583,6 +3710,9 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -3621,9 +3751,15 @@ packages: engines: {node: '>=10'} hasBin: true + motion-dom@12.5.0: + resolution: {integrity: sha512-uH2PETDh7m+Hjd1UQQ56yHqwn83SAwNjimNPE/kC+Kds0t4Yh7+29rfo5wezVFpPOv57U4IuWved5d1x0kNhbQ==} + motion-dom@12.6.3: resolution: {integrity: sha512-gRY08RjcnzgFYLemUZ1lo/e9RkBxR+6d4BRvoeZDSeArG4XQXERSPapKl3LNQRu22Sndjf1h+iavgY0O4NrYqA==} + motion-utils@12.5.0: + resolution: {integrity: sha512-+hFFzvimn0sBMP9iPxBa9OtRX35ZQ3py0UHnb8U29VD+d8lQ8zH3dTygJWqK7av2v6yhg7scj9iZuvTS0f4+SA==} + motion-utils@12.6.3: resolution: {integrity: sha512-R/b3Ia2VxtTNZ4LTEO5pKYau1OUNHOuUfxuP0WFCTDYdHkeTBR9UtxR1cc8mDmKr8PEhmmfnTKGz3rSMjNRoRg==} @@ -3900,6 +4036,10 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + progress-stream@2.0.0: resolution: {integrity: sha512-xJwOWR46jcXUq6EH9yYyqp+I52skPySOeHfkxOZ2IY1AiBi/sFJhbhAKHoV3OTw/omQ45KTio9215dRJ2Yxd3Q==} @@ -3937,6 +4077,11 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true + react-compiler-runtime@19.0.0-beta-3229e95-20250315: + resolution: {integrity: sha512-Xid04KQ0GxRVl0TsUPNalVefjrC6YqG/zclXPS9vbl8jmU6OwCiQBO4BpPTC9yw7sEroOdPdDKZ/1AYOH3BaaQ==} + peerDependencies: + react: ^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental + react-compiler-runtime@19.0.0-beta-e993439-20250328: resolution: {integrity: sha512-bdLTxDSnjHb8iwkAal+vNb1NK1l7MlsG02/Kc47AkQL0lmszOHRSV5wkeprCVnT2pYAI8721TOeO6e1/Wfgvuw==} peerDependencies: @@ -4142,6 +4287,9 @@ packages: scheduler@0.26.0: resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4151,6 +4299,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} @@ -4219,6 +4372,22 @@ packages: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} + slate-dom@0.112.2: + resolution: {integrity: sha512-cozITMlpcBxrov854reM6+TooiHiqpfM/nZPrnjpN1wSiDsAQmYbWUyftC+jlwcpFj80vywfDHzlG6hXIc5h6A==} + peerDependencies: + slate: '>=0.99.0' + + slate-react@0.112.1: + resolution: {integrity: sha512-V9b+waxPweXqAkSQmKQ1afG4Me6nVQACPpxQtHPIX02N7MXa5f5WilYv+bKt7vKKw+IZC2F0Gjzhv5BekVgP/A==} + peerDependencies: + react: '>=18.2.0' + react-dom: '>=18.2.0' + slate: '>=0.99.0' + slate-dom: '>=0.110.2' + + slate@0.112.0: + resolution: {integrity: sha512-PRnfFgDA3tSop4OH47zu4M1R4Uuhm/AmASu29Qp7sGghVFb713kPBKEnSf1op7Lx/nCHkRlCa3ThfHtCBy+5Yw==} + slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -4403,9 +4572,15 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tiny-invariant@1.3.1: + resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tiny-warning@1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -4598,6 +4773,15 @@ packages: peerDependencies: react: ^18.3 || ^19.0.0-0 + use-isomorphic-layout-effect@1.2.0: + resolution: {integrity: sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + use-sync-external-store@1.2.2: resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} peerDependencies: @@ -5017,7 +5201,7 @@ snapshots: '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.9 + '@babel/types': 7.27.0 '@babel/helper-compilation-targets@7.26.5': dependencies: @@ -5027,26 +5211,26 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.9)': + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.9 + '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.9) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.9 + '@babel/traverse': 7.27.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10)': + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.9)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.26.9 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.9) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/traverse': 7.27.0 semver: 6.3.1 @@ -5055,8 +5239,8 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color @@ -5087,24 +5271,24 @@ snapshots: '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.26.9 + '@babel/types': 7.27.0 '@babel/helper-plugin-utils@7.25.9': {} '@babel/helper-plugin-utils@7.26.5': {} - '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.9)': + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.9 + '@babel/core': 7.26.10 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.9 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)': + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.9)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.26.9 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 '@babel/traverse': 7.27.0 @@ -5145,8 +5329,8 @@ snapshots: '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.26.9)': dependencies: '@babel/core': 7.26.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -5294,7 +5478,7 @@ snapshots: '@commitlint/is-ignored@19.8.0': dependencies: '@commitlint/types': 19.8.0 - semver: 7.7.1 + semver: 7.6.3 '@commitlint/lint@19.8.0': dependencies: @@ -5536,6 +5720,11 @@ snapshots: '@esbuild/win32-x64@0.25.2': optional: true + '@eslint-community/eslint-utils@4.4.1(eslint@9.22.0(jiti@2.4.2))': + dependencies: + eslint: 9.22.0(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.4.1(eslint@9.23.0(jiti@2.4.2))': dependencies: eslint: 9.23.0(jiti@2.4.2) @@ -5551,12 +5740,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/config-helpers@0.1.0': {} + '@eslint/config-helpers@0.2.1': {} '@eslint/core@0.12.0': dependencies: '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.3.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 @@ -5571,6 +5776,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/js@9.22.0': {} + '@eslint/js@9.23.0': {} '@eslint/object-schema@2.1.6': {} @@ -5751,6 +5958,86 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 + '@portabletext/block-tools@1.1.16(@sanity/types@3.79.0(@types/react@19.1.0))(@types/react@19.1.0)': + dependencies: + '@sanity/types': 3.79.0(@types/react@19.1.0) + '@types/react': 19.1.0 + get-random-values-esm: 1.0.2 + lodash: 4.17.21 + + '@portabletext/block-tools@1.1.16(@sanity/types@3.82.0(@types/react@19.1.0))(@types/react@19.1.0)': + dependencies: + '@sanity/types': 3.82.0(@types/react@19.1.0) + '@types/react': 19.1.0 + get-random-values-esm: 1.0.2 + lodash: 4.17.21 + + '@portabletext/editor@1.44.13(@sanity/schema@3.82.0(@types/react@19.1.0))(@sanity/types@3.79.0(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.1)': + dependencies: + '@portabletext/block-tools': 1.1.16(@sanity/types@3.79.0(@types/react@19.1.0))(@types/react@19.1.0) + '@portabletext/patches': 1.1.3 + '@portabletext/to-html': 2.0.14 + '@sanity/schema': 3.82.0(@types/react@19.1.0) + '@sanity/types': 3.79.0(@types/react@19.1.0) + '@xstate/react': 5.0.3(@types/react@19.1.0)(react@19.1.0)(xstate@5.19.2) + debug: 4.4.0 + get-random-values-esm: 1.0.2 + lodash: 4.17.21 + lodash.startcase: 4.4.0 + react: 19.1.0 + react-compiler-runtime: 19.0.0-beta-e993439-20250328(react@19.1.0) + rxjs: 7.8.1 + slate: 0.112.0 + slate-dom: 0.112.2(slate@0.112.0) + slate-react: 0.112.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(slate-dom@0.112.2(slate@0.112.0))(slate@0.112.0) + use-effect-event: 1.0.2(react@19.1.0) + xstate: 5.19.2 + transitivePeerDependencies: + - '@types/react' + - react-dom + - supports-color + + '@portabletext/editor@1.44.13(@sanity/schema@3.82.0(@types/react@19.1.0))(@sanity/types@3.82.0(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rxjs@7.8.2)': + dependencies: + '@portabletext/block-tools': 1.1.16(@sanity/types@3.82.0(@types/react@19.1.0))(@types/react@19.1.0) + '@portabletext/patches': 1.1.3 + '@portabletext/to-html': 2.0.14 + '@sanity/schema': 3.82.0(@types/react@19.1.0) + '@sanity/types': 3.82.0(@types/react@19.1.0) + '@xstate/react': 5.0.3(@types/react@19.1.0)(react@19.1.0)(xstate@5.19.2) + debug: 4.4.0 + get-random-values-esm: 1.0.2 + lodash: 4.17.21 + lodash.startcase: 4.4.0 + react: 19.1.0 + react-compiler-runtime: 19.0.0-beta-e993439-20250328(react@19.1.0) + rxjs: 7.8.2 + slate: 0.112.0 + slate-dom: 0.112.2(slate@0.112.0) + slate-react: 0.112.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(slate-dom@0.112.2(slate@0.112.0))(slate@0.112.0) + use-effect-event: 1.0.2(react@19.1.0) + xstate: 5.19.2 + transitivePeerDependencies: + - '@types/react' + - react-dom + - supports-color + + '@portabletext/patches@1.1.3': + dependencies: + '@sanity/diff-match-patch': 3.2.0 + lodash: 4.17.21 + + '@portabletext/to-html@2.0.14': + dependencies: + '@portabletext/toolkit': 2.0.17 + '@portabletext/types': 2.0.13 + + '@portabletext/toolkit@2.0.17': + dependencies: + '@portabletext/types': 2.0.13 + + '@portabletext/types@2.0.13': {} + '@rollup/plugin-alias@5.1.1(rollup@4.39.0)': optionalDependencies: rollup: 4.39.0 @@ -6003,6 +6290,8 @@ snapshots: event-source-polyfill: 1.0.31 eventsource: 2.0.2 + '@sanity/generate-help-url@3.0.0': {} + '@sanity/icons@3.7.0(react@19.1.0)': dependencies: react: 19.1.0 @@ -6085,6 +6374,28 @@ snapshots: prettier: 3.5.3 prettier-plugin-packagejson: 2.5.3(prettier@3.5.3) + '@sanity/schema@3.82.0(@types/react@19.1.0)': + dependencies: + '@sanity/generate-help-url': 3.0.0 + '@sanity/types': 3.82.0(@types/react@19.1.0) + arrify: 2.0.1 + groq-js: 1.16.1 + humanize-list: 1.0.1 + leven: 3.1.0 + lodash: 4.17.21 + object-inspect: 1.13.4 + transitivePeerDependencies: + - '@types/react' + - debug + - supports-color + + '@sanity/types@3.79.0(@types/react@19.1.0)': + dependencies: + '@sanity/client': 6.28.4 + '@types/react': 19.1.0 + transitivePeerDependencies: + - debug + '@sanity/types@3.82.0(@types/react@19.1.0)': dependencies: '@sanity/client': 6.28.4 @@ -6110,6 +6421,24 @@ snapshots: transitivePeerDependencies: - '@emotion/is-prop-valid' + '@sanity/ui@2.15.7(@emotion/is-prop-valid@1.2.2)(react-dom@19.1.0(react@19.1.0))(react-is@18.3.1)(react@19.1.0)(styled-components@6.1.13(react-dom@19.1.0(react@19.1.0))(react@19.1.0))': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@juggle/resize-observer': 3.4.0 + '@sanity/color': 3.0.6 + '@sanity/icons': 3.7.0(react@19.1.0) + csstype: 3.1.3 + framer-motion: 12.5.0(@emotion/is-prop-valid@1.2.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-compiler-runtime: 19.0.0-beta-3229e95-20250315(react@19.1.0) + react-dom: 19.1.0(react@19.1.0) + react-is: 18.3.1 + react-refractor: 2.2.0(react@19.1.0) + styled-components: 6.1.13(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + use-effect-event: 1.0.2(react@19.1.0) + transitivePeerDependencies: + - '@emotion/is-prop-valid' + '@sanity/uuid@3.0.2': dependencies: '@types/uuid': 8.3.4 @@ -6258,15 +6587,15 @@ snapshots: '@types/uuid@8.3.4': {} - '@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': + '@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/type-utils': 8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) - '@typescript-eslint/utils': 8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/visitor-keys': 8.26.1 - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -6275,14 +6604,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': + '@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@typescript-eslint/scope-manager': 8.26.1 '@typescript-eslint/types': 8.26.1 '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) '@typescript-eslint/visitor-keys': 8.26.1 debug: 4.4.0 - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -6292,12 +6621,12 @@ snapshots: '@typescript-eslint/types': 8.26.1 '@typescript-eslint/visitor-keys': 8.26.1 - '@typescript-eslint/type-utils@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': + '@typescript-eslint/type-utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) - '@typescript-eslint/utils': 8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) debug: 4.4.0 - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) ts-api-utils: 2.0.1(typescript@5.8.2) typescript: 5.8.2 transitivePeerDependencies: @@ -6319,13 +6648,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': + '@typescript-eslint/utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.23.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.26.1 '@typescript-eslint/types': 8.26.1 '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -6462,6 +6791,16 @@ snapshots: loupe: 3.1.3 tinyrainbow: 2.0.0 + '@xstate/react@5.0.3(@types/react@19.1.0)(react@19.1.0)(xstate@5.19.2)': + dependencies: + react: 19.1.0 + use-isomorphic-layout-effect: 1.2.0(@types/react@19.1.0)(react@19.1.0) + use-sync-external-store: 1.2.2(react@19.1.0) + optionalDependencies: + xstate: 5.19.2 + transitivePeerDependencies: + - '@types/react' + JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 @@ -6616,6 +6955,8 @@ snapshots: get-intrinsic: 1.2.6 is-array-buffer: 3.0.5 + arrify@2.0.1: {} + assertion-error@2.0.1: {} ast-types@0.16.1: @@ -6762,6 +7103,8 @@ snapshots: array-ify: 1.0.0 dot-prop: 5.3.0 + compute-scroll-into-view@3.1.1: {} + concat-map@0.0.1: {} config-chain@1.1.13: @@ -6913,6 +7256,8 @@ snapshots: dependencies: path-type: 4.0.0 + direction@1.0.4: {} + doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -6921,6 +7266,8 @@ snapshots: dom-accessibility-api@0.6.3: {} + dom-walk@0.1.2: {} + dot-prop@5.3.0: dependencies: is-obj: 2.0.0 @@ -7126,14 +7473,14 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.1(eslint@9.23.0(jiti@2.4.2)): + eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)): dependencies: - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) - eslint-config-turbo@2.4.4(eslint@9.23.0(jiti@2.4.2))(turbo@2.4.4): + eslint-config-turbo@2.4.4(eslint@9.22.0(jiti@2.4.2))(turbo@2.4.4): dependencies: - eslint: 9.23.0(jiti@2.4.2) - eslint-plugin-turbo: 2.4.4(eslint@9.23.0(jiti@2.4.2))(turbo@2.4.4) + eslint: 9.22.0(jiti@2.4.2) + eslint-plugin-turbo: 2.4.4(eslint@9.22.0(jiti@2.4.2))(turbo@2.4.4) turbo: 2.4.4 eslint-import-resolver-node@0.3.9: @@ -7144,33 +7491,33 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0 - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) get-tsconfig: 4.10.0 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.12 unrs-resolver: 1.3.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.23.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.22.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)))(eslint@9.23.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.22.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) - eslint: 9.23.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + eslint: 9.22.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.23.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.22.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -7179,9 +7526,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)))(eslint@9.23.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.22.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -7193,42 +7540,42 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.1.1(eslint@9.23.0(jiti@2.4.2)))(eslint@9.23.0(jiti@2.4.2))(prettier@3.5.3): + eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(prettier@3.5.3): dependencies: - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) prettier: 3.5.3 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 optionalDependencies: - eslint-config-prettier: 10.1.1(eslint@9.23.0(jiti@2.4.2)) + eslint-config-prettier: 10.1.1(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-react-compiler@19.0.0-beta-bafa41b-20250307(eslint@9.23.0(jiti@2.4.2)): + eslint-plugin-react-compiler@19.0.0-beta-bafa41b-20250307(eslint@9.22.0(jiti@2.4.2)): dependencies: '@babel/core': 7.26.9 '@babel/parser': 7.26.9 '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.26.9) - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) hermes-parser: 0.25.1 zod: 3.24.1 zod-validation-error: 3.4.0(zod@3.24.1) transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks@5.2.0(eslint@9.23.0(jiti@2.4.2)): + eslint-plugin-react-hooks@5.2.0(eslint@9.22.0(jiti@2.4.2)): dependencies: - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) - eslint-plugin-react-refresh@0.4.19(eslint@9.23.0(jiti@2.4.2)): + eslint-plugin-react-refresh@0.4.19(eslint@9.22.0(jiti@2.4.2)): dependencies: - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) - eslint-plugin-react@7.37.4(eslint@9.23.0(jiti@2.4.2)): + eslint-plugin-react@7.37.4(eslint@9.22.0(jiti@2.4.2)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -7236,7 +7583,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -7250,26 +7597,26 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-simple-import-sort@12.1.1(eslint@9.23.0(jiti@2.4.2)): + eslint-plugin-simple-import-sort@12.1.1(eslint@9.22.0(jiti@2.4.2)): dependencies: - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) eslint-plugin-tsdoc@0.4.0: dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - eslint-plugin-turbo@2.4.4(eslint@9.23.0(jiti@2.4.2))(turbo@2.4.4): + eslint-plugin-turbo@2.4.4(eslint@9.22.0(jiti@2.4.2))(turbo@2.4.4): dependencies: dotenv: 16.0.3 - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) turbo: 2.4.4 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2)): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2)): dependencies: - eslint: 9.23.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) eslint-scope@8.3.0: dependencies: @@ -7280,6 +7627,48 @@ snapshots: eslint-visitor-keys@4.2.0: {} + eslint@9.22.0(jiti@2.4.2): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/config-helpers': 0.1.0 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.0 + '@eslint/js': 9.22.0 + '@eslint/plugin-kit': 0.2.7 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.2 + transitivePeerDependencies: + - supports-color + eslint@9.23.0(jiti@2.4.2): dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.23.0(jiti@2.4.2)) @@ -7445,6 +7834,16 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + framer-motion@12.5.0(@emotion/is-prop-valid@1.2.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + motion-dom: 12.5.0 + motion-utils: 12.5.0 + tslib: 2.8.1 + optionalDependencies: + '@emotion/is-prop-valid': 1.2.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + framer-motion@12.6.3(@emotion/is-prop-valid@1.2.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: motion-dom: 12.6.3 @@ -7515,10 +7914,18 @@ snapshots: get-it: 8.6.7 registry-auth-token: 5.0.2 registry-url: 5.1.0 - semver: 7.7.1 + semver: 7.6.3 transitivePeerDependencies: - debug + get-random-values-esm@1.0.2: + dependencies: + get-random-values: 1.2.2 + + get-random-values@1.2.2: + dependencies: + global: 4.4.0 + get-stdin@9.0.0: {} get-stream@8.0.1: {} @@ -7587,6 +7994,11 @@ snapshots: dependencies: ini: 4.1.1 + global@4.4.0: + dependencies: + min-document: 2.19.0 + process: 0.11.10 + globals@11.12.0: {} globals@14.0.0: {} @@ -7691,6 +8103,8 @@ snapshots: human-signals@5.0.0: {} + humanize-list@1.0.1: {} + husky@9.1.6: {} iconv-lite@0.6.3: @@ -7699,8 +8113,7 @@ snapshots: ignore@5.3.2: {} - immer@10.1.1: - optional: true + immer@10.1.1: {} import-fresh@3.3.0: dependencies: @@ -7806,6 +8219,8 @@ snapshots: is-hexadecimal@1.0.4: {} + is-hotkey@0.2.0: {} + is-map@2.0.3: {} is-module@1.0.0: {} @@ -7821,6 +8236,8 @@ snapshots: is-plain-obj@4.1.0: {} + is-plain-object@5.0.0: {} + is-potential-custom-element-name@1.0.1: {} is-reference@1.2.1: @@ -8038,6 +8455,8 @@ snapshots: zod: 3.24.1 zod-validation-error: 3.4.0(zod@3.24.1) + leven@3.1.0: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -8198,7 +8617,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.1 + semver: 7.6.3 markdown-it@14.1.0: dependencies: @@ -8240,6 +8659,10 @@ snapshots: mimic-response@3.1.0: {} + min-document@2.19.0: + dependencies: + dom-walk: 0.1.2 + min-indent@1.0.1: {} minimatch@10.0.1: @@ -8270,10 +8693,16 @@ snapshots: mkdirp@3.0.1: {} + motion-dom@12.5.0: + dependencies: + motion-utils: 12.5.0 + motion-dom@12.6.3: dependencies: motion-utils: 12.6.3 + motion-utils@12.5.0: {} + motion-utils@12.6.3: {} ms@2.1.3: {} @@ -8531,6 +8960,8 @@ snapshots: process-nextick-args@2.0.1: {} + process@0.11.10: {} + progress-stream@2.0.0: dependencies: speedometer: 1.0.0 @@ -8572,6 +9003,10 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 + react-compiler-runtime@19.0.0-beta-3229e95-20250315(react@19.1.0): + dependencies: + react: 19.1.0 + react-compiler-runtime@19.0.0-beta-e993439-20250328(react@19.1.0): dependencies: react: 19.1.0 @@ -8830,12 +9265,18 @@ snapshots: scheduler@0.26.0: {} + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 + semver@6.3.1: {} semver@7.5.4: dependencies: lru-cache: 6.0.0 + semver@7.6.3: {} + semver@7.7.1: {} serialize-javascript@6.0.2: @@ -8908,6 +9349,37 @@ snapshots: slash@4.0.0: {} + slate-dom@0.112.2(slate@0.112.0): + dependencies: + '@juggle/resize-observer': 3.4.0 + direction: 1.0.4 + is-hotkey: 0.2.0 + is-plain-object: 5.0.0 + lodash: 4.17.21 + scroll-into-view-if-needed: 3.1.0 + slate: 0.112.0 + tiny-invariant: 1.3.1 + + slate-react@0.112.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(slate-dom@0.112.2(slate@0.112.0))(slate@0.112.0): + dependencies: + '@juggle/resize-observer': 3.4.0 + direction: 1.0.4 + is-hotkey: 0.2.0 + is-plain-object: 5.0.0 + lodash: 4.17.21 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + scroll-into-view-if-needed: 3.1.0 + slate: 0.112.0 + slate-dom: 0.112.2(slate@0.112.0) + tiny-invariant: 1.3.1 + + slate@0.112.0: + dependencies: + immer: 10.1.1 + is-plain-object: 5.0.0 + tiny-warning: 1.0.3 + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 @@ -8932,7 +9404,7 @@ snapshots: git-hooks-list: 3.1.0 globby: 13.2.2 is-plain-obj: 4.1.0 - semver: 7.7.1 + semver: 7.6.3 sort-object-keys: 1.1.3 source-map-js@1.2.1: {} @@ -9109,8 +9581,12 @@ snapshots: through@2.3.8: {} + tiny-invariant@1.3.1: {} + tiny-invariant@1.3.3: {} + tiny-warning@1.0.3: {} + tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -9247,12 +9723,12 @@ snapshots: typescript: 5.8.2 yaml: 2.7.0 - typescript-eslint@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2): + typescript-eslint@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) - '@typescript-eslint/parser': 8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) - '@typescript-eslint/utils': 8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) - eslint: 9.23.0(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + eslint: 9.22.0(jiti@2.4.2) typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -9322,10 +9798,15 @@ snapshots: dependencies: react: 19.1.0 + use-isomorphic-layout-effect@1.2.0(@types/react@19.1.0)(react@19.1.0): + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.0 + use-sync-external-store@1.2.2(react@19.1.0): dependencies: react: 19.1.0 - optional: true user-home@2.0.0: dependencies: