{"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/ElementOverlay.tsx","../../src/ui/preview/usePreviewSnapshots.ts","../../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/sendTelemetry.ts","../../src/ui/usePerspectiveSync.tsx","../../src/ui/useReportDocuments.ts","../../src/ui/Overlays.tsx","../../src/ui/useController.tsx","../../src/ui/Refresh.tsx","../../src/ui/useDatasetMutator.ts","../../src/optimistic/state/createSharedListener.ts","../../src/ui/VisualEditing.tsx","../../src/ui/useComlink.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  ResolvedSchemaTypeMap,\n  SanityNode,\n  SanityStegaNode,\n  SchemaType,\n  TypeSchema,\n} from '@repo/visual-editing-helpers'\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  resolvedTypes: ResolvedSchemaTypeMap\n  schema: SchemaType[]\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 type {\n  SanityNode,\n  SchemaArrayItem,\n  SchemaNode,\n  SchemaUnionNode,\n  SchemaUnionOption,\n} from '@repo/visual-editing-helpers'\nimport {\n  ArrowDownIcon,\n  ArrowUpIcon,\n  CopyIcon,\n  InsertAboveIcon,\n  InsertBelowIcon,\n  PublishIcon,\n  RemoveIcon,\n  SortIcon,\n  UnpublishIcon,\n} from '@sanity/icons'\nimport type {SchemaType} from '@sanity/types'\nimport {MenuGroup} from '@sanity/ui'\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    },\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    },\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    })\n  }\n  if (moveUpPatches.length) {\n    groupItems.push({\n      type: 'action',\n      label: 'Up',\n      icon: ArrowUpIcon,\n      action: () => doc.patch(moveUpPatches),\n    })\n  }\n  if (moveDownPatches.length) {\n    groupItems.push({\n      type: 'action',\n      label: 'Down',\n      icon: ArrowDownIcon,\n      action: () => doc.patch(moveDownPatches),\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    })\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  })\n  items.push({\n    type: 'action',\n    label: 'Insert after',\n    icon: InsertBelowIcon,\n    action: getArrayInsertAction(node, doc, field.name, 'after'),\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}) => {\n        const onSelect = (schemaType: SchemaType) => {\n          const action = getArrayInsertAction(node, doc, schemaType.name, 'before')\n          action()\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}) => {\n        const onSelect = (schemaType: SchemaType) => {\n          const action = getArrayInsertAction(node, doc, schemaType.name, 'after')\n          action()\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        }\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        }\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'\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 {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\n  const onClick = useCallback(() => {\n    if (node.type === 'action') {\n      node.action?.()\n      onDismiss?.()\n    }\n  }, [node, onDismiss])\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} />\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 '@repo/visual-editing-helpers'\nimport {createContext} from 'react'\n\nexport type PreviewSnapshotsContextValue = PreviewSnapshot[]\n\nexport const PreviewSnapshotsContext = createContext<PreviewSnapshotsContextValue | null>(null)\n","import {pathToUrlString} from '@repo/visual-editing-helpers'\nimport {createEditUrl, studioPath} from '@sanity/client/csm'\nimport {DocumentIcon, DragHandleIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {\n  isValidElement,\n  memo,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useSyncExternalStore,\n  type CSSProperties,\n  type FunctionComponent,\n  type ReactElement,\n} from 'react'\nimport scrollIntoView from 'scroll-into-view-if-needed'\nimport {styled} from 'styled-components'\nimport {PointerEvents} from '../overlay-components/components/PointerEvents'\nimport type {\n  ElementFocusedState,\n  ElementNode,\n  OverlayComponent,\n  OverlayComponentResolver,\n  OverlayComponentResolverContext,\n  OverlayRect,\n  SanityNode,\n  SanityStegaNode,\n} from '../types'\nimport {getLinkHref} from '../util/getLinkHref'\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 ReactElement => {\n  return isValidElement(component)\n}\n\nexport interface ElementOverlayProps {\n  componentResolver?: OverlayComponentResolver\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}\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] & {\n    pointer-events: all;\n  }\n`\n\nconst ActionOpen = styled(Card)`\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 Tab = styled(Flex)`\n  bottom: 100%;\n  cursor: pointer;\n  pointer-events: none;\n  position: absolute;\n  left: 0;\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\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: pathToUrlString(studioPath.fromString(path)),\n  })\n}\n\nconst ElementOverlayInner: FunctionComponent<ElementOverlayProps> = (props) => {\n  const {element, focused, componentResolver, node, showActions, draggable} = props\n\n  const {getField, getType} = useSchema()\n  const schemaType = getType(node)\n  const {field, parent} = getField(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 componentContext = useMemo<OverlayComponentResolverContext | undefined>(() => {\n    if (!('path' in node)) return undefined\n    if (!field || !schemaType) return undefined\n    const type = field.value.type\n\n    return {\n      document: schemaType,\n      element,\n      field,\n      focused: !!focused,\n      node,\n      parent,\n      type,\n    }\n  }, [schemaType, element, field, focused, node, parent])\n\n  const customComponents = useCustomComponents(componentContext, componentResolver)\n\n  const icon = schemaType?.icon ? (\n    <div dangerouslySetInnerHTML={{__html: schemaType.icon}} />\n  ) : (\n    <DocumentIcon />\n  )\n\n  return (\n    <>\n      {showActions ? (\n        <Actions gap={1} paddingBottom={1} data-sanity-overlay-element>\n          <Link href={href} />\n        </Actions>\n      ) : null}\n\n      {title && (\n        <Tab gap={1} paddingBottom={1}>\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            <Text size={1} weight=\"medium\">\n              {title}\n            </Text>\n          </Labels>\n        </Tab>\n      )}\n\n      {Array.isArray(customComponents)\n        ? customComponents.map(({component: Component, props}, i) => {\n            return (\n              <Component key={i} PointerEvents={PointerEvents} {...componentContext!} {...props} />\n            )\n          })\n        : customComponents}\n    </>\n  )\n}\n\nexport const ElementOverlay = memo(function ElementOverlay(props: ElementOverlayProps) {\n  const {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  return (\n    <Root\n      data-focused={focused ? '' : undefined}\n      data-hovered={hovered ? '' : undefined}\n      ref={ref}\n      style={style}\n    >\n      {hovered && <ElementOverlayInner {...props} />}\n    </Root>\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 {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 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'\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'\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 '@repo/visual-editing-helpers'\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        },\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 {...e, sanity: message.sanity, rect: message.rect}\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/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 {SanityNode, VisualEditingControllerMsg} from '@repo/visual-editing-helpers'\nimport type {ClientPerspective} from '@sanity/client'\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 {useEffect, useMemo, useState, type FunctionComponent, type PropsWithChildren} 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  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 '@repo/visual-editing-helpers'\nimport {\n  useCallback,\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  const fetchSchema = useCallback(\n    async (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 (e) {\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 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, fetchSchema])\n\n  const reportedPathsRef = useRef<UnresolvedPath[]>([])\n\n  useEffect(() => {\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      if (!paths.length || !comlink) return\n      try {\n        const response = await comlink.fetch(\n          'visual-editing/schema-union-types',\n          {paths},\n          {signal, suppressWarnings: true},\n        )\n        setResolvedTypes(response.types)\n        reportedPathsRef.current = paths\n      } catch (e) {\n        // Fail silently as the app may be communicating with a version of\n        // Presentation that does not support this feature\n      }\n    }\n\n    const controller = new AbortController()\n    const paths = getPathsWithUnresolvedTypes(elements)\n    if (\n      paths.some(\n        (p) => !reportedPathsRef.current.find(({id, path}) => id === p.id && path === p.path),\n      )\n    ) {\n      reportPaths(paths, controller.signal)\n    }\n    return () => controller.abort()\n  }, [comlink, elements])\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>(\n    () => ({\n      getField,\n      getType,\n      resolvedTypes,\n      schema: schema || [],\n    }),\n    [getField, getType, resolvedTypes, schema],\n  )\n  return <SchemaContext.Provider value={context}>{children}</SchemaContext.Provider>\n}\n","import type {SerializableObject} from '@repo/visual-editing-helpers'\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/presentation` 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 {defineEvent} from '@sanity/telemetry'\nimport type {VisualEditingNode} from '../../types'\n\nconst events = {\n  'Visual Editing Drag Sequence Completed': defineEvent({\n    name: 'Visual Editing Drag Sequence Completed',\n    description: 'An array is successfully reordered using drag and drop.',\n    version: 1,\n  }),\n}\n\ntype EventDataMap = {\n  [K in keyof typeof events]: (typeof events)[K] extends ReturnType<typeof defineEvent<infer T>>\n    ? T\n    : never\n}\n\nfunction sendTelemetry<K extends keyof typeof events>(\n  name: K,\n  data: EventDataMap[K] extends void ? null | undefined : EventDataMap[K],\n  comlink: VisualEditingNode | undefined,\n): void {\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\nexport {sendTelemetry}\n","import type {VisualEditingControllerMsg} from '@repo/visual-editing-helpers'\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 {DRAFTS_PREFIX} from '@repo/visual-editing-helpers/csm'\nimport 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 (!('id' in sanity)) return null\n        return {\n          ...sanity,\n          id: 'isDraft' in sanity ? `${DRAFTS_PREFIX}${sanity.id}` : sanity.id,\n        }\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 {isAltKey, isHotkey, type VisualEditingControllerMsg} from '@repo/visual-editing-helpers'\nimport type {ClientPerspective} from '@sanity/client'\nimport type {Status} from '@sanity/comlink'\nimport {\n  isHTMLAnchorElement,\n  isHTMLElement,\n  LayerProvider,\n  PortalProvider,\n  studioTheme,\n  ThemeProvider,\n  usePrefersDark,\n} from '@sanity/ui'\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  VisualEditingNode,\n} from '../types'\nimport {getDraftId, getPublishedId} from '../util/documents'\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 {sendTelemetry} from './telemetry/sendTelemetry'\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\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  onDrag: (x: number, y: number) => void\n  overlayEnabled: boolean\n  rootElement: HTMLElement | null\n}> = (props) => {\n  const {comlink, dispatch, inFrame, onDrag, overlayEnabled, rootElement} = props\n  const {dispatchDragEndEvent} = useDragEndEvents()\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      } 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, comlink)\n        }\n      } else if (message.type === 'overlay/dragUpdateCursorPosition') {\n        onDrag(message.x, message.y)\n\n        return\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],\n  )\n\n  const controller = useController(rootElement, overlayEventHandler, inFrame)\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  componentResolver?: OverlayComponentResolver\n  inFrame: boolean\n  zIndex?: string | number\n}> = (props) => {\n  const {comlink, componentResolver: _componentResolver, inFrame, zIndex} = props\n\n  const [status, setStatus] = useState<Status>()\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      comlink?.onStatus((status) => {\n        setStatus(status as Status)\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 && status !== '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}) => {\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            componentResolver={componentResolver}\n            element={element}\n            enableScrollIntoView={!isDragging && !dragMinimapTransition && !dragShowMinimap}\n            key={id}\n            focused={focused}\n            hovered={hovered}\n            node={sanity}\n            rect={rect}\n            showActions={!inFrame}\n            draggable={draggable}\n            isDragging={isDragging || dragMinimapTransition}\n            wasMaybeCollapsed={focused && wasMaybeCollapsed}\n          />\n        )\n      })\n  }, [\n    componentResolver,\n    dragMinimapTransition,\n    dragShowMinimap,\n    elements,\n    inFrame,\n    isDragging,\n    optimisticActorReady,\n    status,\n    wasMaybeCollapsed,\n  ])\n\n  return (\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                    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  )\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): MutableRefObject<OverlayController | undefined> {\n  const overlayController = useRef<OverlayController | 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      optimisticActorReady,\n    })\n\n    return () => {\n      overlayController.current?.destroy()\n      overlayController.current = undefined\n    }\n  }, [element, handler, inFrame, optimisticActorReady])\n\n  return overlayController\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            promise?.finally?.(() => {\n              comlink.post('visual-editing/refreshed', data)\n            }) || comlink.post('visual-editing/refreshed', data)\n          }, 1000)\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 {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    const unsub = comlink.onStatus(() => {\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    }, 'connected')\n\n    return () => {\n      mutator.stop()\n      featuresFetch.abort()\n      unsub()\n    }\n  }, [comlink])\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, 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, history, portal = true, refresh, zIndex} = props\n\n  const [inFrame, setInFrame] = useState<boolean | null>(null)\n  useEffect(() => setInFrame(window.self !== window.top || Boolean(window.opener)), [])\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 = useComlink(inFrame === true)\n  useDatasetMutator(comlink)\n\n  const children = (\n    <>\n      {inFrame !== null && (\n        <Overlays\n          comlink={comlink}\n          componentResolver={components}\n          inFrame={inFrame}\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","import {\n  createCompatibilityActors,\n  type VisualEditingControllerMsg,\n  type VisualEditingNodeMsg,\n} from '@repo/visual-editing-helpers'\nimport {createNode, createNodeMachine} from '@sanity/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 {\n  const [node, setNode] = useState<VisualEditingNode>()\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\n    let timeout = 0\n    const stop = instance.start()\n    // Wait with forwarding the comlink until the connection is established\n    const unsubscribe = instance.onStatus(() => {\n      // Due to race conditions in when Presentation Tool loads up components with handlers for comlink, we need to wait a bit before forwarding the comlink instance\n      timeout = window.setTimeout(() => {\n        setNode(instance)\n      }, 3_000)\n    }, 'connected')\n\n    return () => {\n      clearTimeout(timeout)\n      unsubscribe()\n      stop()\n      setNode(undefined)\n    }\n  }, [active])\n\n  return node\n}\n"],"names":["Object","defineProperty","exports","value","jsxRuntime","require","reactCompilerRuntime","React","ReactDOM","createDataAttribute_index","PointerEvents","mutations","SharedStateContext","mutate","csm","transformSanityNodeData","scrollIntoView","comlink","xstate","context","rxjs","optimistic_index","_interopDefaultCompat","e","default","scrollIntoView__default","History","props","$","_c","history","t0","t1","t2","t3","on","data","update","useEffect","subscribe","title","document","post","Meta","sendMeta","observer","MutationObserver","mutation","target","nodeName","observe","head","subtree","characterData","childList","disconnect","_temp","event","customEvent","CustomEvent","detail","cancelable","window","dispatchEvent","SchemaContext","createContext","useSchema","useContext","Error","getArrayRemoveAction","node","doc","type","patch","async","getSnapshot","getArrayRemovePatches","getArrayInsertAction","insertType","position","getArrayInsertPatches","getDuplicateAction","getArrayDuplicatePatches","getContextMenuItems","field","parent","items","push","getDuplicateItem","getRemoveItems","getMoveItems","label","icon","InsertAboveIcon","action","name","InsertBelowIcon","getContextMenuArrayItems","options","insertMenu","width","views","some","view","undefined","component","boundaryElement","jsx","InsertMenuWrapper","onSelect","schemaType","of","filter","item","map","t","getNodeIcon","getContextMenuUnionItems","Promise","resolve","CopyIcon","RemoveIcon","withDivider","groupItems","moveUpPatches","moveDownPatches","moveFirstPatches","moveLastPatches","all","getArrayMovePatches","length","PublishIcon","ArrowUpIcon","ArrowDownIcon","UnpublishIcon","SortIcon","t4","Symbol","for","arrow","constrainSize","floatingBoundary","padding","placement","fallbackPlacements","preventOverflow","__unstable_margins","InsertMenu","MenuGroup","fontSize","b","popover","space","POPOVER_MARGINS","ContextMenuItem","onDismiss","onClick","MenuDivider","hotkeys","MenuItem","text","disabled","t5","itemIndex","Component","ContextMenu","x","y","setBoundaryElement","useState","getField","getDocument","useDocuments","setItems","t6","fetchContextMenuItems","id","items_0","getBoundingClientRect","bottom","left","right","top","height","contextMenuReferenceElement","t7","t8","t9","t10","minWidth","maxWidth","Box","flex","Text","size","Spinner","t11","t12","t13","t14","t15","Stack","children","weight","jsxs","Flex","gap","Fragment","i","Menu","m","style","t16","t17","t18","t19","t20","Popover","open","content","PopoverPortal","getLinkHref","href","referer","parsed","URL","location","origin","hash","slice","pathname","search","searchParams","set","toString","PreviewSnapshotsContext","Root","styled","Card","Actions","ActionOpen","Tab","Labels","ElementOverlayInner","element","focused","componentResolver","showActions","draggable","getType","path","baseUrl","tool","workspace","createEditUrl","pathToUrlString","studioPath","fromString","createIntentLink","previewSnapshots","usePreviewSnapshots","bb0","find","snapshot","_id","bb1","componentContext","customComponents","resolved","isReactElementOverlayComponent","isValidElement","Array","isArray","useCustomComponents","dangerouslySetInnerHTML","__html","DocumentIcon","paddingBottom","Link","marginRight","className","DragHandleIcon","T","props_0","ElementOverlay","memo","hovered","rect","wasMaybeCollapsed","enableScrollIntoView","ref","useRef","scrolledIntoViewRef","w","h","transform","current","behavior","actions","block","inline","scrollMode","useSyncExternalStore","_temp2","_temp3","as","rel","onStoreChange","handlePopState","addEventListener","removeEventListener","OverlayDragGroupRect","dragGroupRect","border","pointerEvents","lerp","v0","v1","OverlayDragInsertMarker","dragInsertPosition","offsetMultiplier","markerThickness","startX","endX","offset","Math","min","startY","endY","max","background","borderRadius","zIndex","div","$scaleFactor","$width","$height","OverlayDragPreview","skeleton","maxSkeletonWidth","innerWidth","scaleFactor","offsetX","offsetY","prefersDark","usePrefersDark","u","theme","useTheme_v2","radius","number","inMin","inMax","outMin","outMax","clamp","childRects","imageRects","textRects","color","from","r_1","r","fill","viewBox","shadow","overflow","tone","scheme","tagName","r_0","OverlayMinimapPrompt","align","Hotkeys","keys","ExpandIcon","E","elementsReducer","elements","message","activated","sanity","dragDisabled","clickedElement","overlayStateReducer","state","contextMenu","focusPath","perspective","isDragging","dragShowMinimap","dragShowMinimapPrompt","dragSkeleton","dragMinimapTransition","prevFocusPath","startsWith","insertPosition","display","groupRect","PreviewSnapshotsProvider","setPreviewSnapshots","snapshots","Provider","isSanityNode","isDocumentSchemaType","isTypeSchemaType","SchemaProvider","Map","resolvedTypes","setResolvedTypes","schema","setSchema","signal","response","fetch","suppressWarnings","fetchSchema","schemaFetch","AbortController","unsub","onStatus","abort","reportedPathsRef","reportPaths","controller","paths_0","reduce","acc","includes","split","toReversed","part","join","popUnkeyedPathSegments","getPathsWithUnresolvedTypes","paths","p","signal_0","response_0","types","_type","node_0","schemaType_0","nodePath","flatMap","fieldFromPath","schemaType_1","path_0","prevPath","next","rest","objectField","fields","name_0","get","Boolean","console","warn","store","initialState","listeners","Set","getState","setState","fn","forEach","l","add","listener","delete","createStore","SharedStateProvider","catch","value_0","prev","key","fromEntries","entries","reason","debug","events","description","version","e_0","s","DRAFTS_PREFIX","$zIndex","raf2","r0","r1","requestAnimationFrame","cancelAnimationFrame","DocumentReporter","documentIds","uniqueIds","setUniqueIds","actor","useOptimisticActor","id_0","send","documentId","getDraftId","getPublishedId","id_1","OverlaysController","dispatch","inFrame","onDrag","overlayEnabled","rootElement","dispatchDragEndEvent","handler","preventInsertDefault","reference","getReferenceNodeAndInsertPosition","targetKey","hasExplicitKey","getArrayItemKeyAndParentPath","arrayPath","referenceItemKey","elementValue","getFromPath","at","remove","_key","insert","useDragEndEvents","enabled","dragGroup","flow","sendTelemetry","cursor","removeProperty","useController","overlayController","optimisticActorReady","useOptimisticActorReady","createOverlayController","overlayElement","destroy","activate","deactivate","Overlays","_componentResolver","status","setStatus","useReducer","setRootElement","setOverlayEnabled","unsubs","data_0","status_0","usePerspectiveSync","then","useReportDocuments","lastReported","documents","perspective_0","reportDocuments","nodes","nodeIds","a","has","isEqualSets","documentsOnPage","projectId","_projectId","dataset","_dataset","setProperty","scrollY","updateDragPreviewCustomProps","handleClick","_temp4","handleKeyUp","isAltKey","_temp5","handleKeydown","_temp6","isHotkey","_temp7","overlaysFlash","setOverlaysFlash","fadingOut","setFadingOut","fadeOutTimeoutRef","setTimeout","clearTimeout","_temp8","closeContextMenu","_temp9","element_0","getAttribute","e_2","sanityNodesExistInSameArray","elementsToRender","t21","t22","t23","t24","t25","t26","t27","LayerProvider","PortalProvider","ThemeProvider","studioTheme","prevId","isHTMLAnchorElement","isHTMLElement","closest","altKey","preventDefault","stopPropagation","newEvent","MouseEvent","bubbles","enabled_0","enabled_1","enabled_2","e_1","Refresh","refresh","manualRefreshRef","mutationRefreshRef","source","promise","timedOut","finally","promise_0","promise_1","useDatasetMutator","incomingConnection$","ReplaySubject","incomingMutations$","Subject","merge","createSharedListener","datasetMutator","createDatasetMutator","mutator","createActor","input","client","withConfig","sharedListener","start","featuresFetch","features","optimistic","setActor","stop","VisualEditing","components","portal","setInFrame","self","opener","portalElement","setPortalElement","createElement","documentElement","appendChild","contains","removeChild","active","setNode","instance","createNode","connectTo","createNodeMachine","provide","actors","createCompatibilityActors","timeout","unsubscribe","useComlink","createPortal","displayName","createDataAttribute","c","useOptimistic","emptyActor","createDocumentMutator"],"mappings":"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"}