{"version":3,"file":"static/chunks/54a60aa6-91d6790747480ed4.js","mappings":"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","sources":["webpack://_N_E/./node_modules/@tiptap/core/dist/index.js","webpack://_N_E/"],"sourcesContent":["import { Plugin, PluginKey, TextSelection, Selection, NodeSelection, EditorState } from '@tiptap/pm/state';\nimport { EditorView } from '@tiptap/pm/view';\nimport { keymap } from '@tiptap/pm/keymap';\nimport { Schema, Fragment, DOMParser, DOMSerializer, Node as Node$1, Slice } from '@tiptap/pm/model';\nimport { liftTarget, ReplaceStep, ReplaceAroundStep, joinPoint, Transform, canSplit, canJoin, findWrapping } from '@tiptap/pm/transform';\nimport { createParagraphNear as createParagraphNear$1, deleteSelection as deleteSelection$1, exitCode as exitCode$1, joinUp as joinUp$1, joinDown as joinDown$1, joinBackward as joinBackward$1, joinForward as joinForward$1, joinTextblockBackward as joinTextblockBackward$1, joinTextblockForward as joinTextblockForward$1, lift as lift$1, liftEmptyBlock as liftEmptyBlock$1, newlineInCode as newlineInCode$1, selectNodeBackward as selectNodeBackward$1, selectNodeForward as selectNodeForward$1, selectParentNode as selectParentNode$1, selectTextblockEnd as selectTextblockEnd$1, selectTextblockStart as selectTextblockStart$1, setBlockType, wrapIn as wrapIn$1 } from '@tiptap/pm/commands';\nimport { liftListItem as liftListItem$1, sinkListItem as sinkListItem$1, wrapInList as wrapInList$1 } from '@tiptap/pm/schema-list';\n\nfunction createChainableState(config) {\r\n const { state, transaction } = config;\r\n let { selection } = transaction;\r\n let { doc } = transaction;\r\n let { storedMarks } = transaction;\r\n return {\r\n ...state,\r\n apply: state.apply.bind(state),\r\n applyTransaction: state.applyTransaction.bind(state),\r\n plugins: state.plugins,\r\n schema: state.schema,\r\n reconfigure: state.reconfigure.bind(state),\r\n toJSON: state.toJSON.bind(state),\r\n get storedMarks() {\r\n return storedMarks;\r\n },\r\n get selection() {\r\n return selection;\r\n },\r\n get doc() {\r\n return doc;\r\n },\r\n get tr() {\r\n selection = transaction.selection;\r\n doc = transaction.doc;\r\n storedMarks = transaction.storedMarks;\r\n return transaction;\r\n },\r\n };\r\n}\n\nclass CommandManager {\r\n constructor(props) {\r\n this.editor = props.editor;\r\n this.rawCommands = this.editor.extensionManager.commands;\r\n this.customState = props.state;\r\n }\r\n get hasCustomState() {\r\n return !!this.customState;\r\n }\r\n get state() {\r\n return this.customState || this.editor.state;\r\n }\r\n get commands() {\r\n const { rawCommands, editor, state } = this;\r\n const { view } = editor;\r\n const { tr } = state;\r\n const props = this.buildProps(tr);\r\n return Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => {\r\n const method = (...args) => {\r\n const callback = command(...args)(props);\r\n if (!tr.getMeta('preventDispatch') && !this.hasCustomState) {\r\n view.dispatch(tr);\r\n }\r\n return callback;\r\n };\r\n return [name, method];\r\n }));\r\n }\r\n get chain() {\r\n return () => this.createChain();\r\n }\r\n get can() {\r\n return () => this.createCan();\r\n }\r\n createChain(startTr, shouldDispatch = true) {\r\n const { rawCommands, editor, state } = this;\r\n const { view } = editor;\r\n const callbacks = [];\r\n const hasStartTransaction = !!startTr;\r\n const tr = startTr || state.tr;\r\n const run = () => {\r\n if (!hasStartTransaction\r\n && shouldDispatch\r\n && !tr.getMeta('preventDispatch')\r\n && !this.hasCustomState) {\r\n view.dispatch(tr);\r\n }\r\n return callbacks.every(callback => callback === true);\r\n };\r\n const chain = {\r\n ...Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => {\r\n const chainedCommand = (...args) => {\r\n const props = this.buildProps(tr, shouldDispatch);\r\n const callback = command(...args)(props);\r\n callbacks.push(callback);\r\n return chain;\r\n };\r\n return [name, chainedCommand];\r\n })),\r\n run,\r\n };\r\n return chain;\r\n }\r\n createCan(startTr) {\r\n const { rawCommands, state } = this;\r\n const dispatch = false;\r\n const tr = startTr || state.tr;\r\n const props = this.buildProps(tr, dispatch);\r\n const formattedCommands = Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => {\r\n return [name, (...args) => command(...args)({ ...props, dispatch: undefined })];\r\n }));\r\n return {\r\n ...formattedCommands,\r\n chain: () => this.createChain(tr, dispatch),\r\n };\r\n }\r\n buildProps(tr, shouldDispatch = true) {\r\n const { rawCommands, editor, state } = this;\r\n const { view } = editor;\r\n const props = {\r\n tr,\r\n editor,\r\n view,\r\n state: createChainableState({\r\n state,\r\n transaction: tr,\r\n }),\r\n dispatch: shouldDispatch ? () => undefined : undefined,\r\n chain: () => this.createChain(tr, shouldDispatch),\r\n can: () => this.createCan(tr),\r\n get commands() {\r\n return Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => {\r\n return [name, (...args) => command(...args)(props)];\r\n }));\r\n },\r\n };\r\n return props;\r\n }\r\n}\n\nclass EventEmitter {\r\n constructor() {\r\n this.callbacks = {};\r\n }\r\n on(event, fn) {\r\n if (!this.callbacks[event]) {\r\n this.callbacks[event] = [];\r\n }\r\n this.callbacks[event].push(fn);\r\n return this;\r\n }\r\n emit(event, ...args) {\r\n const callbacks = this.callbacks[event];\r\n if (callbacks) {\r\n callbacks.forEach(callback => callback.apply(this, args));\r\n }\r\n return this;\r\n }\r\n off(event, fn) {\r\n const callbacks = this.callbacks[event];\r\n if (callbacks) {\r\n if (fn) {\r\n this.callbacks[event] = callbacks.filter(callback => callback !== fn);\r\n }\r\n else {\r\n delete this.callbacks[event];\r\n }\r\n }\r\n return this;\r\n }\r\n removeAllListeners() {\r\n this.callbacks = {};\r\n }\r\n}\n\nfunction getExtensionField(extension, field, context) {\r\n if (extension.config[field] === undefined && extension.parent) {\r\n return getExtensionField(extension.parent, field, context);\r\n }\r\n if (typeof extension.config[field] === 'function') {\r\n const value = extension.config[field].bind({\r\n ...context,\r\n parent: extension.parent\r\n ? getExtensionField(extension.parent, field, context)\r\n : null,\r\n });\r\n return value;\r\n }\r\n return extension.config[field];\r\n}\n\nfunction splitExtensions(extensions) {\r\n const baseExtensions = extensions.filter(extension => extension.type === 'extension');\r\n const nodeExtensions = extensions.filter(extension => extension.type === 'node');\r\n const markExtensions = extensions.filter(extension => extension.type === 'mark');\r\n return {\r\n baseExtensions,\r\n nodeExtensions,\r\n markExtensions,\r\n };\r\n}\n\n/**\r\n * Get a list of all extension attributes defined in `addAttribute` and `addGlobalAttribute`.\r\n * @param extensions List of extensions\r\n */\r\nfunction getAttributesFromExtensions(extensions) {\r\n const extensionAttributes = [];\r\n const { nodeExtensions, markExtensions } = splitExtensions(extensions);\r\n const nodeAndMarkExtensions = [...nodeExtensions, ...markExtensions];\r\n const defaultAttribute = {\r\n default: null,\r\n rendered: true,\r\n renderHTML: null,\r\n parseHTML: null,\r\n keepOnSplit: true,\r\n isRequired: false,\r\n };\r\n extensions.forEach(extension => {\r\n const context = {\r\n name: extension.name,\r\n options: extension.options,\r\n storage: extension.storage,\r\n };\r\n const addGlobalAttributes = getExtensionField(extension, 'addGlobalAttributes', context);\r\n if (!addGlobalAttributes) {\r\n return;\r\n }\r\n // TODO: remove `as GlobalAttributes`\r\n const globalAttributes = addGlobalAttributes();\r\n globalAttributes.forEach(globalAttribute => {\r\n globalAttribute.types.forEach(type => {\r\n Object\r\n .entries(globalAttribute.attributes)\r\n .forEach(([name, attribute]) => {\r\n extensionAttributes.push({\r\n type,\r\n name,\r\n attribute: {\r\n ...defaultAttribute,\r\n ...attribute,\r\n },\r\n });\r\n });\r\n });\r\n });\r\n });\r\n nodeAndMarkExtensions.forEach(extension => {\r\n const context = {\r\n name: extension.name,\r\n options: extension.options,\r\n storage: extension.storage,\r\n };\r\n const addAttributes = getExtensionField(extension, 'addAttributes', context);\r\n if (!addAttributes) {\r\n return;\r\n }\r\n // TODO: remove `as Attributes`\r\n const attributes = addAttributes();\r\n Object\r\n .entries(attributes)\r\n .forEach(([name, attribute]) => {\r\n const mergedAttr = {\r\n ...defaultAttribute,\r\n ...attribute,\r\n };\r\n if (typeof (mergedAttr === null || mergedAttr === void 0 ? void 0 : mergedAttr.default) === 'function') {\r\n mergedAttr.default = mergedAttr.default();\r\n }\r\n if ((mergedAttr === null || mergedAttr === void 0 ? void 0 : mergedAttr.isRequired) && (mergedAttr === null || mergedAttr === void 0 ? void 0 : mergedAttr.default) === undefined) {\r\n delete mergedAttr.default;\r\n }\r\n extensionAttributes.push({\r\n type: extension.name,\r\n name,\r\n attribute: mergedAttr,\r\n });\r\n });\r\n });\r\n return extensionAttributes;\r\n}\n\nfunction getNodeType(nameOrType, schema) {\r\n if (typeof nameOrType === 'string') {\r\n if (!schema.nodes[nameOrType]) {\r\n throw Error(`There is no node type named '${nameOrType}'. Maybe you forgot to add the extension?`);\r\n }\r\n return schema.nodes[nameOrType];\r\n }\r\n return nameOrType;\r\n}\n\nfunction mergeAttributes(...objects) {\r\n return objects\r\n .filter(item => !!item)\r\n .reduce((items, item) => {\r\n const mergedAttributes = { ...items };\r\n Object.entries(item).forEach(([key, value]) => {\r\n const exists = mergedAttributes[key];\r\n if (!exists) {\r\n mergedAttributes[key] = value;\r\n return;\r\n }\r\n if (key === 'class') {\r\n const valueClasses = value ? value.split(' ') : [];\r\n const existingClasses = mergedAttributes[key] ? mergedAttributes[key].split(' ') : [];\r\n const insertClasses = valueClasses.filter(valueClass => !existingClasses.includes(valueClass));\r\n mergedAttributes[key] = [...existingClasses, ...insertClasses].join(' ');\r\n }\r\n else if (key === 'style') {\r\n mergedAttributes[key] = [mergedAttributes[key], value].join('; ');\r\n }\r\n else {\r\n mergedAttributes[key] = value;\r\n }\r\n });\r\n return mergedAttributes;\r\n }, {});\r\n}\n\nfunction getRenderedAttributes(nodeOrMark, extensionAttributes) {\r\n return extensionAttributes\r\n .filter(item => item.attribute.rendered)\r\n .map(item => {\r\n if (!item.attribute.renderHTML) {\r\n return {\r\n [item.name]: nodeOrMark.attrs[item.name],\r\n };\r\n }\r\n return item.attribute.renderHTML(nodeOrMark.attrs) || {};\r\n })\r\n .reduce((attributes, attribute) => mergeAttributes(attributes, attribute), {});\r\n}\n\nfunction isFunction(value) {\r\n return typeof value === 'function';\r\n}\n\n/**\r\n * Optionally calls `value` as a function.\r\n * Otherwise it is returned directly.\r\n * @param value Function or any value.\r\n * @param context Optional context to bind to function.\r\n * @param props Optional props to pass to function.\r\n */\r\nfunction callOrReturn(value, context = undefined, ...props) {\r\n if (isFunction(value)) {\r\n if (context) {\r\n return value.bind(context)(...props);\r\n }\r\n return value(...props);\r\n }\r\n return value;\r\n}\n\nfunction isEmptyObject(value = {}) {\r\n return Object.keys(value).length === 0 && value.constructor === Object;\r\n}\n\nfunction fromString(value) {\r\n if (typeof value !== 'string') {\r\n return value;\r\n }\r\n if (value.match(/^[+-]?(?:\\d*\\.)?\\d+$/)) {\r\n return Number(value);\r\n }\r\n if (value === 'true') {\r\n return true;\r\n }\r\n if (value === 'false') {\r\n return false;\r\n }\r\n return value;\r\n}\n\n/**\r\n * This function merges extension attributes into parserule attributes (`attrs` or `getAttrs`).\r\n * Cancels when `getAttrs` returned `false`.\r\n * @param parseRule ProseMirror ParseRule\r\n * @param extensionAttributes List of attributes to inject\r\n */\r\nfunction injectExtensionAttributesToParseRule(parseRule, extensionAttributes) {\r\n if (parseRule.style) {\r\n return parseRule;\r\n }\r\n return {\r\n ...parseRule,\r\n getAttrs: node => {\r\n const oldAttributes = parseRule.getAttrs ? parseRule.getAttrs(node) : parseRule.attrs;\r\n if (oldAttributes === false) {\r\n return false;\r\n }\r\n const newAttributes = extensionAttributes.reduce((items, item) => {\r\n const value = item.attribute.parseHTML\r\n ? item.attribute.parseHTML(node)\r\n : fromString(node.getAttribute(item.name));\r\n if (value === null || value === undefined) {\r\n return items;\r\n }\r\n return {\r\n ...items,\r\n [item.name]: value,\r\n };\r\n }, {});\r\n return { ...oldAttributes, ...newAttributes };\r\n },\r\n };\r\n}\n\nfunction cleanUpSchemaItem(data) {\r\n return Object.fromEntries(\r\n // @ts-ignore\r\n Object.entries(data).filter(([key, value]) => {\r\n if (key === 'attrs' && isEmptyObject(value)) {\r\n return false;\r\n }\r\n return value !== null && value !== undefined;\r\n }));\r\n}\r\nfunction getSchemaByResolvedExtensions(extensions, editor) {\r\n var _a;\r\n const allAttributes = getAttributesFromExtensions(extensions);\r\n const { nodeExtensions, markExtensions } = splitExtensions(extensions);\r\n const topNode = (_a = nodeExtensions.find(extension => getExtensionField(extension, 'topNode'))) === null || _a === void 0 ? void 0 : _a.name;\r\n const nodes = Object.fromEntries(nodeExtensions.map(extension => {\r\n const extensionAttributes = allAttributes.filter(attribute => attribute.type === extension.name);\r\n const context = {\r\n name: extension.name,\r\n options: extension.options,\r\n storage: extension.storage,\r\n editor,\r\n };\r\n const extraNodeFields = extensions.reduce((fields, e) => {\r\n const extendNodeSchema = getExtensionField(e, 'extendNodeSchema', context);\r\n return {\r\n ...fields,\r\n ...(extendNodeSchema ? extendNodeSchema(extension) : {}),\r\n };\r\n }, {});\r\n const schema = cleanUpSchemaItem({\r\n ...extraNodeFields,\r\n content: callOrReturn(getExtensionField(extension, 'content', context)),\r\n marks: callOrReturn(getExtensionField(extension, 'marks', context)),\r\n group: callOrReturn(getExtensionField(extension, 'group', context)),\r\n inline: callOrReturn(getExtensionField(extension, 'inline', context)),\r\n atom: callOrReturn(getExtensionField(extension, 'atom', context)),\r\n selectable: callOrReturn(getExtensionField(extension, 'selectable', context)),\r\n draggable: callOrReturn(getExtensionField(extension, 'draggable', context)),\r\n code: callOrReturn(getExtensionField(extension, 'code', context)),\r\n defining: callOrReturn(getExtensionField(extension, 'defining', context)),\r\n isolating: callOrReturn(getExtensionField(extension, 'isolating', context)),\r\n attrs: Object.fromEntries(extensionAttributes.map(extensionAttribute => {\r\n var _a;\r\n return [extensionAttribute.name, { default: (_a = extensionAttribute === null || extensionAttribute === void 0 ? void 0 : extensionAttribute.attribute) === null || _a === void 0 ? void 0 : _a.default }];\r\n })),\r\n });\r\n const parseHTML = callOrReturn(getExtensionField(extension, 'parseHTML', context));\r\n if (parseHTML) {\r\n schema.parseDOM = parseHTML.map(parseRule => injectExtensionAttributesToParseRule(parseRule, extensionAttributes));\r\n }\r\n const renderHTML = getExtensionField(extension, 'renderHTML', context);\r\n if (renderHTML) {\r\n schema.toDOM = node => renderHTML({\r\n node,\r\n HTMLAttributes: getRenderedAttributes(node, extensionAttributes),\r\n });\r\n }\r\n const renderText = getExtensionField(extension, 'renderText', context);\r\n if (renderText) {\r\n schema.toText = renderText;\r\n }\r\n return [extension.name, schema];\r\n }));\r\n const marks = Object.fromEntries(markExtensions.map(extension => {\r\n const extensionAttributes = allAttributes.filter(attribute => attribute.type === extension.name);\r\n const context = {\r\n name: extension.name,\r\n options: extension.options,\r\n storage: extension.storage,\r\n editor,\r\n };\r\n const extraMarkFields = extensions.reduce((fields, e) => {\r\n const extendMarkSchema = getExtensionField(e, 'extendMarkSchema', context);\r\n return {\r\n ...fields,\r\n ...(extendMarkSchema ? extendMarkSchema(extension) : {}),\r\n };\r\n }, {});\r\n const schema = cleanUpSchemaItem({\r\n ...extraMarkFields,\r\n inclusive: callOrReturn(getExtensionField(extension, 'inclusive', context)),\r\n excludes: callOrReturn(getExtensionField(extension, 'excludes', context)),\r\n group: callOrReturn(getExtensionField(extension, 'group', context)),\r\n spanning: callOrReturn(getExtensionField(extension, 'spanning', context)),\r\n code: callOrReturn(getExtensionField(extension, 'code', context)),\r\n attrs: Object.fromEntries(extensionAttributes.map(extensionAttribute => {\r\n var _a;\r\n return [extensionAttribute.name, { default: (_a = extensionAttribute === null || extensionAttribute === void 0 ? void 0 : extensionAttribute.attribute) === null || _a === void 0 ? void 0 : _a.default }];\r\n })),\r\n });\r\n const parseHTML = callOrReturn(getExtensionField(extension, 'parseHTML', context));\r\n if (parseHTML) {\r\n schema.parseDOM = parseHTML.map(parseRule => injectExtensionAttributesToParseRule(parseRule, extensionAttributes));\r\n }\r\n const renderHTML = getExtensionField(extension, 'renderHTML', context);\r\n if (renderHTML) {\r\n schema.toDOM = mark => renderHTML({\r\n mark,\r\n HTMLAttributes: getRenderedAttributes(mark, extensionAttributes),\r\n });\r\n }\r\n return [extension.name, schema];\r\n }));\r\n return new Schema({\r\n topNode,\r\n nodes,\r\n marks,\r\n });\r\n}\n\nfunction getSchemaTypeByName(name, schema) {\r\n return schema.nodes[name] || schema.marks[name] || null;\r\n}\n\nfunction isExtensionRulesEnabled(extension, enabled) {\r\n if (Array.isArray(enabled)) {\r\n return enabled.some(enabledExtension => {\r\n const name = typeof enabledExtension === 'string'\r\n ? enabledExtension\r\n : enabledExtension.name;\r\n return name === extension.name;\r\n });\r\n }\r\n return enabled;\r\n}\n\nconst getTextContentFromNodes = ($from, maxMatch = 500) => {\r\n let textBefore = '';\r\n const sliceEndPos = $from.parentOffset;\r\n $from.parent.nodesBetween(Math.max(0, sliceEndPos - maxMatch), sliceEndPos, (node, pos, parent, index) => {\r\n var _a, _b;\r\n const chunk = ((_b = (_a = node.type.spec).toText) === null || _b === void 0 ? void 0 : _b.call(_a, {\r\n node,\r\n pos,\r\n parent,\r\n index,\r\n }))\r\n || node.textContent\r\n || '%leaf%';\r\n textBefore += chunk.slice(0, Math.max(0, sliceEndPos - pos));\r\n });\r\n return textBefore;\r\n};\n\nfunction isRegExp(value) {\r\n return Object.prototype.toString.call(value) === '[object RegExp]';\r\n}\n\nclass InputRule {\r\n constructor(config) {\r\n this.find = config.find;\r\n this.handler = config.handler;\r\n }\r\n}\r\nconst inputRuleMatcherHandler = (text, find) => {\r\n if (isRegExp(find)) {\r\n return find.exec(text);\r\n }\r\n const inputRuleMatch = find(text);\r\n if (!inputRuleMatch) {\r\n return null;\r\n }\r\n const result = [inputRuleMatch.text];\r\n result.index = inputRuleMatch.index;\r\n result.input = text;\r\n result.data = inputRuleMatch.data;\r\n if (inputRuleMatch.replaceWith) {\r\n if (!inputRuleMatch.text.includes(inputRuleMatch.replaceWith)) {\r\n console.warn('[tiptap warn]: \"inputRuleMatch.replaceWith\" must be part of \"inputRuleMatch.text\".');\r\n }\r\n result.push(inputRuleMatch.replaceWith);\r\n }\r\n return result;\r\n};\r\nfunction run$1(config) {\r\n var _a;\r\n const { editor, from, to, text, rules, plugin, } = config;\r\n const { view } = editor;\r\n if (view.composing) {\r\n return false;\r\n }\r\n const $from = view.state.doc.resolve(from);\r\n if (\r\n // check for code node\r\n $from.parent.type.spec.code\r\n // check for code mark\r\n || !!((_a = ($from.nodeBefore || $from.nodeAfter)) === null || _a === void 0 ? void 0 : _a.marks.find(mark => mark.type.spec.code))) {\r\n return false;\r\n }\r\n let matched = false;\r\n const textBefore = getTextContentFromNodes($from) + text;\r\n rules.forEach(rule => {\r\n if (matched) {\r\n return;\r\n }\r\n const match = inputRuleMatcherHandler(textBefore, rule.find);\r\n if (!match) {\r\n return;\r\n }\r\n const tr = view.state.tr;\r\n const state = createChainableState({\r\n state: view.state,\r\n transaction: tr,\r\n });\r\n const range = {\r\n from: from - (match[0].length - text.length),\r\n to,\r\n };\r\n const { commands, chain, can } = new CommandManager({\r\n editor,\r\n state,\r\n });\r\n const handler = rule.handler({\r\n state,\r\n range,\r\n match,\r\n commands,\r\n chain,\r\n can,\r\n });\r\n // stop if there are no changes\r\n if (handler === null || !tr.steps.length) {\r\n return;\r\n }\r\n // store transform as meta data\r\n // so we can undo input rules within the `undoInputRules` command\r\n tr.setMeta(plugin, {\r\n transform: tr,\r\n from,\r\n to,\r\n text,\r\n });\r\n view.dispatch(tr);\r\n matched = true;\r\n });\r\n return matched;\r\n}\r\n/**\r\n * Create an input rules plugin. When enabled, it will cause text\r\n * input that matches any of the given rules to trigger the rule’s\r\n * action.\r\n */\r\nfunction inputRulesPlugin(props) {\r\n const { editor, rules } = props;\r\n const plugin = new Plugin({\r\n state: {\r\n init() {\r\n return null;\r\n },\r\n apply(tr, prev) {\r\n const stored = tr.getMeta(plugin);\r\n if (stored) {\r\n return stored;\r\n }\r\n return tr.selectionSet || tr.docChanged ? null : prev;\r\n },\r\n },\r\n props: {\r\n handleTextInput(view, from, to, text) {\r\n return run$1({\r\n editor,\r\n from,\r\n to,\r\n text,\r\n rules,\r\n plugin,\r\n });\r\n },\r\n handleDOMEvents: {\r\n compositionend: view => {\r\n setTimeout(() => {\r\n const { $cursor } = view.state.selection;\r\n if ($cursor) {\r\n run$1({\r\n editor,\r\n from: $cursor.pos,\r\n to: $cursor.pos,\r\n text: '',\r\n rules,\r\n plugin,\r\n });\r\n }\r\n });\r\n return false;\r\n },\r\n },\r\n // add support for input rules to trigger on enter\r\n // this is useful for example for code blocks\r\n handleKeyDown(view, event) {\r\n if (event.key !== 'Enter') {\r\n return false;\r\n }\r\n const { $cursor } = view.state.selection;\r\n if ($cursor) {\r\n return run$1({\r\n editor,\r\n from: $cursor.pos,\r\n to: $cursor.pos,\r\n text: '\\n',\r\n rules,\r\n plugin,\r\n });\r\n }\r\n return false;\r\n },\r\n },\r\n // @ts-ignore\r\n isInputRules: true,\r\n });\r\n return plugin;\r\n}\n\nfunction isNumber(value) {\r\n return typeof value === 'number';\r\n}\n\nclass PasteRule {\r\n constructor(config) {\r\n this.find = config.find;\r\n this.handler = config.handler;\r\n }\r\n}\r\nconst pasteRuleMatcherHandler = (text, find, event) => {\r\n if (isRegExp(find)) {\r\n return [...text.matchAll(find)];\r\n }\r\n const matches = find(text, event);\r\n if (!matches) {\r\n return [];\r\n }\r\n return matches.map(pasteRuleMatch => {\r\n const result = [pasteRuleMatch.text];\r\n result.index = pasteRuleMatch.index;\r\n result.input = text;\r\n result.data = pasteRuleMatch.data;\r\n if (pasteRuleMatch.replaceWith) {\r\n if (!pasteRuleMatch.text.includes(pasteRuleMatch.replaceWith)) {\r\n console.warn('[tiptap warn]: \"pasteRuleMatch.replaceWith\" must be part of \"pasteRuleMatch.text\".');\r\n }\r\n result.push(pasteRuleMatch.replaceWith);\r\n }\r\n return result;\r\n });\r\n};\r\nfunction run(config) {\r\n const { editor, state, from, to, rule, pasteEvent, dropEvent, } = config;\r\n const { commands, chain, can } = new CommandManager({\r\n editor,\r\n state,\r\n });\r\n const handlers = [];\r\n state.doc.nodesBetween(from, to, (node, pos) => {\r\n if (!node.isTextblock || node.type.spec.code) {\r\n return;\r\n }\r\n const resolvedFrom = Math.max(from, pos);\r\n const resolvedTo = Math.min(to, pos + node.content.size);\r\n const textToMatch = node.textBetween(resolvedFrom - pos, resolvedTo - pos, undefined, '\\ufffc');\r\n const matches = pasteRuleMatcherHandler(textToMatch, rule.find, pasteEvent);\r\n matches.forEach(match => {\r\n if (match.index === undefined) {\r\n return;\r\n }\r\n const start = resolvedFrom + match.index + 1;\r\n const end = start + match[0].length;\r\n const range = {\r\n from: state.tr.mapping.map(start),\r\n to: state.tr.mapping.map(end),\r\n };\r\n const handler = rule.handler({\r\n state,\r\n range,\r\n match,\r\n commands,\r\n chain,\r\n can,\r\n pasteEvent,\r\n dropEvent,\r\n });\r\n handlers.push(handler);\r\n });\r\n });\r\n const success = handlers.every(handler => handler !== null);\r\n return success;\r\n}\r\n/**\r\n * Create an paste rules plugin. When enabled, it will cause pasted\r\n * text that matches any of the given rules to trigger the rule’s\r\n * action.\r\n */\r\nfunction pasteRulesPlugin(props) {\r\n const { editor, rules } = props;\r\n let dragSourceElement = null;\r\n let isPastedFromProseMirror = false;\r\n let isDroppedFromProseMirror = false;\r\n let pasteEvent = new ClipboardEvent('paste');\r\n let dropEvent = new DragEvent('drop');\r\n const plugins = rules.map(rule => {\r\n return new Plugin({\r\n // we register a global drag handler to track the current drag source element\r\n view(view) {\r\n const handleDragstart = (event) => {\r\n var _a;\r\n dragSourceElement = ((_a = view.dom.parentElement) === null || _a === void 0 ? void 0 : _a.contains(event.target))\r\n ? view.dom.parentElement\r\n : null;\r\n };\r\n window.addEventListener('dragstart', handleDragstart);\r\n return {\r\n destroy() {\r\n window.removeEventListener('dragstart', handleDragstart);\r\n },\r\n };\r\n },\r\n props: {\r\n handleDOMEvents: {\r\n drop: (view, event) => {\r\n isDroppedFromProseMirror = dragSourceElement === view.dom.parentElement;\r\n dropEvent = event;\r\n return false;\r\n },\r\n paste: (_view, event) => {\r\n var _a;\r\n const html = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text/html');\r\n pasteEvent = event;\r\n isPastedFromProseMirror = !!(html === null || html === void 0 ? void 0 : html.includes('data-pm-slice'));\r\n return false;\r\n },\r\n },\r\n },\r\n appendTransaction: (transactions, oldState, state) => {\r\n const transaction = transactions[0];\r\n const isPaste = transaction.getMeta('uiEvent') === 'paste' && !isPastedFromProseMirror;\r\n const isDrop = transaction.getMeta('uiEvent') === 'drop' && !isDroppedFromProseMirror;\r\n if (!isPaste && !isDrop) {\r\n return;\r\n }\r\n // stop if there is no changed range\r\n const from = oldState.doc.content.findDiffStart(state.doc.content);\r\n const to = oldState.doc.content.findDiffEnd(state.doc.content);\r\n if (!isNumber(from) || !to || from === to.b) {\r\n return;\r\n }\r\n // build a chainable state\r\n // so we can use a single transaction for all paste rules\r\n const tr = state.tr;\r\n const chainableState = createChainableState({\r\n state,\r\n transaction: tr,\r\n });\r\n const handler = run({\r\n editor,\r\n state: chainableState,\r\n from: Math.max(from - 1, 0),\r\n to: to.b - 1,\r\n rule,\r\n pasteEvent,\r\n dropEvent,\r\n });\r\n // stop if there are no changes\r\n if (!handler || !tr.steps.length) {\r\n return;\r\n }\r\n dropEvent = new DragEvent('drop');\r\n pasteEvent = new ClipboardEvent('paste');\r\n return tr;\r\n },\r\n });\r\n });\r\n return plugins;\r\n}\n\nfunction findDuplicates(items) {\r\n const filtered = items.filter((el, index) => items.indexOf(el) !== index);\r\n return [...new Set(filtered)];\r\n}\n\nclass ExtensionManager {\r\n constructor(extensions, editor) {\r\n this.splittableMarks = [];\r\n this.editor = editor;\r\n this.extensions = ExtensionManager.resolve(extensions);\r\n this.schema = getSchemaByResolvedExtensions(this.extensions, editor);\r\n this.extensions.forEach(extension => {\r\n var _a;\r\n // store extension storage in editor\r\n this.editor.extensionStorage[extension.name] = extension.storage;\r\n const context = {\r\n name: extension.name,\r\n options: extension.options,\r\n storage: extension.storage,\r\n editor: this.editor,\r\n type: getSchemaTypeByName(extension.name, this.schema),\r\n };\r\n if (extension.type === 'mark') {\r\n const keepOnSplit = (_a = callOrReturn(getExtensionField(extension, 'keepOnSplit', context))) !== null && _a !== void 0 ? _a : true;\r\n if (keepOnSplit) {\r\n this.splittableMarks.push(extension.name);\r\n }\r\n }\r\n const onBeforeCreate = getExtensionField(extension, 'onBeforeCreate', context);\r\n if (onBeforeCreate) {\r\n this.editor.on('beforeCreate', onBeforeCreate);\r\n }\r\n const onCreate = getExtensionField(extension, 'onCreate', context);\r\n if (onCreate) {\r\n this.editor.on('create', onCreate);\r\n }\r\n const onUpdate = getExtensionField(extension, 'onUpdate', context);\r\n if (onUpdate) {\r\n this.editor.on('update', onUpdate);\r\n }\r\n const onSelectionUpdate = getExtensionField(extension, 'onSelectionUpdate', context);\r\n if (onSelectionUpdate) {\r\n this.editor.on('selectionUpdate', onSelectionUpdate);\r\n }\r\n const onTransaction = getExtensionField(extension, 'onTransaction', context);\r\n if (onTransaction) {\r\n this.editor.on('transaction', onTransaction);\r\n }\r\n const onFocus = getExtensionField(extension, 'onFocus', context);\r\n if (onFocus) {\r\n this.editor.on('focus', onFocus);\r\n }\r\n const onBlur = getExtensionField(extension, 'onBlur', context);\r\n if (onBlur) {\r\n this.editor.on('blur', onBlur);\r\n }\r\n const onDestroy = getExtensionField(extension, 'onDestroy', context);\r\n if (onDestroy) {\r\n this.editor.on('destroy', onDestroy);\r\n }\r\n });\r\n }\r\n static resolve(extensions) {\r\n const resolvedExtensions = ExtensionManager.sort(ExtensionManager.flatten(extensions));\r\n const duplicatedNames = findDuplicates(resolvedExtensions.map(extension => extension.name));\r\n if (duplicatedNames.length) {\r\n console.warn(`[tiptap warn]: Duplicate extension names found: [${duplicatedNames\r\n .map(item => `'${item}'`)\r\n .join(', ')}]. This can lead to issues.`);\r\n }\r\n return resolvedExtensions;\r\n }\r\n static flatten(extensions) {\r\n return (extensions\r\n .map(extension => {\r\n const context = {\r\n name: extension.name,\r\n options: extension.options,\r\n storage: extension.storage,\r\n };\r\n const addExtensions = getExtensionField(extension, 'addExtensions', context);\r\n if (addExtensions) {\r\n return [extension, ...this.flatten(addExtensions())];\r\n }\r\n return extension;\r\n })\r\n // `Infinity` will break TypeScript so we set a number that is probably high enough\r\n .flat(10));\r\n }\r\n static sort(extensions) {\r\n const defaultPriority = 100;\r\n return extensions.sort((a, b) => {\r\n const priorityA = getExtensionField(a, 'priority') || defaultPriority;\r\n const priorityB = getExtensionField(b, 'priority') || defaultPriority;\r\n if (priorityA > priorityB) {\r\n return -1;\r\n }\r\n if (priorityA < priorityB) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n }\r\n get commands() {\r\n return this.extensions.reduce((commands, extension) => {\r\n const context = {\r\n name: extension.name,\r\n options: extension.options,\r\n storage: extension.storage,\r\n editor: this.editor,\r\n type: getSchemaTypeByName(extension.name, this.schema),\r\n };\r\n const addCommands = getExtensionField(extension, 'addCommands', context);\r\n if (!addCommands) {\r\n return commands;\r\n }\r\n return {\r\n ...commands,\r\n ...addCommands(),\r\n };\r\n }, {});\r\n }\r\n get plugins() {\r\n const { editor } = this;\r\n // With ProseMirror, first plugins within an array are executed first.\r\n // In Tiptap, we provide the ability to override plugins,\r\n // so it feels more natural to run plugins at the end of an array first.\r\n // That’s why we have to reverse the `extensions` array and sort again\r\n // based on the `priority` option.\r\n const extensions = ExtensionManager.sort([...this.extensions].reverse());\r\n const inputRules = [];\r\n const pasteRules = [];\r\n const allPlugins = extensions\r\n .map(extension => {\r\n const context = {\r\n name: extension.name,\r\n options: extension.options,\r\n storage: extension.storage,\r\n editor,\r\n type: getSchemaTypeByName(extension.name, this.schema),\r\n };\r\n const plugins = [];\r\n const addKeyboardShortcuts = getExtensionField(extension, 'addKeyboardShortcuts', context);\r\n let defaultBindings = {};\r\n // bind exit handling\r\n if (extension.type === 'mark' && extension.config.exitable) {\r\n defaultBindings.ArrowRight = () => Mark.handleExit({ editor, mark: extension });\r\n }\r\n if (addKeyboardShortcuts) {\r\n const bindings = Object.fromEntries(Object.entries(addKeyboardShortcuts()).map(([shortcut, method]) => {\r\n return [shortcut, () => method({ editor })];\r\n }));\r\n defaultBindings = { ...defaultBindings, ...bindings };\r\n }\r\n const keyMapPlugin = keymap(defaultBindings);\r\n plugins.push(keyMapPlugin);\r\n const addInputRules = getExtensionField(extension, 'addInputRules', context);\r\n if (isExtensionRulesEnabled(extension, editor.options.enableInputRules) && addInputRules) {\r\n inputRules.push(...addInputRules());\r\n }\r\n const addPasteRules = getExtensionField(extension, 'addPasteRules', context);\r\n if (isExtensionRulesEnabled(extension, editor.options.enablePasteRules) && addPasteRules) {\r\n pasteRules.push(...addPasteRules());\r\n }\r\n const addProseMirrorPlugins = getExtensionField(extension, 'addProseMirrorPlugins', context);\r\n if (addProseMirrorPlugins) {\r\n const proseMirrorPlugins = addProseMirrorPlugins();\r\n plugins.push(...proseMirrorPlugins);\r\n }\r\n return plugins;\r\n })\r\n .flat();\r\n return [\r\n inputRulesPlugin({\r\n editor,\r\n rules: inputRules,\r\n }),\r\n ...pasteRulesPlugin({\r\n editor,\r\n rules: pasteRules,\r\n }),\r\n ...allPlugins,\r\n ];\r\n }\r\n get attributes() {\r\n return getAttributesFromExtensions(this.extensions);\r\n }\r\n get nodeViews() {\r\n const { editor } = this;\r\n const { nodeExtensions } = splitExtensions(this.extensions);\r\n return Object.fromEntries(nodeExtensions\r\n .filter(extension => !!getExtensionField(extension, 'addNodeView'))\r\n .map(extension => {\r\n const extensionAttributes = this.attributes.filter(attribute => attribute.type === extension.name);\r\n const context = {\r\n name: extension.name,\r\n options: extension.options,\r\n storage: extension.storage,\r\n editor,\r\n type: getNodeType(extension.name, this.schema),\r\n };\r\n const addNodeView = getExtensionField(extension, 'addNodeView', context);\r\n if (!addNodeView) {\r\n return [];\r\n }\r\n const nodeview = (node, view, getPos, decorations) => {\r\n const HTMLAttributes = getRenderedAttributes(node, extensionAttributes);\r\n return addNodeView()({\r\n editor,\r\n node,\r\n getPos,\r\n decorations,\r\n HTMLAttributes,\r\n extension,\r\n });\r\n };\r\n return [extension.name, nodeview];\r\n }));\r\n }\r\n}\n\n// see: https://github.com/mesqueeb/is-what/blob/88d6e4ca92fb2baab6003c54e02eedf4e729e5ab/src/index.ts\r\nfunction getType(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1);\r\n}\r\nfunction isPlainObject(value) {\r\n if (getType(value) !== 'Object') {\r\n return false;\r\n }\r\n return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype;\r\n}\n\nfunction mergeDeep(target, source) {\r\n const output = { ...target };\r\n if (isPlainObject(target) && isPlainObject(source)) {\r\n Object.keys(source).forEach(key => {\r\n if (isPlainObject(source[key])) {\r\n if (!(key in target)) {\r\n Object.assign(output, { [key]: source[key] });\r\n }\r\n else {\r\n output[key] = mergeDeep(target[key], source[key]);\r\n }\r\n }\r\n else {\r\n Object.assign(output, { [key]: source[key] });\r\n }\r\n });\r\n }\r\n return output;\r\n}\n\nclass Extension {\r\n constructor(config = {}) {\r\n this.type = 'extension';\r\n this.name = 'extension';\r\n this.parent = null;\r\n this.child = null;\r\n this.config = {\r\n name: this.name,\r\n defaultOptions: {},\r\n };\r\n this.config = {\r\n ...this.config,\r\n ...config,\r\n };\r\n this.name = this.config.name;\r\n if (config.defaultOptions && Object.keys(config.defaultOptions).length > 0) {\r\n console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${this.name}\".`);\r\n }\r\n // TODO: remove `addOptions` fallback\r\n this.options = this.config.defaultOptions;\r\n if (this.config.addOptions) {\r\n this.options = callOrReturn(getExtensionField(this, 'addOptions', {\r\n name: this.name,\r\n }));\r\n }\r\n this.storage = callOrReturn(getExtensionField(this, 'addStorage', {\r\n name: this.name,\r\n options: this.options,\r\n })) || {};\r\n }\r\n static create(config = {}) {\r\n return new Extension(config);\r\n }\r\n configure(options = {}) {\r\n // return a new instance so we can use the same extension\r\n // with different calls of `configure`\r\n const extension = this.extend();\r\n extension.options = mergeDeep(this.options, options);\r\n extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', {\r\n name: extension.name,\r\n options: extension.options,\r\n }));\r\n return extension;\r\n }\r\n extend(extendedConfig = {}) {\r\n const extension = new Extension({ ...this.config, ...extendedConfig });\r\n extension.parent = this;\r\n this.child = extension;\r\n extension.name = extendedConfig.name ? extendedConfig.name : extension.parent.name;\r\n if (extendedConfig.defaultOptions) {\r\n console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${extension.name}\".`);\r\n }\r\n extension.options = callOrReturn(getExtensionField(extension, 'addOptions', {\r\n name: extension.name,\r\n }));\r\n extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', {\r\n name: extension.name,\r\n options: extension.options,\r\n }));\r\n return extension;\r\n }\r\n}\n\nfunction getTextBetween(startNode, range, options) {\r\n const { from, to } = range;\r\n const { blockSeparator = '\\n\\n', textSerializers = {} } = options || {};\r\n let text = '';\r\n let separated = true;\r\n startNode.nodesBetween(from, to, (node, pos, parent, index) => {\r\n var _a;\r\n const textSerializer = textSerializers === null || textSerializers === void 0 ? void 0 : textSerializers[node.type.name];\r\n if (textSerializer) {\r\n if (node.isBlock && !separated) {\r\n text += blockSeparator;\r\n separated = true;\r\n }\r\n if (parent) {\r\n text += textSerializer({\r\n node,\r\n pos,\r\n parent,\r\n index,\r\n range,\r\n });\r\n }\r\n }\r\n else if (node.isText) {\r\n text += (_a = node === null || node === void 0 ? void 0 : node.text) === null || _a === void 0 ? void 0 : _a.slice(Math.max(from, pos) - pos, to - pos); // eslint-disable-line\r\n separated = false;\r\n }\r\n else if (node.isBlock && !separated) {\r\n text += blockSeparator;\r\n separated = true;\r\n }\r\n });\r\n return text;\r\n}\n\nfunction getTextSerializersFromSchema(schema) {\r\n return Object.fromEntries(Object.entries(schema.nodes)\r\n .filter(([, node]) => node.spec.toText)\r\n .map(([name, node]) => [name, node.spec.toText]));\r\n}\n\nconst ClipboardTextSerializer = Extension.create({\r\n name: 'clipboardTextSerializer',\r\n addProseMirrorPlugins() {\r\n return [\r\n new Plugin({\r\n key: new PluginKey('clipboardTextSerializer'),\r\n props: {\r\n clipboardTextSerializer: () => {\r\n const { editor } = this;\r\n const { state, schema } = editor;\r\n const { doc, selection } = state;\r\n const { ranges } = selection;\r\n const from = Math.min(...ranges.map(range => range.$from.pos));\r\n const to = Math.max(...ranges.map(range => range.$to.pos));\r\n const textSerializers = getTextSerializersFromSchema(schema);\r\n const range = { from, to };\r\n return getTextBetween(doc, range, {\r\n textSerializers,\r\n });\r\n },\r\n },\r\n }),\r\n ];\r\n },\r\n});\n\nconst blur = () => ({ editor, view }) => {\r\n requestAnimationFrame(() => {\r\n var _a;\r\n if (!editor.isDestroyed) {\r\n view.dom.blur();\r\n // Browsers should remove the caret on blur but safari does not.\r\n // See: https://github.com/ueberdosis/tiptap/issues/2405\r\n (_a = window === null || window === void 0 ? void 0 : window.getSelection()) === null || _a === void 0 ? void 0 : _a.removeAllRanges();\r\n }\r\n });\r\n return true;\r\n};\n\nconst clearContent = (emitUpdate = false) => ({ commands }) => {\r\n return commands.setContent('', emitUpdate);\r\n};\n\nconst clearNodes = () => ({ state, tr, dispatch }) => {\r\n const { selection } = tr;\r\n const { ranges } = selection;\r\n if (!dispatch) {\r\n return true;\r\n }\r\n ranges.forEach(({ $from, $to }) => {\r\n state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\r\n if (node.type.isText) {\r\n return;\r\n }\r\n const { doc, mapping } = tr;\r\n const $mappedFrom = doc.resolve(mapping.map(pos));\r\n const $mappedTo = doc.resolve(mapping.map(pos + node.nodeSize));\r\n const nodeRange = $mappedFrom.blockRange($mappedTo);\r\n if (!nodeRange) {\r\n return;\r\n }\r\n const targetLiftDepth = liftTarget(nodeRange);\r\n if (node.type.isTextblock) {\r\n const { defaultType } = $mappedFrom.parent.contentMatchAt($mappedFrom.index());\r\n tr.setNodeMarkup(nodeRange.start, defaultType);\r\n }\r\n if (targetLiftDepth || targetLiftDepth === 0) {\r\n tr.lift(nodeRange, targetLiftDepth);\r\n }\r\n });\r\n });\r\n return true;\r\n};\n\nconst command = fn => props => {\r\n return fn(props);\r\n};\n\nconst createParagraphNear = () => ({ state, dispatch }) => {\r\n return createParagraphNear$1(state, dispatch);\r\n};\n\nconst cut = (originRange, targetPos) => ({ editor, tr }) => {\r\n const { state } = editor;\r\n const contentSlice = state.doc.slice(originRange.from, originRange.to);\r\n tr.deleteRange(originRange.from, originRange.to);\r\n const newPos = tr.mapping.map(targetPos);\r\n tr.insert(newPos, contentSlice.content);\r\n tr.setSelection(new TextSelection(tr.doc.resolve(newPos - 1)));\r\n return true;\r\n};\n\nconst deleteCurrentNode = () => ({ tr, dispatch }) => {\r\n const { selection } = tr;\r\n const currentNode = selection.$anchor.node();\r\n // if there is content inside the current node, break out of this command\r\n if (currentNode.content.size > 0) {\r\n return false;\r\n }\r\n const $pos = tr.selection.$anchor;\r\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\r\n const node = $pos.node(depth);\r\n if (node.type === currentNode.type) {\r\n if (dispatch) {\r\n const from = $pos.before(depth);\r\n const to = $pos.after(depth);\r\n tr.delete(from, to).scrollIntoView();\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\n\nconst deleteNode = typeOrName => ({ tr, state, dispatch }) => {\r\n const type = getNodeType(typeOrName, state.schema);\r\n const $pos = tr.selection.$anchor;\r\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\r\n const node = $pos.node(depth);\r\n if (node.type === type) {\r\n if (dispatch) {\r\n const from = $pos.before(depth);\r\n const to = $pos.after(depth);\r\n tr.delete(from, to).scrollIntoView();\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\n\nconst deleteRange = range => ({ tr, dispatch }) => {\r\n const { from, to } = range;\r\n if (dispatch) {\r\n tr.delete(from, to);\r\n }\r\n return true;\r\n};\n\nconst deleteSelection = () => ({ state, dispatch }) => {\r\n return deleteSelection$1(state, dispatch);\r\n};\n\nconst enter = () => ({ commands }) => {\r\n return commands.keyboardShortcut('Enter');\r\n};\n\nconst exitCode = () => ({ state, dispatch }) => {\r\n return exitCode$1(state, dispatch);\r\n};\n\n/**\r\n * Check if object1 includes object2\r\n * @param object1 Object\r\n * @param object2 Object\r\n */\r\nfunction objectIncludes(object1, object2, options = { strict: true }) {\r\n const keys = Object.keys(object2);\r\n if (!keys.length) {\r\n return true;\r\n }\r\n return keys.every(key => {\r\n if (options.strict) {\r\n return object2[key] === object1[key];\r\n }\r\n if (isRegExp(object2[key])) {\r\n return object2[key].test(object1[key]);\r\n }\r\n return object2[key] === object1[key];\r\n });\r\n}\n\nfunction findMarkInSet(marks, type, attributes = {}) {\r\n return marks.find(item => {\r\n return item.type === type && objectIncludes(item.attrs, attributes);\r\n });\r\n}\r\nfunction isMarkInSet(marks, type, attributes = {}) {\r\n return !!findMarkInSet(marks, type, attributes);\r\n}\r\nfunction getMarkRange($pos, type, attributes = {}) {\r\n if (!$pos || !type) {\r\n return;\r\n }\r\n let start = $pos.parent.childAfter($pos.parentOffset);\r\n if ($pos.parentOffset === start.offset && start.offset !== 0) {\r\n start = $pos.parent.childBefore($pos.parentOffset);\r\n }\r\n if (!start.node) {\r\n return;\r\n }\r\n const mark = findMarkInSet([...start.node.marks], type, attributes);\r\n if (!mark) {\r\n return;\r\n }\r\n let startIndex = start.index;\r\n let startPos = $pos.start() + start.offset;\r\n let endIndex = startIndex + 1;\r\n let endPos = startPos + start.node.nodeSize;\r\n findMarkInSet([...start.node.marks], type, attributes);\r\n while (startIndex > 0 && mark.isInSet($pos.parent.child(startIndex - 1).marks)) {\r\n startIndex -= 1;\r\n startPos -= $pos.parent.child(startIndex).nodeSize;\r\n }\r\n while (endIndex < $pos.parent.childCount\r\n && isMarkInSet([...$pos.parent.child(endIndex).marks], type, attributes)) {\r\n endPos += $pos.parent.child(endIndex).nodeSize;\r\n endIndex += 1;\r\n }\r\n return {\r\n from: startPos,\r\n to: endPos,\r\n };\r\n}\n\nfunction getMarkType(nameOrType, schema) {\r\n if (typeof nameOrType === 'string') {\r\n if (!schema.marks[nameOrType]) {\r\n throw Error(`There is no mark type named '${nameOrType}'. Maybe you forgot to add the extension?`);\r\n }\r\n return schema.marks[nameOrType];\r\n }\r\n return nameOrType;\r\n}\n\nconst extendMarkRange = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\r\n const type = getMarkType(typeOrName, state.schema);\r\n const { doc, selection } = tr;\r\n const { $from, from, to } = selection;\r\n if (dispatch) {\r\n const range = getMarkRange($from, type, attributes);\r\n if (range && range.from <= from && range.to >= to) {\r\n const newSelection = TextSelection.create(doc, range.from, range.to);\r\n tr.setSelection(newSelection);\r\n }\r\n }\r\n return true;\r\n};\n\nconst first = commands => props => {\r\n const items = typeof commands === 'function'\r\n ? commands(props)\r\n : commands;\r\n for (let i = 0; i < items.length; i += 1) {\r\n if (items[i](props)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\n\nfunction isTextSelection(value) {\r\n return value instanceof TextSelection;\r\n}\n\nfunction minMax(value = 0, min = 0, max = 0) {\r\n return Math.min(Math.max(value, min), max);\r\n}\n\nfunction resolveFocusPosition(doc, position = null) {\r\n if (!position) {\r\n return null;\r\n }\r\n const selectionAtStart = Selection.atStart(doc);\r\n const selectionAtEnd = Selection.atEnd(doc);\r\n if (position === 'start' || position === true) {\r\n return selectionAtStart;\r\n }\r\n if (position === 'end') {\r\n return selectionAtEnd;\r\n }\r\n const minPos = selectionAtStart.from;\r\n const maxPos = selectionAtEnd.to;\r\n if (position === 'all') {\r\n return TextSelection.create(doc, minMax(0, minPos, maxPos), minMax(doc.content.size, minPos, maxPos));\r\n }\r\n return TextSelection.create(doc, minMax(position, minPos, maxPos), minMax(position, minPos, maxPos));\r\n}\n\nfunction isiOS() {\r\n return [\r\n 'iPad Simulator',\r\n 'iPhone Simulator',\r\n 'iPod Simulator',\r\n 'iPad',\r\n 'iPhone',\r\n 'iPod',\r\n ].includes(navigator.platform)\r\n // iPad on iOS 13 detection\r\n || (navigator.userAgent.includes('Mac') && 'ontouchend' in document);\r\n}\n\nconst focus = (position = null, options = {}) => ({ editor, view, tr, dispatch, }) => {\r\n options = {\r\n scrollIntoView: true,\r\n ...options,\r\n };\r\n const delayedFocus = () => {\r\n // focus within `requestAnimationFrame` breaks focus on iOS\r\n // so we have to call this\r\n if (isiOS()) {\r\n view.dom.focus();\r\n }\r\n // For React we have to focus asynchronously. Otherwise wild things happen.\r\n // see: https://github.com/ueberdosis/tiptap/issues/1520\r\n requestAnimationFrame(() => {\r\n if (!editor.isDestroyed) {\r\n view.focus();\r\n if (options === null || options === void 0 ? void 0 : options.scrollIntoView) {\r\n editor.commands.scrollIntoView();\r\n }\r\n }\r\n });\r\n };\r\n if ((view.hasFocus() && position === null) || position === false) {\r\n return true;\r\n }\r\n // we don’t try to resolve a NodeSelection or CellSelection\r\n if (dispatch && position === null && !isTextSelection(editor.state.selection)) {\r\n delayedFocus();\r\n return true;\r\n }\r\n // pass through tr.doc instead of editor.state.doc\r\n // since transactions could change the editors state before this command has been run\r\n const selection = resolveFocusPosition(tr.doc, position) || editor.state.selection;\r\n const isSameSelection = editor.state.selection.eq(selection);\r\n if (dispatch) {\r\n if (!isSameSelection) {\r\n tr.setSelection(selection);\r\n }\r\n // `tr.setSelection` resets the stored marks\r\n // so we’ll restore them if the selection is the same as before\r\n if (isSameSelection && tr.storedMarks) {\r\n tr.setStoredMarks(tr.storedMarks);\r\n }\r\n delayedFocus();\r\n }\r\n return true;\r\n};\n\nconst forEach = (items, fn) => props => {\r\n return items.every((item, index) => fn(item, { ...props, index }));\r\n};\n\nconst insertContent = (value, options) => ({ tr, commands }) => {\r\n return commands.insertContentAt({ from: tr.selection.from, to: tr.selection.to }, value, options);\r\n};\n\nconst removeWhitespaces = (node) => {\r\n const children = node.childNodes;\r\n for (let i = children.length - 1; i >= 0; i -= 1) {\r\n const child = children[i];\r\n if (child.nodeType === 3 && child.nodeValue && /^(\\n\\s\\s|\\n)$/.test(child.nodeValue)) {\r\n node.removeChild(child);\r\n }\r\n else if (child.nodeType === 1) {\r\n removeWhitespaces(child);\r\n }\r\n }\r\n return node;\r\n};\r\nfunction elementFromString(value) {\r\n // add a wrapper to preserve leading and trailing whitespace\r\n const wrappedValue = `${value}`;\r\n const html = new window.DOMParser().parseFromString(wrappedValue, 'text/html').body;\r\n return removeWhitespaces(html);\r\n}\n\nfunction createNodeFromContent(content, schema, options) {\r\n options = {\r\n slice: true,\r\n parseOptions: {},\r\n ...options,\r\n };\r\n if (typeof content === 'object' && content !== null) {\r\n try {\r\n if (Array.isArray(content) && content.length > 0) {\r\n return Fragment.fromArray(content.map(item => schema.nodeFromJSON(item)));\r\n }\r\n return schema.nodeFromJSON(content);\r\n }\r\n catch (error) {\r\n console.warn('[tiptap warn]: Invalid content.', 'Passed value:', content, 'Error:', error);\r\n return createNodeFromContent('', schema, options);\r\n }\r\n }\r\n if (typeof content === 'string') {\r\n const parser = DOMParser.fromSchema(schema);\r\n return options.slice\r\n ? parser.parseSlice(elementFromString(content), options.parseOptions).content\r\n : parser.parse(elementFromString(content), options.parseOptions);\r\n }\r\n return createNodeFromContent('', schema, options);\r\n}\n\n// source: https://github.com/ProseMirror/prosemirror-state/blob/master/src/selection.js#L466\r\nfunction selectionToInsertionEnd(tr, startLen, bias) {\r\n const last = tr.steps.length - 1;\r\n if (last < startLen) {\r\n return;\r\n }\r\n const step = tr.steps[last];\r\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) {\r\n return;\r\n }\r\n const map = tr.mapping.maps[last];\r\n let end = 0;\r\n map.forEach((_from, _to, _newFrom, newTo) => {\r\n if (end === 0) {\r\n end = newTo;\r\n }\r\n });\r\n tr.setSelection(Selection.near(tr.doc.resolve(end), bias));\r\n}\n\nconst isFragment = (nodeOrFragment) => {\r\n return nodeOrFragment.toString().startsWith('<');\r\n};\r\nconst insertContentAt = (position, value, options) => ({ tr, dispatch, editor }) => {\r\n if (dispatch) {\r\n options = {\r\n parseOptions: {},\r\n updateSelection: true,\r\n ...options,\r\n };\r\n const content = createNodeFromContent(value, editor.schema, {\r\n parseOptions: {\r\n preserveWhitespace: 'full',\r\n ...options.parseOptions,\r\n },\r\n });\r\n // don’t dispatch an empty fragment because this can lead to strange errors\r\n if (content.toString() === '<>') {\r\n return true;\r\n }\r\n let { from, to } = typeof position === 'number' ? { from: position, to: position } : { from: position.from, to: position.to };\r\n let isOnlyTextContent = true;\r\n let isOnlyBlockContent = true;\r\n const nodes = isFragment(content) ? content : [content];\r\n nodes.forEach(node => {\r\n // check if added node is valid\r\n node.check();\r\n isOnlyTextContent = isOnlyTextContent ? node.isText && node.marks.length === 0 : false;\r\n isOnlyBlockContent = isOnlyBlockContent ? node.isBlock : false;\r\n });\r\n // check if we can replace the wrapping node by\r\n // the newly inserted content\r\n // example:\r\n // replace an empty paragraph by an inserted image\r\n // instead of inserting the image below the paragraph\r\n if (from === to && isOnlyBlockContent) {\r\n const { parent } = tr.doc.resolve(from);\r\n const isEmptyTextBlock = parent.isTextblock && !parent.type.spec.code && !parent.childCount;\r\n if (isEmptyTextBlock) {\r\n from -= 1;\r\n to += 1;\r\n }\r\n }\r\n // if there is only plain text we have to use `insertText`\r\n // because this will keep the current marks\r\n if (isOnlyTextContent) {\r\n // if value is string, we can use it directly\r\n // otherwise if it is an array, we have to join it\r\n if (Array.isArray(value)) {\r\n tr.insertText(value.map(v => v.text || '').join(''), from, to);\r\n }\r\n else if (typeof value === 'object' && !!value && !!value.text) {\r\n tr.insertText(value.text, from, to);\r\n }\r\n else {\r\n tr.insertText(value, from, to);\r\n }\r\n }\r\n else {\r\n tr.replaceWith(from, to, content);\r\n }\r\n // set cursor at end of inserted content\r\n if (options.updateSelection) {\r\n selectionToInsertionEnd(tr, tr.steps.length - 1, -1);\r\n }\r\n }\r\n return true;\r\n};\n\nconst joinUp = () => ({ state, dispatch }) => {\r\n return joinUp$1(state, dispatch);\r\n};\r\nconst joinDown = () => ({ state, dispatch }) => {\r\n return joinDown$1(state, dispatch);\r\n};\r\nconst joinBackward = () => ({ state, dispatch }) => {\r\n return joinBackward$1(state, dispatch);\r\n};\r\nconst joinForward = () => ({ state, dispatch }) => {\r\n return joinForward$1(state, dispatch);\r\n};\n\nconst joinItemBackward = () => ({ tr, state, dispatch, }) => {\r\n try {\r\n const point = joinPoint(state.doc, state.selection.$from.pos, -1);\r\n if (point === null || point === undefined) {\r\n return false;\r\n }\r\n tr.join(point, 2);\r\n if (dispatch) {\r\n dispatch(tr);\r\n }\r\n return true;\r\n }\r\n catch {\r\n return false;\r\n }\r\n};\n\nconst joinItemForward = () => ({ state, dispatch, tr, }) => {\r\n try {\r\n const point = joinPoint(state.doc, state.selection.$from.pos, +1);\r\n if (point === null || point === undefined) {\r\n return false;\r\n }\r\n tr.join(point, 2);\r\n if (dispatch) {\r\n dispatch(tr);\r\n }\r\n return true;\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n};\n\nconst joinTextblockBackward = () => ({ state, dispatch }) => {\r\n return joinTextblockBackward$1(state, dispatch);\r\n};\n\nconst joinTextblockForward = () => ({ state, dispatch }) => {\r\n return joinTextblockForward$1(state, dispatch);\r\n};\n\nfunction isMacOS() {\r\n return typeof navigator !== 'undefined'\r\n ? /Mac/.test(navigator.platform)\r\n : false;\r\n}\n\nfunction normalizeKeyName(name) {\r\n const parts = name.split(/-(?!$)/);\r\n let result = parts[parts.length - 1];\r\n if (result === 'Space') {\r\n result = ' ';\r\n }\r\n let alt;\r\n let ctrl;\r\n let shift;\r\n let meta;\r\n for (let i = 0; i < parts.length - 1; i += 1) {\r\n const mod = parts[i];\r\n if (/^(cmd|meta|m)$/i.test(mod)) {\r\n meta = true;\r\n }\r\n else if (/^a(lt)?$/i.test(mod)) {\r\n alt = true;\r\n }\r\n else if (/^(c|ctrl|control)$/i.test(mod)) {\r\n ctrl = true;\r\n }\r\n else if (/^s(hift)?$/i.test(mod)) {\r\n shift = true;\r\n }\r\n else if (/^mod$/i.test(mod)) {\r\n if (isiOS() || isMacOS()) {\r\n meta = true;\r\n }\r\n else {\r\n ctrl = true;\r\n }\r\n }\r\n else {\r\n throw new Error(`Unrecognized modifier name: ${mod}`);\r\n }\r\n }\r\n if (alt) {\r\n result = `Alt-${result}`;\r\n }\r\n if (ctrl) {\r\n result = `Ctrl-${result}`;\r\n }\r\n if (meta) {\r\n result = `Meta-${result}`;\r\n }\r\n if (shift) {\r\n result = `Shift-${result}`;\r\n }\r\n return result;\r\n}\r\nconst keyboardShortcut = name => ({ editor, view, tr, dispatch, }) => {\r\n const keys = normalizeKeyName(name).split(/-(?!$)/);\r\n const key = keys.find(item => !['Alt', 'Ctrl', 'Meta', 'Shift'].includes(item));\r\n const event = new KeyboardEvent('keydown', {\r\n key: key === 'Space'\r\n ? ' '\r\n : key,\r\n altKey: keys.includes('Alt'),\r\n ctrlKey: keys.includes('Ctrl'),\r\n metaKey: keys.includes('Meta'),\r\n shiftKey: keys.includes('Shift'),\r\n bubbles: true,\r\n cancelable: true,\r\n });\r\n const capturedTransaction = editor.captureTransaction(() => {\r\n view.someProp('handleKeyDown', f => f(view, event));\r\n });\r\n capturedTransaction === null || capturedTransaction === void 0 ? void 0 : capturedTransaction.steps.forEach(step => {\r\n const newStep = step.map(tr.mapping);\r\n if (newStep && dispatch) {\r\n tr.maybeStep(newStep);\r\n }\r\n });\r\n return true;\r\n};\n\nfunction isNodeActive(state, typeOrName, attributes = {}) {\r\n const { from, to, empty } = state.selection;\r\n const type = typeOrName ? getNodeType(typeOrName, state.schema) : null;\r\n const nodeRanges = [];\r\n state.doc.nodesBetween(from, to, (node, pos) => {\r\n if (node.isText) {\r\n return;\r\n }\r\n const relativeFrom = Math.max(from, pos);\r\n const relativeTo = Math.min(to, pos + node.nodeSize);\r\n nodeRanges.push({\r\n node,\r\n from: relativeFrom,\r\n to: relativeTo,\r\n });\r\n });\r\n const selectionRange = to - from;\r\n const matchedNodeRanges = nodeRanges\r\n .filter(nodeRange => {\r\n if (!type) {\r\n return true;\r\n }\r\n return type.name === nodeRange.node.type.name;\r\n })\r\n .filter(nodeRange => objectIncludes(nodeRange.node.attrs, attributes, { strict: false }));\r\n if (empty) {\r\n return !!matchedNodeRanges.length;\r\n }\r\n const range = matchedNodeRanges.reduce((sum, nodeRange) => sum + nodeRange.to - nodeRange.from, 0);\r\n return range >= selectionRange;\r\n}\n\nconst lift = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\r\n const type = getNodeType(typeOrName, state.schema);\r\n const isActive = isNodeActive(state, type, attributes);\r\n if (!isActive) {\r\n return false;\r\n }\r\n return lift$1(state, dispatch);\r\n};\n\nconst liftEmptyBlock = () => ({ state, dispatch }) => {\r\n return liftEmptyBlock$1(state, dispatch);\r\n};\n\nconst liftListItem = typeOrName => ({ state, dispatch }) => {\r\n const type = getNodeType(typeOrName, state.schema);\r\n return liftListItem$1(type)(state, dispatch);\r\n};\n\nconst newlineInCode = () => ({ state, dispatch }) => {\r\n return newlineInCode$1(state, dispatch);\r\n};\n\nfunction getSchemaTypeNameByName(name, schema) {\r\n if (schema.nodes[name]) {\r\n return 'node';\r\n }\r\n if (schema.marks[name]) {\r\n return 'mark';\r\n }\r\n return null;\r\n}\n\n/**\r\n * Remove a property or an array of properties from an object\r\n * @param obj Object\r\n * @param key Key to remove\r\n */\r\nfunction deleteProps(obj, propOrProps) {\r\n const props = typeof propOrProps === 'string'\r\n ? [propOrProps]\r\n : propOrProps;\r\n return Object\r\n .keys(obj)\r\n .reduce((newObj, prop) => {\r\n if (!props.includes(prop)) {\r\n newObj[prop] = obj[prop];\r\n }\r\n return newObj;\r\n }, {});\r\n}\n\nconst resetAttributes = (typeOrName, attributes) => ({ tr, state, dispatch }) => {\r\n let nodeType = null;\r\n let markType = null;\r\n const schemaType = getSchemaTypeNameByName(typeof typeOrName === 'string' ? typeOrName : typeOrName.name, state.schema);\r\n if (!schemaType) {\r\n return false;\r\n }\r\n if (schemaType === 'node') {\r\n nodeType = getNodeType(typeOrName, state.schema);\r\n }\r\n if (schemaType === 'mark') {\r\n markType = getMarkType(typeOrName, state.schema);\r\n }\r\n if (dispatch) {\r\n tr.selection.ranges.forEach(range => {\r\n state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, pos) => {\r\n if (nodeType && nodeType === node.type) {\r\n tr.setNodeMarkup(pos, undefined, deleteProps(node.attrs, attributes));\r\n }\r\n if (markType && node.marks.length) {\r\n node.marks.forEach(mark => {\r\n if (markType === mark.type) {\r\n tr.addMark(pos, pos + node.nodeSize, markType.create(deleteProps(mark.attrs, attributes)));\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n return true;\r\n};\n\nconst scrollIntoView = () => ({ tr, dispatch }) => {\r\n if (dispatch) {\r\n tr.scrollIntoView();\r\n }\r\n return true;\r\n};\n\nconst selectAll = () => ({ tr, commands }) => {\r\n return commands.setTextSelection({\r\n from: 0,\r\n to: tr.doc.content.size,\r\n });\r\n};\n\nconst selectNodeBackward = () => ({ state, dispatch }) => {\r\n return selectNodeBackward$1(state, dispatch);\r\n};\n\nconst selectNodeForward = () => ({ state, dispatch }) => {\r\n return selectNodeForward$1(state, dispatch);\r\n};\n\nconst selectParentNode = () => ({ state, dispatch }) => {\r\n return selectParentNode$1(state, dispatch);\r\n};\n\n// @ts-ignore\r\nconst selectTextblockEnd = () => ({ state, dispatch }) => {\r\n return selectTextblockEnd$1(state, dispatch);\r\n};\n\n// @ts-ignore\r\nconst selectTextblockStart = () => ({ state, dispatch }) => {\r\n return selectTextblockStart$1(state, dispatch);\r\n};\n\nfunction createDocument(content, schema, parseOptions = {}) {\r\n return createNodeFromContent(content, schema, { slice: false, parseOptions });\r\n}\n\nconst setContent = (content, emitUpdate = false, parseOptions = {}) => ({ tr, editor, dispatch }) => {\r\n const { doc } = tr;\r\n const document = createDocument(content, editor.schema, parseOptions);\r\n if (dispatch) {\r\n tr.replaceWith(0, doc.content.size, document).setMeta('preventUpdate', !emitUpdate);\r\n }\r\n return true;\r\n};\n\nfunction getMarkAttributes(state, typeOrName) {\r\n const type = getMarkType(typeOrName, state.schema);\r\n const { from, to, empty } = state.selection;\r\n const marks = [];\r\n if (empty) {\r\n if (state.storedMarks) {\r\n marks.push(...state.storedMarks);\r\n }\r\n marks.push(...state.selection.$head.marks());\r\n }\r\n else {\r\n state.doc.nodesBetween(from, to, node => {\r\n marks.push(...node.marks);\r\n });\r\n }\r\n const mark = marks.find(markItem => markItem.type.name === type.name);\r\n if (!mark) {\r\n return {};\r\n }\r\n return { ...mark.attrs };\r\n}\n\n/**\r\n * Returns a new `Transform` based on all steps of the passed transactions.\r\n */\r\nfunction combineTransactionSteps(oldDoc, transactions) {\r\n const transform = new Transform(oldDoc);\r\n transactions.forEach(transaction => {\r\n transaction.steps.forEach(step => {\r\n transform.step(step);\r\n });\r\n });\r\n return transform;\r\n}\n\nfunction defaultBlockAt(match) {\r\n for (let i = 0; i < match.edgeCount; i += 1) {\r\n const { type } = match.edge(i);\r\n if (type.isTextblock && !type.hasRequiredAttrs()) {\r\n return type;\r\n }\r\n }\r\n return null;\r\n}\n\nfunction findChildren(node, predicate) {\r\n const nodesWithPos = [];\r\n node.descendants((child, pos) => {\r\n if (predicate(child)) {\r\n nodesWithPos.push({\r\n node: child,\r\n pos,\r\n });\r\n }\r\n });\r\n return nodesWithPos;\r\n}\n\n/**\r\n * Same as `findChildren` but searches only within a `range`.\r\n */\r\nfunction findChildrenInRange(node, range, predicate) {\r\n const nodesWithPos = [];\r\n // if (range.from === range.to) {\r\n // const nodeAt = node.nodeAt(range.from)\r\n // if (nodeAt) {\r\n // nodesWithPos.push({\r\n // node: nodeAt,\r\n // pos: range.from,\r\n // })\r\n // }\r\n // }\r\n node.nodesBetween(range.from, range.to, (child, pos) => {\r\n if (predicate(child)) {\r\n nodesWithPos.push({\r\n node: child,\r\n pos,\r\n });\r\n }\r\n });\r\n return nodesWithPos;\r\n}\n\nfunction findParentNodeClosestToPos($pos, predicate) {\r\n for (let i = $pos.depth; i > 0; i -= 1) {\r\n const node = $pos.node(i);\r\n if (predicate(node)) {\r\n return {\r\n pos: i > 0 ? $pos.before(i) : 0,\r\n start: $pos.start(i),\r\n depth: i,\r\n node,\r\n };\r\n }\r\n }\r\n}\n\nfunction findParentNode(predicate) {\r\n return (selection) => findParentNodeClosestToPos(selection.$from, predicate);\r\n}\n\nfunction getHTMLFromFragment(fragment, schema) {\r\n const documentFragment = DOMSerializer.fromSchema(schema).serializeFragment(fragment);\r\n const temporaryDocument = document.implementation.createHTMLDocument();\r\n const container = temporaryDocument.createElement('div');\r\n container.appendChild(documentFragment);\r\n return container.innerHTML;\r\n}\n\nfunction getSchema(extensions, editor) {\r\n const resolvedExtensions = ExtensionManager.resolve(extensions);\r\n return getSchemaByResolvedExtensions(resolvedExtensions, editor);\r\n}\n\nfunction generateHTML(doc, extensions) {\r\n const schema = getSchema(extensions);\r\n const contentNode = Node$1.fromJSON(schema, doc);\r\n return getHTMLFromFragment(contentNode.content, schema);\r\n}\n\nfunction generateJSON(html, extensions) {\r\n const schema = getSchema(extensions);\r\n const dom = elementFromString(html);\r\n return DOMParser.fromSchema(schema).parse(dom).toJSON();\r\n}\n\nfunction getText(node, options) {\r\n const range = {\r\n from: 0,\r\n to: node.content.size,\r\n };\r\n return getTextBetween(node, range, options);\r\n}\n\nfunction generateText(doc, extensions, options) {\r\n const { blockSeparator = '\\n\\n', textSerializers = {} } = options || {};\r\n const schema = getSchema(extensions);\r\n const contentNode = Node$1.fromJSON(schema, doc);\r\n return getText(contentNode, {\r\n blockSeparator,\r\n textSerializers: {\r\n ...getTextSerializersFromSchema(schema),\r\n ...textSerializers,\r\n },\r\n });\r\n}\n\nfunction getNodeAttributes(state, typeOrName) {\r\n const type = getNodeType(typeOrName, state.schema);\r\n const { from, to } = state.selection;\r\n const nodes = [];\r\n state.doc.nodesBetween(from, to, node => {\r\n nodes.push(node);\r\n });\r\n const node = nodes.reverse().find(nodeItem => nodeItem.type.name === type.name);\r\n if (!node) {\r\n return {};\r\n }\r\n return { ...node.attrs };\r\n}\n\nfunction getAttributes(state, typeOrName) {\r\n const schemaType = getSchemaTypeNameByName(typeof typeOrName === 'string' ? typeOrName : typeOrName.name, state.schema);\r\n if (schemaType === 'node') {\r\n return getNodeAttributes(state, typeOrName);\r\n }\r\n if (schemaType === 'mark') {\r\n return getMarkAttributes(state, typeOrName);\r\n }\r\n return {};\r\n}\n\n/**\r\n * Removes duplicated values within an array.\r\n * Supports numbers, strings and objects.\r\n */\r\nfunction removeDuplicates(array, by = JSON.stringify) {\r\n const seen = {};\r\n return array.filter(item => {\r\n const key = by(item);\r\n return Object.prototype.hasOwnProperty.call(seen, key)\r\n ? false\r\n : (seen[key] = true);\r\n });\r\n}\n\n/**\r\n * Removes duplicated ranges and ranges that are\r\n * fully captured by other ranges.\r\n */\r\nfunction simplifyChangedRanges(changes) {\r\n const uniqueChanges = removeDuplicates(changes);\r\n return uniqueChanges.length === 1\r\n ? uniqueChanges\r\n : uniqueChanges.filter((change, index) => {\r\n const rest = uniqueChanges.filter((_, i) => i !== index);\r\n return !rest.some(otherChange => {\r\n return change.oldRange.from >= otherChange.oldRange.from\r\n && change.oldRange.to <= otherChange.oldRange.to\r\n && change.newRange.from >= otherChange.newRange.from\r\n && change.newRange.to <= otherChange.newRange.to;\r\n });\r\n });\r\n}\r\n/**\r\n * Returns a list of changed ranges\r\n * based on the first and last state of all steps.\r\n */\r\nfunction getChangedRanges(transform) {\r\n const { mapping, steps } = transform;\r\n const changes = [];\r\n mapping.maps.forEach((stepMap, index) => {\r\n const ranges = [];\r\n // This accounts for step changes where no range was actually altered\r\n // e.g. when setting a mark, node attribute, etc.\r\n // @ts-ignore\r\n if (!stepMap.ranges.length) {\r\n const { from, to } = steps[index];\r\n if (from === undefined || to === undefined) {\r\n return;\r\n }\r\n ranges.push({ from, to });\r\n }\r\n else {\r\n stepMap.forEach((from, to) => {\r\n ranges.push({ from, to });\r\n });\r\n }\r\n ranges.forEach(({ from, to }) => {\r\n const newStart = mapping.slice(index).map(from, -1);\r\n const newEnd = mapping.slice(index).map(to);\r\n const oldStart = mapping.invert().map(newStart, -1);\r\n const oldEnd = mapping.invert().map(newEnd);\r\n changes.push({\r\n oldRange: {\r\n from: oldStart,\r\n to: oldEnd,\r\n },\r\n newRange: {\r\n from: newStart,\r\n to: newEnd,\r\n },\r\n });\r\n });\r\n });\r\n return simplifyChangedRanges(changes);\r\n}\n\nfunction getDebugJSON(node, startOffset = 0) {\r\n const isTopNode = node.type === node.type.schema.topNodeType;\r\n const increment = isTopNode ? 0 : 1;\r\n const from = startOffset;\r\n const to = from + node.nodeSize;\r\n const marks = node.marks.map(mark => {\r\n const output = {\r\n type: mark.type.name,\r\n };\r\n if (Object.keys(mark.attrs).length) {\r\n output.attrs = { ...mark.attrs };\r\n }\r\n return output;\r\n });\r\n const attrs = { ...node.attrs };\r\n const output = {\r\n type: node.type.name,\r\n from,\r\n to,\r\n };\r\n if (Object.keys(attrs).length) {\r\n output.attrs = attrs;\r\n }\r\n if (marks.length) {\r\n output.marks = marks;\r\n }\r\n if (node.content.childCount) {\r\n output.content = [];\r\n node.forEach((child, offset) => {\r\n var _a;\r\n (_a = output.content) === null || _a === void 0 ? void 0 : _a.push(getDebugJSON(child, startOffset + offset + increment));\r\n });\r\n }\r\n if (node.text) {\r\n output.text = node.text;\r\n }\r\n return output;\r\n}\n\nfunction getMarksBetween(from, to, doc) {\r\n const marks = [];\r\n // get all inclusive marks on empty selection\r\n if (from === to) {\r\n doc\r\n .resolve(from)\r\n .marks()\r\n .forEach(mark => {\r\n const $pos = doc.resolve(from - 1);\r\n const range = getMarkRange($pos, mark.type);\r\n if (!range) {\r\n return;\r\n }\r\n marks.push({\r\n mark,\r\n ...range,\r\n });\r\n });\r\n }\r\n else {\r\n doc.nodesBetween(from, to, (node, pos) => {\r\n if (!node || (node === null || node === void 0 ? void 0 : node.nodeSize) === undefined) {\r\n return;\r\n }\r\n marks.push(...node.marks.map(mark => ({\r\n from: pos,\r\n to: pos + node.nodeSize,\r\n mark,\r\n })));\r\n });\r\n }\r\n return marks;\r\n}\n\n/**\r\n * Finds the first node of a given type or name in the current selection.\r\n * @param state The editor state.\r\n * @param typeOrName The node type or name.\r\n * @param pos The position to start searching from.\r\n * @param maxDepth The maximum depth to search.\r\n * @returns The node and the depth as an array.\r\n */\r\nconst getNodeAtPosition = (state, typeOrName, pos, maxDepth = 20) => {\r\n const $pos = state.doc.resolve(pos);\r\n let currentDepth = maxDepth;\r\n let node = null;\r\n while (currentDepth > 0 && node === null) {\r\n const currentNode = $pos.node(currentDepth);\r\n if ((currentNode === null || currentNode === void 0 ? void 0 : currentNode.type.name) === typeOrName) {\r\n node = currentNode;\r\n }\r\n else {\r\n currentDepth -= 1;\r\n }\r\n }\r\n return [node, currentDepth];\r\n};\n\nfunction getSplittedAttributes(extensionAttributes, typeName, attributes) {\r\n return Object.fromEntries(Object\r\n .entries(attributes)\r\n .filter(([name]) => {\r\n const extensionAttribute = extensionAttributes.find(item => {\r\n return item.type === typeName && item.name === name;\r\n });\r\n if (!extensionAttribute) {\r\n return false;\r\n }\r\n return extensionAttribute.attribute.keepOnSplit;\r\n }));\r\n}\n\nfunction isMarkActive(state, typeOrName, attributes = {}) {\r\n const { empty, ranges } = state.selection;\r\n const type = typeOrName ? getMarkType(typeOrName, state.schema) : null;\r\n if (empty) {\r\n return !!(state.storedMarks || state.selection.$from.marks())\r\n .filter(mark => {\r\n if (!type) {\r\n return true;\r\n }\r\n return type.name === mark.type.name;\r\n })\r\n .find(mark => objectIncludes(mark.attrs, attributes, { strict: false }));\r\n }\r\n let selectionRange = 0;\r\n const markRanges = [];\r\n ranges.forEach(({ $from, $to }) => {\r\n const from = $from.pos;\r\n const to = $to.pos;\r\n state.doc.nodesBetween(from, to, (node, pos) => {\r\n if (!node.isText && !node.marks.length) {\r\n return;\r\n }\r\n const relativeFrom = Math.max(from, pos);\r\n const relativeTo = Math.min(to, pos + node.nodeSize);\r\n const range = relativeTo - relativeFrom;\r\n selectionRange += range;\r\n markRanges.push(...node.marks.map(mark => ({\r\n mark,\r\n from: relativeFrom,\r\n to: relativeTo,\r\n })));\r\n });\r\n });\r\n if (selectionRange === 0) {\r\n return false;\r\n }\r\n // calculate range of matched mark\r\n const matchedRange = markRanges\r\n .filter(markRange => {\r\n if (!type) {\r\n return true;\r\n }\r\n return type.name === markRange.mark.type.name;\r\n })\r\n .filter(markRange => objectIncludes(markRange.mark.attrs, attributes, { strict: false }))\r\n .reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\r\n // calculate range of marks that excludes the searched mark\r\n // for example `code` doesn’t allow any other marks\r\n const excludedRange = markRanges\r\n .filter(markRange => {\r\n if (!type) {\r\n return true;\r\n }\r\n return markRange.mark.type !== type && markRange.mark.type.excludes(type);\r\n })\r\n .reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\r\n // we only include the result of `excludedRange`\r\n // if there is a match at all\r\n const range = matchedRange > 0 ? matchedRange + excludedRange : matchedRange;\r\n return range >= selectionRange;\r\n}\n\nfunction isActive(state, name, attributes = {}) {\r\n if (!name) {\r\n return isNodeActive(state, null, attributes) || isMarkActive(state, null, attributes);\r\n }\r\n const schemaType = getSchemaTypeNameByName(name, state.schema);\r\n if (schemaType === 'node') {\r\n return isNodeActive(state, name, attributes);\r\n }\r\n if (schemaType === 'mark') {\r\n return isMarkActive(state, name, attributes);\r\n }\r\n return false;\r\n}\n\nconst isAtEndOfNode = (state, nodeType) => {\r\n const { $from, $to, $anchor } = state.selection;\r\n if (nodeType) {\r\n const parentNode = findParentNode(node => node.type.name === nodeType)(state.selection);\r\n if (!parentNode) {\r\n return false;\r\n }\r\n const $parentPos = state.doc.resolve(parentNode.pos + 1);\r\n if ($anchor.pos + 1 === $parentPos.end()) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n if ($to.parentOffset < $to.parent.nodeSize - 2 || $from.pos !== $to.pos) {\r\n return false;\r\n }\r\n return true;\r\n};\n\nconst isAtStartOfNode = (state) => {\r\n const { $from, $to } = state.selection;\r\n if ($from.parentOffset > 0 || $from.pos !== $to.pos) {\r\n return false;\r\n }\r\n return true;\r\n};\n\nfunction isList(name, extensions) {\r\n const { nodeExtensions } = splitExtensions(extensions);\r\n const extension = nodeExtensions.find(item => item.name === name);\r\n if (!extension) {\r\n return false;\r\n }\r\n const context = {\r\n name: extension.name,\r\n options: extension.options,\r\n storage: extension.storage,\r\n };\r\n const group = callOrReturn(getExtensionField(extension, 'group', context));\r\n if (typeof group !== 'string') {\r\n return false;\r\n }\r\n return group.split(' ').includes('list');\r\n}\n\nfunction isNodeEmpty(node) {\r\n var _a;\r\n const defaultContent = (_a = node.type.createAndFill()) === null || _a === void 0 ? void 0 : _a.toJSON();\r\n const content = node.toJSON();\r\n return JSON.stringify(defaultContent) === JSON.stringify(content);\r\n}\n\nfunction isNodeSelection(value) {\r\n return value instanceof NodeSelection;\r\n}\n\nfunction posToDOMRect(view, from, to) {\r\n const minPos = 0;\r\n const maxPos = view.state.doc.content.size;\r\n const resolvedFrom = minMax(from, minPos, maxPos);\r\n const resolvedEnd = minMax(to, minPos, maxPos);\r\n const start = view.coordsAtPos(resolvedFrom);\r\n const end = view.coordsAtPos(resolvedEnd, -1);\r\n const top = Math.min(start.top, end.top);\r\n const bottom = Math.max(start.bottom, end.bottom);\r\n const left = Math.min(start.left, end.left);\r\n const right = Math.max(start.right, end.right);\r\n const width = right - left;\r\n const height = bottom - top;\r\n const x = left;\r\n const y = top;\r\n const data = {\r\n top,\r\n bottom,\r\n left,\r\n right,\r\n width,\r\n height,\r\n x,\r\n y,\r\n };\r\n return {\r\n ...data,\r\n toJSON: () => data,\r\n };\r\n}\n\nfunction canSetMark(state, tr, newMarkType) {\r\n var _a;\r\n const { selection } = tr;\r\n let cursor = null;\r\n if (isTextSelection(selection)) {\r\n cursor = selection.$cursor;\r\n }\r\n if (cursor) {\r\n const currentMarks = (_a = state.storedMarks) !== null && _a !== void 0 ? _a : cursor.marks();\r\n // There can be no current marks that exclude the new mark\r\n return (!!newMarkType.isInSet(currentMarks)\r\n || !currentMarks.some(mark => mark.type.excludes(newMarkType)));\r\n }\r\n const { ranges } = selection;\r\n return ranges.some(({ $from, $to }) => {\r\n let someNodeSupportsMark = $from.depth === 0\r\n ? state.doc.inlineContent && state.doc.type.allowsMarkType(newMarkType)\r\n : false;\r\n state.doc.nodesBetween($from.pos, $to.pos, (node, _pos, parent) => {\r\n // If we already found a mark that we can enable, return false to bypass the remaining search\r\n if (someNodeSupportsMark) {\r\n return false;\r\n }\r\n if (node.isInline) {\r\n const parentAllowsMarkType = !parent || parent.type.allowsMarkType(newMarkType);\r\n const currentMarksAllowMarkType = !!newMarkType.isInSet(node.marks)\r\n || !node.marks.some(otherMark => otherMark.type.excludes(newMarkType));\r\n someNodeSupportsMark = parentAllowsMarkType && currentMarksAllowMarkType;\r\n }\r\n return !someNodeSupportsMark;\r\n });\r\n return someNodeSupportsMark;\r\n });\r\n}\r\nconst setMark = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\r\n const { selection } = tr;\r\n const { empty, ranges } = selection;\r\n const type = getMarkType(typeOrName, state.schema);\r\n if (dispatch) {\r\n if (empty) {\r\n const oldAttributes = getMarkAttributes(state, type);\r\n tr.addStoredMark(type.create({\r\n ...oldAttributes,\r\n ...attributes,\r\n }));\r\n }\r\n else {\r\n ranges.forEach(range => {\r\n const from = range.$from.pos;\r\n const to = range.$to.pos;\r\n state.doc.nodesBetween(from, to, (node, pos) => {\r\n const trimmedFrom = Math.max(pos, from);\r\n const trimmedTo = Math.min(pos + node.nodeSize, to);\r\n const someHasMark = node.marks.find(mark => mark.type === type);\r\n // if there is already a mark of this type\r\n // we know that we have to merge its attributes\r\n // otherwise we add a fresh new mark\r\n if (someHasMark) {\r\n node.marks.forEach(mark => {\r\n if (type === mark.type) {\r\n tr.addMark(trimmedFrom, trimmedTo, type.create({\r\n ...mark.attrs,\r\n ...attributes,\r\n }));\r\n }\r\n });\r\n }\r\n else {\r\n tr.addMark(trimmedFrom, trimmedTo, type.create(attributes));\r\n }\r\n });\r\n });\r\n }\r\n }\r\n return canSetMark(state, tr, type);\r\n};\n\nconst setMeta = (key, value) => ({ tr }) => {\r\n tr.setMeta(key, value);\r\n return true;\r\n};\n\nconst setNode = (typeOrName, attributes = {}) => ({ state, dispatch, chain }) => {\r\n const type = getNodeType(typeOrName, state.schema);\r\n // TODO: use a fallback like insertContent?\r\n if (!type.isTextblock) {\r\n console.warn('[tiptap warn]: Currently \"setNode()\" only supports text block nodes.');\r\n return false;\r\n }\r\n return (chain()\r\n // try to convert node to default node if needed\r\n .command(({ commands }) => {\r\n const canSetBlock = setBlockType(type, attributes)(state);\r\n if (canSetBlock) {\r\n return true;\r\n }\r\n return commands.clearNodes();\r\n })\r\n .command(({ state: updatedState }) => {\r\n return setBlockType(type, attributes)(updatedState, dispatch);\r\n })\r\n .run());\r\n};\n\nconst setNodeSelection = position => ({ tr, dispatch }) => {\r\n if (dispatch) {\r\n const { doc } = tr;\r\n const from = minMax(position, 0, doc.content.size);\r\n const selection = NodeSelection.create(doc, from);\r\n tr.setSelection(selection);\r\n }\r\n return true;\r\n};\n\nconst setTextSelection = position => ({ tr, dispatch }) => {\r\n if (dispatch) {\r\n const { doc } = tr;\r\n const { from, to } = typeof position === 'number' ? { from: position, to: position } : position;\r\n const minPos = TextSelection.atStart(doc).from;\r\n const maxPos = TextSelection.atEnd(doc).to;\r\n const resolvedFrom = minMax(from, minPos, maxPos);\r\n const resolvedEnd = minMax(to, minPos, maxPos);\r\n const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd);\r\n tr.setSelection(selection);\r\n }\r\n return true;\r\n};\n\nconst sinkListItem = typeOrName => ({ state, dispatch }) => {\r\n const type = getNodeType(typeOrName, state.schema);\r\n return sinkListItem$1(type)(state, dispatch);\r\n};\n\nfunction ensureMarks(state, splittableMarks) {\r\n const marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\r\n if (marks) {\r\n const filteredMarks = marks.filter(mark => splittableMarks === null || splittableMarks === void 0 ? void 0 : splittableMarks.includes(mark.type.name));\r\n state.tr.ensureMarks(filteredMarks);\r\n }\r\n}\r\nconst splitBlock = ({ keepMarks = true } = {}) => ({ tr, state, dispatch, editor, }) => {\r\n const { selection, doc } = tr;\r\n const { $from, $to } = selection;\r\n const extensionAttributes = editor.extensionManager.attributes;\r\n const newAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs);\r\n if (selection instanceof NodeSelection && selection.node.isBlock) {\r\n if (!$from.parentOffset || !canSplit(doc, $from.pos)) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n if (keepMarks) {\r\n ensureMarks(state, editor.extensionManager.splittableMarks);\r\n }\r\n tr.split($from.pos).scrollIntoView();\r\n }\r\n return true;\r\n }\r\n if (!$from.parent.isBlock) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n const atEnd = $to.parentOffset === $to.parent.content.size;\r\n if (selection instanceof TextSelection) {\r\n tr.deleteSelection();\r\n }\r\n const deflt = $from.depth === 0\r\n ? undefined\r\n : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)));\r\n let types = atEnd && deflt\r\n ? [\r\n {\r\n type: deflt,\r\n attrs: newAttributes,\r\n },\r\n ]\r\n : undefined;\r\n let can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types);\r\n if (!types\r\n && !can\r\n && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : undefined)) {\r\n can = true;\r\n types = deflt\r\n ? [\r\n {\r\n type: deflt,\r\n attrs: newAttributes,\r\n },\r\n ]\r\n : undefined;\r\n }\r\n if (can) {\r\n tr.split(tr.mapping.map($from.pos), 1, types);\r\n if (deflt && !atEnd && !$from.parentOffset && $from.parent.type !== deflt) {\r\n const first = tr.mapping.map($from.before());\r\n const $first = tr.doc.resolve(first);\r\n if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {\r\n tr.setNodeMarkup(tr.mapping.map($from.before()), deflt);\r\n }\r\n }\r\n }\r\n if (keepMarks) {\r\n ensureMarks(state, editor.extensionManager.splittableMarks);\r\n }\r\n tr.scrollIntoView();\r\n }\r\n return true;\r\n};\n\nconst splitListItem = typeOrName => ({ tr, state, dispatch, editor, }) => {\r\n var _a;\r\n const type = getNodeType(typeOrName, state.schema);\r\n const { $from, $to } = state.selection;\r\n // @ts-ignore\r\n // eslint-disable-next-line\r\n const node = state.selection.node;\r\n if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to)) {\r\n return false;\r\n }\r\n const grandParent = $from.node(-1);\r\n if (grandParent.type !== type) {\r\n return false;\r\n }\r\n const extensionAttributes = editor.extensionManager.attributes;\r\n if ($from.parent.content.size === 0 && $from.node(-1).childCount === $from.indexAfter(-1)) {\r\n // In an empty block. If this is a nested list, the wrapping\r\n // list item should be split. Otherwise, bail out and let next\r\n // command handle lifting.\r\n if ($from.depth === 2\r\n || $from.node(-3).type !== type\r\n || $from.index(-2) !== $from.node(-2).childCount - 1) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n let wrap = Fragment.empty;\r\n // eslint-disable-next-line\r\n const depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\r\n // Build a fragment containing empty versions of the structure\r\n // from the outer list item to the parent node of the cursor\r\n for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d -= 1) {\r\n wrap = Fragment.from($from.node(d).copy(wrap));\r\n }\r\n // eslint-disable-next-line\r\n const depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1 : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3;\r\n // Add a second list item with an empty default start node\r\n const newNextTypeAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs);\r\n const nextType = ((_a = type.contentMatch.defaultType) === null || _a === void 0 ? void 0 : _a.createAndFill(newNextTypeAttributes)) || undefined;\r\n wrap = wrap.append(Fragment.from(type.createAndFill(null, nextType) || undefined));\r\n const start = $from.before($from.depth - (depthBefore - 1));\r\n tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0));\r\n let sel = -1;\r\n tr.doc.nodesBetween(start, tr.doc.content.size, (n, pos) => {\r\n if (sel > -1) {\r\n return false;\r\n }\r\n if (n.isTextblock && n.content.size === 0) {\r\n sel = pos + 1;\r\n }\r\n });\r\n if (sel > -1) {\r\n tr.setSelection(TextSelection.near(tr.doc.resolve(sel)));\r\n }\r\n tr.scrollIntoView();\r\n }\r\n return true;\r\n }\r\n const nextType = $to.pos === $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\r\n const newTypeAttributes = getSplittedAttributes(extensionAttributes, grandParent.type.name, grandParent.attrs);\r\n const newNextTypeAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs);\r\n tr.delete($from.pos, $to.pos);\r\n const types = nextType\r\n ? [\r\n { type, attrs: newTypeAttributes },\r\n { type: nextType, attrs: newNextTypeAttributes },\r\n ]\r\n : [{ type, attrs: newTypeAttributes }];\r\n if (!canSplit(tr.doc, $from.pos, 2)) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n const { selection, storedMarks } = state;\r\n const { splittableMarks } = editor.extensionManager;\r\n const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks());\r\n tr.split($from.pos, 2, types).scrollIntoView();\r\n if (!marks || !dispatch) {\r\n return true;\r\n }\r\n const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name));\r\n tr.ensureMarks(filteredMarks);\r\n }\r\n return true;\r\n};\n\nconst joinListBackwards = (tr, listType) => {\r\n const list = findParentNode(node => node.type === listType)(tr.selection);\r\n if (!list) {\r\n return true;\r\n }\r\n const before = tr.doc.resolve(Math.max(0, list.pos - 1)).before(list.depth);\r\n if (before === undefined) {\r\n return true;\r\n }\r\n const nodeBefore = tr.doc.nodeAt(before);\r\n const canJoinBackwards = list.node.type === (nodeBefore === null || nodeBefore === void 0 ? void 0 : nodeBefore.type) && canJoin(tr.doc, list.pos);\r\n if (!canJoinBackwards) {\r\n return true;\r\n }\r\n tr.join(list.pos);\r\n return true;\r\n};\r\nconst joinListForwards = (tr, listType) => {\r\n const list = findParentNode(node => node.type === listType)(tr.selection);\r\n if (!list) {\r\n return true;\r\n }\r\n const after = tr.doc.resolve(list.start).after(list.depth);\r\n if (after === undefined) {\r\n return true;\r\n }\r\n const nodeAfter = tr.doc.nodeAt(after);\r\n const canJoinForwards = list.node.type === (nodeAfter === null || nodeAfter === void 0 ? void 0 : nodeAfter.type) && canJoin(tr.doc, after);\r\n if (!canJoinForwards) {\r\n return true;\r\n }\r\n tr.join(after);\r\n return true;\r\n};\r\nconst toggleList = (listTypeOrName, itemTypeOrName, keepMarks, attributes = {}) => ({ editor, tr, state, dispatch, chain, commands, can, }) => {\r\n const { extensions, splittableMarks } = editor.extensionManager;\r\n const listType = getNodeType(listTypeOrName, state.schema);\r\n const itemType = getNodeType(itemTypeOrName, state.schema);\r\n const { selection, storedMarks } = state;\r\n const { $from, $to } = selection;\r\n const range = $from.blockRange($to);\r\n const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks());\r\n if (!range) {\r\n return false;\r\n }\r\n const parentList = findParentNode(node => isList(node.type.name, extensions))(selection);\r\n if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\r\n // remove list\r\n if (parentList.node.type === listType) {\r\n return commands.liftListItem(itemType);\r\n }\r\n // change list type\r\n if (isList(parentList.node.type.name, extensions)\r\n && listType.validContent(parentList.node.content)\r\n && dispatch) {\r\n return chain()\r\n .command(() => {\r\n tr.setNodeMarkup(parentList.pos, listType);\r\n return true;\r\n })\r\n .command(() => joinListBackwards(tr, listType))\r\n .command(() => joinListForwards(tr, listType))\r\n .run();\r\n }\r\n }\r\n if (!keepMarks || !marks || !dispatch) {\r\n return chain()\r\n // try to convert node to default node if needed\r\n .command(() => {\r\n const canWrapInList = can().wrapInList(listType, attributes);\r\n if (canWrapInList) {\r\n return true;\r\n }\r\n return commands.clearNodes();\r\n })\r\n .wrapInList(listType, attributes)\r\n .command(() => joinListBackwards(tr, listType))\r\n .command(() => joinListForwards(tr, listType))\r\n .run();\r\n }\r\n return (chain()\r\n // try to convert node to default node if needed\r\n .command(() => {\r\n const canWrapInList = can().wrapInList(listType, attributes);\r\n const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name));\r\n tr.ensureMarks(filteredMarks);\r\n if (canWrapInList) {\r\n return true;\r\n }\r\n return commands.clearNodes();\r\n })\r\n .wrapInList(listType, attributes)\r\n .command(() => joinListBackwards(tr, listType))\r\n .command(() => joinListForwards(tr, listType))\r\n .run());\r\n};\n\nconst toggleMark = (typeOrName, attributes = {}, options = {}) => ({ state, commands }) => {\r\n const { extendEmptyMarkRange = false } = options;\r\n const type = getMarkType(typeOrName, state.schema);\r\n const isActive = isMarkActive(state, type, attributes);\r\n if (isActive) {\r\n return commands.unsetMark(type, { extendEmptyMarkRange });\r\n }\r\n return commands.setMark(type, attributes);\r\n};\n\nconst toggleNode = (typeOrName, toggleTypeOrName, attributes = {}) => ({ state, commands }) => {\r\n const type = getNodeType(typeOrName, state.schema);\r\n const toggleType = getNodeType(toggleTypeOrName, state.schema);\r\n const isActive = isNodeActive(state, type, attributes);\r\n if (isActive) {\r\n return commands.setNode(toggleType);\r\n }\r\n return commands.setNode(type, attributes);\r\n};\n\nconst toggleWrap = (typeOrName, attributes = {}) => ({ state, commands }) => {\r\n const type = getNodeType(typeOrName, state.schema);\r\n const isActive = isNodeActive(state, type, attributes);\r\n if (isActive) {\r\n return commands.lift(type);\r\n }\r\n return commands.wrapIn(type, attributes);\r\n};\n\nconst undoInputRule = () => ({ state, dispatch }) => {\r\n const plugins = state.plugins;\r\n for (let i = 0; i < plugins.length; i += 1) {\r\n const plugin = plugins[i];\r\n let undoable;\r\n // @ts-ignore\r\n // eslint-disable-next-line\r\n if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const toUndo = undoable.transform;\r\n for (let j = toUndo.steps.length - 1; j >= 0; j -= 1) {\r\n tr.step(toUndo.steps[j].invert(toUndo.docs[j]));\r\n }\r\n if (undoable.text) {\r\n const marks = tr.doc.resolve(undoable.from).marks();\r\n tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));\r\n }\r\n else {\r\n tr.delete(undoable.from, undoable.to);\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\n\nconst unsetAllMarks = () => ({ tr, dispatch }) => {\r\n const { selection } = tr;\r\n const { empty, ranges } = selection;\r\n if (empty) {\r\n return true;\r\n }\r\n if (dispatch) {\r\n ranges.forEach(range => {\r\n tr.removeMark(range.$from.pos, range.$to.pos);\r\n });\r\n }\r\n return true;\r\n};\n\nconst unsetMark = (typeOrName, options = {}) => ({ tr, state, dispatch }) => {\r\n var _a;\r\n const { extendEmptyMarkRange = false } = options;\r\n const { selection } = tr;\r\n const type = getMarkType(typeOrName, state.schema);\r\n const { $from, empty, ranges } = selection;\r\n if (!dispatch) {\r\n return true;\r\n }\r\n if (empty && extendEmptyMarkRange) {\r\n let { from, to } = selection;\r\n const attrs = (_a = $from.marks().find(mark => mark.type === type)) === null || _a === void 0 ? void 0 : _a.attrs;\r\n const range = getMarkRange($from, type, attrs);\r\n if (range) {\r\n from = range.from;\r\n to = range.to;\r\n }\r\n tr.removeMark(from, to, type);\r\n }\r\n else {\r\n ranges.forEach(range => {\r\n tr.removeMark(range.$from.pos, range.$to.pos, type);\r\n });\r\n }\r\n tr.removeStoredMark(type);\r\n return true;\r\n};\n\nconst updateAttributes = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\r\n let nodeType = null;\r\n let markType = null;\r\n const schemaType = getSchemaTypeNameByName(typeof typeOrName === 'string' ? typeOrName : typeOrName.name, state.schema);\r\n if (!schemaType) {\r\n return false;\r\n }\r\n if (schemaType === 'node') {\r\n nodeType = getNodeType(typeOrName, state.schema);\r\n }\r\n if (schemaType === 'mark') {\r\n markType = getMarkType(typeOrName, state.schema);\r\n }\r\n if (dispatch) {\r\n tr.selection.ranges.forEach(range => {\r\n const from = range.$from.pos;\r\n const to = range.$to.pos;\r\n state.doc.nodesBetween(from, to, (node, pos) => {\r\n if (nodeType && nodeType === node.type) {\r\n tr.setNodeMarkup(pos, undefined, {\r\n ...node.attrs,\r\n ...attributes,\r\n });\r\n }\r\n if (markType && node.marks.length) {\r\n node.marks.forEach(mark => {\r\n if (markType === mark.type) {\r\n const trimmedFrom = Math.max(pos, from);\r\n const trimmedTo = Math.min(pos + node.nodeSize, to);\r\n tr.addMark(trimmedFrom, trimmedTo, markType.create({\r\n ...mark.attrs,\r\n ...attributes,\r\n }));\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n return true;\r\n};\n\nconst wrapIn = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\r\n const type = getNodeType(typeOrName, state.schema);\r\n return wrapIn$1(type, attributes)(state, dispatch);\r\n};\n\nconst wrapInList = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\r\n const type = getNodeType(typeOrName, state.schema);\r\n return wrapInList$1(type, attributes)(state, dispatch);\r\n};\n\nvar commands = /*#__PURE__*/Object.freeze({\n __proto__: null,\n blur: blur,\n clearContent: clearContent,\n clearNodes: clearNodes,\n command: command,\n createParagraphNear: createParagraphNear,\n cut: cut,\n deleteCurrentNode: deleteCurrentNode,\n deleteNode: deleteNode,\n deleteRange: deleteRange,\n deleteSelection: deleteSelection,\n enter: enter,\n exitCode: exitCode,\n extendMarkRange: extendMarkRange,\n first: first,\n focus: focus,\n forEach: forEach,\n insertContent: insertContent,\n insertContentAt: insertContentAt,\n joinUp: joinUp,\n joinDown: joinDown,\n joinBackward: joinBackward,\n joinForward: joinForward,\n joinItemBackward: joinItemBackward,\n joinItemForward: joinItemForward,\n joinTextblockBackward: joinTextblockBackward,\n joinTextblockForward: joinTextblockForward,\n keyboardShortcut: keyboardShortcut,\n lift: lift,\n liftEmptyBlock: liftEmptyBlock,\n liftListItem: liftListItem,\n newlineInCode: newlineInCode,\n resetAttributes: resetAttributes,\n scrollIntoView: scrollIntoView,\n selectAll: selectAll,\n selectNodeBackward: selectNodeBackward,\n selectNodeForward: selectNodeForward,\n selectParentNode: selectParentNode,\n selectTextblockEnd: selectTextblockEnd,\n selectTextblockStart: selectTextblockStart,\n setContent: setContent,\n setMark: setMark,\n setMeta: setMeta,\n setNode: setNode,\n setNodeSelection: setNodeSelection,\n setTextSelection: setTextSelection,\n sinkListItem: sinkListItem,\n splitBlock: splitBlock,\n splitListItem: splitListItem,\n toggleList: toggleList,\n toggleMark: toggleMark,\n toggleNode: toggleNode,\n toggleWrap: toggleWrap,\n undoInputRule: undoInputRule,\n unsetAllMarks: unsetAllMarks,\n unsetMark: unsetMark,\n updateAttributes: updateAttributes,\n wrapIn: wrapIn,\n wrapInList: wrapInList\n});\n\nconst Commands = Extension.create({\r\n name: 'commands',\r\n addCommands() {\r\n return {\r\n ...commands,\r\n };\r\n },\r\n});\n\nconst Editable = Extension.create({\r\n name: 'editable',\r\n addProseMirrorPlugins() {\r\n return [\r\n new Plugin({\r\n key: new PluginKey('editable'),\r\n props: {\r\n editable: () => this.editor.options.editable,\r\n },\r\n }),\r\n ];\r\n },\r\n});\n\nconst FocusEvents = Extension.create({\r\n name: 'focusEvents',\r\n addProseMirrorPlugins() {\r\n const { editor } = this;\r\n return [\r\n new Plugin({\r\n key: new PluginKey('focusEvents'),\r\n props: {\r\n handleDOMEvents: {\r\n focus: (view, event) => {\r\n editor.isFocused = true;\r\n const transaction = editor.state.tr\r\n .setMeta('focus', { event })\r\n .setMeta('addToHistory', false);\r\n view.dispatch(transaction);\r\n return false;\r\n },\r\n blur: (view, event) => {\r\n editor.isFocused = false;\r\n const transaction = editor.state.tr\r\n .setMeta('blur', { event })\r\n .setMeta('addToHistory', false);\r\n view.dispatch(transaction);\r\n return false;\r\n },\r\n },\r\n },\r\n }),\r\n ];\r\n },\r\n});\n\nconst Keymap = Extension.create({\r\n name: 'keymap',\r\n addKeyboardShortcuts() {\r\n const handleBackspace = () => this.editor.commands.first(({ commands }) => [\r\n () => commands.undoInputRule(),\r\n // maybe convert first text block node to default node\r\n () => commands.command(({ tr }) => {\r\n const { selection, doc } = tr;\r\n const { empty, $anchor } = selection;\r\n const { pos, parent } = $anchor;\r\n const $parentPos = $anchor.parent.isTextblock ? tr.doc.resolve(pos - 1) : $anchor;\r\n const parentIsIsolating = $parentPos.parent.type.spec.isolating;\r\n const parentPos = $anchor.pos - $anchor.parentOffset;\r\n const isAtStart = (parentIsIsolating && $parentPos.parent.childCount === 1)\r\n ? parentPos === $anchor.pos\r\n : Selection.atStart(doc).from === pos;\r\n if (!empty || !isAtStart || !parent.type.isTextblock || parent.textContent.length) {\r\n return false;\r\n }\r\n return commands.clearNodes();\r\n }),\r\n () => commands.deleteSelection(),\r\n () => commands.joinBackward(),\r\n () => commands.selectNodeBackward(),\r\n ]);\r\n const handleDelete = () => this.editor.commands.first(({ commands }) => [\r\n () => commands.deleteSelection(),\r\n () => commands.deleteCurrentNode(),\r\n () => commands.joinForward(),\r\n () => commands.selectNodeForward(),\r\n ]);\r\n const handleEnter = () => this.editor.commands.first(({ commands }) => [\r\n () => commands.newlineInCode(),\r\n () => commands.createParagraphNear(),\r\n () => commands.liftEmptyBlock(),\r\n () => commands.splitBlock(),\r\n ]);\r\n const baseKeymap = {\r\n Enter: handleEnter,\r\n 'Mod-Enter': () => this.editor.commands.exitCode(),\r\n Backspace: handleBackspace,\r\n 'Mod-Backspace': handleBackspace,\r\n 'Shift-Backspace': handleBackspace,\r\n Delete: handleDelete,\r\n 'Mod-Delete': handleDelete,\r\n 'Mod-a': () => this.editor.commands.selectAll(),\r\n };\r\n const pcKeymap = {\r\n ...baseKeymap,\r\n };\r\n const macKeymap = {\r\n ...baseKeymap,\r\n 'Ctrl-h': handleBackspace,\r\n 'Alt-Backspace': handleBackspace,\r\n 'Ctrl-d': handleDelete,\r\n 'Ctrl-Alt-Backspace': handleDelete,\r\n 'Alt-Delete': handleDelete,\r\n 'Alt-d': handleDelete,\r\n 'Ctrl-a': () => this.editor.commands.selectTextblockStart(),\r\n 'Ctrl-e': () => this.editor.commands.selectTextblockEnd(),\r\n };\r\n if (isiOS() || isMacOS()) {\r\n return macKeymap;\r\n }\r\n return pcKeymap;\r\n },\r\n addProseMirrorPlugins() {\r\n return [\r\n // With this plugin we check if the whole document was selected and deleted.\r\n // In this case we will additionally call `clearNodes()` to convert e.g. a heading\r\n // to a paragraph if necessary.\r\n // This is an alternative to ProseMirror's `AllSelection`, which doesn’t work well\r\n // with many other commands.\r\n new Plugin({\r\n key: new PluginKey('clearDocument'),\r\n appendTransaction: (transactions, oldState, newState) => {\r\n const docChanges = transactions.some(transaction => transaction.docChanged)\r\n && !oldState.doc.eq(newState.doc);\r\n if (!docChanges) {\r\n return;\r\n }\r\n const { empty, from, to } = oldState.selection;\r\n const allFrom = Selection.atStart(oldState.doc).from;\r\n const allEnd = Selection.atEnd(oldState.doc).to;\r\n const allWasSelected = from === allFrom && to === allEnd;\r\n if (empty || !allWasSelected) {\r\n return;\r\n }\r\n const isEmpty = newState.doc.textBetween(0, newState.doc.content.size, ' ', ' ').length === 0;\r\n if (!isEmpty) {\r\n return;\r\n }\r\n const tr = newState.tr;\r\n const state = createChainableState({\r\n state: newState,\r\n transaction: tr,\r\n });\r\n const { commands } = new CommandManager({\r\n editor: this.editor,\r\n state,\r\n });\r\n commands.clearNodes();\r\n if (!tr.steps.length) {\r\n return;\r\n }\r\n return tr;\r\n },\r\n }),\r\n ];\r\n },\r\n});\n\nconst Tabindex = Extension.create({\r\n name: 'tabindex',\r\n addProseMirrorPlugins() {\r\n return [\r\n new Plugin({\r\n key: new PluginKey('tabindex'),\r\n props: {\r\n attributes: this.editor.isEditable ? { tabindex: '0' } : {},\r\n },\r\n }),\r\n ];\r\n },\r\n});\n\nvar extensions = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ClipboardTextSerializer: ClipboardTextSerializer,\n Commands: Commands,\n Editable: Editable,\n FocusEvents: FocusEvents,\n Keymap: Keymap,\n Tabindex: Tabindex\n});\n\nclass NodePos {\r\n constructor(pos, editor, isBlock = false, node = null) {\r\n this.currentNode = null;\r\n this.actualDepth = null;\r\n this.isBlock = isBlock;\r\n this.resolvedPos = pos;\r\n this.editor = editor;\r\n this.currentNode = node;\r\n }\r\n get name() {\r\n return this.node.type.name;\r\n }\r\n get node() {\r\n return this.currentNode || this.resolvedPos.node();\r\n }\r\n get element() {\r\n return this.editor.view.domAtPos(this.pos).node;\r\n }\r\n get depth() {\r\n var _a;\r\n return (_a = this.actualDepth) !== null && _a !== void 0 ? _a : this.resolvedPos.depth;\r\n }\r\n get pos() {\r\n return this.resolvedPos.pos;\r\n }\r\n get content() {\r\n return this.node.content;\r\n }\r\n set content(content) {\r\n let from = this.from;\r\n let to = this.to;\r\n if (this.isBlock) {\r\n if (this.content.size === 0) {\r\n console.error(`You can’t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);\r\n return;\r\n }\r\n from = this.from + 1;\r\n to = this.to - 1;\r\n }\r\n this.editor.commands.insertContentAt({ from, to }, content);\r\n }\r\n get attributes() {\r\n return this.node.attrs;\r\n }\r\n get textContent() {\r\n return this.node.textContent;\r\n }\r\n get size() {\r\n return this.node.nodeSize;\r\n }\r\n get from() {\r\n if (this.isBlock) {\r\n return this.pos;\r\n }\r\n return this.resolvedPos.start(this.resolvedPos.depth);\r\n }\r\n get range() {\r\n return {\r\n from: this.from,\r\n to: this.to,\r\n };\r\n }\r\n get to() {\r\n if (this.isBlock) {\r\n return this.pos + this.size;\r\n }\r\n return this.resolvedPos.end(this.resolvedPos.depth) + (this.node.isText ? 0 : 1);\r\n }\r\n get parent() {\r\n if (this.depth === 0) {\r\n return null;\r\n }\r\n const parentPos = this.resolvedPos.start(this.resolvedPos.depth - 1);\r\n const $pos = this.resolvedPos.doc.resolve(parentPos);\r\n return new NodePos($pos, this.editor);\r\n }\r\n get before() {\r\n let $pos = this.resolvedPos.doc.resolve(this.from - (this.isBlock ? 1 : 2));\r\n if ($pos.depth !== this.depth) {\r\n $pos = this.resolvedPos.doc.resolve(this.from - 3);\r\n }\r\n return new NodePos($pos, this.editor);\r\n }\r\n get after() {\r\n let $pos = this.resolvedPos.doc.resolve(this.to + (this.isBlock ? 2 : 1));\r\n if ($pos.depth !== this.depth) {\r\n $pos = this.resolvedPos.doc.resolve(this.to + 3);\r\n }\r\n return new NodePos($pos, this.editor);\r\n }\r\n get children() {\r\n const children = [];\r\n this.node.content.forEach((node, offset) => {\r\n const isBlock = node.isBlock && !node.isTextblock;\r\n const targetPos = this.pos + offset + (isBlock ? 0 : 1);\r\n const $pos = this.resolvedPos.doc.resolve(targetPos);\r\n if (!isBlock && $pos.depth <= this.depth) {\r\n return;\r\n }\r\n const childNodePos = new NodePos($pos, this.editor, isBlock, isBlock ? node : null);\r\n if (isBlock) {\r\n childNodePos.actualDepth = this.depth + 1;\r\n }\r\n children.push(new NodePos($pos, this.editor, isBlock, isBlock ? node : null));\r\n });\r\n return children;\r\n }\r\n get firstChild() {\r\n return this.children[0] || null;\r\n }\r\n get lastChild() {\r\n const children = this.children;\r\n return children[children.length - 1] || null;\r\n }\r\n closest(selector, attributes = {}) {\r\n let node = null;\r\n let currentNode = this.parent;\r\n while (currentNode && !node) {\r\n if (currentNode.node.type.name === selector) {\r\n if (Object.keys(attributes).length > 0) {\r\n const nodeAttributes = currentNode.node.attrs;\r\n const attrKeys = Object.keys(attributes);\r\n for (let index = 0; index < attrKeys.length; index += 1) {\r\n const key = attrKeys[index];\r\n if (nodeAttributes[key] !== attributes[key]) {\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n node = currentNode;\r\n }\r\n }\r\n currentNode = currentNode.parent;\r\n }\r\n return node;\r\n }\r\n querySelector(selector, attributes = {}) {\r\n return this.querySelectorAll(selector, attributes, true)[0] || null;\r\n }\r\n querySelectorAll(selector, attributes = {}, firstItemOnly = false) {\r\n let nodes = [];\r\n // iterate through children recursively finding all nodes which match the selector with the node name\r\n if (this.isBlock || !this.children || this.children.length === 0) {\r\n return nodes;\r\n }\r\n this.children.forEach(childPos => {\r\n if (childPos.node.type.name === selector) {\r\n if (Object.keys(attributes).length > 0) {\r\n const nodeAttributes = childPos.node.attrs;\r\n const attrKeys = Object.keys(attributes);\r\n for (let index = 0; index < attrKeys.length; index += 1) {\r\n const key = attrKeys[index];\r\n if (nodeAttributes[key] !== attributes[key]) {\r\n return;\r\n }\r\n }\r\n }\r\n nodes.push(childPos);\r\n if (firstItemOnly) {\r\n return;\r\n }\r\n }\r\n nodes = nodes.concat(childPos.querySelectorAll(selector));\r\n });\r\n return nodes;\r\n }\r\n setAttribute(attributes) {\r\n const oldSelection = this.editor.state.selection;\r\n this.editor.chain().setTextSelection(this.from).updateAttributes(this.node.type.name, attributes).setTextSelection(oldSelection.from)\r\n .run();\r\n }\r\n}\n\nconst style = `.ProseMirror {\n position: relative;\n}\n\n.ProseMirror {\n word-wrap: break-word;\n white-space: pre-wrap;\n white-space: break-spaces;\n -webkit-font-variant-ligatures: none;\n font-variant-ligatures: none;\n font-feature-settings: \"liga\" 0; /* the above doesn't seem to work in Edge */\n}\n\n.ProseMirror [contenteditable=\"false\"] {\n white-space: normal;\n}\n\n.ProseMirror [contenteditable=\"false\"] [contenteditable=\"true\"] {\n white-space: pre-wrap;\n}\n\n.ProseMirror pre {\n white-space: pre-wrap;\n}\n\nimg.ProseMirror-separator {\n display: inline !important;\n border: none !important;\n margin: 0 !important;\n width: 1px !important;\n height: 1px !important;\n}\n\n.ProseMirror-gapcursor {\n display: none;\n pointer-events: none;\n position: absolute;\n margin: 0;\n}\n\n.ProseMirror-gapcursor:after {\n content: \"\";\n display: block;\n position: absolute;\n top: -2px;\n width: 20px;\n border-top: 1px solid black;\n animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\n}\n\n@keyframes ProseMirror-cursor-blink {\n to {\n visibility: hidden;\n }\n}\n\n.ProseMirror-hideselection *::selection {\n background: transparent;\n}\n\n.ProseMirror-hideselection *::-moz-selection {\n background: transparent;\n}\n\n.ProseMirror-hideselection * {\n caret-color: transparent;\n}\n\n.ProseMirror-focused .ProseMirror-gapcursor {\n display: block;\n}\n\n.tippy-box[data-animation=fade][data-state=hidden] {\n opacity: 0\n}`;\n\nfunction createStyleTag(style, nonce, suffix) {\r\n const tiptapStyleTag = document.querySelector(`style[data-tiptap-style${suffix ? `-${suffix}` : ''}]`);\r\n if (tiptapStyleTag !== null) {\r\n return tiptapStyleTag;\r\n }\r\n const styleNode = document.createElement('style');\r\n if (nonce) {\r\n styleNode.setAttribute('nonce', nonce);\r\n }\r\n styleNode.setAttribute(`data-tiptap-style${suffix ? `-${suffix}` : ''}`, '');\r\n styleNode.innerHTML = style;\r\n document.getElementsByTagName('head')[0].appendChild(styleNode);\r\n return styleNode;\r\n}\n\nclass Editor extends EventEmitter {\r\n constructor(options = {}) {\r\n super();\r\n this.isFocused = false;\r\n this.extensionStorage = {};\r\n this.options = {\r\n element: document.createElement('div'),\r\n content: '',\r\n injectCSS: true,\r\n injectNonce: undefined,\r\n extensions: [],\r\n autofocus: false,\r\n editable: true,\r\n editorProps: {},\r\n parseOptions: {},\r\n enableInputRules: true,\r\n enablePasteRules: true,\r\n enableCoreExtensions: true,\r\n onBeforeCreate: () => null,\r\n onCreate: () => null,\r\n onUpdate: () => null,\r\n onSelectionUpdate: () => null,\r\n onTransaction: () => null,\r\n onFocus: () => null,\r\n onBlur: () => null,\r\n onDestroy: () => null,\r\n };\r\n this.isCapturingTransaction = false;\r\n this.capturedTransaction = null;\r\n this.setOptions(options);\r\n this.createExtensionManager();\r\n this.createCommandManager();\r\n this.createSchema();\r\n this.on('beforeCreate', this.options.onBeforeCreate);\r\n this.emit('beforeCreate', { editor: this });\r\n this.createView();\r\n this.injectCSS();\r\n this.on('create', this.options.onCreate);\r\n this.on('update', this.options.onUpdate);\r\n this.on('selectionUpdate', this.options.onSelectionUpdate);\r\n this.on('transaction', this.options.onTransaction);\r\n this.on('focus', this.options.onFocus);\r\n this.on('blur', this.options.onBlur);\r\n this.on('destroy', this.options.onDestroy);\r\n window.setTimeout(() => {\r\n if (this.isDestroyed) {\r\n return;\r\n }\r\n this.commands.focus(this.options.autofocus);\r\n this.emit('create', { editor: this });\r\n }, 0);\r\n }\r\n /**\r\n * Returns the editor storage.\r\n */\r\n get storage() {\r\n return this.extensionStorage;\r\n }\r\n /**\r\n * An object of all registered commands.\r\n */\r\n get commands() {\r\n return this.commandManager.commands;\r\n }\r\n /**\r\n * Create a command chain to call multiple commands at once.\r\n */\r\n chain() {\r\n return this.commandManager.chain();\r\n }\r\n /**\r\n * Check if a command or a command chain can be executed. Without executing it.\r\n */\r\n can() {\r\n return this.commandManager.can();\r\n }\r\n /**\r\n * Inject CSS styles.\r\n */\r\n injectCSS() {\r\n if (this.options.injectCSS && document) {\r\n this.css = createStyleTag(style, this.options.injectNonce);\r\n }\r\n }\r\n /**\r\n * Update editor options.\r\n *\r\n * @param options A list of options\r\n */\r\n setOptions(options = {}) {\r\n this.options = {\r\n ...this.options,\r\n ...options,\r\n };\r\n if (!this.view || !this.state || this.isDestroyed) {\r\n return;\r\n }\r\n if (this.options.editorProps) {\r\n this.view.setProps(this.options.editorProps);\r\n }\r\n this.view.updateState(this.state);\r\n }\r\n /**\r\n * Update editable state of the editor.\r\n */\r\n setEditable(editable, emitUpdate = true) {\r\n this.setOptions({ editable });\r\n if (emitUpdate) {\r\n this.emit('update', { editor: this, transaction: this.state.tr });\r\n }\r\n }\r\n /**\r\n * Returns whether the editor is editable.\r\n */\r\n get isEditable() {\r\n // since plugins are applied after creating the view\r\n // `editable` is always `true` for one tick.\r\n // that’s why we also have to check for `options.editable`\r\n return this.options.editable && this.view && this.view.editable;\r\n }\r\n /**\r\n * Returns the editor state.\r\n */\r\n get state() {\r\n return this.view.state;\r\n }\r\n /**\r\n * Register a ProseMirror plugin.\r\n *\r\n * @param plugin A ProseMirror plugin\r\n * @param handlePlugins Control how to merge the plugin into the existing plugins.\r\n */\r\n registerPlugin(plugin, handlePlugins) {\r\n const plugins = isFunction(handlePlugins)\r\n ? handlePlugins(plugin, [...this.state.plugins])\r\n : [...this.state.plugins, plugin];\r\n const state = this.state.reconfigure({ plugins });\r\n this.view.updateState(state);\r\n }\r\n /**\r\n * Unregister a ProseMirror plugin.\r\n *\r\n * @param nameOrPluginKey The plugins name\r\n */\r\n unregisterPlugin(nameOrPluginKey) {\r\n if (this.isDestroyed) {\r\n return;\r\n }\r\n // @ts-ignore\r\n const name = typeof nameOrPluginKey === 'string' ? `${nameOrPluginKey}$` : nameOrPluginKey.key;\r\n const state = this.state.reconfigure({\r\n // @ts-ignore\r\n plugins: this.state.plugins.filter(plugin => !plugin.key.startsWith(name)),\r\n });\r\n this.view.updateState(state);\r\n }\r\n /**\r\n * Creates an extension manager.\r\n */\r\n createExtensionManager() {\r\n const coreExtensions = this.options.enableCoreExtensions ? Object.values(extensions) : [];\r\n const allExtensions = [...coreExtensions, ...this.options.extensions].filter(extension => {\r\n return ['extension', 'node', 'mark'].includes(extension === null || extension === void 0 ? void 0 : extension.type);\r\n });\r\n this.extensionManager = new ExtensionManager(allExtensions, this);\r\n }\r\n /**\r\n * Creates an command manager.\r\n */\r\n createCommandManager() {\r\n this.commandManager = new CommandManager({\r\n editor: this,\r\n });\r\n }\r\n /**\r\n * Creates a ProseMirror schema.\r\n */\r\n createSchema() {\r\n this.schema = this.extensionManager.schema;\r\n }\r\n /**\r\n * Creates a ProseMirror view.\r\n */\r\n createView() {\r\n const doc = createDocument(this.options.content, this.schema, this.options.parseOptions);\r\n const selection = resolveFocusPosition(doc, this.options.autofocus);\r\n this.view = new EditorView(this.options.element, {\r\n ...this.options.editorProps,\r\n dispatchTransaction: this.dispatchTransaction.bind(this),\r\n state: EditorState.create({\r\n doc,\r\n selection: selection || undefined,\r\n }),\r\n });\r\n // `editor.view` is not yet available at this time.\r\n // Therefore we will add all plugins and node views directly afterwards.\r\n const newState = this.state.reconfigure({\r\n plugins: this.extensionManager.plugins,\r\n });\r\n this.view.updateState(newState);\r\n this.createNodeViews();\r\n this.prependClass();\r\n // Let’s store the editor instance in the DOM element.\r\n // So we’ll have access to it for tests.\r\n const dom = this.view.dom;\r\n dom.editor = this;\r\n }\r\n /**\r\n * Creates all node views.\r\n */\r\n createNodeViews() {\r\n this.view.setProps({\r\n nodeViews: this.extensionManager.nodeViews,\r\n });\r\n }\r\n /**\r\n * Prepend class name to element.\r\n */\r\n prependClass() {\r\n this.view.dom.className = `tiptap ${this.view.dom.className}`;\r\n }\r\n captureTransaction(fn) {\r\n this.isCapturingTransaction = true;\r\n fn();\r\n this.isCapturingTransaction = false;\r\n const tr = this.capturedTransaction;\r\n this.capturedTransaction = null;\r\n return tr;\r\n }\r\n /**\r\n * The callback over which to send transactions (state updates) produced by the view.\r\n *\r\n * @param transaction An editor state transaction\r\n */\r\n dispatchTransaction(transaction) {\r\n // if the editor / the view of the editor was destroyed\r\n // the transaction should not be dispatched as there is no view anymore.\r\n if (this.view.isDestroyed) {\r\n return;\r\n }\r\n if (this.isCapturingTransaction) {\r\n if (!this.capturedTransaction) {\r\n this.capturedTransaction = transaction;\r\n return;\r\n }\r\n transaction.steps.forEach(step => { var _a; return (_a = this.capturedTransaction) === null || _a === void 0 ? void 0 : _a.step(step); });\r\n return;\r\n }\r\n const state = this.state.apply(transaction);\r\n const selectionHasChanged = !this.state.selection.eq(state.selection);\r\n this.view.updateState(state);\r\n this.emit('transaction', {\r\n editor: this,\r\n transaction,\r\n });\r\n if (selectionHasChanged) {\r\n this.emit('selectionUpdate', {\r\n editor: this,\r\n transaction,\r\n });\r\n }\r\n const focus = transaction.getMeta('focus');\r\n const blur = transaction.getMeta('blur');\r\n if (focus) {\r\n this.emit('focus', {\r\n editor: this,\r\n event: focus.event,\r\n transaction,\r\n });\r\n }\r\n if (blur) {\r\n this.emit('blur', {\r\n editor: this,\r\n event: blur.event,\r\n transaction,\r\n });\r\n }\r\n if (!transaction.docChanged || transaction.getMeta('preventUpdate')) {\r\n return;\r\n }\r\n this.emit('update', {\r\n editor: this,\r\n transaction,\r\n });\r\n }\r\n /**\r\n * Get attributes of the currently selected node or mark.\r\n */\r\n getAttributes(nameOrType) {\r\n return getAttributes(this.state, nameOrType);\r\n }\r\n isActive(nameOrAttributes, attributesOrUndefined) {\r\n const name = typeof nameOrAttributes === 'string' ? nameOrAttributes : null;\r\n const attributes = typeof nameOrAttributes === 'string' ? attributesOrUndefined : nameOrAttributes;\r\n return isActive(this.state, name, attributes);\r\n }\r\n /**\r\n * Get the document as JSON.\r\n */\r\n getJSON() {\r\n return this.state.doc.toJSON();\r\n }\r\n /**\r\n * Get the document as HTML.\r\n */\r\n getHTML() {\r\n return getHTMLFromFragment(this.state.doc.content, this.schema);\r\n }\r\n /**\r\n * Get the document as text.\r\n */\r\n getText(options) {\r\n const { blockSeparator = '\\n\\n', textSerializers = {} } = options || {};\r\n return getText(this.state.doc, {\r\n blockSeparator,\r\n textSerializers: {\r\n ...getTextSerializersFromSchema(this.schema),\r\n ...textSerializers,\r\n },\r\n });\r\n }\r\n /**\r\n * Check if there is no content.\r\n */\r\n get isEmpty() {\r\n return isNodeEmpty(this.state.doc);\r\n }\r\n /**\r\n * Get the number of characters for the current document.\r\n *\r\n * @deprecated\r\n */\r\n getCharacterCount() {\r\n console.warn('[tiptap warn]: \"editor.getCharacterCount()\" is deprecated. Please use \"editor.storage.characterCount.characters()\" instead.');\r\n return this.state.doc.content.size - 2;\r\n }\r\n /**\r\n * Destroy the editor.\r\n */\r\n destroy() {\r\n this.emit('destroy');\r\n if (this.view) {\r\n this.view.destroy();\r\n }\r\n this.removeAllListeners();\r\n }\r\n /**\r\n * Check if the editor is already destroyed.\r\n */\r\n get isDestroyed() {\r\n var _a;\r\n // @ts-ignore\r\n return !((_a = this.view) === null || _a === void 0 ? void 0 : _a.docView);\r\n }\r\n $node(selector, attributes) {\r\n var _a;\r\n return ((_a = this.$doc) === null || _a === void 0 ? void 0 : _a.querySelector(selector, attributes)) || null;\r\n }\r\n $nodes(selector, attributes) {\r\n var _a;\r\n return ((_a = this.$doc) === null || _a === void 0 ? void 0 : _a.querySelectorAll(selector, attributes)) || null;\r\n }\r\n $pos(pos) {\r\n const $pos = this.state.doc.resolve(pos);\r\n return new NodePos($pos, this);\r\n }\r\n get $doc() {\r\n return this.$pos(0);\r\n }\r\n}\n\n/**\r\n * Build an input rule that adds a mark when the\r\n * matched text is typed into it.\r\n */\r\nfunction markInputRule(config) {\r\n return new InputRule({\r\n find: config.find,\r\n handler: ({ state, range, match }) => {\r\n const attributes = callOrReturn(config.getAttributes, undefined, match);\r\n if (attributes === false || attributes === null) {\r\n return null;\r\n }\r\n const { tr } = state;\r\n const captureGroup = match[match.length - 1];\r\n const fullMatch = match[0];\r\n if (captureGroup) {\r\n const startSpaces = fullMatch.search(/\\S/);\r\n const textStart = range.from + fullMatch.indexOf(captureGroup);\r\n const textEnd = textStart + captureGroup.length;\r\n const excludedMarks = getMarksBetween(range.from, range.to, state.doc)\r\n .filter(item => {\r\n // @ts-ignore\r\n const excluded = item.mark.type.excluded;\r\n return excluded.find(type => type === config.type && type !== item.mark.type);\r\n })\r\n .filter(item => item.to > textStart);\r\n if (excludedMarks.length) {\r\n return null;\r\n }\r\n if (textEnd < range.to) {\r\n tr.delete(textEnd, range.to);\r\n }\r\n if (textStart > range.from) {\r\n tr.delete(range.from + startSpaces, textStart);\r\n }\r\n const markEnd = range.from + startSpaces + captureGroup.length;\r\n tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\r\n tr.removeStoredMark(config.type);\r\n }\r\n },\r\n });\r\n}\n\n/**\r\n * Build an input rule that adds a node when the\r\n * matched text is typed into it.\r\n */\r\nfunction nodeInputRule(config) {\r\n return new InputRule({\r\n find: config.find,\r\n handler: ({ state, range, match }) => {\r\n const attributes = callOrReturn(config.getAttributes, undefined, match) || {};\r\n const { tr } = state;\r\n const start = range.from;\r\n let end = range.to;\r\n const newNode = config.type.create(attributes);\r\n if (match[1]) {\r\n const offset = match[0].lastIndexOf(match[1]);\r\n let matchStart = start + offset;\r\n if (matchStart > end) {\r\n matchStart = end;\r\n }\r\n else {\r\n end = matchStart + match[1].length;\r\n }\r\n // insert last typed character\r\n const lastChar = match[0][match[0].length - 1];\r\n tr.insertText(lastChar, start + match[0].length - 1);\r\n // insert node from input rule\r\n tr.replaceWith(matchStart, end, newNode);\r\n }\r\n else if (match[0]) {\r\n tr.insert(start - 1, config.type.create(attributes)).delete(tr.mapping.map(start), tr.mapping.map(end));\r\n }\r\n tr.scrollIntoView();\r\n },\r\n });\r\n}\n\n/**\r\n * Build an input rule that changes the type of a textblock when the\r\n * matched text is typed into it. When using a regular expresion you’ll\r\n * probably want the regexp to start with `^`, so that the pattern can\r\n * only occur at the start of a textblock.\r\n */\r\nfunction textblockTypeInputRule(config) {\r\n return new InputRule({\r\n find: config.find,\r\n handler: ({ state, range, match }) => {\r\n const $start = state.doc.resolve(range.from);\r\n const attributes = callOrReturn(config.getAttributes, undefined, match) || {};\r\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), config.type)) {\r\n return null;\r\n }\r\n state.tr\r\n .delete(range.from, range.to)\r\n .setBlockType(range.from, range.from, config.type, attributes);\r\n },\r\n });\r\n}\n\n/**\r\n * Build an input rule that replaces text when the\r\n * matched text is typed into it.\r\n */\r\nfunction textInputRule(config) {\r\n return new InputRule({\r\n find: config.find,\r\n handler: ({ state, range, match }) => {\r\n let insert = config.replace;\r\n let start = range.from;\r\n const end = range.to;\r\n if (match[1]) {\r\n const offset = match[0].lastIndexOf(match[1]);\r\n insert += match[0].slice(offset + match[1].length);\r\n start += offset;\r\n const cutOff = start - end;\r\n if (cutOff > 0) {\r\n insert = match[0].slice(offset - cutOff, offset) + insert;\r\n start = end;\r\n }\r\n }\r\n state.tr.insertText(insert, start, end);\r\n },\r\n });\r\n}\n\n/**\r\n * Build an input rule for automatically wrapping a textblock when a\r\n * given string is typed. When using a regular expresion you’ll\r\n * probably want the regexp to start with `^`, so that the pattern can\r\n * only occur at the start of a textblock.\r\n *\r\n * `type` is the type of node to wrap in.\r\n *\r\n * By default, if there’s a node with the same type above the newly\r\n * wrapped node, the rule will try to join those\r\n * two nodes. You can pass a join predicate, which takes a regular\r\n * expression match and the node before the wrapped node, and can\r\n * return a boolean to indicate whether a join should happen.\r\n */\r\nfunction wrappingInputRule(config) {\r\n return new InputRule({\r\n find: config.find,\r\n handler: ({ state, range, match, chain, }) => {\r\n const attributes = callOrReturn(config.getAttributes, undefined, match) || {};\r\n const tr = state.tr.delete(range.from, range.to);\r\n const $start = tr.doc.resolve(range.from);\r\n const blockRange = $start.blockRange();\r\n const wrapping = blockRange && findWrapping(blockRange, config.type, attributes);\r\n if (!wrapping) {\r\n return null;\r\n }\r\n tr.wrap(blockRange, wrapping);\r\n if (config.keepMarks && config.editor) {\r\n const { selection, storedMarks } = state;\r\n const { splittableMarks } = config.editor.extensionManager;\r\n const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks());\r\n if (marks) {\r\n const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name));\r\n tr.ensureMarks(filteredMarks);\r\n }\r\n }\r\n if (config.keepAttributes) {\r\n /** If the nodeType is `bulletList` or `orderedList` set the `nodeType` as `listItem` */\r\n const nodeType = config.type.name === 'bulletList' || config.type.name === 'orderedList' ? 'listItem' : 'taskList';\r\n chain().updateAttributes(nodeType, attributes).run();\r\n }\r\n const before = tr.doc.resolve(range.from - 1).nodeBefore;\r\n if (before\r\n && before.type === config.type\r\n && canJoin(tr.doc, range.from - 1)\r\n && (!config.joinPredicate || config.joinPredicate(match, before))) {\r\n tr.join(range.from - 1);\r\n }\r\n },\r\n });\r\n}\n\nclass Mark {\r\n constructor(config = {}) {\r\n this.type = 'mark';\r\n this.name = 'mark';\r\n this.parent = null;\r\n this.child = null;\r\n this.config = {\r\n name: this.name,\r\n defaultOptions: {},\r\n };\r\n this.config = {\r\n ...this.config,\r\n ...config,\r\n };\r\n this.name = this.config.name;\r\n if (config.defaultOptions && Object.keys(config.defaultOptions).length > 0) {\r\n console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${this.name}\".`);\r\n }\r\n // TODO: remove `addOptions` fallback\r\n this.options = this.config.defaultOptions;\r\n if (this.config.addOptions) {\r\n this.options = callOrReturn(getExtensionField(this, 'addOptions', {\r\n name: this.name,\r\n }));\r\n }\r\n this.storage = callOrReturn(getExtensionField(this, 'addStorage', {\r\n name: this.name,\r\n options: this.options,\r\n })) || {};\r\n }\r\n static create(config = {}) {\r\n return new Mark(config);\r\n }\r\n configure(options = {}) {\r\n // return a new instance so we can use the same extension\r\n // with different calls of `configure`\r\n const extension = this.extend();\r\n extension.options = mergeDeep(this.options, options);\r\n extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', {\r\n name: extension.name,\r\n options: extension.options,\r\n }));\r\n return extension;\r\n }\r\n extend(extendedConfig = {}) {\r\n const extension = new Mark({ ...this.config, ...extendedConfig });\r\n extension.parent = this;\r\n this.child = extension;\r\n extension.name = extendedConfig.name ? extendedConfig.name : extension.parent.name;\r\n if (extendedConfig.defaultOptions) {\r\n console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${extension.name}\".`);\r\n }\r\n extension.options = callOrReturn(getExtensionField(extension, 'addOptions', {\r\n name: extension.name,\r\n }));\r\n extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', {\r\n name: extension.name,\r\n options: extension.options,\r\n }));\r\n return extension;\r\n }\r\n static handleExit({ editor, mark }) {\r\n const { tr } = editor.state;\r\n const currentPos = editor.state.selection.$from;\r\n const isAtEnd = currentPos.pos === currentPos.end();\r\n if (isAtEnd) {\r\n const currentMarks = currentPos.marks();\r\n const isInMark = !!currentMarks.find(m => (m === null || m === void 0 ? void 0 : m.type.name) === mark.name);\r\n if (!isInMark) {\r\n return false;\r\n }\r\n const removeMark = currentMarks.find(m => (m === null || m === void 0 ? void 0 : m.type.name) === mark.name);\r\n if (removeMark) {\r\n tr.removeStoredMark(removeMark);\r\n }\r\n tr.insertText(' ', currentPos.pos);\r\n editor.view.dispatch(tr);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\n\nclass Node {\r\n constructor(config = {}) {\r\n this.type = 'node';\r\n this.name = 'node';\r\n this.parent = null;\r\n this.child = null;\r\n this.config = {\r\n name: this.name,\r\n defaultOptions: {},\r\n };\r\n this.config = {\r\n ...this.config,\r\n ...config,\r\n };\r\n this.name = this.config.name;\r\n if (config.defaultOptions && Object.keys(config.defaultOptions).length > 0) {\r\n console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${this.name}\".`);\r\n }\r\n // TODO: remove `addOptions` fallback\r\n this.options = this.config.defaultOptions;\r\n if (this.config.addOptions) {\r\n this.options = callOrReturn(getExtensionField(this, 'addOptions', {\r\n name: this.name,\r\n }));\r\n }\r\n this.storage = callOrReturn(getExtensionField(this, 'addStorage', {\r\n name: this.name,\r\n options: this.options,\r\n })) || {};\r\n }\r\n static create(config = {}) {\r\n return new Node(config);\r\n }\r\n configure(options = {}) {\r\n // return a new instance so we can use the same extension\r\n // with different calls of `configure`\r\n const extension = this.extend();\r\n extension.options = mergeDeep(this.options, options);\r\n extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', {\r\n name: extension.name,\r\n options: extension.options,\r\n }));\r\n return extension;\r\n }\r\n extend(extendedConfig = {}) {\r\n const extension = new Node({ ...this.config, ...extendedConfig });\r\n extension.parent = this;\r\n this.child = extension;\r\n extension.name = extendedConfig.name ? extendedConfig.name : extension.parent.name;\r\n if (extendedConfig.defaultOptions) {\r\n console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${extension.name}\".`);\r\n }\r\n extension.options = callOrReturn(getExtensionField(extension, 'addOptions', {\r\n name: extension.name,\r\n }));\r\n extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', {\r\n name: extension.name,\r\n options: extension.options,\r\n }));\r\n return extension;\r\n }\r\n}\n\nfunction isAndroid() {\r\n return navigator.platform === 'Android' || /android/i.test(navigator.userAgent);\r\n}\n\nclass NodeView {\r\n constructor(component, props, options) {\r\n this.isDragging = false;\r\n this.component = component;\r\n this.editor = props.editor;\r\n this.options = {\r\n stopEvent: null,\r\n ignoreMutation: null,\r\n ...options,\r\n };\r\n this.extension = props.extension;\r\n this.node = props.node;\r\n this.decorations = props.decorations;\r\n this.getPos = props.getPos;\r\n this.mount();\r\n }\r\n mount() {\r\n // eslint-disable-next-line\r\n return;\r\n }\r\n get dom() {\r\n return this.editor.view.dom;\r\n }\r\n get contentDOM() {\r\n return null;\r\n }\r\n onDragStart(event) {\r\n var _a, _b, _c, _d, _e, _f, _g;\r\n const { view } = this.editor;\r\n const target = event.target;\r\n // get the drag handle element\r\n // `closest` is not available for text nodes so we may have to use its parent\r\n const dragHandle = target.nodeType === 3\r\n ? (_a = target.parentElement) === null || _a === void 0 ? void 0 : _a.closest('[data-drag-handle]')\r\n : target.closest('[data-drag-handle]');\r\n if (!this.dom || ((_b = this.contentDOM) === null || _b === void 0 ? void 0 : _b.contains(target)) || !dragHandle) {\r\n return;\r\n }\r\n let x = 0;\r\n let y = 0;\r\n // calculate offset for drag element if we use a different drag handle element\r\n if (this.dom !== dragHandle) {\r\n const domBox = this.dom.getBoundingClientRect();\r\n const handleBox = dragHandle.getBoundingClientRect();\r\n // In React, we have to go through nativeEvent to reach offsetX/offsetY.\r\n const offsetX = (_c = event.offsetX) !== null && _c !== void 0 ? _c : (_d = event.nativeEvent) === null || _d === void 0 ? void 0 : _d.offsetX;\r\n const offsetY = (_e = event.offsetY) !== null && _e !== void 0 ? _e : (_f = event.nativeEvent) === null || _f === void 0 ? void 0 : _f.offsetY;\r\n x = handleBox.x - domBox.x + offsetX;\r\n y = handleBox.y - domBox.y + offsetY;\r\n }\r\n (_g = event.dataTransfer) === null || _g === void 0 ? void 0 : _g.setDragImage(this.dom, x, y);\r\n // we need to tell ProseMirror that we want to move the whole node\r\n // so we create a NodeSelection\r\n const selection = NodeSelection.create(view.state.doc, this.getPos());\r\n const transaction = view.state.tr.setSelection(selection);\r\n view.dispatch(transaction);\r\n }\r\n stopEvent(event) {\r\n var _a;\r\n if (!this.dom) {\r\n return false;\r\n }\r\n if (typeof this.options.stopEvent === 'function') {\r\n return this.options.stopEvent({ event });\r\n }\r\n const target = event.target;\r\n const isInElement = this.dom.contains(target) && !((_a = this.contentDOM) === null || _a === void 0 ? void 0 : _a.contains(target));\r\n // any event from child nodes should be handled by ProseMirror\r\n if (!isInElement) {\r\n return false;\r\n }\r\n const isDragEvent = event.type.startsWith('drag');\r\n const isDropEvent = event.type === 'drop';\r\n const isInput = ['INPUT', 'BUTTON', 'SELECT', 'TEXTAREA'].includes(target.tagName) || target.isContentEditable;\r\n // any input event within node views should be ignored by ProseMirror\r\n if (isInput && !isDropEvent && !isDragEvent) {\r\n return true;\r\n }\r\n const { isEditable } = this.editor;\r\n const { isDragging } = this;\r\n const isDraggable = !!this.node.type.spec.draggable;\r\n const isSelectable = NodeSelection.isSelectable(this.node);\r\n const isCopyEvent = event.type === 'copy';\r\n const isPasteEvent = event.type === 'paste';\r\n const isCutEvent = event.type === 'cut';\r\n const isClickEvent = event.type === 'mousedown';\r\n // ProseMirror tries to drag selectable nodes\r\n // even if `draggable` is set to `false`\r\n // this fix prevents that\r\n if (!isDraggable && isSelectable && isDragEvent) {\r\n event.preventDefault();\r\n }\r\n if (isDraggable && isDragEvent && !isDragging) {\r\n event.preventDefault();\r\n return false;\r\n }\r\n // we have to store that dragging started\r\n if (isDraggable && isEditable && !isDragging && isClickEvent) {\r\n const dragHandle = target.closest('[data-drag-handle]');\r\n const isValidDragHandle = dragHandle && (this.dom === dragHandle || this.dom.contains(dragHandle));\r\n if (isValidDragHandle) {\r\n this.isDragging = true;\r\n document.addEventListener('dragend', () => {\r\n this.isDragging = false;\r\n }, { once: true });\r\n document.addEventListener('drop', () => {\r\n this.isDragging = false;\r\n }, { once: true });\r\n document.addEventListener('mouseup', () => {\r\n this.isDragging = false;\r\n }, { once: true });\r\n }\r\n }\r\n // these events are handled by prosemirror\r\n if (isDragging\r\n || isDropEvent\r\n || isCopyEvent\r\n || isPasteEvent\r\n || isCutEvent\r\n || (isClickEvent && isSelectable)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n ignoreMutation(mutation) {\r\n if (!this.dom || !this.contentDOM) {\r\n return true;\r\n }\r\n if (typeof this.options.ignoreMutation === 'function') {\r\n return this.options.ignoreMutation({ mutation });\r\n }\r\n // a leaf/atom node is like a black box for ProseMirror\r\n // and should be fully handled by the node view\r\n if (this.node.isLeaf || this.node.isAtom) {\r\n return true;\r\n }\r\n // ProseMirror should handle any selections\r\n if (mutation.type === 'selection') {\r\n return false;\r\n }\r\n // try to prevent a bug on iOS and Android that will break node views on enter\r\n // this is because ProseMirror can’t preventDispatch on enter\r\n // this will lead to a re-render of the node view on enter\r\n // see: https://github.com/ueberdosis/tiptap/issues/1214\r\n // see: https://github.com/ueberdosis/tiptap/issues/2534\r\n if (this.dom.contains(mutation.target)\r\n && mutation.type === 'childList'\r\n && (isiOS() || isAndroid())\r\n && this.editor.isFocused) {\r\n const changedNodes = [\r\n ...Array.from(mutation.addedNodes),\r\n ...Array.from(mutation.removedNodes),\r\n ];\r\n // we’ll check if every changed node is contentEditable\r\n // to make sure it’s probably mutated by ProseMirror\r\n if (changedNodes.every(node => node.isContentEditable)) {\r\n return false;\r\n }\r\n }\r\n // we will allow mutation contentDOM with attributes\r\n // so we can for example adding classes within our node view\r\n if (this.contentDOM === mutation.target && mutation.type === 'attributes') {\r\n return true;\r\n }\r\n // ProseMirror should handle any changes within contentDOM\r\n if (this.contentDOM.contains(mutation.target)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n updateAttributes(attributes) {\r\n this.editor.commands.command(({ tr }) => {\r\n const pos = this.getPos();\r\n tr.setNodeMarkup(pos, undefined, {\r\n ...this.node.attrs,\r\n ...attributes,\r\n });\r\n return true;\r\n });\r\n }\r\n deleteNode() {\r\n const from = this.getPos();\r\n const to = from + this.node.nodeSize;\r\n this.editor.commands.deleteRange({ from, to });\r\n }\r\n}\n\n/**\r\n * Build an paste rule that adds a mark when the\r\n * matched text is pasted into it.\r\n */\r\nfunction markPasteRule(config) {\r\n return new PasteRule({\r\n find: config.find,\r\n handler: ({ state, range, match, pasteEvent, }) => {\r\n const attributes = callOrReturn(config.getAttributes, undefined, match, pasteEvent);\r\n if (attributes === false || attributes === null) {\r\n return null;\r\n }\r\n const { tr } = state;\r\n const captureGroup = match[match.length - 1];\r\n const fullMatch = match[0];\r\n let markEnd = range.to;\r\n if (captureGroup) {\r\n const startSpaces = fullMatch.search(/\\S/);\r\n const textStart = range.from + fullMatch.indexOf(captureGroup);\r\n const textEnd = textStart + captureGroup.length;\r\n const excludedMarks = getMarksBetween(range.from, range.to, state.doc)\r\n .filter(item => {\r\n // @ts-ignore\r\n const excluded = item.mark.type.excluded;\r\n return excluded.find(type => type === config.type && type !== item.mark.type);\r\n })\r\n .filter(item => item.to > textStart);\r\n if (excludedMarks.length) {\r\n return null;\r\n }\r\n if (textEnd < range.to) {\r\n tr.delete(textEnd, range.to);\r\n }\r\n if (textStart > range.from) {\r\n tr.delete(range.from + startSpaces, textStart);\r\n }\r\n markEnd = range.from + startSpaces + captureGroup.length;\r\n tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\r\n tr.removeStoredMark(config.type);\r\n }\r\n },\r\n });\r\n}\n\n// source: https://stackoverflow.com/a/6969486\r\nfunction escapeForRegEx(string) {\r\n return string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\r\n}\n\nfunction isString(value) {\r\n return typeof value === 'string';\r\n}\n\n/**\r\n * Build an paste rule that adds a node when the\r\n * matched text is pasted into it.\r\n */\r\nfunction nodePasteRule(config) {\r\n return new PasteRule({\r\n find: config.find,\r\n handler({ match, chain, range, pasteEvent, }) {\r\n const attributes = callOrReturn(config.getAttributes, undefined, match, pasteEvent);\r\n if (attributes === false || attributes === null) {\r\n return null;\r\n }\r\n if (match.input) {\r\n chain().deleteRange(range).insertContentAt(range.from, {\r\n type: config.type.name,\r\n attrs: attributes,\r\n });\r\n }\r\n },\r\n });\r\n}\n\n/**\r\n * Build an paste rule that replaces text when the\r\n * matched text is pasted into it.\r\n */\r\nfunction textPasteRule(config) {\r\n return new PasteRule({\r\n find: config.find,\r\n handler: ({ state, range, match }) => {\r\n let insert = config.replace;\r\n let start = range.from;\r\n const end = range.to;\r\n if (match[1]) {\r\n const offset = match[0].lastIndexOf(match[1]);\r\n insert += match[0].slice(offset + match[1].length);\r\n start += offset;\r\n const cutOff = start - end;\r\n if (cutOff > 0) {\r\n insert = match[0].slice(offset - cutOff, offset) + insert;\r\n start = end;\r\n }\r\n }\r\n state.tr.insertText(insert, start, end);\r\n },\r\n });\r\n}\n\nclass Tracker {\r\n constructor(transaction) {\r\n this.transaction = transaction;\r\n this.currentStep = this.transaction.steps.length;\r\n }\r\n map(position) {\r\n let deleted = false;\r\n const mappedPosition = this.transaction.steps\r\n .slice(this.currentStep)\r\n .reduce((newPosition, step) => {\r\n const mapResult = step.getMap().mapResult(newPosition);\r\n if (mapResult.deleted) {\r\n deleted = true;\r\n }\r\n return mapResult.pos;\r\n }, position);\r\n return {\r\n position: mappedPosition,\r\n deleted,\r\n };\r\n }\r\n}\n\nexport { CommandManager, Editor, Extension, InputRule, Mark, Node, NodePos, NodeView, PasteRule, Tracker, callOrReturn, combineTransactionSteps, createChainableState, createDocument, createNodeFromContent, createStyleTag, defaultBlockAt, deleteProps, elementFromString, escapeForRegEx, extensions, findChildren, findChildrenInRange, findDuplicates, findParentNode, findParentNodeClosestToPos, fromString, generateHTML, generateJSON, generateText, getAttributes, getAttributesFromExtensions, getChangedRanges, getDebugJSON, getExtensionField, getHTMLFromFragment, getMarkAttributes, getMarkRange, getMarkType, getMarksBetween, getNodeAtPosition, getNodeAttributes, getNodeType, getRenderedAttributes, getSchema, getSchemaByResolvedExtensions, getSchemaTypeByName, getSchemaTypeNameByName, getSplittedAttributes, getText, getTextBetween, getTextContentFromNodes, getTextSerializersFromSchema, injectExtensionAttributesToParseRule, inputRulesPlugin, isActive, isAtEndOfNode, isAtStartOfNode, isEmptyObject, isExtensionRulesEnabled, isFunction, isList, isMacOS, isMarkActive, isNodeActive, isNodeEmpty, isNodeSelection, isNumber, isPlainObject, isRegExp, isString, isTextSelection, isiOS, markInputRule, markPasteRule, mergeAttributes, mergeDeep, minMax, nodeInputRule, nodePasteRule, objectIncludes, pasteRulesPlugin, posToDOMRect, removeDuplicates, resolveFocusPosition, selectionToInsertionEnd, splitExtensions, textInputRule, textPasteRule, textblockTypeInputRule, wrappingInputRule };\n//# sourceMappingURL=index.js.map\n"],"names":["createChainableState","config","state","transaction","selection","doc","storedMarks","apply","bind","applyTransaction","plugins","schema","reconfigure","toJSON","tr","CommandManager","constructor","props","editor","rawCommands","extensionManager","commands","customState","hasCustomState","view","buildProps","Object","fromEntries","entries","map","name","command","args","callback","getMeta","dispatch","chain","createChain","can","createCan","startTr","shouldDispatch","callbacks","hasStartTransaction","push","run","every","formattedCommands","undefined","EventEmitter","on","event","fn","emit","forEach","off","filter","removeAllListeners","getExtensionField","extension","field","context","parent","value","splitExtensions","extensions","baseExtensions","type","nodeExtensions","markExtensions","getAttributesFromExtensions","extensionAttributes","nodeAndMarkExtensions","defaultAttribute","default","rendered","renderHTML","parseHTML","keepOnSplit","isRequired","options","storage","addGlobalAttributes","globalAttributes","globalAttribute","types","attributes","attribute","addAttributes","mergedAttr","getNodeType","nameOrType","nodes","Error","mergeAttributes","objects","item","reduce","items","mergedAttributes","key","exists","valueClasses","split","existingClasses","insertClasses","valueClass","includes","join","getRenderedAttributes","nodeOrMark","attrs","isFunction","callOrReturn","isEmptyObject","keys","length","fromString","match","Number","injectExtensionAttributesToParseRule","parseRule","style","getAttrs","node","oldAttributes","newAttributes","getAttribute","cleanUpSchemaItem","data","getSchemaByResolvedExtensions","_a","allAttributes","topNode","find","extraNodeFields","fields","e","extendNodeSchema","content","marks","group","inline","atom","selectable","draggable","code","defining","isolating","extensionAttribute","parseDOM","toDOM","HTMLAttributes","renderText","toText","extraMarkFields","extendMarkSchema","inclusive","excludes","spanning","mark","_tiptap_pm_model__WEBPACK_IMPORTED_MODULE_0__","V_","getSchemaTypeByName","isExtensionRulesEnabled","enabled","isArray","some","enabledExtension","getTextContentFromNodes","$from","maxMatch","textBefore","sliceEndPos","parentOffset","nodesBetween","Math","max","pos","index","_b","chunk","spec","call","textContent","slice","isRegExp","prototype","toString","inputRuleMatcherHandler","text","exec","inputRuleMatch","result","input","replaceWith","console","warn","run$1","from","to","rules","plugin","composing","resolve","nodeBefore","nodeAfter","matched","rule","range","handler","steps","setMeta","transform","inputRulesPlugin","_tiptap_pm_state__WEBPACK_IMPORTED_MODULE_1__","Sy","init","prev","stored","selectionSet","docChanged","handleTextInput","handleDOMEvents","compositionend","setTimeout","$cursor","handleKeyDown","isInputRules","isNumber","PasteRule","pasteRuleMatcherHandler","matchAll","matches","pasteRuleMatch","pasteEvent","dropEvent","handlers","isTextblock","resolvedFrom","resolvedTo","min","size","textToMatch","textBetween","start","end","mapping","success","pasteRulesPlugin","dragSourceElement","isPastedFromProseMirror","isDroppedFromProseMirror","ClipboardEvent","DragEvent","handleDragstart","dom","parentElement","contains","target","window","addEventListener","destroy","removeEventListener","drop","paste","_view","html","clipboardData","getData","appendTransaction","transactions","oldState","isPaste","isDrop","findDiffStart","findDiffEnd","b","chainableState","findDuplicates","filtered","el","indexOf","Set","ExtensionManager","splittableMarks","extensionStorage","onBeforeCreate","onCreate","onUpdate","onSelectionUpdate","onTransaction","onFocus","onBlur","onDestroy","resolvedExtensions","sort","flatten","duplicatedNames","addExtensions","flat","a","priorityA","priorityB","addCommands","reverse","inputRules","pasteRules","allPlugins","addKeyboardShortcuts","defaultBindings","exitable","ArrowRight","Mark","handleExit","bindings","shortcut","method","keyMapPlugin","_tiptap_pm_keymap__WEBPACK_IMPORTED_MODULE_2__","h","addInputRules","enableInputRules","addPasteRules","enablePasteRules","addProseMirrorPlugins","proseMirrorPlugins","nodeViews","addNodeView","getPos","decorations","getType","isPlainObject","getPrototypeOf","mergeDeep","source","output","assign","Extension","child","defaultOptions","addOptions","create","configure","extend","extendedConfig","getTextBetween","startNode","blockSeparator","textSerializers","separated","textSerializer","isBlock","isText","getTextSerializersFromSchema","ClipboardTextSerializer","H$","clipboardTextSerializer","ranges","$to","objectIncludes","object1","object2","strict","test","findMarkInSet","isMarkInSet","getMarkRange","$pos","childAfter","offset","childBefore","startIndex","startPos","endIndex","endPos","nodeSize","isInSet","childCount","getMarkType","isTextSelection","Bs","minMax","resolveFocusPosition","position","selectionAtStart","Y1","atStart","selectionAtEnd","atEnd","minPos","maxPos","isiOS","navigator","platform","userAgent","document","removeWhitespaces","children","childNodes","i","nodeType","nodeValue","removeChild","elementFromString","wrappedValue","DOMParser","parseFromString","body","createNodeFromContent","parseOptions","Array","HY","fromArray","nodeFromJSON","error","parser","aw","fromSchema","parseSlice","parse","selectionToInsertionEnd","startLen","bias","last","step","_tiptap_pm_transform__WEBPACK_IMPORTED_MODULE_3__","Pu","FC","maps","_from","_to","_newFrom","newTo","setSelection","near","isFragment","nodeOrFragment","startsWith","isMacOS","normalizeKeyName","alt","ctrl","shift","meta","parts","mod","isNodeActive","typeOrName","empty","nodeRanges","relativeFrom","relativeTo","selectionRange","matchedNodeRanges","nodeRange","sum","getSchemaTypeNameByName","deleteProps","obj","propOrProps","newObj","prop","createDocument","getMarkAttributes","$head","markItem","combineTransactionSteps","oldDoc","wx","defaultBlockAt","edgeCount","edge","hasRequiredAttrs","findChildrenInRange","predicate","nodesWithPos","findParentNodeClosestToPos","depth","before","findParentNode","getHTMLFromFragment","fragment","documentFragment","PW","serializeFragment","temporaryDocument","implementation","createHTMLDocument","container","createElement","appendChild","innerHTML","getText","getNodeAttributes","nodeItem","getAttributes","schemaType","removeDuplicates","array","by","JSON","stringify","seen","hasOwnProperty","simplifyChangedRanges","changes","uniqueChanges","change","rest","_","otherChange","oldRange","newRange","getChangedRanges","stepMap","newStart","newEnd","oldStart","invert","oldEnd","getMarksBetween","getSplittedAttributes","typeName","isMarkActive","markRanges","matchedRange","markRange","excludedRange","isActive","isList","isNodeEmpty","defaultContent","createAndFill","canSetMark","newMarkType","cursor","currentMarks","someNodeSupportsMark","inlineContent","allowsMarkType","_pos","isInline","parentAllowsMarkType","currentMarksAllowMarkType","otherMark","ensureMarks","filteredMarks","joinListBackwards","listType","list","nodeAt","canJoinBackwards","Mn","joinListForwards","after","canJoinForwards","freeze","__proto__","blur","requestAnimationFrame","isDestroyed","getSelection","removeAllRanges","clearContent","emitUpdate","setContent","clearNodes","$mappedFrom","$mappedTo","blockRange","targetLiftDepth","k9","defaultType","contentMatchAt","setNodeMarkup","lift","createParagraphNear","_tiptap_pm_commands__WEBPACK_IMPORTED_MODULE_4__","mD","cut","originRange","targetPos","contentSlice","deleteRange","newPos","insert","deleteCurrentNode","currentNode","$anchor","delete","scrollIntoView","deleteNode","deleteSelection","NE","enter","keyboardShortcut","exitCode","uo","extendMarkRange","newSelection","first","focus","delayedFocus","hasFocus","isSameSelection","eq","setStoredMarks","insertContent","insertContentAt","updateSelection","preserveWhitespace","isOnlyTextContent","isOnlyBlockContent","check","isEmptyTextBlock","insertText","v","joinUp","MI","joinDown","Ig","joinBackward","al","joinForward","Y_","joinItemBackward","point","GJ","joinItemForward","joinTextblockBackward","rr","joinTextblockForward","cR","KeyboardEvent","altKey","ctrlKey","metaKey","shiftKey","bubbles","cancelable","capturedTransaction","captureTransaction","someProp","f","newStep","maybeStep","xb","liftEmptyBlock","X0","liftListItem","_tiptap_pm_schema_list__WEBPACK_IMPORTED_MODULE_5__","IB","newlineInCode","QK","resetAttributes","markType","addMark","selectAll","setTextSelection","selectNodeBackward","_M","selectNodeForward","o","selectParentNode","N0","selectTextblockEnd","nw","selectTextblockStart","U9","setMark","addStoredMark","trimmedFrom","trimmedTo","someHasMark","setNode","canSetBlock","uJ","updatedState","setNodeSelection","qv","resolvedEnd","sinkListItem","bw","splitBlock","keepMarks","Ax","deflt","indexAfter","$first","canReplaceWith","splitListItem","sameParent","grandParent","wrap","depthBefore","d","copy","depthAfter","newNextTypeAttributes","nextType","contentMatch","append","replace","p2","sel","n","newTypeAttributes","toggleList","listTypeOrName","itemTypeOrName","itemType","parentList","validContent","canWrapInList","wrapInList","toggleMark","extendEmptyMarkRange","unsetMark","toggleNode","toggleTypeOrName","toggleType","toggleWrap","wrapIn","undoInputRule","undoable","getState","toUndo","j","docs","unsetAllMarks","removeMark","removeStoredMark","updateAttributes","ym","KI","Commands","Editable","editable","FocusEvents","isFocused","Keymap","handleBackspace","$parentPos","parentIsIsolating","parentPos","isAtStart","handleDelete","baseKeymap","Enter","Backspace","Delete","pcKeymap","macKeymap","newState","docChanges","allFrom","allEnd","isEmpty","Tabindex","isEditable","tabindex","NodePos","actualDepth","resolvedPos","element","domAtPos","childNodePos","firstChild","lastChild","closest","selector","nodeAttributes","attrKeys","querySelector","querySelectorAll","firstItemOnly","childPos","concat","setAttribute","oldSelection","createStyleTag","nonce","suffix","tiptapStyleTag","styleNode","getElementsByTagName","Editor","injectCSS","injectNonce","autofocus","editorProps","enableCoreExtensions","isCapturingTransaction","setOptions","createExtensionManager","createCommandManager","createSchema","createView","commandManager","css","setProps","updateState","setEditable","registerPlugin","handlePlugins","unregisterPlugin","nameOrPluginKey","coreExtensions","values","allExtensions","_tiptap_pm_view__WEBPACK_IMPORTED_MODULE_6__","tk","dispatchTransaction","yy","createNodeViews","prependClass","className","selectionHasChanged","nameOrAttributes","attributesOrUndefined","getJSON","getHTML","getCharacterCount","docView","$node","$doc","$nodes","currentPos","isAtEnd","isInMark","m","Node","markPasteRule","captureGroup","fullMatch","markEnd","startSpaces","search","textStart","textEnd","excludedMarks","excluded","escapeForRegEx","string"],"sourceRoot":""}