{"version":3,"file":"ngx-editor-helpers.mjs","sources":["../../../projects/ngx-editor/helpers/isMarkActive.ts","../../../projects/ngx-editor/helpers/getSelectionMarks.ts","../../../projects/ngx-editor/helpers/isLinkActive.ts","../../../projects/ngx-editor/helpers/isNodeActive.ts","../../../projects/ngx-editor/helpers/bubblePosition.ts","../../../projects/ngx-editor/helpers/getSelectionNodes.ts","../../../projects/ngx-editor/helpers/markApplies.ts","../../../projects/ngx-editor/helpers/markInputRule.ts","../../../projects/ngx-editor/helpers/ngx-editor-helpers.ts"],"sourcesContent":["import { EditorState } from 'prosemirror-state';\nimport { MarkType } from 'prosemirror-model';\n\nexport const isMarkActive = (state: EditorState, type: MarkType): boolean => {\n  const { from, $from, to, empty } = state.selection;\n\n  if (empty) {\n    return !!type.isInSet(state.storedMarks || $from.marks());\n  } else {\n    return state.doc.rangeHasMark(from, to, type);\n  }\n};\n\nexport default isMarkActive;\n","import { EditorState } from 'prosemirror-state';\nimport { Mark } from 'prosemirror-model';\n\nexport const getSelectionMarks = (state: EditorState): Mark[] => {\n  let marks: Mark[] = [];\n\n  const { selection: { from, to, empty, $from }, storedMarks } = state;\n\n  if (empty) {\n    marks = storedMarks || $from.marks();\n  } else {\n    state.doc.nodesBetween(from, to, node => {\n      marks = [...marks, ...node.marks];\n    });\n  }\n\n  return marks;\n};\n\nexport default getSelectionMarks;\n","import { EditorState } from 'prosemirror-state';\nimport { Mark } from 'prosemirror-model';\n\nimport getSelectionMarks from './getSelectionMarks';\n\nexport const isLinkActive = (state: EditorState): boolean => {\n  const { schema, selection: { anchor, head, from } } = state;\n\n  if (!schema.marks.link) {\n    return false;\n  }\n\n  const isForwardSelection = anchor === from;\n  const linkMarks: Mark[] = getSelectionMarks(state).filter(mark => mark.type === schema.marks.link);\n\n  if (!linkMarks.length) {\n    return false;\n  }\n\n  const selectionHasOnlyMarks = isForwardSelection ?\n    (\n      state.doc.rangeHasMark(anchor, anchor + 1, schema.marks.link) &&\n      state.doc.rangeHasMark(head - 1, head, schema.marks.link)\n    ) : (\n      state.doc.rangeHasMark(anchor - 1, anchor, schema.marks.link) &&\n      state.doc.rangeHasMark(head, head + 1, schema.marks.link)\n    );\n\n  if (linkMarks.length === 1 && selectionHasOnlyMarks) {\n    return true;\n  }\n\n  return false;\n};\n\nexport default isLinkActive;\n","import { EditorState } from 'prosemirror-state';\nimport { NodeType, ResolvedPos } from 'prosemirror-model';\n\nconst findNodeType = (type: NodeType, $from: ResolvedPos): NodeType | null => {\n  for (let i = $from.depth; i > 0; i--) {\n    if ($from.node(i).type === type) {\n      return $from.node(i).type;\n    }\n  }\n\n  return null;\n};\n\nexport const isNodeActive = (state: EditorState, type: NodeType, attrs: any = {}): boolean => {\n  const { selection } = state;\n  const { $from, to } = selection;\n\n  const node: NodeType | null = findNodeType(type, $from);\n\n  if (!Object.entries(attrs).length || !node) {\n    return !!node;\n  }\n\n  return to <= $from.end() && $from.parent.hasMarkup(type, attrs);\n};\n\nexport default isNodeActive;\n","import { EditorView } from 'prosemirror-view';\n\ninterface TooltipPosition {\n  bottom: number;\n  left: number;\n}\n\nexport const calculateTooltipPos = (view: EditorView): TooltipPosition => {\n  const { state: { selection } } = view;\n  const { from, to } = selection;\n\n  // These are in screen coordinates\n  const start = view.coordsAtPos(from);\n  const end = view.coordsAtPos(to);\n\n  // The box in which the tooltip is positioned, to use as base\n  const box = view.dom.getBoundingClientRect();\n\n  // Find a center-ish x position from the selection endpoints (when\n  // crossing lines, end may be more to the left)\n  const left = Math.max((start.left + end.left) / 2, start.left + 3);\n\n  return {\n    left: left - box.left,\n    bottom: box.bottom - start.top\n  };\n};\n","import { EditorState } from 'prosemirror-state';\nimport { Node } from 'prosemirror-model';\n\nexport const getSelectionNodes = (state: EditorState): Node[] => {\n  const nodes: Node[] = [];\n\n  const { selection: { from, to } } = state;\n\n  state.doc.nodesBetween(from, to, node => {\n    nodes.push(node);\n  });\n\n  return nodes;\n};\n\nexport default getSelectionNodes;\n","import { MarkType, Node as PrmosemirroNode } from 'prosemirror-model';\nimport { SelectionRange } from 'prosemirror-state';\n\n// Ref: https://github.com/ProseMirror/prosemirror-commands/blob/master/src/commands.js\n\nexport const markApplies = (doc: PrmosemirroNode, ranges: SelectionRange[], type: MarkType): boolean => {\n  for (const range of ranges) {\n    const { $from, $to } = range;\n\n    let canApply = $from.depth === 0 ? doc.type.allowsMarkType(type) : false;\n\n    doc.nodesBetween($from.pos, $to.pos, (node: PrmosemirroNode): boolean => {\n      if (canApply) {\n        return false;\n      }\n\n      canApply = node.inlineContent && node.type.allowsMarkType(type);\n      return true;\n    });\n\n    if (canApply) {\n      return true;\n    }\n  }\n  return false;\n};\n\nexport default markApplies;\n","import { InputRule } from \"prosemirror-inputrules\"\nimport { MarkType } from \"prosemirror-model\"\n\nexport const markInputRule = (regexp: RegExp, markType: MarkType, attrs?: Record<string, unknown>): InputRule => {\n\n  return new InputRule(regexp, (state, match, start, end) => {\n\n    const tr = state.tr\n\n    if (match[2]) {\n      const textStart = start + match[0].indexOf(match[2])\n      const textEnd = textStart + match[2].length\n\n      if (textEnd < end) {\n        tr.delete(textEnd, end)\n      }\n\n      if (textStart > start) {\n        tr.delete(start, textStart)\n      }\n\n      end = start + match[2].length\n    }\n    return tr.addMark(start, end, markType.create(attrs))\n  })\n}\n\nexport default markInputRule\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}