sanity 4.4.0-next.25 → 4.4.0-next.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_chunks-cjs/PresentationToolGrantsCheck.js +6 -13
- package/lib/_chunks-cjs/PresentationToolGrantsCheck.js.map +1 -1
- package/lib/_chunks-cjs/pane.js +4 -1
- package/lib/_chunks-cjs/pane.js.map +1 -1
- package/lib/_chunks-cjs/version.js +1 -1
- package/lib/_chunks-es/PresentationToolGrantsCheck.mjs +6 -13
- package/lib/_chunks-es/PresentationToolGrantsCheck.mjs.map +1 -1
- package/lib/_chunks-es/pane.mjs +4 -1
- package/lib/_chunks-es/pane.mjs.map +1 -1
- package/lib/_chunks-es/version.mjs +1 -1
- package/package.json +15 -15
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PresentationToolGrantsCheck.mjs","sources":["../../src/presentation/features/PostMessageFeatures.tsx","../../src/presentation/machines/presentation-machine.ts","../../src/presentation/overlays/SharedStateProvider.tsx","../../src/presentation/panels/Panel.tsx","../../src/presentation/util/debounce.ts","../../src/presentation/panels/usePanelsStorage.ts","../../src/presentation/panels/util.ts","../../src/presentation/panels/Panels.tsx","../../src/presentation/components/ErrorCard.tsx","../../src/presentation/paneRouter/ChildLink.tsx","../../src/presentation/paneRouter/ReferenceChildLink.tsx","../../src/presentation/paneRouter/PresentationPaneRouterProvider.tsx","../../src/presentation/editor/DocumentListPane.tsx","../../src/presentation/editor/DocumentPane.tsx","../../src/presentation/editor/DocumentPanel.tsx","../../src/presentation/editor/usePreviewState.ts","../../src/presentation/editor/ContentEditor.tsx","../../src/presentation/panels/usePanelId.ts","../../src/presentation/panels/PanelResizer.tsx","../../src/presentation/PresentationContent.tsx","../../src/presentation/PresentationNavigateProvider.tsx","../../src/presentation/useLocalState.ts","../../src/presentation/PresentationNavigator.tsx","../../src/presentation/PresentationParamsProvider.tsx","../../src/presentation/PresentationProvider.tsx","../../src/presentation/useAllowPatterns.ts","../../src/presentation/util/encodeStudioPerspective.ts","../../src/presentation/useId.ts","../../src/presentation/preview/IFrame.tsx","../../src/presentation/preview/OpenPreviewButton.tsx","../../src/presentation/useTargetOrigin.ts","../../src/presentation/preview/PreviewLocationInput.tsx","../../src/presentation/preview/SharePreviewMenu.tsx","../../src/presentation/preview/PreviewHeader.tsx","../../src/presentation/preview/Preview.tsx","../../src/presentation/util/warnOnce.ts","../../src/presentation/useDocumentsOnPage.ts","../../src/presentation/useMainDocument.ts","../../src/presentation/util/parse.ts","../../src/presentation/useParams.ts","../../src/presentation/usePopups.ts","../../src/presentation/usePresentationPerspective.ts","../../src/presentation/useStatus.ts","../../src/presentation/PresentationTool.tsx","../../src/presentation/actors/create-preview-secret.ts","../../src/presentation/actors/read-shared-secret.ts","../../src/presentation/actors/resolve-allow-patterns.ts","../../src/presentation/actors/resolve-initial-url.ts","../../src/presentation/actors/resolve-preview-mode.ts","../../src/presentation/actors/resolve-preview-mode-url.ts","../../src/presentation/actors/resolve-url-from-preview-search-param.ts","../../src/presentation/machines/preview-url.ts","../../src/presentation/usePreviewUrlActorRef.ts","../../src/presentation/useReportInvalidPreviewSearchParam.tsx","../../src/presentation/useVercelBypassSecret.ts","../../src/presentation/PresentationToolGrantsCheck.tsx"],"sourcesContent":["import {type FC, memo, useEffect} from 'react'\n\nimport {type VisualEditingConnection} from '../types'\n\nexport interface PostMessagePreviewsProps {\n comlink: VisualEditingConnection\n}\n\nconst PostMessageFeatures: FC<PostMessagePreviewsProps> = (props) => {\n const {comlink} = props\n\n useEffect(() => {\n return comlink.on('visual-editing/features', () => ({\n features: {\n optimistic: true,\n },\n }))\n }, [comlink])\n\n return null\n}\n\nexport default memo(PostMessageFeatures)\n","import {type ActorRefFrom, assign, setup} from 'xstate'\n\ninterface Context {\n url: URL | null\n error: Error | null\n visualEditingOverlaysEnabled: boolean\n}\n\ntype Event =\n | {type: 'toggle visual editing overlays'; enabled: boolean}\n | {type: 'iframe loaded'}\n | {type: 'iframe refresh'}\n | {type: 'iframe reload'}\n\nexport const presentationMachine = setup({\n types: {} as {\n context: Context\n events: Event\n tags: 'busy' | 'error'\n },\n actions: {\n //\n },\n actors: {\n //\n },\n guards: {\n //\n },\n}).createMachine({\n // eslint-disable-next-line tsdoc/syntax\n /** @xstate-layout N4IgpgJg5mDOIC5QAUBOcwDsAuBDbAlgPaYAEAKkUQDYDEBAZqrgLZinrVG4QDaADAF1EoAA5FYBQiREgAHogAsAJgA0IAJ6IAHAEYAdIoCcJowFY9R-vzPLlAX3vq0GHPmJlKNfVx4FMUPRMrOy+EJACwkgg4pLSmLIKCLoAbIr6Zoop2tqKAMxpJnnF6loIZkbK+uZ5umapKXmK-Cm6js7osFh48RRU1D7c4RC02ERQUNTsAG4EsACuuNSkkFL+UKRE02Co1LgasJGysWsy0UnaZinVyrpGAOx1Rim2efeliPe3hma1Zvy6XT8W4OJwgFxdNy9LwDMKQILMNgcMBMOAACyO0RO8USiAK930LWU-3uiiB9yaKXemkQjW01V+txS-GKqUe7XBnW67hIfW8cJGjER7E4Q0xYgkpwS5zxVMJKWJ-FJ5Mp1LKFn4Pz+DSaLTaYIh3Oh-UGPEg+nQqNgaPWCJCpAF4pikpxMoQKWZ+gp+TSZLy1hSH3deXpNSZLNqVP1HVcPQ8fNhQ3Nor8ATtSMdQmOLo8uPdnu9BUUfoDQY1WrqOuarUcYMwRHC8Gihqh8Zh2biubdAFpAzSEL2OS247yYfodqgiKgO1K8yog7ptATFL9dFljMDrHkh1zW6OTWF1jPXaAkmY1YgKnktfxtC9dPd+Io9DvYzzPAekxBj13T3i7vKirKkqqpBsYVQ1HUFjFs0t6KK+kIjh+-JfvoBAQFMP5nH+CDaMo16KjYyjMvUNh5GWOT6MoLL8A8ygrk0dQIUabafmaEAWiinQ2gEWHSjhjJUYuj73Pcd63noQaNEYFb-Dk2S0cxe7IYm7GcYevFYjm2HyJeeQQb8tFkikVjGNoFGajUt73o+z61vYQA */\n id: 'Presentation Tool',\n context: {\n url: null,\n error: null,\n visualEditingOverlaysEnabled: false,\n },\n\n on: {\n 'iframe reload': {\n actions: assign({url: null}),\n target: '.loading',\n },\n },\n\n states: {\n error: {\n description:\n 'Failed to load, either because of a misconfiguration, a network error, or an unexpected error',\n tags: ['error'],\n },\n loading: {\n on: {\n 'iframe loaded': {\n target: 'loaded',\n },\n },\n tags: ['busy'],\n },\n loaded: {\n on: {\n 'toggle visual editing overlays': {\n actions: assign({\n visualEditingOverlaysEnabled: ({event}) => event.enabled,\n }),\n },\n 'iframe refresh': {\n target: '.refreshing',\n },\n 'iframe reload': {\n target: '.reloading',\n },\n },\n\n states: {\n idle: {},\n refreshing: {\n on: {\n 'iframe loaded': {\n target: 'idle',\n },\n },\n tags: ['busy'],\n },\n reloading: {\n on: {\n 'iframe loaded': {\n target: 'idle',\n },\n },\n tags: ['busy'],\n },\n },\n initial: 'idle',\n },\n },\n initial: 'loading',\n})\n\nexport type PresentationMachineRef = ActorRefFrom<typeof presentationMachine>\n","import {type Serializable, type SerializableObject} from '@sanity/presentation-comlink'\nimport {\n type FunctionComponent,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react'\nimport {PresentationSharedStateContext} from 'sanity/_singletons'\n\nimport {type VisualEditingConnection} from '../types'\nimport {type PresentationSharedStateContextValue} from './types'\n\nexport const SharedStateProvider: FunctionComponent<\n PropsWithChildren<{\n comlink: VisualEditingConnection | null\n }>\n> = function (props) {\n const {comlink, children} = props\n\n const sharedState = useRef<SerializableObject>({})\n\n useEffect(() => {\n return comlink?.on('visual-editing/shared-state', () => {\n return {state: sharedState.current}\n })\n }, [comlink])\n\n const setValue = useCallback(\n (key: string, value: Serializable) => {\n sharedState.current[key] = value\n comlink?.post('presentation/shared-state', {key, value})\n },\n [comlink],\n )\n\n const removeValue = useCallback(\n (key: string) => {\n comlink?.post('presentation/shared-state', {key})\n delete sharedState.current[key]\n },\n [comlink],\n )\n\n const context = useMemo<PresentationSharedStateContextValue>(\n () => ({removeValue, setValue}),\n [removeValue, setValue],\n )\n\n return (\n <PresentationSharedStateContext.Provider value={context}>\n {children}\n </PresentationSharedStateContext.Provider>\n )\n}\n","import {type FunctionComponent, type PropsWithChildren, useContext, useLayoutEffect} from 'react'\nimport {PresentationPanelsContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\ninterface PanelProps extends PropsWithChildren {\n defaultSize?: number | null\n id: string\n minWidth?: number\n maxWidth?: number\n order?: number\n}\n\nconst Root = styled.div`\n overflow: hidden;\n flex-basis: 0;\n flex-shrink: 1;\n`\n\nexport const Panel: FunctionComponent<PanelProps> = function ({\n children,\n defaultSize = null,\n id,\n minWidth,\n maxWidth,\n order = 0,\n}) {\n const context = useContext(PresentationPanelsContext)\n\n if (context === null) {\n throw Error(`Panel components must be rendered within a PanelGroup container`)\n }\n\n const {getPanelStyle, registerElement, unregisterElement} = context\n\n const style = getPanelStyle(id)\n\n useLayoutEffect(() => {\n registerElement(id, {\n id,\n type: 'panel',\n defaultSize,\n maxWidth: maxWidth ?? null,\n minWidth: minWidth ?? 0,\n order,\n })\n\n return () => {\n unregisterElement(id)\n }\n }, [id, defaultSize, order, maxWidth, minWidth, registerElement, unregisterElement])\n\n return <Root style={style}>{children}</Root>\n}\n","export function debounce<F extends (...args: Parameters<F>) => ReturnType<F>>(\n fn: F,\n timeout: number,\n): F {\n let timer: ReturnType<typeof setTimeout>\n return ((...args: Parameters<F>) => {\n clearTimeout(timer)\n timer = setTimeout(() => {\n fn.apply(fn, args)\n }, timeout)\n }) as F\n}\n","import {useMemo} from 'react'\n\nimport {debounce} from '../util/debounce'\nimport {type PanelElement} from './types'\n\nconst itemKey = 'presentation/panels'\n\ntype StoredPanelsState = Record<string, number[]>\n\nconst getStoredItem = () => {\n // @todo Validate\n return JSON.parse(localStorage.getItem(itemKey) || '{}') as StoredPanelsState\n}\nconst setStoredItem = (data: StoredPanelsState) => {\n localStorage.setItem(itemKey, JSON.stringify(data))\n}\n\nconst getKeyForPanels = (panels: PanelElement[]) => {\n return panels.map((panel) => [panel.id, panel.order].join(':')).join(',')\n}\n\nexport function usePanelsStorage(): {\n get: (panels: PanelElement[]) => number[] | undefined\n set: (panels: PanelElement[], widths: number[]) => void\n setDebounced: (panels: PanelElement[], widths: number[]) => void\n} {\n return useMemo(() => {\n const get = (panels: PanelElement[]) => {\n const stored = getStoredItem()\n const key = getKeyForPanels(panels)\n return Array.isArray(stored[key]) && stored[key].some((val) => val === null)\n ? undefined\n : stored[key]\n }\n\n const set = (panels: PanelElement[], widths: number[]) => {\n const stored = getStoredItem()\n const key = getKeyForPanels(panels)\n const data = {\n ...stored,\n [key]: widths,\n }\n setStoredItem(data)\n }\n\n const setDebounced = debounce(set, 100)\n return {\n get,\n set,\n setDebounced,\n }\n }, [])\n}\n","/* eslint-disable @typescript-eslint/no-shadow,no-eq-null */\nimport {\n type ElementMap,\n type InitialDragState,\n type PanelElement,\n type PanelsState,\n type ResizerElement,\n} from './types'\n\nfunction getNextWidth(panel: PanelElement, nextWidth: number, containerWidth: number) {\n const {maxWidth: maxWidthPx, minWidth: minWidthPx} = panel\n const maxWidth = maxWidthPx == null ? 100 : (maxWidthPx / containerWidth) * 100\n const minWidth = (minWidthPx / containerWidth) * 100\n return Math.min(maxWidth, Math.max(minWidth, nextWidth))\n}\n\n// eslint-disable-next-line max-params\nexport function getNextWidths(\n delta: number,\n containerWidth: number,\n panelBefore: PanelElement,\n panelAfter: PanelElement,\n panelsState: PanelsState,\n initialDragState: InitialDragState,\n): number[] {\n const {panels, widths: prevWidths} = panelsState\n const {widths: initialWidths} = initialDragState\n\n const widths = initialWidths || prevWidths\n const nextWidths = [...widths]\n\n {\n const pivotPanel = delta < 0 ? panelAfter : panelBefore\n const index = panels.findIndex((panel) => panel.id === pivotPanel.id)\n const width = widths[index]\n const nextWidth = getNextWidth(pivotPanel, width + Math.abs(delta), containerWidth)\n if (width === nextWidth) {\n return widths\n }\n delta = delta < 0 ? width - nextWidth : nextWidth - width\n }\n\n let deltaApplied = 0\n let pivotPanel = delta < 0 ? panelBefore : panelAfter\n let index = panels.findIndex((panel) => panel.id === pivotPanel.id)\n\n while (true) {\n const panel = panels[index]\n const width = widths[index]\n\n const deltaRemaining = Math.abs(delta) - Math.abs(deltaApplied)\n\n const nextWidth = getNextWidth(panel, width - deltaRemaining, containerWidth)\n\n if (width !== nextWidth) {\n deltaApplied += width - nextWidth\n nextWidths[index] = nextWidth\n\n if (\n deltaApplied.toPrecision(10).localeCompare(Math.abs(delta).toPrecision(10), undefined, {\n numeric: true,\n }) >= 0\n ) {\n break\n }\n }\n\n if (delta < 0) {\n if (--index < 0) {\n break\n }\n } else if (++index >= panels.length) {\n break\n }\n }\n\n if (deltaApplied === 0) {\n return widths\n }\n\n pivotPanel = delta < 0 ? panelAfter : panelBefore\n index = panels.findIndex((panel) => panel.id === pivotPanel.id)\n nextWidths[index] = widths[index] + deltaApplied\n\n return nextWidths\n}\n\nexport function getPanelWidth(panels: PanelElement[], id: string, widths: number[]): string {\n if (panels.length === 1) return '100'\n\n const index = panels.findIndex((panel) => panel.id === id)\n const width = widths[index]\n\n if (width == null) return '0'\n\n return width.toPrecision(10)\n}\n\nexport function getOffset(\n event: MouseEvent,\n handleElement: HTMLDivElement,\n initialOffset: number = 0,\n initialHandleElementRect: DOMRect | null = null,\n): number {\n const pointerOffset = event.clientX\n\n const rect = initialHandleElementRect || handleElement.getBoundingClientRect()\n const elementOffset = rect.left\n\n return pointerOffset - elementOffset - initialOffset\n}\n\nexport function isPanel(element: PanelElement | ResizerElement): element is PanelElement {\n return element.type === 'panel'\n}\n\nexport function isResizer(element: PanelElement | ResizerElement): element is ResizerElement {\n return element.type === 'resizer'\n}\n\nexport function getSortedElements(elements: ElementMap): Array<PanelElement | ResizerElement> {\n return Array.from(elements.values()).sort(({order: a}, {order: b}) => {\n if (a == null && b == null) return 0\n if (a == null) return -1\n if (b == null) return 1\n return a - b\n })\n}\n\nexport function validateWidths(\n panels: PanelElement[],\n widthsToValidate: number[],\n containerWidth: number,\n): number[] {\n // Clamp widths proportionally to total 100\n const total = widthsToValidate.reduce((total, width) => total + width, 0)\n const widths = [...widthsToValidate].map((width) => (width / total) * 100)\n\n let remainingWidth = 0\n\n for (let index = 0; index < panels.length; index++) {\n const panel = panels[index]\n const width = widths[index]\n const nextWidth = getNextWidth(panel, width, containerWidth)\n if (width != nextWidth) {\n remainingWidth += width - nextWidth\n widths[index] = nextWidth\n }\n }\n\n if (remainingWidth.toFixed(3) !== '0.000') {\n for (let index = 0; index < panels.length; index++) {\n const panel = panels[index]\n\n let {maxWidth, minWidth} = panel\n\n minWidth = (minWidth / containerWidth) * 100\n if (maxWidth != null) {\n maxWidth = (maxWidth / containerWidth) * 100\n }\n\n const width = Math.min(\n // eslint-disable-next-line no-negated-condition\n maxWidth != null ? maxWidth : 100,\n Math.max(minWidth, widths[index] + remainingWidth),\n )\n\n if (width !== widths[index]) {\n remainingWidth -= width - widths[index]\n widths[index] = width\n\n if (Math.abs(remainingWidth).toFixed(3) === '0.000') {\n break\n }\n }\n }\n }\n\n return widths\n}\n\nexport function getDefaultWidths(panels: PanelElement[]): number[] {\n let panelsWithoutWidth = panels.length\n let remainingWidthTotal = 100\n\n const widthsWithNulls = panels.map((panel) => {\n if (panel.defaultSize) {\n remainingWidthTotal -= panel.defaultSize\n panelsWithoutWidth -= 1\n return panel.defaultSize\n }\n return null\n })\n\n const defaultWidth = remainingWidthTotal / panelsWithoutWidth\n const widths = widthsWithNulls.map((width) => {\n if (width === null) return defaultWidth\n return width\n })\n\n return widths\n}\n","// Slightly modified version of react-resizable-panels\n// https://github.com/bvaughn/react-resizable-panels/tree/main/packages/react-resizable-panels\n\nimport {\n type CSSProperties,\n type FunctionComponent,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {PresentationPanelsContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\nimport {\n type ElementMap,\n type InitialDragState,\n type PanelElement,\n type PanelsState,\n type ResizerElement,\n} from './types'\nimport {usePanelsStorage} from './usePanelsStorage'\nimport {\n getDefaultWidths,\n getNextWidths,\n getOffset,\n getPanelWidth,\n getSortedElements,\n isPanel,\n isResizer,\n validateWidths,\n} from './util'\n\nconst PanelsWrapper = styled.div`\n display: flex;\n flex-direction: row;\n height: 100%;\n overflow: hidden;\n width: 100%;\n`\n\nexport const Panels: FunctionComponent<PropsWithChildren> = function ({children}) {\n const panelsEl = useRef<HTMLDivElement | null>(null)\n\n const [elements, setElements] = useState<ElementMap>(new Map())\n\n const panels = useMemo(() => getSortedElements(elements).filter(isPanel), [elements])\n\n const [widths, setWidths] = useState<number[]>([])\n const [activeResizer, setActiveResizer] = useState<string | null>(null)\n\n const panelsRef = useRef<PanelsState>({\n elements,\n panels,\n widths,\n })\n\n const getPanelStyle = useCallback(\n (id: string): CSSProperties => {\n return {\n flexGrow: getPanelWidth(panels, id, widths),\n pointerEvents: activeResizer === null ? undefined : 'none',\n }\n },\n [activeResizer, panels, widths],\n )\n\n const registerElement = useCallback((id: string, data: PanelElement | ResizerElement) => {\n setElements((prev) => {\n if (prev.has(id)) return prev\n const next = new Map(prev)\n next.set(id, data)\n return next\n })\n }, [])\n const unregisterElement = useCallback((id: string) => {\n setElements((prev) => {\n if (!prev.has(id)) return prev\n const next = new Map(prev)\n next.delete(id)\n return next\n })\n }, [])\n\n const dragRef = useRef<InitialDragState>({\n containerWidth: window.innerWidth,\n dragOffset: 0,\n panelAfter: null,\n panelBefore: null,\n resizerIndex: -1,\n resizerRect: null,\n startX: 0,\n widths: [],\n })\n\n const startDragging = useCallback(\n (id: string, event: MouseEvent) => {\n const elementsArr = getSortedElements(elements)\n const index = elementsArr.findIndex((el) => el.id === id)\n\n const resizer = elements.get(id)\n if (!resizer || !isResizer(resizer)) return\n const resizeElement = resizer.el.current\n if (!resizeElement) return\n\n dragRef.current = {\n resizerIndex: index,\n panelBefore: elementsArr.reduce(\n (acc, el, i) => (isPanel(el) && i < index ? el : acc),\n null as PanelElement | null,\n ),\n panelAfter: elementsArr.reduce(\n (acc, el, i) => (acc === null && isPanel(el) && i > index ? el : acc),\n null as PanelElement | null,\n ),\n containerWidth: window.innerWidth,\n startX: event.pageX,\n dragOffset: getOffset(event, resizeElement),\n resizerRect: resizeElement.getBoundingClientRect(),\n widths: panelsRef.current.widths,\n }\n\n setActiveResizer(id)\n },\n [elements],\n )\n\n const stopDragging = useCallback(() => {\n setActiveResizer(null)\n }, [])\n\n const drag = useCallback(\n (id: string, event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n const {containerWidth, dragOffset, panelBefore, panelAfter, resizerRect} = dragRef.current\n\n // eslint-disable-next-line no-eq-null\n if (panelBefore == null || panelAfter == null) {\n return\n }\n\n const resizer = elements.get(id)\n if (!resizer || !isResizer(resizer)) return\n const resizeElement = resizer.el.current\n if (!resizeElement) return\n\n const offset = getOffset(event, resizeElement, dragOffset, resizerRect)\n\n if (offset === 0) {\n return\n }\n\n const {widths: prevWidths} = panelsRef.current\n const rect = panelsEl.current!.getBoundingClientRect()\n const delta = (offset / rect.width) * 100\n\n const nextWidths = getNextWidths(\n delta,\n containerWidth,\n panelBefore,\n panelAfter,\n panelsRef.current,\n dragRef.current,\n )\n\n const widthsChanged = prevWidths.some((prevWidth, i) => prevWidth !== nextWidths[i])\n\n if (widthsChanged) {\n setWidths(nextWidths)\n }\n },\n [elements],\n )\n\n // For setting the panels state\n useLayoutEffect(() => {\n panelsRef.current.elements = elements\n panelsRef.current.panels = panels\n panelsRef.current.widths = widths\n }, [elements, panels, widths])\n\n const storage = usePanelsStorage()\n\n // For setting default sizing when panels are updated\n useLayoutEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {widths} = panelsRef.current\n\n if (widths.length === panels.length) {\n return\n }\n\n const storedWidths = storage.get(panels)\n\n if (storedWidths) {\n const validatedStoredWidths = validateWidths(panels, storedWidths, window.innerWidth)\n setWidths(validatedStoredWidths)\n return\n }\n\n const defaultWidths = getDefaultWidths(panels)\n setWidths(defaultWidths)\n }, [storage, panels])\n\n // For storing current widths in localStorage\n useEffect(() => {\n if (!widths.length) return\n storage.setDebounced(panels, widths)\n }, [storage, panels, widths])\n\n useLayoutEffect(() => {\n const resizeObserver = new ResizeObserver(() => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {panels, widths: prevWidths} = panelsRef.current\n\n const nextWidths = validateWidths(panels, prevWidths, window.innerWidth)\n\n const widthsChanged = prevWidths.some((prevWidth, i) => prevWidth !== nextWidths[i])\n if (widthsChanged) {\n setWidths(nextWidths)\n }\n })\n\n resizeObserver.observe(panelsEl.current!)\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [])\n\n const context = useMemo(\n () => ({\n activeResizer,\n drag,\n getPanelStyle,\n registerElement,\n startDragging,\n stopDragging,\n unregisterElement,\n }),\n [\n activeResizer,\n drag,\n getPanelStyle,\n registerElement,\n startDragging,\n stopDragging,\n unregisterElement,\n ],\n )\n\n return (\n <PresentationPanelsContext.Provider value={context}>\n <PanelsWrapper ref={panelsEl}>{children}</PanelsWrapper>\n </PresentationPanelsContext.Provider>\n )\n}\n","import {Box, Card, type CardProps, Container, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\n\nexport function ErrorCard(\n props: {\n children?: ReactNode\n message: string\n onRetry?: () => void\n onContinueAnyway?: () => void\n } & CardProps,\n): React.JSX.Element {\n const {children, message, onRetry, onContinueAnyway, ...restProps} = props\n\n const {t} = useTranslation(presentationLocaleNamespace)\n\n const retryButton = (\n <Button mode=\"ghost\" onClick={onRetry} text={t('error-card.retry-button.text')} />\n )\n const continueAnywayButton = (\n <Button\n mode=\"ghost\"\n tone=\"critical\"\n onClick={onContinueAnyway}\n text={t('error-card.continue-button.text')}\n />\n )\n\n return (\n <Card height=\"fill\" {...restProps}>\n <Flex align=\"center\" height=\"fill\" justify=\"center\">\n <Container padding={4} sizing=\"border\" width={0}>\n <Stack space={4}>\n <Stack space={3}>\n <Text size={1} weight=\"semibold\">\n {t('error-card.title')}\n </Text>\n <Text muted size={1}>\n {message}\n </Text>\n </Stack>\n\n {children}\n\n {onRetry && onContinueAnyway ? (\n <Inline space={2}>\n {retryButton}\n {continueAnywayButton}\n </Inline>\n ) : onRetry ? (\n <Box>{retryButton}</Box>\n ) : onContinueAnyway ? (\n <Box>{continueAnywayButton}</Box>\n ) : null}\n </Stack>\n </Container>\n </Flex>\n </Card>\n )\n}\n","import {forwardRef} from 'react'\nimport {StateLink} from 'sanity/router'\nimport {type ChildLinkProps} from 'sanity/structure'\n\nimport {type PresentationSearchParams} from '../types'\n\nexport const ChildLink = forwardRef(function ChildLink(\n props: ChildLinkProps & {\n childType: string\n searchParams: PresentationSearchParams\n },\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n const {childId, childType, childPayload, childParameters, searchParams, ...rest} = props\n\n return (\n <StateLink\n {...rest}\n ref={ref}\n state={{\n id: childId,\n type: childType,\n _searchParams: Object.entries({...searchParams, ...childParameters}),\n }}\n />\n )\n})\n","import {forwardRef} from 'react'\nimport {pathToString} from 'sanity'\nimport {type ReferenceChildLinkProps} from 'sanity/structure'\n\nimport {type PresentationSearchParams} from '../types'\nimport {ChildLink} from './ChildLink'\n\nexport const ReferenceChildLink = forwardRef(function ReferenceChildLink(\n props: ReferenceChildLinkProps & {searchParams: PresentationSearchParams},\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n const {documentId, documentType, parentRefPath, template, searchParams, ...rest} = props\n\n return (\n <ChildLink\n {...rest}\n ref={ref}\n childId={documentId}\n childType={documentType}\n childPayload={template?.params}\n childParameters={{\n parentRefPath: pathToString(parentRefPath),\n ...(template && {template: template?.id}),\n }}\n searchParams={searchParams}\n />\n )\n})\n","import {toString as pathToString} from '@sanity/util/paths'\nimport {forwardRef, type PropsWithChildren, useCallback, useMemo} from 'react'\nimport {getPublishedId, useUnique} from 'sanity'\nimport {StateLink, useRouter} from 'sanity/router'\nimport {\n type BackLinkProps,\n type ChildLinkProps,\n PaneRouterContext,\n type PaneRouterContextValue,\n type ReferenceChildLinkProps,\n} from 'sanity/structure'\n\nimport {\n type PresentationNavigate,\n type PresentationParamsContextValue,\n type PresentationSearchParams,\n type StructureDocumentPaneParams,\n} from '../types'\nimport {ChildLink} from './ChildLink'\nimport {ReferenceChildLink} from './ReferenceChildLink'\n\nfunction encodeQueryString(params: Record<string, unknown> = {}): string {\n const parts = Object.entries(params)\n .map(([key, value]) => `${key}=${value}`)\n .join('&')\n\n return parts.length ? `?${parts}` : ''\n}\n\nfunction resolveQueryStringFromParams(nextParams: Record<string, string | undefined>) {\n const allowed = [\n 'comment',\n 'inspect',\n 'instruction',\n 'pathKey',\n 'rev',\n 'since',\n 'template',\n 'view',\n ] satisfies Array<keyof PresentationParamsContextValue> as string[]\n\n const safeNextParams = Object.entries(nextParams)\n .filter(([key]) => allowed.includes(key))\n .reduce((obj, [key, value]) => {\n if (value == undefined) return obj\n return {...obj, [key]: value}\n }, {})\n\n return encodeQueryString(safeNextParams)\n}\n\nconst BackLink = forwardRef(function BackLink(\n props: BackLinkProps & {searchParams: PresentationSearchParams},\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n const {searchParams, ...restProps} = props\n return (\n <StateLink\n {...restProps}\n ref={ref}\n state={{\n type: undefined,\n _searchParams: Object.entries(searchParams),\n }}\n title={undefined}\n />\n )\n})\n\nexport type PresentationPaneRouterProviderProps = PropsWithChildren<{\n onEditReference: PresentationNavigate\n onStructureParams: (params: StructureDocumentPaneParams) => void\n refs?: {_id: string; _type: string}[]\n searchParams: PresentationSearchParams\n structureParams: StructureDocumentPaneParams\n}>\n\nexport function PresentationPaneRouterProvider(\n props: PresentationPaneRouterProviderProps,\n): React.JSX.Element {\n const {children, onEditReference, onStructureParams, structureParams, searchParams, refs} = props\n\n const {state: routerState, resolvePathFromState} = useRouter()\n\n const routerSearchParams = useUnique(Object.fromEntries(routerState._searchParams || []))\n\n const createPathWithParams: PaneRouterContextValue['createPathWithParams'] = useCallback(\n (nextParams) => {\n const path = resolvePathFromState(routerState)\n const qs = resolveQueryStringFromParams({\n ...routerSearchParams,\n ...nextParams,\n })\n return `${path}${qs}`\n },\n [resolvePathFromState, routerSearchParams, routerState],\n )\n\n const context: PaneRouterContextValue = useMemo(() => {\n return {\n index: 0,\n groupIndex: 0,\n siblingIndex: 0,\n payload: {},\n // oxlint-disable-next-line no-explicit-any\n params: structureParams as any,\n hasGroupSiblings: false,\n groupLength: 1,\n routerPanesState: [],\n ChildLink: forwardRef<HTMLAnchorElement, ChildLinkProps>(\n function ContextChildLink(childLinkProps, ref) {\n const {childId, ...rest} = childLinkProps\n const doc = refs?.find((r) => r._id === childId || getPublishedId(r._id) === childId)\n\n if (!doc) {\n console.warn(`ChildLink: No document found for childId \"${childId}\"`)\n return null\n }\n\n return (\n <ChildLink\n {...rest}\n ref={ref}\n childId={childId}\n childType={doc._type}\n searchParams={searchParams}\n />\n )\n },\n ),\n BackLink: forwardRef<HTMLAnchorElement, BackLinkProps>(\n function ContextBackLink(backLinkProps, ref) {\n return <BackLink {...backLinkProps} ref={ref} searchParams={searchParams} />\n },\n ),\n ReferenceChildLink: forwardRef<HTMLAnchorElement, ReferenceChildLinkProps>(\n function ContextReferenceChildLink(childLinkProps, ref) {\n return <ReferenceChildLink {...childLinkProps} ref={ref} searchParams={searchParams} />\n },\n ),\n ParameterizedLink: () => {\n throw new Error('ParameterizedLink not implemented')\n },\n closeCurrentAndAfter: () => {\n console.warn('closeCurrentAndAfter')\n },\n handleEditReference: (options) => {\n const {id, template, type, parentRefPath, version} = options\n onEditReference({\n state: {id, type},\n params: {\n template: template.id,\n parentRefPath: pathToString(parentRefPath),\n version,\n },\n })\n },\n replaceCurrent: (pane) => {\n console.warn('replaceCurrent', pane)\n },\n closeCurrent: () => {\n console.warn('closeCurrent')\n },\n duplicateCurrent: (pane) => {\n console.warn('duplicateCurrent', pane)\n },\n setView: (viewId) => {\n console.warn('setView', viewId)\n },\n setParams: (nextParams) => {\n // @todo set inspect param to undefined manually as param is missing from object when closing inspector\n onStructureParams({\n ...nextParams,\n inspect: nextParams.inspect ?? undefined,\n } as StructureDocumentPaneParams)\n },\n setPayload: (payload) => {\n console.warn('setPayload', payload)\n },\n navigateIntent: (intentName, intentParams, options) => {\n console.warn('navigateIntent', intentName, intentParams, options)\n },\n createPathWithParams,\n }\n }, [\n createPathWithParams,\n onEditReference,\n onStructureParams,\n refs,\n searchParams,\n structureParams,\n ])\n\n return <PaneRouterContext.Provider value={context}>{children}</PaneRouterContext.Provider>\n}\n","import {Card, Code, Flex, Label, Stack} from '@sanity/ui'\nimport {type ErrorInfo, useCallback, useEffect, useMemo, useState} from 'react'\nimport {getPublishedId, useTranslation} from 'sanity'\nimport {\n DocumentListPane as StructureDocumentListPane,\n PaneLayout,\n type PaneNode,\n StructureToolProvider,\n} from 'sanity/structure'\nimport {styled} from 'styled-components'\n\nimport {ErrorBoundary} from '../../ui-components'\nimport {ErrorCard} from '../components/ErrorCard'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {PresentationPaneRouterProvider} from '../paneRouter/PresentationPaneRouterProvider'\nimport {\n type MainDocumentState,\n type PresentationNavigate,\n type PresentationSearchParams,\n type StructureDocumentPaneParams,\n} from '../types'\nimport {usePresentationTool} from '../usePresentationTool'\n\nconst RootLayout = styled(PaneLayout)`\n height: 100%;\n`\n\nconst Root = styled(Flex)`\n & > div {\n min-width: none !important;\n max-width: none !important;\n }\n`\n\nconst WrappedCode = styled(Code)`\n white-space: pre-wrap;\n`\n\nexport function DocumentListPane(props: {\n mainDocumentState?: MainDocumentState\n onEditReference: PresentationNavigate\n onStructureParams: (params: StructureDocumentPaneParams) => void\n searchParams: PresentationSearchParams\n refs: {_id: string; _type: string}[]\n}): React.JSX.Element {\n const {mainDocumentState, onEditReference, onStructureParams, searchParams, refs} = props\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const {devMode} = usePresentationTool()\n\n const ids = useMemo(\n () =>\n refs\n .filter((r) => getPublishedId(r._id) !== mainDocumentState?.document?._id)\n .map((r) => getPublishedId(r._id)),\n [mainDocumentState, refs],\n )\n\n const pane: Extract<PaneNode, {type: 'documentList'}> = useMemo(\n () => ({\n id: '$root',\n options: {\n filter: '_id in $ids',\n params: {ids},\n // defaultOrdering: [{field: '_updatedAt', direction: 'desc'}],\n },\n schemaTypeName: '',\n title: t('document-list-pane.document-list.title'),\n type: 'documentList',\n }),\n [ids, t],\n )\n\n const [errorParams, setErrorParams] = useState<{\n info: ErrorInfo\n error: Error\n } | null>(null)\n\n const handleRetry = useCallback(() => setErrorParams(null), [])\n\n const [structureParams] = useState(() => ({}))\n\n // Reset error state when `refs` value schanges\n useEffect(() => setErrorParams(null), [refs])\n\n if (errorParams) {\n return (\n <ErrorCard flex={1} message={t('document-list-pane.error.text')} onRetry={handleRetry}>\n {devMode && (\n // show runtime error message in dev mode\n <Card overflow=\"auto\" padding={3} radius={2} tone=\"critical\">\n <Stack space={3}>\n <Label muted size={0}>\n {t('presentation-error.label')}\n </Label>\n <WrappedCode size={1}>{errorParams.error.message}</WrappedCode>\n </Stack>\n </Card>\n )}\n </ErrorCard>\n )\n }\n\n return (\n <ErrorBoundary onCatch={setErrorParams}>\n <RootLayout>\n <StructureToolProvider>\n <PresentationPaneRouterProvider\n onEditReference={onEditReference}\n onStructureParams={onStructureParams}\n structureParams={structureParams}\n searchParams={searchParams}\n refs={refs}\n >\n <Root direction=\"column\" flex={1}>\n <StructureDocumentListPane\n index={0}\n itemId=\"$root\"\n pane={pane}\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n paneKey=\"$root\"\n />\n </Root>\n </PresentationPaneRouterProvider>\n </StructureToolProvider>\n </RootLayout>\n </ErrorBoundary>\n )\n}\n","import {studioPath} from '@sanity/client/csm'\nimport {Card, Code, Label, Stack} from '@sanity/ui'\nimport {type ErrorInfo, Suspense, useCallback, useEffect, useMemo, useState} from 'react'\nimport {type Path, useTranslation} from 'sanity'\nimport {decodeJsonParams} from 'sanity/router'\nimport {\n DocumentPane as StructureDocumentPane,\n type DocumentPaneNode,\n PaneLayout,\n} from 'sanity/structure'\nimport {styled} from 'styled-components'\n\nimport {ErrorBoundary} from '../../ui-components'\nimport {ErrorCard} from '../components/ErrorCard'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {PresentationPaneRouterProvider} from '../paneRouter/PresentationPaneRouterProvider'\nimport {PresentationSpinner} from '../PresentationSpinner'\nimport {\n type PresentationNavigate,\n type PresentationSearchParams,\n type PresentationStateParams,\n type StructureDocumentPaneParams,\n} from '../types'\nimport {usePresentationTool} from '../usePresentationTool'\n\nconst WrappedCode = styled(Code)`\n white-space: pre-wrap;\n`\n\nexport function DocumentPane(props: {\n documentId: string\n documentType: string\n onFocusPath: (state: Required<PresentationStateParams>) => void\n onEditReference: PresentationNavigate\n onStructureParams: (params: StructureDocumentPaneParams) => void\n structureParams: StructureDocumentPaneParams\n searchParams: PresentationSearchParams\n}): React.JSX.Element {\n const {\n documentId,\n documentType,\n onFocusPath,\n onEditReference,\n onStructureParams,\n searchParams,\n structureParams,\n } = props\n const {template, templateParams} = structureParams\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const {devMode} = usePresentationTool()\n\n const paneDocumentNode: DocumentPaneNode = useMemo(\n () => ({\n id: documentId,\n options: {\n id: documentId,\n type: documentType,\n template,\n templateParameters: decodeJsonParams(templateParams),\n },\n title: '',\n type: 'document',\n }),\n [documentId, documentType, template, templateParams],\n )\n\n const handleFocusPath = useCallback(\n (path: Path) => {\n return onFocusPath({\n id: documentId,\n type: documentType,\n path: studioPath.toString(path),\n })\n },\n [documentId, documentType, onFocusPath],\n )\n\n const [errorParams, setErrorParams] = useState<{\n info: ErrorInfo\n error: Error\n } | null>(null)\n\n const handleRetry = useCallback(() => setErrorParams(null), [])\n\n // Reset error state when parameters change\n useEffect(() => {\n setErrorParams(null)\n }, [documentId, documentType, structureParams])\n\n if (errorParams) {\n return (\n <ErrorCard flex={1} message={t('document-pane.error.text')} onRetry={handleRetry}>\n {devMode && (\n // show runtime error message in dev mode\n <Card overflow=\"auto\" padding={3} radius={2} tone=\"critical\">\n <Stack space={3}>\n <Label muted size={0}>\n {t('presentation-error.label')}\n </Label>\n <WrappedCode size={1}>{errorParams.error.message}</WrappedCode>\n </Stack>\n </Card>\n )}\n </ErrorCard>\n )\n }\n\n return (\n <ErrorBoundary onCatch={setErrorParams}>\n <PaneLayout style={{height: '100%'}}>\n <PresentationPaneRouterProvider\n searchParams={searchParams}\n onEditReference={onEditReference}\n onStructureParams={onStructureParams}\n structureParams={structureParams}\n >\n <Suspense fallback={<PresentationSpinner />}>\n <StructureDocumentPane\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n paneKey=\"document\"\n index={1}\n itemId=\"document\"\n pane={paneDocumentNode}\n onFocusPath={handleFocusPath}\n />\n </Suspense>\n </PresentationPaneRouterProvider>\n </PaneLayout>\n </ErrorBoundary>\n )\n}\n","import {StructureToolProvider} from '../../structure/StructureToolProvider'\nimport {\n type PresentationNavigate,\n type PresentationSearchParams,\n type PresentationStateParams,\n type StructureDocumentPaneParams,\n} from '../types'\nimport {DocumentPane} from './DocumentPane'\n\nexport function DocumentPanel(props: {\n documentId: string\n documentType: string\n onEditReference: PresentationNavigate\n onFocusPath: (state: Required<PresentationStateParams>) => void\n onStructureParams: (params: StructureDocumentPaneParams) => void\n searchParams: PresentationSearchParams\n structureParams: StructureDocumentPaneParams\n}): React.JSX.Element {\n const {\n documentId,\n documentType,\n onFocusPath,\n onEditReference,\n onStructureParams,\n searchParams,\n structureParams,\n } = props\n return (\n <StructureToolProvider>\n <DocumentPane\n documentId={documentId}\n documentType={documentType}\n onEditReference={onEditReference}\n onFocusPath={onFocusPath}\n onStructureParams={onStructureParams}\n searchParams={searchParams}\n structureParams={structureParams}\n />\n </StructureToolProvider>\n )\n}\n","import {type SchemaType} from '@sanity/types'\nimport {useEffect, useState} from 'react'\nimport {\n getPreviewStateObservable,\n type PreviewValue,\n type SanityDocument,\n useDocumentPreviewStore,\n usePerspective,\n} from 'sanity'\n\ninterface PreviewState {\n isLoading?: boolean\n snapshot?: PreviewValue | Partial<SanityDocument> | null\n}\n\nexport default function usePreviewState(documentId: string, schemaType?: SchemaType): PreviewState {\n const documentPreviewStore = useDocumentPreviewStore()\n const [preview, setPreview] = useState<PreviewState>({})\n const {perspectiveStack} = usePerspective()\n useEffect(() => {\n if (!schemaType) {\n return undefined\n }\n const subscription = getPreviewStateObservable(\n documentPreviewStore,\n schemaType,\n documentId,\n perspectiveStack,\n ).subscribe((state) => {\n setPreview(state)\n })\n\n return () => {\n subscription?.unsubscribe()\n }\n }, [documentPreviewStore, schemaType, documentId, perspectiveStack])\n\n return preview\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {type HTMLProps, useCallback, useMemo} from 'react'\nimport {\n getPreviewValueWithFallback,\n PreviewCard,\n SanityDefaultPreview,\n Translate,\n useSchema,\n useTranslation,\n} from 'sanity'\nimport {StateLink} from 'sanity/router'\n\nimport {presentationLocaleNamespace} from '../i18n'\nimport {\n type MainDocumentState,\n type PresentationNavigate,\n type PresentationSearchParams,\n type PresentationStateParams,\n type StructureDocumentPaneParams,\n} from '../types'\nimport {DocumentListPane} from './DocumentListPane'\nimport {DocumentPanel} from './DocumentPanel'\nimport usePreviewState from './usePreviewState'\n\nexport function ContentEditor(props: {\n documentId?: string\n documentType?: string\n mainDocumentState?: MainDocumentState\n onEditReference: PresentationNavigate\n onFocusPath: (state: Required<PresentationStateParams>) => void\n onStructureParams: (params: StructureDocumentPaneParams) => void\n refs: {_id: string; _type: string}[]\n structureParams: StructureDocumentPaneParams\n searchParams: PresentationSearchParams\n}): React.JSX.Element {\n const {\n documentId,\n documentType,\n mainDocumentState,\n onEditReference,\n onFocusPath,\n onStructureParams,\n refs,\n searchParams,\n structureParams,\n } = props\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const schema = useSchema()\n\n const MainDocumentLink = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (props: HTMLProps<HTMLAnchorElement>) => {\n return (\n <StateLink\n {...props}\n state={{\n id: mainDocumentState?.document?._id,\n type: mainDocumentState?.document?._type,\n _searchParams: Object.entries(searchParams),\n }}\n />\n )\n },\n [mainDocumentState, searchParams],\n )\n\n const schemaType = useMemo(\n () => schema.get(mainDocumentState?.document?._type || 'shoe')!,\n [mainDocumentState, schema],\n )\n\n const previewState = usePreviewState(mainDocumentState?.document?._id || '', schemaType)\n\n const preview = useMemo(() => {\n if (!mainDocumentState?.document) return null\n\n return (\n <SanityDefaultPreview\n {...getPreviewValueWithFallback({\n snapshot: previewState.snapshot,\n fallback: mainDocumentState!.document,\n })}\n schemaType={schemaType}\n status={\n <Card padding={1} radius={2} shadow={1}>\n <Text muted size={0} weight=\"medium\">\n {t('main-document.label')}\n </Text>\n </Card>\n }\n />\n )\n }, [mainDocumentState, schemaType, t, previewState])\n\n if (documentId && documentType) {\n return (\n <DocumentPanel\n documentId={documentId}\n documentType={documentType}\n onEditReference={onEditReference}\n onFocusPath={onFocusPath}\n onStructureParams={onStructureParams}\n searchParams={searchParams}\n structureParams={structureParams}\n />\n )\n }\n\n return (\n <Flex direction=\"column\" flex={1} height=\"fill\">\n {mainDocumentState && (\n <Card padding={3} tone={mainDocumentState.document ? 'inherit' : 'caution'}>\n {mainDocumentState.document ? (\n <PreviewCard\n __unstable_focusRing\n // oxlint-disable-next-line no-explicit-any\n as={MainDocumentLink as any}\n data-as=\"a\"\n radius={2}\n sizing=\"border\"\n tone=\"inherit\"\n >\n {preview}\n </PreviewCard>\n ) : (\n <Card padding={2} radius={2} tone=\"inherit\">\n <Flex gap={3}>\n <Box flex=\"none\">\n <Text size={1}>\n <WarningOutlineIcon />\n </Text>\n </Box>\n <Box flex={1}>\n <Text size={1}>\n <Translate\n t={t}\n i18nKey=\"main-document.missing.text\"\n components={{Code: 'code'}}\n values={{path: mainDocumentState.path}}\n />\n </Text>\n </Box>\n </Flex>\n </Card>\n )}\n </Card>\n )}\n\n <DocumentListPane\n mainDocumentState={mainDocumentState}\n onEditReference={onEditReference}\n onStructureParams={onStructureParams}\n searchParams={searchParams}\n refs={refs}\n />\n </Flex>\n )\n}\n","import {useState} from 'react'\nimport {v4 as uuid} from 'uuid'\n\nexport function usePanelId(id?: string): string {\n const [panelId] = useState(() => id || uuid())\n return panelId\n}\n","import {\n type FunctionComponent,\n type MouseEvent as ReactMouseEvent,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n} from 'react'\nimport {PresentationPanelsContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\nimport {usePanelId} from './usePanelId'\n\nconst Resizer = styled.div`\n position: relative;\n`\nconst ResizerInner = styled.div<{\n $disabled: boolean\n}>`\n position: absolute;\n top: 0;\n bottom: 0;\n left: -5px;\n width: 9px;\n z-index: 10;\n cursor: ${({$disabled}) => ($disabled ? 'auto' : 'ew-resize')};\n\n /* Border */\n & > span:nth-child(1) {\n display: block;\n border-left: 1px solid var(--card-border-color);\n position: absolute;\n top: 0;\n left: 4px;\n bottom: 0;\n transition: opacity 200ms;\n }\n\n ${({$disabled}) =>\n !$disabled &&\n `\n /* Hover effect */\n & > span:nth-child(2) {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 9px;\n bottom: 0;\n background-color: var(--card-border-color);\n opacity: 0;\n transition: opacity 150ms;\n }\n\n @media (hover: hover) {\n &:hover > span:nth-child(2) {\n opacity: 0.2;\n }\n }\n `}\n`\n\nexport const PanelResizer: FunctionComponent<{\n id?: string\n order: number\n disabled?: boolean\n}> = function ({id: propId, order, disabled = false}) {\n const el = useRef<HTMLDivElement>(null)\n\n const context = useContext(PresentationPanelsContext)\n\n if (context === null) {\n throw Error(`Panel components must be rendered within a PanelGroup container`)\n }\n\n const id = usePanelId(propId)\n\n const {activeResizer, drag, startDragging, stopDragging, registerElement, unregisterElement} =\n context\n\n const isDragging = activeResizer === id\n\n if (context === null) {\n throw Error(`Panel components must be rendered within a PanelGroup container`)\n }\n\n const onMouseDown = useCallback(\n (event: ReactMouseEvent) => {\n startDragging(id, event.nativeEvent)\n },\n [id, startDragging],\n )\n\n const onDrag = useCallback(\n (e: MouseEvent) => {\n drag(id, e)\n },\n [id, drag],\n )\n\n const onDragStop = useCallback(() => {\n el.current!.blur()\n stopDragging()\n }, [stopDragging])\n\n useEffect(() => {\n if (!isDragging || disabled) return\n\n // Set styles to prevent text selection and force an ew-resize cursor whilst\n // dragging. Return a reset callback so we can revert to any values that\n // might have been present before dragging started.\n function setDocumentStyles() {\n const bodyStyle = document.body.style\n const documentStyle = document.documentElement.style\n\n const {cursor} = documentStyle\n const {userSelect} = bodyStyle\n\n documentStyle.cursor = 'ew-resize'\n bodyStyle.userSelect = 'none'\n\n return () => {\n if (cursor) documentStyle.cursor = cursor\n else documentStyle.removeProperty('cursor')\n\n if (userSelect) bodyStyle.userSelect = userSelect\n else bodyStyle.removeProperty('user-select')\n }\n }\n\n const resetDocumentStyles = setDocumentStyles()\n window.addEventListener('mousemove', onDrag)\n window.addEventListener('mouseup', onDragStop)\n window.addEventListener('contextmenu', onDragStop)\n\n // eslint-disable-next-line consistent-return\n return () => {\n resetDocumentStyles()\n window.removeEventListener('mousemove', onDrag)\n window.removeEventListener('mouseup', onDragStop)\n window.removeEventListener('contextmenu', onDragStop)\n }\n }, [disabled, isDragging, onDrag, onDragStop])\n\n useLayoutEffect(() => {\n registerElement(id, {id, order, type: 'resizer', el})\n\n return () => {\n unregisterElement(id)\n }\n }, [id, order, registerElement, unregisterElement])\n\n return (\n <Resizer onMouseDown={onMouseDown} ref={el}>\n <ResizerInner $disabled={disabled}>\n <span />\n <span />\n </ResizerInner>\n </Resizer>\n )\n}\n","import {\n type Dispatch,\n type FunctionComponent,\n type PropsWithChildren,\n type SetStateAction,\n} from 'react'\nimport {type CommentIntentGetter, CommentsIntentProvider, type SanityDocument} from 'sanity'\n\nimport {ContentEditor} from './editor/ContentEditor'\nimport {DisplayedDocumentBroadcasterProvider} from './loader/DisplayedDocumentBroadcaster'\nimport {Panel} from './panels/Panel'\nimport {PanelResizer} from './panels/PanelResizer'\nimport {\n type MainDocumentState,\n type PresentationNavigate,\n type PresentationParamsContextValue,\n type PresentationSearchParams,\n type PresentationStateParams,\n type StructureDocumentPaneParams,\n} from './types'\n\nexport interface PresentationContentProps {\n documentId: PresentationParamsContextValue['id']\n documentsOnPage: {_id: string; _type: string}[]\n documentType: PresentationParamsContextValue['type']\n getCommentIntent: CommentIntentGetter\n mainDocumentState: MainDocumentState | undefined\n onEditReference: PresentationNavigate\n onFocusPath: (state: Required<PresentationStateParams>) => void\n onStructureParams: (params: StructureDocumentPaneParams) => void\n searchParams: PresentationSearchParams\n setDisplayedDocument: Dispatch<SetStateAction<Partial<SanityDocument> | null | undefined>>\n structureParams: StructureDocumentPaneParams\n}\n\nconst PresentationContentWrapper: FunctionComponent<\n PropsWithChildren<{\n documentId?: string\n getCommentIntent: CommentIntentGetter\n setDisplayedDocument: Dispatch<SetStateAction<Partial<SanityDocument> | null | undefined>>\n }>\n> = (props) => {\n const {documentId, setDisplayedDocument, getCommentIntent} = props\n return (\n <>\n <PanelResizer order={4} />\n <Panel id=\"content\" minWidth={325} order={5}>\n <DisplayedDocumentBroadcasterProvider\n documentId={documentId}\n setDisplayedDocument={setDisplayedDocument}\n >\n <CommentsIntentProvider getIntent={getCommentIntent}>\n {props.children}\n </CommentsIntentProvider>\n </DisplayedDocumentBroadcasterProvider>\n </Panel>\n </>\n )\n}\n\nexport const PresentationContent: FunctionComponent<PresentationContentProps> = (props) => {\n const {\n documentId,\n documentsOnPage,\n documentType,\n getCommentIntent,\n mainDocumentState,\n onEditReference,\n onFocusPath,\n onStructureParams,\n searchParams,\n setDisplayedDocument,\n structureParams,\n } = props\n\n return (\n <PresentationContentWrapper\n documentId={documentId}\n getCommentIntent={getCommentIntent}\n setDisplayedDocument={setDisplayedDocument}\n >\n <ContentEditor\n documentId={documentId}\n documentType={documentType}\n mainDocumentState={mainDocumentState}\n onEditReference={onEditReference}\n onFocusPath={onFocusPath}\n onStructureParams={onStructureParams}\n refs={documentsOnPage}\n searchParams={searchParams}\n structureParams={structureParams}\n />\n </PresentationContentWrapper>\n )\n}\n","import {type FunctionComponent, type PropsWithChildren, useCallback} from 'react'\nimport {PresentationNavigateContext} from 'sanity/_singletons'\n\nimport {\n type CombinedSearchParams,\n type PresentationNavigate,\n type PresentationNavigateContextValue,\n type PresentationNavigateOptions,\n type PresentationStateParams,\n} from './types'\n\nexport const PresentationNavigateProvider: FunctionComponent<\n PropsWithChildren<{\n navigate: PresentationNavigate\n }>\n> = function (props) {\n const {children, navigate: _navigate} = props\n\n const navigate = useCallback<PresentationNavigateContextValue>(\n (preview, document) => {\n if (preview || document) {\n const obj: {\n state?: PresentationStateParams\n params?: CombinedSearchParams\n } = {}\n if (preview) obj.params = {preview}\n if (document) obj.state = document\n // Cast because navigate expects either params or state to be defined, which we guarantee above\n _navigate(obj as PresentationNavigateOptions)\n }\n },\n [_navigate],\n )\n\n return (\n <PresentationNavigateContext.Provider value={navigate}>\n {children}\n </PresentationNavigateContext.Provider>\n )\n}\n","import {type Dispatch, type SetStateAction, useEffect, useState} from 'react'\n\nexport function useLocalState<T>(key: string, defaultValue: T): [T, Dispatch<SetStateAction<T>>] {\n const [value, setValue] = useState<T>(() =>\n JSON.parse(localStorage.getItem(key) ?? JSON.stringify(defaultValue)),\n )\n\n useEffect(() => {\n localStorage.setItem(key, JSON.stringify(value))\n }, [key, value])\n\n return [value, setValue]\n}\n","import {memo, useCallback, useMemo} from 'react'\n\nimport {Panel} from './panels/Panel'\nimport {PanelResizer} from './panels/PanelResizer'\nimport {type NavigatorOptions} from './types'\nimport {useLocalState} from './useLocalState'\n\n/** @internal */\nexport interface UsePresentationNavigatorProps {\n unstable_navigator?: NavigatorOptions\n}\n\n/** @internal */\nexport interface UsePresentationNavigatorState {\n navigatorEnabled: boolean\n toggleNavigator: (() => void) | undefined\n}\n\n/** @internal */\nexport function usePresentationNavigator(\n props: UsePresentationNavigatorProps,\n): [UsePresentationNavigatorState, () => React.JSX.Element] {\n const {unstable_navigator} = props\n\n const navigatorProvided = !!unstable_navigator?.component\n const [_navigatorEnabled, setNavigatorEnabled] = useLocalState<boolean>(\n 'presentation/navigator',\n navigatorProvided,\n )\n const navigatorEnabled = navigatorProvided ? _navigatorEnabled : false\n const toggleNavigator = useMemo(() => {\n if (!navigatorProvided) return undefined\n\n return () => setNavigatorEnabled((enabled) => !enabled)\n }, [navigatorProvided, setNavigatorEnabled])\n\n const Component = useCallback(\n function PresentationNavigator() {\n return <>{navigatorEnabled && <Navigator {...unstable_navigator!} />}</>\n },\n [navigatorEnabled, unstable_navigator],\n )\n\n return [{navigatorEnabled, toggleNavigator}, Component]\n}\n\nfunction NavigatorComponent(props: NavigatorOptions) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {minWidth, maxWidth, component: NavigatorComponent} = props\n // eslint-disable-next-line no-eq-null\n const navigatorDisabled = minWidth != null && maxWidth != null && minWidth === maxWidth\n return (\n <>\n <Panel id=\"navigator\" minWidth={minWidth} maxWidth={maxWidth} order={1}>\n <NavigatorComponent />\n </Panel>\n <PanelResizer order={2} disabled={navigatorDisabled} />\n </>\n )\n}\nconst Navigator = memo(NavigatorComponent)\n","import {type FunctionComponent, type PropsWithChildren, useMemo} from 'react'\nimport {PresentationParamsContext} from 'sanity/_singletons'\n\nimport {type PresentationParamsContextValue} from './types'\n\nexport const PresentationParamsProvider: FunctionComponent<\n PropsWithChildren<{\n params: PresentationParamsContextValue\n }>\n> = function (props) {\n const {children, params} = props\n\n const context = useMemo<PresentationParamsContextValue>(() => params, [params])\n\n return (\n <PresentationParamsContext.Provider value={context}>\n {children}\n </PresentationParamsContext.Provider>\n )\n}\n","import {type FunctionComponent, type PropsWithChildren, useMemo} from 'react'\nimport {PresentationContext} from 'sanity/_singletons'\n\nimport {\n type PresentationContextValue,\n type PresentationNavigate,\n type PresentationParamsContextValue,\n type PresentationSearchParams,\n type StructureDocumentPaneParams,\n} from './types'\n\nexport const PresentationProvider: FunctionComponent<\n PropsWithChildren<{\n devMode: boolean\n name: string\n navigate: PresentationNavigate\n params: PresentationParamsContextValue\n searchParams: PresentationSearchParams\n structureParams: StructureDocumentPaneParams\n }>\n> = function (props) {\n const {children, devMode, name, navigate, params, searchParams, structureParams} = props\n\n const context = useMemo<PresentationContextValue>(\n () => ({\n devMode,\n name,\n navigate,\n params,\n searchParams,\n structureParams,\n }),\n [devMode, name, navigate, params, searchParams, structureParams],\n )\n\n return <PresentationContext.Provider value={context}>{children}</PresentationContext.Provider>\n}\n","import {useSelector} from '@xstate/react'\n\nimport {type PreviewUrlRef} from './machines/preview-url'\n\nexport function useAllowPatterns(previewUrlRef: PreviewUrlRef) {\n const allowPatterns = useSelector(previewUrlRef, (state) => state.context.allowOrigins)\n if (!Array.isArray(allowPatterns)) {\n throw new TypeError('allowPatterns must be an array')\n }\n return allowPatterns\n}\n","/**\n * When encoding the current studio perspective it's necessary to deal with it sometimes being an array, in a consistent way.\n */\nexport function encodeStudioPerspective(studioPerspective: string[] | string): string {\n return Array.isArray(studioPerspective) ? studioPerspective.join(',') : studioPerspective\n}\n","import {useId as useReactId} from 'react'\n\nexport function useId(): string {\n const id = useReactId()\n // Uses the new format introduced in: https://github.com/facebook/react/pull/32001\n return id.startsWith(':') ? id.replace(/^:(.+):$/, '\\u00AB$1\\u00BB') : id\n}\n","import {Box} from '@sanity/ui'\nimport {motion, type VariantLabels, type Variants} from 'framer-motion'\nimport {forwardRef, type ReactEventHandler, useEffect, useImperativeHandle, useRef} from 'react'\nimport {createGlobalStyle, styled} from 'styled-components'\n\nimport {useId} from '../useId'\n\ninterface IFrameProps {\n animate: VariantLabels\n initial: VariantLabels\n onLoad: ReactEventHandler<HTMLIFrameElement>\n preventClick: boolean\n src: string\n variants: Variants\n style: React.CSSProperties\n}\n\nexport const IFrame = forwardRef<HTMLIFrameElement, IFrameProps>(\n function IFrame(props, forwardedRef) {\n const {animate, initial, onLoad, preventClick, src, variants, style} = props\n\n const ref = useRef<HTMLIFrameElement | null>(null)\n // Forward the iframe ref to the parent component\n useImperativeHandle<HTMLIFrameElement | null, HTMLIFrameElement | null>(\n forwardedRef,\n () => ref.current,\n )\n\n /**\n * Ensure that clicking outside of menus and dialogs will close as focus shifts to the iframe\n */\n\n useEffect(() => {\n if (!ref.current) {\n return undefined\n }\n const instance = ref.current\n function handleBlur() {\n if (instance !== document.activeElement) {\n return\n }\n\n instance.dispatchEvent(new MouseEvent('mousedown', {bubbles: true, cancelable: true}))\n }\n window.addEventListener('blur', handleBlur)\n return () => {\n window.removeEventListener('blur', handleBlur)\n }\n }, [])\n\n const viewTransitionName = useId()\n\n return (\n <>\n <IFrameElement\n style={{\n ...style,\n viewTransitionName,\n }}\n animate={animate}\n initial={initial}\n onLoad={onLoad}\n ref={ref}\n src={src}\n variants={variants}\n />\n {preventClick && <IFrameOverlay />}\n <GlobalViewTransition />\n </>\n )\n },\n)\n\nconst IFrameElement = motion.create(styled.iframe`\n box-shadow: 0 0 0 1px var(--card-border-color);\n border: 0;\n max-height: 100%;\n width: 100%;\n view-transition-class: presentation-tool-iframe;\n`)\n\nconst IFrameOverlay = styled(Box)`\n position: absolute;\n inset: 0;\n background: transparent;\n`\n\nconst GlobalViewTransition = createGlobalStyle`\nhtml:active-view-transition-type(sanity-iframe-viewport) {\n view-transition-name: none;\n &::view-transition {\n pointer-events: none;\n }\n /* &::view-transition-old(root) {\n display: none;\n }\n &::view-transition-new(root) {\n animation: none;\n } */\n}\n`\n","import {LaunchIcon} from '@sanity/icons'\nimport {urlSearchParamPreviewPerspective} from '@sanity/preview-url-secret/constants'\nimport {Text} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type PresentationPerspective} from '../types'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {type PreviewProps} from './Preview'\n\n/** @internal */\nexport function OpenPreviewButton(\n props: Pick<PreviewProps, 'openPopup'> & {\n previewLocationOrigin?: string\n previewLocationRoute: string\n perspective: PresentationPerspective\n targetOrigin: string\n },\n): React.ReactNode {\n const {openPopup, previewLocationOrigin, previewLocationRoute, perspective, targetOrigin} = props\n\n const openPreviewLink = useMemo(() => {\n const url = new URL(previewLocationRoute, previewLocationOrigin || targetOrigin)\n url.searchParams.set(urlSearchParamPreviewPerspective, encodeStudioPerspective(perspective))\n const {pathname, search} = url\n\n return `${previewLocationOrigin}${pathname}${search}`\n }, [perspective, previewLocationOrigin, previewLocationRoute, targetOrigin])\n\n const {t} = useTranslation(presentationLocaleNamespace)\n\n const handleOpenPopup = useCallback(\n (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n event.preventDefault()\n openPopup(event.currentTarget.href)\n },\n [openPopup],\n )\n\n return (\n <Tooltip\n animate\n content={<Text size={1}>{t('share-url.menu-item.open.text')}</Text>}\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Button\n as=\"a\"\n aria-label={t('share-url.menu-item.open.text')}\n icon={LaunchIcon}\n mode=\"bleed\"\n href={openPreviewLink}\n rel=\"opener\"\n target=\"_blank\"\n tooltipProps={null}\n // @ts-expect-error the `as=\"a\"` prop isn't enough to change the type of event.target from <div> to <a>\n onClick={handleOpenPopup}\n />\n </Tooltip>\n )\n}\n","import {useSelector} from '@xstate/react'\n\nimport {type PreviewUrlRef} from './machines/preview-url'\n\nexport function useTargetOrigin(previewUrlRef: PreviewUrlRef): string {\n const targetOrigin = useSelector(previewUrlRef, (state) => state.context.previewUrl?.origin)\n if (!targetOrigin) {\n throw new TypeError('targetOrigin is required')\n }\n return targetOrigin\n}\n","import {ResetIcon} from '@sanity/icons'\nimport {TextInput, type TextInputClearButtonProps} from '@sanity/ui'\nimport {\n type ChangeEvent,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {useActiveWorkspace, useTranslation} from 'sanity'\n\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type PreviewUrlRef} from '../machines/preview-url'\nimport {useAllowPatterns} from '../useAllowPatterns'\nimport {useTargetOrigin} from '../useTargetOrigin'\n\nexport function PreviewLocationInput(props: {\n fontSize?: number\n onChange: (value: string) => void\n previewUrlRef: PreviewUrlRef\n padding?: number\n prefix?: ReactNode\n suffix?: ReactNode\n value: string\n}): React.JSX.Element {\n const {fontSize = 1, onChange, padding = 3, prefix, suffix, value, previewUrlRef} = props\n const allowOrigins = useAllowPatterns(previewUrlRef)\n const targetOrigin = useTargetOrigin(previewUrlRef)\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const {basePath = '/'} = useActiveWorkspace()?.activeWorkspace || {}\n\n const inputRef = useRef<HTMLInputElement | null>(null)\n const [sessionValue, setSessionValue] = useState<string | undefined>(undefined)\n const [customValidity, setCustomValidity] = useState<string | undefined>(undefined)\n\n const handleChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setSessionValue(event.currentTarget.value)\n }, [])\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n if (sessionValue === undefined) {\n return\n }\n\n let absoluteValue = sessionValue\n try {\n absoluteValue = new URL(sessionValue, targetOrigin).toString()\n } catch {\n // ignore\n }\n\n if (Array.isArray(allowOrigins)) {\n if (!allowOrigins.some((pattern) => pattern.test(absoluteValue))) {\n setCustomValidity(\n t('preview-location-input.error', {\n origin: targetOrigin,\n context: 'origin-not-allowed',\n }),\n )\n event.currentTarget.reportValidity()\n return\n }\n // `origin` is an empty string '' if the Studio is embedded, and that's when we need to protect against recursion\n } else if (\n !targetOrigin &&\n (absoluteValue.startsWith(`${basePath}/`) || absoluteValue === basePath)\n ) {\n setCustomValidity(\n t('preview-location-input.error', {basePath, context: 'same-base-path'}),\n )\n return\n }\n\n const nextValue = absoluteValue === targetOrigin ? `${targetOrigin}/` : absoluteValue\n\n setCustomValidity(undefined)\n setSessionValue(undefined)\n\n onChange(nextValue)\n\n inputRef.current?.blur()\n }\n\n if (event.key === 'Escape') {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }\n },\n [allowOrigins, basePath, onChange, sessionValue, t, targetOrigin],\n )\n\n const handleBlur = useCallback(() => {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }, [])\n\n const handleClear = useCallback(() => {\n setCustomValidity(undefined)\n let nextValue = value\n try {\n nextValue = new URL(value, targetOrigin).toString()\n } catch {\n // ignore\n }\n setSessionValue(nextValue)\n }, [targetOrigin, value])\n\n useEffect(() => {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }, [targetOrigin, value])\n\n const resetButton: TextInputClearButtonProps = useMemo(() => ({icon: ResetIcon}), [])\n\n return (\n <>\n <TextInput\n clearButton={customValidity ? resetButton : undefined}\n customValidity={customValidity}\n fontSize={fontSize}\n onBlur={handleBlur}\n onClear={handleClear}\n onChange={handleChange}\n onKeyDownCapture={handleKeyDown}\n padding={padding}\n prefix={prefix}\n style={{zIndex: 1}}\n radius={2}\n ref={inputRef}\n space={padding}\n suffix={suffix}\n value={sessionValue === undefined ? new URL(value, targetOrigin).toString() : sessionValue}\n />\n </>\n )\n}\n","/* eslint-disable @typescript-eslint/no-shadow,no-negated-condition */\nimport {type ClientPerspective, type SyncTag} from '@sanity/client'\nimport {CopyIcon, ShareIcon} from '@sanity/icons'\nimport {SanityMonogram} from '@sanity/logos'\nimport {fetchSharedAccessQuery} from '@sanity/preview-url-secret/constants'\nimport {\n disablePreviewAccessSharing,\n enablePreviewAccessSharing,\n} from '@sanity/preview-url-secret/toggle-preview-access-sharing'\nimport {setSecretSearchParams} from '@sanity/preview-url-secret/without-secret-search-params'\nimport {\n Box,\n Card,\n Grid,\n Menu,\n MenuDivider,\n Spinner,\n Stack,\n Switch,\n Text,\n useToast,\n} from '@sanity/ui'\nimport {AnimatePresence, motion} from 'framer-motion'\nimport {lazy, memo, Suspense, useCallback, useEffect, useMemo, useState} from 'react'\nimport {useClient, useCurrentUser, useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {Button, MenuButton, MenuItem, Tooltip} from '../../ui-components'\nimport {API_VERSION} from '../constants'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {type PreviewProps} from './Preview'\n\nconst QRCodeSVG = lazy(() => import('./QRCodeSVG'))\n\nexport interface SharePreviewMenuProps {\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n previewLocationRoute: string\n initialUrl: PreviewProps['initialUrl']\n perspective: ClientPerspective\n}\n\nconst QrCodeLogoSize = 24\nconst QrCodeLogoPadding = 16\nconst QrSize = 224\n\nconst StyledSanityMonogram = styled(SanityMonogram)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n height: ${QrCodeLogoSize}px;\n width: ${QrCodeLogoSize}px;\n`\n\nconst MotionSpinner = motion.create(Spinner)\nconst MotionText = motion.create(Text)\nconst MotionMonogram = motion.create(StyledSanityMonogram)\n\nexport const SharePreviewMenu = memo(function SharePreviewMenuComponent(\n props: SharePreviewMenuProps,\n) {\n const {\n canToggleSharePreviewAccess,\n canUseSharedPreviewAccess,\n initialUrl,\n previewLocationRoute,\n perspective,\n } = props\n const {t} = useTranslation(presentationLocaleNamespace)\n const {push: pushToast} = useToast()\n const client = useClient({apiVersion: API_VERSION})\n const currentUser = useCurrentUser()\n const [loading, setLoading] = useState(true)\n const [enabling, setEnabling] = useState(false)\n const [disabling, setDisabling] = useState(false)\n const [secret, setSecret] = useState<string | null>(null)\n const busy = enabling || disabling || loading\n const url = useMemo(\n () =>\n secret\n ? setSecretSearchParams(\n initialUrl,\n secret,\n previewLocationRoute,\n encodeStudioPerspective(perspective),\n )\n : null,\n [initialUrl, perspective, previewLocationRoute, secret],\n )\n\n const [error, setError] = useState<unknown>(null)\n if (error) {\n throw error\n }\n\n const handleUnableToToggle = useCallback(() => {\n pushToast({\n closable: true,\n status: 'warning',\n title: t('share-preview-menu.error_toggle-sharing', {context: 'toggle-sharing'}),\n })\n }, [pushToast, t])\n\n const handleDisableSharing = useCallback(async () => {\n try {\n setDisabling(true)\n await disablePreviewAccessSharing(\n client,\n 'sanity/presentation',\n typeof window === 'undefined' ? '' : location.href,\n currentUser?.id,\n )\n setSecret(null)\n } catch (error) {\n setError(error)\n } finally {\n setDisabling(false)\n }\n }, [client, currentUser?.id])\n const handleEnableSharing = useCallback(async () => {\n try {\n setEnabling(true)\n\n const previewUrlSecret = await enablePreviewAccessSharing(\n client,\n 'sanity/presentation',\n typeof window === 'undefined' ? '' : location.href,\n currentUser?.id,\n )\n setSecret(previewUrlSecret.secret)\n } catch (error) {\n setError(error)\n } finally {\n setEnabling(false)\n }\n }, [client, currentUser?.id])\n\n const handleCopyUrl = useCallback(() => {\n try {\n if (!url) {\n throw new Error('No URL to copy')\n }\n navigator.clipboard.writeText(url.toString())\n pushToast({\n closable: true,\n status: 'success',\n title: t('share-url.clipboard.status', {context: 'success'}),\n })\n } catch (error) {\n setError(error)\n }\n }, [pushToast, t, url])\n\n useEffect(() => {\n let controller = new AbortController()\n let usedTags: SyncTag[] = []\n async function fetchShareSecret(lastLiveEventId: string | null, signal: AbortSignal) {\n const {result, syncTags} = await client.fetch<string | null>(\n fetchSharedAccessQuery,\n {},\n {filterResponse: false, lastLiveEventId, tag: 'presentation.fetch-shared-access-secret'},\n )\n if (Array.isArray(syncTags)) {\n usedTags = syncTags\n }\n if (!signal.aborted) {\n setSecret(result)\n }\n }\n const subscription = client.live.events().subscribe({\n next: (event) => {\n if (event.type === 'message') {\n controller.abort()\n controller = new AbortController()\n if (event.tags.some((tag) => usedTags.includes(tag))) {\n fetchShareSecret(event.id, controller.signal)\n }\n }\n },\n error: setError,\n })\n\n fetchShareSecret(null, controller.signal).finally(() => setLoading(false))\n\n return () => {\n subscription.unsubscribe()\n controller.abort()\n }\n }, [client])\n\n return (\n <MenuButton\n button={\n <Button\n aria-label={t('preview-frame.share-button.aria-label')}\n icon={ShareIcon}\n mode=\"bleed\"\n tooltipProps={null}\n />\n }\n id=\"share-menu\"\n menu={\n <Menu style={{maxWidth: 248}} padding={canUseSharedPreviewAccess ? undefined : 0}>\n {canUseSharedPreviewAccess ? (\n <>\n <label style={{cursor: 'pointer'}}>\n <Grid\n columns={2}\n rows={2}\n gapX={3}\n gapY={1}\n style={{\n justifyContent: 'center',\n alignItems: 'center',\n gridTemplateColumns: 'min-content 1fr',\n gridTemplateRows: 'min-content',\n }}\n paddingTop={3}\n paddingX={3}\n >\n <Tooltip\n animate\n content={\n <Text size={1}>\n {t('share-preview-menu.toggle-button.tooltip', {\n context: url ? 'disable' : 'enable',\n })}\n </Text>\n }\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Switch\n checked={enabling || (url !== null && !disabling)}\n readOnly={enabling || disabling}\n indeterminate={loading}\n onChange={\n !canToggleSharePreviewAccess\n ? handleUnableToToggle\n : url\n ? handleDisableSharing\n : handleEnableSharing\n }\n />\n </Tooltip>\n <Text size={1} weight=\"medium\">\n {t('share-preview-menu.toggle-button.label', {context: 'first-line'})}\n </Text>\n <span />\n <Text muted size={1}>\n {t('share-preview-menu.toggle-button.label', {context: 'second-line'})}\n </Text>\n </Grid>\n </label>\n <Box padding={3} paddingTop={2}>\n <Stack space={3}>\n <Card\n tone={busy || !url ? 'transparent' : undefined}\n style={{\n position: 'relative',\n aspectRatio: '1 / 1',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <AnimatePresence>\n {busy ? (\n <MotionSpinner\n muted\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n exit={{opacity: 0}}\n />\n ) : url ? (\n <>\n <Suspense fallback={<Spinner />}>\n <QRCodeSVG\n title={t('share-preview-menu.qr-code.title', {url: url.toString()})}\n value={url.toString()}\n size={QrSize}\n color=\"var(--card-fg-color)\"\n logoSize={QrCodeLogoSize + QrCodeLogoPadding}\n />\n <MotionMonogram\n initial={{opacity: -0.5}}\n animate={{opacity: 1.5}}\n exit={{opacity: 0}}\n />\n </Suspense>\n </>\n ) : (\n <MotionText\n muted\n size={1}\n style={{maxWidth: '100px', textWrap: 'pretty', textAlign: 'center'}}\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n exit={{opacity: 0}}\n >\n {t('share-preview-menu.qr-code.placeholder')}\n </MotionText>\n )}\n </AnimatePresence>\n </Card>\n <Text muted size={1}>\n {t('share-preview-menu.qr-code.instructions')}\n </Text>\n </Stack>\n </Box>\n <MenuDivider />\n <MenuItem\n disabled={!url || disabling}\n icon={CopyIcon}\n onClick={handleCopyUrl}\n text={t('share-preview-menu.copy-url.text')}\n />\n </>\n ) : (\n <Card padding={2} tone=\"caution\" radius={3}>\n <Text style={{textWrap: 'pretty'}}>\n {t('share-preview-menu.error', {context: 'missing-grants'})}\n </Text>\n </Card>\n )}\n </Menu>\n }\n popover={{\n constrainSize: true,\n placement: 'bottom',\n portal: true,\n }}\n />\n )\n})\nSharePreviewMenu.displayName = 'Memo(SharePreviewMenu)'\n","import {DesktopIcon, MobileDeviceIcon, PanelLeftIcon, RefreshIcon} from '@sanity/icons'\nimport {withoutSecretSearchParams} from '@sanity/preview-url-secret/without-secret-search-params'\nimport {Box, Card, Flex, Hotkeys, Switch, Text} from '@sanity/ui'\nimport {useSelector} from '@xstate/react'\nimport {type RefObject, useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type HeaderOptions} from '../types'\nimport {useId} from '../useId'\nimport {OpenPreviewButton} from './OpenPreviewButton'\nimport {type PreviewProps} from './Preview'\nimport {PreviewLocationInput} from './PreviewLocationInput'\nimport {SharePreviewMenu} from './SharePreviewMenu'\n\n/** @public */\nexport interface PreviewHeaderProps extends PreviewProps {\n iframeRef: RefObject<HTMLIFrameElement | null>\n renderDefault: (props: PreviewHeaderProps) => React.JSX.Element\n}\n\nconst PreviewHeaderDefault = (props: Omit<PreviewHeaderProps, 'renderDefault'>) => {\n const {\n canSharePreviewAccess,\n canToggleSharePreviewAccess,\n canUseSharedPreviewAccess,\n iframeRef,\n initialUrl,\n navigatorEnabled,\n onPathChange,\n onRefresh,\n openPopup,\n overlaysConnection,\n presentationRef,\n perspective,\n previewUrl,\n setViewport,\n targetOrigin,\n toggleNavigator,\n toggleOverlay,\n viewport,\n previewUrlRef,\n } = props\n\n const {t} = useTranslation(presentationLocaleNamespace)\n\n const toggleViewportSize = useCallback(\n () => setViewport(viewport === 'desktop' ? 'mobile' : 'desktop'),\n [setViewport, viewport],\n )\n\n const previewLocationOrigin = useMemo(() => {\n return targetOrigin === location.origin ? '' : targetOrigin\n }, [targetOrigin])\n\n const handleRefresh = () => {\n onRefresh(() => {\n if (!iframeRef.current) {\n return\n }\n presentationRef.send({type: 'iframe reload'})\n // Funky way to reload an iframe without CORS issues\n // ref.current.src = ref.current.src\n Object.assign(iframeRef.current, {src: `${targetOrigin}${previewUrl || '/'}`})\n })\n }\n\n const isLoading = useSelector(presentationRef, (state) => state.matches('loading'))\n const isLoaded = useSelector(presentationRef, (state) => state.matches('loaded'))\n const isRefreshing = useSelector(presentationRef, (state) =>\n state.matches({loaded: 'refreshing'}),\n )\n const isReloading = useSelector(presentationRef, (state) => state.matches({loaded: 'reloading'}))\n const overlaysEnabled = useSelector(\n presentationRef,\n (state) => state.context.visualEditingOverlaysEnabled,\n )\n\n const previewLocationRoute = useMemo(() => {\n const previewURL = new URL(previewUrl || '/', targetOrigin)\n const {pathname, search} = withoutSecretSearchParams(previewURL)\n\n return `${pathname}${search}`\n }, [previewUrl, targetOrigin])\n\n const perspectiveToggleTooltipId = useId()\n\n /**\n * If the preview URL machine is busy it means it's about to change the target origin and reload the iframe,\n * so we show a spinner\n */\n const previewUrlBusy = useSelector(previewUrlRef, (state) => state.hasTag('busy'))\n\n return (\n <Flex align=\"center\" gap={1} paddingX={1} style={{width: '100%'}}>\n {toggleNavigator && (\n <Button\n aria-label={t('preview-frame.navigator.toggle-button.aria-label')}\n icon={PanelLeftIcon}\n mode=\"bleed\"\n onClick={toggleNavigator}\n selected={navigatorEnabled}\n tooltipProps={{\n content: <Text size={1}>{t('preview-frame.navigator.toggle-button.tooltip')}</Text>,\n fallbackPlacements: ['bottom-start'],\n placement: 'bottom',\n }}\n />\n )}\n\n <Tooltip\n animate\n content={\n <Flex align=\"center\" style={{whiteSpace: 'nowrap'}}>\n <Box padding={1}>\n <Text size={1}>\n {t('preview-frame.overlay.toggle-button.tooltip', {\n context: overlaysEnabled ? 'disable' : 'enable',\n })}\n </Text>\n </Box>\n <Box paddingY={1}>\n <Hotkeys keys={['Alt']} style={{marginTop: -4, marginBottom: -4}} />\n </Box>\n </Flex>\n }\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Card\n as=\"label\"\n flex=\"none\"\n padding={3}\n marginX={1}\n style={{\n lineHeight: 0,\n borderRadius: 999,\n userSelect: 'none',\n }}\n tone={overlaysEnabled ? 'transparent' : undefined}\n >\n <Flex align=\"center\" gap={3}>\n <div style={{margin: -4}}>\n <Switch\n indeterminate={!isLoaded}\n checked={overlaysEnabled}\n onChange={toggleOverlay}\n disabled={isLoading || overlaysConnection !== 'connected'}\n />\n </div>\n <Box>\n <Text muted={!overlaysEnabled} size={1} weight=\"medium\">\n {t('preview-frame.overlay.toggle-button.text')}\n </Text>\n </Box>\n </Flex>\n </Card>\n </Tooltip>\n\n <Box flex={1}>\n <PreviewLocationInput\n previewUrlRef={previewUrlRef}\n prefix={\n <Box padding={1}>\n <Tooltip\n animate\n content={\n <Text size={1}>\n {isLoaded\n ? t('preview-frame.refresh-button.tooltip')\n : t('preview-frame.status', {\n context: isLoading\n ? 'loading'\n : isRefreshing\n ? 'refreshing'\n : isReloading\n ? 'reloading'\n : 'unknown',\n })}\n </Text>\n }\n fallbackPlacements={['bottom-end']}\n placement=\"bottom\"\n portal\n >\n <Button\n aria-label={t('preview-frame.refresh-button.aria-label')}\n icon={RefreshIcon}\n mode=\"bleed\"\n loading={isReloading || isRefreshing || previewUrlBusy}\n onClick={handleRefresh}\n tooltipProps={null}\n />\n </Tooltip>\n </Box>\n }\n onChange={onPathChange}\n suffix={\n <Box padding={1}>\n <OpenPreviewButton\n openPopup={openPopup}\n previewLocationOrigin={previewLocationOrigin}\n previewLocationRoute={previewLocationRoute}\n perspective={perspective}\n targetOrigin={targetOrigin}\n />\n </Box>\n }\n value={previewLocationRoute}\n />\n </Box>\n\n <Flex align=\"center\" flex=\"none\" gap={1}>\n <Tooltip\n animate\n // eslint-disable-next-line react/jsx-no-bind\n ref={(node) => {\n node?.style.setProperty('view-transition-name', perspectiveToggleTooltipId)\n }}\n content={\n <Text size={1}>\n {t('preview-frame.viewport-button.tooltip', {\n context: viewport === 'desktop' ? 'narrow' : 'full',\n })}\n </Text>\n }\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Button\n data-testid=\"preview-viewport-toggle\"\n data-viewport={viewport}\n aria-label={t('preview-frame.viewport-button.aria-label')}\n icon={viewport === 'desktop' ? MobileDeviceIcon : DesktopIcon}\n mode=\"bleed\"\n onClick={toggleViewportSize}\n tooltipProps={null}\n />\n </Tooltip>\n </Flex>\n\n {canSharePreviewAccess && (\n <Flex align=\"center\" flex=\"none\" gap={1}>\n <SharePreviewMenu\n canToggleSharePreviewAccess={canToggleSharePreviewAccess}\n canUseSharedPreviewAccess={canUseSharedPreviewAccess}\n previewLocationRoute={previewLocationRoute}\n initialUrl={initialUrl}\n perspective={perspective}\n />\n </Flex>\n )}\n </Flex>\n )\n}\n\n/** @internal */\nexport function PreviewHeader(\n props: Omit<PreviewHeaderProps, 'renderDefault'> & {options?: HeaderOptions},\n): React.JSX.Element {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const renderDefault = useCallback((props: Omit<PreviewHeaderProps, 'renderDefault'>) => {\n return <PreviewHeaderDefault {...props} />\n }, [])\n\n const HeaderComponent = props.options?.component\n const header = HeaderComponent ? (\n <HeaderComponent {...props} renderDefault={renderDefault} />\n ) : (\n renderDefault(props)\n )\n\n return (\n <Card flex=\"none\" padding={2} borderBottom style={{position: 'relative'}}>\n <Flex align=\"center\" style={{minHeight: 0}}>\n {header}\n </Flex>\n </Card>\n )\n}\n","/* eslint-disable react/no-unused-prop-types */\nimport {createConnectionMachine, createController} from '@sanity/comlink'\nimport {\n createCompatibilityActors,\n type VisualEditingControllerMsg,\n type VisualEditingNodeMsg,\n} from '@sanity/presentation-comlink'\nimport {\n urlSearchParamPreviewPerspective,\n urlSearchParamVercelProtectionBypass,\n urlSearchParamVercelSetBypassCookie,\n type VercelSetBypassCookieValue,\n} from '@sanity/preview-url-secret/constants'\nimport {\n Card,\n Code,\n Flex,\n Label,\n Spinner,\n Stack,\n Text,\n usePrefersReducedMotion,\n useToast,\n} from '@sanity/ui'\nimport {useSelector} from '@xstate/react'\nimport {AnimatePresence, motion, MotionConfig} from 'framer-motion'\nimport {\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react'\nimport {flushSync} from 'react-dom'\nimport {Translate, useTranslation} from 'sanity'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {Button, TooltipDelayGroupProvider} from '../../ui-components'\nimport {ErrorCard} from '../components/ErrorCard'\nimport {MAX_TIME_TO_OVERLAYS_CONNECTION} from '../constants'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type PresentationMachineRef} from '../machines/presentation-machine'\nimport {type PreviewUrlRef} from '../machines/preview-url'\nimport {\n type ConnectionStatus,\n type HeaderOptions,\n type PresentationPerspective,\n type PresentationViewport,\n} from '../types'\nimport {useAllowPatterns} from '../useAllowPatterns'\nimport {usePresentationNavigate} from '../usePresentationNavigate'\nimport {usePresentationTool} from '../usePresentationTool'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {IFrame} from './IFrame'\nimport {PreviewHeader} from './PreviewHeader'\n\nconst MotionFlex = motion.create(Flex)\n\n/** @public */\nexport interface PreviewProps {\n canSharePreviewAccess: boolean\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n header?: HeaderOptions\n initialUrl: URL\n loadersConnection: ConnectionStatus\n navigatorEnabled: boolean\n onPathChange: (nextPath: string) => void\n onRefresh: (fallback: () => void) => void\n openPopup: (url: string) => void\n overlaysConnection: ConnectionStatus\n presentationRef: PresentationMachineRef\n perspective: PresentationPerspective\n previewUrl?: string\n setViewport: (mode: 'desktop' | 'mobile') => void\n targetOrigin: string\n toggleNavigator?: () => void\n toggleOverlay: () => void\n viewport: PresentationViewport\n vercelProtectionBypass: string | null\n previewUrlRef: PreviewUrlRef\n}\n\nexport const Preview = memo(\n forwardRef<HTMLIFrameElement, PreviewProps>(function PreviewComponent(props, forwardedRef) {\n const {\n header,\n initialUrl,\n loadersConnection,\n overlaysConnection,\n perspective,\n viewport,\n vercelProtectionBypass,\n presentationRef,\n previewUrlRef,\n } = props\n\n const [stablePerspective, setStablePerspective] = useState<typeof perspective | null>(null)\n const urlPerspective = encodeStudioPerspective(\n stablePerspective === null ? perspective : stablePerspective,\n )\n const previewUrl = useMemo(() => {\n const url = new URL(initialUrl)\n // Always set the perspective that's being used, even if preview mode isn't configured\n if (!url.searchParams.get(urlSearchParamPreviewPerspective)) {\n url.searchParams.set(urlSearchParamPreviewPerspective, urlPerspective)\n }\n\n if (vercelProtectionBypass || url.searchParams.get(urlSearchParamVercelProtectionBypass)) {\n // samesitenone is required since the request is from an iframe\n url.searchParams.set(\n urlSearchParamVercelSetBypassCookie,\n 'samesitenone' satisfies VercelSetBypassCookieValue,\n )\n }\n // If there's a vercel protection bypass secret in the context, set it if none exists already\n if (vercelProtectionBypass && !url.searchParams.get(urlSearchParamVercelProtectionBypass)) {\n url.searchParams.set(urlSearchParamVercelProtectionBypass, vercelProtectionBypass)\n }\n\n return url\n }, [initialUrl, urlPerspective, vercelProtectionBypass])\n\n useEffect(() => {\n /**\n * If the preview iframe is connected to the loader, we know that switching the perspective can be done without reloading the iframe.\n */\n if (loadersConnection === 'connected') {\n /**\n * Only set the stable perspective if it hasn't been set yet.\n */\n setStablePerspective((prev) => (prev === null ? perspective : prev))\n }\n }, [loadersConnection, perspective])\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const {devMode} = usePresentationTool()\n const prefersReducedMotion = usePrefersReducedMotion()\n const ref = useRef<HTMLIFrameElement | null>(null)\n\n const previewHeader = <PreviewHeader {...props} iframeRef={ref} options={header} />\n\n // Forward the iframe ref to the parent component\n useImperativeHandle<HTMLIFrameElement | null, HTMLIFrameElement | null>(\n forwardedRef,\n () => ref.current,\n )\n\n const isLoading = useSelector(\n presentationRef,\n (state) => state.matches('loading') || state.matches({loaded: 'reloading'}),\n )\n\n const [timedOut, setTimedOut] = useState(false)\n const isRefreshing = useSelector(presentationRef, (state) =>\n state.matches({loaded: 'refreshing'}),\n )\n const [somethingIsWrong, setSomethingIsWrong] = useState(false)\n const iframeIsBusy = isLoading || isRefreshing || overlaysConnection === 'connecting'\n\n const handleRetry = useCallback(() => {\n if (!ref.current) {\n return\n }\n\n ref.current.src = previewUrl.toString()\n\n presentationRef.send({type: 'iframe reload'})\n }, [presentationRef, previewUrl])\n const handleContinueAnyway = useCallback(() => {\n setContinueAnyway(true)\n }, [])\n\n const [continueAnyway, setContinueAnyway] = useState(false)\n const [showOverlaysConnectionStatus, setShowOverlaysConnectionState] = useState(false)\n useEffect(() => {\n if (isLoading || isRefreshing) {\n return undefined\n }\n\n if (overlaysConnection === 'connecting' || overlaysConnection === 'reconnecting') {\n const timeout = setTimeout(() => {\n setShowOverlaysConnectionState(true)\n }, 5_000)\n return () => clearTimeout(timeout)\n }\n return undefined\n }, [overlaysConnection, isLoading, isRefreshing])\n\n useEffect(() => {\n if (isLoading || isRefreshing || !showOverlaysConnectionStatus) {\n return undefined\n }\n if (overlaysConnection === 'connected') {\n setSomethingIsWrong(false)\n setShowOverlaysConnectionState(false)\n setTimedOut(false)\n setContinueAnyway(false)\n }\n if (overlaysConnection === 'connecting') {\n const timeout = setTimeout(() => {\n setTimedOut(true)\n console.error(\n `Unable to connect to visual editing. Make sure you've setup '@sanity/visual-editing' correctly`,\n )\n }, MAX_TIME_TO_OVERLAYS_CONNECTION)\n return () => clearTimeout(timeout)\n }\n if (overlaysConnection === 'reconnecting') {\n const timeout = setTimeout(() => {\n setTimedOut(true)\n setSomethingIsWrong(true)\n }, MAX_TIME_TO_OVERLAYS_CONNECTION)\n return () => clearTimeout(timeout)\n }\n return undefined\n }, [isLoading, overlaysConnection, isRefreshing, showOverlaysConnectionStatus])\n\n const onIFrameLoad = useCallback(() => {\n presentationRef.send({type: 'iframe loaded'})\n }, [presentationRef])\n\n const preventIframeInteraction = useMemo(() => {\n return (\n (isLoading || (overlaysConnection === 'connecting' && !isRefreshing)) && !continueAnyway\n )\n }, [continueAnyway, isLoading, isRefreshing, overlaysConnection])\n\n const canUseViewTransition = useSyncExternalStore(\n // eslint-disable-next-line no-empty-function\n useCallback(() => () => {}, []),\n () => CSS.supports(`(view-transition-name: test)`),\n )\n const iframeAnimations = useMemo(() => {\n return [\n preventIframeInteraction ? 'background' : 'active',\n isLoading ? 'reloading' : 'idle',\n // If CSS View Transitions are supported, then transition iframe viewport dimensions with that instead of Motion\n canUseViewTransition ? '' : viewport,\n showOverlaysConnectionStatus && !continueAnyway ? 'timedOut' : '',\n ]\n }, [\n canUseViewTransition,\n continueAnyway,\n isLoading,\n preventIframeInteraction,\n showOverlaysConnectionStatus,\n viewport,\n ])\n\n const [currentViewport, setCurrentViewport] = useState(viewport)\n const [iframeStyle, setIframeStyle] = useState(iframeVariants[viewport])\n useEffect(() => {\n if (canUseViewTransition && viewport !== currentViewport) {\n const update = () => {\n setCurrentViewport(viewport)\n setIframeStyle(iframeVariants[viewport])\n }\n if (\n !prefersReducedMotion &&\n 'startViewTransition' in document &&\n typeof document.startViewTransition === 'function'\n ) {\n document.startViewTransition({\n // @ts-expect-error - fix typings\n update: () => flushSync(() => update()),\n types: ['sanity-iframe-viewport'],\n })\n } else {\n update()\n }\n }\n }, [canUseViewTransition, prefersReducedMotion, currentViewport, viewport])\n\n const toast = useToast()\n const allowOrigins = useAllowPatterns(previewUrlRef)\n const [checkOrigin, setCheckOrigin] = useState<false | string>(false)\n const [reportedMismatches] = useState(new Set<string>())\n const reportMismatchingOrigin = useEffectEvent((reportedOrigin: string) => {\n if (allowOrigins.some((allow) => allow.test(reportedOrigin))) {\n setCheckOrigin(reportedOrigin)\n return\n }\n if (reportedMismatches.has(reportedOrigin)) return\n reportedMismatches.add(reportedOrigin)\n console.warn('Visual Editing is here but misconfigured', {reportedOrigin})\n toast.push({\n closable: true,\n id: `presentation-iframe-origin-mismatch-${reportedOrigin}`,\n status: 'error',\n duration: Infinity,\n title: t('preview-frame.configuration.error.title'),\n description: (\n <Translate\n t={t}\n i18nKey=\"preview-frame.configuration.error.description\"\n components={{Code: 'code'}}\n values={{\n targetOrigin: previewUrl.origin,\n reportedOrigin,\n }}\n />\n ),\n })\n })\n const navigate = usePresentationNavigate()\n const navigateEvent = useEffectEvent((url: string) => {\n if (!checkOrigin) return\n const nextUrl = new URL(url, checkOrigin)\n navigate(`${checkOrigin}${nextUrl.pathname}${nextUrl.search}${nextUrl.hash}`)\n })\n useEffect(() => {\n if (!checkOrigin) {\n return undefined\n }\n const target = ref.current?.contentWindow\n if (!target) {\n return undefined\n }\n const controller = createController({targetOrigin: checkOrigin})\n controller.addTarget(target)\n const comlink = controller.createChannel<VisualEditingControllerMsg, VisualEditingNodeMsg>(\n {\n name: 'presentation',\n heartbeat: true,\n connectTo: 'visual-editing',\n },\n createConnectionMachine<VisualEditingControllerMsg, VisualEditingNodeMsg>().provide({\n actors: createCompatibilityActors<VisualEditingControllerMsg>(),\n }),\n )\n\n comlink.on('visual-editing/navigate', (data) => {\n navigateEvent(data.url)\n })\n const stop = comlink.start()\n\n return () => {\n stop()\n controller.destroy()\n }\n }, [checkOrigin])\n useEffect(() => {\n if (overlaysConnection === 'connecting' || overlaysConnection === 'reconnecting') {\n const interval = setInterval(() => {\n ref.current?.contentWindow?.postMessage(\n {domain: 'sanity/channels', from: 'presentation', type: 'presentation/status'},\n /**\n * The targetOrigin is set to '*' intentionally here, as we need to find out if the iframe is misconfigured and has the wrong origin\n */\n '*',\n )\n }, 1_000)\n\n const controller = new AbortController()\n window.addEventListener(\n 'message',\n ({data}: MessageEvent<unknown>) => {\n /**\n * Listen for replies to presentation/status\n */\n if (\n data &&\n typeof data === 'object' &&\n 'domain' in data &&\n data.domain === 'sanity/channels' &&\n 'type' in data &&\n data.type === 'visual-editing/status' &&\n 'data' in data &&\n typeof data.data === 'object' &&\n data.data &&\n 'origin' in data.data &&\n typeof data.data.origin === 'string'\n ) {\n reportMismatchingOrigin(data.data.origin)\n }\n },\n {signal: controller.signal},\n )\n\n return () => {\n controller.abort()\n clearInterval(interval)\n }\n }\n return undefined\n }, [overlaysConnection, timedOut])\n\n return (\n <MotionConfig transition={prefersReducedMotion ? {duration: 0} : undefined}>\n <TooltipDelayGroupProvider>\n {previewHeader}\n <Card flex={1} tone=\"transparent\">\n <Flex\n align=\"center\"\n height=\"fill\"\n justify=\"center\"\n padding={(canUseViewTransition ? currentViewport : viewport) === 'desktop' ? 0 : 2}\n sizing=\"border\"\n style={{\n position: 'relative',\n cursor: iframeIsBusy ? 'wait' : undefined,\n }}\n >\n <AnimatePresence>\n {!somethingIsWrong &&\n !isLoading &&\n !isRefreshing &&\n // viewport, // using CSS View Transitions instead of framer motion to drive this\n showOverlaysConnectionStatus &&\n !continueAnyway ? (\n <MotionFlex\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n variants={spinnerVariants}\n justify=\"center\"\n align=\"center\"\n style={{\n inset: '0',\n position: 'absolute',\n backdropFilter: timedOut\n ? 'blur(16px) saturate(0.5) grayscale(0.5)'\n : 'blur(2px)',\n ['transition' as string]: 'backdrop-filter 0.2s ease-in-out',\n // @TODO Because of Safari we have to do this\n WebkitBackdropFilter: timedOut\n ? 'blur(16px) saturate(0.5) grayscale(0.5)'\n : 'blur(2px)',\n WebkitTransition: '-webkit-backdrop-filter 0.2s ease-in-out',\n zIndex: 1,\n }}\n >\n <Flex\n style={{...sizes[viewport]}}\n justify=\"center\"\n align=\"center\"\n direction=\"column\"\n gap={4}\n >\n {timedOut && (\n <Button\n disabled\n mode=\"ghost\"\n text={t('preview-frame.continue-button.text')}\n style={{opacity: 0}}\n />\n )}\n <Card\n radius={2}\n tone={timedOut ? 'caution' : 'inherit'}\n padding={4}\n shadow={1}\n >\n <Flex justify=\"center\" align=\"center\" direction=\"column\" gap={4}>\n <Spinner muted />\n <Text muted size={1}>\n {timedOut\n ? t('preview-frame.status', {context: 'timeout'})\n : t('preview-frame.status', {context: 'connecting'})}\n </Text>\n </Flex>\n </Card>\n {timedOut && (\n <Button\n // mode=\"ghost\"\n tone=\"critical\"\n onClick={handleContinueAnyway}\n text={t('preview-frame.continue-button.text')}\n />\n )}\n </Flex>\n </MotionFlex>\n ) : (isLoading || (overlaysConnection === 'connecting' && !isRefreshing)) &&\n !continueAnyway ? (\n <MotionFlex\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n variants={spinnerVariants}\n justify=\"center\"\n align=\"center\"\n style={{\n inset: '0',\n position: 'absolute',\n // boxShadow: '0 0 0 1px var(--card-shadow-outline-color)',\n }}\n >\n <Flex\n style={{...sizes[viewport]}}\n justify=\"center\"\n align=\"center\"\n direction=\"column\"\n gap={4}\n >\n <Spinner muted />\n <Text muted size={1}>\n {t('preview-frame.status', {context: 'loading'})}\n </Text>\n </Flex>\n </MotionFlex>\n ) : somethingIsWrong && !continueAnyway ? (\n <MotionFlex\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n variants={errorVariants}\n justify=\"center\"\n align=\"center\"\n style={{\n background: 'var(--card-bg-color)',\n inset: '0',\n position: 'absolute',\n }}\n >\n <ErrorCard\n flex={1}\n message={t('preview-frame.connection.error.text')}\n onRetry={handleRetry}\n onContinueAnyway={handleContinueAnyway}\n >\n {devMode && (\n <>\n {overlaysConnection !== 'connected' && (\n <Card padding={3} radius={2} tone=\"critical\">\n <Stack space={3}>\n <Label muted size={0}>\n {t('preview-frame.overlay.connection-status.label')}\n </Label>\n <Code size={1}>\n {t('channel.status', {context: overlaysConnection})}\n </Code>\n </Stack>\n </Card>\n )}\n\n {loadersConnection !== 'connected' && (\n <Card padding={3} radius={2} tone=\"critical\">\n <Stack space={3}>\n <Label muted size={0}>\n {t('preview-frame.loader.connection-status.label')}\n </Label>\n <Code size={1}>\n {t('channel.status', {context: loadersConnection})}\n </Code>\n </Stack>\n </Card>\n )}\n </>\n )}\n </ErrorCard>\n </MotionFlex>\n ) : null}\n </AnimatePresence>\n <IFrame\n animate={iframeAnimations}\n initial={['background']}\n onLoad={onIFrameLoad}\n preventClick={preventIframeInteraction}\n ref={ref}\n src={previewUrl.toString()}\n style={iframeStyle}\n variants={iframeVariants}\n />\n </Flex>\n </Card>\n </TooltipDelayGroupProvider>\n </MotionConfig>\n )\n }),\n)\nPreview.displayName = 'Memo(ForwardRef(Preview))'\n\nconst sizes = {\n desktop: {\n width: '100%',\n height: '100%',\n },\n mobile: {\n width: 375,\n height: 650,\n },\n}\n\nconst spinnerVariants = {\n initial: {opacity: 1},\n animate: {opacity: [0, 0, 1]},\n exit: {opacity: [1, 0, 0]},\n}\n\nconst errorVariants = {\n initial: {opacity: 1},\n animate: {opacity: [0, 0, 1]},\n exit: {opacity: [1, 0, 0]},\n}\n\nconst iframeVariants = {\n desktop: {\n ...sizes.desktop,\n boxShadow: '0 0 0 0px var(--card-border-color)',\n },\n mobile: {\n ...sizes.mobile,\n boxShadow: '0 0 0 1px var(--card-border-color)',\n },\n background: {\n opacity: 0,\n scale: 1,\n },\n idle: {\n scale: 1,\n },\n reloading: {\n scale: [1, 1, 1, 0.98],\n },\n active: {\n opacity: [0, 0, 1],\n scale: 1,\n },\n timedOut: {\n opacity: [0, 0, 1],\n },\n}\n","/** @internal */\nexport function defineWarnOnce() {\n let warned = false\n // oxlint-disable-next-line no-explicit-any\n return (...args: any[]): void => {\n if (!warned) {\n console.warn(...args)\n warned = true\n }\n }\n}\n","import {validateApiPerspective} from '@sanity/client'\nimport isEqual from 'fast-deep-equal'\nimport {type MutableRefObject, useCallback, useMemo, useRef, useState} from 'react'\n\nimport {type FrameState, type PresentationPerspective} from './types'\nimport {defineWarnOnce} from './util/warnOnce'\n\nexport type DocumentOnPage = {\n _id: string\n _type: string\n}\n\ntype DocumentCache = Record<string, DocumentOnPage>\ntype KeyedDocumentCache = Record<string, DocumentCache>\n\nconst warnOnceAboutCrossDatasetReference = defineWarnOnce()\n\n/**\n * @TODO should be refactored to an lru-cache that is keyed by the perspective, which could be an array (if it is, it should use consistent sorting),\n * and the url path (optionally the origin too), so that swapping between perspectives and urls is fast.\n */\nexport function useDocumentsOnPage(\n perspective: PresentationPerspective,\n frameStateRef: MutableRefObject<FrameState>,\n): [\n DocumentOnPage[],\n (key: string, perspective: PresentationPerspective, state: DocumentOnPage[]) => void,\n] {\n validateApiPerspective(perspective)\n\n const [published, setPublished] = useState<KeyedDocumentCache>({})\n const [previewDrafts, setPreviewDrafts] = useState<KeyedDocumentCache>({})\n\n // Used to compare the frame url with its value when the cache was last updated\n // If the url has changed, the entire cache is replaced\n const urlRef = useRef<string | undefined>('')\n\n const setDocumentsOnPage = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (key: string, perspective: PresentationPerspective, sourceDocuments: DocumentOnPage[] = []) => {\n const documents = sourceDocuments.filter((sourceDocument) => {\n if ('_projectId' in sourceDocument && sourceDocument._projectId) {\n // @TODO Handle cross dataset references\n\n warnOnceAboutCrossDatasetReference(\n 'Cross dataset references are not supported yet, ignoring source document',\n sourceDocument,\n )\n return false\n }\n return sourceDocument\n })\n\n const setCache = perspective === 'published' ? setPublished : setPreviewDrafts\n\n setCache((cache) => {\n // Create the `next` documents, dedupe by `_id`\n const next: Record<string, DocumentOnPage> = {}\n for (const document of documents) {\n next[document._id] = document\n }\n\n // If the frame url has changed, replace the entire cache with the next documents\n if (urlRef.current !== frameStateRef.current.url) {\n urlRef.current = frameStateRef.current.url\n return {[key]: next}\n }\n\n // If the keyed cache has changed, return the entire cache and replace the keyed part\n const prev = cache[key]\n if (!isEqual(prev, next)) {\n return {...cache, [key]: next}\n }\n\n // Otherwise return the entire cache as is\n return cache\n })\n },\n [frameStateRef],\n )\n\n const documentsOnPage = useMemo(() => {\n const keyedCache = perspective === 'published' ? published : previewDrafts\n const uniqueDocuments = Object.values(keyedCache).reduce((acc, cache) => {\n Object.values(cache).forEach((doc) => {\n acc[doc._id] = doc\n })\n return acc\n }, {})\n\n return Object.values(uniqueDocuments)\n }, [perspective, previewDrafts, published])\n\n return [documentsOnPage, setDocumentsOnPage]\n}\n","import {type ResponseQueryOptions} from '@sanity/client'\nimport {match, type Path} from 'path-to-regexp'\nimport {useEffect, useRef, useState} from 'react'\nimport {useClient, usePerspective} from 'sanity'\nimport {type RouterState, useRouter} from 'sanity/router'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {API_VERSION} from './constants'\nimport {\n type DocumentResolver,\n type DocumentResolverContext,\n type MainDocument,\n type MainDocumentState,\n type PresentationNavigate,\n} from './types'\n\n// Helper function to \"unwrap\" a result when it is either explicitly provided or\n// returned as the result of a passed function\nfunction fnOrObj<T, U>(arg: T | ((ctx: U) => T), context: U): T {\n return arg instanceof Function ? arg(context) : arg\n}\n\nfunction getQueryFromResult(\n resolver: DocumentResolver,\n context: DocumentResolverContext,\n): string | undefined {\n if (resolver.resolve) {\n const filter = resolver.resolve(context)?.filter\n return filter\n ? `// groq\n*[${filter}][0]{_id, _type}`\n : undefined\n }\n\n if ('type' in resolver) {\n return `// groq\n*[_type == \"${resolver.type}\"][0]{_id, _type}`\n }\n\n return `// groq\n*[${fnOrObj(resolver.filter, context)}][0]{_id, _type}`\n}\n\nfunction getParamsFromResult(\n resolver: DocumentResolver,\n context: DocumentResolverContext,\n): Record<string, string> {\n if (resolver.resolve) {\n return resolver.resolve(context)?.params ?? context.params\n }\n\n if ('type' in resolver) {\n return {}\n }\n\n return fnOrObj(resolver.params, context) ?? context.params\n}\n\nexport function getRouteContext(route: Path, url: URL): DocumentResolverContext | undefined {\n const routes = Array.isArray(route) ? route : [route]\n\n for (route of routes) {\n let origin: DocumentResolverContext['origin']\n let path = route\n\n // Handle absolute URLs\n if (typeof route === 'string') {\n try {\n const absolute = new URL(route)\n origin = absolute.origin\n path = absolute.pathname\n } catch {\n // Ignore, as we assume a relative path\n }\n }\n\n // If an origin has been explicitly provided, check that it matches\n if (origin && url.origin !== origin) continue\n\n try {\n const matcher = match<Record<string, string>>(path, {decode: decodeURIComponent})\n const result = matcher(url.pathname)\n if (result) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {params, path} = result\n return {origin, params, path}\n }\n } catch (e) {\n throw new Error(`\"${route}\" is not a valid route pattern`)\n }\n }\n return undefined\n}\n\nexport function useMainDocument(props: {\n navigate?: PresentationNavigate\n navigationHistory: RouterState[]\n path?: string\n targetOrigin: string\n resolvers?: DocumentResolver[]\n}): MainDocumentState | undefined {\n const {navigate, navigationHistory, path, targetOrigin, resolvers = []} = props\n const {state: routerState} = useRouter()\n const {perspectiveStack} = usePerspective()\n const client = useClient({apiVersion: API_VERSION})\n const relativeUrl =\n path || routerState._searchParams?.find(([key]) => key === 'preview')?.[1] || ''\n\n const [mainDocumentState, setMainDocumentState] = useState<MainDocumentState | undefined>(\n undefined,\n )\n const mainDocumentIdRef = useRef<string | undefined>(undefined)\n\n const handleResponse = useEffectEvent((doc: MainDocument | undefined, url: URL) => {\n if (!doc || mainDocumentIdRef.current !== doc._id) {\n setMainDocumentState({\n document: doc,\n path: url.pathname,\n })\n mainDocumentIdRef.current = doc?._id\n\n // We only want to force a navigation to the main document if\n // the path changed but the document ID did not. An explicit\n // document navigation should take precedence over displaying\n // the main document. We determine if an explicit document\n // navigation has occured by comparing the IDs of the last two\n // resultant navigation states.\n if (navigationHistory.at(-1)?.id === navigationHistory.at(-2)?.id) {\n navigate?.({\n state: {\n id: doc?._id,\n type: doc?._type,\n },\n })\n }\n }\n })\n\n useEffect(() => {\n const url = new URL(relativeUrl, targetOrigin)\n\n if (resolvers.length) {\n let result:\n | {\n context: DocumentResolverContext\n resolver: DocumentResolver\n }\n | undefined\n for (const resolver of resolvers) {\n const context = getRouteContext(resolver.route, url)\n if (context) {\n result = {context, resolver}\n break\n }\n }\n\n if (result) {\n const query = getQueryFromResult(result.resolver, result.context)\n const params = getParamsFromResult(result.resolver, result.context)\n if (query) {\n const controller = new AbortController()\n const options: ResponseQueryOptions = {\n perspective: perspectiveStack,\n signal: controller.signal,\n tag: 'use-main-document',\n }\n\n client\n .fetch<MainDocument | undefined>(query, params, options)\n .then((doc) => handleResponse(doc, url))\n .catch((e) => {\n if (e instanceof Error && e.name === 'AbortError') return\n setMainDocumentState({document: undefined, path: url.pathname})\n mainDocumentIdRef.current = undefined\n })\n return () => {\n controller.abort()\n }\n }\n }\n }\n setMainDocumentState(undefined)\n mainDocumentIdRef.current = undefined\n return undefined\n }, [client, perspectiveStack, relativeUrl, resolvers, targetOrigin])\n\n return mainDocumentState\n}\n","import {studioPath} from '@sanity/client/csm'\nimport {urlStringToPath} from '@sanity/visual-editing-csm'\n\nimport {type PresentationStateParams} from '../types'\n\nexport function parseId(rawId: string | undefined): string | undefined {\n if (rawId === undefined) {\n return undefined\n }\n\n const segments = decodeURIComponent(rawId)?.split('.')\n\n if (segments[0] === 'drafts') {\n segments.shift()\n }\n\n return segments.join('.')\n}\n\nexport function parsePath(rawPath: string | undefined): string | undefined {\n if (rawPath === undefined) {\n return undefined\n }\n\n return studioPath.toString(urlStringToPath(decodeURIComponent(rawPath)))\n}\n\nexport function parseRouterState(state: PresentationStateParams): PresentationStateParams {\n return {\n id: parseId(state.id),\n path: parsePath(state.path),\n type: state.type,\n }\n}\n","/* eslint-disable @typescript-eslint/no-shadow */\nimport {type MutableRefObject, useCallback, useLayoutEffect, useMemo, useRef, useState} from 'react'\nimport {getPublishedId} from 'sanity'\nimport {type RouterContextValue, type RouterState, type SearchParam} from 'sanity/router'\n\nimport {\n type CombinedSearchParams,\n type FrameState,\n type PresentationNavigate,\n type PresentationParamsContextValue,\n type PresentationSearchParams,\n type PresentationStateParams,\n type StructureDocumentPaneParams,\n} from './types'\nimport {parseRouterState} from './util/parse'\n\nfunction pruneObject<T extends RouterState | PresentationParamsContextValue>(obj: T): T {\n return Object.fromEntries(\n Object.entries(obj).filter(\n ([, value]) => value !== undefined && value !== '' && value !== null,\n ),\n ) as T\n}\n\n/**\n * Ensures the array contains all members of the union T.\n */\nconst exhaustiveTupleOf =\n <T>() =>\n <U extends T[]>(array: U & ([T] extends [U[number]] ? unknown : 'Invalid') & {0: T}) =>\n array\n\nconst maintainOnDocumentChange = exhaustiveTupleOf<keyof PresentationSearchParams>()([\n 'perspective',\n 'preview',\n 'viewport',\n])\n\nconst maintainOnSameDocument = exhaustiveTupleOf<keyof StructureDocumentPaneParams>()([\n 'changesInspectorTab',\n 'comment',\n 'inspect',\n 'instruction',\n 'parentRefPath',\n 'path',\n 'pathKey',\n 'rev',\n 'since',\n 'template',\n 'templateParams',\n 'version',\n 'view',\n])\n\nexport function useParams({\n initialPreviewUrl,\n routerNavigate,\n routerState,\n routerSearchParams,\n frameStateRef,\n}: {\n initialPreviewUrl: URL\n routerNavigate: RouterContextValue['navigate']\n routerState: RouterState & PresentationStateParams\n routerSearchParams: {\n [k: string]: string\n }\n frameStateRef: MutableRefObject<FrameState>\n}): {\n isSameDocument: (state: PresentationStateParams) => boolean\n navigate: PresentationNavigate\n navigationHistory: RouterState[]\n params: PresentationParamsContextValue\n searchParams: PresentationSearchParams\n structureParams: StructureDocumentPaneParams\n} {\n const params = useMemo<PresentationParamsContextValue>(() => {\n const {id, path, type} = parseRouterState(routerState)\n\n return {\n id,\n type,\n path,\n preview: routerSearchParams.preview || initialPreviewUrl.toString(),\n perspective: routerSearchParams.perspective,\n viewport: routerSearchParams.viewport,\n inspect: routerSearchParams.inspect,\n parentRefPath: routerSearchParams.parentRefPath,\n rev: routerSearchParams.rev,\n since: routerSearchParams.since,\n template: routerSearchParams.template,\n templateParams: routerSearchParams.templateParams,\n view: routerSearchParams.view,\n // assist\n pathKey: routerSearchParams.pathKey,\n instruction: routerSearchParams.instruction,\n // comments\n comment: routerSearchParams.comment,\n changesInspectorTab: routerSearchParams.changesInspectorTab as 'history' | 'review',\n }\n }, [routerState, routerSearchParams, initialPreviewUrl])\n\n const structureParams = useMemo<StructureDocumentPaneParams>(() => {\n const pruned = pruneObject({\n inspect: params.inspect,\n path: params.path,\n parentRefPath: params.parentRefPath,\n rev: params.rev,\n since: params.since,\n template: params.template,\n templateParams: params.templateParams,\n view: params.view,\n // assist\n pathKey: params.pathKey,\n instruction: params.instruction,\n // comments\n comment: params.comment,\n changesInspectorTab: params.changesInspectorTab,\n })\n return pruned\n }, [\n params.changesInspectorTab,\n params.comment,\n params.inspect,\n params.instruction,\n params.path,\n params.pathKey,\n params.parentRefPath,\n params.rev,\n params.since,\n params.template,\n params.templateParams,\n params.view,\n ])\n\n const searchParams = useMemo<PresentationSearchParams>(() => {\n const pruned = pruneObject({\n perspective: params.perspective,\n preview: params.preview,\n viewport: params.viewport,\n })\n return pruned\n }, [params.perspective, params.preview, params.viewport])\n\n const routerStateRef = useRef(routerState)\n\n useLayoutEffect(() => {\n routerStateRef.current = routerState\n }, [routerState])\n\n const [navigationHistory, setNavigationHistory] = useState<RouterState[]>([routerState])\n\n // Helper function to check if a given document is the same as the one in the\n // current router state\n const isSameDocument = useCallback(({id, type}: PresentationStateParams) => {\n const {current} = routerStateRef\n return id === current.id && type === current.type\n }, [])\n\n const navigate = useCallback<PresentationNavigate>(\n (options) => {\n const {state, params, replace = false} = options\n\n // Force navigation to use published IDs only\n if (state?.id) state.id = getPublishedId(state.id)\n\n // Get the current state and params\n const {current} = routerStateRef\n const currentState = {\n id: current.id,\n type: current.type,\n path: current.path,\n } satisfies PresentationStateParams\n const currentParams = Object.fromEntries(current._searchParams || []) as CombinedSearchParams\n\n // If state is provided, replace the current state with the provided\n // state, otherwise maintain the current state\n const nextState = state || currentState\n\n // Different params need to be maintained under different conditions\n const maintainedParamKeys = [\n ...maintainOnDocumentChange,\n ...(isSameDocument(nextState) ? maintainOnSameDocument : []),\n ] satisfies (keyof CombinedSearchParams)[]\n\n const maintainedParams = maintainedParamKeys.reduce((acc, key) => {\n // @ts-expect-error changesInspectorTab union type doesn't play nicely\n // here, if it were just a string it would be fine\n acc[key] = currentParams[key]\n return acc\n }, {} as Partial<CombinedSearchParams>)\n\n // If params are provided, merge them with the maintained params\n const nextParams = {...maintainedParams, ...params}\n\n const nextRouterState = {\n ...nextState,\n _searchParams: Object.entries(nextParams).reduce(\n (acc, [key, value]) => [...acc, [key, value] as SearchParam],\n [] as SearchParam[],\n ),\n } satisfies RouterState\n\n setNavigationHistory((prev) => [...prev, nextRouterState])\n routerNavigate(nextRouterState, {replace})\n },\n [isSameDocument, routerNavigate],\n )\n\n return {\n isSameDocument,\n navigate,\n navigationHistory,\n params,\n searchParams,\n structureParams,\n }\n}\n","import {type Controller} from '@sanity/comlink'\nimport {useCallback, useEffect, useState} from 'react'\n\nimport {POPUP_CHECK_INTERVAL} from './constants'\n\n/**\n * A hook for managing popup Window contexts\n *\n * This hook handles:\n * - Opening new popup Windows, and adding them as targets to the controller\n * - Tracking existing popup windows, and cleaning up closed popups\n *\n * @param controller - Comlink controller instance that manages communication\n * between Window contexts\n *\n * @returns An object containing:\n * - popups: A Set of currently open popup Window objects\n * - open: Function to open a new popup Window with the specified URL\n *\n */\nexport const usePopups = (\n controller?: Controller,\n): {\n popups: Set<Window>\n open: (url: string) => void\n} => {\n // State to keep track of open popup windows\n const [popups, setPopups] = useState<Set<Window>>(() => new Set())\n\n // Function to open a new popup window\n const open = useCallback((url: string) => {\n const source = window.open(url, '_blank')\n if (source) {\n setPopups((prev) => new Set(prev).add(source))\n }\n }, [])\n\n // Handles syncing the existing popups with the controller\n useEffect(() => {\n const unsubs: Array<() => void> = []\n if (popups.size && controller) {\n // loop popups and add targets\n for (const source of popups) {\n if (source && 'closed' in source && !source.closed) {\n unsubs.push(controller.addTarget(source))\n }\n }\n }\n return () => {\n unsubs.forEach((unsub) => unsub())\n }\n }, [controller, popups])\n\n // Checks for closed popups and removes them from the tracked Set\n useEffect(() => {\n if (popups.size) {\n const interval = setInterval(() => {\n const closed = new Set<Window>()\n for (const source of popups) {\n if (source && 'closed' in source && source.closed) {\n closed.add(source)\n }\n }\n if (closed.size) {\n setPopups((prev) => {\n const next = new Set(prev)\n for (const source of closed) {\n next.delete(source)\n }\n return next\n })\n }\n }, POPUP_CHECK_INTERVAL)\n\n return () => {\n clearInterval(interval)\n }\n }\n return undefined\n }, [popups])\n\n return {popups, open}\n}\n","import {usePerspective} from 'sanity'\n\nimport {type PresentationPerspective} from './types'\n\n/**\n * @internal\n */\nexport function usePresentationPerspective(): PresentationPerspective {\n const {perspectiveStack, selectedPerspectiveName = 'drafts', selectedReleaseId} = usePerspective()\n const perspective = (\n selectedReleaseId ? perspectiveStack : selectedPerspectiveName\n ) as PresentationPerspective\n return perspective\n}\n","import {type StatusEvent} from '@sanity/comlink'\nimport {useCallback, useMemo, useState} from 'react'\n\nimport {type ConnectionStatus} from './types'\n\n/**\n * A hook that manages and returns the connection status of multiple channels\n *\n * returns an array containing the\n * current status and a function to update the status based on incoming events\n *\n * The status can be one of the following:\n * - 'connected': If any channel is connected\n * - 'connecting': If the first connection is being established\n * - 'reconnecting': If a reconnection is in progress\n * - 'idle': If no connections have been made yet\n *\n * The function to update the status takes a `StatusEvent` object which includes\n * the channel and the status\n */\nexport function useStatus(): [ConnectionStatus, (event: StatusEvent) => void] {\n // State to keep track of the status of each channel\n const [statusMap, setStatusMap] = useState(\n new Map<string, {status: ConnectionStatus; hasConnected: boolean}>(),\n )\n\n // Memoized computation of the overall status based on the status of individual channels\n const memoStatus = useMemo(() => {\n const values = Array.from(statusMap.values())\n // If any channel is connected, return the `connected` status\n if (values.find(({status}) => status === 'connected')) {\n return 'connected'\n }\n // If the initial connection is being established, return `connecting` status\n const handshaking = values.filter(({status}) => status === 'connecting')\n if (handshaking.length) {\n return handshaking.some(({hasConnected}) => !hasConnected) ? 'connecting' : 'reconnecting'\n }\n // If nothing has happened yet, return `idle` status\n return 'idle'\n }, [statusMap])\n\n // Callback to update the status map based on the received event\n const setStatusFromEvent = useCallback((event: StatusEvent) => {\n setStatusMap((prev) => {\n const next = new Map(prev)\n if (event.status === 'disconnected') {\n // Remove the channel from the map if a disconnect event is received\n next.delete(event.connection)\n } else {\n // Update the status and connection flag for the channel\n const hasConnected =\n next.get(event.connection)?.hasConnected || event.status === 'connected'\n const status = event.status === 'handshaking' ? 'connecting' : event.status\n next.set(event.connection, {status, hasConnected})\n }\n return next\n })\n }, [])\n\n // Return the overall status and the function to update the status\n return [memoStatus, setStatusFromEvent]\n}\n","/* eslint-disable @typescript-eslint/no-shadow */\nimport {\n type Controller,\n createConnectionMachine,\n createController,\n type Message,\n} from '@sanity/comlink'\nimport {\n createCompatibilityActors,\n type PreviewKitNodeMsg,\n type VisualEditingControllerMsg,\n type VisualEditingNodeMsg,\n} from '@sanity/presentation-comlink'\nimport {\n urlSearchParamVercelProtectionBypass,\n urlSearchParamVercelSetBypassCookie,\n} from '@sanity/preview-url-secret/constants'\nimport {BoundaryElementProvider, Flex} from '@sanity/ui'\nimport {useActorRef, useSelector} from '@xstate/react'\nimport {lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {\n type CommentIntentGetter,\n COMMENTS_INSPECTOR_NAME,\n type SanityDocument,\n type Tool,\n useDataset,\n useProjectId,\n useUnique,\n useWorkspace,\n} from 'sanity'\nimport {type RouterContextValue, useRouter} from 'sanity/router'\nimport {styled} from 'styled-components'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {DEFAULT_TOOL_NAME, EDIT_INTENT_MODE} from './constants'\nimport PostMessageFeatures from './features/PostMessageFeatures'\nimport {presentationMachine} from './machines/presentation-machine'\nimport {type PreviewUrlRef} from './machines/preview-url'\nimport {SharedStateProvider} from './overlays/SharedStateProvider'\nimport {Panel} from './panels/Panel'\nimport {Panels} from './panels/Panels'\nimport {PresentationContent} from './PresentationContent'\nimport {PresentationNavigateProvider} from './PresentationNavigateProvider'\nimport {usePresentationNavigator} from './PresentationNavigator'\nimport {PresentationParamsProvider} from './PresentationParamsProvider'\nimport {PresentationProvider} from './PresentationProvider'\nimport {Preview} from './preview/Preview'\nimport {\n type FrameState,\n type PresentationNavigate,\n type PresentationPluginOptions,\n type PresentationStateParams,\n type PresentationViewport,\n type StructureDocumentPaneParams,\n type VisualEditingConnection,\n} from './types'\nimport {useAllowPatterns} from './useAllowPatterns'\nimport {useDocumentsOnPage} from './useDocumentsOnPage'\nimport {useMainDocument} from './useMainDocument'\nimport {useParams} from './useParams'\nimport {usePopups} from './usePopups'\nimport {usePresentationPerspective} from './usePresentationPerspective'\nimport {useStatus} from './useStatus'\nimport {useTargetOrigin} from './useTargetOrigin'\nimport {debounce} from './util/debounce'\n\nconst LiveQueries = lazy(() => import('./loader/LiveQueries'))\nconst PostMessageDocuments = lazy(() => import('./overlays/PostMessageDocuments'))\nconst PostMessageRefreshMutations = lazy(() => import('./editor/PostMessageRefreshMutations'))\nconst PostMessagePerspective = lazy(() => import('./PostMessagePerspective'))\nconst PostMessagePreviewSnapshots = lazy(() => import('./editor/PostMessagePreviewSnapshots'))\nconst PostMessageSchema = lazy(() => import('./overlays/schema/PostMessageSchema'))\nconst PostMessageTelemetry = lazy(() => import('./PostMessageTelemetry'))\n\nconst Container = styled(Flex)`\n overflow-x: auto;\n`\n\nexport default function PresentationTool(props: {\n tool: Tool<PresentationPluginOptions>\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n vercelProtectionBypass: string | null\n initialPreviewUrl: URL\n previewUrlRef: PreviewUrlRef\n}): React.JSX.Element {\n const {\n canToggleSharePreviewAccess,\n canUseSharedPreviewAccess,\n tool,\n vercelProtectionBypass,\n initialPreviewUrl,\n previewUrlRef,\n } = props\n\n const allowOrigins = useAllowPatterns(previewUrlRef)\n const targetOrigin = useTargetOrigin(previewUrlRef)\n\n const components = tool.options?.components\n const name = tool.name || DEFAULT_TOOL_NAME\n const {unstable_navigator, unstable_header} = components || {}\n\n const {navigate: routerNavigate, state: routerState} = useRouter() as RouterContextValue & {\n state: PresentationStateParams\n }\n const routerSearchParams = useUnique(Object.fromEntries(routerState._searchParams || []))\n const perspective = usePresentationPerspective()\n\n const canSharePreviewAccess = useSelector(\n previewUrlRef,\n (state) => state.context.previewMode?.shareAccess !== false,\n )\n\n const [devMode] = useState(() => {\n const option = tool.options?.devMode\n\n if (typeof option === 'function') return option()\n if (typeof option === 'boolean') return option\n\n return typeof window !== 'undefined' && window.location.hostname === 'localhost'\n })\n\n const iframeRef = useRef<HTMLIFrameElement>(null)\n\n const [controller, setController] = useState<Controller>()\n const [visualEditingComlink, setVisualEditingComlink] = useState<VisualEditingConnection | null>(\n null,\n )\n\n const frameStateRef = useRef<FrameState>({\n title: undefined,\n url: undefined,\n })\n\n const {isSameDocument, navigate, navigationHistory, params, searchParams, structureParams} =\n useParams({\n initialPreviewUrl,\n routerNavigate,\n routerState,\n routerSearchParams,\n frameStateRef,\n })\n\n const presentationRef = useActorRef(presentationMachine)\n\n const viewport = useMemo(() => (params.viewport ? 'mobile' : 'desktop'), [params.viewport])\n\n const [documentsOnPage, setDocumentsOnPage] = useDocumentsOnPage(perspective, frameStateRef)\n\n const projectId = useProjectId()\n const dataset = useDataset()\n\n const mainDocumentState = useMainDocument({\n navigate,\n navigationHistory,\n path: params.preview,\n targetOrigin,\n resolvers: tool.options?.resolve?.mainDocuments,\n })\n\n const [overlaysConnection, setOverlaysConnection] = useStatus()\n const [loadersConnection, setLoadersConnection] = useStatus()\n const [previewKitConnection, setPreviewKitConnection] = useStatus()\n\n const {open: handleOpenPopup} = usePopups(controller)\n\n const isLoading = useSelector(presentationRef, (state) => state.matches('loading'))\n\n useEffect(() => {\n const target = iframeRef.current?.contentWindow\n\n if (!target || isLoading) return undefined\n\n const controller = createController({targetOrigin})\n controller.addTarget(target)\n setController(controller)\n\n return () => {\n controller.destroy()\n setController(undefined)\n }\n }, [targetOrigin, isLoading])\n\n const handleNavigate = useEffectEvent<PresentationNavigate>((options) => {\n navigate(options)\n })\n\n useEffect(() => {\n if (!controller) return undefined\n\n const comlink = controller.createChannel<VisualEditingControllerMsg, VisualEditingNodeMsg>(\n {\n name: 'presentation',\n heartbeat: true,\n connectTo: 'visual-editing',\n },\n createConnectionMachine<VisualEditingControllerMsg, VisualEditingNodeMsg>().provide({\n actors: createCompatibilityActors<VisualEditingControllerMsg>(),\n }),\n )\n\n comlink.on('visual-editing/focus', (data) => {\n if (!('id' in data)) return\n handleNavigate({\n state: {\n type: data.type,\n id: data.id,\n path: data.path,\n },\n })\n })\n\n comlink.on('visual-editing/navigate', (data) => {\n const {title} = data\n let url = data.url\n /**\n * The URL is relative, we need to resolve it to an absolute URL\n */\n if (!url.startsWith('http')) {\n try {\n url = new URL(url, targetOrigin).toString()\n } catch {\n // ignore\n }\n }\n\n if (frameStateRef.current.url !== url) {\n try {\n // Handle bypass params being forwarded to the final URL\n const [urlWithoutSearch, search] = url.split('?')\n const searchParams = new URLSearchParams(search)\n searchParams.delete(urlSearchParamVercelProtectionBypass)\n searchParams.delete(urlSearchParamVercelSetBypassCookie)\n handleNavigate({\n params: {\n preview: `${urlWithoutSearch}${searchParams.size > 0 ? '?' : ''}${searchParams}`,\n },\n })\n } catch {\n handleNavigate({params: {preview: url}})\n }\n }\n frameStateRef.current = {title, url}\n })\n\n comlink.on('visual-editing/meta', (data) => {\n frameStateRef.current.title = data.title\n })\n\n comlink.on('visual-editing/toggle', (data) => {\n presentationRef.send({type: 'toggle visual editing overlays', enabled: data.enabled})\n })\n\n comlink.on('visual-editing/documents', (data) => {\n setDocumentsOnPage(\n 'visual-editing',\n // oxlint-disable-next-line no-explicit-any\n data.perspective as unknown as any,\n data.documents,\n )\n })\n\n // @todo This won't work for multiple window contexts?\n comlink.on('visual-editing/refreshing', (data) => {\n if (data.source === 'manual') {\n clearTimeout(refreshRef.current)\n } else if (data.source === 'mutation') {\n presentationRef.send({type: 'iframe refresh'})\n }\n })\n\n comlink.on('visual-editing/refreshed', () => {\n presentationRef.send({type: 'iframe loaded'})\n })\n\n comlink.onStatus(setOverlaysConnection)\n\n const stop = comlink.start()\n setVisualEditingComlink(comlink)\n return () => {\n stop()\n setVisualEditingComlink(null)\n }\n }, [controller, presentationRef, setDocumentsOnPage, setOverlaysConnection, targetOrigin])\n\n useEffect(() => {\n if (!controller) return undefined\n const comlink = controller.createChannel<Message, PreviewKitNodeMsg>(\n {\n name: 'presentation',\n connectTo: 'preview-kit',\n heartbeat: true,\n },\n createConnectionMachine<Message, PreviewKitNodeMsg>().provide({\n actors: createCompatibilityActors(),\n }),\n )\n\n comlink.onStatus(setPreviewKitConnection)\n\n comlink.on('preview-kit/documents', (data) => {\n if (data.projectId === projectId && data.dataset === dataset) {\n setDocumentsOnPage(\n 'preview-kit',\n // oxlint-disable-next-line no-explicit-any\n data.perspective as unknown as any,\n data.documents,\n )\n }\n })\n\n return comlink.start()\n }, [controller, dataset, projectId, setDocumentsOnPage, setPreviewKitConnection, targetOrigin])\n\n const handleFocusPath = useMemo(\n () =>\n // When moving from one field to another, blur and focus events will trigger\n // this handler. We debounce to avoid unwanted intermediate navigations this\n // would cause.\n debounce<(state: Required<PresentationStateParams>) => void>((state) => {\n // We only ever want to update the path if we are still viewing the\n // document that was active when the focus event was triggered\n if (isSameDocument(state)) {\n navigate({\n state,\n replace: true,\n })\n }\n }, 0),\n [isSameDocument, navigate],\n )\n\n const handlePreviewPath = useCallback(\n (nextPath: string) => {\n const url = new URL(nextPath, targetOrigin)\n const preview = url.toString()\n if (params.preview === preview) {\n return\n }\n if (Array.isArray(allowOrigins)) {\n if (allowOrigins.some((pattern) => pattern.test(preview))) {\n navigate({params: {preview}})\n }\n } else if (url.origin === targetOrigin) {\n navigate({params: {preview}})\n }\n },\n [targetOrigin, params.preview, allowOrigins, navigate],\n )\n\n const handleStructureParams = useCallback(\n (params: StructureDocumentPaneParams) => {\n navigate({params})\n },\n [navigate],\n )\n\n const handleEditReference = useCallback<PresentationNavigate>(\n (options) => {\n navigate(options)\n },\n [navigate],\n )\n\n // Dispatch a focus or blur message when the id or path change\n useEffect(() => {\n if (params.id && params.path) {\n visualEditingComlink?.post('presentation/focus', {id: params.id, path: params.path})\n } else {\n visualEditingComlink?.post('presentation/blur')\n }\n }, [params.id, params.path, visualEditingComlink])\n\n // Dispatch a navigation message when the preview param changes\n useEffect(() => {\n if (\n frameStateRef.current.url &&\n params.preview &&\n frameStateRef.current.url !== params.preview\n ) {\n try {\n const frameOrigin = new URL(frameStateRef.current.url, targetOrigin).origin\n const previewOrigin = new URL(params.preview, targetOrigin).origin\n if (frameOrigin !== previewOrigin) {\n return\n }\n } catch {\n // ignore\n }\n\n frameStateRef.current.url = params.preview\n if (overlaysConnection === 'connected') {\n /**\n * Translate the possibly absolute params url back to a relative URL\n */\n let url = params.preview\n if (url.startsWith('http')) {\n try {\n const newUrl = new URL(params.preview, targetOrigin)\n url = newUrl.pathname + newUrl.search + newUrl.hash\n } catch {\n // ignore\n }\n }\n visualEditingComlink?.post('presentation/navigate', {\n url,\n type: 'replace',\n })\n }\n }\n }, [overlaysConnection, targetOrigin, params.preview, visualEditingComlink])\n\n const toggleOverlay = useCallback(\n () => visualEditingComlink?.post('presentation/toggle-overlay'),\n [visualEditingComlink],\n )\n\n const [displayedDocument, setDisplayedDocument] = useState<\n Partial<SanityDocument> | null | undefined\n >(null)\n\n useEffect(() => {\n const handleKeyUp = (e: KeyboardEvent) => {\n if (isAltKey(e)) {\n toggleOverlay()\n }\n }\n const handleKeydown = (e: KeyboardEvent) => {\n if (isAltKey(e)) {\n toggleOverlay()\n }\n\n if (isHotkey(['mod', '\\\\'], e)) {\n toggleOverlay()\n }\n }\n window.addEventListener('keydown', handleKeydown)\n window.addEventListener('keyup', handleKeyUp)\n return () => {\n window.removeEventListener('keydown', handleKeydown)\n window.removeEventListener('keyup', handleKeyUp)\n }\n }, [toggleOverlay])\n\n const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)\n\n const [{navigatorEnabled, toggleNavigator}, PresentationNavigator] = usePresentationNavigator({\n unstable_navigator,\n })\n\n const refreshRef = useRef<number>(undefined)\n const handleRefresh = useCallback(\n (fallback: () => void) => {\n presentationRef.send({type: 'iframe refresh'})\n if (visualEditingComlink) {\n // We only wait 300ms for the iframe to ack the refresh request before running the fallback logic\n refreshRef.current = window.setTimeout(fallback, 300)\n visualEditingComlink.post('presentation/refresh', {\n source: 'manual',\n livePreviewEnabled:\n previewKitConnection === 'connected' || loadersConnection === 'connected',\n })\n return\n }\n fallback()\n },\n [loadersConnection, presentationRef, previewKitConnection, visualEditingComlink],\n )\n\n const workspace = useWorkspace()\n\n const getCommentIntent = useCallback<CommentIntentGetter>(\n ({id, type, path}) => {\n if (frameStateRef.current.url) {\n return {\n title: frameStateRef.current.title || frameStateRef.current.url,\n name: 'edit',\n params: {\n id,\n path,\n type,\n inspect: COMMENTS_INSPECTOR_NAME,\n workspace: workspace.name,\n mode: EDIT_INTENT_MODE,\n preview: params.preview,\n },\n }\n }\n return undefined\n },\n [params.preview, workspace.name],\n )\n\n const setViewport = useCallback(\n (next: PresentationViewport) => {\n // Omit the viewport URL search param if the next viewport state is the\n // default: 'desktop'\n const viewport = next === 'desktop' ? undefined : 'mobile'\n navigate({\n params: {viewport},\n replace: true,\n })\n },\n [navigate],\n )\n\n return (\n <>\n <PresentationProvider\n devMode={devMode}\n name={name}\n navigate={navigate}\n params={params}\n searchParams={searchParams}\n structureParams={structureParams}\n >\n <PresentationNavigateProvider navigate={navigate}>\n <PresentationParamsProvider params={params}>\n <SharedStateProvider comlink={visualEditingComlink}>\n <Container data-testid=\"presentation-root\" height=\"fill\">\n <Panels>\n <PresentationNavigator />\n <Panel\n id=\"preview\"\n minWidth={325}\n defaultSize={navigatorEnabled ? 50 : 75}\n order={3}\n >\n <Flex direction=\"column\" flex={1} height=\"fill\" ref={setBoundaryElement}>\n <BoundaryElementProvider element={boundaryElement}>\n <Preview\n // @TODO move closer to the <iframe> element itself to allow for more precise handling of when to reload the iframe and when to reconnect when the target origin changes\n // Make sure the iframe is unmounted if the targetOrigin has changed\n key={targetOrigin}\n canSharePreviewAccess={canSharePreviewAccess}\n canToggleSharePreviewAccess={canToggleSharePreviewAccess}\n canUseSharedPreviewAccess={canUseSharedPreviewAccess}\n header={unstable_header}\n initialUrl={initialPreviewUrl}\n loadersConnection={loadersConnection}\n navigatorEnabled={navigatorEnabled}\n onPathChange={handlePreviewPath}\n onRefresh={handleRefresh}\n openPopup={handleOpenPopup}\n overlaysConnection={overlaysConnection}\n previewUrl={params.preview}\n perspective={perspective}\n ref={iframeRef}\n setViewport={setViewport}\n targetOrigin={targetOrigin}\n toggleNavigator={toggleNavigator}\n toggleOverlay={toggleOverlay}\n viewport={viewport}\n vercelProtectionBypass={vercelProtectionBypass}\n presentationRef={presentationRef}\n previewUrlRef={previewUrlRef}\n />\n </BoundaryElementProvider>\n </Flex>\n </Panel>\n <PresentationContent\n documentId={params.id}\n documentsOnPage={documentsOnPage}\n documentType={params.type}\n getCommentIntent={getCommentIntent}\n mainDocumentState={mainDocumentState}\n onEditReference={handleEditReference}\n onFocusPath={handleFocusPath}\n onStructureParams={handleStructureParams}\n searchParams={searchParams}\n setDisplayedDocument={setDisplayedDocument}\n structureParams={structureParams}\n />\n </Panels>\n </Container>\n </SharedStateProvider>\n </PresentationParamsProvider>\n </PresentationNavigateProvider>\n </PresentationProvider>\n <Suspense>\n {controller && (\n <LiveQueries\n controller={controller}\n perspective={perspective}\n liveDocument={displayedDocument}\n onDocumentsOnPage={setDocumentsOnPage}\n onLoadersConnection={setLoadersConnection}\n />\n )}\n {visualEditingComlink && params.id && params.type && (\n <PostMessageRefreshMutations\n comlink={visualEditingComlink}\n id={params.id}\n type={params.type}\n loadersConnection={loadersConnection}\n previewKitConnection={previewKitConnection}\n />\n )}\n {visualEditingComlink && (\n <PostMessageSchema comlink={visualEditingComlink} perspective={perspective} />\n )}\n {visualEditingComlink && documentsOnPage.length > 0 && (\n <PostMessagePreviewSnapshots\n comlink={visualEditingComlink}\n perspective={perspective}\n refs={documentsOnPage}\n />\n )}\n {visualEditingComlink && (\n <PostMessageDocuments comlink={visualEditingComlink} perspective={perspective} />\n )}\n {visualEditingComlink && <PostMessageFeatures comlink={visualEditingComlink} />}\n {visualEditingComlink && (\n <PostMessagePerspective comlink={visualEditingComlink} perspective={perspective} />\n )}\n {visualEditingComlink && <PostMessageTelemetry comlink={visualEditingComlink} />}\n </Suspense>\n </>\n )\n}\n\n// @TODO reconcile with core utils\nfunction isAltKey(event: KeyboardEvent): boolean {\n return event.key === 'Alt'\n}\n\n// @TODO reconcile with core utils\nconst IS_MAC =\n typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform)\nconst MODIFIERS: Record<string, 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'> = {\n alt: 'altKey',\n ctrl: 'ctrlKey',\n mod: IS_MAC ? 'metaKey' : 'ctrlKey',\n shift: 'shiftKey',\n}\n// @TODO reconcile with core utils\nfunction isHotkey(keys: string[], event: KeyboardEvent): boolean {\n return keys.every((key) => {\n if (MODIFIERS[key]) {\n return event[MODIFIERS[key]]\n }\n return event.key === key.toUpperCase()\n })\n}\n","import {createPreviewSecret} from '@sanity/preview-url-secret/create-secret'\nimport {type SanityClient} from 'sanity'\nimport {fromPromise, type PromiseActorLogic} from 'xstate'\n\n/** @internal */\nexport function defineCreatePreviewSecretActor({\n client,\n currentUserId,\n}: {\n client: SanityClient\n currentUserId: string | undefined\n}): PromiseActorLogic<{\n secret: string\n expiresAt: Date\n}> {\n return fromPromise(async () => {\n return await createPreviewSecret(client, 'sanity/presentation', location.href, currentUserId)\n })\n}\n","import {fetchSharedAccessQuery} from '@sanity/preview-url-secret/constants'\nimport {type SanityClient} from 'sanity'\nimport {fromPromise, type PromiseActorLogic} from 'xstate'\n\n/** @internal */\nexport function defineReadSharedSecretActor({\n client,\n}: {\n client: SanityClient\n}): PromiseActorLogic<string | null> {\n return fromPromise(async () => {\n return client.fetch<string | null>(\n fetchSharedAccessQuery,\n {},\n {tag: 'presentation.fallback-to-shared-access-secret'},\n )\n })\n}\n","import {fromPromise, type PromiseActorLogic} from 'xstate'\n\nimport {type PreviewUrlAllowOption, type PreviewUrlAllowOptionContext} from '../types'\n\ninterface Context extends Pick<PreviewUrlAllowOptionContext, 'client'> {\n allowOption: PreviewUrlAllowOption | undefined\n}\ntype Input = Omit<PreviewUrlAllowOptionContext, 'client' | 'origin'>\n\n/** @internal */\nexport function defineResolveAllowPatternsActor({\n client,\n allowOption,\n}: Context): PromiseActorLogic<URLPattern[], Input> {\n return fromPromise<URLPattern[], Input>(async ({input}) => {\n const {initialUrl} = input\n\n /**\n * Lazy load the URLPattern polyfill on-demand, if needed\n */\n if (typeof URLPattern === 'undefined') {\n await import('urlpattern-polyfill')\n }\n\n /**\n * If no allow option is provided, we use the initial URL to infer the pattern\n */\n if (!allowOption) {\n return [new URLPattern(initialUrl.origin)]\n }\n\n const maybePatterns =\n typeof allowOption === 'function'\n ? await allowOption({client, origin, initialUrl})\n : allowOption\n const patterns = Array.isArray(maybePatterns) ? maybePatterns : [maybePatterns]\n const urlPatterns = patterns.map((value) => {\n const urlPattern = new URLPattern(value)\n if (urlPattern.hostname === '*') {\n throw new Error(\n `It's insecure to allow any hostname, it could disclose data to a malicious site`,\n )\n }\n return urlPattern\n })\n /**\n * If the declared patterns don't consider the initial URL valid, we add it to the list of patterns\n */\n if (!urlPatterns.some((pattern) => pattern.test(initialUrl.origin))) {\n return [...urlPatterns, new URLPattern(initialUrl.origin)]\n }\n\n return urlPatterns\n })\n}\n","import {type SanityClient} from 'sanity'\nimport {fromPromise, type PromiseActorLogic} from 'xstate'\n\nimport {type PresentationPerspective, type PreviewUrlOption} from '../types'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\n\n/** @internal */\nexport function defineResolveInitialUrlActor({\n client,\n studioBasePath,\n previewUrlOption,\n perspective,\n}: {\n client: SanityClient\n studioBasePath: string\n previewUrlOption: PreviewUrlOption | undefined\n perspective: PresentationPerspective\n}): PromiseActorLogic<URL, {previewSearchParam: string | null}> {\n return fromPromise<URL, {previewSearchParam: string | null}>(\n async ({input}: {input: {previewSearchParam: string | null}}) => {\n const {origin} = location\n /**\n * If the previewUrlOption is a function, we need to resolve it and maintain backwards compatibility\n */\n if (typeof previewUrlOption === 'function') {\n const initial = await previewUrlOption({\n client,\n studioBasePath,\n // @TODO handle checking permissions here, and then generating a secret\n previewUrlSecret: '',\n studioPreviewPerspective: encodeStudioPerspective(perspective),\n previewSearchParam: input.previewSearchParam,\n })\n return new URL(initial, origin)\n }\n\n /**\n * Provide backwards compatibility for versions where `previewUrl` where optional\n */\n if (!previewUrlOption) {\n return new URL('/', origin)\n }\n /**\n * Support setting `previewUrl` as a string shorthand\n */\n if (typeof previewUrlOption === 'string') {\n return new URL(previewUrlOption, origin)\n }\n\n if (typeof previewUrlOption.initial === 'function') {\n const initial = await previewUrlOption.initial({\n client,\n origin,\n })\n return new URL(initial, origin)\n }\n\n if (typeof previewUrlOption.initial === 'string') {\n return new URL(previewUrlOption.initial, origin)\n }\n\n return new URL(previewUrlOption.preview || '/', previewUrlOption.origin || origin)\n },\n )\n}\n","import {fromPromise, type PromiseActorLogic} from 'xstate'\n\nimport {\n type PreviewUrlOption,\n type PreviewUrlPreviewMode,\n type PreviewUrlPreviewModeOptionContext,\n} from '../types'\n\ntype Options = Omit<PreviewUrlPreviewModeOptionContext, 'origin'>\n\ninterface Context extends Pick<Options, 'client'> {\n previewUrlOption: PreviewUrlOption | undefined\n}\ntype Input = Omit<Options, 'client'>\n\n/** @internal */\nexport function defineResolvePreviewModeActor({\n client,\n previewUrlOption,\n}: Context): PromiseActorLogic<PreviewUrlPreviewMode | false, Input> {\n return fromPromise<PreviewUrlPreviewMode | false, Input>(async ({input}) => {\n const {targetOrigin} = input\n\n /**\n * Handle legacy draftMode options\n */\n if (typeof previewUrlOption === 'object' && previewUrlOption?.draftMode) {\n return {\n enable: previewUrlOption.draftMode.enable,\n shareAccess: previewUrlOption.draftMode.shareAccess ?? true,\n }\n }\n\n /**\n * If no preview mode option is provided, we disable preview mode\n */\n if (\n !previewUrlOption ||\n typeof previewUrlOption === 'string' ||\n typeof previewUrlOption === 'function' ||\n !previewUrlOption.previewMode\n ) {\n return false\n }\n\n /**\n * If the option is a function, we resolve it\n */\n const previewMode =\n typeof previewUrlOption.previewMode === 'function'\n ? await previewUrlOption.previewMode({client, origin, targetOrigin})\n : previewUrlOption.previewMode\n\n if (previewMode === false) {\n return false\n }\n\n /**\n * Return only supported preview mode options, filter out unknowns\n */\n return {\n enable: previewMode.enable,\n shareAccess: previewMode.shareAccess ?? true,\n }\n })\n}\n","import {\n urlSearchParamPreviewPathname,\n urlSearchParamPreviewPerspective,\n urlSearchParamPreviewSecret,\n} from '@sanity/preview-url-secret/constants'\nimport {type SanityClient} from 'sanity'\nimport {fromPromise, type PromiseActorLogic} from 'xstate'\n\nimport {\n type PresentationPerspective,\n type PreviewUrlOption,\n type PreviewUrlPreviewMode,\n} from '../types'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\n\n/** @internal */\nexport interface ResolvePreviewModeUrlInput {\n previewUrlSecret: string\n resolvedPreviewMode: PreviewUrlPreviewMode\n initialUrl: URL\n}\n\n/** @internal */\nexport function defineResolvePreviewModeUrlActor({\n client,\n studioBasePath,\n previewUrlOption,\n perspective,\n}: {\n client: SanityClient\n studioBasePath: string\n previewUrlOption: PreviewUrlOption | undefined\n perspective: PresentationPerspective\n}): PromiseActorLogic<URL, ResolvePreviewModeUrlInput> {\n return fromPromise<URL, ResolvePreviewModeUrlInput>(async ({input}) => {\n const {previewUrlSecret, resolvedPreviewMode, initialUrl} = input\n\n /**\n * If the previewUrlOption is a function, we need to resolve it and maintain backwards compatibility\n */\n if (typeof previewUrlOption === 'function') {\n const initial = await previewUrlOption({\n client,\n studioBasePath,\n previewUrlSecret,\n studioPreviewPerspective: encodeStudioPerspective(perspective),\n previewSearchParam: initialUrl.toString(),\n })\n return new URL(initial, initialUrl)\n }\n\n /**\n * If the resolved preview mode is false then we have an unexpected state that shouldn't be possible\n */\n if (!resolvedPreviewMode) {\n throw new Error('Resolved preview mode is false')\n }\n\n const url = new URL(resolvedPreviewMode.enable, initialUrl)\n\n url.searchParams.set(urlSearchParamPreviewSecret, previewUrlSecret)\n url.searchParams.set(urlSearchParamPreviewPerspective, encodeStudioPerspective(perspective))\n if (initialUrl.pathname !== url.pathname) {\n url.searchParams.set(\n urlSearchParamPreviewPathname,\n `${initialUrl.pathname}${initialUrl.search}${initialUrl.hash}`,\n )\n }\n\n return url\n })\n}\n","import {fromPromise} from 'xstate'\n\n/** @internal */\nexport const resolveUrlFromPreviewSearchParamActor = fromPromise<\n URL,\n {initialUrl: URL; previewSearchParam: string | null | undefined; allowOrigins: URLPattern[]}\n>(async ({input}) => {\n const {previewSearchParam, initialUrl, allowOrigins} = input\n\n /**\n * If the preview search param is falsy we can skip\n */\n if (!previewSearchParam) {\n return initialUrl\n }\n\n /**\n * Validate the previewSearchParam\n */\n try {\n const previewSearchParamUrl = new URL(previewSearchParam, initialUrl.origin)\n if (!allowOrigins.some((pattern) => pattern.test(previewSearchParamUrl.origin))) {\n return initialUrl\n }\n return previewSearchParamUrl\n } catch (err) {\n return initialUrl\n }\n})\n","import {\n schemaIdSingleton,\n schemaType,\n schemaTypeSingleton,\n} from '@sanity/preview-url-secret/constants'\nimport {type SanityDocument} from '@sanity/types'\nimport {uuid} from '@sanity/uuid'\nimport {throwError} from 'rxjs'\nimport {type DocumentValuePermission, type PermissionCheckResult} from 'sanity'\nimport {type ActorRefFrom, assign, fromObservable, fromPromise, log, setup} from 'xstate'\n\nimport {type ResolvePreviewModeUrlInput} from '../actors/resolve-preview-mode-url'\nimport {resolveUrlFromPreviewSearchParamActor} from '../actors/resolve-url-from-preview-search-param'\nimport {type PreviewUrlPreviewMode} from '../types'\n\ninterface Context {\n initialUrl: URL | null\n previewUrl: URL | null\n allowOrigins: URLPattern[] | null\n error: Error | null\n previewSearchParam: string | null\n previewUrlSecret: {secret: string; expiresAt: Date} | null\n previewAccessSharingCreatePermission: PermissionCheckResult | null\n previewAccessSharingReadPermission: PermissionCheckResult | null\n previewAccessSharingUpdatePermission: PermissionCheckResult | null\n previewUrlSecretPermission: PermissionCheckResult | null\n previewMode: PreviewUrlPreviewMode | null\n}\n\ntype SetPreviewSearchParamEvent = {\n type: 'set preview search param'\n previewSearchParam: string | null\n}\ntype Event = SetPreviewSearchParamEvent\n\ntype Input = Omit<SetPreviewSearchParamEvent, 'type'>\n\nexport interface CheckPermissionInput {\n checkPermissionName: DocumentValuePermission\n document: Partial<SanityDocument> | null\n}\n\n/**\n * Used for permissions checks\n */\nexport const shareAccessSingletonDocument = {_id: schemaIdSingleton, _type: schemaTypeSingleton}\nexport const previewUrlSecretDocument = {\n _id: `drafts.${uuid()}`,\n _type: schemaType,\n}\n\nexport const previewUrlMachine = setup({\n types: {} as {\n context: Context\n events: Event\n input: Input\n tags: 'busy' | 'error'\n },\n actions: {\n 'notify preview will likely fail': log(\n `Missing permissions to create preview secret, or read shared preview secret. Preview will likely fail loading.`,\n ),\n 'assign preview search param': assign({\n previewSearchParam: (_, params: {previewSearchParam: string | null}) =>\n params.previewSearchParam,\n }),\n 'assign error': assign({\n error: (_, params: {message: string; error: unknown}) => {\n return params.error instanceof Error\n ? params.error\n : new Error(params.message, {cause: params.error})\n },\n }),\n },\n actors: {\n 'check permission': fromObservable<PermissionCheckResult, CheckPermissionInput>(() =>\n throwError(\n () =>\n new Error(\n `The 'check permission' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'check permission': fromObservable(({input}: {input: CheckPermissionInput}) => ...)}})`,\n ),\n ),\n ),\n 'resolve initial url': fromPromise<URL, {previewSearchParam: string | null}>(() =>\n Promise.reject(\n new Error(\n `The 'resolve initial url' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'resolve initial url': fromPromise(...)}})`,\n ),\n ),\n ),\n 'resolve allow patterns': fromPromise<URLPattern[], {initialUrl: URL}>(() =>\n Promise.reject(\n new Error(\n `The 'resolve allow patterns' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'resolve allow pattern': fromPromise(...)}})`,\n ),\n ),\n ),\n 'resolve url from preview search param': resolveUrlFromPreviewSearchParamActor,\n 'resolve preview mode': fromPromise<PreviewUrlPreviewMode | false, {targetOrigin: string}>(() =>\n Promise.reject(\n new Error(\n `The 'resolve preview mode' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'resolve preview mode': fromPromise(...)}})`,\n ),\n ),\n ),\n 'create preview secret': fromPromise<{\n secret: string\n expiresAt: Date\n }>(async () =>\n Promise.reject(\n new Error(\n `The 'create preview secret' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'create preview secret': fromPromise(...)}})`,\n ),\n ),\n ),\n 'read shared preview secret': fromPromise<string | null>(async () =>\n Promise.reject(\n new Error(\n `The 'read shared preview secret' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'read shared preview secret': fromPromise(...)}})`,\n ),\n ),\n ),\n 'resolve preview mode url': fromPromise<URL, ResolvePreviewModeUrlInput>(() =>\n Promise.reject(\n new Error(\n `The 'resolve preview mode url' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'resolve preview mode url': fromPromise(...)}})`,\n ),\n ),\n ),\n },\n guards: {\n 'has checked permissions': ({context}) => {\n return Boolean(\n context.previewAccessSharingCreatePermission &&\n context.previewAccessSharingReadPermission &&\n context.previewAccessSharingUpdatePermission &&\n context.previewUrlSecretPermission,\n )\n },\n 'search param has new origin': ({context, event}) => {\n if (!context.previewUrl || !event.previewSearchParam) {\n return false\n }\n try {\n const previewSearchParamUrl = new URL(event.previewSearchParam, context.previewUrl)\n return context.previewUrl.origin !== previewSearchParamUrl.origin\n } catch {\n return false\n }\n },\n 'can create preview secret': ({context}) => {\n return context.previewUrlSecretPermission?.granted === true\n },\n\n 'has preview mode with created secret': ({context}, params: PreviewUrlPreviewMode | false) => {\n if (params === false) {\n return false\n }\n return context.previewUrlSecretPermission?.granted === true\n },\n 'has preview mode with share access': ({context}, params: PreviewUrlPreviewMode | false) => {\n if (params === false) {\n return false\n }\n return context.previewAccessSharingReadPermission?.granted === true\n },\n 'has preview mode without permissions': ({context}, params: PreviewUrlPreviewMode | false) => {\n if (params === false) {\n return false\n }\n return (\n context.previewAccessSharingReadPermission?.granted === false &&\n context.previewUrlSecretPermission?.granted === false\n )\n },\n },\n delays: {\n expiredSecret: ({context}) => {\n if (!context.previewUrlSecret?.expiresAt) {\n return 0\n }\n const now = Date.now()\n const expiresAt = context.previewUrlSecret.expiresAt.getTime()\n return Math.max(expiresAt - now, 0)\n },\n },\n}).createMachine({\n // eslint-disable-next-line tsdoc/syntax\n /** @xstate-layout N4IgpgJg5mDOIC5QAUBOYBuBLMB3ABAKoBKAMgMRiqoD2qAdAA4A2AhgC4BmdAtvWphwESpBFgB2GGgGMOWGuIDaABgC6K1YlCMasLO3nitIAB6IArAA56AZgCcAdkcBGS8vMAmO+YBszgDQgAJ6Izs4+9M7KACzKztGWHg4OPubmAL7pgQLYeERklNR0TGxcvPzoucJkYpIycgqKzupqxjp6BgrGZggAtM520ZHRdjZjNjFe7oEhCGERUbHxicmpGVkgOUL5FFS0DCwc3Kh8W3kitVKynUoeLZpIIO36ht2IvV62Hl7elmE2lh83xmoXCkRicQSSRS5gSmWylW2IkK+xKR3KZ2qogkVwaShs9zauheXUePV6gPo3jSUyi-xBczBi0hKxh5mc8M2iPOBVgYHY+EY3IIfNYqGkAAtBWLWDwNESOq8yaCbM56A4bB5fGllHYvD4fAz4h56CNfG5LKqHMpLdFOZidvRJWBpABrCRQZBUHhYWB6BSwcjyx7PG5vPrs5TqjWqyyjTXRDwMjwxei68J2ZQ2nyWXN2jYOkT0dCwGjMbDiKAASXEL1YzEIqGY5AgCjA9BxNFd7cLZGLcDLFertYM9cbzEu9RuGmD2mJYeVfRGdipyh86Yc0XiE3MDK3JssIwcrmtPjGSXzCMEPNI-dL5Y9NbrDabKOKhzKJwq16xd8Hj5HLAxybSdrkMGdWhDeclVAclN3odlzBsKwBjSSxjwcZM7DVeJ1w8P4xmidk7HtYVHRLf9KwAQWYZgaFwZAOHYKhxEDVtxHbTtu2-KpyIHB9qNo+jGPYZjUFY0C8Qgh450VUlYPedkHHoHwnDSZDVOiGwfGiBlUhXXwwjsQYtKSYzSJ-Pj7yHGi6IYpiWMDPZ31KY5TjIosKIEqBbOEhzxNgSTpzUWcnmg+TTHePV6Hw3MYgzaItJ0hlYRNTNkLiHxBl1GILN4zz+KHccADFaB4TEAGUwDFSVGNQWUWzbDs6m43tby8oqm1KmhyuFKqaolOrZSC8CQsg2SSSMRdel8ZSNUTdlcw8M07AZQZrDXdaDRtUZnHWK98r7DqPRKsrKuq8VBplHg3wOVyMQ8o7CpOrqzr6i7auukbGjGmSwrkqaFL6MJlLiWFlC1EGty0hknAiXVVPMRx12UJwOQLR72ueytMQAWRoCAwEajjmqkVrMb-by8YJsBvqUX6FUm8Nem2+hbWPUZErGTcjS8NUJg8AE9T1ZwHHwvKkSe6yPWpwnic4lqewp46ceFfHCbpmdmkZhcgZmyxzFsDmTPcXUUiNRKDy3ZQJlVLSkYlm9KaHWWifYhWyaVyyCul1Wf3V2nOzAn71DuHWYMivovGsBxPCy74beWaJDWCUJzBSFTrUcQYdMzIFHd-FXPTVmn5dJrsvcOrHfeL-2ac1kKCXDiLyWcNKJiiHM-BtONwgtnMEM1DVNwhhI7B8AurMo2uqgD260U-dzval6fXYbwkoIB5moijLLkm5tvYRBo1nGQtND11ZaIdzEiMeX6vV5LuW+QFIVLNFS7pXquVxv+pnF1FtYP4OY7AG3QohJMqcEDeGUq4NwYQBhLEnkWWAABXaQ0g4CBhfoKMiH9JRf1lKFUMEceiizVPA0+7gtQQy8LzXU6obaJTFtEJwHhXDIL7G-WepccHcO2PgqUjBrrEPCoDSOFI3C2AGHtQ8sIiJJGTILZS7JRaeGSKw7CnDbz8LwAHJ06AOBgHOtIdA7Ay5cUrpLHRT92ymOqsxExZj16iK3gAqI6oaQ6QtE4YylhkynzmkCBGNgNR7VvgdaxTBbEGIccY969jzHOTuuiL8bVol10JrEoxTj+QuN-iQlu7xwjKX1P8bSTC0hGhcKaBIOZAQGkBKE7RGSeFZMMRACqEoxRgCohgrBFjFY8Sibo3A+iOldJ6X0zBfp8l-UKeIshjgqTGTiPYPaGotS7igd8QWtgsp6iQnFOEd8q6tKEOM6qnTunoGmQM5JC83LDKdqMy5rBrlTP6bMoOUkGab3-kDU+ERVEpnsEjDRVSdljBXKeQY3h5gOBaa8mmzt4k-nHIMz2zzfzIvaYVNFVRxxzObosxAfg1Q2jSOERIh5kIBNGKaNZ2lvjhFhEimJHUCVCAxQ8j8Tz0m4vbJyzERKfnBQ3hNXWkdyWeJsCMVhqNsK6mTO4Q2Q9DysLCEhDw7LMntjQV8wMJhYDsCMfQVgnAxIAAowAmEYFgdAnSXRmIAJTkAFTEg1MzYCuIBZHKYKlUiqWwrCMJkDZgDAYceRMfwUisPYZYTIGxxA03gI8NqJLmZ6msKqENcjErqIZL0cethvDGXLew9hiYWnOjdDLb0vp-SsUzdNcwEMEJ7WTohDMfgU4RpTCpUJnhYrHghuEFpRcnyjhfMwFtet2Q2FNOwsWZarBan8TsuMkRvhIzPJGDwmkWnJLnf6g0aZl0mQTURDdsxYiGwwsRIEgwEwTuxj5IS9lRKORPeSJCOF4XgrUZqbZsxwZszcJtbC4RUg2FfTXU6PVzoDSGjwH9ik-gxRGG4NtxkkZblhgyxIhFQG5lSPEODj89VoYjKqGKURkij0zImXSUCwiozZuDLUCQQY6tOVEr1WDqMsxNCkP4RFPBZj+I4I0qoRMODjIlceBzkK6raWAIT7DDZlNPhUuVkKI0pEXbHBISF1yAiIqpi5KL7E5ISWYoTna2b6Qg+DcFN7EAphLdpdOWVoPJ0RXxl5HKrmTNuYahzaQviaQPVERa8mlGeBUnnQyDStSwcCzi4L1kuV4HHNR4DCFdRaVVFSzcZ4VVIVsDEVhZ5QnWlYZZvRKLj3-KlT0FIKjVRZghkCXwqkjQGzVFxvOMisoWYy46QV9ABN+mo3mFZZ427lp032jzVa2bJGtCUtciak1AA */\n id: 'Preview URL',\n context: ({input}) => ({\n initialUrl: null,\n previewUrl: null,\n error: null,\n allowOrigins: null,\n previewSearchParam: input.previewSearchParam,\n previewUrlSecret: null,\n previewAccessSharingCreatePermission: null,\n previewAccessSharingReadPermission: null,\n previewAccessSharingUpdatePermission: null,\n previewUrlSecretPermission: null,\n previewMode: null,\n }),\n\n invoke: [\n {\n src: 'check permission',\n input: () => ({checkPermissionName: 'read', document: shareAccessSingletonDocument}),\n onError: {\n target: '.error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to check permission',\n error: event.error,\n }),\n },\n },\n onSnapshot: {\n actions: assign({\n previewAccessSharingReadPermission: ({event}) => event.snapshot.context ?? null,\n }),\n },\n },\n {\n src: 'check permission',\n input: () => ({checkPermissionName: 'create', document: shareAccessSingletonDocument}),\n onError: {\n target: '.error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to check permission',\n error: event.error,\n }),\n },\n },\n onSnapshot: {\n actions: assign({\n previewAccessSharingCreatePermission: ({event}) => event.snapshot.context ?? null,\n }),\n },\n },\n {\n src: 'check permission',\n input: () => ({checkPermissionName: 'update', document: shareAccessSingletonDocument}),\n onError: {\n target: '.error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to check permission',\n error: event.error,\n }),\n },\n },\n onSnapshot: {\n actions: assign({\n previewAccessSharingUpdatePermission: ({event}) => event.snapshot.context ?? null,\n }),\n },\n },\n {\n src: 'check permission',\n input: () => ({checkPermissionName: 'create', document: previewUrlSecretDocument}),\n onError: {\n target: '.error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to check permission',\n error: event.error,\n }),\n },\n },\n onSnapshot: {\n actions: assign({\n previewUrlSecretPermission: ({event}) => event.snapshot.context ?? null,\n }),\n },\n },\n ],\n\n on: {\n 'set preview search param': {\n actions: {\n type: 'assign preview search param',\n params: ({event}) => ({previewSearchParam: event.previewSearchParam}),\n },\n },\n },\n\n states: {\n checkingPermissions: {\n always: {\n guard: 'has checked permissions',\n target: 'resolvingInitialUrl',\n },\n tags: 'busy',\n },\n\n resolvingInitialUrl: {\n invoke: {\n src: 'resolve initial url',\n input: ({context}) => ({previewSearchParam: context.previewSearchParam}),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve initial url',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvingAllowPatterns',\n actions: assign({initialUrl: ({event}) => event.output}),\n },\n },\n\n tags: 'busy',\n },\n\n error: {\n type: 'final',\n tags: 'error',\n },\n\n resolvingAllowPatterns: {\n invoke: {\n src: 'resolve allow patterns',\n input: ({context}) => ({initialUrl: context.initialUrl!}),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve preview url allow patterns',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvingUrlFromPreviewSearchParam',\n actions: assign({allowOrigins: ({event}) => event.output}),\n },\n },\n tags: ['busy'],\n },\n\n resolvingUrlFromPreviewSearchParam: {\n id: 'loop',\n invoke: {\n src: 'resolve url from preview search param',\n input: ({context}) => ({\n initialUrl: context.initialUrl!,\n allowOrigins: context.allowOrigins!,\n previewSearchParam: context.previewSearchParam,\n }),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve preview url from search param',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvingPreviewMode',\n actions: assign({initialUrl: ({event}) => event.output}),\n },\n },\n tags: ['busy'],\n },\n\n resolvingPreviewMode: {\n on: {\n 'set preview search param': {\n guard: 'search param has new origin',\n actions: {\n type: 'assign preview search param',\n params: ({event}) => ({previewSearchParam: event.previewSearchParam}),\n },\n target: '#loop',\n reenter: true,\n },\n },\n invoke: {\n src: 'resolve preview mode',\n input: ({context}) => ({targetOrigin: context.initialUrl!.origin}),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve preview url allow patterns',\n error: event.error,\n }),\n },\n },\n onDone: [\n {\n guard: {\n type: 'has preview mode with created secret',\n params: ({event}) => event.output,\n },\n actions: assign({\n previewMode: ({event}) => event.output as unknown as PreviewUrlPreviewMode,\n }),\n target: 'previewMode.createPreviewSecret',\n },\n {\n guard: {\n type: 'has preview mode with share access',\n params: ({event}) => event.output,\n },\n actions: assign({\n previewMode: ({event}) => event.output as unknown as PreviewUrlPreviewMode,\n }),\n target: 'previewMode.readShareAccess',\n },\n {\n guard: {\n type: 'has preview mode without permissions',\n params: ({event}) => event.output,\n },\n actions: [\n assign({\n previewUrl: ({context}) => context.initialUrl,\n }),\n 'notify preview will likely fail',\n ],\n target: 'success',\n },\n {\n actions: assign({\n previewUrl: ({context}) => context.initialUrl,\n }),\n target: 'success',\n },\n ],\n },\n tags: ['busy'],\n },\n\n success: {\n on: {\n 'set preview search param': {\n guard: 'search param has new origin',\n actions: {\n type: 'assign preview search param',\n params: ({event}) => ({previewSearchParam: event.previewSearchParam}),\n },\n target: '#loop',\n reenter: true,\n },\n },\n },\n\n previewMode: {\n on: {\n 'set preview search param': {\n guard: 'search param has new origin',\n actions: {\n type: 'assign preview search param',\n params: ({event}) => ({previewSearchParam: event.previewSearchParam}),\n },\n target: '#loop',\n reenter: true,\n },\n },\n\n states: {\n createPreviewSecret: {\n invoke: {\n src: 'create preview secret',\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to create preview secret',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvePreviewUrl',\n actions: assign({previewUrlSecret: ({event}) => event.output}),\n },\n },\n tags: ['busy'],\n },\n readShareAccess: {\n invoke: {\n src: 'read shared preview secret',\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to read shared preview secret',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvePreviewUrl',\n actions: assign({\n previewUrlSecret: ({event}) => ({\n secret: event.output!,\n expiresAt: new Date(Date.now() + 1000 * 60 * 60 * 60 * 24),\n }),\n }),\n },\n },\n tags: ['busy'],\n },\n resolvePreviewUrl: {\n invoke: {\n src: 'resolve preview mode url',\n input: ({context}) => ({\n initialUrl: context.initialUrl!,\n resolvedPreviewMode: context.previewMode!,\n previewUrlSecret: context.previewUrlSecret!.secret,\n }),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve preview url',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'success',\n actions: assign({previewUrl: ({event}) => event.output}),\n },\n },\n tags: ['busy'],\n },\n error: {\n type: 'final',\n tags: ['error'],\n },\n success: {\n after: {\n expiredSecret: {\n guard: 'can create preview secret',\n actions: assign({previewUrlSecret: null}),\n target: 'createPreviewSecret',\n reenter: true,\n },\n },\n },\n },\n initial: 'readShareAccess',\n },\n },\n\n initial: 'checkingPermissions',\n})\nexport type PreviewUrlRef = ActorRefFrom<typeof previewUrlMachine>\n","import {useToast} from '@sanity/ui'\nimport {useActorRef, useSelector} from '@xstate/react'\nimport {useEffect} from 'react'\nimport {useActiveWorkspace, useClient, useCurrentUser, useGrantsStore, useTranslation} from 'sanity'\nimport {useRouter} from 'sanity/router'\nimport {fromObservable} from 'xstate'\n\nimport {defineCreatePreviewSecretActor} from './actors/create-preview-secret'\nimport {defineReadSharedSecretActor} from './actors/read-shared-secret'\nimport {defineResolveAllowPatternsActor} from './actors/resolve-allow-patterns'\nimport {defineResolveInitialUrlActor} from './actors/resolve-initial-url'\nimport {defineResolvePreviewModeActor} from './actors/resolve-preview-mode'\nimport {defineResolvePreviewModeUrlActor} from './actors/resolve-preview-mode-url'\nimport {API_VERSION} from './constants'\nimport {presentationLocaleNamespace} from './i18n'\nimport {previewUrlMachine, type PreviewUrlRef} from './machines/preview-url'\nimport {type PreviewUrlAllowOption, type PreviewUrlOption} from './types'\nimport {usePresentationPerspective} from './usePresentationPerspective'\n\nexport function usePreviewUrlActorRef(\n previewUrlOption: PreviewUrlOption | undefined,\n allowOption: PreviewUrlAllowOption | undefined,\n): PreviewUrlRef {\n const grantsStore = useGrantsStore()\n const client = useClient({apiVersion: API_VERSION})\n const currentUser = useCurrentUser()\n const currentUserId = currentUser?.id\n const workspace = useActiveWorkspace()\n const studioBasePath = workspace?.activeWorkspace?.basePath || '/'\n const router = useRouter()\n const routerSearchParams = new URLSearchParams(router.state._searchParams)\n const previewSearchParam = routerSearchParams.get('preview')\n const {push: pushToast} = useToast()\n const {t} = useTranslation(presentationLocaleNamespace)\n const perspective = usePresentationPerspective()\n\n const actorRef = useActorRef(\n previewUrlMachine.provide({\n actions: {\n 'notify preview will likely fail': () =>\n pushToast({\n id: 'preview-url-secret.missing-grants',\n closable: true,\n status: 'error',\n duration: Infinity,\n title: t('preview-url-secret.missing-grants'),\n }),\n },\n actors: {\n 'create preview secret': defineCreatePreviewSecretActor({client, currentUserId}),\n 'read shared preview secret': defineReadSharedSecretActor({client}),\n 'resolve allow patterns': defineResolveAllowPatternsActor({\n client,\n allowOption,\n }),\n 'resolve initial url': defineResolveInitialUrlActor({\n client,\n studioBasePath,\n previewUrlOption,\n perspective,\n }),\n 'resolve preview mode': defineResolvePreviewModeActor({\n client,\n previewUrlOption,\n }),\n 'resolve preview mode url': defineResolvePreviewModeUrlActor({\n client,\n studioBasePath,\n previewUrlOption,\n perspective,\n }),\n 'check permission': fromObservable(({input}) =>\n grantsStore.checkDocumentPermission(input.checkPermissionName, input.document),\n ),\n },\n }),\n {input: {previewSearchParam}},\n )\n\n /**\n * Sync changes to router state for the preview search param\n */\n useEffect(() => {\n actorRef.send({type: 'set preview search param', previewSearchParam})\n }, [actorRef, previewSearchParam])\n\n const error = useSelector(actorRef, (state) =>\n state.status === 'error' ? state.error : state.hasTag('error') ? state.context.error : null,\n )\n\n // Propagate the error to the nearest error boundary\n if (error) throw error\n\n return actorRef\n}\n","import {useToast} from '@sanity/ui'\nimport {useSelector} from '@xstate/react'\nimport {useEffect} from 'react'\nimport {Translate, useTranslation} from 'sanity'\nimport {useRouter} from 'sanity/router'\n\nimport {presentationLocaleNamespace} from './i18n'\nimport {type PreviewUrlRef} from './machines/preview-url'\n\nexport function useReportInvalidPreviewSearchParam(previewUrlRef: PreviewUrlRef): void {\n const {t} = useTranslation(presentationLocaleNamespace)\n const {push: pushToast} = useToast()\n const router = useRouter()\n const routerSearchParams = new URLSearchParams(router.state._searchParams)\n const previewSearchParam = routerSearchParams.get('preview')\n\n const allowOrigins = useSelector(previewUrlRef, (state) => state.context.allowOrigins)\n const currentOrigin = useSelector(previewUrlRef, (state) => state.context.previewUrl?.origin)\n useEffect(() => {\n if (!Array.isArray(allowOrigins) || !previewSearchParam || !currentOrigin) return\n const nextOrigin = new URL(previewSearchParam, currentOrigin).origin\n if (!allowOrigins.some((pattern) => pattern.test(nextOrigin))) {\n pushToast({\n closable: true,\n id: `presentation-iframe-origin-mismatch-${nextOrigin}`,\n status: 'error',\n duration: Infinity,\n title: t('preview-search-param.configuration.error.title'),\n description: (\n <Translate\n t={t}\n i18nKey=\"preview-search-param.configuration.error.description\"\n components={{Code: 'code'}}\n values={{\n previewSearchParam,\n blockedOrigin: nextOrigin,\n }}\n />\n ),\n })\n }\n }, [allowOrigins, currentOrigin, previewSearchParam, pushToast, t])\n}\n","import {subcribeToVercelProtectionBypass} from '@sanity/preview-url-secret/toggle-vercel-protection-bypass'\nimport {useEffect, useReducer, useState} from 'react'\nimport {useClient} from 'sanity'\n\nimport {API_VERSION} from './constants'\n\ntype VercelProtectionBypassReadyState = 'loading' | 'ready'\n\nexport function useVercelBypassSecret(): [\n vercelProtectionBypassSecret: string | null,\n vercelProtectionBypassReadyState: VercelProtectionBypassReadyState,\n] {\n const client = useClient({apiVersion: API_VERSION})\n const [vercelProtectionBypassReadyState, ready] = useReducer(\n () => 'ready' as 'ready' | 'loading',\n 'loading',\n )\n const [vercelProtectionBypassSecret, setVercelProtectionBypassSecret] = useState<string | null>(\n null,\n )\n\n useEffect(() => {\n const unsubscribe = subcribeToVercelProtectionBypass(client, (secret) => {\n setVercelProtectionBypassSecret(secret)\n ready()\n })\n return () => unsubscribe()\n }, [client])\n\n return [vercelProtectionBypassSecret, vercelProtectionBypassReadyState]\n}\n","import {useSelector} from '@xstate/react'\nimport {type Tool} from 'sanity'\n\nimport {PresentationSpinner} from './PresentationSpinner'\nimport PresentationTool from './PresentationTool'\nimport {type PresentationPluginOptions} from './types'\nimport {usePreviewUrlActorRef} from './usePreviewUrlActorRef'\nimport {useReportInvalidPreviewSearchParam} from './useReportInvalidPreviewSearchParam'\nimport {useVercelBypassSecret} from './useVercelBypassSecret'\n\nexport default function PresentationToolGrantsCheck({\n tool,\n}: {\n tool: Tool<PresentationPluginOptions>\n}): React.JSX.Element {\n const previewUrlRef = usePreviewUrlActorRef(tool.options?.previewUrl, tool.options?.allowOrigins)\n useReportInvalidPreviewSearchParam(previewUrlRef)\n\n const previewAccessSharingCreatePermission = useSelector(\n previewUrlRef,\n (state) => state.context.previewAccessSharingCreatePermission,\n )\n const previewAccessSharingUpdatePermission = useSelector(\n previewUrlRef,\n (state) => state.context.previewAccessSharingUpdatePermission,\n )\n const previewAccessSharingReadPermission = useSelector(\n previewUrlRef,\n (state) => state.context.previewAccessSharingReadPermission,\n )\n const previewUrlSecretPermission = useSelector(\n previewUrlRef,\n (state) => state.context.previewUrlSecretPermission,\n )\n const url = useSelector(previewUrlRef, (state) => state.context.previewUrl)\n // @TODO the vercel protection bypass can be moved to the iframe level\n const [vercelProtectionBypass, vercelProtectionBypassReadyState] = useVercelBypassSecret()\n\n if (\n !url ||\n vercelProtectionBypassReadyState === 'loading' ||\n !previewAccessSharingCreatePermission ||\n typeof previewAccessSharingCreatePermission.granted === 'undefined' ||\n !previewAccessSharingUpdatePermission ||\n typeof previewAccessSharingUpdatePermission.granted === 'undefined' ||\n !previewUrlSecretPermission ||\n !previewAccessSharingReadPermission ||\n typeof previewAccessSharingReadPermission.granted === 'undefined' ||\n typeof previewUrlSecretPermission.granted === 'undefined'\n ) {\n return <PresentationSpinner />\n }\n\n return (\n <PresentationTool\n tool={tool}\n initialPreviewUrl={url}\n vercelProtectionBypass={vercelProtectionBypass}\n canToggleSharePreviewAccess={\n previewAccessSharingCreatePermission?.granted === true &&\n previewAccessSharingUpdatePermission?.granted === true\n }\n canUseSharedPreviewAccess={previewAccessSharingReadPermission?.granted === true}\n previewUrlRef={previewUrlRef}\n />\n )\n}\n"],"names":["PostMessageFeatures","props","$","_c","comlink","t0","t1","on","_temp","useEffect","memo","features","optimistic","presentationMachine","setup","types","actions","actors","guards","createMachine","id","context","url","error","visualEditingOverlaysEnabled","assign","target","states","description","tags","loading","loaded","event","enabled","idle","refreshing","reloading","initial","SharedStateProvider","children","Symbol","for","sharedState","useRef","t2","state","current","t3","key","value","post","setValue","t4","key_0","removeValue","t5","t6","t7","Root","styled","div","Panel","defaultSize","minWidth","maxWidth","order","undefined","useContext","PresentationPanelsContext","Error","getPanelStyle","registerElement","unregisterElement","style","type","useLayoutEffect","debounce","fn","timeout","timer","args","clearTimeout","setTimeout","apply","itemKey","getStoredItem","JSON","parse","localStorage","getItem","setStoredItem","data","setItem","stringify","getKeyForPanels","panels","map","panel","join","usePanelsStorage","get","_temp2","set","_temp3","setDebounced","panels_0","widths","stored_0","stored","Array","isArray","some","val","getNextWidth","nextWidth","containerWidth","maxWidthPx","minWidthPx","Math","min","max","getNextWidths","delta","panelBefore","panelAfter","panelsState","initialDragState","prevWidths","initialWidths","nextWidths","pivotPanel","index","findIndex","width","abs","deltaApplied","deltaRemaining","toPrecision","localeCompare","numeric","length","getPanelWidth","getOffset","handleElement","initialOffset","initialHandleElementRect","pointerOffset","clientX","elementOffset","getBoundingClientRect","left","isPanel","element","isResizer","getSortedElements","elements","from","values","sort","a","b","validateWidths","widthsToValidate","total","reduce","remainingWidth","toFixed","getDefaultWidths","panelsWithoutWidth","remainingWidthTotal","widthsWithNulls","defaultWidth","PanelsWrapper","Panels","panelsEl","Map","setElements","useState","filter","setWidths","activeResizer","setActiveResizer","panelsRef","flexGrow","pointerEvents","id_0","prev","has","next","t8","id_1","prev_0","next_0","delete","t9","window","innerWidth","dragOffset","resizerIndex","resizerRect","startX","dragRef","t10","id_2","elementsArr","el","resizer","resizeElement","acc","el_0","i","acc_0","el_1","i_0","pageX","startDragging","t11","stopDragging","t12","id_3","event_0","preventDefault","stopPropagation","resizer_0","resizeElement_0","offset","rect","prevWidth","i_1","drag","t13","t14","storage","t15","t16","widths_0","storedWidths","validatedStoredWidths","defaultWidths","t17","t18","t19","t20","resizeObserver","ResizeObserver","prevWidths_0","nextWidths_0","prevWidth_0","i_2","observe","disconnect","t21","t22","t23","t24","ErrorCard","message","onContinueAnyway","onRetry","restProps","t","useTranslation","presentationLocaleNamespace","retryButton","continueAnywayButton","Container","ChildLink","forwardRef","ref","childId","childParameters","childType","rest","searchParams","childPayload","Object","entries","_searchParams","ReferenceChildLink","documentId","documentType","parentRefPath","template","params","pathToString","encodeQueryString","parts","resolveQueryStringFromParams","nextParams","allowed","safeNextParams","includes","obj","BackLink","PresentationPaneRouterProvider","onEditReference","onStructureParams","structureParams","refs","routerState","resolvePathFromState","useRouter","fromEntries","routerSearchParams","useUnique","path","qs","createPathWithParams","childLinkProps","doc","find","r","_id","getPublishedId","_type","console","warn","backLinkProps","ref_0","childLinkProps_0","ref_1","options","version","nextParams_0","inspect","groupIndex","siblingIndex","payload","hasGroupSiblings","groupLength","routerPanesState","ParameterizedLink","closeCurrentAndAfter","handleEditReference","replaceCurrent","closeCurrent","_temp4","duplicateCurrent","_temp5","setView","_temp6","setParams","setPayload","_temp7","navigateIntent","_temp8","intentName","intentParams","options_0","viewId","pane_0","pane","RootLayout","PaneLayout","Flex","WrappedCode","Code","DocumentListPane","mainDocumentState","devMode","usePresentationTool","document","ids","schemaTypeName","title","errorParams","setErrorParams","handleRetry","StructureDocumentListPane","r_0","DocumentPane","onFocusPath","templateParams","decodeJsonParams","templateParameters","paneDocumentNode","studioPath","toString","handleFocusPath","height","StructureDocumentPane","DocumentPanel","StructureToolProvider","usePreviewState","schemaType","documentPreviewStore","useDocumentPreviewStore","preview","setPreview","perspectiveStack","usePerspective","subscription","getPreviewStateObservable","subscribe","unsubscribe","ContentEditor","schema","useSchema","props_0","MainDocumentLink","previewState","bb0","snapshot","getPreviewValueWithFallback","fallback","usePanelId","uuid","panelId","Resizer","ResizerInner","$disabled","PanelResizer","propId","disabled","isDragging","nativeEvent","onMouseDown","e","onDrag","blur","onDragStop","resetDocumentStyles","bodyStyle","body","documentStyle","documentElement","cursor","userSelect","removeProperty","addEventListener","removeEventListener","PresentationContentWrapper","setDisplayedDocument","getCommentIntent","PresentationContent","documentsOnPage","PresentationNavigateProvider","navigate","_navigate","useLocalState","defaultValue","usePresentationNavigator","unstable_navigator","navigatorProvided","component","_navigatorEnabled","setNavigatorEnabled","navigatorEnabled","toggleNavigator","Component","NavigatorComponent","navigatorDisabled","Navigator","PresentationParamsProvider","PresentationProvider","name","useAllowPatterns","previewUrlRef","allowPatterns","useSelector","TypeError","allowOrigins","encodeStudioPerspective","studioPerspective","useId","useReactId","startsWith","replace","IFrame","forwardedRef","animate","onLoad","preventClick","src","variants","useImperativeHandle","instance","handleBlur","activeElement","dispatchEvent","MouseEvent","bubbles","cancelable","viewTransitionName","IFrameElement","motion","create","iframe","IFrameOverlay","Box","GlobalViewTransition","createGlobalStyle","OpenPreviewButton","openPopup","previewLocationOrigin","previewLocationRoute","perspective","targetOrigin","URL","urlSearchParamPreviewPerspective","pathname","search","openPreviewLink","currentTarget","href","handleOpenPopup","LaunchIcon","useTargetOrigin","previewUrl","origin","PreviewLocationInput","fontSize","onChange","padding","prefix","suffix","basePath","useActiveWorkspace","activeWorkspace","inputRef","sessionValue","setSessionValue","customValidity","setCustomValidity","handleChange","absoluteValue","pattern","test","reportValidity","nextValue","handleKeyDown","nextValue_0","handleClear","icon","ResetIcon","zIndex","QRCodeSVG","lazy","QrCodeLogoSize","QrCodeLogoPadding","QrSize","StyledSanityMonogram","SanityMonogram","MotionSpinner","Spinner","MotionText","Text","MotionMonogram","SharePreviewMenu","canToggleSharePreviewAccess","canUseSharedPreviewAccess","initialUrl","push","pushToast","useToast","client","useClient","apiVersion","API_VERSION","currentUser","useCurrentUser","setLoading","enabling","setEnabling","disabling","setDisabling","secret","setSecret","busy","useMemo","setSecretSearchParams","setError","handleUnableToToggle","useCallback","closable","status","handleDisableSharing","disablePreviewAccessSharing","location","handleEnableSharing","previewUrlSecret","enablePreviewAccessSharing","handleCopyUrl","navigator","clipboard","writeText","controller","AbortController","usedTags","fetchShareSecret","lastLiveEventId","signal","result","syncTags","fetch","fetchSharedAccessQuery","filterResponse","tag","aborted","live","events","abort","finally","ShareIcon","justifyContent","alignItems","gridTemplateColumns","gridTemplateRows","position","aspectRatio","display","opacity","textWrap","textAlign","CopyIcon","constrainSize","placement","portal","displayName","PreviewHeaderDefault","canSharePreviewAccess","iframeRef","onPathChange","onRefresh","overlaysConnection","presentationRef","setViewport","toggleOverlay","viewport","toggleViewportSize","send","handleRefresh","isLoading","isLoaded","isRefreshing","isReloading","overlaysEnabled","previewURL","withoutSecretSearchParams","perspectiveToggleTooltipId","previewUrlBusy","PanelLeftIcon","content","fallbackPlacements","whiteSpace","marginTop","marginBottom","lineHeight","borderRadius","margin","t25","t26","t27","t28","t29","t30","RefreshIcon","t31","t32","t33","t34","node","setProperty","t35","t36","t37","t38","t39","t40","MobileDeviceIcon","DesktopIcon","t41","t42","t43","t44","PreviewHeader","renderDefault","HeaderComponent","header","minHeight","matches","state_0","state_1","state_2","state_3","state_4","hasTag","MotionFlex","Preview","loadersConnection","vercelProtectionBypass","stablePerspective","setStablePerspective","urlPerspective","urlSearchParamVercelProtectionBypass","urlSearchParamVercelSetBypassCookie","prefersReducedMotion","usePrefersReducedMotion","previewHeader","timedOut","setTimedOut","somethingIsWrong","setSomethingIsWrong","iframeIsBusy","handleContinueAnyway","setContinueAnyway","continueAnyway","showOverlaysConnectionStatus","setShowOverlaysConnectionState","MAX_TIME_TO_OVERLAYS_CONNECTION","onIFrameLoad","preventIframeInteraction","canUseViewTransition","useSyncExternalStore","CSS","supports","iframeAnimations","currentViewport","setCurrentViewport","iframeStyle","setIframeStyle","iframeVariants","update","startViewTransition","flushSync","toast","checkOrigin","setCheckOrigin","reportedMismatches","Set","reportMismatchingOrigin","useEffectEvent","reportedOrigin","allow","add","duration","Infinity","usePresentationNavigate","navigateEvent","nextUrl","hash","contentWindow","createController","addTarget","createChannel","heartbeat","connectTo","createConnectionMachine","provide","createCompatibilityActors","stop","start","destroy","interval","setInterval","postMessage","domain","clearInterval","spinnerVariants","inset","backdropFilter","WebkitBackdropFilter","WebkitTransition","sizes","errorVariants","background","desktop","mobile","exit","boxShadow","scale","active","defineWarnOnce","warned","warnOnceAboutCrossDatasetReference","useDocumentsOnPage","frameStateRef","validateApiPerspective","published","setPublished","previewDrafts","setPreviewDrafts","urlRef","perspective_0","documents","setCache","cache","isEqual","setDocumentsOnPage","keyedCache","uniqueDocuments","cache_0","forEach","sourceDocument","_projectId","fnOrObj","arg","Function","getQueryFromResult","resolver","resolve","getParamsFromResult","getRouteContext","route","routes","absolute","match","decode","decodeURIComponent","useMainDocument","navigationHistory","resolvers","relativeUrl","setMainDocumentState","mainDocumentIdRef","at","handleResponse","url_0","query","then","doc_0","catch","parseId","rawId","segments","split","shift","parsePath","rawPath","urlStringToPath","parseRouterState","pruneObject","exhaustiveTupleOf","array","maintainOnDocumentChange","maintainOnSameDocument","useParams","initialPreviewUrl","routerNavigate","rev","since","view","pathKey","instruction","comment","changesInspectorTab","routerStateRef","setNavigationHistory","isSameDocument","currentState","currentParams","nextState","nextRouterState","usePopups","popups","setPopups","source","open","unsubs","size","source_0","closed","source_1","source_2","POPUP_CHECK_INTERVAL","unsub","usePresentationPerspective","selectedPerspectiveName","selectedReleaseId","useStatus","statusMap","setStatusMap","handshaking","memoStatus","connection","hasConnected_0","hasConnected","status_1","setStatusFromEvent","status_0","LiveQueries","PostMessageDocuments","PostMessageRefreshMutations","PostMessagePerspective","PostMessagePreviewSnapshots","PostMessageSchema","PostMessageTelemetry","PresentationTool","tool","components","DEFAULT_TOOL_NAME","unstable_header","previewMode","shareAccess","option","hostname","setController","visualEditingComlink","setVisualEditingComlink","useActorRef","projectId","useProjectId","dataset","useDataset","mainDocuments","setOverlaysConnection","setLoadersConnection","previewKitConnection","setPreviewKitConnection","handleNavigate","urlWithoutSearch","URLSearchParams","refreshRef","onStatus","handlePreviewPath","nextPath","handleStructureParams","frameOrigin","previewOrigin","newUrl","displayedDocument","handleKeyUp","isAltKey","handleKeydown","isHotkey","boundaryElement","setBoundaryElement","PresentationNavigator","livePreviewEnabled","workspace","useWorkspace","COMMENTS_INSPECTOR_NAME","mode","EDIT_INTENT_MODE","IS_MAC","platform","MODIFIERS","alt","ctrl","mod","keys","every","toUpperCase","defineCreatePreviewSecretActor","currentUserId","fromPromise","createPreviewSecret","defineReadSharedSecretActor","defineResolveAllowPatternsActor","allowOption","input","URLPattern","maybePatterns","urlPatterns","urlPattern","defineResolveInitialUrlActor","studioBasePath","previewUrlOption","studioPreviewPerspective","previewSearchParam","defineResolvePreviewModeActor","draftMode","enable","defineResolvePreviewModeUrlActor","resolvedPreviewMode","urlSearchParamPreviewSecret","urlSearchParamPreviewPathname","resolveUrlFromPreviewSearchParamActor","previewSearchParamUrl","shareAccessSingletonDocument","schemaIdSingleton","schemaTypeSingleton","previewUrlSecretDocument","previewUrlMachine","log","_","cause","fromObservable","throwError","Promise","reject","has checked permissions","Boolean","previewAccessSharingCreatePermission","previewAccessSharingReadPermission","previewAccessSharingUpdatePermission","previewUrlSecretPermission","search param has new origin","can create preview secret","granted","has preview mode with created secret","has preview mode with share access","has preview mode without permissions","delays","expiredSecret","expiresAt","now","Date","getTime","invoke","checkPermissionName","onError","onSnapshot","checkingPermissions","always","guard","resolvingInitialUrl","onDone","output","resolvingAllowPatterns","resolvingUrlFromPreviewSearchParam","resolvingPreviewMode","reenter","success","readShareAccess","resolvePreviewUrl","after","usePreviewUrlActorRef","grantsStore","useGrantsStore","router","checkDocumentPermission","actorRef","useReportInvalidPreviewSearchParam","currentOrigin","nextOrigin","blockedOrigin","useVercelBypassSecret","vercelProtectionBypassReadyState","ready","useReducer","vercelProtectionBypassSecret","setVercelProtectionBypassSecret","subcribeToVercelProtectionBypass","PresentationToolGrantsCheck"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"PresentationToolGrantsCheck.mjs","sources":["../../src/presentation/features/PostMessageFeatures.tsx","../../src/presentation/machines/presentation-machine.ts","../../src/presentation/overlays/SharedStateProvider.tsx","../../src/presentation/panels/Panel.tsx","../../src/presentation/util/debounce.ts","../../src/presentation/panels/usePanelsStorage.ts","../../src/presentation/panels/util.ts","../../src/presentation/panels/Panels.tsx","../../src/presentation/components/ErrorCard.tsx","../../src/presentation/paneRouter/ChildLink.tsx","../../src/presentation/paneRouter/ReferenceChildLink.tsx","../../src/presentation/paneRouter/PresentationPaneRouterProvider.tsx","../../src/presentation/editor/DocumentListPane.tsx","../../src/presentation/editor/DocumentPane.tsx","../../src/presentation/editor/DocumentPanel.tsx","../../src/presentation/editor/usePreviewState.ts","../../src/presentation/editor/ContentEditor.tsx","../../src/presentation/panels/usePanelId.ts","../../src/presentation/panels/PanelResizer.tsx","../../src/presentation/PresentationContent.tsx","../../src/presentation/PresentationNavigateProvider.tsx","../../src/presentation/useLocalState.ts","../../src/presentation/PresentationNavigator.tsx","../../src/presentation/PresentationParamsProvider.tsx","../../src/presentation/PresentationProvider.tsx","../../src/presentation/useAllowPatterns.ts","../../src/presentation/util/encodeStudioPerspective.ts","../../src/presentation/useId.ts","../../src/presentation/preview/IFrame.tsx","../../src/presentation/preview/OpenPreviewButton.tsx","../../src/presentation/useTargetOrigin.ts","../../src/presentation/preview/PreviewLocationInput.tsx","../../src/presentation/preview/SharePreviewMenu.tsx","../../src/presentation/preview/PreviewHeader.tsx","../../src/presentation/preview/Preview.tsx","../../src/presentation/util/warnOnce.ts","../../src/presentation/useDocumentsOnPage.ts","../../src/presentation/useMainDocument.ts","../../src/presentation/util/parse.ts","../../src/presentation/useParams.ts","../../src/presentation/usePopups.ts","../../src/presentation/usePresentationPerspective.ts","../../src/presentation/useStatus.ts","../../src/presentation/PresentationTool.tsx","../../src/presentation/actors/create-preview-secret.ts","../../src/presentation/actors/read-shared-secret.ts","../../src/presentation/actors/resolve-allow-patterns.ts","../../src/presentation/actors/resolve-initial-url.ts","../../src/presentation/actors/resolve-preview-mode.ts","../../src/presentation/actors/resolve-preview-mode-url.ts","../../src/presentation/actors/resolve-url-from-preview-search-param.ts","../../src/presentation/machines/preview-url.ts","../../src/presentation/usePreviewUrlActorRef.ts","../../src/presentation/useReportInvalidPreviewSearchParam.tsx","../../src/presentation/useVercelBypassSecret.ts","../../src/presentation/PresentationToolGrantsCheck.tsx"],"sourcesContent":["import {type FC, memo, useEffect} from 'react'\n\nimport {type VisualEditingConnection} from '../types'\n\nexport interface PostMessagePreviewsProps {\n comlink: VisualEditingConnection\n}\n\nconst PostMessageFeatures: FC<PostMessagePreviewsProps> = (props) => {\n const {comlink} = props\n\n useEffect(() => {\n return comlink.on('visual-editing/features', () => ({\n features: {\n optimistic: true,\n },\n }))\n }, [comlink])\n\n return null\n}\n\nexport default memo(PostMessageFeatures)\n","import {type ActorRefFrom, assign, setup} from 'xstate'\n\ninterface Context {\n url: URL | null\n error: Error | null\n visualEditingOverlaysEnabled: boolean\n}\n\ntype Event =\n | {type: 'toggle visual editing overlays'; enabled: boolean}\n | {type: 'iframe loaded'}\n | {type: 'iframe refresh'}\n | {type: 'iframe reload'}\n\nexport const presentationMachine = setup({\n types: {} as {\n context: Context\n events: Event\n tags: 'busy' | 'error'\n },\n actions: {\n //\n },\n actors: {\n //\n },\n guards: {\n //\n },\n}).createMachine({\n // eslint-disable-next-line tsdoc/syntax\n /** @xstate-layout N4IgpgJg5mDOIC5QAUBOcwDsAuBDbAlgPaYAEAKkUQDYDEBAZqrgLZinrVG4QDaADAF1EoAA5FYBQiREgAHogAsAJgA0IAJ6IAHAEYAdIoCcJowFY9R-vzPLlAX3vq0GHPmJlKNfVx4FMUPRMrOy+EJACwkgg4pLSmLIKCLoAbIr6Zoop2tqKAMxpJnnF6loIZkbK+uZ5umapKXmK-Cm6js7osFh48RRU1D7c4RC02ERQUNTsAG4EsACuuNSkkFL+UKRE02Co1LgasJGysWsy0UnaZinVyrpGAOx1Rim2efeliPe3hma1Zvy6XT8W4OJwgFxdNy9LwDMKQILMNgcMBMOAACyO0RO8USiAK930LWU-3uiiB9yaKXemkQjW01V+txS-GKqUe7XBnW67hIfW8cJGjER7E4Q0xYgkpwS5zxVMJKWJ-FJ5Mp1LKFn4Pz+DSaLTaYIh3Oh-UGPEg+nQqNgaPWCJCpAF4pikpxMoQKWZ+gp+TSZLy1hSH3deXpNSZLNqVP1HVcPQ8fNhQ3Nor8ATtSMdQmOLo8uPdnu9BUUfoDQY1WrqOuarUcYMwRHC8Gihqh8Zh2biubdAFpAzSEL2OS247yYfodqgiKgO1K8yog7ptATFL9dFljMDrHkh1zW6OTWF1jPXaAkmY1YgKnktfxtC9dPd+Io9DvYzzPAekxBj13T3i7vKirKkqqpBsYVQ1HUFjFs0t6KK+kIjh+-JfvoBAQFMP5nH+CDaMo16KjYyjMvUNh5GWOT6MoLL8A8ygrk0dQIUabafmaEAWiinQ2gEWHSjhjJUYuj73Pcd63noQaNEYFb-Dk2S0cxe7IYm7GcYevFYjm2HyJeeQQb8tFkikVjGNoFGajUt73o+z61vYQA */\n id: 'Presentation Tool',\n context: {\n url: null,\n error: null,\n visualEditingOverlaysEnabled: false,\n },\n\n on: {\n 'iframe reload': {\n actions: assign({url: null}),\n target: '.loading',\n },\n },\n\n states: {\n error: {\n description:\n 'Failed to load, either because of a misconfiguration, a network error, or an unexpected error',\n tags: ['error'],\n },\n loading: {\n on: {\n 'iframe loaded': {\n target: 'loaded',\n },\n },\n tags: ['busy'],\n },\n loaded: {\n on: {\n 'toggle visual editing overlays': {\n actions: assign({\n visualEditingOverlaysEnabled: ({event}) => event.enabled,\n }),\n },\n 'iframe refresh': {\n target: '.refreshing',\n },\n 'iframe reload': {\n target: '.reloading',\n },\n },\n\n states: {\n idle: {},\n refreshing: {\n on: {\n 'iframe loaded': {\n target: 'idle',\n },\n },\n tags: ['busy'],\n },\n reloading: {\n on: {\n 'iframe loaded': {\n target: 'idle',\n },\n },\n tags: ['busy'],\n },\n },\n initial: 'idle',\n },\n },\n initial: 'loading',\n})\n\nexport type PresentationMachineRef = ActorRefFrom<typeof presentationMachine>\n","import {type Serializable, type SerializableObject} from '@sanity/presentation-comlink'\nimport {\n type FunctionComponent,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react'\nimport {PresentationSharedStateContext} from 'sanity/_singletons'\n\nimport {type VisualEditingConnection} from '../types'\nimport {type PresentationSharedStateContextValue} from './types'\n\nexport const SharedStateProvider: FunctionComponent<\n PropsWithChildren<{\n comlink: VisualEditingConnection | null\n }>\n> = function (props) {\n const {comlink, children} = props\n\n const sharedState = useRef<SerializableObject>({})\n\n useEffect(() => {\n return comlink?.on('visual-editing/shared-state', () => {\n return {state: sharedState.current}\n })\n }, [comlink])\n\n const setValue = useCallback(\n (key: string, value: Serializable) => {\n sharedState.current[key] = value\n comlink?.post('presentation/shared-state', {key, value})\n },\n [comlink],\n )\n\n const removeValue = useCallback(\n (key: string) => {\n comlink?.post('presentation/shared-state', {key})\n delete sharedState.current[key]\n },\n [comlink],\n )\n\n const context = useMemo<PresentationSharedStateContextValue>(\n () => ({removeValue, setValue}),\n [removeValue, setValue],\n )\n\n return (\n <PresentationSharedStateContext.Provider value={context}>\n {children}\n </PresentationSharedStateContext.Provider>\n )\n}\n","import {type FunctionComponent, type PropsWithChildren, useContext, useLayoutEffect} from 'react'\nimport {PresentationPanelsContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\ninterface PanelProps extends PropsWithChildren {\n defaultSize?: number | null\n id: string\n minWidth?: number\n maxWidth?: number\n order?: number\n}\n\nconst Root = styled.div`\n overflow: hidden;\n flex-basis: 0;\n flex-shrink: 1;\n`\n\nexport const Panel: FunctionComponent<PanelProps> = function ({\n children,\n defaultSize = null,\n id,\n minWidth,\n maxWidth,\n order = 0,\n}) {\n const context = useContext(PresentationPanelsContext)\n\n if (context === null) {\n throw Error(`Panel components must be rendered within a PanelGroup container`)\n }\n\n const {getPanelStyle, registerElement, unregisterElement} = context\n\n const style = getPanelStyle(id)\n\n useLayoutEffect(() => {\n registerElement(id, {\n id,\n type: 'panel',\n defaultSize,\n maxWidth: maxWidth ?? null,\n minWidth: minWidth ?? 0,\n order,\n })\n\n return () => {\n unregisterElement(id)\n }\n }, [id, defaultSize, order, maxWidth, minWidth, registerElement, unregisterElement])\n\n return <Root style={style}>{children}</Root>\n}\n","export function debounce<F extends (...args: Parameters<F>) => ReturnType<F>>(\n fn: F,\n timeout: number,\n): F {\n let timer: ReturnType<typeof setTimeout>\n return ((...args: Parameters<F>) => {\n clearTimeout(timer)\n timer = setTimeout(() => {\n fn.apply(fn, args)\n }, timeout)\n }) as F\n}\n","import {useMemo} from 'react'\n\nimport {debounce} from '../util/debounce'\nimport {type PanelElement} from './types'\n\nconst itemKey = 'presentation/panels'\n\ntype StoredPanelsState = Record<string, number[]>\n\nconst getStoredItem = () => {\n // @todo Validate\n return JSON.parse(localStorage.getItem(itemKey) || '{}') as StoredPanelsState\n}\nconst setStoredItem = (data: StoredPanelsState) => {\n localStorage.setItem(itemKey, JSON.stringify(data))\n}\n\nconst getKeyForPanels = (panels: PanelElement[]) => {\n return panels.map((panel) => [panel.id, panel.order].join(':')).join(',')\n}\n\nexport function usePanelsStorage(): {\n get: (panels: PanelElement[]) => number[] | undefined\n set: (panels: PanelElement[], widths: number[]) => void\n setDebounced: (panels: PanelElement[], widths: number[]) => void\n} {\n return useMemo(() => {\n const get = (panels: PanelElement[]) => {\n const stored = getStoredItem()\n const key = getKeyForPanels(panels)\n return Array.isArray(stored[key]) && stored[key].some((val) => val === null)\n ? undefined\n : stored[key]\n }\n\n const set = (panels: PanelElement[], widths: number[]) => {\n const stored = getStoredItem()\n const key = getKeyForPanels(panels)\n const data = {\n ...stored,\n [key]: widths,\n }\n setStoredItem(data)\n }\n\n const setDebounced = debounce(set, 100)\n return {\n get,\n set,\n setDebounced,\n }\n }, [])\n}\n","/* eslint-disable @typescript-eslint/no-shadow,no-eq-null */\nimport {\n type ElementMap,\n type InitialDragState,\n type PanelElement,\n type PanelsState,\n type ResizerElement,\n} from './types'\n\nfunction getNextWidth(panel: PanelElement, nextWidth: number, containerWidth: number) {\n const {maxWidth: maxWidthPx, minWidth: minWidthPx} = panel\n const maxWidth = maxWidthPx == null ? 100 : (maxWidthPx / containerWidth) * 100\n const minWidth = (minWidthPx / containerWidth) * 100\n return Math.min(maxWidth, Math.max(minWidth, nextWidth))\n}\n\n// eslint-disable-next-line max-params\nexport function getNextWidths(\n delta: number,\n containerWidth: number,\n panelBefore: PanelElement,\n panelAfter: PanelElement,\n panelsState: PanelsState,\n initialDragState: InitialDragState,\n): number[] {\n const {panels, widths: prevWidths} = panelsState\n const {widths: initialWidths} = initialDragState\n\n const widths = initialWidths || prevWidths\n const nextWidths = [...widths]\n\n {\n const pivotPanel = delta < 0 ? panelAfter : panelBefore\n const index = panels.findIndex((panel) => panel.id === pivotPanel.id)\n const width = widths[index]\n const nextWidth = getNextWidth(pivotPanel, width + Math.abs(delta), containerWidth)\n if (width === nextWidth) {\n return widths\n }\n delta = delta < 0 ? width - nextWidth : nextWidth - width\n }\n\n let deltaApplied = 0\n let pivotPanel = delta < 0 ? panelBefore : panelAfter\n let index = panels.findIndex((panel) => panel.id === pivotPanel.id)\n\n while (true) {\n const panel = panels[index]\n const width = widths[index]\n\n const deltaRemaining = Math.abs(delta) - Math.abs(deltaApplied)\n\n const nextWidth = getNextWidth(panel, width - deltaRemaining, containerWidth)\n\n if (width !== nextWidth) {\n deltaApplied += width - nextWidth\n nextWidths[index] = nextWidth\n\n if (\n deltaApplied.toPrecision(10).localeCompare(Math.abs(delta).toPrecision(10), undefined, {\n numeric: true,\n }) >= 0\n ) {\n break\n }\n }\n\n if (delta < 0) {\n if (--index < 0) {\n break\n }\n } else if (++index >= panels.length) {\n break\n }\n }\n\n if (deltaApplied === 0) {\n return widths\n }\n\n pivotPanel = delta < 0 ? panelAfter : panelBefore\n index = panels.findIndex((panel) => panel.id === pivotPanel.id)\n nextWidths[index] = widths[index] + deltaApplied\n\n return nextWidths\n}\n\nexport function getPanelWidth(panels: PanelElement[], id: string, widths: number[]): string {\n if (panels.length === 1) return '100'\n\n const index = panels.findIndex((panel) => panel.id === id)\n const width = widths[index]\n\n if (width == null) return '0'\n\n return width.toPrecision(10)\n}\n\nexport function getOffset(\n event: MouseEvent,\n handleElement: HTMLDivElement,\n initialOffset: number = 0,\n initialHandleElementRect: DOMRect | null = null,\n): number {\n const pointerOffset = event.clientX\n\n const rect = initialHandleElementRect || handleElement.getBoundingClientRect()\n const elementOffset = rect.left\n\n return pointerOffset - elementOffset - initialOffset\n}\n\nexport function isPanel(element: PanelElement | ResizerElement): element is PanelElement {\n return element.type === 'panel'\n}\n\nexport function isResizer(element: PanelElement | ResizerElement): element is ResizerElement {\n return element.type === 'resizer'\n}\n\nexport function getSortedElements(elements: ElementMap): Array<PanelElement | ResizerElement> {\n return Array.from(elements.values()).sort(({order: a}, {order: b}) => {\n if (a == null && b == null) return 0\n if (a == null) return -1\n if (b == null) return 1\n return a - b\n })\n}\n\nexport function validateWidths(\n panels: PanelElement[],\n widthsToValidate: number[],\n containerWidth: number,\n): number[] {\n // Clamp widths proportionally to total 100\n const total = widthsToValidate.reduce((total, width) => total + width, 0)\n const widths = [...widthsToValidate].map((width) => (width / total) * 100)\n\n let remainingWidth = 0\n\n for (let index = 0; index < panels.length; index++) {\n const panel = panels[index]\n const width = widths[index]\n const nextWidth = getNextWidth(panel, width, containerWidth)\n if (width != nextWidth) {\n remainingWidth += width - nextWidth\n widths[index] = nextWidth\n }\n }\n\n if (remainingWidth.toFixed(3) !== '0.000') {\n for (let index = 0; index < panels.length; index++) {\n const panel = panels[index]\n\n let {maxWidth, minWidth} = panel\n\n minWidth = (minWidth / containerWidth) * 100\n if (maxWidth != null) {\n maxWidth = (maxWidth / containerWidth) * 100\n }\n\n const width = Math.min(\n // eslint-disable-next-line no-negated-condition\n maxWidth != null ? maxWidth : 100,\n Math.max(minWidth, widths[index] + remainingWidth),\n )\n\n if (width !== widths[index]) {\n remainingWidth -= width - widths[index]\n widths[index] = width\n\n if (Math.abs(remainingWidth).toFixed(3) === '0.000') {\n break\n }\n }\n }\n }\n\n return widths\n}\n\nexport function getDefaultWidths(panels: PanelElement[]): number[] {\n let panelsWithoutWidth = panels.length\n let remainingWidthTotal = 100\n\n const widthsWithNulls = panels.map((panel) => {\n if (panel.defaultSize) {\n remainingWidthTotal -= panel.defaultSize\n panelsWithoutWidth -= 1\n return panel.defaultSize\n }\n return null\n })\n\n const defaultWidth = remainingWidthTotal / panelsWithoutWidth\n const widths = widthsWithNulls.map((width) => {\n if (width === null) return defaultWidth\n return width\n })\n\n return widths\n}\n","// Slightly modified version of react-resizable-panels\n// https://github.com/bvaughn/react-resizable-panels/tree/main/packages/react-resizable-panels\n\nimport {\n type CSSProperties,\n type FunctionComponent,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {PresentationPanelsContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\nimport {\n type ElementMap,\n type InitialDragState,\n type PanelElement,\n type PanelsState,\n type ResizerElement,\n} from './types'\nimport {usePanelsStorage} from './usePanelsStorage'\nimport {\n getDefaultWidths,\n getNextWidths,\n getOffset,\n getPanelWidth,\n getSortedElements,\n isPanel,\n isResizer,\n validateWidths,\n} from './util'\n\nconst PanelsWrapper = styled.div`\n display: flex;\n flex-direction: row;\n height: 100%;\n overflow: hidden;\n width: 100%;\n`\n\nexport const Panels: FunctionComponent<PropsWithChildren> = function ({children}) {\n const panelsEl = useRef<HTMLDivElement | null>(null)\n\n const [elements, setElements] = useState<ElementMap>(new Map())\n\n const panels = useMemo(() => getSortedElements(elements).filter(isPanel), [elements])\n\n const [widths, setWidths] = useState<number[]>([])\n const [activeResizer, setActiveResizer] = useState<string | null>(null)\n\n const panelsRef = useRef<PanelsState>({\n elements,\n panels,\n widths,\n })\n\n const getPanelStyle = useCallback(\n (id: string): CSSProperties => {\n return {\n flexGrow: getPanelWidth(panels, id, widths),\n pointerEvents: activeResizer === null ? undefined : 'none',\n }\n },\n [activeResizer, panels, widths],\n )\n\n const registerElement = useCallback((id: string, data: PanelElement | ResizerElement) => {\n setElements((prev) => {\n if (prev.has(id)) return prev\n const next = new Map(prev)\n next.set(id, data)\n return next\n })\n }, [])\n const unregisterElement = useCallback((id: string) => {\n setElements((prev) => {\n if (!prev.has(id)) return prev\n const next = new Map(prev)\n next.delete(id)\n return next\n })\n }, [])\n\n const dragRef = useRef<InitialDragState>({\n containerWidth: window.innerWidth,\n dragOffset: 0,\n panelAfter: null,\n panelBefore: null,\n resizerIndex: -1,\n resizerRect: null,\n startX: 0,\n widths: [],\n })\n\n const startDragging = useCallback(\n (id: string, event: MouseEvent) => {\n const elementsArr = getSortedElements(elements)\n const index = elementsArr.findIndex((el) => el.id === id)\n\n const resizer = elements.get(id)\n if (!resizer || !isResizer(resizer)) return\n const resizeElement = resizer.el.current\n if (!resizeElement) return\n\n dragRef.current = {\n resizerIndex: index,\n panelBefore: elementsArr.reduce(\n (acc, el, i) => (isPanel(el) && i < index ? el : acc),\n null as PanelElement | null,\n ),\n panelAfter: elementsArr.reduce(\n (acc, el, i) => (acc === null && isPanel(el) && i > index ? el : acc),\n null as PanelElement | null,\n ),\n containerWidth: window.innerWidth,\n startX: event.pageX,\n dragOffset: getOffset(event, resizeElement),\n resizerRect: resizeElement.getBoundingClientRect(),\n widths: panelsRef.current.widths,\n }\n\n setActiveResizer(id)\n },\n [elements],\n )\n\n const stopDragging = useCallback(() => {\n setActiveResizer(null)\n }, [])\n\n const drag = useCallback(\n (id: string, event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n const {containerWidth, dragOffset, panelBefore, panelAfter, resizerRect} = dragRef.current\n\n // eslint-disable-next-line no-eq-null\n if (panelBefore == null || panelAfter == null) {\n return\n }\n\n const resizer = elements.get(id)\n if (!resizer || !isResizer(resizer)) return\n const resizeElement = resizer.el.current\n if (!resizeElement) return\n\n const offset = getOffset(event, resizeElement, dragOffset, resizerRect)\n\n if (offset === 0) {\n return\n }\n\n const {widths: prevWidths} = panelsRef.current\n const rect = panelsEl.current!.getBoundingClientRect()\n const delta = (offset / rect.width) * 100\n\n const nextWidths = getNextWidths(\n delta,\n containerWidth,\n panelBefore,\n panelAfter,\n panelsRef.current,\n dragRef.current,\n )\n\n const widthsChanged = prevWidths.some((prevWidth, i) => prevWidth !== nextWidths[i])\n\n if (widthsChanged) {\n setWidths(nextWidths)\n }\n },\n [elements],\n )\n\n // For setting the panels state\n useLayoutEffect(() => {\n panelsRef.current.elements = elements\n panelsRef.current.panels = panels\n panelsRef.current.widths = widths\n }, [elements, panels, widths])\n\n const storage = usePanelsStorage()\n\n // For setting default sizing when panels are updated\n useLayoutEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {widths} = panelsRef.current\n\n if (widths.length === panels.length) {\n return\n }\n\n const storedWidths = storage.get(panels)\n\n if (storedWidths) {\n const validatedStoredWidths = validateWidths(panels, storedWidths, window.innerWidth)\n setWidths(validatedStoredWidths)\n return\n }\n\n const defaultWidths = getDefaultWidths(panels)\n setWidths(defaultWidths)\n }, [storage, panels])\n\n // For storing current widths in localStorage\n useEffect(() => {\n if (!widths.length) return\n storage.setDebounced(panels, widths)\n }, [storage, panels, widths])\n\n useLayoutEffect(() => {\n const resizeObserver = new ResizeObserver(() => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {panels, widths: prevWidths} = panelsRef.current\n\n const nextWidths = validateWidths(panels, prevWidths, window.innerWidth)\n\n const widthsChanged = prevWidths.some((prevWidth, i) => prevWidth !== nextWidths[i])\n if (widthsChanged) {\n setWidths(nextWidths)\n }\n })\n\n resizeObserver.observe(panelsEl.current!)\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [])\n\n const context = useMemo(\n () => ({\n activeResizer,\n drag,\n getPanelStyle,\n registerElement,\n startDragging,\n stopDragging,\n unregisterElement,\n }),\n [\n activeResizer,\n drag,\n getPanelStyle,\n registerElement,\n startDragging,\n stopDragging,\n unregisterElement,\n ],\n )\n\n return (\n <PresentationPanelsContext.Provider value={context}>\n <PanelsWrapper ref={panelsEl}>{children}</PanelsWrapper>\n </PresentationPanelsContext.Provider>\n )\n}\n","import {Box, Card, type CardProps, Container, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\n\nexport function ErrorCard(\n props: {\n children?: ReactNode\n message: string\n onRetry?: () => void\n onContinueAnyway?: () => void\n } & CardProps,\n): React.JSX.Element {\n const {children, message, onRetry, onContinueAnyway, ...restProps} = props\n\n const {t} = useTranslation(presentationLocaleNamespace)\n\n const retryButton = (\n <Button mode=\"ghost\" onClick={onRetry} text={t('error-card.retry-button.text')} />\n )\n const continueAnywayButton = (\n <Button\n mode=\"ghost\"\n tone=\"critical\"\n onClick={onContinueAnyway}\n text={t('error-card.continue-button.text')}\n />\n )\n\n return (\n <Card height=\"fill\" {...restProps}>\n <Flex align=\"center\" height=\"fill\" justify=\"center\">\n <Container padding={4} sizing=\"border\" width={0}>\n <Stack space={4}>\n <Stack space={3}>\n <Text size={1} weight=\"semibold\">\n {t('error-card.title')}\n </Text>\n <Text muted size={1}>\n {message}\n </Text>\n </Stack>\n\n {children}\n\n {onRetry && onContinueAnyway ? (\n <Inline space={2}>\n {retryButton}\n {continueAnywayButton}\n </Inline>\n ) : onRetry ? (\n <Box>{retryButton}</Box>\n ) : onContinueAnyway ? (\n <Box>{continueAnywayButton}</Box>\n ) : null}\n </Stack>\n </Container>\n </Flex>\n </Card>\n )\n}\n","import {forwardRef} from 'react'\nimport {StateLink} from 'sanity/router'\nimport {type ChildLinkProps} from 'sanity/structure'\n\nimport {type PresentationSearchParams} from '../types'\n\nexport const ChildLink = forwardRef(function ChildLink(\n props: ChildLinkProps & {\n childType: string\n searchParams: PresentationSearchParams\n },\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n const {childId, childType, childPayload, childParameters, searchParams, ...rest} = props\n\n return (\n <StateLink\n {...rest}\n ref={ref}\n state={{\n id: childId,\n type: childType,\n _searchParams: Object.entries({...searchParams, ...childParameters}),\n }}\n />\n )\n})\n","import {forwardRef} from 'react'\nimport {pathToString} from 'sanity'\nimport {type ReferenceChildLinkProps} from 'sanity/structure'\n\nimport {type PresentationSearchParams} from '../types'\nimport {ChildLink} from './ChildLink'\n\nexport const ReferenceChildLink = forwardRef(function ReferenceChildLink(\n props: ReferenceChildLinkProps & {searchParams: PresentationSearchParams},\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n const {documentId, documentType, parentRefPath, template, searchParams, ...rest} = props\n\n return (\n <ChildLink\n {...rest}\n ref={ref}\n childId={documentId}\n childType={documentType}\n childPayload={template?.params}\n childParameters={{\n parentRefPath: pathToString(parentRefPath),\n ...(template && {template: template?.id}),\n }}\n searchParams={searchParams}\n />\n )\n})\n","import {toString as pathToString} from '@sanity/util/paths'\nimport {forwardRef, type PropsWithChildren, useCallback, useMemo} from 'react'\nimport {getPublishedId, useUnique} from 'sanity'\nimport {StateLink, useRouter} from 'sanity/router'\nimport {\n type BackLinkProps,\n type ChildLinkProps,\n PaneRouterContext,\n type PaneRouterContextValue,\n type ReferenceChildLinkProps,\n} from 'sanity/structure'\n\nimport {\n type PresentationNavigate,\n type PresentationParamsContextValue,\n type PresentationSearchParams,\n type StructureDocumentPaneParams,\n} from '../types'\nimport {ChildLink} from './ChildLink'\nimport {ReferenceChildLink} from './ReferenceChildLink'\n\nfunction encodeQueryString(params: Record<string, unknown> = {}): string {\n const parts = Object.entries(params)\n .map(([key, value]) => `${key}=${value}`)\n .join('&')\n\n return parts.length ? `?${parts}` : ''\n}\n\nfunction resolveQueryStringFromParams(nextParams: Record<string, string | undefined>) {\n const allowed = [\n 'comment',\n 'inspect',\n 'instruction',\n 'pathKey',\n 'rev',\n 'since',\n 'template',\n 'view',\n ] satisfies Array<keyof PresentationParamsContextValue> as string[]\n\n const safeNextParams = Object.entries(nextParams)\n .filter(([key]) => allowed.includes(key))\n .reduce((obj, [key, value]) => {\n if (value == undefined) return obj\n return {...obj, [key]: value}\n }, {})\n\n return encodeQueryString(safeNextParams)\n}\n\nconst BackLink = forwardRef(function BackLink(\n props: BackLinkProps & {searchParams: PresentationSearchParams},\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n const {searchParams, ...restProps} = props\n return (\n <StateLink\n {...restProps}\n ref={ref}\n state={{\n type: undefined,\n _searchParams: Object.entries(searchParams),\n }}\n title={undefined}\n />\n )\n})\n\nexport type PresentationPaneRouterProviderProps = PropsWithChildren<{\n onEditReference: PresentationNavigate\n onStructureParams: (params: StructureDocumentPaneParams) => void\n refs?: {_id: string; _type: string}[]\n searchParams: PresentationSearchParams\n structureParams: StructureDocumentPaneParams\n}>\n\nexport function PresentationPaneRouterProvider(\n props: PresentationPaneRouterProviderProps,\n): React.JSX.Element {\n const {children, onEditReference, onStructureParams, structureParams, searchParams, refs} = props\n\n const {state: routerState, resolvePathFromState} = useRouter()\n\n const routerSearchParams = useUnique(Object.fromEntries(routerState._searchParams || []))\n\n const createPathWithParams: PaneRouterContextValue['createPathWithParams'] = useCallback(\n (nextParams) => {\n const path = resolvePathFromState(routerState)\n const qs = resolveQueryStringFromParams({\n ...routerSearchParams,\n ...nextParams,\n })\n return `${path}${qs}`\n },\n [resolvePathFromState, routerSearchParams, routerState],\n )\n\n const context: PaneRouterContextValue = useMemo(() => {\n return {\n index: 0,\n groupIndex: 0,\n siblingIndex: 0,\n payload: {},\n // oxlint-disable-next-line no-explicit-any\n params: structureParams as any,\n hasGroupSiblings: false,\n groupLength: 1,\n routerPanesState: [],\n ChildLink: forwardRef<HTMLAnchorElement, ChildLinkProps>(\n function ContextChildLink(childLinkProps, ref) {\n const {childId, ...rest} = childLinkProps\n const doc = refs?.find((r) => r._id === childId || getPublishedId(r._id) === childId)\n\n if (!doc) {\n console.warn(`ChildLink: No document found for childId \"${childId}\"`)\n return null\n }\n\n return (\n <ChildLink\n {...rest}\n ref={ref}\n childId={childId}\n childType={doc._type}\n searchParams={searchParams}\n />\n )\n },\n ),\n BackLink: forwardRef<HTMLAnchorElement, BackLinkProps>(\n function ContextBackLink(backLinkProps, ref) {\n return <BackLink {...backLinkProps} ref={ref} searchParams={searchParams} />\n },\n ),\n ReferenceChildLink: forwardRef<HTMLAnchorElement, ReferenceChildLinkProps>(\n function ContextReferenceChildLink(childLinkProps, ref) {\n return <ReferenceChildLink {...childLinkProps} ref={ref} searchParams={searchParams} />\n },\n ),\n ParameterizedLink: () => {\n throw new Error('ParameterizedLink not implemented')\n },\n closeCurrentAndAfter: () => {\n console.warn('closeCurrentAndAfter')\n },\n handleEditReference: (options) => {\n const {id, template, type, parentRefPath, version} = options\n onEditReference({\n state: {id, type},\n params: {\n template: template.id,\n parentRefPath: pathToString(parentRefPath),\n version,\n },\n })\n },\n replaceCurrent: (pane) => {\n console.warn('replaceCurrent', pane)\n },\n closeCurrent: () => {\n console.warn('closeCurrent')\n },\n duplicateCurrent: (pane) => {\n console.warn('duplicateCurrent', pane)\n },\n setView: (viewId) => {\n console.warn('setView', viewId)\n },\n setParams: onStructureParams,\n setPayload: (payload) => {\n console.warn('setPayload', payload)\n },\n navigateIntent: (intentName, intentParams, options) => {\n console.warn('navigateIntent', intentName, intentParams, options)\n },\n createPathWithParams,\n }\n }, [\n createPathWithParams,\n onEditReference,\n onStructureParams,\n refs,\n searchParams,\n structureParams,\n ])\n\n return <PaneRouterContext.Provider value={context}>{children}</PaneRouterContext.Provider>\n}\n","import {Card, Code, Flex, Label, Stack} from '@sanity/ui'\nimport {type ErrorInfo, useCallback, useEffect, useMemo, useState} from 'react'\nimport {getPublishedId, useTranslation} from 'sanity'\nimport {\n DocumentListPane as StructureDocumentListPane,\n PaneLayout,\n type PaneNode,\n StructureToolProvider,\n} from 'sanity/structure'\nimport {styled} from 'styled-components'\n\nimport {ErrorBoundary} from '../../ui-components'\nimport {ErrorCard} from '../components/ErrorCard'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {PresentationPaneRouterProvider} from '../paneRouter/PresentationPaneRouterProvider'\nimport {\n type MainDocumentState,\n type PresentationNavigate,\n type PresentationSearchParams,\n type StructureDocumentPaneParams,\n} from '../types'\nimport {usePresentationTool} from '../usePresentationTool'\n\nconst RootLayout = styled(PaneLayout)`\n height: 100%;\n`\n\nconst Root = styled(Flex)`\n & > div {\n min-width: none !important;\n max-width: none !important;\n }\n`\n\nconst WrappedCode = styled(Code)`\n white-space: pre-wrap;\n`\n\nexport function DocumentListPane(props: {\n mainDocumentState?: MainDocumentState\n onEditReference: PresentationNavigate\n onStructureParams: (params: StructureDocumentPaneParams) => void\n searchParams: PresentationSearchParams\n refs: {_id: string; _type: string}[]\n}): React.JSX.Element {\n const {mainDocumentState, onEditReference, onStructureParams, searchParams, refs} = props\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const {devMode} = usePresentationTool()\n\n const ids = useMemo(\n () =>\n refs\n .filter((r) => getPublishedId(r._id) !== mainDocumentState?.document?._id)\n .map((r) => getPublishedId(r._id)),\n [mainDocumentState, refs],\n )\n\n const pane: Extract<PaneNode, {type: 'documentList'}> = useMemo(\n () => ({\n id: '$root',\n options: {\n filter: '_id in $ids',\n params: {ids},\n // defaultOrdering: [{field: '_updatedAt', direction: 'desc'}],\n },\n schemaTypeName: '',\n title: t('document-list-pane.document-list.title'),\n type: 'documentList',\n }),\n [ids, t],\n )\n\n const [errorParams, setErrorParams] = useState<{\n info: ErrorInfo\n error: Error\n } | null>(null)\n\n const handleRetry = useCallback(() => setErrorParams(null), [])\n\n const [structureParams] = useState(() => ({}))\n\n // Reset error state when `refs` value schanges\n useEffect(() => setErrorParams(null), [refs])\n\n if (errorParams) {\n return (\n <ErrorCard flex={1} message={t('document-list-pane.error.text')} onRetry={handleRetry}>\n {devMode && (\n // show runtime error message in dev mode\n <Card overflow=\"auto\" padding={3} radius={2} tone=\"critical\">\n <Stack space={3}>\n <Label muted size={0}>\n {t('presentation-error.label')}\n </Label>\n <WrappedCode size={1}>{errorParams.error.message}</WrappedCode>\n </Stack>\n </Card>\n )}\n </ErrorCard>\n )\n }\n\n return (\n <ErrorBoundary onCatch={setErrorParams}>\n <RootLayout>\n <StructureToolProvider>\n <PresentationPaneRouterProvider\n onEditReference={onEditReference}\n onStructureParams={onStructureParams}\n structureParams={structureParams}\n searchParams={searchParams}\n refs={refs}\n >\n <Root direction=\"column\" flex={1}>\n <StructureDocumentListPane\n index={0}\n itemId=\"$root\"\n pane={pane}\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n paneKey=\"$root\"\n />\n </Root>\n </PresentationPaneRouterProvider>\n </StructureToolProvider>\n </RootLayout>\n </ErrorBoundary>\n )\n}\n","import {studioPath} from '@sanity/client/csm'\nimport {Card, Code, Label, Stack} from '@sanity/ui'\nimport {type ErrorInfo, Suspense, useCallback, useEffect, useMemo, useState} from 'react'\nimport {type Path, useTranslation} from 'sanity'\nimport {decodeJsonParams} from 'sanity/router'\nimport {\n DocumentPane as StructureDocumentPane,\n type DocumentPaneNode,\n PaneLayout,\n} from 'sanity/structure'\nimport {styled} from 'styled-components'\n\nimport {ErrorBoundary} from '../../ui-components'\nimport {ErrorCard} from '../components/ErrorCard'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {PresentationPaneRouterProvider} from '../paneRouter/PresentationPaneRouterProvider'\nimport {PresentationSpinner} from '../PresentationSpinner'\nimport {\n type PresentationNavigate,\n type PresentationSearchParams,\n type PresentationStateParams,\n type StructureDocumentPaneParams,\n} from '../types'\nimport {usePresentationTool} from '../usePresentationTool'\n\nconst WrappedCode = styled(Code)`\n white-space: pre-wrap;\n`\n\nexport function DocumentPane(props: {\n documentId: string\n documentType: string\n onFocusPath: (state: Required<PresentationStateParams>) => void\n onEditReference: PresentationNavigate\n onStructureParams: (params: StructureDocumentPaneParams) => void\n structureParams: StructureDocumentPaneParams\n searchParams: PresentationSearchParams\n}): React.JSX.Element {\n const {\n documentId,\n documentType,\n onFocusPath,\n onEditReference,\n onStructureParams,\n searchParams,\n structureParams,\n } = props\n const {template, templateParams} = structureParams\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const {devMode} = usePresentationTool()\n\n const paneDocumentNode: DocumentPaneNode = useMemo(\n () => ({\n id: documentId,\n options: {\n id: documentId,\n type: documentType,\n template,\n templateParameters: decodeJsonParams(templateParams),\n },\n title: '',\n type: 'document',\n }),\n [documentId, documentType, template, templateParams],\n )\n\n const handleFocusPath = useCallback(\n (path: Path) => {\n return onFocusPath({\n id: documentId,\n type: documentType,\n path: studioPath.toString(path),\n })\n },\n [documentId, documentType, onFocusPath],\n )\n\n const [errorParams, setErrorParams] = useState<{\n info: ErrorInfo\n error: Error\n } | null>(null)\n\n const handleRetry = useCallback(() => setErrorParams(null), [])\n\n // Reset error state when parameters change\n useEffect(() => {\n setErrorParams(null)\n }, [documentId, documentType, structureParams])\n\n if (errorParams) {\n return (\n <ErrorCard flex={1} message={t('document-pane.error.text')} onRetry={handleRetry}>\n {devMode && (\n // show runtime error message in dev mode\n <Card overflow=\"auto\" padding={3} radius={2} tone=\"critical\">\n <Stack space={3}>\n <Label muted size={0}>\n {t('presentation-error.label')}\n </Label>\n <WrappedCode size={1}>{errorParams.error.message}</WrappedCode>\n </Stack>\n </Card>\n )}\n </ErrorCard>\n )\n }\n\n return (\n <ErrorBoundary onCatch={setErrorParams}>\n <PaneLayout style={{height: '100%'}}>\n <PresentationPaneRouterProvider\n searchParams={searchParams}\n onEditReference={onEditReference}\n onStructureParams={onStructureParams}\n structureParams={structureParams}\n >\n <Suspense fallback={<PresentationSpinner />}>\n <StructureDocumentPane\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n paneKey=\"document\"\n index={1}\n itemId=\"document\"\n pane={paneDocumentNode}\n onFocusPath={handleFocusPath}\n />\n </Suspense>\n </PresentationPaneRouterProvider>\n </PaneLayout>\n </ErrorBoundary>\n )\n}\n","import {StructureToolProvider} from '../../structure/StructureToolProvider'\nimport {\n type PresentationNavigate,\n type PresentationSearchParams,\n type PresentationStateParams,\n type StructureDocumentPaneParams,\n} from '../types'\nimport {DocumentPane} from './DocumentPane'\n\nexport function DocumentPanel(props: {\n documentId: string\n documentType: string\n onEditReference: PresentationNavigate\n onFocusPath: (state: Required<PresentationStateParams>) => void\n onStructureParams: (params: StructureDocumentPaneParams) => void\n searchParams: PresentationSearchParams\n structureParams: StructureDocumentPaneParams\n}): React.JSX.Element {\n const {\n documentId,\n documentType,\n onFocusPath,\n onEditReference,\n onStructureParams,\n searchParams,\n structureParams,\n } = props\n return (\n <StructureToolProvider>\n <DocumentPane\n documentId={documentId}\n documentType={documentType}\n onEditReference={onEditReference}\n onFocusPath={onFocusPath}\n onStructureParams={onStructureParams}\n searchParams={searchParams}\n structureParams={structureParams}\n />\n </StructureToolProvider>\n )\n}\n","import {type SchemaType} from '@sanity/types'\nimport {useEffect, useState} from 'react'\nimport {\n getPreviewStateObservable,\n type PreviewValue,\n type SanityDocument,\n useDocumentPreviewStore,\n usePerspective,\n} from 'sanity'\n\ninterface PreviewState {\n isLoading?: boolean\n snapshot?: PreviewValue | Partial<SanityDocument> | null\n}\n\nexport default function usePreviewState(documentId: string, schemaType?: SchemaType): PreviewState {\n const documentPreviewStore = useDocumentPreviewStore()\n const [preview, setPreview] = useState<PreviewState>({})\n const {perspectiveStack} = usePerspective()\n useEffect(() => {\n if (!schemaType) {\n return undefined\n }\n const subscription = getPreviewStateObservable(\n documentPreviewStore,\n schemaType,\n documentId,\n perspectiveStack,\n ).subscribe((state) => {\n setPreview(state)\n })\n\n return () => {\n subscription?.unsubscribe()\n }\n }, [documentPreviewStore, schemaType, documentId, perspectiveStack])\n\n return preview\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {type HTMLProps, useCallback, useMemo} from 'react'\nimport {\n getPreviewValueWithFallback,\n PreviewCard,\n SanityDefaultPreview,\n Translate,\n useSchema,\n useTranslation,\n} from 'sanity'\nimport {StateLink} from 'sanity/router'\n\nimport {presentationLocaleNamespace} from '../i18n'\nimport {\n type MainDocumentState,\n type PresentationNavigate,\n type PresentationSearchParams,\n type PresentationStateParams,\n type StructureDocumentPaneParams,\n} from '../types'\nimport {DocumentListPane} from './DocumentListPane'\nimport {DocumentPanel} from './DocumentPanel'\nimport usePreviewState from './usePreviewState'\n\nexport function ContentEditor(props: {\n documentId?: string\n documentType?: string\n mainDocumentState?: MainDocumentState\n onEditReference: PresentationNavigate\n onFocusPath: (state: Required<PresentationStateParams>) => void\n onStructureParams: (params: StructureDocumentPaneParams) => void\n refs: {_id: string; _type: string}[]\n structureParams: StructureDocumentPaneParams\n searchParams: PresentationSearchParams\n}): React.JSX.Element {\n const {\n documentId,\n documentType,\n mainDocumentState,\n onEditReference,\n onFocusPath,\n onStructureParams,\n refs,\n searchParams,\n structureParams,\n } = props\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const schema = useSchema()\n\n const MainDocumentLink = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (props: HTMLProps<HTMLAnchorElement>) => {\n return (\n <StateLink\n {...props}\n state={{\n id: mainDocumentState?.document?._id,\n type: mainDocumentState?.document?._type,\n _searchParams: Object.entries(searchParams),\n }}\n />\n )\n },\n [mainDocumentState, searchParams],\n )\n\n const schemaType = useMemo(\n () => schema.get(mainDocumentState?.document?._type || 'shoe')!,\n [mainDocumentState, schema],\n )\n\n const previewState = usePreviewState(mainDocumentState?.document?._id || '', schemaType)\n\n const preview = useMemo(() => {\n if (!mainDocumentState?.document) return null\n\n return (\n <SanityDefaultPreview\n {...getPreviewValueWithFallback({\n snapshot: previewState.snapshot,\n fallback: mainDocumentState!.document,\n })}\n schemaType={schemaType}\n status={\n <Card padding={1} radius={2} shadow={1}>\n <Text muted size={0} weight=\"medium\">\n {t('main-document.label')}\n </Text>\n </Card>\n }\n />\n )\n }, [mainDocumentState, schemaType, t, previewState])\n\n if (documentId && documentType) {\n return (\n <DocumentPanel\n documentId={documentId}\n documentType={documentType}\n onEditReference={onEditReference}\n onFocusPath={onFocusPath}\n onStructureParams={onStructureParams}\n searchParams={searchParams}\n structureParams={structureParams}\n />\n )\n }\n\n return (\n <Flex direction=\"column\" flex={1} height=\"fill\">\n {mainDocumentState && (\n <Card padding={3} tone={mainDocumentState.document ? 'inherit' : 'caution'}>\n {mainDocumentState.document ? (\n <PreviewCard\n __unstable_focusRing\n // oxlint-disable-next-line no-explicit-any\n as={MainDocumentLink as any}\n data-as=\"a\"\n radius={2}\n sizing=\"border\"\n tone=\"inherit\"\n >\n {preview}\n </PreviewCard>\n ) : (\n <Card padding={2} radius={2} tone=\"inherit\">\n <Flex gap={3}>\n <Box flex=\"none\">\n <Text size={1}>\n <WarningOutlineIcon />\n </Text>\n </Box>\n <Box flex={1}>\n <Text size={1}>\n <Translate\n t={t}\n i18nKey=\"main-document.missing.text\"\n components={{Code: 'code'}}\n values={{path: mainDocumentState.path}}\n />\n </Text>\n </Box>\n </Flex>\n </Card>\n )}\n </Card>\n )}\n\n <DocumentListPane\n mainDocumentState={mainDocumentState}\n onEditReference={onEditReference}\n onStructureParams={onStructureParams}\n searchParams={searchParams}\n refs={refs}\n />\n </Flex>\n )\n}\n","import {useState} from 'react'\nimport {v4 as uuid} from 'uuid'\n\nexport function usePanelId(id?: string): string {\n const [panelId] = useState(() => id || uuid())\n return panelId\n}\n","import {\n type FunctionComponent,\n type MouseEvent as ReactMouseEvent,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n} from 'react'\nimport {PresentationPanelsContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\nimport {usePanelId} from './usePanelId'\n\nconst Resizer = styled.div`\n position: relative;\n`\nconst ResizerInner = styled.div<{\n $disabled: boolean\n}>`\n position: absolute;\n top: 0;\n bottom: 0;\n left: -5px;\n width: 9px;\n z-index: 10;\n cursor: ${({$disabled}) => ($disabled ? 'auto' : 'ew-resize')};\n\n /* Border */\n & > span:nth-child(1) {\n display: block;\n border-left: 1px solid var(--card-border-color);\n position: absolute;\n top: 0;\n left: 4px;\n bottom: 0;\n transition: opacity 200ms;\n }\n\n ${({$disabled}) =>\n !$disabled &&\n `\n /* Hover effect */\n & > span:nth-child(2) {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 9px;\n bottom: 0;\n background-color: var(--card-border-color);\n opacity: 0;\n transition: opacity 150ms;\n }\n\n @media (hover: hover) {\n &:hover > span:nth-child(2) {\n opacity: 0.2;\n }\n }\n `}\n`\n\nexport const PanelResizer: FunctionComponent<{\n id?: string\n order: number\n disabled?: boolean\n}> = function ({id: propId, order, disabled = false}) {\n const el = useRef<HTMLDivElement>(null)\n\n const context = useContext(PresentationPanelsContext)\n\n if (context === null) {\n throw Error(`Panel components must be rendered within a PanelGroup container`)\n }\n\n const id = usePanelId(propId)\n\n const {activeResizer, drag, startDragging, stopDragging, registerElement, unregisterElement} =\n context\n\n const isDragging = activeResizer === id\n\n if (context === null) {\n throw Error(`Panel components must be rendered within a PanelGroup container`)\n }\n\n const onMouseDown = useCallback(\n (event: ReactMouseEvent) => {\n startDragging(id, event.nativeEvent)\n },\n [id, startDragging],\n )\n\n const onDrag = useCallback(\n (e: MouseEvent) => {\n drag(id, e)\n },\n [id, drag],\n )\n\n const onDragStop = useCallback(() => {\n el.current!.blur()\n stopDragging()\n }, [stopDragging])\n\n useEffect(() => {\n if (!isDragging || disabled) return\n\n // Set styles to prevent text selection and force an ew-resize cursor whilst\n // dragging. Return a reset callback so we can revert to any values that\n // might have been present before dragging started.\n function setDocumentStyles() {\n const bodyStyle = document.body.style\n const documentStyle = document.documentElement.style\n\n const {cursor} = documentStyle\n const {userSelect} = bodyStyle\n\n documentStyle.cursor = 'ew-resize'\n bodyStyle.userSelect = 'none'\n\n return () => {\n if (cursor) documentStyle.cursor = cursor\n else documentStyle.removeProperty('cursor')\n\n if (userSelect) bodyStyle.userSelect = userSelect\n else bodyStyle.removeProperty('user-select')\n }\n }\n\n const resetDocumentStyles = setDocumentStyles()\n window.addEventListener('mousemove', onDrag)\n window.addEventListener('mouseup', onDragStop)\n window.addEventListener('contextmenu', onDragStop)\n\n // eslint-disable-next-line consistent-return\n return () => {\n resetDocumentStyles()\n window.removeEventListener('mousemove', onDrag)\n window.removeEventListener('mouseup', onDragStop)\n window.removeEventListener('contextmenu', onDragStop)\n }\n }, [disabled, isDragging, onDrag, onDragStop])\n\n useLayoutEffect(() => {\n registerElement(id, {id, order, type: 'resizer', el})\n\n return () => {\n unregisterElement(id)\n }\n }, [id, order, registerElement, unregisterElement])\n\n return (\n <Resizer onMouseDown={onMouseDown} ref={el}>\n <ResizerInner $disabled={disabled}>\n <span />\n <span />\n </ResizerInner>\n </Resizer>\n )\n}\n","import {\n type Dispatch,\n type FunctionComponent,\n type PropsWithChildren,\n type SetStateAction,\n} from 'react'\nimport {type CommentIntentGetter, CommentsIntentProvider, type SanityDocument} from 'sanity'\n\nimport {ContentEditor} from './editor/ContentEditor'\nimport {DisplayedDocumentBroadcasterProvider} from './loader/DisplayedDocumentBroadcaster'\nimport {Panel} from './panels/Panel'\nimport {PanelResizer} from './panels/PanelResizer'\nimport {\n type MainDocumentState,\n type PresentationNavigate,\n type PresentationParamsContextValue,\n type PresentationSearchParams,\n type PresentationStateParams,\n type StructureDocumentPaneParams,\n} from './types'\n\nexport interface PresentationContentProps {\n documentId: PresentationParamsContextValue['id']\n documentsOnPage: {_id: string; _type: string}[]\n documentType: PresentationParamsContextValue['type']\n getCommentIntent: CommentIntentGetter\n mainDocumentState: MainDocumentState | undefined\n onEditReference: PresentationNavigate\n onFocusPath: (state: Required<PresentationStateParams>) => void\n onStructureParams: (params: StructureDocumentPaneParams) => void\n searchParams: PresentationSearchParams\n setDisplayedDocument: Dispatch<SetStateAction<Partial<SanityDocument> | null | undefined>>\n structureParams: StructureDocumentPaneParams\n}\n\nconst PresentationContentWrapper: FunctionComponent<\n PropsWithChildren<{\n documentId?: string\n getCommentIntent: CommentIntentGetter\n setDisplayedDocument: Dispatch<SetStateAction<Partial<SanityDocument> | null | undefined>>\n }>\n> = (props) => {\n const {documentId, setDisplayedDocument, getCommentIntent} = props\n return (\n <>\n <PanelResizer order={4} />\n <Panel id=\"content\" minWidth={325} order={5}>\n <DisplayedDocumentBroadcasterProvider\n documentId={documentId}\n setDisplayedDocument={setDisplayedDocument}\n >\n <CommentsIntentProvider getIntent={getCommentIntent}>\n {props.children}\n </CommentsIntentProvider>\n </DisplayedDocumentBroadcasterProvider>\n </Panel>\n </>\n )\n}\n\nexport const PresentationContent: FunctionComponent<PresentationContentProps> = (props) => {\n const {\n documentId,\n documentsOnPage,\n documentType,\n getCommentIntent,\n mainDocumentState,\n onEditReference,\n onFocusPath,\n onStructureParams,\n searchParams,\n setDisplayedDocument,\n structureParams,\n } = props\n\n return (\n <PresentationContentWrapper\n documentId={documentId}\n getCommentIntent={getCommentIntent}\n setDisplayedDocument={setDisplayedDocument}\n >\n <ContentEditor\n documentId={documentId}\n documentType={documentType}\n mainDocumentState={mainDocumentState}\n onEditReference={onEditReference}\n onFocusPath={onFocusPath}\n onStructureParams={onStructureParams}\n refs={documentsOnPage}\n searchParams={searchParams}\n structureParams={structureParams}\n />\n </PresentationContentWrapper>\n )\n}\n","import {type FunctionComponent, type PropsWithChildren, useCallback} from 'react'\nimport {PresentationNavigateContext} from 'sanity/_singletons'\n\nimport {\n type CombinedSearchParams,\n type PresentationNavigate,\n type PresentationNavigateContextValue,\n type PresentationNavigateOptions,\n type PresentationStateParams,\n} from './types'\n\nexport const PresentationNavigateProvider: FunctionComponent<\n PropsWithChildren<{\n navigate: PresentationNavigate\n }>\n> = function (props) {\n const {children, navigate: _navigate} = props\n\n const navigate = useCallback<PresentationNavigateContextValue>(\n (preview, document) => {\n if (preview || document) {\n const obj: {\n state?: PresentationStateParams\n params?: CombinedSearchParams\n } = {}\n if (preview) obj.params = {preview}\n if (document) obj.state = document\n // Cast because navigate expects either params or state to be defined, which we guarantee above\n _navigate(obj as PresentationNavigateOptions)\n }\n },\n [_navigate],\n )\n\n return (\n <PresentationNavigateContext.Provider value={navigate}>\n {children}\n </PresentationNavigateContext.Provider>\n )\n}\n","import {type Dispatch, type SetStateAction, useEffect, useState} from 'react'\n\nexport function useLocalState<T>(key: string, defaultValue: T): [T, Dispatch<SetStateAction<T>>] {\n const [value, setValue] = useState<T>(() =>\n JSON.parse(localStorage.getItem(key) ?? JSON.stringify(defaultValue)),\n )\n\n useEffect(() => {\n localStorage.setItem(key, JSON.stringify(value))\n }, [key, value])\n\n return [value, setValue]\n}\n","import {memo, useCallback, useMemo} from 'react'\n\nimport {Panel} from './panels/Panel'\nimport {PanelResizer} from './panels/PanelResizer'\nimport {type NavigatorOptions} from './types'\nimport {useLocalState} from './useLocalState'\n\n/** @internal */\nexport interface UsePresentationNavigatorProps {\n unstable_navigator?: NavigatorOptions\n}\n\n/** @internal */\nexport interface UsePresentationNavigatorState {\n navigatorEnabled: boolean\n toggleNavigator: (() => void) | undefined\n}\n\n/** @internal */\nexport function usePresentationNavigator(\n props: UsePresentationNavigatorProps,\n): [UsePresentationNavigatorState, () => React.JSX.Element] {\n const {unstable_navigator} = props\n\n const navigatorProvided = !!unstable_navigator?.component\n const [_navigatorEnabled, setNavigatorEnabled] = useLocalState<boolean>(\n 'presentation/navigator',\n navigatorProvided,\n )\n const navigatorEnabled = navigatorProvided ? _navigatorEnabled : false\n const toggleNavigator = useMemo(() => {\n if (!navigatorProvided) return undefined\n\n return () => setNavigatorEnabled((enabled) => !enabled)\n }, [navigatorProvided, setNavigatorEnabled])\n\n const Component = useCallback(\n function PresentationNavigator() {\n return <>{navigatorEnabled && <Navigator {...unstable_navigator!} />}</>\n },\n [navigatorEnabled, unstable_navigator],\n )\n\n return [{navigatorEnabled, toggleNavigator}, Component]\n}\n\nfunction NavigatorComponent(props: NavigatorOptions) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {minWidth, maxWidth, component: NavigatorComponent} = props\n // eslint-disable-next-line no-eq-null\n const navigatorDisabled = minWidth != null && maxWidth != null && minWidth === maxWidth\n return (\n <>\n <Panel id=\"navigator\" minWidth={minWidth} maxWidth={maxWidth} order={1}>\n <NavigatorComponent />\n </Panel>\n <PanelResizer order={2} disabled={navigatorDisabled} />\n </>\n )\n}\nconst Navigator = memo(NavigatorComponent)\n","import {type FunctionComponent, type PropsWithChildren, useMemo} from 'react'\nimport {PresentationParamsContext} from 'sanity/_singletons'\n\nimport {type PresentationParamsContextValue} from './types'\n\nexport const PresentationParamsProvider: FunctionComponent<\n PropsWithChildren<{\n params: PresentationParamsContextValue\n }>\n> = function (props) {\n const {children, params} = props\n\n const context = useMemo<PresentationParamsContextValue>(() => params, [params])\n\n return (\n <PresentationParamsContext.Provider value={context}>\n {children}\n </PresentationParamsContext.Provider>\n )\n}\n","import {type FunctionComponent, type PropsWithChildren, useMemo} from 'react'\nimport {PresentationContext} from 'sanity/_singletons'\n\nimport {\n type PresentationContextValue,\n type PresentationNavigate,\n type PresentationParamsContextValue,\n type PresentationSearchParams,\n type StructureDocumentPaneParams,\n} from './types'\n\nexport const PresentationProvider: FunctionComponent<\n PropsWithChildren<{\n devMode: boolean\n name: string\n navigate: PresentationNavigate\n params: PresentationParamsContextValue\n searchParams: PresentationSearchParams\n structureParams: StructureDocumentPaneParams\n }>\n> = function (props) {\n const {children, devMode, name, navigate, params, searchParams, structureParams} = props\n\n const context = useMemo<PresentationContextValue>(\n () => ({\n devMode,\n name,\n navigate,\n params,\n searchParams,\n structureParams,\n }),\n [devMode, name, navigate, params, searchParams, structureParams],\n )\n\n return <PresentationContext.Provider value={context}>{children}</PresentationContext.Provider>\n}\n","import {useSelector} from '@xstate/react'\n\nimport {type PreviewUrlRef} from './machines/preview-url'\n\nexport function useAllowPatterns(previewUrlRef: PreviewUrlRef) {\n const allowPatterns = useSelector(previewUrlRef, (state) => state.context.allowOrigins)\n if (!Array.isArray(allowPatterns)) {\n throw new TypeError('allowPatterns must be an array')\n }\n return allowPatterns\n}\n","/**\n * When encoding the current studio perspective it's necessary to deal with it sometimes being an array, in a consistent way.\n */\nexport function encodeStudioPerspective(studioPerspective: string[] | string): string {\n return Array.isArray(studioPerspective) ? studioPerspective.join(',') : studioPerspective\n}\n","import {useId as useReactId} from 'react'\n\nexport function useId(): string {\n const id = useReactId()\n // Uses the new format introduced in: https://github.com/facebook/react/pull/32001\n return id.startsWith(':') ? id.replace(/^:(.+):$/, '\\u00AB$1\\u00BB') : id\n}\n","import {Box} from '@sanity/ui'\nimport {motion, type VariantLabels, type Variants} from 'framer-motion'\nimport {forwardRef, type ReactEventHandler, useEffect, useImperativeHandle, useRef} from 'react'\nimport {createGlobalStyle, styled} from 'styled-components'\n\nimport {useId} from '../useId'\n\ninterface IFrameProps {\n animate: VariantLabels\n initial: VariantLabels\n onLoad: ReactEventHandler<HTMLIFrameElement>\n preventClick: boolean\n src: string\n variants: Variants\n style: React.CSSProperties\n}\n\nexport const IFrame = forwardRef<HTMLIFrameElement, IFrameProps>(\n function IFrame(props, forwardedRef) {\n const {animate, initial, onLoad, preventClick, src, variants, style} = props\n\n const ref = useRef<HTMLIFrameElement | null>(null)\n // Forward the iframe ref to the parent component\n useImperativeHandle<HTMLIFrameElement | null, HTMLIFrameElement | null>(\n forwardedRef,\n () => ref.current,\n )\n\n /**\n * Ensure that clicking outside of menus and dialogs will close as focus shifts to the iframe\n */\n\n useEffect(() => {\n if (!ref.current) {\n return undefined\n }\n const instance = ref.current\n function handleBlur() {\n if (instance !== document.activeElement) {\n return\n }\n\n instance.dispatchEvent(new MouseEvent('mousedown', {bubbles: true, cancelable: true}))\n }\n window.addEventListener('blur', handleBlur)\n return () => {\n window.removeEventListener('blur', handleBlur)\n }\n }, [])\n\n const viewTransitionName = useId()\n\n return (\n <>\n <IFrameElement\n style={{\n ...style,\n viewTransitionName,\n }}\n animate={animate}\n initial={initial}\n onLoad={onLoad}\n ref={ref}\n src={src}\n variants={variants}\n />\n {preventClick && <IFrameOverlay />}\n <GlobalViewTransition />\n </>\n )\n },\n)\n\nconst IFrameElement = motion.create(styled.iframe`\n box-shadow: 0 0 0 1px var(--card-border-color);\n border: 0;\n max-height: 100%;\n width: 100%;\n view-transition-class: presentation-tool-iframe;\n`)\n\nconst IFrameOverlay = styled(Box)`\n position: absolute;\n inset: 0;\n background: transparent;\n`\n\nconst GlobalViewTransition = createGlobalStyle`\nhtml:active-view-transition-type(sanity-iframe-viewport) {\n view-transition-name: none;\n &::view-transition {\n pointer-events: none;\n }\n /* &::view-transition-old(root) {\n display: none;\n }\n &::view-transition-new(root) {\n animation: none;\n } */\n}\n`\n","import {LaunchIcon} from '@sanity/icons'\nimport {urlSearchParamPreviewPerspective} from '@sanity/preview-url-secret/constants'\nimport {Text} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type PresentationPerspective} from '../types'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {type PreviewProps} from './Preview'\n\n/** @internal */\nexport function OpenPreviewButton(\n props: Pick<PreviewProps, 'openPopup'> & {\n previewLocationOrigin?: string\n previewLocationRoute: string\n perspective: PresentationPerspective\n targetOrigin: string\n },\n): React.ReactNode {\n const {openPopup, previewLocationOrigin, previewLocationRoute, perspective, targetOrigin} = props\n\n const openPreviewLink = useMemo(() => {\n const url = new URL(previewLocationRoute, previewLocationOrigin || targetOrigin)\n url.searchParams.set(urlSearchParamPreviewPerspective, encodeStudioPerspective(perspective))\n const {pathname, search} = url\n\n return `${previewLocationOrigin}${pathname}${search}`\n }, [perspective, previewLocationOrigin, previewLocationRoute, targetOrigin])\n\n const {t} = useTranslation(presentationLocaleNamespace)\n\n const handleOpenPopup = useCallback(\n (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n event.preventDefault()\n openPopup(event.currentTarget.href)\n },\n [openPopup],\n )\n\n return (\n <Tooltip\n animate\n content={<Text size={1}>{t('share-url.menu-item.open.text')}</Text>}\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Button\n as=\"a\"\n aria-label={t('share-url.menu-item.open.text')}\n icon={LaunchIcon}\n mode=\"bleed\"\n href={openPreviewLink}\n rel=\"opener\"\n target=\"_blank\"\n tooltipProps={null}\n // @ts-expect-error the `as=\"a\"` prop isn't enough to change the type of event.target from <div> to <a>\n onClick={handleOpenPopup}\n />\n </Tooltip>\n )\n}\n","import {useSelector} from '@xstate/react'\n\nimport {type PreviewUrlRef} from './machines/preview-url'\n\nexport function useTargetOrigin(previewUrlRef: PreviewUrlRef): string {\n const targetOrigin = useSelector(previewUrlRef, (state) => state.context.previewUrl?.origin)\n if (!targetOrigin) {\n throw new TypeError('targetOrigin is required')\n }\n return targetOrigin\n}\n","import {ResetIcon} from '@sanity/icons'\nimport {TextInput, type TextInputClearButtonProps} from '@sanity/ui'\nimport {\n type ChangeEvent,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {useActiveWorkspace, useTranslation} from 'sanity'\n\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type PreviewUrlRef} from '../machines/preview-url'\nimport {useAllowPatterns} from '../useAllowPatterns'\nimport {useTargetOrigin} from '../useTargetOrigin'\n\nexport function PreviewLocationInput(props: {\n fontSize?: number\n onChange: (value: string) => void\n previewUrlRef: PreviewUrlRef\n padding?: number\n prefix?: ReactNode\n suffix?: ReactNode\n value: string\n}): React.JSX.Element {\n const {fontSize = 1, onChange, padding = 3, prefix, suffix, value, previewUrlRef} = props\n const allowOrigins = useAllowPatterns(previewUrlRef)\n const targetOrigin = useTargetOrigin(previewUrlRef)\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const {basePath = '/'} = useActiveWorkspace()?.activeWorkspace || {}\n\n const inputRef = useRef<HTMLInputElement | null>(null)\n const [sessionValue, setSessionValue] = useState<string | undefined>(undefined)\n const [customValidity, setCustomValidity] = useState<string | undefined>(undefined)\n\n const handleChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setSessionValue(event.currentTarget.value)\n }, [])\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n if (sessionValue === undefined) {\n return\n }\n\n let absoluteValue = sessionValue\n try {\n absoluteValue = new URL(sessionValue, targetOrigin).toString()\n } catch {\n // ignore\n }\n\n if (Array.isArray(allowOrigins)) {\n if (!allowOrigins.some((pattern) => pattern.test(absoluteValue))) {\n setCustomValidity(\n t('preview-location-input.error', {\n origin: targetOrigin,\n context: 'origin-not-allowed',\n }),\n )\n event.currentTarget.reportValidity()\n return\n }\n // `origin` is an empty string '' if the Studio is embedded, and that's when we need to protect against recursion\n } else if (\n !targetOrigin &&\n (absoluteValue.startsWith(`${basePath}/`) || absoluteValue === basePath)\n ) {\n setCustomValidity(\n t('preview-location-input.error', {basePath, context: 'same-base-path'}),\n )\n return\n }\n\n const nextValue = absoluteValue === targetOrigin ? `${targetOrigin}/` : absoluteValue\n\n setCustomValidity(undefined)\n setSessionValue(undefined)\n\n onChange(nextValue)\n\n inputRef.current?.blur()\n }\n\n if (event.key === 'Escape') {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }\n },\n [allowOrigins, basePath, onChange, sessionValue, t, targetOrigin],\n )\n\n const handleBlur = useCallback(() => {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }, [])\n\n const handleClear = useCallback(() => {\n setCustomValidity(undefined)\n let nextValue = value\n try {\n nextValue = new URL(value, targetOrigin).toString()\n } catch {\n // ignore\n }\n setSessionValue(nextValue)\n }, [targetOrigin, value])\n\n useEffect(() => {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }, [targetOrigin, value])\n\n const resetButton: TextInputClearButtonProps = useMemo(() => ({icon: ResetIcon}), [])\n\n return (\n <>\n <TextInput\n clearButton={customValidity ? resetButton : undefined}\n customValidity={customValidity}\n fontSize={fontSize}\n onBlur={handleBlur}\n onClear={handleClear}\n onChange={handleChange}\n onKeyDownCapture={handleKeyDown}\n padding={padding}\n prefix={prefix}\n style={{zIndex: 1}}\n radius={2}\n ref={inputRef}\n space={padding}\n suffix={suffix}\n value={sessionValue === undefined ? new URL(value, targetOrigin).toString() : sessionValue}\n />\n </>\n )\n}\n","/* eslint-disable @typescript-eslint/no-shadow,no-negated-condition */\nimport {type ClientPerspective, type SyncTag} from '@sanity/client'\nimport {CopyIcon, ShareIcon} from '@sanity/icons'\nimport {SanityMonogram} from '@sanity/logos'\nimport {fetchSharedAccessQuery} from '@sanity/preview-url-secret/constants'\nimport {\n disablePreviewAccessSharing,\n enablePreviewAccessSharing,\n} from '@sanity/preview-url-secret/toggle-preview-access-sharing'\nimport {setSecretSearchParams} from '@sanity/preview-url-secret/without-secret-search-params'\nimport {\n Box,\n Card,\n Grid,\n Menu,\n MenuDivider,\n Spinner,\n Stack,\n Switch,\n Text,\n useToast,\n} from '@sanity/ui'\nimport {AnimatePresence, motion} from 'framer-motion'\nimport {lazy, memo, Suspense, useCallback, useEffect, useMemo, useState} from 'react'\nimport {useClient, useCurrentUser, useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {Button, MenuButton, MenuItem, Tooltip} from '../../ui-components'\nimport {API_VERSION} from '../constants'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {type PreviewProps} from './Preview'\n\nconst QRCodeSVG = lazy(() => import('./QRCodeSVG'))\n\nexport interface SharePreviewMenuProps {\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n previewLocationRoute: string\n initialUrl: PreviewProps['initialUrl']\n perspective: ClientPerspective\n}\n\nconst QrCodeLogoSize = 24\nconst QrCodeLogoPadding = 16\nconst QrSize = 224\n\nconst StyledSanityMonogram = styled(SanityMonogram)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n height: ${QrCodeLogoSize}px;\n width: ${QrCodeLogoSize}px;\n`\n\nconst MotionSpinner = motion.create(Spinner)\nconst MotionText = motion.create(Text)\nconst MotionMonogram = motion.create(StyledSanityMonogram)\n\nexport const SharePreviewMenu = memo(function SharePreviewMenuComponent(\n props: SharePreviewMenuProps,\n) {\n const {\n canToggleSharePreviewAccess,\n canUseSharedPreviewAccess,\n initialUrl,\n previewLocationRoute,\n perspective,\n } = props\n const {t} = useTranslation(presentationLocaleNamespace)\n const {push: pushToast} = useToast()\n const client = useClient({apiVersion: API_VERSION})\n const currentUser = useCurrentUser()\n const [loading, setLoading] = useState(true)\n const [enabling, setEnabling] = useState(false)\n const [disabling, setDisabling] = useState(false)\n const [secret, setSecret] = useState<string | null>(null)\n const busy = enabling || disabling || loading\n const url = useMemo(\n () =>\n secret\n ? setSecretSearchParams(\n initialUrl,\n secret,\n previewLocationRoute,\n encodeStudioPerspective(perspective),\n )\n : null,\n [initialUrl, perspective, previewLocationRoute, secret],\n )\n\n const [error, setError] = useState<unknown>(null)\n if (error) {\n throw error\n }\n\n const handleUnableToToggle = useCallback(() => {\n pushToast({\n closable: true,\n status: 'warning',\n title: t('share-preview-menu.error_toggle-sharing', {context: 'toggle-sharing'}),\n })\n }, [pushToast, t])\n\n const handleDisableSharing = useCallback(async () => {\n try {\n setDisabling(true)\n await disablePreviewAccessSharing(\n client,\n 'sanity/presentation',\n typeof window === 'undefined' ? '' : location.href,\n currentUser?.id,\n )\n setSecret(null)\n } catch (error) {\n setError(error)\n } finally {\n setDisabling(false)\n }\n }, [client, currentUser?.id])\n const handleEnableSharing = useCallback(async () => {\n try {\n setEnabling(true)\n\n const previewUrlSecret = await enablePreviewAccessSharing(\n client,\n 'sanity/presentation',\n typeof window === 'undefined' ? '' : location.href,\n currentUser?.id,\n )\n setSecret(previewUrlSecret.secret)\n } catch (error) {\n setError(error)\n } finally {\n setEnabling(false)\n }\n }, [client, currentUser?.id])\n\n const handleCopyUrl = useCallback(() => {\n try {\n if (!url) {\n throw new Error('No URL to copy')\n }\n navigator.clipboard.writeText(url.toString())\n pushToast({\n closable: true,\n status: 'success',\n title: t('share-url.clipboard.status', {context: 'success'}),\n })\n } catch (error) {\n setError(error)\n }\n }, [pushToast, t, url])\n\n useEffect(() => {\n let controller = new AbortController()\n let usedTags: SyncTag[] = []\n async function fetchShareSecret(lastLiveEventId: string | null, signal: AbortSignal) {\n const {result, syncTags} = await client.fetch<string | null>(\n fetchSharedAccessQuery,\n {},\n {filterResponse: false, lastLiveEventId, tag: 'presentation.fetch-shared-access-secret'},\n )\n if (Array.isArray(syncTags)) {\n usedTags = syncTags\n }\n if (!signal.aborted) {\n setSecret(result)\n }\n }\n const subscription = client.live.events().subscribe({\n next: (event) => {\n if (event.type === 'message') {\n controller.abort()\n controller = new AbortController()\n if (event.tags.some((tag) => usedTags.includes(tag))) {\n fetchShareSecret(event.id, controller.signal)\n }\n }\n },\n error: setError,\n })\n\n fetchShareSecret(null, controller.signal).finally(() => setLoading(false))\n\n return () => {\n subscription.unsubscribe()\n controller.abort()\n }\n }, [client])\n\n return (\n <MenuButton\n button={\n <Button\n aria-label={t('preview-frame.share-button.aria-label')}\n icon={ShareIcon}\n mode=\"bleed\"\n tooltipProps={null}\n />\n }\n id=\"share-menu\"\n menu={\n <Menu style={{maxWidth: 248}} padding={canUseSharedPreviewAccess ? undefined : 0}>\n {canUseSharedPreviewAccess ? (\n <>\n <label style={{cursor: 'pointer'}}>\n <Grid\n columns={2}\n rows={2}\n gapX={3}\n gapY={1}\n style={{\n justifyContent: 'center',\n alignItems: 'center',\n gridTemplateColumns: 'min-content 1fr',\n gridTemplateRows: 'min-content',\n }}\n paddingTop={3}\n paddingX={3}\n >\n <Tooltip\n animate\n content={\n <Text size={1}>\n {t('share-preview-menu.toggle-button.tooltip', {\n context: url ? 'disable' : 'enable',\n })}\n </Text>\n }\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Switch\n checked={enabling || (url !== null && !disabling)}\n readOnly={enabling || disabling}\n indeterminate={loading}\n onChange={\n !canToggleSharePreviewAccess\n ? handleUnableToToggle\n : url\n ? handleDisableSharing\n : handleEnableSharing\n }\n />\n </Tooltip>\n <Text size={1} weight=\"medium\">\n {t('share-preview-menu.toggle-button.label', {context: 'first-line'})}\n </Text>\n <span />\n <Text muted size={1}>\n {t('share-preview-menu.toggle-button.label', {context: 'second-line'})}\n </Text>\n </Grid>\n </label>\n <Box padding={3} paddingTop={2}>\n <Stack space={3}>\n <Card\n tone={busy || !url ? 'transparent' : undefined}\n style={{\n position: 'relative',\n aspectRatio: '1 / 1',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <AnimatePresence>\n {busy ? (\n <MotionSpinner\n muted\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n exit={{opacity: 0}}\n />\n ) : url ? (\n <>\n <Suspense fallback={<Spinner />}>\n <QRCodeSVG\n title={t('share-preview-menu.qr-code.title', {url: url.toString()})}\n value={url.toString()}\n size={QrSize}\n color=\"var(--card-fg-color)\"\n logoSize={QrCodeLogoSize + QrCodeLogoPadding}\n />\n <MotionMonogram\n initial={{opacity: -0.5}}\n animate={{opacity: 1.5}}\n exit={{opacity: 0}}\n />\n </Suspense>\n </>\n ) : (\n <MotionText\n muted\n size={1}\n style={{maxWidth: '100px', textWrap: 'pretty', textAlign: 'center'}}\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n exit={{opacity: 0}}\n >\n {t('share-preview-menu.qr-code.placeholder')}\n </MotionText>\n )}\n </AnimatePresence>\n </Card>\n <Text muted size={1}>\n {t('share-preview-menu.qr-code.instructions')}\n </Text>\n </Stack>\n </Box>\n <MenuDivider />\n <MenuItem\n disabled={!url || disabling}\n icon={CopyIcon}\n onClick={handleCopyUrl}\n text={t('share-preview-menu.copy-url.text')}\n />\n </>\n ) : (\n <Card padding={2} tone=\"caution\" radius={3}>\n <Text style={{textWrap: 'pretty'}}>\n {t('share-preview-menu.error', {context: 'missing-grants'})}\n </Text>\n </Card>\n )}\n </Menu>\n }\n popover={{\n constrainSize: true,\n placement: 'bottom',\n portal: true,\n }}\n />\n )\n})\nSharePreviewMenu.displayName = 'Memo(SharePreviewMenu)'\n","import {DesktopIcon, MobileDeviceIcon, PanelLeftIcon, RefreshIcon} from '@sanity/icons'\nimport {withoutSecretSearchParams} from '@sanity/preview-url-secret/without-secret-search-params'\nimport {Box, Card, Flex, Hotkeys, Switch, Text} from '@sanity/ui'\nimport {useSelector} from '@xstate/react'\nimport {type RefObject, useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type HeaderOptions} from '../types'\nimport {useId} from '../useId'\nimport {OpenPreviewButton} from './OpenPreviewButton'\nimport {type PreviewProps} from './Preview'\nimport {PreviewLocationInput} from './PreviewLocationInput'\nimport {SharePreviewMenu} from './SharePreviewMenu'\n\n/** @public */\nexport interface PreviewHeaderProps extends PreviewProps {\n iframeRef: RefObject<HTMLIFrameElement | null>\n renderDefault: (props: PreviewHeaderProps) => React.JSX.Element\n}\n\nconst PreviewHeaderDefault = (props: Omit<PreviewHeaderProps, 'renderDefault'>) => {\n const {\n canSharePreviewAccess,\n canToggleSharePreviewAccess,\n canUseSharedPreviewAccess,\n iframeRef,\n initialUrl,\n navigatorEnabled,\n onPathChange,\n onRefresh,\n openPopup,\n overlaysConnection,\n presentationRef,\n perspective,\n previewUrl,\n setViewport,\n targetOrigin,\n toggleNavigator,\n toggleOverlay,\n viewport,\n previewUrlRef,\n } = props\n\n const {t} = useTranslation(presentationLocaleNamespace)\n\n const toggleViewportSize = useCallback(\n () => setViewport(viewport === 'desktop' ? 'mobile' : 'desktop'),\n [setViewport, viewport],\n )\n\n const previewLocationOrigin = useMemo(() => {\n return targetOrigin === location.origin ? '' : targetOrigin\n }, [targetOrigin])\n\n const handleRefresh = () => {\n onRefresh(() => {\n if (!iframeRef.current) {\n return\n }\n presentationRef.send({type: 'iframe reload'})\n // Funky way to reload an iframe without CORS issues\n // ref.current.src = ref.current.src\n Object.assign(iframeRef.current, {src: `${targetOrigin}${previewUrl || '/'}`})\n })\n }\n\n const isLoading = useSelector(presentationRef, (state) => state.matches('loading'))\n const isLoaded = useSelector(presentationRef, (state) => state.matches('loaded'))\n const isRefreshing = useSelector(presentationRef, (state) =>\n state.matches({loaded: 'refreshing'}),\n )\n const isReloading = useSelector(presentationRef, (state) => state.matches({loaded: 'reloading'}))\n const overlaysEnabled = useSelector(\n presentationRef,\n (state) => state.context.visualEditingOverlaysEnabled,\n )\n\n const previewLocationRoute = useMemo(() => {\n const previewURL = new URL(previewUrl || '/', targetOrigin)\n const {pathname, search} = withoutSecretSearchParams(previewURL)\n\n return `${pathname}${search}`\n }, [previewUrl, targetOrigin])\n\n const perspectiveToggleTooltipId = useId()\n\n /**\n * If the preview URL machine is busy it means it's about to change the target origin and reload the iframe,\n * so we show a spinner\n */\n const previewUrlBusy = useSelector(previewUrlRef, (state) => state.hasTag('busy'))\n\n return (\n <Flex align=\"center\" gap={1} paddingX={1} style={{width: '100%'}}>\n {toggleNavigator && (\n <Button\n aria-label={t('preview-frame.navigator.toggle-button.aria-label')}\n icon={PanelLeftIcon}\n mode=\"bleed\"\n onClick={toggleNavigator}\n selected={navigatorEnabled}\n tooltipProps={{\n content: <Text size={1}>{t('preview-frame.navigator.toggle-button.tooltip')}</Text>,\n fallbackPlacements: ['bottom-start'],\n placement: 'bottom',\n }}\n />\n )}\n\n <Tooltip\n animate\n content={\n <Flex align=\"center\" style={{whiteSpace: 'nowrap'}}>\n <Box padding={1}>\n <Text size={1}>\n {t('preview-frame.overlay.toggle-button.tooltip', {\n context: overlaysEnabled ? 'disable' : 'enable',\n })}\n </Text>\n </Box>\n <Box paddingY={1}>\n <Hotkeys keys={['Alt']} style={{marginTop: -4, marginBottom: -4}} />\n </Box>\n </Flex>\n }\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Card\n as=\"label\"\n flex=\"none\"\n padding={3}\n marginX={1}\n style={{\n lineHeight: 0,\n borderRadius: 999,\n userSelect: 'none',\n }}\n tone={overlaysEnabled ? 'transparent' : undefined}\n >\n <Flex align=\"center\" gap={3}>\n <div style={{margin: -4}}>\n <Switch\n indeterminate={!isLoaded}\n checked={overlaysEnabled}\n onChange={toggleOverlay}\n disabled={isLoading || overlaysConnection !== 'connected'}\n />\n </div>\n <Box>\n <Text muted={!overlaysEnabled} size={1} weight=\"medium\">\n {t('preview-frame.overlay.toggle-button.text')}\n </Text>\n </Box>\n </Flex>\n </Card>\n </Tooltip>\n\n <Box flex={1}>\n <PreviewLocationInput\n previewUrlRef={previewUrlRef}\n prefix={\n <Box padding={1}>\n <Tooltip\n animate\n content={\n <Text size={1}>\n {isLoaded\n ? t('preview-frame.refresh-button.tooltip')\n : t('preview-frame.status', {\n context: isLoading\n ? 'loading'\n : isRefreshing\n ? 'refreshing'\n : isReloading\n ? 'reloading'\n : 'unknown',\n })}\n </Text>\n }\n fallbackPlacements={['bottom-end']}\n placement=\"bottom\"\n portal\n >\n <Button\n aria-label={t('preview-frame.refresh-button.aria-label')}\n icon={RefreshIcon}\n mode=\"bleed\"\n loading={isReloading || isRefreshing || previewUrlBusy}\n onClick={handleRefresh}\n tooltipProps={null}\n />\n </Tooltip>\n </Box>\n }\n onChange={onPathChange}\n suffix={\n <Box padding={1}>\n <OpenPreviewButton\n openPopup={openPopup}\n previewLocationOrigin={previewLocationOrigin}\n previewLocationRoute={previewLocationRoute}\n perspective={perspective}\n targetOrigin={targetOrigin}\n />\n </Box>\n }\n value={previewLocationRoute}\n />\n </Box>\n\n <Flex align=\"center\" flex=\"none\" gap={1}>\n <Tooltip\n animate\n // eslint-disable-next-line react/jsx-no-bind\n ref={(node) => {\n node?.style.setProperty('view-transition-name', perspectiveToggleTooltipId)\n }}\n content={\n <Text size={1}>\n {t('preview-frame.viewport-button.tooltip', {\n context: viewport === 'desktop' ? 'narrow' : 'full',\n })}\n </Text>\n }\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Button\n data-testid=\"preview-viewport-toggle\"\n data-viewport={viewport}\n aria-label={t('preview-frame.viewport-button.aria-label')}\n icon={viewport === 'desktop' ? MobileDeviceIcon : DesktopIcon}\n mode=\"bleed\"\n onClick={toggleViewportSize}\n tooltipProps={null}\n />\n </Tooltip>\n </Flex>\n\n {canSharePreviewAccess && (\n <Flex align=\"center\" flex=\"none\" gap={1}>\n <SharePreviewMenu\n canToggleSharePreviewAccess={canToggleSharePreviewAccess}\n canUseSharedPreviewAccess={canUseSharedPreviewAccess}\n previewLocationRoute={previewLocationRoute}\n initialUrl={initialUrl}\n perspective={perspective}\n />\n </Flex>\n )}\n </Flex>\n )\n}\n\n/** @internal */\nexport function PreviewHeader(\n props: Omit<PreviewHeaderProps, 'renderDefault'> & {options?: HeaderOptions},\n): React.JSX.Element {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const renderDefault = useCallback((props: Omit<PreviewHeaderProps, 'renderDefault'>) => {\n return <PreviewHeaderDefault {...props} />\n }, [])\n\n const HeaderComponent = props.options?.component\n const header = HeaderComponent ? (\n <HeaderComponent {...props} renderDefault={renderDefault} />\n ) : (\n renderDefault(props)\n )\n\n return (\n <Card flex=\"none\" padding={2} borderBottom style={{position: 'relative'}}>\n <Flex align=\"center\" style={{minHeight: 0}}>\n {header}\n </Flex>\n </Card>\n )\n}\n","/* eslint-disable react/no-unused-prop-types */\nimport {createConnectionMachine, createController} from '@sanity/comlink'\nimport {\n createCompatibilityActors,\n type VisualEditingControllerMsg,\n type VisualEditingNodeMsg,\n} from '@sanity/presentation-comlink'\nimport {\n urlSearchParamPreviewPerspective,\n urlSearchParamVercelProtectionBypass,\n urlSearchParamVercelSetBypassCookie,\n type VercelSetBypassCookieValue,\n} from '@sanity/preview-url-secret/constants'\nimport {\n Card,\n Code,\n Flex,\n Label,\n Spinner,\n Stack,\n Text,\n usePrefersReducedMotion,\n useToast,\n} from '@sanity/ui'\nimport {useSelector} from '@xstate/react'\nimport {AnimatePresence, motion, MotionConfig} from 'framer-motion'\nimport {\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react'\nimport {flushSync} from 'react-dom'\nimport {Translate, useTranslation} from 'sanity'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {Button, TooltipDelayGroupProvider} from '../../ui-components'\nimport {ErrorCard} from '../components/ErrorCard'\nimport {MAX_TIME_TO_OVERLAYS_CONNECTION} from '../constants'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type PresentationMachineRef} from '../machines/presentation-machine'\nimport {type PreviewUrlRef} from '../machines/preview-url'\nimport {\n type ConnectionStatus,\n type HeaderOptions,\n type PresentationPerspective,\n type PresentationViewport,\n} from '../types'\nimport {useAllowPatterns} from '../useAllowPatterns'\nimport {usePresentationNavigate} from '../usePresentationNavigate'\nimport {usePresentationTool} from '../usePresentationTool'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {IFrame} from './IFrame'\nimport {PreviewHeader} from './PreviewHeader'\n\nconst MotionFlex = motion.create(Flex)\n\n/** @public */\nexport interface PreviewProps {\n canSharePreviewAccess: boolean\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n header?: HeaderOptions\n initialUrl: URL\n loadersConnection: ConnectionStatus\n navigatorEnabled: boolean\n onPathChange: (nextPath: string) => void\n onRefresh: (fallback: () => void) => void\n openPopup: (url: string) => void\n overlaysConnection: ConnectionStatus\n presentationRef: PresentationMachineRef\n perspective: PresentationPerspective\n previewUrl?: string\n setViewport: (mode: 'desktop' | 'mobile') => void\n targetOrigin: string\n toggleNavigator?: () => void\n toggleOverlay: () => void\n viewport: PresentationViewport\n vercelProtectionBypass: string | null\n previewUrlRef: PreviewUrlRef\n}\n\nexport const Preview = memo(\n forwardRef<HTMLIFrameElement, PreviewProps>(function PreviewComponent(props, forwardedRef) {\n const {\n header,\n initialUrl,\n loadersConnection,\n overlaysConnection,\n perspective,\n viewport,\n vercelProtectionBypass,\n presentationRef,\n previewUrlRef,\n } = props\n\n const [stablePerspective, setStablePerspective] = useState<typeof perspective | null>(null)\n const urlPerspective = encodeStudioPerspective(\n stablePerspective === null ? perspective : stablePerspective,\n )\n const previewUrl = useMemo(() => {\n const url = new URL(initialUrl)\n // Always set the perspective that's being used, even if preview mode isn't configured\n if (!url.searchParams.get(urlSearchParamPreviewPerspective)) {\n url.searchParams.set(urlSearchParamPreviewPerspective, urlPerspective)\n }\n\n if (vercelProtectionBypass || url.searchParams.get(urlSearchParamVercelProtectionBypass)) {\n // samesitenone is required since the request is from an iframe\n url.searchParams.set(\n urlSearchParamVercelSetBypassCookie,\n 'samesitenone' satisfies VercelSetBypassCookieValue,\n )\n }\n // If there's a vercel protection bypass secret in the context, set it if none exists already\n if (vercelProtectionBypass && !url.searchParams.get(urlSearchParamVercelProtectionBypass)) {\n url.searchParams.set(urlSearchParamVercelProtectionBypass, vercelProtectionBypass)\n }\n\n return url\n }, [initialUrl, urlPerspective, vercelProtectionBypass])\n\n useEffect(() => {\n /**\n * If the preview iframe is connected to the loader, we know that switching the perspective can be done without reloading the iframe.\n */\n if (loadersConnection === 'connected') {\n /**\n * Only set the stable perspective if it hasn't been set yet.\n */\n setStablePerspective((prev) => (prev === null ? perspective : prev))\n }\n }, [loadersConnection, perspective])\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const {devMode} = usePresentationTool()\n const prefersReducedMotion = usePrefersReducedMotion()\n const ref = useRef<HTMLIFrameElement | null>(null)\n\n const previewHeader = <PreviewHeader {...props} iframeRef={ref} options={header} />\n\n // Forward the iframe ref to the parent component\n useImperativeHandle<HTMLIFrameElement | null, HTMLIFrameElement | null>(\n forwardedRef,\n () => ref.current,\n )\n\n const isLoading = useSelector(\n presentationRef,\n (state) => state.matches('loading') || state.matches({loaded: 'reloading'}),\n )\n\n const [timedOut, setTimedOut] = useState(false)\n const isRefreshing = useSelector(presentationRef, (state) =>\n state.matches({loaded: 'refreshing'}),\n )\n const [somethingIsWrong, setSomethingIsWrong] = useState(false)\n const iframeIsBusy = isLoading || isRefreshing || overlaysConnection === 'connecting'\n\n const handleRetry = useCallback(() => {\n if (!ref.current) {\n return\n }\n\n ref.current.src = previewUrl.toString()\n\n presentationRef.send({type: 'iframe reload'})\n }, [presentationRef, previewUrl])\n const handleContinueAnyway = useCallback(() => {\n setContinueAnyway(true)\n }, [])\n\n const [continueAnyway, setContinueAnyway] = useState(false)\n const [showOverlaysConnectionStatus, setShowOverlaysConnectionState] = useState(false)\n useEffect(() => {\n if (isLoading || isRefreshing) {\n return undefined\n }\n\n if (overlaysConnection === 'connecting' || overlaysConnection === 'reconnecting') {\n const timeout = setTimeout(() => {\n setShowOverlaysConnectionState(true)\n }, 5_000)\n return () => clearTimeout(timeout)\n }\n return undefined\n }, [overlaysConnection, isLoading, isRefreshing])\n\n useEffect(() => {\n if (isLoading || isRefreshing || !showOverlaysConnectionStatus) {\n return undefined\n }\n if (overlaysConnection === 'connected') {\n setSomethingIsWrong(false)\n setShowOverlaysConnectionState(false)\n setTimedOut(false)\n setContinueAnyway(false)\n }\n if (overlaysConnection === 'connecting') {\n const timeout = setTimeout(() => {\n setTimedOut(true)\n console.error(\n `Unable to connect to visual editing. Make sure you've setup '@sanity/visual-editing' correctly`,\n )\n }, MAX_TIME_TO_OVERLAYS_CONNECTION)\n return () => clearTimeout(timeout)\n }\n if (overlaysConnection === 'reconnecting') {\n const timeout = setTimeout(() => {\n setTimedOut(true)\n setSomethingIsWrong(true)\n }, MAX_TIME_TO_OVERLAYS_CONNECTION)\n return () => clearTimeout(timeout)\n }\n return undefined\n }, [isLoading, overlaysConnection, isRefreshing, showOverlaysConnectionStatus])\n\n const onIFrameLoad = useCallback(() => {\n presentationRef.send({type: 'iframe loaded'})\n }, [presentationRef])\n\n const preventIframeInteraction = useMemo(() => {\n return (\n (isLoading || (overlaysConnection === 'connecting' && !isRefreshing)) && !continueAnyway\n )\n }, [continueAnyway, isLoading, isRefreshing, overlaysConnection])\n\n const canUseViewTransition = useSyncExternalStore(\n // eslint-disable-next-line no-empty-function\n useCallback(() => () => {}, []),\n () => CSS.supports(`(view-transition-name: test)`),\n )\n const iframeAnimations = useMemo(() => {\n return [\n preventIframeInteraction ? 'background' : 'active',\n isLoading ? 'reloading' : 'idle',\n // If CSS View Transitions are supported, then transition iframe viewport dimensions with that instead of Motion\n canUseViewTransition ? '' : viewport,\n showOverlaysConnectionStatus && !continueAnyway ? 'timedOut' : '',\n ]\n }, [\n canUseViewTransition,\n continueAnyway,\n isLoading,\n preventIframeInteraction,\n showOverlaysConnectionStatus,\n viewport,\n ])\n\n const [currentViewport, setCurrentViewport] = useState(viewport)\n const [iframeStyle, setIframeStyle] = useState(iframeVariants[viewport])\n useEffect(() => {\n if (canUseViewTransition && viewport !== currentViewport) {\n const update = () => {\n setCurrentViewport(viewport)\n setIframeStyle(iframeVariants[viewport])\n }\n if (\n !prefersReducedMotion &&\n 'startViewTransition' in document &&\n typeof document.startViewTransition === 'function'\n ) {\n document.startViewTransition({\n // @ts-expect-error - fix typings\n update: () => flushSync(() => update()),\n types: ['sanity-iframe-viewport'],\n })\n } else {\n update()\n }\n }\n }, [canUseViewTransition, prefersReducedMotion, currentViewport, viewport])\n\n const toast = useToast()\n const allowOrigins = useAllowPatterns(previewUrlRef)\n const [checkOrigin, setCheckOrigin] = useState<false | string>(false)\n const [reportedMismatches] = useState(new Set<string>())\n const reportMismatchingOrigin = useEffectEvent((reportedOrigin: string) => {\n if (allowOrigins.some((allow) => allow.test(reportedOrigin))) {\n setCheckOrigin(reportedOrigin)\n return\n }\n if (reportedMismatches.has(reportedOrigin)) return\n reportedMismatches.add(reportedOrigin)\n console.warn('Visual Editing is here but misconfigured', {reportedOrigin})\n toast.push({\n closable: true,\n id: `presentation-iframe-origin-mismatch-${reportedOrigin}`,\n status: 'error',\n duration: Infinity,\n title: t('preview-frame.configuration.error.title'),\n description: (\n <Translate\n t={t}\n i18nKey=\"preview-frame.configuration.error.description\"\n components={{Code: 'code'}}\n values={{\n targetOrigin: previewUrl.origin,\n reportedOrigin,\n }}\n />\n ),\n })\n })\n const navigate = usePresentationNavigate()\n const navigateEvent = useEffectEvent((url: string) => {\n if (!checkOrigin) return\n const nextUrl = new URL(url, checkOrigin)\n navigate(`${checkOrigin}${nextUrl.pathname}${nextUrl.search}${nextUrl.hash}`)\n })\n useEffect(() => {\n if (!checkOrigin) {\n return undefined\n }\n const target = ref.current?.contentWindow\n if (!target) {\n return undefined\n }\n const controller = createController({targetOrigin: checkOrigin})\n controller.addTarget(target)\n const comlink = controller.createChannel<VisualEditingControllerMsg, VisualEditingNodeMsg>(\n {\n name: 'presentation',\n heartbeat: true,\n connectTo: 'visual-editing',\n },\n createConnectionMachine<VisualEditingControllerMsg, VisualEditingNodeMsg>().provide({\n actors: createCompatibilityActors<VisualEditingControllerMsg>(),\n }),\n )\n\n comlink.on('visual-editing/navigate', (data) => {\n navigateEvent(data.url)\n })\n const stop = comlink.start()\n\n return () => {\n stop()\n controller.destroy()\n }\n }, [checkOrigin])\n useEffect(() => {\n if (overlaysConnection === 'connecting' || overlaysConnection === 'reconnecting') {\n const interval = setInterval(() => {\n ref.current?.contentWindow?.postMessage(\n {domain: 'sanity/channels', from: 'presentation', type: 'presentation/status'},\n /**\n * The targetOrigin is set to '*' intentionally here, as we need to find out if the iframe is misconfigured and has the wrong origin\n */\n '*',\n )\n }, 1_000)\n\n const controller = new AbortController()\n window.addEventListener(\n 'message',\n ({data}: MessageEvent<unknown>) => {\n /**\n * Listen for replies to presentation/status\n */\n if (\n data &&\n typeof data === 'object' &&\n 'domain' in data &&\n data.domain === 'sanity/channels' &&\n 'type' in data &&\n data.type === 'visual-editing/status' &&\n 'data' in data &&\n typeof data.data === 'object' &&\n data.data &&\n 'origin' in data.data &&\n typeof data.data.origin === 'string'\n ) {\n reportMismatchingOrigin(data.data.origin)\n }\n },\n {signal: controller.signal},\n )\n\n return () => {\n controller.abort()\n clearInterval(interval)\n }\n }\n return undefined\n }, [overlaysConnection, timedOut])\n\n return (\n <MotionConfig transition={prefersReducedMotion ? {duration: 0} : undefined}>\n <TooltipDelayGroupProvider>\n {previewHeader}\n <Card flex={1} tone=\"transparent\">\n <Flex\n align=\"center\"\n height=\"fill\"\n justify=\"center\"\n padding={(canUseViewTransition ? currentViewport : viewport) === 'desktop' ? 0 : 2}\n sizing=\"border\"\n style={{\n position: 'relative',\n cursor: iframeIsBusy ? 'wait' : undefined,\n }}\n >\n <AnimatePresence>\n {!somethingIsWrong &&\n !isLoading &&\n !isRefreshing &&\n // viewport, // using CSS View Transitions instead of framer motion to drive this\n showOverlaysConnectionStatus &&\n !continueAnyway ? (\n <MotionFlex\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n variants={spinnerVariants}\n justify=\"center\"\n align=\"center\"\n style={{\n inset: '0',\n position: 'absolute',\n backdropFilter: timedOut\n ? 'blur(16px) saturate(0.5) grayscale(0.5)'\n : 'blur(2px)',\n ['transition' as string]: 'backdrop-filter 0.2s ease-in-out',\n // @TODO Because of Safari we have to do this\n WebkitBackdropFilter: timedOut\n ? 'blur(16px) saturate(0.5) grayscale(0.5)'\n : 'blur(2px)',\n WebkitTransition: '-webkit-backdrop-filter 0.2s ease-in-out',\n zIndex: 1,\n }}\n >\n <Flex\n style={{...sizes[viewport]}}\n justify=\"center\"\n align=\"center\"\n direction=\"column\"\n gap={4}\n >\n {timedOut && (\n <Button\n disabled\n mode=\"ghost\"\n text={t('preview-frame.continue-button.text')}\n style={{opacity: 0}}\n />\n )}\n <Card\n radius={2}\n tone={timedOut ? 'caution' : 'inherit'}\n padding={4}\n shadow={1}\n >\n <Flex justify=\"center\" align=\"center\" direction=\"column\" gap={4}>\n <Spinner muted />\n <Text muted size={1}>\n {timedOut\n ? t('preview-frame.status', {context: 'timeout'})\n : t('preview-frame.status', {context: 'connecting'})}\n </Text>\n </Flex>\n </Card>\n {timedOut && (\n <Button\n // mode=\"ghost\"\n tone=\"critical\"\n onClick={handleContinueAnyway}\n text={t('preview-frame.continue-button.text')}\n />\n )}\n </Flex>\n </MotionFlex>\n ) : (isLoading || (overlaysConnection === 'connecting' && !isRefreshing)) &&\n !continueAnyway ? (\n <MotionFlex\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n variants={spinnerVariants}\n justify=\"center\"\n align=\"center\"\n style={{\n inset: '0',\n position: 'absolute',\n // boxShadow: '0 0 0 1px var(--card-shadow-outline-color)',\n }}\n >\n <Flex\n style={{...sizes[viewport]}}\n justify=\"center\"\n align=\"center\"\n direction=\"column\"\n gap={4}\n >\n <Spinner muted />\n <Text muted size={1}>\n {t('preview-frame.status', {context: 'loading'})}\n </Text>\n </Flex>\n </MotionFlex>\n ) : somethingIsWrong && !continueAnyway ? (\n <MotionFlex\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n variants={errorVariants}\n justify=\"center\"\n align=\"center\"\n style={{\n background: 'var(--card-bg-color)',\n inset: '0',\n position: 'absolute',\n }}\n >\n <ErrorCard\n flex={1}\n message={t('preview-frame.connection.error.text')}\n onRetry={handleRetry}\n onContinueAnyway={handleContinueAnyway}\n >\n {devMode && (\n <>\n {overlaysConnection !== 'connected' && (\n <Card padding={3} radius={2} tone=\"critical\">\n <Stack space={3}>\n <Label muted size={0}>\n {t('preview-frame.overlay.connection-status.label')}\n </Label>\n <Code size={1}>\n {t('channel.status', {context: overlaysConnection})}\n </Code>\n </Stack>\n </Card>\n )}\n\n {loadersConnection !== 'connected' && (\n <Card padding={3} radius={2} tone=\"critical\">\n <Stack space={3}>\n <Label muted size={0}>\n {t('preview-frame.loader.connection-status.label')}\n </Label>\n <Code size={1}>\n {t('channel.status', {context: loadersConnection})}\n </Code>\n </Stack>\n </Card>\n )}\n </>\n )}\n </ErrorCard>\n </MotionFlex>\n ) : null}\n </AnimatePresence>\n <IFrame\n animate={iframeAnimations}\n initial={['background']}\n onLoad={onIFrameLoad}\n preventClick={preventIframeInteraction}\n ref={ref}\n src={previewUrl.toString()}\n style={iframeStyle}\n variants={iframeVariants}\n />\n </Flex>\n </Card>\n </TooltipDelayGroupProvider>\n </MotionConfig>\n )\n }),\n)\nPreview.displayName = 'Memo(ForwardRef(Preview))'\n\nconst sizes = {\n desktop: {\n width: '100%',\n height: '100%',\n },\n mobile: {\n width: 375,\n height: 650,\n },\n}\n\nconst spinnerVariants = {\n initial: {opacity: 1},\n animate: {opacity: [0, 0, 1]},\n exit: {opacity: [1, 0, 0]},\n}\n\nconst errorVariants = {\n initial: {opacity: 1},\n animate: {opacity: [0, 0, 1]},\n exit: {opacity: [1, 0, 0]},\n}\n\nconst iframeVariants = {\n desktop: {\n ...sizes.desktop,\n boxShadow: '0 0 0 0px var(--card-border-color)',\n },\n mobile: {\n ...sizes.mobile,\n boxShadow: '0 0 0 1px var(--card-border-color)',\n },\n background: {\n opacity: 0,\n scale: 1,\n },\n idle: {\n scale: 1,\n },\n reloading: {\n scale: [1, 1, 1, 0.98],\n },\n active: {\n opacity: [0, 0, 1],\n scale: 1,\n },\n timedOut: {\n opacity: [0, 0, 1],\n },\n}\n","/** @internal */\nexport function defineWarnOnce() {\n let warned = false\n // oxlint-disable-next-line no-explicit-any\n return (...args: any[]): void => {\n if (!warned) {\n console.warn(...args)\n warned = true\n }\n }\n}\n","import {validateApiPerspective} from '@sanity/client'\nimport isEqual from 'fast-deep-equal'\nimport {type MutableRefObject, useCallback, useMemo, useRef, useState} from 'react'\n\nimport {type FrameState, type PresentationPerspective} from './types'\nimport {defineWarnOnce} from './util/warnOnce'\n\nexport type DocumentOnPage = {\n _id: string\n _type: string\n}\n\ntype DocumentCache = Record<string, DocumentOnPage>\ntype KeyedDocumentCache = Record<string, DocumentCache>\n\nconst warnOnceAboutCrossDatasetReference = defineWarnOnce()\n\n/**\n * @TODO should be refactored to an lru-cache that is keyed by the perspective, which could be an array (if it is, it should use consistent sorting),\n * and the url path (optionally the origin too), so that swapping between perspectives and urls is fast.\n */\nexport function useDocumentsOnPage(\n perspective: PresentationPerspective,\n frameStateRef: MutableRefObject<FrameState>,\n): [\n DocumentOnPage[],\n (key: string, perspective: PresentationPerspective, state: DocumentOnPage[]) => void,\n] {\n validateApiPerspective(perspective)\n\n const [published, setPublished] = useState<KeyedDocumentCache>({})\n const [previewDrafts, setPreviewDrafts] = useState<KeyedDocumentCache>({})\n\n // Used to compare the frame url with its value when the cache was last updated\n // If the url has changed, the entire cache is replaced\n const urlRef = useRef<string | undefined>('')\n\n const setDocumentsOnPage = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (key: string, perspective: PresentationPerspective, sourceDocuments: DocumentOnPage[] = []) => {\n const documents = sourceDocuments.filter((sourceDocument) => {\n if ('_projectId' in sourceDocument && sourceDocument._projectId) {\n // @TODO Handle cross dataset references\n\n warnOnceAboutCrossDatasetReference(\n 'Cross dataset references are not supported yet, ignoring source document',\n sourceDocument,\n )\n return false\n }\n return sourceDocument\n })\n\n const setCache = perspective === 'published' ? setPublished : setPreviewDrafts\n\n setCache((cache) => {\n // Create the `next` documents, dedupe by `_id`\n const next: Record<string, DocumentOnPage> = {}\n for (const document of documents) {\n next[document._id] = document\n }\n\n // If the frame url has changed, replace the entire cache with the next documents\n if (urlRef.current !== frameStateRef.current.url) {\n urlRef.current = frameStateRef.current.url\n return {[key]: next}\n }\n\n // If the keyed cache has changed, return the entire cache and replace the keyed part\n const prev = cache[key]\n if (!isEqual(prev, next)) {\n return {...cache, [key]: next}\n }\n\n // Otherwise return the entire cache as is\n return cache\n })\n },\n [frameStateRef],\n )\n\n const documentsOnPage = useMemo(() => {\n const keyedCache = perspective === 'published' ? published : previewDrafts\n const uniqueDocuments = Object.values(keyedCache).reduce((acc, cache) => {\n Object.values(cache).forEach((doc) => {\n acc[doc._id] = doc\n })\n return acc\n }, {})\n\n return Object.values(uniqueDocuments)\n }, [perspective, previewDrafts, published])\n\n return [documentsOnPage, setDocumentsOnPage]\n}\n","import {type ResponseQueryOptions} from '@sanity/client'\nimport {match, type Path} from 'path-to-regexp'\nimport {useEffect, useRef, useState} from 'react'\nimport {useClient, usePerspective} from 'sanity'\nimport {type RouterState, useRouter} from 'sanity/router'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {API_VERSION} from './constants'\nimport {\n type DocumentResolver,\n type DocumentResolverContext,\n type MainDocument,\n type MainDocumentState,\n type PresentationNavigate,\n} from './types'\n\n// Helper function to \"unwrap\" a result when it is either explicitly provided or\n// returned as the result of a passed function\nfunction fnOrObj<T, U>(arg: T | ((ctx: U) => T), context: U): T {\n return arg instanceof Function ? arg(context) : arg\n}\n\nfunction getQueryFromResult(\n resolver: DocumentResolver,\n context: DocumentResolverContext,\n): string | undefined {\n if (resolver.resolve) {\n const filter = resolver.resolve(context)?.filter\n return filter\n ? `// groq\n*[${filter}][0]{_id, _type}`\n : undefined\n }\n\n if ('type' in resolver) {\n return `// groq\n*[_type == \"${resolver.type}\"][0]{_id, _type}`\n }\n\n return `// groq\n*[${fnOrObj(resolver.filter, context)}][0]{_id, _type}`\n}\n\nfunction getParamsFromResult(\n resolver: DocumentResolver,\n context: DocumentResolverContext,\n): Record<string, string> {\n if (resolver.resolve) {\n return resolver.resolve(context)?.params ?? context.params\n }\n\n if ('type' in resolver) {\n return {}\n }\n\n return fnOrObj(resolver.params, context) ?? context.params\n}\n\nexport function getRouteContext(route: Path, url: URL): DocumentResolverContext | undefined {\n const routes = Array.isArray(route) ? route : [route]\n\n for (route of routes) {\n let origin: DocumentResolverContext['origin']\n let path = route\n\n // Handle absolute URLs\n if (typeof route === 'string') {\n try {\n const absolute = new URL(route)\n origin = absolute.origin\n path = absolute.pathname\n } catch {\n // Ignore, as we assume a relative path\n }\n }\n\n // If an origin has been explicitly provided, check that it matches\n if (origin && url.origin !== origin) continue\n\n try {\n const matcher = match<Record<string, string>>(path, {decode: decodeURIComponent})\n const result = matcher(url.pathname)\n if (result) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {params, path} = result\n return {origin, params, path}\n }\n } catch (e) {\n throw new Error(`\"${route}\" is not a valid route pattern`)\n }\n }\n return undefined\n}\n\nexport function useMainDocument(props: {\n navigate?: PresentationNavigate\n navigationHistory: RouterState[]\n path?: string\n targetOrigin: string\n resolvers?: DocumentResolver[]\n}): MainDocumentState | undefined {\n const {navigate, navigationHistory, path, targetOrigin, resolvers = []} = props\n const {state: routerState} = useRouter()\n const {perspectiveStack} = usePerspective()\n const client = useClient({apiVersion: API_VERSION})\n const relativeUrl =\n path || routerState._searchParams?.find(([key]) => key === 'preview')?.[1] || ''\n\n const [mainDocumentState, setMainDocumentState] = useState<MainDocumentState | undefined>(\n undefined,\n )\n const mainDocumentIdRef = useRef<string | undefined>(undefined)\n\n const handleResponse = useEffectEvent((doc: MainDocument | undefined, url: URL) => {\n if (!doc || mainDocumentIdRef.current !== doc._id) {\n setMainDocumentState({\n document: doc,\n path: url.pathname,\n })\n mainDocumentIdRef.current = doc?._id\n\n // We only want to force a navigation to the main document if\n // the path changed but the document ID did not. An explicit\n // document navigation should take precedence over displaying\n // the main document. We determine if an explicit document\n // navigation has occured by comparing the IDs of the last two\n // resultant navigation states.\n if (navigationHistory.at(-1)?.id === navigationHistory.at(-2)?.id) {\n navigate?.({\n state: {\n id: doc?._id,\n type: doc?._type,\n },\n })\n }\n }\n })\n\n useEffect(() => {\n const url = new URL(relativeUrl, targetOrigin)\n\n if (resolvers.length) {\n let result:\n | {\n context: DocumentResolverContext\n resolver: DocumentResolver\n }\n | undefined\n for (const resolver of resolvers) {\n const context = getRouteContext(resolver.route, url)\n if (context) {\n result = {context, resolver}\n break\n }\n }\n\n if (result) {\n const query = getQueryFromResult(result.resolver, result.context)\n const params = getParamsFromResult(result.resolver, result.context)\n if (query) {\n const controller = new AbortController()\n const options: ResponseQueryOptions = {\n perspective: perspectiveStack,\n signal: controller.signal,\n tag: 'use-main-document',\n }\n\n client\n .fetch<MainDocument | undefined>(query, params, options)\n .then((doc) => handleResponse(doc, url))\n .catch((e) => {\n if (e instanceof Error && e.name === 'AbortError') return\n setMainDocumentState({document: undefined, path: url.pathname})\n mainDocumentIdRef.current = undefined\n })\n return () => {\n controller.abort()\n }\n }\n }\n }\n setMainDocumentState(undefined)\n mainDocumentIdRef.current = undefined\n return undefined\n }, [client, perspectiveStack, relativeUrl, resolvers, targetOrigin])\n\n return mainDocumentState\n}\n","import {studioPath} from '@sanity/client/csm'\nimport {urlStringToPath} from '@sanity/visual-editing-csm'\n\nimport {type PresentationStateParams} from '../types'\n\nexport function parseId(rawId: string | undefined): string | undefined {\n if (rawId === undefined) {\n return undefined\n }\n\n const segments = decodeURIComponent(rawId)?.split('.')\n\n if (segments[0] === 'drafts') {\n segments.shift()\n }\n\n return segments.join('.')\n}\n\nexport function parsePath(rawPath: string | undefined): string | undefined {\n if (rawPath === undefined) {\n return undefined\n }\n\n return studioPath.toString(urlStringToPath(decodeURIComponent(rawPath)))\n}\n\nexport function parseRouterState(state: PresentationStateParams): PresentationStateParams {\n return {\n id: parseId(state.id),\n path: parsePath(state.path),\n type: state.type,\n }\n}\n","/* eslint-disable @typescript-eslint/no-shadow */\nimport {type MutableRefObject, useCallback, useLayoutEffect, useMemo, useRef, useState} from 'react'\nimport {getPublishedId} from 'sanity'\nimport {type RouterContextValue, type RouterState, type SearchParam} from 'sanity/router'\n\nimport {\n type CombinedSearchParams,\n type FrameState,\n type PresentationNavigate,\n type PresentationParamsContextValue,\n type PresentationSearchParams,\n type PresentationStateParams,\n type StructureDocumentPaneParams,\n} from './types'\nimport {parseRouterState} from './util/parse'\n\nfunction pruneObject<T extends RouterState | PresentationParamsContextValue>(obj: T): T {\n return Object.fromEntries(\n Object.entries(obj).filter(\n ([, value]) => value !== undefined && value !== '' && value !== null,\n ),\n ) as T\n}\n\n/**\n * Ensures the array contains all members of the union T.\n */\nconst exhaustiveTupleOf =\n <T>() =>\n <U extends T[]>(array: U & ([T] extends [U[number]] ? unknown : 'Invalid') & {0: T}) =>\n array\n\nconst maintainOnDocumentChange = exhaustiveTupleOf<keyof PresentationSearchParams>()([\n 'perspective',\n 'preview',\n 'viewport',\n])\n\nconst maintainOnSameDocument = exhaustiveTupleOf<keyof StructureDocumentPaneParams>()([\n 'changesInspectorTab',\n 'comment',\n 'inspect',\n 'instruction',\n 'parentRefPath',\n 'path',\n 'pathKey',\n 'rev',\n 'since',\n 'template',\n 'templateParams',\n 'version',\n 'view',\n])\n\nexport function useParams({\n initialPreviewUrl,\n routerNavigate,\n routerState,\n routerSearchParams,\n frameStateRef,\n}: {\n initialPreviewUrl: URL\n routerNavigate: RouterContextValue['navigate']\n routerState: RouterState & PresentationStateParams\n routerSearchParams: {\n [k: string]: string\n }\n frameStateRef: MutableRefObject<FrameState>\n}): {\n isSameDocument: (state: PresentationStateParams) => boolean\n navigate: PresentationNavigate\n navigationHistory: RouterState[]\n params: PresentationParamsContextValue\n searchParams: PresentationSearchParams\n structureParams: StructureDocumentPaneParams\n} {\n const params = useMemo<PresentationParamsContextValue>(() => {\n const {id, path, type} = parseRouterState(routerState)\n\n return {\n id,\n type,\n path,\n preview: routerSearchParams.preview || initialPreviewUrl.toString(),\n perspective: routerSearchParams.perspective,\n viewport: routerSearchParams.viewport,\n inspect: routerSearchParams.inspect,\n parentRefPath: routerSearchParams.parentRefPath,\n rev: routerSearchParams.rev,\n since: routerSearchParams.since,\n template: routerSearchParams.template,\n templateParams: routerSearchParams.templateParams,\n view: routerSearchParams.view,\n // assist\n pathKey: routerSearchParams.pathKey,\n instruction: routerSearchParams.instruction,\n // comments\n comment: routerSearchParams.comment,\n changesInspectorTab: routerSearchParams.changesInspectorTab as 'history' | 'review',\n }\n }, [routerState, routerSearchParams, initialPreviewUrl])\n\n const structureParams = useMemo<StructureDocumentPaneParams>(() => {\n const pruned = pruneObject({\n inspect: params.inspect,\n path: params.path,\n parentRefPath: params.parentRefPath,\n rev: params.rev,\n since: params.since,\n template: params.template,\n templateParams: params.templateParams,\n view: params.view,\n // assist\n pathKey: params.pathKey,\n instruction: params.instruction,\n // comments\n comment: params.comment,\n changesInspectorTab: params.changesInspectorTab,\n })\n return pruned\n }, [\n params.changesInspectorTab,\n params.comment,\n params.inspect,\n params.instruction,\n params.path,\n params.pathKey,\n params.parentRefPath,\n params.rev,\n params.since,\n params.template,\n params.templateParams,\n params.view,\n ])\n\n const searchParams = useMemo<PresentationSearchParams>(() => {\n const pruned = pruneObject({\n perspective: params.perspective,\n preview: params.preview,\n viewport: params.viewport,\n })\n return pruned\n }, [params.perspective, params.preview, params.viewport])\n\n const routerStateRef = useRef(routerState)\n\n useLayoutEffect(() => {\n routerStateRef.current = routerState\n }, [routerState])\n\n const [navigationHistory, setNavigationHistory] = useState<RouterState[]>([routerState])\n\n // Helper function to check if a given document is the same as the one in the\n // current router state\n const isSameDocument = useCallback(({id, type}: PresentationStateParams) => {\n const {current} = routerStateRef\n return id === current.id && type === current.type\n }, [])\n\n const navigate = useCallback<PresentationNavigate>(\n (options) => {\n const {state, params, replace = false} = options\n\n // Force navigation to use published IDs only\n if (state?.id) state.id = getPublishedId(state.id)\n\n // Get the current state and params\n const {current} = routerStateRef\n const currentState = {\n id: current.id,\n type: current.type,\n path: current.path,\n } satisfies PresentationStateParams\n const currentParams = Object.fromEntries(current._searchParams || []) as CombinedSearchParams\n\n // If state is provided, replace the current state with the provided\n // state, otherwise maintain the current state\n const nextState = state || currentState\n\n // Different params need to be maintained under different conditions\n const maintainedParamKeys = [\n ...maintainOnDocumentChange,\n ...(isSameDocument(nextState) ? maintainOnSameDocument : []),\n ] satisfies (keyof CombinedSearchParams)[]\n\n const maintainedParams = maintainedParamKeys.reduce((acc, key) => {\n // @ts-expect-error changesInspectorTab union type doesn't play nicely\n // here, if it were just a string it would be fine\n acc[key] = currentParams[key]\n return acc\n }, {} as Partial<CombinedSearchParams>)\n\n // If params are provided, merge them with the maintained params\n const nextParams = {...maintainedParams, ...params}\n\n const nextRouterState = {\n ...nextState,\n _searchParams: Object.entries(nextParams).reduce(\n (acc, [key, value]) => [...acc, [key, value] as SearchParam],\n [] as SearchParam[],\n ),\n } satisfies RouterState\n\n setNavigationHistory((prev) => [...prev, nextRouterState])\n routerNavigate(nextRouterState, {replace})\n },\n [isSameDocument, routerNavigate],\n )\n\n return {\n isSameDocument,\n navigate,\n navigationHistory,\n params,\n searchParams,\n structureParams,\n }\n}\n","import {type Controller} from '@sanity/comlink'\nimport {useCallback, useEffect, useState} from 'react'\n\nimport {POPUP_CHECK_INTERVAL} from './constants'\n\n/**\n * A hook for managing popup Window contexts\n *\n * This hook handles:\n * - Opening new popup Windows, and adding them as targets to the controller\n * - Tracking existing popup windows, and cleaning up closed popups\n *\n * @param controller - Comlink controller instance that manages communication\n * between Window contexts\n *\n * @returns An object containing:\n * - popups: A Set of currently open popup Window objects\n * - open: Function to open a new popup Window with the specified URL\n *\n */\nexport const usePopups = (\n controller?: Controller,\n): {\n popups: Set<Window>\n open: (url: string) => void\n} => {\n // State to keep track of open popup windows\n const [popups, setPopups] = useState<Set<Window>>(() => new Set())\n\n // Function to open a new popup window\n const open = useCallback((url: string) => {\n const source = window.open(url, '_blank')\n if (source) {\n setPopups((prev) => new Set(prev).add(source))\n }\n }, [])\n\n // Handles syncing the existing popups with the controller\n useEffect(() => {\n const unsubs: Array<() => void> = []\n if (popups.size && controller) {\n // loop popups and add targets\n for (const source of popups) {\n if (source && 'closed' in source && !source.closed) {\n unsubs.push(controller.addTarget(source))\n }\n }\n }\n return () => {\n unsubs.forEach((unsub) => unsub())\n }\n }, [controller, popups])\n\n // Checks for closed popups and removes them from the tracked Set\n useEffect(() => {\n if (popups.size) {\n const interval = setInterval(() => {\n const closed = new Set<Window>()\n for (const source of popups) {\n if (source && 'closed' in source && source.closed) {\n closed.add(source)\n }\n }\n if (closed.size) {\n setPopups((prev) => {\n const next = new Set(prev)\n for (const source of closed) {\n next.delete(source)\n }\n return next\n })\n }\n }, POPUP_CHECK_INTERVAL)\n\n return () => {\n clearInterval(interval)\n }\n }\n return undefined\n }, [popups])\n\n return {popups, open}\n}\n","import {usePerspective} from 'sanity'\n\nimport {type PresentationPerspective} from './types'\n\n/**\n * @internal\n */\nexport function usePresentationPerspective(): PresentationPerspective {\n const {perspectiveStack, selectedPerspectiveName = 'drafts', selectedReleaseId} = usePerspective()\n const perspective = (\n selectedReleaseId ? perspectiveStack : selectedPerspectiveName\n ) as PresentationPerspective\n return perspective\n}\n","import {type StatusEvent} from '@sanity/comlink'\nimport {useCallback, useMemo, useState} from 'react'\n\nimport {type ConnectionStatus} from './types'\n\n/**\n * A hook that manages and returns the connection status of multiple channels\n *\n * returns an array containing the\n * current status and a function to update the status based on incoming events\n *\n * The status can be one of the following:\n * - 'connected': If any channel is connected\n * - 'connecting': If the first connection is being established\n * - 'reconnecting': If a reconnection is in progress\n * - 'idle': If no connections have been made yet\n *\n * The function to update the status takes a `StatusEvent` object which includes\n * the channel and the status\n */\nexport function useStatus(): [ConnectionStatus, (event: StatusEvent) => void] {\n // State to keep track of the status of each channel\n const [statusMap, setStatusMap] = useState(\n new Map<string, {status: ConnectionStatus; hasConnected: boolean}>(),\n )\n\n // Memoized computation of the overall status based on the status of individual channels\n const memoStatus = useMemo(() => {\n const values = Array.from(statusMap.values())\n // If any channel is connected, return the `connected` status\n if (values.find(({status}) => status === 'connected')) {\n return 'connected'\n }\n // If the initial connection is being established, return `connecting` status\n const handshaking = values.filter(({status}) => status === 'connecting')\n if (handshaking.length) {\n return handshaking.some(({hasConnected}) => !hasConnected) ? 'connecting' : 'reconnecting'\n }\n // If nothing has happened yet, return `idle` status\n return 'idle'\n }, [statusMap])\n\n // Callback to update the status map based on the received event\n const setStatusFromEvent = useCallback((event: StatusEvent) => {\n setStatusMap((prev) => {\n const next = new Map(prev)\n if (event.status === 'disconnected') {\n // Remove the channel from the map if a disconnect event is received\n next.delete(event.connection)\n } else {\n // Update the status and connection flag for the channel\n const hasConnected =\n next.get(event.connection)?.hasConnected || event.status === 'connected'\n const status = event.status === 'handshaking' ? 'connecting' : event.status\n next.set(event.connection, {status, hasConnected})\n }\n return next\n })\n }, [])\n\n // Return the overall status and the function to update the status\n return [memoStatus, setStatusFromEvent]\n}\n","/* eslint-disable @typescript-eslint/no-shadow */\nimport {\n type Controller,\n createConnectionMachine,\n createController,\n type Message,\n} from '@sanity/comlink'\nimport {\n createCompatibilityActors,\n type PreviewKitNodeMsg,\n type VisualEditingControllerMsg,\n type VisualEditingNodeMsg,\n} from '@sanity/presentation-comlink'\nimport {\n urlSearchParamVercelProtectionBypass,\n urlSearchParamVercelSetBypassCookie,\n} from '@sanity/preview-url-secret/constants'\nimport {BoundaryElementProvider, Flex} from '@sanity/ui'\nimport {useActorRef, useSelector} from '@xstate/react'\nimport {lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {\n type CommentIntentGetter,\n COMMENTS_INSPECTOR_NAME,\n type SanityDocument,\n type Tool,\n useDataset,\n useProjectId,\n useUnique,\n useWorkspace,\n} from 'sanity'\nimport {type RouterContextValue, useRouter} from 'sanity/router'\nimport {styled} from 'styled-components'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {DEFAULT_TOOL_NAME, EDIT_INTENT_MODE} from './constants'\nimport PostMessageFeatures from './features/PostMessageFeatures'\nimport {presentationMachine} from './machines/presentation-machine'\nimport {type PreviewUrlRef} from './machines/preview-url'\nimport {SharedStateProvider} from './overlays/SharedStateProvider'\nimport {Panel} from './panels/Panel'\nimport {Panels} from './panels/Panels'\nimport {PresentationContent} from './PresentationContent'\nimport {PresentationNavigateProvider} from './PresentationNavigateProvider'\nimport {usePresentationNavigator} from './PresentationNavigator'\nimport {PresentationParamsProvider} from './PresentationParamsProvider'\nimport {PresentationProvider} from './PresentationProvider'\nimport {Preview} from './preview/Preview'\nimport {\n type FrameState,\n type PresentationNavigate,\n type PresentationPluginOptions,\n type PresentationStateParams,\n type PresentationViewport,\n type StructureDocumentPaneParams,\n type VisualEditingConnection,\n} from './types'\nimport {useAllowPatterns} from './useAllowPatterns'\nimport {useDocumentsOnPage} from './useDocumentsOnPage'\nimport {useMainDocument} from './useMainDocument'\nimport {useParams} from './useParams'\nimport {usePopups} from './usePopups'\nimport {usePresentationPerspective} from './usePresentationPerspective'\nimport {useStatus} from './useStatus'\nimport {useTargetOrigin} from './useTargetOrigin'\nimport {debounce} from './util/debounce'\n\nconst LiveQueries = lazy(() => import('./loader/LiveQueries'))\nconst PostMessageDocuments = lazy(() => import('./overlays/PostMessageDocuments'))\nconst PostMessageRefreshMutations = lazy(() => import('./editor/PostMessageRefreshMutations'))\nconst PostMessagePerspective = lazy(() => import('./PostMessagePerspective'))\nconst PostMessagePreviewSnapshots = lazy(() => import('./editor/PostMessagePreviewSnapshots'))\nconst PostMessageSchema = lazy(() => import('./overlays/schema/PostMessageSchema'))\nconst PostMessageTelemetry = lazy(() => import('./PostMessageTelemetry'))\n\nconst Container = styled(Flex)`\n overflow-x: auto;\n`\n\nexport default function PresentationTool(props: {\n tool: Tool<PresentationPluginOptions>\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n vercelProtectionBypass: string | null\n initialPreviewUrl: URL\n previewUrlRef: PreviewUrlRef\n}): React.JSX.Element {\n const {\n canToggleSharePreviewAccess,\n canUseSharedPreviewAccess,\n tool,\n vercelProtectionBypass,\n initialPreviewUrl,\n previewUrlRef,\n } = props\n\n const allowOrigins = useAllowPatterns(previewUrlRef)\n const targetOrigin = useTargetOrigin(previewUrlRef)\n\n const components = tool.options?.components\n const name = tool.name || DEFAULT_TOOL_NAME\n const {unstable_navigator, unstable_header} = components || {}\n\n const {navigate: routerNavigate, state: routerState} = useRouter() as RouterContextValue & {\n state: PresentationStateParams\n }\n const routerSearchParams = useUnique(Object.fromEntries(routerState._searchParams || []))\n const perspective = usePresentationPerspective()\n\n const canSharePreviewAccess = useSelector(\n previewUrlRef,\n (state) => state.context.previewMode?.shareAccess !== false,\n )\n\n const [devMode] = useState(() => {\n const option = tool.options?.devMode\n\n if (typeof option === 'function') return option()\n if (typeof option === 'boolean') return option\n\n return typeof window !== 'undefined' && window.location.hostname === 'localhost'\n })\n\n const iframeRef = useRef<HTMLIFrameElement>(null)\n\n const [controller, setController] = useState<Controller>()\n const [visualEditingComlink, setVisualEditingComlink] = useState<VisualEditingConnection | null>(\n null,\n )\n\n const frameStateRef = useRef<FrameState>({\n title: undefined,\n url: undefined,\n })\n\n const {isSameDocument, navigate, navigationHistory, params, searchParams, structureParams} =\n useParams({\n initialPreviewUrl,\n routerNavigate,\n routerState,\n routerSearchParams,\n frameStateRef,\n })\n\n const presentationRef = useActorRef(presentationMachine)\n\n const viewport = useMemo(() => (params.viewport ? 'mobile' : 'desktop'), [params.viewport])\n\n const [documentsOnPage, setDocumentsOnPage] = useDocumentsOnPage(perspective, frameStateRef)\n\n const projectId = useProjectId()\n const dataset = useDataset()\n\n const mainDocumentState = useMainDocument({\n navigate,\n navigationHistory,\n path: params.preview,\n targetOrigin,\n resolvers: tool.options?.resolve?.mainDocuments,\n })\n\n const [overlaysConnection, setOverlaysConnection] = useStatus()\n const [loadersConnection, setLoadersConnection] = useStatus()\n const [previewKitConnection, setPreviewKitConnection] = useStatus()\n\n const {open: handleOpenPopup} = usePopups(controller)\n\n const isLoading = useSelector(presentationRef, (state) => state.matches('loading'))\n\n useEffect(() => {\n const target = iframeRef.current?.contentWindow\n\n if (!target || isLoading) return undefined\n\n const controller = createController({targetOrigin})\n controller.addTarget(target)\n setController(controller)\n\n return () => {\n controller.destroy()\n setController(undefined)\n }\n }, [targetOrigin, isLoading])\n\n const handleNavigate = useEffectEvent<PresentationNavigate>((options) => {\n navigate(options)\n })\n\n useEffect(() => {\n if (!controller) return undefined\n\n const comlink = controller.createChannel<VisualEditingControllerMsg, VisualEditingNodeMsg>(\n {\n name: 'presentation',\n heartbeat: true,\n connectTo: 'visual-editing',\n },\n createConnectionMachine<VisualEditingControllerMsg, VisualEditingNodeMsg>().provide({\n actors: createCompatibilityActors<VisualEditingControllerMsg>(),\n }),\n )\n\n comlink.on('visual-editing/focus', (data) => {\n if (!('id' in data)) return\n handleNavigate({\n state: {\n type: data.type,\n id: data.id,\n path: data.path,\n },\n })\n })\n\n comlink.on('visual-editing/navigate', (data) => {\n const {title} = data\n let url = data.url\n /**\n * The URL is relative, we need to resolve it to an absolute URL\n */\n if (!url.startsWith('http')) {\n try {\n url = new URL(url, targetOrigin).toString()\n } catch {\n // ignore\n }\n }\n\n if (frameStateRef.current.url !== url) {\n try {\n // Handle bypass params being forwarded to the final URL\n const [urlWithoutSearch, search] = url.split('?')\n const searchParams = new URLSearchParams(search)\n searchParams.delete(urlSearchParamVercelProtectionBypass)\n searchParams.delete(urlSearchParamVercelSetBypassCookie)\n handleNavigate({\n params: {\n preview: `${urlWithoutSearch}${searchParams.size > 0 ? '?' : ''}${searchParams}`,\n },\n })\n } catch {\n handleNavigate({params: {preview: url}})\n }\n }\n frameStateRef.current = {title, url}\n })\n\n comlink.on('visual-editing/meta', (data) => {\n frameStateRef.current.title = data.title\n })\n\n comlink.on('visual-editing/toggle', (data) => {\n presentationRef.send({type: 'toggle visual editing overlays', enabled: data.enabled})\n })\n\n comlink.on('visual-editing/documents', (data) => {\n setDocumentsOnPage(\n 'visual-editing',\n // oxlint-disable-next-line no-explicit-any\n data.perspective as unknown as any,\n data.documents,\n )\n })\n\n // @todo This won't work for multiple window contexts?\n comlink.on('visual-editing/refreshing', (data) => {\n if (data.source === 'manual') {\n clearTimeout(refreshRef.current)\n } else if (data.source === 'mutation') {\n presentationRef.send({type: 'iframe refresh'})\n }\n })\n\n comlink.on('visual-editing/refreshed', () => {\n presentationRef.send({type: 'iframe loaded'})\n })\n\n comlink.onStatus(setOverlaysConnection)\n\n const stop = comlink.start()\n setVisualEditingComlink(comlink)\n return () => {\n stop()\n setVisualEditingComlink(null)\n }\n }, [controller, presentationRef, setDocumentsOnPage, setOverlaysConnection, targetOrigin])\n\n useEffect(() => {\n if (!controller) return undefined\n const comlink = controller.createChannel<Message, PreviewKitNodeMsg>(\n {\n name: 'presentation',\n connectTo: 'preview-kit',\n heartbeat: true,\n },\n createConnectionMachine<Message, PreviewKitNodeMsg>().provide({\n actors: createCompatibilityActors(),\n }),\n )\n\n comlink.onStatus(setPreviewKitConnection)\n\n comlink.on('preview-kit/documents', (data) => {\n if (data.projectId === projectId && data.dataset === dataset) {\n setDocumentsOnPage(\n 'preview-kit',\n // oxlint-disable-next-line no-explicit-any\n data.perspective as unknown as any,\n data.documents,\n )\n }\n })\n\n return comlink.start()\n }, [controller, dataset, projectId, setDocumentsOnPage, setPreviewKitConnection, targetOrigin])\n\n const handleFocusPath = useMemo(\n () =>\n // When moving from one field to another, blur and focus events will trigger\n // this handler. We debounce to avoid unwanted intermediate navigations this\n // would cause.\n debounce<(state: Required<PresentationStateParams>) => void>((state) => {\n // We only ever want to update the path if we are still viewing the\n // document that was active when the focus event was triggered\n if (isSameDocument(state)) {\n navigate({\n state,\n replace: true,\n })\n }\n }, 0),\n [isSameDocument, navigate],\n )\n\n const handlePreviewPath = useCallback(\n (nextPath: string) => {\n const url = new URL(nextPath, targetOrigin)\n const preview = url.toString()\n if (params.preview === preview) {\n return\n }\n if (Array.isArray(allowOrigins)) {\n if (allowOrigins.some((pattern) => pattern.test(preview))) {\n navigate({params: {preview}})\n }\n } else if (url.origin === targetOrigin) {\n navigate({params: {preview}})\n }\n },\n [targetOrigin, params.preview, allowOrigins, navigate],\n )\n\n const handleStructureParams = useCallback(\n (params: StructureDocumentPaneParams) => {\n navigate({params})\n },\n [navigate],\n )\n\n const handleEditReference = useCallback<PresentationNavigate>(\n (options) => {\n navigate(options)\n },\n [navigate],\n )\n\n // Dispatch a focus or blur message when the id or path change\n useEffect(() => {\n if (params.id && params.path) {\n visualEditingComlink?.post('presentation/focus', {id: params.id, path: params.path})\n } else {\n visualEditingComlink?.post('presentation/blur')\n }\n }, [params.id, params.path, visualEditingComlink])\n\n // Dispatch a navigation message when the preview param changes\n useEffect(() => {\n if (\n frameStateRef.current.url &&\n params.preview &&\n frameStateRef.current.url !== params.preview\n ) {\n try {\n const frameOrigin = new URL(frameStateRef.current.url, targetOrigin).origin\n const previewOrigin = new URL(params.preview, targetOrigin).origin\n if (frameOrigin !== previewOrigin) {\n return\n }\n } catch {\n // ignore\n }\n\n frameStateRef.current.url = params.preview\n if (overlaysConnection === 'connected') {\n /**\n * Translate the possibly absolute params url back to a relative URL\n */\n let url = params.preview\n if (url.startsWith('http')) {\n try {\n const newUrl = new URL(params.preview, targetOrigin)\n url = newUrl.pathname + newUrl.search + newUrl.hash\n } catch {\n // ignore\n }\n }\n visualEditingComlink?.post('presentation/navigate', {\n url,\n type: 'replace',\n })\n }\n }\n }, [overlaysConnection, targetOrigin, params.preview, visualEditingComlink])\n\n const toggleOverlay = useCallback(\n () => visualEditingComlink?.post('presentation/toggle-overlay'),\n [visualEditingComlink],\n )\n\n const [displayedDocument, setDisplayedDocument] = useState<\n Partial<SanityDocument> | null | undefined\n >(null)\n\n useEffect(() => {\n const handleKeyUp = (e: KeyboardEvent) => {\n if (isAltKey(e)) {\n toggleOverlay()\n }\n }\n const handleKeydown = (e: KeyboardEvent) => {\n if (isAltKey(e)) {\n toggleOverlay()\n }\n\n if (isHotkey(['mod', '\\\\'], e)) {\n toggleOverlay()\n }\n }\n window.addEventListener('keydown', handleKeydown)\n window.addEventListener('keyup', handleKeyUp)\n return () => {\n window.removeEventListener('keydown', handleKeydown)\n window.removeEventListener('keyup', handleKeyUp)\n }\n }, [toggleOverlay])\n\n const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)\n\n const [{navigatorEnabled, toggleNavigator}, PresentationNavigator] = usePresentationNavigator({\n unstable_navigator,\n })\n\n const refreshRef = useRef<number>(undefined)\n const handleRefresh = useCallback(\n (fallback: () => void) => {\n presentationRef.send({type: 'iframe refresh'})\n if (visualEditingComlink) {\n // We only wait 300ms for the iframe to ack the refresh request before running the fallback logic\n refreshRef.current = window.setTimeout(fallback, 300)\n visualEditingComlink.post('presentation/refresh', {\n source: 'manual',\n livePreviewEnabled:\n previewKitConnection === 'connected' || loadersConnection === 'connected',\n })\n return\n }\n fallback()\n },\n [loadersConnection, presentationRef, previewKitConnection, visualEditingComlink],\n )\n\n const workspace = useWorkspace()\n\n const getCommentIntent = useCallback<CommentIntentGetter>(\n ({id, type, path}) => {\n if (frameStateRef.current.url) {\n return {\n title: frameStateRef.current.title || frameStateRef.current.url,\n name: 'edit',\n params: {\n id,\n path,\n type,\n inspect: COMMENTS_INSPECTOR_NAME,\n workspace: workspace.name,\n mode: EDIT_INTENT_MODE,\n preview: params.preview,\n },\n }\n }\n return undefined\n },\n [params.preview, workspace.name],\n )\n\n const setViewport = useCallback(\n (next: PresentationViewport) => {\n // Omit the viewport URL search param if the next viewport state is the\n // default: 'desktop'\n const viewport = next === 'desktop' ? undefined : 'mobile'\n navigate({\n params: {viewport},\n replace: true,\n })\n },\n [navigate],\n )\n\n return (\n <>\n <PresentationProvider\n devMode={devMode}\n name={name}\n navigate={navigate}\n params={params}\n searchParams={searchParams}\n structureParams={structureParams}\n >\n <PresentationNavigateProvider navigate={navigate}>\n <PresentationParamsProvider params={params}>\n <SharedStateProvider comlink={visualEditingComlink}>\n <Container data-testid=\"presentation-root\" height=\"fill\">\n <Panels>\n <PresentationNavigator />\n <Panel\n id=\"preview\"\n minWidth={325}\n defaultSize={navigatorEnabled ? 50 : 75}\n order={3}\n >\n <Flex direction=\"column\" flex={1} height=\"fill\" ref={setBoundaryElement}>\n <BoundaryElementProvider element={boundaryElement}>\n <Preview\n // @TODO move closer to the <iframe> element itself to allow for more precise handling of when to reload the iframe and when to reconnect when the target origin changes\n // Make sure the iframe is unmounted if the targetOrigin has changed\n key={targetOrigin}\n canSharePreviewAccess={canSharePreviewAccess}\n canToggleSharePreviewAccess={canToggleSharePreviewAccess}\n canUseSharedPreviewAccess={canUseSharedPreviewAccess}\n header={unstable_header}\n initialUrl={initialPreviewUrl}\n loadersConnection={loadersConnection}\n navigatorEnabled={navigatorEnabled}\n onPathChange={handlePreviewPath}\n onRefresh={handleRefresh}\n openPopup={handleOpenPopup}\n overlaysConnection={overlaysConnection}\n previewUrl={params.preview}\n perspective={perspective}\n ref={iframeRef}\n setViewport={setViewport}\n targetOrigin={targetOrigin}\n toggleNavigator={toggleNavigator}\n toggleOverlay={toggleOverlay}\n viewport={viewport}\n vercelProtectionBypass={vercelProtectionBypass}\n presentationRef={presentationRef}\n previewUrlRef={previewUrlRef}\n />\n </BoundaryElementProvider>\n </Flex>\n </Panel>\n <PresentationContent\n documentId={params.id}\n documentsOnPage={documentsOnPage}\n documentType={params.type}\n getCommentIntent={getCommentIntent}\n mainDocumentState={mainDocumentState}\n onEditReference={handleEditReference}\n onFocusPath={handleFocusPath}\n onStructureParams={handleStructureParams}\n searchParams={searchParams}\n setDisplayedDocument={setDisplayedDocument}\n structureParams={structureParams}\n />\n </Panels>\n </Container>\n </SharedStateProvider>\n </PresentationParamsProvider>\n </PresentationNavigateProvider>\n </PresentationProvider>\n <Suspense>\n {controller && (\n <LiveQueries\n controller={controller}\n perspective={perspective}\n liveDocument={displayedDocument}\n onDocumentsOnPage={setDocumentsOnPage}\n onLoadersConnection={setLoadersConnection}\n />\n )}\n {visualEditingComlink && params.id && params.type && (\n <PostMessageRefreshMutations\n comlink={visualEditingComlink}\n id={params.id}\n type={params.type}\n loadersConnection={loadersConnection}\n previewKitConnection={previewKitConnection}\n />\n )}\n {visualEditingComlink && (\n <PostMessageSchema comlink={visualEditingComlink} perspective={perspective} />\n )}\n {visualEditingComlink && documentsOnPage.length > 0 && (\n <PostMessagePreviewSnapshots\n comlink={visualEditingComlink}\n perspective={perspective}\n refs={documentsOnPage}\n />\n )}\n {visualEditingComlink && (\n <PostMessageDocuments comlink={visualEditingComlink} perspective={perspective} />\n )}\n {visualEditingComlink && <PostMessageFeatures comlink={visualEditingComlink} />}\n {visualEditingComlink && (\n <PostMessagePerspective comlink={visualEditingComlink} perspective={perspective} />\n )}\n {visualEditingComlink && <PostMessageTelemetry comlink={visualEditingComlink} />}\n </Suspense>\n </>\n )\n}\n\n// @TODO reconcile with core utils\nfunction isAltKey(event: KeyboardEvent): boolean {\n return event.key === 'Alt'\n}\n\n// @TODO reconcile with core utils\nconst IS_MAC =\n typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform)\nconst MODIFIERS: Record<string, 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'> = {\n alt: 'altKey',\n ctrl: 'ctrlKey',\n mod: IS_MAC ? 'metaKey' : 'ctrlKey',\n shift: 'shiftKey',\n}\n// @TODO reconcile with core utils\nfunction isHotkey(keys: string[], event: KeyboardEvent): boolean {\n return keys.every((key) => {\n if (MODIFIERS[key]) {\n return event[MODIFIERS[key]]\n }\n return event.key === key.toUpperCase()\n })\n}\n","import {createPreviewSecret} from '@sanity/preview-url-secret/create-secret'\nimport {type SanityClient} from 'sanity'\nimport {fromPromise, type PromiseActorLogic} from 'xstate'\n\n/** @internal */\nexport function defineCreatePreviewSecretActor({\n client,\n currentUserId,\n}: {\n client: SanityClient\n currentUserId: string | undefined\n}): PromiseActorLogic<{\n secret: string\n expiresAt: Date\n}> {\n return fromPromise(async () => {\n return await createPreviewSecret(client, 'sanity/presentation', location.href, currentUserId)\n })\n}\n","import {fetchSharedAccessQuery} from '@sanity/preview-url-secret/constants'\nimport {type SanityClient} from 'sanity'\nimport {fromPromise, type PromiseActorLogic} from 'xstate'\n\n/** @internal */\nexport function defineReadSharedSecretActor({\n client,\n}: {\n client: SanityClient\n}): PromiseActorLogic<string | null> {\n return fromPromise(async () => {\n return client.fetch<string | null>(\n fetchSharedAccessQuery,\n {},\n {tag: 'presentation.fallback-to-shared-access-secret'},\n )\n })\n}\n","import {fromPromise, type PromiseActorLogic} from 'xstate'\n\nimport {type PreviewUrlAllowOption, type PreviewUrlAllowOptionContext} from '../types'\n\ninterface Context extends Pick<PreviewUrlAllowOptionContext, 'client'> {\n allowOption: PreviewUrlAllowOption | undefined\n}\ntype Input = Omit<PreviewUrlAllowOptionContext, 'client' | 'origin'>\n\n/** @internal */\nexport function defineResolveAllowPatternsActor({\n client,\n allowOption,\n}: Context): PromiseActorLogic<URLPattern[], Input> {\n return fromPromise<URLPattern[], Input>(async ({input}) => {\n const {initialUrl} = input\n\n /**\n * Lazy load the URLPattern polyfill on-demand, if needed\n */\n if (typeof URLPattern === 'undefined') {\n await import('urlpattern-polyfill')\n }\n\n /**\n * If no allow option is provided, we use the initial URL to infer the pattern\n */\n if (!allowOption) {\n return [new URLPattern(initialUrl.origin)]\n }\n\n const maybePatterns =\n typeof allowOption === 'function'\n ? await allowOption({client, origin, initialUrl})\n : allowOption\n const patterns = Array.isArray(maybePatterns) ? maybePatterns : [maybePatterns]\n const urlPatterns = patterns.map((value) => {\n const urlPattern = new URLPattern(value)\n if (urlPattern.hostname === '*') {\n throw new Error(\n `It's insecure to allow any hostname, it could disclose data to a malicious site`,\n )\n }\n return urlPattern\n })\n /**\n * If the declared patterns don't consider the initial URL valid, we add it to the list of patterns\n */\n if (!urlPatterns.some((pattern) => pattern.test(initialUrl.origin))) {\n return [...urlPatterns, new URLPattern(initialUrl.origin)]\n }\n\n return urlPatterns\n })\n}\n","import {type SanityClient} from 'sanity'\nimport {fromPromise, type PromiseActorLogic} from 'xstate'\n\nimport {type PresentationPerspective, type PreviewUrlOption} from '../types'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\n\n/** @internal */\nexport function defineResolveInitialUrlActor({\n client,\n studioBasePath,\n previewUrlOption,\n perspective,\n}: {\n client: SanityClient\n studioBasePath: string\n previewUrlOption: PreviewUrlOption | undefined\n perspective: PresentationPerspective\n}): PromiseActorLogic<URL, {previewSearchParam: string | null}> {\n return fromPromise<URL, {previewSearchParam: string | null}>(\n async ({input}: {input: {previewSearchParam: string | null}}) => {\n const {origin} = location\n /**\n * If the previewUrlOption is a function, we need to resolve it and maintain backwards compatibility\n */\n if (typeof previewUrlOption === 'function') {\n const initial = await previewUrlOption({\n client,\n studioBasePath,\n // @TODO handle checking permissions here, and then generating a secret\n previewUrlSecret: '',\n studioPreviewPerspective: encodeStudioPerspective(perspective),\n previewSearchParam: input.previewSearchParam,\n })\n return new URL(initial, origin)\n }\n\n /**\n * Provide backwards compatibility for versions where `previewUrl` where optional\n */\n if (!previewUrlOption) {\n return new URL('/', origin)\n }\n /**\n * Support setting `previewUrl` as a string shorthand\n */\n if (typeof previewUrlOption === 'string') {\n return new URL(previewUrlOption, origin)\n }\n\n if (typeof previewUrlOption.initial === 'function') {\n const initial = await previewUrlOption.initial({\n client,\n origin,\n })\n return new URL(initial, origin)\n }\n\n if (typeof previewUrlOption.initial === 'string') {\n return new URL(previewUrlOption.initial, origin)\n }\n\n return new URL(previewUrlOption.preview || '/', previewUrlOption.origin || origin)\n },\n )\n}\n","import {fromPromise, type PromiseActorLogic} from 'xstate'\n\nimport {\n type PreviewUrlOption,\n type PreviewUrlPreviewMode,\n type PreviewUrlPreviewModeOptionContext,\n} from '../types'\n\ntype Options = Omit<PreviewUrlPreviewModeOptionContext, 'origin'>\n\ninterface Context extends Pick<Options, 'client'> {\n previewUrlOption: PreviewUrlOption | undefined\n}\ntype Input = Omit<Options, 'client'>\n\n/** @internal */\nexport function defineResolvePreviewModeActor({\n client,\n previewUrlOption,\n}: Context): PromiseActorLogic<PreviewUrlPreviewMode | false, Input> {\n return fromPromise<PreviewUrlPreviewMode | false, Input>(async ({input}) => {\n const {targetOrigin} = input\n\n /**\n * Handle legacy draftMode options\n */\n if (typeof previewUrlOption === 'object' && previewUrlOption?.draftMode) {\n return {\n enable: previewUrlOption.draftMode.enable,\n shareAccess: previewUrlOption.draftMode.shareAccess ?? true,\n }\n }\n\n /**\n * If no preview mode option is provided, we disable preview mode\n */\n if (\n !previewUrlOption ||\n typeof previewUrlOption === 'string' ||\n typeof previewUrlOption === 'function' ||\n !previewUrlOption.previewMode\n ) {\n return false\n }\n\n /**\n * If the option is a function, we resolve it\n */\n const previewMode =\n typeof previewUrlOption.previewMode === 'function'\n ? await previewUrlOption.previewMode({client, origin, targetOrigin})\n : previewUrlOption.previewMode\n\n if (previewMode === false) {\n return false\n }\n\n /**\n * Return only supported preview mode options, filter out unknowns\n */\n return {\n enable: previewMode.enable,\n shareAccess: previewMode.shareAccess ?? true,\n }\n })\n}\n","import {\n urlSearchParamPreviewPathname,\n urlSearchParamPreviewPerspective,\n urlSearchParamPreviewSecret,\n} from '@sanity/preview-url-secret/constants'\nimport {type SanityClient} from 'sanity'\nimport {fromPromise, type PromiseActorLogic} from 'xstate'\n\nimport {\n type PresentationPerspective,\n type PreviewUrlOption,\n type PreviewUrlPreviewMode,\n} from '../types'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\n\n/** @internal */\nexport interface ResolvePreviewModeUrlInput {\n previewUrlSecret: string\n resolvedPreviewMode: PreviewUrlPreviewMode\n initialUrl: URL\n}\n\n/** @internal */\nexport function defineResolvePreviewModeUrlActor({\n client,\n studioBasePath,\n previewUrlOption,\n perspective,\n}: {\n client: SanityClient\n studioBasePath: string\n previewUrlOption: PreviewUrlOption | undefined\n perspective: PresentationPerspective\n}): PromiseActorLogic<URL, ResolvePreviewModeUrlInput> {\n return fromPromise<URL, ResolvePreviewModeUrlInput>(async ({input}) => {\n const {previewUrlSecret, resolvedPreviewMode, initialUrl} = input\n\n /**\n * If the previewUrlOption is a function, we need to resolve it and maintain backwards compatibility\n */\n if (typeof previewUrlOption === 'function') {\n const initial = await previewUrlOption({\n client,\n studioBasePath,\n previewUrlSecret,\n studioPreviewPerspective: encodeStudioPerspective(perspective),\n previewSearchParam: initialUrl.toString(),\n })\n return new URL(initial, initialUrl)\n }\n\n /**\n * If the resolved preview mode is false then we have an unexpected state that shouldn't be possible\n */\n if (!resolvedPreviewMode) {\n throw new Error('Resolved preview mode is false')\n }\n\n const url = new URL(resolvedPreviewMode.enable, initialUrl)\n\n url.searchParams.set(urlSearchParamPreviewSecret, previewUrlSecret)\n url.searchParams.set(urlSearchParamPreviewPerspective, encodeStudioPerspective(perspective))\n if (initialUrl.pathname !== url.pathname) {\n url.searchParams.set(\n urlSearchParamPreviewPathname,\n `${initialUrl.pathname}${initialUrl.search}${initialUrl.hash}`,\n )\n }\n\n return url\n })\n}\n","import {fromPromise} from 'xstate'\n\n/** @internal */\nexport const resolveUrlFromPreviewSearchParamActor = fromPromise<\n URL,\n {initialUrl: URL; previewSearchParam: string | null | undefined; allowOrigins: URLPattern[]}\n>(async ({input}) => {\n const {previewSearchParam, initialUrl, allowOrigins} = input\n\n /**\n * If the preview search param is falsy we can skip\n */\n if (!previewSearchParam) {\n return initialUrl\n }\n\n /**\n * Validate the previewSearchParam\n */\n try {\n const previewSearchParamUrl = new URL(previewSearchParam, initialUrl.origin)\n if (!allowOrigins.some((pattern) => pattern.test(previewSearchParamUrl.origin))) {\n return initialUrl\n }\n return previewSearchParamUrl\n } catch (err) {\n return initialUrl\n }\n})\n","import {\n schemaIdSingleton,\n schemaType,\n schemaTypeSingleton,\n} from '@sanity/preview-url-secret/constants'\nimport {type SanityDocument} from '@sanity/types'\nimport {uuid} from '@sanity/uuid'\nimport {throwError} from 'rxjs'\nimport {type DocumentValuePermission, type PermissionCheckResult} from 'sanity'\nimport {type ActorRefFrom, assign, fromObservable, fromPromise, log, setup} from 'xstate'\n\nimport {type ResolvePreviewModeUrlInput} from '../actors/resolve-preview-mode-url'\nimport {resolveUrlFromPreviewSearchParamActor} from '../actors/resolve-url-from-preview-search-param'\nimport {type PreviewUrlPreviewMode} from '../types'\n\ninterface Context {\n initialUrl: URL | null\n previewUrl: URL | null\n allowOrigins: URLPattern[] | null\n error: Error | null\n previewSearchParam: string | null\n previewUrlSecret: {secret: string; expiresAt: Date} | null\n previewAccessSharingCreatePermission: PermissionCheckResult | null\n previewAccessSharingReadPermission: PermissionCheckResult | null\n previewAccessSharingUpdatePermission: PermissionCheckResult | null\n previewUrlSecretPermission: PermissionCheckResult | null\n previewMode: PreviewUrlPreviewMode | null\n}\n\ntype SetPreviewSearchParamEvent = {\n type: 'set preview search param'\n previewSearchParam: string | null\n}\ntype Event = SetPreviewSearchParamEvent\n\ntype Input = Omit<SetPreviewSearchParamEvent, 'type'>\n\nexport interface CheckPermissionInput {\n checkPermissionName: DocumentValuePermission\n document: Partial<SanityDocument> | null\n}\n\n/**\n * Used for permissions checks\n */\nexport const shareAccessSingletonDocument = {_id: schemaIdSingleton, _type: schemaTypeSingleton}\nexport const previewUrlSecretDocument = {\n _id: `drafts.${uuid()}`,\n _type: schemaType,\n}\n\nexport const previewUrlMachine = setup({\n types: {} as {\n context: Context\n events: Event\n input: Input\n tags: 'busy' | 'error'\n },\n actions: {\n 'notify preview will likely fail': log(\n `Missing permissions to create preview secret, or read shared preview secret. Preview will likely fail loading.`,\n ),\n 'assign preview search param': assign({\n previewSearchParam: (_, params: {previewSearchParam: string | null}) =>\n params.previewSearchParam,\n }),\n 'assign error': assign({\n error: (_, params: {message: string; error: unknown}) => {\n return params.error instanceof Error\n ? params.error\n : new Error(params.message, {cause: params.error})\n },\n }),\n },\n actors: {\n 'check permission': fromObservable<PermissionCheckResult, CheckPermissionInput>(() =>\n throwError(\n () =>\n new Error(\n `The 'check permission' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'check permission': fromObservable(({input}: {input: CheckPermissionInput}) => ...)}})`,\n ),\n ),\n ),\n 'resolve initial url': fromPromise<URL, {previewSearchParam: string | null}>(() =>\n Promise.reject(\n new Error(\n `The 'resolve initial url' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'resolve initial url': fromPromise(...)}})`,\n ),\n ),\n ),\n 'resolve allow patterns': fromPromise<URLPattern[], {initialUrl: URL}>(() =>\n Promise.reject(\n new Error(\n `The 'resolve allow patterns' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'resolve allow pattern': fromPromise(...)}})`,\n ),\n ),\n ),\n 'resolve url from preview search param': resolveUrlFromPreviewSearchParamActor,\n 'resolve preview mode': fromPromise<PreviewUrlPreviewMode | false, {targetOrigin: string}>(() =>\n Promise.reject(\n new Error(\n `The 'resolve preview mode' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'resolve preview mode': fromPromise(...)}})`,\n ),\n ),\n ),\n 'create preview secret': fromPromise<{\n secret: string\n expiresAt: Date\n }>(async () =>\n Promise.reject(\n new Error(\n `The 'create preview secret' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'create preview secret': fromPromise(...)}})`,\n ),\n ),\n ),\n 'read shared preview secret': fromPromise<string | null>(async () =>\n Promise.reject(\n new Error(\n `The 'read shared preview secret' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'read shared preview secret': fromPromise(...)}})`,\n ),\n ),\n ),\n 'resolve preview mode url': fromPromise<URL, ResolvePreviewModeUrlInput>(() =>\n Promise.reject(\n new Error(\n `The 'resolve preview mode url' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'resolve preview mode url': fromPromise(...)}})`,\n ),\n ),\n ),\n },\n guards: {\n 'has checked permissions': ({context}) => {\n return Boolean(\n context.previewAccessSharingCreatePermission &&\n context.previewAccessSharingReadPermission &&\n context.previewAccessSharingUpdatePermission &&\n context.previewUrlSecretPermission,\n )\n },\n 'search param has new origin': ({context, event}) => {\n if (!context.previewUrl || !event.previewSearchParam) {\n return false\n }\n try {\n const previewSearchParamUrl = new URL(event.previewSearchParam, context.previewUrl)\n return context.previewUrl.origin !== previewSearchParamUrl.origin\n } catch {\n return false\n }\n },\n 'can create preview secret': ({context}) => {\n return context.previewUrlSecretPermission?.granted === true\n },\n\n 'has preview mode with created secret': ({context}, params: PreviewUrlPreviewMode | false) => {\n if (params === false) {\n return false\n }\n return context.previewUrlSecretPermission?.granted === true\n },\n 'has preview mode with share access': ({context}, params: PreviewUrlPreviewMode | false) => {\n if (params === false) {\n return false\n }\n return context.previewAccessSharingReadPermission?.granted === true\n },\n 'has preview mode without permissions': ({context}, params: PreviewUrlPreviewMode | false) => {\n if (params === false) {\n return false\n }\n return (\n context.previewAccessSharingReadPermission?.granted === false &&\n context.previewUrlSecretPermission?.granted === false\n )\n },\n },\n delays: {\n expiredSecret: ({context}) => {\n if (!context.previewUrlSecret?.expiresAt) {\n return 0\n }\n const now = Date.now()\n const expiresAt = context.previewUrlSecret.expiresAt.getTime()\n return Math.max(expiresAt - now, 0)\n },\n },\n}).createMachine({\n // eslint-disable-next-line tsdoc/syntax\n /** @xstate-layout N4IgpgJg5mDOIC5QAUBOYBuBLMB3ABAKoBKAMgMRiqoD2qAdAA4A2AhgC4BmdAtvWphwESpBFgB2GGgGMOWGuIDaABgC6K1YlCMasLO3nitIAB6IArAA56AZgCcAdkcBGS8vMAmO+YBszgDQgAJ6Izs4+9M7KACzKztGWHg4OPubmAL7pgQLYeERklNR0TGxcvPzoucJkYpIycgqKzupqxjp6BgrGZggAtM520ZHRdjZjNjFe7oEhCGERUbHxicmpGVkgOUL5FFS0DCwc3Kh8W3kitVKynUoeLZpIIO36ht2IvV62Hl7elmE2lh83xmoXCkRicQSSRS5gSmWylW2IkK+xKR3KZ2qogkVwaShs9zauheXUePV6gPo3jSUyi-xBczBi0hKxh5mc8M2iPOBVgYHY+EY3IIfNYqGkAAtBWLWDwNESOq8yaCbM56A4bB5fGllHYvD4fAz4h56CNfG5LKqHMpLdFOZidvRJWBpABrCRQZBUHhYWB6BSwcjyx7PG5vPrs5TqjWqyyjTXRDwMjwxei68J2ZQ2nyWXN2jYOkT0dCwGjMbDiKAASXEL1YzEIqGY5AgCjA9BxNFd7cLZGLcDLFertYM9cbzEu9RuGmD2mJYeVfRGdipyh86Yc0XiE3MDK3JssIwcrmtPjGSXzCMEPNI-dL5Y9NbrDabKOKhzKJwq16xd8Hj5HLAxybSdrkMGdWhDeclVAclN3odlzBsKwBjSSxjwcZM7DVeJ1w8P4xmidk7HtYVHRLf9KwAQWYZgaFwZAOHYKhxEDVtxHbTtu2-KpyIHB9qNo+jGPYZjUFY0C8Qgh450VUlYPedkHHoHwnDSZDVOiGwfGiBlUhXXwwjsQYtKSYzSJ-Pj7yHGi6IYpiWMDPZ31KY5TjIosKIEqBbOEhzxNgSTpzUWcnmg+TTHePV6Hw3MYgzaItJ0hlYRNTNkLiHxBl1GILN4zz+KHccADFaB4TEAGUwDFSVGNQWUWzbDs6m43tby8oqm1KmhyuFKqaolOrZSC8CQsg2SSSMRdel8ZSNUTdlcw8M07AZQZrDXdaDRtUZnHWK98r7DqPRKsrKuq8VBplHg3wOVyMQ8o7CpOrqzr6i7auukbGjGmSwrkqaFL6MJlLiWFlC1EGty0hknAiXVVPMRx12UJwOQLR72ueytMQAWRoCAwEajjmqkVrMb-by8YJsBvqUX6FUm8Nem2+hbWPUZErGTcjS8NUJg8AE9T1ZwHHwvKkSe6yPWpwnic4lqewp46ceFfHCbpmdmkZhcgZmyxzFsDmTPcXUUiNRKDy3ZQJlVLSkYlm9KaHWWifYhWyaVyyCul1Wf3V2nOzAn71DuHWYMivovGsBxPCy74beWaJDWCUJzBSFTrUcQYdMzIFHd-FXPTVmn5dJrsvcOrHfeL-2ac1kKCXDiLyWcNKJiiHM-BtONwgtnMEM1DVNwhhI7B8AurMo2uqgD260U-dzval6fXYbwkoIB5moijLLkm5tvYRBo1nGQtND11ZaIdzEiMeX6vV5LuW+QFIVLNFS7pXquVxv+pnF1FtYP4OY7AG3QohJMqcEDeGUq4NwYQBhLEnkWWAABXaQ0g4CBhfoKMiH9JRf1lKFUMEceiizVPA0+7gtQQy8LzXU6obaJTFtEJwHhXDIL7G-WepccHcO2PgqUjBrrEPCoDSOFI3C2AGHtQ8sIiJJGTILZS7JRaeGSKw7CnDbz8LwAHJ06AOBgHOtIdA7Ay5cUrpLHRT92ymOqsxExZj16iK3gAqI6oaQ6QtE4YylhkynzmkCBGNgNR7VvgdaxTBbEGIccY969jzHOTuuiL8bVol10JrEoxTj+QuN-iQlu7xwjKX1P8bSTC0hGhcKaBIOZAQGkBKE7RGSeFZMMRACqEoxRgCohgrBFjFY8Sibo3A+iOldJ6X0zBfp8l-UKeIshjgqTGTiPYPaGotS7igd8QWtgsp6iQnFOEd8q6tKEOM6qnTunoGmQM5JC83LDKdqMy5rBrlTP6bMoOUkGab3-kDU+ERVEpnsEjDRVSdljBXKeQY3h5gOBaa8mmzt4k-nHIMz2zzfzIvaYVNFVRxxzObosxAfg1Q2jSOERIh5kIBNGKaNZ2lvjhFhEimJHUCVCAxQ8j8Tz0m4vbJyzERKfnBQ3hNXWkdyWeJsCMVhqNsK6mTO4Q2Q9DysLCEhDw7LMntjQV8wMJhYDsCMfQVgnAxIAAowAmEYFgdAnSXRmIAJTkAFTEg1MzYCuIBZHKYKlUiqWwrCMJkDZgDAYceRMfwUisPYZYTIGxxA03gI8NqJLmZ6msKqENcjErqIZL0cethvDGXLew9hiYWnOjdDLb0vp-SsUzdNcwEMEJ7WTohDMfgU4RpTCpUJnhYrHghuEFpRcnyjhfMwFtet2Q2FNOwsWZarBan8TsuMkRvhIzPJGDwmkWnJLnf6g0aZl0mQTURDdsxYiGwwsRIEgwEwTuxj5IS9lRKORPeSJCOF4XgrUZqbZsxwZszcJtbC4RUg2FfTXU6PVzoDSGjwH9ik-gxRGG4NtxkkZblhgyxIhFQG5lSPEODj89VoYjKqGKURkij0zImXSUCwiozZuDLUCQQY6tOVEr1WDqMsxNCkP4RFPBZj+I4I0qoRMODjIlceBzkK6raWAIT7DDZlNPhUuVkKI0pEXbHBISF1yAiIqpi5KL7E5ISWYoTna2b6Qg+DcFN7EAphLdpdOWVoPJ0RXxl5HKrmTNuYahzaQviaQPVERa8mlGeBUnnQyDStSwcCzi4L1kuV4HHNR4DCFdRaVVFSzcZ4VVIVsDEVhZ5QnWlYZZvRKLj3-KlT0FIKjVRZghkCXwqkjQGzVFxvOMisoWYy46QV9ABN+mo3mFZZ427lp032jzVa2bJGtCUtciak1AA */\n id: 'Preview URL',\n context: ({input}) => ({\n initialUrl: null,\n previewUrl: null,\n error: null,\n allowOrigins: null,\n previewSearchParam: input.previewSearchParam,\n previewUrlSecret: null,\n previewAccessSharingCreatePermission: null,\n previewAccessSharingReadPermission: null,\n previewAccessSharingUpdatePermission: null,\n previewUrlSecretPermission: null,\n previewMode: null,\n }),\n\n invoke: [\n {\n src: 'check permission',\n input: () => ({checkPermissionName: 'read', document: shareAccessSingletonDocument}),\n onError: {\n target: '.error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to check permission',\n error: event.error,\n }),\n },\n },\n onSnapshot: {\n actions: assign({\n previewAccessSharingReadPermission: ({event}) => event.snapshot.context ?? null,\n }),\n },\n },\n {\n src: 'check permission',\n input: () => ({checkPermissionName: 'create', document: shareAccessSingletonDocument}),\n onError: {\n target: '.error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to check permission',\n error: event.error,\n }),\n },\n },\n onSnapshot: {\n actions: assign({\n previewAccessSharingCreatePermission: ({event}) => event.snapshot.context ?? null,\n }),\n },\n },\n {\n src: 'check permission',\n input: () => ({checkPermissionName: 'update', document: shareAccessSingletonDocument}),\n onError: {\n target: '.error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to check permission',\n error: event.error,\n }),\n },\n },\n onSnapshot: {\n actions: assign({\n previewAccessSharingUpdatePermission: ({event}) => event.snapshot.context ?? null,\n }),\n },\n },\n {\n src: 'check permission',\n input: () => ({checkPermissionName: 'create', document: previewUrlSecretDocument}),\n onError: {\n target: '.error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to check permission',\n error: event.error,\n }),\n },\n },\n onSnapshot: {\n actions: assign({\n previewUrlSecretPermission: ({event}) => event.snapshot.context ?? null,\n }),\n },\n },\n ],\n\n on: {\n 'set preview search param': {\n actions: {\n type: 'assign preview search param',\n params: ({event}) => ({previewSearchParam: event.previewSearchParam}),\n },\n },\n },\n\n states: {\n checkingPermissions: {\n always: {\n guard: 'has checked permissions',\n target: 'resolvingInitialUrl',\n },\n tags: 'busy',\n },\n\n resolvingInitialUrl: {\n invoke: {\n src: 'resolve initial url',\n input: ({context}) => ({previewSearchParam: context.previewSearchParam}),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve initial url',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvingAllowPatterns',\n actions: assign({initialUrl: ({event}) => event.output}),\n },\n },\n\n tags: 'busy',\n },\n\n error: {\n type: 'final',\n tags: 'error',\n },\n\n resolvingAllowPatterns: {\n invoke: {\n src: 'resolve allow patterns',\n input: ({context}) => ({initialUrl: context.initialUrl!}),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve preview url allow patterns',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvingUrlFromPreviewSearchParam',\n actions: assign({allowOrigins: ({event}) => event.output}),\n },\n },\n tags: ['busy'],\n },\n\n resolvingUrlFromPreviewSearchParam: {\n id: 'loop',\n invoke: {\n src: 'resolve url from preview search param',\n input: ({context}) => ({\n initialUrl: context.initialUrl!,\n allowOrigins: context.allowOrigins!,\n previewSearchParam: context.previewSearchParam,\n }),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve preview url from search param',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvingPreviewMode',\n actions: assign({initialUrl: ({event}) => event.output}),\n },\n },\n tags: ['busy'],\n },\n\n resolvingPreviewMode: {\n on: {\n 'set preview search param': {\n guard: 'search param has new origin',\n actions: {\n type: 'assign preview search param',\n params: ({event}) => ({previewSearchParam: event.previewSearchParam}),\n },\n target: '#loop',\n reenter: true,\n },\n },\n invoke: {\n src: 'resolve preview mode',\n input: ({context}) => ({targetOrigin: context.initialUrl!.origin}),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve preview url allow patterns',\n error: event.error,\n }),\n },\n },\n onDone: [\n {\n guard: {\n type: 'has preview mode with created secret',\n params: ({event}) => event.output,\n },\n actions: assign({\n previewMode: ({event}) => event.output as unknown as PreviewUrlPreviewMode,\n }),\n target: 'previewMode.createPreviewSecret',\n },\n {\n guard: {\n type: 'has preview mode with share access',\n params: ({event}) => event.output,\n },\n actions: assign({\n previewMode: ({event}) => event.output as unknown as PreviewUrlPreviewMode,\n }),\n target: 'previewMode.readShareAccess',\n },\n {\n guard: {\n type: 'has preview mode without permissions',\n params: ({event}) => event.output,\n },\n actions: [\n assign({\n previewUrl: ({context}) => context.initialUrl,\n }),\n 'notify preview will likely fail',\n ],\n target: 'success',\n },\n {\n actions: assign({\n previewUrl: ({context}) => context.initialUrl,\n }),\n target: 'success',\n },\n ],\n },\n tags: ['busy'],\n },\n\n success: {\n on: {\n 'set preview search param': {\n guard: 'search param has new origin',\n actions: {\n type: 'assign preview search param',\n params: ({event}) => ({previewSearchParam: event.previewSearchParam}),\n },\n target: '#loop',\n reenter: true,\n },\n },\n },\n\n previewMode: {\n on: {\n 'set preview search param': {\n guard: 'search param has new origin',\n actions: {\n type: 'assign preview search param',\n params: ({event}) => ({previewSearchParam: event.previewSearchParam}),\n },\n target: '#loop',\n reenter: true,\n },\n },\n\n states: {\n createPreviewSecret: {\n invoke: {\n src: 'create preview secret',\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to create preview secret',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvePreviewUrl',\n actions: assign({previewUrlSecret: ({event}) => event.output}),\n },\n },\n tags: ['busy'],\n },\n readShareAccess: {\n invoke: {\n src: 'read shared preview secret',\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to read shared preview secret',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvePreviewUrl',\n actions: assign({\n previewUrlSecret: ({event}) => ({\n secret: event.output!,\n expiresAt: new Date(Date.now() + 1000 * 60 * 60 * 60 * 24),\n }),\n }),\n },\n },\n tags: ['busy'],\n },\n resolvePreviewUrl: {\n invoke: {\n src: 'resolve preview mode url',\n input: ({context}) => ({\n initialUrl: context.initialUrl!,\n resolvedPreviewMode: context.previewMode!,\n previewUrlSecret: context.previewUrlSecret!.secret,\n }),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve preview url',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'success',\n actions: assign({previewUrl: ({event}) => event.output}),\n },\n },\n tags: ['busy'],\n },\n error: {\n type: 'final',\n tags: ['error'],\n },\n success: {\n after: {\n expiredSecret: {\n guard: 'can create preview secret',\n actions: assign({previewUrlSecret: null}),\n target: 'createPreviewSecret',\n reenter: true,\n },\n },\n },\n },\n initial: 'readShareAccess',\n },\n },\n\n initial: 'checkingPermissions',\n})\nexport type PreviewUrlRef = ActorRefFrom<typeof previewUrlMachine>\n","import {useToast} from '@sanity/ui'\nimport {useActorRef, useSelector} from '@xstate/react'\nimport {useEffect} from 'react'\nimport {useActiveWorkspace, useClient, useCurrentUser, useGrantsStore, useTranslation} from 'sanity'\nimport {useRouter} from 'sanity/router'\nimport {fromObservable} from 'xstate'\n\nimport {defineCreatePreviewSecretActor} from './actors/create-preview-secret'\nimport {defineReadSharedSecretActor} from './actors/read-shared-secret'\nimport {defineResolveAllowPatternsActor} from './actors/resolve-allow-patterns'\nimport {defineResolveInitialUrlActor} from './actors/resolve-initial-url'\nimport {defineResolvePreviewModeActor} from './actors/resolve-preview-mode'\nimport {defineResolvePreviewModeUrlActor} from './actors/resolve-preview-mode-url'\nimport {API_VERSION} from './constants'\nimport {presentationLocaleNamespace} from './i18n'\nimport {previewUrlMachine, type PreviewUrlRef} from './machines/preview-url'\nimport {type PreviewUrlAllowOption, type PreviewUrlOption} from './types'\nimport {usePresentationPerspective} from './usePresentationPerspective'\n\nexport function usePreviewUrlActorRef(\n previewUrlOption: PreviewUrlOption | undefined,\n allowOption: PreviewUrlAllowOption | undefined,\n): PreviewUrlRef {\n const grantsStore = useGrantsStore()\n const client = useClient({apiVersion: API_VERSION})\n const currentUser = useCurrentUser()\n const currentUserId = currentUser?.id\n const workspace = useActiveWorkspace()\n const studioBasePath = workspace?.activeWorkspace?.basePath || '/'\n const router = useRouter()\n const routerSearchParams = new URLSearchParams(router.state._searchParams)\n const previewSearchParam = routerSearchParams.get('preview')\n const {push: pushToast} = useToast()\n const {t} = useTranslation(presentationLocaleNamespace)\n const perspective = usePresentationPerspective()\n\n const actorRef = useActorRef(\n previewUrlMachine.provide({\n actions: {\n 'notify preview will likely fail': () =>\n pushToast({\n id: 'preview-url-secret.missing-grants',\n closable: true,\n status: 'error',\n duration: Infinity,\n title: t('preview-url-secret.missing-grants'),\n }),\n },\n actors: {\n 'create preview secret': defineCreatePreviewSecretActor({client, currentUserId}),\n 'read shared preview secret': defineReadSharedSecretActor({client}),\n 'resolve allow patterns': defineResolveAllowPatternsActor({\n client,\n allowOption,\n }),\n 'resolve initial url': defineResolveInitialUrlActor({\n client,\n studioBasePath,\n previewUrlOption,\n perspective,\n }),\n 'resolve preview mode': defineResolvePreviewModeActor({\n client,\n previewUrlOption,\n }),\n 'resolve preview mode url': defineResolvePreviewModeUrlActor({\n client,\n studioBasePath,\n previewUrlOption,\n perspective,\n }),\n 'check permission': fromObservable(({input}) =>\n grantsStore.checkDocumentPermission(input.checkPermissionName, input.document),\n ),\n },\n }),\n {input: {previewSearchParam}},\n )\n\n /**\n * Sync changes to router state for the preview search param\n */\n useEffect(() => {\n actorRef.send({type: 'set preview search param', previewSearchParam})\n }, [actorRef, previewSearchParam])\n\n const error = useSelector(actorRef, (state) =>\n state.status === 'error' ? state.error : state.hasTag('error') ? state.context.error : null,\n )\n\n // Propagate the error to the nearest error boundary\n if (error) throw error\n\n return actorRef\n}\n","import {useToast} from '@sanity/ui'\nimport {useSelector} from '@xstate/react'\nimport {useEffect} from 'react'\nimport {Translate, useTranslation} from 'sanity'\nimport {useRouter} from 'sanity/router'\n\nimport {presentationLocaleNamespace} from './i18n'\nimport {type PreviewUrlRef} from './machines/preview-url'\n\nexport function useReportInvalidPreviewSearchParam(previewUrlRef: PreviewUrlRef): void {\n const {t} = useTranslation(presentationLocaleNamespace)\n const {push: pushToast} = useToast()\n const router = useRouter()\n const routerSearchParams = new URLSearchParams(router.state._searchParams)\n const previewSearchParam = routerSearchParams.get('preview')\n\n const allowOrigins = useSelector(previewUrlRef, (state) => state.context.allowOrigins)\n const currentOrigin = useSelector(previewUrlRef, (state) => state.context.previewUrl?.origin)\n useEffect(() => {\n if (!Array.isArray(allowOrigins) || !previewSearchParam || !currentOrigin) return\n const nextOrigin = new URL(previewSearchParam, currentOrigin).origin\n if (!allowOrigins.some((pattern) => pattern.test(nextOrigin))) {\n pushToast({\n closable: true,\n id: `presentation-iframe-origin-mismatch-${nextOrigin}`,\n status: 'error',\n duration: Infinity,\n title: t('preview-search-param.configuration.error.title'),\n description: (\n <Translate\n t={t}\n i18nKey=\"preview-search-param.configuration.error.description\"\n components={{Code: 'code'}}\n values={{\n previewSearchParam,\n blockedOrigin: nextOrigin,\n }}\n />\n ),\n })\n }\n }, [allowOrigins, currentOrigin, previewSearchParam, pushToast, t])\n}\n","import {subcribeToVercelProtectionBypass} from '@sanity/preview-url-secret/toggle-vercel-protection-bypass'\nimport {useEffect, useReducer, useState} from 'react'\nimport {useClient} from 'sanity'\n\nimport {API_VERSION} from './constants'\n\ntype VercelProtectionBypassReadyState = 'loading' | 'ready'\n\nexport function useVercelBypassSecret(): [\n vercelProtectionBypassSecret: string | null,\n vercelProtectionBypassReadyState: VercelProtectionBypassReadyState,\n] {\n const client = useClient({apiVersion: API_VERSION})\n const [vercelProtectionBypassReadyState, ready] = useReducer(\n () => 'ready' as 'ready' | 'loading',\n 'loading',\n )\n const [vercelProtectionBypassSecret, setVercelProtectionBypassSecret] = useState<string | null>(\n null,\n )\n\n useEffect(() => {\n const unsubscribe = subcribeToVercelProtectionBypass(client, (secret) => {\n setVercelProtectionBypassSecret(secret)\n ready()\n })\n return () => unsubscribe()\n }, [client])\n\n return [vercelProtectionBypassSecret, vercelProtectionBypassReadyState]\n}\n","import {useSelector} from '@xstate/react'\nimport {type Tool} from 'sanity'\n\nimport {PresentationSpinner} from './PresentationSpinner'\nimport PresentationTool from './PresentationTool'\nimport {type PresentationPluginOptions} from './types'\nimport {usePreviewUrlActorRef} from './usePreviewUrlActorRef'\nimport {useReportInvalidPreviewSearchParam} from './useReportInvalidPreviewSearchParam'\nimport {useVercelBypassSecret} from './useVercelBypassSecret'\n\nexport default function PresentationToolGrantsCheck({\n tool,\n}: {\n tool: Tool<PresentationPluginOptions>\n}): React.JSX.Element {\n const previewUrlRef = usePreviewUrlActorRef(tool.options?.previewUrl, tool.options?.allowOrigins)\n useReportInvalidPreviewSearchParam(previewUrlRef)\n\n const previewAccessSharingCreatePermission = useSelector(\n previewUrlRef,\n (state) => state.context.previewAccessSharingCreatePermission,\n )\n const previewAccessSharingUpdatePermission = useSelector(\n previewUrlRef,\n (state) => state.context.previewAccessSharingUpdatePermission,\n )\n const previewAccessSharingReadPermission = useSelector(\n previewUrlRef,\n (state) => state.context.previewAccessSharingReadPermission,\n )\n const previewUrlSecretPermission = useSelector(\n previewUrlRef,\n (state) => state.context.previewUrlSecretPermission,\n )\n const url = useSelector(previewUrlRef, (state) => state.context.previewUrl)\n // @TODO the vercel protection bypass can be moved to the iframe level\n const [vercelProtectionBypass, vercelProtectionBypassReadyState] = useVercelBypassSecret()\n\n if (\n !url ||\n vercelProtectionBypassReadyState === 'loading' ||\n !previewAccessSharingCreatePermission ||\n typeof previewAccessSharingCreatePermission.granted === 'undefined' ||\n !previewAccessSharingUpdatePermission ||\n typeof previewAccessSharingUpdatePermission.granted === 'undefined' ||\n !previewUrlSecretPermission ||\n !previewAccessSharingReadPermission ||\n typeof previewAccessSharingReadPermission.granted === 'undefined' ||\n typeof previewUrlSecretPermission.granted === 'undefined'\n ) {\n return <PresentationSpinner />\n }\n\n return (\n <PresentationTool\n tool={tool}\n initialPreviewUrl={url}\n vercelProtectionBypass={vercelProtectionBypass}\n canToggleSharePreviewAccess={\n previewAccessSharingCreatePermission?.granted === true &&\n previewAccessSharingUpdatePermission?.granted === true\n }\n canUseSharedPreviewAccess={previewAccessSharingReadPermission?.granted === true}\n previewUrlRef={previewUrlRef}\n />\n )\n}\n"],"names":["PostMessageFeatures","props","$","_c","comlink","t0","t1","on","_temp","useEffect","memo","features","optimistic","presentationMachine","setup","types","actions","actors","guards","createMachine","id","context","url","error","visualEditingOverlaysEnabled","assign","target","states","description","tags","loading","loaded","event","enabled","idle","refreshing","reloading","initial","SharedStateProvider","children","Symbol","for","sharedState","useRef","t2","state","current","t3","key","value","post","setValue","t4","key_0","removeValue","t5","t6","t7","Root","styled","div","Panel","defaultSize","minWidth","maxWidth","order","undefined","useContext","PresentationPanelsContext","Error","getPanelStyle","registerElement","unregisterElement","style","type","useLayoutEffect","debounce","fn","timeout","timer","args","clearTimeout","setTimeout","apply","itemKey","getStoredItem","JSON","parse","localStorage","getItem","setStoredItem","data","setItem","stringify","getKeyForPanels","panels","map","panel","join","usePanelsStorage","get","_temp2","set","_temp3","setDebounced","panels_0","widths","stored_0","stored","Array","isArray","some","val","getNextWidth","nextWidth","containerWidth","maxWidthPx","minWidthPx","Math","min","max","getNextWidths","delta","panelBefore","panelAfter","panelsState","initialDragState","prevWidths","initialWidths","nextWidths","pivotPanel","index","findIndex","width","abs","deltaApplied","deltaRemaining","toPrecision","localeCompare","numeric","length","getPanelWidth","getOffset","handleElement","initialOffset","initialHandleElementRect","pointerOffset","clientX","elementOffset","getBoundingClientRect","left","isPanel","element","isResizer","getSortedElements","elements","from","values","sort","a","b","validateWidths","widthsToValidate","total","reduce","remainingWidth","toFixed","getDefaultWidths","panelsWithoutWidth","remainingWidthTotal","widthsWithNulls","defaultWidth","PanelsWrapper","Panels","panelsEl","Map","setElements","useState","filter","setWidths","activeResizer","setActiveResizer","panelsRef","flexGrow","pointerEvents","id_0","prev","has","next","t8","id_1","prev_0","next_0","delete","t9","window","innerWidth","dragOffset","resizerIndex","resizerRect","startX","dragRef","t10","id_2","elementsArr","el","resizer","resizeElement","acc","el_0","i","acc_0","el_1","i_0","pageX","startDragging","t11","stopDragging","t12","id_3","event_0","preventDefault","stopPropagation","resizer_0","resizeElement_0","offset","rect","prevWidth","i_1","drag","t13","t14","storage","t15","t16","widths_0","storedWidths","validatedStoredWidths","defaultWidths","t17","t18","t19","t20","resizeObserver","ResizeObserver","prevWidths_0","nextWidths_0","prevWidth_0","i_2","observe","disconnect","t21","t22","t23","t24","ErrorCard","message","onContinueAnyway","onRetry","restProps","t","useTranslation","presentationLocaleNamespace","retryButton","continueAnywayButton","Container","ChildLink","forwardRef","ref","childId","childParameters","childType","rest","searchParams","childPayload","Object","entries","_searchParams","ReferenceChildLink","documentId","documentType","parentRefPath","template","params","pathToString","encodeQueryString","parts","resolveQueryStringFromParams","nextParams","allowed","safeNextParams","includes","obj","BackLink","PresentationPaneRouterProvider","onEditReference","onStructureParams","structureParams","refs","routerState","resolvePathFromState","useRouter","fromEntries","routerSearchParams","useUnique","path","qs","createPathWithParams","childLinkProps","doc","find","r","_id","getPublishedId","_type","console","warn","backLinkProps","ref_0","childLinkProps_0","ref_1","options","version","groupIndex","siblingIndex","payload","hasGroupSiblings","groupLength","routerPanesState","ParameterizedLink","closeCurrentAndAfter","handleEditReference","replaceCurrent","closeCurrent","_temp4","duplicateCurrent","_temp5","setView","_temp6","setParams","setPayload","_temp7","navigateIntent","_temp8","intentName","intentParams","options_0","viewId","pane_0","pane","RootLayout","PaneLayout","Flex","WrappedCode","Code","DocumentListPane","mainDocumentState","devMode","usePresentationTool","document","ids","schemaTypeName","title","errorParams","setErrorParams","handleRetry","StructureDocumentListPane","r_0","DocumentPane","onFocusPath","templateParams","decodeJsonParams","templateParameters","paneDocumentNode","studioPath","toString","handleFocusPath","height","StructureDocumentPane","DocumentPanel","StructureToolProvider","usePreviewState","schemaType","documentPreviewStore","useDocumentPreviewStore","preview","setPreview","perspectiveStack","usePerspective","subscription","getPreviewStateObservable","subscribe","unsubscribe","ContentEditor","schema","useSchema","props_0","MainDocumentLink","previewState","bb0","snapshot","getPreviewValueWithFallback","fallback","usePanelId","uuid","panelId","Resizer","ResizerInner","$disabled","PanelResizer","propId","disabled","isDragging","nativeEvent","onMouseDown","e","onDrag","blur","onDragStop","resetDocumentStyles","bodyStyle","body","documentStyle","documentElement","cursor","userSelect","removeProperty","addEventListener","removeEventListener","PresentationContentWrapper","setDisplayedDocument","getCommentIntent","PresentationContent","documentsOnPage","PresentationNavigateProvider","navigate","_navigate","useLocalState","defaultValue","usePresentationNavigator","unstable_navigator","navigatorProvided","component","_navigatorEnabled","setNavigatorEnabled","navigatorEnabled","toggleNavigator","Component","NavigatorComponent","navigatorDisabled","Navigator","PresentationParamsProvider","PresentationProvider","name","useAllowPatterns","previewUrlRef","allowPatterns","useSelector","TypeError","allowOrigins","encodeStudioPerspective","studioPerspective","useId","useReactId","startsWith","replace","IFrame","forwardedRef","animate","onLoad","preventClick","src","variants","useImperativeHandle","instance","handleBlur","activeElement","dispatchEvent","MouseEvent","bubbles","cancelable","viewTransitionName","IFrameElement","motion","create","iframe","IFrameOverlay","Box","GlobalViewTransition","createGlobalStyle","OpenPreviewButton","openPopup","previewLocationOrigin","previewLocationRoute","perspective","targetOrigin","URL","urlSearchParamPreviewPerspective","pathname","search","openPreviewLink","currentTarget","href","handleOpenPopup","LaunchIcon","useTargetOrigin","previewUrl","origin","PreviewLocationInput","fontSize","onChange","padding","prefix","suffix","basePath","useActiveWorkspace","activeWorkspace","inputRef","sessionValue","setSessionValue","customValidity","setCustomValidity","handleChange","absoluteValue","pattern","test","reportValidity","nextValue","handleKeyDown","nextValue_0","handleClear","icon","ResetIcon","zIndex","QRCodeSVG","lazy","QrCodeLogoSize","QrCodeLogoPadding","QrSize","StyledSanityMonogram","SanityMonogram","MotionSpinner","Spinner","MotionText","Text","MotionMonogram","SharePreviewMenu","canToggleSharePreviewAccess","canUseSharedPreviewAccess","initialUrl","push","pushToast","useToast","client","useClient","apiVersion","API_VERSION","currentUser","useCurrentUser","setLoading","enabling","setEnabling","disabling","setDisabling","secret","setSecret","busy","useMemo","setSecretSearchParams","setError","handleUnableToToggle","useCallback","closable","status","handleDisableSharing","disablePreviewAccessSharing","location","handleEnableSharing","previewUrlSecret","enablePreviewAccessSharing","handleCopyUrl","navigator","clipboard","writeText","controller","AbortController","usedTags","fetchShareSecret","lastLiveEventId","signal","result","syncTags","fetch","fetchSharedAccessQuery","filterResponse","tag","aborted","live","events","abort","finally","ShareIcon","justifyContent","alignItems","gridTemplateColumns","gridTemplateRows","position","aspectRatio","display","opacity","textWrap","textAlign","CopyIcon","constrainSize","placement","portal","displayName","PreviewHeaderDefault","canSharePreviewAccess","iframeRef","onPathChange","onRefresh","overlaysConnection","presentationRef","setViewport","toggleOverlay","viewport","toggleViewportSize","send","handleRefresh","isLoading","isLoaded","isRefreshing","isReloading","overlaysEnabled","previewURL","withoutSecretSearchParams","perspectiveToggleTooltipId","previewUrlBusy","PanelLeftIcon","content","fallbackPlacements","whiteSpace","marginTop","marginBottom","lineHeight","borderRadius","margin","t25","t26","t27","t28","t29","t30","RefreshIcon","t31","t32","t33","t34","node","setProperty","t35","t36","t37","t38","t39","t40","MobileDeviceIcon","DesktopIcon","t41","t42","t43","t44","PreviewHeader","renderDefault","HeaderComponent","header","minHeight","matches","state_0","state_1","state_2","state_3","state_4","hasTag","MotionFlex","Preview","loadersConnection","vercelProtectionBypass","stablePerspective","setStablePerspective","urlPerspective","urlSearchParamVercelProtectionBypass","urlSearchParamVercelSetBypassCookie","prefersReducedMotion","usePrefersReducedMotion","previewHeader","timedOut","setTimedOut","somethingIsWrong","setSomethingIsWrong","iframeIsBusy","handleContinueAnyway","setContinueAnyway","continueAnyway","showOverlaysConnectionStatus","setShowOverlaysConnectionState","MAX_TIME_TO_OVERLAYS_CONNECTION","onIFrameLoad","preventIframeInteraction","canUseViewTransition","useSyncExternalStore","CSS","supports","iframeAnimations","currentViewport","setCurrentViewport","iframeStyle","setIframeStyle","iframeVariants","update","startViewTransition","flushSync","toast","checkOrigin","setCheckOrigin","reportedMismatches","Set","reportMismatchingOrigin","useEffectEvent","reportedOrigin","allow","add","duration","Infinity","usePresentationNavigate","navigateEvent","nextUrl","hash","contentWindow","createController","addTarget","createChannel","heartbeat","connectTo","createConnectionMachine","provide","createCompatibilityActors","stop","start","destroy","interval","setInterval","postMessage","domain","clearInterval","spinnerVariants","inset","backdropFilter","WebkitBackdropFilter","WebkitTransition","sizes","errorVariants","background","desktop","mobile","exit","boxShadow","scale","active","defineWarnOnce","warned","warnOnceAboutCrossDatasetReference","useDocumentsOnPage","frameStateRef","validateApiPerspective","published","setPublished","previewDrafts","setPreviewDrafts","urlRef","perspective_0","documents","setCache","cache","isEqual","setDocumentsOnPage","keyedCache","uniqueDocuments","cache_0","forEach","sourceDocument","_projectId","fnOrObj","arg","Function","getQueryFromResult","resolver","resolve","getParamsFromResult","getRouteContext","route","routes","absolute","match","decode","decodeURIComponent","useMainDocument","navigationHistory","resolvers","relativeUrl","setMainDocumentState","mainDocumentIdRef","at","handleResponse","url_0","query","then","doc_0","catch","parseId","rawId","segments","split","shift","parsePath","rawPath","urlStringToPath","parseRouterState","pruneObject","exhaustiveTupleOf","array","maintainOnDocumentChange","maintainOnSameDocument","useParams","initialPreviewUrl","routerNavigate","inspect","rev","since","view","pathKey","instruction","comment","changesInspectorTab","routerStateRef","setNavigationHistory","isSameDocument","currentState","currentParams","nextState","nextRouterState","usePopups","popups","setPopups","source","open","unsubs","size","source_0","closed","source_1","source_2","POPUP_CHECK_INTERVAL","unsub","usePresentationPerspective","selectedPerspectiveName","selectedReleaseId","useStatus","statusMap","setStatusMap","handshaking","memoStatus","connection","hasConnected_0","hasConnected","status_1","setStatusFromEvent","status_0","LiveQueries","PostMessageDocuments","PostMessageRefreshMutations","PostMessagePerspective","PostMessagePreviewSnapshots","PostMessageSchema","PostMessageTelemetry","PresentationTool","tool","components","DEFAULT_TOOL_NAME","unstable_header","previewMode","shareAccess","option","hostname","setController","visualEditingComlink","setVisualEditingComlink","useActorRef","projectId","useProjectId","dataset","useDataset","mainDocuments","setOverlaysConnection","setLoadersConnection","previewKitConnection","setPreviewKitConnection","handleNavigate","urlWithoutSearch","URLSearchParams","refreshRef","onStatus","handlePreviewPath","nextPath","handleStructureParams","frameOrigin","previewOrigin","newUrl","displayedDocument","handleKeyUp","isAltKey","handleKeydown","isHotkey","boundaryElement","setBoundaryElement","PresentationNavigator","livePreviewEnabled","workspace","useWorkspace","COMMENTS_INSPECTOR_NAME","mode","EDIT_INTENT_MODE","IS_MAC","platform","MODIFIERS","alt","ctrl","mod","keys","every","toUpperCase","defineCreatePreviewSecretActor","currentUserId","fromPromise","createPreviewSecret","defineReadSharedSecretActor","defineResolveAllowPatternsActor","allowOption","input","URLPattern","maybePatterns","urlPatterns","urlPattern","defineResolveInitialUrlActor","studioBasePath","previewUrlOption","studioPreviewPerspective","previewSearchParam","defineResolvePreviewModeActor","draftMode","enable","defineResolvePreviewModeUrlActor","resolvedPreviewMode","urlSearchParamPreviewSecret","urlSearchParamPreviewPathname","resolveUrlFromPreviewSearchParamActor","previewSearchParamUrl","shareAccessSingletonDocument","schemaIdSingleton","schemaTypeSingleton","previewUrlSecretDocument","previewUrlMachine","log","_","cause","fromObservable","throwError","Promise","reject","has checked permissions","Boolean","previewAccessSharingCreatePermission","previewAccessSharingReadPermission","previewAccessSharingUpdatePermission","previewUrlSecretPermission","search param has new origin","can create preview secret","granted","has preview mode with created secret","has preview mode with share access","has preview mode without permissions","delays","expiredSecret","expiresAt","now","Date","getTime","invoke","checkPermissionName","onError","onSnapshot","checkingPermissions","always","guard","resolvingInitialUrl","onDone","output","resolvingAllowPatterns","resolvingUrlFromPreviewSearchParam","resolvingPreviewMode","reenter","success","readShareAccess","resolvePreviewUrl","after","usePreviewUrlActorRef","grantsStore","useGrantsStore","router","checkDocumentPermission","actorRef","useReportInvalidPreviewSearchParam","currentOrigin","nextOrigin","blockedOrigin","useVercelBypassSecret","vercelProtectionBypassReadyState","ready","useReducer","vercelProtectionBypassSecret","setVercelProtectionBypassSecret","subcribeToVercelProtectionBypass","PresentationToolGrantsCheck"],"mappings":"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"}
|