{"version":3,"file":"vendors-53fe0472.f584a1446b2fc034d810.bundle.js","mappings":"AAEA","sources":["webpack://lernplattform-admin-frontend/../common/node_modules/prosemirror-commands/dist/index.cjs","webpack://lernplattform-admin-frontend/../common/node_modules/prosemirror-dropcursor/dist/index.cjs","webpack://lernplattform-admin-frontend/../common/node_modules/prosemirror-gapcursor/dist/index.cjs"],"sourcesContent":["'use strict';\n\nvar prosemirrorTransform = require('prosemirror-transform');\nvar prosemirrorModel = require('prosemirror-model');\nvar prosemirrorState = require('prosemirror-state');\nvar deleteSelection = function deleteSelection(state, dispatch) {\n  if (state.selection.empty) return false;\n  if (dispatch) dispatch(state.tr.deleteSelection().scrollIntoView());\n  return true;\n};\nfunction atBlockStart(state, view) {\n  var $cursor = state.selection.$cursor;\n  if (!$cursor || (view ? !view.endOfTextblock(\"backward\", state) : $cursor.parentOffset > 0)) return null;\n  return $cursor;\n}\nvar joinBackward = function joinBackward(state, dispatch, view) {\n  var $cursor = atBlockStart(state, view);\n  if (!$cursor) return false;\n  var $cut = findCutBefore($cursor);\n  if (!$cut) {\n    var range = $cursor.blockRange(),\n      target = range && prosemirrorTransform.liftTarget(range);\n    if (target == null) return false;\n    if (dispatch) dispatch(state.tr.lift(range, target).scrollIntoView());\n    return true;\n  }\n  var before = $cut.nodeBefore;\n  if (deleteBarrier(state, $cut, dispatch, -1)) return true;\n  if ($cursor.parent.content.size == 0 && (textblockAt(before, \"end\") || prosemirrorState.NodeSelection.isSelectable(before))) {\n    for (var depth = $cursor.depth;; depth--) {\n      var delStep = prosemirrorTransform.replaceStep(state.doc, $cursor.before(depth), $cursor.after(depth), prosemirrorModel.Slice.empty);\n      if (delStep && delStep.slice.size < delStep.to - delStep.from) {\n        if (dispatch) {\n          var tr = state.tr.step(delStep);\n          tr.setSelection(textblockAt(before, \"end\") ? prosemirrorState.Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos, -1)), -1) : prosemirrorState.NodeSelection.create(tr.doc, $cut.pos - before.nodeSize));\n          dispatch(tr.scrollIntoView());\n        }\n        return true;\n      }\n      if (depth == 1 || $cursor.node(depth - 1).childCount > 1) break;\n    }\n  }\n  if (before.isAtom && $cut.depth == $cursor.depth - 1) {\n    if (dispatch) dispatch(state.tr[\"delete\"]($cut.pos - before.nodeSize, $cut.pos).scrollIntoView());\n    return true;\n  }\n  return false;\n};\nvar joinTextblockBackward = function joinTextblockBackward(state, dispatch, view) {\n  var $cursor = atBlockStart(state, view);\n  if (!$cursor) return false;\n  var $cut = findCutBefore($cursor);\n  return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;\n};\nvar joinTextblockForward = function joinTextblockForward(state, dispatch, view) {\n  var $cursor = atBlockEnd(state, view);\n  if (!$cursor) return false;\n  var $cut = findCutAfter($cursor);\n  return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;\n};\nfunction joinTextblocksAround(state, $cut, dispatch) {\n  var before = $cut.nodeBefore,\n    beforeText = before,\n    beforePos = $cut.pos - 1;\n  for (; !beforeText.isTextblock; beforePos--) {\n    if (beforeText.type.spec.isolating) return false;\n    var child = beforeText.lastChild;\n    if (!child) return false;\n    beforeText = child;\n  }\n  var after = $cut.nodeAfter,\n    afterText = after,\n    afterPos = $cut.pos + 1;\n  for (; !afterText.isTextblock; afterPos++) {\n    if (afterText.type.spec.isolating) return false;\n    var _child = afterText.firstChild;\n    if (!_child) return false;\n    afterText = _child;\n  }\n  var step = prosemirrorTransform.replaceStep(state.doc, beforePos, afterPos, prosemirrorModel.Slice.empty);\n  if (!step || step.from != beforePos || step instanceof prosemirrorTransform.ReplaceStep && step.slice.size >= afterPos - beforePos) return false;\n  if (dispatch) {\n    var tr = state.tr.step(step);\n    tr.setSelection(prosemirrorState.TextSelection.create(tr.doc, beforePos));\n    dispatch(tr.scrollIntoView());\n  }\n  return true;\n}\nfunction textblockAt(node, side) {\n  var only = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  for (var scan = node; scan; scan = side == \"start\" ? scan.firstChild : scan.lastChild) {\n    if (scan.isTextblock) return true;\n    if (only && scan.childCount != 1) return false;\n  }\n  return false;\n}\nvar selectNodeBackward = function selectNodeBackward(state, dispatch, view) {\n  var _state$selection = state.selection,\n    $head = _state$selection.$head,\n    empty = _state$selection.empty,\n    $cut = $head;\n  if (!empty) return false;\n  if ($head.parent.isTextblock) {\n    if (view ? !view.endOfTextblock(\"backward\", state) : $head.parentOffset > 0) return false;\n    $cut = findCutBefore($head);\n  }\n  var node = $cut && $cut.nodeBefore;\n  if (!node || !prosemirrorState.NodeSelection.isSelectable(node)) return false;\n  if (dispatch) dispatch(state.tr.setSelection(prosemirrorState.NodeSelection.create(state.doc, $cut.pos - node.nodeSize)).scrollIntoView());\n  return true;\n};\nfunction findCutBefore($pos) {\n  if (!$pos.parent.type.spec.isolating) for (var i = $pos.depth - 1; i >= 0; i--) {\n    if ($pos.index(i) > 0) return $pos.doc.resolve($pos.before(i + 1));\n    if ($pos.node(i).type.spec.isolating) break;\n  }\n  return null;\n}\nfunction atBlockEnd(state, view) {\n  var $cursor = state.selection.$cursor;\n  if (!$cursor || (view ? !view.endOfTextblock(\"forward\", state) : $cursor.parentOffset < $cursor.parent.content.size)) return null;\n  return $cursor;\n}\nvar joinForward = function joinForward(state, dispatch, view) {\n  var $cursor = atBlockEnd(state, view);\n  if (!$cursor) return false;\n  var $cut = findCutAfter($cursor);\n  if (!$cut) return false;\n  var after = $cut.nodeAfter;\n  if (deleteBarrier(state, $cut, dispatch, 1)) return true;\n  if ($cursor.parent.content.size == 0 && (textblockAt(after, \"start\") || prosemirrorState.NodeSelection.isSelectable(after))) {\n    var delStep = prosemirrorTransform.replaceStep(state.doc, $cursor.before(), $cursor.after(), prosemirrorModel.Slice.empty);\n    if (delStep && delStep.slice.size < delStep.to - delStep.from) {\n      if (dispatch) {\n        var tr = state.tr.step(delStep);\n        tr.setSelection(textblockAt(after, \"start\") ? prosemirrorState.Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos)), 1) : prosemirrorState.NodeSelection.create(tr.doc, tr.mapping.map($cut.pos)));\n        dispatch(tr.scrollIntoView());\n      }\n      return true;\n    }\n  }\n  if (after.isAtom && $cut.depth == $cursor.depth - 1) {\n    if (dispatch) dispatch(state.tr[\"delete\"]($cut.pos, $cut.pos + after.nodeSize).scrollIntoView());\n    return true;\n  }\n  return false;\n};\nvar selectNodeForward = function selectNodeForward(state, dispatch, view) {\n  var _state$selection2 = state.selection,\n    $head = _state$selection2.$head,\n    empty = _state$selection2.empty,\n    $cut = $head;\n  if (!empty) return false;\n  if ($head.parent.isTextblock) {\n    if (view ? !view.endOfTextblock(\"forward\", state) : $head.parentOffset < $head.parent.content.size) return false;\n    $cut = findCutAfter($head);\n  }\n  var node = $cut && $cut.nodeAfter;\n  if (!node || !prosemirrorState.NodeSelection.isSelectable(node)) return false;\n  if (dispatch) dispatch(state.tr.setSelection(prosemirrorState.NodeSelection.create(state.doc, $cut.pos)).scrollIntoView());\n  return true;\n};\nfunction findCutAfter($pos) {\n  if (!$pos.parent.type.spec.isolating) for (var i = $pos.depth - 1; i >= 0; i--) {\n    var parent = $pos.node(i);\n    if ($pos.index(i) + 1 < parent.childCount) return $pos.doc.resolve($pos.after(i + 1));\n    if (parent.type.spec.isolating) break;\n  }\n  return null;\n}\nvar joinUp = function joinUp(state, dispatch) {\n  var sel = state.selection,\n    nodeSel = sel instanceof prosemirrorState.NodeSelection,\n    point;\n  if (nodeSel) {\n    if (sel.node.isTextblock || !prosemirrorTransform.canJoin(state.doc, sel.from)) return false;\n    point = sel.from;\n  } else {\n    point = prosemirrorTransform.joinPoint(state.doc, sel.from, -1);\n    if (point == null) return false;\n  }\n  if (dispatch) {\n    var tr = state.tr.join(point);\n    if (nodeSel) tr.setSelection(prosemirrorState.NodeSelection.create(tr.doc, point - state.doc.resolve(point).nodeBefore.nodeSize));\n    dispatch(tr.scrollIntoView());\n  }\n  return true;\n};\nvar joinDown = function joinDown(state, dispatch) {\n  var sel = state.selection,\n    point;\n  if (sel instanceof prosemirrorState.NodeSelection) {\n    if (sel.node.isTextblock || !prosemirrorTransform.canJoin(state.doc, sel.to)) return false;\n    point = sel.to;\n  } else {\n    point = prosemirrorTransform.joinPoint(state.doc, sel.to, 1);\n    if (point == null) return false;\n  }\n  if (dispatch) dispatch(state.tr.join(point).scrollIntoView());\n  return true;\n};\nvar lift = function lift(state, dispatch) {\n  var _state$selection3 = state.selection,\n    $from = _state$selection3.$from,\n    $to = _state$selection3.$to;\n  var range = $from.blockRange($to),\n    target = range && prosemirrorTransform.liftTarget(range);\n  if (target == null) return false;\n  if (dispatch) dispatch(state.tr.lift(range, target).scrollIntoView());\n  return true;\n};\nvar newlineInCode = function newlineInCode(state, dispatch) {\n  var _state$selection4 = state.selection,\n    $head = _state$selection4.$head,\n    $anchor = _state$selection4.$anchor;\n  if (!$head.parent.type.spec.code || !$head.sameParent($anchor)) return false;\n  if (dispatch) dispatch(state.tr.insertText(\"\\n\").scrollIntoView());\n  return true;\n};\nfunction defaultBlockAt(match) {\n  for (var i = 0; i < match.edgeCount; i++) {\n    var _match$edge = match.edge(i),\n      type = _match$edge.type;\n    if (type.isTextblock && !type.hasRequiredAttrs()) return type;\n  }\n  return null;\n}\nvar exitCode = function exitCode(state, dispatch) {\n  var _state$selection5 = state.selection,\n    $head = _state$selection5.$head,\n    $anchor = _state$selection5.$anchor;\n  if (!$head.parent.type.spec.code || !$head.sameParent($anchor)) return false;\n  var above = $head.node(-1),\n    after = $head.indexAfter(-1),\n    type = defaultBlockAt(above.contentMatchAt(after));\n  if (!type || !above.canReplaceWith(after, after, type)) return false;\n  if (dispatch) {\n    var pos = $head.after(),\n      tr = state.tr.replaceWith(pos, pos, type.createAndFill());\n    tr.setSelection(prosemirrorState.Selection.near(tr.doc.resolve(pos), 1));\n    dispatch(tr.scrollIntoView());\n  }\n  return true;\n};\nvar createParagraphNear = function createParagraphNear(state, dispatch) {\n  var sel = state.selection,\n    $from = sel.$from,\n    $to = sel.$to;\n  if (sel instanceof prosemirrorState.AllSelection || $from.parent.inlineContent || $to.parent.inlineContent) return false;\n  var type = defaultBlockAt($to.parent.contentMatchAt($to.indexAfter()));\n  if (!type || !type.isTextblock) return false;\n  if (dispatch) {\n    var side = (!$from.parentOffset && $to.index() < $to.parent.childCount ? $from : $to).pos;\n    var tr = state.tr.insert(side, type.createAndFill());\n    tr.setSelection(prosemirrorState.TextSelection.create(tr.doc, side + 1));\n    dispatch(tr.scrollIntoView());\n  }\n  return true;\n};\nvar liftEmptyBlock = function liftEmptyBlock(state, dispatch) {\n  var $cursor = state.selection.$cursor;\n  if (!$cursor || $cursor.parent.content.size) return false;\n  if ($cursor.depth > 1 && $cursor.after() != $cursor.end(-1)) {\n    var before = $cursor.before();\n    if (prosemirrorTransform.canSplit(state.doc, before)) {\n      if (dispatch) dispatch(state.tr.split(before).scrollIntoView());\n      return true;\n    }\n  }\n  var range = $cursor.blockRange(),\n    target = range && prosemirrorTransform.liftTarget(range);\n  if (target == null) return false;\n  if (dispatch) dispatch(state.tr.lift(range, target).scrollIntoView());\n  return true;\n};\nfunction splitBlockAs(splitNode) {\n  return function (state, dispatch) {\n    var _state$selection6 = state.selection,\n      $from = _state$selection6.$from,\n      $to = _state$selection6.$to;\n    if (state.selection instanceof prosemirrorState.NodeSelection && state.selection.node.isBlock) {\n      if (!$from.parentOffset || !prosemirrorTransform.canSplit(state.doc, $from.pos)) return false;\n      if (dispatch) dispatch(state.tr.split($from.pos).scrollIntoView());\n      return true;\n    }\n    if (!$from.depth) return false;\n    var types = [];\n    var splitDepth,\n      deflt,\n      atEnd = false,\n      atStart = false;\n    for (var d = $from.depth;; d--) {\n      var node = $from.node(d);\n      if (node.isBlock) {\n        atEnd = $from.end(d) == $from.pos + ($from.depth - d);\n        atStart = $from.start(d) == $from.pos - ($from.depth - d);\n        deflt = defaultBlockAt($from.node(d - 1).contentMatchAt($from.indexAfter(d - 1)));\n        var splitType = splitNode && splitNode($to.parent, atEnd, $from);\n        types.unshift(splitType || (atEnd && deflt ? {\n          type: deflt\n        } : null));\n        splitDepth = d;\n        break;\n      } else {\n        if (d == 1) return false;\n        types.unshift(null);\n      }\n    }\n    var tr = state.tr;\n    if (state.selection instanceof prosemirrorState.TextSelection || state.selection instanceof prosemirrorState.AllSelection) tr.deleteSelection();\n    var splitPos = tr.mapping.map($from.pos);\n    var can = prosemirrorTransform.canSplit(tr.doc, splitPos, types.length, types);\n    if (!can) {\n      types[0] = deflt ? {\n        type: deflt\n      } : null;\n      can = prosemirrorTransform.canSplit(tr.doc, splitPos, types.length, types);\n    }\n    if (!can) return false;\n    tr.split(splitPos, types.length, types);\n    if (!atEnd && atStart && $from.node(splitDepth).type != deflt) {\n      var first = tr.mapping.map($from.before(splitDepth)),\n        $first = tr.doc.resolve(first);\n      if (deflt && $from.node(splitDepth - 1).canReplaceWith($first.index(), $first.index() + 1, deflt)) tr.setNodeMarkup(tr.mapping.map($from.before(splitDepth)), deflt);\n    }\n    if (dispatch) dispatch(tr.scrollIntoView());\n    return true;\n  };\n}\nvar splitBlock = splitBlockAs();\nvar splitBlockKeepMarks = function splitBlockKeepMarks(state, dispatch) {\n  return splitBlock(state, dispatch && function (tr) {\n    var marks = state.storedMarks || state.selection.$to.parentOffset && state.selection.$from.marks();\n    if (marks) tr.ensureMarks(marks);\n    dispatch(tr);\n  });\n};\nvar selectParentNode = function selectParentNode(state, dispatch) {\n  var _state$selection7 = state.selection,\n    $from = _state$selection7.$from,\n    to = _state$selection7.to,\n    pos;\n  var same = $from.sharedDepth(to);\n  if (same == 0) return false;\n  pos = $from.before(same);\n  if (dispatch) dispatch(state.tr.setSelection(prosemirrorState.NodeSelection.create(state.doc, pos)));\n  return true;\n};\nvar selectAll = function selectAll(state, dispatch) {\n  if (dispatch) dispatch(state.tr.setSelection(new prosemirrorState.AllSelection(state.doc)));\n  return true;\n};\nfunction joinMaybeClear(state, $pos, dispatch) {\n  var before = $pos.nodeBefore,\n    after = $pos.nodeAfter,\n    index = $pos.index();\n  if (!before || !after || !before.type.compatibleContent(after.type)) return false;\n  if (!before.content.size && $pos.parent.canReplace(index - 1, index)) {\n    if (dispatch) dispatch(state.tr[\"delete\"]($pos.pos - before.nodeSize, $pos.pos).scrollIntoView());\n    return true;\n  }\n  if (!$pos.parent.canReplace(index, index + 1) || !(after.isTextblock || prosemirrorTransform.canJoin(state.doc, $pos.pos))) return false;\n  if (dispatch) dispatch(state.tr.join($pos.pos).scrollIntoView());\n  return true;\n}\nfunction deleteBarrier(state, $cut, dispatch, dir) {\n  var before = $cut.nodeBefore,\n    after = $cut.nodeAfter,\n    conn,\n    match;\n  var isolated = before.type.spec.isolating || after.type.spec.isolating;\n  if (!isolated && joinMaybeClear(state, $cut, dispatch)) return true;\n  var canDelAfter = !isolated && $cut.parent.canReplace($cut.index(), $cut.index() + 1);\n  if (canDelAfter && (conn = (match = before.contentMatchAt(before.childCount)).findWrapping(after.type)) && match.matchType(conn[0] || after.type).validEnd) {\n    if (dispatch) {\n      var end = $cut.pos + after.nodeSize,\n        wrap = prosemirrorModel.Fragment.empty;\n      for (var i = conn.length - 1; i >= 0; i--) wrap = prosemirrorModel.Fragment.from(conn[i].create(null, wrap));\n      wrap = prosemirrorModel.Fragment.from(before.copy(wrap));\n      var tr = state.tr.step(new prosemirrorTransform.ReplaceAroundStep($cut.pos - 1, end, $cut.pos, end, new prosemirrorModel.Slice(wrap, 1, 0), conn.length, true));\n      var $joinAt = tr.doc.resolve(end + 2 * conn.length);\n      if ($joinAt.nodeAfter && $joinAt.nodeAfter.type == before.type && prosemirrorTransform.canJoin(tr.doc, $joinAt.pos)) tr.join($joinAt.pos);\n      dispatch(tr.scrollIntoView());\n    }\n    return true;\n  }\n  var selAfter = after.type.spec.isolating || dir > 0 && isolated ? null : prosemirrorState.Selection.findFrom($cut, 1);\n  var range = selAfter && selAfter.$from.blockRange(selAfter.$to),\n    target = range && prosemirrorTransform.liftTarget(range);\n  if (target != null && target >= $cut.depth) {\n    if (dispatch) dispatch(state.tr.lift(range, target).scrollIntoView());\n    return true;\n  }\n  if (canDelAfter && textblockAt(after, \"start\", true) && textblockAt(before, \"end\")) {\n    var at = before,\n      _wrap = [];\n    for (;;) {\n      _wrap.push(at);\n      if (at.isTextblock) break;\n      at = at.lastChild;\n    }\n    var afterText = after,\n      afterDepth = 1;\n    for (; !afterText.isTextblock; afterText = afterText.firstChild) afterDepth++;\n    if (at.canReplace(at.childCount, at.childCount, afterText.content)) {\n      if (dispatch) {\n        var _end = prosemirrorModel.Fragment.empty;\n        for (var _i = _wrap.length - 1; _i >= 0; _i--) _end = prosemirrorModel.Fragment.from(_wrap[_i].copy(_end));\n        var _tr = state.tr.step(new prosemirrorTransform.ReplaceAroundStep($cut.pos - _wrap.length, $cut.pos + after.nodeSize, $cut.pos + afterDepth, $cut.pos + after.nodeSize - afterDepth, new prosemirrorModel.Slice(_end, _wrap.length, 0), 0, true));\n        dispatch(_tr.scrollIntoView());\n      }\n      return true;\n    }\n  }\n  return false;\n}\nfunction selectTextblockSide(side) {\n  return function (state, dispatch) {\n    var sel = state.selection,\n      $pos = side < 0 ? sel.$from : sel.$to;\n    var depth = $pos.depth;\n    while ($pos.node(depth).isInline) {\n      if (!depth) return false;\n      depth--;\n    }\n    if (!$pos.node(depth).isTextblock) return false;\n    if (dispatch) dispatch(state.tr.setSelection(prosemirrorState.TextSelection.create(state.doc, side < 0 ? $pos.start(depth) : $pos.end(depth))));\n    return true;\n  };\n}\nvar selectTextblockStart = selectTextblockSide(-1);\nvar selectTextblockEnd = selectTextblockSide(1);\nfunction wrapIn(nodeType) {\n  var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  return function (state, dispatch) {\n    var _state$selection8 = state.selection,\n      $from = _state$selection8.$from,\n      $to = _state$selection8.$to;\n    var range = $from.blockRange($to),\n      wrapping = range && prosemirrorTransform.findWrapping(range, nodeType, attrs);\n    if (!wrapping) return false;\n    if (dispatch) dispatch(state.tr.wrap(range, wrapping).scrollIntoView());\n    return true;\n  };\n}\nfunction setBlockType(nodeType) {\n  var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  return function (state, dispatch) {\n    var applicable = false;\n    for (var i = 0; i < state.selection.ranges.length && !applicable; i++) {\n      var _state$selection$rang = state.selection.ranges[i],\n        from = _state$selection$rang.$from.pos,\n        to = _state$selection$rang.$to.pos;\n      state.doc.nodesBetween(from, to, function (node, pos) {\n        if (applicable) return false;\n        if (!node.isTextblock || node.hasMarkup(nodeType, attrs)) return;\n        if (node.type == nodeType) {\n          applicable = true;\n        } else {\n          var $pos = state.doc.resolve(pos),\n            index = $pos.index();\n          applicable = $pos.parent.canReplaceWith(index, index + 1, nodeType);\n        }\n      });\n    }\n    if (!applicable) return false;\n    if (dispatch) {\n      var tr = state.tr;\n      for (var _i2 = 0; _i2 < state.selection.ranges.length; _i2++) {\n        var _state$selection$rang2 = state.selection.ranges[_i2],\n          _from = _state$selection$rang2.$from.pos,\n          _to = _state$selection$rang2.$to.pos;\n        tr.setBlockType(_from, _to, nodeType, attrs);\n      }\n      dispatch(tr.scrollIntoView());\n    }\n    return true;\n  };\n}\nfunction markApplies(doc, ranges, type, enterAtoms) {\n  var _loop = function _loop() {\n      var _ranges$i = ranges[i],\n        $from = _ranges$i.$from,\n        $to = _ranges$i.$to;\n      var can = $from.depth == 0 ? doc.inlineContent && doc.type.allowsMarkType(type) : false;\n      doc.nodesBetween($from.pos, $to.pos, function (node, pos) {\n        if (can || !enterAtoms && node.isAtom && node.isInline && pos >= $from.pos && pos + node.nodeSize <= $to.pos) return false;\n        can = node.inlineContent && node.type.allowsMarkType(type);\n      });\n      if (can) return {\n        v: true\n      };\n    },\n    _ret;\n  for (var i = 0; i < ranges.length; i++) {\n    _ret = _loop();\n    if (_ret) return _ret.v;\n  }\n  return false;\n}\nfunction removeInlineAtoms(ranges) {\n  var result = [];\n  var _loop2 = function _loop2() {\n    var _ranges$i2 = ranges[i],\n      $from = _ranges$i2.$from,\n      $to = _ranges$i2.$to;\n    $from.doc.nodesBetween($from.pos, $to.pos, function (node, pos) {\n      if (node.isAtom && node.content.size && node.isInline && pos >= $from.pos && pos + node.nodeSize <= $to.pos) {\n        if (pos + 1 > $from.pos) result.push(new prosemirrorState.SelectionRange($from, $from.doc.resolve(pos + 1)));\n        $from = $from.doc.resolve(pos + 1 + node.content.size);\n        return false;\n      }\n    });\n    if ($from.pos < $to.pos) result.push(new prosemirrorState.SelectionRange($from, $to));\n  };\n  for (var i = 0; i < ranges.length; i++) {\n    _loop2();\n  }\n  return result;\n}\nfunction toggleMark(markType) {\n  var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  var options = arguments.length > 2 ? arguments[2] : undefined;\n  var removeWhenPresent = (options && options.removeWhenPresent) !== false;\n  var enterAtoms = (options && options.enterInlineAtoms) !== false;\n  var dropSpace = !(options && options.includeWhitespace);\n  return function (state, dispatch) {\n    var _state$selection9 = state.selection,\n      empty = _state$selection9.empty,\n      $cursor = _state$selection9.$cursor,\n      ranges = _state$selection9.ranges;\n    if (empty && !$cursor || !markApplies(state.doc, ranges, markType, enterAtoms)) return false;\n    if (dispatch) {\n      if ($cursor) {\n        if (markType.isInSet(state.storedMarks || $cursor.marks())) dispatch(state.tr.removeStoredMark(markType));else dispatch(state.tr.addStoredMark(markType.create(attrs)));\n      } else {\n        var add,\n          tr = state.tr;\n        if (!enterAtoms) ranges = removeInlineAtoms(ranges);\n        if (removeWhenPresent) {\n          add = !ranges.some(function (r) {\n            return state.doc.rangeHasMark(r.$from.pos, r.$to.pos, markType);\n          });\n        } else {\n          add = !ranges.every(function (r) {\n            var missing = false;\n            tr.doc.nodesBetween(r.$from.pos, r.$to.pos, function (node, pos, parent) {\n              if (missing) return false;\n              missing = !markType.isInSet(node.marks) && !!parent && parent.type.allowsMarkType(markType) && !(node.isText && /^\\s*$/.test(node.textBetween(Math.max(0, r.$from.pos - pos), Math.min(node.nodeSize, r.$to.pos - pos))));\n            });\n            return !missing;\n          });\n        }\n        for (var i = 0; i < ranges.length; i++) {\n          var _ranges$i3 = ranges[i],\n            $from = _ranges$i3.$from,\n            $to = _ranges$i3.$to;\n          if (!add) {\n            tr.removeMark($from.pos, $to.pos, markType);\n          } else {\n            var from = $from.pos,\n              to = $to.pos,\n              start = $from.nodeAfter,\n              end = $to.nodeBefore;\n            var spaceStart = dropSpace && start && start.isText ? /^\\s*/.exec(start.text)[0].length : 0;\n            var spaceEnd = dropSpace && end && end.isText ? /\\s*$/.exec(end.text)[0].length : 0;\n            if (from + spaceStart < to) {\n              from += spaceStart;\n              to -= spaceEnd;\n            }\n            tr.addMark(from, to, markType.create(attrs));\n          }\n        }\n        dispatch(tr.scrollIntoView());\n      }\n    }\n    return true;\n  };\n}\nfunction wrapDispatchForJoin(dispatch, isJoinable) {\n  return function (tr) {\n    if (!tr.isGeneric) return dispatch(tr);\n    var ranges = [];\n    for (var i = 0; i < tr.mapping.maps.length; i++) {\n      var map = tr.mapping.maps[i];\n      for (var j = 0; j < ranges.length; j++) ranges[j] = map.map(ranges[j]);\n      map.forEach(function (_s, _e, from, to) {\n        return ranges.push(from, to);\n      });\n    }\n    var joinable = [];\n    for (var _i3 = 0; _i3 < ranges.length; _i3 += 2) {\n      var from = ranges[_i3],\n        to = ranges[_i3 + 1];\n      var $from = tr.doc.resolve(from),\n        depth = $from.sharedDepth(to),\n        parent = $from.node(depth);\n      for (var index = $from.indexAfter(depth), pos = $from.after(depth + 1); pos <= to; ++index) {\n        var after = parent.maybeChild(index);\n        if (!after) break;\n        if (index && joinable.indexOf(pos) == -1) {\n          var before = parent.child(index - 1);\n          if (before.type == after.type && isJoinable(before, after)) joinable.push(pos);\n        }\n        pos += after.nodeSize;\n      }\n    }\n    joinable.sort(function (a, b) {\n      return a - b;\n    });\n    for (var _i4 = joinable.length - 1; _i4 >= 0; _i4--) {\n      if (prosemirrorTransform.canJoin(tr.doc, joinable[_i4])) tr.join(joinable[_i4]);\n    }\n    dispatch(tr);\n  };\n}\nfunction autoJoin(command, isJoinable) {\n  var canJoin = Array.isArray(isJoinable) ? function (node) {\n    return isJoinable.indexOf(node.type.name) > -1;\n  } : isJoinable;\n  return function (state, dispatch, view) {\n    return command(state, dispatch && wrapDispatchForJoin(dispatch, canJoin), view);\n  };\n}\nfunction chainCommands() {\n  for (var _len = arguments.length, commands = new Array(_len), _key = 0; _key < _len; _key++) {\n    commands[_key] = arguments[_key];\n  }\n  return function (state, dispatch, view) {\n    for (var i = 0; i < commands.length; i++) if (commands[i](state, dispatch, view)) return true;\n    return false;\n  };\n}\nvar backspace = chainCommands(deleteSelection, joinBackward, selectNodeBackward);\nvar del = chainCommands(deleteSelection, joinForward, selectNodeForward);\nvar pcBaseKeymap = {\n  \"Enter\": chainCommands(newlineInCode, createParagraphNear, liftEmptyBlock, splitBlock),\n  \"Mod-Enter\": exitCode,\n  \"Backspace\": backspace,\n  \"Mod-Backspace\": backspace,\n  \"Shift-Backspace\": backspace,\n  \"Delete\": del,\n  \"Mod-Delete\": del,\n  \"Mod-a\": selectAll\n};\nvar macBaseKeymap = {\n  \"Ctrl-h\": pcBaseKeymap[\"Backspace\"],\n  \"Alt-Backspace\": pcBaseKeymap[\"Mod-Backspace\"],\n  \"Ctrl-d\": pcBaseKeymap[\"Delete\"],\n  \"Ctrl-Alt-Backspace\": pcBaseKeymap[\"Mod-Delete\"],\n  \"Alt-Delete\": pcBaseKeymap[\"Mod-Delete\"],\n  \"Alt-d\": pcBaseKeymap[\"Mod-Delete\"],\n  \"Ctrl-a\": selectTextblockStart,\n  \"Ctrl-e\": selectTextblockEnd\n};\nfor (var key in pcBaseKeymap) macBaseKeymap[key] = pcBaseKeymap[key];\nvar mac = typeof navigator != \"undefined\" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : typeof os != \"undefined\" && os.platform ? os.platform() == \"darwin\" : false;\nvar baseKeymap = mac ? macBaseKeymap : pcBaseKeymap;\nexports.autoJoin = autoJoin;\nexports.baseKeymap = baseKeymap;\nexports.chainCommands = chainCommands;\nexports.createParagraphNear = createParagraphNear;\nexports.deleteSelection = deleteSelection;\nexports.exitCode = exitCode;\nexports.joinBackward = joinBackward;\nexports.joinDown = joinDown;\nexports.joinForward = joinForward;\nexports.joinTextblockBackward = joinTextblockBackward;\nexports.joinTextblockForward = joinTextblockForward;\nexports.joinUp = joinUp;\nexports.lift = lift;\nexports.liftEmptyBlock = liftEmptyBlock;\nexports.macBaseKeymap = macBaseKeymap;\nexports.newlineInCode = newlineInCode;\nexports.pcBaseKeymap = pcBaseKeymap;\nexports.selectAll = selectAll;\nexports.selectNodeBackward = selectNodeBackward;\nexports.selectNodeForward = selectNodeForward;\nexports.selectParentNode = selectParentNode;\nexports.selectTextblockEnd = selectTextblockEnd;\nexports.selectTextblockStart = selectTextblockStart;\nexports.setBlockType = setBlockType;\nexports.splitBlock = splitBlock;\nexports.splitBlockAs = splitBlockAs;\nexports.splitBlockKeepMarks = splitBlockKeepMarks;\nexports.toggleMark = toggleMark;\nexports.wrapIn = wrapIn;\n","'use strict';\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar prosemirrorState = require('prosemirror-state');\nvar prosemirrorTransform = require('prosemirror-transform');\nfunction dropCursor() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return new prosemirrorState.Plugin({\n    view: function view(editorView) {\n      return new DropCursorView(editorView, options);\n    }\n  });\n}\nvar DropCursorView = function () {\n  function DropCursorView(editorView, options) {\n    var _this = this;\n    _classCallCheck(this, DropCursorView);\n    var _a;\n    this.editorView = editorView;\n    this.cursorPos = null;\n    this.element = null;\n    this.timeout = -1;\n    this.width = (_a = options.width) !== null && _a !== void 0 ? _a : 1;\n    this.color = options.color === false ? undefined : options.color || \"black\";\n    this[\"class\"] = options[\"class\"];\n    this.handlers = [\"dragover\", \"dragend\", \"drop\", \"dragleave\"].map(function (name) {\n      var handler = function handler(e) {\n        _this[name](e);\n      };\n      editorView.dom.addEventListener(name, handler);\n      return {\n        name: name,\n        handler: handler\n      };\n    });\n  }\n  _createClass(DropCursorView, [{\n    key: \"destroy\",\n    value: function destroy() {\n      var _this2 = this;\n      this.handlers.forEach(function (_ref) {\n        var name = _ref.name,\n          handler = _ref.handler;\n        return _this2.editorView.dom.removeEventListener(name, handler);\n      });\n    }\n  }, {\n    key: \"update\",\n    value: function update(editorView, prevState) {\n      if (this.cursorPos != null && prevState.doc != editorView.state.doc) {\n        if (this.cursorPos > editorView.state.doc.content.size) this.setCursor(null);else this.updateOverlay();\n      }\n    }\n  }, {\n    key: \"setCursor\",\n    value: function setCursor(pos) {\n      if (pos == this.cursorPos) return;\n      this.cursorPos = pos;\n      if (pos == null) {\n        this.element.parentNode.removeChild(this.element);\n        this.element = null;\n      } else {\n        this.updateOverlay();\n      }\n    }\n  }, {\n    key: \"updateOverlay\",\n    value: function updateOverlay() {\n      var $pos = this.editorView.state.doc.resolve(this.cursorPos);\n      var isBlock = !$pos.parent.inlineContent,\n        rect;\n      var editorDOM = this.editorView.dom,\n        editorRect = editorDOM.getBoundingClientRect();\n      var scaleX = editorRect.width / editorDOM.offsetWidth,\n        scaleY = editorRect.height / editorDOM.offsetHeight;\n      if (isBlock) {\n        var before = $pos.nodeBefore,\n          after = $pos.nodeAfter;\n        if (before || after) {\n          var node = this.editorView.nodeDOM(this.cursorPos - (before ? before.nodeSize : 0));\n          if (node) {\n            var nodeRect = node.getBoundingClientRect();\n            var top = before ? nodeRect.bottom : nodeRect.top;\n            if (before && after) top = (top + this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top) / 2;\n            var halfWidth = this.width / 2 * scaleY;\n            rect = {\n              left: nodeRect.left,\n              right: nodeRect.right,\n              top: top - halfWidth,\n              bottom: top + halfWidth\n            };\n          }\n        }\n      }\n      if (!rect) {\n        var coords = this.editorView.coordsAtPos(this.cursorPos);\n        var _halfWidth = this.width / 2 * scaleX;\n        rect = {\n          left: coords.left - _halfWidth,\n          right: coords.left + _halfWidth,\n          top: coords.top,\n          bottom: coords.bottom\n        };\n      }\n      var parent = this.editorView.dom.offsetParent;\n      if (!this.element) {\n        this.element = parent.appendChild(document.createElement(\"div\"));\n        if (this[\"class\"]) this.element.className = this[\"class\"];\n        this.element.style.cssText = \"position: absolute; z-index: 50; pointer-events: none;\";\n        if (this.color) {\n          this.element.style.backgroundColor = this.color;\n        }\n      }\n      this.element.classList.toggle(\"prosemirror-dropcursor-block\", isBlock);\n      this.element.classList.toggle(\"prosemirror-dropcursor-inline\", !isBlock);\n      var parentLeft, parentTop;\n      if (!parent || parent == document.body && getComputedStyle(parent).position == \"static\") {\n        parentLeft = -pageXOffset;\n        parentTop = -pageYOffset;\n      } else {\n        var _rect = parent.getBoundingClientRect();\n        var parentScaleX = _rect.width / parent.offsetWidth,\n          parentScaleY = _rect.height / parent.offsetHeight;\n        parentLeft = _rect.left - parent.scrollLeft * parentScaleX;\n        parentTop = _rect.top - parent.scrollTop * parentScaleY;\n      }\n      this.element.style.left = (rect.left - parentLeft) / scaleX + \"px\";\n      this.element.style.top = (rect.top - parentTop) / scaleY + \"px\";\n      this.element.style.width = (rect.right - rect.left) / scaleX + \"px\";\n      this.element.style.height = (rect.bottom - rect.top) / scaleY + \"px\";\n    }\n  }, {\n    key: \"scheduleRemoval\",\n    value: function scheduleRemoval(timeout) {\n      var _this3 = this;\n      clearTimeout(this.timeout);\n      this.timeout = setTimeout(function () {\n        return _this3.setCursor(null);\n      }, timeout);\n    }\n  }, {\n    key: \"dragover\",\n    value: function dragover(event) {\n      if (!this.editorView.editable) return;\n      var pos = this.editorView.posAtCoords({\n        left: event.clientX,\n        top: event.clientY\n      });\n      var node = pos && pos.inside >= 0 && this.editorView.state.doc.nodeAt(pos.inside);\n      var disableDropCursor = node && node.type.spec.disableDropCursor;\n      var disabled = typeof disableDropCursor == \"function\" ? disableDropCursor(this.editorView, pos, event) : disableDropCursor;\n      if (pos && !disabled) {\n        var target = pos.pos;\n        if (this.editorView.dragging && this.editorView.dragging.slice) {\n          var point = prosemirrorTransform.dropPoint(this.editorView.state.doc, target, this.editorView.dragging.slice);\n          if (point != null) target = point;\n        }\n        this.setCursor(target);\n        this.scheduleRemoval(5000);\n      }\n    }\n  }, {\n    key: \"dragend\",\n    value: function dragend() {\n      this.scheduleRemoval(20);\n    }\n  }, {\n    key: \"drop\",\n    value: function drop() {\n      this.scheduleRemoval(20);\n    }\n  }, {\n    key: \"dragleave\",\n    value: function dragleave(event) {\n      if (!this.editorView.dom.contains(event.relatedTarget)) this.setCursor(null);\n    }\n  }]);\n  return DropCursorView;\n}();\nexports.dropCursor = dropCursor;\n","'use strict';\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nvar prosemirrorKeymap = require('prosemirror-keymap');\nvar prosemirrorState = require('prosemirror-state');\nvar prosemirrorModel = require('prosemirror-model');\nvar prosemirrorView = require('prosemirror-view');\nvar GapCursor = function (_prosemirrorState$Sel) {\n  _inherits(GapCursor, _prosemirrorState$Sel);\n  var _super = _createSuper(GapCursor);\n  function GapCursor($pos) {\n    _classCallCheck(this, GapCursor);\n    return _super.call(this, $pos, $pos);\n  }\n  _createClass(GapCursor, [{\n    key: \"map\",\n    value: function map(doc, mapping) {\n      var $pos = doc.resolve(mapping.map(this.head));\n      return GapCursor.valid($pos) ? new GapCursor($pos) : prosemirrorState.Selection.near($pos);\n    }\n  }, {\n    key: \"content\",\n    value: function content() {\n      return prosemirrorModel.Slice.empty;\n    }\n  }, {\n    key: \"eq\",\n    value: function eq(other) {\n      return other instanceof GapCursor && other.head == this.head;\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        type: \"gapcursor\",\n        pos: this.head\n      };\n    }\n  }, {\n    key: \"getBookmark\",\n    value: function getBookmark() {\n      return new GapBookmark(this.anchor);\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(doc, json) {\n      if (typeof json.pos != \"number\") throw new RangeError(\"Invalid input for GapCursor.fromJSON\");\n      return new GapCursor(doc.resolve(json.pos));\n    }\n  }, {\n    key: \"valid\",\n    value: function valid($pos) {\n      var parent = $pos.parent;\n      if (parent.isTextblock || !closedBefore($pos) || !closedAfter($pos)) return false;\n      var override = parent.type.spec.allowGapCursor;\n      if (override != null) return override;\n      var deflt = parent.contentMatchAt($pos.index()).defaultType;\n      return deflt && deflt.isTextblock;\n    }\n  }, {\n    key: \"findGapCursorFrom\",\n    value: function findGapCursorFrom($pos, dir) {\n      var mustMove = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      search: for (;;) {\n        if (!mustMove && GapCursor.valid($pos)) return $pos;\n        var pos = $pos.pos,\n          next = null;\n        for (var d = $pos.depth;; d--) {\n          var parent = $pos.node(d);\n          if (dir > 0 ? $pos.indexAfter(d) < parent.childCount : $pos.index(d) > 0) {\n            next = parent.child(dir > 0 ? $pos.indexAfter(d) : $pos.index(d) - 1);\n            break;\n          } else if (d == 0) {\n            return null;\n          }\n          pos += dir;\n          var $cur = $pos.doc.resolve(pos);\n          if (GapCursor.valid($cur)) return $cur;\n        }\n        for (;;) {\n          var inside = dir > 0 ? next.firstChild : next.lastChild;\n          if (!inside) {\n            if (next.isAtom && !next.isText && !prosemirrorState.NodeSelection.isSelectable(next)) {\n              $pos = $pos.doc.resolve(pos + next.nodeSize * dir);\n              mustMove = false;\n              continue search;\n            }\n            break;\n          }\n          next = inside;\n          pos += dir;\n          var _$cur = $pos.doc.resolve(pos);\n          if (GapCursor.valid(_$cur)) return _$cur;\n        }\n        return null;\n      }\n    }\n  }]);\n  return GapCursor;\n}(prosemirrorState.Selection);\nGapCursor.prototype.visible = false;\nGapCursor.findFrom = GapCursor.findGapCursorFrom;\nprosemirrorState.Selection.jsonID(\"gapcursor\", GapCursor);\nvar GapBookmark = function () {\n  function GapBookmark(pos) {\n    _classCallCheck(this, GapBookmark);\n    this.pos = pos;\n  }\n  _createClass(GapBookmark, [{\n    key: \"map\",\n    value: function map(mapping) {\n      return new GapBookmark(mapping.map(this.pos));\n    }\n  }, {\n    key: \"resolve\",\n    value: function resolve(doc) {\n      var $pos = doc.resolve(this.pos);\n      return GapCursor.valid($pos) ? new GapCursor($pos) : prosemirrorState.Selection.near($pos);\n    }\n  }]);\n  return GapBookmark;\n}();\nfunction needsGap(type) {\n  return type.isAtom || type.spec.isolating || type.spec.createGapCursor;\n}\nfunction closedBefore($pos) {\n  for (var d = $pos.depth; d >= 0; d--) {\n    var index = $pos.index(d),\n      parent = $pos.node(d);\n    if (index == 0) {\n      if (parent.type.spec.isolating) return true;\n      continue;\n    }\n    for (var before = parent.child(index - 1);; before = before.lastChild) {\n      if (before.childCount == 0 && !before.inlineContent || needsGap(before.type)) return true;\n      if (before.inlineContent) return false;\n    }\n  }\n  return true;\n}\nfunction closedAfter($pos) {\n  for (var d = $pos.depth; d >= 0; d--) {\n    var index = $pos.indexAfter(d),\n      parent = $pos.node(d);\n    if (index == parent.childCount) {\n      if (parent.type.spec.isolating) return true;\n      continue;\n    }\n    for (var after = parent.child(index);; after = after.firstChild) {\n      if (after.childCount == 0 && !after.inlineContent || needsGap(after.type)) return true;\n      if (after.inlineContent) return false;\n    }\n  }\n  return true;\n}\nfunction gapCursor() {\n  return new prosemirrorState.Plugin({\n    props: {\n      decorations: drawGapCursor,\n      createSelectionBetween: function createSelectionBetween(_view, $anchor, $head) {\n        return $anchor.pos == $head.pos && GapCursor.valid($head) ? new GapCursor($head) : null;\n      },\n      handleClick: handleClick,\n      handleKeyDown: handleKeyDown,\n      handleDOMEvents: {\n        beforeinput: beforeinput\n      }\n    }\n  });\n}\nvar handleKeyDown = prosemirrorKeymap.keydownHandler({\n  \"ArrowLeft\": arrow(\"horiz\", -1),\n  \"ArrowRight\": arrow(\"horiz\", 1),\n  \"ArrowUp\": arrow(\"vert\", -1),\n  \"ArrowDown\": arrow(\"vert\", 1)\n});\nfunction arrow(axis, dir) {\n  var dirStr = axis == \"vert\" ? dir > 0 ? \"down\" : \"up\" : dir > 0 ? \"right\" : \"left\";\n  return function (state, dispatch, view) {\n    var sel = state.selection;\n    var $start = dir > 0 ? sel.$to : sel.$from,\n      mustMove = sel.empty;\n    if (sel instanceof prosemirrorState.TextSelection) {\n      if (!view.endOfTextblock(dirStr) || $start.depth == 0) return false;\n      mustMove = false;\n      $start = state.doc.resolve(dir > 0 ? $start.after() : $start.before());\n    }\n    var $found = GapCursor.findGapCursorFrom($start, dir, mustMove);\n    if (!$found) return false;\n    if (dispatch) dispatch(state.tr.setSelection(new GapCursor($found)));\n    return true;\n  };\n}\nfunction handleClick(view, pos, event) {\n  if (!view || !view.editable) return false;\n  var $pos = view.state.doc.resolve(pos);\n  if (!GapCursor.valid($pos)) return false;\n  var clickPos = view.posAtCoords({\n    left: event.clientX,\n    top: event.clientY\n  });\n  if (clickPos && clickPos.inside > -1 && prosemirrorState.NodeSelection.isSelectable(view.state.doc.nodeAt(clickPos.inside))) return false;\n  view.dispatch(view.state.tr.setSelection(new GapCursor($pos)));\n  return true;\n}\nfunction beforeinput(view, event) {\n  if (event.inputType != \"insertCompositionText\" || !(view.state.selection instanceof GapCursor)) return false;\n  var $from = view.state.selection.$from;\n  var insert = $from.parent.contentMatchAt($from.index()).findWrapping(view.state.schema.nodes.text);\n  if (!insert) return false;\n  var frag = prosemirrorModel.Fragment.empty;\n  for (var i = insert.length - 1; i >= 0; i--) frag = prosemirrorModel.Fragment.from(insert[i].createAndFill(null, frag));\n  var tr = view.state.tr.replace($from.pos, $from.pos, new prosemirrorModel.Slice(frag, 0, 0));\n  tr.setSelection(prosemirrorState.TextSelection.near(tr.doc.resolve($from.pos + 1)));\n  view.dispatch(tr);\n  return false;\n}\nfunction drawGapCursor(state) {\n  if (!(state.selection instanceof GapCursor)) return null;\n  var node = document.createElement(\"div\");\n  node.className = \"ProseMirror-gapcursor\";\n  return prosemirrorView.DecorationSet.create(state.doc, [prosemirrorView.Decoration.widget(state.selection.head, node, {\n    key: \"gapcursor\"\n  })]);\n}\nexports.GapCursor = GapCursor;\nexports.gapCursor = gapCursor;\n"],"names":[],"sourceRoot":""}