@milkdown/prose
Advanced tools
+16
-3
@@ -90,2 +90,15 @@ import { PluginKey, Plugin, NodeSelection } from 'prosemirror-state'; | ||
| return false; | ||
| }, | ||
| keydown: (view, event) => { | ||
| if (!(android && chrome && event.key === "Enter")) | ||
| return false; | ||
| if (view.composing) return false; | ||
| if (view.someProp( | ||
| "handleKeyDown", | ||
| (f) => f(view, event) | ||
| )) { | ||
| event.preventDefault(); | ||
| return true; | ||
| } | ||
| return false; | ||
| } | ||
@@ -113,3 +126,3 @@ }, | ||
| let initialStoredMarks = []; | ||
| let markEnd = end; | ||
| let markEnd; | ||
| const captured = { | ||
@@ -169,3 +182,3 @@ group, | ||
| (_c = options.beforeDispatch) == null ? void 0 : _c.call(options, { | ||
| match: [fullMatch, group != null ? group : ""], | ||
| match: [fullMatch, group], | ||
| start, | ||
@@ -334,3 +347,3 @@ end, | ||
| return { | ||
| pos: i > 0 ? $pos.before(i) : 0, | ||
| pos: $pos.before(i), | ||
| start: $pos.start(i), | ||
@@ -337,0 +350,0 @@ depth: i, |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sources":["../src/toolkit/browser.ts","../src/toolkit/input-rules/custom-input-rules.ts","../src/toolkit/input-rules/mark-rule.ts","../src/toolkit/input-rules/node-rule.ts","../src/toolkit/position/index.ts","../src/toolkit/prose/helper.ts","../src/toolkit/prose/node.ts","../src/toolkit/prose/schema.ts","../src/toolkit/prose/selection.ts"],"sourcesContent":["/**\n * Copy paste from:\n * https://github.com/ProseMirror/prosemirror-view/blob/master/src/browser.ts\n */\n\nconst nav = typeof navigator != 'undefined' ? navigator : null\nconst doc = typeof document != 'undefined' ? document : null\nconst agent = (nav && nav.userAgent) || ''\n\nconst ie_edge = /Edge\\/(\\d+)/.exec(agent)\nconst ie_upto10 = /MSIE \\d/.exec(agent)\nconst ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(agent)\n\nexport const ie = !!(ie_upto10 || ie_11up || ie_edge)\nexport const ie_version = ie_upto10\n ? (document as typeof document & { documentMode: unknown }).documentMode\n : ie_11up\n ? +ie_11up[1]!\n : ie_edge\n ? +ie_edge[1]!\n : 0\nexport const gecko = !ie && /gecko\\/(\\d+)/i.test(agent)\nexport const gecko_version =\n gecko && +(/Firefox\\/(\\d+)/.exec(agent) || [0, 0])[1]\n\nconst _chrome = !ie && /Chrome\\/(\\d+)/.exec(agent)\nexport const chrome = !!_chrome\nexport const chrome_version = _chrome ? +_chrome[1]! : 0\nexport const safari = !ie && !!nav && /Apple Computer/.test(nav.vendor)\n// Is true for both iOS and iPadOS for convenience\nexport const ios =\n safari && (/Mobile\\/\\w+/.test(agent) || (!!nav && nav.maxTouchPoints > 2))\nexport const mac = ios || (nav ? /Mac/.test(nav.platform) : false)\nexport const android = /Android \\d/.test(agent)\nexport const webkit =\n !!doc && 'webkitFontSmoothing' in doc.documentElement.style\nexport const webkit_version = webkit\n ? +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1]\n : 0\n","import type { InputRule } from '../../inputrules'\nimport type { EditorState, TextSelection, Transaction } from '../../state'\nimport type { EditorView } from '../../view'\n\nimport { Plugin, PluginKey } from '../../state'\n\nfunction run(\n view: EditorView,\n from: number,\n to: number,\n text: string,\n rules: InputRule[],\n plugin: Plugin\n) {\n if (view.composing) return false\n const state = view.state\n const $from = state.doc.resolve(from)\n if ($from.parent.type.spec.code) return false\n const textBefore =\n $from.parent.textBetween(\n Math.max(0, $from.parentOffset - 500),\n $from.parentOffset,\n undefined,\n '\\uFFFC'\n ) + text\n for (let _matcher of rules) {\n const matcher = _matcher as unknown as {\n match: RegExp\n handler: (\n state: EditorState,\n match: string[],\n from: number,\n to: number\n ) => Transaction\n undoable?: boolean\n }\n const match = matcher.match.exec(textBefore)\n const tr =\n match &&\n match[0] &&\n matcher.handler(state, match, from - (match[0].length - text.length), to)\n if (!tr) continue\n if (matcher.undoable !== false)\n tr.setMeta(plugin, { transform: tr, from, to, text })\n view.dispatch(tr)\n return true\n }\n return false\n}\n\nexport const customInputRulesKey = new PluginKey('MILKDOWN_CUSTOM_INPUTRULES')\nexport function customInputRules({ rules }: { rules: InputRule[] }): Plugin {\n const plugin: Plugin = new Plugin({\n key: customInputRulesKey,\n isInputRules: true,\n\n state: {\n init() {\n return null\n },\n apply(this: typeof plugin, tr, prev) {\n const stored = tr.getMeta(this)\n if (stored) return stored\n return tr.selectionSet || tr.docChanged ? null : prev\n },\n },\n props: {\n handleTextInput(view, from, to, text) {\n return run(view, from, to, text, rules, plugin)\n },\n handleDOMEvents: {\n compositionend: (view) => {\n setTimeout(() => {\n const { $cursor } = view.state.selection as TextSelection\n if ($cursor) run(view, $cursor.pos, $cursor.pos, '', rules, plugin)\n })\n return false\n },\n },\n handleKeyDown(view, event) {\n if (event.key !== 'Enter') return false\n const { $cursor } = view.state.selection as TextSelection\n if ($cursor)\n return run(view, $cursor.pos, $cursor.pos, '\\n', rules, plugin)\n return false\n },\n },\n })\n return plugin\n}\n","import type { Mark, MarkType } from '../../model'\nimport type { Captured, Options } from './common'\n\nimport { InputRule } from '../../inputrules'\n\n/// Create an input rule for a mark.\nexport function markRule(\n regexp: RegExp,\n markType: MarkType,\n options: Options = {}\n): InputRule {\n return new InputRule(regexp, (state, match, start, end) => {\n const { tr } = state\n const matchLength = match.length\n\n let group = match[matchLength - 1]\n let fullMatch = match[0]\n let initialStoredMarks: readonly Mark[] = []\n\n let markEnd = end\n\n const captured: Captured = {\n group,\n fullMatch,\n start,\n end,\n }\n\n const result = options.updateCaptured?.(captured)\n Object.assign(captured, result)\n ;({ group, fullMatch, start, end } = captured)\n\n if (fullMatch === null) return null\n\n if (group?.trim() === '') return null\n\n if (group) {\n const startSpaces = fullMatch.search(/\\S/)\n const textStart = start + fullMatch.indexOf(group)\n const textEnd = textStart + group.length\n\n initialStoredMarks = tr.storedMarks ?? []\n\n if (textEnd < end) tr.delete(textEnd, end)\n\n if (textStart > start) tr.delete(start + startSpaces, textStart)\n\n markEnd = start + startSpaces + group.length\n\n const attrs = options.getAttr?.(match)\n\n tr.addMark(start, markEnd, markType.create(attrs))\n tr.setStoredMarks(initialStoredMarks)\n\n options.beforeDispatch?.({ match, start, end, tr })\n }\n\n return tr\n })\n}\n","import type { NodeType } from '../../model'\nimport type { Captured, Options } from './common'\n\nimport { InputRule } from '../../inputrules'\n\n/// Create an input rule for a node.\nexport function nodeRule(\n regexp: RegExp,\n nodeType: NodeType,\n options: Options = {}\n): InputRule {\n return new InputRule(regexp, (state, match, start, end) => {\n const { tr } = state\n let group: string | undefined = match[1]\n let fullMatch = match[0]\n\n const captured: Captured = {\n group,\n fullMatch,\n start,\n end,\n }\n\n const result = options.updateCaptured?.(captured)\n Object.assign(captured, result)\n ;({ group, fullMatch, start, end } = captured)\n\n if (fullMatch === null) return null\n\n if (!group || group.trim() === '') return null\n\n const attrs = options.getAttr?.(match)\n const node = nodeType.createAndFill(attrs)\n\n if (node) {\n tr.replaceRangeWith(\n nodeType.isBlock ? tr.doc.resolve(start).before() : start,\n end,\n node\n )\n options.beforeDispatch?.({\n match: [fullMatch, group ?? ''],\n start,\n end,\n tr,\n })\n }\n\n return tr\n })\n}\n","import { expectDomTypeError, missingRootElement } from '@milkdown/exception'\n\nimport type { EditorView } from '../../view'\n\ntype Point = [top: number, left: number]\n\nexport function calculateNodePosition(\n view: EditorView,\n target: HTMLElement,\n handler: (\n selectedRect: DOMRect,\n targetRect: DOMRect,\n parentRect: DOMRect\n ) => Point\n) {\n const state = view.state\n const { from } = state.selection\n\n const { node } = view.domAtPos(from)\n const element = node instanceof Text ? node.parentElement : node\n if (!(element instanceof HTMLElement)) throw expectDomTypeError(element)\n\n const selectedNodeRect = element.getBoundingClientRect()\n const targetNodeRect = target.getBoundingClientRect()\n const parent = target.parentElement\n if (!parent) throw expectDomTypeError(parent)\n\n const parentNodeRect = parent.getBoundingClientRect()\n\n const [top, left] = handler(selectedNodeRect, targetNodeRect, parentNodeRect)\n\n target.style.top = `${top}px`\n target.style.left = `${left}px`\n}\n\ninterface Rect {\n left: number\n right: number\n top: number\n bottom: number\n}\n\nexport function calculateTextPosition(\n view: EditorView,\n target: HTMLElement,\n handler: (\n start: Rect,\n end: Rect,\n targetRect: DOMRect,\n parentRect: DOMRect\n ) => Point\n) {\n const state = view.state\n const { from, to } = state.selection\n const start = view.coordsAtPos(from)\n const end = view.coordsAtPos(to)\n\n const targetNodeRect = target.getBoundingClientRect()\n const parent = target.parentElement\n if (!parent) throw missingRootElement()\n\n const parentNodeRect = parent.getBoundingClientRect()\n\n const [top, left] = handler(start, end, targetNodeRect, parentNodeRect)\n\n target.style.top = `${top}px`\n target.style.left = `${left}px`\n}\n\nfunction minMax(value = 0, min = 0, max = 0): number {\n return Math.min(Math.max(value, min), max)\n}\n\nexport function posToDOMRect(\n view: EditorView,\n from: number,\n to: number\n): DOMRect {\n const minPos = 0\n const maxPos = view.state.doc.content.size\n const resolvedFrom = minMax(from, minPos, maxPos)\n const resolvedEnd = minMax(to, minPos, maxPos)\n const start = view.coordsAtPos(resolvedFrom)\n const end = view.coordsAtPos(resolvedEnd, -1)\n const top = Math.min(start.top, end.top)\n const bottom = Math.max(start.bottom, end.bottom)\n const left = Math.min(start.left, end.left)\n const right = Math.max(start.right, end.right)\n const width = right - left\n const height = bottom - top\n const x = left\n const y = top\n const data = {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x,\n y,\n }\n\n return {\n ...data,\n toJSON: () => data,\n }\n}\n","import type { Slice, NodeType, Node as ProseNode } from '../../model'\nimport type { Transaction } from '../../state'\n\nexport function cloneTr(tr: Transaction): Transaction {\n return Object.assign(Object.create(tr), tr).setTime(Date.now())\n}\n\nexport function equalNodeType(\n nodeType: NodeType | NodeType[],\n node: ProseNode\n) {\n return (\n (Array.isArray(nodeType) && nodeType.includes(node.type)) ||\n node.type === nodeType\n )\n}\n\nexport function isTextOnlySlice(slice: Slice): ProseNode | false {\n if (slice.content.childCount === 1) {\n const node = slice.content.firstChild\n if (node?.type.name === 'text' && node.marks.length === 0) return node\n\n if (node?.type.name === 'paragraph' && node.childCount === 1) {\n const _node = node.firstChild\n if (_node?.type.name === 'text' && _node.marks.length === 0) return _node\n }\n }\n\n return false\n}\n","import type { MarkType, Node, NodeType, ResolvedPos } from '../../model'\nimport type { Predicate } from './types'\n\nexport interface NodeWithPos {\n pos: number\n node: Node\n}\nexport interface NodeWithFromTo {\n from: number\n to: number\n node: Node\n}\n\nexport function flatten(node: Node, descend = true): NodeWithPos[] {\n const result: NodeWithPos[] = []\n node.descendants((child, pos) => {\n result.push({ node: child, pos })\n if (!descend) return false\n\n return undefined\n })\n return result\n}\n\nexport function findChildren(predicate: Predicate) {\n return (node: Node, descend?: boolean): NodeWithPos[] =>\n flatten(node, descend).filter((child) => predicate(child.node))\n}\n\nexport function findChildrenByMark(\n node: Node,\n markType: MarkType,\n descend?: boolean\n): NodeWithPos[] {\n return findChildren((child) => Boolean(markType.isInSet(child.marks)))(\n node,\n descend\n )\n}\n\nexport function findParent(predicate: Predicate) {\n return ($pos: ResolvedPos): NodeWithFromTo | undefined => {\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth)\n\n if (predicate(node)) {\n const from = $pos.before(depth)\n const to = $pos.after(depth)\n return {\n from,\n to,\n node,\n }\n }\n }\n\n return undefined\n }\n}\n\nexport function findParentNodeType($pos: ResolvedPos, nodeType: NodeType) {\n return findParent((node) => node.type === nodeType)($pos)\n}\n","import { getAtomFromSchemaFail } from '@milkdown/exception'\n\nimport type { MarkType, NodeType, Schema } from '../../model'\n\nexport function getNodeFromSchema(type: string, schema: Schema): NodeType {\n const target = schema.nodes[type]\n\n if (!target) throw getAtomFromSchemaFail('node', type)\n\n return target\n}\n\nexport function getMarkFromSchema(type: string, schema: Schema): MarkType {\n const target = schema.marks[type]\n\n if (!target) throw getAtomFromSchemaFail('mark', type)\n\n return target\n}\n","import type { NodeType, Node as ProseNode, ResolvedPos } from '../../model'\nimport type { EditorState, Selection } from '../../state'\nimport type { Predicate } from './types'\n\nimport { NodeSelection } from '../../state'\nimport { equalNodeType } from './helper'\n\nexport interface ContentNodeWithPos {\n pos: number\n start: number\n depth: number\n node: ProseNode\n}\n\nexport function findParentNodeClosestToPos(predicate: Predicate) {\n return ($pos: ResolvedPos): ContentNodeWithPos | undefined => {\n for (let i = $pos.depth; i > 0; i--) {\n const node = $pos.node(i)\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node,\n }\n }\n }\n\n return undefined\n }\n}\n\nexport function findParentNode(predicate: Predicate) {\n return (selection: Selection): ContentNodeWithPos | undefined => {\n return findParentNodeClosestToPos(predicate)(selection.$from)\n }\n}\n\nexport function findSelectedNodeOfType(\n selection: Selection,\n nodeType: NodeType\n): ContentNodeWithPos | undefined {\n if (!(selection instanceof NodeSelection)) return\n\n const { node, $from } = selection\n if (equalNodeType(nodeType, node))\n return {\n node,\n pos: $from.pos,\n start: $from.start($from.depth),\n depth: $from.depth,\n }\n\n return undefined\n}\n\nexport type FindNodeInSelectionResult = {\n hasNode: boolean\n pos: number\n target: ProseNode | null\n}\n\nexport const findNodeInSelection = (\n state: EditorState,\n node: NodeType\n): FindNodeInSelectionResult => {\n const { selection, doc } = state\n if (selection instanceof NodeSelection) {\n return {\n hasNode: selection.node.type === node,\n pos: selection.from,\n target: selection.node,\n }\n }\n\n const { from, to } = selection\n\n let hasNode = false\n let pos = -1\n let target: ProseNode | null = null\n doc.nodesBetween(from, to, (n, p) => {\n if (target) return false\n if (n.type === node) {\n hasNode = true\n pos = p\n target = n\n return false\n }\n return true\n })\n\n return {\n hasNode,\n pos,\n target,\n }\n}\n"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sources":["../src/toolkit/browser.ts","../src/toolkit/input-rules/custom-input-rules.ts","../src/toolkit/input-rules/mark-rule.ts","../src/toolkit/input-rules/node-rule.ts","../src/toolkit/position/index.ts","../src/toolkit/prose/helper.ts","../src/toolkit/prose/node.ts","../src/toolkit/prose/schema.ts","../src/toolkit/prose/selection.ts"],"sourcesContent":["/**\n * Copy paste from:\n * https://github.com/ProseMirror/prosemirror-view/blob/master/src/browser.ts\n */\n\nconst nav = typeof navigator != 'undefined' ? navigator : null\nconst doc = typeof document != 'undefined' ? document : null\nconst agent = (nav && nav.userAgent) || ''\n\nconst ie_edge = /Edge\\/(\\d+)/.exec(agent)\nconst ie_upto10 = /MSIE \\d/.exec(agent)\nconst ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(agent)\n\nexport const ie = !!(ie_upto10 || ie_11up || ie_edge)\nexport const ie_version = ie_upto10\n ? (document as typeof document & { documentMode: unknown }).documentMode\n : ie_11up\n ? +ie_11up[1]!\n : ie_edge\n ? +ie_edge[1]!\n : 0\nexport const gecko = !ie && /gecko\\/(\\d+)/i.test(agent)\nexport const gecko_version =\n gecko && +(/Firefox\\/(\\d+)/.exec(agent) || [0, 0])[1]\n\nconst _chrome = !ie && /Chrome\\/(\\d+)/.exec(agent)\nexport const chrome = !!_chrome\nexport const chrome_version = _chrome ? +_chrome[1]! : 0\nexport const safari = !ie && !!nav && /Apple Computer/.test(nav.vendor)\n// Is true for both iOS and iPadOS for convenience\nexport const ios =\n safari && (/Mobile\\/\\w+/.test(agent) || (!!nav && nav.maxTouchPoints > 2))\nexport const mac = ios || (nav ? /Mac/.test(nav.platform) : false)\nexport const android = /Android \\d/.test(agent)\nexport const webkit =\n !!doc && 'webkitFontSmoothing' in doc.documentElement.style\nexport const webkit_version = webkit\n ? +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1]\n : 0\n","import type { InputRule } from '../../inputrules'\nimport type { EditorState, TextSelection, Transaction } from '../../state'\nimport type { EditorView } from '../../view'\n\nimport { Plugin, PluginKey } from '../../state'\nimport { android, chrome } from '../browser'\n\nfunction run(\n view: EditorView,\n from: number,\n to: number,\n text: string,\n rules: InputRule[],\n plugin: Plugin\n) {\n if (view.composing) return false\n const state = view.state\n const $from = state.doc.resolve(from)\n if ($from.parent.type.spec.code) return false\n const textBefore =\n $from.parent.textBetween(\n Math.max(0, $from.parentOffset - 500),\n $from.parentOffset,\n undefined,\n '\\uFFFC'\n ) + text\n for (let _matcher of rules) {\n const matcher = _matcher as unknown as {\n match: RegExp\n handler: (\n state: EditorState,\n match: string[],\n from: number,\n to: number\n ) => Transaction\n undoable?: boolean\n }\n const match = matcher.match.exec(textBefore)\n const tr =\n match &&\n match[0] &&\n matcher.handler(state, match, from - (match[0].length - text.length), to)\n if (!tr) continue\n if (matcher.undoable !== false)\n tr.setMeta(plugin, { transform: tr, from, to, text })\n view.dispatch(tr)\n return true\n }\n return false\n}\n\nexport const customInputRulesKey = new PluginKey('MILKDOWN_CUSTOM_INPUTRULES')\nexport function customInputRules({ rules }: { rules: InputRule[] }): Plugin {\n const plugin: Plugin = new Plugin({\n key: customInputRulesKey,\n isInputRules: true,\n\n state: {\n init() {\n return null\n },\n apply(this: typeof plugin, tr, prev) {\n const stored = tr.getMeta(this)\n if (stored) return stored\n return tr.selectionSet || tr.docChanged ? null : prev\n },\n },\n props: {\n handleTextInput(view, from, to, text) {\n return run(view, from, to, text, rules, plugin)\n },\n handleDOMEvents: {\n compositionend: (view) => {\n setTimeout(() => {\n const { $cursor } = view.state.selection as TextSelection\n if ($cursor) run(view, $cursor.pos, $cursor.pos, '', rules, plugin)\n })\n return false\n },\n keydown: (view, event) => {\n // On Chrome Android, prosemirror-view suppresses Enter keydown events\n // to avoid input corruption during composition. It then relies on DOM\n // mutation detection to retroactively handle Enter. However, this\n // fallback fails with custom node views (e.g. list-item-block) whose\n // wrapper DOM structure prevents the Enter detection heuristics from\n // recognizing the mutation. We intercept Enter here — before\n // prosemirror-view's suppression — and manually route it through\n // handleKeyDown so that keymaps (splitListItem, etc.) work correctly.\n if (!(android && chrome && (event as KeyboardEvent).key === 'Enter'))\n return false\n if (view.composing) return false\n if (\n view.someProp('handleKeyDown', (f) =>\n f(view, event as KeyboardEvent)\n )\n ) {\n event.preventDefault()\n return true\n }\n return false\n },\n },\n handleKeyDown(view, event) {\n if (event.key !== 'Enter') return false\n const { $cursor } = view.state.selection as TextSelection\n if ($cursor)\n return run(view, $cursor.pos, $cursor.pos, '\\n', rules, plugin)\n return false\n },\n },\n })\n return plugin\n}\n","import type { Mark, MarkType } from '../../model'\nimport type { Captured, Options } from './common'\n\nimport { InputRule } from '../../inputrules'\n\n/// Create an input rule for a mark.\nexport function markRule(\n regexp: RegExp,\n markType: MarkType,\n options: Options = {}\n): InputRule {\n return new InputRule(regexp, (state, match, start, end) => {\n const { tr } = state\n const matchLength = match.length\n\n let group = match[matchLength - 1]\n let fullMatch = match[0]\n let initialStoredMarks: readonly Mark[] = []\n\n let markEnd: number\n\n const captured: Captured = {\n group,\n fullMatch,\n start,\n end,\n }\n\n const result = options.updateCaptured?.(captured)\n Object.assign(captured, result)\n ;({ group, fullMatch, start, end } = captured)\n\n if (fullMatch === null) return null\n\n if (group?.trim() === '') return null\n\n if (group) {\n const startSpaces = fullMatch.search(/\\S/)\n const textStart = start + fullMatch.indexOf(group)\n const textEnd = textStart + group.length\n\n initialStoredMarks = tr.storedMarks ?? []\n\n if (textEnd < end) tr.delete(textEnd, end)\n\n if (textStart > start) tr.delete(start + startSpaces, textStart)\n\n markEnd = start + startSpaces + group.length\n\n const attrs = options.getAttr?.(match)\n\n tr.addMark(start, markEnd, markType.create(attrs))\n tr.setStoredMarks(initialStoredMarks)\n\n options.beforeDispatch?.({ match, start, end, tr })\n }\n\n return tr\n })\n}\n","import type { NodeType } from '../../model'\nimport type { Captured, Options } from './common'\n\nimport { InputRule } from '../../inputrules'\n\n/// Create an input rule for a node.\nexport function nodeRule(\n regexp: RegExp,\n nodeType: NodeType,\n options: Options = {}\n): InputRule {\n return new InputRule(regexp, (state, match, start, end) => {\n const { tr } = state\n let group: string | undefined = match[1]\n let fullMatch = match[0]\n\n const captured: Captured = {\n group,\n fullMatch,\n start,\n end,\n }\n\n const result = options.updateCaptured?.(captured)\n Object.assign(captured, result)\n ;({ group, fullMatch, start, end } = captured)\n\n if (fullMatch === null) return null\n\n if (!group || group.trim() === '') return null\n\n const attrs = options.getAttr?.(match)\n const node = nodeType.createAndFill(attrs)\n\n if (node) {\n tr.replaceRangeWith(\n nodeType.isBlock ? tr.doc.resolve(start).before() : start,\n end,\n node\n )\n options.beforeDispatch?.({\n match: [fullMatch, group],\n start,\n end,\n tr,\n })\n }\n\n return tr\n })\n}\n","import { expectDomTypeError, missingRootElement } from '@milkdown/exception'\n\nimport type { EditorView } from '../../view'\n\ntype Point = [top: number, left: number]\n\nexport function calculateNodePosition(\n view: EditorView,\n target: HTMLElement,\n handler: (\n selectedRect: DOMRect,\n targetRect: DOMRect,\n parentRect: DOMRect\n ) => Point\n) {\n const state = view.state\n const { from } = state.selection\n\n const { node } = view.domAtPos(from)\n const element = node instanceof Text ? node.parentElement : node\n if (!(element instanceof HTMLElement)) throw expectDomTypeError(element)\n\n const selectedNodeRect = element.getBoundingClientRect()\n const targetNodeRect = target.getBoundingClientRect()\n const parent = target.parentElement\n if (!parent) throw expectDomTypeError(parent)\n\n const parentNodeRect = parent.getBoundingClientRect()\n\n const [top, left] = handler(selectedNodeRect, targetNodeRect, parentNodeRect)\n\n target.style.top = `${top}px`\n target.style.left = `${left}px`\n}\n\ninterface Rect {\n left: number\n right: number\n top: number\n bottom: number\n}\n\nexport function calculateTextPosition(\n view: EditorView,\n target: HTMLElement,\n handler: (\n start: Rect,\n end: Rect,\n targetRect: DOMRect,\n parentRect: DOMRect\n ) => Point\n) {\n const state = view.state\n const { from, to } = state.selection\n const start = view.coordsAtPos(from)\n const end = view.coordsAtPos(to)\n\n const targetNodeRect = target.getBoundingClientRect()\n const parent = target.parentElement\n if (!parent) throw missingRootElement()\n\n const parentNodeRect = parent.getBoundingClientRect()\n\n const [top, left] = handler(start, end, targetNodeRect, parentNodeRect)\n\n target.style.top = `${top}px`\n target.style.left = `${left}px`\n}\n\nfunction minMax(value = 0, min = 0, max = 0): number {\n return Math.min(Math.max(value, min), max)\n}\n\nexport function posToDOMRect(\n view: EditorView,\n from: number,\n to: number\n): DOMRect {\n const minPos = 0\n const maxPos = view.state.doc.content.size\n const resolvedFrom = minMax(from, minPos, maxPos)\n const resolvedEnd = minMax(to, minPos, maxPos)\n const start = view.coordsAtPos(resolvedFrom)\n const end = view.coordsAtPos(resolvedEnd, -1)\n const top = Math.min(start.top, end.top)\n const bottom = Math.max(start.bottom, end.bottom)\n const left = Math.min(start.left, end.left)\n const right = Math.max(start.right, end.right)\n const width = right - left\n const height = bottom - top\n const x = left\n const y = top\n const data = {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x,\n y,\n }\n\n return {\n ...data,\n toJSON: () => data,\n }\n}\n","import type { Slice, NodeType, Node as ProseNode } from '../../model'\nimport type { Transaction } from '../../state'\n\nexport function cloneTr(tr: Transaction): Transaction {\n return Object.assign(Object.create(tr), tr).setTime(Date.now())\n}\n\nexport function equalNodeType(\n nodeType: NodeType | NodeType[],\n node: ProseNode\n) {\n return (\n (Array.isArray(nodeType) && nodeType.includes(node.type)) ||\n node.type === nodeType\n )\n}\n\nexport function isTextOnlySlice(slice: Slice): ProseNode | false {\n if (slice.content.childCount === 1) {\n const node = slice.content.firstChild\n if (node?.type.name === 'text' && node.marks.length === 0) return node\n\n if (node?.type.name === 'paragraph' && node.childCount === 1) {\n const _node = node.firstChild\n if (_node?.type.name === 'text' && _node.marks.length === 0) return _node\n }\n }\n\n return false\n}\n","import type { MarkType, Node, NodeType, ResolvedPos } from '../../model'\nimport type { Predicate } from './types'\n\nexport interface NodeWithPos {\n pos: number\n node: Node\n}\nexport interface NodeWithFromTo {\n from: number\n to: number\n node: Node\n}\n\nexport function flatten(node: Node, descend = true): NodeWithPos[] {\n const result: NodeWithPos[] = []\n node.descendants((child, pos) => {\n result.push({ node: child, pos })\n if (!descend) return false\n\n return undefined\n })\n return result\n}\n\nexport function findChildren(predicate: Predicate) {\n return (node: Node, descend?: boolean): NodeWithPos[] =>\n flatten(node, descend).filter((child) => predicate(child.node))\n}\n\nexport function findChildrenByMark(\n node: Node,\n markType: MarkType,\n descend?: boolean\n): NodeWithPos[] {\n return findChildren((child) => Boolean(markType.isInSet(child.marks)))(\n node,\n descend\n )\n}\n\nexport function findParent(predicate: Predicate) {\n return ($pos: ResolvedPos): NodeWithFromTo | undefined => {\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth)\n\n if (predicate(node)) {\n const from = $pos.before(depth)\n const to = $pos.after(depth)\n return {\n from,\n to,\n node,\n }\n }\n }\n\n return undefined\n }\n}\n\nexport function findParentNodeType($pos: ResolvedPos, nodeType: NodeType) {\n return findParent((node) => node.type === nodeType)($pos)\n}\n","import { getAtomFromSchemaFail } from '@milkdown/exception'\n\nimport type { MarkType, NodeType, Schema } from '../../model'\n\nexport function getNodeFromSchema(type: string, schema: Schema): NodeType {\n const target = schema.nodes[type]\n\n if (!target) throw getAtomFromSchemaFail('node', type)\n\n return target\n}\n\nexport function getMarkFromSchema(type: string, schema: Schema): MarkType {\n const target = schema.marks[type]\n\n if (!target) throw getAtomFromSchemaFail('mark', type)\n\n return target\n}\n","import type { NodeType, Node as ProseNode, ResolvedPos } from '../../model'\nimport type { EditorState, Selection } from '../../state'\nimport type { Predicate } from './types'\n\nimport { NodeSelection } from '../../state'\nimport { equalNodeType } from './helper'\n\nexport interface ContentNodeWithPos {\n pos: number\n start: number\n depth: number\n node: ProseNode\n}\n\nexport function findParentNodeClosestToPos(predicate: Predicate) {\n return ($pos: ResolvedPos): ContentNodeWithPos | undefined => {\n for (let i = $pos.depth; i > 0; i--) {\n const node = $pos.node(i)\n if (predicate(node)) {\n return {\n pos: $pos.before(i),\n start: $pos.start(i),\n depth: i,\n node,\n }\n }\n }\n\n return undefined\n }\n}\n\nexport function findParentNode(predicate: Predicate) {\n return (selection: Selection): ContentNodeWithPos | undefined => {\n return findParentNodeClosestToPos(predicate)(selection.$from)\n }\n}\n\nexport function findSelectedNodeOfType(\n selection: Selection,\n nodeType: NodeType\n): ContentNodeWithPos | undefined {\n if (!(selection instanceof NodeSelection)) return\n\n const { node, $from } = selection\n if (equalNodeType(nodeType, node))\n return {\n node,\n pos: $from.pos,\n start: $from.start($from.depth),\n depth: $from.depth,\n }\n\n return undefined\n}\n\nexport type FindNodeInSelectionResult = {\n hasNode: boolean\n pos: number\n target: ProseNode | null\n}\n\nexport const findNodeInSelection = (\n state: EditorState,\n node: NodeType\n): FindNodeInSelectionResult => {\n const { selection, doc } = state\n if (selection instanceof NodeSelection) {\n return {\n hasNode: selection.node.type === node,\n pos: selection.from,\n target: selection.node,\n }\n }\n\n const { from, to } = selection\n\n let hasNode = false\n let pos = -1\n let target: ProseNode | null = null\n doc.nodesBetween(from, to, (n, p) => {\n if (target) return false\n if (n.type === node) {\n hasNode = true\n pos = p\n target = n\n return false\n }\n return true\n })\n\n return {\n hasNode,\n pos,\n target,\n }\n}\n"],"names":[],"mappings":";;;;AAKA,MAAM,GAAA,GAAM,OAAO,SAAA,IAAa,WAAA,GAAc,SAAA,GAAY,IAAA;AAC1D,MAAM,GAAA,GAAM,OAAO,QAAA,IAAY,WAAA,GAAc,QAAA,GAAW,IAAA;AACxD,MAAM,KAAA,GAAS,GAAA,IAAO,GAAA,CAAI,SAAA,IAAc,EAAA;AAExC,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA;AACxC,MAAM,SAAA,GAAY,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA;AACtC,MAAM,OAAA,GAAU,uCAAA,CAAwC,IAAA,CAAK,KAAK,CAAA;AAE3D,MAAM,EAAA,GAAK,CAAC,EAAE,SAAA,IAAa,OAAA,IAAW,OAAA,CAAA;AACtC,MAAM,UAAA,GAAa,SAAA,GACrB,QAAA,CAAyD,YAAA,GAC1D,OAAA,GACE,CAAC,OAAA,CAAQ,CAAC,CAAA,GACV,OAAA,GACE,CAAC,OAAA,CAAQ,CAAC,CAAA,GACV,CAAA;AACD,MAAM,KAAA,GAAQ,CAAC,EAAA,IAAM,eAAA,CAAgB,KAAK,KAAK,CAAA;AAC/C,MAAM,aAAA,GACX,KAAA,IAAS,CAAA,CAAE,gBAAA,CAAiB,IAAA,CAAK,KAAK,CAAA,IAAK,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA;AAEtD,MAAM,OAAA,GAAU,CAAC,EAAA,IAAM,eAAA,CAAgB,KAAK,KAAK,CAAA;AAC1C,MAAM,MAAA,GAAS,CAAC,CAAC,OAAA;AACjB,MAAM,cAAA,GAAiB,OAAA,GAAU,CAAC,OAAA,CAAQ,CAAC,CAAA,GAAK,CAAA;AAChD,MAAM,MAAA,GAAS,CAAC,EAAA,IAAM,CAAC,CAAC,GAAA,IAAO,gBAAA,CAAiB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAE/D,MAAM,GAAA,GACX,MAAA,KAAW,aAAA,CAAc,IAAA,CAAK,KAAK,KAAM,CAAC,CAAC,GAAA,IAAO,GAAA,CAAI,cAAA,GAAiB,CAAA,CAAA;AAClE,MAAM,MAAM,GAAA,KAAQ,GAAA,GAAM,MAAM,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,GAAI,KAAA,CAAA;AACrD,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA;AACvC,MAAM,SACX,CAAC,CAAC,GAAA,IAAO,qBAAA,IAAyB,IAAI,eAAA,CAAgB,KAAA;AACjD,MAAM,cAAA,GAAiB,MAAA,GAC1B,CAAA,CAAE,sBAAA,CAAuB,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA,IAAK,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA,GAC/D,CAAA;;;;;;;;;;;;;;;;;;AC/BJ,SAAS,IACP,IAAA,EACA,IAAA,EACA,EAAA,EACA,IAAA,EACA,OACA,MAAA,EACA;AACA,EAAA,IAAI,IAAA,CAAK,WAAW,OAAO,KAAA;AAC3B,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA;AACpC,EAAA,IAAI,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAM,OAAO,KAAA;AACxC,EAAA,MAAM,UAAA,GACJ,MAAM,MAAA,CAAO,WAAA;AAAA,IACX,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,eAAe,GAAG,CAAA;AAAA,IACpC,KAAA,CAAM,YAAA;AAAA,IACN,MAAA;AAAA,IACA;AAAA,GACF,GAAI,IAAA;AACN,EAAA,KAAA,IAAS,YAAY,KAAA,EAAO;AAC1B,IAAA,MAAM,OAAA,GAAU,QAAA;AAUhB,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA;AAC3C,IAAA,MAAM,KACJ,KAAA,IACA,KAAA,CAAM,CAAC,CAAA,IACP,QAAQ,OAAA,CAAQ,KAAA,EAAO,KAAA,EAAO,IAAA,IAAQ,MAAM,CAAC,CAAA,CAAE,MAAA,GAAS,IAAA,CAAK,SAAS,EAAE,CAAA;AAC1E,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,IAAI,QAAQ,QAAA,KAAa,KAAA;AACvB,MAAA,EAAA,CAAG,OAAA,CAAQ,QAAQ,EAAE,SAAA,EAAW,IAAI,IAAA,EAAM,EAAA,EAAI,MAAM,CAAA;AACtD,IAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEO,MAAM,mBAAA,GAAsB,IAAI,SAAA,CAAU,4BAA4B;AACtE,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAM,EAAmC;AAC1E,EAAA,MAAM,MAAA,GAAiB,IAAI,MAAA,CAAO;AAAA,IAChC,GAAA,EAAK,mBAAA;AAAA,IACL,YAAA,EAAc,IAAA;AAAA,IAEd,KAAA,EAAO;AAAA,MACL,IAAA,GAAO;AACL,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAAA,MACA,KAAA,CAA2B,IAAI,IAAA,EAAM;AACnC,QAAA,MAAM,MAAA,GAAS,EAAA,CAAG,OAAA,CAAQ,IAAI,CAAA;AAC9B,QAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,QAAA,OAAO,EAAA,CAAG,YAAA,IAAgB,EAAA,CAAG,UAAA,GAAa,IAAA,GAAO,IAAA;AAAA,MACnD;AAAA,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL,eAAA,CAAgB,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM;AACpC,QAAA,OAAO,IAAI,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,OAAO,MAAM,CAAA;AAAA,MAChD,CAAA;AAAA,MACA,eAAA,EAAiB;AAAA,QACf,cAAA,EAAgB,CAAC,IAAA,KAAS;AACxB,UAAA,UAAA,CAAW,MAAM;AACf,YAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA;AAC/B,YAAA,IAAI,OAAA,MAAa,IAAA,EAAM,OAAA,CAAQ,KAAK,OAAA,CAAQ,GAAA,EAAK,EAAA,EAAI,KAAA,EAAO,MAAM,CAAA;AAAA,UACpE,CAAC,CAAA;AACD,UAAA,OAAO,KAAA;AAAA,QACT,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,IAAA,EAAM,KAAA,KAAU;AASxB,UAAA,IAAI,EAAE,OAAA,IAAW,MAAA,IAAW,KAAA,CAAwB,GAAA,KAAQ,OAAA,CAAA;AAC1D,YAAA,OAAO,KAAA;AACT,UAAA,IAAI,IAAA,CAAK,WAAW,OAAO,KAAA;AAC3B,UAAA,IACE,IAAA,CAAK,QAAA;AAAA,YAAS,eAAA;AAAA,YAAiB,CAAC,CAAA,KAC9B,CAAA,CAAE,IAAA,EAAM,KAAsB;AAAA,WAChC,EACA;AACA,YAAA,KAAA,CAAM,cAAA,EAAe;AACrB,YAAA,OAAO,IAAA;AAAA,UACT;AACA,UAAA,OAAO,KAAA;AAAA,QACT;AAAA,OACF;AAAA,MACA,aAAA,CAAc,MAAM,KAAA,EAAO;AACzB,QAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,EAAS,OAAO,KAAA;AAClC,QAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA;AAC/B,QAAA,IAAI,OAAA;AACF,UAAA,OAAO,GAAA,CAAI,MAAM,OAAA,CAAQ,GAAA,EAAK,QAAQ,GAAA,EAAK,IAAA,EAAM,OAAO,MAAM,CAAA;AAChE,QAAA,OAAO,KAAA;AAAA,MACT;AAAA;AACF,GACD,CAAA;AACD,EAAA,OAAO,MAAA;AACT;;AC1GO,SAAS,QAAA,CACd,MAAA,EACA,QAAA,EACA,OAAA,GAAmB,EAAC,EACT;AACX,EAAA,OAAO,IAAI,SAAA,CAAU,MAAA,EAAQ,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,GAAA,KAAQ;AAX7D,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAYI,IAAA,MAAM,EAAE,IAAG,GAAI,KAAA;AACf,IAAA,MAAM,cAAc,KAAA,CAAM,MAAA;AAE1B,IAAA,IAAI,KAAA,GAAQ,KAAA,CAAM,WAAA,GAAc,CAAC,CAAA;AACjC,IAAA,IAAI,SAAA,GAAY,MAAM,CAAC,CAAA;AACvB,IAAA,IAAI,qBAAsC,EAAC;AAE3C,IAAA,IAAI,OAAA;AAEJ,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,KAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,OAAA,CAAQ,cAAA,KAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,EAAyB,QAAA,CAAA;AACxC,IAAA,MAAA,CAAO,MAAA,CAAO,UAAU,MAAM,CAAA;AAC7B,IAAA,CAAC,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,KAAI,GAAI,QAAA;AAErC,IAAA,IAAI,SAAA,KAAc,MAAM,OAAO,IAAA;AAE/B,IAAA,IAAA,CAAI,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,IAAA,EAAA,MAAW,EAAA,EAAI,OAAO,IAAA;AAEjC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,WAAA,GAAc,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA;AACzC,MAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,SAAA,CAAU,OAAA,CAAQ,KAAK,CAAA;AACjD,MAAA,MAAM,OAAA,GAAU,YAAY,KAAA,CAAM,MAAA;AAElC,MAAA,kBAAA,GAAA,CAAqB,EAAA,GAAA,EAAA,CAAG,WAAA,KAAH,IAAA,GAAA,EAAA,GAAkB,EAAC;AAExC,MAAA,IAAI,OAAA,GAAU,GAAA,EAAK,EAAA,CAAG,MAAA,CAAO,SAAS,GAAG,CAAA;AAEzC,MAAA,IAAI,YAAY,KAAA,EAAO,EAAA,CAAG,MAAA,CAAO,KAAA,GAAQ,aAAa,SAAS,CAAA;AAE/D,MAAA,OAAA,GAAU,KAAA,GAAQ,cAAc,KAAA,CAAM,MAAA;AAEtC,MAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,OAAA,CAAQ,OAAA,KAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,EAAkB,KAAA,CAAA;AAEhC,MAAA,EAAA,CAAG,QAAQ,KAAA,EAAO,OAAA,EAAS,QAAA,CAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AACjD,MAAA,EAAA,CAAG,eAAe,kBAAkB,CAAA;AAEpC,MAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,mBAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,EAAyB,EAAE,KAAA,EAAO,KAAA,EAAO,KAAK,EAAA,EAAG,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,EAAA;AAAA,EACT,CAAC,CAAA;AACH;;ACrDO,SAAS,QAAA,CACd,MAAA,EACA,QAAA,EACA,OAAA,GAAmB,EAAC,EACT;AACX,EAAA,OAAO,IAAI,SAAA,CAAU,MAAA,EAAQ,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,GAAA,KAAQ;AAX7D,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAYI,IAAA,MAAM,EAAE,IAAG,GAAI,KAAA;AACf,IAAA,IAAI,KAAA,GAA4B,MAAM,CAAC,CAAA;AACvC,IAAA,IAAI,SAAA,GAAY,MAAM,CAAC,CAAA;AAEvB,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,KAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,OAAA,CAAQ,cAAA,KAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,EAAyB,QAAA,CAAA;AACxC,IAAA,MAAA,CAAO,MAAA,CAAO,UAAU,MAAM,CAAA;AAC7B,IAAA,CAAC,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,KAAI,GAAI,QAAA;AAErC,IAAA,IAAI,SAAA,KAAc,MAAM,OAAO,IAAA;AAE/B,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,IAAA;AAE1C,IAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,OAAA,CAAQ,OAAA,KAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,EAAkB,KAAA,CAAA;AAChC,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAEzC,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,EAAA,CAAG,gBAAA;AAAA,QACD,QAAA,CAAS,UAAU,EAAA,CAAG,GAAA,CAAI,QAAQ,KAAK,CAAA,CAAE,QAAO,GAAI,KAAA;AAAA,QACpD,GAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,mBAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,EAAyB;AAAA,QACvB,KAAA,EAAO,CAAC,SAAA,EAAW,KAAK,CAAA;AAAA,QACxB,KAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF,CAAA;AAAA,IACF;AAEA,IAAA,OAAO,EAAA;AAAA,EACT,CAAC,CAAA;AACH;;;;;;;;;;;;;;;;;;;;;AC5CO,SAAS,qBAAA,CACd,IAAA,EACA,MAAA,EACA,OAAA,EAKA;AACA,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,KAAA,CAAM,SAAA;AAEvB,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,IAAA,CAAK,SAAS,IAAI,CAAA;AACnC,EAAA,MAAM,OAAA,GAAU,IAAA,YAAgB,IAAA,GAAO,IAAA,CAAK,aAAA,GAAgB,IAAA;AAC5D,EAAA,IAAI,EAAE,OAAA,YAAmB,WAAA,CAAA,EAAc,MAAM,mBAAmB,OAAO,CAAA;AAEvE,EAAA,MAAM,gBAAA,GAAmB,QAAQ,qBAAA,EAAsB;AACvD,EAAA,MAAM,cAAA,GAAiB,OAAO,qBAAA,EAAsB;AACpD,EAAA,MAAM,SAAS,MAAA,CAAO,aAAA;AACtB,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,kBAAA,CAAmB,MAAM,CAAA;AAE5C,EAAA,MAAM,cAAA,GAAiB,OAAO,qBAAA,EAAsB;AAEpD,EAAA,MAAM,CAAC,GAAA,EAAK,IAAI,IAAI,OAAA,CAAQ,gBAAA,EAAkB,gBAAgB,cAAc,CAAA;AAE5E,EAAA,MAAA,CAAO,KAAA,CAAM,GAAA,GAAM,CAAA,EAAG,GAAG,CAAA,EAAA,CAAA;AACzB,EAAA,MAAA,CAAO,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,EAAA,CAAA;AAC7B;AASO,SAAS,qBAAA,CACd,IAAA,EACA,MAAA,EACA,OAAA,EAMA;AACA,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,EAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,KAAA,CAAM,SAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AACnC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,WAAA,CAAY,EAAE,CAAA;AAE/B,EAAA,MAAM,cAAA,GAAiB,OAAO,qBAAA,EAAsB;AACpD,EAAA,MAAM,SAAS,MAAA,CAAO,aAAA;AACtB,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,kBAAA,EAAmB;AAEtC,EAAA,MAAM,cAAA,GAAiB,OAAO,qBAAA,EAAsB;AAEpD,EAAA,MAAM,CAAC,KAAK,IAAI,CAAA,GAAI,QAAQ,KAAA,EAAO,GAAA,EAAK,gBAAgB,cAAc,CAAA;AAEtE,EAAA,MAAA,CAAO,KAAA,CAAM,GAAA,GAAM,CAAA,EAAG,GAAG,CAAA,EAAA,CAAA;AACzB,EAAA,MAAA,CAAO,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,EAAA,CAAA;AAC7B;AAEA,SAAS,OAAO,KAAA,GAAQ,CAAA,EAAG,GAAA,GAAM,CAAA,EAAG,MAAM,CAAA,EAAW;AACnD,EAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,KAAA,EAAO,GAAG,GAAG,GAAG,CAAA;AAC3C;AAEO,SAAS,YAAA,CACd,IAAA,EACA,IAAA,EACA,EAAA,EACS;AACT,EAAA,MAAM,MAAA,GAAS,CAAA;AACf,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,IAAA;AACtC,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AAChD,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,EAAA,EAAI,MAAA,EAAQ,MAAM,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,YAAY,CAAA;AAC3C,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,WAAA,CAAY,WAAA,EAAa,EAAE,CAAA;AAC5C,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,GAAA,EAAK,IAAI,GAAG,CAAA;AACvC,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,IAAI,MAAM,CAAA;AAChD,EAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,IAAA,EAAM,IAAI,IAAI,CAAA;AAC1C,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,IAAI,KAAK,CAAA;AAC7C,EAAA,MAAM,QAAQ,KAAA,GAAQ,IAAA;AACtB,EAAA,MAAM,SAAS,MAAA,GAAS,GAAA;AACxB,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,MAAM,CAAA,GAAI,GAAA;AACV,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,GAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,CAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,iCACF,IAAA,CAAA,EADE;AAAA,IAEL,QAAQ,MAAM;AAAA,GAChB,CAAA;AACF;;ACxGO,SAAS,QAAQ,EAAA,EAA8B;AACpD,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA,EAAG,EAAE,CAAA,CAAE,OAAA,CAAQ,IAAA,CAAK,GAAA,EAAK,CAAA;AAChE;AAEO,SAAS,aAAA,CACd,UACA,IAAA,EACA;AACA,EAAA,OACG,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,SAAS,IAAA,CAAK,IAAI,CAAA,IACvD,IAAA,CAAK,IAAA,KAAS,QAAA;AAElB;AAEO,SAAS,gBAAgB,KAAA,EAAiC;AAC/D,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,UAAA,KAAe,CAAA,EAAG;AAClC,IAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,UAAA;AAC3B,IAAA,IAAA,CAAI,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAK,IAAA,MAAS,MAAA,IAAU,KAAK,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,IAAA;AAElE,IAAA,IAAA,CAAI,6BAAM,IAAA,CAAK,IAAA,MAAS,WAAA,IAAe,IAAA,CAAK,eAAe,CAAA,EAAG;AAC5D,MAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,MAAA,IAAA,CAAI,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAK,IAAA,MAAS,MAAA,IAAU,MAAM,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,KAAA;AAAA,IACtE;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;;AChBO,SAAS,OAAA,CAAQ,IAAA,EAAY,OAAA,GAAU,IAAA,EAAqB;AACjE,EAAA,MAAM,SAAwB,EAAC;AAC/B,EAAA,IAAA,CAAK,WAAA,CAAY,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC/B,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,KAAK,CAAA;AAChC,IAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAErB,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,aAAa,SAAA,EAAsB;AACjD,EAAA,OAAO,CAAC,IAAA,EAAY,OAAA,KAClB,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,KAAA,KAAU,SAAA,CAAU,KAAA,CAAM,IAAI,CAAC,CAAA;AAClE;AAEO,SAAS,kBAAA,CACd,IAAA,EACA,QAAA,EACA,OAAA,EACe;AACf,EAAA,OAAO,YAAA,CAAa,CAAC,KAAA,KAAU,OAAA,CAAQ,SAAS,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA;AAAA,IACnE,IAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,WAAW,SAAA,EAAsB;AAC/C,EAAA,OAAO,CAAC,IAAA,KAAkD;AACxD,IAAA,KAAA,IAAS,QAAQ,IAAA,CAAK,KAAA,EAAO,KAAA,GAAQ,CAAA,EAAG,SAAS,CAAA,EAAG;AAClD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AAE5B,MAAA,IAAI,SAAA,CAAU,IAAI,CAAA,EAAG;AACnB,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAC9B,QAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC3B,QAAA,OAAO;AAAA,UACL,IAAA;AAAA,UACA,EAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AAEO,SAAS,kBAAA,CAAmB,MAAmB,QAAA,EAAoB;AACxE,EAAA,OAAO,WAAW,CAAC,IAAA,KAAS,KAAK,IAAA,KAAS,QAAQ,EAAE,IAAI,CAAA;AAC1D;;AC1DO,SAAS,iBAAA,CAAkB,MAAc,MAAA,EAA0B;AACxE,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAEhC,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,qBAAA,CAAsB,QAAQ,IAAI,CAAA;AAErD,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,iBAAA,CAAkB,MAAc,MAAA,EAA0B;AACxE,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAEhC,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,qBAAA,CAAsB,QAAQ,IAAI,CAAA;AAErD,EAAA,OAAO,MAAA;AACT;;ACJO,SAAS,2BAA2B,SAAA,EAAsB;AAC/D,EAAA,OAAO,CAAC,IAAA,KAAsD;AAC5D,IAAA,KAAA,IAAS,CAAA,GAAI,IAAA,CAAK,KAAA,EAAO,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AACnC,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AACxB,MAAA,IAAI,SAAA,CAAU,IAAI,CAAA,EAAG;AACnB,QAAA,OAAO;AAAA,UACL,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAAA,UAClB,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAAA,UACnB,KAAA,EAAO,CAAA;AAAA,UACP;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AAEO,SAAS,eAAe,SAAA,EAAsB;AACnD,EAAA,OAAO,CAAC,SAAA,KAAyD;AAC/D,IAAA,OAAO,0BAAA,CAA2B,SAAS,CAAA,CAAE,SAAA,CAAU,KAAK,CAAA;AAAA,EAC9D,CAAA;AACF;AAEO,SAAS,sBAAA,CACd,WACA,QAAA,EACgC;AAChC,EAAA,IAAI,EAAE,qBAAqB,aAAA,CAAA,EAAgB;AAE3C,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,SAAA;AACxB,EAAA,IAAI,aAAA,CAAc,UAAU,IAAI,CAAA;AAC9B,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,KAAK,KAAA,CAAM,GAAA;AAAA,MACX,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AAAA,MAC9B,OAAO,KAAA,CAAM;AAAA,KACf;AAEF,EAAA,OAAO,MAAA;AACT;AAQO,MAAM,mBAAA,GAAsB,CACjC,KAAA,EACA,IAAA,KAC8B;AAC9B,EAAA,MAAM,EAAE,SAAA,EAAW,GAAA,EAAI,GAAI,KAAA;AAC3B,EAAA,IAAI,qBAAqB,aAAA,EAAe;AACtC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,IAAA,KAAS,IAAA;AAAA,MACjC,KAAK,SAAA,CAAU,IAAA;AAAA,MACf,QAAQ,SAAA,CAAU;AAAA,KACpB;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,SAAA;AAErB,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,MAAA,GAA2B,IAAA;AAC/B,EAAA,GAAA,CAAI,YAAA,CAAa,IAAA,EAAM,EAAA,EAAI,CAAC,GAAG,CAAA,KAAM;AACnC,IAAA,IAAI,QAAQ,OAAO,KAAA;AACnB,IAAA,IAAI,CAAA,CAAE,SAAS,IAAA,EAAM;AACnB,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,GAAA,GAAM,CAAA;AACN,MAAA,MAAA,GAAS,CAAA;AACT,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,GAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"custom-input-rules.d.ts","sourceRoot":"","sources":["../../../src/toolkit/input-rules/custom-input-rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIjD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AA8C/C,eAAO,MAAM,mBAAmB,gBAA8C,CAAA;AAC9E,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,MAAM,CAsC1E"} | ||
| {"version":3,"file":"custom-input-rules.d.ts","sourceRoot":"","sources":["../../../src/toolkit/input-rules/custom-input-rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIjD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AA+C/C,eAAO,MAAM,mBAAmB,gBAA8C,CAAA;AAC9E,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,MAAM,CA4D1E"} |
+8
-8
| { | ||
| "name": "@milkdown/prose", | ||
| "type": "module", | ||
| "version": "7.19.2", | ||
| "version": "7.20.0", | ||
| "license": "MIT", | ||
@@ -11,3 +10,9 @@ "repository": { | ||
| }, | ||
| "files": [ | ||
| "lib", | ||
| "src" | ||
| ], | ||
| "type": "module", | ||
| "sideEffects": false, | ||
| "main": "./lib/index.js", | ||
| "exports": { | ||
@@ -74,7 +79,2 @@ ".": { | ||
| }, | ||
| "main": "./lib/index.js", | ||
| "files": [ | ||
| "lib", | ||
| "src" | ||
| ], | ||
| "dependencies": { | ||
@@ -94,3 +94,3 @@ "prosemirror-changeset": "^2.3.1", | ||
| "prosemirror-view": "^1.41.3", | ||
| "@milkdown/exception": "7.19.2" | ||
| "@milkdown/exception": "7.20.0" | ||
| }, | ||
@@ -97,0 +97,0 @@ "scripts": { |
@@ -6,2 +6,3 @@ import type { InputRule } from '../../inputrules' | ||
| import { Plugin, PluginKey } from '../../state' | ||
| import { android, chrome } from '../browser' | ||
@@ -80,2 +81,24 @@ function run( | ||
| }, | ||
| keydown: (view, event) => { | ||
| // On Chrome Android, prosemirror-view suppresses Enter keydown events | ||
| // to avoid input corruption during composition. It then relies on DOM | ||
| // mutation detection to retroactively handle Enter. However, this | ||
| // fallback fails with custom node views (e.g. list-item-block) whose | ||
| // wrapper DOM structure prevents the Enter detection heuristics from | ||
| // recognizing the mutation. We intercept Enter here — before | ||
| // prosemirror-view's suppression — and manually route it through | ||
| // handleKeyDown so that keymaps (splitListItem, etc.) work correctly. | ||
| if (!(android && chrome && (event as KeyboardEvent).key === 'Enter')) | ||
| return false | ||
| if (view.composing) return false | ||
| if ( | ||
| view.someProp('handleKeyDown', (f) => | ||
| f(view, event as KeyboardEvent) | ||
| ) | ||
| ) { | ||
| event.preventDefault() | ||
| return true | ||
| } | ||
| return false | ||
| }, | ||
| }, | ||
@@ -82,0 +105,0 @@ handleKeyDown(view, event) { |
@@ -20,3 +20,3 @@ import type { Mark, MarkType } from '../../model' | ||
| let markEnd = end | ||
| let markEnd: number | ||
@@ -23,0 +23,0 @@ const captured: Captured = { |
@@ -42,3 +42,3 @@ import type { NodeType } from '../../model' | ||
| options.beforeDispatch?.({ | ||
| match: [fullMatch, group ?? ''], | ||
| match: [fullMatch, group], | ||
| start, | ||
@@ -45,0 +45,0 @@ end, |
@@ -21,3 +21,3 @@ import type { NodeType, Node as ProseNode, ResolvedPos } from '../../model' | ||
| return { | ||
| pos: i > 0 ? $pos.before(i) : 0, | ||
| pos: $pos.before(i), | ||
| start: $pos.start(i), | ||
@@ -24,0 +24,0 @@ depth: i, |
Sorry, the diff of this file is not supported yet
1337
2.77%114364
-16.95%+ Added
- Removed
Updated