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.esm.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","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","retryButton","continueAnywayButton","Container","encodeQueryString","params","parts","Object","entries","resolveQueryStringFromParams","nextParams","allowed","safeNextParams","includes","obj","BackLink","forwardRef","ref","searchParams","_searchParams","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","intentName","intentParams","options_0","console","warn","options","viewId","pane_0","pane","RootLayout","PaneLayout","Flex","WrappedCode","Code","DocumentListPane","mainDocumentState","devMode","usePresentationTool","document","ids","schemaTypeName","title","errorParams","setErrorParams","handleRetry","error","StructureDocumentListPane","r_0","DocumentPane","onFocusPath","templateParams","decodeJsonParams","templateParameters","paneDocumentNode","height","StructureDocumentPane","DocumentPanel","usePreviewState","schemaType","documentPreviewStore","useDocumentPreviewStore","preview","setPreview","subscription","getPreviewStateObservable","subscribe","unsubscribe","ContentEditor","schema","useSchema","props_0","MainDocumentLink","previewState","bb0","draft","published","getPreviewValueWithFallback","usePanelId","uuid","panelId","Resizer","ResizerInner","$disabled","PanelResizer","propId","disabled","isDragging","nativeEvent","onMouseDown","e","onDrag","blur","onDragStop","resetDocumentStyles","bodyStyle","body","documentStyle","documentElement","cursor","userSelect","removeProperty","addEventListener","removeEventListener","PresentationContentWrapper","setDisplayedDocument","getCommentIntent","PresentationContent","documentsOnPage","PresentationNavigateProvider","navigate","_navigate","useLocalState","defaultValue","usePresentationNavigator","unstable_navigator","navigatorProvided","component","_navigatorEnabled","setNavigatorEnabled","navigatorEnabled","toggleNavigator","Component","enabled","NavigatorComponent","navigatorDisabled","Navigator","PresentationParamsProvider","PresentationProvider","name","IFrameElement","motion","create","iframe","IFrameOverlay","Box","IFrame","animate","initial","onLoad","preventClick","src","variants","useId","replace","viewTransitionName","OpenPreviewButton","openPopup","previewLocationOrigin","previewLocationRoute","currentTarget","href","handleOpenPopup","LaunchIcon","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","QRCodeSVG","lazy","QrCodeLogoSize","QrCodeLogoPadding","QrSize","StyledSanityMonogram","SanityMonogram","MotionSpinner","Spinner","MotionText","Text","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","ShareIcon","justifyContent","alignItems","gridTemplateColumns","gridTemplateRows","position","aspectRatio","display","opacity","textWrap","textAlign","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","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","t43","t44","t45","t46","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","duration","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","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.esm.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","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","retryButton","continueAnywayButton","Container","encodeQueryString","params","parts","Object","entries","resolveQueryStringFromParams","nextParams","allowed","safeNextParams","includes","obj","BackLink","forwardRef","ref","searchParams","_searchParams","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","intentName","intentParams","options_0","console","warn","options","viewId","pane_0","pane","RootLayout","PaneLayout","Flex","WrappedCode","Code","DocumentListPane","mainDocumentState","devMode","usePresentationTool","document","ids","schemaTypeName","title","errorParams","setErrorParams","handleRetry","error","StructureDocumentListPane","r_0","DocumentPane","onFocusPath","templateParams","decodeJsonParams","templateParameters","paneDocumentNode","height","StructureDocumentPane","DocumentPanel","usePreviewState","schemaType","documentPreviewStore","useDocumentPreviewStore","preview","setPreview","subscription","getPreviewStateObservable","subscribe","unsubscribe","ContentEditor","schema","useSchema","props_0","MainDocumentLink","previewState","bb0","draft","published","getPreviewValueWithFallback","usePanelId","uuid","panelId","Resizer","ResizerInner","$disabled","PanelResizer","propId","disabled","isDragging","nativeEvent","onMouseDown","e","onDrag","blur","onDragStop","resetDocumentStyles","bodyStyle","body","documentStyle","documentElement","cursor","userSelect","removeProperty","addEventListener","removeEventListener","PresentationContentWrapper","setDisplayedDocument","getCommentIntent","PresentationContent","documentsOnPage","PresentationNavigateProvider","navigate","_navigate","useLocalState","defaultValue","usePresentationNavigator","unstable_navigator","navigatorProvided","component","_navigatorEnabled","setNavigatorEnabled","navigatorEnabled","toggleNavigator","Component","enabled","NavigatorComponent","navigatorDisabled","Navigator","PresentationParamsProvider","PresentationProvider","name","IFrameElement","motion","create","iframe","IFrameOverlay","Box","IFrame","animate","initial","onLoad","preventClick","src","variants","useId","replace","viewTransitionName","OpenPreviewButton","openPopup","previewLocationOrigin","previewLocationRoute","currentTarget","href","handleOpenPopup","LaunchIcon","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","QRCodeSVG","lazy","QrCodeLogoSize","QrCodeLogoPadding","QrSize","StyledSanityMonogram","SanityMonogram","MotionSpinner","Spinner","MotionText","Text","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","ShareIcon","justifyContent","alignItems","gridTemplateColumns","gridTemplateRows","position","aspectRatio","display","opacity","textWrap","textAlign","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","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","t43","t44","t45","t46","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","duration","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","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]}
|