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.
Files changed (63) hide show
  1. package/lib/_chunks-cjs/PostMessageSchema.js.map +1 -1
  2. package/lib/_chunks-cjs/PostMessageTelemetry.js +1 -1
  3. package/lib/_chunks-cjs/PostMessageTelemetry.js.map +1 -1
  4. package/lib/_chunks-cjs/PresentationToolGrantsCheck.js +429 -1417
  5. package/lib/_chunks-cjs/PresentationToolGrantsCheck.js.map +1 -1
  6. package/lib/_chunks-cjs/presentation.js +70 -22
  7. package/lib/_chunks-cjs/presentation.js.map +1 -1
  8. package/lib/_chunks-cjs/resources6.js +0 -8
  9. package/lib/_chunks-cjs/resources6.js.map +1 -1
  10. package/lib/_chunks-cjs/version.js +1 -1
  11. package/lib/_chunks-es/PostMessageSchema.mjs.map +1 -1
  12. package/lib/_chunks-es/PostMessageTelemetry.mjs +1 -1
  13. package/lib/_chunks-es/PostMessageTelemetry.mjs.map +1 -1
  14. package/lib/_chunks-es/PresentationToolGrantsCheck.mjs +437 -1406
  15. package/lib/_chunks-es/PresentationToolGrantsCheck.mjs.map +1 -1
  16. package/lib/_chunks-es/presentation.mjs +73 -24
  17. package/lib/_chunks-es/presentation.mjs.map +1 -1
  18. package/lib/_chunks-es/resources6.mjs +0 -8
  19. package/lib/_chunks-es/resources6.mjs.map +1 -1
  20. package/lib/_chunks-es/version.mjs +1 -1
  21. package/lib/_singletons.d.mts +61 -2889
  22. package/lib/_singletons.d.ts +61 -2889
  23. package/lib/presentation.d.mts +57 -2887
  24. package/lib/presentation.d.ts +57 -2887
  25. package/lib/presentation.js +4 -0
  26. package/lib/presentation.js.map +1 -1
  27. package/lib/presentation.mjs +5 -1
  28. package/package.json +15 -16
  29. package/src/presentation/PostMessageTelemetry.tsx +1 -1
  30. package/src/presentation/PresentationTool.tsx +76 -85
  31. package/src/presentation/PresentationToolGrantsCheck.tsx +75 -39
  32. package/src/presentation/document/LocationsBanner.tsx +13 -52
  33. package/src/presentation/i18n/resources.ts +0 -10
  34. package/src/presentation/index.ts +13 -0
  35. package/src/presentation/{util → lib}/parse.ts +1 -2
  36. package/src/presentation/overlays/schema/PostMessageSchema.tsx +0 -1
  37. package/src/presentation/panels/usePanelsStorage.ts +1 -1
  38. package/src/presentation/preview/IFrame.tsx +35 -83
  39. package/src/presentation/preview/Preview.tsx +56 -172
  40. package/src/presentation/preview/PreviewHeader.tsx +10 -43
  41. package/src/presentation/preview/PreviewLocationInput.tsx +24 -48
  42. package/src/presentation/preview/SharePreviewMenu.tsx +2 -2
  43. package/src/presentation/reducers/presentationReducer.ts +134 -0
  44. package/src/presentation/types.ts +7 -139
  45. package/src/presentation/useMainDocument.ts +12 -4
  46. package/src/presentation/useParams.ts +3 -2
  47. package/src/presentation/usePreviewUrl.ts +133 -0
  48. package/src/presentation/actors/create-preview-secret.ts +0 -19
  49. package/src/presentation/actors/read-shared-secret.ts +0 -18
  50. package/src/presentation/actors/resolve-allow-patterns.ts +0 -55
  51. package/src/presentation/actors/resolve-initial-url.ts +0 -65
  52. package/src/presentation/actors/resolve-preview-mode-url.ts +0 -72
  53. package/src/presentation/actors/resolve-preview-mode.ts +0 -66
  54. package/src/presentation/actors/resolve-url-from-preview-search-param.ts +0 -29
  55. package/src/presentation/machines/presentation-machine.ts +0 -101
  56. package/src/presentation/machines/preview-url.ts +0 -568
  57. package/src/presentation/useAllowPatterns.ts +0 -12
  58. package/src/presentation/useId.ts +0 -7
  59. package/src/presentation/usePresentationPerspective.ts +0 -14
  60. package/src/presentation/usePreviewUrlActorRef.ts +0 -96
  61. package/src/presentation/useReportInvalidPreviewSearchParam.tsx +0 -43
  62. package/src/presentation/useTargetOrigin.ts +0 -11
  63. /package/src/presentation/{util → lib}/debounce.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"PresentationToolGrantsCheck.mjs","sources":["../../src/presentation/features/PostMessageFeatures.tsx","../../src/presentation/machines/presentation-machine.ts","../../src/presentation/overlays/SharedStateProvider.tsx","../../src/presentation/panels/Panel.tsx","../../src/presentation/util/debounce.ts","../../src/presentation/panels/usePanelsStorage.ts","../../src/presentation/panels/util.ts","../../src/presentation/panels/Panels.tsx","../../src/presentation/components/ErrorCard.tsx","../../src/presentation/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","Root","styled","div","Panel","defaultSize","minWidth","maxWidth","order","undefined","useContext","PresentationPanelsContext","Error","getPanelStyle","registerElement","unregisterElement","style","type","useLayoutEffect","debounce","fn","timeout","timer","args","clearTimeout","setTimeout","apply","itemKey","getStoredItem","JSON","parse","localStorage","getItem","setStoredItem","data","setItem","stringify","getKeyForPanels","panels","map","panel","join","usePanelsStorage","get","_temp2","set","_temp3","setDebounced","panels_0","widths","stored_0","stored","Array","isArray","some","val","getNextWidth","nextWidth","containerWidth","maxWidthPx","minWidthPx","Math","min","max","getNextWidths","delta","panelBefore","panelAfter","panelsState","initialDragState","prevWidths","initialWidths","nextWidths","pivotPanel","index","findIndex","width","abs","deltaApplied","deltaRemaining","toPrecision","localeCompare","numeric","length","getPanelWidth","getOffset","handleElement","initialOffset","initialHandleElementRect","pointerOffset","clientX","elementOffset","getBoundingClientRect","left","isPanel","element","isResizer","getSortedElements","elements","from","values","sort","a","b","validateWidths","widthsToValidate","total","reduce","remainingWidth","toFixed","getDefaultWidths","panelsWithoutWidth","remainingWidthTotal","widthsWithNulls","defaultWidth","PanelsWrapper","Panels","panelsEl","Map","setElements","useState","filter","setWidths","activeResizer","setActiveResizer","panelsRef","flexGrow","pointerEvents","id_0","prev","has","next","t8","id_1","prev_0","next_0","delete","t9","window","innerWidth","dragOffset","resizerIndex","resizerRect","startX","dragRef","t10","id_2","elementsArr","el","resizer","resizeElement","acc","el_0","i","acc_0","el_1","i_0","pageX","startDragging","t11","stopDragging","t12","id_3","event_0","preventDefault","stopPropagation","resizer_0","resizeElement_0","offset","rect","prevWidth","i_1","drag","t13","t14","storage","t15","t16","widths_0","storedWidths","validatedStoredWidths","defaultWidths","t17","t18","t19","t20","resizeObserver","ResizeObserver","prevWidths_0","nextWidths_0","prevWidth_0","i_2","observe","disconnect","t21","t22","t23","t24","ErrorCard","message","onContinueAnyway","onRetry","restProps","t","useTranslation","presentationLocaleNamespace","retryButton","continueAnywayButton","Container","encodeQueryString","params","parts","Object","entries","resolveQueryStringFromParams","nextParams","allowed","safeNextParams","includes","obj","BackLink","forwardRef","ref","searchParams","_searchParams","ReferenceChildLink","documentId","documentType","parentRefPath","template","PresentationPaneRouterProvider","onStructureParams","structureParams","refs","routerState","resolvePathFromState","useRouter","fromEntries","routerSearchParams","useUnique","path","qs","createPathWithParams","childLinkProps","childId","find","r","_id","getPublishedId","_type","backLinkProps","childLinkProps_0","nextParams_0","inspect","groupIndex","siblingIndex","payload","hasGroupSiblings","groupLength","routerPanesState","ChildLink","ParameterizedLink","closeCurrentAndAfter","handleEditReference","replaceCurrent","_temp4","closeCurrent","_temp5","duplicateCurrent","_temp6","setView","_temp7","setParams","setPayload","_temp8","navigateIntent","_temp9","intentName","intentParams","options_0","console","warn","options","viewId","pane_0","pane","RootLayout","PaneLayout","Flex","WrappedCode","Code","DocumentListPane","mainDocumentState","devMode","usePresentationTool","document","ids","schemaTypeName","title","errorParams","setErrorParams","handleRetry","StructureDocumentListPane","r_0","DocumentPane","onFocusPath","templateParams","decodeJsonParams","templateParameters","paneDocumentNode","height","StructureDocumentPane","DocumentPanel","StructureToolProvider","usePreviewState","schemaType","documentPreviewStore","useDocumentPreviewStore","preview","setPreview","perspectiveStack","usePerspective","subscription","getPreviewStateObservable","subscribe","unsubscribe","ContentEditor","schema","useSchema","props_0","MainDocumentLink","previewState","bb0","snapshot","getPreviewValueWithFallback","fallback","usePanelId","uuid","panelId","Resizer","ResizerInner","$disabled","PanelResizer","propId","disabled","isDragging","nativeEvent","onMouseDown","e","onDrag","blur","onDragStop","resetDocumentStyles","bodyStyle","body","documentStyle","documentElement","cursor","userSelect","removeProperty","addEventListener","removeEventListener","PresentationContentWrapper","setDisplayedDocument","getCommentIntent","PresentationContent","documentsOnPage","PresentationNavigateProvider","navigate","_navigate","useLocalState","defaultValue","usePresentationNavigator","unstable_navigator","navigatorProvided","component","_navigatorEnabled","setNavigatorEnabled","navigatorEnabled","toggleNavigator","Component","NavigatorComponent","navigatorDisabled","Navigator","PresentationParamsProvider","PresentationProvider","name","useAllowPatterns","previewUrlRef","allowPatterns","useSelector","TypeError","allowOrigins","encodeStudioPerspective","studioPerspective","useId","useReactId","startsWith","replace","IFrame","forwardedRef","animate","onLoad","preventClick","src","variants","useImperativeHandle","instance","handleBlur","activeElement","dispatchEvent","MouseEvent","bubbles","cancelable","viewTransitionName","IFrameElement","motion","create","iframe","IFrameOverlay","Box","GlobalViewTransition","createGlobalStyle","OpenPreviewButton","openPopup","previewLocationOrigin","previewLocationRoute","perspective","targetOrigin","URL","urlSearchParamPreviewPerspective","pathname","search","openPreviewLink","currentTarget","href","handleOpenPopup","LaunchIcon","useTargetOrigin","previewUrl","origin","PreviewLocationInput","fontSize","onChange","padding","prefix","suffix","basePath","useActiveWorkspace","activeWorkspace","inputRef","sessionValue","setSessionValue","customValidity","setCustomValidity","handleChange","absoluteValue","toString","pattern","test","reportValidity","nextValue","handleKeyDown","nextValue_0","handleClear","icon","ResetIcon","zIndex","QRCodeSVG","lazy","QrCodeLogoSize","QrCodeLogoPadding","QrSize","StyledSanityMonogram","SanityMonogram","MotionSpinner","Spinner","MotionText","Text","MotionMonogram","SharePreviewMenu","canToggleSharePreviewAccess","canUseSharedPreviewAccess","initialUrl","push","pushToast","useToast","client","useClient","apiVersion","API_VERSION","currentUser","useCurrentUser","setLoading","enabling","setEnabling","disabling","setDisabling","secret","setSecret","busy","useMemo","setSecretSearchParams","setError","handleUnableToToggle","useCallback","closable","status","handleDisableSharing","disablePreviewAccessSharing","location","handleEnableSharing","previewUrlSecret","enablePreviewAccessSharing","handleCopyUrl","navigator","clipboard","writeText","controller","AbortController","usedTags","fetchShareSecret","lastLiveEventId","signal","result","syncTags","fetch","fetchSharedAccessQuery","filterResponse","tag","aborted","live","events","abort","finally","ShareIcon","justifyContent","alignItems","gridTemplateColumns","gridTemplateRows","position","aspectRatio","display","opacity","textWrap","textAlign","CopyIcon","constrainSize","placement","portal","displayName","PreviewHeaderDefault","canSharePreviewAccess","iframeRef","onPathChange","onRefresh","overlaysConnection","presentationRef","setViewport","toggleOverlay","viewport","toggleViewportSize","send","handleRefresh","isLoading","isLoaded","isRefreshing","isReloading","overlaysEnabled","previewURL","withoutSecretSearchParams","perspectiveToggleTooltipId","previewUrlBusy","PanelLeftIcon","content","fallbackPlacements","whiteSpace","marginTop","marginBottom","lineHeight","borderRadius","margin","t25","t26","t27","t28","t29","t30","RefreshIcon","t31","t32","t33","t34","node","setProperty","t35","t36","t37","t38","t39","t40","MobileDeviceIcon","DesktopIcon","t41","t42","t43","t44","PreviewHeader","renderDefault","HeaderComponent","header","minHeight","matches","state_0","state_1","state_2","state_3","state_4","hasTag","MotionFlex","Preview","loadersConnection","vercelProtectionBypass","stablePerspective","setStablePerspective","urlPerspective","urlSearchParamVercelProtectionBypass","urlSearchParamVercelSetBypassCookie","prefersReducedMotion","usePrefersReducedMotion","previewHeader","timedOut","setTimedOut","somethingIsWrong","setSomethingIsWrong","iframeIsBusy","handleContinueAnyway","setContinueAnyway","continueAnyway","showOverlaysConnectionStatus","setShowOverlaysConnectionState","MAX_TIME_TO_OVERLAYS_CONNECTION","onIFrameLoad","preventIframeInteraction","canUseViewTransition","useSyncExternalStore","CSS","supports","iframeAnimations","currentViewport","setCurrentViewport","iframeStyle","setIframeStyle","iframeVariants","update","startViewTransition","flushSync","toast","checkOrigin","setCheckOrigin","reportedMismatches","Set","reportMismatchingOrigin","useEffectEvent","reportedOrigin","allow","add","duration","Infinity","usePresentationNavigate","navigateEvent","nextUrl","hash","contentWindow","createController","addTarget","createChannel","heartbeat","connectTo","createConnectionMachine","provide","createCompatibilityActors","stop","start","destroy","interval","setInterval","postMessage","domain","clearInterval","spinnerVariants","inset","backdropFilter","WebkitBackdropFilter","WebkitTransition","sizes","errorVariants","background","desktop","mobile","exit","boxShadow","scale","active","defineWarnOnce","warned","warnOnceAboutCrossDatasetReference","useDocumentsOnPage","frameStateRef","validateApiPerspective","published","setPublished","previewDrafts","setPreviewDrafts","urlRef","perspective_0","documents","setCache","cache","isEqual","setDocumentsOnPage","keyedCache","uniqueDocuments","cache_0","forEach","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","IS_MAC","platform","MODIFIERS","alt","ctrl","mod","keys","every","toUpperCase","defineCreatePreviewSecretActor","currentUserId","fromPromise","createPreviewSecret","defineReadSharedSecretActor","defineResolveAllowPatternsActor","allowOption","input","URLPattern","maybePatterns","urlPatterns","urlPattern","defineResolveInitialUrlActor","studioBasePath","previewUrlOption","studioPreviewPerspective","previewSearchParam","defineResolvePreviewModeActor","draftMode","enable","defineResolvePreviewModeUrlActor","resolvedPreviewMode","urlSearchParamPreviewSecret","urlSearchParamPreviewPathname","resolveUrlFromPreviewSearchParamActor","previewSearchParamUrl","shareAccessSingletonDocument","schemaIdSingleton","schemaTypeSingleton","previewUrlSecretDocument","previewUrlMachine","log","_","cause","fromObservable","throwError","Promise","reject","has checked permissions","Boolean","previewAccessSharingCreatePermission","previewAccessSharingReadPermission","previewAccessSharingUpdatePermission","previewUrlSecretPermission","search param has new origin","can create preview secret","granted","has preview mode with created secret","has preview mode with share access","has preview mode without permissions","delays","expiredSecret","expiresAt","now","Date","getTime","invoke","checkPermissionName","onError","onSnapshot","checkingPermissions","always","guard","resolvingInitialUrl","onDone","output","resolvingAllowPatterns","resolvingUrlFromPreviewSearchParam","resolvingPreviewMode","reenter","success","readShareAccess","resolvePreviewUrl","after","usePreviewUrlActorRef","grantsStore","useGrantsStore","router","checkDocumentPermission","actorRef","useReportInvalidPreviewSearchParam","currentOrigin","nextOrigin","blockedOrigin","useVercelBypassSecret","vercelProtectionBypassReadyState","ready","useReducer","vercelProtectionBypassSecret","setVercelProtectionBypassSecret","subcribeToVercelProtectionBypass","PresentationToolGrantsCheck"],"mappings":"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"}
