sanity 3.72.1 → 3.72.2-use-live-content-api.9
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/LiveQueries.js +236 -163
- package/lib/_chunks-cjs/LiveQueries.js.map +1 -1
- package/lib/_chunks-cjs/PresentationToolGrantsCheck.js +3 -7
- package/lib/_chunks-cjs/PresentationToolGrantsCheck.js.map +1 -1
- package/lib/_chunks-cjs/buildAction.js +3 -0
- package/lib/_chunks-cjs/buildAction.js.map +1 -1
- package/lib/_chunks-cjs/presentation.js +3 -4
- package/lib/_chunks-cjs/presentation.js.map +1 -1
- package/lib/_chunks-cjs/version.js +1 -1
- package/lib/_chunks-es/LiveQueries.mjs +235 -162
- package/lib/_chunks-es/LiveQueries.mjs.map +1 -1
- package/lib/_chunks-es/PresentationToolGrantsCheck.mjs +2 -4
- package/lib/_chunks-es/PresentationToolGrantsCheck.mjs.map +1 -1
- package/lib/_chunks-es/presentation.mjs +3 -3
- package/lib/_chunks-es/presentation.mjs.map +1 -1
- package/lib/_chunks-es/version.mjs +1 -1
- package/lib/_internal/cli/threads/validateDocuments.js +1 -1
- package/lib/_internal/cli/threads/validateDocuments.js.map +1 -1
- package/lib/_legacy/LiveQueries.esm.js +235 -162
- package/lib/_legacy/LiveQueries.esm.js.map +1 -1
- package/lib/_legacy/PresentationToolGrantsCheck.esm.js +2 -4
- package/lib/_legacy/PresentationToolGrantsCheck.esm.js.map +1 -1
- package/lib/_legacy/presentation.esm.js +3 -3
- package/lib/_legacy/presentation.esm.js.map +1 -1
- package/lib/_legacy/version.esm.js +1 -1
- package/package.json +13 -14
- package/src/_internal/cli/server/buildVendorDependencies.ts +1 -0
- package/src/_internal/cli/threads/validateDocuments.ts +2 -2
- package/src/presentation/PresentationTool.tsx +10 -21
- package/src/presentation/constants.ts +4 -16
- package/src/presentation/loader/LiveQueries.tsx +79 -234
- package/src/presentation/loader/useLiveEvents.ts +75 -0
- package/src/presentation/loader/useLiveQueries.ts +127 -0
- package/src/presentation/loader/utils.ts +2 -125
- package/src/presentation/types.ts +1 -18
- package/lib/_chunks-cjs/LoaderQueries.js +0 -281
- package/lib/_chunks-cjs/LoaderQueries.js.map +0 -1
- package/lib/_chunks-cjs/utils.js +0 -70
- package/lib/_chunks-cjs/utils.js.map +0 -1
- package/lib/_chunks-es/LoaderQueries.mjs +0 -288
- package/lib/_chunks-es/LoaderQueries.mjs.map +0 -1
- package/lib/_chunks-es/utils.mjs +0 -74
- package/lib/_chunks-es/utils.mjs.map +0 -1
- package/lib/_legacy/LoaderQueries.esm.js +0 -288
- package/lib/_legacy/LoaderQueries.esm.js.map +0 -1
- package/lib/_legacy/utils.esm.js +0 -74
- package/lib/_legacy/utils.esm.js.map +0 -1
- package/src/presentation/loader/LoaderQueries.tsx +0 -564
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PresentationToolGrantsCheck.js","sources":["../../src/presentation/features/PostMessageFeatures.tsx","../../src/presentation/lib/debounce.ts","../../src/presentation/overlays/SharedStateProvider.tsx","../../src/presentation/panels/Panel.tsx","../../src/presentation/panels/usePanelsStorage.ts","../../src/presentation/panels/util.ts","../../src/presentation/panels/Panels.tsx","../../src/presentation/components/ErrorCard.tsx","../../src/presentation/editor/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/preview/IFrame.tsx","../../src/presentation/preview/OpenPreviewButton.tsx","../../src/presentation/preview/PreviewLocationInput.tsx","../../src/presentation/preview/SharePreviewMenu.tsx","../../src/presentation/preview/PreviewHeader.tsx","../../src/presentation/preview/Preview.tsx","../../src/presentation/util/useEffectOnChange.ts","../../src/presentation/RevisionSwitcher.tsx","../../src/presentation/util/warnOnce.ts","../../src/presentation/useDocumentsOnPage.ts","../../src/presentation/useMainDocument.ts","../../../../node_modules/.pnpm/@sanity+visual-editing-csm@2.0.2_@sanity+client@6.27.2_debug@4.4.0__@sanity+types@packages+@sanity+types/node_modules/@sanity/visual-editing-csm/dist/index.js","../../src/presentation/lib/parse.ts","../../src/presentation/useParams.ts","../../src/presentation/usePopups.ts","../../src/presentation/usePreviewUrl.ts","../../src/presentation/useStatus.ts","../../src/presentation/PresentationTool.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","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 {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","import {useMemo} from 'react'\n\nimport {debounce} from '../lib/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 // eslint-disable-next-line no-constant-condition\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 // eslint-disable-next-line no-eq-null\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","/* eslint-disable no-nested-ternary */\nimport {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","/* eslint-disable no-console */\n\nimport {forwardRef, type PropsWithChildren, useCallback, useMemo} from 'react'\nimport {getPublishedId, useUnique} from 'sanity'\nimport {StateLink, useRouter} from 'sanity/router'\nimport {\n type BackLinkProps,\n PaneRouterContext,\n type PaneRouterContextValue,\n type ReferenceChildLinkProps,\n} from 'sanity/structure'\n\nimport {\n type PresentationParamsContextValue,\n type PresentationSearchParams,\n type StructureDocumentPaneParams,\n} from '../types'\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\nconst ReferenceChildLink = forwardRef(function ReferenceChildLink(\n props: ReferenceChildLinkProps & {searchParams: PresentationSearchParams},\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n const {\n documentId,\n documentType,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parentRefPath,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n template,\n searchParams,\n ...restProps\n } = props\n\n return (\n <StateLink\n {...restProps}\n ref={ref}\n state={{\n id: documentId,\n type: documentType,\n _searchParams: Object.entries(searchParams),\n }}\n title={undefined}\n />\n )\n})\n\nexport function PresentationPaneRouterProvider(\n props: PropsWithChildren<{\n onStructureParams: (params: StructureDocumentPaneParams) => void\n refs?: {_id: string; _type: string}[]\n searchParams: PresentationSearchParams\n structureParams: StructureDocumentPaneParams\n }>,\n): React.JSX.Element {\n const {children, 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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n params: structureParams as any,\n hasGroupSiblings: false,\n groupLength: 1,\n routerPanesState: [],\n ChildLink: (childLinkProps) => {\n const {childId, ...restProps} = childLinkProps\n const ref = refs?.find((r) => r._id === childId || getPublishedId(r._id) === childId)\n if (ref) {\n return (\n <StateLink\n {...restProps}\n state={{\n id: childId,\n type: ref._type,\n _searchParams: Object.entries(searchParams),\n }}\n />\n )\n }\n\n return <div {...restProps} />\n },\n BackLink: (backLinkProps) => <BackLink {...backLinkProps} searchParams={searchParams} />,\n ReferenceChildLink: (childLinkProps) => (\n <ReferenceChildLink {...childLinkProps} searchParams={searchParams} />\n ),\n ParameterizedLink: () => {\n throw new Error('ParameterizedLink not implemented')\n },\n closeCurrentAndAfter: () => {\n console.warn('closeCurrentAndAfter')\n },\n handleEditReference: (options) => {\n console.warn('handleEditReference', options)\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 // eslint-disable-next-line no-warning-comments\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 }, [createPathWithParams, onStructureParams, refs, searchParams, structureParams])\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 {\n type MainDocumentState,\n type PresentationSearchParams,\n type StructureDocumentPaneParams,\n} from '../types'\nimport {usePresentationTool} from '../usePresentationTool'\nimport {PresentationPaneRouterProvider} from './PresentationPaneRouterProvider'\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 onStructureParams: (params: StructureDocumentPaneParams) => void\n searchParams: PresentationSearchParams\n refs: {_id: string; _type: string}[]\n}): React.JSX.Element {\n const {mainDocumentState, 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 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 {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 {PresentationSpinner} from '../PresentationSpinner'\nimport {type PresentationSearchParams, type StructureDocumentPaneParams} from '../types'\nimport {usePresentationTool} from '../usePresentationTool'\nimport {PresentationPaneRouterProvider} from './PresentationPaneRouterProvider'\n\nconst WrappedCode = styled(Code)`\n white-space: pre-wrap;\n`\n\nexport function DocumentPane(props: {\n documentId: string\n documentType: string\n onFocusPath: (path: Path) => void\n onStructureParams: (params: StructureDocumentPaneParams) => void\n structureParams: StructureDocumentPaneParams\n searchParams: PresentationSearchParams\n}): React.JSX.Element {\n const {documentId, documentType, onFocusPath, onStructureParams, searchParams, 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 [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 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={onFocusPath}\n />\n </Suspense>\n </PresentationPaneRouterProvider>\n </PaneLayout>\n </ErrorBoundary>\n )\n}\n","import {type Path} from 'sanity'\nimport {StructureToolProvider} from 'sanity/structure'\n\nimport {type PresentationSearchParams, type StructureDocumentPaneParams} from '../types'\nimport {DocumentPane} from './DocumentPane'\n\nexport function DocumentPanel(props: {\n documentId: string\n documentType: string\n onFocusPath: (path: Path) => void\n onStructureParams: (params: StructureDocumentPaneParams) => void\n searchParams: PresentationSearchParams\n structureParams: StructureDocumentPaneParams\n}): React.JSX.Element {\n const {documentId, documentType, onFocusPath, onStructureParams, searchParams, structureParams} =\n props\n return (\n <StructureToolProvider>\n <DocumentPane\n documentId={documentId}\n documentType={documentType}\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} from 'sanity'\n\ninterface PreviewState {\n isLoading?: boolean\n draft?: PreviewValue | Partial<SanityDocument> | null\n published?: 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\n useEffect(() => {\n if (!schemaType) {\n return undefined\n }\n const subscription = getPreviewStateObservable(\n documentPreviewStore,\n schemaType,\n documentId,\n '',\n ).subscribe((state) => {\n setPreview(state)\n })\n\n return () => {\n subscription?.unsubscribe()\n }\n }, [documentPreviewStore, schemaType, documentId])\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 type Path,\n PreviewCard,\n SanityDefaultPreview,\n type SanityDocument,\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 PresentationSearchParams,\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 onFocusPath: (path: Path) => 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 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 value: mainDocumentState!.document! as SanityDocument,\n published: previewState.published,\n draft: previewState.draft,\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 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 // eslint-disable-next-line @typescript-eslint/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 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 {\n type CommentIntentGetter,\n CommentsIntentProvider,\n type Path,\n type SanityDocument,\n} 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 PresentationParamsContextValue,\n type PresentationSearchParams,\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 onFocusPath: (path: Path) => 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 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 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 {type PresentationNavigate, type PresentationNavigateContextValue} 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 = undefined) => {\n _navigate(document || {}, preview ? {preview} : {})\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 {Box} from '@sanity/ui'\nimport {motion, type VariantLabels, type Variants} from 'framer-motion'\nimport {forwardRef, type ReactEventHandler, useId} from 'react'\nimport {styled} from 'styled-components'\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\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>(function IFrame(props, ref) {\n const {animate, initial, onLoad, preventClick, src, variants, style} = props\n const id = useId()\n\n return (\n <>\n <IFrameElement\n style={{\n ...style,\n // useId() guarantees that the ID will be unique, even if we add support for multiple iframe instances,\n // while `view-transition-class: presentation-tool-iframe` provides userland a way to customize the transition with CSS if they wish\n viewTransitionName: `presentation-tool-iframe-${id.replace(/[^a-zA-Z0-9-_]/g, '_')}`,\n }}\n animate={animate}\n initial={initial}\n onLoad={onLoad}\n ref={ref}\n src={src}\n variants={variants}\n />\n {preventClick && <IFrameOverlay />}\n </>\n )\n})\n","import {LaunchIcon} from '@sanity/icons'\nimport {Text} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type PreviewProps} from './Preview'\n\n/** @internal */\nexport function OpenPreviewButton(\n props: Pick<PreviewProps, 'openPopup'> & {\n previewLocationOrigin: string\n previewLocationRoute: string\n },\n): React.ReactNode {\n const {openPopup, previewLocationOrigin, previewLocationRoute} = props\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={`${previewLocationOrigin}${previewLocationRoute}`}\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 {ResetIcon} from '@sanity/icons'\nimport {TextInput, type TextInputClearButtonProps} from '@sanity/ui'\nimport {\n type ChangeEvent,\n type FunctionComponent,\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'\n\nexport const PreviewLocationInput: FunctionComponent<{\n fontSize?: number\n onChange: (value: string) => void\n origin: string\n padding?: number\n prefix?: ReactNode\n suffix?: ReactNode\n value: string\n}> = function (props) {\n const {fontSize = 1, onChange, origin, padding = 3, prefix, suffix, value} = props\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 const absoluteValue =\n sessionValue.startsWith('/') || sessionValue === ''\n ? `${origin}${sessionValue}`\n : sessionValue\n\n if (!absoluteValue.startsWith(`${origin}/`) && absoluteValue !== origin) {\n setCustomValidity(t('preview-location-input.error', {origin, context: 'missing-origin'}))\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 if (!origin && (absoluteValue.startsWith(`${basePath}/`) || absoluteValue === basePath)) {\n setCustomValidity(\n t('preview-location-input.error', {basePath, context: 'same-base-path'}),\n )\n return\n }\n\n const nextValue = absoluteValue === origin ? `${origin}/` : absoluteValue\n\n setCustomValidity(undefined)\n setSessionValue(undefined)\n\n onChange(nextValue.slice(origin.length))\n\n inputRef.current?.blur()\n }\n\n if (event.key === 'Escape') {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }\n },\n [basePath, onChange, origin, sessionValue, t],\n )\n\n const handleBlur = useCallback(() => {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }, [])\n\n useEffect(() => {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }, [origin, 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={() => {\n setCustomValidity(undefined)\n setSessionValue(origin + value)\n }}\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 ? `${origin}${value}` : sessionValue}\n />\n </>\n )\n}\n","/* eslint-disable @typescript-eslint/no-shadow,no-negated-condition,no-nested-ternary */\nimport {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 {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: string\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 ? setSecretSearchParams(initialUrl, secret, previewLocationRoute, perspective) : 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 {\n CheckmarkIcon,\n ChevronDownIcon,\n DesktopIcon,\n EditIcon,\n MobileDeviceIcon,\n PanelLeftIcon,\n PublishIcon,\n RefreshIcon,\n} from '@sanity/icons'\nimport {withoutSecretSearchParams} from '@sanity/preview-url-secret/without-secret-search-params'\nimport {Box, type ButtonTone, Card, Flex, Hotkeys, Menu, Stack, Switch, Text} from '@sanity/ui'\nimport {type ReactNode, type RefObject, useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, MenuButton, MenuItem, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {ACTION_IFRAME_RELOAD} from '../reducers/presentationReducer'\nimport {type HeaderOptions, type PresentationPerspective} from '../types'\nimport {OpenPreviewButton} from './OpenPreviewButton'\nimport {type PreviewProps} from './Preview'\nimport {PreviewLocationInput} from './PreviewLocationInput'\nimport {SharePreviewMenu} from './SharePreviewMenu'\n\nconst PERSPECTIVE_TITLE_KEY: Record<PresentationPerspective, string> = {\n previewDrafts: 'preview-frame.perspective.previewDrafts.title',\n published: 'preview-frame.perspective.published.title',\n}\n\nconst PERSPECTIVE_TONES: Record<PresentationPerspective, ButtonTone> = {\n previewDrafts: 'caution',\n published: 'positive',\n}\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 dispatch,\n iframe,\n iframeRef,\n initialUrl,\n loadersConnection,\n navigatorEnabled,\n onPathChange,\n onRefresh,\n openPopup,\n overlaysConnection,\n perspective,\n previewUrl,\n setPerspective,\n setViewport,\n targetOrigin,\n toggleNavigator,\n toggleOverlay,\n viewport,\n visualEditing: {overlaysEnabled},\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 dispatch({type: ACTION_IFRAME_RELOAD})\n // Funky way to reload an iframe without CORS issues\n // eslint-disable-next-line no-self-assign\n // ref.current.src = ref.current.src\n Object.assign(iframeRef.current, {src: `${targetOrigin}${previewUrl || '/'}`})\n })\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 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 checked={overlaysEnabled}\n onChange={toggleOverlay}\n disabled={iframe.status === 'loading' || 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 prefix={\n <Box padding={1}>\n <Tooltip\n animate\n content={\n <Text size={1}>\n {iframe.status === 'loaded'\n ? t('preview-frame.refresh-button.tooltip')\n : t('preview-frame.status', {context: iframe.status})}\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={iframe.status === 'reloading' || iframe.status === 'refreshing'}\n onClick={handleRefresh}\n tooltipProps={null}\n />\n </Tooltip>\n </Box>\n }\n onChange={onPathChange}\n origin={previewLocationOrigin}\n suffix={\n <Box padding={1}>\n <OpenPreviewButton\n openPopup={openPopup}\n previewLocationOrigin={previewLocationOrigin}\n previewLocationRoute={previewLocationRoute}\n />\n </Box>\n }\n value={previewLocationRoute}\n />\n </Box>\n\n <Flex align=\"center\" flex=\"none\" gap={1}>\n <MenuButton\n button={\n <Button\n iconRight={ChevronDownIcon}\n mode=\"bleed\"\n text={t(\n PERSPECTIVE_TITLE_KEY[\n loadersConnection === 'connected' ? perspective : 'previewDrafts'\n ],\n )}\n loading={loadersConnection === 'reconnecting' && iframe.status !== 'loaded'}\n disabled={loadersConnection !== 'connected'}\n />\n }\n id=\"perspective-menu\"\n menu={\n <Menu style={{maxWidth: 240}}>\n <MenuItem\n onClick={() => setPerspective('previewDrafts')}\n pressed={perspective === 'previewDrafts'}\n tone={PERSPECTIVE_TONES.previewDrafts}\n renderMenuItem={() => (\n <Flex align=\"flex-start\" gap={3}>\n <Box flex=\"none\">\n <Text size={1}>\n <EditIcon />\n </Text>\n </Box>\n <Stack flex={1} space={2}>\n <Text size={1} weight=\"medium\">\n {t(PERSPECTIVE_TITLE_KEY.previewDrafts)}\n </Text>\n <Text muted size={1}>\n {t('preview-frame.perspective.previewDrafts.text')}\n </Text>\n </Stack>\n <Box flex=\"none\">\n <Text\n muted\n size={1}\n style={{\n opacity: perspective === 'previewDrafts' ? 1 : 0,\n }}\n >\n <CheckmarkIcon />\n </Text>\n </Box>\n </Flex>\n )}\n />\n <MenuItem\n onClick={() => setPerspective('published')}\n pressed={perspective === 'published'}\n tone={PERSPECTIVE_TONES.published}\n renderMenuItem={() => (\n <Flex align=\"flex-start\" gap={3}>\n <Box flex=\"none\">\n <Text size={1}>\n <PublishIcon />\n </Text>\n </Box>\n <Stack flex={1} space={2}>\n <Text size={1} weight=\"medium\">\n {t(PERSPECTIVE_TITLE_KEY.published)}\n </Text>\n <Text muted size={1}>\n {t('preview-frame.perspective.published.text')}\n </Text>\n </Stack>\n <Box flex=\"none\">\n <Text\n muted\n size={1}\n style={{\n opacity: perspective === 'published' ? 1 : 0,\n }}\n >\n <CheckmarkIcon />\n </Text>\n </Box>\n </Flex>\n )}\n />\n </Menu>\n }\n popover={{\n constrainSize: true,\n placement: 'bottom',\n portal: true,\n }}\n />\n </Flex>\n\n <Flex align=\"center\" flex=\"none\" gap={1}>\n <Tooltip\n animate\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 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\nfunction PreviewHeader(\n props: Omit<PreviewHeaderProps, 'renderDefault'> & {options?: HeaderOptions},\n) {\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\n/** @internal */\nexport function usePresentationPreviewHeader(\n props: Omit<PreviewHeaderProps, 'renderDefault'> & {options?: HeaderOptions},\n): () => ReactNode {\n const Component = useCallback(() => {\n return <PreviewHeader {...props} />\n }, [props])\n\n return Component\n}\n","/* eslint-disable react/no-unused-prop-types,no-nested-ternary */\nimport {\n urlSearchParamPreviewPerspective,\n urlSearchParamVercelProtectionBypass,\n urlSearchParamVercelSetBypassCookie,\n type VercelSetBypassCookieValue,\n} from '@sanity/preview-url-secret/constants'\nimport {Card, Code, Flex, Label, Spinner, Stack, Text, usePrefersReducedMotion} from '@sanity/ui'\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 {useTranslation} from 'sanity'\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 {\n ACTION_IFRAME_LOADED,\n ACTION_IFRAME_RELOAD,\n type DispatchPresentationAction,\n type PresentationState,\n} from '../reducers/presentationReducer'\nimport {\n type ConnectionStatus,\n type HeaderOptions,\n type PresentationPerspective,\n type PresentationViewport,\n} from '../types'\nimport {usePresentationTool} from '../usePresentationTool'\nimport {IFrame} from './IFrame'\nimport {usePresentationPreviewHeader} from './PreviewHeader'\n\nconst MotionFlex = motion.create(Flex)\n\n/** @public */\nexport interface PreviewProps extends Pick<PresentationState, 'iframe' | 'visualEditing'> {\n canSharePreviewAccess: boolean\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n dispatch: DispatchPresentationAction\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 perspective: PresentationPerspective\n previewUrl?: string\n setPerspective: (perspective: 'previewDrafts' | 'published') => void\n setViewport: (mode: 'desktop' | 'mobile') => void\n targetOrigin: string\n toggleNavigator?: () => void\n toggleOverlay: () => void\n viewport: PresentationViewport\n vercelProtectionBypass: string | null\n}\n\nexport const Preview = memo(\n forwardRef<HTMLIFrameElement, PreviewProps>(function PreviewComponent(props, forwardedRef) {\n const {\n dispatch,\n iframe,\n header,\n initialUrl,\n loadersConnection,\n overlaysConnection,\n perspective,\n viewport,\n vercelProtectionBypass,\n } = props\n\n const [stablePerspective, setStablePerspective] = useState<typeof perspective | null>(null)\n const urlPerspective = stablePerspective === null ? perspective : stablePerspective\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 = usePresentationPreviewHeader({\n ...props,\n iframeRef: ref,\n options: header,\n })\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 loading = iframe.status === 'loading' || iframe.status === 'reloading'\n const [timedOut, setTimedOut] = useState(false)\n const refreshing = iframe.status === 'refreshing'\n const [somethingIsWrong, setSomethingIsWrong] = useState(false)\n const iframeIsBusy = loading || refreshing || overlaysConnection === 'connecting'\n\n const handleRetry = useCallback(() => {\n if (!ref.current) {\n return\n }\n\n ref.current.src = previewUrl.toString()\n\n dispatch({type: ACTION_IFRAME_RELOAD})\n }, [dispatch, 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 (loading || refreshing) {\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, loading, refreshing])\n\n useEffect(() => {\n if (loading || refreshing || !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 // eslint-disable-next-line no-console\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 }, [loading, overlaysConnection, refreshing, showOverlaysConnectionStatus])\n\n const onIFrameLoad = useCallback(() => {\n dispatch({type: ACTION_IFRAME_LOADED})\n }, [dispatch])\n\n /**\n * Ensure that clicking outside of menus and dialogs will close as focus shifts to the iframe\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 preventIframeInteraction = useMemo(() => {\n return (\n (loading || (overlaysConnection === 'connecting' && iframe.status !== 'refreshing')) &&\n !continueAnyway\n )\n }, [continueAnyway, iframe.status, loading, 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 loading ? '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 loading,\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(() => flushSync(() => update()))\n } else {\n update()\n }\n }\n }, [canUseViewTransition, prefersReducedMotion, currentViewport, viewport])\n\n return (\n <MotionConfig transition={prefersReducedMotion ? {duration: 0} : undefined}>\n <TooltipDelayGroupProvider>\n <PreviewHeader />\n\n {/* @TODO: Move this to <PreviewFrame /> */}\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 !loading &&\n !refreshing &&\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 ) : (loading ||\n (overlaysConnection === 'connecting' && iframe.status !== 'refreshing')) &&\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","import {useEffect, useRef} from 'react'\nimport {useEffectEvent} from 'use-effect-event'\n\n/**\n * Similar to `useEffect`, but only execute the callback on value change.\n * @param value - The value to watch for changes.\n * @param callback - The callback to execute when the value changes.\n * @param initialValue - An optional initial value to compare against.\n * @param comparator - An optional comparator function for determining changes, useful if the value is non-primitive. Should return true if the callback should be executed.\n * @internal\n */\nexport function useEffectOnChange<T>(\n value: T,\n _callback: (value: T, prevValue: T | undefined) => void | (() => void),\n initialValue?: T,\n comparator?: (a: T, b?: T) => boolean | undefined,\n): void {\n const previousValueRef = useRef<T | undefined>(initialValue)\n const callback = useEffectEvent(_callback)\n\n useEffect(() => {\n const prev = previousValueRef.current\n previousValueRef.current = value\n if (comparator ? comparator(value, prev) : value !== prev) {\n return callback(value, prev)\n }\n return undefined\n }, [callback, comparator, value])\n}\n","import {type FunctionComponent} from 'react'\nimport {useEditState} from 'sanity'\n\nimport {type PresentationNavigate} from './types'\nimport {useEffectOnChange} from './util/useEffectOnChange'\n\ninterface RevisionSwitcherProps {\n documentId: string\n documentRevision: string | undefined\n documentType: string\n navigate: PresentationNavigate\n perspective: 'previewDrafts' | 'published'\n}\n\n/**\n * Renderless component to handle displaying the correct revision when the\n * perspective is switched. When the perspective changes to 'published', the\n * `rev` parameter correpsonding to the published document is resolved from the\n * published edit state. When the perspective changes to 'previewDrafts', the\n * `rev` parameter is removed, as the latest draft should be displayed.\n * @internal\n */\nexport const RevisionSwitcher: FunctionComponent<RevisionSwitcherProps> = function (props) {\n const {documentId, documentType, navigate, perspective, documentRevision} = props\n\n const editState = useEditState(documentId, documentType)\n\n useEffectOnChange(perspective, (value) => {\n let rev: string | undefined = undefined\n if (value === 'published' && editState.published) {\n const {_updatedAt, _rev} = editState.published\n rev = `${_updatedAt}/${_rev}`\n }\n if (documentRevision !== rev) {\n navigate({}, {rev}, true)\n }\n })\n\n return null\n}\n","/** @internal */\nexport function defineWarnOnce() {\n let warned = false\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (...args: any[]): void => {\n if (!warned) {\n // eslint-disable-next-line no-console\n console.warn(...args)\n warned = true\n }\n }\n}\n","import {type ClientPerspective} 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\nexport function useDocumentsOnPage(\n perspective: PresentationPerspective,\n frameStateRef: MutableRefObject<FrameState>,\n): [\n DocumentOnPage[],\n (key: string, perspective: PresentationPerspective, state: DocumentOnPage[]) => void,\n] {\n if (perspective !== 'published' && perspective !== 'previewDrafts') {\n throw new Error(`Invalid perspective: ${perspective}`)\n }\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: ClientPerspective, sourceDocuments: DocumentOnPage[] = []) => {\n const documents = sourceDocuments.filter((sourceDocument) => {\n if ('_projectId' in sourceDocument && sourceDocument._projectId) {\n // eslint-disable-next-line no-warning-comments\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} 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 type PreviewUrlOption,\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'] = undefined\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 previewUrl?: PreviewUrlOption\n resolvers?: DocumentResolver[]\n}): MainDocumentState | undefined {\n const {navigate, navigationHistory, path, previewUrl, resolvers = []} = props\n const {state: routerState} = useRouter()\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 id: doc?._id,\n type: doc?._type,\n })\n }\n }\n })\n\n useEffect(() => {\n const base =\n // eslint-disable-next-line no-nested-ternary\n typeof previewUrl === 'string'\n ? previewUrl\n : typeof previewUrl === 'object'\n ? previewUrl?.origin || location.origin\n : location.origin\n const url = new URL(relativeUrl, base)\n\n if (resolvers.length) {\n let result:\n | {\n context: DocumentResolverContext\n resolver: DocumentResolver\n }\n | undefined\n\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\n if (query) {\n const controller = new AbortController()\n const options: ResponseQueryOptions = {\n perspective: 'previewDrafts',\n signal: controller.signal,\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, handleResponse, previewUrl, relativeUrl, resolvers])\n\n return mainDocumentState\n}\n","import { getPublishedId, studioPath } from \"@sanity/client/csm\";\nimport { pipe, string, minLength, optional, object, is, record, unknown, safeParse, parse } from \"valibot\";\nconst lengthyStr$1 = pipe(string(), minLength(1)), optionalLengthyStr = optional(lengthyStr$1), sanityNodeSchema = object({\n baseUrl: lengthyStr$1,\n dataset: optionalLengthyStr,\n id: lengthyStr$1,\n path: lengthyStr$1,\n projectId: optionalLengthyStr,\n tool: optionalLengthyStr,\n type: optionalLengthyStr,\n workspace: optionalLengthyStr\n});\nfunction isValidSanityNode(node) {\n return is(sanityNodeSchema, node);\n}\nfunction isArray(value) {\n return value !== null && Array.isArray(value);\n}\nfunction pathToUrlString(path) {\n let str = \"\";\n for (const segment of path) {\n if (typeof segment == \"string\") {\n str && (str += \".\"), str += segment;\n continue;\n }\n if (typeof segment == \"number\") {\n str && (str += \":\"), str += `${segment}`;\n continue;\n }\n if (isArray(segment)) {\n str && (str += \":\"), str += `${segment.join(\",\")}}`;\n continue;\n }\n if (segment._key) {\n str && (str += \":\"), str += `${segment._key}`;\n continue;\n }\n }\n return str;\n}\nfunction encodeSanityNodeData(node) {\n const { id: _id, path, baseUrl, tool, workspace, type } = node;\n return isValidSanityNode(node) ? [\n [\"id\", getPublishedId(_id)],\n [\"type\", type],\n [\"path\", pathToUrlString(studioPath.fromString(path))],\n [\"base\", encodeURIComponent(baseUrl)],\n [\"workspace\", workspace],\n [\"tool\", tool]\n ].filter(([, value]) => !!value).map((part) => part.join(\"=\")).join(\";\") : void 0;\n}\nfunction createDataAttribute(props) {\n function normalizePath(path) {\n return path ? typeof path == \"string\" ? studioPath.fromString(path) : path : [];\n }\n function toString(props2) {\n if (!props2.id) throw new Error(\"`id` is required to create a data attribute\");\n if (!props2.type) throw new Error(\"`type` is required to create a data attribute\");\n if (!props2.path || !props2.path.length)\n throw new Error(\"`path` is required to create a data attribute\");\n const attrs = {\n baseUrl: props2.baseUrl || \"/\",\n workspace: props2.workspace,\n tool: props2.tool,\n type: props2.type,\n id: props2.id,\n path: typeof props2.path == \"string\" ? props2.path : studioPath.toString(props2.path)\n };\n return encodeSanityNodeData(attrs);\n }\n const DataAttribute = (path) => toString({\n ...props,\n path: [...normalizePath(props.path), ...normalizePath(path)]\n });\n return DataAttribute.toString = function() {\n return toString(props);\n }, DataAttribute.combine = function(attrs) {\n return createDataAttribute({\n ...props,\n ...attrs\n });\n }, DataAttribute.scope = function(path) {\n return createDataAttribute({\n ...props,\n path: [...normalizePath(props.path), ...normalizePath(path)]\n });\n }, DataAttribute;\n}\nconst RE_SEGMENT_WITH_INDEX = /^([\\w-]+):(0|[1-9][0-9]*)$/, RE_SEGMENT_WITH_TUPLE = /^([\\w-]+):([0-9]+),([0-9]+)$/, RE_SEGMENT_WITH_KEY = /^([\\w-]+):([\\w-]+)$/;\nfunction urlStringToPath(str) {\n const path = [];\n for (const segment of str.split(\".\")) {\n const withIndex = RE_SEGMENT_WITH_INDEX.exec(segment);\n if (withIndex) {\n path.push(withIndex[1], Number(withIndex[2]));\n continue;\n }\n const withTuple = RE_SEGMENT_WITH_TUPLE.exec(segment);\n if (withTuple) {\n path.push(withTuple[1], [Number(withTuple[2]), Number(withTuple[3])]);\n continue;\n }\n const withKey = RE_SEGMENT_WITH_KEY.exec(segment);\n if (withKey) {\n path.push(withKey[1], { _key: withKey[2] });\n continue;\n }\n path.push(segment);\n }\n return path;\n}\nconst lengthyStr = pipe(string(), minLength(1)), sanityLegacyNodeSchema = object({\n origin: lengthyStr,\n href: lengthyStr,\n data: optional(record(string(), unknown()))\n});\nfunction decodeSanityString(str) {\n const data = str.split(\";\").reduce((acc, segment) => {\n const [key, value] = segment.split(\"=\");\n if (!key || segment.includes(\"=\") && !value) return acc;\n switch (key) {\n case \"id\":\n acc.id = value;\n break;\n case \"type\":\n acc.type = value;\n break;\n case \"path\":\n acc.path = studioPath.toString(urlStringToPath(value));\n break;\n case \"base\":\n acc.baseUrl = decodeURIComponent(value);\n break;\n case \"tool\":\n acc.tool = value;\n break;\n case \"workspace\":\n acc.workspace = value;\n break;\n case \"projectId\":\n acc.projectId = value;\n break;\n case \"dataset\":\n acc.dataset = value;\n break;\n }\n return acc;\n }, {});\n if (isValidSanityNode(data))\n return data;\n}\nfunction decodeSanityObject(data) {\n const sanityNode = safeParse(sanityNodeSchema, data);\n if (sanityNode.success)\n return sanityNode.output;\n const sanityLegacyNode = safeParse(sanityLegacyNodeSchema, data);\n if (sanityLegacyNode.success)\n try {\n const url = new URL(\n sanityLegacyNode.output.href,\n typeof document > \"u\" ? \"https://example.com\" : location.origin\n );\n return url.searchParams.size > 0 ? parse(sanityNodeSchema, Object.fromEntries(url.searchParams.entries())) : sanityLegacyNode.output;\n } catch (err) {\n return console.error(\"Failed to parse sanity node\", err), sanityLegacyNode.output;\n }\n}\nfunction decodeSanityNodeData(data) {\n if (typeof data == \"object\" && data !== null)\n return decodeSanityObject(data);\n try {\n const obj = JSON.parse(data);\n return decodeSanityObject(obj);\n } catch {\n return decodeSanityString(data);\n }\n}\nexport {\n createDataAttribute,\n decodeSanityNodeData,\n encodeSanityNodeData,\n pathToUrlString,\n urlStringToPath\n};\n//# sourceMappingURL=index.js.map\n","import {studioPath} from '@sanity/client/csm'\nimport {urlStringToPath} from '@sanity/visual-editing-csm'\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, useEffect, useMemo, useRef, useState} from 'react'\nimport {getPublishedId} from 'sanity'\nimport {type RouterContextValue, type RouterState, type SearchParam} from 'sanity/router'\n\nimport {parseRouterState} from './lib/parse'\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'\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\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 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:\n routerSearchParams.preview || `${initialPreviewUrl.pathname}${initialPreviewUrl.search}`,\n perspective: routerSearchParams.perspective,\n viewport: routerSearchParams.viewport,\n inspect: routerSearchParams.inspect,\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 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.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 useEffect(() => {\n routerStateRef.current = routerState\n }, [routerState])\n\n const [navigationHistory, setNavigationHistory] = useState<RouterState[]>([routerState])\n\n const navigate = useCallback<PresentationNavigate>(\n (nextState, nextSearchState = {}, forceReplace) => {\n // Force navigation to use published IDs only\n if (nextState.id) nextState.id = getPublishedId(nextState.id)\n\n // Extract type, id and path as 'routerState'\n const {_searchParams: routerSearchParams, ...routerState} = routerStateRef.current\n\n // Convert array of search params to an object\n const routerSearchState = (routerSearchParams || []).reduce((acc, [key, value]) => {\n acc[key as keyof CombinedSearchParams] = value as undefined | 'history' | 'review'\n return acc\n }, {} as CombinedSearchParams)\n\n // Merge routerState and incoming state\n const state: RouterState = pruneObject({\n ...routerState,\n ...nextState,\n })\n\n // Merge routerSearchState and incoming searchState\n const searchState = pruneObject({\n ...routerSearchState,\n ...nextSearchState,\n })\n\n // If the document has changed, clear the template and templateParams\n if (routerState.id !== state.id) {\n delete searchState.template\n delete searchState.templateParams\n }\n\n state._searchParams = Object.entries(searchState).reduce(\n (acc, [key, value]) => [...acc, [key, value] as SearchParam],\n [] as SearchParam[],\n )\n\n const replace = forceReplace ?? searchState.preview === frameStateRef.current.url\n\n setNavigationHistory((prev) => [...prev, state])\n routerNavigate(state, {replace})\n },\n [routerNavigate, frameStateRef],\n )\n\n return {\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 {createPreviewSecret} from '@sanity/preview-url-secret/create-secret'\nimport {definePreviewUrl} from '@sanity/preview-url-secret/define-preview-url'\nimport {startTransition, useEffect, useMemo, useRef, useState} from 'react'\nimport {type SanityClient, useActiveWorkspace, useClient, useCurrentUser} from 'sanity'\nimport {suspend} from 'suspend-react'\n\nimport {API_VERSION} from './constants'\nimport {type PreviewUrlOption} from './types'\n\nexport function usePreviewUrl(\n previewUrl: PreviewUrlOption,\n toolName: string,\n studioPreviewPerspective: 'published' | 'previewDrafts',\n previewSearchParam: string | null,\n canCreateUrlPreviewSecrets: boolean,\n): URL {\n const client = useClient({apiVersion: API_VERSION})\n const workspace = useActiveWorkspace()\n const basePath = workspace?.activeWorkspace?.basePath || '/'\n const workspaceName = workspace?.activeWorkspace?.name || 'default'\n const deps = useSuspendCacheKeys(toolName, basePath, workspaceName, previewSearchParam)\n const previewUrlSecret = usePreviewUrlSecret(\n (canCreateUrlPreviewSecrets && typeof previewUrl === 'object') ||\n typeof previewUrl === 'function',\n deps,\n )\n\n return suspend(async () => {\n if (typeof previewUrl === 'string') {\n const resolvedUrl = new URL(previewUrl, location.origin)\n let resultUrl = resolvedUrl\n try {\n if (previewSearchParam) {\n const restoredUrl = new URL(previewSearchParam, resolvedUrl)\n if (restoredUrl.origin === resolvedUrl.origin) {\n resultUrl = restoredUrl\n }\n }\n } catch {\n // ignore\n }\n // Prevent infinite recursion\n if (\n location.origin === resultUrl.origin &&\n (resultUrl.pathname.startsWith(`${basePath}/`) || resultUrl.pathname === basePath)\n ) {\n return resolvedUrl\n }\n return resultUrl\n }\n const resolvePreviewUrl =\n typeof previewUrl === 'object' ? definePreviewUrl<SanityClient>(previewUrl) : previewUrl\n const resolvedUrl = await resolvePreviewUrl({\n client,\n previewUrlSecret: previewUrlSecret!,\n studioPreviewPerspective,\n previewSearchParam,\n studioBasePath: basePath,\n })\n return new URL(resolvedUrl, location.origin)\n }, [...deps, previewUrlSecret]) satisfies URL\n}\n\n// https://github.com/pmndrs/suspend-react?tab=readme-ov-file#making-cache-keys-unique\nconst resolveUUID = Symbol('sanity/presentation/resolveUUID')\n\nfunction useSuspendCacheKeys(\n toolName: string,\n basePath: string,\n workspaceName: string,\n previewSearchParam: string | null,\n) {\n // Allow busting the cache when the Presentation Tool is reloaded, without causing it to suspend on every render that changes the `preview` parameter\n const [cachedPreviewSearchParam, setCachedPreviewSearchParam] = useState(\n () => previewSearchParam || '',\n )\n const timeoutRef = useRef(0)\n useEffect(() => {\n if (cachedPreviewSearchParam && previewSearchParam) {\n // Handle resets, like when the Presentation Tool is clicked in the navbar\n window.clearTimeout(timeoutRef.current)\n return () => {\n timeoutRef.current = window.setTimeout(() => {\n setCachedPreviewSearchParam('')\n }, 100)\n }\n }\n return undefined\n }, [cachedPreviewSearchParam, previewSearchParam])\n\n const currentUser = useCurrentUser()\n return useMemo(\n () => [\n // Cache based on a few specific conditions\n 'sanity/presentation',\n basePath,\n workspaceName,\n toolName,\n currentUser?.id,\n resolveUUID,\n cachedPreviewSearchParam,\n ],\n [basePath, currentUser?.id, toolName, workspaceName, cachedPreviewSearchParam],\n )\n}\n\nfunction usePreviewUrlSecret(enabled: boolean, deps: (string | symbol | undefined)[]) {\n const client = useClient({apiVersion: API_VERSION})\n const currentUser = useCurrentUser()\n const [secretLastExpiredAt, setSecretLastExpiredAt] = useState<string>('')\n\n const previewUrlSecret = enabled\n ? suspend(async () => {\n return await createPreviewSecret(\n client,\n '@sanity/presentation',\n typeof window === 'undefined' ? '' : location.href,\n currentUser?.id,\n )\n }, [...deps, secretLastExpiredAt])\n : null\n\n useEffect(() => {\n if (!previewUrlSecret) return undefined\n const timeout = setTimeout(() => {\n startTransition(() => setSecretLastExpiredAt(previewUrlSecret.expiresAt.toString()))\n }, previewUrlSecret.expiresAt.getTime() - Date.now())\n return () => clearTimeout(timeout)\n }, [previewUrlSecret])\n\n return previewUrlSecret?.secret || null\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 max-statements,@typescript-eslint/no-shadow */\nimport {studioPath} from '@sanity/client/csm'\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 {lazy, Suspense, useCallback, useEffect, useMemo, useReducer, useRef, useState} from 'react'\nimport {\n type CommentIntentGetter,\n COMMENTS_INSPECTOR_NAME,\n type Path,\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, LIVE_DRAFT_EVENTS_ENABLED} from './constants'\nimport PostMessageFeatures from './features/PostMessageFeatures'\nimport {debounce} from './lib/debounce'\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 ACTION_IFRAME_LOADED,\n ACTION_IFRAME_REFRESH,\n ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE,\n presentationReducer,\n presentationReducerInit,\n} from './reducers/presentationReducer'\nimport {RevisionSwitcher} from './RevisionSwitcher'\nimport {\n type FrameState,\n type PresentationNavigate,\n type PresentationPerspective,\n type PresentationPluginOptions,\n type PresentationStateParams,\n type PresentationViewport,\n type StructureDocumentPaneParams,\n type VisualEditingConnection,\n} from './types'\nimport {useDocumentsOnPage} from './useDocumentsOnPage'\nimport {useMainDocument} from './useMainDocument'\nimport {useParams} from './useParams'\nimport {usePopups} from './usePopups'\nimport {usePreviewUrl} from './usePreviewUrl'\nimport {useStatus} from './useStatus'\n\nconst LoaderQueries = lazy(() => import('./loader/LoaderQueries'))\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 canCreateUrlPreviewSecrets: boolean\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n vercelProtectionBypass: string | null\n}): React.JSX.Element {\n const {\n canCreateUrlPreviewSecrets,\n canToggleSharePreviewAccess,\n canUseSharedPreviewAccess,\n tool,\n vercelProtectionBypass,\n } = props\n const components = tool.options?.components\n const _previewUrl = tool.options?.previewUrl\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\n const initialPreviewUrl = usePreviewUrl(\n _previewUrl || '/',\n name,\n routerSearchParams.perspective === 'published' ? 'published' : 'previewDrafts',\n routerSearchParams.preview || null,\n canCreateUrlPreviewSecrets,\n )\n const canSharePreviewAccess = useMemo<boolean>(() => {\n if (\n _previewUrl &&\n typeof _previewUrl === 'object' &&\n 'draftMode' in _previewUrl &&\n _previewUrl.draftMode\n ) {\n // eslint-disable-next-line no-console\n console.warn('previewUrl.draftMode is deprecated, use previewUrl.previewMode instead')\n return _previewUrl.draftMode.shareAccess !== false\n }\n if (\n _previewUrl &&\n typeof _previewUrl === 'object' &&\n 'previewMode' in _previewUrl &&\n _previewUrl.previewMode\n ) {\n return _previewUrl.previewMode.shareAccess !== false\n }\n return false\n }, [_previewUrl])\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 targetOrigin = useMemo(() => {\n return initialPreviewUrl.origin\n }, [initialPreviewUrl.origin])\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 {\n navigate: _navigate,\n navigationHistory,\n params,\n searchParams,\n structureParams,\n } = useParams({\n initialPreviewUrl,\n routerNavigate,\n routerState,\n routerSearchParams,\n frameStateRef,\n })\n\n // Most navigation events should be debounced, so use this unless explicitly needed\n const navigate = useMemo(() => debounce<PresentationNavigate>(_navigate, 50), [_navigate])\n\n const [state, dispatch] = useReducer(presentationReducer, {}, presentationReducerInit)\n\n const perspective = useMemo(\n () => (params.perspective ? 'published' : 'previewDrafts'),\n [params.perspective],\n )\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 // Prevent flash of content by using immediate navigation\n navigate: _navigate,\n navigationHistory,\n path: params.preview,\n previewUrl: tool.options?.previewUrl,\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 = state.iframe.status === '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<typeof navigate>(\n (nextState, nextSearchState, forceReplace) =>\n navigate(nextState, nextSearchState, forceReplace),\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 type: data.type,\n id: data.id,\n path: data.path,\n })\n })\n\n comlink.on('visual-editing/navigate', (data) => {\n const {title, url} = data\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 {},\n {preview: `${urlWithoutSearch}${searchParams.size > 0 ? '?' : ''}${searchParams}`},\n )\n } catch {\n handleNavigate({}, {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 dispatch({\n type: ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE,\n enabled: data.enabled,\n })\n })\n\n comlink.on('visual-editing/documents', (data) => {\n setDocumentsOnPage(\n 'visual-editing',\n // eslint-disable-next-line @typescript-eslint/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 dispatch({type: ACTION_IFRAME_REFRESH})\n }\n })\n\n comlink.on('visual-editing/refreshed', () => {\n dispatch({type: ACTION_IFRAME_LOADED})\n })\n\n comlink.onStatus(setOverlaysConnection)\n\n const stop = comlink.start()\n setVisualEditingComlink(comlink)\n\n return () => {\n stop()\n setVisualEditingComlink(null)\n }\n }, [controller, handleNavigate, 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 // eslint-disable-next-line @typescript-eslint/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 = useCallback(\n (nextPath: Path) => {\n // Don’t need to explicitly set the id here because it was either already set via postMessage or is the same if navigating in the document pane\n navigate({path: studioPath.toString(nextPath)}, {}, true)\n },\n [navigate],\n )\n\n const handlePreviewPath = useCallback(\n (nextPath: string) => {\n const url = new URL(nextPath, initialPreviewUrl.origin)\n const preview = url.pathname + url.search\n if (url.origin === initialPreviewUrl.origin && preview !== params.preview) {\n navigate({}, {preview})\n }\n },\n [initialPreviewUrl, params, navigate],\n )\n\n const handleStructureParams = useCallback(\n (structureParams: StructureDocumentPaneParams) => {\n navigate({}, structureParams)\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 frameStateRef.current.url = params.preview\n if (overlaysConnection !== 'connected' && iframeRef.current) {\n iframeRef.current.src = `${targetOrigin}${params.preview}`\n } else {\n visualEditingComlink?.post('presentation/navigate', {\n url: params.preview,\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 // Handle edge case where the `&rev=` parameter gets \"stuck\"\n const idRef = useRef<string | undefined>(params.id)\n useEffect(() => {\n if (params.rev && idRef.current && params.id !== idRef.current) {\n navigate({}, {rev: undefined})\n }\n idRef.current = params.id\n })\n\n const refreshRef = useRef<number>(undefined)\n const handleRefresh = useCallback(\n (fallback: () => void) => {\n dispatch({type: ACTION_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, 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({}, {viewport}, true)\n },\n [navigate],\n )\n\n const setPerspective = useCallback(\n (next: PresentationPerspective) => {\n // Omit the perspective URL search param if the next perspective state is\n // the default: 'previewDrafts'\n const perspective = next === 'previewDrafts' ? undefined : next\n navigate({}, {perspective})\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 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 // Make sure the iframe is unmounted if the targetOrigin has changed\n key={targetOrigin}\n canSharePreviewAccess={canSharePreviewAccess}\n canToggleSharePreviewAccess={canToggleSharePreviewAccess}\n canUseSharedPreviewAccess={canUseSharedPreviewAccess}\n dispatch={dispatch}\n header={unstable_header}\n iframe={state.iframe}\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 setPerspective={setPerspective}\n setViewport={setViewport}\n targetOrigin={targetOrigin}\n toggleNavigator={toggleNavigator}\n toggleOverlay={toggleOverlay}\n viewport={viewport}\n visualEditing={state.visualEditing}\n vercelProtectionBypass={vercelProtectionBypass}\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 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 (LIVE_DRAFT_EVENTS_ENABLED ? (\n <LiveQueries\n controller={controller}\n perspective={perspective}\n liveDocument={displayedDocument}\n onDocumentsOnPage={setDocumentsOnPage}\n onLoadersConnection={setLoadersConnection}\n />\n ) : (\n <LoaderQueries\n controller={controller}\n perspective={perspective}\n liveDocument={displayedDocument}\n onDocumentsOnPage={setDocumentsOnPage}\n onLoadersConnection={setLoadersConnection}\n documentsOnPage={documentsOnPage}\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 && <PostMessageDocuments comlink={visualEditingComlink} />}\n {visualEditingComlink && <PostMessageFeatures comlink={visualEditingComlink} />}\n {visualEditingComlink && (\n <PostMessagePerspective comlink={visualEditingComlink} perspective={perspective} />\n )}\n {visualEditingComlink && <PostMessageTelemetry comlink={visualEditingComlink} />}\n {params.id && params.type && (\n <RevisionSwitcher\n documentId={params.id}\n documentRevision={params.rev}\n documentType={params.type}\n navigate={navigate}\n perspective={perspective}\n />\n )}\n </Suspense>\n </>\n )\n}\n\nfunction isAltKey(event: KeyboardEvent): boolean {\n return event.key === 'Alt'\n}\n\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}\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 {apiVersion} from '@sanity/preview-url-secret/constants'\nimport {subcribeToVercelProtectionBypass} from '@sanity/preview-url-secret/toggle-vercel-protection-bypass'\nimport {useEffect, useReducer, useState} from 'react'\nimport {useClient} from 'sanity'\n\ntype VercelProtectionBypassReadyState = 'loading' | 'ready'\n\nexport function useVercelBypassSecret(): [\n vercelProtectionBypassSecret: string | null,\n vercelProtectionBypassReadyState: VercelProtectionBypassReadyState,\n] {\n const client = useClient({apiVersion})\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 {\n schemaIdSingleton,\n schemaType,\n schemaTypeSingleton,\n} from '@sanity/preview-url-secret/constants'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useEffect, useState} from 'react'\nimport {type PermissionCheckResult, type Tool, useGrantsStore, useTranslation} from 'sanity'\n\nimport {presentationLocaleNamespace} from './i18n'\nimport {PresentationSpinner} from './PresentationSpinner'\nimport PresentationTool from './PresentationTool'\nimport {type PresentationPluginOptions} from './types'\nimport {useVercelBypassSecret} from './useVercelBypassSecret'\n\nexport default function PresentationToolGrantsCheck(props: {\n tool: Tool<PresentationPluginOptions>\n}): React.JSX.Element {\n const {t} = useTranslation(presentationLocaleNamespace)\n const {previewUrl} = props.tool.options ?? {}\n const {push: pushToast} = useToast()\n const willGeneratePreviewUrlSecret =\n typeof previewUrl === 'object' || typeof previewUrl === 'function'\n const grantsStore = useGrantsStore()\n const [previewAccessSharingCreatePermission, setCreateAccessSharingPermission] =\n useState<PermissionCheckResult | null>(null)\n const [previewAccessSharingUpdatePermission, setUpdateAccessSharingPermission] =\n useState<PermissionCheckResult | null>(null)\n const [previewAccessSharingReadPermission, setReadAccessSharingPermission] =\n useState<PermissionCheckResult | null>(null)\n const [previewUrlSecretPermission, setPreviewUrlSecretPermission] =\n useState<PermissionCheckResult | null>(null)\n\n useEffect(() => {\n if (!willGeneratePreviewUrlSecret) return undefined\n\n const previewCreateAccessSharingPermissionSubscription = grantsStore\n .checkDocumentPermission('create', {_id: schemaIdSingleton, _type: schemaTypeSingleton})\n .subscribe(setCreateAccessSharingPermission)\n const previewUpdateAccessSharingPermissionSubscription = grantsStore\n .checkDocumentPermission('update', {_id: schemaIdSingleton, _type: schemaTypeSingleton})\n .subscribe(setUpdateAccessSharingPermission)\n const previewReadAccessSharingPermissionSubscription = grantsStore\n .checkDocumentPermission('read', {_id: schemaIdSingleton, _type: schemaTypeSingleton})\n .subscribe(setReadAccessSharingPermission)\n const previewUrlSecretPermissionSubscription = grantsStore\n .checkDocumentPermission('create', {_id: `drafts.${uuid()}`, _type: schemaType})\n .subscribe(setPreviewUrlSecretPermission)\n\n return () => {\n previewCreateAccessSharingPermissionSubscription.unsubscribe()\n previewUpdateAccessSharingPermissionSubscription.unsubscribe()\n previewReadAccessSharingPermissionSubscription.unsubscribe()\n previewUrlSecretPermissionSubscription.unsubscribe()\n }\n }, [grantsStore, willGeneratePreviewUrlSecret])\n\n const canCreateUrlPreviewSecrets = previewUrlSecretPermission?.granted\n\n useEffect(() => {\n if (!willGeneratePreviewUrlSecret || canCreateUrlPreviewSecrets !== false) return undefined\n const raf = requestAnimationFrame(() =>\n pushToast({\n closable: true,\n status: 'error',\n duration: 30_000,\n title: t('preview-url-secret.missing-grants'),\n }),\n )\n return () => cancelAnimationFrame(raf)\n }, [canCreateUrlPreviewSecrets, pushToast, t, willGeneratePreviewUrlSecret])\n\n const [vercelProtectionBypass, vercelProtectionBypassReadyState] = useVercelBypassSecret()\n\n if (\n vercelProtectionBypassReadyState === 'loading' ||\n (willGeneratePreviewUrlSecret &&\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 {...props}\n vercelProtectionBypass={vercelProtectionBypass}\n canCreateUrlPreviewSecrets={canCreateUrlPreviewSecrets === true}\n canToggleSharePreviewAccess={\n previewAccessSharingCreatePermission?.granted === true &&\n previewAccessSharingUpdatePermission?.granted === true\n }\n canUseSharedPreviewAccess={previewAccessSharingReadPermission?.granted === true}\n />\n )\n}\n"],"names":["PostMessageFeatures","props","$","_c","comlink","t0","t1","on","_temp","useEffect","memo","features","optimistic","debounce","fn","timeout","timer","args","clearTimeout","setTimeout","apply","SharedStateProvider","children","Symbol","for","sharedState","useRef","t2","state","current","t3","key","value","post","setValue","t4","key_0","removeValue","t5","t6","context","t7","jsx","PresentationSharedStateContext","Root","styled","div","Panel","defaultSize","id","minWidth","maxWidth","order","undefined","useContext","PresentationPanelsContext","Error","getPanelStyle","registerElement","unregisterElement","style","type","useLayoutEffect","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","event","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","Button","retryButton","continueAnywayButton","Text","jsxs","Stack","Inline","Box","Flex","Container","Card","encodeQueryString","params","parts","Object","entries","resolveQueryStringFromParams","nextParams","allowed","safeNextParams","includes","obj","BackLink","forwardRef","ref","searchParams","_searchParams","StateLink","ReferenceChildLink","documentId","documentType","parentRefPath","template","PresentationPaneRouterProvider","onStructureParams","structureParams","refs","routerState","resolvePathFromState","useRouter","fromEntries","routerSearchParams","useUnique","path","qs","createPathWithParams","childLinkProps","childId","find","r","_id","getPublishedId","_type","backLinkProps","childLinkProps_0","nextParams_0","inspect","groupIndex","siblingIndex","payload","hasGroupSiblings","groupLength","routerPanesState","ChildLink","ParameterizedLink","closeCurrentAndAfter","handleEditReference","replaceCurrent","_temp4","closeCurrent","_temp5","duplicateCurrent","_temp6","setView","_temp7","setParams","setPayload","_temp8","navigateIntent","_temp9","PaneRouterContext","intentName","intentParams","options_0","console","warn","options","viewId","pane_0","pane","RootLayout","PaneLayout","WrappedCode","Code","DocumentListPane","mainDocumentState","devMode","usePresentationTool","document","ids","schemaTypeName","title","errorParams","setErrorParams","handleRetry","Label","error","StructureDocumentListPane","ErrorBoundary","StructureToolProvider","r_0","DocumentPane","onFocusPath","templateParams","decodeJsonParams","templateParameters","paneDocumentNode","height","PresentationSpinner","Suspense","StructureDocumentPane","DocumentPanel","usePreviewState","schemaType","documentPreviewStore","useDocumentPreviewStore","preview","setPreview","subscription","getPreviewStateObservable","subscribe","unsubscribe","ContentEditor","schema","useSchema","props_0","MainDocumentLink","previewState","bb0","draft","published","getPreviewValueWithFallback","SanityDefaultPreview","PreviewCard","WarningOutlineIcon","Translate","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","CommentsIntentProvider","DisplayedDocumentBroadcasterProvider","PresentationContent","documentsOnPage","PresentationNavigateProvider","navigate","_navigate","PresentationNavigateContext","useLocalState","defaultValue","usePresentationNavigator","unstable_navigator","navigatorProvided","component","_navigatorEnabled","setNavigatorEnabled","navigatorEnabled","toggleNavigator","Component","enabled","NavigatorComponent","navigatorDisabled","Navigator","PresentationParamsProvider","PresentationParamsContext","PresentationProvider","name","PresentationContext","IFrameElement","motion","create","iframe","IFrameOverlay","IFrame","animate","initial","onLoad","preventClick","src","variants","useId","replace","viewTransitionName","OpenPreviewButton","openPopup","previewLocationOrigin","previewLocationRoute","currentTarget","href","handleOpenPopup","LaunchIcon","Tooltip","PreviewLocationInput","fontSize","onChange","origin","padding","prefix","suffix","basePath","useActiveWorkspace","activeWorkspace","inputRef","sessionValue","setSessionValue","customValidity","setCustomValidity","handleChange","absoluteValue","startsWith","nextValue","slice","handleKeyDown","handleBlur","icon","ResetIcon","zIndex","TextInput","QRCodeSVG","lazy","QrCodeLogoSize","QrCodeLogoPadding","QrSize","StyledSanityMonogram","SanityMonogram","MotionSpinner","Spinner","MotionText","MotionMonogram","SharePreviewMenu","canToggleSharePreviewAccess","canUseSharedPreviewAccess","initialUrl","perspective","push","pushToast","useToast","client","useClient","apiVersion","API_VERSION","currentUser","useCurrentUser","loading","setLoading","enabling","setEnabling","disabling","setDisabling","secret","setSecret","busy","url","useMemo","setSecretSearchParams","setError","handleUnableToToggle","useCallback","closable","status","handleDisableSharing","disablePreviewAccessSharing","location","handleEnableSharing","previewUrlSecret","enablePreviewAccessSharing","handleCopyUrl","navigator","clipboard","writeText","toString","controller","AbortController","usedTags","fetchShareSecret","lastLiveEventId","signal","result","syncTags","fetch","fetchSharedAccessQuery","filterResponse","tag","aborted","live","events","abort","tags","finally","MenuButton","ShareIcon","Menu","Fragment","Grid","justifyContent","alignItems","gridTemplateColumns","gridTemplateRows","Switch","position","aspectRatio","display","AnimatePresence","opacity","textWrap","textAlign","MenuDivider","MenuItem","CopyIcon","constrainSize","placement","portal","displayName","PERSPECTIVE_TITLE_KEY","previewDrafts","PERSPECTIVE_TONES","PreviewHeaderDefault","canSharePreviewAccess","dispatch","iframeRef","loadersConnection","onPathChange","onRefresh","overlaysConnection","previewUrl","setPerspective","setViewport","targetOrigin","toggleOverlay","viewport","visualEditing","overlaysEnabled","toggleViewportSize","ACTION_IFRAME_RELOAD","assign","handleRefresh","previewURL","URL","pathname","search","withoutSecretSearchParams","PanelLeftIcon","content","fallbackPlacements","whiteSpace","Hotkeys","marginTop","marginBottom","lineHeight","borderRadius","margin","t25","t26","t27","t28","t29","t30","RefreshIcon","t31","t32","t33","t34","t35","t36","t37","t38","ChevronDownIcon","t39","t40","t41","t42","EditIcon","CheckmarkIcon","t43","t44","t45","t46","PublishIcon","t47","t48","t49","t50","t51","t52","t53","t54","t55","t56","MobileDeviceIcon","DesktopIcon","t57","t58","t59","t60","PreviewHeader","renderDefault","HeaderComponent","header","minHeight","usePresentationPreviewHeader","MotionFlex","Preview","forwardedRef","vercelProtectionBypass","stablePerspective","setStablePerspective","urlPerspective","urlSearchParamPreviewPerspective","urlSearchParamVercelProtectionBypass","urlSearchParamVercelSetBypassCookie","prefersReducedMotion","usePrefersReducedMotion","timedOut","setTimedOut","refreshing","somethingIsWrong","setSomethingIsWrong","iframeIsBusy","handleContinueAnyway","setContinueAnyway","continueAnyway","showOverlaysConnectionStatus","setShowOverlaysConnectionState","MAX_TIME_TO_OVERLAYS_CONNECTION","onIFrameLoad","ACTION_IFRAME_LOADED","instance","activeElement","dispatchEvent","MouseEvent","bubbles","cancelable","preventIframeInteraction","canUseViewTransition","useSyncExternalStore","CSS","supports","iframeAnimations","currentViewport","setCurrentViewport","iframeStyle","setIframeStyle","iframeVariants","update","startViewTransition","flushSync","MotionConfig","duration","TooltipDelayGroupProvider","spinnerVariants","inset","backdropFilter","WebkitBackdropFilter","WebkitTransition","sizes","errorVariants","background","desktop","mobile","exit","boxShadow","scale","idle","reloading","active","useEffectOnChange","_callback","initialValue","comparator","previousValueRef","callback","useEffectEvent","RevisionSwitcher","documentRevision","editState","useEditState","rev","_updatedAt","_rev","defineWarnOnce","warned","warnOnceAboutCrossDatasetReference","useDocumentsOnPage","frameStateRef","setPublished","setPreviewDrafts","urlRef","setDocumentsOnPage","sourceDocuments","documents","sourceDocument","_projectId","setCache","cache","isEqual","uniqueDocuments","forEach","doc","fnOrObj","arg","Function","getQueryFromResult","resolver","resolve","getParamsFromResult","getRouteContext","route","routes","absolute","match","decode","decodeURIComponent","useMainDocument","navigationHistory","resolvers","relativeUrl","setMainDocumentState","mainDocumentIdRef","handleResponse","at","base","query","then","catch","lengthyStr$1","pipe","string","minLength","optionalLengthyStr","optional","object","baseUrl","dataset","projectId","tool","workspace","parseId","rawId","segments","split","shift","parsePath","rawPath","studioPath","urlStringToPath","parseRouterState","pruneObject","useParams","initialPreviewUrl","routerNavigate","since","view","pathKey","instruction","comment","changesInspectorTab","routerStateRef","setNavigationHistory","nextState","nextSearchState","forceReplace","routerSearchState","searchState","usePopups","popups","setPopups","Set","open","source","add","unsubs","size","closed","addTarget","unsub","interval","setInterval","POPUP_CHECK_INTERVAL","clearInterval","usePreviewUrl","toolName","studioPreviewPerspective","previewSearchParam","canCreateUrlPreviewSecrets","workspaceName","deps","useSuspendCacheKeys","usePreviewUrlSecret","suspend","resolvedUrl","resultUrl","restoredUrl","definePreviewUrl","studioBasePath","resolveUUID","cachedPreviewSearchParam","setCachedPreviewSearchParam","timeoutRef","secretLastExpiredAt","setSecretLastExpiredAt","createPreviewSecret","startTransition","expiresAt","getTime","Date","now","useStatus","statusMap","setStatusMap","handshaking","memoStatus","connection","hasConnected_0","hasConnected","status_1","setStatusFromEvent","status_0","LoaderQueries","PostMessageDocuments","PostMessageRefreshMutations","PostMessagePerspective","PostMessagePreviewSnapshots","PostMessageSchema","PostMessageTelemetry","PresentationTool","components","_previewUrl","DEFAULT_TOOL_NAME","unstable_header","draftMode","shareAccess","previewMode","option","hostname","setController","visualEditingComlink","setVisualEditingComlink","useReducer","presentationReducer","presentationReducerInit","useProjectId","useDataset","mainDocuments","setOverlaysConnection","setLoadersConnection","previewKitConnection","setPreviewKitConnection","isLoading","target","contentWindow","createController","destroy","handleNavigate","createChannel","heartbeat","connectTo","createConnectionMachine","provide","actors","createCompatibilityActors","urlWithoutSearch","URLSearchParams","ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE","refreshRef","ACTION_IFRAME_REFRESH","onStatus","stop","start","handleFocusPath","nextPath","handlePreviewPath","handleStructureParams","displayedDocument","handleKeyUp","isAltKey","handleKeydown","isHotkey","boundaryElement","setBoundaryElement","PresentationNavigator","idRef","fallback","livePreviewEnabled","useWorkspace","COMMENTS_INSPECTOR_NAME","mode","EDIT_INTENT_MODE","BoundaryElementProvider","LIVE_DRAFT_EVENTS_ENABLED","IS_MAC","test","platform","MODIFIERS","alt","ctrl","mod","keys","every","toUpperCase","useVercelBypassSecret","vercelProtectionBypassReadyState","ready","vercelProtectionBypassSecret","setVercelProtectionBypassSecret","subcribeToVercelProtectionBypass","PresentationToolGrantsCheck","willGeneratePreviewUrlSecret","grantsStore","useGrantsStore","previewAccessSharingCreatePermission","setCreateAccessSharingPermission","previewAccessSharingUpdatePermission","setUpdateAccessSharingPermission","previewAccessSharingReadPermission","setReadAccessSharingPermission","previewUrlSecretPermission","setPreviewUrlSecretPermission","previewCreateAccessSharingPermissionSubscription","checkDocumentPermission","schemaIdSingleton","schemaTypeSingleton","previewUpdateAccessSharingPermissionSubscription","previewReadAccessSharingPermissionSubscription","previewUrlSecretPermissionSubscription","granted","raf","requestAnimationFrame","cancelAnimationFrame"],"mappings":"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","x_google_ignoreList":[33]}
|
1
|
+
{"version":3,"file":"PresentationToolGrantsCheck.js","sources":["../../src/presentation/features/PostMessageFeatures.tsx","../../src/presentation/lib/debounce.ts","../../src/presentation/overlays/SharedStateProvider.tsx","../../src/presentation/panels/Panel.tsx","../../src/presentation/panels/usePanelsStorage.ts","../../src/presentation/panels/util.ts","../../src/presentation/panels/Panels.tsx","../../src/presentation/components/ErrorCard.tsx","../../src/presentation/editor/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/preview/IFrame.tsx","../../src/presentation/preview/OpenPreviewButton.tsx","../../src/presentation/preview/PreviewLocationInput.tsx","../../src/presentation/preview/SharePreviewMenu.tsx","../../src/presentation/preview/PreviewHeader.tsx","../../src/presentation/preview/Preview.tsx","../../src/presentation/util/useEffectOnChange.ts","../../src/presentation/RevisionSwitcher.tsx","../../src/presentation/util/warnOnce.ts","../../src/presentation/useDocumentsOnPage.ts","../../src/presentation/useMainDocument.ts","../../../../node_modules/.pnpm/@sanity+visual-editing-csm@2.0.2_@sanity+client@6.27.2_debug@4.4.0__@sanity+types@packages+@sanity+types/node_modules/@sanity/visual-editing-csm/dist/index.js","../../src/presentation/lib/parse.ts","../../src/presentation/useParams.ts","../../src/presentation/usePopups.ts","../../src/presentation/usePreviewUrl.ts","../../src/presentation/useStatus.ts","../../src/presentation/PresentationTool.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","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 {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","import {useMemo} from 'react'\n\nimport {debounce} from '../lib/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 // eslint-disable-next-line no-constant-condition\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 // eslint-disable-next-line no-eq-null\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","/* eslint-disable no-nested-ternary */\nimport {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","/* eslint-disable no-console */\n\nimport {forwardRef, type PropsWithChildren, useCallback, useMemo} from 'react'\nimport {getPublishedId, useUnique} from 'sanity'\nimport {StateLink, useRouter} from 'sanity/router'\nimport {\n type BackLinkProps,\n PaneRouterContext,\n type PaneRouterContextValue,\n type ReferenceChildLinkProps,\n} from 'sanity/structure'\n\nimport {\n type PresentationParamsContextValue,\n type PresentationSearchParams,\n type StructureDocumentPaneParams,\n} from '../types'\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\nconst ReferenceChildLink = forwardRef(function ReferenceChildLink(\n props: ReferenceChildLinkProps & {searchParams: PresentationSearchParams},\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n const {\n documentId,\n documentType,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parentRefPath,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n template,\n searchParams,\n ...restProps\n } = props\n\n return (\n <StateLink\n {...restProps}\n ref={ref}\n state={{\n id: documentId,\n type: documentType,\n _searchParams: Object.entries(searchParams),\n }}\n title={undefined}\n />\n )\n})\n\nexport function PresentationPaneRouterProvider(\n props: PropsWithChildren<{\n onStructureParams: (params: StructureDocumentPaneParams) => void\n refs?: {_id: string; _type: string}[]\n searchParams: PresentationSearchParams\n structureParams: StructureDocumentPaneParams\n }>,\n): React.JSX.Element {\n const {children, 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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n params: structureParams as any,\n hasGroupSiblings: false,\n groupLength: 1,\n routerPanesState: [],\n ChildLink: (childLinkProps) => {\n const {childId, ...restProps} = childLinkProps\n const ref = refs?.find((r) => r._id === childId || getPublishedId(r._id) === childId)\n if (ref) {\n return (\n <StateLink\n {...restProps}\n state={{\n id: childId,\n type: ref._type,\n _searchParams: Object.entries(searchParams),\n }}\n />\n )\n }\n\n return <div {...restProps} />\n },\n BackLink: (backLinkProps) => <BackLink {...backLinkProps} searchParams={searchParams} />,\n ReferenceChildLink: (childLinkProps) => (\n <ReferenceChildLink {...childLinkProps} searchParams={searchParams} />\n ),\n ParameterizedLink: () => {\n throw new Error('ParameterizedLink not implemented')\n },\n closeCurrentAndAfter: () => {\n console.warn('closeCurrentAndAfter')\n },\n handleEditReference: (options) => {\n console.warn('handleEditReference', options)\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 // eslint-disable-next-line no-warning-comments\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 }, [createPathWithParams, onStructureParams, refs, searchParams, structureParams])\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 {\n type MainDocumentState,\n type PresentationSearchParams,\n type StructureDocumentPaneParams,\n} from '../types'\nimport {usePresentationTool} from '../usePresentationTool'\nimport {PresentationPaneRouterProvider} from './PresentationPaneRouterProvider'\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 onStructureParams: (params: StructureDocumentPaneParams) => void\n searchParams: PresentationSearchParams\n refs: {_id: string; _type: string}[]\n}): React.JSX.Element {\n const {mainDocumentState, 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 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 {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 {PresentationSpinner} from '../PresentationSpinner'\nimport {type PresentationSearchParams, type StructureDocumentPaneParams} from '../types'\nimport {usePresentationTool} from '../usePresentationTool'\nimport {PresentationPaneRouterProvider} from './PresentationPaneRouterProvider'\n\nconst WrappedCode = styled(Code)`\n white-space: pre-wrap;\n`\n\nexport function DocumentPane(props: {\n documentId: string\n documentType: string\n onFocusPath: (path: Path) => void\n onStructureParams: (params: StructureDocumentPaneParams) => void\n structureParams: StructureDocumentPaneParams\n searchParams: PresentationSearchParams\n}): React.JSX.Element {\n const {documentId, documentType, onFocusPath, onStructureParams, searchParams, 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 [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 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={onFocusPath}\n />\n </Suspense>\n </PresentationPaneRouterProvider>\n </PaneLayout>\n </ErrorBoundary>\n )\n}\n","import {type Path} from 'sanity'\nimport {StructureToolProvider} from 'sanity/structure'\n\nimport {type PresentationSearchParams, type StructureDocumentPaneParams} from '../types'\nimport {DocumentPane} from './DocumentPane'\n\nexport function DocumentPanel(props: {\n documentId: string\n documentType: string\n onFocusPath: (path: Path) => void\n onStructureParams: (params: StructureDocumentPaneParams) => void\n searchParams: PresentationSearchParams\n structureParams: StructureDocumentPaneParams\n}): React.JSX.Element {\n const {documentId, documentType, onFocusPath, onStructureParams, searchParams, structureParams} =\n props\n return (\n <StructureToolProvider>\n <DocumentPane\n documentId={documentId}\n documentType={documentType}\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} from 'sanity'\n\ninterface PreviewState {\n isLoading?: boolean\n draft?: PreviewValue | Partial<SanityDocument> | null\n published?: 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\n useEffect(() => {\n if (!schemaType) {\n return undefined\n }\n const subscription = getPreviewStateObservable(\n documentPreviewStore,\n schemaType,\n documentId,\n '',\n ).subscribe((state) => {\n setPreview(state)\n })\n\n return () => {\n subscription?.unsubscribe()\n }\n }, [documentPreviewStore, schemaType, documentId])\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 type Path,\n PreviewCard,\n SanityDefaultPreview,\n type SanityDocument,\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 PresentationSearchParams,\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 onFocusPath: (path: Path) => 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 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 value: mainDocumentState!.document! as SanityDocument,\n published: previewState.published,\n draft: previewState.draft,\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 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 // eslint-disable-next-line @typescript-eslint/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 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 {\n type CommentIntentGetter,\n CommentsIntentProvider,\n type Path,\n type SanityDocument,\n} 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 PresentationParamsContextValue,\n type PresentationSearchParams,\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 onFocusPath: (path: Path) => 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 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 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 {type PresentationNavigate, type PresentationNavigateContextValue} 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 = undefined) => {\n _navigate(document || {}, preview ? {preview} : {})\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 {Box} from '@sanity/ui'\nimport {motion, type VariantLabels, type Variants} from 'framer-motion'\nimport {forwardRef, type ReactEventHandler, useId} from 'react'\nimport {styled} from 'styled-components'\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\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>(function IFrame(props, ref) {\n const {animate, initial, onLoad, preventClick, src, variants, style} = props\n const id = useId()\n\n return (\n <>\n <IFrameElement\n style={{\n ...style,\n // useId() guarantees that the ID will be unique, even if we add support for multiple iframe instances,\n // while `view-transition-class: presentation-tool-iframe` provides userland a way to customize the transition with CSS if they wish\n viewTransitionName: `presentation-tool-iframe-${id.replace(/[^a-zA-Z0-9-_]/g, '_')}`,\n }}\n animate={animate}\n initial={initial}\n onLoad={onLoad}\n ref={ref}\n src={src}\n variants={variants}\n />\n {preventClick && <IFrameOverlay />}\n </>\n )\n})\n","import {LaunchIcon} from '@sanity/icons'\nimport {Text} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type PreviewProps} from './Preview'\n\n/** @internal */\nexport function OpenPreviewButton(\n props: Pick<PreviewProps, 'openPopup'> & {\n previewLocationOrigin: string\n previewLocationRoute: string\n },\n): React.ReactNode {\n const {openPopup, previewLocationOrigin, previewLocationRoute} = props\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={`${previewLocationOrigin}${previewLocationRoute}`}\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 {ResetIcon} from '@sanity/icons'\nimport {TextInput, type TextInputClearButtonProps} from '@sanity/ui'\nimport {\n type ChangeEvent,\n type FunctionComponent,\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'\n\nexport const PreviewLocationInput: FunctionComponent<{\n fontSize?: number\n onChange: (value: string) => void\n origin: string\n padding?: number\n prefix?: ReactNode\n suffix?: ReactNode\n value: string\n}> = function (props) {\n const {fontSize = 1, onChange, origin, padding = 3, prefix, suffix, value} = props\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 const absoluteValue =\n sessionValue.startsWith('/') || sessionValue === ''\n ? `${origin}${sessionValue}`\n : sessionValue\n\n if (!absoluteValue.startsWith(`${origin}/`) && absoluteValue !== origin) {\n setCustomValidity(t('preview-location-input.error', {origin, context: 'missing-origin'}))\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 if (!origin && (absoluteValue.startsWith(`${basePath}/`) || absoluteValue === basePath)) {\n setCustomValidity(\n t('preview-location-input.error', {basePath, context: 'same-base-path'}),\n )\n return\n }\n\n const nextValue = absoluteValue === origin ? `${origin}/` : absoluteValue\n\n setCustomValidity(undefined)\n setSessionValue(undefined)\n\n onChange(nextValue.slice(origin.length))\n\n inputRef.current?.blur()\n }\n\n if (event.key === 'Escape') {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }\n },\n [basePath, onChange, origin, sessionValue, t],\n )\n\n const handleBlur = useCallback(() => {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }, [])\n\n useEffect(() => {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }, [origin, 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={() => {\n setCustomValidity(undefined)\n setSessionValue(origin + value)\n }}\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 ? `${origin}${value}` : sessionValue}\n />\n </>\n )\n}\n","/* eslint-disable @typescript-eslint/no-shadow,no-negated-condition,no-nested-ternary */\nimport {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 {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: string\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 ? setSecretSearchParams(initialUrl, secret, previewLocationRoute, perspective) : 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 {\n CheckmarkIcon,\n ChevronDownIcon,\n DesktopIcon,\n EditIcon,\n MobileDeviceIcon,\n PanelLeftIcon,\n PublishIcon,\n RefreshIcon,\n} from '@sanity/icons'\nimport {withoutSecretSearchParams} from '@sanity/preview-url-secret/without-secret-search-params'\nimport {Box, type ButtonTone, Card, Flex, Hotkeys, Menu, Stack, Switch, Text} from '@sanity/ui'\nimport {type ReactNode, type RefObject, useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, MenuButton, MenuItem, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {ACTION_IFRAME_RELOAD} from '../reducers/presentationReducer'\nimport {type HeaderOptions, type PresentationPerspective} from '../types'\nimport {OpenPreviewButton} from './OpenPreviewButton'\nimport {type PreviewProps} from './Preview'\nimport {PreviewLocationInput} from './PreviewLocationInput'\nimport {SharePreviewMenu} from './SharePreviewMenu'\n\nconst PERSPECTIVE_TITLE_KEY: Record<PresentationPerspective, string> = {\n previewDrafts: 'preview-frame.perspective.previewDrafts.title',\n published: 'preview-frame.perspective.published.title',\n}\n\nconst PERSPECTIVE_TONES: Record<PresentationPerspective, ButtonTone> = {\n previewDrafts: 'caution',\n published: 'positive',\n}\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 dispatch,\n iframe,\n iframeRef,\n initialUrl,\n loadersConnection,\n navigatorEnabled,\n onPathChange,\n onRefresh,\n openPopup,\n overlaysConnection,\n perspective,\n previewUrl,\n setPerspective,\n setViewport,\n targetOrigin,\n toggleNavigator,\n toggleOverlay,\n viewport,\n visualEditing: {overlaysEnabled},\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 dispatch({type: ACTION_IFRAME_RELOAD})\n // Funky way to reload an iframe without CORS issues\n // eslint-disable-next-line no-self-assign\n // ref.current.src = ref.current.src\n Object.assign(iframeRef.current, {src: `${targetOrigin}${previewUrl || '/'}`})\n })\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 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 checked={overlaysEnabled}\n onChange={toggleOverlay}\n disabled={iframe.status === 'loading' || 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 prefix={\n <Box padding={1}>\n <Tooltip\n animate\n content={\n <Text size={1}>\n {iframe.status === 'loaded'\n ? t('preview-frame.refresh-button.tooltip')\n : t('preview-frame.status', {context: iframe.status})}\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={iframe.status === 'reloading' || iframe.status === 'refreshing'}\n onClick={handleRefresh}\n tooltipProps={null}\n />\n </Tooltip>\n </Box>\n }\n onChange={onPathChange}\n origin={previewLocationOrigin}\n suffix={\n <Box padding={1}>\n <OpenPreviewButton\n openPopup={openPopup}\n previewLocationOrigin={previewLocationOrigin}\n previewLocationRoute={previewLocationRoute}\n />\n </Box>\n }\n value={previewLocationRoute}\n />\n </Box>\n\n <Flex align=\"center\" flex=\"none\" gap={1}>\n <MenuButton\n button={\n <Button\n iconRight={ChevronDownIcon}\n mode=\"bleed\"\n text={t(\n PERSPECTIVE_TITLE_KEY[\n loadersConnection === 'connected' ? perspective : 'previewDrafts'\n ],\n )}\n loading={loadersConnection === 'reconnecting' && iframe.status !== 'loaded'}\n disabled={loadersConnection !== 'connected'}\n />\n }\n id=\"perspective-menu\"\n menu={\n <Menu style={{maxWidth: 240}}>\n <MenuItem\n onClick={() => setPerspective('previewDrafts')}\n pressed={perspective === 'previewDrafts'}\n tone={PERSPECTIVE_TONES.previewDrafts}\n renderMenuItem={() => (\n <Flex align=\"flex-start\" gap={3}>\n <Box flex=\"none\">\n <Text size={1}>\n <EditIcon />\n </Text>\n </Box>\n <Stack flex={1} space={2}>\n <Text size={1} weight=\"medium\">\n {t(PERSPECTIVE_TITLE_KEY.previewDrafts)}\n </Text>\n <Text muted size={1}>\n {t('preview-frame.perspective.previewDrafts.text')}\n </Text>\n </Stack>\n <Box flex=\"none\">\n <Text\n muted\n size={1}\n style={{\n opacity: perspective === 'previewDrafts' ? 1 : 0,\n }}\n >\n <CheckmarkIcon />\n </Text>\n </Box>\n </Flex>\n )}\n />\n <MenuItem\n onClick={() => setPerspective('published')}\n pressed={perspective === 'published'}\n tone={PERSPECTIVE_TONES.published}\n renderMenuItem={() => (\n <Flex align=\"flex-start\" gap={3}>\n <Box flex=\"none\">\n <Text size={1}>\n <PublishIcon />\n </Text>\n </Box>\n <Stack flex={1} space={2}>\n <Text size={1} weight=\"medium\">\n {t(PERSPECTIVE_TITLE_KEY.published)}\n </Text>\n <Text muted size={1}>\n {t('preview-frame.perspective.published.text')}\n </Text>\n </Stack>\n <Box flex=\"none\">\n <Text\n muted\n size={1}\n style={{\n opacity: perspective === 'published' ? 1 : 0,\n }}\n >\n <CheckmarkIcon />\n </Text>\n </Box>\n </Flex>\n )}\n />\n </Menu>\n }\n popover={{\n constrainSize: true,\n placement: 'bottom',\n portal: true,\n }}\n />\n </Flex>\n\n <Flex align=\"center\" flex=\"none\" gap={1}>\n <Tooltip\n animate\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 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\nfunction PreviewHeader(\n props: Omit<PreviewHeaderProps, 'renderDefault'> & {options?: HeaderOptions},\n) {\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\n/** @internal */\nexport function usePresentationPreviewHeader(\n props: Omit<PreviewHeaderProps, 'renderDefault'> & {options?: HeaderOptions},\n): () => ReactNode {\n const Component = useCallback(() => {\n return <PreviewHeader {...props} />\n }, [props])\n\n return Component\n}\n","/* eslint-disable react/no-unused-prop-types,no-nested-ternary */\nimport {\n urlSearchParamPreviewPerspective,\n urlSearchParamVercelProtectionBypass,\n urlSearchParamVercelSetBypassCookie,\n type VercelSetBypassCookieValue,\n} from '@sanity/preview-url-secret/constants'\nimport {Card, Code, Flex, Label, Spinner, Stack, Text, usePrefersReducedMotion} from '@sanity/ui'\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 {useTranslation} from 'sanity'\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 {\n ACTION_IFRAME_LOADED,\n ACTION_IFRAME_RELOAD,\n type DispatchPresentationAction,\n type PresentationState,\n} from '../reducers/presentationReducer'\nimport {\n type ConnectionStatus,\n type HeaderOptions,\n type PresentationPerspective,\n type PresentationViewport,\n} from '../types'\nimport {usePresentationTool} from '../usePresentationTool'\nimport {IFrame} from './IFrame'\nimport {usePresentationPreviewHeader} from './PreviewHeader'\n\nconst MotionFlex = motion.create(Flex)\n\n/** @public */\nexport interface PreviewProps extends Pick<PresentationState, 'iframe' | 'visualEditing'> {\n canSharePreviewAccess: boolean\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n dispatch: DispatchPresentationAction\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 perspective: PresentationPerspective\n previewUrl?: string\n setPerspective: (perspective: 'previewDrafts' | 'published') => void\n setViewport: (mode: 'desktop' | 'mobile') => void\n targetOrigin: string\n toggleNavigator?: () => void\n toggleOverlay: () => void\n viewport: PresentationViewport\n vercelProtectionBypass: string | null\n}\n\nexport const Preview = memo(\n forwardRef<HTMLIFrameElement, PreviewProps>(function PreviewComponent(props, forwardedRef) {\n const {\n dispatch,\n iframe,\n header,\n initialUrl,\n loadersConnection,\n overlaysConnection,\n perspective,\n viewport,\n vercelProtectionBypass,\n } = props\n\n const [stablePerspective, setStablePerspective] = useState<typeof perspective | null>(null)\n const urlPerspective = stablePerspective === null ? perspective : stablePerspective\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 = usePresentationPreviewHeader({\n ...props,\n iframeRef: ref,\n options: header,\n })\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 loading = iframe.status === 'loading' || iframe.status === 'reloading'\n const [timedOut, setTimedOut] = useState(false)\n const refreshing = iframe.status === 'refreshing'\n const [somethingIsWrong, setSomethingIsWrong] = useState(false)\n const iframeIsBusy = loading || refreshing || overlaysConnection === 'connecting'\n\n const handleRetry = useCallback(() => {\n if (!ref.current) {\n return\n }\n\n ref.current.src = previewUrl.toString()\n\n dispatch({type: ACTION_IFRAME_RELOAD})\n }, [dispatch, 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 (loading || refreshing) {\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, loading, refreshing])\n\n useEffect(() => {\n if (loading || refreshing || !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 // eslint-disable-next-line no-console\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 }, [loading, overlaysConnection, refreshing, showOverlaysConnectionStatus])\n\n const onIFrameLoad = useCallback(() => {\n dispatch({type: ACTION_IFRAME_LOADED})\n }, [dispatch])\n\n /**\n * Ensure that clicking outside of menus and dialogs will close as focus shifts to the iframe\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 preventIframeInteraction = useMemo(() => {\n return (\n (loading || (overlaysConnection === 'connecting' && iframe.status !== 'refreshing')) &&\n !continueAnyway\n )\n }, [continueAnyway, iframe.status, loading, 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 loading ? '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 loading,\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(() => flushSync(() => update()))\n } else {\n update()\n }\n }\n }, [canUseViewTransition, prefersReducedMotion, currentViewport, viewport])\n\n return (\n <MotionConfig transition={prefersReducedMotion ? {duration: 0} : undefined}>\n <TooltipDelayGroupProvider>\n <PreviewHeader />\n\n {/* @TODO: Move this to <PreviewFrame /> */}\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 !loading &&\n !refreshing &&\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 ) : (loading ||\n (overlaysConnection === 'connecting' && iframe.status !== 'refreshing')) &&\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","import {useEffect, useRef} from 'react'\nimport {useEffectEvent} from 'use-effect-event'\n\n/**\n * Similar to `useEffect`, but only execute the callback on value change.\n * @param value - The value to watch for changes.\n * @param callback - The callback to execute when the value changes.\n * @param initialValue - An optional initial value to compare against.\n * @param comparator - An optional comparator function for determining changes, useful if the value is non-primitive. Should return true if the callback should be executed.\n * @internal\n */\nexport function useEffectOnChange<T>(\n value: T,\n _callback: (value: T, prevValue: T | undefined) => void | (() => void),\n initialValue?: T,\n comparator?: (a: T, b?: T) => boolean | undefined,\n): void {\n const previousValueRef = useRef<T | undefined>(initialValue)\n const callback = useEffectEvent(_callback)\n\n useEffect(() => {\n const prev = previousValueRef.current\n previousValueRef.current = value\n if (comparator ? comparator(value, prev) : value !== prev) {\n return callback(value, prev)\n }\n return undefined\n }, [callback, comparator, value])\n}\n","import {type FunctionComponent} from 'react'\nimport {useEditState} from 'sanity'\n\nimport {type PresentationNavigate} from './types'\nimport {useEffectOnChange} from './util/useEffectOnChange'\n\ninterface RevisionSwitcherProps {\n documentId: string\n documentRevision: string | undefined\n documentType: string\n navigate: PresentationNavigate\n perspective: 'previewDrafts' | 'published'\n}\n\n/**\n * Renderless component to handle displaying the correct revision when the\n * perspective is switched. When the perspective changes to 'published', the\n * `rev` parameter correpsonding to the published document is resolved from the\n * published edit state. When the perspective changes to 'previewDrafts', the\n * `rev` parameter is removed, as the latest draft should be displayed.\n * @internal\n */\nexport const RevisionSwitcher: FunctionComponent<RevisionSwitcherProps> = function (props) {\n const {documentId, documentType, navigate, perspective, documentRevision} = props\n\n const editState = useEditState(documentId, documentType)\n\n useEffectOnChange(perspective, (value) => {\n let rev: string | undefined = undefined\n if (value === 'published' && editState.published) {\n const {_updatedAt, _rev} = editState.published\n rev = `${_updatedAt}/${_rev}`\n }\n if (documentRevision !== rev) {\n navigate({}, {rev}, true)\n }\n })\n\n return null\n}\n","/** @internal */\nexport function defineWarnOnce() {\n let warned = false\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (...args: any[]): void => {\n if (!warned) {\n // eslint-disable-next-line no-console\n console.warn(...args)\n warned = true\n }\n }\n}\n","import {type ClientPerspective} 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\nexport function useDocumentsOnPage(\n perspective: PresentationPerspective,\n frameStateRef: MutableRefObject<FrameState>,\n): [\n DocumentOnPage[],\n (key: string, perspective: PresentationPerspective, state: DocumentOnPage[]) => void,\n] {\n if (perspective !== 'published' && perspective !== 'previewDrafts') {\n throw new Error(`Invalid perspective: ${perspective}`)\n }\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: ClientPerspective, sourceDocuments: DocumentOnPage[] = []) => {\n const documents = sourceDocuments.filter((sourceDocument) => {\n if ('_projectId' in sourceDocument && sourceDocument._projectId) {\n // eslint-disable-next-line no-warning-comments\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} 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 type PreviewUrlOption,\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'] = undefined\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 previewUrl?: PreviewUrlOption\n resolvers?: DocumentResolver[]\n}): MainDocumentState | undefined {\n const {navigate, navigationHistory, path, previewUrl, resolvers = []} = props\n const {state: routerState} = useRouter()\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 id: doc?._id,\n type: doc?._type,\n })\n }\n }\n })\n\n useEffect(() => {\n const base =\n // eslint-disable-next-line no-nested-ternary\n typeof previewUrl === 'string'\n ? previewUrl\n : typeof previewUrl === 'object'\n ? previewUrl?.origin || location.origin\n : location.origin\n const url = new URL(relativeUrl, base)\n\n if (resolvers.length) {\n let result:\n | {\n context: DocumentResolverContext\n resolver: DocumentResolver\n }\n | undefined\n\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\n if (query) {\n const controller = new AbortController()\n const options: ResponseQueryOptions = {\n perspective: 'previewDrafts',\n signal: controller.signal,\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, handleResponse, previewUrl, relativeUrl, resolvers])\n\n return mainDocumentState\n}\n","import { getPublishedId, studioPath } from \"@sanity/client/csm\";\nimport { pipe, string, minLength, optional, object, is, record, unknown, safeParse, parse } from \"valibot\";\nconst lengthyStr$1 = pipe(string(), minLength(1)), optionalLengthyStr = optional(lengthyStr$1), sanityNodeSchema = object({\n baseUrl: lengthyStr$1,\n dataset: optionalLengthyStr,\n id: lengthyStr$1,\n path: lengthyStr$1,\n projectId: optionalLengthyStr,\n tool: optionalLengthyStr,\n type: optionalLengthyStr,\n workspace: optionalLengthyStr\n});\nfunction isValidSanityNode(node) {\n return is(sanityNodeSchema, node);\n}\nfunction isArray(value) {\n return value !== null && Array.isArray(value);\n}\nfunction pathToUrlString(path) {\n let str = \"\";\n for (const segment of path) {\n if (typeof segment == \"string\") {\n str && (str += \".\"), str += segment;\n continue;\n }\n if (typeof segment == \"number\") {\n str && (str += \":\"), str += `${segment}`;\n continue;\n }\n if (isArray(segment)) {\n str && (str += \":\"), str += `${segment.join(\",\")}}`;\n continue;\n }\n if (segment._key) {\n str && (str += \":\"), str += `${segment._key}`;\n continue;\n }\n }\n return str;\n}\nfunction encodeSanityNodeData(node) {\n const { id: _id, path, baseUrl, tool, workspace, type } = node;\n return isValidSanityNode(node) ? [\n [\"id\", getPublishedId(_id)],\n [\"type\", type],\n [\"path\", pathToUrlString(studioPath.fromString(path))],\n [\"base\", encodeURIComponent(baseUrl)],\n [\"workspace\", workspace],\n [\"tool\", tool]\n ].filter(([, value]) => !!value).map((part) => part.join(\"=\")).join(\";\") : void 0;\n}\nfunction createDataAttribute(props) {\n function normalizePath(path) {\n return path ? typeof path == \"string\" ? studioPath.fromString(path) : path : [];\n }\n function toString(props2) {\n if (!props2.id) throw new Error(\"`id` is required to create a data attribute\");\n if (!props2.type) throw new Error(\"`type` is required to create a data attribute\");\n if (!props2.path || !props2.path.length)\n throw new Error(\"`path` is required to create a data attribute\");\n const attrs = {\n baseUrl: props2.baseUrl || \"/\",\n workspace: props2.workspace,\n tool: props2.tool,\n type: props2.type,\n id: props2.id,\n path: typeof props2.path == \"string\" ? props2.path : studioPath.toString(props2.path)\n };\n return encodeSanityNodeData(attrs);\n }\n const DataAttribute = (path) => toString({\n ...props,\n path: [...normalizePath(props.path), ...normalizePath(path)]\n });\n return DataAttribute.toString = function() {\n return toString(props);\n }, DataAttribute.combine = function(attrs) {\n return createDataAttribute({\n ...props,\n ...attrs\n });\n }, DataAttribute.scope = function(path) {\n return createDataAttribute({\n ...props,\n path: [...normalizePath(props.path), ...normalizePath(path)]\n });\n }, DataAttribute;\n}\nconst RE_SEGMENT_WITH_INDEX = /^([\\w-]+):(0|[1-9][0-9]*)$/, RE_SEGMENT_WITH_TUPLE = /^([\\w-]+):([0-9]+),([0-9]+)$/, RE_SEGMENT_WITH_KEY = /^([\\w-]+):([\\w-]+)$/;\nfunction urlStringToPath(str) {\n const path = [];\n for (const segment of str.split(\".\")) {\n const withIndex = RE_SEGMENT_WITH_INDEX.exec(segment);\n if (withIndex) {\n path.push(withIndex[1], Number(withIndex[2]));\n continue;\n }\n const withTuple = RE_SEGMENT_WITH_TUPLE.exec(segment);\n if (withTuple) {\n path.push(withTuple[1], [Number(withTuple[2]), Number(withTuple[3])]);\n continue;\n }\n const withKey = RE_SEGMENT_WITH_KEY.exec(segment);\n if (withKey) {\n path.push(withKey[1], { _key: withKey[2] });\n continue;\n }\n path.push(segment);\n }\n return path;\n}\nconst lengthyStr = pipe(string(), minLength(1)), sanityLegacyNodeSchema = object({\n origin: lengthyStr,\n href: lengthyStr,\n data: optional(record(string(), unknown()))\n});\nfunction decodeSanityString(str) {\n const data = str.split(\";\").reduce((acc, segment) => {\n const [key, value] = segment.split(\"=\");\n if (!key || segment.includes(\"=\") && !value) return acc;\n switch (key) {\n case \"id\":\n acc.id = value;\n break;\n case \"type\":\n acc.type = value;\n break;\n case \"path\":\n acc.path = studioPath.toString(urlStringToPath(value));\n break;\n case \"base\":\n acc.baseUrl = decodeURIComponent(value);\n break;\n case \"tool\":\n acc.tool = value;\n break;\n case \"workspace\":\n acc.workspace = value;\n break;\n case \"projectId\":\n acc.projectId = value;\n break;\n case \"dataset\":\n acc.dataset = value;\n break;\n }\n return acc;\n }, {});\n if (isValidSanityNode(data))\n return data;\n}\nfunction decodeSanityObject(data) {\n const sanityNode = safeParse(sanityNodeSchema, data);\n if (sanityNode.success)\n return sanityNode.output;\n const sanityLegacyNode = safeParse(sanityLegacyNodeSchema, data);\n if (sanityLegacyNode.success)\n try {\n const url = new URL(\n sanityLegacyNode.output.href,\n typeof document > \"u\" ? \"https://example.com\" : location.origin\n );\n return url.searchParams.size > 0 ? parse(sanityNodeSchema, Object.fromEntries(url.searchParams.entries())) : sanityLegacyNode.output;\n } catch (err) {\n return console.error(\"Failed to parse sanity node\", err), sanityLegacyNode.output;\n }\n}\nfunction decodeSanityNodeData(data) {\n if (typeof data == \"object\" && data !== null)\n return decodeSanityObject(data);\n try {\n const obj = JSON.parse(data);\n return decodeSanityObject(obj);\n } catch {\n return decodeSanityString(data);\n }\n}\nexport {\n createDataAttribute,\n decodeSanityNodeData,\n encodeSanityNodeData,\n pathToUrlString,\n urlStringToPath\n};\n//# sourceMappingURL=index.js.map\n","import {studioPath} from '@sanity/client/csm'\nimport {urlStringToPath} from '@sanity/visual-editing-csm'\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, useEffect, useMemo, useRef, useState} from 'react'\nimport {getPublishedId} from 'sanity'\nimport {type RouterContextValue, type RouterState, type SearchParam} from 'sanity/router'\n\nimport {parseRouterState} from './lib/parse'\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'\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\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 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:\n routerSearchParams.preview || `${initialPreviewUrl.pathname}${initialPreviewUrl.search}`,\n perspective: routerSearchParams.perspective,\n viewport: routerSearchParams.viewport,\n inspect: routerSearchParams.inspect,\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 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.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 useEffect(() => {\n routerStateRef.current = routerState\n }, [routerState])\n\n const [navigationHistory, setNavigationHistory] = useState<RouterState[]>([routerState])\n\n const navigate = useCallback<PresentationNavigate>(\n (nextState, nextSearchState = {}, forceReplace) => {\n // Force navigation to use published IDs only\n if (nextState.id) nextState.id = getPublishedId(nextState.id)\n\n // Extract type, id and path as 'routerState'\n const {_searchParams: routerSearchParams, ...routerState} = routerStateRef.current\n\n // Convert array of search params to an object\n const routerSearchState = (routerSearchParams || []).reduce((acc, [key, value]) => {\n acc[key as keyof CombinedSearchParams] = value as undefined | 'history' | 'review'\n return acc\n }, {} as CombinedSearchParams)\n\n // Merge routerState and incoming state\n const state: RouterState = pruneObject({\n ...routerState,\n ...nextState,\n })\n\n // Merge routerSearchState and incoming searchState\n const searchState = pruneObject({\n ...routerSearchState,\n ...nextSearchState,\n })\n\n // If the document has changed, clear the template and templateParams\n if (routerState.id !== state.id) {\n delete searchState.template\n delete searchState.templateParams\n }\n\n state._searchParams = Object.entries(searchState).reduce(\n (acc, [key, value]) => [...acc, [key, value] as SearchParam],\n [] as SearchParam[],\n )\n\n const replace = forceReplace ?? searchState.preview === frameStateRef.current.url\n\n setNavigationHistory((prev) => [...prev, state])\n routerNavigate(state, {replace})\n },\n [routerNavigate, frameStateRef],\n )\n\n return {\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 {createPreviewSecret} from '@sanity/preview-url-secret/create-secret'\nimport {definePreviewUrl} from '@sanity/preview-url-secret/define-preview-url'\nimport {startTransition, useEffect, useMemo, useRef, useState} from 'react'\nimport {type SanityClient, useActiveWorkspace, useClient, useCurrentUser} from 'sanity'\nimport {suspend} from 'suspend-react'\n\nimport {API_VERSION} from './constants'\nimport {type PreviewUrlOption} from './types'\n\nexport function usePreviewUrl(\n previewUrl: PreviewUrlOption,\n toolName: string,\n studioPreviewPerspective: 'published' | 'previewDrafts',\n previewSearchParam: string | null,\n canCreateUrlPreviewSecrets: boolean,\n): URL {\n const client = useClient({apiVersion: API_VERSION})\n const workspace = useActiveWorkspace()\n const basePath = workspace?.activeWorkspace?.basePath || '/'\n const workspaceName = workspace?.activeWorkspace?.name || 'default'\n const deps = useSuspendCacheKeys(toolName, basePath, workspaceName, previewSearchParam)\n const previewUrlSecret = usePreviewUrlSecret(\n (canCreateUrlPreviewSecrets && typeof previewUrl === 'object') ||\n typeof previewUrl === 'function',\n deps,\n )\n\n return suspend(async () => {\n if (typeof previewUrl === 'string') {\n const resolvedUrl = new URL(previewUrl, location.origin)\n let resultUrl = resolvedUrl\n try {\n if (previewSearchParam) {\n const restoredUrl = new URL(previewSearchParam, resolvedUrl)\n if (restoredUrl.origin === resolvedUrl.origin) {\n resultUrl = restoredUrl\n }\n }\n } catch {\n // ignore\n }\n // Prevent infinite recursion\n if (\n location.origin === resultUrl.origin &&\n (resultUrl.pathname.startsWith(`${basePath}/`) || resultUrl.pathname === basePath)\n ) {\n return resolvedUrl\n }\n return resultUrl\n }\n const resolvePreviewUrl =\n typeof previewUrl === 'object' ? definePreviewUrl<SanityClient>(previewUrl) : previewUrl\n const resolvedUrl = await resolvePreviewUrl({\n client,\n previewUrlSecret: previewUrlSecret!,\n studioPreviewPerspective,\n previewSearchParam,\n studioBasePath: basePath,\n })\n return new URL(resolvedUrl, location.origin)\n }, [...deps, previewUrlSecret]) satisfies URL\n}\n\n// https://github.com/pmndrs/suspend-react?tab=readme-ov-file#making-cache-keys-unique\nconst resolveUUID = Symbol('sanity/presentation/resolveUUID')\n\nfunction useSuspendCacheKeys(\n toolName: string,\n basePath: string,\n workspaceName: string,\n previewSearchParam: string | null,\n) {\n // Allow busting the cache when the Presentation Tool is reloaded, without causing it to suspend on every render that changes the `preview` parameter\n const [cachedPreviewSearchParam, setCachedPreviewSearchParam] = useState(\n () => previewSearchParam || '',\n )\n const timeoutRef = useRef(0)\n useEffect(() => {\n if (cachedPreviewSearchParam && previewSearchParam) {\n // Handle resets, like when the Presentation Tool is clicked in the navbar\n window.clearTimeout(timeoutRef.current)\n return () => {\n timeoutRef.current = window.setTimeout(() => {\n setCachedPreviewSearchParam('')\n }, 100)\n }\n }\n return undefined\n }, [cachedPreviewSearchParam, previewSearchParam])\n\n const currentUser = useCurrentUser()\n return useMemo(\n () => [\n // Cache based on a few specific conditions\n 'sanity/presentation',\n basePath,\n workspaceName,\n toolName,\n currentUser?.id,\n resolveUUID,\n cachedPreviewSearchParam,\n ],\n [basePath, currentUser?.id, toolName, workspaceName, cachedPreviewSearchParam],\n )\n}\n\nfunction usePreviewUrlSecret(enabled: boolean, deps: (string | symbol | undefined)[]) {\n const client = useClient({apiVersion: API_VERSION})\n const currentUser = useCurrentUser()\n const [secretLastExpiredAt, setSecretLastExpiredAt] = useState<string>('')\n\n const previewUrlSecret = enabled\n ? suspend(async () => {\n return await createPreviewSecret(\n client,\n '@sanity/presentation',\n typeof window === 'undefined' ? '' : location.href,\n currentUser?.id,\n )\n }, [...deps, secretLastExpiredAt])\n : null\n\n useEffect(() => {\n if (!previewUrlSecret) return undefined\n const timeout = setTimeout(() => {\n startTransition(() => setSecretLastExpiredAt(previewUrlSecret.expiresAt.toString()))\n }, previewUrlSecret.expiresAt.getTime() - Date.now())\n return () => clearTimeout(timeout)\n }, [previewUrlSecret])\n\n return previewUrlSecret?.secret || null\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 max-statements,@typescript-eslint/no-shadow */\nimport {studioPath} from '@sanity/client/csm'\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 {lazy, Suspense, useCallback, useEffect, useMemo, useReducer, useRef, useState} from 'react'\nimport {\n type CommentIntentGetter,\n COMMENTS_INSPECTOR_NAME,\n type Path,\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 {debounce} from './lib/debounce'\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 ACTION_IFRAME_LOADED,\n ACTION_IFRAME_REFRESH,\n ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE,\n presentationReducer,\n presentationReducerInit,\n} from './reducers/presentationReducer'\nimport {RevisionSwitcher} from './RevisionSwitcher'\nimport {\n type FrameState,\n type PresentationNavigate,\n type PresentationPerspective,\n type PresentationPluginOptions,\n type PresentationStateParams,\n type PresentationViewport,\n type StructureDocumentPaneParams,\n type VisualEditingConnection,\n} from './types'\nimport {useDocumentsOnPage} from './useDocumentsOnPage'\nimport {useMainDocument} from './useMainDocument'\nimport {useParams} from './useParams'\nimport {usePopups} from './usePopups'\nimport {usePreviewUrl} from './usePreviewUrl'\nimport {useStatus} from './useStatus'\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 canCreateUrlPreviewSecrets: boolean\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n vercelProtectionBypass: string | null\n}): React.JSX.Element {\n const {\n canCreateUrlPreviewSecrets,\n canToggleSharePreviewAccess,\n canUseSharedPreviewAccess,\n tool,\n vercelProtectionBypass,\n } = props\n const components = tool.options?.components\n const _previewUrl = tool.options?.previewUrl\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\n const initialPreviewUrl = usePreviewUrl(\n _previewUrl || '/',\n name,\n routerSearchParams.perspective === 'published' ? 'published' : 'previewDrafts',\n routerSearchParams.preview || null,\n canCreateUrlPreviewSecrets,\n )\n const canSharePreviewAccess = useMemo<boolean>(() => {\n if (\n _previewUrl &&\n typeof _previewUrl === 'object' &&\n 'draftMode' in _previewUrl &&\n _previewUrl.draftMode\n ) {\n // eslint-disable-next-line no-console\n console.warn('previewUrl.draftMode is deprecated, use previewUrl.previewMode instead')\n return _previewUrl.draftMode.shareAccess !== false\n }\n if (\n _previewUrl &&\n typeof _previewUrl === 'object' &&\n 'previewMode' in _previewUrl &&\n _previewUrl.previewMode\n ) {\n return _previewUrl.previewMode.shareAccess !== false\n }\n return false\n }, [_previewUrl])\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 targetOrigin = useMemo(() => {\n return initialPreviewUrl.origin\n }, [initialPreviewUrl.origin])\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 {\n navigate: _navigate,\n navigationHistory,\n params,\n searchParams,\n structureParams,\n } = useParams({\n initialPreviewUrl,\n routerNavigate,\n routerState,\n routerSearchParams,\n frameStateRef,\n })\n\n // Most navigation events should be debounced, so use this unless explicitly needed\n const navigate = useMemo(() => debounce<PresentationNavigate>(_navigate, 50), [_navigate])\n\n const [state, dispatch] = useReducer(presentationReducer, {}, presentationReducerInit)\n\n const perspective = useMemo(\n () => (params.perspective ? 'published' : 'previewDrafts'),\n [params.perspective],\n )\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 // Prevent flash of content by using immediate navigation\n navigate: _navigate,\n navigationHistory,\n path: params.preview,\n previewUrl: tool.options?.previewUrl,\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 = state.iframe.status === '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<typeof navigate>(\n (nextState, nextSearchState, forceReplace) =>\n navigate(nextState, nextSearchState, forceReplace),\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 type: data.type,\n id: data.id,\n path: data.path,\n })\n })\n\n comlink.on('visual-editing/navigate', (data) => {\n const {title, url} = data\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 {},\n {preview: `${urlWithoutSearch}${searchParams.size > 0 ? '?' : ''}${searchParams}`},\n )\n } catch {\n handleNavigate({}, {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 dispatch({\n type: ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE,\n enabled: data.enabled,\n })\n })\n\n comlink.on('visual-editing/documents', (data) => {\n setDocumentsOnPage(\n 'visual-editing',\n // eslint-disable-next-line @typescript-eslint/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 dispatch({type: ACTION_IFRAME_REFRESH})\n }\n })\n\n comlink.on('visual-editing/refreshed', () => {\n dispatch({type: ACTION_IFRAME_LOADED})\n })\n\n comlink.onStatus(setOverlaysConnection)\n\n const stop = comlink.start()\n setVisualEditingComlink(comlink)\n\n return () => {\n stop()\n setVisualEditingComlink(null)\n }\n }, [controller, handleNavigate, 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 // eslint-disable-next-line @typescript-eslint/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 = useCallback(\n (nextPath: Path) => {\n // Don’t need to explicitly set the id here because it was either already set via postMessage or is the same if navigating in the document pane\n navigate({path: studioPath.toString(nextPath)}, {}, true)\n },\n [navigate],\n )\n\n const handlePreviewPath = useCallback(\n (nextPath: string) => {\n const url = new URL(nextPath, initialPreviewUrl.origin)\n const preview = url.pathname + url.search\n if (url.origin === initialPreviewUrl.origin && preview !== params.preview) {\n navigate({}, {preview})\n }\n },\n [initialPreviewUrl, params, navigate],\n )\n\n const handleStructureParams = useCallback(\n (structureParams: StructureDocumentPaneParams) => {\n navigate({}, structureParams)\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 frameStateRef.current.url = params.preview\n if (overlaysConnection !== 'connected' && iframeRef.current) {\n iframeRef.current.src = `${targetOrigin}${params.preview}`\n } else {\n visualEditingComlink?.post('presentation/navigate', {\n url: params.preview,\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 // Handle edge case where the `&rev=` parameter gets \"stuck\"\n const idRef = useRef<string | undefined>(params.id)\n useEffect(() => {\n if (params.rev && idRef.current && params.id !== idRef.current) {\n navigate({}, {rev: undefined})\n }\n idRef.current = params.id\n })\n\n const refreshRef = useRef<number>(undefined)\n const handleRefresh = useCallback(\n (fallback: () => void) => {\n dispatch({type: ACTION_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, 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({}, {viewport}, true)\n },\n [navigate],\n )\n\n const setPerspective = useCallback(\n (next: PresentationPerspective) => {\n // Omit the perspective URL search param if the next perspective state is\n // the default: 'previewDrafts'\n const perspective = next === 'previewDrafts' ? undefined : next\n navigate({}, {perspective})\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 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 // Make sure the iframe is unmounted if the targetOrigin has changed\n key={targetOrigin}\n canSharePreviewAccess={canSharePreviewAccess}\n canToggleSharePreviewAccess={canToggleSharePreviewAccess}\n canUseSharedPreviewAccess={canUseSharedPreviewAccess}\n dispatch={dispatch}\n header={unstable_header}\n iframe={state.iframe}\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 setPerspective={setPerspective}\n setViewport={setViewport}\n targetOrigin={targetOrigin}\n toggleNavigator={toggleNavigator}\n toggleOverlay={toggleOverlay}\n viewport={viewport}\n visualEditing={state.visualEditing}\n vercelProtectionBypass={vercelProtectionBypass}\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 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 && <PostMessageDocuments comlink={visualEditingComlink} />}\n {visualEditingComlink && <PostMessageFeatures comlink={visualEditingComlink} />}\n {visualEditingComlink && (\n <PostMessagePerspective comlink={visualEditingComlink} perspective={perspective} />\n )}\n {visualEditingComlink && <PostMessageTelemetry comlink={visualEditingComlink} />}\n {params.id && params.type && (\n <RevisionSwitcher\n documentId={params.id}\n documentRevision={params.rev}\n documentType={params.type}\n navigate={navigate}\n perspective={perspective}\n />\n )}\n </Suspense>\n </>\n )\n}\n\nfunction isAltKey(event: KeyboardEvent): boolean {\n return event.key === 'Alt'\n}\n\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}\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 {apiVersion} from '@sanity/preview-url-secret/constants'\nimport {subcribeToVercelProtectionBypass} from '@sanity/preview-url-secret/toggle-vercel-protection-bypass'\nimport {useEffect, useReducer, useState} from 'react'\nimport {useClient} from 'sanity'\n\ntype VercelProtectionBypassReadyState = 'loading' | 'ready'\n\nexport function useVercelBypassSecret(): [\n vercelProtectionBypassSecret: string | null,\n vercelProtectionBypassReadyState: VercelProtectionBypassReadyState,\n] {\n const client = useClient({apiVersion})\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 {\n schemaIdSingleton,\n schemaType,\n schemaTypeSingleton,\n} from '@sanity/preview-url-secret/constants'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useEffect, useState} from 'react'\nimport {type PermissionCheckResult, type Tool, useGrantsStore, useTranslation} from 'sanity'\n\nimport {presentationLocaleNamespace} from './i18n'\nimport {PresentationSpinner} from './PresentationSpinner'\nimport PresentationTool from './PresentationTool'\nimport {type PresentationPluginOptions} from './types'\nimport {useVercelBypassSecret} from './useVercelBypassSecret'\n\nexport default function PresentationToolGrantsCheck(props: {\n tool: Tool<PresentationPluginOptions>\n}): React.JSX.Element {\n const {t} = useTranslation(presentationLocaleNamespace)\n const {previewUrl} = props.tool.options ?? {}\n const {push: pushToast} = useToast()\n const willGeneratePreviewUrlSecret =\n typeof previewUrl === 'object' || typeof previewUrl === 'function'\n const grantsStore = useGrantsStore()\n const [previewAccessSharingCreatePermission, setCreateAccessSharingPermission] =\n useState<PermissionCheckResult | null>(null)\n const [previewAccessSharingUpdatePermission, setUpdateAccessSharingPermission] =\n useState<PermissionCheckResult | null>(null)\n const [previewAccessSharingReadPermission, setReadAccessSharingPermission] =\n useState<PermissionCheckResult | null>(null)\n const [previewUrlSecretPermission, setPreviewUrlSecretPermission] =\n useState<PermissionCheckResult | null>(null)\n\n useEffect(() => {\n if (!willGeneratePreviewUrlSecret) return undefined\n\n const previewCreateAccessSharingPermissionSubscription = grantsStore\n .checkDocumentPermission('create', {_id: schemaIdSingleton, _type: schemaTypeSingleton})\n .subscribe(setCreateAccessSharingPermission)\n const previewUpdateAccessSharingPermissionSubscription = grantsStore\n .checkDocumentPermission('update', {_id: schemaIdSingleton, _type: schemaTypeSingleton})\n .subscribe(setUpdateAccessSharingPermission)\n const previewReadAccessSharingPermissionSubscription = grantsStore\n .checkDocumentPermission('read', {_id: schemaIdSingleton, _type: schemaTypeSingleton})\n .subscribe(setReadAccessSharingPermission)\n const previewUrlSecretPermissionSubscription = grantsStore\n .checkDocumentPermission('create', {_id: `drafts.${uuid()}`, _type: schemaType})\n .subscribe(setPreviewUrlSecretPermission)\n\n return () => {\n previewCreateAccessSharingPermissionSubscription.unsubscribe()\n previewUpdateAccessSharingPermissionSubscription.unsubscribe()\n previewReadAccessSharingPermissionSubscription.unsubscribe()\n previewUrlSecretPermissionSubscription.unsubscribe()\n }\n }, [grantsStore, willGeneratePreviewUrlSecret])\n\n const canCreateUrlPreviewSecrets = previewUrlSecretPermission?.granted\n\n useEffect(() => {\n if (!willGeneratePreviewUrlSecret || canCreateUrlPreviewSecrets !== false) return undefined\n const raf = requestAnimationFrame(() =>\n pushToast({\n closable: true,\n status: 'error',\n duration: 30_000,\n title: t('preview-url-secret.missing-grants'),\n }),\n )\n return () => cancelAnimationFrame(raf)\n }, [canCreateUrlPreviewSecrets, pushToast, t, willGeneratePreviewUrlSecret])\n\n const [vercelProtectionBypass, vercelProtectionBypassReadyState] = useVercelBypassSecret()\n\n if (\n vercelProtectionBypassReadyState === 'loading' ||\n (willGeneratePreviewUrlSecret &&\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 {...props}\n vercelProtectionBypass={vercelProtectionBypass}\n canCreateUrlPreviewSecrets={canCreateUrlPreviewSecrets === true}\n canToggleSharePreviewAccess={\n previewAccessSharingCreatePermission?.granted === true &&\n previewAccessSharingUpdatePermission?.granted === true\n }\n canUseSharedPreviewAccess={previewAccessSharingReadPermission?.granted === true}\n />\n )\n}\n"],"names":["PostMessageFeatures","props","$","_c","comlink","t0","t1","on","_temp","useEffect","memo","features","optimistic","debounce","fn","timeout","timer","args","clearTimeout","setTimeout","apply","SharedStateProvider","children","Symbol","for","sharedState","useRef","t2","state","current","t3","key","value","post","setValue","t4","key_0","removeValue","t5","t6","context","t7","jsx","PresentationSharedStateContext","Root","styled","div","Panel","defaultSize","id","minWidth","maxWidth","order","undefined","useContext","PresentationPanelsContext","Error","getPanelStyle","registerElement","unregisterElement","style","type","useLayoutEffect","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","event","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","Button","retryButton","continueAnywayButton","Text","jsxs","Stack","Inline","Box","Flex","Container","Card","encodeQueryString","params","parts","Object","entries","resolveQueryStringFromParams","nextParams","allowed","safeNextParams","includes","obj","BackLink","forwardRef","ref","searchParams","_searchParams","StateLink","ReferenceChildLink","documentId","documentType","parentRefPath","template","PresentationPaneRouterProvider","onStructureParams","structureParams","refs","routerState","resolvePathFromState","useRouter","fromEntries","routerSearchParams","useUnique","path","qs","createPathWithParams","childLinkProps","childId","find","r","_id","getPublishedId","_type","backLinkProps","childLinkProps_0","nextParams_0","inspect","groupIndex","siblingIndex","payload","hasGroupSiblings","groupLength","routerPanesState","ChildLink","ParameterizedLink","closeCurrentAndAfter","handleEditReference","replaceCurrent","_temp4","closeCurrent","_temp5","duplicateCurrent","_temp6","setView","_temp7","setParams","setPayload","_temp8","navigateIntent","_temp9","PaneRouterContext","intentName","intentParams","options_0","console","warn","options","viewId","pane_0","pane","RootLayout","PaneLayout","WrappedCode","Code","DocumentListPane","mainDocumentState","devMode","usePresentationTool","document","ids","schemaTypeName","title","errorParams","setErrorParams","handleRetry","Label","error","StructureDocumentListPane","ErrorBoundary","StructureToolProvider","r_0","DocumentPane","onFocusPath","templateParams","decodeJsonParams","templateParameters","paneDocumentNode","height","PresentationSpinner","Suspense","StructureDocumentPane","DocumentPanel","usePreviewState","schemaType","documentPreviewStore","useDocumentPreviewStore","preview","setPreview","subscription","getPreviewStateObservable","subscribe","unsubscribe","ContentEditor","schema","useSchema","props_0","MainDocumentLink","previewState","bb0","draft","published","getPreviewValueWithFallback","SanityDefaultPreview","PreviewCard","WarningOutlineIcon","Translate","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","CommentsIntentProvider","DisplayedDocumentBroadcasterProvider","PresentationContent","documentsOnPage","PresentationNavigateProvider","navigate","_navigate","PresentationNavigateContext","useLocalState","defaultValue","usePresentationNavigator","unstable_navigator","navigatorProvided","component","_navigatorEnabled","setNavigatorEnabled","navigatorEnabled","toggleNavigator","Component","enabled","NavigatorComponent","navigatorDisabled","Navigator","PresentationParamsProvider","PresentationParamsContext","PresentationProvider","name","PresentationContext","IFrameElement","motion","create","iframe","IFrameOverlay","IFrame","animate","initial","onLoad","preventClick","src","variants","useId","replace","viewTransitionName","OpenPreviewButton","openPopup","previewLocationOrigin","previewLocationRoute","currentTarget","href","handleOpenPopup","LaunchIcon","Tooltip","PreviewLocationInput","fontSize","onChange","origin","padding","prefix","suffix","basePath","useActiveWorkspace","activeWorkspace","inputRef","sessionValue","setSessionValue","customValidity","setCustomValidity","handleChange","absoluteValue","startsWith","nextValue","slice","handleKeyDown","handleBlur","icon","ResetIcon","zIndex","TextInput","QRCodeSVG","lazy","QrCodeLogoSize","QrCodeLogoPadding","QrSize","StyledSanityMonogram","SanityMonogram","MotionSpinner","Spinner","MotionText","MotionMonogram","SharePreviewMenu","canToggleSharePreviewAccess","canUseSharedPreviewAccess","initialUrl","perspective","push","pushToast","useToast","client","useClient","apiVersion","API_VERSION","currentUser","useCurrentUser","loading","setLoading","enabling","setEnabling","disabling","setDisabling","secret","setSecret","busy","url","useMemo","setSecretSearchParams","setError","handleUnableToToggle","useCallback","closable","status","handleDisableSharing","disablePreviewAccessSharing","location","handleEnableSharing","previewUrlSecret","enablePreviewAccessSharing","handleCopyUrl","navigator","clipboard","writeText","toString","controller","AbortController","usedTags","fetchShareSecret","lastLiveEventId","signal","result","syncTags","fetch","fetchSharedAccessQuery","filterResponse","tag","aborted","live","events","abort","tags","finally","MenuButton","ShareIcon","Menu","Fragment","Grid","justifyContent","alignItems","gridTemplateColumns","gridTemplateRows","Switch","position","aspectRatio","display","AnimatePresence","opacity","textWrap","textAlign","MenuDivider","MenuItem","CopyIcon","constrainSize","placement","portal","displayName","PERSPECTIVE_TITLE_KEY","previewDrafts","PERSPECTIVE_TONES","PreviewHeaderDefault","canSharePreviewAccess","dispatch","iframeRef","loadersConnection","onPathChange","onRefresh","overlaysConnection","previewUrl","setPerspective","setViewport","targetOrigin","toggleOverlay","viewport","visualEditing","overlaysEnabled","toggleViewportSize","ACTION_IFRAME_RELOAD","assign","handleRefresh","previewURL","URL","pathname","search","withoutSecretSearchParams","PanelLeftIcon","content","fallbackPlacements","whiteSpace","Hotkeys","marginTop","marginBottom","lineHeight","borderRadius","margin","t25","t26","t27","t28","t29","t30","RefreshIcon","t31","t32","t33","t34","t35","t36","t37","t38","ChevronDownIcon","t39","t40","t41","t42","EditIcon","CheckmarkIcon","t43","t44","t45","t46","PublishIcon","t47","t48","t49","t50","t51","t52","t53","t54","t55","t56","MobileDeviceIcon","DesktopIcon","t57","t58","t59","t60","PreviewHeader","renderDefault","HeaderComponent","header","minHeight","usePresentationPreviewHeader","MotionFlex","Preview","forwardedRef","vercelProtectionBypass","stablePerspective","setStablePerspective","urlPerspective","urlSearchParamPreviewPerspective","urlSearchParamVercelProtectionBypass","urlSearchParamVercelSetBypassCookie","prefersReducedMotion","usePrefersReducedMotion","timedOut","setTimedOut","refreshing","somethingIsWrong","setSomethingIsWrong","iframeIsBusy","handleContinueAnyway","setContinueAnyway","continueAnyway","showOverlaysConnectionStatus","setShowOverlaysConnectionState","MAX_TIME_TO_OVERLAYS_CONNECTION","onIFrameLoad","ACTION_IFRAME_LOADED","instance","activeElement","dispatchEvent","MouseEvent","bubbles","cancelable","preventIframeInteraction","canUseViewTransition","useSyncExternalStore","CSS","supports","iframeAnimations","currentViewport","setCurrentViewport","iframeStyle","setIframeStyle","iframeVariants","update","startViewTransition","flushSync","MotionConfig","duration","TooltipDelayGroupProvider","spinnerVariants","inset","backdropFilter","WebkitBackdropFilter","WebkitTransition","sizes","errorVariants","background","desktop","mobile","exit","boxShadow","scale","idle","reloading","active","useEffectOnChange","_callback","initialValue","comparator","previousValueRef","callback","useEffectEvent","RevisionSwitcher","documentRevision","editState","useEditState","rev","_updatedAt","_rev","defineWarnOnce","warned","warnOnceAboutCrossDatasetReference","useDocumentsOnPage","frameStateRef","setPublished","setPreviewDrafts","urlRef","setDocumentsOnPage","sourceDocuments","documents","sourceDocument","_projectId","setCache","cache","isEqual","uniqueDocuments","forEach","doc","fnOrObj","arg","Function","getQueryFromResult","resolver","resolve","getParamsFromResult","getRouteContext","route","routes","absolute","match","decode","decodeURIComponent","useMainDocument","navigationHistory","resolvers","relativeUrl","setMainDocumentState","mainDocumentIdRef","handleResponse","at","base","query","then","catch","lengthyStr$1","pipe","string","minLength","optionalLengthyStr","optional","object","baseUrl","dataset","projectId","tool","workspace","parseId","rawId","segments","split","shift","parsePath","rawPath","studioPath","urlStringToPath","parseRouterState","pruneObject","useParams","initialPreviewUrl","routerNavigate","since","view","pathKey","instruction","comment","changesInspectorTab","routerStateRef","setNavigationHistory","nextState","nextSearchState","forceReplace","routerSearchState","searchState","usePopups","popups","setPopups","Set","open","source","add","unsubs","size","closed","addTarget","unsub","interval","setInterval","POPUP_CHECK_INTERVAL","clearInterval","usePreviewUrl","toolName","studioPreviewPerspective","previewSearchParam","canCreateUrlPreviewSecrets","workspaceName","deps","useSuspendCacheKeys","usePreviewUrlSecret","suspend","resolvedUrl","resultUrl","restoredUrl","definePreviewUrl","studioBasePath","resolveUUID","cachedPreviewSearchParam","setCachedPreviewSearchParam","timeoutRef","secretLastExpiredAt","setSecretLastExpiredAt","createPreviewSecret","startTransition","expiresAt","getTime","Date","now","useStatus","statusMap","setStatusMap","handshaking","memoStatus","connection","hasConnected_0","hasConnected","status_1","setStatusFromEvent","status_0","LiveQueries","PostMessageDocuments","PostMessageRefreshMutations","PostMessagePerspective","PostMessagePreviewSnapshots","PostMessageSchema","PostMessageTelemetry","PresentationTool","components","_previewUrl","DEFAULT_TOOL_NAME","unstable_header","draftMode","shareAccess","previewMode","option","hostname","setController","visualEditingComlink","setVisualEditingComlink","useReducer","presentationReducer","presentationReducerInit","useProjectId","useDataset","mainDocuments","setOverlaysConnection","setLoadersConnection","previewKitConnection","setPreviewKitConnection","isLoading","target","contentWindow","createController","destroy","handleNavigate","createChannel","heartbeat","connectTo","createConnectionMachine","provide","actors","createCompatibilityActors","urlWithoutSearch","URLSearchParams","ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE","refreshRef","ACTION_IFRAME_REFRESH","onStatus","stop","start","handleFocusPath","nextPath","handlePreviewPath","handleStructureParams","displayedDocument","handleKeyUp","isAltKey","handleKeydown","isHotkey","boundaryElement","setBoundaryElement","PresentationNavigator","idRef","fallback","livePreviewEnabled","useWorkspace","COMMENTS_INSPECTOR_NAME","mode","EDIT_INTENT_MODE","BoundaryElementProvider","IS_MAC","test","platform","MODIFIERS","alt","ctrl","mod","keys","every","toUpperCase","useVercelBypassSecret","vercelProtectionBypassReadyState","ready","vercelProtectionBypassSecret","setVercelProtectionBypassSecret","subcribeToVercelProtectionBypass","PresentationToolGrantsCheck","willGeneratePreviewUrlSecret","grantsStore","useGrantsStore","previewAccessSharingCreatePermission","setCreateAccessSharingPermission","previewAccessSharingUpdatePermission","setUpdateAccessSharingPermission","previewAccessSharingReadPermission","setReadAccessSharingPermission","previewUrlSecretPermission","setPreviewUrlSecretPermission","previewCreateAccessSharingPermissionSubscription","checkDocumentPermission","schemaIdSingleton","schemaTypeSingleton","previewUpdateAccessSharingPermissionSubscription","previewReadAccessSharingPermissionSubscription","previewUrlSecretPermissionSubscription","granted","raf","requestAnimationFrame","cancelAnimationFrame"],"mappings":"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","x_google_ignoreList":[33]}
|