{"version":3,"file":"index.cjs","sources":["../../src/ui/History.tsx","../../src/ui/Meta.ts","../../src/util/useDragEvents.ts","../../src/ui/schema/SchemaContext.tsx","../../src/ui/schema/useSchema.ts","../../src/ui/context-menu/contextMenuItems.tsx","../../src/ui/context-menu/ContextMenu.tsx","../../src/util/getLinkHref.ts","../../src/ui/preview/PreviewSnapshotsContext.tsx","../../src/ui/preview/usePreviewSnapshots.ts","../../src/ui/ElementOverlay.tsx","../../src/ui/OverlayDragGroupRect.tsx","../../src/ui/OverlayDragInsertMarker.tsx","../../src/ui/OverlayDragPreview.tsx","../../src/ui/OverlayMinimapPrompt.tsx","../../src/ui/elementsReducer.ts","../../src/ui/overlayStateReducer.ts","../../src/ui/preview/PreviewSnapshotsProvider.tsx","../../src/ui/schema/SchemaProvider.tsx","../../src/ui/shared-state/SharedStateProvider.tsx","../../src/ui/telemetry/TelemetryProvider.tsx","../../src/ui/useController.tsx","../../src/ui/usePerspectiveSync.tsx","../../src/ui/useReportDocuments.ts","../../src/ui/Overlays.tsx","../../src/ui/Refresh.tsx","../../src/ui/useComlink.tsx","../../src/optimistic/state/createSharedListener.ts","../../src/ui/useDatasetMutator.ts","../../src/ui/VisualEditing.tsx"],"sourcesContent":["import {useEffect, type FunctionComponent} from 'react'\nimport type {HistoryAdapter, VisualEditingNode} from '../types'\n\n/**\n * @internal\n */\nexport const History: FunctionComponent<{\n  comlink: VisualEditingNode\n  history?: HistoryAdapter\n}> = (props) => {\n  const {comlink, history} = props\n\n  useEffect(() => {\n    return comlink?.on('presentation/navigate', (data) => {\n      history?.update(data)\n    })\n  }, [comlink, history])\n\n  useEffect(() => {\n    if (history) {\n      return history.subscribe((update) => {\n        update.title = update.title || document.title\n        comlink?.post('visual-editing/navigate', update)\n      })\n    }\n    return\n  }, [comlink, history])\n\n  return null\n}\n","import {useEffect, type FunctionComponent} from 'react'\nimport type {VisualEditingNode} from '../types'\n\n/**\n * @internal\n */\nexport const Meta: FunctionComponent<{\n  comlink: VisualEditingNode\n}> = (props) => {\n  const {comlink} = props\n\n  useEffect(() => {\n    const sendMeta = () => {\n      comlink.post('visual-editing/meta', {title: document.title})\n    }\n\n    const observer = new MutationObserver(([mutation]) => {\n      if (mutation.target.nodeName === 'TITLE') {\n        sendMeta()\n      }\n    })\n\n    observer.observe(document.head, {\n      subtree: true,\n      characterData: true,\n      childList: true,\n    })\n\n    sendMeta()\n\n    return () => observer.disconnect()\n  }, [comlink])\n\n  return null\n}\n","import {at, insert, remove} from '@sanity/mutate'\nimport {get as getFromPath} from '@sanity/util/paths'\nimport {useCallback, useEffect} from 'react'\nimport {useDocuments} from '../react/useDocuments'\nimport type {DragEndEvent, DragInsertPosition} from '../types'\nimport {getArrayItemKeyAndParentPath} from './mutations'\n\n// Finds the node that the drag end event was relative to, and the relative\n// position the new element should be inserted in. If the reference node was\n// \"top\" or \"left\", we insert \"after\". If it was \"bottom\" or \"right\", we insert\n// \"before\".\nfunction getReferenceNodeAndInsertPosition(position: DragInsertPosition) {\n  if (position) {\n    const {top, right, bottom, left} = position\n    if (left || top) {\n      return {node: (left ?? top)!.sanity, position: 'after' as const}\n    } else if (right || bottom) {\n      return {node: (right ?? bottom)!.sanity, position: 'before' as const}\n    }\n  }\n  return undefined\n}\n\nexport function useDragEndEvents(): {\n  dispatchDragEndEvent: (event: DragEndEvent) => void\n} {\n  const {getDocument} = useDocuments()\n\n  useEffect(() => {\n    const handler = (e: CustomEvent<DragEndEvent>) => {\n      const {insertPosition, target, preventInsertDefault} = e.detail\n\n      if (preventInsertDefault) return\n\n      const reference = getReferenceNodeAndInsertPosition(insertPosition)\n      if (reference) {\n        const doc = getDocument(target.id)\n        // We must have access to the document actor in order to perform the\n        // necessary mutations. If this is undefined, something went wrong when\n        // resolving the currently in use documents\n        const {node, position} = reference\n        // Get the key of the element that was dragged\n        const {key: targetKey, hasExplicitKey} = getArrayItemKeyAndParentPath(target)\n        // Get the key of the reference element, and path to the parent array\n        const {path: arrayPath, key: referenceItemKey} = getArrayItemKeyAndParentPath(node)\n        // Don't patch if the keys match, as this means the item was only\n        // dragged to its existing position, i.e. not moved\n        if (arrayPath && referenceItemKey && referenceItemKey !== targetKey) {\n          doc.patch(async ({getSnapshot}) => {\n            const snapshot = await getSnapshot()\n            // Get the current value of the element we dragged, as we will need\n            // to clone this into the new position\n            const elementValue = getFromPath(snapshot, target.path)\n\n            if (hasExplicitKey) {\n              return [\n                // Remove the original dragged item\n                at(arrayPath, remove({_key: targetKey})),\n                // Insert the cloned dragged item into its new position\n                at(arrayPath, insert(elementValue, position, {_key: referenceItemKey})),\n              ]\n            } else {\n              // handle reordering for primitives\n              return [\n                // Remove the original dragged item\n                at(arrayPath, remove(~~targetKey)),\n                // Insert the cloned dragged item into its new position\n                at(\n                  arrayPath,\n                  insert(\n                    elementValue,\n                    position,\n                    // if target key is < reference, each item in the array's index will be one less due to the previous removal\n                    referenceItemKey > targetKey ? ~~referenceItemKey - 1 : ~~referenceItemKey,\n                  ),\n                ),\n              ]\n            }\n          })\n        }\n      }\n    }\n    window.addEventListener('sanity/dragEnd', handler as EventListener)\n    return () => {\n      window.removeEventListener('sanity/dragEnd', handler as EventListener)\n    }\n  }, [getDocument])\n\n  const dispatchDragEndEvent = useCallback((event: DragEndEvent) => {\n    const customEvent = new CustomEvent<DragEndEvent>('sanity/dragEnd', {\n      detail: event,\n      cancelable: true,\n    })\n    window.dispatchEvent(customEvent)\n  }, [])\n\n  return {dispatchDragEndEvent}\n}\n","import type {\n  DocumentSchema,\n  SanityNode,\n  SanityStegaNode,\n  TypeSchema,\n} from '@sanity/presentation-comlink'\nimport {createContext} from 'react'\nimport type {OverlayElementField, OverlayElementParent} from '../../types'\n\nexport interface SchemaContextValue {\n  getField: (node: SanityNode | SanityStegaNode) => {\n    field: OverlayElementField\n    parent: OverlayElementParent\n  }\n  getType: <T extends 'document' | 'type' = 'document'>(\n    node: SanityNode | SanityStegaNode | string,\n    type?: T,\n  ) => T extends 'document' ? DocumentSchema | undefined : TypeSchema | undefined\n}\n\nexport const SchemaContext = createContext<SchemaContextValue | null>(null)\n","import {useContext} from 'react'\nimport {SchemaContext, type SchemaContextValue} from './SchemaContext'\n\nexport function useSchema(): SchemaContextValue {\n  const context = useContext(SchemaContext)\n\n  if (!context) {\n    throw new Error('Schema context is missing')\n  }\n\n  return context\n}\n","import {\n  ArrowDownIcon,\n  ArrowUpIcon,\n  CopyIcon,\n  InsertAboveIcon,\n  InsertBelowIcon,\n  PublishIcon,\n  RemoveIcon,\n  SortIcon,\n  UnpublishIcon,\n} from '@sanity/icons'\nimport type {\n  SanityNode,\n  SchemaArrayItem,\n  SchemaNode,\n  SchemaUnionNode,\n  SchemaUnionOption,\n} from '@sanity/presentation-comlink'\nimport type {SchemaType} from '@sanity/types'\nimport {MenuGroup} from '@sanity/ui/_visual-editing'\nimport {type FunctionComponent} from 'react'\nimport type {OptimisticDocument} from '../../optimistic'\nimport {InsertMenu} from '../../overlay-components/components/InsertMenu'\nimport type {ContextMenuNode, OverlayElementField, OverlayElementParent} from '../../types'\nimport {getNodeIcon} from '../../util/getNodeIcon'\nimport {\n  getArrayDuplicatePatches,\n  getArrayInsertPatches,\n  getArrayMovePatches,\n  getArrayRemovePatches,\n} from '../../util/mutations'\n\nexport function getArrayRemoveAction(node: SanityNode, doc: OptimisticDocument): () => void {\n  if (!node.type) throw new Error('Node type is missing')\n  return () =>\n    doc.patch(async ({getSnapshot}) => getArrayRemovePatches(node, (await getSnapshot())!))\n}\n\nfunction getArrayInsertAction(\n  node: SanityNode,\n  doc: OptimisticDocument,\n  insertType: string,\n  position: 'before' | 'after',\n): () => void {\n  if (!node.type) throw new Error('Node type is missing')\n  return () => doc.patch(() => getArrayInsertPatches(node, insertType, position))\n}\n\nfunction getDuplicateAction(node: SanityNode, doc: OptimisticDocument): () => void {\n  if (!node.type) throw new Error('Node type is missing')\n  return () =>\n    doc.patch(async ({getSnapshot}) => getArrayDuplicatePatches(node, (await getSnapshot())!))\n}\n\nexport function getContextMenuItems(context: {\n  doc: OptimisticDocument\n  field: OverlayElementField\n  node: SanityNode\n  parent: OverlayElementParent\n}): Promise<ContextMenuNode[]> {\n  const {node, field, parent, doc} = context\n  if (field?.type === 'arrayItem') {\n    return getContextMenuArrayItems({node, field, doc})\n  }\n  if (parent?.type === 'union') {\n    return getContextMenuUnionItems({node, parent, doc})\n  }\n\n  return Promise.resolve([])\n}\n\nfunction getDuplicateItem(context: {doc: OptimisticDocument; node: SanityNode}) {\n  const {node, doc} = context\n  if (!doc) return []\n  return [\n    {\n      type: 'action' as const,\n      label: 'Duplicate',\n      icon: CopyIcon,\n      action: getDuplicateAction(node, doc),\n      telemetryEvent: 'Visual Editing Context Menu Item Duplicated' as const,\n    },\n  ]\n}\n\nfunction getRemoveItems(context: {doc: OptimisticDocument; node: SanityNode}) {\n  const {node, doc} = context\n  if (!doc) return []\n  return [\n    {\n      type: 'action' as const,\n      label: 'Remove',\n      icon: RemoveIcon,\n      action: getArrayRemoveAction(node, doc),\n      telemetryEvent: 'Visual Editing Context Menu Item Removed' as const,\n    },\n  ]\n}\n\nasync function getMoveItems(\n  context: {\n    doc: OptimisticDocument\n    node: SanityNode\n  },\n  withDivider = true,\n) {\n  const {node, doc} = context\n  if (!doc) return []\n\n  const items: ContextMenuNode[] = []\n  const groupItems: ContextMenuNode[] = []\n\n  const [moveUpPatches, moveDownPatches, moveFirstPatches, moveLastPatches] = await Promise.all([\n    getArrayMovePatches(node, doc, 'previous'),\n    getArrayMovePatches(node, doc, 'next'),\n    getArrayMovePatches(node, doc, 'first'),\n    getArrayMovePatches(node, doc, 'last'),\n  ])\n\n  if (moveFirstPatches.length) {\n    groupItems.push({\n      type: 'action',\n      label: 'To top',\n      icon: PublishIcon,\n      action: () => doc.patch(moveFirstPatches),\n      telemetryEvent: 'Visual Editing Context Menu Item Moved',\n    })\n  }\n  if (moveUpPatches.length) {\n    groupItems.push({\n      type: 'action',\n      label: 'Up',\n      icon: ArrowUpIcon,\n      action: () => doc.patch(moveUpPatches),\n      telemetryEvent: 'Visual Editing Context Menu Item Moved',\n    })\n  }\n  if (moveDownPatches.length) {\n    groupItems.push({\n      type: 'action',\n      label: 'Down',\n      icon: ArrowDownIcon,\n      action: () => doc.patch(moveDownPatches),\n      telemetryEvent: 'Visual Editing Context Menu Item Moved',\n    })\n  }\n  if (moveLastPatches.length) {\n    groupItems.push({\n      type: 'action',\n      label: 'To bottom',\n      icon: UnpublishIcon,\n      action: () => doc.patch(moveLastPatches),\n      telemetryEvent: 'Visual Editing Context Menu Item Moved',\n    })\n  }\n\n  if (groupItems.length) {\n    items.push({\n      type: 'group',\n      label: 'Move',\n      icon: SortIcon,\n      items: groupItems,\n    })\n    if (withDivider) {\n      items.push({type: 'divider'})\n    }\n  }\n\n  return items\n}\n\nasync function getContextMenuArrayItems(context: {\n  doc: OptimisticDocument\n  field: SchemaArrayItem\n  node: SanityNode\n}): Promise<ContextMenuNode[]> {\n  const {node, field, doc} = context\n  const items: ContextMenuNode[] = []\n  items.push(...getDuplicateItem(context))\n  items.push(...getRemoveItems(context))\n  items.push(...(await getMoveItems(context)))\n\n  items.push({\n    type: 'action',\n    label: 'Insert before',\n    icon: InsertAboveIcon,\n    action: getArrayInsertAction(node, doc, field.name, 'before'),\n    telemetryEvent: 'Visual Editing Context Menu Item Inserted',\n  })\n  items.push({\n    type: 'action',\n    label: 'Insert after',\n    icon: InsertBelowIcon,\n    action: getArrayInsertAction(node, doc, field.name, 'after'),\n    telemetryEvent: 'Visual Editing Context Menu Item Inserted',\n  })\n\n  return items\n}\n\nconst InsertMenuWrapper: FunctionComponent<{\n  label: string\n  onSelect: (schemaType: SchemaType) => void\n  parent: SchemaUnionNode<SchemaNode>\n  width: number | undefined\n  boundaryElement: HTMLDivElement | null\n}> = (props) => {\n  const {label, parent, width, onSelect, boundaryElement} = props\n\n  return (\n    <MenuGroup\n      fontSize={1}\n      icon={InsertBelowIcon}\n      padding={2}\n      popover={{\n        arrow: false,\n        constrainSize: true,\n        floatingBoundary: boundaryElement,\n        padding: 0,\n        placement: 'right-start',\n        fallbackPlacements: [\n          'left-start',\n          'right',\n          'left',\n          'right-end',\n          'left-end',\n          'bottom',\n          'top',\n        ],\n        preventOverflow: true,\n        width,\n        __unstable_margins: [4, 4, 4, 4],\n      }}\n      space={2}\n      text={label}\n    >\n      <InsertMenu node={parent} onSelect={onSelect} />\n    </MenuGroup>\n  )\n}\n\nasync function getContextMenuUnionItems(context: {\n  doc: OptimisticDocument\n  node: SanityNode\n  parent: SchemaUnionNode<SchemaNode>\n}): Promise<ContextMenuNode[]> {\n  const {doc, node, parent} = context\n  const items: ContextMenuNode[] = []\n  items.push(...getDuplicateItem(context))\n  items.push(...getRemoveItems(context))\n  items.push(...(await getMoveItems(context)))\n\n  if (parent.options?.insertMenu) {\n    const insertMenuOptions = parent.options.insertMenu || {}\n    const width = insertMenuOptions.views?.some((view) => view.name === 'grid') ? 0 : undefined\n\n    items.push({\n      type: 'custom',\n      component: ({boundaryElement, sendTelemetry}) => {\n        const onSelect = (schemaType: SchemaType) => {\n          const action = getArrayInsertAction(node, doc, schemaType.name, 'before')\n          action()\n\n          sendTelemetry('Visual Editing Context Menu Item Inserted', null)\n        }\n        return (\n          <InsertMenuWrapper\n            label=\"Insert before\"\n            onSelect={onSelect}\n            parent={parent}\n            width={width}\n            boundaryElement={boundaryElement}\n          />\n        )\n      },\n    })\n\n    items.push({\n      type: 'custom',\n      component: ({boundaryElement, sendTelemetry}) => {\n        const onSelect = (schemaType: SchemaType) => {\n          const action = getArrayInsertAction(node, doc, schemaType.name, 'after')\n          action()\n\n          sendTelemetry('Visual Editing Context Menu Item Inserted', null)\n        }\n        return (\n          <InsertMenuWrapper\n            label=\"Insert after\"\n            onSelect={onSelect}\n            parent={parent}\n            width={width}\n            boundaryElement={boundaryElement}\n          />\n        )\n      },\n    })\n  } else {\n    items.push({\n      type: 'group',\n      label: 'Insert before',\n      icon: InsertAboveIcon,\n      items: (\n        parent.of.filter((item) => item.type === 'unionOption') as SchemaUnionOption<SchemaNode>[]\n      ).map((t) => {\n        return {\n          type: 'action' as const,\n          icon: getNodeIcon(t),\n          label: t.name === 'block' ? 'Paragraph' : t.title || t.name,\n          action: getArrayInsertAction(node, doc, t.name, 'before'),\n          telemetryEvent: 'Visual Editing Context Menu Item Inserted',\n        }\n      }),\n    })\n    items.push({\n      type: 'group',\n      label: 'Insert after',\n      icon: InsertBelowIcon,\n      items: (\n        parent.of.filter((item) => item.type === 'unionOption') as SchemaUnionOption<SchemaNode>[]\n      ).map((t) => {\n        return {\n          type: 'action' as const,\n          label: t.name === 'block' ? 'Paragraph' : t.title || t.name,\n          icon: getNodeIcon(t),\n          action: getArrayInsertAction(node, doc, t.name, 'after'),\n          telemetryEvent: 'Visual Editing Context Menu Item Inserted',\n        }\n      }),\n    })\n  }\n\n  return items\n}\n","import {\n  Box,\n  Flex,\n  Menu,\n  MenuDivider,\n  MenuGroup,\n  MenuItem,\n  Popover,\n  Spinner,\n  Stack,\n  Text,\n  type PopoverMargins,\n} from '@sanity/ui/_visual-editing'\nimport {useCallback, useEffect, useMemo, useState, type FunctionComponent} from 'react'\nimport {useDocuments} from '../../react/useDocuments'\nimport type {ContextMenuNode, ContextMenuProps} from '../../types'\nimport {getNodeIcon} from '../../util/getNodeIcon'\nimport {PopoverPortal} from '../PopoverPortal'\nimport {useSchema} from '../schema/useSchema'\nimport {useTelemetry} from '../telemetry/useTelemetry'\nimport {getContextMenuItems} from './contextMenuItems'\n\nconst POPOVER_MARGINS: PopoverMargins = [-4, 4, -4, 4]\n\nfunction ContextMenuItem(props: {\n  node: ContextMenuNode\n  onDismiss?: () => void\n  boundaryElement: HTMLDivElement | null\n}) {\n  const {node, onDismiss, boundaryElement} = props\n  const sendTelemetry = useTelemetry()\n\n  const onClick = useCallback(() => {\n    if (node.type === 'action') {\n      node.action?.()\n      onDismiss?.()\n\n      if (node.telemetryEvent) {\n        sendTelemetry(node.telemetryEvent, null)\n      }\n    }\n  }, [node, onDismiss, sendTelemetry])\n\n  if (node.type === 'divider') {\n    return <MenuDivider />\n  }\n\n  if (node.type === 'action') {\n    return (\n      <MenuItem\n        fontSize={1}\n        hotkeys={node.hotkeys}\n        icon={node.icon}\n        padding={2}\n        space={2}\n        text={node.label}\n        disabled={!node.action}\n        onClick={onClick}\n      />\n    )\n  }\n\n  if (node.type === 'group') {\n    return (\n      <MenuGroup\n        fontSize={1}\n        icon={node.icon}\n        padding={2}\n        // @todo when this PR lands https://github.com/sanity-io/ui/pull/1454\n        // menu={{\n        //   padding: 0,\n        // }}\n        popover={{\n          arrow: false,\n          constrainSize: true,\n          placement: 'right-start',\n          fallbackPlacements: [\n            'left-start',\n            'right',\n            'left',\n            'right-end',\n            'left-end',\n            'bottom',\n            'top',\n          ],\n          preventOverflow: true,\n          __unstable_margins: POPOVER_MARGINS,\n        }}\n        space={2}\n        text={node.label}\n      >\n        {node.items.map((item, itemIndex) => (\n          <ContextMenuItem\n            key={itemIndex}\n            node={item}\n            onDismiss={onDismiss}\n            boundaryElement={boundaryElement}\n          />\n        ))}\n      </MenuGroup>\n    )\n  }\n\n  if (node.type === 'custom') {\n    const {component: Component} = node\n    return <Component boundaryElement={boundaryElement} sendTelemetry={sendTelemetry} />\n  }\n\n  return null\n}\n\nexport const ContextMenu: FunctionComponent<ContextMenuProps> = (props) => {\n  const {\n    node,\n    onDismiss,\n    position: {x, y},\n  } = props\n\n  const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)\n\n  const {getField} = useSchema()\n  const {getDocument} = useDocuments()\n\n  const {field, parent} = getField(node)\n\n  const title = useMemo(() => {\n    return field?.title || field?.name || 'Unknown type'\n  }, [field])\n\n  const [items, setItems] = useState<ContextMenuNode[] | undefined>(undefined)\n\n  useEffect(() => {\n    const fetchContextMenuItems = async () => {\n      const doc = getDocument(node.id)\n      if (!doc) return\n      const items = await getContextMenuItems({node, field, parent, doc})\n      setItems(items)\n    }\n    fetchContextMenuItems()\n  }, [field, node, parent, getDocument])\n\n  const contextMenuReferenceElement = useMemo(() => {\n    return {\n      getBoundingClientRect: () => ({\n        bottom: y,\n        left: x,\n        right: x,\n        top: y,\n        width: 0,\n        height: 0,\n      }),\n    } as HTMLElement\n  }, [x, y])\n\n  const icon = useMemo(() => {\n    return getNodeIcon(field)\n  }, [field])\n\n  return (\n    <PopoverPortal setBoundaryElement={setBoundaryElement} onDismiss={onDismiss}>\n      <Popover\n        __unstable_margins={POPOVER_MARGINS}\n        arrow={false}\n        open\n        placement=\"right-start\"\n        referenceElement={contextMenuReferenceElement}\n        content={\n          <Menu style={{minWidth: 120, maxWidth: 160}}>\n            <Flex gap={2} padding={2}>\n              <Box flex=\"none\">{items ? <Text size={1}>{icon}</Text> : <Spinner size={1} />}</Box>\n\n              <Stack flex={1} space={2}>\n                <Text size={1} weight=\"semibold\">\n                  {items ? title : 'Loading...'}\n                </Text>\n              </Stack>\n            </Flex>\n\n            {items && (\n              <>\n                <MenuDivider />\n                {items.map((item, i) => (\n                  <ContextMenuItem\n                    key={i}\n                    node={item}\n                    onDismiss={onDismiss}\n                    boundaryElement={boundaryElement}\n                  />\n                ))}\n              </>\n            )}\n          </Menu>\n        }\n      >\n        <div\n          key={`${x}-${y}`}\n          style={{\n            position: 'absolute',\n            left: x,\n            top: y,\n          }}\n        />\n      </Popover>\n    </PopoverPortal>\n  )\n}\n","export function getLinkHref(href: string, referer: string): string {\n  try {\n    const parsed = new URL(href, typeof location === 'undefined' ? undefined : location.origin)\n    if (parsed.hash) {\n      const hash = new URL(getLinkHref(parsed.hash.slice(1), referer))\n      return `${parsed.origin}${parsed.pathname}${parsed.search}#${hash.pathname}${hash.search}`\n    }\n    parsed.searchParams.set('preview', referer)\n    return parsed.toString()\n  } catch {\n    return href\n  }\n}\n","import type {PreviewSnapshot} from '@sanity/presentation-comlink'\nimport {createContext} from 'react'\n\nexport type PreviewSnapshotsContextValue = PreviewSnapshot[]\n\nexport const PreviewSnapshotsContext = createContext<PreviewSnapshotsContextValue | null>(null)\n","import {useContext} from 'react'\nimport {PreviewSnapshotsContext, type PreviewSnapshotsContextValue} from './PreviewSnapshotsContext'\n\nexport function usePreviewSnapshots(): PreviewSnapshotsContextValue {\n  const context = useContext(PreviewSnapshotsContext)\n\n  if (!context) {\n    throw new Error('Preview Snapshots context is missing')\n  }\n\n  return context\n}\n","import {createEditUrl, studioPath} from '@sanity/client/csm'\nimport {DocumentIcon, DragHandleIcon, EllipsisVerticalIcon, PlugIcon} from '@sanity/icons'\nimport {MenuButton, MenuDivider} from '@sanity/ui'\nimport {Box, Button, Card, Flex, Menu, MenuItem, Stack, Text} from '@sanity/ui/_visual-editing'\nimport {pathToUrlString} from '@sanity/visual-editing-csm'\nimport {\n  Fragment,\n  isValidElement,\n  memo,\n  useCallback,\n  useEffect,\n  useId,\n  useMemo,\n  useRef,\n  useState,\n  useSyncExternalStore,\n  type CSSProperties,\n  type FunctionComponent,\n  type MouseEventHandler,\n  type ReactElement,\n} from 'react'\nimport scrollIntoView from 'scroll-into-view-if-needed'\nimport {styled} from 'styled-components'\nimport {v4 as uuid} from 'uuid'\nimport {PointerEvents} from '../overlay-components/components/PointerEvents'\nimport type {\n  ElementChildTarget,\n  ElementFocusedState,\n  ElementNode,\n  OverlayComponent,\n  OverlayComponentResolver,\n  OverlayComponentResolverContext,\n  OverlayPluginDefinition,\n  OverlayPluginExclusiveDefinition,\n  OverlayPluginHudDefinition,\n  OverlayRect,\n  SanityNode,\n  SanityStegaNode,\n  VisualEditingNode,\n} from '../types'\nimport {getLinkHref} from '../util/getLinkHref'\nimport {PopoverBackground} from './PopoverPortal'\nimport {usePreviewSnapshots} from './preview/usePreviewSnapshots'\nimport {useSchema} from './schema/useSchema'\n\nconst isReactElementOverlayComponent = (\n  component:\n    | OverlayComponent\n    | {component: OverlayComponent; props?: Record<string, unknown>}\n    | Array<OverlayComponent | {component: OverlayComponent; props?: Record<string, unknown>}>\n    | ReactElement,\n): component is React.JSX.Element => {\n  return isValidElement(component)\n}\n\nexport interface ElementOverlayProps {\n  id: string\n  comlink?: VisualEditingNode\n  componentResolver?: OverlayComponentResolver\n  plugins?: OverlayPluginDefinition[]\n  draggable: boolean\n  element: ElementNode\n  focused: ElementFocusedState\n  hovered: boolean\n  isDragging: boolean\n  node: SanityNode | SanityStegaNode\n  rect: OverlayRect\n  showActions: boolean\n  wasMaybeCollapsed: boolean\n  enableScrollIntoView: boolean\n  targets: ElementChildTarget[]\n  elementType: 'element' | 'group'\n  onActivateExclusivePlugin?: (\n    plugin: OverlayPluginExclusiveDefinition,\n    context: OverlayComponentResolverContext,\n  ) => void\n  onMenuOpenChange: (open: boolean) => void\n}\n\nconst Root = styled(Card)`\n  background-color: var(--overlay-bg);\n  border-radius: 3px;\n  pointer-events: none;\n  position: absolute;\n  will-change: transform;\n  box-shadow: var(--overlay-box-shadow);\n  transition: none;\n\n  --overlay-bg: transparent;\n  --overlay-box-shadow: inset 0 0 0 1px transparent;\n\n  [data-overlays] & {\n    --overlay-bg: color-mix(in srgb, transparent 95%, var(--card-focus-ring-color));\n    --overlay-box-shadow: inset 0 0 0 2px\n      color-mix(in srgb, transparent 50%, var(--card-focus-ring-color));\n  }\n\n  [data-fading-out] & {\n    transition:\n      box-shadow 1550ms,\n      background-color 1550ms;\n\n    --overlay-bg: rgba(0, 0, 255, 0);\n    --overlay-box-shadow: inset 0 0 0 1px transparent;\n  }\n\n  &[data-focused] {\n    --overlay-box-shadow: inset 0 0 0 1px var(--card-focus-ring-color);\n  }\n\n  &[data-hovered]:not([data-focused]) {\n    transition: none;\n    --overlay-box-shadow: inset 0 0 0 2px var(--card-focus-ring-color);\n  }\n\n  /* [data-unmounted] & {\n    --overlay-box-shadow: inset 0 0 0 1px var(--card-focus-ring-color);\n  } */\n\n  :link {\n    text-decoration: none;\n  }\n`\n\nconst Actions = styled(Flex)`\n  bottom: 100%;\n  cursor: pointer;\n  pointer-events: none;\n  position: absolute;\n  right: 0;\n\n  [data-hovered]:not([data-menu-open]) & {\n    pointer-events: all;\n  }\n\n  [data-flipped] & {\n    bottom: auto;\n    top: 100%;\n  }\n`\n\nconst HUD = styled(Flex)`\n  top: 100%;\n  cursor: pointer;\n  pointer-events: none;\n  position: absolute;\n  left: 0;\n\n  gap: 4px;\n  padding: 4px 0;\n  flex-wrap: wrap;\n\n  [data-hovered]:not([data-menu-open]) & {\n    pointer-events: all;\n  }\n\n  [data-flipped] & {\n    top: calc(100% + 2rem);\n  }\n`\n\nconst MenuWrapper = styled(Flex)`\n  margin: -0.5rem;\n\n  [data-hovered]:not([data-menu-open]) & {\n    pointer-events: all;\n  }\n`\n\nconst Tab = styled(Flex)`\n  bottom: 100%;\n  cursor: pointer;\n  pointer-events: none;\n  position: absolute;\n  left: 0;\n\n  [data-hovered]:not([data-menu-open]) & {\n    pointer-events: all;\n  }\n\n  [data-flipped] & {\n    bottom: auto;\n    top: 100%;\n  }\n`\n\nconst ActionOpen = styled(Card)`\n  cursor: pointer;\n  background-color: var(--card-focus-ring-color);\n  right: 0;\n  border-radius: 3px;\n\n  & [data-ui='Text'] {\n    color: #fff;\n    white-space: nowrap;\n  }\n`\n\nconst Labels = styled(Flex)`\n  display: flex;\n  align-items: center;\n  background-color: var(--card-focus-ring-color);\n  right: 0;\n  border-radius: 3px;\n  & [data-ui='Text'],\n  & [data-sanity-icon] {\n    color: #fff;\n    white-space: nowrap;\n  }\n`\n\nconst ExclusivePluginContainer = styled.div`\n  position: absolute;\n  inset: 0;\n  pointer-events: all;\n`\n\nfunction createIntentLink(node: SanityNode) {\n  const {id, type, path, baseUrl, tool, workspace} = node\n\n  return createEditUrl({\n    baseUrl,\n    workspace,\n    tool,\n    type: type!,\n    id,\n    path: path ? pathToUrlString(studioPath.fromString(path)) : [],\n  })\n}\n\nconst ElementOverlayInner: FunctionComponent<ElementOverlayProps> = (props) => {\n  const {\n    id,\n    element,\n    focused,\n    componentResolver,\n    node,\n    showActions,\n    draggable,\n    targets,\n    elementType,\n    comlink,\n    onActivateExclusivePlugin,\n    onMenuOpenChange,\n  } = props\n\n  const {getField, getType} = useSchema()\n  const schemaType = getType(node)\n\n  const href = 'path' in node ? createIntentLink(node) : node.href\n\n  const previewSnapshots = usePreviewSnapshots()\n\n  const title = useMemo(() => {\n    if (!('path' in node)) return undefined\n    return previewSnapshots.find((snapshot) => snapshot._id === node.id)?.title\n  }, [node, previewSnapshots])\n\n  const resolverContexts = useMemo<{\n    legacyComponentContext: OverlayComponentResolverContext | undefined\n    pluginContexts: OverlayComponentResolverContext[]\n  }>(() => {\n    function getContext(\n      node: SanityNode | SanityStegaNode,\n      nodeElement?: ElementNode,\n    ): OverlayComponentResolverContext | undefined {\n      const schemaType = getType(node)\n      const {field, parent} = getField(node)\n      if (!('id' in node)) return undefined\n      if (!field || !schemaType) return undefined\n      const type = field.value.type\n      return {\n        document: schemaType,\n        element,\n        targetElement: nodeElement || element,\n        field,\n        focused: !!focused,\n        node,\n        parent,\n        type,\n      }\n    }\n    return {\n      legacyComponentContext: elementType === 'element' ? getContext(node) : undefined,\n      pluginContexts: targets\n        .map((target) => getContext(target.sanity, target.element))\n        .filter((ctx) => ctx !== undefined),\n    }\n  }, [elementType, node, targets, getType, getField, element, focused])\n\n  const customComponents = useCustomComponents(\n    resolverContexts.legacyComponentContext,\n    componentResolver,\n  )\n\n  const nodePluginCollections = useResolvedNodePlugins(\n    resolverContexts.pluginContexts,\n    props.plugins,\n  )\n\n  const icon = schemaType?.icon ? (\n    <div dangerouslySetInnerHTML={{__html: schemaType.icon}} />\n  ) : (\n    <DocumentIcon />\n  )\n\n  const menuId = useId()\n\n  const hasMenuitems = nodePluginCollections?.some(\n    (nodePluginCollection) => nodePluginCollection.exclusive.length > 0,\n  )\n  const showMenu = hasMenuitems || nodePluginCollections?.length > 1\n\n  const handleLabelClick = useCallback(() => {\n    window.dispatchEvent(new CustomEvent('sanity-overlay/label-click', {detail: {id}}))\n  }, [id])\n\n  return (\n    <>\n      <PointerEvents>\n        {showActions ? (\n          <Actions gap={1} paddingY={1}>\n            <Link href={href} />\n          </Actions>\n        ) : null}\n        {(title || showMenu) && (\n          <Tab gap={1} paddingY={1} onClick={handleLabelClick}>\n            <Labels gap={2} padding={2}>\n              {draggable && (\n                <Box marginRight={1}>\n                  <Text className=\"drag-handle\" size={0}>\n                    <DragHandleIcon />\n                  </Text>\n                </Box>\n              )}\n              <Text size={0}>{icon}</Text>\n\n              {title && (\n                <Text size={1} weight=\"medium\">\n                  {title}\n                </Text>\n              )}\n\n              {showMenu && (\n                <Box\n                  paddingLeft={2}\n                  onClick={(e) => {\n                    // Do not propagate and click the label too if clicking menu button\n                    e.stopPropagation()\n                  }}\n                >\n                  <MenuWrapper>\n                    <MenuButton\n                      id={menuId}\n                      popover={{\n                        animate: true,\n                        placement: 'bottom-start',\n                        constrainSize: true,\n                        tone: 'default',\n                      }}\n                      onOpen={() => {\n                        onMenuOpenChange?.(true)\n                      }}\n                      onClose={() => {\n                        onMenuOpenChange?.(false)\n                      }}\n                      button={<Button icon={EllipsisVerticalIcon} tone=\"primary\" padding={2} />}\n                      menu={\n                        <Menu paddingY={0}>\n                          <PointerEvents>\n                            {nodePluginCollections?.map((nodePluginCollection, index) => (\n                              <Fragment key={nodePluginCollection.id}>\n                                <Stack role=\"group\" paddingY={1} space={0}>\n                                  <MenuItem\n                                    paddingY={2}\n                                    text={\n                                      <Box paddingY={2}>\n                                        <Text muted size={1} style={{textTransform: 'capitalize'}}>\n                                          {`${nodePluginCollection.context.document.name}: ${nodePluginCollection.context.field?.name}`}\n                                        </Text>\n                                      </Box>\n                                    }\n                                    onClick={() => {\n                                      if (nodePluginCollection.context.node) {\n                                        comlink?.post(\n                                          'visual-editing/focus',\n                                          nodePluginCollection.context.node,\n                                        )\n                                      }\n                                    }}\n                                  />\n                                  {nodePluginCollection.exclusive.map((exclusive) => {\n                                    const Component = exclusive.component\n                                    if (!Component) return null\n                                    return (\n                                      <MenuItem\n                                        paddingY={2}\n                                        key={exclusive.name}\n                                        icon={exclusive.icon || <PlugIcon />}\n                                        text={\n                                          <Box paddingY={2}>\n                                            <Text size={1}>\n                                              {exclusive.title || exclusive.name}\n                                            </Text>\n                                          </Box>\n                                        }\n                                        onClick={() =>\n                                          onActivateExclusivePlugin?.(\n                                            exclusive,\n                                            nodePluginCollection.context,\n                                          )\n                                        }\n                                      />\n                                    )\n                                  })}\n                                </Stack>\n                                {index < nodePluginCollections.length - 1 && <MenuDivider />}\n                              </Fragment>\n                            ))}\n                          </PointerEvents>\n                        </Menu>\n                      }\n                    />\n                  </MenuWrapper>\n                </Box>\n              )}\n            </Labels>\n          </Tab>\n        )}\n\n        <HUD>\n          {nodePluginCollections?.map((nodePluginCollection) => (\n            <Fragment key={nodePluginCollection.id}>\n              {nodePluginCollection.hud.map((hud) => {\n                const Component = hud.component\n                if (!Component) return null\n                return <Component key={hud.name} {...nodePluginCollection.context} />\n              })}\n            </Fragment>\n          ))}\n        </HUD>\n      </PointerEvents>\n\n      {Array.isArray(customComponents)\n        ? customComponents.map(({component: Component, props}, i) => {\n            return (\n              <Component\n                key={i}\n                PointerEvents={PointerEvents}\n                {...resolverContexts.legacyComponentContext!}\n                {...props}\n              />\n            )\n          })\n        : customComponents}\n    </>\n  )\n}\n\nexport const ElementOverlay = memo(function ElementOverlay(\n  props: Omit<ElementOverlayProps, 'setActiveExclusivePlugin' | 'onMenuOpenChange'>,\n) {\n  const {draggable, focused, hovered, rect, wasMaybeCollapsed, enableScrollIntoView} = props\n\n  const ref = useRef<HTMLDivElement>(null)\n\n  const scrolledIntoViewRef = useRef(false)\n\n  const style = useMemo<CSSProperties>(\n    () => ({\n      width: `${rect.w}px`,\n      height: `${rect.h}px`,\n      transform: `translate(${rect.x}px, ${rect.y}px)`,\n    }),\n    [rect],\n  )\n\n  useEffect(() => {\n    if (\n      !scrolledIntoViewRef.current &&\n      !wasMaybeCollapsed &&\n      focused === true &&\n      ref.current &&\n      enableScrollIntoView\n    ) {\n      const target = ref.current\n      scrollIntoView(ref.current, {\n        // Workaround issue with scroll-into-view-if-needed struggling with iframes\n        behavior: (actions) => {\n          if (actions.length === 0) {\n            // An empty actions list equals scrolling isn't needed\n            return\n          }\n          // Uses native scrollIntoView to ensure iframes behave correctly\n          target.scrollIntoView({\n            behavior: 'smooth',\n            block: 'center',\n            inline: 'nearest',\n          })\n        },\n        scrollMode: 'if-needed',\n        block: 'center',\n        inline: 'nearest',\n      })\n    }\n\n    scrolledIntoViewRef.current = focused === true\n  }, [focused, wasMaybeCollapsed, enableScrollIntoView])\n\n  const [isNearTop, setIsNearTop] = useState(false)\n  useEffect(() => {\n    if (!ref.current || !hovered) return undefined\n\n    const io = new IntersectionObserver(\n      ([intersection]) => {\n        setIsNearTop(intersection.boundingClientRect.top < 0)\n      },\n      {threshold: 1},\n    )\n    io.observe(ref.current)\n    return () => io.disconnect()\n  }, [hovered, isNearTop])\n\n  const [activeExclusivePlugin, setActiveExclusivePlugin] = useState<{\n    plugin: OverlayPluginExclusiveDefinition\n    context: OverlayComponentResolverContext\n  } | null>(null)\n\n  const closeExclusivePluginView = useCallback(() => {\n    setActiveExclusivePlugin(null)\n    window.dispatchEvent(new CustomEvent('sanity-overlay/exclusive-plugin-closed'))\n  }, [])\n\n  const onActivateExclusivePlugin = useCallback(\n    (plugin: OverlayPluginExclusiveDefinition, context: OverlayComponentResolverContext) => {\n      setActiveExclusivePlugin({plugin, context})\n    },\n    [],\n  )\n\n  const handleExclusivePluginClick: MouseEventHandler<HTMLDivElement> = (event) => {\n    event.stopPropagation()\n  }\n\n  const ExclusivePluginComponent = activeExclusivePlugin?.plugin.component\n\n  const [menuOpen, setMenuOpen] = useState(false)\n\n  useEffect(() => {\n    setMenuOpen(false)\n  }, [hovered])\n\n  return (\n    <>\n      {menuOpen || ExclusivePluginComponent ? (\n        <PopoverBackground onDismiss={closeExclusivePluginView} blockScroll={menuOpen} />\n      ) : null}\n      <Root\n        data-focused={focused ? '' : undefined}\n        data-hovered={hovered ? '' : undefined}\n        data-flipped={isNearTop ? '' : undefined}\n        data-draggable={draggable ? '' : undefined}\n        data-menu-open={menuOpen ? '' : undefined}\n        ref={ref}\n        style={style}\n      >\n        {ExclusivePluginComponent ? (\n          <ExclusivePluginContainer\n            data-sanity-overlay-element\n            onClick={handleExclusivePluginClick}\n          >\n            <ExclusivePluginComponent\n              {...activeExclusivePlugin.context}\n              closeExclusiveView={closeExclusivePluginView}\n            />\n          </ExclusivePluginContainer>\n        ) : hovered ? (\n          <ElementOverlayInner\n            {...props}\n            onActivateExclusivePlugin={onActivateExclusivePlugin}\n            onMenuOpenChange={setMenuOpen}\n          />\n        ) : null}\n      </Root>\n    </>\n  )\n})\n\ninterface NodePluginCollection {\n  id: string\n  context: OverlayComponentResolverContext\n  hud: OverlayPluginHudDefinition[]\n  exclusive: OverlayPluginExclusiveDefinition[]\n}\n\nfunction useResolvedNodePlugins(\n  componentContexts: OverlayComponentResolverContext[],\n  plugins?: OverlayPluginDefinition[],\n) {\n  return useMemo(\n    () =>\n      componentContexts.map((componentContext) => {\n        const instance: NodePluginCollection = {\n          id: uuid(),\n          context: componentContext,\n          hud: [],\n          exclusive: [],\n        }\n\n        plugins?.forEach((plugin) => {\n          if (!plugin.guard?.(componentContext)) return\n          if (plugin.type === 'hud') instance.hud.push(plugin)\n          if (plugin.type === 'exclusive') instance.exclusive.push(plugin)\n        })\n\n        return instance\n      }),\n    [componentContexts, plugins],\n  )\n}\n\nfunction useCustomComponents(\n  componentContext: OverlayComponentResolverContext | undefined,\n  componentResolver: OverlayComponentResolver | undefined,\n) {\n  return useMemo(() => {\n    if (!componentContext) return undefined\n    const resolved = componentResolver?.(componentContext)\n    if (!resolved) return undefined\n\n    if (isReactElementOverlayComponent(resolved)) {\n      return resolved\n    }\n\n    return (Array.isArray(resolved) ? resolved : [resolved]).map((component) => {\n      if (typeof component === 'object' && 'component' in component) {\n        return component\n      }\n      return {component, props: {}}\n    })\n  }, [componentResolver, componentContext])\n}\n\nconst Link = memo(function Link(props: {href: string}) {\n  const referer = useSyncExternalStore(\n    useCallback((onStoreChange) => {\n      const handlePopState = () => onStoreChange()\n      window.addEventListener('popstate', handlePopState)\n      return () => window.removeEventListener('popstate', handlePopState)\n    }, []),\n    () => window.location.href,\n  )\n  const href = useMemo(() => getLinkHref(props.href, referer), [props.href, referer])\n\n  return (\n    <Box as=\"a\" href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n      <ActionOpen padding={2}>\n        <Text size={1} weight=\"medium\">\n          Open in Studio\n        </Text>\n      </ActionOpen>\n    </Box>\n  )\n})\n","import type {FunctionComponent} from 'react'\nimport type {OverlayRect} from '../types'\n\nexport const OverlayDragGroupRect: FunctionComponent<{\n  dragGroupRect: OverlayRect\n}> = ({dragGroupRect}) => {\n  return (\n    <div\n      style={{\n        position: 'absolute',\n        top: `${dragGroupRect.y}px`,\n        left: `${dragGroupRect.x}px`,\n        width: `${dragGroupRect.w - 1}px`,\n        height: `${dragGroupRect.h - 1}px`,\n        border: '1px dashed #f0709b',\n        pointerEvents: 'none',\n      }}\n    ></div>\n  )\n}\n","import type {FunctionComponent} from 'react'\nimport type {DragInsertPosition} from '../types'\n\nconst markerThickness = 6\n\nfunction lerp(v0: number, v1: number, t: number) {\n  return v0 * (1 - t) + v1 * t\n}\n\nexport const OverlayDragInsertMarker: FunctionComponent<{\n  dragInsertPosition: DragInsertPosition\n}> = ({dragInsertPosition}) => {\n  if (dragInsertPosition === null) return\n\n  const flow = dragInsertPosition?.left || dragInsertPosition?.right ? 'horizontal' : 'vertical'\n\n  let x = 0\n  let y = 0\n  let width = 0\n  let height = 0\n  const offsetMultiplier = 0.0125\n\n  if (flow === 'horizontal') {\n    const {left, right} = dragInsertPosition\n\n    width = markerThickness\n\n    if (right && left) {\n      const startX = left.rect.x + left.rect.w\n      const endX = right.rect.x\n      const targetHeight = Math.min(right.rect.h, left.rect.h)\n      const offset = targetHeight * offsetMultiplier\n\n      x = lerp(startX, endX, 0.5) - markerThickness / 2\n      y = left.rect.y + offset\n\n      height = Math.min(right.rect.h, left.rect.h) - offset * 2\n    } else if (right && !left) {\n      const targetHeight = right.rect.h\n      const offset = targetHeight * offsetMultiplier\n\n      x = right.rect.x - markerThickness / 2\n      y = right.rect.y + offset\n      height = right.rect.h - offset * 2\n    } else if (left && !right) {\n      const targetHeight = left.rect.h\n      const offset = targetHeight * offsetMultiplier\n\n      x = left.rect.x + left.rect.w - markerThickness / 2\n      y = left.rect.y + offset\n      height = left.rect.h - offset * 2\n    }\n  } else {\n    const {bottom, top} = dragInsertPosition\n\n    if (bottom && top) {\n      const startX = Math.min(top.rect.x, bottom.rect.x)\n      const startY = top.rect.y + top.rect.h\n      const endY = bottom.rect.y\n      const targetWidth = Math.min(bottom.rect.w, top.rect.w)\n      const offset = targetWidth * offsetMultiplier\n\n      height = markerThickness\n\n      x = startX + offset\n      y = lerp(startY, endY, 0.5) - markerThickness / 2\n      width = Math.max(bottom.rect.w, top.rect.w) - offset * 2\n    } else if (bottom && !top) {\n      const targetWidth = bottom.rect.w\n      const offset = targetWidth * offsetMultiplier\n\n      x = bottom.rect.x + offset\n      y = bottom.rect.y - markerThickness / 2\n      width = bottom.rect.w - offset * 2\n      height = markerThickness\n    } else if (top && !bottom) {\n      const targetWidth = top.rect.w\n      const offset = targetWidth * offsetMultiplier\n\n      x = top.rect.x + offset\n      y = top.rect.y + top.rect.h - markerThickness / 2\n      width = top.rect.w - offset * 2\n      height = markerThickness\n    }\n  }\n\n  return (\n    <div\n      style={{\n        position: 'absolute',\n        width: `${width}px`,\n        height: `${height}px`,\n        transform: `translate(${x}px, ${y}px)`,\n        background: '#556bfc',\n        border: '2px solid white',\n        borderRadius: '999px',\n        zIndex: '999999',\n      }}\n    ></div>\n  )\n}\n","import {Card, usePrefersDark, useTheme_v2} from '@sanity/ui/_visual-editing'\nimport type {FunctionComponent} from 'react'\nimport {styled} from 'styled-components'\nimport type {DragSkeleton} from '../types'\n\nconst Root = styled.div<{\n  $width: number\n  $height: number\n  $offsetX: number\n  $offsetY: number\n  $scaleFactor: number\n}>`\n  --drag-preview-opacity: 0.98;\n  --drag-preview-skeleton-stroke: #ffffff;\n\n  @media (prefers-color-scheme: dark) {\n    --drag-preview-skeleton-stroke: #383d51;\n  }\n\n  position: fixed;\n  display: grid;\n  transform: ${({$scaleFactor, $width, $height}) =>\n    `translate(calc(var(--drag-preview-x) - ${$width / 2}px), calc(var(--drag-preview-y) - ${$height / 2}px)) scale(${$scaleFactor})`};\n  width: ${({$width}) => `${$width}px`};\n  height: ${({$height}) => `${$height}px`};\n  z-index: 9999999;\n  opacity: var(--drag-preview-opacity);\n  cursor: move;\n\n  .drag-preview-content-wrapper {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    container-type: inline-size;\n  }\n\n  [data-ui='card'] {\n    position: relative;\n    width: 100%;\n    height: 100%;\n  }\n\n  .drag-preview-skeleton {\n    position: absolute;\n    inset: 0;\n\n    rect {\n      stroke: var(--drag-preview-skeleton-stroke);\n    }\n  }\n\n  .drag-preview-handle {\n    position: absolute;\n    top: 4cqmin;\n    left: 4cqmin;\n    width: 6cqmin;\n    fill: var(--drag-preview-handle-fill);\n  }\n`\n\nfunction clamp(number: number, min: number, max: number): number {\n  return number < min ? min : number > max ? max : number\n}\n\nfunction map(number: number, inMin: number, inMax: number, outMin: number, outMax: number): number {\n  const mapped: number = ((number - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n  return clamp(mapped, outMin, outMax)\n}\n\nexport const OverlayDragPreview: FunctionComponent<{skeleton: DragSkeleton}> = ({skeleton}) => {\n  const maxSkeletonWidth = Math.min(skeleton.maxWidth, window.innerWidth / 2)\n  const scaleFactor = skeleton.w > maxSkeletonWidth ? maxSkeletonWidth / skeleton.w : 1\n\n  const offsetX = skeleton.offsetX * scaleFactor\n  const offsetY = skeleton.offsetY * scaleFactor\n\n  const prefersDark = usePrefersDark()\n  const theme = useTheme_v2()\n\n  const radius = theme.radius[~~map(skeleton.w, 0, 1920, 1, theme.radius.length - 2)]\n\n  const imageRects = skeleton.childRects.filter((r) => r.tagName === 'IMG')\n  const textRects = skeleton.childRects.filter((r) => r.tagName !== 'IMG')\n\n  return (\n    <Root\n      $width={skeleton.w}\n      $height={skeleton.h}\n      $offsetX={offsetX}\n      $offsetY={offsetY}\n      $scaleFactor={scaleFactor}\n    >\n      <Card\n        radius={radius}\n        shadow={4}\n        overflow=\"hidden\"\n        tone=\"transparent\"\n        scheme={prefersDark ? 'dark' : 'light'}\n      >\n        <div className=\"drag-preview-content-wrapper\">\n          <svg className=\"drag-preview-skeleton\" viewBox={`0 0 ${skeleton.w} ${skeleton.h}`}>\n            {/* render image rects first to account for background images overlapping text */}\n            {[...imageRects, ...textRects].map((r, i) => (\n              <rect\n                key={i}\n                x={r.x}\n                y={r.y}\n                width={r.w}\n                height={r.h}\n                fill={theme.color.skeleton.from}\n              ></rect>\n            ))}\n          </svg>\n        </div>\n      </Card>\n    </Root>\n  )\n}\n","import {ExpandIcon} from '@sanity/icons'\nimport {Card, Flex, Hotkeys, Text} from '@sanity/ui/_visual-editing'\nimport type {FunctionComponent} from 'react'\nimport {styled} from 'styled-components'\n\nconst Root = styled(Card)`\n  position: fixed;\n  bottom: 2rem;\n  left: 2rem;\n`\n\nexport const OverlayMinimapPrompt: FunctionComponent = () => {\n  return (\n    <Root padding={2} shadow={2} radius={2} style={{zIndex: '999999'}}>\n      <Flex align=\"center\" gap={2}>\n        <Hotkeys keys={['Shift']} />\n        <Text size={1}>Zoom Out</Text>\n        <ExpandIcon />\n      </Flex>\n    </Root>\n  )\n}\n","import type {VisualEditingControllerMsg} from '@sanity/presentation-comlink'\nimport type {ElementState, OverlayMsg} from '../types'\n\n/**\n * Reducer for managing element state from received channel messages\n * @internal\n */\nexport const elementsReducer = (\n  elements: ElementState[],\n  message: OverlayMsg | VisualEditingControllerMsg,\n): ElementState[] => {\n  const {type} = message\n  switch (type) {\n    case 'element/register': {\n      const elementExists = !!elements.find((e) => e.id === message.id)\n      if (elementExists) return elements\n\n      return [\n        ...elements,\n        {\n          id: message.id,\n          activated: false,\n          element: message.element,\n          focused: false,\n          hovered: false,\n          rect: message.rect,\n          sanity: message.sanity,\n          dragDisabled: message.dragDisabled,\n          targets: message.targets,\n          elementType: message.elementType,\n        },\n      ]\n    }\n    case 'element/activate':\n      return elements.map((e) => {\n        if (e.id === message.id) {\n          return {...e, activated: true}\n        }\n        return e\n      })\n    case 'element/update': {\n      return elements.map((e) => {\n        if (e.id === message.id) {\n          return {\n            ...e,\n            sanity: message.sanity,\n            rect: message.rect,\n            targets: message.targets,\n            elementType: message.elementType,\n          }\n        }\n        return e\n      })\n    }\n    case 'element/unregister':\n      return elements.filter((e) => e.id !== message.id)\n    case 'element/deactivate':\n      return elements.map((e) => {\n        if (e.id === message.id) {\n          return {...e, activated: false, hovered: false}\n        }\n        return e\n      })\n    case 'element/mouseenter':\n      return elements.map((e) => {\n        if (e.id === message.id) {\n          return {...e, rect: message.rect, hovered: true}\n        }\n        return {...e, hovered: false}\n      })\n    case 'element/mouseleave':\n      return elements.map((element) => {\n        if (element.id === message.id) {\n          return {...element, hovered: false}\n        }\n        return element\n      })\n    case 'element/updateRect':\n      return elements.map((element) => {\n        if (element.id === message.id) {\n          return {...element, rect: message.rect}\n        }\n        return element\n      })\n    case 'element/click':\n      return elements.map((e) => {\n        return {...e, focused: e.id === message.id && 'clicked'}\n      })\n    case 'overlay/reset-mouse-state':\n      return elements.map((e) => {\n        return {...e, focused: false, hovered: false}\n      })\n    case 'overlay/blur':\n      return elements.map((e) => {\n        return {...e, focused: false}\n      })\n    case 'presentation/blur':\n      return elements.map((e) => {\n        return {...e, focused: false}\n      })\n    case 'presentation/focus': {\n      // Before setting the focus state of each element, check to see if any\n      // element has gained focus from an `element/click` message. Presentation\n      // tool \"reflects\" these back as a `presentation/focus` message.\n      const clickedElement = elements.find((e) => e.focused === 'clicked')\n      return elements.map((e) => {\n        // We want to focus any element which matches the received id and path\n        const focused =\n          'path' in e.sanity &&\n          e.sanity.id === message.data.id &&\n          e.sanity.path === message.data.path\n\n        // If we have a 'clicked' element, and that element matches, it is a\n        // reflection, so we maintain the focus state\n        if (clickedElement && e === clickedElement && focused) {\n          return e\n        }\n\n        return {\n          ...e,\n          // Mark as a dupe if another matching item has been clicked to prevent\n          // scrolling, otherwise just set focus as a boolean\n          focused: focused && clickedElement ? 'duplicate' : focused,\n        }\n      })\n    }\n    default:\n      return elements\n  }\n}\n","import type {ClientPerspective} from '@sanity/client'\nimport type {SanityNode, VisualEditingControllerMsg} from '@sanity/presentation-comlink'\nimport type {\n  DragInsertPosition,\n  DragSkeleton,\n  ElementState,\n  OverlayMsg,\n  OverlayRect,\n} from '../types'\nimport {elementsReducer} from './elementsReducer'\n\nexport interface OverlayState {\n  contextMenu: {\n    node: SanityNode\n    position: {\n      x: number\n      y: number\n    }\n  } | null\n  focusPath: string\n  elements: ElementState[]\n  wasMaybeCollapsed: boolean\n  perspective: ClientPerspective\n  isDragging: boolean\n  dragInsertPosition: DragInsertPosition\n  dragSkeleton: DragSkeleton | null\n  dragShowMinimap: boolean\n  dragShowMinimapPrompt: boolean\n  dragMinimapTransition: boolean\n  dragGroupRect: OverlayRect | null\n}\n\nexport function overlayStateReducer(\n  state: OverlayState,\n  message: OverlayMsg | VisualEditingControllerMsg,\n): OverlayState {\n  const {type} = message\n  let {\n    contextMenu,\n    focusPath,\n    perspective,\n    isDragging,\n    dragInsertPosition,\n    dragShowMinimap,\n    dragShowMinimapPrompt,\n    dragSkeleton,\n    dragMinimapTransition,\n    dragGroupRect,\n  } = state\n  let wasMaybeCollapsed = false\n\n  if (type === 'presentation/focus') {\n    const prevFocusPath = state.focusPath\n\n    focusPath = message.data.path\n\n    if (prevFocusPath !== focusPath) {\n      wasMaybeCollapsed = prevFocusPath.slice(focusPath.length).startsWith('[')\n    }\n  }\n\n  if (type === 'presentation/perspective') {\n    perspective = message.data.perspective\n  }\n\n  if (type === 'element/contextmenu') {\n    if ('sanity' in message) {\n      contextMenu = {node: message.sanity, position: message.position}\n    } else {\n      contextMenu = null\n    }\n  }\n\n  if (\n    type === 'element/click' ||\n    type === 'element/mouseleave' ||\n    type === 'overlay/blur' ||\n    type === 'presentation/blur' ||\n    type === 'presentation/focus'\n  ) {\n    contextMenu = null\n  }\n\n  if (type === 'overlay/dragUpdateInsertPosition') {\n    dragInsertPosition = message.insertPosition\n  }\n\n  if (type === 'overlay/dragStart') {\n    isDragging = true\n  }\n\n  if (message.type === 'overlay/dragUpdateSkeleton') {\n    dragSkeleton = message.skeleton\n  }\n\n  if (type === 'overlay/dragEnd') {\n    isDragging = false\n  }\n\n  if (message.type === 'overlay/dragToggleMinimapPrompt') {\n    dragShowMinimapPrompt = message.display\n  }\n\n  if (type === 'overlay/dragStartMinimapTransition') {\n    dragMinimapTransition = true\n  }\n\n  if (type === 'overlay/dragEndMinimapTransition') {\n    dragMinimapTransition = false\n  }\n\n  if (type === 'overlay/dragUpdateGroupRect') {\n    dragGroupRect = message.groupRect\n  }\n\n  if (type === 'overlay/dragToggleMinimap') {\n    dragShowMinimap = message.display\n  }\n\n  return {\n    ...state,\n    contextMenu,\n    elements: elementsReducer(state.elements, message),\n    dragInsertPosition,\n    dragSkeleton,\n    dragGroupRect,\n    isDragging,\n    focusPath,\n    perspective,\n    wasMaybeCollapsed,\n    dragShowMinimap,\n    dragShowMinimapPrompt,\n    dragMinimapTransition,\n  }\n}\n","import {\n  useCallback,\n  useEffect,\n  useMemo,\n  useState,\n  type FunctionComponent,\n  type PropsWithChildren,\n} from 'react'\nimport type {VisualEditingNode} from '../../types'\nimport {PreviewSnapshotsContext, type PreviewSnapshotsContextValue} from './PreviewSnapshotsContext'\n\nexport const PreviewSnapshotsProvider: FunctionComponent<\n  PropsWithChildren<{\n    comlink?: VisualEditingNode\n  }>\n> = function (props) {\n  const {comlink, children} = props\n\n  const [previewSnapshots, setPreviewSnapshots] = useState<PreviewSnapshotsContextValue>([])\n\n  const fetchPreviewSnapshots = useCallback(\n    async (signal: AbortSignal) => {\n      if (!comlink) return\n      try {\n        const response = await comlink.fetch('visual-editing/preview-snapshots', undefined, {\n          signal,\n          suppressWarnings: true,\n        })\n        setPreviewSnapshots(response.snapshots)\n      } catch {\n        // Fail silently as the app may be communicating with a version of\n        // Presentation that does not support this feature\n      }\n    },\n    [comlink],\n  )\n  useEffect(() => {\n    if (!comlink) return\n\n    const previewSapshotsFetch = new AbortController()\n    const unsub = comlink.onStatus(() => {\n      fetchPreviewSnapshots(previewSapshotsFetch.signal)\n    }, 'connected')\n\n    return () => {\n      previewSapshotsFetch.abort()\n      unsub()\n    }\n  }, [comlink, fetchPreviewSnapshots])\n\n  useEffect(() => {\n    return comlink?.on('presentation/preview-snapshots', (data) => {\n      setPreviewSnapshots(data.snapshots)\n    })\n  }, [comlink])\n\n  const context = useMemo<PreviewSnapshotsContextValue>(() => previewSnapshots, [previewSnapshots])\n  return (\n    <PreviewSnapshotsContext.Provider value={context}>{children}</PreviewSnapshotsContext.Provider>\n  )\n}\n","import type {\n  DocumentSchema,\n  ResolvedSchemaTypeMap,\n  SanityNode,\n  SanityStegaNode,\n  SchemaType,\n  TypeSchema,\n  UnresolvedPath,\n} from '@sanity/presentation-comlink'\nimport {\n  useCallback,\n  useDeferredValue,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n  type FunctionComponent,\n  type PropsWithChildren,\n} from 'react'\nimport type {\n  ElementState,\n  OverlayElementField,\n  OverlayElementParent,\n  VisualEditingNode,\n} from '../../types'\nimport {SchemaContext, type SchemaContextValue} from './SchemaContext'\n\nfunction isSanityNode(node: SanityNode | SanityStegaNode): node is SanityNode {\n  return 'path' in node\n}\n\nfunction isDocumentSchemaType(type: SchemaType): type is DocumentSchema {\n  return type.type === 'document'\n}\n\nfunction isTypeSchemaType(type: SchemaType): type is TypeSchema {\n  return type.type === 'type'\n}\n\nfunction popUnkeyedPathSegments(path: string): string {\n  return path\n    .split('.')\n    .toReversed()\n    .reduce((acc, part) => {\n      if (acc.length) return [part, ...acc]\n      if (part.includes('[_key==')) return [part]\n      return []\n    }, [] as string[])\n    .join('.')\n}\n\nfunction getPathsWithUnresolvedTypes(elements: ElementState[]): {id: string; path: string}[] {\n  return elements.reduce((acc, element) => {\n    const {sanity} = element\n    if (!('id' in sanity)) return acc\n    if (!sanity.path.includes('[_key==')) return acc\n    const path = popUnkeyedPathSegments(sanity.path)\n    if (!acc.find((item) => item.id === sanity.id && item.path === path)) {\n      acc.push({id: sanity.id, path})\n    }\n    return acc\n  }, [] as UnresolvedPath[])\n}\n\nexport const SchemaProvider: FunctionComponent<\n  PropsWithChildren<{\n    comlink?: VisualEditingNode\n    elements: ElementState[]\n  }>\n> = function (props) {\n  const {comlink, children, elements} = props\n\n  const [resolvedTypes, setResolvedTypes] = useState<ResolvedSchemaTypeMap>(new Map())\n\n  const [schema, setSchema] = useState<SchemaType[] | null>(null)\n\n  useEffect(() => {\n    if (!comlink) return\n\n    async function fetchSchema(signal: AbortSignal) {\n      if (!comlink) return\n      try {\n        const response = await comlink.fetch('visual-editing/schema', undefined, {\n          signal,\n          suppressWarnings: true,\n        })\n        setSchema(response.schema)\n      } catch {\n        // Fail silently as the app may be communicating with a version of\n        // Presentation that does not support this feature\n      }\n    }\n    const schemaFetch = new AbortController()\n    const unsub = comlink.onStatus(() => {\n      fetchSchema(schemaFetch.signal)\n    }, 'connected')\n\n    return () => {\n      schemaFetch.abort()\n      unsub()\n    }\n  }, [comlink])\n\n  const reportedPathsRef = useRef<UnresolvedPath[]>([])\n  const paths = getPathsWithUnresolvedTypes(useDeferredValue(elements))\n  const controllerRef = useRef<AbortController | null>(null)\n\n  useEffect(() => {\n    if (!paths.length || !comlink) return\n    // We report a list of paths that reference array items using a _key. We need\n    // to resolve the types of each of these items so we can map them to the\n    // correct schema types. One day CSM might include this data for us.\n    const reportPaths = async (paths: UnresolvedPath[], signal: AbortSignal) => {\n      const initialReportedPaths = reportedPathsRef.current\n      try {\n        reportedPathsRef.current = paths\n        const response = await comlink.fetch(\n          'visual-editing/schema-union-types',\n          {paths},\n          {signal, suppressWarnings: true},\n        )\n        if (signal.aborted) return\n        setResolvedTypes(response.types)\n        controllerRef.current = null\n      } catch {\n        // Fail silently as the app may be communicating with a version of\n        // Presentation that does not support this feature\n      }\n      if (signal.aborted) {\n        reportedPathsRef.current = initialReportedPaths\n      }\n    }\n\n    if (\n      paths.some(\n        (p) => !reportedPathsRef.current.find(({id, path}) => id === p.id && path === p.path),\n      )\n    ) {\n      // Abort any previous requests\n      controllerRef.current?.abort()\n      controllerRef.current = new AbortController()\n      reportPaths(paths, controllerRef.current.signal)\n    }\n  }, [comlink, paths])\n\n  const getType = useCallback(\n    <T extends 'document' | 'type' = 'document'>(\n      node: SanityNode | SanityStegaNode | string,\n      _type?: T,\n    ): T extends 'document' ? DocumentSchema | undefined : TypeSchema | undefined => {\n      const type = _type || 'document'\n      if (\n        !schema ||\n        (typeof node !== 'string' && (!isSanityNode(node) || !Array.isArray(schema)))\n      ) {\n        return undefined\n      }\n      const name = typeof node === 'string' ? node : node.type\n      const filter = type === 'document' ? isDocumentSchemaType : isTypeSchemaType\n      return schema\n        .filter(filter)\n        .find((schemaType) => schemaType.name === name) as T extends 'document'\n        ? DocumentSchema | undefined\n        : TypeSchema | undefined\n    },\n    [schema],\n  )\n\n  const getField = useCallback(\n    (\n      node: SanityNode | SanityStegaNode,\n    ): {\n      field: OverlayElementField\n      parent: OverlayElementParent\n    } => {\n      if (!isSanityNode(node)) {\n        return {\n          field: undefined,\n          parent: undefined,\n        }\n      }\n\n      const schemaType = getType(node)\n\n      if (!schemaType) {\n        return {\n          field: undefined,\n          parent: undefined,\n        }\n      }\n      function fieldFromPath(\n        schemaType: OverlayElementParent,\n        path: string[],\n        parent: OverlayElementParent,\n        prevPath: string[] = [],\n      ): {\n        field: OverlayElementField\n        parent: OverlayElementParent\n      } {\n        if (!schemaType) {\n          return {field: undefined, parent: undefined}\n        }\n\n        const [next, ...rest] = path\n\n        if ('fields' in schemaType) {\n          const objectField = schemaType.fields[next]\n          if (!objectField && 'rest' in schemaType) {\n            return fieldFromPath(schemaType.rest, path, schemaType, prevPath)\n          }\n          if (!rest.length) {\n            return {field: objectField, parent}\n          }\n          if (!objectField) {\n            throw new Error(\n              `[@sanity/visual-editing] No field could be resolved at path: \"${[...prevPath, ...path].join('.')}\"`,\n            )\n          }\n          return fieldFromPath(objectField.value, rest, schemaType, [...prevPath, next])\n        } else if (schemaType.type === 'array') {\n          return fieldFromPath(schemaType.of, path, schemaType, prevPath)\n        } else if (schemaType.type === 'arrayItem') {\n          if (!rest.length) return {field: schemaType, parent}\n          return fieldFromPath(schemaType.value, rest, schemaType, [...prevPath, next])\n        } else if (schemaType.type === 'union') {\n          const name = next.startsWith('[_key==')\n            ? resolvedTypes\n                ?.get((node as SanityNode).id)\n                ?.get([prevPath.join('.'), next].filter(Boolean).join(''))\n            : next\n          return fieldFromPath(\n            schemaType.of.find((item) => (item.type === 'unionOption' ? item.name === name : item)),\n            rest,\n            schemaType,\n            [...prevPath, next],\n          )\n        } else if (schemaType.type === 'unionOption') {\n          if (!next) return {field: schemaType, parent}\n          return fieldFromPath(schemaType.value, path, schemaType, prevPath)\n        } else if (schemaType.type === 'inline') {\n          const type = getType(schemaType.name, 'type')\n          return fieldFromPath((type as TypeSchema).value, path, schemaType, prevPath)\n        }\n        throw new Error(\n          `[@sanity/visual-editing] No field could be resolved at path: \"${[...prevPath, ...path].join('.')}\"`,\n        )\n      }\n\n      const nodePath = node.path.split('.').flatMap((part) => {\n        if (part.includes('[')) {\n          return part.split(/(\\[.+\\])/, 2)\n        }\n        return [part]\n      })\n\n      try {\n        return fieldFromPath(schemaType, nodePath, undefined)\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        if (e instanceof Error) console.warn(e.message)\n        return {field: undefined, parent: undefined}\n      }\n    },\n    [getType, resolvedTypes],\n  )\n\n  const context = useMemo<SchemaContextValue>(() => ({getField, getType}), [getField, getType])\n\n  return <SchemaContext.Provider value={context}>{children}</SchemaContext.Provider>\n}\n","import type {SerializableObject} from '@sanity/presentation-comlink'\nimport {useEffect, useMemo, type FunctionComponent, type PropsWithChildren} from 'react'\nimport type {VisualEditingNode} from '../../types'\nimport {SharedStateContext} from './SharedStateContext'\n\nconst createStore = (initialState: SerializableObject) => {\n  let state = initialState\n  const getState = () => state\n  const listeners = new Set<() => void>()\n  const setState = (fn: (state: SerializableObject) => SerializableObject) => {\n    state = fn(state)\n    listeners.forEach((l) => l())\n  }\n  const subscribe = (listener: () => void) => {\n    listeners.add(listener)\n    return () => listeners.delete(listener)\n  }\n  return {getState, setState, subscribe}\n}\n\nconst store = createStore({})\n\nexport const SharedStateProvider: FunctionComponent<\n  PropsWithChildren<{\n    comlink?: VisualEditingNode\n  }>\n> = (props) => {\n  const {comlink, children} = props\n\n  useEffect(() => {\n    return comlink?.on('presentation/shared-state', (data) => {\n      if ('value' in data) {\n        store.setState((prev) => ({...prev, [data.key]: data.value}))\n      } else {\n        store.setState((prev) => {\n          return Object.fromEntries(Object.entries(prev).filter(([key]) => key !== data.key))\n        })\n      }\n    })\n  }, [comlink])\n\n  useEffect(() => {\n    async function fetch() {\n      const value = await comlink?.fetch('visual-editing/shared-state', undefined, {\n        suppressWarnings: true,\n      })\n      if (value) {\n        store.setState(() => value.state)\n      }\n    }\n    fetch().catch((reason) => {\n      // eslint-disable-next-line no-console\n      console.debug(reason)\n      // eslint-disable-next-line no-console\n      console.warn(\n        '[@sanity/visual-editing]: Failed to fetch shared state. Check your version of `sanity` is up-to-date',\n      )\n    })\n  }, [comlink])\n\n  const value = useMemo(() => ({comlink, store}), [comlink])\n\n  return <SharedStateContext.Provider value={value}>{children}</SharedStateContext.Provider>\n}\n","import {useCallback, type FunctionComponent, type PropsWithChildren} from 'react'\nimport type {VisualEditingNode} from '../../types'\nimport {events, TelemetryContext, type TelemetryContextValue} from './TelemetryContext'\n\nexport const TelemetryProvider: FunctionComponent<\n  PropsWithChildren<{comlink?: VisualEditingNode}>\n> = ({children, comlink}) => {\n  const log = useCallback<TelemetryContextValue>(\n    (name, data) => {\n      if (!comlink) return\n\n      const event = events[name]\n\n      if (!event) {\n        throw new Error(`Telemetry event: ${name} does not exist`)\n      } else {\n        comlink.post('visual-editing/telemetry-log', {event, data})\n      }\n    },\n    [comlink],\n  )\n\n  return <TelemetryContext.Provider value={log}>{children}</TelemetryContext.Provider>\n}\n","import {useEffect, useRef, type MutableRefObject} from 'react'\nimport {createOverlayController} from '../controller'\nimport {useOptimisticActorReady} from '../react/useOptimisticActor'\nimport type {OverlayController, OverlayEventHandler} from '../types'\n\n/**\n * Hook for using an overlay controller\n * @internal\n */\nexport function useController(\n  element: HTMLElement | null,\n  handler: OverlayEventHandler,\n  inFrame: boolean,\n  inPopUp: boolean,\n): MutableRefObject<OverlayController | undefined> {\n  const overlayController = useRef<OverlayController | undefined>(undefined)\n\n  const optimisticActorReady = useOptimisticActorReady()\n\n  useEffect(() => {\n    if (!element) return undefined\n\n    overlayController.current = createOverlayController({\n      handler,\n      overlayElement: element,\n      inFrame,\n      inPopUp,\n      optimisticActorReady,\n    })\n\n    return () => {\n      overlayController.current?.destroy()\n      overlayController.current = undefined\n    }\n  }, [element, handler, inFrame, inPopUp, optimisticActorReady])\n\n  return overlayController\n}\n","import type {VisualEditingControllerMsg} from '@sanity/presentation-comlink'\nimport {useEffect} from 'react'\nimport type {OverlayMsg, VisualEditingNode} from '../types'\n\nexport function usePerspectiveSync(\n  comlink: VisualEditingNode | undefined,\n  dispatch: (value: OverlayMsg | VisualEditingControllerMsg) => void,\n): void {\n  useEffect(() => {\n    const controller = new AbortController()\n    comlink\n      ?.fetch('visual-editing/fetch-perspective', undefined, {\n        signal: controller.signal,\n        suppressWarnings: true,\n      })\n      .then((data) => {\n        dispatch({type: 'presentation/perspective', data})\n      })\n      .catch(() => {\n        // Fail silently as the app may be communicating with a version of\n        // Presentation that does not support this feature\n      })\n\n    const unsub = comlink?.on('presentation/perspective', (data) => {\n      dispatch({type: 'presentation/perspective', data})\n    })\n\n    return () => {\n      unsub?.()\n      controller.abort()\n    }\n  }, [comlink, dispatch])\n}\n","import type {ClientPerspective, ContentSourceMapDocuments} from '@sanity/client'\nimport {useCallback, useEffect, useRef} from 'react'\nimport type {ElementState, SanityNode, VisualEditingNode} from '../types'\n\nfunction isEqualSets(a: Set<string>, b: Set<string>) {\n  if (a === b) return true\n  if (a.size !== b.size) return false\n  for (const value of a) if (!b.has(value)) return false\n  return true\n}\n\n/**\n * Hook for reporting in use documents to Presentation\n * @internal\n */\nexport function useReportDocuments(\n  comlink: VisualEditingNode | undefined,\n  elements: ElementState[],\n  perspective: ClientPerspective,\n): void {\n  const lastReported = useRef<\n    | {\n        nodeIds: Set<string>\n        perspective: ClientPerspective\n      }\n    | undefined\n  >(undefined)\n\n  const reportDocuments = useCallback(\n    (documents: ContentSourceMapDocuments, perspective: ClientPerspective) => {\n      comlink?.post('visual-editing/documents', {\n        documents,\n        perspective,\n      })\n    },\n    [comlink],\n  )\n\n  useEffect(() => {\n    // Report only nodes of type `SanityNode`. Untransformed `SanityStegaNode`\n    // nodes without an `id`, are not reported as they will not contain the\n    // necessary document data.\n    const nodes = elements\n      .map((e) => {\n        const {sanity} = e\n        if (!sanity || !('id' in sanity)) return null\n        return sanity\n      })\n      .filter((s) => !!s) as SanityNode[]\n\n    const nodeIds = new Set<string>(nodes.map((e) => e.id))\n    // Report if:\n    // - Documents not yet reported\n    // - Document IDs changed\n    // - Perspective changed\n    if (\n      !lastReported.current ||\n      !isEqualSets(nodeIds, lastReported.current.nodeIds) ||\n      perspective !== lastReported.current.perspective\n    ) {\n      const documentsOnPage: ContentSourceMapDocuments = Array.from(nodeIds).map((_id) => {\n        const node = nodes.find((node) => node.id === _id)!\n        const {type, projectId: _projectId, dataset: _dataset} = node\n        return _projectId && _dataset\n          ? {_id, _type: type!, _projectId, _dataset}\n          : {_id, _type: type!}\n      })\n      lastReported.current = {nodeIds, perspective}\n      reportDocuments(documentsOnPage, perspective)\n    }\n  }, [elements, perspective, reportDocuments])\n}\n","import type {ClientPerspective} from '@sanity/client'\nimport {getDraftId, getPublishedId} from '@sanity/client/csm'\nimport type {Status} from '@sanity/comlink'\nimport {type VisualEditingControllerMsg} from '@sanity/presentation-comlink'\nimport {\n  isHTMLAnchorElement,\n  isHTMLElement,\n  LayerProvider,\n  PortalProvider,\n  studioTheme,\n  ThemeProvider,\n  usePrefersDark,\n} from '@sanity/ui/_visual-editing'\nimport {\n  useCallback,\n  useEffect,\n  useMemo,\n  useReducer,\n  useRef,\n  useState,\n  type FunctionComponent,\n} from 'react'\nimport {styled} from 'styled-components'\nimport {useOptimisticActor, useOptimisticActorReady} from '../react/useOptimisticActor'\nimport type {\n  OverlayComponentResolver,\n  OverlayEventHandler,\n  OverlayMsg,\n  OverlayPluginDefinition,\n  VisualEditingNode,\n} from '../types'\nimport {sanityNodesExistInSameArray} from '../util/findSanityNodes'\nimport {useDragEndEvents} from '../util/useDragEvents'\nimport {ContextMenu} from './context-menu/ContextMenu'\nimport {ElementOverlay} from './ElementOverlay'\nimport {OverlayDragGroupRect} from './OverlayDragGroupRect'\nimport {OverlayDragInsertMarker} from './OverlayDragInsertMarker'\nimport {OverlayDragPreview} from './OverlayDragPreview'\nimport {OverlayMinimapPrompt} from './OverlayMinimapPrompt'\nimport {overlayStateReducer} from './overlayStateReducer'\nimport {PreviewSnapshotsProvider} from './preview/PreviewSnapshotsProvider'\nimport {SchemaProvider} from './schema/SchemaProvider'\nimport {SharedStateProvider} from './shared-state/SharedStateProvider'\nimport {TelemetryProvider} from './telemetry/TelemetryProvider'\nimport {useTelemetry} from './telemetry/useTelemetry'\nimport {useController} from './useController'\nimport {usePerspectiveSync} from './usePerspectiveSync'\nimport {useReportDocuments} from './useReportDocuments'\n\nconst Root = styled.div<{\n  $zIndex?: string | number\n}>`\n  background-color: transparent;\n  direction: ltr;\n  inset: 0;\n  pointer-events: none;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  z-index: ${({$zIndex}) => $zIndex ?? '9999999'};\n`\n\nfunction raf2(fn: () => void) {\n  let r0: number | undefined = undefined\n  let r1: number | undefined = undefined\n\n  r0 = requestAnimationFrame(() => {\n    r1 = requestAnimationFrame(fn)\n  })\n\n  return () => {\n    if (r0 !== undefined) cancelAnimationFrame(r0)\n    if (r1 !== undefined) cancelAnimationFrame(r1)\n  }\n}\n\nconst DocumentReporter: FunctionComponent<{\n  documentIds: string[]\n  perspective: ClientPerspective\n}> = (props) => {\n  const {documentIds} = props\n  const [uniqueIds, setUniqueIds] = useState<string[]>([])\n\n  useEffect(() => {\n    setUniqueIds((prev) => {\n      const next = Array.from(new Set(documentIds))\n      return prev.length === next.length &&\n        prev.reduce((acc, prevId) => acc.filter((id) => id !== prevId), next)?.length === 0\n        ? prev\n        : next\n    })\n  }, [documentIds])\n  const actor = useOptimisticActor()\n\n  useEffect(() => {\n    for (const id of uniqueIds) {\n      actor.send({type: 'observe', documentId: getDraftId(id)})\n      actor.send({type: 'observe', documentId: getPublishedId(id)})\n    }\n    return () => {\n      for (const id of uniqueIds) {\n        actor.send({type: 'unobserve', documentId: getDraftId(id)})\n        actor.send({type: 'unobserve', documentId: getPublishedId(id)})\n      }\n    }\n  }, [actor, uniqueIds])\n\n  return null\n}\n\nconst OverlaysController: FunctionComponent<{\n  comlink?: VisualEditingNode\n  dispatch: (value: OverlayMsg | VisualEditingControllerMsg) => void\n  inFrame: boolean\n  inPopUp: boolean\n  onDrag: (x: number, y: number) => void\n  overlayEnabled: boolean\n  rootElement: HTMLElement | null\n}> = (props) => {\n  const {comlink, dispatch, inFrame, inPopUp, onDrag, overlayEnabled, rootElement} = props\n  const {dispatchDragEndEvent} = useDragEndEvents()\n  const sendTelemetry = useTelemetry()\n\n  const overlayEventHandler: OverlayEventHandler = useCallback(\n    (message) => {\n      if (message.type === 'element/click') {\n        const {sanity} = message\n        comlink?.post('visual-editing/focus', sanity)\n\n        sendTelemetry('Visual Editing Overlay Clicked', null)\n      } else if (message.type === 'overlay/activate') {\n        comlink?.post('visual-editing/toggle', {enabled: true})\n      } else if (message.type === 'overlay/deactivate') {\n        comlink?.post('visual-editing/toggle', {enabled: false})\n      } else if (message.type === 'overlay/dragEnd') {\n        const {insertPosition, target, dragGroup, flow, preventInsertDefault} = message\n\n        dispatchDragEndEvent({insertPosition, target, dragGroup, flow, preventInsertDefault})\n\n        if (insertPosition) {\n          sendTelemetry('Visual Editing Drag Sequence Completed', null)\n        }\n      } else if (message.type === 'overlay/dragUpdateCursorPosition') {\n        onDrag(message.x, message.y)\n\n        return\n      } else if (message.type === 'overlay/dragToggleMinimap' && message.display === true) {\n        sendTelemetry('Visual Editing Drag Minimap Enabled', null)\n      } else if (message.type === 'overlay/setCursor') {\n        const {element, cursor} = message\n\n        if (cursor) {\n          element.style.cursor = cursor\n        } else {\n          element.style.removeProperty('cursor')\n        }\n      }\n\n      dispatch(message)\n    },\n    [comlink, dispatch, dispatchDragEndEvent, onDrag, sendTelemetry],\n  )\n\n  const controller = useController(rootElement, overlayEventHandler, inFrame, inPopUp)\n\n  useEffect(() => {\n    if (overlayEnabled) {\n      controller.current?.activate()\n    } else {\n      controller.current?.deactivate()\n    }\n  }, [controller, overlayEnabled])\n\n  return null\n}\n\n/**\n * @internal\n */\nexport const Overlays: FunctionComponent<{\n  comlink?: VisualEditingNode\n  comlinkStatus?: Status\n  componentResolver?: OverlayComponentResolver\n  plugins?: OverlayPluginDefinition[]\n  inFrame: boolean\n  inPopUp: boolean\n  zIndex?: string | number\n}> = (props) => {\n  const {\n    comlink,\n    comlinkStatus,\n    componentResolver: _componentResolver,\n    inFrame,\n    inPopUp,\n    zIndex,\n  } = props\n\n  const prefersDark = usePrefersDark()\n\n  const [\n    {\n      contextMenu,\n      dragInsertPosition,\n      dragShowMinimap,\n      dragShowMinimapPrompt,\n      dragSkeleton,\n      elements,\n      isDragging,\n      perspective,\n      wasMaybeCollapsed,\n      dragMinimapTransition,\n      dragGroupRect,\n    },\n    dispatch,\n  ] = useReducer(overlayStateReducer, {\n    contextMenu: null,\n    dragInsertPosition: null,\n    dragShowMinimap: false,\n    dragShowMinimapPrompt: false,\n    dragSkeleton: null,\n    elements: [],\n    focusPath: '',\n    isDragging: false,\n    perspective: 'published',\n    wasMaybeCollapsed: false,\n    dragMinimapTransition: false,\n    dragGroupRect: null,\n  })\n  const [rootElement, setRootElement] = useState<HTMLElement | null>(null)\n  const [overlayEnabled, setOverlayEnabled] = useState(true)\n\n  useEffect(() => {\n    const unsubs = [\n      comlink?.on('presentation/focus', (data) => {\n        dispatch({type: 'presentation/focus', data})\n      }),\n      comlink?.on('presentation/blur', (data) => {\n        dispatch({type: 'presentation/blur', data})\n      }),\n      comlink?.on('presentation/toggle-overlay', () => {\n        setOverlayEnabled((enabled) => !enabled)\n      }),\n    ].filter(Boolean)\n\n    return () => unsubs.forEach((unsub) => unsub!())\n  }, [comlink])\n\n  usePerspectiveSync(comlink, dispatch)\n\n  useReportDocuments(comlink, elements, perspective)\n\n  const updateDragPreviewCustomProps = useCallback(\n    (x: number, y: number) => {\n      if (!rootElement) return\n\n      rootElement.style.setProperty('--drag-preview-x', `${x}px`)\n      rootElement.style.setProperty('--drag-preview-y', `${y - window.scrollY}px`)\n    },\n    [rootElement],\n  )\n\n  useEffect(() => {\n    const handleClick = (event: MouseEvent) => {\n      const target = event.target\n\n      // We only need to modify the default behavior if the target is a link\n      const targetsLink = Boolean(\n        isHTMLAnchorElement(target) || (isHTMLElement(target) && target.closest('a')),\n      )\n\n      if (targetsLink && event.altKey) {\n        event.preventDefault()\n        event.stopPropagation()\n        const newEvent = new MouseEvent(event.type, {\n          ...event,\n          altKey: false,\n          bubbles: true,\n          cancelable: true,\n        })\n        event.target?.dispatchEvent(newEvent)\n      }\n    }\n\n    const handleKeyUp = (e: KeyboardEvent) => {\n      if (isAltKey(e)) {\n        setOverlayEnabled((enabled) => !enabled)\n      }\n    }\n\n    const handleKeydown = (e: KeyboardEvent) => {\n      if (isAltKey(e)) {\n        setOverlayEnabled((enabled) => !enabled)\n      }\n\n      if (isHotkey(['mod', '\\\\'], e)) {\n        setOverlayEnabled((enabled) => !enabled)\n      }\n    }\n\n    window.addEventListener('click', handleClick)\n    window.addEventListener('keydown', handleKeydown)\n    window.addEventListener('keyup', handleKeyUp)\n\n    return () => {\n      window.removeEventListener('click', handleClick)\n      window.removeEventListener('keydown', handleKeydown)\n      window.removeEventListener('keyup', handleKeyUp)\n    }\n  }, [setOverlayEnabled])\n\n  const [overlaysFlash, setOverlaysFlash] = useState(false)\n  const [fadingOut, setFadingOut] = useState(false)\n  const fadeOutTimeoutRef = useRef<NodeJS.Timeout | undefined>(undefined)\n\n  // Flash overlays when they are enabled\n  useEffect(() => {\n    if (overlayEnabled) {\n      return raf2(() => {\n        setOverlaysFlash(true)\n        raf2(() => {\n          setFadingOut(true)\n          fadeOutTimeoutRef.current = setTimeout(() => {\n            setFadingOut(false)\n            setOverlaysFlash(false)\n          }, 1500)\n        })\n      })\n    } else if (fadeOutTimeoutRef.current) {\n      clearTimeout(fadeOutTimeoutRef.current)\n      setOverlaysFlash(false)\n      setFadingOut(false)\n    }\n\n    return\n  }, [overlayEnabled])\n\n  const documentIds = useMemo(() => {\n    return elements.flatMap((element) => ('id' in element.sanity ? [element.sanity.id] : []))\n  }, [elements])\n\n  const closeContextMenu = useCallback(() => {\n    dispatch({type: 'overlay/blur'})\n  }, [])\n\n  const optimisticActorReady = useOptimisticActorReady()\n\n  const componentResolver = useMemo(() => {\n    return optimisticActorReady ? _componentResolver : undefined\n  }, [_componentResolver, optimisticActorReady])\n\n  const elementsToRender = useMemo(() => {\n    if (((inFrame || inPopUp) && comlinkStatus !== 'connected') || isDragging) {\n      return []\n    }\n\n    return elements\n      .filter((e) => e.activated || e.focused)\n      .map(({id, element, focused, hovered, rect, sanity, dragDisabled, targets, elementType}) => {\n        const draggable =\n          !dragDisabled &&\n          !!element.getAttribute('data-sanity') &&\n          optimisticActorReady &&\n          elements.some((e) =>\n            'id' in e.sanity && 'id' in sanity\n              ? sanityNodesExistInSameArray(e.sanity, sanity) && e.sanity.path !== sanity.path\n              : false,\n          )\n\n        return (\n          <ElementOverlay\n            comlink={comlink}\n            componentResolver={componentResolver}\n            plugins={props.plugins}\n            element={element}\n            enableScrollIntoView={!isDragging && !dragMinimapTransition && !dragShowMinimap}\n            key={id}\n            id={id}\n            focused={focused}\n            hovered={hovered}\n            node={sanity}\n            rect={rect}\n            // When inside a popup window we want actions to show up on hover, but iframes should hide them\n            showActions={!inFrame}\n            draggable={draggable}\n            isDragging={isDragging || dragMinimapTransition}\n            wasMaybeCollapsed={focused && wasMaybeCollapsed}\n            targets={targets}\n            elementType={elementType}\n          />\n        )\n      })\n  }, [\n    componentResolver,\n    props.plugins,\n    dragMinimapTransition,\n    dragShowMinimap,\n    elements,\n    inFrame,\n    inPopUp,\n    isDragging,\n    optimisticActorReady,\n    comlink,\n    comlinkStatus,\n    wasMaybeCollapsed,\n  ])\n\n  return (\n    <TelemetryProvider comlink={comlink}>\n      <ThemeProvider scheme={prefersDark ? 'dark' : 'light'} theme={studioTheme} tone=\"transparent\">\n        <LayerProvider>\n          <PortalProvider element={rootElement}>\n            <SchemaProvider comlink={comlink} elements={elements}>\n              <PreviewSnapshotsProvider comlink={comlink}>\n                <SharedStateProvider comlink={comlink}>\n                  <Root\n                    data-fading-out={fadingOut ? '' : undefined}\n                    data-overlays={overlaysFlash ? '' : undefined}\n                    ref={setRootElement}\n                    $zIndex={zIndex}\n                  >\n                    <DocumentReporter documentIds={documentIds} perspective={perspective} />\n                    <OverlaysController\n                      comlink={comlink}\n                      dispatch={dispatch}\n                      inFrame={inFrame}\n                      inPopUp={inPopUp}\n                      onDrag={updateDragPreviewCustomProps}\n                      overlayEnabled={overlayEnabled}\n                      rootElement={rootElement}\n                    />\n                    {contextMenu && <ContextMenu {...contextMenu} onDismiss={closeContextMenu} />}\n                    {elementsToRender}\n\n                    {isDragging && !dragMinimapTransition && (\n                      <>\n                        {dragInsertPosition && (\n                          <OverlayDragInsertMarker dragInsertPosition={dragInsertPosition} />\n                        )}\n                        {dragShowMinimapPrompt && <OverlayMinimapPrompt />}\n                        {dragGroupRect && <OverlayDragGroupRect dragGroupRect={dragGroupRect} />}\n                      </>\n                    )}\n                    {isDragging && dragSkeleton && <OverlayDragPreview skeleton={dragSkeleton} />}\n                  </Root>\n                </SharedStateProvider>\n              </PreviewSnapshotsProvider>\n            </SchemaProvider>\n          </PortalProvider>\n        </LayerProvider>\n      </ThemeProvider>\n    </TelemetryProvider>\n  )\n}\n\nconst IS_MAC =\n  typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform)\n\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}\nfunction isAltKey(event: KeyboardEvent): boolean {\n  return event.key === 'Alt'\n}\n","import {useEffect, useRef, type FunctionComponent} from 'react'\nimport type {VisualEditingNode, VisualEditingOptions} from '../types'\n\n/**\n * @internal\n */\nexport const Refresh: FunctionComponent<\n  {\n    comlink: VisualEditingNode\n  } & Required<Pick<VisualEditingOptions, 'refresh'>>\n> = (props) => {\n  const {comlink, refresh} = props\n\n  const manualRefreshRef = useRef(0)\n  const mutationRefreshRef = useRef(0)\n\n  useEffect(\n    () =>\n      comlink.on('presentation/refresh', (data) => {\n        if (data.source === 'manual') {\n          clearTimeout(manualRefreshRef.current)\n          const promise = refresh(data)\n          if (promise === false) return\n          comlink.post('visual-editing/refreshing', data)\n          let timedOut = false\n          manualRefreshRef.current = window.setTimeout(() => {\n            comlink.post('visual-editing/refreshed', data)\n            timedOut = true\n          }, 3000)\n          promise?.finally?.(() => {\n            if (timedOut) return\n            clearTimeout(manualRefreshRef.current)\n            comlink.post('visual-editing/refreshed', data)\n          })\n        } else if (data.source === 'mutation') {\n          clearTimeout(mutationRefreshRef.current)\n          const promise = refresh(data)\n          if (promise === false) return\n          comlink.post('visual-editing/refreshing', data)\n          // Send an additional refresh to account for Content Lake eventual consistency\n          mutationRefreshRef.current = window.setTimeout(() => {\n            const promise = refresh(data)\n            if (promise === false) return\n            comlink.post('visual-editing/refreshing', data)\n            // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n            promise?.finally?.(() => {\n              comlink.post('visual-editing/refreshed', data)\n            }) || comlink.post('visual-editing/refreshed', data)\n          }, 1000)\n          // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n          promise?.finally?.(() => {\n            comlink.post('visual-editing/refreshed', data)\n          }) || comlink.post('visual-editing/refreshed', data)\n        }\n      }),\n    [comlink, refresh],\n  )\n\n  return null\n}\n","import {createNode, createNodeMachine, type Status} from '@sanity/comlink'\nimport {\n  createCompatibilityActors,\n  type VisualEditingControllerMsg,\n  type VisualEditingNodeMsg,\n} from '@sanity/presentation-comlink'\nimport {useEffect, useState} from 'react'\nimport type {VisualEditingNode} from '../types'\n\n/**\n * Hook for maintaining a channel between overlays and the presentation tool\n * @internal\n */\nexport function useComlink(active: boolean = true): [VisualEditingNode | undefined, Status] {\n  const [node, setNode] = useState<VisualEditingNode>()\n  const [status, setStatus] = useState<Status>('idle')\n\n  useEffect(() => {\n    if (!active) return\n    const instance = createNode<VisualEditingNodeMsg, VisualEditingControllerMsg>(\n      {\n        name: 'visual-editing',\n        connectTo: 'presentation',\n      },\n      createNodeMachine<VisualEditingNodeMsg, VisualEditingControllerMsg>().provide({\n        actors: createCompatibilityActors<VisualEditingNodeMsg>(),\n      }),\n    )\n    const unsub = instance.onStatus(() => setStatus('connected'), 'connected')\n\n    setNode(instance)\n    const stop = instance.start()\n\n    return () => {\n      unsub()\n      stop()\n      setNode(undefined)\n    }\n  }, [active])\n\n  /**\n   * Handle reporting of status to the presentation tool in case of connection failure due to misconfigured URL origin\n   */\n  useEffect(() => {\n    /**\n     * We only need to report status if the node is not connected\n     */\n    if (status === 'connected') return\n\n    const controller = new AbortController()\n    window.addEventListener(\n      'message',\n      ({data, origin}: MessageEvent<unknown>) => {\n        /**\n         * Detect if Presentation is asking if Visual Editing is here but misconfigured\n         * @TODO this should probably be a feature built into `comlink`, as it's a common problem for apps dealing with iframes.\n         */\n        if (\n          data &&\n          typeof data === 'object' &&\n          'domain' in data &&\n          data.domain === 'sanity/channels' &&\n          'from' in data &&\n          data.from === 'presentation' &&\n          'type' in data &&\n          data.type === 'presentation/status'\n        ) {\n          /**\n           * We only send this message to the parent window, which supports Presentation loading the page in an iframe.\n           * This avoids letting other iframes on the page, or other openers, from getting a response.\n           */\n          window.parent.postMessage(\n            {\n              domain: 'sanity/channels',\n              type: 'visual-editing/status',\n              data: {origin: location.origin},\n            },\n            /**\n             * Using the same origin ensures that if the parent window don't have the same origin the message won't be sent.\n             * This grants some protection against spoofing, as malicious iframes can't easily call this event and trigger the Presentation Tool to think there's a failing state.\n             */\n            origin,\n          )\n        }\n      },\n      {signal: controller.signal},\n    )\n    return () => {\n      controller.abort()\n    }\n  }, [status])\n\n  return [node, status]\n}\n","import {type ListenEvent} from '@sanity/client'\nimport {merge, ReplaySubject, Subject, type Observable, type ObservedValueOf} from 'rxjs'\nimport type {VisualEditingNode} from '../../types'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype SharedListenEvent = ListenEvent<Record<string, any>>\n\n/**\n * Creates a single, shared, listener EventSource that strems remote mutations, and notifies when it's online (welcome), offline (reconnect).\n */\nexport function createSharedListener(comlink: VisualEditingNode): Observable<SharedListenEvent> {\n  // Welcome events could be received before the listener has been subscribed\n  // to. Using a ReplaySubject will ensure the welcome event is re-emitted when\n  // a new subscriber arrives.\n  const incomingConnection$ = new ReplaySubject<SharedListenEvent>(1)\n  const incomingMutations$ = new Subject<SharedListenEvent>()\n\n  comlink\n    .fetch('visual-editing/snapshot-welcome', undefined, {suppressWarnings: true})\n    .then((data) => {\n      incomingConnection$.next(data.event)\n    })\n    .catch(() => {\n      // Fail silently as the app may be communicating with a version of\n      // Presentation that does not support this feature\n    })\n\n  comlink.on('presentation/snapshot-event', (data) => {\n    // Welcome events are still emitted by Presentation for backwards\n    // compatibility. We don't need them anymore as we explicitly fetch the\n    // welcome event, so filter them out here.\n    if (data.event.type === 'reconnect') {\n      incomingConnection$.next(data.event)\n    }\n    if (data.event.type === 'mutation') {\n      incomingMutations$.next(data.event)\n    }\n  })\n\n  return merge(incomingConnection$, incomingMutations$)\n}\n\nexport type SharedListenerEvents = ObservedValueOf<ReturnType<typeof createSharedListener>>\n","import {useEffect} from 'react'\nimport {createActor} from 'xstate'\nimport {setActor} from '../optimistic/context'\nimport {createSharedListener} from '../optimistic/state/createSharedListener'\nimport {createDatasetMutator} from '../optimistic/state/datasetMutator'\nimport type {VisualEditingNode} from '../types'\n\n/**\n * Hook for maintaining a channel between overlays and the presentation tool\n * @internal\n */\nexport function useDatasetMutator(comlink: VisualEditingNode | undefined): void {\n  useEffect(() => {\n    if (!comlink) return\n    const listener = createSharedListener(comlink)\n    const datasetMutator = createDatasetMutator(comlink)\n    const mutator = createActor(datasetMutator, {\n      // @ts-expect-error @todo\n      input: {client: {withConfig: () => {}}, sharedListener: listener},\n    })\n\n    mutator.start()\n\n    // Fetch features to determine if optimistic updates are supported\n    const featuresFetch = new AbortController()\n    comlink\n      .fetch('visual-editing/features', undefined, {\n        signal: featuresFetch.signal,\n        suppressWarnings: true,\n      })\n      .then((data) => {\n        if (data.features['optimistic']) {\n          setActor(mutator)\n        }\n      })\n      .catch(() => {\n        // eslint-disable-next-line no-console\n        console.warn(\n          '[@sanity/visual-editing] Package version mismatch detected: Please update your Sanity studio to prevent potential compatibility issues.',\n        )\n      })\n\n    return () => {\n      mutator.stop()\n      featuresFetch.abort()\n    }\n  }, [comlink])\n}\n","import {isMaybePreviewIframe, isMaybePreviewWindow} from '@sanity/presentation-comlink'\nimport {useEffect, useState} from 'react'\nimport {createPortal} from 'react-dom'\nimport type {VisualEditingOptions} from '../types'\nimport {History} from './History'\nimport {Meta} from './Meta'\nimport {Overlays} from './Overlays'\nimport {Refresh} from './Refresh'\nimport {useComlink} from './useComlink'\nimport {useDatasetMutator} from './useDatasetMutator'\n\n/**\n * @public\n */\nexport const VisualEditing = (props: VisualEditingOptions & {portal: boolean}): React.ReactNode => {\n  const {components, plugins, history, portal = true, refresh, zIndex} = props\n\n  const [inFrame, setInFrame] = useState<boolean | null>(null)\n  const [inPopUp, setInPopUp] = useState<boolean | null>(null)\n  useEffect(() => {\n    setInFrame(isMaybePreviewIframe())\n    setInPopUp(isMaybePreviewWindow())\n  }, [])\n\n  const [portalElement, setPortalElement] = useState<HTMLElement | null>(null)\n  useEffect(() => {\n    if (portal === false) return undefined\n    const node = document.createElement('sanity-visual-editing')\n    document.documentElement.appendChild(node)\n    setPortalElement(node)\n    return () => {\n      setPortalElement(null)\n      if (document.documentElement.contains(node)) {\n        document.documentElement.removeChild(node)\n      }\n    }\n  }, [portal])\n\n  const [comlink, comlinkStatus] = useComlink(inFrame === true || inPopUp === true)\n  useDatasetMutator(comlinkStatus === 'connected' ? comlink : undefined)\n\n  const children = (\n    <>\n      {inFrame !== null && inPopUp !== null && (\n        <Overlays\n          comlink={comlink}\n          comlinkStatus={comlinkStatus}\n          componentResolver={components}\n          plugins={plugins}\n          inFrame={inFrame}\n          inPopUp={inPopUp}\n          zIndex={zIndex}\n        />\n      )}\n      {comlink && (\n        <>\n          <History comlink={comlink} history={history} />\n          <Meta comlink={comlink} />\n          {refresh && <Refresh comlink={comlink} refresh={refresh} />}\n        </>\n      )}\n    </>\n  )\n\n  if (portal === false || !portalElement) return children\n\n  return createPortal(children, portalElement)\n}\nVisualEditing.displayName = 'VisualEditing'\n"],"names":["History","props","$","_c","comlink","history","t0","t1","on","data","update","useEffect","t2","t3","subscribe","title","document","post","Meta","sendMeta","observer","MutationObserver","mutation","target","nodeName","observe","head","subtree","characterData","childList","disconnect","getReferenceNodeAndInsertPosition","position","top","right","bottom","left","node","sanity","useDragEndEvents","getDocument","useDocuments","handler","e","insertPosition","preventInsertDefault","detail","reference","doc","id","key","targetKey","hasExplicitKey","getArrayItemKeyAndParentPath","path","arrayPath","referenceItemKey","patch","getSnapshot","snapshot","elementValue","getFromPath","at","remove","_key","insert","window","addEventListener","removeEventListener","dispatchDragEndEvent","_temp","Symbol","for","event","customEvent","CustomEvent","cancelable","dispatchEvent","SchemaContext","createContext","useSchema","context","useContext","Error","getArrayRemoveAction","type","getArrayRemovePatches","getArrayInsertAction","insertType","getArrayInsertPatches","getDuplicateAction","getArrayDuplicatePatches","getContextMenuItems","field","parent","getContextMenuArrayItems","getContextMenuUnionItems","Promise","resolve","getDuplicateItem","label","icon","CopyIcon","action","telemetryEvent","getRemoveItems","RemoveIcon","getMoveItems","withDivider","items","groupItems","moveUpPatches","moveDownPatches","moveFirstPatches","moveLastPatches","all","getArrayMovePatches","length","push","PublishIcon","ArrowUpIcon","ArrowDownIcon","UnpublishIcon","SortIcon","InsertAboveIcon","name","InsertBelowIcon","InsertMenuWrapper","width","onSelect","boundaryElement","arrow","constrainSize","floatingBoundary","padding","placement","fallbackPlacements","preventOverflow","__unstable_margins","jsx","InsertMenu","t4","MenuGroup","options","insertMenu","views","some","view","undefined","component","sendTelemetry","schemaType","of","filter","item","map","t","getNodeIcon","POPOVER_MARGINS","ContextMenuItem","onDismiss","useTelemetry","onClick","MenuDivider","hotkeys","MenuItem","t5","itemIndex","Component","ContextMenu","x","y","setBoundaryElement","useState","getField","setItems","fetchContextMenuItems","items_0","t6","getBoundingClientRect","height","contextMenuReferenceElement","t7","t8","t9","minWidth","maxWidth","t10","Box","Text","Spinner","t11","t12","Stack","t13","jsxs","Flex","t14","Fragment","i","t15","Menu","t16","t17","t18","t19","Popover","t20","PopoverPortal","getLinkHref","href","referer","parsed","URL","location","origin","hash","slice","pathname","search","searchParams","set","toString","PreviewSnapshotsContext","usePreviewSnapshots","isReactElementOverlayComponent","isValidElement","Root","styled","Card","Actions","HUD","MenuWrapper","Tab","ActionOpen","Labels","ExclusivePluginContainer","div","createIntentLink","baseUrl","tool","workspace","createEditUrl","pathToUrlString","studioPath","fromString","ElementOverlayInner","element","focused","componentResolver","showActions","draggable","targets","elementType","onActivateExclusivePlugin","onMenuOpenChange","getType","previewSnapshots","bb0","find","_id","getContext","node_0","nodeElement","schemaType_0","value","targetElement","legacyComponentContext","pluginContexts","resolverContexts","customComponents","useCustomComponents","nodePluginCollections","useResolvedNodePlugins","plugins","__html","DocumentIcon","menuId","useId","_temp2","showMenu","handleLabelClick","DragHandleIcon","_temp3","MenuButton","animate","tone","Button","EllipsisVerticalIcon","PointerEvents","nodePluginCollection_0","index","textTransform","nodePluginCollection","exclusive","PlugIcon","_temp4","Array","isArray","Component_1","props_0","ElementOverlay","memo","hovered","rect","wasMaybeCollapsed","enableScrollIntoView","ref","useRef","scrolledIntoViewRef","w","h","transform","style","current","scrollIntoView","behavior","actions","block","inline","scrollMode","isNearTop","setIsNearTop","io","IntersectionObserver","intersection","boundingClientRect","threshold","activeExclusivePlugin","setActiveExclusivePlugin","closeExclusivePluginView","plugin","handleExclusivePluginClick","_temp5","ExclusivePluginComponent","menuOpen","setMenuOpen","PopoverBackground","t21","componentContexts","componentContext","instance","uuid","hud","forEach","guard","resolved","_temp6","Link","useSyncExternalStore","_temp7","_temp8","ctx","stopPropagation","nodePluginCollection_1","Component_0","onStoreChange","handlePopState","OverlayDragGroupRect","dragGroupRect","border","pointerEvents","markerThickness","lerp","v0","v1","OverlayDragInsertMarker","dragInsertPosition","flow","startX","endX","offset","Math","min","offset_0","offset_1","startX_0","startY","endY","offset_2","offset_3","offset_4","background","borderRadius","zIndex","$scaleFactor","$width","$height","clamp","number","max","inMin","inMax","outMin","outMax","mapped","OverlayDragPreview","skeleton","maxSkeletonWidth","innerWidth","scaleFactor","offsetX","offsetY","prefersDark","usePrefersDark","theme","useTheme_v2","radius","T0","T1","childRects","imageRects","textRects","color","r_1","r","from","tagName","r_0","OverlayMinimapPrompt","Hotkeys","ExpandIcon","elementsReducer","elements","message","activated","dragDisabled","clickedElement","overlayStateReducer","state","contextMenu","focusPath","perspective","isDragging","dragShowMinimap","dragShowMinimapPrompt","dragSkeleton","dragMinimapTransition","prevFocusPath","startsWith","display","groupRect","PreviewSnapshotsProvider","children","setPreviewSnapshots","signal","response","fetch","suppressWarnings","snapshots","fetchPreviewSnapshots","previewSapshotsFetch","AbortController","unsub","onStatus","abort","isSanityNode","isDocumentSchemaType","isTypeSchemaType","popUnkeyedPathSegments","split","toReversed","reduce","acc","part","includes","join","getPathsWithUnresolvedTypes","SchemaProvider","Map","resolvedTypes","setResolvedTypes","schema","setSchema","fetchSchema","schemaFetch","reportedPathsRef","useDeferredValue","paths","controllerRef","reportPaths","paths_0","signal_0","initialReportedPaths","response_0","aborted","types","p","_type","fieldFromPath","schemaType_1","path_0","prevPath","next","rest","objectField","fields","name_0","get","Boolean","type_0","nodePath","flatMap","console","warn","createStore","initialState","getState","listeners","Set","setState","fn","l","listener","add","delete","store","SharedStateProvider","catch","value_0","SharedStateContext","prev","prev_0","Object","fromEntries","entries","reason","debug","TelemetryProvider","events","log","TelemetryContext","useController","inFrame","inPopUp","overlayController","optimisticActorReady","useOptimisticActorReady","createOverlayController","overlayElement","destroy","usePerspectiveSync","dispatch","controller","then","data_0","isEqualSets","a","b","size","has","useReportDocuments","lastReported","documents","perspective_0","reportDocuments","nodes","nodeIds","documentsOnPage","projectId","_projectId","dataset","_dataset","e_0","s","$zIndex","raf2","r0","r1","requestAnimationFrame","cancelAnimationFrame","DocumentReporter","documentIds","uniqueIds","setUniqueIds","actor","useOptimisticActor","id_0","send","documentId","getDraftId","getPublishedId","id_1","OverlaysController","onDrag","overlayEnabled","rootElement","enabled","dragGroup","cursor","removeProperty","activate","deactivate","Overlays","comlinkStatus","_componentResolver","useReducer","setRootElement","setOverlayEnabled","unsubs","setProperty","scrollY","updateDragPreviewCustomProps","handleClick","handleKeyUp","isAltKey","handleKeydown","isHotkey","overlaysFlash","setOverlaysFlash","fadingOut","setFadingOut","fadeOutTimeoutRef","setTimeout","clearTimeout","closeContextMenu","_temp9","element_0","getAttribute","e_2","sanityNodesExistInSameArray","elementsToRender","t22","t23","t24","t25","t26","LayerProvider","PortalProvider","t27","ThemeProvider","studioTheme","t28","IS_MAC","test","navigator","platform","MODIFIERS","alt","ctrl","mod","shift","keys","every","toUpperCase","prevId","isHTMLAnchorElement","isHTMLElement","closest","altKey","preventDefault","newEvent","MouseEvent","bubbles","enabled_0","enabled_1","enabled_2","e_1","Refresh","refresh","manualRefreshRef","mutationRefreshRef","source","promise","timedOut","finally","promise_0","promise_1","useComlink","active","setNode","status","setStatus","createNode","connectTo","createNodeMachine","provide","actors","createCompatibilityActors","stop","start","domain","postMessage","createSharedListener","incomingConnection$","ReplaySubject","incomingMutations$","Subject","merge","useDatasetMutator","datasetMutator","createDatasetMutator","mutator","createActor","input","client","withConfig","sharedListener","featuresFetch","features","optimistic","setActor","VisualEditing","components","portal","setInFrame","setInPopUp","isMaybePreviewIframe","isMaybePreviewWindow","portalElement","setPortalElement","createElement","documentElement","appendChild","contains","removeChild","createPortal","displayName"],"mappings":"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"}