1
+ {"version":3,"file":"PresentationToolGrantsCheck.mjs","sources":["../../src/presentation/features/PostMessageFeatures.tsx","../../src/presentation/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","Root","styled","div","Panel","defaultSize","id","minWidth","maxWidth","order","undefined","useContext","PresentationPanelsContext","Error","getPanelStyle","registerElement","unregisterElement","style","type","useLayoutEffect","itemKey","getStoredItem","JSON","parse","localStorage","getItem","setStoredItem","data","setItem","stringify","getKeyForPanels","panels","map","panel","join","usePanelsStorage","get","_temp2","set","_temp3","setDebounced","panels_0","widths","stored_0","stored","Array","isArray","some","val","getNextWidth","nextWidth","containerWidth","maxWidthPx","minWidthPx","Math","min","max","getNextWidths","delta","panelBefore","panelAfter","panelsState","initialDragState","prevWidths","initialWidths","nextWidths","pivotPanel","index","findIndex","width","abs","deltaApplied","deltaRemaining","toPrecision","localeCompare","numeric","length","getPanelWidth","getOffset","event","handleElement","initialOffset","initialHandleElementRect","pointerOffset","clientX","elementOffset","getBoundingClientRect","left","isPanel","element","isResizer","getSortedElements","elements","from","values","sort","a","b","validateWidths","widthsToValidate","total","reduce","remainingWidth","toFixed","getDefaultWidths","panelsWithoutWidth","remainingWidthTotal","widthsWithNulls","defaultWidth","PanelsWrapper","Panels","panelsEl","Map","setElements","useState","filter","setWidths","activeResizer","setActiveResizer","panelsRef","flexGrow","pointerEvents","id_0","prev","has","next","t8","id_1","prev_0","next_0","delete","t9","window","innerWidth","dragOffset","resizerIndex","resizerRect","startX","dragRef","t10","id_2","elementsArr","el","resizer","resizeElement","acc","el_0","i","acc_0","el_1","i_0","pageX","startDragging","t11","stopDragging","t12","id_3","event_0","preventDefault","stopPropagation","resizer_0","resizeElement_0","offset","rect","prevWidth","i_1","drag","t13","t14","storage","t15","t16","widths_0","storedWidths","validatedStoredWidths","defaultWidths","t17","t18","t19","t20","resizeObserver","ResizeObserver","prevWidths_0","nextWidths_0","prevWidth_0","i_2","observe","disconnect","t21","t22","t23","t24","ErrorCard","message","onContinueAnyway","onRetry","restProps","t","useTranslation","presentationLocaleNamespace","retryButton","continueAnywayButton","Container","encodeQueryString","params","parts","Object","entries","resolveQueryStringFromParams","nextParams","allowed","safeNextParams","includes","obj","BackLink","forwardRef","ref","searchParams","_searchParams","ReferenceChildLink","documentId","documentType","parentRefPath","template","PresentationPaneRouterProvider","onStructureParams","structureParams","refs","routerState","resolvePathFromState","useRouter","fromEntries","routerSearchParams","useUnique","path","qs","createPathWithParams","childLinkProps","childId","find","r","_id","getPublishedId","_type","backLinkProps","childLinkProps_0","nextParams_0","inspect","groupIndex","siblingIndex","payload","hasGroupSiblings","groupLength","routerPanesState","ChildLink","ParameterizedLink","closeCurrentAndAfter","handleEditReference","replaceCurrent","_temp4","closeCurrent","_temp5","duplicateCurrent","_temp6","setView","_temp7","setParams","setPayload","_temp8","navigateIntent","_temp9","intentName","intentParams","options_0","console","warn","options","viewId","pane_0","pane","RootLayout","PaneLayout","Flex","WrappedCode","Code","DocumentListPane","mainDocumentState","devMode","usePresentationTool","document","ids","schemaTypeName","title","errorParams","setErrorParams","handleRetry","error","StructureDocumentListPane","r_0","DocumentPane","onFocusPath","templateParams","decodeJsonParams","templateParameters","paneDocumentNode","height","StructureDocumentPane","DocumentPanel","StructureToolProvider","usePreviewState","schemaType","documentPreviewStore","useDocumentPreviewStore","preview","setPreview","perspectiveStack","usePerspective","subscription","getPreviewStateObservable","subscribe","unsubscribe","ContentEditor","schema","useSchema","props_0","MainDocumentLink","previewState","bb0","snapshot","getPreviewValueWithFallback","fallback","usePanelId","uuid","panelId","Resizer","ResizerInner","$disabled","PanelResizer","propId","disabled","isDragging","nativeEvent","onMouseDown","e","onDrag","blur","onDragStop","resetDocumentStyles","bodyStyle","body","documentStyle","documentElement","cursor","userSelect","removeProperty","addEventListener","removeEventListener","PresentationContentWrapper","setDisplayedDocument","getCommentIntent","PresentationContent","documentsOnPage","PresentationNavigateProvider","navigate","_navigate","useLocalState","defaultValue","usePresentationNavigator","unstable_navigator","navigatorProvided","component","_navigatorEnabled","setNavigatorEnabled","navigatorEnabled","toggleNavigator","Component","enabled","NavigatorComponent","navigatorDisabled","Navigator","PresentationParamsProvider","PresentationProvider","name","encodeStudioPerspective","studioPerspective","IFrameElement","motion","create","iframe","IFrameOverlay","Box","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","PreviewLocationInput","fontSize","onChange","origin","padding","prefix","suffix","basePath","useActiveWorkspace","activeWorkspace","inputRef","sessionValue","setSessionValue","customValidity","setCustomValidity","handleChange","absoluteValue","startsWith","nextValue","slice","handleKeyDown","handleBlur","icon","ResetIcon","zIndex","QRCodeSVG","lazy","QrCodeLogoSize","QrCodeLogoPadding","QrSize","StyledSanityMonogram","SanityMonogram","MotionSpinner","Spinner","MotionText","Text","MotionMonogram","SharePreviewMenu","canToggleSharePreviewAccess","canUseSharedPreviewAccess","initialUrl","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","ShareIcon","justifyContent","alignItems","gridTemplateColumns","gridTemplateRows","position","aspectRatio","display","opacity","textWrap","textAlign","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","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","duration","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","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]}