{"version":3,"file":"PresentationToolGrantsCheck.mjs","sources":["../../src/presentation/features/PostMessageFeatures.tsx","../../src/presentation/lib/debounce.ts","../../src/presentation/overlays/SharedStateProvider.tsx","../../src/presentation/panels/Panel.tsx","../../src/presentation/panels/usePanelsStorage.ts","../../src/presentation/panels/util.ts","../../src/presentation/panels/Panels.tsx","../../src/presentation/components/ErrorCard.tsx","../../src/presentation/editor/PresentationPaneRouterProvider.tsx","../../src/presentation/editor/DocumentListPane.tsx","../../src/presentation/editor/DocumentPane.tsx","../../src/presentation/editor/DocumentPanel.tsx","../../src/presentation/editor/usePreviewState.ts","../../src/presentation/editor/ContentEditor.tsx","../../src/presentation/panels/usePanelId.ts","../../src/presentation/panels/PanelResizer.tsx","../../src/presentation/PresentationContent.tsx","../../src/presentation/PresentationNavigateProvider.tsx","../../src/presentation/useLocalState.ts","../../src/presentation/PresentationNavigator.tsx","../../src/presentation/PresentationParamsProvider.tsx","../../src/presentation/PresentationProvider.tsx","../../src/presentation/util/encodeStudioPerspective.ts","../../src/presentation/preview/IFrame.tsx","../../src/presentation/preview/OpenPreviewButton.tsx","../../src/presentation/preview/PreviewLocationInput.tsx","../../src/presentation/preview/SharePreviewMenu.tsx","../../src/presentation/preview/PreviewHeader.tsx","../../src/presentation/preview/Preview.tsx","../../src/presentation/util/warnOnce.ts","../../src/presentation/useDocumentsOnPage.ts","../../src/presentation/useMainDocument.ts","../../../../node_modules/.pnpm/@sanity+visual-editing-csm@2.0.10_@sanity+client@6.28.4_debug@4.4.0__@sanity+types@packages+@sanity+types/node_modules/@sanity/visual-editing-csm/dist/index.js","../../src/presentation/lib/parse.ts","../../src/presentation/useParams.ts","../../src/presentation/usePopups.ts","../../src/presentation/usePreviewUrl.ts","../../src/presentation/useStatus.ts","../../src/presentation/PresentationTool.tsx","../../src/presentation/useVercelBypassSecret.ts","../../src/presentation/PresentationToolGrantsCheck.tsx"],"sourcesContent":["import {type FC, memo, useEffect} from 'react'\n\nimport {type VisualEditingConnection} from '../types'\n\nexport interface PostMessagePreviewsProps {\n  comlink: VisualEditingConnection\n}\n\nconst PostMessageFeatures: FC<PostMessagePreviewsProps> = (props) => {\n  const {comlink} = props\n\n  useEffect(() => {\n    return comlink.on('visual-editing/features', () => ({\n      features: {\n        optimistic: true,\n      },\n    }))\n  }, [comlink])\n\n  return null\n}\n\nexport default memo(PostMessageFeatures)\n","export function debounce<F extends (...args: Parameters<F>) => ReturnType<F>>(\n  fn: F,\n  timeout: number,\n): F {\n  let timer: ReturnType<typeof setTimeout>\n  return ((...args: Parameters<F>) => {\n    clearTimeout(timer)\n    timer = setTimeout(() => {\n      fn.apply(fn, args)\n    }, timeout)\n  }) as F\n}\n","import {type Serializable, type SerializableObject} from '@sanity/presentation-comlink'\nimport {\n  type FunctionComponent,\n  type PropsWithChildren,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n} from 'react'\nimport {PresentationSharedStateContext} from 'sanity/_singletons'\n\nimport {type VisualEditingConnection} from '../types'\nimport {type PresentationSharedStateContextValue} from './types'\n\nexport const SharedStateProvider: FunctionComponent<\n  PropsWithChildren<{\n    comlink: VisualEditingConnection | null\n  }>\n> = function (props) {\n  const {comlink, children} = props\n\n  const sharedState = useRef<SerializableObject>({})\n\n  useEffect(() => {\n    return comlink?.on('visual-editing/shared-state', () => {\n      return {state: sharedState.current}\n    })\n  }, [comlink])\n\n  const setValue = useCallback(\n    (key: string, value: Serializable) => {\n      sharedState.current[key] = value\n      comlink?.post('presentation/shared-state', {key, value})\n    },\n    [comlink],\n  )\n\n  const removeValue = useCallback(\n    (key: string) => {\n      comlink?.post('presentation/shared-state', {key})\n      delete sharedState.current[key]\n    },\n    [comlink],\n  )\n\n  const context = useMemo<PresentationSharedStateContextValue>(\n    () => ({removeValue, setValue}),\n    [removeValue, setValue],\n  )\n\n  return (\n    <PresentationSharedStateContext.Provider value={context}>\n      {children}\n    </PresentationSharedStateContext.Provider>\n  )\n}\n","import {type FunctionComponent, type PropsWithChildren, useContext, useLayoutEffect} from 'react'\nimport {PresentationPanelsContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\ninterface PanelProps extends PropsWithChildren {\n  defaultSize?: number | null\n  id: string\n  minWidth?: number\n  maxWidth?: number\n  order?: number\n}\n\nconst Root = styled.div`\n  overflow: hidden;\n  flex-basis: 0;\n  flex-shrink: 1;\n`\n\nexport const Panel: FunctionComponent<PanelProps> = function ({\n  children,\n  defaultSize = null,\n  id,\n  minWidth,\n  maxWidth,\n  order = 0,\n}) {\n  const context = useContext(PresentationPanelsContext)\n\n  if (context === null) {\n    throw Error(`Panel components must be rendered within a PanelGroup container`)\n  }\n\n  const {getPanelStyle, registerElement, unregisterElement} = context\n\n  const style = getPanelStyle(id)\n\n  useLayoutEffect(() => {\n    registerElement(id, {\n      id,\n      type: 'panel',\n      defaultSize,\n      maxWidth: maxWidth ?? null,\n      minWidth: minWidth ?? 0,\n      order,\n    })\n\n    return () => {\n      unregisterElement(id)\n    }\n  }, [id, defaultSize, order, maxWidth, minWidth, registerElement, unregisterElement])\n\n  return <Root style={style}>{children}</Root>\n}\n","import {useMemo} from 'react'\n\nimport {debounce} from '../lib/debounce'\nimport {type PanelElement} from './types'\n\nconst itemKey = 'presentation/panels'\n\ntype StoredPanelsState = Record<string, number[]>\n\nconst getStoredItem = () => {\n  // @todo Validate\n  return JSON.parse(localStorage.getItem(itemKey) || '{}') as StoredPanelsState\n}\nconst setStoredItem = (data: StoredPanelsState) => {\n  localStorage.setItem(itemKey, JSON.stringify(data))\n}\n\nconst getKeyForPanels = (panels: PanelElement[]) => {\n  return panels.map((panel) => [panel.id, panel.order].join(':')).join(',')\n}\n\nexport function usePanelsStorage(): {\n  get: (panels: PanelElement[]) => number[] | undefined\n  set: (panels: PanelElement[], widths: number[]) => void\n  setDebounced: (panels: PanelElement[], widths: number[]) => void\n} {\n  return useMemo(() => {\n    const get = (panels: PanelElement[]) => {\n      const stored = getStoredItem()\n      const key = getKeyForPanels(panels)\n      return Array.isArray(stored[key]) && stored[key].some((val) => val === null)\n        ? undefined\n        : stored[key]\n    }\n\n    const set = (panels: PanelElement[], widths: number[]) => {\n      const stored = getStoredItem()\n      const key = getKeyForPanels(panels)\n      const data = {\n        ...stored,\n        [key]: widths,\n      }\n      setStoredItem(data)\n    }\n\n    const setDebounced = debounce(set, 100)\n    return {\n      get,\n      set,\n      setDebounced,\n    }\n  }, [])\n}\n","/* eslint-disable @typescript-eslint/no-shadow,no-eq-null */\nimport {\n  type ElementMap,\n  type InitialDragState,\n  type PanelElement,\n  type PanelsState,\n  type ResizerElement,\n} from './types'\n\nfunction getNextWidth(panel: PanelElement, nextWidth: number, containerWidth: number) {\n  const {maxWidth: maxWidthPx, minWidth: minWidthPx} = panel\n  const maxWidth = maxWidthPx == null ? 100 : (maxWidthPx / containerWidth) * 100\n  const minWidth = (minWidthPx / containerWidth) * 100\n  return Math.min(maxWidth, Math.max(minWidth, nextWidth))\n}\n\n// eslint-disable-next-line max-params\nexport function getNextWidths(\n  delta: number,\n  containerWidth: number,\n  panelBefore: PanelElement,\n  panelAfter: PanelElement,\n  panelsState: PanelsState,\n  initialDragState: InitialDragState,\n): number[] {\n  const {panels, widths: prevWidths} = panelsState\n  const {widths: initialWidths} = initialDragState\n\n  const widths = initialWidths || prevWidths\n  const nextWidths = [...widths]\n\n  {\n    const pivotPanel = delta < 0 ? panelAfter : panelBefore\n    const index = panels.findIndex((panel) => panel.id === pivotPanel.id)\n    const width = widths[index]\n    const nextWidth = getNextWidth(pivotPanel, width + Math.abs(delta), containerWidth)\n    if (width === nextWidth) {\n      return widths\n    }\n    delta = delta < 0 ? width - nextWidth : nextWidth - width\n  }\n\n  let deltaApplied = 0\n  let pivotPanel = delta < 0 ? panelBefore : panelAfter\n  let index = panels.findIndex((panel) => panel.id === pivotPanel.id)\n\n  // eslint-disable-next-line no-constant-condition\n  while (true) {\n    const panel = panels[index]\n    const width = widths[index]\n\n    const deltaRemaining = Math.abs(delta) - Math.abs(deltaApplied)\n\n    const nextWidth = getNextWidth(panel, width - deltaRemaining, containerWidth)\n\n    if (width !== nextWidth) {\n      deltaApplied += width - nextWidth\n      nextWidths[index] = nextWidth\n\n      if (\n        deltaApplied.toPrecision(10).localeCompare(Math.abs(delta).toPrecision(10), undefined, {\n          numeric: true,\n        }) >= 0\n      ) {\n        break\n      }\n    }\n\n    if (delta < 0) {\n      if (--index < 0) {\n        break\n      }\n    } else if (++index >= panels.length) {\n      break\n    }\n  }\n\n  if (deltaApplied === 0) {\n    return widths\n  }\n\n  pivotPanel = delta < 0 ? panelAfter : panelBefore\n  index = panels.findIndex((panel) => panel.id === pivotPanel.id)\n  nextWidths[index] = widths[index] + deltaApplied\n\n  return nextWidths\n}\n\nexport function getPanelWidth(panels: PanelElement[], id: string, widths: number[]): string {\n  if (panels.length === 1) return '100'\n\n  const index = panels.findIndex((panel) => panel.id === id)\n  const width = widths[index]\n\n  // eslint-disable-next-line no-eq-null\n  if (width == null) return '0'\n\n  return width.toPrecision(10)\n}\n\nexport function getOffset(\n  event: MouseEvent,\n  handleElement: HTMLDivElement,\n  initialOffset: number = 0,\n  initialHandleElementRect: DOMRect | null = null,\n): number {\n  const pointerOffset = event.clientX\n\n  const rect = initialHandleElementRect || handleElement.getBoundingClientRect()\n  const elementOffset = rect.left\n\n  return pointerOffset - elementOffset - initialOffset\n}\n\nexport function isPanel(element: PanelElement | ResizerElement): element is PanelElement {\n  return element.type === 'panel'\n}\n\nexport function isResizer(element: PanelElement | ResizerElement): element is ResizerElement {\n  return element.type === 'resizer'\n}\n\nexport function getSortedElements(elements: ElementMap): Array<PanelElement | ResizerElement> {\n  return Array.from(elements.values()).sort(({order: a}, {order: b}) => {\n    if (a == null && b == null) return 0\n    if (a == null) return -1\n    if (b == null) return 1\n    return a - b\n  })\n}\n\nexport function validateWidths(\n  panels: PanelElement[],\n  widthsToValidate: number[],\n  containerWidth: number,\n): number[] {\n  // Clamp widths proportionally to total 100\n  const total = widthsToValidate.reduce((total, width) => total + width, 0)\n  const widths = [...widthsToValidate].map((width) => (width / total) * 100)\n\n  let remainingWidth = 0\n\n  for (let index = 0; index < panels.length; index++) {\n    const panel = panels[index]\n    const width = widths[index]\n    const nextWidth = getNextWidth(panel, width, containerWidth)\n    if (width != nextWidth) {\n      remainingWidth += width - nextWidth\n      widths[index] = nextWidth\n    }\n  }\n\n  if (remainingWidth.toFixed(3) !== '0.000') {\n    for (let index = 0; index < panels.length; index++) {\n      const panel = panels[index]\n\n      let {maxWidth, minWidth} = panel\n\n      minWidth = (minWidth / containerWidth) * 100\n      if (maxWidth != null) {\n        maxWidth = (maxWidth / containerWidth) * 100\n      }\n\n      const width = Math.min(\n        // eslint-disable-next-line no-negated-condition\n        maxWidth != null ? maxWidth : 100,\n        Math.max(minWidth, widths[index] + remainingWidth),\n      )\n\n      if (width !== widths[index]) {\n        remainingWidth -= width - widths[index]\n        widths[index] = width\n\n        if (Math.abs(remainingWidth).toFixed(3) === '0.000') {\n          break\n        }\n      }\n    }\n  }\n\n  return widths\n}\n\nexport function getDefaultWidths(panels: PanelElement[]): number[] {\n  let panelsWithoutWidth = panels.length\n  let remainingWidthTotal = 100\n\n  const widthsWithNulls = panels.map((panel) => {\n    if (panel.defaultSize) {\n      remainingWidthTotal -= panel.defaultSize\n      panelsWithoutWidth -= 1\n      return panel.defaultSize\n    }\n    return null\n  })\n\n  const defaultWidth = remainingWidthTotal / panelsWithoutWidth\n  const widths = widthsWithNulls.map((width) => {\n    if (width === null) return defaultWidth\n    return width\n  })\n\n  return widths\n}\n","// Slightly modified version of react-resizable-panels\n// https://github.com/bvaughn/react-resizable-panels/tree/main/packages/react-resizable-panels\n\nimport {\n  type CSSProperties,\n  type FunctionComponent,\n  type PropsWithChildren,\n  useCallback,\n  useEffect,\n  useLayoutEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {PresentationPanelsContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\nimport {\n  type ElementMap,\n  type InitialDragState,\n  type PanelElement,\n  type PanelsState,\n  type ResizerElement,\n} from './types'\nimport {usePanelsStorage} from './usePanelsStorage'\nimport {\n  getDefaultWidths,\n  getNextWidths,\n  getOffset,\n  getPanelWidth,\n  getSortedElements,\n  isPanel,\n  isResizer,\n  validateWidths,\n} from './util'\n\nconst PanelsWrapper = styled.div`\n  display: flex;\n  flex-direction: row;\n  height: 100%;\n  overflow: hidden;\n  width: 100%;\n`\n\nexport const Panels: FunctionComponent<PropsWithChildren> = function ({children}) {\n  const panelsEl = useRef<HTMLDivElement | null>(null)\n\n  const [elements, setElements] = useState<ElementMap>(new Map())\n\n  const panels = useMemo(() => getSortedElements(elements).filter(isPanel), [elements])\n\n  const [widths, setWidths] = useState<number[]>([])\n  const [activeResizer, setActiveResizer] = useState<string | null>(null)\n\n  const panelsRef = useRef<PanelsState>({\n    elements,\n    panels,\n    widths,\n  })\n\n  const getPanelStyle = useCallback(\n    (id: string): CSSProperties => {\n      return {\n        flexGrow: getPanelWidth(panels, id, widths),\n        pointerEvents: activeResizer === null ? undefined : 'none',\n      }\n    },\n    [activeResizer, panels, widths],\n  )\n\n  const registerElement = useCallback((id: string, data: PanelElement | ResizerElement) => {\n    setElements((prev) => {\n      if (prev.has(id)) return prev\n      const next = new Map(prev)\n      next.set(id, data)\n      return next\n    })\n  }, [])\n  const unregisterElement = useCallback((id: string) => {\n    setElements((prev) => {\n      if (!prev.has(id)) return prev\n      const next = new Map(prev)\n      next.delete(id)\n      return next\n    })\n  }, [])\n\n  const dragRef = useRef<InitialDragState>({\n    containerWidth: window.innerWidth,\n    dragOffset: 0,\n    panelAfter: null,\n    panelBefore: null,\n    resizerIndex: -1,\n    resizerRect: null,\n    startX: 0,\n    widths: [],\n  })\n\n  const startDragging = useCallback(\n    (id: string, event: MouseEvent) => {\n      const elementsArr = getSortedElements(elements)\n      const index = elementsArr.findIndex((el) => el.id === id)\n\n      const resizer = elements.get(id)\n      if (!resizer || !isResizer(resizer)) return\n      const resizeElement = resizer.el.current\n      if (!resizeElement) return\n\n      dragRef.current = {\n        resizerIndex: index,\n        panelBefore: elementsArr.reduce(\n          (acc, el, i) => (isPanel(el) && i < index ? el : acc),\n          null as PanelElement | null,\n        ),\n        panelAfter: elementsArr.reduce(\n          (acc, el, i) => (acc === null && isPanel(el) && i > index ? el : acc),\n          null as PanelElement | null,\n        ),\n        containerWidth: window.innerWidth,\n        startX: event.pageX,\n        dragOffset: getOffset(event, resizeElement),\n        resizerRect: resizeElement.getBoundingClientRect(),\n        widths: panelsRef.current.widths,\n      }\n\n      setActiveResizer(id)\n    },\n    [elements],\n  )\n\n  const stopDragging = useCallback(() => {\n    setActiveResizer(null)\n  }, [])\n\n  const drag = useCallback(\n    (id: string, event: MouseEvent) => {\n      event.preventDefault()\n      event.stopPropagation()\n\n      const {containerWidth, dragOffset, panelBefore, panelAfter, resizerRect} = dragRef.current\n\n      // eslint-disable-next-line no-eq-null\n      if (panelBefore == null || panelAfter == null) {\n        return\n      }\n\n      const resizer = elements.get(id)\n      if (!resizer || !isResizer(resizer)) return\n      const resizeElement = resizer.el.current\n      if (!resizeElement) return\n\n      const offset = getOffset(event, resizeElement, dragOffset, resizerRect)\n\n      if (offset === 0) {\n        return\n      }\n\n      const {widths: prevWidths} = panelsRef.current\n      const rect = panelsEl.current!.getBoundingClientRect()\n      const delta = (offset / rect.width) * 100\n\n      const nextWidths = getNextWidths(\n        delta,\n        containerWidth,\n        panelBefore,\n        panelAfter,\n        panelsRef.current,\n        dragRef.current,\n      )\n\n      const widthsChanged = prevWidths.some((prevWidth, i) => prevWidth !== nextWidths[i])\n\n      if (widthsChanged) {\n        setWidths(nextWidths)\n      }\n    },\n    [elements],\n  )\n\n  // For setting the panels state\n  useLayoutEffect(() => {\n    panelsRef.current.elements = elements\n    panelsRef.current.panels = panels\n    panelsRef.current.widths = widths\n  }, [elements, panels, widths])\n\n  const storage = usePanelsStorage()\n\n  // For setting default sizing when panels are updated\n  useLayoutEffect(() => {\n    // eslint-disable-next-line @typescript-eslint/no-shadow\n    const {widths} = panelsRef.current\n\n    if (widths.length === panels.length) {\n      return\n    }\n\n    const storedWidths = storage.get(panels)\n\n    if (storedWidths) {\n      const validatedStoredWidths = validateWidths(panels, storedWidths, window.innerWidth)\n      setWidths(validatedStoredWidths)\n      return\n    }\n\n    const defaultWidths = getDefaultWidths(panels)\n    setWidths(defaultWidths)\n  }, [storage, panels])\n\n  // For storing current widths in localStorage\n  useEffect(() => {\n    if (!widths.length) return\n    storage.setDebounced(panels, widths)\n  }, [storage, panels, widths])\n\n  useLayoutEffect(() => {\n    const resizeObserver = new ResizeObserver(() => {\n      // eslint-disable-next-line @typescript-eslint/no-shadow\n      const {panels, widths: prevWidths} = panelsRef.current\n\n      const nextWidths = validateWidths(panels, prevWidths, window.innerWidth)\n\n      const widthsChanged = prevWidths.some((prevWidth, i) => prevWidth !== nextWidths[i])\n      if (widthsChanged) {\n        setWidths(nextWidths)\n      }\n    })\n\n    resizeObserver.observe(panelsEl.current!)\n\n    return () => {\n      resizeObserver.disconnect()\n    }\n  }, [])\n\n  const context = useMemo(\n    () => ({\n      activeResizer,\n      drag,\n      getPanelStyle,\n      registerElement,\n      startDragging,\n      stopDragging,\n      unregisterElement,\n    }),\n    [\n      activeResizer,\n      drag,\n      getPanelStyle,\n      registerElement,\n      startDragging,\n      stopDragging,\n      unregisterElement,\n    ],\n  )\n\n  return (\n    <PresentationPanelsContext.Provider value={context}>\n      <PanelsWrapper ref={panelsEl}>{children}</PanelsWrapper>\n    </PresentationPanelsContext.Provider>\n  )\n}\n","/* eslint-disable no-nested-ternary */\nimport {Box, Card, type CardProps, Container, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\n\nexport function ErrorCard(\n  props: {\n    children?: ReactNode\n    message: string\n    onRetry?: () => void\n    onContinueAnyway?: () => void\n  } & CardProps,\n): React.JSX.Element {\n  const {children, message, onRetry, onContinueAnyway, ...restProps} = props\n\n  const {t} = useTranslation(presentationLocaleNamespace)\n\n  const retryButton = (\n    <Button mode=\"ghost\" onClick={onRetry} text={t('error-card.retry-button.text')} />\n  )\n  const continueAnywayButton = (\n    <Button\n      mode=\"ghost\"\n      tone=\"critical\"\n      onClick={onContinueAnyway}\n      text={t('error-card.continue-button.text')}\n    />\n  )\n\n  return (\n    <Card height=\"fill\" {...restProps}>\n      <Flex align=\"center\" height=\"fill\" justify=\"center\">\n        <Container padding={4} sizing=\"border\" width={0}>\n          <Stack space={4}>\n            <Stack space={3}>\n              <Text size={1} weight=\"semibold\">\n                {t('error-card.title')}\n              </Text>\n              <Text muted size={1}>\n                {message}\n              </Text>\n            </Stack>\n\n            {children}\n\n            {onRetry && onContinueAnyway ? (\n              <Inline space={2}>\n                {retryButton}\n                {continueAnywayButton}\n              </Inline>\n            ) : onRetry ? (\n              <Box>{retryButton}</Box>\n            ) : onContinueAnyway ? (\n              <Box>{continueAnywayButton}</Box>\n            ) : null}\n          </Stack>\n        </Container>\n      </Flex>\n    </Card>\n  )\n}\n","/* eslint-disable no-console */\n\nimport {forwardRef, type PropsWithChildren, useCallback, useMemo} from 'react'\nimport {getPublishedId, useUnique} from 'sanity'\nimport {StateLink, useRouter} from 'sanity/router'\nimport {\n  type BackLinkProps,\n  PaneRouterContext,\n  type PaneRouterContextValue,\n  type ReferenceChildLinkProps,\n} from 'sanity/structure'\n\nimport {\n  type PresentationParamsContextValue,\n  type PresentationSearchParams,\n  type StructureDocumentPaneParams,\n} from '../types'\n\nfunction encodeQueryString(params: Record<string, unknown> = {}): string {\n  const parts = Object.entries(params)\n    .map(([key, value]) => `${key}=${value}`)\n    .join('&')\n\n  return parts.length ? `?${parts}` : ''\n}\n\nfunction resolveQueryStringFromParams(nextParams: Record<string, string | undefined>) {\n  const allowed = [\n    'comment',\n    'inspect',\n    'instruction',\n    'pathKey',\n    'rev',\n    'since',\n    'template',\n    'view',\n  ] satisfies Array<keyof PresentationParamsContextValue> as string[]\n\n  const safeNextParams = Object.entries(nextParams)\n    .filter(([key]) => allowed.includes(key))\n    .reduce((obj, [key, value]) => {\n      if (value == undefined) return obj\n      return {...obj, [key]: value}\n    }, {})\n\n  return encodeQueryString(safeNextParams)\n}\n\nconst BackLink = forwardRef(function BackLink(\n  props: BackLinkProps & {searchParams: PresentationSearchParams},\n  ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n  const {searchParams, ...restProps} = props\n  return (\n    <StateLink\n      {...restProps}\n      ref={ref}\n      state={{\n        type: undefined,\n        _searchParams: Object.entries(searchParams),\n      }}\n      title={undefined}\n    />\n  )\n})\n\nconst ReferenceChildLink = forwardRef(function ReferenceChildLink(\n  props: ReferenceChildLinkProps & {searchParams: PresentationSearchParams},\n  ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n  const {\n    documentId,\n    documentType,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    parentRefPath,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    template,\n    searchParams,\n    ...restProps\n  } = props\n\n  return (\n    <StateLink\n      {...restProps}\n      ref={ref}\n      state={{\n        id: documentId,\n        type: documentType,\n        _searchParams: Object.entries(searchParams),\n      }}\n      title={undefined}\n    />\n  )\n})\n\nexport function PresentationPaneRouterProvider(\n  props: PropsWithChildren<{\n    onStructureParams: (params: StructureDocumentPaneParams) => void\n    refs?: {_id: string; _type: string}[]\n    searchParams: PresentationSearchParams\n    structureParams: StructureDocumentPaneParams\n  }>,\n): React.JSX.Element {\n  const {children, onStructureParams, structureParams, searchParams, refs} = props\n\n  const {state: routerState, resolvePathFromState} = useRouter()\n\n  const routerSearchParams = useUnique(Object.fromEntries(routerState._searchParams || []))\n\n  const createPathWithParams: PaneRouterContextValue['createPathWithParams'] = useCallback(\n    (nextParams) => {\n      const path = resolvePathFromState(routerState)\n      const qs = resolveQueryStringFromParams({\n        ...routerSearchParams,\n        ...nextParams,\n      })\n      return `${path}${qs}`\n    },\n    [resolvePathFromState, routerSearchParams, routerState],\n  )\n\n  const context: PaneRouterContextValue = useMemo(() => {\n    return {\n      index: 0,\n      groupIndex: 0,\n      siblingIndex: 0,\n      payload: {},\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      params: structureParams as any,\n      hasGroupSiblings: false,\n      groupLength: 1,\n      routerPanesState: [],\n      ChildLink: (childLinkProps) => {\n        const {childId, ...restProps} = childLinkProps\n        const ref = refs?.find((r) => r._id === childId || getPublishedId(r._id) === childId)\n        if (ref) {\n          return (\n            <StateLink\n              {...restProps}\n              state={{\n                id: childId,\n                type: ref._type,\n                _searchParams: Object.entries(searchParams),\n              }}\n            />\n          )\n        }\n\n        return <div {...restProps} />\n      },\n      BackLink: (backLinkProps) => <BackLink {...backLinkProps} searchParams={searchParams} />,\n      ReferenceChildLink: (childLinkProps) => (\n        <ReferenceChildLink {...childLinkProps} searchParams={searchParams} />\n      ),\n      ParameterizedLink: () => {\n        throw new Error('ParameterizedLink not implemented')\n      },\n      closeCurrentAndAfter: () => {\n        console.warn('closeCurrentAndAfter')\n      },\n      handleEditReference: (options) => {\n        console.warn('handleEditReference', options)\n      },\n      replaceCurrent: (pane) => {\n        console.warn('replaceCurrent', pane)\n      },\n      closeCurrent: () => {\n        console.warn('closeCurrent')\n      },\n      duplicateCurrent: (pane) => {\n        console.warn('duplicateCurrent', pane)\n      },\n      setView: (viewId) => {\n        console.warn('setView', viewId)\n      },\n      setParams: (nextParams) => {\n        // eslint-disable-next-line no-warning-comments\n        // @todo set inspect param to undefined manually as param is missing from object when closing inspector\n        onStructureParams({\n          ...nextParams,\n          inspect: nextParams.inspect ?? undefined,\n        } as StructureDocumentPaneParams)\n      },\n      setPayload: (payload) => {\n        console.warn('setPayload', payload)\n      },\n      navigateIntent: (intentName, intentParams, options) => {\n        console.warn('navigateIntent', intentName, intentParams, options)\n      },\n      createPathWithParams,\n    }\n  }, [createPathWithParams, onStructureParams, refs, searchParams, structureParams])\n\n  return <PaneRouterContext.Provider value={context}>{children}</PaneRouterContext.Provider>\n}\n","import {Card, Code, Flex, Label, Stack} from '@sanity/ui'\nimport {type ErrorInfo, useCallback, useEffect, useMemo, useState} from 'react'\nimport {getPublishedId, useTranslation} from 'sanity'\nimport {\n  DocumentListPane as StructureDocumentListPane,\n  PaneLayout,\n  type PaneNode,\n  StructureToolProvider,\n} from 'sanity/structure'\nimport {styled} from 'styled-components'\n\nimport {ErrorBoundary} from '../../ui-components'\nimport {ErrorCard} from '../components/ErrorCard'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {\n  type MainDocumentState,\n  type PresentationSearchParams,\n  type StructureDocumentPaneParams,\n} from '../types'\nimport {usePresentationTool} from '../usePresentationTool'\nimport {PresentationPaneRouterProvider} from './PresentationPaneRouterProvider'\n\nconst RootLayout = styled(PaneLayout)`\n  height: 100%;\n`\n\nconst Root = styled(Flex)`\n  & > div {\n    min-width: none !important;\n    max-width: none !important;\n  }\n`\n\nconst WrappedCode = styled(Code)`\n  white-space: pre-wrap;\n`\n\nexport function DocumentListPane(props: {\n  mainDocumentState?: MainDocumentState\n  onStructureParams: (params: StructureDocumentPaneParams) => void\n  searchParams: PresentationSearchParams\n  refs: {_id: string; _type: string}[]\n}): React.JSX.Element {\n  const {mainDocumentState, onStructureParams, searchParams, refs} = props\n\n  const {t} = useTranslation(presentationLocaleNamespace)\n  const {devMode} = usePresentationTool()\n\n  const ids = useMemo(\n    () =>\n      refs\n        .filter((r) => getPublishedId(r._id) !== mainDocumentState?.document?._id)\n        .map((r) => getPublishedId(r._id)),\n    [mainDocumentState, refs],\n  )\n\n  const pane: Extract<PaneNode, {type: 'documentList'}> = useMemo(\n    () => ({\n      id: '$root',\n      options: {\n        filter: '_id in $ids',\n        params: {ids},\n        // defaultOrdering: [{field: '_updatedAt', direction: 'desc'}],\n      },\n      schemaTypeName: '',\n      title: t('document-list-pane.document-list.title'),\n      type: 'documentList',\n    }),\n    [ids, t],\n  )\n\n  const [errorParams, setErrorParams] = useState<{\n    info: ErrorInfo\n    error: Error\n  } | null>(null)\n\n  const handleRetry = useCallback(() => setErrorParams(null), [])\n\n  const [structureParams] = useState(() => ({}))\n\n  // Reset error state when `refs` value schanges\n  useEffect(() => setErrorParams(null), [refs])\n\n  if (errorParams) {\n    return (\n      <ErrorCard flex={1} message={t('document-list-pane.error.text')} onRetry={handleRetry}>\n        {devMode && (\n          // show runtime error message in dev mode\n          <Card overflow=\"auto\" padding={3} radius={2} tone=\"critical\">\n            <Stack space={3}>\n              <Label muted size={0}>\n                {t('presentation-error.label')}\n              </Label>\n              <WrappedCode size={1}>{errorParams.error.message}</WrappedCode>\n            </Stack>\n          </Card>\n        )}\n      </ErrorCard>\n    )\n  }\n\n  return (\n    <ErrorBoundary onCatch={setErrorParams}>\n      <RootLayout>\n        <StructureToolProvider>\n          <PresentationPaneRouterProvider\n            onStructureParams={onStructureParams}\n            structureParams={structureParams}\n            searchParams={searchParams}\n            refs={refs}\n          >\n            <Root direction=\"column\" flex={1}>\n              <StructureDocumentListPane\n                index={0}\n                itemId=\"$root\"\n                pane={pane}\n                // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n                paneKey=\"$root\"\n              />\n            </Root>\n          </PresentationPaneRouterProvider>\n        </StructureToolProvider>\n      </RootLayout>\n    </ErrorBoundary>\n  )\n}\n","import {Card, Code, Label, Stack} from '@sanity/ui'\nimport {type ErrorInfo, Suspense, useCallback, useEffect, useMemo, useState} from 'react'\nimport {type Path, useTranslation} from 'sanity'\nimport {decodeJsonParams} from 'sanity/router'\nimport {\n  DocumentPane as StructureDocumentPane,\n  type DocumentPaneNode,\n  PaneLayout,\n} from 'sanity/structure'\nimport {styled} from 'styled-components'\n\nimport {ErrorBoundary} from '../../ui-components'\nimport {ErrorCard} from '../components/ErrorCard'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {PresentationSpinner} from '../PresentationSpinner'\nimport {type PresentationSearchParams, type StructureDocumentPaneParams} from '../types'\nimport {usePresentationTool} from '../usePresentationTool'\nimport {PresentationPaneRouterProvider} from './PresentationPaneRouterProvider'\n\nconst WrappedCode = styled(Code)`\n  white-space: pre-wrap;\n`\n\nexport function DocumentPane(props: {\n  documentId: string\n  documentType: string\n  onFocusPath: (path: Path) => void\n  onStructureParams: (params: StructureDocumentPaneParams) => void\n  structureParams: StructureDocumentPaneParams\n  searchParams: PresentationSearchParams\n}): React.JSX.Element {\n  const {documentId, documentType, onFocusPath, onStructureParams, searchParams, structureParams} =\n    props\n  const {template, templateParams} = structureParams\n\n  const {t} = useTranslation(presentationLocaleNamespace)\n  const {devMode} = usePresentationTool()\n\n  const paneDocumentNode: DocumentPaneNode = useMemo(\n    () => ({\n      id: documentId,\n      options: {\n        id: documentId,\n        type: documentType,\n        template,\n        templateParameters: decodeJsonParams(templateParams),\n      },\n      title: '',\n      type: 'document',\n    }),\n    [documentId, documentType, template, templateParams],\n  )\n\n  const [errorParams, setErrorParams] = useState<{\n    info: ErrorInfo\n    error: Error\n  } | null>(null)\n\n  const handleRetry = useCallback(() => setErrorParams(null), [])\n\n  // Reset error state when parameters change\n  useEffect(() => {\n    setErrorParams(null)\n  }, [documentId, documentType, structureParams])\n\n  if (errorParams) {\n    return (\n      <ErrorCard flex={1} message={t('document-pane.error.text')} onRetry={handleRetry}>\n        {devMode && (\n          // show runtime error message in dev mode\n          <Card overflow=\"auto\" padding={3} radius={2} tone=\"critical\">\n            <Stack space={3}>\n              <Label muted size={0}>\n                {t('presentation-error.label')}\n              </Label>\n              <WrappedCode size={1}>{errorParams.error.message}</WrappedCode>\n            </Stack>\n          </Card>\n        )}\n      </ErrorCard>\n    )\n  }\n\n  return (\n    <ErrorBoundary onCatch={setErrorParams}>\n      <PaneLayout style={{height: '100%'}}>\n        <PresentationPaneRouterProvider\n          searchParams={searchParams}\n          onStructureParams={onStructureParams}\n          structureParams={structureParams}\n        >\n          <Suspense fallback={<PresentationSpinner />}>\n            <StructureDocumentPane\n              // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n              paneKey=\"document\"\n              index={1}\n              itemId=\"document\"\n              pane={paneDocumentNode}\n              onFocusPath={onFocusPath}\n            />\n          </Suspense>\n        </PresentationPaneRouterProvider>\n      </PaneLayout>\n    </ErrorBoundary>\n  )\n}\n","import {type Path} from 'sanity'\n\nimport {StructureToolProvider} from '../../structure/StructureToolProvider'\nimport {type PresentationSearchParams, type StructureDocumentPaneParams} from '../types'\nimport {DocumentPane} from './DocumentPane'\n\nexport function DocumentPanel(props: {\n  documentId: string\n  documentType: string\n  onFocusPath: (path: Path) => void\n  onStructureParams: (params: StructureDocumentPaneParams) => void\n  searchParams: PresentationSearchParams\n  structureParams: StructureDocumentPaneParams\n}): React.JSX.Element {\n  const {documentId, documentType, onFocusPath, onStructureParams, searchParams, structureParams} =\n    props\n  return (\n    <StructureToolProvider>\n      <DocumentPane\n        documentId={documentId}\n        documentType={documentType}\n        onFocusPath={onFocusPath}\n        onStructureParams={onStructureParams}\n        searchParams={searchParams}\n        structureParams={structureParams}\n      />\n    </StructureToolProvider>\n  )\n}\n","import {type SchemaType} from '@sanity/types'\nimport {useEffect, useState} from 'react'\nimport {\n  getPreviewStateObservable,\n  type PreviewValue,\n  type SanityDocument,\n  useDocumentPreviewStore,\n  usePerspective,\n} from 'sanity'\n\ninterface PreviewState {\n  isLoading?: boolean\n  snapshot?: PreviewValue | Partial<SanityDocument> | null\n}\n\nexport default function usePreviewState(documentId: string, schemaType?: SchemaType): PreviewState {\n  const documentPreviewStore = useDocumentPreviewStore()\n  const [preview, setPreview] = useState<PreviewState>({})\n  const {perspectiveStack} = usePerspective()\n  useEffect(() => {\n    if (!schemaType) {\n      return undefined\n    }\n    const subscription = getPreviewStateObservable(\n      documentPreviewStore,\n      schemaType,\n      documentId,\n      perspectiveStack,\n    ).subscribe((state) => {\n      setPreview(state)\n    })\n\n    return () => {\n      subscription?.unsubscribe()\n    }\n  }, [documentPreviewStore, schemaType, documentId, perspectiveStack])\n\n  return preview\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {type HTMLProps, useCallback, useMemo} from 'react'\nimport {\n  getPreviewValueWithFallback,\n  type Path,\n  PreviewCard,\n  SanityDefaultPreview,\n  Translate,\n  useSchema,\n  useTranslation,\n} from 'sanity'\nimport {StateLink} from 'sanity/router'\n\nimport {presentationLocaleNamespace} from '../i18n'\nimport {\n  type MainDocumentState,\n  type PresentationSearchParams,\n  type StructureDocumentPaneParams,\n} from '../types'\nimport {DocumentListPane} from './DocumentListPane'\nimport {DocumentPanel} from './DocumentPanel'\nimport usePreviewState from './usePreviewState'\n\nexport function ContentEditor(props: {\n  documentId?: string\n  documentType?: string\n  mainDocumentState?: MainDocumentState\n  onFocusPath: (path: Path) => void\n  onStructureParams: (params: StructureDocumentPaneParams) => void\n  refs: {_id: string; _type: string}[]\n  structureParams: StructureDocumentPaneParams\n  searchParams: PresentationSearchParams\n}): React.JSX.Element {\n  const {\n    documentId,\n    documentType,\n    mainDocumentState,\n    onFocusPath,\n    onStructureParams,\n    refs,\n    searchParams,\n    structureParams,\n  } = props\n\n  const {t} = useTranslation(presentationLocaleNamespace)\n  const schema = useSchema()\n\n  const MainDocumentLink = useCallback(\n    // eslint-disable-next-line @typescript-eslint/no-shadow\n    (props: HTMLProps<HTMLAnchorElement>) => {\n      return (\n        <StateLink\n          {...props}\n          state={{\n            id: mainDocumentState?.document?._id,\n            type: mainDocumentState?.document?._type,\n            _searchParams: Object.entries(searchParams),\n          }}\n        />\n      )\n    },\n    [mainDocumentState, searchParams],\n  )\n\n  const schemaType = useMemo(\n    () => schema.get(mainDocumentState?.document?._type || 'shoe')!,\n    [mainDocumentState, schema],\n  )\n\n  const previewState = usePreviewState(mainDocumentState?.document?._id || '', schemaType)\n\n  const preview = useMemo(() => {\n    if (!mainDocumentState?.document) return null\n\n    return (\n      <SanityDefaultPreview\n        {...getPreviewValueWithFallback({\n          snapshot: previewState.snapshot,\n          fallback: mainDocumentState!.document,\n        })}\n        schemaType={schemaType}\n        status={\n          <Card padding={1} radius={2} shadow={1}>\n            <Text muted size={0} weight=\"medium\">\n              {t('main-document.label')}\n            </Text>\n          </Card>\n        }\n      />\n    )\n  }, [mainDocumentState, schemaType, t, previewState])\n\n  if (documentId && documentType) {\n    return (\n      <DocumentPanel\n        documentId={documentId}\n        documentType={documentType}\n        onFocusPath={onFocusPath}\n        onStructureParams={onStructureParams}\n        searchParams={searchParams}\n        structureParams={structureParams}\n      />\n    )\n  }\n\n  return (\n    <Flex direction=\"column\" flex={1} height=\"fill\">\n      {mainDocumentState && (\n        <Card padding={3} tone={mainDocumentState.document ? 'inherit' : 'caution'}>\n          {mainDocumentState.document ? (\n            <PreviewCard\n              __unstable_focusRing\n              // eslint-disable-next-line @typescript-eslint/no-explicit-any\n              as={MainDocumentLink as any}\n              data-as=\"a\"\n              radius={2}\n              sizing=\"border\"\n              tone=\"inherit\"\n            >\n              {preview}\n            </PreviewCard>\n          ) : (\n            <Card padding={2} radius={2} tone=\"inherit\">\n              <Flex gap={3}>\n                <Box flex=\"none\">\n                  <Text size={1}>\n                    <WarningOutlineIcon />\n                  </Text>\n                </Box>\n                <Box flex={1}>\n                  <Text size={1}>\n                    <Translate\n                      t={t}\n                      i18nKey=\"main-document.missing.text\"\n                      components={{Code: 'code'}}\n                      values={{path: mainDocumentState.path}}\n                    />\n                  </Text>\n                </Box>\n              </Flex>\n            </Card>\n          )}\n        </Card>\n      )}\n\n      <DocumentListPane\n        mainDocumentState={mainDocumentState}\n        onStructureParams={onStructureParams}\n        searchParams={searchParams}\n        refs={refs}\n      />\n    </Flex>\n  )\n}\n","import {useState} from 'react'\nimport {v4 as uuid} from 'uuid'\n\nexport function usePanelId(id?: string): string {\n  const [panelId] = useState(() => id || uuid())\n  return panelId\n}\n","import {\n  type FunctionComponent,\n  type MouseEvent as ReactMouseEvent,\n  useCallback,\n  useContext,\n  useEffect,\n  useLayoutEffect,\n  useRef,\n} from 'react'\nimport {PresentationPanelsContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\nimport {usePanelId} from './usePanelId'\n\nconst Resizer = styled.div`\n  position: relative;\n`\nconst ResizerInner = styled.div<{\n  $disabled: boolean\n}>`\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: -5px;\n  width: 9px;\n  z-index: 10;\n  cursor: ${({$disabled}) => ($disabled ? 'auto' : 'ew-resize')};\n\n  /* Border */\n  & > span:nth-child(1) {\n    display: block;\n    border-left: 1px solid var(--card-border-color);\n    position: absolute;\n    top: 0;\n    left: 4px;\n    bottom: 0;\n    transition: opacity 200ms;\n  }\n\n  ${({$disabled}) =>\n    !$disabled &&\n    `\n    /* Hover effect */\n    & > span:nth-child(2) {\n      display: block;\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 9px;\n      bottom: 0;\n      background-color: var(--card-border-color);\n      opacity: 0;\n      transition: opacity 150ms;\n    }\n\n    @media (hover: hover) {\n      &:hover > span:nth-child(2) {\n        opacity: 0.2;\n      }\n    }\n  `}\n`\n\nexport const PanelResizer: FunctionComponent<{\n  id?: string\n  order: number\n  disabled?: boolean\n}> = function ({id: propId, order, disabled = false}) {\n  const el = useRef<HTMLDivElement>(null)\n\n  const context = useContext(PresentationPanelsContext)\n\n  if (context === null) {\n    throw Error(`Panel components must be rendered within a PanelGroup container`)\n  }\n\n  const id = usePanelId(propId)\n\n  const {activeResizer, drag, startDragging, stopDragging, registerElement, unregisterElement} =\n    context\n\n  const isDragging = activeResizer === id\n\n  if (context === null) {\n    throw Error(`Panel components must be rendered within a PanelGroup container`)\n  }\n\n  const onMouseDown = useCallback(\n    (event: ReactMouseEvent) => {\n      startDragging(id, event.nativeEvent)\n    },\n    [id, startDragging],\n  )\n\n  const onDrag = useCallback(\n    (e: MouseEvent) => {\n      drag(id, e)\n    },\n    [id, drag],\n  )\n\n  const onDragStop = useCallback(() => {\n    el.current!.blur()\n    stopDragging()\n  }, [stopDragging])\n\n  useEffect(() => {\n    if (!isDragging || disabled) return\n\n    // Set styles to prevent text selection and force an ew-resize cursor whilst\n    // dragging. Return a reset callback so we can revert to any values that\n    // might have been present before dragging started.\n    function setDocumentStyles() {\n      const bodyStyle = document.body.style\n      const documentStyle = document.documentElement.style\n\n      const {cursor} = documentStyle\n      const {userSelect} = bodyStyle\n\n      documentStyle.cursor = 'ew-resize'\n      bodyStyle.userSelect = 'none'\n\n      return () => {\n        if (cursor) documentStyle.cursor = cursor\n        else documentStyle.removeProperty('cursor')\n\n        if (userSelect) bodyStyle.userSelect = userSelect\n        else bodyStyle.removeProperty('user-select')\n      }\n    }\n\n    const resetDocumentStyles = setDocumentStyles()\n    window.addEventListener('mousemove', onDrag)\n    window.addEventListener('mouseup', onDragStop)\n    window.addEventListener('contextmenu', onDragStop)\n\n    // eslint-disable-next-line consistent-return\n    return () => {\n      resetDocumentStyles()\n      window.removeEventListener('mousemove', onDrag)\n      window.removeEventListener('mouseup', onDragStop)\n      window.removeEventListener('contextmenu', onDragStop)\n    }\n  }, [disabled, isDragging, onDrag, onDragStop])\n\n  useLayoutEffect(() => {\n    registerElement(id, {id, order, type: 'resizer', el})\n\n    return () => {\n      unregisterElement(id)\n    }\n  }, [id, order, registerElement, unregisterElement])\n\n  return (\n    <Resizer onMouseDown={onMouseDown} ref={el}>\n      <ResizerInner $disabled={disabled}>\n        <span />\n        <span />\n      </ResizerInner>\n    </Resizer>\n  )\n}\n","import {\n  type Dispatch,\n  type FunctionComponent,\n  type PropsWithChildren,\n  type SetStateAction,\n} from 'react'\nimport {\n  type CommentIntentGetter,\n  CommentsIntentProvider,\n  type Path,\n  type SanityDocument,\n} from 'sanity'\n\nimport {ContentEditor} from './editor/ContentEditor'\nimport {DisplayedDocumentBroadcasterProvider} from './loader/DisplayedDocumentBroadcaster'\nimport {Panel} from './panels/Panel'\nimport {PanelResizer} from './panels/PanelResizer'\nimport {\n  type MainDocumentState,\n  type PresentationParamsContextValue,\n  type PresentationSearchParams,\n  type StructureDocumentPaneParams,\n} from './types'\n\nexport interface PresentationContentProps {\n  documentId: PresentationParamsContextValue['id']\n  documentsOnPage: {_id: string; _type: string}[]\n  documentType: PresentationParamsContextValue['type']\n  getCommentIntent: CommentIntentGetter\n  mainDocumentState: MainDocumentState | undefined\n  onFocusPath: (path: Path) => void\n  onStructureParams: (params: StructureDocumentPaneParams) => void\n  searchParams: PresentationSearchParams\n  setDisplayedDocument: Dispatch<SetStateAction<Partial<SanityDocument> | null | undefined>>\n  structureParams: StructureDocumentPaneParams\n}\n\nconst PresentationContentWrapper: FunctionComponent<\n  PropsWithChildren<{\n    documentId?: string\n    getCommentIntent: CommentIntentGetter\n    setDisplayedDocument: Dispatch<SetStateAction<Partial<SanityDocument> | null | undefined>>\n  }>\n> = (props) => {\n  const {documentId, setDisplayedDocument, getCommentIntent} = props\n  return (\n    <>\n      <PanelResizer order={4} />\n      <Panel id=\"content\" minWidth={325} order={5}>\n        <DisplayedDocumentBroadcasterProvider\n          documentId={documentId}\n          setDisplayedDocument={setDisplayedDocument}\n        >\n          <CommentsIntentProvider getIntent={getCommentIntent}>\n            {props.children}\n          </CommentsIntentProvider>\n        </DisplayedDocumentBroadcasterProvider>\n      </Panel>\n    </>\n  )\n}\n\nexport const PresentationContent: FunctionComponent<PresentationContentProps> = (props) => {\n  const {\n    documentId,\n    documentsOnPage,\n    documentType,\n    getCommentIntent,\n    mainDocumentState,\n    onFocusPath,\n    onStructureParams,\n    searchParams,\n    setDisplayedDocument,\n    structureParams,\n  } = props\n\n  return (\n    <PresentationContentWrapper\n      documentId={documentId}\n      getCommentIntent={getCommentIntent}\n      setDisplayedDocument={setDisplayedDocument}\n    >\n      <ContentEditor\n        documentId={documentId}\n        documentType={documentType}\n        mainDocumentState={mainDocumentState}\n        onFocusPath={onFocusPath}\n        onStructureParams={onStructureParams}\n        refs={documentsOnPage}\n        searchParams={searchParams}\n        structureParams={structureParams}\n      />\n    </PresentationContentWrapper>\n  )\n}\n","import {type FunctionComponent, type PropsWithChildren, useCallback} from 'react'\nimport {PresentationNavigateContext} from 'sanity/_singletons'\n\nimport {type PresentationNavigate, type PresentationNavigateContextValue} from './types'\n\nexport const PresentationNavigateProvider: FunctionComponent<\n  PropsWithChildren<{\n    navigate: PresentationNavigate\n  }>\n> = function (props) {\n  const {children, navigate: _navigate} = props\n\n  const navigate = useCallback<PresentationNavigateContextValue>(\n    (preview, document = undefined) => {\n      _navigate(document || {}, preview ? {preview} : {})\n    },\n    [_navigate],\n  )\n\n  return (\n    <PresentationNavigateContext.Provider value={navigate}>\n      {children}\n    </PresentationNavigateContext.Provider>\n  )\n}\n","import {type Dispatch, type SetStateAction, useEffect, useState} from 'react'\n\nexport function useLocalState<T>(key: string, defaultValue: T): [T, Dispatch<SetStateAction<T>>] {\n  const [value, setValue] = useState<T>(() =>\n    JSON.parse(localStorage.getItem(key) ?? JSON.stringify(defaultValue)),\n  )\n\n  useEffect(() => {\n    localStorage.setItem(key, JSON.stringify(value))\n  }, [key, value])\n\n  return [value, setValue]\n}\n","import {memo, useCallback, useMemo} from 'react'\n\nimport {Panel} from './panels/Panel'\nimport {PanelResizer} from './panels/PanelResizer'\nimport {type NavigatorOptions} from './types'\nimport {useLocalState} from './useLocalState'\n\n/** @internal */\nexport interface UsePresentationNavigatorProps {\n  unstable_navigator?: NavigatorOptions\n}\n\n/** @internal */\nexport interface UsePresentationNavigatorState {\n  navigatorEnabled: boolean\n  toggleNavigator: (() => void) | undefined\n}\n\n/** @internal */\nexport function usePresentationNavigator(\n  props: UsePresentationNavigatorProps,\n): [UsePresentationNavigatorState, () => React.JSX.Element] {\n  const {unstable_navigator} = props\n\n  const navigatorProvided = !!unstable_navigator?.component\n  const [_navigatorEnabled, setNavigatorEnabled] = useLocalState<boolean>(\n    'presentation/navigator',\n    navigatorProvided,\n  )\n  const navigatorEnabled = navigatorProvided ? _navigatorEnabled : false\n  const toggleNavigator = useMemo(() => {\n    if (!navigatorProvided) return undefined\n\n    return () => setNavigatorEnabled((enabled) => !enabled)\n  }, [navigatorProvided, setNavigatorEnabled])\n\n  const Component = useCallback(\n    function PresentationNavigator() {\n      return <>{navigatorEnabled && <Navigator {...unstable_navigator!} />}</>\n    },\n    [navigatorEnabled, unstable_navigator],\n  )\n\n  return [{navigatorEnabled, toggleNavigator}, Component]\n}\n\nfunction NavigatorComponent(props: NavigatorOptions) {\n  // eslint-disable-next-line @typescript-eslint/no-shadow\n  const {minWidth, maxWidth, component: NavigatorComponent} = props\n  // eslint-disable-next-line no-eq-null\n  const navigatorDisabled = minWidth != null && maxWidth != null && minWidth === maxWidth\n  return (\n    <>\n      <Panel id=\"navigator\" minWidth={minWidth} maxWidth={maxWidth} order={1}>\n        <NavigatorComponent />\n      </Panel>\n      <PanelResizer order={2} disabled={navigatorDisabled} />\n    </>\n  )\n}\nconst Navigator = memo(NavigatorComponent)\n","import {type FunctionComponent, type PropsWithChildren, useMemo} from 'react'\nimport {PresentationParamsContext} from 'sanity/_singletons'\n\nimport {type PresentationParamsContextValue} from './types'\n\nexport const PresentationParamsProvider: FunctionComponent<\n  PropsWithChildren<{\n    params: PresentationParamsContextValue\n  }>\n> = function (props) {\n  const {children, params} = props\n\n  const context = useMemo<PresentationParamsContextValue>(() => params, [params])\n\n  return (\n    <PresentationParamsContext.Provider value={context}>\n      {children}\n    </PresentationParamsContext.Provider>\n  )\n}\n","import {type FunctionComponent, type PropsWithChildren, useMemo} from 'react'\nimport {PresentationContext} from 'sanity/_singletons'\n\nimport {\n  type PresentationContextValue,\n  type PresentationNavigate,\n  type PresentationParamsContextValue,\n  type PresentationSearchParams,\n  type StructureDocumentPaneParams,\n} from './types'\n\nexport const PresentationProvider: FunctionComponent<\n  PropsWithChildren<{\n    devMode: boolean\n    name: string\n    navigate: PresentationNavigate\n    params: PresentationParamsContextValue\n    searchParams: PresentationSearchParams\n    structureParams: StructureDocumentPaneParams\n  }>\n> = function (props) {\n  const {children, devMode, name, navigate, params, searchParams, structureParams} = props\n\n  const context = useMemo<PresentationContextValue>(\n    () => ({\n      devMode,\n      name,\n      navigate,\n      params,\n      searchParams,\n      structureParams,\n    }),\n    [devMode, name, navigate, params, searchParams, structureParams],\n  )\n\n  return <PresentationContext.Provider value={context}>{children}</PresentationContext.Provider>\n}\n","/**\n * When encoding the current studio perspective it's necessary to deal with it sometimes being an array, in a consistent way.\n */\nexport function encodeStudioPerspective(studioPerspective: string[] | string): string {\n  return Array.isArray(studioPerspective) ? studioPerspective.join(',') : studioPerspective\n}\n","import {Box} from '@sanity/ui'\nimport {motion, type VariantLabels, type Variants} from 'framer-motion'\nimport {forwardRef, type ReactEventHandler, useId} from 'react'\nimport {styled} from 'styled-components'\n\nconst IFrameElement = motion.create(styled.iframe`\n  box-shadow: 0 0 0 1px var(--card-border-color);\n  border: 0;\n  max-height: 100%;\n  width: 100%;\n  view-transition-class: presentation-tool-iframe;\n`)\n\nconst IFrameOverlay = styled(Box)`\n  position: absolute;\n  inset: 0;\n  background: transparent;\n`\n\ninterface IFrameProps {\n  animate: VariantLabels\n  initial: VariantLabels\n  onLoad: ReactEventHandler<HTMLIFrameElement>\n  preventClick: boolean\n  src: string\n  variants: Variants\n  style: React.CSSProperties\n}\n\nexport const IFrame = forwardRef<HTMLIFrameElement, IFrameProps>(function IFrame(props, ref) {\n  const {animate, initial, onLoad, preventClick, src, variants, style} = props\n  const id = useId()\n\n  return (\n    <>\n      <IFrameElement\n        style={{\n          ...style,\n          // useId() guarantees that the ID will be unique, even if we add support for multiple iframe instances,\n          // while `view-transition-class: presentation-tool-iframe` provides userland a way to customize the transition with CSS if they wish\n          viewTransitionName: `presentation-tool-iframe-${id.replace(/[^a-zA-Z0-9-_]/g, '_')}`,\n        }}\n        animate={animate}\n        initial={initial}\n        onLoad={onLoad}\n        ref={ref}\n        src={src}\n        variants={variants}\n      />\n      {preventClick && <IFrameOverlay />}\n    </>\n  )\n})\n","import {LaunchIcon} from '@sanity/icons'\nimport {urlSearchParamPreviewPerspective} from '@sanity/preview-url-secret/constants'\nimport {Text} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {type PresentationPerspective} from '../types'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {type PreviewProps} from './Preview'\n\n/** @internal */\nexport function OpenPreviewButton(\n  props: Pick<PreviewProps, 'openPopup'> & {\n    previewLocationOrigin?: string\n    previewLocationRoute: string\n    perspective: PresentationPerspective\n    targetOrigin: string\n  },\n): React.ReactNode {\n  const {openPopup, previewLocationOrigin, previewLocationRoute, perspective, targetOrigin} = props\n\n  const openPreviewLink = useMemo(() => {\n    const url = new URL(previewLocationRoute, previewLocationOrigin || targetOrigin)\n    url.searchParams.set(urlSearchParamPreviewPerspective, encodeStudioPerspective(perspective))\n    const {pathname, search} = url\n\n    return `${previewLocationOrigin}${pathname}${search}`\n  }, [perspective, previewLocationOrigin, previewLocationRoute, targetOrigin])\n\n  const {t} = useTranslation(presentationLocaleNamespace)\n\n  const handleOpenPopup = useCallback(\n    (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n      event.preventDefault()\n      openPopup(event.currentTarget.href)\n    },\n    [openPopup],\n  )\n\n  return (\n    <Tooltip\n      animate\n      content={<Text size={1}>{t('share-url.menu-item.open.text')}</Text>}\n      fallbackPlacements={['bottom-start']}\n      placement=\"bottom\"\n      portal\n    >\n      <Button\n        as=\"a\"\n        aria-label={t('share-url.menu-item.open.text')}\n        icon={LaunchIcon}\n        mode=\"bleed\"\n        href={openPreviewLink}\n        rel=\"opener\"\n        target=\"_blank\"\n        tooltipProps={null}\n        // @ts-expect-error the `as=\"a\"` prop isn't enough to change the type of event.target from <div> to <a>\n        onClick={handleOpenPopup}\n      />\n    </Tooltip>\n  )\n}\n","import {ResetIcon} from '@sanity/icons'\nimport {TextInput, type TextInputClearButtonProps} from '@sanity/ui'\nimport {\n  type ChangeEvent,\n  type FunctionComponent,\n  type KeyboardEvent,\n  type ReactNode,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {useActiveWorkspace, useTranslation} from 'sanity'\n\nimport {presentationLocaleNamespace} from '../i18n'\n\nexport const PreviewLocationInput: FunctionComponent<{\n  fontSize?: number\n  onChange: (value: string) => void\n  origin: string\n  padding?: number\n  prefix?: ReactNode\n  suffix?: ReactNode\n  value: string\n}> = function (props) {\n  const {fontSize = 1, onChange, origin, padding = 3, prefix, suffix, value} = props\n\n  const {t} = useTranslation(presentationLocaleNamespace)\n  const {basePath = '/'} = useActiveWorkspace()?.activeWorkspace || {}\n\n  const inputRef = useRef<HTMLInputElement | null>(null)\n  const [sessionValue, setSessionValue] = useState<string | undefined>(undefined)\n  const [customValidity, setCustomValidity] = useState<string | undefined>(undefined)\n\n  const handleChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n    setSessionValue(event.currentTarget.value)\n  }, [])\n\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLInputElement>) => {\n      if (event.key === 'Enter') {\n        if (sessionValue === undefined) {\n          return\n        }\n\n        const absoluteValue =\n          sessionValue.startsWith('/') || sessionValue === ''\n            ? `${origin}${sessionValue}`\n            : sessionValue\n\n        if (!absoluteValue.startsWith(`${origin}/`) && absoluteValue !== origin) {\n          setCustomValidity(t('preview-location-input.error', {origin, context: 'missing-origin'}))\n          return\n        }\n        // `origin` is an empty string '' if the Studio is embedded, and that's when we need to protect against recursion\n        if (!origin && (absoluteValue.startsWith(`${basePath}/`) || absoluteValue === basePath)) {\n          setCustomValidity(\n            t('preview-location-input.error', {basePath, context: 'same-base-path'}),\n          )\n          return\n        }\n\n        const nextValue = absoluteValue === origin ? `${origin}/` : absoluteValue\n\n        setCustomValidity(undefined)\n        setSessionValue(undefined)\n\n        onChange(nextValue.slice(origin.length))\n\n        inputRef.current?.blur()\n      }\n\n      if (event.key === 'Escape') {\n        setCustomValidity(undefined)\n        setSessionValue(undefined)\n      }\n    },\n    [basePath, onChange, origin, sessionValue, t],\n  )\n\n  const handleBlur = useCallback(() => {\n    setCustomValidity(undefined)\n    setSessionValue(undefined)\n  }, [])\n\n  useEffect(() => {\n    setCustomValidity(undefined)\n    setSessionValue(undefined)\n  }, [origin, value])\n\n  const resetButton: TextInputClearButtonProps = useMemo(() => ({icon: ResetIcon}), [])\n\n  return (\n    <>\n      <TextInput\n        clearButton={customValidity ? resetButton : undefined}\n        customValidity={customValidity}\n        fontSize={fontSize}\n        onBlur={handleBlur}\n        onClear={() => {\n          setCustomValidity(undefined)\n          setSessionValue(origin + value)\n        }}\n        onChange={handleChange}\n        onKeyDownCapture={handleKeyDown}\n        padding={padding}\n        prefix={prefix}\n        style={{zIndex: 1}}\n        radius={2}\n        ref={inputRef}\n        space={padding}\n        suffix={suffix}\n        value={sessionValue === undefined ? `${origin}${value}` : sessionValue}\n      />\n    </>\n  )\n}\n","/* eslint-disable @typescript-eslint/no-shadow,no-negated-condition,no-nested-ternary */\nimport {type ClientPerspective, type SyncTag} from '@sanity/client'\nimport {CopyIcon, ShareIcon} from '@sanity/icons'\nimport {SanityMonogram} from '@sanity/logos'\nimport {fetchSharedAccessQuery} from '@sanity/preview-url-secret/constants'\nimport {\n  disablePreviewAccessSharing,\n  enablePreviewAccessSharing,\n} from '@sanity/preview-url-secret/toggle-preview-access-sharing'\nimport {setSecretSearchParams} from '@sanity/preview-url-secret/without-secret-search-params'\nimport {\n  Box,\n  Card,\n  Grid,\n  Menu,\n  MenuDivider,\n  Spinner,\n  Stack,\n  Switch,\n  Text,\n  useToast,\n} from '@sanity/ui'\nimport {AnimatePresence, motion} from 'framer-motion'\nimport {lazy, memo, Suspense, useCallback, useEffect, useMemo, useState} from 'react'\nimport {useClient, useCurrentUser, useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {Button, MenuButton, MenuItem, Tooltip} from '../../ui-components'\nimport {API_VERSION} from '../constants'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {type PreviewProps} from './Preview'\n\nconst QRCodeSVG = lazy(() => import('./QRCodeSVG'))\n\nexport interface SharePreviewMenuProps {\n  canToggleSharePreviewAccess: boolean\n  canUseSharedPreviewAccess: boolean\n  previewLocationRoute: string\n  initialUrl: PreviewProps['initialUrl']\n  perspective: ClientPerspective\n}\n\nconst QrCodeLogoSize = 24\nconst QrCodeLogoPadding = 16\nconst QrSize = 224\n\nconst StyledSanityMonogram = styled(SanityMonogram)`\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  height: ${QrCodeLogoSize}px;\n  width: ${QrCodeLogoSize}px;\n`\n\nconst MotionSpinner = motion.create(Spinner)\nconst MotionText = motion.create(Text)\nconst MotionMonogram = motion.create(StyledSanityMonogram)\n\nexport const SharePreviewMenu = memo(function SharePreviewMenuComponent(\n  props: SharePreviewMenuProps,\n) {\n  const {\n    canToggleSharePreviewAccess,\n    canUseSharedPreviewAccess,\n    initialUrl,\n    previewLocationRoute,\n    perspective,\n  } = props\n  const {t} = useTranslation(presentationLocaleNamespace)\n  const {push: pushToast} = useToast()\n  const client = useClient({apiVersion: API_VERSION})\n  const currentUser = useCurrentUser()\n  const [loading, setLoading] = useState(true)\n  const [enabling, setEnabling] = useState(false)\n  const [disabling, setDisabling] = useState(false)\n  const [secret, setSecret] = useState<string | null>(null)\n  const busy = enabling || disabling || loading\n  const url = useMemo(\n    () =>\n      secret\n        ? setSecretSearchParams(\n            initialUrl,\n            secret,\n            previewLocationRoute,\n            encodeStudioPerspective(perspective),\n          )\n        : null,\n    [initialUrl, perspective, previewLocationRoute, secret],\n  )\n\n  const [error, setError] = useState<unknown>(null)\n  if (error) {\n    throw error\n  }\n\n  const handleUnableToToggle = useCallback(() => {\n    pushToast({\n      closable: true,\n      status: 'warning',\n      title: t('share-preview-menu.error_toggle-sharing', {context: 'toggle-sharing'}),\n    })\n  }, [pushToast, t])\n\n  const handleDisableSharing = useCallback(async () => {\n    try {\n      setDisabling(true)\n      await disablePreviewAccessSharing(\n        client,\n        '@sanity/presentation',\n        typeof window === 'undefined' ? '' : location.href,\n        currentUser?.id,\n      )\n      setSecret(null)\n    } catch (error) {\n      setError(error)\n    } finally {\n      setDisabling(false)\n    }\n  }, [client, currentUser?.id])\n  const handleEnableSharing = useCallback(async () => {\n    try {\n      setEnabling(true)\n\n      const previewUrlSecret = await enablePreviewAccessSharing(\n        client,\n        '@sanity/presentation',\n        typeof window === 'undefined' ? '' : location.href,\n        currentUser?.id,\n      )\n      setSecret(previewUrlSecret.secret)\n    } catch (error) {\n      setError(error)\n    } finally {\n      setEnabling(false)\n    }\n  }, [client, currentUser?.id])\n\n  const handleCopyUrl = useCallback(() => {\n    try {\n      if (!url) {\n        throw new Error('No URL to copy')\n      }\n      navigator.clipboard.writeText(url.toString())\n      pushToast({\n        closable: true,\n        status: 'success',\n        title: t('share-url.clipboard.status', {context: 'success'}),\n      })\n    } catch (error) {\n      setError(error)\n    }\n  }, [pushToast, t, url])\n\n  useEffect(() => {\n    let controller = new AbortController()\n    let usedTags: SyncTag[] = []\n    async function fetchShareSecret(lastLiveEventId: string | null, signal: AbortSignal) {\n      const {result, syncTags} = await client.fetch<string | null>(\n        fetchSharedAccessQuery,\n        {},\n        {filterResponse: false, lastLiveEventId, tag: 'presentation.fetch-shared-access-secret'},\n      )\n      if (Array.isArray(syncTags)) {\n        usedTags = syncTags\n      }\n      if (!signal.aborted) {\n        setSecret(result)\n      }\n    }\n    const subscription = client.live.events().subscribe({\n      next: (event) => {\n        if (event.type === 'message') {\n          controller.abort()\n          controller = new AbortController()\n          if (event.tags.some((tag) => usedTags.includes(tag))) {\n            fetchShareSecret(event.id, controller.signal)\n          }\n        }\n      },\n      error: setError,\n    })\n\n    fetchShareSecret(null, controller.signal).finally(() => setLoading(false))\n\n    return () => {\n      subscription.unsubscribe()\n      controller.abort()\n    }\n  }, [client])\n\n  return (\n    <MenuButton\n      button={\n        <Button\n          aria-label={t('preview-frame.share-button.aria-label')}\n          icon={ShareIcon}\n          mode=\"bleed\"\n          tooltipProps={null}\n        />\n      }\n      id=\"share-menu\"\n      menu={\n        <Menu style={{maxWidth: 248}} padding={canUseSharedPreviewAccess ? undefined : 0}>\n          {canUseSharedPreviewAccess ? (\n            <>\n              <label style={{cursor: 'pointer'}}>\n                <Grid\n                  columns={2}\n                  rows={2}\n                  gapX={3}\n                  gapY={1}\n                  style={{\n                    justifyContent: 'center',\n                    alignItems: 'center',\n                    gridTemplateColumns: 'min-content 1fr',\n                    gridTemplateRows: 'min-content',\n                  }}\n                  paddingTop={3}\n                  paddingX={3}\n                >\n                  <Tooltip\n                    animate\n                    content={\n                      <Text size={1}>\n                        {t('share-preview-menu.toggle-button.tooltip', {\n                          context: url ? 'disable' : 'enable',\n                        })}\n                      </Text>\n                    }\n                    fallbackPlacements={['bottom-start']}\n                    placement=\"bottom\"\n                    portal\n                  >\n                    <Switch\n                      checked={enabling || (url !== null && !disabling)}\n                      readOnly={enabling || disabling}\n                      indeterminate={loading}\n                      onChange={\n                        !canToggleSharePreviewAccess\n                          ? handleUnableToToggle\n                          : url\n                            ? handleDisableSharing\n                            : handleEnableSharing\n                      }\n                    />\n                  </Tooltip>\n                  <Text size={1} weight=\"medium\">\n                    {t('share-preview-menu.toggle-button.label', {context: 'first-line'})}\n                  </Text>\n                  <span />\n                  <Text muted size={1}>\n                    {t('share-preview-menu.toggle-button.label', {context: 'second-line'})}\n                  </Text>\n                </Grid>\n              </label>\n              <Box padding={3} paddingTop={2}>\n                <Stack space={3}>\n                  <Card\n                    tone={busy || !url ? 'transparent' : undefined}\n                    style={{\n                      position: 'relative',\n                      aspectRatio: '1 / 1',\n                      display: 'flex',\n                      alignItems: 'center',\n                      justifyContent: 'center',\n                    }}\n                  >\n                    <AnimatePresence>\n                      {busy ? (\n                        <MotionSpinner\n                          muted\n                          initial={{opacity: 0}}\n                          animate={{opacity: 1}}\n                          exit={{opacity: 0}}\n                        />\n                      ) : url ? (\n                        <>\n                          <Suspense fallback={<Spinner />}>\n                            <QRCodeSVG\n                              title={t('share-preview-menu.qr-code.title', {url: url.toString()})}\n                              value={url.toString()}\n                              size={QrSize}\n                              color=\"var(--card-fg-color)\"\n                              logoSize={QrCodeLogoSize + QrCodeLogoPadding}\n                            />\n                            <MotionMonogram\n                              initial={{opacity: -0.5}}\n                              animate={{opacity: 1.5}}\n                              exit={{opacity: 0}}\n                            />\n                          </Suspense>\n                        </>\n                      ) : (\n                        <MotionText\n                          muted\n                          size={1}\n                          style={{maxWidth: '100px', textWrap: 'pretty', textAlign: 'center'}}\n                          initial={{opacity: 0}}\n                          animate={{opacity: 1}}\n                          exit={{opacity: 0}}\n                        >\n                          {t('share-preview-menu.qr-code.placeholder')}\n                        </MotionText>\n                      )}\n                    </AnimatePresence>\n                  </Card>\n                  <Text muted size={1}>\n                    {t('share-preview-menu.qr-code.instructions')}\n                  </Text>\n                </Stack>\n              </Box>\n              <MenuDivider />\n              <MenuItem\n                disabled={!url || disabling}\n                icon={CopyIcon}\n                onClick={handleCopyUrl}\n                text={t('share-preview-menu.copy-url.text')}\n              />\n            </>\n          ) : (\n            <Card padding={2} tone=\"caution\" radius={3}>\n              <Text style={{textWrap: 'pretty'}}>\n                {t('share-preview-menu.error', {context: 'missing-grants'})}\n              </Text>\n            </Card>\n          )}\n        </Menu>\n      }\n      popover={{\n        constrainSize: true,\n        placement: 'bottom',\n        portal: true,\n      }}\n    />\n  )\n})\nSharePreviewMenu.displayName = 'Memo(SharePreviewMenu)'\n","import {DesktopIcon, MobileDeviceIcon, PanelLeftIcon, RefreshIcon} from '@sanity/icons'\nimport {withoutSecretSearchParams} from '@sanity/preview-url-secret/without-secret-search-params'\nimport {Box, Card, Flex, Hotkeys, Switch, Text} from '@sanity/ui'\nimport {type RefObject, useCallback, useMemo} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {Button, Tooltip} from '../../ui-components'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {ACTION_IFRAME_RELOAD} from '../reducers/presentationReducer'\nimport {type HeaderOptions} from '../types'\nimport {OpenPreviewButton} from './OpenPreviewButton'\nimport {type PreviewProps} from './Preview'\nimport {PreviewLocationInput} from './PreviewLocationInput'\nimport {SharePreviewMenu} from './SharePreviewMenu'\n\n/** @public */\nexport interface PreviewHeaderProps extends PreviewProps {\n  iframeRef: RefObject<HTMLIFrameElement | null>\n  renderDefault: (props: PreviewHeaderProps) => React.JSX.Element\n}\n\nconst PreviewHeaderDefault = (props: Omit<PreviewHeaderProps, 'renderDefault'>) => {\n  const {\n    canSharePreviewAccess,\n    canToggleSharePreviewAccess,\n    canUseSharedPreviewAccess,\n    dispatch,\n    iframe,\n    iframeRef,\n    initialUrl,\n    navigatorEnabled,\n    onPathChange,\n    onRefresh,\n    openPopup,\n    overlaysConnection,\n    perspective,\n    previewUrl,\n    setViewport,\n    targetOrigin,\n    toggleNavigator,\n    toggleOverlay,\n    viewport,\n    visualEditing: {overlaysEnabled},\n  } = props\n\n  const {t} = useTranslation(presentationLocaleNamespace)\n\n  const toggleViewportSize = useCallback(\n    () => setViewport(viewport === 'desktop' ? 'mobile' : 'desktop'),\n    [setViewport, viewport],\n  )\n\n  const previewLocationOrigin = useMemo(() => {\n    return targetOrigin === location.origin ? '' : targetOrigin\n  }, [targetOrigin])\n\n  const handleRefresh = () => {\n    onRefresh(() => {\n      if (!iframeRef.current) {\n        return\n      }\n      dispatch({type: ACTION_IFRAME_RELOAD})\n      // Funky way to reload an iframe without CORS issues\n      // eslint-disable-next-line no-self-assign\n      // ref.current.src = ref.current.src\n      Object.assign(iframeRef.current, {src: `${targetOrigin}${previewUrl || '/'}`})\n    })\n  }\n\n  const previewLocationRoute = useMemo(() => {\n    const previewURL = new URL(previewUrl || '/', targetOrigin)\n    const {pathname, search} = withoutSecretSearchParams(previewURL)\n\n    return `${pathname}${search}`\n  }, [previewUrl, targetOrigin])\n\n  return (\n    <Flex align=\"center\" gap={1} paddingX={1} style={{width: '100%'}}>\n      {toggleNavigator && (\n        <Button\n          aria-label={t('preview-frame.navigator.toggle-button.aria-label')}\n          icon={PanelLeftIcon}\n          mode=\"bleed\"\n          onClick={toggleNavigator}\n          selected={navigatorEnabled}\n          tooltipProps={{\n            content: <Text size={1}>{t('preview-frame.navigator.toggle-button.tooltip')}</Text>,\n            fallbackPlacements: ['bottom-start'],\n            placement: 'bottom',\n          }}\n        />\n      )}\n\n      <Tooltip\n        animate\n        content={\n          <Flex align=\"center\" style={{whiteSpace: 'nowrap'}}>\n            <Box padding={1}>\n              <Text size={1}>\n                {t('preview-frame.overlay.toggle-button.tooltip', {\n                  context: overlaysEnabled ? 'disable' : 'enable',\n                })}\n              </Text>\n            </Box>\n            <Box paddingY={1}>\n              <Hotkeys keys={['Alt']} style={{marginTop: -4, marginBottom: -4}} />\n            </Box>\n          </Flex>\n        }\n        fallbackPlacements={['bottom-start']}\n        placement=\"bottom\"\n        portal\n      >\n        <Card\n          as=\"label\"\n          flex=\"none\"\n          padding={3}\n          marginX={1}\n          style={{\n            lineHeight: 0,\n            borderRadius: 999,\n            userSelect: 'none',\n          }}\n          tone={overlaysEnabled ? 'transparent' : undefined}\n        >\n          <Flex align=\"center\" gap={3}>\n            <div style={{margin: -4}}>\n              <Switch\n                checked={overlaysEnabled}\n                onChange={toggleOverlay}\n                disabled={iframe.status === 'loading' || overlaysConnection !== 'connected'}\n              />\n            </div>\n            <Box>\n              <Text muted={!overlaysEnabled} size={1} weight=\"medium\">\n                {t('preview-frame.overlay.toggle-button.text')}\n              </Text>\n            </Box>\n          </Flex>\n        </Card>\n      </Tooltip>\n\n      <Box flex={1}>\n        <PreviewLocationInput\n          prefix={\n            <Box padding={1}>\n              <Tooltip\n                animate\n                content={\n                  <Text size={1}>\n                    {iframe.status === 'loaded'\n                      ? t('preview-frame.refresh-button.tooltip')\n                      : t('preview-frame.status', {context: iframe.status})}\n                  </Text>\n                }\n                fallbackPlacements={['bottom-end']}\n                placement=\"bottom\"\n                portal\n              >\n                <Button\n                  aria-label={t('preview-frame.refresh-button.aria-label')}\n                  icon={RefreshIcon}\n                  mode=\"bleed\"\n                  loading={iframe.status === 'reloading' || iframe.status === 'refreshing'}\n                  onClick={handleRefresh}\n                  tooltipProps={null}\n                />\n              </Tooltip>\n            </Box>\n          }\n          onChange={onPathChange}\n          origin={previewLocationOrigin}\n          suffix={\n            <Box padding={1}>\n              <OpenPreviewButton\n                openPopup={openPopup}\n                previewLocationOrigin={previewLocationOrigin}\n                previewLocationRoute={previewLocationRoute}\n                perspective={perspective}\n                targetOrigin={targetOrigin}\n              />\n            </Box>\n          }\n          value={previewLocationRoute}\n        />\n      </Box>\n\n      <Flex align=\"center\" flex=\"none\" gap={1}>\n        <Tooltip\n          animate\n          content={\n            <Text size={1}>\n              {t('preview-frame.viewport-button.tooltip', {\n                context: viewport === 'desktop' ? 'narrow' : 'full',\n              })}\n            </Text>\n          }\n          fallbackPlacements={['bottom-start']}\n          placement=\"bottom\"\n          portal\n        >\n          <Button\n            data-testid=\"preview-viewport-toggle\"\n            data-viewport={viewport}\n            aria-label={t('preview-frame.viewport-button.aria-label')}\n            icon={viewport === 'desktop' ? MobileDeviceIcon : DesktopIcon}\n            mode=\"bleed\"\n            onClick={toggleViewportSize}\n            tooltipProps={null}\n          />\n        </Tooltip>\n      </Flex>\n\n      {canSharePreviewAccess && (\n        <Flex align=\"center\" flex=\"none\" gap={1}>\n          <SharePreviewMenu\n            canToggleSharePreviewAccess={canToggleSharePreviewAccess}\n            canUseSharedPreviewAccess={canUseSharedPreviewAccess}\n            previewLocationRoute={previewLocationRoute}\n            initialUrl={initialUrl}\n            perspective={perspective}\n          />\n        </Flex>\n      )}\n    </Flex>\n  )\n}\n\n/** @internal */\nexport function PreviewHeader(\n  props: Omit<PreviewHeaderProps, 'renderDefault'> & {options?: HeaderOptions},\n): React.JSX.Element {\n  // eslint-disable-next-line @typescript-eslint/no-shadow\n  const renderDefault = useCallback((props: Omit<PreviewHeaderProps, 'renderDefault'>) => {\n    return <PreviewHeaderDefault {...props} />\n  }, [])\n\n  const HeaderComponent = props.options?.component\n  const header = HeaderComponent ? (\n    <HeaderComponent {...props} renderDefault={renderDefault} />\n  ) : (\n    renderDefault(props)\n  )\n\n  return (\n    <Card flex=\"none\" padding={2} borderBottom style={{position: 'relative'}}>\n      <Flex align=\"center\" style={{minHeight: 0}}>\n        {header}\n      </Flex>\n    </Card>\n  )\n}\n","/* eslint-disable react/no-unused-prop-types,no-nested-ternary */\nimport {\n  urlSearchParamPreviewPerspective,\n  urlSearchParamVercelProtectionBypass,\n  urlSearchParamVercelSetBypassCookie,\n  type VercelSetBypassCookieValue,\n} from '@sanity/preview-url-secret/constants'\nimport {Card, Code, Flex, Label, Spinner, Stack, Text, usePrefersReducedMotion} from '@sanity/ui'\nimport {AnimatePresence, motion, MotionConfig} from 'framer-motion'\nimport {\n  forwardRef,\n  memo,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n  useState,\n  useSyncExternalStore,\n} from 'react'\nimport {flushSync} from 'react-dom'\nimport {useTranslation} from 'sanity'\n\nimport {Button, TooltipDelayGroupProvider} from '../../ui-components'\nimport {ErrorCard} from '../components/ErrorCard'\nimport {MAX_TIME_TO_OVERLAYS_CONNECTION} from '../constants'\nimport {presentationLocaleNamespace} from '../i18n'\nimport {\n  ACTION_IFRAME_LOADED,\n  ACTION_IFRAME_RELOAD,\n  type DispatchPresentationAction,\n  type PresentationState,\n} from '../reducers/presentationReducer'\nimport {\n  type ConnectionStatus,\n  type HeaderOptions,\n  type PresentationPerspective,\n  type PresentationViewport,\n} from '../types'\nimport {usePresentationTool} from '../usePresentationTool'\nimport {encodeStudioPerspective} from '../util/encodeStudioPerspective'\nimport {IFrame} from './IFrame'\nimport {PreviewHeader} from './PreviewHeader'\n\nconst MotionFlex = motion.create(Flex)\n\n/** @public */\nexport interface PreviewProps extends Pick<PresentationState, 'iframe' | 'visualEditing'> {\n  canSharePreviewAccess: boolean\n  canToggleSharePreviewAccess: boolean\n  canUseSharedPreviewAccess: boolean\n  dispatch: DispatchPresentationAction\n  header?: HeaderOptions\n  initialUrl: URL\n  loadersConnection: ConnectionStatus\n  navigatorEnabled: boolean\n  onPathChange: (nextPath: string) => void\n  onRefresh: (fallback: () => void) => void\n  openPopup: (url: string) => void\n  overlaysConnection: ConnectionStatus\n  perspective: PresentationPerspective\n  previewUrl?: string\n  setViewport: (mode: 'desktop' | 'mobile') => void\n  targetOrigin: string\n  toggleNavigator?: () => void\n  toggleOverlay: () => void\n  viewport: PresentationViewport\n  vercelProtectionBypass: string | null\n}\n\nexport const Preview = memo(\n  forwardRef<HTMLIFrameElement, PreviewProps>(function PreviewComponent(props, forwardedRef) {\n    const {\n      dispatch,\n      iframe,\n      header,\n      initialUrl,\n      loadersConnection,\n      overlaysConnection,\n      perspective,\n      viewport,\n      vercelProtectionBypass,\n    } = props\n\n    const [stablePerspective, setStablePerspective] = useState<typeof perspective | null>(null)\n    const urlPerspective = encodeStudioPerspective(\n      stablePerspective === null ? perspective : stablePerspective,\n    )\n    const previewUrl = useMemo(() => {\n      const url = new URL(initialUrl)\n      // Always set the perspective that's being used, even if preview mode isn't configured\n      if (!url.searchParams.get(urlSearchParamPreviewPerspective)) {\n        url.searchParams.set(urlSearchParamPreviewPerspective, urlPerspective)\n      }\n\n      if (vercelProtectionBypass || url.searchParams.get(urlSearchParamVercelProtectionBypass)) {\n        // samesitenone is required since the request is from an iframe\n        url.searchParams.set(\n          urlSearchParamVercelSetBypassCookie,\n          'samesitenone' satisfies VercelSetBypassCookieValue,\n        )\n      }\n      // If there's a vercel protection bypass secret in the context, set it if none exists already\n      if (vercelProtectionBypass && !url.searchParams.get(urlSearchParamVercelProtectionBypass)) {\n        url.searchParams.set(urlSearchParamVercelProtectionBypass, vercelProtectionBypass)\n      }\n\n      return url\n    }, [initialUrl, urlPerspective, vercelProtectionBypass])\n\n    useEffect(() => {\n      /**\n       * If the preview iframe is connected to the loader, we know that switching the perspective can be done without reloading the iframe.\n       */\n      if (loadersConnection === 'connected') {\n        /**\n         * Only set the stable perspective if it hasn't been set yet.\n         */\n        setStablePerspective((prev) => (prev === null ? perspective : prev))\n      }\n    }, [loadersConnection, perspective])\n\n    const {t} = useTranslation(presentationLocaleNamespace)\n    const {devMode} = usePresentationTool()\n    const prefersReducedMotion = usePrefersReducedMotion()\n    const ref = useRef<HTMLIFrameElement | null>(null)\n\n    const previewHeader = <PreviewHeader {...props} iframeRef={ref} options={header} />\n\n    // Forward the iframe ref to the parent component\n    useImperativeHandle<HTMLIFrameElement | null, HTMLIFrameElement | null>(\n      forwardedRef,\n      () => ref.current,\n    )\n\n    const loading = iframe.status === 'loading' || iframe.status === 'reloading'\n    const [timedOut, setTimedOut] = useState(false)\n    const refreshing = iframe.status === 'refreshing'\n    const [somethingIsWrong, setSomethingIsWrong] = useState(false)\n    const iframeIsBusy = loading || refreshing || overlaysConnection === 'connecting'\n\n    const handleRetry = useCallback(() => {\n      if (!ref.current) {\n        return\n      }\n\n      ref.current.src = previewUrl.toString()\n\n      dispatch({type: ACTION_IFRAME_RELOAD})\n    }, [dispatch, previewUrl])\n    const handleContinueAnyway = useCallback(() => {\n      setContinueAnyway(true)\n    }, [])\n\n    const [continueAnyway, setContinueAnyway] = useState(false)\n    const [showOverlaysConnectionStatus, setShowOverlaysConnectionState] = useState(false)\n    useEffect(() => {\n      if (loading || refreshing) {\n        return undefined\n      }\n\n      if (overlaysConnection === 'connecting' || overlaysConnection === 'reconnecting') {\n        const timeout = setTimeout(() => {\n          setShowOverlaysConnectionState(true)\n        }, 5_000)\n        return () => clearTimeout(timeout)\n      }\n      return undefined\n    }, [overlaysConnection, loading, refreshing])\n\n    useEffect(() => {\n      if (loading || refreshing || !showOverlaysConnectionStatus) {\n        return undefined\n      }\n      if (overlaysConnection === 'connected') {\n        setSomethingIsWrong(false)\n        setShowOverlaysConnectionState(false)\n        setTimedOut(false)\n        setContinueAnyway(false)\n      }\n      if (overlaysConnection === 'connecting') {\n        const timeout = setTimeout(() => {\n          setTimedOut(true)\n          // eslint-disable-next-line no-console\n          console.error(\n            `Unable to connect to visual editing. Make sure you've setup '@sanity/visual-editing' correctly`,\n          )\n        }, MAX_TIME_TO_OVERLAYS_CONNECTION)\n        return () => clearTimeout(timeout)\n      }\n      if (overlaysConnection === 'reconnecting') {\n        const timeout = setTimeout(() => {\n          setTimedOut(true)\n          setSomethingIsWrong(true)\n        }, MAX_TIME_TO_OVERLAYS_CONNECTION)\n        return () => clearTimeout(timeout)\n      }\n      return undefined\n    }, [loading, overlaysConnection, refreshing, showOverlaysConnectionStatus])\n\n    const onIFrameLoad = useCallback(() => {\n      dispatch({type: ACTION_IFRAME_LOADED})\n    }, [dispatch])\n\n    /**\n     * Ensure that clicking outside of menus and dialogs will close as focus shifts to the iframe\n     */\n    useEffect(() => {\n      if (!ref.current) {\n        return undefined\n      }\n      const instance = ref.current\n      function handleBlur() {\n        if (instance !== document.activeElement) {\n          return\n        }\n\n        instance.dispatchEvent(new MouseEvent('mousedown', {bubbles: true, cancelable: true}))\n      }\n      window.addEventListener('blur', handleBlur)\n      return () => {\n        window.removeEventListener('blur', handleBlur)\n      }\n    }, [])\n\n    const preventIframeInteraction = useMemo(() => {\n      return (\n        (loading || (overlaysConnection === 'connecting' && iframe.status !== 'refreshing')) &&\n        !continueAnyway\n      )\n    }, [continueAnyway, iframe.status, loading, overlaysConnection])\n\n    const canUseViewTransition = useSyncExternalStore(\n      // eslint-disable-next-line no-empty-function\n      useCallback(() => () => {}, []),\n      () => CSS.supports(`(view-transition-name: test)`),\n    )\n    const iframeAnimations = useMemo(() => {\n      return [\n        preventIframeInteraction ? 'background' : 'active',\n        loading ? 'reloading' : 'idle',\n        // If CSS View Transitions are supported, then transition iframe viewport dimensions with that instead of Motion\n        canUseViewTransition ? '' : viewport,\n        showOverlaysConnectionStatus && !continueAnyway ? 'timedOut' : '',\n      ]\n    }, [\n      canUseViewTransition,\n      continueAnyway,\n      loading,\n      preventIframeInteraction,\n      showOverlaysConnectionStatus,\n      viewport,\n    ])\n\n    const [currentViewport, setCurrentViewport] = useState(viewport)\n    const [iframeStyle, setIframeStyle] = useState(iframeVariants[viewport])\n    useEffect(() => {\n      if (canUseViewTransition && viewport !== currentViewport) {\n        const update = () => {\n          setCurrentViewport(viewport)\n          setIframeStyle(iframeVariants[viewport])\n        }\n        if (\n          !prefersReducedMotion &&\n          'startViewTransition' in document &&\n          typeof document.startViewTransition === 'function'\n        ) {\n          document.startViewTransition(() => flushSync(() => update()))\n        } else {\n          update()\n        }\n      }\n    }, [canUseViewTransition, prefersReducedMotion, currentViewport, viewport])\n\n    return (\n      <MotionConfig transition={prefersReducedMotion ? {duration: 0} : undefined}>\n        <TooltipDelayGroupProvider>\n          {previewHeader}\n\n          {/* @TODO: Move this to <PreviewFrame /> */}\n          <Card flex={1} tone=\"transparent\">\n            <Flex\n              align=\"center\"\n              height=\"fill\"\n              justify=\"center\"\n              padding={(canUseViewTransition ? currentViewport : viewport) === 'desktop' ? 0 : 2}\n              sizing=\"border\"\n              style={{\n                position: 'relative',\n                cursor: iframeIsBusy ? 'wait' : undefined,\n              }}\n            >\n              <AnimatePresence>\n                {!somethingIsWrong &&\n                !loading &&\n                !refreshing &&\n                // viewport, // using CSS View Transitions instead of framer motion to drive this\n                showOverlaysConnectionStatus &&\n                !continueAnyway ? (\n                  <MotionFlex\n                    initial=\"initial\"\n                    animate=\"animate\"\n                    exit=\"exit\"\n                    variants={spinnerVariants}\n                    justify=\"center\"\n                    align=\"center\"\n                    style={{\n                      inset: '0',\n                      position: 'absolute',\n                      backdropFilter: timedOut\n                        ? 'blur(16px) saturate(0.5) grayscale(0.5)'\n                        : 'blur(2px)',\n                      ['transition' as string]: 'backdrop-filter 0.2s ease-in-out',\n                      // @TODO Because of Safari we have to do this\n                      WebkitBackdropFilter: timedOut\n                        ? 'blur(16px) saturate(0.5) grayscale(0.5)'\n                        : 'blur(2px)',\n                      WebkitTransition: '-webkit-backdrop-filter 0.2s ease-in-out',\n                      zIndex: 1,\n                    }}\n                  >\n                    <Flex\n                      style={{...sizes[viewport]}}\n                      justify=\"center\"\n                      align=\"center\"\n                      direction=\"column\"\n                      gap={4}\n                    >\n                      {timedOut && (\n                        <Button\n                          disabled\n                          mode=\"ghost\"\n                          text={t('preview-frame.continue-button.text')}\n                          style={{opacity: 0}}\n                        />\n                      )}\n                      <Card\n                        radius={2}\n                        tone={timedOut ? 'caution' : 'inherit'}\n                        padding={4}\n                        shadow={1}\n                      >\n                        <Flex justify=\"center\" align=\"center\" direction=\"column\" gap={4}>\n                          <Spinner muted />\n                          <Text muted size={1}>\n                            {timedOut\n                              ? t('preview-frame.status', {context: 'timeout'})\n                              : t('preview-frame.status', {context: 'connecting'})}\n                          </Text>\n                        </Flex>\n                      </Card>\n                      {timedOut && (\n                        <Button\n                          // mode=\"ghost\"\n                          tone=\"critical\"\n                          onClick={handleContinueAnyway}\n                          text={t('preview-frame.continue-button.text')}\n                        />\n                      )}\n                    </Flex>\n                  </MotionFlex>\n                ) : (loading ||\n                    (overlaysConnection === 'connecting' && iframe.status !== 'refreshing')) &&\n                  !continueAnyway ? (\n                  <MotionFlex\n                    initial=\"initial\"\n                    animate=\"animate\"\n                    exit=\"exit\"\n                    variants={spinnerVariants}\n                    justify=\"center\"\n                    align=\"center\"\n                    style={{\n                      inset: '0',\n                      position: 'absolute',\n                      // boxShadow: '0 0 0 1px var(--card-shadow-outline-color)',\n                    }}\n                  >\n                    <Flex\n                      style={{...sizes[viewport]}}\n                      justify=\"center\"\n                      align=\"center\"\n                      direction=\"column\"\n                      gap={4}\n                    >\n                      <Spinner muted />\n                      <Text muted size={1}>\n                        {t('preview-frame.status', {context: 'loading'})}\n                      </Text>\n                    </Flex>\n                  </MotionFlex>\n                ) : somethingIsWrong && !continueAnyway ? (\n                  <MotionFlex\n                    initial=\"initial\"\n                    animate=\"animate\"\n                    exit=\"exit\"\n                    variants={errorVariants}\n                    justify=\"center\"\n                    align=\"center\"\n                    style={{\n                      background: 'var(--card-bg-color)',\n                      inset: '0',\n                      position: 'absolute',\n                    }}\n                  >\n                    <ErrorCard\n                      flex={1}\n                      message={t('preview-frame.connection.error.text')}\n                      onRetry={handleRetry}\n                      onContinueAnyway={handleContinueAnyway}\n                    >\n                      {devMode && (\n                        <>\n                          {overlaysConnection !== 'connected' && (\n                            <Card padding={3} radius={2} tone=\"critical\">\n                              <Stack space={3}>\n                                <Label muted size={0}>\n                                  {t('preview-frame.overlay.connection-status.label')}\n                                </Label>\n                                <Code size={1}>\n                                  {t('channel.status', {context: overlaysConnection})}\n                                </Code>\n                              </Stack>\n                            </Card>\n                          )}\n\n                          {loadersConnection !== 'connected' && (\n                            <Card padding={3} radius={2} tone=\"critical\">\n                              <Stack space={3}>\n                                <Label muted size={0}>\n                                  {t('preview-frame.loader.connection-status.label')}\n                                </Label>\n                                <Code size={1}>\n                                  {t('channel.status', {context: loadersConnection})}\n                                </Code>\n                              </Stack>\n                            </Card>\n                          )}\n                        </>\n                      )}\n                    </ErrorCard>\n                  </MotionFlex>\n                ) : null}\n              </AnimatePresence>\n              <IFrame\n                animate={iframeAnimations}\n                initial={['background']}\n                onLoad={onIFrameLoad}\n                preventClick={preventIframeInteraction}\n                ref={ref}\n                src={previewUrl.toString()}\n                style={iframeStyle}\n                variants={iframeVariants}\n              />\n            </Flex>\n          </Card>\n        </TooltipDelayGroupProvider>\n      </MotionConfig>\n    )\n  }),\n)\nPreview.displayName = 'Memo(ForwardRef(Preview))'\n\nconst sizes = {\n  desktop: {\n    width: '100%',\n    height: '100%',\n  },\n  mobile: {\n    width: 375,\n    height: 650,\n  },\n}\n\nconst spinnerVariants = {\n  initial: {opacity: 1},\n  animate: {opacity: [0, 0, 1]},\n  exit: {opacity: [1, 0, 0]},\n}\n\nconst errorVariants = {\n  initial: {opacity: 1},\n  animate: {opacity: [0, 0, 1]},\n  exit: {opacity: [1, 0, 0]},\n}\n\nconst iframeVariants = {\n  desktop: {\n    ...sizes.desktop,\n    boxShadow: '0 0 0 0px var(--card-border-color)',\n  },\n  mobile: {\n    ...sizes.mobile,\n    boxShadow: '0 0 0 1px var(--card-border-color)',\n  },\n  background: {\n    opacity: 0,\n    scale: 1,\n  },\n  idle: {\n    scale: 1,\n  },\n  reloading: {\n    scale: [1, 1, 1, 0.98],\n  },\n  active: {\n    opacity: [0, 0, 1],\n    scale: 1,\n  },\n  timedOut: {\n    opacity: [0, 0, 1],\n  },\n}\n","/** @internal */\nexport function defineWarnOnce() {\n  let warned = false\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return (...args: any[]): void => {\n    if (!warned) {\n      // eslint-disable-next-line no-console\n      console.warn(...args)\n      warned = true\n    }\n  }\n}\n","import {validateApiPerspective} from '@sanity/client'\nimport isEqual from 'fast-deep-equal'\nimport {type MutableRefObject, useCallback, useMemo, useRef, useState} from 'react'\n\nimport {type FrameState, type PresentationPerspective} from './types'\nimport {defineWarnOnce} from './util/warnOnce'\n\nexport type DocumentOnPage = {\n  _id: string\n  _type: string\n}\n\ntype DocumentCache = Record<string, DocumentOnPage>\ntype KeyedDocumentCache = Record<string, DocumentCache>\n\nconst warnOnceAboutCrossDatasetReference = defineWarnOnce()\n\n/**\n * @TODO should be refactored to an lru-cache that is keyed by the perspective, which could be an array (if it is, it should use consistent sorting),\n *       and the url path (optionally the origin too), so that swapping between perspectives and urls is fast.\n */\nexport function useDocumentsOnPage(\n  perspective: PresentationPerspective,\n  frameStateRef: MutableRefObject<FrameState>,\n): [\n  DocumentOnPage[],\n  (key: string, perspective: PresentationPerspective, state: DocumentOnPage[]) => void,\n] {\n  validateApiPerspective(perspective)\n\n  const [published, setPublished] = useState<KeyedDocumentCache>({})\n  const [previewDrafts, setPreviewDrafts] = useState<KeyedDocumentCache>({})\n\n  // Used to compare the frame url with its value when the cache was last updated\n  // If the url has changed, the entire cache is replaced\n  const urlRef = useRef<string | undefined>('')\n\n  const setDocumentsOnPage = useCallback(\n    // eslint-disable-next-line @typescript-eslint/no-shadow\n    (key: string, perspective: PresentationPerspective, sourceDocuments: DocumentOnPage[] = []) => {\n      const documents = sourceDocuments.filter((sourceDocument) => {\n        if ('_projectId' in sourceDocument && sourceDocument._projectId) {\n          // eslint-disable-next-line no-warning-comments\n          // @TODO Handle cross dataset references\n\n          warnOnceAboutCrossDatasetReference(\n            'Cross dataset references are not supported yet, ignoring source document',\n            sourceDocument,\n          )\n          return false\n        }\n        return sourceDocument\n      })\n\n      const setCache = perspective === 'published' ? setPublished : setPreviewDrafts\n\n      setCache((cache) => {\n        // Create the `next` documents, dedupe by `_id`\n        const next: Record<string, DocumentOnPage> = {}\n        for (const document of documents) {\n          next[document._id] = document\n        }\n\n        // If the frame url has changed, replace the entire cache with the next documents\n        if (urlRef.current !== frameStateRef.current.url) {\n          urlRef.current = frameStateRef.current.url\n          return {[key]: next}\n        }\n\n        // If the keyed cache has changed, return the entire cache and replace the keyed part\n        const prev = cache[key]\n        if (!isEqual(prev, next)) {\n          return {...cache, [key]: next}\n        }\n\n        // Otherwise return the entire cache as is\n        return cache\n      })\n    },\n    [frameStateRef],\n  )\n\n  const documentsOnPage = useMemo(() => {\n    const keyedCache = perspective === 'published' ? published : previewDrafts\n    const uniqueDocuments = Object.values(keyedCache).reduce((acc, cache) => {\n      Object.values(cache).forEach((doc) => {\n        acc[doc._id] = doc\n      })\n      return acc\n    }, {})\n\n    return Object.values(uniqueDocuments)\n  }, [perspective, previewDrafts, published])\n\n  return [documentsOnPage, setDocumentsOnPage]\n}\n","import {type ResponseQueryOptions} from '@sanity/client'\nimport {match, type Path} from 'path-to-regexp'\nimport {useEffect, useRef, useState} from 'react'\nimport {useClient, usePerspective} from 'sanity'\nimport {type RouterState, useRouter} from 'sanity/router'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {API_VERSION} from './constants'\nimport {\n  type DocumentResolver,\n  type DocumentResolverContext,\n  type MainDocument,\n  type MainDocumentState,\n  type PresentationNavigate,\n  type PreviewUrlOption,\n} from './types'\n\n// Helper function to \"unwrap\" a result when it is either explicitly provided or\n// returned as the result of a passed function\nfunction fnOrObj<T, U>(arg: T | ((ctx: U) => T), context: U): T {\n  return arg instanceof Function ? arg(context) : arg\n}\n\nfunction getQueryFromResult(\n  resolver: DocumentResolver,\n  context: DocumentResolverContext,\n): string | undefined {\n  if (resolver.resolve) {\n    const filter = resolver.resolve(context)?.filter\n    return filter\n      ? `// groq\n*[${filter}][0]{_id, _type}`\n      : undefined\n  }\n\n  if ('type' in resolver) {\n    return `// groq\n*[_type == \"${resolver.type}\"][0]{_id, _type}`\n  }\n\n  return `// groq\n*[${fnOrObj(resolver.filter, context)}][0]{_id, _type}`\n}\n\nfunction getParamsFromResult(\n  resolver: DocumentResolver,\n  context: DocumentResolverContext,\n): Record<string, string> {\n  if (resolver.resolve) {\n    return resolver.resolve(context)?.params ?? context.params\n  }\n\n  if ('type' in resolver) {\n    return {}\n  }\n\n  return fnOrObj(resolver.params, context) ?? context.params\n}\n\nexport function getRouteContext(route: Path, url: URL): DocumentResolverContext | undefined {\n  const routes = Array.isArray(route) ? route : [route]\n\n  for (route of routes) {\n    let origin: DocumentResolverContext['origin'] = undefined\n    let path = route\n\n    // Handle absolute URLs\n    if (typeof route === 'string') {\n      try {\n        const absolute = new URL(route)\n        origin = absolute.origin\n        path = absolute.pathname\n      } catch {\n        // Ignore, as we assume a relative path\n      }\n    }\n\n    // If an origin has been explicitly provided, check that it matches\n    if (origin && url.origin !== origin) continue\n\n    try {\n      const matcher = match<Record<string, string>>(path, {decode: decodeURIComponent})\n      const result = matcher(url.pathname)\n      if (result) {\n        // eslint-disable-next-line @typescript-eslint/no-shadow\n        const {params, path} = result\n        return {origin, params, path}\n      }\n    } catch (e) {\n      throw new Error(`\"${route}\" is not a valid route pattern`)\n    }\n  }\n  return undefined\n}\n\nexport function useMainDocument(props: {\n  navigate?: PresentationNavigate\n  navigationHistory: RouterState[]\n  path?: string\n  previewUrl?: PreviewUrlOption\n  resolvers?: DocumentResolver[]\n}): MainDocumentState | undefined {\n  const {navigate, navigationHistory, path, previewUrl, resolvers = []} = props\n  const {state: routerState} = useRouter()\n  const {perspectiveStack} = usePerspective()\n  const client = useClient({apiVersion: API_VERSION})\n  const relativeUrl =\n    path || routerState._searchParams?.find(([key]) => key === 'preview')?.[1] || ''\n\n  const [mainDocumentState, setMainDocumentState] = useState<MainDocumentState | undefined>(\n    undefined,\n  )\n  const mainDocumentIdRef = useRef<string | undefined>(undefined)\n\n  const handleResponse = useEffectEvent((doc: MainDocument | undefined, url: URL) => {\n    if (!doc || mainDocumentIdRef.current !== doc._id) {\n      setMainDocumentState({\n        document: doc,\n        path: url.pathname,\n      })\n      mainDocumentIdRef.current = doc?._id\n\n      // We only want to force a navigation to the main document if\n      // the path changed but the document ID did not. An explicit\n      // document navigation should take precedence over displaying\n      // the main document. We determine if an explicit document\n      // navigation has occured by comparing the IDs of the last two\n      // resultant navigation states.\n      if (navigationHistory.at(-1)?.id === navigationHistory.at(-2)?.id) {\n        navigate?.({\n          id: doc?._id,\n          type: doc?._type,\n        })\n      }\n    }\n  })\n\n  useEffect(() => {\n    const base =\n      // eslint-disable-next-line no-nested-ternary\n      typeof previewUrl === 'string'\n        ? previewUrl\n        : typeof previewUrl === 'object'\n          ? previewUrl?.origin || location.origin\n          : location.origin\n    const url = new URL(relativeUrl, base)\n\n    if (resolvers.length) {\n      let result:\n        | {\n            context: DocumentResolverContext\n            resolver: DocumentResolver\n          }\n        | undefined\n      for (const resolver of resolvers) {\n        const context = getRouteContext(resolver.route, url)\n        if (context) {\n          result = {context, resolver}\n          break\n        }\n      }\n\n      if (result) {\n        const query = getQueryFromResult(result.resolver, result.context)\n        const params = getParamsFromResult(result.resolver, result.context)\n        if (query) {\n          const controller = new AbortController()\n          const options: ResponseQueryOptions = {\n            perspective: perspectiveStack,\n            signal: controller.signal,\n            tag: 'use-main-document',\n          }\n\n          client\n            .fetch<MainDocument | undefined>(query, params, options)\n            .then((doc) => handleResponse(doc, url))\n            .catch((e) => {\n              if (e instanceof Error && e.name === 'AbortError') return\n              setMainDocumentState({document: undefined, path: url.pathname})\n              mainDocumentIdRef.current = undefined\n            })\n          return () => {\n            controller.abort()\n          }\n        }\n      }\n    }\n    setMainDocumentState(undefined)\n    mainDocumentIdRef.current = undefined\n    return undefined\n  }, [client, previewUrl, relativeUrl, resolvers, perspectiveStack])\n\n  return mainDocumentState\n}\n","import { getPublishedId, studioPath } from \"@sanity/client/csm\";\nimport { pipe, string, minLength, optional, object, is, record, unknown, safeParse, parse } from \"valibot\";\nconst lengthyStr$1 = pipe(string(), minLength(1)), optionalLengthyStr = optional(lengthyStr$1), sanityNodeSchema = object({\n  baseUrl: lengthyStr$1,\n  dataset: optionalLengthyStr,\n  id: lengthyStr$1,\n  path: lengthyStr$1,\n  projectId: optionalLengthyStr,\n  tool: optionalLengthyStr,\n  type: optionalLengthyStr,\n  workspace: optionalLengthyStr\n});\nfunction isValidSanityNode(node) {\n  return is(sanityNodeSchema, node);\n}\nfunction isArray(value) {\n  return value !== null && Array.isArray(value);\n}\nfunction pathToUrlString(path) {\n  let str = \"\";\n  for (const segment of path) {\n    if (typeof segment == \"string\") {\n      str && (str += \".\"), str += segment;\n      continue;\n    }\n    if (typeof segment == \"number\") {\n      str && (str += \":\"), str += `${segment}`;\n      continue;\n    }\n    if (isArray(segment)) {\n      str && (str += \":\"), str += `${segment.join(\",\")}}`;\n      continue;\n    }\n    if (segment._key) {\n      str && (str += \":\"), str += `${segment._key}`;\n      continue;\n    }\n  }\n  return str;\n}\nfunction encodeSanityNodeData(node) {\n  const { id: _id, path, baseUrl, tool, workspace, type } = node;\n  return isValidSanityNode(node) ? [\n    [\"id\", getPublishedId(_id)],\n    [\"type\", type],\n    [\"path\", pathToUrlString(studioPath.fromString(path))],\n    [\"base\", encodeURIComponent(baseUrl)],\n    [\"workspace\", workspace],\n    [\"tool\", tool]\n  ].filter(([, value]) => !!value).map((part) => part.join(\"=\")).join(\";\") : void 0;\n}\nfunction createDataAttribute(props) {\n  function normalizePath(path) {\n    return path ? typeof path == \"string\" ? studioPath.fromString(path) : path : [];\n  }\n  function toString(props2) {\n    if (!props2.id) throw new Error(\"`id` is required to create a data attribute\");\n    if (!props2.type) throw new Error(\"`type` is required to create a data attribute\");\n    if (!props2.path || !props2.path.length)\n      throw new Error(\"`path` is required to create a data attribute\");\n    const attrs = {\n      baseUrl: props2.baseUrl || \"/\",\n      workspace: props2.workspace,\n      tool: props2.tool,\n      type: props2.type,\n      id: props2.id,\n      path: typeof props2.path == \"string\" ? props2.path : studioPath.toString(props2.path)\n    };\n    return encodeSanityNodeData(attrs);\n  }\n  const DataAttribute = (path) => toString({\n    ...props,\n    path: [...normalizePath(props.path), ...normalizePath(path)]\n  });\n  return DataAttribute.toString = function() {\n    return toString(props);\n  }, DataAttribute.combine = function(attrs) {\n    return createDataAttribute({\n      ...props,\n      ...attrs\n    });\n  }, DataAttribute.scope = function(path) {\n    return createDataAttribute({\n      ...props,\n      path: [...normalizePath(props.path), ...normalizePath(path)]\n    });\n  }, DataAttribute;\n}\nconst RE_SEGMENT_WITH_INDEX = /^([\\w-]+):(0|[1-9][0-9]*)$/, RE_SEGMENT_WITH_TUPLE = /^([\\w-]+):([0-9]+),([0-9]+)$/, RE_SEGMENT_WITH_KEY = /^([\\w-]+):([\\w-]+)$/;\nfunction urlStringToPath(str) {\n  const path = [];\n  for (const segment of str.split(\".\")) {\n    const withIndex = RE_SEGMENT_WITH_INDEX.exec(segment);\n    if (withIndex) {\n      path.push(withIndex[1], Number(withIndex[2]));\n      continue;\n    }\n    const withTuple = RE_SEGMENT_WITH_TUPLE.exec(segment);\n    if (withTuple) {\n      path.push(withTuple[1], [Number(withTuple[2]), Number(withTuple[3])]);\n      continue;\n    }\n    const withKey = RE_SEGMENT_WITH_KEY.exec(segment);\n    if (withKey) {\n      path.push(withKey[1], { _key: withKey[2] });\n      continue;\n    }\n    path.push(segment);\n  }\n  return path;\n}\nconst lengthyStr = pipe(string(), minLength(1)), sanityLegacyNodeSchema = object({\n  origin: lengthyStr,\n  href: lengthyStr,\n  data: optional(record(string(), unknown()))\n});\nfunction decodeSanityString(str) {\n  const data = str.split(\";\").reduce((acc, segment) => {\n    const [key, value] = segment.split(\"=\");\n    if (!key || segment.includes(\"=\") && !value) return acc;\n    switch (key) {\n      case \"id\":\n        acc.id = value;\n        break;\n      case \"type\":\n        acc.type = value;\n        break;\n      case \"path\":\n        acc.path = studioPath.toString(urlStringToPath(value));\n        break;\n      case \"base\":\n        acc.baseUrl = decodeURIComponent(value);\n        break;\n      case \"tool\":\n        acc.tool = value;\n        break;\n      case \"workspace\":\n        acc.workspace = value;\n        break;\n      case \"projectId\":\n        acc.projectId = value;\n        break;\n      case \"dataset\":\n        acc.dataset = value;\n        break;\n    }\n    return acc;\n  }, {});\n  if (isValidSanityNode(data))\n    return data;\n}\nfunction decodeSanityObject(data) {\n  const sanityNode = safeParse(sanityNodeSchema, data);\n  if (sanityNode.success)\n    return sanityNode.output;\n  const sanityLegacyNode = safeParse(sanityLegacyNodeSchema, data);\n  if (sanityLegacyNode.success)\n    try {\n      const url = new URL(\n        sanityLegacyNode.output.href,\n        typeof document > \"u\" ? \"https://example.com\" : location.origin\n      );\n      return url.searchParams.size > 0 ? parse(sanityNodeSchema, Object.fromEntries(url.searchParams.entries())) : sanityLegacyNode.output;\n    } catch (err) {\n      return console.error(\"Failed to parse sanity node\", err), sanityLegacyNode.output;\n    }\n}\nfunction decodeSanityNodeData(data) {\n  if (typeof data == \"object\" && data !== null)\n    return decodeSanityObject(data);\n  try {\n    const obj = JSON.parse(data);\n    return decodeSanityObject(obj);\n  } catch {\n    return decodeSanityString(data);\n  }\n}\nexport {\n  createDataAttribute,\n  decodeSanityNodeData,\n  encodeSanityNodeData,\n  pathToUrlString,\n  urlStringToPath\n};\n//# sourceMappingURL=index.js.map\n","import {studioPath} from '@sanity/client/csm'\nimport {urlStringToPath} from '@sanity/visual-editing-csm'\nimport type {PresentationStateParams} from '../types'\n\nexport function parseId(rawId: string | undefined): string | undefined {\n  if (rawId === undefined) {\n    return undefined\n  }\n\n  const segments = decodeURIComponent(rawId)?.split('.')\n\n  if (segments[0] === 'drafts') {\n    segments.shift()\n  }\n\n  return segments.join('.')\n}\n\nexport function parsePath(rawPath: string | undefined): string | undefined {\n  if (rawPath === undefined) {\n    return undefined\n  }\n\n  return studioPath.toString(urlStringToPath(decodeURIComponent(rawPath)))\n}\n\nexport function parseRouterState(state: PresentationStateParams): PresentationStateParams {\n  return {\n    id: parseId(state.id),\n    path: parsePath(state.path),\n    type: state.type,\n  }\n}\n","/* eslint-disable @typescript-eslint/no-shadow */\nimport {type MutableRefObject, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {getPublishedId} from 'sanity'\nimport {type RouterContextValue, type RouterState, type SearchParam} from 'sanity/router'\n\nimport {parseRouterState} from './lib/parse'\nimport {\n  type CombinedSearchParams,\n  type FrameState,\n  type PresentationNavigate,\n  type PresentationParamsContextValue,\n  type PresentationSearchParams,\n  type PresentationStateParams,\n  type StructureDocumentPaneParams,\n} from './types'\n\nfunction pruneObject<T extends RouterState | PresentationParamsContextValue>(obj: T): T {\n  return Object.fromEntries(\n    Object.entries(obj).filter(\n      ([, value]) => value !== undefined && value !== '' && value !== null,\n    ),\n  ) as T\n}\n\nexport function useParams({\n  initialPreviewUrl,\n  routerNavigate,\n  routerState,\n  routerSearchParams,\n  frameStateRef,\n}: {\n  initialPreviewUrl: URL\n  routerNavigate: RouterContextValue['navigate']\n  routerState: RouterState & PresentationStateParams\n  routerSearchParams: {\n    [k: string]: string\n  }\n  frameStateRef: MutableRefObject<FrameState>\n}): {\n  navigate: PresentationNavigate\n  navigationHistory: RouterState[]\n  params: PresentationParamsContextValue\n  searchParams: PresentationSearchParams\n  structureParams: StructureDocumentPaneParams\n} {\n  const params = useMemo<PresentationParamsContextValue>(() => {\n    const {id, path, type} = parseRouterState(routerState)\n\n    return {\n      id,\n      type,\n      path,\n      preview:\n        routerSearchParams.preview || `${initialPreviewUrl.pathname}${initialPreviewUrl.search}`,\n      perspective: routerSearchParams.perspective,\n      viewport: routerSearchParams.viewport,\n      inspect: routerSearchParams.inspect,\n      rev: routerSearchParams.rev,\n      since: routerSearchParams.since,\n      template: routerSearchParams.template,\n      templateParams: routerSearchParams.templateParams,\n      view: routerSearchParams.view,\n      // assist\n      pathKey: routerSearchParams.pathKey,\n      instruction: routerSearchParams.instruction,\n      // comments\n      comment: routerSearchParams.comment,\n      changesInspectorTab: routerSearchParams.changesInspectorTab as 'history' | 'review',\n    }\n  }, [routerState, routerSearchParams, initialPreviewUrl])\n\n  const structureParams = useMemo<StructureDocumentPaneParams>(() => {\n    const pruned = pruneObject({\n      inspect: params.inspect,\n      path: params.path,\n      rev: params.rev,\n      since: params.since,\n      template: params.template,\n      templateParams: params.templateParams,\n      view: params.view,\n      // assist\n      pathKey: params.pathKey,\n      instruction: params.instruction,\n      // comments\n      comment: params.comment,\n      changesInspectorTab: params.changesInspectorTab,\n    })\n    return pruned\n  }, [\n    params.changesInspectorTab,\n    params.comment,\n    params.inspect,\n    params.instruction,\n    params.path,\n    params.pathKey,\n    params.rev,\n    params.since,\n    params.template,\n    params.templateParams,\n    params.view,\n  ])\n\n  const searchParams = useMemo<PresentationSearchParams>(() => {\n    const pruned = pruneObject({\n      perspective: params.perspective,\n      preview: params.preview,\n      viewport: params.viewport,\n    })\n    return pruned\n  }, [params.perspective, params.preview, params.viewport])\n\n  const routerStateRef = useRef(routerState)\n\n  useEffect(() => {\n    routerStateRef.current = routerState\n  }, [routerState])\n\n  const [navigationHistory, setNavigationHistory] = useState<RouterState[]>([routerState])\n\n  const navigate = useCallback<PresentationNavigate>(\n    (nextState, nextSearchState = {}, forceReplace) => {\n      // Force navigation to use published IDs only\n      if (nextState.id) nextState.id = getPublishedId(nextState.id)\n\n      // Extract type, id and path as 'routerState'\n      const {_searchParams: routerSearchParams, ...routerState} = routerStateRef.current\n\n      // Convert array of search params to an object\n      const routerSearchState = (routerSearchParams || []).reduce((acc, [key, value]) => {\n        acc[key as keyof CombinedSearchParams] = value as undefined | 'history' | 'review'\n        return acc\n      }, {} as CombinedSearchParams)\n\n      // Merge routerState and incoming state\n      const state: RouterState = pruneObject({\n        ...routerState,\n        ...nextState,\n      })\n\n      // Merge routerSearchState and incoming searchState\n      const searchState = pruneObject({\n        ...routerSearchState,\n        ...nextSearchState,\n      })\n\n      // If the document has changed, clear the template and templateParams\n      if (routerState.id !== state.id) {\n        delete searchState.template\n        delete searchState.templateParams\n      }\n\n      state._searchParams = Object.entries(searchState).reduce(\n        (acc, [key, value]) => [...acc, [key, value] as SearchParam],\n        [] as SearchParam[],\n      )\n\n      const replace = forceReplace ?? searchState.preview === frameStateRef.current.url\n\n      setNavigationHistory((prev) => [...prev, state])\n      routerNavigate(state, {replace})\n    },\n    [routerNavigate, frameStateRef],\n  )\n\n  return {\n    navigate,\n    navigationHistory,\n    params,\n    searchParams,\n    structureParams,\n  }\n}\n","import {type Controller} from '@sanity/comlink'\nimport {useCallback, useEffect, useState} from 'react'\n\nimport {POPUP_CHECK_INTERVAL} from './constants'\n\n/**\n * A hook for managing popup Window contexts\n *\n * This hook handles:\n * - Opening new popup Windows, and adding them as targets to the controller\n * - Tracking existing popup windows, and cleaning up closed popups\n *\n * @param controller - Comlink controller instance that manages communication\n * between Window contexts\n *\n * @returns An object containing:\n * - popups: A Set of currently open popup Window objects\n * - open: Function to open a new popup Window with the specified URL\n *\n */\nexport const usePopups = (\n  controller?: Controller,\n): {\n  popups: Set<Window>\n  open: (url: string) => void\n} => {\n  // State to keep track of open popup windows\n  const [popups, setPopups] = useState<Set<Window>>(() => new Set())\n\n  // Function to open a new popup window\n  const open = useCallback((url: string) => {\n    const source = window.open(url, '_blank')\n    if (source) {\n      setPopups((prev) => new Set(prev).add(source))\n    }\n  }, [])\n\n  // Handles syncing the existing popups with the controller\n  useEffect(() => {\n    const unsubs: Array<() => void> = []\n    if (popups.size && controller) {\n      // loop popups and add targets\n      for (const source of popups) {\n        if (source && 'closed' in source && !source.closed) {\n          unsubs.push(controller.addTarget(source))\n        }\n      }\n    }\n    return () => {\n      unsubs.forEach((unsub) => unsub())\n    }\n  }, [controller, popups])\n\n  // Checks for closed popups and removes them from the tracked Set\n  useEffect(() => {\n    if (popups.size) {\n      const interval = setInterval(() => {\n        const closed = new Set<Window>()\n        for (const source of popups) {\n          if (source && 'closed' in source && source.closed) {\n            closed.add(source)\n          }\n        }\n        if (closed.size) {\n          setPopups((prev) => {\n            const next = new Set(prev)\n            for (const source of closed) {\n              next.delete(source)\n            }\n            return next\n          })\n        }\n      }, POPUP_CHECK_INTERVAL)\n\n      return () => {\n        clearInterval(interval)\n      }\n    }\n    return undefined\n  }, [popups])\n\n  return {popups, open}\n}\n","import {createPreviewSecret} from '@sanity/preview-url-secret/create-secret'\nimport {definePreviewUrl} from '@sanity/preview-url-secret/define-preview-url'\nimport {startTransition, useEffect, useMemo, useRef, useState} from 'react'\nimport {type SanityClient, useActiveWorkspace, useClient, useCurrentUser} from 'sanity'\nimport {suspend} from 'suspend-react'\n\nimport {API_VERSION} from './constants'\nimport {type PresentationPerspective, type PreviewUrlOption} from './types'\nimport {encodeStudioPerspective} from './util/encodeStudioPerspective'\n\nexport function usePreviewUrl(\n  previewUrl: PreviewUrlOption,\n  toolName: string,\n  studioPreviewPerspective: PresentationPerspective,\n  previewSearchParam: string | null,\n  canCreateUrlPreviewSecrets: boolean,\n): URL {\n  const client = useClient({apiVersion: API_VERSION})\n  const workspace = useActiveWorkspace()\n  const basePath = workspace?.activeWorkspace?.basePath || '/'\n  const workspaceName = workspace?.activeWorkspace?.name || 'default'\n  const deps = useSuspendCacheKeys(toolName, basePath, workspaceName, previewSearchParam)\n  const previewUrlSecret = usePreviewUrlSecret(\n    (canCreateUrlPreviewSecrets && typeof previewUrl === 'object') ||\n      typeof previewUrl === 'function',\n    deps,\n  )\n\n  return suspend(async () => {\n    if (typeof previewUrl === 'string') {\n      const resolvedUrl = new URL(previewUrl, location.origin)\n      let resultUrl = resolvedUrl\n      try {\n        if (previewSearchParam) {\n          const restoredUrl = new URL(previewSearchParam, resolvedUrl)\n          if (restoredUrl.origin === resolvedUrl.origin) {\n            resultUrl = restoredUrl\n          }\n        }\n      } catch {\n        // ignore\n      }\n      // Prevent infinite recursion\n      if (\n        location.origin === resultUrl.origin &&\n        (resultUrl.pathname.startsWith(`${basePath}/`) || resultUrl.pathname === basePath)\n      ) {\n        return resolvedUrl\n      }\n      return resultUrl\n    }\n    const resolvePreviewUrl =\n      typeof previewUrl === 'object' ? definePreviewUrl<SanityClient>(previewUrl) : previewUrl\n    const resolvedUrl = await resolvePreviewUrl({\n      client,\n      previewUrlSecret: previewUrlSecret!,\n      studioPreviewPerspective: encodeStudioPerspective(studioPreviewPerspective),\n      previewSearchParam,\n      studioBasePath: basePath,\n    })\n    return new URL(resolvedUrl, location.origin)\n  }, [...deps, previewUrlSecret]) satisfies URL\n}\n\n// https://github.com/pmndrs/suspend-react?tab=readme-ov-file#making-cache-keys-unique\nconst resolveUUID = Symbol('sanity/presentation/resolveUUID')\n\nfunction useSuspendCacheKeys(\n  toolName: string,\n  basePath: string,\n  workspaceName: string,\n  previewSearchParam: string | null,\n) {\n  // Allow busting the cache when the Presentation Tool is reloaded, without causing it to suspend on every render that changes the `preview` parameter\n  const [cachedPreviewSearchParam, setCachedPreviewSearchParam] = useState(\n    () => previewSearchParam || '',\n  )\n  const timeoutRef = useRef(0)\n  useEffect(() => {\n    if (cachedPreviewSearchParam && previewSearchParam) {\n      // Handle resets, like when the Presentation Tool is clicked in the navbar\n      window.clearTimeout(timeoutRef.current)\n      return () => {\n        timeoutRef.current = window.setTimeout(() => {\n          setCachedPreviewSearchParam('')\n        }, 100)\n      }\n    }\n    return undefined\n  }, [cachedPreviewSearchParam, previewSearchParam])\n\n  const currentUser = useCurrentUser()\n  return useMemo(\n    () => [\n      // Cache based on a few specific conditions\n      'sanity/presentation',\n      basePath,\n      workspaceName,\n      toolName,\n      currentUser?.id,\n      resolveUUID,\n      cachedPreviewSearchParam,\n    ],\n    [basePath, currentUser?.id, toolName, workspaceName, cachedPreviewSearchParam],\n  )\n}\n\nfunction usePreviewUrlSecret(enabled: boolean, deps: (string | symbol | undefined)[]) {\n  const client = useClient({apiVersion: API_VERSION})\n  const currentUser = useCurrentUser()\n  const [secretLastExpiredAt, setSecretLastExpiredAt] = useState<string>('')\n\n  const previewUrlSecret = enabled\n    ? suspend(async () => {\n        return await createPreviewSecret(\n          client,\n          '@sanity/presentation',\n          typeof window === 'undefined' ? '' : location.href,\n          currentUser?.id,\n        )\n      }, [...deps, secretLastExpiredAt])\n    : null\n\n  useEffect(() => {\n    if (!previewUrlSecret) return undefined\n    const timeout = setTimeout(() => {\n      startTransition(() => setSecretLastExpiredAt(previewUrlSecret.expiresAt.toString()))\n    }, previewUrlSecret.expiresAt.getTime() - Date.now())\n    return () => clearTimeout(timeout)\n  }, [previewUrlSecret])\n\n  return previewUrlSecret?.secret || null\n}\n","import {type StatusEvent} from '@sanity/comlink'\nimport {useCallback, useMemo, useState} from 'react'\n\nimport {type ConnectionStatus} from './types'\n\n/**\n * A hook that manages and returns the connection status of multiple channels\n *\n * returns an array containing the\n * current status and a function to update the status based on incoming events\n *\n * The status can be one of the following:\n * - 'connected': If any channel is connected\n * - 'connecting': If the first connection is being established\n * - 'reconnecting': If a reconnection is in progress\n * - 'idle': If no connections have been made yet\n *\n * The function to update the status takes a `StatusEvent` object which includes\n * the channel and the status\n */\nexport function useStatus(): [ConnectionStatus, (event: StatusEvent) => void] {\n  // State to keep track of the status of each channel\n  const [statusMap, setStatusMap] = useState(\n    new Map<string, {status: ConnectionStatus; hasConnected: boolean}>(),\n  )\n\n  // Memoized computation of the overall status based on the status of individual channels\n  const memoStatus = useMemo(() => {\n    const values = Array.from(statusMap.values())\n    // If any channel is connected, return the `connected` status\n    if (values.find(({status}) => status === 'connected')) {\n      return 'connected'\n    }\n    // If the initial connection is being established, return `connecting` status\n    const handshaking = values.filter(({status}) => status === 'connecting')\n    if (handshaking.length) {\n      return handshaking.some(({hasConnected}) => !hasConnected) ? 'connecting' : 'reconnecting'\n    }\n    // If nothing has happened yet, return `idle` status\n    return 'idle'\n  }, [statusMap])\n\n  // Callback to update the status map based on the received event\n  const setStatusFromEvent = useCallback((event: StatusEvent) => {\n    setStatusMap((prev) => {\n      const next = new Map(prev)\n      if (event.status === 'disconnected') {\n        // Remove the channel from the map if a disconnect event is received\n        next.delete(event.connection)\n      } else {\n        // Update the status and connection flag for the channel\n        const hasConnected =\n          next.get(event.connection)?.hasConnected || event.status === 'connected'\n        const status = event.status === 'handshaking' ? 'connecting' : event.status\n        next.set(event.connection, {status, hasConnected})\n      }\n      return next\n    })\n  }, [])\n\n  // Return the overall status and the function to update the status\n  return [memoStatus, setStatusFromEvent]\n}\n","/* eslint-disable max-statements,@typescript-eslint/no-shadow */\nimport {studioPath} from '@sanity/client/csm'\nimport {\n  type Controller,\n  createConnectionMachine,\n  createController,\n  type Message,\n} from '@sanity/comlink'\nimport {\n  createCompatibilityActors,\n  type PreviewKitNodeMsg,\n  type VisualEditingControllerMsg,\n  type VisualEditingNodeMsg,\n} from '@sanity/presentation-comlink'\nimport {\n  urlSearchParamVercelProtectionBypass,\n  urlSearchParamVercelSetBypassCookie,\n} from '@sanity/preview-url-secret/constants'\nimport {BoundaryElementProvider, Flex} from '@sanity/ui'\nimport {lazy, Suspense, useCallback, useEffect, useMemo, useReducer, useRef, useState} from 'react'\nimport {\n  type CommentIntentGetter,\n  COMMENTS_INSPECTOR_NAME,\n  type Path,\n  type SanityDocument,\n  type Tool,\n  useDataset,\n  usePerspective,\n  useProjectId,\n  useUnique,\n  useWorkspace,\n} from 'sanity'\nimport {type RouterContextValue, useRouter} from 'sanity/router'\nimport {styled} from 'styled-components'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {DEFAULT_TOOL_NAME, EDIT_INTENT_MODE} from './constants'\nimport PostMessageFeatures from './features/PostMessageFeatures'\nimport {debounce} from './lib/debounce'\nimport {SharedStateProvider} from './overlays/SharedStateProvider'\nimport {Panel} from './panels/Panel'\nimport {Panels} from './panels/Panels'\nimport {PresentationContent} from './PresentationContent'\nimport {PresentationNavigateProvider} from './PresentationNavigateProvider'\nimport {usePresentationNavigator} from './PresentationNavigator'\nimport {PresentationParamsProvider} from './PresentationParamsProvider'\nimport {PresentationProvider} from './PresentationProvider'\nimport {Preview} from './preview/Preview'\nimport {\n  ACTION_IFRAME_LOADED,\n  ACTION_IFRAME_REFRESH,\n  ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE,\n  presentationReducer,\n  presentationReducerInit,\n} from './reducers/presentationReducer'\nimport {\n  type FrameState,\n  type PresentationNavigate,\n  type PresentationPerspective,\n  type PresentationPluginOptions,\n  type PresentationStateParams,\n  type PresentationViewport,\n  type StructureDocumentPaneParams,\n  type VisualEditingConnection,\n} from './types'\nimport {useDocumentsOnPage} from './useDocumentsOnPage'\nimport {useMainDocument} from './useMainDocument'\nimport {useParams} from './useParams'\nimport {usePopups} from './usePopups'\nimport {usePreviewUrl} from './usePreviewUrl'\nimport {useStatus} from './useStatus'\n\nconst LiveQueries = lazy(() => import('./loader/LiveQueries'))\nconst PostMessageDocuments = lazy(() => import('./overlays/PostMessageDocuments'))\nconst PostMessageRefreshMutations = lazy(() => import('./editor/PostMessageRefreshMutations'))\nconst PostMessagePerspective = lazy(() => import('./PostMessagePerspective'))\nconst PostMessagePreviewSnapshots = lazy(() => import('./editor/PostMessagePreviewSnapshots'))\nconst PostMessageSchema = lazy(() => import('./overlays/schema/PostMessageSchema'))\nconst PostMessageTelemetry = lazy(() => import('./PostMessageTelemetry'))\n\nconst Container = styled(Flex)`\n  overflow-x: auto;\n`\n\nexport default function PresentationTool(props: {\n  tool: Tool<PresentationPluginOptions>\n  canCreateUrlPreviewSecrets: boolean\n  canToggleSharePreviewAccess: boolean\n  canUseSharedPreviewAccess: boolean\n  vercelProtectionBypass: string | null\n}): React.JSX.Element {\n  const {\n    canCreateUrlPreviewSecrets,\n    canToggleSharePreviewAccess,\n    canUseSharedPreviewAccess,\n    tool,\n    vercelProtectionBypass,\n  } = props\n  const components = tool.options?.components\n  const _previewUrl = tool.options?.previewUrl\n  const name = tool.name || DEFAULT_TOOL_NAME\n  const {unstable_navigator, unstable_header} = components || {}\n\n  const {navigate: routerNavigate, state: routerState} = useRouter() as RouterContextValue & {\n    state: PresentationStateParams\n  }\n  const routerSearchParams = useUnique(Object.fromEntries(routerState._searchParams || []))\n  const {perspectiveStack, selectedPerspectiveName = 'drafts', selectedReleaseId} = usePerspective()\n  const perspective = (\n    selectedReleaseId ? perspectiveStack : selectedPerspectiveName\n  ) as PresentationPerspective\n\n  const initialPreviewUrl = usePreviewUrl(\n    _previewUrl || '/',\n    name,\n    perspective,\n    routerSearchParams.preview || null,\n    canCreateUrlPreviewSecrets,\n  )\n  const canSharePreviewAccess = useMemo<boolean>(() => {\n    if (\n      _previewUrl &&\n      typeof _previewUrl === 'object' &&\n      'draftMode' in _previewUrl &&\n      _previewUrl.draftMode\n    ) {\n      // eslint-disable-next-line no-console\n      console.warn('previewUrl.draftMode is deprecated, use previewUrl.previewMode instead')\n      return _previewUrl.draftMode.shareAccess !== false\n    }\n    if (\n      _previewUrl &&\n      typeof _previewUrl === 'object' &&\n      'previewMode' in _previewUrl &&\n      _previewUrl.previewMode\n    ) {\n      return _previewUrl.previewMode.shareAccess !== false\n    }\n    return false\n  }, [_previewUrl])\n\n  const [devMode] = useState(() => {\n    const option = tool.options?.devMode\n\n    if (typeof option === 'function') return option()\n    if (typeof option === 'boolean') return option\n\n    return typeof window !== 'undefined' && window.location.hostname === 'localhost'\n  })\n\n  const targetOrigin = useMemo(() => {\n    return initialPreviewUrl.origin\n  }, [initialPreviewUrl.origin])\n\n  const iframeRef = useRef<HTMLIFrameElement>(null)\n\n  const [controller, setController] = useState<Controller>()\n  const [visualEditingComlink, setVisualEditingComlink] = useState<VisualEditingConnection | null>(\n    null,\n  )\n\n  const frameStateRef = useRef<FrameState>({\n    title: undefined,\n    url: undefined,\n  })\n\n  const {\n    navigate: _navigate,\n    navigationHistory,\n    params,\n    searchParams,\n    structureParams,\n  } = useParams({\n    initialPreviewUrl,\n    routerNavigate,\n    routerState,\n    routerSearchParams,\n    frameStateRef,\n  })\n\n  // Most navigation events should be debounced, so use this unless explicitly needed\n  const navigate = useMemo(() => debounce<PresentationNavigate>(_navigate, 50), [_navigate])\n\n  const [state, dispatch] = useReducer(presentationReducer, {}, presentationReducerInit)\n\n  const viewport = useMemo(() => (params.viewport ? 'mobile' : 'desktop'), [params.viewport])\n\n  const [documentsOnPage, setDocumentsOnPage] = useDocumentsOnPage(perspective, frameStateRef)\n\n  const projectId = useProjectId()\n  const dataset = useDataset()\n\n  const mainDocumentState = useMainDocument({\n    // Prevent flash of content by using immediate navigation\n    navigate: _navigate,\n    navigationHistory,\n    path: params.preview,\n    previewUrl: tool.options?.previewUrl,\n    resolvers: tool.options?.resolve?.mainDocuments,\n  })\n\n  const [overlaysConnection, setOverlaysConnection] = useStatus()\n  const [loadersConnection, setLoadersConnection] = useStatus()\n  const [previewKitConnection, setPreviewKitConnection] = useStatus()\n\n  const {open: handleOpenPopup} = usePopups(controller)\n\n  const isLoading = state.iframe.status === 'loading'\n\n  useEffect(() => {\n    const target = iframeRef.current?.contentWindow\n\n    if (!target || isLoading) return undefined\n\n    const controller = createController({targetOrigin})\n    controller.addTarget(target)\n    setController(controller)\n\n    return () => {\n      controller.destroy()\n      setController(undefined)\n    }\n  }, [targetOrigin, isLoading])\n\n  const handleNavigate = useEffectEvent<typeof navigate>(\n    (nextState, nextSearchState, forceReplace) =>\n      navigate(nextState, nextSearchState, forceReplace),\n  )\n  useEffect(() => {\n    if (!controller) return undefined\n\n    const comlink = controller.createChannel<VisualEditingControllerMsg, VisualEditingNodeMsg>(\n      {\n        name: 'presentation',\n        heartbeat: true,\n        connectTo: 'visual-editing',\n      },\n      createConnectionMachine<VisualEditingControllerMsg, VisualEditingNodeMsg>().provide({\n        actors: createCompatibilityActors<VisualEditingControllerMsg>(),\n      }),\n    )\n\n    comlink.on('visual-editing/focus', (data) => {\n      if (!('id' in data)) return\n      handleNavigate({\n        type: data.type,\n        id: data.id,\n        path: data.path,\n      })\n    })\n\n    comlink.on('visual-editing/navigate', (data) => {\n      const {title, url} = data\n      if (frameStateRef.current.url !== url) {\n        try {\n          // Handle bypass params being forwarded to the final URL\n          const [urlWithoutSearch, search] = url.split('?')\n          const searchParams = new URLSearchParams(search)\n          searchParams.delete(urlSearchParamVercelProtectionBypass)\n          searchParams.delete(urlSearchParamVercelSetBypassCookie)\n          handleNavigate(\n            {},\n            {preview: `${urlWithoutSearch}${searchParams.size > 0 ? '?' : ''}${searchParams}`},\n          )\n        } catch {\n          handleNavigate({}, {preview: url})\n        }\n      }\n      frameStateRef.current = {title, url}\n    })\n\n    comlink.on('visual-editing/meta', (data) => {\n      frameStateRef.current.title = data.title\n    })\n\n    comlink.on('visual-editing/toggle', (data) => {\n      dispatch({\n        type: ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE,\n        enabled: data.enabled,\n      })\n    })\n\n    comlink.on('visual-editing/documents', (data) => {\n      setDocumentsOnPage(\n        'visual-editing',\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        data.perspective as unknown as any,\n        data.documents,\n      )\n    })\n\n    // @todo This won't work for multiple window contexts?\n    comlink.on('visual-editing/refreshing', (data) => {\n      if (data.source === 'manual') {\n        clearTimeout(refreshRef.current)\n      } else if (data.source === 'mutation') {\n        dispatch({type: ACTION_IFRAME_REFRESH})\n      }\n    })\n\n    comlink.on('visual-editing/refreshed', () => {\n      dispatch({type: ACTION_IFRAME_LOADED})\n    })\n\n    comlink.onStatus(setOverlaysConnection)\n\n    const stop = comlink.start()\n    setVisualEditingComlink(comlink)\n    return () => {\n      stop()\n      setVisualEditingComlink(null)\n    }\n  }, [controller, setDocumentsOnPage, setOverlaysConnection, targetOrigin])\n\n  useEffect(() => {\n    if (!controller) return undefined\n    const comlink = controller.createChannel<Message, PreviewKitNodeMsg>(\n      {\n        name: 'presentation',\n        connectTo: 'preview-kit',\n        heartbeat: true,\n      },\n      createConnectionMachine<Message, PreviewKitNodeMsg>().provide({\n        actors: createCompatibilityActors(),\n      }),\n    )\n\n    comlink.onStatus(setPreviewKitConnection)\n\n    comlink.on('preview-kit/documents', (data) => {\n      if (data.projectId === projectId && data.dataset === dataset) {\n        setDocumentsOnPage(\n          'preview-kit',\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          data.perspective as unknown as any,\n          data.documents,\n        )\n      }\n    })\n\n    return comlink.start()\n  }, [controller, dataset, projectId, setDocumentsOnPage, setPreviewKitConnection, targetOrigin])\n\n  const handleFocusPath = useCallback(\n    (nextPath: Path) => {\n      // Don’t need to explicitly set the id here because it was either already set via postMessage or is the same if navigating in the document pane\n      navigate({path: studioPath.toString(nextPath)}, {}, true)\n    },\n    [navigate],\n  )\n\n  const handlePreviewPath = useCallback(\n    (nextPath: string) => {\n      const url = new URL(nextPath, initialPreviewUrl.origin)\n      const preview = url.pathname + url.search\n      if (url.origin === initialPreviewUrl.origin && preview !== params.preview) {\n        navigate({}, {preview})\n      }\n    },\n    [initialPreviewUrl, params, navigate],\n  )\n\n  const handleStructureParams = useCallback(\n    (structureParams: StructureDocumentPaneParams) => {\n      navigate({}, structureParams)\n    },\n    [navigate],\n  )\n\n  // Dispatch a focus or blur message when the id or path change\n  useEffect(() => {\n    if (params.id && params.path) {\n      visualEditingComlink?.post('presentation/focus', {id: params.id, path: params.path})\n    } else {\n      visualEditingComlink?.post('presentation/blur')\n    }\n  }, [params.id, params.path, visualEditingComlink])\n\n  // Dispatch a navigation message when the preview param changes\n  useEffect(() => {\n    if (\n      frameStateRef.current.url &&\n      params.preview &&\n      frameStateRef.current.url !== params.preview\n    ) {\n      frameStateRef.current.url = params.preview\n      if (overlaysConnection !== 'connected' && iframeRef.current) {\n        iframeRef.current.src = `${targetOrigin}${params.preview}`\n      } else {\n        visualEditingComlink?.post('presentation/navigate', {\n          url: params.preview,\n          type: 'replace',\n        })\n      }\n    }\n  }, [overlaysConnection, targetOrigin, params.preview, visualEditingComlink])\n\n  const toggleOverlay = useCallback(\n    () => visualEditingComlink?.post('presentation/toggle-overlay'),\n    [visualEditingComlink],\n  )\n\n  const [displayedDocument, setDisplayedDocument] = useState<\n    Partial<SanityDocument> | null | undefined\n  >(null)\n\n  useEffect(() => {\n    const handleKeyUp = (e: KeyboardEvent) => {\n      if (isAltKey(e)) {\n        toggleOverlay()\n      }\n    }\n    const handleKeydown = (e: KeyboardEvent) => {\n      if (isAltKey(e)) {\n        toggleOverlay()\n      }\n\n      if (isHotkey(['mod', '\\\\'], e)) {\n        toggleOverlay()\n      }\n    }\n    window.addEventListener('keydown', handleKeydown)\n    window.addEventListener('keyup', handleKeyUp)\n    return () => {\n      window.removeEventListener('keydown', handleKeydown)\n      window.removeEventListener('keyup', handleKeyUp)\n    }\n  }, [toggleOverlay])\n\n  const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)\n\n  const [{navigatorEnabled, toggleNavigator}, PresentationNavigator] = usePresentationNavigator({\n    unstable_navigator,\n  })\n\n  const refreshRef = useRef<number>(undefined)\n  const handleRefresh = useCallback(\n    (fallback: () => void) => {\n      dispatch({type: ACTION_IFRAME_REFRESH})\n      if (visualEditingComlink) {\n        // We only wait 300ms for the iframe to ack the refresh request before running the fallback logic\n        refreshRef.current = window.setTimeout(fallback, 300)\n        visualEditingComlink.post('presentation/refresh', {\n          source: 'manual',\n          livePreviewEnabled:\n            previewKitConnection === 'connected' || loadersConnection === 'connected',\n        })\n        return\n      }\n      fallback()\n    },\n    [loadersConnection, previewKitConnection, visualEditingComlink],\n  )\n\n  const workspace = useWorkspace()\n\n  const getCommentIntent = useCallback<CommentIntentGetter>(\n    ({id, type, path}) => {\n      if (frameStateRef.current.url) {\n        return {\n          title: frameStateRef.current.title || frameStateRef.current.url,\n          name: 'edit',\n          params: {\n            id,\n            path,\n            type,\n            inspect: COMMENTS_INSPECTOR_NAME,\n            workspace: workspace.name,\n            mode: EDIT_INTENT_MODE,\n            preview: params.preview,\n          },\n        }\n      }\n      return undefined\n    },\n    [params.preview, workspace.name],\n  )\n\n  const setViewport = useCallback(\n    (next: PresentationViewport) => {\n      // Omit the viewport URL search param if the next viewport state is the\n      // default: 'desktop'\n      const viewport = next === 'desktop' ? undefined : 'mobile'\n      navigate({}, {viewport}, true)\n    },\n    [navigate],\n  )\n\n  return (\n    <>\n      <PresentationProvider\n        devMode={devMode}\n        name={name}\n        navigate={navigate}\n        params={params}\n        searchParams={searchParams}\n        structureParams={structureParams}\n      >\n        <PresentationNavigateProvider navigate={navigate}>\n          <PresentationParamsProvider params={params}>\n            <SharedStateProvider comlink={visualEditingComlink}>\n              <Container data-testid=\"presentation-root\" height=\"fill\">\n                <Panels>\n                  <PresentationNavigator />\n                  <Panel\n                    id=\"preview\"\n                    minWidth={325}\n                    defaultSize={navigatorEnabled ? 50 : 75}\n                    order={3}\n                  >\n                    <Flex direction=\"column\" flex={1} height=\"fill\" ref={setBoundaryElement}>\n                      <BoundaryElementProvider element={boundaryElement}>\n                        <Preview\n                          // Make sure the iframe is unmounted if the targetOrigin has changed\n                          key={targetOrigin}\n                          canSharePreviewAccess={canSharePreviewAccess}\n                          canToggleSharePreviewAccess={canToggleSharePreviewAccess}\n                          canUseSharedPreviewAccess={canUseSharedPreviewAccess}\n                          dispatch={dispatch}\n                          header={unstable_header}\n                          iframe={state.iframe}\n                          initialUrl={initialPreviewUrl}\n                          loadersConnection={loadersConnection}\n                          navigatorEnabled={navigatorEnabled}\n                          onPathChange={handlePreviewPath}\n                          onRefresh={handleRefresh}\n                          openPopup={handleOpenPopup}\n                          overlaysConnection={overlaysConnection}\n                          previewUrl={params.preview}\n                          perspective={perspective}\n                          ref={iframeRef}\n                          setViewport={setViewport}\n                          targetOrigin={targetOrigin}\n                          toggleNavigator={toggleNavigator}\n                          toggleOverlay={toggleOverlay}\n                          viewport={viewport}\n                          visualEditing={state.visualEditing}\n                          vercelProtectionBypass={vercelProtectionBypass}\n                        />\n                      </BoundaryElementProvider>\n                    </Flex>\n                  </Panel>\n                  <PresentationContent\n                    documentId={params.id}\n                    documentsOnPage={documentsOnPage}\n                    documentType={params.type}\n                    getCommentIntent={getCommentIntent}\n                    mainDocumentState={mainDocumentState}\n                    onFocusPath={handleFocusPath}\n                    onStructureParams={handleStructureParams}\n                    searchParams={searchParams}\n                    setDisplayedDocument={setDisplayedDocument}\n                    structureParams={structureParams}\n                  />\n                </Panels>\n              </Container>\n            </SharedStateProvider>\n          </PresentationParamsProvider>\n        </PresentationNavigateProvider>\n      </PresentationProvider>\n      <Suspense>\n        {controller && (\n          <LiveQueries\n            controller={controller}\n            perspective={perspective}\n            liveDocument={displayedDocument}\n            onDocumentsOnPage={setDocumentsOnPage}\n            onLoadersConnection={setLoadersConnection}\n          />\n        )}\n        {visualEditingComlink && params.id && params.type && (\n          <PostMessageRefreshMutations\n            comlink={visualEditingComlink}\n            id={params.id}\n            type={params.type}\n            loadersConnection={loadersConnection}\n            previewKitConnection={previewKitConnection}\n          />\n        )}\n        {visualEditingComlink && (\n          <PostMessageSchema comlink={visualEditingComlink} perspective={perspective} />\n        )}\n        {visualEditingComlink && documentsOnPage.length > 0 && (\n          <PostMessagePreviewSnapshots\n            comlink={visualEditingComlink}\n            perspective={perspective}\n            refs={documentsOnPage}\n          />\n        )}\n        {visualEditingComlink && (\n          <PostMessageDocuments comlink={visualEditingComlink} perspective={perspective} />\n        )}\n        {visualEditingComlink && <PostMessageFeatures comlink={visualEditingComlink} />}\n        {visualEditingComlink && (\n          <PostMessagePerspective comlink={visualEditingComlink} perspective={perspective} />\n        )}\n        {visualEditingComlink && <PostMessageTelemetry comlink={visualEditingComlink} />}\n      </Suspense>\n    </>\n  )\n}\n\nfunction isAltKey(event: KeyboardEvent): boolean {\n  return event.key === 'Alt'\n}\n\nconst IS_MAC =\n  typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform)\nconst MODIFIERS: Record<string, 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'> = {\n  alt: 'altKey',\n  ctrl: 'ctrlKey',\n  mod: IS_MAC ? 'metaKey' : 'ctrlKey',\n  shift: 'shiftKey',\n}\nfunction isHotkey(keys: string[], event: KeyboardEvent): boolean {\n  return keys.every((key) => {\n    if (MODIFIERS[key]) {\n      return event[MODIFIERS[key]]\n    }\n    return event.key === key.toUpperCase()\n  })\n}\n","import {subcribeToVercelProtectionBypass} from '@sanity/preview-url-secret/toggle-vercel-protection-bypass'\nimport {useEffect, useReducer, useState} from 'react'\nimport {useClient} from 'sanity'\n\nimport {API_VERSION} from './constants'\n\ntype VercelProtectionBypassReadyState = 'loading' | 'ready'\n\nexport function useVercelBypassSecret(): [\n  vercelProtectionBypassSecret: string | null,\n  vercelProtectionBypassReadyState: VercelProtectionBypassReadyState,\n] {\n  const client = useClient({apiVersion: API_VERSION})\n  const [vercelProtectionBypassReadyState, ready] = useReducer(\n    () => 'ready' as 'ready' | 'loading',\n    'loading',\n  )\n  const [vercelProtectionBypassSecret, setVercelProtectionBypassSecret] = useState<string | null>(\n    null,\n  )\n\n  useEffect(() => {\n    const unsubscribe = subcribeToVercelProtectionBypass(client, (secret) => {\n      setVercelProtectionBypassSecret(secret)\n      ready()\n    })\n    return () => unsubscribe()\n  }, [client])\n\n  return [vercelProtectionBypassSecret, vercelProtectionBypassReadyState]\n}\n","import {\n  schemaIdSingleton,\n  schemaType,\n  schemaTypeSingleton,\n} from '@sanity/preview-url-secret/constants'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useEffect, useState} from 'react'\nimport {type PermissionCheckResult, type Tool, useGrantsStore, useTranslation} from 'sanity'\n\nimport {presentationLocaleNamespace} from './i18n'\nimport {PresentationSpinner} from './PresentationSpinner'\nimport PresentationTool from './PresentationTool'\nimport {type PresentationPluginOptions} from './types'\nimport {useVercelBypassSecret} from './useVercelBypassSecret'\n\nexport default function PresentationToolGrantsCheck(props: {\n  tool: Tool<PresentationPluginOptions>\n}): React.JSX.Element {\n  const {t} = useTranslation(presentationLocaleNamespace)\n  const {previewUrl} = props.tool.options ?? {}\n  const {push: pushToast} = useToast()\n  const willGeneratePreviewUrlSecret =\n    typeof previewUrl === 'object' || typeof previewUrl === 'function'\n  const grantsStore = useGrantsStore()\n  const [previewAccessSharingCreatePermission, setCreateAccessSharingPermission] =\n    useState<PermissionCheckResult | null>(null)\n  const [previewAccessSharingUpdatePermission, setUpdateAccessSharingPermission] =\n    useState<PermissionCheckResult | null>(null)\n  const [previewAccessSharingReadPermission, setReadAccessSharingPermission] =\n    useState<PermissionCheckResult | null>(null)\n  const [previewUrlSecretPermission, setPreviewUrlSecretPermission] =\n    useState<PermissionCheckResult | null>(null)\n\n  useEffect(() => {\n    if (!willGeneratePreviewUrlSecret) return undefined\n\n    const previewCreateAccessSharingPermissionSubscription = grantsStore\n      .checkDocumentPermission('create', {_id: schemaIdSingleton, _type: schemaTypeSingleton})\n      .subscribe(setCreateAccessSharingPermission)\n    const previewUpdateAccessSharingPermissionSubscription = grantsStore\n      .checkDocumentPermission('update', {_id: schemaIdSingleton, _type: schemaTypeSingleton})\n      .subscribe(setUpdateAccessSharingPermission)\n    const previewReadAccessSharingPermissionSubscription = grantsStore\n      .checkDocumentPermission('read', {_id: schemaIdSingleton, _type: schemaTypeSingleton})\n      .subscribe(setReadAccessSharingPermission)\n    const previewUrlSecretPermissionSubscription = grantsStore\n      .checkDocumentPermission('create', {_id: `drafts.${uuid()}`, _type: schemaType})\n      .subscribe(setPreviewUrlSecretPermission)\n\n    return () => {\n      previewCreateAccessSharingPermissionSubscription.unsubscribe()\n      previewUpdateAccessSharingPermissionSubscription.unsubscribe()\n      previewReadAccessSharingPermissionSubscription.unsubscribe()\n      previewUrlSecretPermissionSubscription.unsubscribe()\n    }\n  }, [grantsStore, willGeneratePreviewUrlSecret])\n\n  const canCreateUrlPreviewSecrets = previewUrlSecretPermission?.granted\n\n  useEffect(() => {\n    if (!willGeneratePreviewUrlSecret || canCreateUrlPreviewSecrets !== false) return undefined\n    const raf = requestAnimationFrame(() =>\n      pushToast({\n        closable: true,\n        status: 'error',\n        duration: 30_000,\n        title: t('preview-url-secret.missing-grants'),\n      }),\n    )\n    return () => cancelAnimationFrame(raf)\n  }, [canCreateUrlPreviewSecrets, pushToast, t, willGeneratePreviewUrlSecret])\n\n  const [vercelProtectionBypass, vercelProtectionBypassReadyState] = useVercelBypassSecret()\n\n  if (\n    vercelProtectionBypassReadyState === 'loading' ||\n    (willGeneratePreviewUrlSecret &&\n      (!previewAccessSharingCreatePermission ||\n        typeof previewAccessSharingCreatePermission.granted === 'undefined' ||\n        !previewAccessSharingUpdatePermission ||\n        typeof previewAccessSharingUpdatePermission.granted === 'undefined' ||\n        !previewUrlSecretPermission ||\n        !previewAccessSharingReadPermission ||\n        typeof previewAccessSharingReadPermission.granted === 'undefined' ||\n        typeof previewUrlSecretPermission.granted === 'undefined'))\n  ) {\n    return <PresentationSpinner />\n  }\n\n  return (\n    <PresentationTool\n      {...props}\n      vercelProtectionBypass={vercelProtectionBypass}\n      canCreateUrlPreviewSecrets={canCreateUrlPreviewSecrets === true}\n      canToggleSharePreviewAccess={\n        previewAccessSharingCreatePermission?.granted === true &&\n        previewAccessSharingUpdatePermission?.granted === true\n      }\n      canUseSharedPreviewAccess={previewAccessSharingReadPermission?.granted === true}\n    />\n  )\n}\n"],"names":["PostMessageFeatures","props","$","_c","comlink","t0","t1","on","_temp","useEffect","memo","features","optimistic","debounce","fn","timeout","timer","args","clearTimeout","setTimeout","apply","SharedStateProvider","children","Symbol","for","sharedState","useRef","t2","state","current","t3","key","value","post","setValue","t4","key_0","removeValue","t5","t6","context","t7","Root","styled","div","Panel","defaultSize","id","minWidth","maxWidth","order","undefined","useContext","PresentationPanelsContext","Error","getPanelStyle","registerElement","unregisterElement","style","type","useLayoutEffect","itemKey","getStoredItem","JSON","parse","localStorage","getItem","setStoredItem","data","setItem","stringify","getKeyForPanels","panels","map","panel","join","usePanelsStorage","get","_temp2","set","_temp3","setDebounced","panels_0","widths","stored_0","stored","Array","isArray","some","val","getNextWidth","nextWidth","containerWidth","maxWidthPx","minWidthPx","Math","min","max","getNextWidths","delta","panelBefore","panelAfter","panelsState","initialDragState","prevWidths","initialWidths","nextWidths","pivotPanel","index","findIndex","width","abs","deltaApplied","deltaRemaining","toPrecision","localeCompare","numeric","length","getPanelWidth","getOffset","event","handleElement","initialOffset","initialHandleElementRect","pointerOffset","clientX","elementOffset","getBoundingClientRect","left","isPanel","element","isResizer","getSortedElements","elements","from","values","sort","a","b","validateWidths","widthsToValidate","total","reduce","remainingWidth","toFixed","getDefaultWidths","panelsWithoutWidth","remainingWidthTotal","widthsWithNulls","defaultWidth","PanelsWrapper","Panels","panelsEl","Map","setElements","useState","filter","setWidths","activeResizer","setActiveResizer","panelsRef","flexGrow","pointerEvents","id_0","prev","has","next","t8","id_1","prev_0","next_0","delete","t9","window","innerWidth","dragOffset","resizerIndex","resizerRect","startX","dragRef","t10","id_2","elementsArr","el","resizer","resizeElement","acc","el_0","i","acc_0","el_1","i_0","pageX","startDragging","t11","stopDragging","t12","id_3","event_0","preventDefault","stopPropagation","resizer_0","resizeElement_0","offset","rect","prevWidth","i_1","drag","t13","t14","storage","t15","t16","widths_0","storedWidths","validatedStoredWidths","defaultWidths","t17","t18","t19","t20","resizeObserver","ResizeObserver","prevWidths_0","nextWidths_0","prevWidth_0","i_2","observe","disconnect","t21","t22","t23","t24","ErrorCard","message","onContinueAnyway","onRetry","restProps","t","useTranslation","presentationLocaleNamespace","retryButton","continueAnywayButton","Container","encodeQueryString","params","parts","Object","entries","resolveQueryStringFromParams","nextParams","allowed","safeNextParams","includes","obj","BackLink","forwardRef","ref","searchParams","_searchParams","ReferenceChildLink","documentId","documentType","parentRefPath","template","PresentationPaneRouterProvider","onStructureParams","structureParams","refs","routerState","resolvePathFromState","useRouter","fromEntries","routerSearchParams","useUnique","path","qs","createPathWithParams","childLinkProps","childId","find","r","_id","getPublishedId","_type","backLinkProps","childLinkProps_0","nextParams_0","inspect","groupIndex","siblingIndex","payload","hasGroupSiblings","groupLength","routerPanesState","ChildLink","ParameterizedLink","closeCurrentAndAfter","handleEditReference","replaceCurrent","_temp4","closeCurrent","_temp5","duplicateCurrent","_temp6","setView","_temp7","setParams","setPayload","_temp8","navigateIntent","_temp9","intentName","intentParams","options_0","console","warn","options","viewId","pane_0","pane","RootLayout","PaneLayout","Flex","WrappedCode","Code","DocumentListPane","mainDocumentState","devMode","usePresentationTool","document","ids","schemaTypeName","title","errorParams","setErrorParams","handleRetry","error","StructureDocumentListPane","r_0","DocumentPane","onFocusPath","templateParams","decodeJsonParams","templateParameters","paneDocumentNode","height","StructureDocumentPane","DocumentPanel","StructureToolProvider","usePreviewState","schemaType","documentPreviewStore","useDocumentPreviewStore","preview","setPreview","perspectiveStack","usePerspective","subscription","getPreviewStateObservable","subscribe","unsubscribe","ContentEditor","schema","useSchema","props_0","MainDocumentLink","previewState","bb0","snapshot","getPreviewValueWithFallback","fallback","usePanelId","uuid","panelId","Resizer","ResizerInner","$disabled","PanelResizer","propId","disabled","isDragging","nativeEvent","onMouseDown","e","onDrag","blur","onDragStop","resetDocumentStyles","bodyStyle","body","documentStyle","documentElement","cursor","userSelect","removeProperty","addEventListener","removeEventListener","PresentationContentWrapper","setDisplayedDocument","getCommentIntent","PresentationContent","documentsOnPage","PresentationNavigateProvider","navigate","_navigate","useLocalState","defaultValue","usePresentationNavigator","unstable_navigator","navigatorProvided","component","_navigatorEnabled","setNavigatorEnabled","navigatorEnabled","toggleNavigator","Component","enabled","NavigatorComponent","navigatorDisabled","Navigator","PresentationParamsProvider","PresentationProvider","name","encodeStudioPerspective","studioPerspective","IFrameElement","motion","create","iframe","IFrameOverlay","Box","IFrame","animate","initial","onLoad","preventClick","src","variants","useId","replace","viewTransitionName","OpenPreviewButton","openPopup","previewLocationOrigin","previewLocationRoute","perspective","targetOrigin","url","URL","urlSearchParamPreviewPerspective","pathname","search","openPreviewLink","currentTarget","href","handleOpenPopup","LaunchIcon","PreviewLocationInput","fontSize","onChange","origin","padding","prefix","suffix","basePath","useActiveWorkspace","activeWorkspace","inputRef","sessionValue","setSessionValue","customValidity","setCustomValidity","handleChange","absoluteValue","startsWith","nextValue","slice","handleKeyDown","handleBlur","icon","ResetIcon","zIndex","QRCodeSVG","lazy","QrCodeLogoSize","QrCodeLogoPadding","QrSize","StyledSanityMonogram","SanityMonogram","MotionSpinner","Spinner","MotionText","Text","MotionMonogram","SharePreviewMenu","canToggleSharePreviewAccess","canUseSharedPreviewAccess","initialUrl","push","pushToast","useToast","client","useClient","apiVersion","API_VERSION","currentUser","useCurrentUser","loading","setLoading","enabling","setEnabling","disabling","setDisabling","secret","setSecret","busy","useMemo","setSecretSearchParams","setError","handleUnableToToggle","useCallback","closable","status","handleDisableSharing","disablePreviewAccessSharing","location","handleEnableSharing","previewUrlSecret","enablePreviewAccessSharing","handleCopyUrl","navigator","clipboard","writeText","toString","controller","AbortController","usedTags","fetchShareSecret","lastLiveEventId","signal","result","syncTags","fetch","fetchSharedAccessQuery","filterResponse","tag","aborted","live","events","abort","tags","finally","ShareIcon","justifyContent","alignItems","gridTemplateColumns","gridTemplateRows","position","aspectRatio","display","opacity","textWrap","textAlign","CopyIcon","constrainSize","placement","portal","displayName","PreviewHeaderDefault","canSharePreviewAccess","dispatch","iframeRef","onPathChange","onRefresh","overlaysConnection","previewUrl","setViewport","toggleOverlay","viewport","visualEditing","overlaysEnabled","toggleViewportSize","ACTION_IFRAME_RELOAD","assign","handleRefresh","previewURL","withoutSecretSearchParams","PanelLeftIcon","content","fallbackPlacements","whiteSpace","marginTop","marginBottom","lineHeight","borderRadius","margin","t25","t26","t27","t28","t29","t30","RefreshIcon","t31","t32","t33","t34","t35","t36","t37","t38","t39","MobileDeviceIcon","DesktopIcon","t40","t41","t42","t43","PreviewHeader","renderDefault","HeaderComponent","header","minHeight","MotionFlex","Preview","forwardedRef","loadersConnection","vercelProtectionBypass","stablePerspective","setStablePerspective","urlPerspective","urlSearchParamVercelProtectionBypass","urlSearchParamVercelSetBypassCookie","prefersReducedMotion","usePrefersReducedMotion","previewHeader","timedOut","setTimedOut","refreshing","somethingIsWrong","setSomethingIsWrong","iframeIsBusy","handleContinueAnyway","setContinueAnyway","continueAnyway","showOverlaysConnectionStatus","setShowOverlaysConnectionState","MAX_TIME_TO_OVERLAYS_CONNECTION","onIFrameLoad","ACTION_IFRAME_LOADED","instance","activeElement","dispatchEvent","MouseEvent","bubbles","cancelable","preventIframeInteraction","canUseViewTransition","useSyncExternalStore","CSS","supports","iframeAnimations","currentViewport","setCurrentViewport","iframeStyle","setIframeStyle","iframeVariants","update","startViewTransition","flushSync","duration","spinnerVariants","inset","backdropFilter","WebkitBackdropFilter","WebkitTransition","sizes","errorVariants","background","desktop","mobile","exit","boxShadow","scale","idle","reloading","active","defineWarnOnce","warned","warnOnceAboutCrossDatasetReference","useDocumentsOnPage","frameStateRef","validateApiPerspective","published","setPublished","previewDrafts","setPreviewDrafts","urlRef","perspective_0","documents","setCache","cache","isEqual","setDocumentsOnPage","keyedCache","uniqueDocuments","cache_0","forEach","doc","sourceDocument","_projectId","fnOrObj","arg","Function","getQueryFromResult","resolver","resolve","getParamsFromResult","getRouteContext","route","routes","absolute","match","decode","decodeURIComponent","useMainDocument","navigationHistory","resolvers","relativeUrl","setMainDocumentState","mainDocumentIdRef","at","handleResponse","useEffectEvent","base","url_0","query","then","doc_0","catch","lengthyStr$1","pipe","string","minLength","optionalLengthyStr","optional","object","baseUrl","dataset","projectId","tool","workspace","parseId","rawId","segments","split","shift","parsePath","rawPath","studioPath","urlStringToPath","parseRouterState","pruneObject","useParams","initialPreviewUrl","routerNavigate","rev","since","view","pathKey","instruction","comment","changesInspectorTab","routerStateRef","setNavigationHistory","nextState","nextSearchState","forceReplace","routerSearchState","searchState","usePopups","popups","setPopups","source","open","Set","add","unsubs","size","source_0","closed","addTarget","interval","setInterval","source_1","source_2","POPUP_CHECK_INTERVAL","clearInterval","unsub","usePreviewUrl","toolName","studioPreviewPerspective","previewSearchParam","canCreateUrlPreviewSecrets","workspaceName","deps","useSuspendCacheKeys","usePreviewUrlSecret","resolvedUrl","resultUrl","restoredUrl","resolvedUrl_0","definePreviewUrl","studioBasePath","suspend","resolveUUID","cachedPreviewSearchParam","setCachedPreviewSearchParam","timeoutRef","secretLastExpiredAt","setSecretLastExpiredAt","createPreviewSecret","startTransition","expiresAt","getTime","Date","now","useStatus","statusMap","setStatusMap","handshaking","memoStatus","connection","hasConnected_0","hasConnected","status_1","setStatusFromEvent","status_0","LiveQueries","PostMessageDocuments","PostMessageRefreshMutations","PostMessagePerspective","PostMessagePreviewSnapshots","PostMessageSchema","PostMessageTelemetry","PresentationTool","components","_previewUrl","DEFAULT_TOOL_NAME","unstable_header","selectedPerspectiveName","selectedReleaseId","draftMode","shareAccess","previewMode","option","hostname","setController","visualEditingComlink","setVisualEditingComlink","useReducer","presentationReducer","presentationReducerInit","useProjectId","useDataset","mainDocuments","setOverlaysConnection","setLoadersConnection","previewKitConnection","setPreviewKitConnection","isLoading","target","contentWindow","createController","destroy","handleNavigate","createChannel","heartbeat","connectTo","createConnectionMachine","provide","actors","createCompatibilityActors","urlWithoutSearch","URLSearchParams","ACTION_VISUAL_EDITING_OVERLAYS_TOGGLE","refreshRef","ACTION_IFRAME_REFRESH","onStatus","stop","start","handleFocusPath","nextPath","handlePreviewPath","handleStructureParams","displayedDocument","handleKeyUp","isAltKey","handleKeydown","isHotkey","boundaryElement","setBoundaryElement","PresentationNavigator","livePreviewEnabled","useWorkspace","COMMENTS_INSPECTOR_NAME","mode","EDIT_INTENT_MODE","IS_MAC","test","platform","MODIFIERS","alt","ctrl","mod","keys","every","toUpperCase","useVercelBypassSecret","vercelProtectionBypassReadyState","ready","vercelProtectionBypassSecret","setVercelProtectionBypassSecret","subcribeToVercelProtectionBypass","PresentationToolGrantsCheck","willGeneratePreviewUrlSecret","grantsStore","useGrantsStore","previewAccessSharingCreatePermission","setCreateAccessSharingPermission","previewAccessSharingUpdatePermission","setUpdateAccessSharingPermission","previewAccessSharingReadPermission","setReadAccessSharingPermission","previewUrlSecretPermission","setPreviewUrlSecretPermission","previewCreateAccessSharingPermissionSubscription","checkDocumentPermission","schemaIdSingleton","schemaTypeSingleton","previewUpdateAccessSharingPermissionSubscription","previewReadAccessSharingPermissionSubscription","previewUrlSecretPermissionSubscription","granted","raf","requestAnimationFrame","cancelAnimationFrame"],"mappings":"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","x_google_ignoreList":[32]}