sanity 3.83.1-canary.23 → 3.84.1-next.0
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/PostMessageSchema.js.map +1 -1
- package/lib/_chunks-cjs/PostMessageTelemetry.js +1 -1
- package/lib/_chunks-cjs/PostMessageTelemetry.js.map +1 -1
- package/lib/_chunks-cjs/PresentationToolGrantsCheck.js +429 -1417
- package/lib/_chunks-cjs/PresentationToolGrantsCheck.js.map +1 -1
- package/lib/_chunks-cjs/presentation.js +70 -22
- package/lib/_chunks-cjs/presentation.js.map +1 -1
- package/lib/_chunks-cjs/resources6.js +0 -8
- package/lib/_chunks-cjs/resources6.js.map +1 -1
- package/lib/_chunks-cjs/version.js +1 -1
- package/lib/_chunks-es/PostMessageSchema.mjs.map +1 -1
- package/lib/_chunks-es/PostMessageTelemetry.mjs +1 -1
- package/lib/_chunks-es/PostMessageTelemetry.mjs.map +1 -1
- package/lib/_chunks-es/PresentationToolGrantsCheck.mjs +437 -1406
- package/lib/_chunks-es/PresentationToolGrantsCheck.mjs.map +1 -1
- package/lib/_chunks-es/presentation.mjs +73 -24
- package/lib/_chunks-es/presentation.mjs.map +1 -1
- package/lib/_chunks-es/resources6.mjs +0 -8
- package/lib/_chunks-es/resources6.mjs.map +1 -1
- package/lib/_chunks-es/version.mjs +1 -1
- package/lib/_singletons.d.mts +61 -2889
- package/lib/_singletons.d.ts +61 -2889
- package/lib/presentation.d.mts +57 -2887
- package/lib/presentation.d.ts +57 -2887
- package/lib/presentation.js +4 -0
- package/lib/presentation.js.map +1 -1
- package/lib/presentation.mjs +5 -1
- package/package.json +15 -16
- package/src/presentation/PostMessageTelemetry.tsx +1 -1
- package/src/presentation/PresentationTool.tsx +76 -85
- package/src/presentation/PresentationToolGrantsCheck.tsx +75 -39
- package/src/presentation/document/LocationsBanner.tsx +13 -52
- package/src/presentation/i18n/resources.ts +0 -10
- package/src/presentation/index.ts +13 -0
- package/src/presentation/{util → lib}/parse.ts +1 -2
- package/src/presentation/overlays/schema/PostMessageSchema.tsx +0 -1
- package/src/presentation/panels/usePanelsStorage.ts +1 -1
- package/src/presentation/preview/IFrame.tsx +35 -83
- package/src/presentation/preview/Preview.tsx +56 -172
- package/src/presentation/preview/PreviewHeader.tsx +10 -43
- package/src/presentation/preview/PreviewLocationInput.tsx +24 -48
- package/src/presentation/preview/SharePreviewMenu.tsx +2 -2
- package/src/presentation/reducers/presentationReducer.ts +134 -0
- package/src/presentation/types.ts +7 -139
- package/src/presentation/useMainDocument.ts +12 -4
- package/src/presentation/useParams.ts +3 -2
- package/src/presentation/usePreviewUrl.ts +133 -0
- package/src/presentation/actors/create-preview-secret.ts +0 -19
- package/src/presentation/actors/read-shared-secret.ts +0 -18
- package/src/presentation/actors/resolve-allow-patterns.ts +0 -55
- package/src/presentation/actors/resolve-initial-url.ts +0 -65
- package/src/presentation/actors/resolve-preview-mode-url.ts +0 -72
- package/src/presentation/actors/resolve-preview-mode.ts +0 -66
- package/src/presentation/actors/resolve-url-from-preview-search-param.ts +0 -29
- package/src/presentation/machines/presentation-machine.ts +0 -101
- package/src/presentation/machines/preview-url.ts +0 -568
- package/src/presentation/useAllowPatterns.ts +0 -12
- package/src/presentation/useId.ts +0 -7
- package/src/presentation/usePresentationPerspective.ts +0 -14
- package/src/presentation/usePreviewUrlActorRef.ts +0 -96
- package/src/presentation/useReportInvalidPreviewSearchParam.tsx +0 -43
- package/src/presentation/useTargetOrigin.ts +0 -11
- /package/src/presentation/{util → lib}/debounce.ts +0 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PresentationToolGrantsCheck.js","sources":["../../src/presentation/features/PostMessageFeatures.tsx","../../src/presentation/machines/presentation-machine.ts","../../src/presentation/overlays/SharedStateProvider.tsx","../../src/presentation/panels/Panel.tsx","../../src/presentation/util/debounce.ts","../../src/presentation/panels/usePanelsStorage.ts","../../src/presentation/panels/util.ts","../../src/presentation/panels/Panels.tsx","../../src/presentation/components/ErrorCard.tsx","../../src/presentation/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/useAllowPatterns.ts","../../src/presentation/util/encodeStudioPerspective.ts","../../src/presentation/useId.ts","../../src/presentation/preview/IFrame.tsx","../../src/presentation/preview/OpenPreviewButton.tsx","../../src/presentation/useTargetOrigin.ts","../../src/presentation/preview/PreviewLocationInput.tsx","../../src/presentation/preview/SharePreviewMenu.tsx","../../src/presentation/preview/PreviewHeader.tsx","../../src/presentation/preview/Preview.tsx","../../src/presentation/util/warnOnce.ts","../../src/presentation/useDocumentsOnPage.ts","../../src/presentation/useMainDocument.ts","../../src/presentation/util/parse.ts","../../src/presentation/useParams.ts","../../src/presentation/usePopups.ts","../../src/presentation/usePresentationPerspective.ts","../../src/presentation/useStatus.ts","../../src/presentation/PresentationTool.tsx","../../src/presentation/actors/create-preview-secret.ts","../../src/presentation/actors/read-shared-secret.ts","../../src/presentation/actors/resolve-allow-patterns.ts","../../src/presentation/actors/resolve-initial-url.ts","../../src/presentation/actors/resolve-preview-mode.ts","../../src/presentation/actors/resolve-preview-mode-url.ts","../../src/presentation/actors/resolve-url-from-preview-search-param.ts","../../src/presentation/machines/preview-url.ts","../../src/presentation/usePreviewUrlActorRef.ts","../../src/presentation/useReportInvalidPreviewSearchParam.tsx","../../src/presentation/useVercelBypassSecret.ts","../../src/presentation/PresentationToolGrantsCheck.tsx"],"sourcesContent":["import {type FC, memo, useEffect} from 'react'\n\nimport {type VisualEditingConnection} from '../types'\n\nexport interface PostMessagePreviewsProps {\n comlink: VisualEditingConnection\n}\n\nconst PostMessageFeatures: FC<PostMessagePreviewsProps> = (props) => {\n const {comlink} = props\n\n useEffect(() => {\n return comlink.on('visual-editing/features', () => ({\n features: {\n optimistic: true,\n },\n }))\n }, [comlink])\n\n return null\n}\n\nexport default memo(PostMessageFeatures)\n","import {type ActorRefFrom, assign, setup} from 'xstate'\n\ninterface Context {\n url: URL | null\n error: Error | null\n visualEditingOverlaysEnabled: boolean\n}\n\ntype Event =\n | {type: 'toggle visual editing overlays'; enabled: boolean}\n | {type: 'iframe loaded'}\n | {type: 'iframe refresh'}\n | {type: 'iframe reload'}\n\nexport const presentationMachine = setup({\n types: {} as {\n context: Context\n events: Event\n tags: 'busy' | 'error'\n },\n actions: {\n //\n },\n actors: {\n //\n },\n guards: {\n //\n },\n}).createMachine({\n // eslint-disable-next-line tsdoc/syntax\n /** @xstate-layout N4IgpgJg5mDOIC5QAUBOcwDsAuBDbAlgPaYAEAKkUQDYDEBAZqrgLZinrVG4QDaADAF1EoAA5FYBQiREgAHogAsAJgA0IAJ6IAHAEYAdIoCcJowFY9R-vzPLlAX3vq0GHPmJlKNfVx4FMUPRMrOy+EJACwkgg4pLSmLIKCLoAbIr6Zoop2tqKAMxpJnnF6loIZkbK+uZ5umapKXmK-Cm6js7osFh48RRU1D7c4RC02ERQUNTsAG4EsACuuNSkkFL+UKRE02Co1LgasJGysWsy0UnaZinVyrpGAOx1Rim2efeliPe3hma1Zvy6XT8W4OJwgFxdNy9LwDMKQILMNgcMBMOAACyO0RO8USiAK930LWU-3uiiB9yaKXemkQjW01V+txS-GKqUe7XBnW67hIfW8cJGjER7E4Q0xYgkpwS5zxVMJKWJ-FJ5Mp1LKFn4Pz+DSaLTaYIh3Oh-UGPEg+nQqNgaPWCJCpAF4pikpxMoQKWZ+gp+TSZLy1hSH3deXpNSZLNqVP1HVcPQ8fNhQ3Nor8ATtSMdQmOLo8uPdnu9BUUfoDQY1WrqOuarUcYMwRHC8Gihqh8Zh2biubdAFpAzSEL2OS247yYfodqgiKgO1K8yog7ptATFL9dFljMDrHkh1zW6OTWF1jPXaAkmY1YgKnktfxtC9dPd+Io9DvYzzPAekxBj13T3i7vKirKkqqpBsYVQ1HUFjFs0t6KK+kIjh+-JfvoBAQFMP5nH+CDaMo16KjYyjMvUNh5GWOT6MoLL8A8ygrk0dQIUabafmaEAWiinQ2gEWHSjhjJUYuj73Pcd63noQaNEYFb-Dk2S0cxe7IYm7GcYevFYjm2HyJeeQQb8tFkikVjGNoFGajUt73o+z61vYQA */\n id: 'Presentation Tool',\n context: {\n url: null,\n error: null,\n visualEditingOverlaysEnabled: false,\n },\n\n on: {\n 'iframe reload': {\n actions: assign({url: null}),\n target: '.loading',\n },\n },\n\n states: {\n error: {\n description:\n 'Failed to load, either because of a misconfiguration, a network error, or an unexpected error',\n tags: ['error'],\n },\n loading: {\n on: {\n 'iframe loaded': {\n target: 'loaded',\n },\n },\n tags: ['busy'],\n },\n loaded: {\n on: {\n 'toggle visual editing overlays': {\n actions: assign({\n visualEditingOverlaysEnabled: ({event}) => event.enabled,\n }),\n },\n 'iframe refresh': {\n target: '.refreshing',\n },\n 'iframe reload': {\n target: '.reloading',\n },\n },\n\n states: {\n idle: {},\n refreshing: {\n on: {\n 'iframe loaded': {\n target: 'idle',\n },\n },\n tags: ['busy'],\n },\n reloading: {\n on: {\n 'iframe loaded': {\n target: 'idle',\n },\n },\n tags: ['busy'],\n },\n },\n initial: 'idle',\n },\n },\n initial: 'loading',\n})\n\nexport type PresentationMachineRef = ActorRefFrom<typeof presentationMachine>\n","import {type Serializable, type SerializableObject} from '@sanity/presentation-comlink'\nimport {\n type FunctionComponent,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react'\nimport {PresentationSharedStateContext} from 'sanity/_singletons'\n\nimport {type VisualEditingConnection} from '../types'\nimport {type PresentationSharedStateContextValue} from './types'\n\nexport const SharedStateProvider: FunctionComponent<\n PropsWithChildren<{\n comlink: VisualEditingConnection | null\n }>\n> = function (props) {\n const {comlink, children} = props\n\n const sharedState = useRef<SerializableObject>({})\n\n useEffect(() => {\n return comlink?.on('visual-editing/shared-state', () => {\n return {state: sharedState.current}\n })\n }, [comlink])\n\n const setValue = useCallback(\n (key: string, value: Serializable) => {\n sharedState.current[key] = value\n comlink?.post('presentation/shared-state', {key, value})\n },\n [comlink],\n )\n\n const removeValue = useCallback(\n (key: string) => {\n comlink?.post('presentation/shared-state', {key})\n delete sharedState.current[key]\n },\n [comlink],\n )\n\n const context = useMemo<PresentationSharedStateContextValue>(\n () => ({removeValue, setValue}),\n [removeValue, setValue],\n )\n\n return (\n <PresentationSharedStateContext.Provider value={context}>\n {children}\n </PresentationSharedStateContext.Provider>\n )\n}\n","import {type FunctionComponent, type PropsWithChildren, useContext, useLayoutEffect} from 'react'\nimport {PresentationPanelsContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\ninterface PanelProps extends PropsWithChildren {\n defaultSize?: number | null\n id: string\n minWidth?: number\n maxWidth?: number\n order?: number\n}\n\nconst Root = styled.div`\n overflow: hidden;\n flex-basis: 0;\n flex-shrink: 1;\n`\n\nexport const Panel: FunctionComponent<PanelProps> = function ({\n children,\n defaultSize = null,\n id,\n minWidth,\n maxWidth,\n order = 0,\n}) {\n const context = useContext(PresentationPanelsContext)\n\n if (context === null) {\n throw Error(`Panel components must be rendered within a PanelGroup container`)\n }\n\n const {getPanelStyle, registerElement, unregisterElement} = context\n\n const style = getPanelStyle(id)\n\n useLayoutEffect(() => {\n registerElement(id, {\n id,\n type: 'panel',\n defaultSize,\n maxWidth: maxWidth ?? null,\n minWidth: minWidth ?? 0,\n order,\n })\n\n return () => {\n unregisterElement(id)\n }\n }, [id, defaultSize, order, maxWidth, minWidth, registerElement, unregisterElement])\n\n return <Root style={style}>{children}</Root>\n}\n","export function debounce<F extends (...args: Parameters<F>) => ReturnType<F>>(\n fn: F,\n timeout: number,\n): F {\n let timer: ReturnType<typeof setTimeout>\n return ((...args: Parameters<F>) => {\n clearTimeout(timer)\n timer = setTimeout(() => {\n fn.apply(fn, args)\n }, timeout)\n }) as F\n}\n","import {useMemo} from 'react'\n\nimport {debounce} from '../util/debounce'\nimport {type PanelElement} from './types'\n\nconst itemKey = 'presentation/panels'\n\ntype StoredPanelsState = Record<string, number[]>\n\nconst getStoredItem = () => {\n // @todo Validate\n return JSON.parse(localStorage.getItem(itemKey) || '{}') as StoredPanelsState\n}\nconst setStoredItem = (data: StoredPanelsState) => {\n localStorage.setItem(itemKey, JSON.stringify(data))\n}\n\nconst getKeyForPanels = (panels: PanelElement[]) => {\n return panels.map((panel) => [panel.id, panel.order].join(':')).join(',')\n}\n\nexport function usePanelsStorage(): {\n get: (panels: PanelElement[]) => number[] | undefined\n set: (panels: PanelElement[], widths: number[]) => void\n setDebounced: (panels: PanelElement[], widths: number[]) => void\n} {\n return useMemo(() => {\n const get = (panels: PanelElement[]) => {\n const stored = getStoredItem()\n const key = getKeyForPanels(panels)\n return Array.isArray(stored[key]) && stored[key].some((val) => val === null)\n ? undefined\n : stored[key]\n }\n\n const set = (panels: PanelElement[], widths: number[]) => {\n const stored = getStoredItem()\n const key = getKeyForPanels(panels)\n const data = {\n ...stored,\n [key]: widths,\n }\n setStoredItem(data)\n }\n\n const setDebounced = debounce(set, 100)\n return {\n get,\n set,\n setDebounced,\n }\n }, [])\n}\n","/* eslint-disable @typescript-eslint/no-shadow,no-eq-null */\nimport {\n type ElementMap,\n type InitialDragState,\n type PanelElement,\n type PanelsState,\n type ResizerElement,\n} from './types'\n\nfunction getNextWidth(panel: PanelElement, nextWidth: number, containerWidth: number) {\n const {maxWidth: maxWidthPx, minWidth: minWidthPx} = panel\n const maxWidth = maxWidthPx == null ? 100 : (maxWidthPx / containerWidth) * 100\n const minWidth = (minWidthPx / containerWidth) * 100\n return Math.min(maxWidth, Math.max(minWidth, nextWidth))\n}\n\n// eslint-disable-next-line max-params\nexport function getNextWidths(\n delta: number,\n containerWidth: number,\n panelBefore: PanelElement,\n panelAfter: PanelElement,\n panelsState: PanelsState,\n initialDragState: InitialDragState,\n): number[] {\n const {panels, widths: prevWidths} = panelsState\n const {widths: initialWidths} = initialDragState\n\n const widths = initialWidths || prevWidths\n const nextWidths = [...widths]\n\n {\n const pivotPanel = delta < 0 ? panelAfter : panelBefore\n const index = panels.findIndex((panel) => panel.id === pivotPanel.id)\n const width = widths[index]\n const nextWidth = getNextWidth(pivotPanel, width + Math.abs(delta), containerWidth)\n if (width === nextWidth) {\n return widths\n }\n delta = delta < 0 ? width - nextWidth : nextWidth - width\n }\n\n let deltaApplied = 0\n let pivotPanel = delta < 0 ? panelBefore : panelAfter\n let index = panels.findIndex((panel) => panel.id === pivotPanel.id)\n\n // 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'\n\nimport {StructureToolProvider} from '../../structure/StructureToolProvider'\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 usePerspective,\n} from 'sanity'\n\ninterface PreviewState {\n isLoading?: boolean\n snapshot?: PreviewValue | Partial<SanityDocument> | null\n}\n\nexport default function usePreviewState(documentId: string, schemaType?: SchemaType): PreviewState {\n const documentPreviewStore = useDocumentPreviewStore()\n const [preview, setPreview] = useState<PreviewState>({})\n const {perspectiveStack} = usePerspective()\n useEffect(() => {\n if (!schemaType) {\n return undefined\n }\n const subscription = getPreviewStateObservable(\n documentPreviewStore,\n schemaType,\n documentId,\n perspectiveStack,\n ).subscribe((state) => {\n setPreview(state)\n })\n\n return () => {\n subscription?.unsubscribe()\n }\n }, [documentPreviewStore, schemaType, documentId, perspectiveStack])\n\n return preview\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {type HTMLProps, useCallback, useMemo} from 'react'\nimport {\n getPreviewValueWithFallback,\n type Path,\n PreviewCard,\n SanityDefaultPreview,\n Translate,\n useSchema,\n useTranslation,\n} from 'sanity'\nimport {StateLink} from 'sanity/router'\n\nimport {presentationLocaleNamespace} from '../i18n'\nimport {\n type MainDocumentState,\n type 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 snapshot: previewState.snapshot,\n fallback: mainDocumentState!.document,\n })}\n schemaType={schemaType}\n status={\n <Card padding={1} radius={2} shadow={1}>\n <Text muted size={0} weight=\"medium\">\n {t('main-document.label')}\n </Text>\n </Card>\n }\n />\n )\n }, [mainDocumentState, schemaType, t, previewState])\n\n if (documentId && documentType) {\n return (\n <DocumentPanel\n documentId={documentId}\n documentType={documentType}\n 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 {useSelector} from '@xstate/react'\n\nimport {type PreviewUrlRef} from './machines/preview-url'\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useAllowPatterns(previewUrlRef: PreviewUrlRef) {\n const allowPatterns = useSelector(previewUrlRef, (state) => state.context.allowOrigins)\n if (!Array.isArray(allowPatterns)) {\n throw new TypeError('allowPatterns must be an array')\n }\n return allowPatterns\n}\n","/**\n * When encoding the current studio perspective it's necessary to deal with it sometimes being an array, in a consistent way.\n */\nexport function encodeStudioPerspective(studioPerspective: string[] | string): string {\n return Array.isArray(studioPerspective) ? studioPerspective.join(',') : studioPerspective\n}\n","import {useId as useReactId} from 'react'\n\nexport function useId(): string {\n const id = useReactId()\n // Uses the new format introduced in: https://github.com/facebook/react/pull/32001\n return id.startsWith(':') ? id.replace(/^:(.+):$/, '\\u00AB$1\\u00BB') : id\n}\n","import {Box} from '@sanity/ui'\nimport {motion, type VariantLabels, type Variants} from 'framer-motion'\nimport {forwardRef, type ReactEventHandler, useEffect, useImperativeHandle, useRef} from 'react'\nimport {createGlobalStyle, styled} from 'styled-components'\n\nimport {useId} from '../useId'\n\ninterface IFrameProps {\n animate: VariantLabels\n initial: VariantLabels\n onLoad: ReactEventHandler<HTMLIFrameElement>\n preventClick: boolean\n src: string\n variants: Variants\n style: React.CSSProperties\n}\n\nexport const IFrame = forwardRef<HTMLIFrameElement, IFrameProps>(\n function IFrame(props, forwardedRef) {\n const {animate, initial, onLoad, preventClick, src, variants, style} = props\n\n const ref = useRef<HTMLIFrameElement | null>(null)\n // Forward the iframe ref to the parent component\n useImperativeHandle<HTMLIFrameElement | null, HTMLIFrameElement | null>(\n forwardedRef,\n () => ref.current,\n )\n\n /**\n * Ensure that clicking outside of menus and dialogs will close as focus shifts to the iframe\n */\n\n useEffect(() => {\n if (!ref.current) {\n return undefined\n }\n const instance = ref.current\n function handleBlur() {\n if (instance !== document.activeElement) {\n return\n }\n\n instance.dispatchEvent(new MouseEvent('mousedown', {bubbles: true, cancelable: true}))\n }\n window.addEventListener('blur', handleBlur)\n return () => {\n window.removeEventListener('blur', handleBlur)\n }\n }, [])\n\n const viewTransitionName = useId()\n\n return (\n <>\n <IFrameElement\n style={{\n ...style,\n viewTransitionName,\n }}\n animate={animate}\n initial={initial}\n onLoad={onLoad}\n ref={ref}\n src={src}\n variants={variants}\n />\n {preventClick && <IFrameOverlay />}\n <GlobalViewTransition />\n </>\n )\n },\n)\n\nconst IFrameElement = motion.create(styled.iframe`\n box-shadow: 0 0 0 1px var(--card-border-color);\n border: 0;\n max-height: 100%;\n width: 100%;\n view-transition-class: presentation-tool-iframe;\n`)\n\nconst IFrameOverlay = styled(Box)`\n position: absolute;\n inset: 0;\n background: transparent;\n`\n\nconst GlobalViewTransition = createGlobalStyle`\nhtml:active-view-transition-type(sanity-iframe-viewport) {\n view-transition-name: none;\n &::view-transition {\n pointer-events: none;\n }\n /* &::view-transition-old(root) {\n display: none;\n }\n &::view-transition-new(root) {\n animation: none;\n } */\n}\n`\n","import {LaunchIcon} from '@sanity/icons'\nimport {urlSearchParamPreviewPerspective} from '@sanity/preview-url-secret/constants'\nimport {Text} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type PresentationPerspective} from '../types'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {type PreviewProps} from './Preview'\n\n/** @internal */\nexport function OpenPreviewButton(\n props: Pick<PreviewProps, 'openPopup'> & {\n previewLocationOrigin?: string\n previewLocationRoute: string\n perspective: PresentationPerspective\n targetOrigin: string\n },\n): React.ReactNode {\n const {openPopup, previewLocationOrigin, previewLocationRoute, perspective, targetOrigin} = props\n\n const openPreviewLink = useMemo(() => {\n const url = new URL(previewLocationRoute, previewLocationOrigin || targetOrigin)\n url.searchParams.set(urlSearchParamPreviewPerspective, encodeStudioPerspective(perspective))\n const {pathname, search} = url\n\n return `${previewLocationOrigin}${pathname}${search}`\n }, [perspective, previewLocationOrigin, previewLocationRoute, targetOrigin])\n\n const {t} = useTranslation(presentationLocaleNamespace)\n\n const handleOpenPopup = useCallback(\n (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n event.preventDefault()\n openPopup(event.currentTarget.href)\n },\n [openPopup],\n )\n\n return (\n <Tooltip\n animate\n content={<Text size={1}>{t('share-url.menu-item.open.text')}</Text>}\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Button\n as=\"a\"\n aria-label={t('share-url.menu-item.open.text')}\n icon={LaunchIcon}\n mode=\"bleed\"\n href={openPreviewLink}\n rel=\"opener\"\n target=\"_blank\"\n tooltipProps={null}\n // @ts-expect-error the `as=\"a\"` prop isn't enough to change the type of event.target from <div> to <a>\n onClick={handleOpenPopup}\n />\n </Tooltip>\n )\n}\n","import {useSelector} from '@xstate/react'\n\nimport {type PreviewUrlRef} from './machines/preview-url'\n\nexport function useTargetOrigin(previewUrlRef: PreviewUrlRef): string {\n const targetOrigin = useSelector(previewUrlRef, (state) => state.context.previewUrl?.origin)\n if (!targetOrigin) {\n throw new TypeError('targetOrigin is required')\n }\n return targetOrigin\n}\n","import {ResetIcon} from '@sanity/icons'\nimport {TextInput, type TextInputClearButtonProps} from '@sanity/ui'\nimport {\n type ChangeEvent,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {useActiveWorkspace, useTranslation} from 'sanity'\n\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type PreviewUrlRef} from '../machines/preview-url'\nimport {useAllowPatterns} from '../useAllowPatterns'\nimport {useTargetOrigin} from '../useTargetOrigin'\n\nexport function PreviewLocationInput(props: {\n fontSize?: number\n onChange: (value: string) => void\n previewUrlRef: PreviewUrlRef\n padding?: number\n prefix?: ReactNode\n suffix?: ReactNode\n value: string\n}): React.JSX.Element {\n const {fontSize = 1, onChange, padding = 3, prefix, suffix, value, previewUrlRef} = props\n const allowOrigins = useAllowPatterns(previewUrlRef)\n const targetOrigin = useTargetOrigin(previewUrlRef)\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const {basePath = '/'} = useActiveWorkspace()?.activeWorkspace || {}\n\n const inputRef = useRef<HTMLInputElement | null>(null)\n const [sessionValue, setSessionValue] = useState<string | undefined>(undefined)\n const [customValidity, setCustomValidity] = useState<string | undefined>(undefined)\n\n const handleChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setSessionValue(event.currentTarget.value)\n }, [])\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n if (sessionValue === undefined) {\n return\n }\n\n let absoluteValue = sessionValue\n try {\n absoluteValue = new URL(sessionValue, targetOrigin).toString()\n } catch {\n // ignore\n }\n\n if (Array.isArray(allowOrigins)) {\n if (!allowOrigins.some((pattern) => pattern.test(absoluteValue))) {\n setCustomValidity(\n t('preview-location-input.error', {\n origin: targetOrigin,\n context: 'origin-not-allowed',\n }),\n )\n event.currentTarget.reportValidity()\n return\n }\n // `origin` is an empty string '' if the Studio is embedded, and that's when we need to protect against recursion\n } else if (\n !targetOrigin &&\n (absoluteValue.startsWith(`${basePath}/`) || absoluteValue === basePath)\n ) {\n setCustomValidity(\n t('preview-location-input.error', {basePath, context: 'same-base-path'}),\n )\n return\n }\n\n const nextValue = absoluteValue === targetOrigin ? `${targetOrigin}/` : absoluteValue\n\n setCustomValidity(undefined)\n setSessionValue(undefined)\n\n onChange(nextValue)\n\n inputRef.current?.blur()\n }\n\n if (event.key === 'Escape') {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }\n },\n [allowOrigins, basePath, onChange, sessionValue, t, targetOrigin],\n )\n\n const handleBlur = useCallback(() => {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }, [])\n\n const handleClear = useCallback(() => {\n setCustomValidity(undefined)\n let nextValue = value\n try {\n nextValue = new URL(value, targetOrigin).toString()\n } catch {\n // ignore\n }\n setSessionValue(nextValue)\n }, [targetOrigin, value])\n\n useEffect(() => {\n setCustomValidity(undefined)\n setSessionValue(undefined)\n }, [targetOrigin, value])\n\n const resetButton: TextInputClearButtonProps = useMemo(() => ({icon: ResetIcon}), [])\n\n return (\n <>\n <TextInput\n clearButton={customValidity ? resetButton : undefined}\n customValidity={customValidity}\n fontSize={fontSize}\n onBlur={handleBlur}\n onClear={handleClear}\n onChange={handleChange}\n onKeyDownCapture={handleKeyDown}\n padding={padding}\n prefix={prefix}\n style={{zIndex: 1}}\n radius={2}\n ref={inputRef}\n space={padding}\n suffix={suffix}\n value={sessionValue === undefined ? new URL(value, targetOrigin).toString() : sessionValue}\n />\n </>\n )\n}\n","/* eslint-disable @typescript-eslint/no-shadow,no-negated-condition,no-nested-ternary */\nimport {type ClientPerspective, type SyncTag} from '@sanity/client'\nimport {CopyIcon, ShareIcon} from '@sanity/icons'\nimport {SanityMonogram} from '@sanity/logos'\nimport {fetchSharedAccessQuery} from '@sanity/preview-url-secret/constants'\nimport {\n disablePreviewAccessSharing,\n enablePreviewAccessSharing,\n} from '@sanity/preview-url-secret/toggle-preview-access-sharing'\nimport {setSecretSearchParams} from '@sanity/preview-url-secret/without-secret-search-params'\nimport {\n Box,\n Card,\n Grid,\n Menu,\n MenuDivider,\n Spinner,\n Stack,\n Switch,\n Text,\n useToast,\n} from '@sanity/ui'\nimport {AnimatePresence, motion} from 'framer-motion'\nimport {lazy, memo, Suspense, useCallback, useEffect, useMemo, useState} from 'react'\nimport {useClient, useCurrentUser, useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {Button, MenuButton, MenuItem, Tooltip} from '../../ui-components'\nimport {API_VERSION} from '../constants'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {type PreviewProps} from './Preview'\n\nconst QRCodeSVG = lazy(() => import('./QRCodeSVG'))\n\nexport interface SharePreviewMenuProps {\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n previewLocationRoute: string\n initialUrl: PreviewProps['initialUrl']\n perspective: ClientPerspective\n}\n\nconst QrCodeLogoSize = 24\nconst QrCodeLogoPadding = 16\nconst QrSize = 224\n\nconst StyledSanityMonogram = styled(SanityMonogram)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n height: ${QrCodeLogoSize}px;\n width: ${QrCodeLogoSize}px;\n`\n\nconst MotionSpinner = motion.create(Spinner)\nconst MotionText = motion.create(Text)\nconst MotionMonogram = motion.create(StyledSanityMonogram)\n\nexport const SharePreviewMenu = memo(function SharePreviewMenuComponent(\n props: SharePreviewMenuProps,\n) {\n const {\n canToggleSharePreviewAccess,\n canUseSharedPreviewAccess,\n initialUrl,\n previewLocationRoute,\n perspective,\n } = props\n const {t} = useTranslation(presentationLocaleNamespace)\n const {push: pushToast} = useToast()\n const client = useClient({apiVersion: API_VERSION})\n const currentUser = useCurrentUser()\n const [loading, setLoading] = useState(true)\n const [enabling, setEnabling] = useState(false)\n const [disabling, setDisabling] = useState(false)\n const [secret, setSecret] = useState<string | null>(null)\n const busy = enabling || disabling || loading\n const url = useMemo(\n () =>\n secret\n ? setSecretSearchParams(\n initialUrl,\n secret,\n previewLocationRoute,\n encodeStudioPerspective(perspective),\n )\n : null,\n [initialUrl, perspective, previewLocationRoute, secret],\n )\n\n const [error, setError] = useState<unknown>(null)\n if (error) {\n throw error\n }\n\n const handleUnableToToggle = useCallback(() => {\n pushToast({\n closable: true,\n status: 'warning',\n title: t('share-preview-menu.error_toggle-sharing', {context: 'toggle-sharing'}),\n })\n }, [pushToast, t])\n\n const handleDisableSharing = useCallback(async () => {\n try {\n setDisabling(true)\n await disablePreviewAccessSharing(\n client,\n 'sanity/presentation',\n typeof window === 'undefined' ? '' : location.href,\n currentUser?.id,\n )\n setSecret(null)\n } catch (error) {\n setError(error)\n } finally {\n setDisabling(false)\n }\n }, [client, currentUser?.id])\n const handleEnableSharing = useCallback(async () => {\n try {\n setEnabling(true)\n\n const previewUrlSecret = await enablePreviewAccessSharing(\n client,\n 'sanity/presentation',\n typeof window === 'undefined' ? '' : location.href,\n currentUser?.id,\n )\n setSecret(previewUrlSecret.secret)\n } catch (error) {\n setError(error)\n } finally {\n setEnabling(false)\n }\n }, [client, currentUser?.id])\n\n const handleCopyUrl = useCallback(() => {\n try {\n if (!url) {\n throw new Error('No URL to copy')\n }\n navigator.clipboard.writeText(url.toString())\n pushToast({\n closable: true,\n status: 'success',\n title: t('share-url.clipboard.status', {context: 'success'}),\n })\n } catch (error) {\n setError(error)\n }\n }, [pushToast, t, url])\n\n useEffect(() => {\n let controller = new AbortController()\n let usedTags: SyncTag[] = []\n async function fetchShareSecret(lastLiveEventId: string | null, signal: AbortSignal) {\n const {result, syncTags} = await client.fetch<string | null>(\n fetchSharedAccessQuery,\n {},\n {filterResponse: false, lastLiveEventId, tag: 'presentation.fetch-shared-access-secret'},\n )\n if (Array.isArray(syncTags)) {\n usedTags = syncTags\n }\n if (!signal.aborted) {\n setSecret(result)\n }\n }\n const subscription = client.live.events().subscribe({\n next: (event) => {\n if (event.type === 'message') {\n controller.abort()\n controller = new AbortController()\n if (event.tags.some((tag) => usedTags.includes(tag))) {\n fetchShareSecret(event.id, controller.signal)\n }\n }\n },\n error: setError,\n })\n\n fetchShareSecret(null, controller.signal).finally(() => setLoading(false))\n\n return () => {\n subscription.unsubscribe()\n controller.abort()\n }\n }, [client])\n\n return (\n <MenuButton\n button={\n <Button\n aria-label={t('preview-frame.share-button.aria-label')}\n icon={ShareIcon}\n mode=\"bleed\"\n tooltipProps={null}\n />\n }\n id=\"share-menu\"\n menu={\n <Menu style={{maxWidth: 248}} padding={canUseSharedPreviewAccess ? undefined : 0}>\n {canUseSharedPreviewAccess ? (\n <>\n <label style={{cursor: 'pointer'}}>\n <Grid\n columns={2}\n rows={2}\n gapX={3}\n gapY={1}\n style={{\n justifyContent: 'center',\n alignItems: 'center',\n gridTemplateColumns: 'min-content 1fr',\n gridTemplateRows: 'min-content',\n }}\n paddingTop={3}\n paddingX={3}\n >\n <Tooltip\n animate\n content={\n <Text size={1}>\n {t('share-preview-menu.toggle-button.tooltip', {\n context: url ? 'disable' : 'enable',\n })}\n </Text>\n }\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Switch\n checked={enabling || (url !== null && !disabling)}\n readOnly={enabling || disabling}\n indeterminate={loading}\n onChange={\n !canToggleSharePreviewAccess\n ? handleUnableToToggle\n : url\n ? handleDisableSharing\n : handleEnableSharing\n }\n />\n </Tooltip>\n <Text size={1} weight=\"medium\">\n {t('share-preview-menu.toggle-button.label', {context: 'first-line'})}\n </Text>\n <span />\n <Text muted size={1}>\n {t('share-preview-menu.toggle-button.label', {context: 'second-line'})}\n </Text>\n </Grid>\n </label>\n <Box padding={3} paddingTop={2}>\n <Stack space={3}>\n <Card\n tone={busy || !url ? 'transparent' : undefined}\n style={{\n position: 'relative',\n aspectRatio: '1 / 1',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <AnimatePresence>\n {busy ? (\n <MotionSpinner\n muted\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n exit={{opacity: 0}}\n />\n ) : url ? (\n <>\n <Suspense fallback={<Spinner />}>\n <QRCodeSVG\n title={t('share-preview-menu.qr-code.title', {url: url.toString()})}\n value={url.toString()}\n size={QrSize}\n color=\"var(--card-fg-color)\"\n logoSize={QrCodeLogoSize + QrCodeLogoPadding}\n />\n <MotionMonogram\n initial={{opacity: -0.5}}\n animate={{opacity: 1.5}}\n exit={{opacity: 0}}\n />\n </Suspense>\n </>\n ) : (\n <MotionText\n muted\n size={1}\n style={{maxWidth: '100px', textWrap: 'pretty', textAlign: 'center'}}\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n exit={{opacity: 0}}\n >\n {t('share-preview-menu.qr-code.placeholder')}\n </MotionText>\n )}\n </AnimatePresence>\n </Card>\n <Text muted size={1}>\n {t('share-preview-menu.qr-code.instructions')}\n </Text>\n </Stack>\n </Box>\n <MenuDivider />\n <MenuItem\n disabled={!url || disabling}\n icon={CopyIcon}\n onClick={handleCopyUrl}\n text={t('share-preview-menu.copy-url.text')}\n />\n </>\n ) : (\n <Card padding={2} tone=\"caution\" radius={3}>\n <Text style={{textWrap: 'pretty'}}>\n {t('share-preview-menu.error', {context: 'missing-grants'})}\n </Text>\n </Card>\n )}\n </Menu>\n }\n popover={{\n constrainSize: true,\n placement: 'bottom',\n portal: true,\n }}\n />\n )\n})\nSharePreviewMenu.displayName = 'Memo(SharePreviewMenu)'\n","/* eslint-disable no-nested-ternary */\nimport {DesktopIcon, MobileDeviceIcon, PanelLeftIcon, RefreshIcon} from '@sanity/icons'\nimport {withoutSecretSearchParams} from '@sanity/preview-url-secret/without-secret-search-params'\nimport {Box, Card, Flex, Hotkeys, Switch, Text} from '@sanity/ui'\nimport {useSelector} from '@xstate/react'\nimport {type RefObject, useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type HeaderOptions} from '../types'\nimport {useId} from '../useId'\nimport {OpenPreviewButton} from './OpenPreviewButton'\nimport {type PreviewProps} from './Preview'\nimport {PreviewLocationInput} from './PreviewLocationInput'\nimport {SharePreviewMenu} from './SharePreviewMenu'\n\n/** @public */\nexport interface PreviewHeaderProps extends PreviewProps {\n iframeRef: RefObject<HTMLIFrameElement | null>\n renderDefault: (props: PreviewHeaderProps) => React.JSX.Element\n}\n\nconst PreviewHeaderDefault = (props: Omit<PreviewHeaderProps, 'renderDefault'>) => {\n const {\n canSharePreviewAccess,\n canToggleSharePreviewAccess,\n canUseSharedPreviewAccess,\n iframeRef,\n initialUrl,\n navigatorEnabled,\n onPathChange,\n onRefresh,\n openPopup,\n overlaysConnection,\n presentationRef,\n perspective,\n previewUrl,\n setViewport,\n targetOrigin,\n toggleNavigator,\n toggleOverlay,\n viewport,\n previewUrlRef,\n } = props\n\n const {t} = useTranslation(presentationLocaleNamespace)\n\n const toggleViewportSize = useCallback(\n () => setViewport(viewport === 'desktop' ? 'mobile' : 'desktop'),\n [setViewport, viewport],\n )\n\n const previewLocationOrigin = useMemo(() => {\n return targetOrigin === location.origin ? '' : targetOrigin\n }, [targetOrigin])\n\n const handleRefresh = () => {\n onRefresh(() => {\n if (!iframeRef.current) {\n return\n }\n presentationRef.send({type: 'iframe reload'})\n // Funky way to reload an iframe without CORS issues\n // 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 isLoading = useSelector(presentationRef, (state) => state.matches('loading'))\n const isLoaded = useSelector(presentationRef, (state) => state.matches('loaded'))\n const isRefreshing = useSelector(presentationRef, (state) =>\n state.matches({loaded: 'refreshing'}),\n )\n const isReloading = useSelector(presentationRef, (state) => state.matches({loaded: 'reloading'}))\n const overlaysEnabled = useSelector(\n presentationRef,\n (state) => state.context.visualEditingOverlaysEnabled,\n )\n\n const previewLocationRoute = useMemo(() => {\n const previewURL = new URL(previewUrl || '/', targetOrigin)\n const {pathname, search} = withoutSecretSearchParams(previewURL)\n\n return `${pathname}${search}`\n }, [previewUrl, targetOrigin])\n\n const perspectiveToggleTooltipId = useId()\n\n /**\n * If the preview URL machine is busy it means it's about to change the target origin and reload the iframe,\n * so we show a spinner\n */\n const previewUrlBusy = useSelector(previewUrlRef, (state) => state.hasTag('busy'))\n\n return (\n <Flex align=\"center\" gap={1} paddingX={1} style={{width: '100%'}}>\n {toggleNavigator && (\n <Button\n aria-label={t('preview-frame.navigator.toggle-button.aria-label')}\n icon={PanelLeftIcon}\n mode=\"bleed\"\n onClick={toggleNavigator}\n selected={navigatorEnabled}\n tooltipProps={{\n content: <Text size={1}>{t('preview-frame.navigator.toggle-button.tooltip')}</Text>,\n fallbackPlacements: ['bottom-start'],\n placement: 'bottom',\n }}\n />\n )}\n\n <Tooltip\n animate\n content={\n <Flex align=\"center\" style={{whiteSpace: 'nowrap'}}>\n <Box padding={1}>\n <Text size={1}>\n {t('preview-frame.overlay.toggle-button.tooltip', {\n context: overlaysEnabled ? 'disable' : 'enable',\n })}\n </Text>\n </Box>\n <Box paddingY={1}>\n <Hotkeys keys={['Alt']} style={{marginTop: -4, marginBottom: -4}} />\n </Box>\n </Flex>\n }\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Card\n as=\"label\"\n flex=\"none\"\n padding={3}\n marginX={1}\n style={{\n lineHeight: 0,\n borderRadius: 999,\n userSelect: 'none',\n }}\n tone={overlaysEnabled ? 'transparent' : undefined}\n >\n <Flex align=\"center\" gap={3}>\n <div style={{margin: -4}}>\n <Switch\n indeterminate={!isLoaded}\n checked={overlaysEnabled}\n onChange={toggleOverlay}\n disabled={isLoading || overlaysConnection !== 'connected'}\n />\n </div>\n <Box>\n <Text muted={!overlaysEnabled} size={1} weight=\"medium\">\n {t('preview-frame.overlay.toggle-button.text')}\n </Text>\n </Box>\n </Flex>\n </Card>\n </Tooltip>\n\n <Box flex={1}>\n <PreviewLocationInput\n previewUrlRef={previewUrlRef}\n prefix={\n <Box padding={1}>\n <Tooltip\n animate\n content={\n <Text size={1}>\n {isLoaded\n ? t('preview-frame.refresh-button.tooltip')\n : t('preview-frame.status', {\n context: isLoading\n ? 'loading'\n : isRefreshing\n ? 'refreshing'\n : isReloading\n ? 'reloading'\n : 'unknown',\n })}\n </Text>\n }\n fallbackPlacements={['bottom-end']}\n placement=\"bottom\"\n portal\n >\n <Button\n aria-label={t('preview-frame.refresh-button.aria-label')}\n icon={RefreshIcon}\n mode=\"bleed\"\n loading={isReloading || isRefreshing || previewUrlBusy}\n onClick={handleRefresh}\n tooltipProps={null}\n />\n </Tooltip>\n </Box>\n }\n onChange={onPathChange}\n suffix={\n <Box padding={1}>\n <OpenPreviewButton\n openPopup={openPopup}\n previewLocationOrigin={previewLocationOrigin}\n previewLocationRoute={previewLocationRoute}\n perspective={perspective}\n targetOrigin={targetOrigin}\n />\n </Box>\n }\n value={previewLocationRoute}\n />\n </Box>\n\n <Flex align=\"center\" flex=\"none\" gap={1}>\n <Tooltip\n animate\n // eslint-disable-next-line react/jsx-no-bind\n ref={(node) => {\n node?.style.setProperty('view-transition-name', perspectiveToggleTooltipId)\n }}\n content={\n <Text size={1}>\n {t('preview-frame.viewport-button.tooltip', {\n context: viewport === 'desktop' ? 'narrow' : 'full',\n })}\n </Text>\n }\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Button\n data-testid=\"preview-viewport-toggle\"\n data-viewport={viewport}\n aria-label={t('preview-frame.viewport-button.aria-label')}\n icon={viewport === 'desktop' ? MobileDeviceIcon : DesktopIcon}\n mode=\"bleed\"\n onClick={toggleViewportSize}\n tooltipProps={null}\n />\n </Tooltip>\n </Flex>\n\n {canSharePreviewAccess && (\n <Flex align=\"center\" flex=\"none\" gap={1}>\n <SharePreviewMenu\n canToggleSharePreviewAccess={canToggleSharePreviewAccess}\n canUseSharedPreviewAccess={canUseSharedPreviewAccess}\n previewLocationRoute={previewLocationRoute}\n initialUrl={initialUrl}\n perspective={perspective}\n />\n </Flex>\n )}\n </Flex>\n )\n}\n\n/** @internal */\nexport function PreviewHeader(\n props: Omit<PreviewHeaderProps, 'renderDefault'> & {options?: HeaderOptions},\n): React.JSX.Element {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const renderDefault = useCallback((props: Omit<PreviewHeaderProps, 'renderDefault'>) => {\n return <PreviewHeaderDefault {...props} />\n }, [])\n\n const HeaderComponent = props.options?.component\n const header = HeaderComponent ? (\n <HeaderComponent {...props} renderDefault={renderDefault} />\n ) : (\n renderDefault(props)\n )\n\n return (\n <Card flex=\"none\" padding={2} borderBottom style={{position: 'relative'}}>\n <Flex align=\"center\" style={{minHeight: 0}}>\n {header}\n </Flex>\n </Card>\n )\n}\n","/* eslint-disable react/no-unused-prop-types,no-nested-ternary */\nimport {createConnectionMachine, createController} from '@sanity/comlink'\nimport {\n createCompatibilityActors,\n type VisualEditingControllerMsg,\n type VisualEditingNodeMsg,\n} from '@sanity/presentation-comlink'\nimport {\n urlSearchParamPreviewPerspective,\n urlSearchParamVercelProtectionBypass,\n urlSearchParamVercelSetBypassCookie,\n type VercelSetBypassCookieValue,\n} from '@sanity/preview-url-secret/constants'\nimport {\n Card,\n Code,\n Flex,\n Label,\n Spinner,\n Stack,\n Text,\n usePrefersReducedMotion,\n useToast,\n} from '@sanity/ui'\nimport {useSelector} from '@xstate/react'\nimport {AnimatePresence, motion, MotionConfig} from 'framer-motion'\nimport {\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react'\nimport {flushSync} from 'react-dom'\nimport {Translate, useTranslation} from 'sanity'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {Button, TooltipDelayGroupProvider} from '../../ui-components'\nimport {ErrorCard} from '../components/ErrorCard'\nimport {MAX_TIME_TO_OVERLAYS_CONNECTION} from '../constants'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type PresentationMachineRef} from '../machines/presentation-machine'\nimport {type PreviewUrlRef} from '../machines/preview-url'\nimport {\n type ConnectionStatus,\n type HeaderOptions,\n type PresentationPerspective,\n type PresentationViewport,\n} from '../types'\nimport {useAllowPatterns} from '../useAllowPatterns'\nimport {usePresentationNavigate} from '../usePresentationNavigate'\nimport {usePresentationTool} from '../usePresentationTool'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {IFrame} from './IFrame'\nimport {PreviewHeader} from './PreviewHeader'\n\nconst MotionFlex = motion.create(Flex)\n\n/** @public */\nexport interface PreviewProps {\n canSharePreviewAccess: boolean\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n header?: HeaderOptions\n initialUrl: URL\n loadersConnection: ConnectionStatus\n navigatorEnabled: boolean\n onPathChange: (nextPath: string) => void\n onRefresh: (fallback: () => void) => void\n openPopup: (url: string) => void\n overlaysConnection: ConnectionStatus\n presentationRef: PresentationMachineRef\n perspective: PresentationPerspective\n previewUrl?: string\n setViewport: (mode: 'desktop' | 'mobile') => void\n targetOrigin: string\n toggleNavigator?: () => void\n toggleOverlay: () => void\n viewport: PresentationViewport\n vercelProtectionBypass: string | null\n previewUrlRef: PreviewUrlRef\n}\n\nexport const Preview = memo(\n forwardRef<HTMLIFrameElement, PreviewProps>(function PreviewComponent(props, forwardedRef) {\n const {\n header,\n initialUrl,\n loadersConnection,\n overlaysConnection,\n perspective,\n viewport,\n vercelProtectionBypass,\n presentationRef,\n previewUrlRef,\n } = props\n\n const [stablePerspective, setStablePerspective] = useState<typeof perspective | null>(null)\n const urlPerspective = encodeStudioPerspective(\n stablePerspective === null ? perspective : stablePerspective,\n )\n const previewUrl = useMemo(() => {\n const url = new URL(initialUrl)\n // Always set the perspective that's being used, even if preview mode isn't configured\n if (!url.searchParams.get(urlSearchParamPreviewPerspective)) {\n url.searchParams.set(urlSearchParamPreviewPerspective, urlPerspective)\n }\n\n if (vercelProtectionBypass || url.searchParams.get(urlSearchParamVercelProtectionBypass)) {\n // samesitenone is required since the request is from an iframe\n url.searchParams.set(\n urlSearchParamVercelSetBypassCookie,\n 'samesitenone' satisfies VercelSetBypassCookieValue,\n )\n }\n // If there's a vercel protection bypass secret in the context, set it if none exists already\n if (vercelProtectionBypass && !url.searchParams.get(urlSearchParamVercelProtectionBypass)) {\n url.searchParams.set(urlSearchParamVercelProtectionBypass, vercelProtectionBypass)\n }\n\n return url\n }, [initialUrl, urlPerspective, vercelProtectionBypass])\n\n useEffect(() => {\n /**\n * If the preview iframe is connected to the loader, we know that switching the perspective can be done without reloading the iframe.\n */\n if (loadersConnection === 'connected') {\n /**\n * Only set the stable perspective if it hasn't been set yet.\n */\n setStablePerspective((prev) => (prev === null ? perspective : prev))\n }\n }, [loadersConnection, perspective])\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const {devMode} = usePresentationTool()\n const prefersReducedMotion = usePrefersReducedMotion()\n const ref = useRef<HTMLIFrameElement | null>(null)\n\n const previewHeader = <PreviewHeader {...props} iframeRef={ref} options={header} />\n\n // Forward the iframe ref to the parent component\n useImperativeHandle<HTMLIFrameElement | null, HTMLIFrameElement | null>(\n forwardedRef,\n () => ref.current,\n )\n\n const isLoading = useSelector(\n presentationRef,\n (state) => state.matches('loading') || state.matches({loaded: 'reloading'}),\n )\n\n const [timedOut, setTimedOut] = useState(false)\n const isRefreshing = useSelector(presentationRef, (state) =>\n state.matches({loaded: 'refreshing'}),\n )\n const [somethingIsWrong, setSomethingIsWrong] = useState(false)\n const iframeIsBusy = isLoading || isRefreshing || overlaysConnection === 'connecting'\n\n const handleRetry = useCallback(() => {\n if (!ref.current) {\n return\n }\n\n ref.current.src = previewUrl.toString()\n\n presentationRef.send({type: 'iframe reload'})\n }, [presentationRef, previewUrl])\n const handleContinueAnyway = useCallback(() => {\n setContinueAnyway(true)\n }, [])\n\n const [continueAnyway, setContinueAnyway] = useState(false)\n const [showOverlaysConnectionStatus, setShowOverlaysConnectionState] = useState(false)\n useEffect(() => {\n if (isLoading || isRefreshing) {\n return undefined\n }\n\n if (overlaysConnection === 'connecting' || overlaysConnection === 'reconnecting') {\n const timeout = setTimeout(() => {\n setShowOverlaysConnectionState(true)\n }, 5_000)\n return () => clearTimeout(timeout)\n }\n return undefined\n }, [overlaysConnection, isLoading, isRefreshing])\n\n useEffect(() => {\n if (isLoading || isRefreshing || !showOverlaysConnectionStatus) {\n return undefined\n }\n if (overlaysConnection === 'connected') {\n setSomethingIsWrong(false)\n setShowOverlaysConnectionState(false)\n setTimedOut(false)\n setContinueAnyway(false)\n }\n if (overlaysConnection === 'connecting') {\n const timeout = setTimeout(() => {\n setTimedOut(true)\n // 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 }, [isLoading, overlaysConnection, isRefreshing, showOverlaysConnectionStatus])\n\n const onIFrameLoad = useCallback(() => {\n presentationRef.send({type: 'iframe loaded'})\n }, [presentationRef])\n\n const preventIframeInteraction = useMemo(() => {\n return (\n (isLoading || (overlaysConnection === 'connecting' && !isRefreshing)) && !continueAnyway\n )\n }, [continueAnyway, isLoading, isRefreshing, overlaysConnection])\n\n const canUseViewTransition = useSyncExternalStore(\n // eslint-disable-next-line no-empty-function\n useCallback(() => () => {}, []),\n () => CSS.supports(`(view-transition-name: test)`),\n )\n const iframeAnimations = useMemo(() => {\n return [\n preventIframeInteraction ? 'background' : 'active',\n isLoading ? 'reloading' : 'idle',\n // If CSS View Transitions are supported, then transition iframe viewport dimensions with that instead of Motion\n canUseViewTransition ? '' : viewport,\n showOverlaysConnectionStatus && !continueAnyway ? 'timedOut' : '',\n ]\n }, [\n canUseViewTransition,\n continueAnyway,\n isLoading,\n preventIframeInteraction,\n showOverlaysConnectionStatus,\n viewport,\n ])\n\n const [currentViewport, setCurrentViewport] = useState(viewport)\n const [iframeStyle, setIframeStyle] = useState(iframeVariants[viewport])\n useEffect(() => {\n if (canUseViewTransition && viewport !== currentViewport) {\n const update = () => {\n setCurrentViewport(viewport)\n setIframeStyle(iframeVariants[viewport])\n }\n if (\n !prefersReducedMotion &&\n 'startViewTransition' in document &&\n typeof document.startViewTransition === 'function'\n ) {\n document.startViewTransition({\n // @ts-expect-error - fix typings\n update: () => flushSync(() => update()),\n types: ['sanity-iframe-viewport'],\n })\n } else {\n update()\n }\n }\n }, [canUseViewTransition, prefersReducedMotion, currentViewport, viewport])\n\n const toast = useToast()\n const allowOrigins = useAllowPatterns(previewUrlRef)\n const [checkOrigin, setCheckOrigin] = useState<false | string>(false)\n const [reportedMismatches] = useState(new Set<string>())\n const reportMismatchingOrigin = useEffectEvent((reportedOrigin: string) => {\n if (allowOrigins.some((allow) => allow.test(reportedOrigin))) {\n setCheckOrigin(reportedOrigin)\n return\n }\n if (reportedMismatches.has(reportedOrigin)) return\n reportedMismatches.add(reportedOrigin)\n console.warn('Visual Editing is here but misconfigured', {reportedOrigin})\n toast.push({\n closable: true,\n id: `presentation-iframe-origin-mismatch-${reportedOrigin}`,\n status: 'error',\n duration: Infinity,\n title: t('preview-frame.configuration.error.title'),\n description: (\n <Translate\n t={t}\n i18nKey=\"preview-frame.configuration.error.description\"\n components={{Code: 'code'}}\n values={{\n targetOrigin: previewUrl.origin,\n reportedOrigin,\n }}\n />\n ),\n })\n })\n const navigate = usePresentationNavigate()\n const navigateEvent = useEffectEvent((url: string) => {\n if (!checkOrigin) return\n const nextUrl = new URL(url, checkOrigin)\n navigate(`${checkOrigin}${nextUrl.pathname}${nextUrl.search}${nextUrl.hash}`)\n })\n useEffect(() => {\n if (!checkOrigin) {\n return undefined\n }\n const target = ref.current?.contentWindow\n if (!target) {\n return undefined\n }\n const controller = createController({targetOrigin: checkOrigin})\n controller.addTarget(target)\n const comlink = controller.createChannel<VisualEditingControllerMsg, VisualEditingNodeMsg>(\n {\n name: 'presentation',\n heartbeat: true,\n connectTo: 'visual-editing',\n },\n createConnectionMachine<VisualEditingControllerMsg, VisualEditingNodeMsg>().provide({\n actors: createCompatibilityActors<VisualEditingControllerMsg>(),\n }),\n )\n\n comlink.on('visual-editing/navigate', (data) => {\n navigateEvent(data.url)\n })\n const stop = comlink.start()\n\n return () => {\n stop()\n controller.destroy()\n }\n }, [checkOrigin])\n useEffect(() => {\n if (overlaysConnection === 'connecting' || overlaysConnection === 'reconnecting') {\n const interval = setInterval(() => {\n ref.current?.contentWindow?.postMessage(\n {domain: 'sanity/channels', from: 'presentation', type: 'presentation/status'},\n /**\n * The targetOrigin is set to '*' intentionally here, as we need to find out if the iframe is misconfigured and has the wrong origin\n */\n '*',\n )\n }, 1_000)\n\n const controller = new AbortController()\n window.addEventListener(\n 'message',\n ({data}: MessageEvent<unknown>) => {\n /**\n * Listen for replies to presentation/status\n */\n if (\n data &&\n typeof data === 'object' &&\n 'domain' in data &&\n data.domain === 'sanity/channels' &&\n 'type' in data &&\n data.type === 'visual-editing/status' &&\n 'data' in data &&\n typeof data.data === 'object' &&\n data.data &&\n 'origin' in data.data &&\n typeof data.data.origin === 'string'\n ) {\n reportMismatchingOrigin(data.data.origin)\n }\n },\n {signal: controller.signal},\n )\n\n return () => {\n controller.abort()\n clearInterval(interval)\n }\n }\n return undefined\n }, [overlaysConnection, timedOut])\n\n return (\n <MotionConfig transition={prefersReducedMotion ? {duration: 0} : undefined}>\n <TooltipDelayGroupProvider>\n {previewHeader}\n <Card flex={1} tone=\"transparent\">\n <Flex\n align=\"center\"\n height=\"fill\"\n justify=\"center\"\n padding={(canUseViewTransition ? currentViewport : viewport) === 'desktop' ? 0 : 2}\n sizing=\"border\"\n style={{\n position: 'relative',\n cursor: iframeIsBusy ? 'wait' : undefined,\n }}\n >\n <AnimatePresence>\n {!somethingIsWrong &&\n !isLoading &&\n !isRefreshing &&\n // viewport, // using CSS View Transitions instead of framer motion to drive this\n showOverlaysConnectionStatus &&\n !continueAnyway ? (\n <MotionFlex\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n variants={spinnerVariants}\n justify=\"center\"\n align=\"center\"\n style={{\n inset: '0',\n position: 'absolute',\n backdropFilter: timedOut\n ? 'blur(16px) saturate(0.5) grayscale(0.5)'\n : 'blur(2px)',\n ['transition' as string]: 'backdrop-filter 0.2s ease-in-out',\n // @TODO Because of Safari we have to do this\n WebkitBackdropFilter: timedOut\n ? 'blur(16px) saturate(0.5) grayscale(0.5)'\n : 'blur(2px)',\n WebkitTransition: '-webkit-backdrop-filter 0.2s ease-in-out',\n zIndex: 1,\n }}\n >\n <Flex\n style={{...sizes[viewport]}}\n justify=\"center\"\n align=\"center\"\n direction=\"column\"\n gap={4}\n >\n {timedOut && (\n <Button\n disabled\n mode=\"ghost\"\n text={t('preview-frame.continue-button.text')}\n style={{opacity: 0}}\n />\n )}\n <Card\n radius={2}\n tone={timedOut ? 'caution' : 'inherit'}\n padding={4}\n shadow={1}\n >\n <Flex justify=\"center\" align=\"center\" direction=\"column\" gap={4}>\n <Spinner muted />\n <Text muted size={1}>\n {timedOut\n ? t('preview-frame.status', {context: 'timeout'})\n : t('preview-frame.status', {context: 'connecting'})}\n </Text>\n </Flex>\n </Card>\n {timedOut && (\n <Button\n // mode=\"ghost\"\n tone=\"critical\"\n onClick={handleContinueAnyway}\n text={t('preview-frame.continue-button.text')}\n />\n )}\n </Flex>\n </MotionFlex>\n ) : (isLoading || (overlaysConnection === 'connecting' && !isRefreshing)) &&\n !continueAnyway ? (\n <MotionFlex\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n variants={spinnerVariants}\n justify=\"center\"\n align=\"center\"\n style={{\n inset: '0',\n position: 'absolute',\n // boxShadow: '0 0 0 1px var(--card-shadow-outline-color)',\n }}\n >\n <Flex\n style={{...sizes[viewport]}}\n justify=\"center\"\n align=\"center\"\n direction=\"column\"\n gap={4}\n >\n <Spinner muted />\n <Text muted size={1}>\n {t('preview-frame.status', {context: 'loading'})}\n </Text>\n </Flex>\n </MotionFlex>\n ) : somethingIsWrong && !continueAnyway ? (\n <MotionFlex\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n variants={errorVariants}\n justify=\"center\"\n align=\"center\"\n style={{\n background: 'var(--card-bg-color)',\n inset: '0',\n position: 'absolute',\n }}\n >\n <ErrorCard\n flex={1}\n message={t('preview-frame.connection.error.text')}\n onRetry={handleRetry}\n onContinueAnyway={handleContinueAnyway}\n >\n {devMode && (\n <>\n {overlaysConnection !== 'connected' && (\n <Card padding={3} radius={2} tone=\"critical\">\n <Stack space={3}>\n <Label muted size={0}>\n {t('preview-frame.overlay.connection-status.label')}\n </Label>\n <Code size={1}>\n {t('channel.status', {context: overlaysConnection})}\n </Code>\n </Stack>\n </Card>\n )}\n\n {loadersConnection !== 'connected' && (\n <Card padding={3} radius={2} tone=\"critical\">\n <Stack space={3}>\n <Label muted size={0}>\n {t('preview-frame.loader.connection-status.label')}\n </Label>\n <Code size={1}>\n {t('channel.status', {context: loadersConnection})}\n </Code>\n </Stack>\n </Card>\n )}\n </>\n )}\n </ErrorCard>\n </MotionFlex>\n ) : null}\n </AnimatePresence>\n <IFrame\n animate={iframeAnimations}\n initial={['background']}\n onLoad={onIFrameLoad}\n preventClick={preventIframeInteraction}\n ref={ref}\n src={previewUrl.toString()}\n style={iframeStyle}\n variants={iframeVariants}\n />\n </Flex>\n </Card>\n </TooltipDelayGroupProvider>\n </MotionConfig>\n )\n }),\n)\nPreview.displayName = 'Memo(ForwardRef(Preview))'\n\nconst sizes = {\n desktop: {\n width: '100%',\n height: '100%',\n },\n mobile: {\n width: 375,\n height: 650,\n },\n}\n\nconst spinnerVariants = {\n initial: {opacity: 1},\n animate: {opacity: [0, 0, 1]},\n exit: {opacity: [1, 0, 0]},\n}\n\nconst errorVariants = {\n initial: {opacity: 1},\n animate: {opacity: [0, 0, 1]},\n exit: {opacity: [1, 0, 0]},\n}\n\nconst iframeVariants = {\n desktop: {\n ...sizes.desktop,\n boxShadow: '0 0 0 0px var(--card-border-color)',\n },\n mobile: {\n ...sizes.mobile,\n boxShadow: '0 0 0 1px var(--card-border-color)',\n },\n background: {\n opacity: 0,\n scale: 1,\n },\n idle: {\n scale: 1,\n },\n reloading: {\n scale: [1, 1, 1, 0.98],\n },\n active: {\n opacity: [0, 0, 1],\n scale: 1,\n },\n timedOut: {\n opacity: [0, 0, 1],\n },\n}\n","/** @internal */\nexport function defineWarnOnce() {\n let warned = false\n // 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 {validateApiPerspective} from '@sanity/client'\nimport isEqual from 'fast-deep-equal'\nimport {type MutableRefObject, useCallback, useMemo, useRef, useState} from 'react'\n\nimport {type FrameState, type PresentationPerspective} from './types'\nimport {defineWarnOnce} from './util/warnOnce'\n\nexport type DocumentOnPage = {\n _id: string\n _type: string\n}\n\ntype DocumentCache = Record<string, DocumentOnPage>\ntype KeyedDocumentCache = Record<string, DocumentCache>\n\nconst warnOnceAboutCrossDatasetReference = defineWarnOnce()\n\n/**\n * @TODO should be refactored to an lru-cache that is keyed by the perspective, which could be an array (if it is, it should use consistent sorting),\n * and the url path (optionally the origin too), so that swapping between perspectives and urls is fast.\n */\nexport function useDocumentsOnPage(\n perspective: PresentationPerspective,\n frameStateRef: MutableRefObject<FrameState>,\n): [\n DocumentOnPage[],\n (key: string, perspective: PresentationPerspective, state: DocumentOnPage[]) => void,\n] {\n validateApiPerspective(perspective)\n\n const [published, setPublished] = useState<KeyedDocumentCache>({})\n const [previewDrafts, setPreviewDrafts] = useState<KeyedDocumentCache>({})\n\n // Used to compare the frame url with its value when the cache was last updated\n // If the url has changed, the entire cache is replaced\n const urlRef = useRef<string | undefined>('')\n\n const setDocumentsOnPage = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (key: string, perspective: PresentationPerspective, sourceDocuments: DocumentOnPage[] = []) => {\n const documents = sourceDocuments.filter((sourceDocument) => {\n if ('_projectId' in sourceDocument && sourceDocument._projectId) {\n // 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, usePerspective} from 'sanity'\nimport {type RouterState, useRouter} from 'sanity/router'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {API_VERSION} from './constants'\nimport {\n type DocumentResolver,\n type DocumentResolverContext,\n type MainDocument,\n type MainDocumentState,\n type PresentationNavigate,\n} from './types'\n\n// Helper function to \"unwrap\" a result when it is either explicitly provided or\n// returned as the result of a passed function\nfunction fnOrObj<T, U>(arg: T | ((ctx: U) => T), context: U): T {\n return arg instanceof Function ? arg(context) : arg\n}\n\nfunction getQueryFromResult(\n resolver: DocumentResolver,\n context: DocumentResolverContext,\n): string | undefined {\n if (resolver.resolve) {\n const filter = resolver.resolve(context)?.filter\n return filter\n ? `// groq\n*[${filter}][0]{_id, _type}`\n : undefined\n }\n\n if ('type' in resolver) {\n return `// groq\n*[_type == \"${resolver.type}\"][0]{_id, _type}`\n }\n\n return `// groq\n*[${fnOrObj(resolver.filter, context)}][0]{_id, _type}`\n}\n\nfunction getParamsFromResult(\n resolver: DocumentResolver,\n context: DocumentResolverContext,\n): Record<string, string> {\n if (resolver.resolve) {\n return resolver.resolve(context)?.params ?? context.params\n }\n\n if ('type' in resolver) {\n return {}\n }\n\n return fnOrObj(resolver.params, context) ?? context.params\n}\n\nexport function getRouteContext(route: Path, url: URL): DocumentResolverContext | undefined {\n const routes = Array.isArray(route) ? route : [route]\n\n for (route of routes) {\n let origin: DocumentResolverContext['origin'] = 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 targetOrigin: string\n resolvers?: DocumentResolver[]\n}): MainDocumentState | undefined {\n const {navigate, navigationHistory, path, targetOrigin, resolvers = []} = props\n const {state: routerState} = useRouter()\n const {perspectiveStack} = usePerspective()\n const client = useClient({apiVersion: API_VERSION})\n const relativeUrl =\n path || routerState._searchParams?.find(([key]) => key === 'preview')?.[1] || ''\n\n const [mainDocumentState, setMainDocumentState] = useState<MainDocumentState | undefined>(\n undefined,\n )\n const mainDocumentIdRef = useRef<string | undefined>(undefined)\n\n const handleResponse = useEffectEvent((doc: MainDocument | undefined, url: URL) => {\n if (!doc || mainDocumentIdRef.current !== doc._id) {\n setMainDocumentState({\n document: doc,\n path: url.pathname,\n })\n mainDocumentIdRef.current = doc?._id\n\n // We only want to force a navigation to the main document if\n // the path changed but the document ID did not. An explicit\n // document navigation should take precedence over displaying\n // the main document. We determine if an explicit document\n // navigation has occured by comparing the IDs of the last two\n // resultant navigation states.\n if (navigationHistory.at(-1)?.id === navigationHistory.at(-2)?.id) {\n navigate?.({\n id: doc?._id,\n type: doc?._type,\n })\n }\n }\n })\n\n useEffect(() => {\n const url = new URL(relativeUrl, targetOrigin)\n\n if (resolvers.length) {\n let result:\n | {\n context: DocumentResolverContext\n resolver: DocumentResolver\n }\n | undefined\n for (const resolver of resolvers) {\n const context = getRouteContext(resolver.route, url)\n if (context) {\n result = {context, resolver}\n break\n }\n }\n\n if (result) {\n const query = getQueryFromResult(result.resolver, result.context)\n const params = getParamsFromResult(result.resolver, result.context)\n if (query) {\n const controller = new AbortController()\n const options: ResponseQueryOptions = {\n perspective: perspectiveStack,\n signal: controller.signal,\n tag: 'use-main-document',\n }\n\n client\n .fetch<MainDocument | undefined>(query, params, options)\n .then((doc) => handleResponse(doc, url))\n .catch((e) => {\n if (e instanceof Error && e.name === 'AbortError') return\n setMainDocumentState({document: undefined, path: url.pathname})\n mainDocumentIdRef.current = undefined\n })\n return () => {\n controller.abort()\n }\n }\n }\n }\n setMainDocumentState(undefined)\n mainDocumentIdRef.current = undefined\n return undefined\n }, [client, perspectiveStack, relativeUrl, resolvers, targetOrigin])\n\n return mainDocumentState\n}\n","import {studioPath} from '@sanity/client/csm'\nimport {urlStringToPath} from '@sanity/visual-editing-csm'\n\nimport {type PresentationStateParams} from '../types'\n\nexport function parseId(rawId: string | undefined): string | undefined {\n if (rawId === undefined) {\n return undefined\n }\n\n const segments = decodeURIComponent(rawId)?.split('.')\n\n if (segments[0] === 'drafts') {\n segments.shift()\n }\n\n return segments.join('.')\n}\n\nexport function parsePath(rawPath: string | undefined): string | undefined {\n if (rawPath === undefined) {\n return undefined\n }\n\n return studioPath.toString(urlStringToPath(decodeURIComponent(rawPath)))\n}\n\nexport function parseRouterState(state: PresentationStateParams): PresentationStateParams {\n return {\n id: parseId(state.id),\n path: parsePath(state.path),\n type: state.type,\n }\n}\n","/* eslint-disable @typescript-eslint/no-shadow */\nimport {type MutableRefObject, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {getPublishedId} from 'sanity'\nimport {type RouterContextValue, type RouterState, type SearchParam} from 'sanity/router'\n\nimport {\n type CombinedSearchParams,\n type FrameState,\n type PresentationNavigate,\n type PresentationParamsContextValue,\n type PresentationSearchParams,\n type PresentationStateParams,\n type StructureDocumentPaneParams,\n} from './types'\nimport {parseRouterState} from './util/parse'\n\nfunction pruneObject<T extends RouterState | PresentationParamsContextValue>(obj: T): T {\n return Object.fromEntries(\n Object.entries(obj).filter(\n ([, value]) => value !== undefined && value !== '' && value !== null,\n ),\n ) as T\n}\n\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: routerSearchParams.preview || initialPreviewUrl.toString(),\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 {usePerspective} from 'sanity'\n\nimport {type PresentationPerspective} from './types'\n\n/**\n * @internal\n */\nexport function usePresentationPerspective(): PresentationPerspective {\n const {perspectiveStack, selectedPerspectiveName = 'drafts', selectedReleaseId} = usePerspective()\n const perspective = (\n selectedReleaseId ? perspectiveStack : selectedPerspectiveName\n ) as PresentationPerspective\n return perspective\n}\n","import {type StatusEvent} from '@sanity/comlink'\nimport {useCallback, useMemo, useState} from 'react'\n\nimport {type ConnectionStatus} from './types'\n\n/**\n * A hook that manages and returns the connection status of multiple channels\n *\n * returns an array containing the\n * current status and a function to update the status based on incoming events\n *\n * The status can be one of the following:\n * - 'connected': If any channel is connected\n * - 'connecting': If the first connection is being established\n * - 'reconnecting': If a reconnection is in progress\n * - 'idle': If no connections have been made yet\n *\n * The function to update the status takes a `StatusEvent` object which includes\n * the channel and the status\n */\nexport function useStatus(): [ConnectionStatus, (event: StatusEvent) => void] {\n // State to keep track of the status of each channel\n const [statusMap, setStatusMap] = useState(\n new Map<string, {status: ConnectionStatus; hasConnected: boolean}>(),\n )\n\n // Memoized computation of the overall status based on the status of individual channels\n const memoStatus = useMemo(() => {\n const values = Array.from(statusMap.values())\n // If any channel is connected, return the `connected` status\n if (values.find(({status}) => status === 'connected')) {\n return 'connected'\n }\n // If the initial connection is being established, return `connecting` status\n const handshaking = values.filter(({status}) => status === 'connecting')\n if (handshaking.length) {\n return handshaking.some(({hasConnected}) => !hasConnected) ? 'connecting' : 'reconnecting'\n }\n // If nothing has happened yet, return `idle` status\n return 'idle'\n }, [statusMap])\n\n // Callback to update the status map based on the received event\n const setStatusFromEvent = useCallback((event: StatusEvent) => {\n setStatusMap((prev) => {\n const next = new Map(prev)\n if (event.status === 'disconnected') {\n // Remove the channel from the map if a disconnect event is received\n next.delete(event.connection)\n } else {\n // Update the status and connection flag for the channel\n const hasConnected =\n next.get(event.connection)?.hasConnected || event.status === 'connected'\n const status = event.status === 'handshaking' ? 'connecting' : event.status\n next.set(event.connection, {status, hasConnected})\n }\n return next\n })\n }, [])\n\n // Return the overall status and the function to update the status\n return [memoStatus, setStatusFromEvent]\n}\n","/* eslint-disable 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 {useActorRef, useSelector} from '@xstate/react'\nimport {lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {\n type CommentIntentGetter,\n COMMENTS_INSPECTOR_NAME,\n type 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 {presentationMachine} from './machines/presentation-machine'\nimport {type PreviewUrlRef} from './machines/preview-url'\nimport {SharedStateProvider} from './overlays/SharedStateProvider'\nimport {Panel} from './panels/Panel'\nimport {Panels} from './panels/Panels'\nimport {PresentationContent} from './PresentationContent'\nimport {PresentationNavigateProvider} from './PresentationNavigateProvider'\nimport {usePresentationNavigator} from './PresentationNavigator'\nimport {PresentationParamsProvider} from './PresentationParamsProvider'\nimport {PresentationProvider} from './PresentationProvider'\nimport {Preview} from './preview/Preview'\nimport {\n type FrameState,\n type PresentationNavigate,\n type PresentationPluginOptions,\n type PresentationStateParams,\n type PresentationViewport,\n type StructureDocumentPaneParams,\n type VisualEditingConnection,\n} from './types'\nimport {useAllowPatterns} from './useAllowPatterns'\nimport {useDocumentsOnPage} from './useDocumentsOnPage'\nimport {useMainDocument} from './useMainDocument'\nimport {useParams} from './useParams'\nimport {usePopups} from './usePopups'\nimport {usePresentationPerspective} from './usePresentationPerspective'\nimport {useStatus} from './useStatus'\nimport {useTargetOrigin} from './useTargetOrigin'\nimport {debounce} from './util/debounce'\n\nconst LiveQueries = lazy(() => import('./loader/LiveQueries'))\nconst PostMessageDocuments = lazy(() => import('./overlays/PostMessageDocuments'))\nconst PostMessageRefreshMutations = lazy(() => import('./editor/PostMessageRefreshMutations'))\nconst PostMessagePerspective = lazy(() => import('./PostMessagePerspective'))\nconst PostMessagePreviewSnapshots = lazy(() => import('./editor/PostMessagePreviewSnapshots'))\nconst PostMessageSchema = lazy(() => import('./overlays/schema/PostMessageSchema'))\nconst PostMessageTelemetry = lazy(() => import('./PostMessageTelemetry'))\n\nconst Container = styled(Flex)`\n overflow-x: auto;\n`\n\nexport default function PresentationTool(props: {\n tool: Tool<PresentationPluginOptions>\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n vercelProtectionBypass: string | null\n initialPreviewUrl: URL\n previewUrlRef: PreviewUrlRef\n}): React.JSX.Element {\n const {\n canToggleSharePreviewAccess,\n canUseSharedPreviewAccess,\n tool,\n vercelProtectionBypass,\n initialPreviewUrl,\n previewUrlRef,\n } = props\n\n const allowOrigins = useAllowPatterns(previewUrlRef)\n const targetOrigin = useTargetOrigin(previewUrlRef)\n\n const components = tool.options?.components\n const name = tool.name || DEFAULT_TOOL_NAME\n const {unstable_navigator, unstable_header} = components || {}\n\n const {navigate: routerNavigate, state: routerState} = useRouter() as RouterContextValue & {\n state: PresentationStateParams\n }\n const routerSearchParams = useUnique(Object.fromEntries(routerState._searchParams || []))\n const perspective = usePresentationPerspective()\n\n const canSharePreviewAccess = useSelector(\n previewUrlRef,\n (state) => state.context.previewMode?.shareAccess !== false,\n )\n\n const [devMode] = useState(() => {\n const option = tool.options?.devMode\n\n if (typeof option === 'function') return option()\n if (typeof option === 'boolean') return option\n\n return typeof window !== 'undefined' && window.location.hostname === 'localhost'\n })\n\n const iframeRef = useRef<HTMLIFrameElement>(null)\n\n const [controller, setController] = useState<Controller>()\n const [visualEditingComlink, setVisualEditingComlink] = useState<VisualEditingConnection | null>(\n null,\n )\n\n const frameStateRef = useRef<FrameState>({\n title: undefined,\n url: undefined,\n })\n\n const {\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 presentationRef = useActorRef(presentationMachine)\n\n const viewport = useMemo(() => (params.viewport ? 'mobile' : 'desktop'), [params.viewport])\n\n const [documentsOnPage, setDocumentsOnPage] = useDocumentsOnPage(perspective, frameStateRef)\n\n const projectId = useProjectId()\n const dataset = useDataset()\n\n const mainDocumentState = useMainDocument({\n // Prevent flash of content by using immediate navigation\n navigate: _navigate,\n navigationHistory,\n path: params.preview,\n targetOrigin,\n resolvers: tool.options?.resolve?.mainDocuments,\n })\n\n const [overlaysConnection, setOverlaysConnection] = useStatus()\n const [loadersConnection, setLoadersConnection] = useStatus()\n const [previewKitConnection, setPreviewKitConnection] = useStatus()\n\n const {open: handleOpenPopup} = usePopups(controller)\n\n const isLoading = useSelector(presentationRef, (state) => state.matches('loading'))\n\n useEffect(() => {\n const target = iframeRef.current?.contentWindow\n\n if (!target || isLoading) return undefined\n\n const controller = createController({targetOrigin})\n controller.addTarget(target)\n setController(controller)\n\n return () => {\n controller.destroy()\n setController(undefined)\n }\n }, [targetOrigin, isLoading])\n\n const handleNavigate = useEffectEvent<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} = data\n let url = data.url\n /**\n * The URL is relative, we need to resolve it to an absolute URL\n */\n if (!url.startsWith('http')) {\n try {\n url = new URL(url, targetOrigin).toString()\n } catch {\n // ignore\n }\n }\n\n if (frameStateRef.current.url !== url) {\n try {\n // Handle bypass params being forwarded to the final URL\n const [urlWithoutSearch, search] = url.split('?')\n const searchParams = new URLSearchParams(search)\n searchParams.delete(urlSearchParamVercelProtectionBypass)\n searchParams.delete(urlSearchParamVercelSetBypassCookie)\n handleNavigate(\n {},\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 presentationRef.send({type: 'toggle visual editing overlays', enabled: data.enabled})\n })\n\n comlink.on('visual-editing/documents', (data) => {\n setDocumentsOnPage(\n 'visual-editing',\n // 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 presentationRef.send({type: 'iframe refresh'})\n }\n })\n\n comlink.on('visual-editing/refreshed', () => {\n presentationRef.send({type: 'iframe loaded'})\n })\n\n comlink.onStatus(setOverlaysConnection)\n\n const stop = comlink.start()\n setVisualEditingComlink(comlink)\n return () => {\n stop()\n setVisualEditingComlink(null)\n }\n }, [controller, presentationRef, setDocumentsOnPage, setOverlaysConnection, targetOrigin])\n\n useEffect(() => {\n if (!controller) return undefined\n const comlink = controller.createChannel<Message, PreviewKitNodeMsg>(\n {\n name: 'presentation',\n connectTo: 'preview-kit',\n heartbeat: true,\n },\n createConnectionMachine<Message, PreviewKitNodeMsg>().provide({\n actors: createCompatibilityActors(),\n }),\n )\n\n comlink.onStatus(setPreviewKitConnection)\n\n comlink.on('preview-kit/documents', (data) => {\n if (data.projectId === projectId && data.dataset === dataset) {\n setDocumentsOnPage(\n 'preview-kit',\n // 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, targetOrigin)\n const preview = url.toString()\n if (params.preview === preview) {\n return\n }\n if (Array.isArray(allowOrigins)) {\n if (allowOrigins.some((pattern) => pattern.test(preview))) {\n navigate({}, {preview})\n }\n } else if (url.origin === targetOrigin) {\n navigate({}, {preview})\n }\n },\n [targetOrigin, params.preview, allowOrigins, 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 try {\n const frameOrigin = new URL(frameStateRef.current.url, targetOrigin).origin\n const previewOrigin = new URL(params.preview, targetOrigin).origin\n if (frameOrigin !== previewOrigin) {\n return\n }\n } catch {\n // ignore\n }\n\n frameStateRef.current.url = params.preview\n if (overlaysConnection === 'connected') {\n /**\n * Translate the possibly absolute params url back to a relative URL\n */\n let url = params.preview\n if (url.startsWith('http')) {\n try {\n const newUrl = new URL(params.preview, targetOrigin)\n url = newUrl.pathname + newUrl.search + newUrl.hash\n } catch {\n // ignore\n }\n }\n visualEditingComlink?.post('presentation/navigate', {\n url,\n type: 'replace',\n })\n }\n }\n }, [overlaysConnection, targetOrigin, params.preview, visualEditingComlink])\n\n const toggleOverlay = useCallback(\n () => visualEditingComlink?.post('presentation/toggle-overlay'),\n [visualEditingComlink],\n )\n\n const [displayedDocument, setDisplayedDocument] = useState<\n Partial<SanityDocument> | null | undefined\n >(null)\n\n useEffect(() => {\n const handleKeyUp = (e: KeyboardEvent) => {\n if (isAltKey(e)) {\n toggleOverlay()\n }\n }\n const handleKeydown = (e: KeyboardEvent) => {\n if (isAltKey(e)) {\n toggleOverlay()\n }\n\n if (isHotkey(['mod', '\\\\'], e)) {\n toggleOverlay()\n }\n }\n window.addEventListener('keydown', handleKeydown)\n window.addEventListener('keyup', handleKeyUp)\n return () => {\n window.removeEventListener('keydown', handleKeydown)\n window.removeEventListener('keyup', handleKeyUp)\n }\n }, [toggleOverlay])\n\n const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)\n\n const [{navigatorEnabled, toggleNavigator}, PresentationNavigator] = usePresentationNavigator({\n unstable_navigator,\n })\n\n const refreshRef = useRef<number>(undefined)\n const handleRefresh = useCallback(\n (fallback: () => void) => {\n presentationRef.send({type: 'iframe refresh'})\n if (visualEditingComlink) {\n // We only wait 300ms for the iframe to ack the refresh request before running the fallback logic\n refreshRef.current = window.setTimeout(fallback, 300)\n visualEditingComlink.post('presentation/refresh', {\n source: 'manual',\n livePreviewEnabled:\n previewKitConnection === 'connected' || loadersConnection === 'connected',\n })\n return\n }\n fallback()\n },\n [loadersConnection, presentationRef, previewKitConnection, visualEditingComlink],\n )\n\n const workspace = useWorkspace()\n\n const getCommentIntent = useCallback<CommentIntentGetter>(\n ({id, type, path}) => {\n if (frameStateRef.current.url) {\n return {\n title: frameStateRef.current.title || frameStateRef.current.url,\n name: 'edit',\n params: {\n id,\n path,\n type,\n inspect: COMMENTS_INSPECTOR_NAME,\n workspace: workspace.name,\n mode: EDIT_INTENT_MODE,\n preview: params.preview,\n },\n }\n }\n return undefined\n },\n [params.preview, workspace.name],\n )\n\n const setViewport = useCallback(\n (next: PresentationViewport) => {\n // Omit the viewport URL search param if the next viewport state is the\n // default: 'desktop'\n const viewport = next === 'desktop' ? undefined : 'mobile'\n navigate({}, {viewport}, true)\n },\n [navigate],\n )\n\n return (\n <>\n <PresentationProvider\n devMode={devMode}\n name={name}\n navigate={navigate}\n params={params}\n searchParams={searchParams}\n structureParams={structureParams}\n >\n <PresentationNavigateProvider navigate={navigate}>\n <PresentationParamsProvider params={params}>\n <SharedStateProvider comlink={visualEditingComlink}>\n <Container data-testid=\"presentation-root\" height=\"fill\">\n <Panels>\n <PresentationNavigator />\n <Panel\n id=\"preview\"\n minWidth={325}\n defaultSize={navigatorEnabled ? 50 : 75}\n order={3}\n >\n <Flex direction=\"column\" flex={1} height=\"fill\" ref={setBoundaryElement}>\n <BoundaryElementProvider element={boundaryElement}>\n <Preview\n // @TODO move closer to the <iframe> element itself to allow for more precise handling of when to reload the iframe and when to reconnect when the target origin changes\n // Make sure the iframe is unmounted if the targetOrigin has changed\n key={targetOrigin}\n canSharePreviewAccess={canSharePreviewAccess}\n canToggleSharePreviewAccess={canToggleSharePreviewAccess}\n canUseSharedPreviewAccess={canUseSharedPreviewAccess}\n header={unstable_header}\n initialUrl={initialPreviewUrl}\n loadersConnection={loadersConnection}\n navigatorEnabled={navigatorEnabled}\n onPathChange={handlePreviewPath}\n onRefresh={handleRefresh}\n openPopup={handleOpenPopup}\n overlaysConnection={overlaysConnection}\n previewUrl={params.preview}\n perspective={perspective}\n ref={iframeRef}\n setViewport={setViewport}\n targetOrigin={targetOrigin}\n toggleNavigator={toggleNavigator}\n toggleOverlay={toggleOverlay}\n viewport={viewport}\n vercelProtectionBypass={vercelProtectionBypass}\n presentationRef={presentationRef}\n previewUrlRef={previewUrlRef}\n />\n </BoundaryElementProvider>\n </Flex>\n </Panel>\n <PresentationContent\n documentId={params.id}\n documentsOnPage={documentsOnPage}\n documentType={params.type}\n getCommentIntent={getCommentIntent}\n mainDocumentState={mainDocumentState}\n onFocusPath={handleFocusPath}\n onStructureParams={handleStructureParams}\n searchParams={searchParams}\n setDisplayedDocument={setDisplayedDocument}\n structureParams={structureParams}\n />\n </Panels>\n </Container>\n </SharedStateProvider>\n </PresentationParamsProvider>\n </PresentationNavigateProvider>\n </PresentationProvider>\n <Suspense>\n {controller && (\n <LiveQueries\n controller={controller}\n perspective={perspective}\n liveDocument={displayedDocument}\n onDocumentsOnPage={setDocumentsOnPage}\n onLoadersConnection={setLoadersConnection}\n />\n )}\n {visualEditingComlink && params.id && params.type && (\n <PostMessageRefreshMutations\n comlink={visualEditingComlink}\n id={params.id}\n type={params.type}\n loadersConnection={loadersConnection}\n previewKitConnection={previewKitConnection}\n />\n )}\n {visualEditingComlink && (\n <PostMessageSchema comlink={visualEditingComlink} perspective={perspective} />\n )}\n {visualEditingComlink && documentsOnPage.length > 0 && (\n <PostMessagePreviewSnapshots\n comlink={visualEditingComlink}\n perspective={perspective}\n refs={documentsOnPage}\n />\n )}\n {visualEditingComlink && (\n <PostMessageDocuments comlink={visualEditingComlink} perspective={perspective} />\n )}\n {visualEditingComlink && <PostMessageFeatures comlink={visualEditingComlink} />}\n {visualEditingComlink && (\n <PostMessagePerspective comlink={visualEditingComlink} perspective={perspective} />\n )}\n {visualEditingComlink && <PostMessageTelemetry comlink={visualEditingComlink} />}\n </Suspense>\n </>\n )\n}\n\n// @TODO reconcile with core utils\nfunction isAltKey(event: KeyboardEvent): boolean {\n return event.key === 'Alt'\n}\n\n// @TODO reconcile with core utils\nconst IS_MAC =\n typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform)\nconst MODIFIERS: Record<string, 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'> = {\n alt: 'altKey',\n ctrl: 'ctrlKey',\n mod: IS_MAC ? 'metaKey' : 'ctrlKey',\n shift: 'shiftKey',\n}\n// @TODO reconcile with core utils\nfunction isHotkey(keys: string[], event: KeyboardEvent): boolean {\n return keys.every((key) => {\n if (MODIFIERS[key]) {\n return event[MODIFIERS[key]]\n }\n return event.key === key.toUpperCase()\n })\n}\n","import {createPreviewSecret} from '@sanity/preview-url-secret/create-secret'\nimport {type SanityClient} from 'sanity'\nimport {fromPromise, type PromiseActorLogic} from 'xstate'\n\n/** @internal */\nexport function defineCreatePreviewSecretActor({\n client,\n currentUserId,\n}: {\n client: SanityClient\n currentUserId: string | undefined\n}): PromiseActorLogic<{\n secret: string\n expiresAt: Date\n}> {\n return fromPromise(async () => {\n return await createPreviewSecret(client, 'sanity/presentation', location.href, currentUserId)\n })\n}\n","import {fetchSharedAccessQuery} from '@sanity/preview-url-secret/constants'\nimport {type SanityClient} from 'sanity'\nimport {fromPromise, type PromiseActorLogic} from 'xstate'\n\n/** @internal */\nexport function defineReadSharedSecretActor({\n client,\n}: {\n client: SanityClient\n}): PromiseActorLogic<string | null> {\n return fromPromise(async () => {\n return client.fetch<string | null>(\n fetchSharedAccessQuery,\n {},\n {tag: 'presentation.fallback-to-shared-access-secret'},\n )\n })\n}\n","import {fromPromise, type PromiseActorLogic} from 'xstate'\n\nimport {type PreviewUrlAllowOption, type PreviewUrlAllowOptionContext} from '../types'\n\ninterface Context extends Pick<PreviewUrlAllowOptionContext, 'client'> {\n allowOption: PreviewUrlAllowOption | undefined\n}\ntype Input = Omit<PreviewUrlAllowOptionContext, 'client' | 'origin'>\n\n/** @internal */\nexport function defineResolveAllowPatternsActor({\n client,\n allowOption,\n}: Context): PromiseActorLogic<URLPattern[], Input> {\n return fromPromise<URLPattern[], Input>(async ({input}) => {\n const {initialUrl} = input\n\n /**\n * Lazy load the URLPattern polyfill on-demand, if needed\n */\n if (typeof URLPattern === 'undefined') {\n await import('urlpattern-polyfill')\n }\n\n /**\n * If no allow option is provided, we use the initial URL to infer the pattern\n */\n if (!allowOption) {\n return [new URLPattern(initialUrl.origin)]\n }\n\n const maybePatterns =\n typeof allowOption === 'function'\n ? await allowOption({client, origin, initialUrl})\n : allowOption\n const patterns = Array.isArray(maybePatterns) ? maybePatterns : [maybePatterns]\n const urlPatterns = patterns.map((value) => {\n const urlPattern = new URLPattern(value)\n if (urlPattern.hostname === '*') {\n throw new Error(\n `It's insecure to allow any hostname, it could disclose data to a malicious site`,\n )\n }\n return urlPattern\n })\n /**\n * If the declared patterns don't consider the initial URL valid, we add it to the list of patterns\n */\n if (!urlPatterns.some((pattern) => pattern.test(initialUrl.origin))) {\n return [...urlPatterns, new URLPattern(initialUrl.origin)]\n }\n\n return urlPatterns\n })\n}\n","import {type SanityClient} from 'sanity'\nimport {fromPromise, type PromiseActorLogic} from 'xstate'\n\nimport {type PresentationPerspective, type PreviewUrlOption} from '../types'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\n\n/** @internal */\nexport function defineResolveInitialUrlActor({\n client,\n studioBasePath,\n previewUrlOption,\n perspective,\n}: {\n client: SanityClient\n studioBasePath: string\n previewUrlOption: PreviewUrlOption | undefined\n perspective: PresentationPerspective\n}): PromiseActorLogic<URL, {previewSearchParam: string | null}> {\n return fromPromise<URL, {previewSearchParam: string | null}>(\n async ({input}: {input: {previewSearchParam: string | null}}) => {\n const {origin} = location\n /**\n * If the previewUrlOption is a function, we need to resolve it and maintain backwards compatibility\n */\n if (typeof previewUrlOption === 'function') {\n const initial = await previewUrlOption({\n client,\n studioBasePath,\n // @TODO handle checking permissions here, and then generating a secret\n previewUrlSecret: '',\n studioPreviewPerspective: encodeStudioPerspective(perspective),\n previewSearchParam: input.previewSearchParam,\n })\n return new URL(initial, origin)\n }\n\n /**\n * Provide backwards compatibility for versions where `previewUrl` where optional\n */\n if (!previewUrlOption) {\n return new URL('/', origin)\n }\n /**\n * Support setting `previewUrl` as a string shorthand\n */\n if (typeof previewUrlOption === 'string') {\n return new URL(previewUrlOption, origin)\n }\n\n if (typeof previewUrlOption.initial === 'function') {\n const initial = await previewUrlOption.initial({\n client,\n origin,\n })\n return new URL(initial, origin)\n }\n\n if (typeof previewUrlOption.initial === 'string') {\n return new URL(previewUrlOption.initial, origin)\n }\n\n return new URL(previewUrlOption.preview || '/', previewUrlOption.origin || origin)\n },\n )\n}\n","import {fromPromise, type PromiseActorLogic} from 'xstate'\n\nimport {\n type PreviewUrlOption,\n type PreviewUrlPreviewMode,\n type PreviewUrlPreviewModeOptionContext,\n} from '../types'\n\ntype Options = Omit<PreviewUrlPreviewModeOptionContext, 'origin'>\n\ninterface Context extends Pick<Options, 'client'> {\n previewUrlOption: PreviewUrlOption | undefined\n}\ntype Input = Omit<Options, 'client'>\n\n/** @internal */\nexport function defineResolvePreviewModeActor({\n client,\n previewUrlOption,\n}: Context): PromiseActorLogic<PreviewUrlPreviewMode | false, Input> {\n return fromPromise<PreviewUrlPreviewMode | false, Input>(async ({input}) => {\n const {targetOrigin} = input\n\n /**\n * Handle legacy draftMode options\n */\n if (typeof previewUrlOption === 'object' && previewUrlOption?.draftMode) {\n return {\n enable: previewUrlOption.draftMode.enable,\n shareAccess: previewUrlOption.draftMode.shareAccess ?? true,\n }\n }\n\n /**\n * If no preview mode option is provided, we disable preview mode\n */\n if (\n !previewUrlOption ||\n typeof previewUrlOption === 'string' ||\n typeof previewUrlOption === 'function' ||\n !previewUrlOption.previewMode\n ) {\n return false\n }\n\n /**\n * If the option is a function, we resolve it\n */\n const previewMode =\n typeof previewUrlOption.previewMode === 'function'\n ? await previewUrlOption.previewMode({client, origin, targetOrigin})\n : previewUrlOption.previewMode\n\n if (previewMode === false) {\n return false\n }\n\n /**\n * Return only supported preview mode options, filter out unknowns\n */\n return {\n enable: previewMode.enable,\n shareAccess: previewMode.shareAccess ?? true,\n }\n })\n}\n","import {\n urlSearchParamPreviewPathname,\n urlSearchParamPreviewPerspective,\n urlSearchParamPreviewSecret,\n} from '@sanity/preview-url-secret/constants'\nimport {type SanityClient} from 'sanity'\nimport {fromPromise, type PromiseActorLogic} from 'xstate'\n\nimport {\n type PresentationPerspective,\n type PreviewUrlOption,\n type PreviewUrlPreviewMode,\n} from '../types'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\n\n/** @internal */\nexport interface ResolvePreviewModeUrlInput {\n previewUrlSecret: string\n resolvedPreviewMode: PreviewUrlPreviewMode\n initialUrl: URL\n}\n\n/** @internal */\nexport function defineResolvePreviewModeUrlActor({\n client,\n studioBasePath,\n previewUrlOption,\n perspective,\n}: {\n client: SanityClient\n studioBasePath: string\n previewUrlOption: PreviewUrlOption | undefined\n perspective: PresentationPerspective\n}): PromiseActorLogic<URL, ResolvePreviewModeUrlInput> {\n return fromPromise<URL, ResolvePreviewModeUrlInput>(async ({input}) => {\n const {previewUrlSecret, resolvedPreviewMode, initialUrl} = input\n\n /**\n * If the previewUrlOption is a function, we need to resolve it and maintain backwards compatibility\n */\n if (typeof previewUrlOption === 'function') {\n const initial = await previewUrlOption({\n client,\n studioBasePath,\n previewUrlSecret,\n studioPreviewPerspective: encodeStudioPerspective(perspective),\n previewSearchParam: initialUrl.toString(),\n })\n return new URL(initial, initialUrl)\n }\n\n /**\n * If the resolved preview mode is false then we have an unexpected state that shouldn't be possible\n */\n if (!resolvedPreviewMode) {\n throw new Error('Resolved preview mode is false')\n }\n\n const url = new URL(resolvedPreviewMode.enable, initialUrl)\n\n url.searchParams.set(urlSearchParamPreviewSecret, previewUrlSecret)\n url.searchParams.set(urlSearchParamPreviewPerspective, encodeStudioPerspective(perspective))\n if (initialUrl.pathname !== url.pathname) {\n url.searchParams.set(\n urlSearchParamPreviewPathname,\n `${initialUrl.pathname}${initialUrl.search}${initialUrl.hash}`,\n )\n }\n\n return url\n })\n}\n","import {fromPromise} from 'xstate'\n\n/** @internal */\nexport const resolveUrlFromPreviewSearchParamActor = fromPromise<\n URL,\n {initialUrl: URL; previewSearchParam: string | null | undefined; allowOrigins: URLPattern[]}\n>(async ({input}) => {\n const {previewSearchParam, initialUrl, allowOrigins} = input\n\n /**\n * If the preview search param is falsy we can skip\n */\n if (!previewSearchParam) {\n return initialUrl\n }\n\n /**\n * Validate the previewSearchParam\n */\n try {\n const previewSearchParamUrl = new URL(previewSearchParam, initialUrl.origin)\n if (!allowOrigins.some((pattern) => pattern.test(previewSearchParamUrl.origin))) {\n return initialUrl\n }\n return previewSearchParamUrl\n } catch (err) {\n return initialUrl\n }\n})\n","import {\n schemaIdSingleton,\n schemaType,\n schemaTypeSingleton,\n} from '@sanity/preview-url-secret/constants'\nimport {type SanityDocument} from '@sanity/types'\nimport {uuid} from '@sanity/uuid'\nimport {throwError} from 'rxjs'\nimport {type DocumentValuePermission, type PermissionCheckResult} from 'sanity'\nimport {type ActorRefFrom, assign, fromObservable, fromPromise, log, setup} from 'xstate'\n\nimport {type ResolvePreviewModeUrlInput} from '../actors/resolve-preview-mode-url'\nimport {resolveUrlFromPreviewSearchParamActor} from '../actors/resolve-url-from-preview-search-param'\nimport {type PreviewUrlPreviewMode} from '../types'\n\ninterface Context {\n initialUrl: URL | null\n previewUrl: URL | null\n allowOrigins: URLPattern[] | null\n error: Error | null\n previewSearchParam: string | null\n previewUrlSecret: {secret: string; expiresAt: Date} | null\n previewAccessSharingCreatePermission: PermissionCheckResult | null\n previewAccessSharingReadPermission: PermissionCheckResult | null\n previewAccessSharingUpdatePermission: PermissionCheckResult | null\n previewUrlSecretPermission: PermissionCheckResult | null\n previewMode: PreviewUrlPreviewMode | null\n}\n\ntype SetPreviewSearchParamEvent = {\n type: 'set preview search param'\n previewSearchParam: string | null\n}\ntype Event = SetPreviewSearchParamEvent\n\ntype Input = Omit<SetPreviewSearchParamEvent, 'type'>\n\nexport interface CheckPermissionInput {\n checkPermissionName: DocumentValuePermission\n document: Partial<SanityDocument> | null\n}\n\n/**\n * Used for permissions checks\n */\nexport const shareAccessSingletonDocument = {_id: schemaIdSingleton, _type: schemaTypeSingleton}\nexport const previewUrlSecretDocument = {\n _id: `drafts.${uuid()}`,\n _type: schemaType,\n}\n\nexport const previewUrlMachine = setup({\n types: {} as {\n context: Context\n events: Event\n input: Input\n tags: 'busy' | 'error'\n },\n actions: {\n 'notify preview will likely fail': log(\n `Missing permissions to create preview secret, or read shared preview secret. Preview will likely fail loading.`,\n ),\n 'assign preview search param': assign({\n previewSearchParam: (_, params: {previewSearchParam: string | null}) =>\n params.previewSearchParam,\n }),\n 'assign error': assign({\n error: (_, params: {message: string; error: unknown}) => {\n return params.error instanceof Error\n ? params.error\n : new Error(params.message, {cause: params.error})\n },\n }),\n },\n actors: {\n 'check permission': fromObservable<PermissionCheckResult, CheckPermissionInput>(() =>\n throwError(\n () =>\n new Error(\n `The 'check permission' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'check permission': fromObservable(({input}: {input: CheckPermissionInput}) => ...)}})`,\n ),\n ),\n ),\n 'resolve initial url': fromPromise<URL, {previewSearchParam: string | null}>(() =>\n Promise.reject(\n new Error(\n `The 'resolve initial url' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'resolve initial url': fromPromise(...)}})`,\n ),\n ),\n ),\n 'resolve allow patterns': fromPromise<URLPattern[], {initialUrl: URL}>(() =>\n Promise.reject(\n new Error(\n `The 'resolve allow patterns' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'resolve allow pattern': fromPromise(...)}})`,\n ),\n ),\n ),\n 'resolve url from preview search param': resolveUrlFromPreviewSearchParamActor,\n 'resolve preview mode': fromPromise<PreviewUrlPreviewMode | false, {targetOrigin: string}>(() =>\n Promise.reject(\n new Error(\n `The 'resolve preview mode' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'resolve preview mode': fromPromise(...)}})`,\n ),\n ),\n ),\n 'create preview secret': fromPromise<{\n secret: string\n expiresAt: Date\n }>(async () =>\n Promise.reject(\n new Error(\n `The 'create preview secret' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'create preview secret': fromPromise(...)}})`,\n ),\n ),\n ),\n 'read shared preview secret': fromPromise<string | null>(async () =>\n Promise.reject(\n new Error(\n `The 'read shared preview secret' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'read shared preview secret': fromPromise(...)}})`,\n ),\n ),\n ),\n 'resolve preview mode url': fromPromise<URL, ResolvePreviewModeUrlInput>(() =>\n Promise.reject(\n new Error(\n `The 'resolve preview mode url' actor is not implemented. Add it to previewUrlMachine.provide({actors: {'resolve preview mode url': fromPromise(...)}})`,\n ),\n ),\n ),\n },\n guards: {\n 'has checked permissions': ({context}) => {\n return Boolean(\n context.previewAccessSharingCreatePermission &&\n context.previewAccessSharingReadPermission &&\n context.previewAccessSharingUpdatePermission &&\n context.previewUrlSecretPermission,\n )\n },\n 'search param has new origin': ({context, event}) => {\n if (!context.previewUrl || !event.previewSearchParam) {\n return false\n }\n try {\n const previewSearchParamUrl = new URL(event.previewSearchParam, context.previewUrl)\n return context.previewUrl.origin !== previewSearchParamUrl.origin\n } catch {\n return false\n }\n },\n 'can create preview secret': ({context}) => {\n return context.previewUrlSecretPermission?.granted === true\n },\n\n 'has preview mode with created secret': ({context}, params: PreviewUrlPreviewMode | false) => {\n if (params === false) {\n return false\n }\n return context.previewUrlSecretPermission?.granted === true\n },\n 'has preview mode with share access': ({context}, params: PreviewUrlPreviewMode | false) => {\n if (params === false) {\n return false\n }\n return context.previewAccessSharingReadPermission?.granted === true\n },\n 'has preview mode without permissions': ({context}, params: PreviewUrlPreviewMode | false) => {\n if (params === false) {\n return false\n }\n return (\n context.previewAccessSharingReadPermission?.granted === false &&\n context.previewUrlSecretPermission?.granted === false\n )\n },\n },\n delays: {\n expiredSecret: ({context}) => {\n if (!context.previewUrlSecret?.expiresAt) {\n return 0\n }\n const now = Date.now()\n const expiresAt = context.previewUrlSecret.expiresAt.getTime()\n return Math.max(expiresAt - now, 0)\n },\n },\n}).createMachine({\n // eslint-disable-next-line tsdoc/syntax\n /** @xstate-layout N4IgpgJg5mDOIC5QAUBOYBuBLMB3ABAKoBKAMgMRiqoD2qAdAA4A2AhgC4BmdAtvWphwESpBFgB2GGgGMOWGuIDaABgC6K1YlCMasLO3nitIAB6IArAA56AZgCcAdkcBGS8vMAmO+YBszgDQgAJ6Izs4+9M7KACzKztGWHg4OPubmAL7pgQLYeERklNR0TGxcvPzoucJkYpIycgqKzupqxjp6BgrGZggAtM520ZHRdjZjNjFe7oEhCGERUbHxicmpGVkgOUL5FFS0DCwc3Kh8W3kitVKynUoeLZpIIO36ht2IvV62Hl7elmE2lh83xmoXCkRicQSSRS5gSmWylW2IkK+xKR3KZ2qogkVwaShs9zauheXUePV6gPo3jSUyi-xBczBi0hKxh5mc8M2iPOBVgYHY+EY3IIfNYqGkAAtBWLWDwNESOq8yaCbM56A4bB5fGllHYvD4fAz4h56CNfG5LKqHMpLdFOZidvRJWBpABrCRQZBUHhYWB6BSwcjyx7PG5vPrs5TqjWqyyjTXRDwMjwxei68J2ZQ2nyWXN2jYOkT0dCwGjMbDiKAASXEL1YzEIqGY5AgCjA9BxNFd7cLZGLcDLFertYM9cbzEu9RuGmD2mJYeVfRGdipyh86Yc0XiE3MDK3JssIwcrmtPjGSXzCMEPNI-dL5Y9NbrDabKOKhzKJwq16xd8Hj5HLAxybSdrkMGdWhDeclVAclN3odlzBsKwBjSSxjwcZM7DVeJ1w8P4xmidk7HtYVHRLf9KwAQWYZgaFwZAOHYKhxEDVtxHbTtu2-KpyIHB9qNo+jGPYZjUFY0C8Qgh450VUlYPedkHHoHwnDSZDVOiGwfGiBlUhXXwwjsQYtKSYzSJ-Pj7yHGi6IYpiWMDPZ31KY5TjIosKIEqBbOEhzxNgSTpzUWcnmg+TTHePV6Hw3MYgzaItJ0hlYRNTNkLiHxBl1GILN4zz+KHccADFaB4TEAGUwDFSVGNQWUWzbDs6m43tby8oqm1KmhyuFKqaolOrZSC8CQsg2SSSMRdel8ZSNUTdlcw8M07AZQZrDXdaDRtUZnHWK98r7DqPRKsrKuq8VBplHg3wOVyMQ8o7CpOrqzr6i7auukbGjGmSwrkqaFL6MJlLiWFlC1EGty0hknAiXVVPMRx12UJwOQLR72ueytMQAWRoCAwEajjmqkVrMb-by8YJsBvqUX6FUm8Nem2+hbWPUZErGTcjS8NUJg8AE9T1ZwHHwvKkSe6yPWpwnic4lqewp46ceFfHCbpmdmkZhcgZmyxzFsDmTPcXUUiNRKDy3ZQJlVLSkYlm9KaHWWifYhWyaVyyCul1Wf3V2nOzAn71DuHWYMivovGsBxPCy74beWaJDWCUJzBSFTrUcQYdMzIFHd-FXPTVmn5dJrsvcOrHfeL-2ac1kKCXDiLyWcNKJiiHM-BtONwgtnMEM1DVNwhhI7B8AurMo2uqgD260U-dzval6fXYbwkoIB5moijLLkm5tvYRBo1nGQtND11ZaIdzEiMeX6vV5LuW+QFIVLNFS7pXquVxv+pnF1FtYP4OY7AG3QohJMqcEDeGUq4NwYQBhLEnkWWAABXaQ0g4CBhfoKMiH9JRf1lKFUMEceiizVPA0+7gtQQy8LzXU6obaJTFtEJwHhXDIL7G-WepccHcO2PgqUjBrrEPCoDSOFI3C2AGHtQ8sIiJJGTILZS7JRaeGSKw7CnDbz8LwAHJ06AOBgHOtIdA7Ay5cUrpLHRT92ymOqsxExZj16iK3gAqI6oaQ6QtE4YylhkynzmkCBGNgNR7VvgdaxTBbEGIccY969jzHOTuuiL8bVol10JrEoxTj+QuN-iQlu7xwjKX1P8bSTC0hGhcKaBIOZAQGkBKE7RGSeFZMMRACqEoxRgCohgrBFjFY8Sibo3A+iOldJ6X0zBfp8l-UKeIshjgqTGTiPYPaGotS7igd8QWtgsp6iQnFOEd8q6tKEOM6qnTunoGmQM5JC83LDKdqMy5rBrlTP6bMoOUkGab3-kDU+ERVEpnsEjDRVSdljBXKeQY3h5gOBaa8mmzt4k-nHIMz2zzfzIvaYVNFVRxxzObosxAfg1Q2jSOERIh5kIBNGKaNZ2lvjhFhEimJHUCVCAxQ8j8Tz0m4vbJyzERKfnBQ3hNXWkdyWeJsCMVhqNsK6mTO4Q2Q9DysLCEhDw7LMntjQV8wMJhYDsCMfQVgnAxIAAowAmEYFgdAnSXRmIAJTkAFTEg1MzYCuIBZHKYKlUiqWwrCMJkDZgDAYceRMfwUisPYZYTIGxxA03gI8NqJLmZ6msKqENcjErqIZL0cethvDGXLew9hiYWnOjdDLb0vp-SsUzdNcwEMEJ7WTohDMfgU4RpTCpUJnhYrHghuEFpRcnyjhfMwFtet2Q2FNOwsWZarBan8TsuMkRvhIzPJGDwmkWnJLnf6g0aZl0mQTURDdsxYiGwwsRIEgwEwTuxj5IS9lRKORPeSJCOF4XgrUZqbZsxwZszcJtbC4RUg2FfTXU6PVzoDSGjwH9ik-gxRGG4NtxkkZblhgyxIhFQG5lSPEODj89VoYjKqGKURkij0zImXSUCwiozZuDLUCQQY6tOVEr1WDqMsxNCkP4RFPBZj+I4I0qoRMODjIlceBzkK6raWAIT7DDZlNPhUuVkKI0pEXbHBISF1yAiIqpi5KL7E5ISWYoTna2b6Qg+DcFN7EAphLdpdOWVoPJ0RXxl5HKrmTNuYahzaQviaQPVERa8mlGeBUnnQyDStSwcCzi4L1kuV4HHNR4DCFdRaVVFSzcZ4VVIVsDEVhZ5QnWlYZZvRKLj3-KlT0FIKjVRZghkCXwqkjQGzVFxvOMisoWYy46QV9ABN+mo3mFZZ427lp032jzVa2bJGtCUtciak1AA */\n id: 'Preview URL',\n context: ({input}) => ({\n initialUrl: null,\n previewUrl: null,\n error: null,\n allowOrigins: null,\n previewSearchParam: input.previewSearchParam,\n previewUrlSecret: null,\n previewAccessSharingCreatePermission: null,\n previewAccessSharingReadPermission: null,\n previewAccessSharingUpdatePermission: null,\n previewUrlSecretPermission: null,\n previewMode: null,\n }),\n\n invoke: [\n {\n src: 'check permission',\n input: () => ({checkPermissionName: 'read', document: shareAccessSingletonDocument}),\n onError: {\n target: '.error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to check permission',\n error: event.error,\n }),\n },\n },\n onSnapshot: {\n actions: assign({\n previewAccessSharingReadPermission: ({event}) => event.snapshot.context ?? null,\n }),\n },\n },\n {\n src: 'check permission',\n input: () => ({checkPermissionName: 'create', document: shareAccessSingletonDocument}),\n onError: {\n target: '.error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to check permission',\n error: event.error,\n }),\n },\n },\n onSnapshot: {\n actions: assign({\n previewAccessSharingCreatePermission: ({event}) => event.snapshot.context ?? null,\n }),\n },\n },\n {\n src: 'check permission',\n input: () => ({checkPermissionName: 'update', document: shareAccessSingletonDocument}),\n onError: {\n target: '.error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to check permission',\n error: event.error,\n }),\n },\n },\n onSnapshot: {\n actions: assign({\n previewAccessSharingUpdatePermission: ({event}) => event.snapshot.context ?? null,\n }),\n },\n },\n {\n src: 'check permission',\n input: () => ({checkPermissionName: 'create', document: previewUrlSecretDocument}),\n onError: {\n target: '.error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to check permission',\n error: event.error,\n }),\n },\n },\n onSnapshot: {\n actions: assign({\n previewUrlSecretPermission: ({event}) => event.snapshot.context ?? null,\n }),\n },\n },\n ],\n\n on: {\n 'set preview search param': {\n actions: {\n type: 'assign preview search param',\n params: ({event}) => ({previewSearchParam: event.previewSearchParam}),\n },\n },\n },\n\n states: {\n checkingPermissions: {\n always: {\n guard: 'has checked permissions',\n target: 'resolvingInitialUrl',\n },\n tags: 'busy',\n },\n\n resolvingInitialUrl: {\n invoke: {\n src: 'resolve initial url',\n input: ({context}) => ({previewSearchParam: context.previewSearchParam}),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve initial url',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvingAllowPatterns',\n actions: assign({initialUrl: ({event}) => event.output}),\n },\n },\n\n tags: 'busy',\n },\n\n error: {\n type: 'final',\n tags: 'error',\n },\n\n resolvingAllowPatterns: {\n invoke: {\n src: 'resolve allow patterns',\n input: ({context}) => ({initialUrl: context.initialUrl!}),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve preview url allow patterns',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvingUrlFromPreviewSearchParam',\n actions: assign({allowOrigins: ({event}) => event.output}),\n },\n },\n tags: ['busy'],\n },\n\n resolvingUrlFromPreviewSearchParam: {\n id: 'loop',\n invoke: {\n src: 'resolve url from preview search param',\n input: ({context}) => ({\n initialUrl: context.initialUrl!,\n allowOrigins: context.allowOrigins!,\n previewSearchParam: context.previewSearchParam,\n }),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve preview url from search param',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvingPreviewMode',\n actions: assign({initialUrl: ({event}) => event.output}),\n },\n },\n tags: ['busy'],\n },\n\n resolvingPreviewMode: {\n on: {\n 'set preview search param': {\n guard: 'search param has new origin',\n actions: {\n type: 'assign preview search param',\n params: ({event}) => ({previewSearchParam: event.previewSearchParam}),\n },\n target: '#loop',\n reenter: true,\n },\n },\n invoke: {\n src: 'resolve preview mode',\n input: ({context}) => ({targetOrigin: context.initialUrl!.origin}),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve preview url allow patterns',\n error: event.error,\n }),\n },\n },\n onDone: [\n {\n guard: {\n type: 'has preview mode with created secret',\n params: ({event}) => event.output,\n },\n actions: assign({\n previewMode: ({event}) => event.output as unknown as PreviewUrlPreviewMode,\n }),\n target: 'previewMode.createPreviewSecret',\n },\n {\n guard: {\n type: 'has preview mode with share access',\n params: ({event}) => event.output,\n },\n actions: assign({\n previewMode: ({event}) => event.output as unknown as PreviewUrlPreviewMode,\n }),\n target: 'previewMode.readShareAccess',\n },\n {\n guard: {\n type: 'has preview mode without permissions',\n params: ({event}) => event.output,\n },\n actions: [\n assign({\n previewUrl: ({context}) => context.initialUrl,\n }),\n 'notify preview will likely fail',\n ],\n target: 'success',\n },\n {\n actions: assign({\n previewUrl: ({context}) => context.initialUrl,\n }),\n target: 'success',\n },\n ],\n },\n tags: ['busy'],\n },\n\n success: {\n on: {\n 'set preview search param': {\n guard: 'search param has new origin',\n actions: {\n type: 'assign preview search param',\n params: ({event}) => ({previewSearchParam: event.previewSearchParam}),\n },\n target: '#loop',\n reenter: true,\n },\n },\n },\n\n previewMode: {\n on: {\n 'set preview search param': {\n guard: 'search param has new origin',\n actions: {\n type: 'assign preview search param',\n params: ({event}) => ({previewSearchParam: event.previewSearchParam}),\n },\n target: '#loop',\n reenter: true,\n },\n },\n\n states: {\n createPreviewSecret: {\n invoke: {\n src: 'create preview secret',\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to create preview secret',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvePreviewUrl',\n actions: assign({previewUrlSecret: ({event}) => event.output}),\n },\n },\n tags: ['busy'],\n },\n readShareAccess: {\n invoke: {\n src: 'read shared preview secret',\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to read shared preview secret',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'resolvePreviewUrl',\n actions: assign({\n previewUrlSecret: ({event}) => ({\n secret: event.output!,\n expiresAt: new Date(Date.now() + 1000 * 60 * 60 * 60 * 24),\n }),\n }),\n },\n },\n tags: ['busy'],\n },\n resolvePreviewUrl: {\n invoke: {\n src: 'resolve preview mode url',\n input: ({context}) => ({\n initialUrl: context.initialUrl!,\n resolvedPreviewMode: context.previewMode!,\n previewUrlSecret: context.previewUrlSecret!.secret,\n }),\n onError: {\n target: 'error',\n actions: {\n type: 'assign error',\n params: ({event}) => ({\n message: 'Failed to resolve preview url',\n error: event.error,\n }),\n },\n },\n onDone: {\n target: 'success',\n actions: assign({previewUrl: ({event}) => event.output}),\n },\n },\n tags: ['busy'],\n },\n error: {\n type: 'final',\n tags: ['error'],\n },\n success: {\n after: {\n expiredSecret: {\n guard: 'can create preview secret',\n actions: assign({previewUrlSecret: null}),\n target: 'createPreviewSecret',\n reenter: true,\n },\n },\n },\n },\n initial: 'readShareAccess',\n },\n },\n\n initial: 'checkingPermissions',\n})\nexport type PreviewUrlRef = ActorRefFrom<typeof previewUrlMachine>\n","import {useToast} from '@sanity/ui'\nimport {useActorRef, useSelector} from '@xstate/react'\nimport {useEffect} from 'react'\nimport {useActiveWorkspace, useClient, useCurrentUser, useGrantsStore, useTranslation} from 'sanity'\nimport {useRouter} from 'sanity/router'\nimport {fromObservable} from 'xstate'\n\nimport {defineCreatePreviewSecretActor} from './actors/create-preview-secret'\nimport {defineReadSharedSecretActor} from './actors/read-shared-secret'\nimport {defineResolveAllowPatternsActor} from './actors/resolve-allow-patterns'\nimport {defineResolveInitialUrlActor} from './actors/resolve-initial-url'\nimport {defineResolvePreviewModeActor} from './actors/resolve-preview-mode'\nimport {defineResolvePreviewModeUrlActor} from './actors/resolve-preview-mode-url'\nimport {API_VERSION} from './constants'\nimport {presentationLocaleNamespace} from './i18n'\nimport {previewUrlMachine, type PreviewUrlRef} from './machines/preview-url'\nimport {type PreviewUrlAllowOption, type PreviewUrlOption} from './types'\nimport {usePresentationPerspective} from './usePresentationPerspective'\n\nexport function usePreviewUrlActorRef(\n previewUrlOption: PreviewUrlOption | undefined,\n allowOption: PreviewUrlAllowOption | undefined,\n): PreviewUrlRef {\n const grantsStore = useGrantsStore()\n const client = useClient({apiVersion: API_VERSION})\n const currentUser = useCurrentUser()\n const currentUserId = currentUser?.id\n const workspace = useActiveWorkspace()\n const studioBasePath = workspace?.activeWorkspace?.basePath || '/'\n const router = useRouter()\n const routerSearchParams = new URLSearchParams(router.state._searchParams)\n const previewSearchParam = routerSearchParams.get('preview')\n const {push: pushToast} = useToast()\n const {t} = useTranslation(presentationLocaleNamespace)\n const perspective = usePresentationPerspective()\n\n const actorRef = useActorRef(\n previewUrlMachine.provide({\n actions: {\n 'notify preview will likely fail': () =>\n pushToast({\n id: 'preview-url-secret.missing-grants',\n closable: true,\n status: 'error',\n duration: Infinity,\n title: t('preview-url-secret.missing-grants'),\n }),\n },\n actors: {\n 'create preview secret': defineCreatePreviewSecretActor({client, currentUserId}),\n 'read shared preview secret': defineReadSharedSecretActor({client}),\n 'resolve allow patterns': defineResolveAllowPatternsActor({\n client,\n allowOption,\n }),\n 'resolve initial url': defineResolveInitialUrlActor({\n client,\n studioBasePath,\n previewUrlOption,\n perspective,\n }),\n 'resolve preview mode': defineResolvePreviewModeActor({\n client,\n previewUrlOption,\n }),\n 'resolve preview mode url': defineResolvePreviewModeUrlActor({\n client,\n studioBasePath,\n previewUrlOption,\n perspective,\n }),\n 'check permission': fromObservable(({input}) =>\n grantsStore.checkDocumentPermission(input.checkPermissionName, input.document),\n ),\n },\n }),\n {input: {previewSearchParam}},\n )\n\n /**\n * Sync changes to router state for the preview search param\n */\n useEffect(() => {\n actorRef.send({type: 'set preview search param', previewSearchParam})\n }, [actorRef, previewSearchParam])\n\n const error = useSelector(actorRef, (state) =>\n // eslint-disable-next-line no-nested-ternary\n state.status === 'error' ? state.error : state.hasTag('error') ? state.context.error : null,\n )\n\n // Propagate the error to the nearest error boundary\n if (error) throw error\n\n return actorRef\n}\n","import {useToast} from '@sanity/ui'\nimport {useSelector} from '@xstate/react'\nimport {useEffect} from 'react'\nimport {Translate, useTranslation} from 'sanity'\nimport {useRouter} from 'sanity/router'\n\nimport {presentationLocaleNamespace} from './i18n'\nimport {type PreviewUrlRef} from './machines/preview-url'\n\nexport function useReportInvalidPreviewSearchParam(previewUrlRef: PreviewUrlRef): void {\n const {t} = useTranslation(presentationLocaleNamespace)\n const {push: pushToast} = useToast()\n const router = useRouter()\n const routerSearchParams = new URLSearchParams(router.state._searchParams)\n const previewSearchParam = routerSearchParams.get('preview')\n\n const allowOrigins = useSelector(previewUrlRef, (state) => state.context.allowOrigins)\n const currentOrigin = useSelector(previewUrlRef, (state) => state.context.previewUrl?.origin)\n useEffect(() => {\n if (!Array.isArray(allowOrigins) || !previewSearchParam || !currentOrigin) return\n const nextOrigin = new URL(previewSearchParam, currentOrigin).origin\n if (!allowOrigins.some((pattern) => pattern.test(nextOrigin))) {\n pushToast({\n closable: true,\n id: `presentation-iframe-origin-mismatch-${nextOrigin}`,\n status: 'error',\n duration: Infinity,\n title: t('preview-search-param.configuration.error.title'),\n description: (\n <Translate\n t={t}\n i18nKey=\"preview-search-param.configuration.error.description\"\n components={{Code: 'code'}}\n values={{\n previewSearchParam,\n blockedOrigin: nextOrigin,\n }}\n />\n ),\n })\n }\n }, [allowOrigins, currentOrigin, previewSearchParam, pushToast, t])\n}\n","import {subcribeToVercelProtectionBypass} from '@sanity/preview-url-secret/toggle-vercel-protection-bypass'\nimport {useEffect, useReducer, useState} from 'react'\nimport {useClient} from 'sanity'\n\nimport {API_VERSION} from './constants'\n\ntype VercelProtectionBypassReadyState = 'loading' | 'ready'\n\nexport function useVercelBypassSecret(): [\n vercelProtectionBypassSecret: string | null,\n vercelProtectionBypassReadyState: VercelProtectionBypassReadyState,\n] {\n const client = useClient({apiVersion: API_VERSION})\n const [vercelProtectionBypassReadyState, ready] = useReducer(\n () => 'ready' as 'ready' | 'loading',\n 'loading',\n )\n const [vercelProtectionBypassSecret, setVercelProtectionBypassSecret] = useState<string | null>(\n null,\n )\n\n useEffect(() => {\n const unsubscribe = subcribeToVercelProtectionBypass(client, (secret) => {\n setVercelProtectionBypassSecret(secret)\n ready()\n })\n return () => unsubscribe()\n }, [client])\n\n return [vercelProtectionBypassSecret, vercelProtectionBypassReadyState]\n}\n","import {useSelector} from '@xstate/react'\nimport {type Tool} from 'sanity'\n\nimport {PresentationSpinner} from './PresentationSpinner'\nimport PresentationTool from './PresentationTool'\nimport {type PresentationPluginOptions} from './types'\nimport {usePreviewUrlActorRef} from './usePreviewUrlActorRef'\nimport {useReportInvalidPreviewSearchParam} from './useReportInvalidPreviewSearchParam'\nimport {useVercelBypassSecret} from './useVercelBypassSecret'\n\nexport default function PresentationToolGrantsCheck({\n tool,\n}: {\n tool: Tool<PresentationPluginOptions>\n}): React.JSX.Element {\n const previewUrlRef = usePreviewUrlActorRef(tool.options?.previewUrl, tool.options?.allowOrigins)\n useReportInvalidPreviewSearchParam(previewUrlRef)\n\n const previewAccessSharingCreatePermission = useSelector(\n previewUrlRef,\n (state) => state.context.previewAccessSharingCreatePermission,\n )\n const previewAccessSharingUpdatePermission = useSelector(\n previewUrlRef,\n (state) => state.context.previewAccessSharingUpdatePermission,\n )\n const previewAccessSharingReadPermission = useSelector(\n previewUrlRef,\n (state) => state.context.previewAccessSharingReadPermission,\n )\n const previewUrlSecretPermission = useSelector(\n previewUrlRef,\n (state) => state.context.previewUrlSecretPermission,\n )\n const url = useSelector(previewUrlRef, (state) => state.context.previewUrl)\n // @TODO the vercel protection bypass can be moved to the iframe level\n const [vercelProtectionBypass, vercelProtectionBypassReadyState] = useVercelBypassSecret()\n\n if (\n !url ||\n vercelProtectionBypassReadyState === 'loading' ||\n !previewAccessSharingCreatePermission ||\n typeof previewAccessSharingCreatePermission.granted === 'undefined' ||\n !previewAccessSharingUpdatePermission ||\n typeof previewAccessSharingUpdatePermission.granted === 'undefined' ||\n !previewUrlSecretPermission ||\n !previewAccessSharingReadPermission ||\n typeof previewAccessSharingReadPermission.granted === 'undefined' ||\n typeof previewUrlSecretPermission.granted === 'undefined'\n ) {\n return <PresentationSpinner />\n }\n\n return (\n <PresentationTool\n tool={tool}\n initialPreviewUrl={url}\n vercelProtectionBypass={vercelProtectionBypass}\n canToggleSharePreviewAccess={\n previewAccessSharingCreatePermission?.granted === true &&\n previewAccessSharingUpdatePermission?.granted === true\n }\n canUseSharedPreviewAccess={previewAccessSharingReadPermission?.granted === true}\n previewUrlRef={previewUrlRef}\n />\n )\n}\n"],"names":["PostMessageFeatures","props","$","_c","comlink","t0","t1","on","_temp","useEffect","memo","features","optimistic","presentationMachine","setup","types","actions","actors","guards","createMachine","id","context","url","error","visualEditingOverlaysEnabled","assign","target","states","description","tags","loading","loaded","event","enabled","idle","refreshing","reloading","initial","SharedStateProvider","children","Symbol","for","sharedState","useRef","t2","state","current","t3","key","value","post","setValue","t4","key_0","removeValue","t5","t6","t7","jsx","PresentationSharedStateContext","Root","styled","div","Panel","defaultSize","minWidth","maxWidth","order","undefined","useContext","PresentationPanelsContext","Error","getPanelStyle","registerElement","unregisterElement","style","type","useLayoutEffect","debounce","fn","timeout","timer","args","clearTimeout","setTimeout","apply","itemKey","getStoredItem","JSON","parse","localStorage","getItem","setStoredItem","data","setItem","stringify","getKeyForPanels","panels","map","panel","join","usePanelsStorage","get","_temp2","set","_temp3","setDebounced","panels_0","widths","stored_0","stored","Array","isArray","some","val","getNextWidth","nextWidth","containerWidth","maxWidthPx","minWidthPx","Math","min","max","getNextWidths","delta","panelBefore","panelAfter","panelsState","initialDragState","prevWidths","initialWidths","nextWidths","pivotPanel","index","findIndex","width","abs","deltaApplied","deltaRemaining","toPrecision","localeCompare","numeric","length","getPanelWidth","getOffset","handleElement","initialOffset","initialHandleElementRect","pointerOffset","clientX","elementOffset","getBoundingClientRect","left","isPanel","element","isResizer","getSortedElements","elements","from","values","sort","a","b","validateWidths","widthsToValidate","total","reduce","remainingWidth","toFixed","getDefaultWidths","panelsWithoutWidth","remainingWidthTotal","widthsWithNulls","defaultWidth","PanelsWrapper","Panels","panelsEl","Map","setElements","useState","filter","setWidths","activeResizer","setActiveResizer","panelsRef","flexGrow","pointerEvents","id_0","prev","has","next","t8","id_1","prev_0","next_0","delete","t9","window","innerWidth","dragOffset","resizerIndex","resizerRect","startX","dragRef","t10","id_2","elementsArr","el","resizer","resizeElement","acc","el_0","i","acc_0","el_1","i_0","pageX","startDragging","t11","stopDragging","t12","id_3","event_0","preventDefault","stopPropagation","resizer_0","resizeElement_0","offset","rect","prevWidth","i_1","drag","t13","t14","storage","t15","t16","widths_0","storedWidths","validatedStoredWidths","defaultWidths","t17","t18","t19","t20","resizeObserver","ResizeObserver","prevWidths_0","nextWidths_0","prevWidth_0","i_2","observe","disconnect","t21","t22","t23","t24","ErrorCard","message","onContinueAnyway","onRetry","restProps","t","useTranslation","presentationLocaleNamespace","Button","retryButton","continueAnywayButton","Text","jsxs","Stack","Inline","Box","Flex","Container","Card","encodeQueryString","params","parts","Object","entries","resolveQueryStringFromParams","nextParams","allowed","safeNextParams","includes","obj","BackLink","forwardRef","ref","searchParams","_searchParams","StateLink","ReferenceChildLink","documentId","documentType","parentRefPath","template","PresentationPaneRouterProvider","onStructureParams","structureParams","refs","routerState","resolvePathFromState","useRouter","fromEntries","routerSearchParams","useUnique","path","qs","createPathWithParams","childLinkProps","childId","find","r","_id","getPublishedId","_type","backLinkProps","childLinkProps_0","nextParams_0","inspect","groupIndex","siblingIndex","payload","hasGroupSiblings","groupLength","routerPanesState","ChildLink","ParameterizedLink","closeCurrentAndAfter","handleEditReference","replaceCurrent","_temp4","closeCurrent","_temp5","duplicateCurrent","_temp6","setView","_temp7","setParams","setPayload","_temp8","navigateIntent","_temp9","PaneRouterContext","intentName","intentParams","options_0","console","warn","options","viewId","pane_0","pane","RootLayout","PaneLayout","WrappedCode","Code","DocumentListPane","mainDocumentState","devMode","usePresentationTool","document","ids","schemaTypeName","title","errorParams","setErrorParams","handleRetry","Label","StructureDocumentListPane","ErrorBoundary","StructureToolProvider","r_0","DocumentPane","onFocusPath","templateParams","decodeJsonParams","templateParameters","paneDocumentNode","height","PresentationSpinner","Suspense","StructureDocumentPane","DocumentPanel","usePreviewState","schemaType","documentPreviewStore","useDocumentPreviewStore","preview","setPreview","perspectiveStack","usePerspective","subscription","getPreviewStateObservable","subscribe","unsubscribe","ContentEditor","schema","useSchema","props_0","MainDocumentLink","previewState","bb0","snapshot","getPreviewValueWithFallback","fallback","SanityDefaultPreview","PreviewCard","WarningOutlineIcon","Translate","usePanelId","uuid","panelId","Resizer","ResizerInner","$disabled","PanelResizer","propId","disabled","isDragging","nativeEvent","onMouseDown","e","onDrag","blur","onDragStop","resetDocumentStyles","bodyStyle","body","documentStyle","documentElement","cursor","userSelect","removeProperty","addEventListener","removeEventListener","PresentationContentWrapper","setDisplayedDocument","getCommentIntent","CommentsIntentProvider","DisplayedDocumentBroadcasterProvider","PresentationContent","documentsOnPage","PresentationNavigateProvider","navigate","_navigate","PresentationNavigateContext","useLocalState","defaultValue","usePresentationNavigator","unstable_navigator","navigatorProvided","component","_navigatorEnabled","setNavigatorEnabled","navigatorEnabled","toggleNavigator","Component","NavigatorComponent","navigatorDisabled","Navigator","PresentationParamsProvider","PresentationParamsContext","PresentationProvider","name","PresentationContext","useAllowPatterns","previewUrlRef","allowPatterns","useSelector","TypeError","allowOrigins","encodeStudioPerspective","studioPerspective","useId","useReactId","startsWith","replace","IFrame","forwardedRef","animate","onLoad","preventClick","src","variants","useImperativeHandle","instance","handleBlur","activeElement","dispatchEvent","MouseEvent","bubbles","cancelable","viewTransitionName","IFrameElement","motion","create","iframe","IFrameOverlay","GlobalViewTransition","createGlobalStyle","OpenPreviewButton","openPopup","previewLocationOrigin","previewLocationRoute","perspective","targetOrigin","URL","urlSearchParamPreviewPerspective","pathname","search","openPreviewLink","currentTarget","href","handleOpenPopup","LaunchIcon","Tooltip","useTargetOrigin","previewUrl","origin","PreviewLocationInput","fontSize","onChange","padding","prefix","suffix","basePath","useActiveWorkspace","activeWorkspace","inputRef","sessionValue","setSessionValue","customValidity","setCustomValidity","handleChange","absoluteValue","toString","pattern","test","reportValidity","nextValue","handleKeyDown","nextValue_0","handleClear","icon","ResetIcon","zIndex","TextInput","QRCodeSVG","lazy","QrCodeLogoSize","QrCodeLogoPadding","QrSize","StyledSanityMonogram","SanityMonogram","MotionSpinner","Spinner","MotionText","MotionMonogram","SharePreviewMenu","canToggleSharePreviewAccess","canUseSharedPreviewAccess","initialUrl","push","pushToast","useToast","client","useClient","apiVersion","API_VERSION","currentUser","useCurrentUser","setLoading","enabling","setEnabling","disabling","setDisabling","secret","setSecret","busy","useMemo","setSecretSearchParams","setError","handleUnableToToggle","useCallback","closable","status","handleDisableSharing","disablePreviewAccessSharing","location","handleEnableSharing","previewUrlSecret","enablePreviewAccessSharing","handleCopyUrl","navigator","clipboard","writeText","controller","AbortController","usedTags","fetchShareSecret","lastLiveEventId","signal","result","syncTags","fetch","fetchSharedAccessQuery","filterResponse","tag","aborted","live","events","abort","finally","MenuButton","ShareIcon","Menu","Fragment","Grid","justifyContent","alignItems","gridTemplateColumns","gridTemplateRows","Switch","position","aspectRatio","display","AnimatePresence","opacity","textWrap","textAlign","MenuDivider","MenuItem","CopyIcon","constrainSize","placement","portal","displayName","PreviewHeaderDefault","canSharePreviewAccess","iframeRef","onPathChange","onRefresh","overlaysConnection","presentationRef","setViewport","toggleOverlay","viewport","toggleViewportSize","send","handleRefresh","isLoading","isLoaded","isRefreshing","isReloading","overlaysEnabled","previewURL","withoutSecretSearchParams","perspectiveToggleTooltipId","previewUrlBusy","PanelLeftIcon","content","fallbackPlacements","whiteSpace","Hotkeys","marginTop","marginBottom","lineHeight","borderRadius","margin","t25","t26","t27","t28","t29","t30","RefreshIcon","t31","t32","t33","t34","node","setProperty","t35","t36","t37","t38","t39","t40","MobileDeviceIcon","DesktopIcon","t41","t42","t43","t44","PreviewHeader","renderDefault","HeaderComponent","header","minHeight","matches","state_0","state_1","state_2","state_3","state_4","hasTag","MotionFlex","Preview","loadersConnection","vercelProtectionBypass","stablePerspective","setStablePerspective","urlPerspective","urlSearchParamVercelProtectionBypass","urlSearchParamVercelSetBypassCookie","prefersReducedMotion","usePrefersReducedMotion","previewHeader","timedOut","setTimedOut","somethingIsWrong","setSomethingIsWrong","iframeIsBusy","handleContinueAnyway","setContinueAnyway","continueAnyway","showOverlaysConnectionStatus","setShowOverlaysConnectionState","MAX_TIME_TO_OVERLAYS_CONNECTION","onIFrameLoad","preventIframeInteraction","canUseViewTransition","useSyncExternalStore","CSS","supports","iframeAnimations","currentViewport","setCurrentViewport","iframeStyle","setIframeStyle","iframeVariants","update","startViewTransition","flushSync","toast","checkOrigin","setCheckOrigin","reportedMismatches","Set","reportMismatchingOrigin","useEffectEvent","reportedOrigin","allow","add","duration","Infinity","usePresentationNavigate","navigateEvent","nextUrl","hash","contentWindow","createController","addTarget","createChannel","heartbeat","connectTo","createConnectionMachine","provide","createCompatibilityActors","stop","start","destroy","interval","setInterval","postMessage","domain","clearInterval","MotionConfig","TooltipDelayGroupProvider","spinnerVariants","inset","backdropFilter","WebkitBackdropFilter","WebkitTransition","sizes","errorVariants","background","desktop","mobile","exit","boxShadow","scale","active","defineWarnOnce","warned","warnOnceAboutCrossDatasetReference","useDocumentsOnPage","frameStateRef","validateApiPerspective","published","setPublished","previewDrafts","setPreviewDrafts","urlRef","perspective_0","documents","setCache","cache","isEqual","setDocumentsOnPage","keyedCache","uniqueDocuments","cache_0","forEach","doc","sourceDocument","_projectId","fnOrObj","arg","Function","getQueryFromResult","resolver","resolve","getParamsFromResult","getRouteContext","route","routes","absolute","match","decode","decodeURIComponent","useMainDocument","navigationHistory","resolvers","relativeUrl","setMainDocumentState","mainDocumentIdRef","at","handleResponse","url_0","query","then","doc_0","catch","parseId","rawId","segments","split","shift","parsePath","rawPath","studioPath","urlStringToPath","parseRouterState","pruneObject","useParams","initialPreviewUrl","routerNavigate","rev","since","view","pathKey","instruction","comment","changesInspectorTab","routerStateRef","setNavigationHistory","nextState","nextSearchState","forceReplace","routerSearchState","searchState","usePopups","popups","setPopups","source","open","unsubs","size","source_0","closed","source_1","source_2","POPUP_CHECK_INTERVAL","unsub","usePresentationPerspective","selectedPerspectiveName","selectedReleaseId","useStatus","statusMap","setStatusMap","handshaking","memoStatus","connection","hasConnected_0","hasConnected","status_1","setStatusFromEvent","status_0","LiveQueries","PostMessageDocuments","PostMessageRefreshMutations","PostMessagePerspective","PostMessagePreviewSnapshots","PostMessageSchema","PostMessageTelemetry","PresentationTool","tool","components","DEFAULT_TOOL_NAME","unstable_header","previewMode","shareAccess","option","hostname","setController","visualEditingComlink","setVisualEditingComlink","useActorRef","projectId","useProjectId","dataset","useDataset","mainDocuments","setOverlaysConnection","setLoadersConnection","previewKitConnection","setPreviewKitConnection","handleNavigate","urlWithoutSearch","URLSearchParams","refreshRef","onStatus","handleFocusPath","nextPath","handlePreviewPath","handleStructureParams","frameOrigin","previewOrigin","newUrl","displayedDocument","handleKeyUp","isAltKey","handleKeydown","isHotkey","boundaryElement","setBoundaryElement","PresentationNavigator","livePreviewEnabled","workspace","useWorkspace","COMMENTS_INSPECTOR_NAME","mode","EDIT_INTENT_MODE","BoundaryElementProvider","IS_MAC","platform","MODIFIERS","alt","ctrl","mod","keys","every","toUpperCase","defineCreatePreviewSecretActor","currentUserId","fromPromise","createPreviewSecret","defineReadSharedSecretActor","defineResolveAllowPatternsActor","allowOption","input","URLPattern","maybePatterns","urlPatterns","urlPattern","defineResolveInitialUrlActor","studioBasePath","previewUrlOption","studioPreviewPerspective","previewSearchParam","defineResolvePreviewModeActor","draftMode","enable","defineResolvePreviewModeUrlActor","resolvedPreviewMode","urlSearchParamPreviewSecret","urlSearchParamPreviewPathname","resolveUrlFromPreviewSearchParamActor","previewSearchParamUrl","shareAccessSingletonDocument","schemaIdSingleton","schemaTypeSingleton","previewUrlSecretDocument","previewUrlMachine","log","_","cause","fromObservable","throwError","Promise","reject","has checked permissions","Boolean","previewAccessSharingCreatePermission","previewAccessSharingReadPermission","previewAccessSharingUpdatePermission","previewUrlSecretPermission","search param has new origin","can create preview secret","granted","has preview mode with created secret","has preview mode with share access","has preview mode without permissions","delays","expiredSecret","expiresAt","now","Date","getTime","invoke","checkPermissionName","onError","onSnapshot","checkingPermissions","always","guard","resolvingInitialUrl","onDone","output","resolvingAllowPatterns","resolvingUrlFromPreviewSearchParam","resolvingPreviewMode","reenter","success","readShareAccess","resolvePreviewUrl","after","usePreviewUrlActorRef","grantsStore","useGrantsStore","router","checkDocumentPermission","actorRef","useReportInvalidPreviewSearchParam","currentOrigin","nextOrigin","blockedOrigin","useVercelBypassSecret","vercelProtectionBypassReadyState","ready","useReducer","vercelProtectionBypassSecret","setVercelProtectionBypassSecret","subcribeToVercelProtectionBypass","PresentationToolGrantsCheck"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"PresentationToolGrantsCheck.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/util/encodeStudioPerspective.ts","../../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/warnOnce.ts","../../src/presentation/useDocumentsOnPage.ts","../../src/presentation/useMainDocument.ts","../../../../node_modules/.pnpm/@sanity+visual-editing-csm@2.0.13_@sanity+client@6.28.4_debug@4.4.0__@sanity+types@packages+@_ozmcgt2lxnnze463jvzofaavqm/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'\n\nimport {StructureToolProvider} from '../../structure/StructureToolProvider'\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 usePerspective,\n} from 'sanity'\n\ninterface PreviewState {\n isLoading?: boolean\n snapshot?: PreviewValue | Partial<SanityDocument> | null\n}\n\nexport default function usePreviewState(documentId: string, schemaType?: SchemaType): PreviewState {\n const documentPreviewStore = useDocumentPreviewStore()\n const [preview, setPreview] = useState<PreviewState>({})\n const {perspectiveStack} = usePerspective()\n useEffect(() => {\n if (!schemaType) {\n return undefined\n }\n const subscription = getPreviewStateObservable(\n documentPreviewStore,\n schemaType,\n documentId,\n perspectiveStack,\n ).subscribe((state) => {\n setPreview(state)\n })\n\n return () => {\n subscription?.unsubscribe()\n }\n }, [documentPreviewStore, schemaType, documentId, perspectiveStack])\n\n return preview\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {type HTMLProps, useCallback, useMemo} from 'react'\nimport {\n getPreviewValueWithFallback,\n type Path,\n PreviewCard,\n SanityDefaultPreview,\n Translate,\n useSchema,\n useTranslation,\n} from 'sanity'\nimport {StateLink} from 'sanity/router'\n\nimport {presentationLocaleNamespace} from '../i18n'\nimport {\n type MainDocumentState,\n type 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 snapshot: previewState.snapshot,\n fallback: mainDocumentState!.document,\n })}\n schemaType={schemaType}\n status={\n <Card padding={1} radius={2} shadow={1}>\n <Text muted size={0} weight=\"medium\">\n {t('main-document.label')}\n </Text>\n </Card>\n }\n />\n )\n }, [mainDocumentState, schemaType, t, previewState])\n\n if (documentId && documentType) {\n return (\n <DocumentPanel\n documentId={documentId}\n documentType={documentType}\n 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","/**\n * When encoding the current studio perspective it's necessary to deal with it sometimes being an array, in a consistent way.\n */\nexport function encodeStudioPerspective(studioPerspective: string[] | string): string {\n return Array.isArray(studioPerspective) ? studioPerspective.join(',') : studioPerspective\n}\n","import {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 {urlSearchParamPreviewPerspective} from '@sanity/preview-url-secret/constants'\nimport {Text} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type PresentationPerspective} from '../types'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {type PreviewProps} from './Preview'\n\n/** @internal */\nexport function OpenPreviewButton(\n props: Pick<PreviewProps, 'openPopup'> & {\n previewLocationOrigin?: string\n previewLocationRoute: string\n perspective: PresentationPerspective\n targetOrigin: string\n },\n): React.ReactNode {\n const {openPopup, previewLocationOrigin, previewLocationRoute, perspective, targetOrigin} = props\n\n const openPreviewLink = useMemo(() => {\n const url = new URL(previewLocationRoute, previewLocationOrigin || targetOrigin)\n url.searchParams.set(urlSearchParamPreviewPerspective, encodeStudioPerspective(perspective))\n const {pathname, search} = url\n\n return `${previewLocationOrigin}${pathname}${search}`\n }, [perspective, previewLocationOrigin, previewLocationRoute, targetOrigin])\n\n const {t} = useTranslation(presentationLocaleNamespace)\n\n const handleOpenPopup = useCallback(\n (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n event.preventDefault()\n openPopup(event.currentTarget.href)\n },\n [openPopup],\n )\n\n return (\n <Tooltip\n animate\n content={<Text size={1}>{t('share-url.menu-item.open.text')}</Text>}\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Button\n as=\"a\"\n aria-label={t('share-url.menu-item.open.text')}\n icon={LaunchIcon}\n mode=\"bleed\"\n href={openPreviewLink}\n rel=\"opener\"\n target=\"_blank\"\n tooltipProps={null}\n // @ts-expect-error the `as=\"a\"` prop isn't enough to change the type of event.target from <div> to <a>\n onClick={handleOpenPopup}\n />\n </Tooltip>\n )\n}\n","import {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 ClientPerspective, type SyncTag} from '@sanity/client'\nimport {CopyIcon, ShareIcon} from '@sanity/icons'\nimport {SanityMonogram} from '@sanity/logos'\nimport {fetchSharedAccessQuery} from '@sanity/preview-url-secret/constants'\nimport {\n disablePreviewAccessSharing,\n enablePreviewAccessSharing,\n} from '@sanity/preview-url-secret/toggle-preview-access-sharing'\nimport {setSecretSearchParams} from '@sanity/preview-url-secret/without-secret-search-params'\nimport {\n Box,\n Card,\n Grid,\n Menu,\n MenuDivider,\n Spinner,\n Stack,\n Switch,\n Text,\n useToast,\n} from '@sanity/ui'\nimport {AnimatePresence, motion} from 'framer-motion'\nimport {lazy, memo, Suspense, useCallback, useEffect, useMemo, useState} from 'react'\nimport {useClient, useCurrentUser, useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {Button, MenuButton, MenuItem, Tooltip} from '../../ui-components'\nimport {API_VERSION} from '../constants'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {type PreviewProps} from './Preview'\n\nconst QRCodeSVG = lazy(() => import('./QRCodeSVG'))\n\nexport interface SharePreviewMenuProps {\n canToggleSharePreviewAccess: boolean\n canUseSharedPreviewAccess: boolean\n previewLocationRoute: string\n initialUrl: PreviewProps['initialUrl']\n perspective: ClientPerspective\n}\n\nconst QrCodeLogoSize = 24\nconst QrCodeLogoPadding = 16\nconst QrSize = 224\n\nconst StyledSanityMonogram = styled(SanityMonogram)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n height: ${QrCodeLogoSize}px;\n width: ${QrCodeLogoSize}px;\n`\n\nconst MotionSpinner = motion.create(Spinner)\nconst MotionText = motion.create(Text)\nconst MotionMonogram = motion.create(StyledSanityMonogram)\n\nexport const SharePreviewMenu = memo(function SharePreviewMenuComponent(\n props: SharePreviewMenuProps,\n) {\n const {\n canToggleSharePreviewAccess,\n canUseSharedPreviewAccess,\n initialUrl,\n previewLocationRoute,\n perspective,\n } = props\n const {t} = useTranslation(presentationLocaleNamespace)\n const {push: pushToast} = useToast()\n const client = useClient({apiVersion: API_VERSION})\n const currentUser = useCurrentUser()\n const [loading, setLoading] = useState(true)\n const [enabling, setEnabling] = useState(false)\n const [disabling, setDisabling] = useState(false)\n const [secret, setSecret] = useState<string | null>(null)\n const busy = enabling || disabling || loading\n const url = useMemo(\n () =>\n secret\n ? setSecretSearchParams(\n initialUrl,\n secret,\n previewLocationRoute,\n encodeStudioPerspective(perspective),\n )\n : null,\n [initialUrl, perspective, previewLocationRoute, secret],\n )\n\n const [error, setError] = useState<unknown>(null)\n if (error) {\n throw error\n }\n\n const handleUnableToToggle = useCallback(() => {\n pushToast({\n closable: true,\n status: 'warning',\n title: t('share-preview-menu.error_toggle-sharing', {context: 'toggle-sharing'}),\n })\n }, [pushToast, t])\n\n const handleDisableSharing = useCallback(async () => {\n try {\n setDisabling(true)\n await disablePreviewAccessSharing(\n client,\n '@sanity/presentation',\n typeof window === 'undefined' ? '' : location.href,\n currentUser?.id,\n )\n setSecret(null)\n } catch (error) {\n setError(error)\n } finally {\n setDisabling(false)\n }\n }, [client, currentUser?.id])\n const handleEnableSharing = useCallback(async () => {\n try {\n setEnabling(true)\n\n const previewUrlSecret = await enablePreviewAccessSharing(\n client,\n '@sanity/presentation',\n typeof window === 'undefined' ? '' : location.href,\n currentUser?.id,\n )\n setSecret(previewUrlSecret.secret)\n } catch (error) {\n setError(error)\n } finally {\n setEnabling(false)\n }\n }, [client, currentUser?.id])\n\n const handleCopyUrl = useCallback(() => {\n try {\n if (!url) {\n throw new Error('No URL to copy')\n }\n navigator.clipboard.writeText(url.toString())\n pushToast({\n closable: true,\n status: 'success',\n title: t('share-url.clipboard.status', {context: 'success'}),\n })\n } catch (error) {\n setError(error)\n }\n }, [pushToast, t, url])\n\n useEffect(() => {\n let controller = new AbortController()\n let usedTags: SyncTag[] = []\n async function fetchShareSecret(lastLiveEventId: string | null, signal: AbortSignal) {\n const {result, syncTags} = await client.fetch<string | null>(\n fetchSharedAccessQuery,\n {},\n {filterResponse: false, lastLiveEventId, tag: 'presentation.fetch-shared-access-secret'},\n )\n if (Array.isArray(syncTags)) {\n usedTags = syncTags\n }\n if (!signal.aborted) {\n setSecret(result)\n }\n }\n const subscription = client.live.events().subscribe({\n next: (event) => {\n if (event.type === 'message') {\n controller.abort()\n controller = new AbortController()\n if (event.tags.some((tag) => usedTags.includes(tag))) {\n fetchShareSecret(event.id, controller.signal)\n }\n }\n },\n error: setError,\n })\n\n fetchShareSecret(null, controller.signal).finally(() => setLoading(false))\n\n return () => {\n subscription.unsubscribe()\n controller.abort()\n }\n }, [client])\n\n return (\n <MenuButton\n button={\n <Button\n aria-label={t('preview-frame.share-button.aria-label')}\n icon={ShareIcon}\n mode=\"bleed\"\n tooltipProps={null}\n />\n }\n id=\"share-menu\"\n menu={\n <Menu style={{maxWidth: 248}} padding={canUseSharedPreviewAccess ? undefined : 0}>\n {canUseSharedPreviewAccess ? (\n <>\n <label style={{cursor: 'pointer'}}>\n <Grid\n columns={2}\n rows={2}\n gapX={3}\n gapY={1}\n style={{\n justifyContent: 'center',\n alignItems: 'center',\n gridTemplateColumns: 'min-content 1fr',\n gridTemplateRows: 'min-content',\n }}\n paddingTop={3}\n paddingX={3}\n >\n <Tooltip\n animate\n content={\n <Text size={1}>\n {t('share-preview-menu.toggle-button.tooltip', {\n context: url ? 'disable' : 'enable',\n })}\n </Text>\n }\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Switch\n checked={enabling || (url !== null && !disabling)}\n readOnly={enabling || disabling}\n indeterminate={loading}\n onChange={\n !canToggleSharePreviewAccess\n ? handleUnableToToggle\n : url\n ? handleDisableSharing\n : handleEnableSharing\n }\n />\n </Tooltip>\n <Text size={1} weight=\"medium\">\n {t('share-preview-menu.toggle-button.label', {context: 'first-line'})}\n </Text>\n <span />\n <Text muted size={1}>\n {t('share-preview-menu.toggle-button.label', {context: 'second-line'})}\n </Text>\n </Grid>\n </label>\n <Box padding={3} paddingTop={2}>\n <Stack space={3}>\n <Card\n tone={busy || !url ? 'transparent' : undefined}\n style={{\n position: 'relative',\n aspectRatio: '1 / 1',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <AnimatePresence>\n {busy ? (\n <MotionSpinner\n muted\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n exit={{opacity: 0}}\n />\n ) : url ? (\n <>\n <Suspense fallback={<Spinner />}>\n <QRCodeSVG\n title={t('share-preview-menu.qr-code.title', {url: url.toString()})}\n value={url.toString()}\n size={QrSize}\n color=\"var(--card-fg-color)\"\n logoSize={QrCodeLogoSize + QrCodeLogoPadding}\n />\n <MotionMonogram\n initial={{opacity: -0.5}}\n animate={{opacity: 1.5}}\n exit={{opacity: 0}}\n />\n </Suspense>\n </>\n ) : (\n <MotionText\n muted\n size={1}\n style={{maxWidth: '100px', textWrap: 'pretty', textAlign: 'center'}}\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n exit={{opacity: 0}}\n >\n {t('share-preview-menu.qr-code.placeholder')}\n </MotionText>\n )}\n </AnimatePresence>\n </Card>\n <Text muted size={1}>\n {t('share-preview-menu.qr-code.instructions')}\n </Text>\n </Stack>\n </Box>\n <MenuDivider />\n <MenuItem\n disabled={!url || disabling}\n icon={CopyIcon}\n onClick={handleCopyUrl}\n text={t('share-preview-menu.copy-url.text')}\n />\n </>\n ) : (\n <Card padding={2} tone=\"caution\" radius={3}>\n <Text style={{textWrap: 'pretty'}}>\n {t('share-preview-menu.error', {context: 'missing-grants'})}\n </Text>\n </Card>\n )}\n </Menu>\n }\n popover={{\n constrainSize: true,\n placement: 'bottom',\n portal: true,\n }}\n />\n )\n})\nSharePreviewMenu.displayName = 'Memo(SharePreviewMenu)'\n","import {DesktopIcon, MobileDeviceIcon, PanelLeftIcon, RefreshIcon} from '@sanity/icons'\nimport {withoutSecretSearchParams} from '@sanity/preview-url-secret/without-secret-search-params'\nimport {Box, Card, Flex, Hotkeys, Switch, Text} from '@sanity/ui'\nimport {type RefObject, useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {ACTION_IFRAME_RELOAD} from '../reducers/presentationReducer'\nimport {type HeaderOptions} from '../types'\nimport {OpenPreviewButton} from './OpenPreviewButton'\nimport {type PreviewProps} from './Preview'\nimport {PreviewLocationInput} from './PreviewLocationInput'\nimport {SharePreviewMenu} from './SharePreviewMenu'\n\n/** @public */\nexport interface PreviewHeaderProps extends PreviewProps {\n iframeRef: RefObject<HTMLIFrameElement | null>\n renderDefault: (props: PreviewHeaderProps) => React.JSX.Element\n}\n\nconst PreviewHeaderDefault = (props: Omit<PreviewHeaderProps, 'renderDefault'>) => {\n const {\n canSharePreviewAccess,\n canToggleSharePreviewAccess,\n canUseSharedPreviewAccess,\n dispatch,\n iframe,\n iframeRef,\n initialUrl,\n navigatorEnabled,\n onPathChange,\n onRefresh,\n openPopup,\n overlaysConnection,\n perspective,\n previewUrl,\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 perspective={perspective}\n targetOrigin={targetOrigin}\n />\n </Box>\n }\n value={previewLocationRoute}\n />\n </Box>\n\n <Flex align=\"center\" flex=\"none\" gap={1}>\n <Tooltip\n animate\n content={\n <Text size={1}>\n {t('preview-frame.viewport-button.tooltip', {\n context: viewport === 'desktop' ? 'narrow' : 'full',\n })}\n </Text>\n }\n fallbackPlacements={['bottom-start']}\n placement=\"bottom\"\n portal\n >\n <Button\n data-testid=\"preview-viewport-toggle\"\n data-viewport={viewport}\n aria-label={t('preview-frame.viewport-button.aria-label')}\n icon={viewport === 'desktop' ? MobileDeviceIcon : DesktopIcon}\n mode=\"bleed\"\n onClick={toggleViewportSize}\n tooltipProps={null}\n />\n </Tooltip>\n </Flex>\n\n {canSharePreviewAccess && (\n <Flex align=\"center\" flex=\"none\" gap={1}>\n <SharePreviewMenu\n canToggleSharePreviewAccess={canToggleSharePreviewAccess}\n canUseSharedPreviewAccess={canUseSharedPreviewAccess}\n previewLocationRoute={previewLocationRoute}\n initialUrl={initialUrl}\n perspective={perspective}\n />\n </Flex>\n )}\n </Flex>\n )\n}\n\n/** @internal */\nexport function PreviewHeader(\n props: Omit<PreviewHeaderProps, 'renderDefault'> & {options?: HeaderOptions},\n): React.JSX.Element {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const renderDefault = useCallback((props: Omit<PreviewHeaderProps, 'renderDefault'>) => {\n return <PreviewHeaderDefault {...props} />\n }, [])\n\n const HeaderComponent = props.options?.component\n const header = HeaderComponent ? (\n <HeaderComponent {...props} renderDefault={renderDefault} />\n ) : (\n renderDefault(props)\n )\n\n return (\n <Card flex=\"none\" padding={2} borderBottom style={{position: 'relative'}}>\n <Flex align=\"center\" style={{minHeight: 0}}>\n {header}\n </Flex>\n </Card>\n )\n}\n","/* eslint-disable react/no-unused-prop-types,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 {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {IFrame} from './IFrame'\nimport {PreviewHeader} 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 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 = encodeStudioPerspective(\n stablePerspective === null ? perspective : stablePerspective,\n )\n const previewUrl = useMemo(() => {\n const url = new URL(initialUrl)\n // Always set the perspective that's being used, even if preview mode isn't configured\n if (!url.searchParams.get(urlSearchParamPreviewPerspective)) {\n url.searchParams.set(urlSearchParamPreviewPerspective, urlPerspective)\n }\n\n if (vercelProtectionBypass || url.searchParams.get(urlSearchParamVercelProtectionBypass)) {\n // samesitenone is required since the request is from an iframe\n url.searchParams.set(\n urlSearchParamVercelSetBypassCookie,\n 'samesitenone' satisfies VercelSetBypassCookieValue,\n )\n }\n // If there's a vercel protection bypass secret in the context, set it if none exists already\n if (vercelProtectionBypass && !url.searchParams.get(urlSearchParamVercelProtectionBypass)) {\n url.searchParams.set(urlSearchParamVercelProtectionBypass, vercelProtectionBypass)\n }\n\n return url\n }, [initialUrl, urlPerspective, vercelProtectionBypass])\n\n useEffect(() => {\n /**\n * If the preview iframe is connected to the loader, we know that switching the perspective can be done without reloading the iframe.\n */\n if (loadersConnection === 'connected') {\n /**\n * Only set the stable perspective if it hasn't been set yet.\n */\n setStablePerspective((prev) => (prev === null ? perspective : prev))\n }\n }, [loadersConnection, perspective])\n\n const {t} = useTranslation(presentationLocaleNamespace)\n const {devMode} = usePresentationTool()\n const prefersReducedMotion = usePrefersReducedMotion()\n const ref = useRef<HTMLIFrameElement | null>(null)\n\n const previewHeader = <PreviewHeader {...props} iframeRef={ref} options={header} />\n\n // Forward the iframe ref to the parent component\n useImperativeHandle<HTMLIFrameElement | null, HTMLIFrameElement | null>(\n forwardedRef,\n () => ref.current,\n )\n\n const 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","/** @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 {validateApiPerspective} from '@sanity/client'\nimport isEqual from 'fast-deep-equal'\nimport {type MutableRefObject, useCallback, useMemo, useRef, useState} from 'react'\n\nimport {type FrameState, type PresentationPerspective} from './types'\nimport {defineWarnOnce} from './util/warnOnce'\n\nexport type DocumentOnPage = {\n _id: string\n _type: string\n}\n\ntype DocumentCache = Record<string, DocumentOnPage>\ntype KeyedDocumentCache = Record<string, DocumentCache>\n\nconst warnOnceAboutCrossDatasetReference = defineWarnOnce()\n\n/**\n * @TODO should be refactored to an lru-cache that is keyed by the perspective, which could be an array (if it is, it should use consistent sorting),\n * and the url path (optionally the origin too), so that swapping between perspectives and urls is fast.\n */\nexport function useDocumentsOnPage(\n perspective: PresentationPerspective,\n frameStateRef: MutableRefObject<FrameState>,\n): [\n DocumentOnPage[],\n (key: string, perspective: PresentationPerspective, state: DocumentOnPage[]) => void,\n] {\n validateApiPerspective(perspective)\n\n const [published, setPublished] = useState<KeyedDocumentCache>({})\n const [previewDrafts, setPreviewDrafts] = useState<KeyedDocumentCache>({})\n\n // Used to compare the frame url with its value when the cache was last updated\n // If the url has changed, the entire cache is replaced\n const urlRef = useRef<string | undefined>('')\n\n const setDocumentsOnPage = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (key: string, perspective: PresentationPerspective, sourceDocuments: DocumentOnPage[] = []) => {\n const documents = sourceDocuments.filter((sourceDocument) => {\n if ('_projectId' in sourceDocument && sourceDocument._projectId) {\n // 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, usePerspective} from 'sanity'\nimport {type RouterState, useRouter} from 'sanity/router'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {API_VERSION} from './constants'\nimport {\n type DocumentResolver,\n type DocumentResolverContext,\n type MainDocument,\n type MainDocumentState,\n type PresentationNavigate,\n 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 {perspectiveStack} = usePerspective()\n const client = useClient({apiVersion: API_VERSION})\n const relativeUrl =\n path || routerState._searchParams?.find(([key]) => key === 'preview')?.[1] || ''\n\n const [mainDocumentState, setMainDocumentState] = useState<MainDocumentState | undefined>(\n undefined,\n )\n const mainDocumentIdRef = useRef<string | undefined>(undefined)\n\n const handleResponse = useEffectEvent((doc: MainDocument | undefined, url: URL) => {\n if (!doc || mainDocumentIdRef.current !== doc._id) {\n setMainDocumentState({\n document: doc,\n path: url.pathname,\n })\n mainDocumentIdRef.current = doc?._id\n\n // We only want to force a navigation to the main document if\n // the path changed but the document ID did not. An explicit\n // document navigation should take precedence over displaying\n // the main document. We determine if an explicit document\n // navigation has occured by comparing the IDs of the last two\n // resultant navigation states.\n if (navigationHistory.at(-1)?.id === navigationHistory.at(-2)?.id) {\n navigate?.({\n 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 for (const resolver of resolvers) {\n const context = getRouteContext(resolver.route, url)\n if (context) {\n result = {context, resolver}\n break\n }\n }\n\n if (result) {\n const query = getQueryFromResult(result.resolver, result.context)\n const params = getParamsFromResult(result.resolver, result.context)\n if (query) {\n const controller = new AbortController()\n const options: ResponseQueryOptions = {\n perspective: perspectiveStack,\n signal: controller.signal,\n tag: 'use-main-document',\n }\n\n client\n .fetch<MainDocument | undefined>(query, params, options)\n .then((doc) => handleResponse(doc, url))\n .catch((e) => {\n if (e instanceof Error && e.name === 'AbortError') return\n setMainDocumentState({document: undefined, path: url.pathname})\n mainDocumentIdRef.current = undefined\n })\n return () => {\n controller.abort()\n }\n }\n }\n }\n setMainDocumentState(undefined)\n mainDocumentIdRef.current = undefined\n return undefined\n }, [client, previewUrl, relativeUrl, resolvers, perspectiveStack])\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 PresentationPerspective, type PreviewUrlOption} from './types'\nimport {encodeStudioPerspective} from './util/encodeStudioPerspective'\n\nexport function usePreviewUrl(\n previewUrl: PreviewUrlOption,\n toolName: string,\n studioPreviewPerspective: PresentationPerspective,\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: encodeStudioPerspective(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 usePerspective,\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 {\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 const {perspectiveStack, selectedPerspectiveName = 'drafts', selectedReleaseId} = usePerspective()\n const perspective = (\n selectedReleaseId ? perspectiveStack : selectedPerspectiveName\n ) as PresentationPerspective\n\n const initialPreviewUrl = usePreviewUrl(\n _previewUrl || '/',\n name,\n perspective,\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 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 return () => {\n stop()\n setVisualEditingComlink(null)\n }\n }, [controller, 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 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 return (\n <>\n <PresentationProvider\n devMode={devMode}\n name={name}\n navigate={navigate}\n params={params}\n searchParams={searchParams}\n structureParams={structureParams}\n >\n <PresentationNavigateProvider navigate={navigate}>\n <PresentationParamsProvider params={params}>\n <SharedStateProvider comlink={visualEditingComlink}>\n <Container data-testid=\"presentation-root\" height=\"fill\">\n <Panels>\n <PresentationNavigator />\n <Panel\n id=\"preview\"\n minWidth={325}\n defaultSize={navigatorEnabled ? 50 : 75}\n order={3}\n >\n <Flex direction=\"column\" flex={1} height=\"fill\" ref={setBoundaryElement}>\n <BoundaryElementProvider element={boundaryElement}>\n <Preview\n // 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 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 && (\n <PostMessageDocuments comlink={visualEditingComlink} perspective={perspective} />\n )}\n {visualEditingComlink && <PostMessageFeatures comlink={visualEditingComlink} />}\n {visualEditingComlink && (\n <PostMessagePerspective comlink={visualEditingComlink} perspective={perspective} />\n )}\n {visualEditingComlink && <PostMessageTelemetry comlink={visualEditingComlink} />}\n </Suspense>\n </>\n )\n}\n\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 {subcribeToVercelProtectionBypass} from '@sanity/preview-url-secret/toggle-vercel-protection-bypass'\nimport {useEffect, useReducer, useState} from 'react'\nimport {useClient} from 'sanity'\n\nimport {API_VERSION} from './constants'\n\ntype VercelProtectionBypassReadyState = 'loading' | 'ready'\n\nexport function useVercelBypassSecret(): [\n vercelProtectionBypassSecret: string | null,\n vercelProtectionBypassReadyState: VercelProtectionBypassReadyState,\n] {\n const client = useClient({apiVersion: API_VERSION})\n const [vercelProtectionBypassReadyState, ready] = useReducer(\n () => 'ready' as 'ready' | 'loading',\n 'loading',\n )\n const [vercelProtectionBypassSecret, setVercelProtectionBypassSecret] = useState<string | null>(\n null,\n )\n\n useEffect(() => {\n const unsubscribe = subcribeToVercelProtectionBypass(client, (secret) => {\n setVercelProtectionBypassSecret(secret)\n ready()\n })\n return () => unsubscribe()\n }, [client])\n\n return [vercelProtectionBypassSecret, vercelProtectionBypassReadyState]\n}\n","import {\n schemaIdSingleton,\n schemaType,\n schemaTypeSingleton,\n} from '@sanity/preview-url-secret/constants'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useEffect, useState} from 'react'\nimport {type PermissionCheckResult, type Tool, useGrantsStore, useTranslation} from 'sanity'\n\nimport {presentationLocaleNamespace} from './i18n'\nimport {PresentationSpinner} from './PresentationSpinner'\nimport PresentationTool from './PresentationTool'\nimport {type PresentationPluginOptions} from './types'\nimport {useVercelBypassSecret} from './useVercelBypassSecret'\n\nexport default function PresentationToolGrantsCheck(props: {\n tool: Tool<PresentationPluginOptions>\n}): React.JSX.Element {\n const {t} = useTranslation(presentationLocaleNamespace)\n const {previewUrl} = props.tool.options ?? {}\n const {push: pushToast} = useToast()\n const willGeneratePreviewUrlSecret =\n typeof previewUrl === 'object' || typeof previewUrl === 'function'\n const grantsStore = useGrantsStore()\n const [previewAccessSharingCreatePermission, setCreateAccessSharingPermission] =\n useState<PermissionCheckResult | null>(null)\n const [previewAccessSharingUpdatePermission, setUpdateAccessSharingPermission] =\n useState<PermissionCheckResult | null>(null)\n const [previewAccessSharingReadPermission, setReadAccessSharingPermission] =\n useState<PermissionCheckResult | null>(null)\n const [previewUrlSecretPermission, setPreviewUrlSecretPermission] =\n useState<PermissionCheckResult | null>(null)\n\n useEffect(() => {\n if (!willGeneratePreviewUrlSecret) return undefined\n\n const previewCreateAccessSharingPermissionSubscription = grantsStore\n .checkDocumentPermission('create', {_id: schemaIdSingleton, _type: schemaTypeSingleton})\n .subscribe(setCreateAccessSharingPermission)\n const previewUpdateAccessSharingPermissionSubscription = grantsStore\n .checkDocumentPermission('update', {_id: schemaIdSingleton, _type: schemaTypeSingleton})\n .subscribe(setUpdateAccessSharingPermission)\n const previewReadAccessSharingPermissionSubscription = grantsStore\n .checkDocumentPermission('read', {_id: schemaIdSingleton, _type: schemaTypeSingleton})\n .subscribe(setReadAccessSharingPermission)\n const previewUrlSecretPermissionSubscription = grantsStore\n .checkDocumentPermission('create', {_id: `drafts.${uuid()}`, _type: schemaType})\n .subscribe(setPreviewUrlSecretPermission)\n\n return () => {\n previewCreateAccessSharingPermissionSubscription.unsubscribe()\n previewUpdateAccessSharingPermissionSubscription.unsubscribe()\n previewReadAccessSharingPermissionSubscription.unsubscribe()\n previewUrlSecretPermissionSubscription.unsubscribe()\n }\n }, [grantsStore, willGeneratePreviewUrlSecret])\n\n const canCreateUrlPreviewSecrets = previewUrlSecretPermission?.granted\n\n useEffect(() => {\n if (!willGeneratePreviewUrlSecret || canCreateUrlPreviewSecrets !== false) return undefined\n const raf = requestAnimationFrame(() =>\n pushToast({\n closable: true,\n status: 'error',\n duration: 30_000,\n title: t('preview-url-secret.missing-grants'),\n }),\n )\n return () => cancelAnimationFrame(raf)\n }, [canCreateUrlPreviewSecrets, pushToast, t, willGeneratePreviewUrlSecret])\n\n const [vercelProtectionBypass, vercelProtectionBypassReadyState] = useVercelBypassSecret()\n\n if (\n vercelProtectionBypassReadyState === 'loading' ||\n (willGeneratePreviewUrlSecret &&\n (!previewAccessSharingCreatePermission ||\n typeof previewAccessSharingCreatePermission.granted === 'undefined' ||\n !previewAccessSharingUpdatePermission ||\n typeof previewAccessSharingUpdatePermission.granted === 'undefined' ||\n !previewUrlSecretPermission ||\n !previewAccessSharingReadPermission ||\n typeof previewAccessSharingReadPermission.granted === 'undefined' ||\n typeof previewUrlSecretPermission.granted === 'undefined'))\n ) {\n return <PresentationSpinner />\n }\n\n return (\n <PresentationTool\n {...props}\n vercelProtectionBypass={vercelProtectionBypass}\n canCreateUrlPreviewSecrets={canCreateUrlPreviewSecrets === true}\n canToggleSharePreviewAccess={\n previewAccessSharingCreatePermission?.granted === true &&\n previewAccessSharingUpdatePermission?.granted === true\n }\n canUseSharedPreviewAccess={previewAccessSharingReadPermission?.granted === true}\n />\n )\n}\n"],"names":["PostMessageFeatures","props","$","_c","comlink","t0","t1","on","_temp","useEffect","memo","features","optimistic","debounce","fn","timeout","timer","args","clearTimeout","setTimeout","apply","SharedStateProvider","children","Symbol","for","sharedState","useRef","t2","state","current","t3","key","value","post","setValue","t4","key_0","removeValue","t5","t6","context","t7","jsx","PresentationSharedStateContext","Root","styled","div","Panel","defaultSize","id","minWidth","maxWidth","order","undefined","useContext","PresentationPanelsContext","Error","getPanelStyle","registerElement","unregisterElement","style","type","useLayoutEffect","itemKey","getStoredItem","JSON","parse","localStorage","getItem","setStoredItem","data","setItem","stringify","getKeyForPanels","panels","map","panel","join","usePanelsStorage","get","_temp2","set","_temp3","setDebounced","panels_0","widths","stored_0","stored","Array","isArray","some","val","getNextWidth","nextWidth","containerWidth","maxWidthPx","minWidthPx","Math","min","max","getNextWidths","delta","panelBefore","panelAfter","panelsState","initialDragState","prevWidths","initialWidths","nextWidths","pivotPanel","index","findIndex","width","abs","deltaApplied","deltaRemaining","toPrecision","localeCompare","numeric","length","getPanelWidth","getOffset","event","handleElement","initialOffset","initialHandleElementRect","pointerOffset","clientX","elementOffset","getBoundingClientRect","left","isPanel","element","isResizer","getSortedElements","elements","from","values","sort","a","b","validateWidths","widthsToValidate","total","reduce","remainingWidth","toFixed","getDefaultWidths","panelsWithoutWidth","remainingWidthTotal","widthsWithNulls","defaultWidth","PanelsWrapper","Panels","panelsEl","Map","setElements","useState","filter","setWidths","activeResizer","setActiveResizer","panelsRef","flexGrow","pointerEvents","id_0","prev","has","next","t8","id_1","prev_0","next_0","delete","t9","window","innerWidth","dragOffset","resizerIndex","resizerRect","startX","dragRef","t10","id_2","elementsArr","el","resizer","resizeElement","acc","el_0","i","acc_0","el_1","i_0","pageX","startDragging","t11","stopDragging","t12","id_3","event_0","preventDefault","stopPropagation","resizer_0","resizeElement_0","offset","rect","prevWidth","i_1","drag","t13","t14","storage","t15","t16","widths_0","storedWidths","validatedStoredWidths","defaultWidths","t17","t18","t19","t20","resizeObserver","ResizeObserver","prevWidths_0","nextWidths_0","prevWidth_0","i_2","observe","disconnect","t21","t22","t23","t24","ErrorCard","message","onContinueAnyway","onRetry","restProps","t","useTranslation","presentationLocaleNamespace","Button","retryButton","continueAnywayButton","Text","jsxs","Stack","Inline","Box","Flex","Container","Card","encodeQueryString","params","parts","Object","entries","resolveQueryStringFromParams","nextParams","allowed","safeNextParams","includes","obj","BackLink","forwardRef","ref","searchParams","_searchParams","StateLink","ReferenceChildLink","documentId","documentType","parentRefPath","template","PresentationPaneRouterProvider","onStructureParams","structureParams","refs","routerState","resolvePathFromState","useRouter","fromEntries","routerSearchParams","useUnique","path","qs","createPathWithParams","childLinkProps","childId","find","r","_id","getPublishedId","_type","backLinkProps","childLinkProps_0","nextParams_0","inspect","groupIndex","siblingIndex","payload","hasGroupSiblings","groupLength","routerPanesState","ChildLink","ParameterizedLink","closeCurrentAndAfter","handleEditReference","replaceCurrent","_temp4","closeCurrent","_temp5","duplicateCurrent","_temp6","setView","_temp7","setParams","setPayload","_temp8","navigateIntent","_temp9","PaneRouterContext","intentName","intentParams","options_0","console","warn","options","viewId","pane_0","pane","RootLayout","PaneLayout","WrappedCode","Code","DocumentListPane","mainDocumentState","devMode","usePresentationTool","document","ids","schemaTypeName","title","errorParams","setErrorParams","handleRetry","Label","error","StructureDocumentListPane","ErrorBoundary","StructureToolProvider","r_0","DocumentPane","onFocusPath","templateParams","decodeJsonParams","templateParameters","paneDocumentNode","height","PresentationSpinner","Suspense","StructureDocumentPane","DocumentPanel","usePreviewState","schemaType","documentPreviewStore","useDocumentPreviewStore","preview","setPreview","perspectiveStack","usePerspective","subscription","getPreviewStateObservable","subscribe","unsubscribe","ContentEditor","schema","useSchema","props_0","MainDocumentLink","previewState","bb0","snapshot","getPreviewValueWithFallback","fallback","SanityDefaultPreview","PreviewCard","WarningOutlineIcon","Translate","usePanelId","uuid","panelId","Resizer","ResizerInner","$disabled","PanelResizer","propId","disabled","isDragging","nativeEvent","onMouseDown","e","onDrag","blur","onDragStop","resetDocumentStyles","bodyStyle","body","documentStyle","documentElement","cursor","userSelect","removeProperty","addEventListener","removeEventListener","PresentationContentWrapper","setDisplayedDocument","getCommentIntent","CommentsIntentProvider","DisplayedDocumentBroadcasterProvider","PresentationContent","documentsOnPage","PresentationNavigateProvider","navigate","_navigate","PresentationNavigateContext","useLocalState","defaultValue","usePresentationNavigator","unstable_navigator","navigatorProvided","component","_navigatorEnabled","setNavigatorEnabled","navigatorEnabled","toggleNavigator","Component","enabled","NavigatorComponent","navigatorDisabled","Navigator","PresentationParamsProvider","PresentationParamsContext","PresentationProvider","name","PresentationContext","encodeStudioPerspective","studioPerspective","IFrameElement","motion","create","iframe","IFrameOverlay","IFrame","animate","initial","onLoad","preventClick","src","variants","useId","replace","viewTransitionName","OpenPreviewButton","openPopup","previewLocationOrigin","previewLocationRoute","perspective","targetOrigin","url","URL","urlSearchParamPreviewPerspective","pathname","search","openPreviewLink","currentTarget","href","handleOpenPopup","LaunchIcon","Tooltip","PreviewLocationInput","fontSize","onChange","origin","padding","prefix","suffix","basePath","useActiveWorkspace","activeWorkspace","inputRef","sessionValue","setSessionValue","customValidity","setCustomValidity","handleChange","absoluteValue","startsWith","nextValue","slice","handleKeyDown","handleBlur","icon","ResetIcon","zIndex","TextInput","QRCodeSVG","lazy","QrCodeLogoSize","QrCodeLogoPadding","QrSize","StyledSanityMonogram","SanityMonogram","MotionSpinner","Spinner","MotionText","MotionMonogram","SharePreviewMenu","canToggleSharePreviewAccess","canUseSharedPreviewAccess","initialUrl","push","pushToast","useToast","client","useClient","apiVersion","API_VERSION","currentUser","useCurrentUser","loading","setLoading","enabling","setEnabling","disabling","setDisabling","secret","setSecret","busy","useMemo","setSecretSearchParams","setError","handleUnableToToggle","useCallback","closable","status","handleDisableSharing","disablePreviewAccessSharing","location","handleEnableSharing","previewUrlSecret","enablePreviewAccessSharing","handleCopyUrl","navigator","clipboard","writeText","toString","controller","AbortController","usedTags","fetchShareSecret","lastLiveEventId","signal","result","syncTags","fetch","fetchSharedAccessQuery","filterResponse","tag","aborted","live","events","abort","tags","finally","MenuButton","ShareIcon","Menu","Fragment","Grid","justifyContent","alignItems","gridTemplateColumns","gridTemplateRows","Switch","position","aspectRatio","display","AnimatePresence","opacity","textWrap","textAlign","MenuDivider","MenuItem","CopyIcon","constrainSize","placement","portal","displayName","PreviewHeaderDefault","canSharePreviewAccess","dispatch","iframeRef","onPathChange","onRefresh","overlaysConnection","previewUrl","setViewport","toggleOverlay","viewport","visualEditing","overlaysEnabled","toggleViewportSize","ACTION_IFRAME_RELOAD","assign","handleRefresh","previewURL","withoutSecretSearchParams","PanelLeftIcon","content","fallbackPlacements","whiteSpace","Hotkeys","marginTop","marginBottom","lineHeight","borderRadius","margin","t25","t26","t27","t28","t29","t30","RefreshIcon","t31","t32","t33","t34","t35","t36","t37","t38","t39","MobileDeviceIcon","DesktopIcon","t40","t41","t42","t43","PreviewHeader","renderDefault","HeaderComponent","header","minHeight","MotionFlex","Preview","forwardedRef","loadersConnection","vercelProtectionBypass","stablePerspective","setStablePerspective","urlPerspective","urlSearchParamVercelProtectionBypass","urlSearchParamVercelSetBypassCookie","prefersReducedMotion","usePrefersReducedMotion","previewHeader","timedOut","setTimedOut","refreshing","somethingIsWrong","setSomethingIsWrong","iframeIsBusy","handleContinueAnyway","setContinueAnyway","continueAnyway","showOverlaysConnectionStatus","setShowOverlaysConnectionState","MAX_TIME_TO_OVERLAYS_CONNECTION","onIFrameLoad","ACTION_IFRAME_LOADED","instance","activeElement","dispatchEvent","MouseEvent","bubbles","cancelable","preventIframeInteraction","canUseViewTransition","useSyncExternalStore","CSS","supports","iframeAnimations","currentViewport","setCurrentViewport","iframeStyle","setIframeStyle","iframeVariants","update","startViewTransition","flushSync","MotionConfig","duration","TooltipDelayGroupProvider","spinnerVariants","inset","backdropFilter","WebkitBackdropFilter","WebkitTransition","sizes","errorVariants","background","desktop","mobile","exit","boxShadow","scale","idle","reloading","active","defineWarnOnce","warned","warnOnceAboutCrossDatasetReference","useDocumentsOnPage","frameStateRef","validateApiPerspective","published","setPublished","previewDrafts","setPreviewDrafts","urlRef","perspective_0","documents","setCache","cache","isEqual","setDocumentsOnPage","keyedCache","uniqueDocuments","cache_0","forEach","doc","sourceDocument","_projectId","fnOrObj","arg","Function","getQueryFromResult","resolver","resolve","getParamsFromResult","getRouteContext","route","routes","absolute","match","decode","decodeURIComponent","useMainDocument","navigationHistory","resolvers","relativeUrl","setMainDocumentState","mainDocumentIdRef","at","handleResponse","useEffectEvent","base","url_0","query","then","doc_0","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","rev","since","view","pathKey","instruction","comment","changesInspectorTab","routerStateRef","setNavigationHistory","nextState","nextSearchState","forceReplace","routerSearchState","searchState","usePopups","popups","setPopups","source","open","Set","add","unsubs","size","source_0","closed","addTarget","interval","setInterval","source_1","source_2","POPUP_CHECK_INTERVAL","clearInterval","unsub","usePreviewUrl","toolName","studioPreviewPerspective","previewSearchParam","canCreateUrlPreviewSecrets","workspaceName","deps","useSuspendCacheKeys","usePreviewUrlSecret","resolvedUrl","resultUrl","restoredUrl","resolvedUrl_0","definePreviewUrl","studioBasePath","suspend","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","selectedPerspectiveName","selectedReleaseId","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","livePreviewEnabled","useWorkspace","COMMENTS_INSPECTOR_NAME","mode","EDIT_INTENT_MODE","BoundaryElementProvider","IS_MAC","test","platform","MODIFIERS","alt","ctrl","mod","keys","every","toUpperCase","useVercelBypassSecret","vercelProtectionBypassReadyState","ready","vercelProtectionBypassSecret","setVercelProtectionBypassSecret","subcribeToVercelProtectionBypass","PresentationToolGrantsCheck","willGeneratePreviewUrlSecret","grantsStore","useGrantsStore","previewAccessSharingCreatePermission","setCreateAccessSharingPermission","previewAccessSharingUpdatePermission","setUpdateAccessSharingPermission","previewAccessSharingReadPermission","setReadAccessSharingPermission","previewUrlSecretPermission","setPreviewUrlSecretPermission","previewCreateAccessSharingPermissionSubscription","checkDocumentPermission","schemaIdSingleton","schemaTypeSingleton","previewUpdateAccessSharingPermissionSubscription","previewReadAccessSharingPermissionSubscription","previewUrlSecretPermissionSubscription","granted","raf","requestAnimationFrame","cancelAnimationFrame"],"mappings":"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","x_google_ignoreList":[32]}
|