{"version":3,"file":"index.cjs","sources":["../src/clipboard-serializer.ts","../src/index.ts"],"sourcesContent":["import { Slice } from '@tiptap/pm/model';\r\nimport { EditorView } from '@tiptap/pm/view';\r\nimport * as pmView from '@tiptap/pm/view';\r\n\r\nfunction getPmView() {\r\n  try {\r\n      return pmView;\r\n  } catch (error) {\r\n      return null;\r\n  }\r\n}\r\n\r\n\r\nexport function serializeForClipboard(view: EditorView, slice: Slice) {\r\n  // Newer Tiptap/ProseMirror\r\n  // @ts-ignore\r\n  if (view && typeof view.serializeForClipboard === 'function') {\r\n    return view.serializeForClipboard(slice);\r\n  }\r\n\r\n  // Older version fallback\r\n  const proseMirrorView = getPmView();\r\n  // @ts-ignore\r\n  if (proseMirrorView && typeof proseMirrorView?.__serializeForClipboard === 'function') {\r\n    // @ts-ignore\r\n    return proseMirrorView.__serializeForClipboard(view, slice);\r\n  }\r\n\r\n  throw new Error('No supported clipboard serialization method found.');\r\n}\r\n","import { Extension } from '@tiptap/core';\r\nimport {\r\n  NodeSelection,\r\n  Plugin,\r\n  PluginKey,\r\n  TextSelection,\r\n} from '@tiptap/pm/state';\r\nimport { Fragment, Slice, Node } from '@tiptap/pm/model';\r\nimport { EditorView } from '@tiptap/pm/view';\r\nimport { serializeForClipboard } from './clipboard-serializer';\r\n\r\nexport interface GlobalDragHandleOptions {\r\n  /**\r\n   * The width of the drag handle\r\n   */\r\n  dragHandleWidth: number;\r\n\r\n  /**\r\n   * The treshold for scrolling\r\n   */\r\n  scrollTreshold: number;\r\n\r\n  /*\r\n   * The css selector to query for the drag handle. (eg: '.custom-handle').\r\n   * If handle element is found, that element will be used as drag handle. If not, a default handle will be created\r\n   */\r\n  dragHandleSelector?: string;\r\n\r\n  /**\r\n   * Tags to be excluded for drag handle\r\n   */\r\n  excludedTags: string[];\r\n\r\n  /**\r\n   * Custom nodes to be included for drag handle\r\n   */\r\n  customNodes: string[];\r\n}\r\nfunction absoluteRect(node: Element) {\r\n  const data = node.getBoundingClientRect();\r\n  const modal = node.closest('[role=\"dialog\"]');\r\n\r\n  if (modal && window.getComputedStyle(modal).transform !== 'none') {\r\n    const modalRect = modal.getBoundingClientRect();\r\n\r\n    return {\r\n      top: data.top - modalRect.top,\r\n      left: data.left - modalRect.left,\r\n      width: data.width,\r\n    };\r\n  }\r\n  return {\r\n    top: data.top,\r\n    left: data.left,\r\n    width: data.width,\r\n  };\r\n}\r\n\r\nfunction nodeDOMAtCoords(\r\n  coords: { x: number; y: number },\r\n  options: GlobalDragHandleOptions,\r\n) {\r\n  const selectors = [\r\n    'li',\r\n    'p:not(:first-child)',\r\n    'pre',\r\n    'blockquote',\r\n    'h1',\r\n    'h2',\r\n    'h3',\r\n    'h4',\r\n    'h5',\r\n    'h6',\r\n    ...options.customNodes.map((node) => `[data-type=${node}]`),\r\n  ].join(', ');\r\n  return document\r\n    .elementsFromPoint(coords.x, coords.y)\r\n    .find(\r\n      (elem: Element) =>\r\n        elem.parentElement?.matches?.('.ProseMirror') ||\r\n        elem.matches(selectors),\r\n    );\r\n}\r\nfunction nodePosAtDOM(\r\n  node: Element,\r\n  view: EditorView,\r\n  options: GlobalDragHandleOptions,\r\n) {\r\n  const boundingRect = node.getBoundingClientRect();\r\n\r\n  return view.posAtCoords({\r\n    left: boundingRect.left + 50 + options.dragHandleWidth,\r\n    top: boundingRect.top + 1,\r\n  })?.inside;\r\n}\r\n\r\nfunction calcNodePos(pos: number, view: EditorView) {\r\n  const $pos = view.state.doc.resolve(pos);\r\n  if ($pos.depth > 1) return $pos.before($pos.depth);\r\n  return pos;\r\n}\r\n\r\nexport function DragHandlePlugin(\r\n  options: GlobalDragHandleOptions & { pluginKey: string },\r\n) {\r\n  let listType = '';\r\n  function handleDragStart(event: DragEvent, view: EditorView) {\r\n    view.focus();\r\n\r\n    if (!event.dataTransfer) return;\r\n\r\n    const node = nodeDOMAtCoords(\r\n      {\r\n        x: event.clientX + 50 + options.dragHandleWidth,\r\n        y: event.clientY,\r\n      },\r\n      options,\r\n    );\r\n\r\n    if (!(node instanceof Element)) return;\r\n\r\n    let draggedNodePos = nodePosAtDOM(node, view, options);\r\n    if (draggedNodePos == null || draggedNodePos < 0) return;\r\n    draggedNodePos = calcNodePos(draggedNodePos, view);\r\n\r\n    const { from, to } = view.state.selection;\r\n    const diff = from - to;\r\n\r\n    const fromSelectionPos = calcNodePos(from, view);\r\n    let differentNodeSelected = false;\r\n\r\n    const nodePos = view.state.doc.resolve(fromSelectionPos);\r\n\r\n    // Check if nodePos points to the top level node\r\n    if (nodePos.node().type.name === 'doc') differentNodeSelected = true;\r\n    else {\r\n      const nodeSelection = NodeSelection.create(\r\n        view.state.doc,\r\n        nodePos.before(),\r\n      );\r\n\r\n      // Check if the node where the drag event started is part of the current selection\r\n      differentNodeSelected = !(\r\n        draggedNodePos + 1 >= nodeSelection.$from.pos &&\r\n        draggedNodePos <= nodeSelection.$to.pos\r\n      );\r\n    }\r\n    let selection = view.state.selection;\r\n    if (\r\n      !differentNodeSelected &&\r\n      diff !== 0 &&\r\n      !(view.state.selection instanceof NodeSelection)\r\n    ) {\r\n      const endSelection = NodeSelection.create(view.state.doc, to - 1);\r\n      selection = TextSelection.create(\r\n        view.state.doc,\r\n        draggedNodePos,\r\n        endSelection.$to.pos,\r\n      );\r\n    } else {\r\n      selection = NodeSelection.create(view.state.doc, draggedNodePos);\r\n\r\n      // if inline node is selected, e.g mention -> go to the parent node to select the whole node\r\n      // if table row is selected, go to the parent node to select the whole node\r\n      if (\r\n        (selection as NodeSelection).node.type.isInline ||\r\n        (selection as NodeSelection).node.type.name === 'tableRow'\r\n      ) {\r\n        let $pos = view.state.doc.resolve(selection.from);\r\n        selection = NodeSelection.create(view.state.doc, $pos.before());\r\n      }\r\n    }\r\n    view.dispatch(view.state.tr.setSelection(selection));\r\n\r\n    // If the selected node is a list item, we need to save the type of the wrapping list e.g. OL or UL\r\n    if (\r\n      view.state.selection instanceof NodeSelection &&\r\n      view.state.selection.node.type.name === 'listItem'\r\n    ) {\r\n      listType = node.parentElement!.tagName;\r\n    }\r\n\r\n    const slice = view.state.selection.content();\r\n    const { dom, text } = serializeForClipboard(view, slice);\r\n\r\n    event.dataTransfer.clearData();\r\n    event.dataTransfer.setData('text/html', dom.innerHTML);\r\n    event.dataTransfer.setData('text/plain', text);\r\n    event.dataTransfer.effectAllowed = 'copyMove';\r\n\r\n    event.dataTransfer.setDragImage(node, 0, 0);\r\n\r\n    view.dragging = { slice, move: event.ctrlKey };\r\n  }\r\n\r\n  let dragHandleElement: HTMLElement | null = null;\r\n\r\n  function hideDragHandle() {\r\n    if (dragHandleElement) {\r\n      dragHandleElement.classList.add('hide');\r\n    }\r\n  }\r\n\r\n  function showDragHandle() {\r\n    if (dragHandleElement) {\r\n      dragHandleElement.classList.remove('hide');\r\n    }\r\n  }\r\n\r\n  function hideHandleOnEditorOut(event: MouseEvent) {\r\n    if (event.target instanceof Element) {\r\n      // Check if the relatedTarget class is still inside the editor\r\n      const relatedTarget = event.relatedTarget as HTMLElement;\r\n      const isInsideEditor =\r\n        relatedTarget?.classList.contains('tiptap') ||\r\n        relatedTarget?.classList.contains('drag-handle');\r\n\r\n      if (isInsideEditor) return;\r\n    }\r\n    hideDragHandle();\r\n  }\r\n\r\n  return new Plugin({\r\n    key: new PluginKey(options.pluginKey),\r\n    view: (view) => {\r\n      const handleBySelector = options.dragHandleSelector\r\n        ? document.querySelector<HTMLElement>(options.dragHandleSelector)\r\n        : null;\r\n      dragHandleElement = handleBySelector ?? document.createElement('div');\r\n      dragHandleElement.draggable = true;\r\n      dragHandleElement.dataset.dragHandle = '';\r\n      dragHandleElement.classList.add('drag-handle');\r\n\r\n      function onDragHandleDragStart(e: DragEvent) {\r\n        handleDragStart(e, view);\r\n      }\r\n\r\n      dragHandleElement.addEventListener('dragstart', onDragHandleDragStart);\r\n\r\n      function onDragHandleDrag(e: DragEvent) {\r\n        hideDragHandle();\r\n        let scrollY = window.scrollY;\r\n        if (e.clientY < options.scrollTreshold) {\r\n          window.scrollTo({ top: scrollY - 30, behavior: 'smooth' });\r\n        } else if (window.innerHeight - e.clientY < options.scrollTreshold) {\r\n          window.scrollTo({ top: scrollY + 30, behavior: 'smooth' });\r\n        }\r\n      }\r\n\r\n      dragHandleElement.addEventListener('drag', onDragHandleDrag);\r\n\r\n      hideDragHandle();\r\n\r\n      if (!handleBySelector) {\r\n        view?.dom?.parentElement?.appendChild(dragHandleElement);\r\n      }\r\n      view?.dom?.parentElement?.addEventListener(\r\n        'mouseout',\r\n        hideHandleOnEditorOut,\r\n      );\r\n\r\n      return {\r\n        destroy: () => {\r\n          if (!handleBySelector) {\r\n            dragHandleElement?.remove?.();\r\n          }\r\n          dragHandleElement?.removeEventListener('drag', onDragHandleDrag);\r\n          dragHandleElement?.removeEventListener(\r\n            'dragstart',\r\n            onDragHandleDragStart,\r\n          );\r\n          dragHandleElement = null;\r\n          view?.dom?.parentElement?.removeEventListener(\r\n            'mouseout',\r\n            hideHandleOnEditorOut,\r\n          );\r\n        },\r\n      };\r\n    },\r\n    props: {\r\n      handleDOMEvents: {\r\n        mousemove: (view, event) => {\r\n          if (!view.editable) {\r\n            return;\r\n          }\r\n\r\n          const node = nodeDOMAtCoords(\r\n            {\r\n              x: event.clientX + 50 + options.dragHandleWidth,\r\n              y: event.clientY,\r\n            },\r\n            options,\r\n          );\r\n\r\n          const notDragging = node?.closest('.not-draggable');\r\n          const excludedTagList = options.excludedTags\r\n            .concat(['ol', 'ul'])\r\n            .join(', ');\r\n\r\n          if (\r\n            !(node instanceof Element) ||\r\n            node.matches(excludedTagList) ||\r\n            notDragging\r\n          ) {\r\n            hideDragHandle();\r\n            return;\r\n          }\r\n\r\n          const compStyle = window.getComputedStyle(node);\r\n          const parsedLineHeight = parseInt(compStyle.lineHeight, 10);\r\n          const lineHeight = isNaN(parsedLineHeight)\r\n            ? parseInt(compStyle.fontSize) * 1.2\r\n            : parsedLineHeight;\r\n          const paddingTop = parseInt(compStyle.paddingTop, 10);\r\n\r\n          const rect = absoluteRect(node);\r\n\r\n          rect.top += (lineHeight - 24) / 2;\r\n          rect.top += paddingTop;\r\n          // Li markers\r\n          if (node.matches('ul:not([data-type=taskList]) li, ol li')) {\r\n            rect.left -= options.dragHandleWidth;\r\n          }\r\n          rect.width = options.dragHandleWidth;\r\n\r\n          if (!dragHandleElement) return;\r\n\r\n          dragHandleElement.style.left = `${rect.left - rect.width}px`;\r\n          dragHandleElement.style.top = `${rect.top}px`;\r\n          showDragHandle();\r\n        },\r\n        keydown: () => {\r\n          hideDragHandle();\r\n        },\r\n        mousewheel: () => {\r\n          hideDragHandle();\r\n        },\r\n        // dragging class is used for CSS\r\n        dragstart: (view) => {\r\n          view.dom.classList.add('dragging');\r\n        },\r\n        drop: (view, event) => {\r\n          view.dom.classList.remove('dragging');\r\n          hideDragHandle();\r\n          let droppedNode: Node | null = null;\r\n          const dropPos = view.posAtCoords({\r\n            left: event.clientX,\r\n            top: event.clientY,\r\n          });\r\n\r\n          if (!dropPos) return;\r\n\r\n          if (view.state.selection instanceof NodeSelection) {\r\n            droppedNode = view.state.selection.node;\r\n          }\r\n          if (!droppedNode) return;\r\n\r\n          const resolvedPos = view.state.doc.resolve(dropPos.pos);\r\n\r\n          const isDroppedInsideList =\r\n            resolvedPos.parent.type.name === 'listItem';\r\n\r\n          // If the selected node is a list item and is not dropped inside a list, we need to wrap it inside <ol> tag otherwise ol list items will be transformed into ul list item when dropped\r\n          if (\r\n            view.state.selection instanceof NodeSelection &&\r\n            view.state.selection.node.type.name === 'listItem' &&\r\n            !isDroppedInsideList &&\r\n            listType == 'OL'\r\n          ) {\r\n            const newList = view.state.schema.nodes.orderedList?.createAndFill(\r\n              null,\r\n              droppedNode,\r\n            );\r\n            const slice = new Slice(Fragment.from(newList), 0, 0);\r\n            view.dragging = { slice, move: event.ctrlKey };\r\n          }\r\n        },\r\n        dragend: (view) => {\r\n          view.dom.classList.remove('dragging');\r\n        },\r\n      },\r\n    },\r\n  });\r\n}\r\n\r\nconst GlobalDragHandle = Extension.create({\r\n  name: 'globalDragHandle',\r\n\r\n  addOptions() {\r\n    return {\r\n      dragHandleWidth: 20,\r\n      scrollTreshold: 100,\r\n      excludedTags: [],\r\n      customNodes: [],\r\n    };\r\n  },\r\n\r\n  addProseMirrorPlugins() {\r\n    return [\r\n      DragHandlePlugin({\r\n        pluginKey: 'globalDragHandle',\r\n        dragHandleWidth: this.options.dragHandleWidth,\r\n        scrollTreshold: this.options.scrollTreshold,\r\n        dragHandleSelector: this.options.dragHandleSelector,\r\n        excludedTags: this.options.excludedTags,\r\n        customNodes: this.options.customNodes,\r\n      }),\r\n    ];\r\n  },\r\n});\r\n\r\nexport default GlobalDragHandle;\r\n"],"names":["pmView","NodeSelection","TextSelection","Plugin","PluginKey","Slice","Fragment","Extension"],"mappings":"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"}