{"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']\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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"}