pillardash-ui-react 0.1.131 → 0.1.138
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -46
- package/dist/cjs/_virtual/_commonjsHelpers.js +2 -0
- package/dist/cjs/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/cjs/_virtual/index.js +2 -0
- package/dist/cjs/_virtual/index.js.map +1 -0
- package/dist/cjs/_virtual/index2.js +2 -0
- package/dist/cjs/_virtual/index2.js.map +1 -0
- package/dist/cjs/components/Alert/Alert.js +2 -0
- package/dist/cjs/components/Alert/Alert.js.map +1 -0
- package/dist/cjs/components/Alert/AlertContext.js +2 -0
- package/dist/cjs/components/Alert/AlertContext.js.map +1 -0
- package/dist/cjs/components/Alert/ConfirmDialog.js +2 -0
- package/dist/cjs/components/Alert/ConfirmDialog.js.map +1 -0
- package/dist/cjs/components/Alert/ConfirmationAlert.js +2 -0
- package/dist/cjs/components/Alert/ConfirmationAlert.js.map +1 -0
- package/dist/cjs/components/Badge/Badge.js +2 -0
- package/dist/cjs/components/Badge/Badge.js.map +1 -0
- package/dist/cjs/components/Breadcrumb/Breadcrumb.js +2 -0
- package/dist/cjs/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/cjs/components/Button/Button.js +2 -0
- package/dist/cjs/components/Button/Button.js.map +1 -0
- package/dist/cjs/components/Button/ExportButton.js +2 -0
- package/dist/cjs/components/Button/ExportButton.js.map +1 -0
- package/dist/cjs/components/Cards/Card.js +2 -0
- package/dist/cjs/components/Cards/Card.js.map +1 -0
- package/dist/cjs/components/Cards/EmptyStateCard.js +2 -0
- package/dist/cjs/components/Cards/EmptyStateCard.js.map +1 -0
- package/dist/cjs/components/Document/FileView.js +2 -0
- package/dist/cjs/components/Document/FileView.js.map +1 -0
- package/dist/cjs/components/Form/CheckBox/CheckBox.js +2 -0
- package/dist/cjs/components/Form/CheckBox/CheckBox.js.map +1 -0
- package/dist/cjs/components/Form/FileUpload/FileUpload.js +2 -0
- package/dist/cjs/components/Form/FileUpload/FileUpload.js.map +1 -0
- package/dist/cjs/components/Form/Input/DateTimePicker.js +2 -0
- package/dist/cjs/components/Form/Input/DateTimePicker.js.map +1 -0
- package/dist/cjs/components/Form/Input/Input.js +2 -0
- package/dist/cjs/components/Form/Input/Input.js.map +1 -0
- package/dist/cjs/components/Form/Input/InputWithPrefix.js +2 -0
- package/dist/cjs/components/Form/Input/InputWithPrefix.js.map +1 -0
- package/dist/cjs/components/Form/Input/TagInput.js +2 -0
- package/dist/cjs/components/Form/Input/TagInput.js.map +1 -0
- package/dist/cjs/components/Form/Search/Search.js +2 -0
- package/dist/cjs/components/Form/Search/Search.js.map +1 -0
- package/dist/cjs/components/Form/Select/Select.js +2 -0
- package/dist/cjs/components/Form/Select/Select.js.map +1 -0
- package/dist/cjs/components/Form/Select/SelectButton.js +2 -0
- package/dist/cjs/components/Form/Select/SelectButton.js.map +1 -0
- package/dist/cjs/components/Form/TextEditor/TextEditor.js +2 -0
- package/dist/cjs/components/Form/TextEditor/TextEditor.js.map +1 -0
- package/dist/cjs/components/Loading/Loading.js +2 -0
- package/dist/cjs/components/Loading/Loading.js.map +1 -0
- package/dist/cjs/components/Modal/Modal.js +2 -0
- package/dist/cjs/components/Modal/Modal.js.map +1 -0
- package/dist/cjs/components/SkeletonLoader/SkeletonLoader.js +2 -0
- package/dist/cjs/components/SkeletonLoader/SkeletonLoader.js.map +1 -0
- package/dist/cjs/components/SkeletonLoader/index.js +2 -0
- package/dist/cjs/components/SkeletonLoader/index.js.map +1 -0
- package/dist/cjs/components/Table/Pagination.js +2 -0
- package/dist/cjs/components/Table/Pagination.js.map +1 -0
- package/dist/cjs/components/Table/Table.js +2 -0
- package/dist/cjs/components/Table/Table.js.map +1 -0
- package/dist/cjs/components/Table/TableDropdown.js +2 -0
- package/dist/cjs/components/Table/TableDropdown.js.map +1 -0
- package/dist/cjs/components/Table/TableSkeleton.js +2 -0
- package/dist/cjs/components/Table/TableSkeleton.js.map +1 -0
- package/dist/cjs/components/Tooltip/Tooltip.js +2 -0
- package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/core/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/core/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.js +2 -0
- package/dist/cjs/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-bold/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-bold/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-bullet-list/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-bullet-list/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-code/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-code/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-code-block/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-code-block/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-document/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-document/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-heading/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-heading/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-italic/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-italic/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-list/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-list/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-list-item/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-list-item/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-ordered-list/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-ordered-list/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-paragraph/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-paragraph/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-strike/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-strike/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-text/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-text/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/classnames/index.js +7 -0
- package/dist/cjs/node_modules/classnames/index.js.map +1 -0
- package/dist/cjs/node_modules/orderedmap/dist/index.js +2 -0
- package/dist/cjs/node_modules/orderedmap/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/prosemirror-commands/dist/index.js +2 -0
- package/dist/cjs/node_modules/prosemirror-commands/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/prosemirror-model/dist/index.js +2 -0
- package/dist/cjs/node_modules/prosemirror-model/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/prosemirror-schema-list/dist/index.js +2 -0
- package/dist/cjs/node_modules/prosemirror-schema-list/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/prosemirror-state/dist/index.js +2 -0
- package/dist/cjs/node_modules/prosemirror-state/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/prosemirror-transform/dist/index.js +2 -0
- package/dist/cjs/node_modules/prosemirror-transform/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/tslib/tslib.es6.js +2 -0
- package/dist/cjs/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/esm/_virtual/_commonjsHelpers.mjs +2 -0
- package/dist/esm/_virtual/_commonjsHelpers.mjs.map +1 -0
- package/dist/esm/_virtual/index.mjs +2 -0
- package/dist/esm/_virtual/index.mjs.map +1 -0
- package/dist/esm/_virtual/index2.mjs +2 -0
- package/dist/esm/_virtual/index2.mjs.map +1 -0
- package/dist/esm/components/Alert/Alert.mjs +2 -0
- package/dist/esm/components/Alert/Alert.mjs.map +1 -0
- package/dist/esm/components/Alert/AlertContext.mjs +2 -0
- package/dist/esm/components/Alert/AlertContext.mjs.map +1 -0
- package/dist/esm/components/Alert/ConfirmDialog.mjs +2 -0
- package/dist/esm/components/Alert/ConfirmDialog.mjs.map +1 -0
- package/dist/esm/components/Alert/ConfirmationAlert.mjs +2 -0
- package/dist/esm/components/Alert/ConfirmationAlert.mjs.map +1 -0
- package/dist/esm/components/Badge/Badge.mjs +2 -0
- package/dist/esm/components/Badge/Badge.mjs.map +1 -0
- package/dist/esm/components/Breadcrumb/Breadcrumb.mjs +2 -0
- package/dist/esm/components/Breadcrumb/Breadcrumb.mjs.map +1 -0
- package/dist/esm/components/Button/Button.mjs +2 -0
- package/dist/esm/components/Button/Button.mjs.map +1 -0
- package/dist/esm/components/Button/ExportButton.mjs +2 -0
- package/dist/esm/components/Button/ExportButton.mjs.map +1 -0
- package/dist/esm/components/Cards/Card.mjs +2 -0
- package/dist/esm/components/Cards/Card.mjs.map +1 -0
- package/dist/esm/components/Cards/EmptyStateCard.mjs +2 -0
- package/dist/esm/components/Cards/EmptyStateCard.mjs.map +1 -0
- package/dist/esm/components/Document/FileView.mjs +2 -0
- package/dist/esm/components/Document/FileView.mjs.map +1 -0
- package/dist/esm/components/Form/CheckBox/CheckBox.mjs +2 -0
- package/dist/esm/components/Form/CheckBox/CheckBox.mjs.map +1 -0
- package/dist/esm/components/Form/FileUpload/FileUpload.mjs +2 -0
- package/dist/esm/components/Form/FileUpload/FileUpload.mjs.map +1 -0
- package/dist/esm/components/Form/Input/DateTimePicker.mjs +2 -0
- package/dist/esm/components/Form/Input/DateTimePicker.mjs.map +1 -0
- package/dist/esm/components/Form/Input/Input.mjs +2 -0
- package/dist/esm/components/Form/Input/Input.mjs.map +1 -0
- package/dist/esm/components/Form/Input/InputWithPrefix.mjs +2 -0
- package/dist/esm/components/Form/Input/InputWithPrefix.mjs.map +1 -0
- package/dist/esm/components/Form/Input/TagInput.mjs +2 -0
- package/dist/esm/components/Form/Input/TagInput.mjs.map +1 -0
- package/dist/esm/components/Form/Search/Search.mjs +2 -0
- package/dist/esm/components/Form/Search/Search.mjs.map +1 -0
- package/dist/esm/components/Form/Select/Select.mjs +2 -0
- package/dist/esm/components/Form/Select/Select.mjs.map +1 -0
- package/dist/esm/components/Form/Select/SelectButton.mjs +2 -0
- package/dist/esm/components/Form/Select/SelectButton.mjs.map +1 -0
- package/dist/esm/components/Form/TextEditor/TextEditor.mjs +2 -0
- package/dist/esm/components/Form/TextEditor/TextEditor.mjs.map +1 -0
- package/dist/esm/components/Loading/Loading.mjs +2 -0
- package/dist/esm/components/Loading/Loading.mjs.map +1 -0
- package/dist/esm/components/Modal/Modal.mjs +2 -0
- package/dist/esm/components/Modal/Modal.mjs.map +1 -0
- package/dist/esm/components/SkeletonLoader/SkeletonLoader.mjs +2 -0
- package/dist/esm/components/SkeletonLoader/SkeletonLoader.mjs.map +1 -0
- package/dist/esm/components/SkeletonLoader/index.mjs +2 -0
- package/dist/esm/components/SkeletonLoader/index.mjs.map +1 -0
- package/dist/esm/components/Table/Pagination.mjs +2 -0
- package/dist/esm/components/Table/Pagination.mjs.map +1 -0
- package/dist/esm/components/Table/Table.mjs +2 -0
- package/dist/esm/components/Table/Table.mjs.map +1 -0
- package/dist/esm/components/Table/TableDropdown.mjs +2 -0
- package/dist/esm/components/Table/TableDropdown.mjs.map +1 -0
- package/dist/esm/components/Table/TableSkeleton.mjs +2 -0
- package/dist/esm/components/Table/TableSkeleton.mjs.map +1 -0
- package/dist/esm/components/Tooltip/Tooltip.mjs +2 -0
- package/dist/esm/components/Tooltip/Tooltip.mjs.map +1 -0
- package/dist/esm/index.mjs +2 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/core/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/core/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-bold/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-bold/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-bullet-list/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-bullet-list/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-code/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-code/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-code-block/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-code-block/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-document/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-document/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-heading/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-heading/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-italic/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-italic/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-list/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-list/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-list-item/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-list-item/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-ordered-list/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-ordered-list/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-paragraph/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-paragraph/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-strike/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-strike/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-text/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-text/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/classnames/index.mjs +7 -0
- package/dist/esm/node_modules/classnames/index.mjs.map +1 -0
- package/dist/esm/node_modules/orderedmap/dist/index.mjs +2 -0
- package/dist/esm/node_modules/orderedmap/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/prosemirror-commands/dist/index.mjs +2 -0
- package/dist/esm/node_modules/prosemirror-commands/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/prosemirror-model/dist/index.mjs +2 -0
- package/dist/esm/node_modules/prosemirror-model/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/prosemirror-schema-list/dist/index.mjs +2 -0
- package/dist/esm/node_modules/prosemirror-schema-list/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/prosemirror-state/dist/index.mjs +2 -0
- package/dist/esm/node_modules/prosemirror-state/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/prosemirror-transform/dist/index.mjs +2 -0
- package/dist/esm/node_modules/prosemirror-transform/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/tslib/tslib.es6.mjs +2 -0
- package/dist/esm/node_modules/tslib/tslib.es6.mjs.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/styles.css +1 -0
- package/package.json +63 -17
- package/dist/index.js +0 -51
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -51
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../../node_modules/@tiptap/core/dist/index.js"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/helpers/createChainableState.ts\nfunction createChainableState(config) {\n const { state, transaction } = config;\n let { selection } = transaction;\n let { doc } = transaction;\n let { storedMarks } = transaction;\n return {\n ...state,\n apply: state.apply.bind(state),\n applyTransaction: state.applyTransaction.bind(state),\n plugins: state.plugins,\n schema: state.schema,\n reconfigure: state.reconfigure.bind(state),\n toJSON: state.toJSON.bind(state),\n get storedMarks() {\n return storedMarks;\n },\n get selection() {\n return selection;\n },\n get doc() {\n return doc;\n },\n get tr() {\n selection = transaction.selection;\n doc = transaction.doc;\n storedMarks = transaction.storedMarks;\n return transaction;\n }\n };\n}\n\n// src/CommandManager.ts\nvar CommandManager = class {\n constructor(props) {\n this.editor = props.editor;\n this.rawCommands = this.editor.extensionManager.commands;\n this.customState = props.state;\n }\n get hasCustomState() {\n return !!this.customState;\n }\n get state() {\n return this.customState || this.editor.state;\n }\n get commands() {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const { tr } = state;\n const props = this.buildProps(tr);\n return Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n const method = (...args) => {\n const callback = command2(...args)(props);\n if (!tr.getMeta(\"preventDispatch\") && !this.hasCustomState) {\n view.dispatch(tr);\n }\n return callback;\n };\n return [name, method];\n })\n );\n }\n get chain() {\n return () => this.createChain();\n }\n get can() {\n return () => this.createCan();\n }\n createChain(startTr, shouldDispatch = true) {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const callbacks = [];\n const hasStartTransaction = !!startTr;\n const tr = startTr || state.tr;\n const run3 = () => {\n if (!hasStartTransaction && shouldDispatch && !tr.getMeta(\"preventDispatch\") && !this.hasCustomState) {\n view.dispatch(tr);\n }\n return callbacks.every((callback) => callback === true);\n };\n const chain = {\n ...Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n const chainedCommand = (...args) => {\n const props = this.buildProps(tr, shouldDispatch);\n const callback = command2(...args)(props);\n callbacks.push(callback);\n return chain;\n };\n return [name, chainedCommand];\n })\n ),\n run: run3\n };\n return chain;\n }\n createCan(startTr) {\n const { rawCommands, state } = this;\n const dispatch = false;\n const tr = startTr || state.tr;\n const props = this.buildProps(tr, dispatch);\n const formattedCommands = Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n return [name, (...args) => command2(...args)({ ...props, dispatch: void 0 })];\n })\n );\n return {\n ...formattedCommands,\n chain: () => this.createChain(tr, dispatch)\n };\n }\n buildProps(tr, shouldDispatch = true) {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const props = {\n tr,\n editor,\n view,\n state: createChainableState({\n state,\n transaction: tr\n }),\n dispatch: shouldDispatch ? () => void 0 : void 0,\n chain: () => this.createChain(tr, shouldDispatch),\n can: () => this.createCan(tr),\n get commands() {\n return Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n return [name, (...args) => command2(...args)(props)];\n })\n );\n }\n };\n return props;\n }\n};\n\n// src/Editor.ts\nimport { EditorState } from \"@tiptap/pm/state\";\nimport { EditorView } from \"@tiptap/pm/view\";\n\n// src/EventEmitter.ts\nvar EventEmitter = class {\n constructor() {\n this.callbacks = {};\n }\n on(event, fn) {\n if (!this.callbacks[event]) {\n this.callbacks[event] = [];\n }\n this.callbacks[event].push(fn);\n return this;\n }\n emit(event, ...args) {\n const callbacks = this.callbacks[event];\n if (callbacks) {\n callbacks.forEach((callback) => callback.apply(this, args));\n }\n return this;\n }\n off(event, fn) {\n const callbacks = this.callbacks[event];\n if (callbacks) {\n if (fn) {\n this.callbacks[event] = callbacks.filter((callback) => callback !== fn);\n } else {\n delete this.callbacks[event];\n }\n }\n return this;\n }\n once(event, fn) {\n const onceFn = (...args) => {\n this.off(event, onceFn);\n fn.apply(this, args);\n };\n return this.on(event, onceFn);\n }\n removeAllListeners() {\n this.callbacks = {};\n }\n};\n\n// src/ExtensionManager.ts\nimport { keymap } from \"@tiptap/pm/keymap\";\n\n// src/helpers/combineTransactionSteps.ts\nimport { Transform } from \"@tiptap/pm/transform\";\nfunction combineTransactionSteps(oldDoc, transactions) {\n const transform = new Transform(oldDoc);\n transactions.forEach((transaction) => {\n transaction.steps.forEach((step) => {\n transform.step(step);\n });\n });\n return transform;\n}\n\n// src/helpers/createNodeFromContent.ts\nimport { DOMParser, Fragment, Node as ProseMirrorNode, Schema } from \"@tiptap/pm/model\";\n\n// src/utilities/elementFromString.ts\nvar removeWhitespaces = (node) => {\n const children = node.childNodes;\n for (let i = children.length - 1; i >= 0; i -= 1) {\n const child = children[i];\n if (child.nodeType === 3 && child.nodeValue && /^(\\n\\s\\s|\\n)$/.test(child.nodeValue)) {\n node.removeChild(child);\n } else if (child.nodeType === 1) {\n removeWhitespaces(child);\n }\n }\n return node;\n};\nfunction elementFromString(value) {\n if (typeof window === \"undefined\") {\n throw new Error(\"[tiptap error]: there is no window object available, so this function cannot be used\");\n }\n const wrappedValue = `<body>${value}</body>`;\n const html = new window.DOMParser().parseFromString(wrappedValue, \"text/html\").body;\n return removeWhitespaces(html);\n}\n\n// src/helpers/createNodeFromContent.ts\nfunction createNodeFromContent(content, schema, options) {\n if (content instanceof ProseMirrorNode || content instanceof Fragment) {\n return content;\n }\n options = {\n slice: true,\n parseOptions: {},\n ...options\n };\n const isJSONContent = typeof content === \"object\" && content !== null;\n const isTextContent = typeof content === \"string\";\n if (isJSONContent) {\n try {\n const isArrayContent = Array.isArray(content) && content.length > 0;\n if (isArrayContent) {\n return Fragment.fromArray(content.map((item) => schema.nodeFromJSON(item)));\n }\n const node = schema.nodeFromJSON(content);\n if (options.errorOnInvalidContent) {\n node.check();\n }\n return node;\n } catch (error) {\n if (options.errorOnInvalidContent) {\n throw new Error(\"[tiptap error]: Invalid JSON content\", { cause: error });\n }\n console.warn(\"[tiptap warn]: Invalid content.\", \"Passed value:\", content, \"Error:\", error);\n return createNodeFromContent(\"\", schema, options);\n }\n }\n if (isTextContent) {\n if (options.errorOnInvalidContent) {\n let hasInvalidContent = false;\n let invalidContent = \"\";\n const contentCheckSchema = new Schema({\n topNode: schema.spec.topNode,\n marks: schema.spec.marks,\n // Prosemirror's schemas are executed such that: the last to execute, matches last\n // This means that we can add a catch-all node at the end of the schema to catch any content that we don't know how to handle\n nodes: schema.spec.nodes.append({\n __tiptap__private__unknown__catch__all__node: {\n content: \"inline*\",\n group: \"block\",\n parseDOM: [\n {\n tag: \"*\",\n getAttrs: (e) => {\n hasInvalidContent = true;\n invalidContent = typeof e === \"string\" ? e : e.outerHTML;\n return null;\n }\n }\n ]\n }\n })\n });\n if (options.slice) {\n DOMParser.fromSchema(contentCheckSchema).parseSlice(elementFromString(content), options.parseOptions);\n } else {\n DOMParser.fromSchema(contentCheckSchema).parse(elementFromString(content), options.parseOptions);\n }\n if (options.errorOnInvalidContent && hasInvalidContent) {\n throw new Error(\"[tiptap error]: Invalid HTML content\", {\n cause: new Error(`Invalid element found: ${invalidContent}`)\n });\n }\n }\n const parser = DOMParser.fromSchema(schema);\n if (options.slice) {\n return parser.parseSlice(elementFromString(content), options.parseOptions).content;\n }\n return parser.parse(elementFromString(content), options.parseOptions);\n }\n return createNodeFromContent(\"\", schema, options);\n}\n\n// src/helpers/createDocument.ts\nfunction createDocument(content, schema, parseOptions = {}, options = {}) {\n return createNodeFromContent(content, schema, {\n slice: false,\n parseOptions,\n errorOnInvalidContent: options.errorOnInvalidContent\n });\n}\n\n// src/helpers/defaultBlockAt.ts\nfunction defaultBlockAt(match) {\n for (let i = 0; i < match.edgeCount; i += 1) {\n const { type } = match.edge(i);\n if (type.isTextblock && !type.hasRequiredAttrs()) {\n return type;\n }\n }\n return null;\n}\n\n// src/helpers/findChildren.ts\nfunction findChildren(node, predicate) {\n const nodesWithPos = [];\n node.descendants((child, pos) => {\n if (predicate(child)) {\n nodesWithPos.push({\n node: child,\n pos\n });\n }\n });\n return nodesWithPos;\n}\n\n// src/helpers/findChildrenInRange.ts\nfunction findChildrenInRange(node, range, predicate) {\n const nodesWithPos = [];\n node.nodesBetween(range.from, range.to, (child, pos) => {\n if (predicate(child)) {\n nodesWithPos.push({\n node: child,\n pos\n });\n }\n });\n return nodesWithPos;\n}\n\n// src/helpers/findParentNodeClosestToPos.ts\nfunction findParentNodeClosestToPos($pos, predicate) {\n for (let i = $pos.depth; i > 0; i -= 1) {\n const node = $pos.node(i);\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node\n };\n }\n }\n}\n\n// src/helpers/findParentNode.ts\nfunction findParentNode(predicate) {\n return (selection) => findParentNodeClosestToPos(selection.$from, predicate);\n}\n\n// src/helpers/getExtensionField.ts\nfunction getExtensionField(extension, field, context) {\n if (extension.config[field] === void 0 && extension.parent) {\n return getExtensionField(extension.parent, field, context);\n }\n if (typeof extension.config[field] === \"function\") {\n const value = extension.config[field].bind({\n ...context,\n parent: extension.parent ? getExtensionField(extension.parent, field, context) : null\n });\n return value;\n }\n return extension.config[field];\n}\n\n// src/helpers/flattenExtensions.ts\nfunction flattenExtensions(extensions) {\n return extensions.map((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n const addExtensions = getExtensionField(extension, \"addExtensions\", context);\n if (addExtensions) {\n return [extension, ...flattenExtensions(addExtensions())];\n }\n return extension;\n }).flat(10);\n}\n\n// src/helpers/generateHTML.ts\nimport { Node } from \"@tiptap/pm/model\";\n\n// src/helpers/getHTMLFromFragment.ts\nimport { DOMSerializer } from \"@tiptap/pm/model\";\nfunction getHTMLFromFragment(fragment, schema) {\n const documentFragment = DOMSerializer.fromSchema(schema).serializeFragment(fragment);\n const temporaryDocument = document.implementation.createHTMLDocument();\n const container = temporaryDocument.createElement(\"div\");\n container.appendChild(documentFragment);\n return container.innerHTML;\n}\n\n// src/helpers/getSchemaByResolvedExtensions.ts\nimport { Schema as Schema2 } from \"@tiptap/pm/model\";\n\n// src/utilities/isFunction.ts\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/utilities/callOrReturn.ts\nfunction callOrReturn(value, context = void 0, ...props) {\n if (isFunction(value)) {\n if (context) {\n return value.bind(context)(...props);\n }\n return value(...props);\n }\n return value;\n}\n\n// src/utilities/isEmptyObject.ts\nfunction isEmptyObject(value = {}) {\n return Object.keys(value).length === 0 && value.constructor === Object;\n}\n\n// src/helpers/splitExtensions.ts\nfunction splitExtensions(extensions) {\n const baseExtensions = extensions.filter((extension) => extension.type === \"extension\");\n const nodeExtensions = extensions.filter((extension) => extension.type === \"node\");\n const markExtensions = extensions.filter((extension) => extension.type === \"mark\");\n return {\n baseExtensions,\n nodeExtensions,\n markExtensions\n };\n}\n\n// src/helpers/getAttributesFromExtensions.ts\nfunction getAttributesFromExtensions(extensions) {\n const extensionAttributes = [];\n const { nodeExtensions, markExtensions } = splitExtensions(extensions);\n const nodeAndMarkExtensions = [...nodeExtensions, ...markExtensions];\n const defaultAttribute = {\n default: null,\n validate: void 0,\n rendered: true,\n renderHTML: null,\n parseHTML: null,\n keepOnSplit: true,\n isRequired: false\n };\n extensions.forEach((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n extensions: nodeAndMarkExtensions\n };\n const addGlobalAttributes = getExtensionField(\n extension,\n \"addGlobalAttributes\",\n context\n );\n if (!addGlobalAttributes) {\n return;\n }\n const globalAttributes = addGlobalAttributes();\n globalAttributes.forEach((globalAttribute) => {\n globalAttribute.types.forEach((type) => {\n Object.entries(globalAttribute.attributes).forEach(([name, attribute]) => {\n extensionAttributes.push({\n type,\n name,\n attribute: {\n ...defaultAttribute,\n ...attribute\n }\n });\n });\n });\n });\n });\n nodeAndMarkExtensions.forEach((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n const addAttributes = getExtensionField(\n extension,\n \"addAttributes\",\n context\n );\n if (!addAttributes) {\n return;\n }\n const attributes = addAttributes();\n Object.entries(attributes).forEach(([name, attribute]) => {\n const mergedAttr = {\n ...defaultAttribute,\n ...attribute\n };\n if (typeof (mergedAttr == null ? void 0 : mergedAttr.default) === \"function\") {\n mergedAttr.default = mergedAttr.default();\n }\n if ((mergedAttr == null ? void 0 : mergedAttr.isRequired) && (mergedAttr == null ? void 0 : mergedAttr.default) === void 0) {\n delete mergedAttr.default;\n }\n extensionAttributes.push({\n type: extension.name,\n name,\n attribute: mergedAttr\n });\n });\n });\n return extensionAttributes;\n}\n\n// src/utilities/mergeAttributes.ts\nfunction mergeAttributes(...objects) {\n return objects.filter((item) => !!item).reduce((items, item) => {\n const mergedAttributes = { ...items };\n Object.entries(item).forEach(([key, value]) => {\n const exists = mergedAttributes[key];\n if (!exists) {\n mergedAttributes[key] = value;\n return;\n }\n if (key === \"class\") {\n const valueClasses = value ? String(value).split(\" \") : [];\n const existingClasses = mergedAttributes[key] ? mergedAttributes[key].split(\" \") : [];\n const insertClasses = valueClasses.filter((valueClass) => !existingClasses.includes(valueClass));\n mergedAttributes[key] = [...existingClasses, ...insertClasses].join(\" \");\n } else if (key === \"style\") {\n const newStyles = value ? value.split(\";\").map((style2) => style2.trim()).filter(Boolean) : [];\n const existingStyles = mergedAttributes[key] ? mergedAttributes[key].split(\";\").map((style2) => style2.trim()).filter(Boolean) : [];\n const styleMap = /* @__PURE__ */ new Map();\n existingStyles.forEach((style2) => {\n const [property, val] = style2.split(\":\").map((part) => part.trim());\n styleMap.set(property, val);\n });\n newStyles.forEach((style2) => {\n const [property, val] = style2.split(\":\").map((part) => part.trim());\n styleMap.set(property, val);\n });\n mergedAttributes[key] = Array.from(styleMap.entries()).map(([property, val]) => `${property}: ${val}`).join(\"; \");\n } else {\n mergedAttributes[key] = value;\n }\n });\n return mergedAttributes;\n }, {});\n}\n\n// src/helpers/getRenderedAttributes.ts\nfunction getRenderedAttributes(nodeOrMark, extensionAttributes) {\n return extensionAttributes.filter((attribute) => attribute.type === nodeOrMark.type.name).filter((item) => item.attribute.rendered).map((item) => {\n if (!item.attribute.renderHTML) {\n return {\n [item.name]: nodeOrMark.attrs[item.name]\n };\n }\n return item.attribute.renderHTML(nodeOrMark.attrs) || {};\n }).reduce((attributes, attribute) => mergeAttributes(attributes, attribute), {});\n}\n\n// src/utilities/fromString.ts\nfunction fromString(value) {\n if (typeof value !== \"string\") {\n return value;\n }\n if (value.match(/^[+-]?(?:\\d*\\.)?\\d+$/)) {\n return Number(value);\n }\n if (value === \"true\") {\n return true;\n }\n if (value === \"false\") {\n return false;\n }\n return value;\n}\n\n// src/helpers/injectExtensionAttributesToParseRule.ts\nfunction injectExtensionAttributesToParseRule(parseRule, extensionAttributes) {\n if (\"style\" in parseRule) {\n return parseRule;\n }\n return {\n ...parseRule,\n getAttrs: (node) => {\n const oldAttributes = parseRule.getAttrs ? parseRule.getAttrs(node) : parseRule.attrs;\n if (oldAttributes === false) {\n return false;\n }\n const newAttributes = extensionAttributes.reduce((items, item) => {\n const value = item.attribute.parseHTML ? item.attribute.parseHTML(node) : fromString(node.getAttribute(item.name));\n if (value === null || value === void 0) {\n return items;\n }\n return {\n ...items,\n [item.name]: value\n };\n }, {});\n return { ...oldAttributes, ...newAttributes };\n }\n };\n}\n\n// src/helpers/getSchemaByResolvedExtensions.ts\nfunction cleanUpSchemaItem(data) {\n return Object.fromEntries(\n // @ts-ignore\n Object.entries(data).filter(([key, value]) => {\n if (key === \"attrs\" && isEmptyObject(value)) {\n return false;\n }\n return value !== null && value !== void 0;\n })\n );\n}\nfunction getSchemaByResolvedExtensions(extensions, editor) {\n var _a;\n const allAttributes = getAttributesFromExtensions(extensions);\n const { nodeExtensions, markExtensions } = splitExtensions(extensions);\n const topNode = (_a = nodeExtensions.find((extension) => getExtensionField(extension, \"topNode\"))) == null ? void 0 : _a.name;\n const nodes = Object.fromEntries(\n nodeExtensions.map((extension) => {\n const extensionAttributes = allAttributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor\n };\n const extraNodeFields = extensions.reduce((fields, e) => {\n const extendNodeSchema = getExtensionField(e, \"extendNodeSchema\", context);\n return {\n ...fields,\n ...extendNodeSchema ? extendNodeSchema(extension) : {}\n };\n }, {});\n const schema = cleanUpSchemaItem({\n ...extraNodeFields,\n content: callOrReturn(getExtensionField(extension, \"content\", context)),\n marks: callOrReturn(getExtensionField(extension, \"marks\", context)),\n group: callOrReturn(getExtensionField(extension, \"group\", context)),\n inline: callOrReturn(getExtensionField(extension, \"inline\", context)),\n atom: callOrReturn(getExtensionField(extension, \"atom\", context)),\n selectable: callOrReturn(getExtensionField(extension, \"selectable\", context)),\n draggable: callOrReturn(getExtensionField(extension, \"draggable\", context)),\n code: callOrReturn(getExtensionField(extension, \"code\", context)),\n whitespace: callOrReturn(getExtensionField(extension, \"whitespace\", context)),\n linebreakReplacement: callOrReturn(\n getExtensionField(extension, \"linebreakReplacement\", context)\n ),\n defining: callOrReturn(getExtensionField(extension, \"defining\", context)),\n isolating: callOrReturn(getExtensionField(extension, \"isolating\", context)),\n attrs: Object.fromEntries(\n extensionAttributes.map((extensionAttribute) => {\n var _a2, _b;\n return [\n extensionAttribute.name,\n { default: (_a2 = extensionAttribute == null ? void 0 : extensionAttribute.attribute) == null ? void 0 : _a2.default, validate: (_b = extensionAttribute == null ? void 0 : extensionAttribute.attribute) == null ? void 0 : _b.validate }\n ];\n })\n )\n });\n const parseHTML = callOrReturn(getExtensionField(extension, \"parseHTML\", context));\n if (parseHTML) {\n schema.parseDOM = parseHTML.map(\n (parseRule) => injectExtensionAttributesToParseRule(parseRule, extensionAttributes)\n );\n }\n const renderHTML = getExtensionField(extension, \"renderHTML\", context);\n if (renderHTML) {\n schema.toDOM = (node) => renderHTML({\n node,\n HTMLAttributes: getRenderedAttributes(node, extensionAttributes)\n });\n }\n const renderText = getExtensionField(extension, \"renderText\", context);\n if (renderText) {\n schema.toText = renderText;\n }\n return [extension.name, schema];\n })\n );\n const marks = Object.fromEntries(\n markExtensions.map((extension) => {\n const extensionAttributes = allAttributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor\n };\n const extraMarkFields = extensions.reduce((fields, e) => {\n const extendMarkSchema = getExtensionField(e, \"extendMarkSchema\", context);\n return {\n ...fields,\n ...extendMarkSchema ? extendMarkSchema(extension) : {}\n };\n }, {});\n const schema = cleanUpSchemaItem({\n ...extraMarkFields,\n inclusive: callOrReturn(getExtensionField(extension, \"inclusive\", context)),\n excludes: callOrReturn(getExtensionField(extension, \"excludes\", context)),\n group: callOrReturn(getExtensionField(extension, \"group\", context)),\n spanning: callOrReturn(getExtensionField(extension, \"spanning\", context)),\n code: callOrReturn(getExtensionField(extension, \"code\", context)),\n attrs: Object.fromEntries(\n extensionAttributes.map((extensionAttribute) => {\n var _a2, _b;\n return [\n extensionAttribute.name,\n { default: (_a2 = extensionAttribute == null ? void 0 : extensionAttribute.attribute) == null ? void 0 : _a2.default, validate: (_b = extensionAttribute == null ? void 0 : extensionAttribute.attribute) == null ? void 0 : _b.validate }\n ];\n })\n )\n });\n const parseHTML = callOrReturn(getExtensionField(extension, \"parseHTML\", context));\n if (parseHTML) {\n schema.parseDOM = parseHTML.map(\n (parseRule) => injectExtensionAttributesToParseRule(parseRule, extensionAttributes)\n );\n }\n const renderHTML = getExtensionField(extension, \"renderHTML\", context);\n if (renderHTML) {\n schema.toDOM = (mark) => renderHTML({\n mark,\n HTMLAttributes: getRenderedAttributes(mark, extensionAttributes)\n });\n }\n return [extension.name, schema];\n })\n );\n return new Schema2({\n topNode,\n nodes,\n marks\n });\n}\n\n// src/utilities/findDuplicates.ts\nfunction findDuplicates(items) {\n const filtered = items.filter((el, index) => items.indexOf(el) !== index);\n return Array.from(new Set(filtered));\n}\n\n// src/helpers/sortExtensions.ts\nfunction sortExtensions(extensions) {\n const defaultPriority = 100;\n return extensions.sort((a, b) => {\n const priorityA = getExtensionField(a, \"priority\") || defaultPriority;\n const priorityB = getExtensionField(b, \"priority\") || defaultPriority;\n if (priorityA > priorityB) {\n return -1;\n }\n if (priorityA < priorityB) {\n return 1;\n }\n return 0;\n });\n}\n\n// src/helpers/resolveExtensions.ts\nfunction resolveExtensions(extensions) {\n const resolvedExtensions = sortExtensions(flattenExtensions(extensions));\n const duplicatedNames = findDuplicates(resolvedExtensions.map((extension) => extension.name));\n if (duplicatedNames.length) {\n console.warn(\n `[tiptap warn]: Duplicate extension names found: [${duplicatedNames.map((item) => `'${item}'`).join(\", \")}]. This can lead to issues.`\n );\n }\n return resolvedExtensions;\n}\n\n// src/helpers/getSchema.ts\nfunction getSchema(extensions, editor) {\n const resolvedExtensions = resolveExtensions(extensions);\n return getSchemaByResolvedExtensions(resolvedExtensions, editor);\n}\n\n// src/helpers/generateHTML.ts\nfunction generateHTML(doc, extensions) {\n const schema = getSchema(extensions);\n const contentNode = Node.fromJSON(schema, doc);\n return getHTMLFromFragment(contentNode.content, schema);\n}\n\n// src/helpers/generateJSON.ts\nimport { DOMParser as DOMParser2 } from \"@tiptap/pm/model\";\nfunction generateJSON(html, extensions) {\n const schema = getSchema(extensions);\n const dom = elementFromString(html);\n return DOMParser2.fromSchema(schema).parse(dom).toJSON();\n}\n\n// src/helpers/generateText.ts\nimport { Node as Node2 } from \"@tiptap/pm/model\";\n\n// src/helpers/getTextBetween.ts\nfunction getTextBetween(startNode, range, options) {\n const { from, to } = range;\n const { blockSeparator = \"\\n\\n\", textSerializers = {} } = options || {};\n let text = \"\";\n startNode.nodesBetween(from, to, (node, pos, parent, index) => {\n var _a;\n if (node.isBlock && pos > from) {\n text += blockSeparator;\n }\n const textSerializer = textSerializers == null ? void 0 : textSerializers[node.type.name];\n if (textSerializer) {\n if (parent) {\n text += textSerializer({\n node,\n pos,\n parent,\n index,\n range\n });\n }\n return false;\n }\n if (node.isText) {\n text += (_a = node == null ? void 0 : node.text) == null ? void 0 : _a.slice(Math.max(from, pos) - pos, to - pos);\n }\n });\n return text;\n}\n\n// src/helpers/getText.ts\nfunction getText(node, options) {\n const range = {\n from: 0,\n to: node.content.size\n };\n return getTextBetween(node, range, options);\n}\n\n// src/helpers/getTextSerializersFromSchema.ts\nfunction getTextSerializersFromSchema(schema) {\n return Object.fromEntries(\n Object.entries(schema.nodes).filter(([, node]) => node.spec.toText).map(([name, node]) => [name, node.spec.toText])\n );\n}\n\n// src/helpers/generateText.ts\nfunction generateText(doc, extensions, options) {\n const { blockSeparator = \"\\n\\n\", textSerializers = {} } = options || {};\n const schema = getSchema(extensions);\n const contentNode = Node2.fromJSON(schema, doc);\n return getText(contentNode, {\n blockSeparator,\n textSerializers: {\n ...getTextSerializersFromSchema(schema),\n ...textSerializers\n }\n });\n}\n\n// src/helpers/getMarkType.ts\nfunction getMarkType(nameOrType, schema) {\n if (typeof nameOrType === \"string\") {\n if (!schema.marks[nameOrType]) {\n throw Error(`There is no mark type named '${nameOrType}'. Maybe you forgot to add the extension?`);\n }\n return schema.marks[nameOrType];\n }\n return nameOrType;\n}\n\n// src/helpers/getMarkAttributes.ts\nfunction getMarkAttributes(state, typeOrName) {\n const type = getMarkType(typeOrName, state.schema);\n const { from, to, empty } = state.selection;\n const marks = [];\n if (empty) {\n if (state.storedMarks) {\n marks.push(...state.storedMarks);\n }\n marks.push(...state.selection.$head.marks());\n } else {\n state.doc.nodesBetween(from, to, (node) => {\n marks.push(...node.marks);\n });\n }\n const mark = marks.find((markItem) => markItem.type.name === type.name);\n if (!mark) {\n return {};\n }\n return { ...mark.attrs };\n}\n\n// src/helpers/getNodeType.ts\nfunction getNodeType(nameOrType, schema) {\n if (typeof nameOrType === \"string\") {\n if (!schema.nodes[nameOrType]) {\n throw Error(`There is no node type named '${nameOrType}'. Maybe you forgot to add the extension?`);\n }\n return schema.nodes[nameOrType];\n }\n return nameOrType;\n}\n\n// src/helpers/getNodeAttributes.ts\nfunction getNodeAttributes(state, typeOrName) {\n const type = getNodeType(typeOrName, state.schema);\n const { from, to } = state.selection;\n const nodes = [];\n state.doc.nodesBetween(from, to, (node2) => {\n nodes.push(node2);\n });\n const node = nodes.reverse().find((nodeItem) => nodeItem.type.name === type.name);\n if (!node) {\n return {};\n }\n return { ...node.attrs };\n}\n\n// src/helpers/getSchemaTypeNameByName.ts\nfunction getSchemaTypeNameByName(name, schema) {\n if (schema.nodes[name]) {\n return \"node\";\n }\n if (schema.marks[name]) {\n return \"mark\";\n }\n return null;\n}\n\n// src/helpers/getAttributes.ts\nfunction getAttributes(state, typeOrName) {\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === \"string\" ? typeOrName : typeOrName.name,\n state.schema\n );\n if (schemaType === \"node\") {\n return getNodeAttributes(state, typeOrName);\n }\n if (schemaType === \"mark\") {\n return getMarkAttributes(state, typeOrName);\n }\n return {};\n}\n\n// src/utilities/removeDuplicates.ts\nfunction removeDuplicates(array, by = JSON.stringify) {\n const seen = {};\n return array.filter((item) => {\n const key = by(item);\n return Object.prototype.hasOwnProperty.call(seen, key) ? false : seen[key] = true;\n });\n}\n\n// src/helpers/getChangedRanges.ts\nfunction simplifyChangedRanges(changes) {\n const uniqueChanges = removeDuplicates(changes);\n return uniqueChanges.length === 1 ? uniqueChanges : uniqueChanges.filter((change, index) => {\n const rest = uniqueChanges.filter((_, i) => i !== index);\n return !rest.some((otherChange) => {\n return change.oldRange.from >= otherChange.oldRange.from && change.oldRange.to <= otherChange.oldRange.to && change.newRange.from >= otherChange.newRange.from && change.newRange.to <= otherChange.newRange.to;\n });\n });\n}\nfunction getChangedRanges(transform) {\n const { mapping, steps } = transform;\n const changes = [];\n mapping.maps.forEach((stepMap, index) => {\n const ranges = [];\n if (!stepMap.ranges.length) {\n const { from, to } = steps[index];\n if (from === void 0 || to === void 0) {\n return;\n }\n ranges.push({ from, to });\n } else {\n stepMap.forEach((from, to) => {\n ranges.push({ from, to });\n });\n }\n ranges.forEach(({ from, to }) => {\n const newStart = mapping.slice(index).map(from, -1);\n const newEnd = mapping.slice(index).map(to);\n const oldStart = mapping.invert().map(newStart, -1);\n const oldEnd = mapping.invert().map(newEnd);\n changes.push({\n oldRange: {\n from: oldStart,\n to: oldEnd\n },\n newRange: {\n from: newStart,\n to: newEnd\n }\n });\n });\n });\n return simplifyChangedRanges(changes);\n}\n\n// src/helpers/getDebugJSON.ts\nfunction getDebugJSON(node, startOffset = 0) {\n const isTopNode = node.type === node.type.schema.topNodeType;\n const increment = isTopNode ? 0 : 1;\n const from = startOffset;\n const to = from + node.nodeSize;\n const marks = node.marks.map((mark) => {\n const output2 = {\n type: mark.type.name\n };\n if (Object.keys(mark.attrs).length) {\n output2.attrs = { ...mark.attrs };\n }\n return output2;\n });\n const attrs = { ...node.attrs };\n const output = {\n type: node.type.name,\n from,\n to\n };\n if (Object.keys(attrs).length) {\n output.attrs = attrs;\n }\n if (marks.length) {\n output.marks = marks;\n }\n if (node.content.childCount) {\n output.content = [];\n node.forEach((child, offset) => {\n var _a;\n (_a = output.content) == null ? void 0 : _a.push(getDebugJSON(child, startOffset + offset + increment));\n });\n }\n if (node.text) {\n output.text = node.text;\n }\n return output;\n}\n\n// src/utilities/isRegExp.ts\nfunction isRegExp(value) {\n return Object.prototype.toString.call(value) === \"[object RegExp]\";\n}\n\n// src/utilities/objectIncludes.ts\nfunction objectIncludes(object1, object2, options = { strict: true }) {\n const keys = Object.keys(object2);\n if (!keys.length) {\n return true;\n }\n return keys.every((key) => {\n if (options.strict) {\n return object2[key] === object1[key];\n }\n if (isRegExp(object2[key])) {\n return object2[key].test(object1[key]);\n }\n return object2[key] === object1[key];\n });\n}\n\n// src/helpers/getMarkRange.ts\nfunction findMarkInSet(marks, type, attributes = {}) {\n return marks.find((item) => {\n return item.type === type && objectIncludes(\n // Only check equality for the attributes that are provided\n Object.fromEntries(Object.keys(attributes).map((k) => [k, item.attrs[k]])),\n attributes\n );\n });\n}\nfunction isMarkInSet(marks, type, attributes = {}) {\n return !!findMarkInSet(marks, type, attributes);\n}\nfunction getMarkRange($pos, type, attributes) {\n var _a;\n if (!$pos || !type) {\n return;\n }\n let start = $pos.parent.childAfter($pos.parentOffset);\n if (!start.node || !start.node.marks.some((mark2) => mark2.type === type)) {\n start = $pos.parent.childBefore($pos.parentOffset);\n }\n if (!start.node || !start.node.marks.some((mark2) => mark2.type === type)) {\n return;\n }\n attributes = attributes || ((_a = start.node.marks[0]) == null ? void 0 : _a.attrs);\n const mark = findMarkInSet([...start.node.marks], type, attributes);\n if (!mark) {\n return;\n }\n let startIndex = start.index;\n let startPos = $pos.start() + start.offset;\n let endIndex = startIndex + 1;\n let endPos = startPos + start.node.nodeSize;\n while (startIndex > 0 && isMarkInSet([...$pos.parent.child(startIndex - 1).marks], type, attributes)) {\n startIndex -= 1;\n startPos -= $pos.parent.child(startIndex).nodeSize;\n }\n while (endIndex < $pos.parent.childCount && isMarkInSet([...$pos.parent.child(endIndex).marks], type, attributes)) {\n endPos += $pos.parent.child(endIndex).nodeSize;\n endIndex += 1;\n }\n return {\n from: startPos,\n to: endPos\n };\n}\n\n// src/helpers/getMarksBetween.ts\nfunction getMarksBetween(from, to, doc) {\n const marks = [];\n if (from === to) {\n doc.resolve(from).marks().forEach((mark) => {\n const $pos = doc.resolve(from);\n const range = getMarkRange($pos, mark.type);\n if (!range) {\n return;\n }\n marks.push({\n mark,\n ...range\n });\n });\n } else {\n doc.nodesBetween(from, to, (node, pos) => {\n if (!node || (node == null ? void 0 : node.nodeSize) === void 0) {\n return;\n }\n marks.push(\n ...node.marks.map((mark) => ({\n from: pos,\n to: pos + node.nodeSize,\n mark\n }))\n );\n });\n }\n return marks;\n}\n\n// src/helpers/getNodeAtPosition.ts\nvar getNodeAtPosition = (state, typeOrName, pos, maxDepth = 20) => {\n const $pos = state.doc.resolve(pos);\n let currentDepth = maxDepth;\n let node = null;\n while (currentDepth > 0 && node === null) {\n const currentNode = $pos.node(currentDepth);\n if ((currentNode == null ? void 0 : currentNode.type.name) === typeOrName) {\n node = currentNode;\n } else {\n currentDepth -= 1;\n }\n }\n return [node, currentDepth];\n};\n\n// src/helpers/getSchemaTypeByName.ts\nfunction getSchemaTypeByName(name, schema) {\n return schema.nodes[name] || schema.marks[name] || null;\n}\n\n// src/helpers/getSplittedAttributes.ts\nfunction getSplittedAttributes(extensionAttributes, typeName, attributes) {\n return Object.fromEntries(\n Object.entries(attributes).filter(([name]) => {\n const extensionAttribute = extensionAttributes.find((item) => {\n return item.type === typeName && item.name === name;\n });\n if (!extensionAttribute) {\n return false;\n }\n return extensionAttribute.attribute.keepOnSplit;\n })\n );\n}\n\n// src/helpers/getTextContentFromNodes.ts\nvar getTextContentFromNodes = ($from, maxMatch = 500) => {\n let textBefore = \"\";\n const sliceEndPos = $from.parentOffset;\n $from.parent.nodesBetween(Math.max(0, sliceEndPos - maxMatch), sliceEndPos, (node, pos, parent, index) => {\n var _a, _b;\n const chunk = ((_b = (_a = node.type.spec).toText) == null ? void 0 : _b.call(_a, {\n node,\n pos,\n parent,\n index\n })) || node.textContent || \"%leaf%\";\n textBefore += node.isAtom && !node.isText ? chunk : chunk.slice(0, Math.max(0, sliceEndPos - pos));\n });\n return textBefore;\n};\n\n// src/helpers/isMarkActive.ts\nfunction isMarkActive(state, typeOrName, attributes = {}) {\n const { empty, ranges } = state.selection;\n const type = typeOrName ? getMarkType(typeOrName, state.schema) : null;\n if (empty) {\n return !!(state.storedMarks || state.selection.$from.marks()).filter((mark) => {\n if (!type) {\n return true;\n }\n return type.name === mark.type.name;\n }).find((mark) => objectIncludes(mark.attrs, attributes, { strict: false }));\n }\n let selectionRange = 0;\n const markRanges = [];\n ranges.forEach(({ $from, $to }) => {\n const from = $from.pos;\n const to = $to.pos;\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isText && !node.marks.length) {\n return;\n }\n const relativeFrom = Math.max(from, pos);\n const relativeTo = Math.min(to, pos + node.nodeSize);\n const range2 = relativeTo - relativeFrom;\n selectionRange += range2;\n markRanges.push(\n ...node.marks.map((mark) => ({\n mark,\n from: relativeFrom,\n to: relativeTo\n }))\n );\n });\n });\n if (selectionRange === 0) {\n return false;\n }\n const matchedRange = markRanges.filter((markRange) => {\n if (!type) {\n return true;\n }\n return type.name === markRange.mark.type.name;\n }).filter((markRange) => objectIncludes(markRange.mark.attrs, attributes, { strict: false })).reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\n const excludedRange = markRanges.filter((markRange) => {\n if (!type) {\n return true;\n }\n return markRange.mark.type !== type && markRange.mark.type.excludes(type);\n }).reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\n const range = matchedRange > 0 ? matchedRange + excludedRange : matchedRange;\n return range >= selectionRange;\n}\n\n// src/helpers/isNodeActive.ts\nfunction isNodeActive(state, typeOrName, attributes = {}) {\n const { from, to, empty } = state.selection;\n const type = typeOrName ? getNodeType(typeOrName, state.schema) : null;\n const nodeRanges = [];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return;\n }\n const relativeFrom = Math.max(from, pos);\n const relativeTo = Math.min(to, pos + node.nodeSize);\n nodeRanges.push({\n node,\n from: relativeFrom,\n to: relativeTo\n });\n });\n const selectionRange = to - from;\n const matchedNodeRanges = nodeRanges.filter((nodeRange) => {\n if (!type) {\n return true;\n }\n return type.name === nodeRange.node.type.name;\n }).filter((nodeRange) => objectIncludes(nodeRange.node.attrs, attributes, { strict: false }));\n if (empty) {\n return !!matchedNodeRanges.length;\n }\n const range = matchedNodeRanges.reduce((sum, nodeRange) => sum + nodeRange.to - nodeRange.from, 0);\n return range >= selectionRange;\n}\n\n// src/helpers/isActive.ts\nfunction isActive(state, name, attributes = {}) {\n if (!name) {\n return isNodeActive(state, null, attributes) || isMarkActive(state, null, attributes);\n }\n const schemaType = getSchemaTypeNameByName(name, state.schema);\n if (schemaType === \"node\") {\n return isNodeActive(state, name, attributes);\n }\n if (schemaType === \"mark\") {\n return isMarkActive(state, name, attributes);\n }\n return false;\n}\n\n// src/helpers/isAtEndOfNode.ts\nvar isAtEndOfNode = (state, nodeType) => {\n const { $from, $to, $anchor } = state.selection;\n if (nodeType) {\n const parentNode = findParentNode((node) => node.type.name === nodeType)(state.selection);\n if (!parentNode) {\n return false;\n }\n const $parentPos = state.doc.resolve(parentNode.pos + 1);\n if ($anchor.pos + 1 === $parentPos.end()) {\n return true;\n }\n return false;\n }\n if ($to.parentOffset < $to.parent.nodeSize - 2 || $from.pos !== $to.pos) {\n return false;\n }\n return true;\n};\n\n// src/helpers/isAtStartOfNode.ts\nvar isAtStartOfNode = (state) => {\n const { $from, $to } = state.selection;\n if ($from.parentOffset > 0 || $from.pos !== $to.pos) {\n return false;\n }\n return true;\n};\n\n// src/helpers/isExtensionRulesEnabled.ts\nfunction isExtensionRulesEnabled(extension, enabled) {\n if (Array.isArray(enabled)) {\n return enabled.some((enabledExtension) => {\n const name = typeof enabledExtension === \"string\" ? enabledExtension : enabledExtension.name;\n return name === extension.name;\n });\n }\n return enabled;\n}\n\n// src/helpers/isList.ts\nfunction isList(name, extensions) {\n const { nodeExtensions } = splitExtensions(extensions);\n const extension = nodeExtensions.find((item) => item.name === name);\n if (!extension) {\n return false;\n }\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n const group = callOrReturn(getExtensionField(extension, \"group\", context));\n if (typeof group !== \"string\") {\n return false;\n }\n return group.split(\" \").includes(\"list\");\n}\n\n// src/helpers/isNodeEmpty.ts\nfunction isNodeEmpty(node, {\n checkChildren = true,\n ignoreWhitespace = false\n} = {}) {\n var _a;\n if (ignoreWhitespace) {\n if (node.type.name === \"hardBreak\") {\n return true;\n }\n if (node.isText) {\n return /^\\s*$/m.test((_a = node.text) != null ? _a : \"\");\n }\n }\n if (node.isText) {\n return !node.text;\n }\n if (node.isAtom || node.isLeaf) {\n return false;\n }\n if (node.content.childCount === 0) {\n return true;\n }\n if (checkChildren) {\n let isContentEmpty = true;\n node.content.forEach((childNode) => {\n if (isContentEmpty === false) {\n return;\n }\n if (!isNodeEmpty(childNode, { ignoreWhitespace, checkChildren })) {\n isContentEmpty = false;\n }\n });\n return isContentEmpty;\n }\n return false;\n}\n\n// src/helpers/isNodeSelection.ts\nimport { NodeSelection } from \"@tiptap/pm/state\";\nfunction isNodeSelection(value) {\n return value instanceof NodeSelection;\n}\n\n// src/helpers/isTextSelection.ts\nimport { TextSelection } from \"@tiptap/pm/state\";\nfunction isTextSelection(value) {\n return value instanceof TextSelection;\n}\n\n// src/utilities/minMax.ts\nfunction minMax(value = 0, min = 0, max = 0) {\n return Math.min(Math.max(value, min), max);\n}\n\n// src/helpers/posToDOMRect.ts\nfunction posToDOMRect(view, from, to) {\n const minPos = 0;\n const maxPos = view.state.doc.content.size;\n const resolvedFrom = minMax(from, minPos, maxPos);\n const resolvedEnd = minMax(to, minPos, maxPos);\n const start = view.coordsAtPos(resolvedFrom);\n const end = view.coordsAtPos(resolvedEnd, -1);\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n const width = right - left;\n const height = bottom - top;\n const x = left;\n const y = top;\n const data = {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x,\n y\n };\n return {\n ...data,\n toJSON: () => data\n };\n}\n\n// src/helpers/resolveFocusPosition.ts\nimport { Selection, TextSelection as TextSelection2 } from \"@tiptap/pm/state\";\nfunction resolveFocusPosition(doc, position = null) {\n if (!position) {\n return null;\n }\n const selectionAtStart = Selection.atStart(doc);\n const selectionAtEnd = Selection.atEnd(doc);\n if (position === \"start\" || position === true) {\n return selectionAtStart;\n }\n if (position === \"end\") {\n return selectionAtEnd;\n }\n const minPos = selectionAtStart.from;\n const maxPos = selectionAtEnd.to;\n if (position === \"all\") {\n return TextSelection2.create(doc, minMax(0, minPos, maxPos), minMax(doc.content.size, minPos, maxPos));\n }\n return TextSelection2.create(doc, minMax(position, minPos, maxPos), minMax(position, minPos, maxPos));\n}\n\n// src/helpers/rewriteUnknownContent.ts\nfunction rewriteUnknownContentInner({\n json,\n validMarks,\n validNodes,\n options,\n rewrittenContent = []\n}) {\n if (json.marks && Array.isArray(json.marks)) {\n json.marks = json.marks.filter((mark) => {\n const name = typeof mark === \"string\" ? mark : mark.type;\n if (validMarks.has(name)) {\n return true;\n }\n rewrittenContent.push({\n original: JSON.parse(JSON.stringify(mark)),\n unsupported: name\n });\n return false;\n });\n }\n if (json.content && Array.isArray(json.content)) {\n json.content = json.content.map(\n (value) => rewriteUnknownContentInner({\n json: value,\n validMarks,\n validNodes,\n options,\n rewrittenContent\n }).json\n ).filter((a) => a !== null && a !== void 0);\n }\n if (json.type && !validNodes.has(json.type)) {\n rewrittenContent.push({\n original: JSON.parse(JSON.stringify(json)),\n unsupported: json.type\n });\n if (json.content && Array.isArray(json.content) && (options == null ? void 0 : options.fallbackToParagraph) !== false) {\n json.type = \"paragraph\";\n return {\n json,\n rewrittenContent\n };\n }\n return {\n json: null,\n rewrittenContent\n };\n }\n return { json, rewrittenContent };\n}\nfunction rewriteUnknownContent(json, schema, options) {\n return rewriteUnknownContentInner({\n json,\n validNodes: new Set(Object.keys(schema.nodes)),\n validMarks: new Set(Object.keys(schema.marks)),\n options\n });\n}\n\n// src/helpers/selectionToInsertionEnd.ts\nimport { Selection as Selection2 } from \"@tiptap/pm/state\";\nimport { ReplaceAroundStep, ReplaceStep } from \"@tiptap/pm/transform\";\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n const last = tr.steps.length - 1;\n if (last < startLen) {\n return;\n }\n const step = tr.steps[last];\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) {\n return;\n }\n const map = tr.mapping.maps[last];\n let end = 0;\n map.forEach((_from, _to, _newFrom, newTo) => {\n if (end === 0) {\n end = newTo;\n }\n });\n tr.setSelection(Selection2.near(tr.doc.resolve(end), bias));\n}\n\n// src/InputRule.ts\nimport { Fragment as Fragment2 } from \"@tiptap/pm/model\";\nimport { Plugin } from \"@tiptap/pm/state\";\nvar InputRule = class {\n constructor(config) {\n this.find = config.find;\n this.handler = config.handler;\n }\n};\nvar inputRuleMatcherHandler = (text, find) => {\n if (isRegExp(find)) {\n return find.exec(text);\n }\n const inputRuleMatch = find(text);\n if (!inputRuleMatch) {\n return null;\n }\n const result = [inputRuleMatch.text];\n result.index = inputRuleMatch.index;\n result.input = text;\n result.data = inputRuleMatch.data;\n if (inputRuleMatch.replaceWith) {\n if (!inputRuleMatch.text.includes(inputRuleMatch.replaceWith)) {\n console.warn('[tiptap warn]: \"inputRuleMatch.replaceWith\" must be part of \"inputRuleMatch.text\".');\n }\n result.push(inputRuleMatch.replaceWith);\n }\n return result;\n};\nfunction run(config) {\n var _a;\n const { editor, from, to, text, rules, plugin } = config;\n const { view } = editor;\n if (view.composing) {\n return false;\n }\n const $from = view.state.doc.resolve(from);\n if (\n // check for code node\n $from.parent.type.spec.code || // check for code mark\n !!((_a = $from.nodeBefore || $from.nodeAfter) == null ? void 0 : _a.marks.find((mark) => mark.type.spec.code))\n ) {\n return false;\n }\n let matched = false;\n const textBefore = getTextContentFromNodes($from) + text;\n rules.forEach((rule) => {\n if (matched) {\n return;\n }\n const match = inputRuleMatcherHandler(textBefore, rule.find);\n if (!match) {\n return;\n }\n const tr = view.state.tr;\n const state = createChainableState({\n state: view.state,\n transaction: tr\n });\n const range = {\n from: from - (match[0].length - text.length),\n to\n };\n const { commands, chain, can } = new CommandManager({\n editor,\n state\n });\n const handler = rule.handler({\n state,\n range,\n match,\n commands,\n chain,\n can\n });\n if (handler === null || !tr.steps.length) {\n return;\n }\n tr.setMeta(plugin, {\n transform: tr,\n from,\n to,\n text\n });\n view.dispatch(tr);\n matched = true;\n });\n return matched;\n}\nfunction inputRulesPlugin(props) {\n const { editor, rules } = props;\n const plugin = new Plugin({\n state: {\n init() {\n return null;\n },\n apply(tr, prev, state) {\n const stored = tr.getMeta(plugin);\n if (stored) {\n return stored;\n }\n const simulatedInputMeta = tr.getMeta(\"applyInputRules\");\n const isSimulatedInput = !!simulatedInputMeta;\n if (isSimulatedInput) {\n setTimeout(() => {\n let { text } = simulatedInputMeta;\n if (typeof text === \"string\") {\n text = text;\n } else {\n text = getHTMLFromFragment(Fragment2.from(text), state.schema);\n }\n const { from } = simulatedInputMeta;\n const to = from + text.length;\n run({\n editor,\n from,\n to,\n text,\n rules,\n plugin\n });\n });\n }\n return tr.selectionSet || tr.docChanged ? null : prev;\n }\n },\n props: {\n handleTextInput(view, from, to, text) {\n return run({\n editor,\n from,\n to,\n text,\n rules,\n plugin\n });\n },\n handleDOMEvents: {\n compositionend: (view) => {\n setTimeout(() => {\n const { $cursor } = view.state.selection;\n if ($cursor) {\n run({\n editor,\n from: $cursor.pos,\n to: $cursor.pos,\n text: \"\",\n rules,\n plugin\n });\n }\n });\n return false;\n }\n },\n // add support for input rules to trigger on enter\n // this is useful for example for code blocks\n handleKeyDown(view, event) {\n if (event.key !== \"Enter\") {\n return false;\n }\n const { $cursor } = view.state.selection;\n if ($cursor) {\n return run({\n editor,\n from: $cursor.pos,\n to: $cursor.pos,\n text: \"\\n\",\n rules,\n plugin\n });\n }\n return false;\n }\n },\n // @ts-ignore\n isInputRules: true\n });\n return plugin;\n}\n\n// src/utilities/isPlainObject.ts\nfunction getType(value) {\n return Object.prototype.toString.call(value).slice(8, -1);\n}\nfunction isPlainObject(value) {\n if (getType(value) !== \"Object\") {\n return false;\n }\n return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype;\n}\n\n// src/utilities/mergeDeep.ts\nfunction mergeDeep(target, source) {\n const output = { ...target };\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach((key) => {\n if (isPlainObject(source[key]) && isPlainObject(target[key])) {\n output[key] = mergeDeep(target[key], source[key]);\n } else {\n output[key] = source[key];\n }\n });\n }\n return output;\n}\n\n// src/Extendable.ts\nvar Extendable = class {\n constructor(config = {}) {\n this.type = \"extendable\";\n this.parent = null;\n this.child = null;\n this.name = \"\";\n this.config = {\n name: this.name\n };\n this.config = {\n ...this.config,\n ...config\n };\n this.name = this.config.name;\n }\n get options() {\n return {\n ...callOrReturn(\n getExtensionField(this, \"addOptions\", {\n name: this.name\n })\n ) || {}\n };\n }\n get storage() {\n return {\n ...callOrReturn(\n getExtensionField(this, \"addStorage\", {\n name: this.name,\n options: this.options\n })\n ) || {}\n };\n }\n configure(options = {}) {\n const extension = this.extend({\n ...this.config,\n addOptions: () => {\n return mergeDeep(this.options, options);\n }\n });\n extension.name = this.name;\n extension.parent = this.parent;\n return extension;\n }\n extend(extendedConfig = {}) {\n const extension = new this.constructor({ ...this.config, ...extendedConfig });\n extension.parent = this;\n this.child = extension;\n extension.name = \"name\" in extendedConfig ? extendedConfig.name : extension.parent.name;\n return extension;\n }\n};\n\n// src/Mark.ts\nvar Mark = class _Mark extends Extendable {\n constructor() {\n super(...arguments);\n this.type = \"mark\";\n }\n /**\n * Create a new Mark instance\n * @param config - Mark configuration object or a function that returns a configuration object\n */\n static create(config = {}) {\n const resolvedConfig = typeof config === \"function\" ? config() : config;\n return new _Mark(resolvedConfig);\n }\n static handleExit({ editor, mark }) {\n const { tr } = editor.state;\n const currentPos = editor.state.selection.$from;\n const isAtEnd = currentPos.pos === currentPos.end();\n if (isAtEnd) {\n const currentMarks = currentPos.marks();\n const isInMark = !!currentMarks.find((m) => (m == null ? void 0 : m.type.name) === mark.name);\n if (!isInMark) {\n return false;\n }\n const removeMark = currentMarks.find((m) => (m == null ? void 0 : m.type.name) === mark.name);\n if (removeMark) {\n tr.removeStoredMark(removeMark);\n }\n tr.insertText(\" \", currentPos.pos);\n editor.view.dispatch(tr);\n return true;\n }\n return false;\n }\n configure(options) {\n return super.configure(options);\n }\n extend(extendedConfig) {\n const resolvedConfig = typeof extendedConfig === \"function\" ? extendedConfig() : extendedConfig;\n return super.extend(resolvedConfig);\n }\n};\n\n// src/PasteRule.ts\nimport { Fragment as Fragment3 } from \"@tiptap/pm/model\";\nimport { Plugin as Plugin2 } from \"@tiptap/pm/state\";\n\n// src/utilities/isNumber.ts\nfunction isNumber(value) {\n return typeof value === \"number\";\n}\n\n// src/PasteRule.ts\nvar PasteRule = class {\n constructor(config) {\n this.find = config.find;\n this.handler = config.handler;\n }\n};\nvar pasteRuleMatcherHandler = (text, find, event) => {\n if (isRegExp(find)) {\n return [...text.matchAll(find)];\n }\n const matches = find(text, event);\n if (!matches) {\n return [];\n }\n return matches.map((pasteRuleMatch) => {\n const result = [pasteRuleMatch.text];\n result.index = pasteRuleMatch.index;\n result.input = text;\n result.data = pasteRuleMatch.data;\n if (pasteRuleMatch.replaceWith) {\n if (!pasteRuleMatch.text.includes(pasteRuleMatch.replaceWith)) {\n console.warn('[tiptap warn]: \"pasteRuleMatch.replaceWith\" must be part of \"pasteRuleMatch.text\".');\n }\n result.push(pasteRuleMatch.replaceWith);\n }\n return result;\n });\n};\nfunction run2(config) {\n const { editor, state, from, to, rule, pasteEvent, dropEvent } = config;\n const { commands, chain, can } = new CommandManager({\n editor,\n state\n });\n const handlers = [];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isTextblock || node.type.spec.code) {\n return;\n }\n const resolvedFrom = Math.max(from, pos);\n const resolvedTo = Math.min(to, pos + node.content.size);\n const textToMatch = node.textBetween(resolvedFrom - pos, resolvedTo - pos, void 0, \"\\uFFFC\");\n const matches = pasteRuleMatcherHandler(textToMatch, rule.find, pasteEvent);\n matches.forEach((match) => {\n if (match.index === void 0) {\n return;\n }\n const start = resolvedFrom + match.index + 1;\n const end = start + match[0].length;\n const range = {\n from: state.tr.mapping.map(start),\n to: state.tr.mapping.map(end)\n };\n const handler = rule.handler({\n state,\n range,\n match,\n commands,\n chain,\n can,\n pasteEvent,\n dropEvent\n });\n handlers.push(handler);\n });\n });\n const success = handlers.every((handler) => handler !== null);\n return success;\n}\nvar tiptapDragFromOtherEditor = null;\nvar createClipboardPasteEvent = (text) => {\n var _a;\n const event = new ClipboardEvent(\"paste\", {\n clipboardData: new DataTransfer()\n });\n (_a = event.clipboardData) == null ? void 0 : _a.setData(\"text/html\", text);\n return event;\n};\nfunction pasteRulesPlugin(props) {\n const { editor, rules } = props;\n let dragSourceElement = null;\n let isPastedFromProseMirror = false;\n let isDroppedFromProseMirror = false;\n let pasteEvent = typeof ClipboardEvent !== \"undefined\" ? new ClipboardEvent(\"paste\") : null;\n let dropEvent;\n try {\n dropEvent = typeof DragEvent !== \"undefined\" ? new DragEvent(\"drop\") : null;\n } catch {\n dropEvent = null;\n }\n const processEvent = ({\n state,\n from,\n to,\n rule,\n pasteEvt\n }) => {\n const tr = state.tr;\n const chainableState = createChainableState({\n state,\n transaction: tr\n });\n const handler = run2({\n editor,\n state: chainableState,\n from: Math.max(from - 1, 0),\n to: to.b - 1,\n rule,\n pasteEvent: pasteEvt,\n dropEvent\n });\n if (!handler || !tr.steps.length) {\n return;\n }\n try {\n dropEvent = typeof DragEvent !== \"undefined\" ? new DragEvent(\"drop\") : null;\n } catch {\n dropEvent = null;\n }\n pasteEvent = typeof ClipboardEvent !== \"undefined\" ? new ClipboardEvent(\"paste\") : null;\n return tr;\n };\n const plugins = rules.map((rule) => {\n return new Plugin2({\n // we register a global drag handler to track the current drag source element\n view(view) {\n const handleDragstart = (event) => {\n var _a;\n dragSourceElement = ((_a = view.dom.parentElement) == null ? void 0 : _a.contains(event.target)) ? view.dom.parentElement : null;\n if (dragSourceElement) {\n tiptapDragFromOtherEditor = editor;\n }\n };\n const handleDragend = () => {\n if (tiptapDragFromOtherEditor) {\n tiptapDragFromOtherEditor = null;\n }\n };\n window.addEventListener(\"dragstart\", handleDragstart);\n window.addEventListener(\"dragend\", handleDragend);\n return {\n destroy() {\n window.removeEventListener(\"dragstart\", handleDragstart);\n window.removeEventListener(\"dragend\", handleDragend);\n }\n };\n },\n props: {\n handleDOMEvents: {\n drop: (view, event) => {\n isDroppedFromProseMirror = dragSourceElement === view.dom.parentElement;\n dropEvent = event;\n if (!isDroppedFromProseMirror) {\n const dragFromOtherEditor = tiptapDragFromOtherEditor;\n if (dragFromOtherEditor == null ? void 0 : dragFromOtherEditor.isEditable) {\n setTimeout(() => {\n const selection = dragFromOtherEditor.state.selection;\n if (selection) {\n dragFromOtherEditor.commands.deleteRange({ from: selection.from, to: selection.to });\n }\n }, 10);\n }\n }\n return false;\n },\n paste: (_view, event) => {\n var _a;\n const html = (_a = event.clipboardData) == null ? void 0 : _a.getData(\"text/html\");\n pasteEvent = event;\n isPastedFromProseMirror = !!(html == null ? void 0 : html.includes(\"data-pm-slice\"));\n return false;\n }\n }\n },\n appendTransaction: (transactions, oldState, state) => {\n const transaction = transactions[0];\n const isPaste = transaction.getMeta(\"uiEvent\") === \"paste\" && !isPastedFromProseMirror;\n const isDrop = transaction.getMeta(\"uiEvent\") === \"drop\" && !isDroppedFromProseMirror;\n const simulatedPasteMeta = transaction.getMeta(\"applyPasteRules\");\n const isSimulatedPaste = !!simulatedPasteMeta;\n if (!isPaste && !isDrop && !isSimulatedPaste) {\n return;\n }\n if (isSimulatedPaste) {\n let { text } = simulatedPasteMeta;\n if (typeof text === \"string\") {\n text = text;\n } else {\n text = getHTMLFromFragment(Fragment3.from(text), state.schema);\n }\n const { from: from2 } = simulatedPasteMeta;\n const to2 = from2 + text.length;\n const pasteEvt = createClipboardPasteEvent(text);\n return processEvent({\n rule,\n state,\n from: from2,\n to: { b: to2 },\n pasteEvt\n });\n }\n const from = oldState.doc.content.findDiffStart(state.doc.content);\n const to = oldState.doc.content.findDiffEnd(state.doc.content);\n if (!isNumber(from) || !to || from === to.b) {\n return;\n }\n return processEvent({\n rule,\n state,\n from,\n to,\n pasteEvt: pasteEvent\n });\n }\n });\n });\n return plugins;\n}\n\n// src/ExtensionManager.ts\nvar ExtensionManager = class {\n constructor(extensions, editor) {\n this.splittableMarks = [];\n this.editor = editor;\n this.extensions = resolveExtensions(extensions);\n this.schema = getSchemaByResolvedExtensions(this.extensions, editor);\n this.setupExtensions();\n }\n /**\n * Get all commands from the extensions.\n * @returns An object with all commands where the key is the command name and the value is the command function\n */\n get commands() {\n return this.extensions.reduce((commands, extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor: this.editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n const addCommands = getExtensionField(extension, \"addCommands\", context);\n if (!addCommands) {\n return commands;\n }\n return {\n ...commands,\n ...addCommands()\n };\n }, {});\n }\n /**\n * Get all registered Prosemirror plugins from the extensions.\n * @returns An array of Prosemirror plugins\n */\n get plugins() {\n const { editor } = this;\n const extensions = sortExtensions([...this.extensions].reverse());\n const inputRules = [];\n const pasteRules = [];\n const allPlugins = extensions.map((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n const plugins = [];\n const addKeyboardShortcuts = getExtensionField(\n extension,\n \"addKeyboardShortcuts\",\n context\n );\n let defaultBindings = {};\n if (extension.type === \"mark\" && getExtensionField(extension, \"exitable\", context)) {\n defaultBindings.ArrowRight = () => Mark.handleExit({ editor, mark: extension });\n }\n if (addKeyboardShortcuts) {\n const bindings = Object.fromEntries(\n Object.entries(addKeyboardShortcuts()).map(([shortcut, method]) => {\n return [shortcut, () => method({ editor })];\n })\n );\n defaultBindings = { ...defaultBindings, ...bindings };\n }\n const keyMapPlugin = keymap(defaultBindings);\n plugins.push(keyMapPlugin);\n const addInputRules = getExtensionField(extension, \"addInputRules\", context);\n if (isExtensionRulesEnabled(extension, editor.options.enableInputRules) && addInputRules) {\n inputRules.push(...addInputRules());\n }\n const addPasteRules = getExtensionField(extension, \"addPasteRules\", context);\n if (isExtensionRulesEnabled(extension, editor.options.enablePasteRules) && addPasteRules) {\n pasteRules.push(...addPasteRules());\n }\n const addProseMirrorPlugins = getExtensionField(\n extension,\n \"addProseMirrorPlugins\",\n context\n );\n if (addProseMirrorPlugins) {\n const proseMirrorPlugins = addProseMirrorPlugins();\n plugins.push(...proseMirrorPlugins);\n }\n return plugins;\n }).flat();\n return [\n inputRulesPlugin({\n editor,\n rules: inputRules\n }),\n ...pasteRulesPlugin({\n editor,\n rules: pasteRules\n }),\n ...allPlugins\n ];\n }\n /**\n * Get all attributes from the extensions.\n * @returns An array of attributes\n */\n get attributes() {\n return getAttributesFromExtensions(this.extensions);\n }\n /**\n * Get all node views from the extensions.\n * @returns An object with all node views where the key is the node name and the value is the node view function\n */\n get nodeViews() {\n const { editor } = this;\n const { nodeExtensions } = splitExtensions(this.extensions);\n return Object.fromEntries(\n nodeExtensions.filter((extension) => !!getExtensionField(extension, \"addNodeView\")).map((extension) => {\n const extensionAttributes = this.attributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getNodeType(extension.name, this.schema)\n };\n const addNodeView = getExtensionField(extension, \"addNodeView\", context);\n if (!addNodeView) {\n return [];\n }\n const nodeview = (node, view, getPos, decorations, innerDecorations) => {\n const HTMLAttributes = getRenderedAttributes(node, extensionAttributes);\n return addNodeView()({\n // pass-through\n node,\n view,\n getPos,\n decorations,\n innerDecorations,\n // tiptap-specific\n editor,\n extension,\n HTMLAttributes\n });\n };\n return [extension.name, nodeview];\n })\n );\n }\n get markViews() {\n const { editor } = this;\n const { markExtensions } = splitExtensions(this.extensions);\n return Object.fromEntries(\n markExtensions.filter((extension) => !!getExtensionField(extension, \"addMarkView\")).map((extension) => {\n const extensionAttributes = this.attributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getMarkType(extension.name, this.schema)\n };\n const addMarkView = getExtensionField(extension, \"addMarkView\", context);\n if (!addMarkView) {\n return [];\n }\n const markView = (mark, view, inline) => {\n const HTMLAttributes = getRenderedAttributes(mark, extensionAttributes);\n return addMarkView()({\n // pass-through\n mark,\n view,\n inline,\n // tiptap-specific\n editor,\n extension,\n HTMLAttributes,\n updateAttributes: (attrs) => {\n updateMarkViewAttributes(mark, editor, attrs);\n }\n });\n };\n return [extension.name, markView];\n })\n );\n }\n /**\n * Go through all extensions, create extension storages & setup marks\n * & bind editor event listener.\n */\n setupExtensions() {\n const extensions = this.extensions;\n this.editor.extensionStorage = Object.fromEntries(\n extensions.map((extension) => [extension.name, extension.storage])\n );\n extensions.forEach((extension) => {\n var _a;\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor: this.editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n if (extension.type === \"mark\") {\n const keepOnSplit = (_a = callOrReturn(getExtensionField(extension, \"keepOnSplit\", context))) != null ? _a : true;\n if (keepOnSplit) {\n this.splittableMarks.push(extension.name);\n }\n }\n const onBeforeCreate = getExtensionField(extension, \"onBeforeCreate\", context);\n const onCreate = getExtensionField(extension, \"onCreate\", context);\n const onUpdate = getExtensionField(extension, \"onUpdate\", context);\n const onSelectionUpdate = getExtensionField(\n extension,\n \"onSelectionUpdate\",\n context\n );\n const onTransaction = getExtensionField(extension, \"onTransaction\", context);\n const onFocus = getExtensionField(extension, \"onFocus\", context);\n const onBlur = getExtensionField(extension, \"onBlur\", context);\n const onDestroy = getExtensionField(extension, \"onDestroy\", context);\n if (onBeforeCreate) {\n this.editor.on(\"beforeCreate\", onBeforeCreate);\n }\n if (onCreate) {\n this.editor.on(\"create\", onCreate);\n }\n if (onUpdate) {\n this.editor.on(\"update\", onUpdate);\n }\n if (onSelectionUpdate) {\n this.editor.on(\"selectionUpdate\", onSelectionUpdate);\n }\n if (onTransaction) {\n this.editor.on(\"transaction\", onTransaction);\n }\n if (onFocus) {\n this.editor.on(\"focus\", onFocus);\n }\n if (onBlur) {\n this.editor.on(\"blur\", onBlur);\n }\n if (onDestroy) {\n this.editor.on(\"destroy\", onDestroy);\n }\n });\n }\n};\nExtensionManager.resolve = resolveExtensions;\nExtensionManager.sort = sortExtensions;\nExtensionManager.flatten = flattenExtensions;\n\n// src/extensions/index.ts\nvar extensions_exports = {};\n__export(extensions_exports, {\n ClipboardTextSerializer: () => ClipboardTextSerializer,\n Commands: () => Commands,\n Delete: () => Delete,\n Drop: () => Drop,\n Editable: () => Editable,\n FocusEvents: () => FocusEvents,\n Keymap: () => Keymap,\n Paste: () => Paste,\n Tabindex: () => Tabindex,\n focusEventsPluginKey: () => focusEventsPluginKey\n});\n\n// src/extensions/clipboardTextSerializer.ts\nimport { Plugin as Plugin3, PluginKey } from \"@tiptap/pm/state\";\n\n// src/Extension.ts\nvar Extension = class _Extension extends Extendable {\n constructor() {\n super(...arguments);\n this.type = \"extension\";\n }\n /**\n * Create a new Extension instance\n * @param config - Extension configuration object or a function that returns a configuration object\n */\n static create(config = {}) {\n const resolvedConfig = typeof config === \"function\" ? config() : config;\n return new _Extension(resolvedConfig);\n }\n configure(options) {\n return super.configure(options);\n }\n extend(extendedConfig) {\n const resolvedConfig = typeof extendedConfig === \"function\" ? extendedConfig() : extendedConfig;\n return super.extend(resolvedConfig);\n }\n};\n\n// src/extensions/clipboardTextSerializer.ts\nvar ClipboardTextSerializer = Extension.create({\n name: \"clipboardTextSerializer\",\n addOptions() {\n return {\n blockSeparator: void 0\n };\n },\n addProseMirrorPlugins() {\n return [\n new Plugin3({\n key: new PluginKey(\"clipboardTextSerializer\"),\n props: {\n clipboardTextSerializer: () => {\n const { editor } = this;\n const { state, schema } = editor;\n const { doc, selection } = state;\n const { ranges } = selection;\n const from = Math.min(...ranges.map((range2) => range2.$from.pos));\n const to = Math.max(...ranges.map((range2) => range2.$to.pos));\n const textSerializers = getTextSerializersFromSchema(schema);\n const range = { from, to };\n return getTextBetween(doc, range, {\n ...this.options.blockSeparator !== void 0 ? { blockSeparator: this.options.blockSeparator } : {},\n textSerializers\n });\n }\n }\n })\n ];\n }\n});\n\n// src/commands/index.ts\nvar commands_exports = {};\n__export(commands_exports, {\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 joinBackward: () => joinBackward,\n joinDown: () => joinDown,\n joinForward: () => joinForward,\n joinItemBackward: () => joinItemBackward,\n joinItemForward: () => joinItemForward,\n joinTextblockBackward: () => joinTextblockBackward,\n joinTextblockForward: () => joinTextblockForward,\n joinUp: () => joinUp,\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\n// src/commands/blur.ts\nvar blur = () => ({ editor, view }) => {\n requestAnimationFrame(() => {\n var _a;\n if (!editor.isDestroyed) {\n ;\n view.dom.blur();\n (_a = window == null ? void 0 : window.getSelection()) == null ? void 0 : _a.removeAllRanges();\n }\n });\n return true;\n};\n\n// src/commands/clearContent.ts\nvar clearContent = (emitUpdate = true) => ({ commands }) => {\n return commands.setContent(\"\", { emitUpdate });\n};\n\n// src/commands/clearNodes.ts\nimport { liftTarget } from \"@tiptap/pm/transform\";\nvar clearNodes = () => ({ state, tr, dispatch }) => {\n const { selection } = tr;\n const { ranges } = selection;\n if (!dispatch) {\n return true;\n }\n ranges.forEach(({ $from, $to }) => {\n state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (node.type.isText) {\n return;\n }\n const { doc, mapping } = tr;\n const $mappedFrom = doc.resolve(mapping.map(pos));\n const $mappedTo = doc.resolve(mapping.map(pos + node.nodeSize));\n const nodeRange = $mappedFrom.blockRange($mappedTo);\n if (!nodeRange) {\n return;\n }\n const targetLiftDepth = liftTarget(nodeRange);\n if (node.type.isTextblock) {\n const { defaultType } = $mappedFrom.parent.contentMatchAt($mappedFrom.index());\n tr.setNodeMarkup(nodeRange.start, defaultType);\n }\n if (targetLiftDepth || targetLiftDepth === 0) {\n tr.lift(nodeRange, targetLiftDepth);\n }\n });\n });\n return true;\n};\n\n// src/commands/command.ts\nvar command = (fn) => (props) => {\n return fn(props);\n};\n\n// src/commands/createParagraphNear.ts\nimport { createParagraphNear as originalCreateParagraphNear } from \"@tiptap/pm/commands\";\nvar createParagraphNear = () => ({ state, dispatch }) => {\n return originalCreateParagraphNear(state, dispatch);\n};\n\n// src/commands/cut.ts\nimport { TextSelection as TextSelection3 } from \"@tiptap/pm/state\";\nvar cut = (originRange, targetPos) => ({ editor, tr }) => {\n const { state } = editor;\n const contentSlice = state.doc.slice(originRange.from, originRange.to);\n tr.deleteRange(originRange.from, originRange.to);\n const newPos = tr.mapping.map(targetPos);\n tr.insert(newPos, contentSlice.content);\n tr.setSelection(new TextSelection3(tr.doc.resolve(Math.max(newPos - 1, 0))));\n return true;\n};\n\n// src/commands/deleteCurrentNode.ts\nvar deleteCurrentNode = () => ({ tr, dispatch }) => {\n const { selection } = tr;\n const currentNode = selection.$anchor.node();\n if (currentNode.content.size > 0) {\n return false;\n }\n const $pos = tr.selection.$anchor;\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth);\n if (node.type === currentNode.type) {\n if (dispatch) {\n const from = $pos.before(depth);\n const to = $pos.after(depth);\n tr.delete(from, to).scrollIntoView();\n }\n return true;\n }\n }\n return false;\n};\n\n// src/commands/deleteNode.ts\nvar deleteNode = (typeOrName) => ({ tr, state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n const $pos = tr.selection.$anchor;\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth);\n if (node.type === type) {\n if (dispatch) {\n const from = $pos.before(depth);\n const to = $pos.after(depth);\n tr.delete(from, to).scrollIntoView();\n }\n return true;\n }\n }\n return false;\n};\n\n// src/commands/deleteRange.ts\nvar deleteRange = (range) => ({ tr, dispatch }) => {\n const { from, to } = range;\n if (dispatch) {\n tr.delete(from, to);\n }\n return true;\n};\n\n// src/commands/deleteSelection.ts\nimport { deleteSelection as originalDeleteSelection } from \"@tiptap/pm/commands\";\nvar deleteSelection = () => ({ state, dispatch }) => {\n return originalDeleteSelection(state, dispatch);\n};\n\n// src/commands/enter.ts\nvar enter = () => ({ commands }) => {\n return commands.keyboardShortcut(\"Enter\");\n};\n\n// src/commands/exitCode.ts\nimport { exitCode as originalExitCode } from \"@tiptap/pm/commands\";\nvar exitCode = () => ({ state, dispatch }) => {\n return originalExitCode(state, dispatch);\n};\n\n// src/commands/extendMarkRange.ts\nimport { TextSelection as TextSelection4 } from \"@tiptap/pm/state\";\nvar extendMarkRange = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n const type = getMarkType(typeOrName, state.schema);\n const { doc, selection } = tr;\n const { $from, from, to } = selection;\n if (dispatch) {\n const range = getMarkRange($from, type, attributes);\n if (range && range.from <= from && range.to >= to) {\n const newSelection = TextSelection4.create(doc, range.from, range.to);\n tr.setSelection(newSelection);\n }\n }\n return true;\n};\n\n// src/commands/first.ts\nvar first = (commands) => (props) => {\n const items = typeof commands === \"function\" ? commands(props) : commands;\n for (let i = 0; i < items.length; i += 1) {\n if (items[i](props)) {\n return true;\n }\n }\n return false;\n};\n\n// src/utilities/isAndroid.ts\nfunction isAndroid() {\n return navigator.platform === \"Android\" || /android/i.test(navigator.userAgent);\n}\n\n// src/utilities/isiOS.ts\nfunction isiOS() {\n return [\"iPad Simulator\", \"iPhone Simulator\", \"iPod Simulator\", \"iPad\", \"iPhone\", \"iPod\"].includes(navigator.platform) || // iPad on iOS 13 detection\n navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document;\n}\n\n// src/commands/focus.ts\nvar focus = (position = null, options = {}) => ({ editor, view, tr, dispatch }) => {\n options = {\n scrollIntoView: true,\n ...options\n };\n const delayedFocus = () => {\n if (isiOS() || isAndroid()) {\n ;\n view.dom.focus();\n }\n requestAnimationFrame(() => {\n if (!editor.isDestroyed) {\n view.focus();\n if (options == null ? void 0 : options.scrollIntoView) {\n editor.commands.scrollIntoView();\n }\n }\n });\n };\n if (view.hasFocus() && position === null || position === false) {\n return true;\n }\n if (dispatch && position === null && !isTextSelection(editor.state.selection)) {\n delayedFocus();\n return true;\n }\n const selection = resolveFocusPosition(tr.doc, position) || editor.state.selection;\n const isSameSelection = editor.state.selection.eq(selection);\n if (dispatch) {\n if (!isSameSelection) {\n tr.setSelection(selection);\n }\n if (isSameSelection && tr.storedMarks) {\n tr.setStoredMarks(tr.storedMarks);\n }\n delayedFocus();\n }\n return true;\n};\n\n// src/commands/forEach.ts\nvar forEach = (items, fn) => (props) => {\n return items.every((item, index) => fn(item, { ...props, index }));\n};\n\n// src/commands/insertContent.ts\nvar insertContent = (value, options) => ({ tr, commands }) => {\n return commands.insertContentAt({ from: tr.selection.from, to: tr.selection.to }, value, options);\n};\n\n// src/commands/insertContentAt.ts\nimport { Fragment as Fragment4 } from \"@tiptap/pm/model\";\nvar isFragment = (nodeOrFragment) => {\n return !(\"type\" in nodeOrFragment);\n};\nvar insertContentAt = (position, value, options) => ({ tr, dispatch, editor }) => {\n var _a;\n if (dispatch) {\n options = {\n parseOptions: editor.options.parseOptions,\n updateSelection: true,\n applyInputRules: false,\n applyPasteRules: false,\n ...options\n };\n let content;\n const { selection } = editor.state;\n const emitContentError = (error) => {\n editor.emit(\"contentError\", {\n editor,\n error,\n disableCollaboration: () => {\n if (\"collaboration\" in editor.storage && typeof editor.storage.collaboration === \"object\" && editor.storage.collaboration) {\n ;\n editor.storage.collaboration.isDisabled = true;\n }\n }\n });\n };\n const parseOptions = {\n preserveWhitespace: \"full\",\n ...options.parseOptions\n };\n if (!options.errorOnInvalidContent && !editor.options.enableContentCheck && editor.options.emitContentError) {\n try {\n createNodeFromContent(value, editor.schema, {\n parseOptions,\n errorOnInvalidContent: true\n });\n } catch (e) {\n emitContentError(e);\n }\n }\n try {\n content = createNodeFromContent(value, editor.schema, {\n parseOptions,\n errorOnInvalidContent: (_a = options.errorOnInvalidContent) != null ? _a : editor.options.enableContentCheck\n });\n } catch (e) {\n emitContentError(e);\n return false;\n }\n let { from, to } = typeof position === \"number\" ? { from: position, to: position } : { from: position.from, to: position.to };\n let isOnlyTextContent = true;\n let isOnlyBlockContent = true;\n const nodes = isFragment(content) ? content : [content];\n nodes.forEach((node) => {\n node.check();\n isOnlyTextContent = isOnlyTextContent ? node.isText && node.marks.length === 0 : false;\n isOnlyBlockContent = isOnlyBlockContent ? node.isBlock : false;\n });\n if (from === to && isOnlyBlockContent) {\n const { parent } = tr.doc.resolve(from);\n const isEmptyTextBlock = parent.isTextblock && !parent.type.spec.code && !parent.childCount;\n if (isEmptyTextBlock) {\n from -= 1;\n to += 1;\n }\n }\n let newContent;\n if (isOnlyTextContent) {\n if (Array.isArray(value)) {\n newContent = value.map((v) => v.text || \"\").join(\"\");\n } else if (value instanceof Fragment4) {\n let text = \"\";\n value.forEach((node) => {\n if (node.text) {\n text += node.text;\n }\n });\n newContent = text;\n } else if (typeof value === \"object\" && !!value && !!value.text) {\n newContent = value.text;\n } else {\n newContent = value;\n }\n tr.insertText(newContent, from, to);\n } else {\n newContent = content;\n const fromSelectionAtStart = selection.$from.parentOffset === 0;\n const isTextSelection2 = selection.$from.node().isText || selection.$from.node().isTextblock;\n const hasContent = selection.$from.node().content.size > 0;\n if (fromSelectionAtStart && isTextSelection2 && hasContent) {\n from = Math.max(0, from - 1);\n }\n tr.replaceWith(from, to, newContent);\n }\n if (options.updateSelection) {\n selectionToInsertionEnd(tr, tr.steps.length - 1, -1);\n }\n if (options.applyInputRules) {\n tr.setMeta(\"applyInputRules\", { from, text: newContent });\n }\n if (options.applyPasteRules) {\n tr.setMeta(\"applyPasteRules\", { from, text: newContent });\n }\n }\n return true;\n};\n\n// src/commands/join.ts\nimport {\n joinBackward as originalJoinBackward,\n joinDown as originalJoinDown,\n joinForward as originalJoinForward,\n joinUp as originalJoinUp\n} from \"@tiptap/pm/commands\";\nvar joinUp = () => ({ state, dispatch }) => {\n return originalJoinUp(state, dispatch);\n};\nvar joinDown = () => ({ state, dispatch }) => {\n return originalJoinDown(state, dispatch);\n};\nvar joinBackward = () => ({ state, dispatch }) => {\n return originalJoinBackward(state, dispatch);\n};\nvar joinForward = () => ({ state, dispatch }) => {\n return originalJoinForward(state, dispatch);\n};\n\n// src/commands/joinItemBackward.ts\nimport { joinPoint } from \"@tiptap/pm/transform\";\nvar joinItemBackward = () => ({ state, dispatch, tr }) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, -1);\n if (point === null || point === void 0) {\n return false;\n }\n tr.join(point, 2);\n if (dispatch) {\n dispatch(tr);\n }\n return true;\n } catch {\n return false;\n }\n};\n\n// src/commands/joinItemForward.ts\nimport { joinPoint as joinPoint2 } from \"@tiptap/pm/transform\";\nvar joinItemForward = () => ({ state, dispatch, tr }) => {\n try {\n const point = joinPoint2(state.doc, state.selection.$from.pos, 1);\n if (point === null || point === void 0) {\n return false;\n }\n tr.join(point, 2);\n if (dispatch) {\n dispatch(tr);\n }\n return true;\n } catch {\n return false;\n }\n};\n\n// src/commands/joinTextblockBackward.ts\nimport { joinTextblockBackward as originalCommand } from \"@tiptap/pm/commands\";\nvar joinTextblockBackward = () => ({ state, dispatch }) => {\n return originalCommand(state, dispatch);\n};\n\n// src/commands/joinTextblockForward.ts\nimport { joinTextblockForward as originalCommand2 } from \"@tiptap/pm/commands\";\nvar joinTextblockForward = () => ({ state, dispatch }) => {\n return originalCommand2(state, dispatch);\n};\n\n// src/utilities/isMacOS.ts\nfunction isMacOS() {\n return typeof navigator !== \"undefined\" ? /Mac/.test(navigator.platform) : false;\n}\n\n// src/commands/keyboardShortcut.ts\nfunction normalizeKeyName(name) {\n const parts = name.split(/-(?!$)/);\n let result = parts[parts.length - 1];\n if (result === \"Space\") {\n result = \" \";\n }\n let alt;\n let ctrl;\n let shift;\n let meta;\n for (let i = 0; i < parts.length - 1; i += 1) {\n const mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) {\n meta = true;\n } else if (/^a(lt)?$/i.test(mod)) {\n alt = true;\n } else if (/^(c|ctrl|control)$/i.test(mod)) {\n ctrl = true;\n } else if (/^s(hift)?$/i.test(mod)) {\n shift = true;\n } else if (/^mod$/i.test(mod)) {\n if (isiOS() || isMacOS()) {\n meta = true;\n } else {\n ctrl = true;\n }\n } else {\n throw new Error(`Unrecognized modifier name: ${mod}`);\n }\n }\n if (alt) {\n result = `Alt-${result}`;\n }\n if (ctrl) {\n result = `Ctrl-${result}`;\n }\n if (meta) {\n result = `Meta-${result}`;\n }\n if (shift) {\n result = `Shift-${result}`;\n }\n return result;\n}\nvar keyboardShortcut = (name) => ({ editor, view, tr, dispatch }) => {\n const keys = normalizeKeyName(name).split(/-(?!$)/);\n const key = keys.find((item) => ![\"Alt\", \"Ctrl\", \"Meta\", \"Shift\"].includes(item));\n const event = new KeyboardEvent(\"keydown\", {\n key: key === \"Space\" ? \" \" : key,\n altKey: keys.includes(\"Alt\"),\n ctrlKey: keys.includes(\"Ctrl\"),\n metaKey: keys.includes(\"Meta\"),\n shiftKey: keys.includes(\"Shift\"),\n bubbles: true,\n cancelable: true\n });\n const capturedTransaction = editor.captureTransaction(() => {\n view.someProp(\"handleKeyDown\", (f) => f(view, event));\n });\n capturedTransaction == null ? void 0 : capturedTransaction.steps.forEach((step) => {\n const newStep = step.map(tr.mapping);\n if (newStep && dispatch) {\n tr.maybeStep(newStep);\n }\n });\n return true;\n};\n\n// src/commands/lift.ts\nimport { lift as originalLift } from \"@tiptap/pm/commands\";\nvar lift = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n const isActive2 = isNodeActive(state, type, attributes);\n if (!isActive2) {\n return false;\n }\n return originalLift(state, dispatch);\n};\n\n// src/commands/liftEmptyBlock.ts\nimport { liftEmptyBlock as originalLiftEmptyBlock } from \"@tiptap/pm/commands\";\nvar liftEmptyBlock = () => ({ state, dispatch }) => {\n return originalLiftEmptyBlock(state, dispatch);\n};\n\n// src/commands/liftListItem.ts\nimport { liftListItem as originalLiftListItem } from \"@tiptap/pm/schema-list\";\nvar liftListItem = (typeOrName) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalLiftListItem(type)(state, dispatch);\n};\n\n// src/commands/newlineInCode.ts\nimport { newlineInCode as originalNewlineInCode } from \"@tiptap/pm/commands\";\nvar newlineInCode = () => ({ state, dispatch }) => {\n return originalNewlineInCode(state, dispatch);\n};\n\n// src/utilities/deleteProps.ts\nfunction deleteProps(obj, propOrProps) {\n const props = typeof propOrProps === \"string\" ? [propOrProps] : propOrProps;\n return Object.keys(obj).reduce((newObj, prop) => {\n if (!props.includes(prop)) {\n newObj[prop] = obj[prop];\n }\n return newObj;\n }, {});\n}\n\n// src/commands/resetAttributes.ts\nvar resetAttributes = (typeOrName, attributes) => ({ tr, state, dispatch }) => {\n let nodeType = null;\n let markType = null;\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === \"string\" ? typeOrName : typeOrName.name,\n state.schema\n );\n if (!schemaType) {\n return false;\n }\n if (schemaType === \"node\") {\n nodeType = getNodeType(typeOrName, state.schema);\n }\n if (schemaType === \"mark\") {\n markType = getMarkType(typeOrName, state.schema);\n }\n if (dispatch) {\n tr.selection.ranges.forEach((range) => {\n state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, pos) => {\n if (nodeType && nodeType === node.type) {\n tr.setNodeMarkup(pos, void 0, deleteProps(node.attrs, attributes));\n }\n if (markType && node.marks.length) {\n node.marks.forEach((mark) => {\n if (markType === mark.type) {\n tr.addMark(pos, pos + node.nodeSize, markType.create(deleteProps(mark.attrs, attributes)));\n }\n });\n }\n });\n });\n }\n return true;\n};\n\n// src/commands/scrollIntoView.ts\nvar scrollIntoView = () => ({ tr, dispatch }) => {\n if (dispatch) {\n tr.scrollIntoView();\n }\n return true;\n};\n\n// src/commands/selectAll.ts\nimport { AllSelection } from \"@tiptap/pm/state\";\nvar selectAll = () => ({ tr, dispatch }) => {\n if (dispatch) {\n const selection = new AllSelection(tr.doc);\n tr.setSelection(selection);\n }\n return true;\n};\n\n// src/commands/selectNodeBackward.ts\nimport { selectNodeBackward as originalSelectNodeBackward } from \"@tiptap/pm/commands\";\nvar selectNodeBackward = () => ({ state, dispatch }) => {\n return originalSelectNodeBackward(state, dispatch);\n};\n\n// src/commands/selectNodeForward.ts\nimport { selectNodeForward as originalSelectNodeForward } from \"@tiptap/pm/commands\";\nvar selectNodeForward = () => ({ state, dispatch }) => {\n return originalSelectNodeForward(state, dispatch);\n};\n\n// src/commands/selectParentNode.ts\nimport { selectParentNode as originalSelectParentNode } from \"@tiptap/pm/commands\";\nvar selectParentNode = () => ({ state, dispatch }) => {\n return originalSelectParentNode(state, dispatch);\n};\n\n// src/commands/selectTextblockEnd.ts\nimport { selectTextblockEnd as originalSelectTextblockEnd } from \"@tiptap/pm/commands\";\nvar selectTextblockEnd = () => ({ state, dispatch }) => {\n return originalSelectTextblockEnd(state, dispatch);\n};\n\n// src/commands/selectTextblockStart.ts\nimport { selectTextblockStart as originalSelectTextblockStart } from \"@tiptap/pm/commands\";\nvar selectTextblockStart = () => ({ state, dispatch }) => {\n return originalSelectTextblockStart(state, dispatch);\n};\n\n// src/commands/setContent.ts\nvar setContent = (content, { errorOnInvalidContent, emitUpdate = true, parseOptions = {} } = {}) => ({ editor, tr, dispatch, commands }) => {\n const { doc } = tr;\n if (parseOptions.preserveWhitespace !== \"full\") {\n const document2 = createDocument(content, editor.schema, parseOptions, {\n errorOnInvalidContent: errorOnInvalidContent != null ? errorOnInvalidContent : editor.options.enableContentCheck\n });\n if (dispatch) {\n tr.replaceWith(0, doc.content.size, document2).setMeta(\"preventUpdate\", !emitUpdate);\n }\n return true;\n }\n if (dispatch) {\n tr.setMeta(\"preventUpdate\", !emitUpdate);\n }\n return commands.insertContentAt({ from: 0, to: doc.content.size }, content, {\n parseOptions,\n errorOnInvalidContent: errorOnInvalidContent != null ? errorOnInvalidContent : editor.options.enableContentCheck\n });\n};\n\n// src/commands/setMark.ts\nfunction canSetMark(state, tr, newMarkType) {\n var _a;\n const { selection } = tr;\n let cursor = null;\n if (isTextSelection(selection)) {\n cursor = selection.$cursor;\n }\n if (cursor) {\n const currentMarks = (_a = state.storedMarks) != null ? _a : cursor.marks();\n return !!newMarkType.isInSet(currentMarks) || !currentMarks.some((mark) => mark.type.excludes(newMarkType));\n }\n const { ranges } = selection;\n return ranges.some(({ $from, $to }) => {\n let someNodeSupportsMark = $from.depth === 0 ? state.doc.inlineContent && state.doc.type.allowsMarkType(newMarkType) : false;\n state.doc.nodesBetween($from.pos, $to.pos, (node, _pos, parent) => {\n if (someNodeSupportsMark) {\n return false;\n }\n if (node.isInline) {\n const parentAllowsMarkType = !parent || parent.type.allowsMarkType(newMarkType);\n const currentMarksAllowMarkType = !!newMarkType.isInSet(node.marks) || !node.marks.some((otherMark) => otherMark.type.excludes(newMarkType));\n someNodeSupportsMark = parentAllowsMarkType && currentMarksAllowMarkType;\n }\n return !someNodeSupportsMark;\n });\n return someNodeSupportsMark;\n });\n}\nvar setMark = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n const { selection } = tr;\n const { empty, ranges } = selection;\n const type = getMarkType(typeOrName, state.schema);\n if (dispatch) {\n if (empty) {\n const oldAttributes = getMarkAttributes(state, type);\n tr.addStoredMark(\n type.create({\n ...oldAttributes,\n ...attributes\n })\n );\n } else {\n ranges.forEach((range) => {\n const from = range.$from.pos;\n const to = range.$to.pos;\n state.doc.nodesBetween(from, to, (node, pos) => {\n const trimmedFrom = Math.max(pos, from);\n const trimmedTo = Math.min(pos + node.nodeSize, to);\n const someHasMark = node.marks.find((mark) => mark.type === type);\n if (someHasMark) {\n node.marks.forEach((mark) => {\n if (type === mark.type) {\n tr.addMark(\n trimmedFrom,\n trimmedTo,\n type.create({\n ...mark.attrs,\n ...attributes\n })\n );\n }\n });\n } else {\n tr.addMark(trimmedFrom, trimmedTo, type.create(attributes));\n }\n });\n });\n }\n }\n return canSetMark(state, tr, type);\n};\n\n// src/commands/setMeta.ts\nvar setMeta = (key, value) => ({ tr }) => {\n tr.setMeta(key, value);\n return true;\n};\n\n// src/commands/setNode.ts\nimport { setBlockType } from \"@tiptap/pm/commands\";\nvar setNode = (typeOrName, attributes = {}) => ({ state, dispatch, chain }) => {\n const type = getNodeType(typeOrName, state.schema);\n let attributesToCopy;\n if (state.selection.$anchor.sameParent(state.selection.$head)) {\n attributesToCopy = state.selection.$anchor.parent.attrs;\n }\n if (!type.isTextblock) {\n console.warn('[tiptap warn]: Currently \"setNode()\" only supports text block nodes.');\n return false;\n }\n return chain().command(({ commands }) => {\n const canSetBlock = setBlockType(type, { ...attributesToCopy, ...attributes })(state);\n if (canSetBlock) {\n return true;\n }\n return commands.clearNodes();\n }).command(({ state: updatedState }) => {\n return setBlockType(type, { ...attributesToCopy, ...attributes })(updatedState, dispatch);\n }).run();\n};\n\n// src/commands/setNodeSelection.ts\nimport { NodeSelection as NodeSelection2 } from \"@tiptap/pm/state\";\nvar setNodeSelection = (position) => ({ tr, dispatch }) => {\n if (dispatch) {\n const { doc } = tr;\n const from = minMax(position, 0, doc.content.size);\n const selection = NodeSelection2.create(doc, from);\n tr.setSelection(selection);\n }\n return true;\n};\n\n// src/commands/setTextSelection.ts\nimport { TextSelection as TextSelection5 } from \"@tiptap/pm/state\";\nvar setTextSelection = (position) => ({ tr, dispatch }) => {\n if (dispatch) {\n const { doc } = tr;\n const { from, to } = typeof position === \"number\" ? { from: position, to: position } : position;\n const minPos = TextSelection5.atStart(doc).from;\n const maxPos = TextSelection5.atEnd(doc).to;\n const resolvedFrom = minMax(from, minPos, maxPos);\n const resolvedEnd = minMax(to, minPos, maxPos);\n const selection = TextSelection5.create(doc, resolvedFrom, resolvedEnd);\n tr.setSelection(selection);\n }\n return true;\n};\n\n// src/commands/sinkListItem.ts\nimport { sinkListItem as originalSinkListItem } from \"@tiptap/pm/schema-list\";\nvar sinkListItem = (typeOrName) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalSinkListItem(type)(state, dispatch);\n};\n\n// src/commands/splitBlock.ts\nimport { NodeSelection as NodeSelection3, TextSelection as TextSelection6 } from \"@tiptap/pm/state\";\nimport { canSplit } from \"@tiptap/pm/transform\";\nfunction ensureMarks(state, splittableMarks) {\n const marks = state.storedMarks || state.selection.$to.parentOffset && state.selection.$from.marks();\n if (marks) {\n const filteredMarks = marks.filter((mark) => splittableMarks == null ? void 0 : splittableMarks.includes(mark.type.name));\n state.tr.ensureMarks(filteredMarks);\n }\n}\nvar splitBlock = ({ keepMarks = true } = {}) => ({ tr, state, dispatch, editor }) => {\n const { selection, doc } = tr;\n const { $from, $to } = selection;\n const extensionAttributes = editor.extensionManager.attributes;\n const newAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs);\n if (selection instanceof NodeSelection3 && selection.node.isBlock) {\n if (!$from.parentOffset || !canSplit(doc, $from.pos)) {\n return false;\n }\n if (dispatch) {\n if (keepMarks) {\n ensureMarks(state, editor.extensionManager.splittableMarks);\n }\n tr.split($from.pos).scrollIntoView();\n }\n return true;\n }\n if (!$from.parent.isBlock) {\n return false;\n }\n const atEnd = $to.parentOffset === $to.parent.content.size;\n const deflt = $from.depth === 0 ? void 0 : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)));\n let types = atEnd && deflt ? [\n {\n type: deflt,\n attrs: newAttributes\n }\n ] : void 0;\n let can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types);\n if (!types && !can && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : void 0)) {\n can = true;\n types = deflt ? [\n {\n type: deflt,\n attrs: newAttributes\n }\n ] : void 0;\n }\n if (dispatch) {\n if (can) {\n if (selection instanceof TextSelection6) {\n tr.deleteSelection();\n }\n tr.split(tr.mapping.map($from.pos), 1, types);\n if (deflt && !atEnd && !$from.parentOffset && $from.parent.type !== deflt) {\n const first2 = tr.mapping.map($from.before());\n const $first = tr.doc.resolve(first2);\n if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {\n tr.setNodeMarkup(tr.mapping.map($from.before()), deflt);\n }\n }\n }\n if (keepMarks) {\n ensureMarks(state, editor.extensionManager.splittableMarks);\n }\n tr.scrollIntoView();\n }\n return can;\n};\n\n// src/commands/splitListItem.ts\nimport { Fragment as Fragment5, Slice } from \"@tiptap/pm/model\";\nimport { TextSelection as TextSelection7 } from \"@tiptap/pm/state\";\nimport { canSplit as canSplit2 } from \"@tiptap/pm/transform\";\nvar splitListItem = (typeOrName, overrideAttrs = {}) => ({ tr, state, dispatch, editor }) => {\n var _a;\n const type = getNodeType(typeOrName, state.schema);\n const { $from, $to } = state.selection;\n const node = state.selection.node;\n if (node && node.isBlock || $from.depth < 2 || !$from.sameParent($to)) {\n return false;\n }\n const grandParent = $from.node(-1);\n if (grandParent.type !== type) {\n return false;\n }\n const extensionAttributes = editor.extensionManager.attributes;\n if ($from.parent.content.size === 0 && $from.node(-1).childCount === $from.indexAfter(-1)) {\n if ($from.depth === 2 || $from.node(-3).type !== type || $from.index(-2) !== $from.node(-2).childCount - 1) {\n return false;\n }\n if (dispatch) {\n let wrap = Fragment5.empty;\n const depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d -= 1) {\n wrap = Fragment5.from($from.node(d).copy(wrap));\n }\n const depthAfter = (\n // eslint-disable-next-line no-nested-ternary\n $from.indexAfter(-1) < $from.node(-2).childCount ? 1 : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3\n );\n const newNextTypeAttributes2 = {\n ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n ...overrideAttrs\n };\n const nextType2 = ((_a = type.contentMatch.defaultType) == null ? void 0 : _a.createAndFill(newNextTypeAttributes2)) || void 0;\n wrap = wrap.append(Fragment5.from(type.createAndFill(null, nextType2) || void 0));\n const start = $from.before($from.depth - (depthBefore - 1));\n tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0));\n let sel = -1;\n tr.doc.nodesBetween(start, tr.doc.content.size, (n, pos) => {\n if (sel > -1) {\n return false;\n }\n if (n.isTextblock && n.content.size === 0) {\n sel = pos + 1;\n }\n });\n if (sel > -1) {\n tr.setSelection(TextSelection7.near(tr.doc.resolve(sel)));\n }\n tr.scrollIntoView();\n }\n return true;\n }\n const nextType = $to.pos === $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n const newTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, grandParent.type.name, grandParent.attrs),\n ...overrideAttrs\n };\n const newNextTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n ...overrideAttrs\n };\n tr.delete($from.pos, $to.pos);\n const types = nextType ? [\n { type, attrs: newTypeAttributes },\n { type: nextType, attrs: newNextTypeAttributes }\n ] : [{ type, attrs: newTypeAttributes }];\n if (!canSplit2(tr.doc, $from.pos, 2)) {\n return false;\n }\n if (dispatch) {\n const { selection, storedMarks } = state;\n const { splittableMarks } = editor.extensionManager;\n const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();\n tr.split($from.pos, 2, types).scrollIntoView();\n if (!marks || !dispatch) {\n return true;\n }\n const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n }\n return true;\n};\n\n// src/commands/toggleList.ts\nimport { canJoin } from \"@tiptap/pm/transform\";\nvar joinListBackwards = (tr, listType) => {\n const list = findParentNode((node) => node.type === listType)(tr.selection);\n if (!list) {\n return true;\n }\n const before = tr.doc.resolve(Math.max(0, list.pos - 1)).before(list.depth);\n if (before === void 0) {\n return true;\n }\n const nodeBefore = tr.doc.nodeAt(before);\n const canJoinBackwards = list.node.type === (nodeBefore == null ? void 0 : nodeBefore.type) && canJoin(tr.doc, list.pos);\n if (!canJoinBackwards) {\n return true;\n }\n tr.join(list.pos);\n return true;\n};\nvar joinListForwards = (tr, listType) => {\n const list = findParentNode((node) => node.type === listType)(tr.selection);\n if (!list) {\n return true;\n }\n const after = tr.doc.resolve(list.start).after(list.depth);\n if (after === void 0) {\n return true;\n }\n const nodeAfter = tr.doc.nodeAt(after);\n const canJoinForwards = list.node.type === (nodeAfter == null ? void 0 : nodeAfter.type) && canJoin(tr.doc, after);\n if (!canJoinForwards) {\n return true;\n }\n tr.join(after);\n return true;\n};\nvar toggleList = (listTypeOrName, itemTypeOrName, keepMarks, attributes = {}) => ({ editor, tr, state, dispatch, chain, commands, can }) => {\n const { extensions, splittableMarks } = editor.extensionManager;\n const listType = getNodeType(listTypeOrName, state.schema);\n const itemType = getNodeType(itemTypeOrName, state.schema);\n const { selection, storedMarks } = state;\n const { $from, $to } = selection;\n const range = $from.blockRange($to);\n const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();\n if (!range) {\n return false;\n }\n const parentList = findParentNode((node) => isList(node.type.name, extensions))(selection);\n if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\n if (parentList.node.type === listType) {\n return commands.liftListItem(itemType);\n }\n if (isList(parentList.node.type.name, extensions) && listType.validContent(parentList.node.content) && dispatch) {\n return chain().command(() => {\n tr.setNodeMarkup(parentList.pos, listType);\n return true;\n }).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run();\n }\n }\n if (!keepMarks || !marks || !dispatch) {\n return chain().command(() => {\n const canWrapInList = can().wrapInList(listType, attributes);\n if (canWrapInList) {\n return true;\n }\n return commands.clearNodes();\n }).wrapInList(listType, attributes).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run();\n }\n return chain().command(() => {\n const canWrapInList = can().wrapInList(listType, attributes);\n const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n if (canWrapInList) {\n return true;\n }\n return commands.clearNodes();\n }).wrapInList(listType, attributes).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run();\n};\n\n// src/commands/toggleMark.ts\nvar toggleMark = (typeOrName, attributes = {}, options = {}) => ({ state, commands }) => {\n const { extendEmptyMarkRange = false } = options;\n const type = getMarkType(typeOrName, state.schema);\n const isActive2 = isMarkActive(state, type, attributes);\n if (isActive2) {\n return commands.unsetMark(type, { extendEmptyMarkRange });\n }\n return commands.setMark(type, attributes);\n};\n\n// src/commands/toggleNode.ts\nvar toggleNode = (typeOrName, toggleTypeOrName, attributes = {}) => ({ state, commands }) => {\n const type = getNodeType(typeOrName, state.schema);\n const toggleType = getNodeType(toggleTypeOrName, state.schema);\n const isActive2 = isNodeActive(state, type, attributes);\n let attributesToCopy;\n if (state.selection.$anchor.sameParent(state.selection.$head)) {\n attributesToCopy = state.selection.$anchor.parent.attrs;\n }\n if (isActive2) {\n return commands.setNode(toggleType, attributesToCopy);\n }\n return commands.setNode(type, { ...attributesToCopy, ...attributes });\n};\n\n// src/commands/toggleWrap.ts\nvar toggleWrap = (typeOrName, attributes = {}) => ({ state, commands }) => {\n const type = getNodeType(typeOrName, state.schema);\n const isActive2 = isNodeActive(state, type, attributes);\n if (isActive2) {\n return commands.lift(type);\n }\n return commands.wrapIn(type, attributes);\n};\n\n// src/commands/undoInputRule.ts\nvar undoInputRule = () => ({ state, dispatch }) => {\n const plugins = state.plugins;\n for (let i = 0; i < plugins.length; i += 1) {\n const plugin = plugins[i];\n let undoable;\n if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n if (dispatch) {\n const tr = state.tr;\n const toUndo = undoable.transform;\n for (let j = toUndo.steps.length - 1; j >= 0; j -= 1) {\n tr.step(toUndo.steps[j].invert(toUndo.docs[j]));\n }\n if (undoable.text) {\n const marks = tr.doc.resolve(undoable.from).marks();\n tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));\n } else {\n tr.delete(undoable.from, undoable.to);\n }\n }\n return true;\n }\n }\n return false;\n};\n\n// src/commands/unsetAllMarks.ts\nvar unsetAllMarks = () => ({ tr, dispatch }) => {\n const { selection } = tr;\n const { empty, ranges } = selection;\n if (empty) {\n return true;\n }\n if (dispatch) {\n ranges.forEach((range) => {\n tr.removeMark(range.$from.pos, range.$to.pos);\n });\n }\n return true;\n};\n\n// src/commands/unsetMark.ts\nvar unsetMark = (typeOrName, options = {}) => ({ tr, state, dispatch }) => {\n var _a;\n const { extendEmptyMarkRange = false } = options;\n const { selection } = tr;\n const type = getMarkType(typeOrName, state.schema);\n const { $from, empty, ranges } = selection;\n if (!dispatch) {\n return true;\n }\n if (empty && extendEmptyMarkRange) {\n let { from, to } = selection;\n const attrs = (_a = $from.marks().find((mark) => mark.type === type)) == null ? void 0 : _a.attrs;\n const range = getMarkRange($from, type, attrs);\n if (range) {\n from = range.from;\n to = range.to;\n }\n tr.removeMark(from, to, type);\n } else {\n ranges.forEach((range) => {\n tr.removeMark(range.$from.pos, range.$to.pos, type);\n });\n }\n tr.removeStoredMark(type);\n return true;\n};\n\n// src/commands/updateAttributes.ts\nvar updateAttributes = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n let nodeType = null;\n let markType = null;\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === \"string\" ? typeOrName : typeOrName.name,\n state.schema\n );\n if (!schemaType) {\n return false;\n }\n if (schemaType === \"node\") {\n nodeType = getNodeType(typeOrName, state.schema);\n }\n if (schemaType === \"mark\") {\n markType = getMarkType(typeOrName, state.schema);\n }\n if (dispatch) {\n tr.selection.ranges.forEach((range) => {\n const from = range.$from.pos;\n const to = range.$to.pos;\n let lastPos;\n let lastNode;\n let trimmedFrom;\n let trimmedTo;\n if (tr.selection.empty) {\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (nodeType && nodeType === node.type) {\n trimmedFrom = Math.max(pos, from);\n trimmedTo = Math.min(pos + node.nodeSize, to);\n lastPos = pos;\n lastNode = node;\n }\n });\n } else {\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (pos < from && nodeType && nodeType === node.type) {\n trimmedFrom = Math.max(pos, from);\n trimmedTo = Math.min(pos + node.nodeSize, to);\n lastPos = pos;\n lastNode = node;\n }\n if (pos >= from && pos <= to) {\n if (nodeType && nodeType === node.type) {\n tr.setNodeMarkup(pos, void 0, {\n ...node.attrs,\n ...attributes\n });\n }\n if (markType && node.marks.length) {\n node.marks.forEach((mark) => {\n if (markType === mark.type) {\n const trimmedFrom2 = Math.max(pos, from);\n const trimmedTo2 = Math.min(pos + node.nodeSize, to);\n tr.addMark(\n trimmedFrom2,\n trimmedTo2,\n markType.create({\n ...mark.attrs,\n ...attributes\n })\n );\n }\n });\n }\n }\n });\n }\n if (lastNode) {\n if (lastPos !== void 0) {\n tr.setNodeMarkup(lastPos, void 0, {\n ...lastNode.attrs,\n ...attributes\n });\n }\n if (markType && lastNode.marks.length) {\n lastNode.marks.forEach((mark) => {\n if (markType === mark.type) {\n tr.addMark(\n trimmedFrom,\n trimmedTo,\n markType.create({\n ...mark.attrs,\n ...attributes\n })\n );\n }\n });\n }\n }\n });\n }\n return true;\n};\n\n// src/commands/wrapIn.ts\nimport { wrapIn as originalWrapIn } from \"@tiptap/pm/commands\";\nvar wrapIn = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalWrapIn(type, attributes)(state, dispatch);\n};\n\n// src/commands/wrapInList.ts\nimport { wrapInList as originalWrapInList } from \"@tiptap/pm/schema-list\";\nvar wrapInList = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalWrapInList(type, attributes)(state, dispatch);\n};\n\n// src/extensions/commands.ts\nvar Commands = Extension.create({\n name: \"commands\",\n addCommands() {\n return {\n ...commands_exports\n };\n }\n});\n\n// src/extensions/delete.ts\nimport { RemoveMarkStep } from \"@tiptap/pm/transform\";\nvar Delete = Extension.create({\n name: \"delete\",\n onUpdate({ transaction, appendedTransactions }) {\n var _a, _b, _c;\n const callback = () => {\n var _a2, _b2, _c2, _d;\n if ((_d = (_c2 = (_b2 = (_a2 = this.editor.options.coreExtensionOptions) == null ? void 0 : _a2.delete) == null ? void 0 : _b2.filterTransaction) == null ? void 0 : _c2.call(_b2, transaction)) != null ? _d : transaction.getMeta(\"y-sync$\")) {\n return;\n }\n const nextTransaction = combineTransactionSteps(transaction.before, [transaction, ...appendedTransactions]);\n const changes = getChangedRanges(nextTransaction);\n changes.forEach((change) => {\n if (nextTransaction.mapping.mapResult(change.oldRange.from).deletedAfter && nextTransaction.mapping.mapResult(change.oldRange.to).deletedBefore) {\n nextTransaction.before.nodesBetween(change.oldRange.from, change.oldRange.to, (node, from) => {\n const to = from + node.nodeSize - 2;\n const isFullyWithinRange = change.oldRange.from <= from && to <= change.oldRange.to;\n this.editor.emit(\"delete\", {\n type: \"node\",\n node,\n from,\n to,\n newFrom: nextTransaction.mapping.map(from),\n newTo: nextTransaction.mapping.map(to),\n deletedRange: change.oldRange,\n newRange: change.newRange,\n partial: !isFullyWithinRange,\n editor: this.editor,\n transaction,\n combinedTransform: nextTransaction\n });\n });\n }\n });\n const mapping = nextTransaction.mapping;\n nextTransaction.steps.forEach((step, index) => {\n var _a3, _b3;\n if (step instanceof RemoveMarkStep) {\n const newStart = mapping.slice(index).map(step.from, -1);\n const newEnd = mapping.slice(index).map(step.to);\n const oldStart = mapping.invert().map(newStart, -1);\n const oldEnd = mapping.invert().map(newEnd);\n const foundBeforeMark = (_a3 = nextTransaction.doc.nodeAt(newStart - 1)) == null ? void 0 : _a3.marks.some((mark) => mark.eq(step.mark));\n const foundAfterMark = (_b3 = nextTransaction.doc.nodeAt(newEnd)) == null ? void 0 : _b3.marks.some((mark) => mark.eq(step.mark));\n this.editor.emit(\"delete\", {\n type: \"mark\",\n mark: step.mark,\n from: step.from,\n to: step.to,\n deletedRange: {\n from: oldStart,\n to: oldEnd\n },\n newRange: {\n from: newStart,\n to: newEnd\n },\n partial: Boolean(foundAfterMark || foundBeforeMark),\n editor: this.editor,\n transaction,\n combinedTransform: nextTransaction\n });\n }\n });\n };\n if ((_c = (_b = (_a = this.editor.options.coreExtensionOptions) == null ? void 0 : _a.delete) == null ? void 0 : _b.async) != null ? _c : true) {\n setTimeout(callback, 0);\n } else {\n callback();\n }\n }\n});\n\n// src/extensions/drop.ts\nimport { Plugin as Plugin4, PluginKey as PluginKey2 } from \"@tiptap/pm/state\";\nvar Drop = Extension.create({\n name: \"drop\",\n addProseMirrorPlugins() {\n return [\n new Plugin4({\n key: new PluginKey2(\"tiptapDrop\"),\n props: {\n handleDrop: (_, e, slice, moved) => {\n this.editor.emit(\"drop\", {\n editor: this.editor,\n event: e,\n slice,\n moved\n });\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/editable.ts\nimport { Plugin as Plugin5, PluginKey as PluginKey3 } from \"@tiptap/pm/state\";\nvar Editable = Extension.create({\n name: \"editable\",\n addProseMirrorPlugins() {\n return [\n new Plugin5({\n key: new PluginKey3(\"editable\"),\n props: {\n editable: () => this.editor.options.editable\n }\n })\n ];\n }\n});\n\n// src/extensions/focusEvents.ts\nimport { Plugin as Plugin6, PluginKey as PluginKey4 } from \"@tiptap/pm/state\";\nvar focusEventsPluginKey = new PluginKey4(\"focusEvents\");\nvar FocusEvents = Extension.create({\n name: \"focusEvents\",\n addProseMirrorPlugins() {\n const { editor } = this;\n return [\n new Plugin6({\n key: focusEventsPluginKey,\n props: {\n handleDOMEvents: {\n focus: (view, event) => {\n editor.isFocused = true;\n const transaction = editor.state.tr.setMeta(\"focus\", { event }).setMeta(\"addToHistory\", false);\n view.dispatch(transaction);\n return false;\n },\n blur: (view, event) => {\n editor.isFocused = false;\n const transaction = editor.state.tr.setMeta(\"blur\", { event }).setMeta(\"addToHistory\", false);\n view.dispatch(transaction);\n return false;\n }\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/keymap.ts\nimport { Plugin as Plugin7, PluginKey as PluginKey5, Selection as Selection3 } from \"@tiptap/pm/state\";\nvar Keymap = Extension.create({\n name: \"keymap\",\n addKeyboardShortcuts() {\n const handleBackspace = () => this.editor.commands.first(({ commands }) => [\n () => commands.undoInputRule(),\n // maybe convert first text block node to default node\n () => commands.command(({ tr }) => {\n const { selection, doc } = tr;\n const { empty, $anchor } = selection;\n const { pos, parent } = $anchor;\n const $parentPos = $anchor.parent.isTextblock && pos > 0 ? tr.doc.resolve(pos - 1) : $anchor;\n const parentIsIsolating = $parentPos.parent.type.spec.isolating;\n const parentPos = $anchor.pos - $anchor.parentOffset;\n const isAtStart = parentIsIsolating && $parentPos.parent.childCount === 1 ? parentPos === $anchor.pos : Selection3.atStart(doc).from === pos;\n if (!empty || !parent.type.isTextblock || parent.textContent.length || !isAtStart || isAtStart && $anchor.parent.type.name === \"paragraph\") {\n return false;\n }\n return commands.clearNodes();\n }),\n () => commands.deleteSelection(),\n () => commands.joinBackward(),\n () => commands.selectNodeBackward()\n ]);\n const handleDelete = () => this.editor.commands.first(({ commands }) => [\n () => commands.deleteSelection(),\n () => commands.deleteCurrentNode(),\n () => commands.joinForward(),\n () => commands.selectNodeForward()\n ]);\n const handleEnter = () => this.editor.commands.first(({ commands }) => [\n () => commands.newlineInCode(),\n () => commands.createParagraphNear(),\n () => commands.liftEmptyBlock(),\n () => commands.splitBlock()\n ]);\n const baseKeymap = {\n Enter: handleEnter,\n \"Mod-Enter\": () => this.editor.commands.exitCode(),\n Backspace: handleBackspace,\n \"Mod-Backspace\": handleBackspace,\n \"Shift-Backspace\": handleBackspace,\n Delete: handleDelete,\n \"Mod-Delete\": handleDelete,\n \"Mod-a\": () => this.editor.commands.selectAll()\n };\n const pcKeymap = {\n ...baseKeymap\n };\n const macKeymap = {\n ...baseKeymap,\n \"Ctrl-h\": handleBackspace,\n \"Alt-Backspace\": handleBackspace,\n \"Ctrl-d\": handleDelete,\n \"Ctrl-Alt-Backspace\": handleDelete,\n \"Alt-Delete\": handleDelete,\n \"Alt-d\": handleDelete,\n \"Ctrl-a\": () => this.editor.commands.selectTextblockStart(),\n \"Ctrl-e\": () => this.editor.commands.selectTextblockEnd()\n };\n if (isiOS() || isMacOS()) {\n return macKeymap;\n }\n return pcKeymap;\n },\n addProseMirrorPlugins() {\n return [\n // With this plugin we check if the whole document was selected and deleted.\n // In this case we will additionally call `clearNodes()` to convert e.g. a heading\n // to a paragraph if necessary.\n // This is an alternative to ProseMirror's `AllSelection`, which doesn’t work well\n // with many other commands.\n new Plugin7({\n key: new PluginKey5(\"clearDocument\"),\n appendTransaction: (transactions, oldState, newState) => {\n if (transactions.some((tr2) => tr2.getMeta(\"composition\"))) {\n return;\n }\n const docChanges = transactions.some((transaction) => transaction.docChanged) && !oldState.doc.eq(newState.doc);\n const ignoreTr = transactions.some((transaction) => transaction.getMeta(\"preventClearDocument\"));\n if (!docChanges || ignoreTr) {\n return;\n }\n const { empty, from, to } = oldState.selection;\n const allFrom = Selection3.atStart(oldState.doc).from;\n const allEnd = Selection3.atEnd(oldState.doc).to;\n const allWasSelected = from === allFrom && to === allEnd;\n if (empty || !allWasSelected) {\n return;\n }\n const isEmpty = isNodeEmpty(newState.doc);\n if (!isEmpty) {\n return;\n }\n const tr = newState.tr;\n const state = createChainableState({\n state: newState,\n transaction: tr\n });\n const { commands } = new CommandManager({\n editor: this.editor,\n state\n });\n commands.clearNodes();\n if (!tr.steps.length) {\n return;\n }\n return tr;\n }\n })\n ];\n }\n});\n\n// src/extensions/paste.ts\nimport { Plugin as Plugin8, PluginKey as PluginKey6 } from \"@tiptap/pm/state\";\nvar Paste = Extension.create({\n name: \"paste\",\n addProseMirrorPlugins() {\n return [\n new Plugin8({\n key: new PluginKey6(\"tiptapPaste\"),\n props: {\n handlePaste: (_view, e, slice) => {\n this.editor.emit(\"paste\", {\n editor: this.editor,\n event: e,\n slice\n });\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/tabindex.ts\nimport { Plugin as Plugin9, PluginKey as PluginKey7 } from \"@tiptap/pm/state\";\nvar Tabindex = Extension.create({\n name: \"tabindex\",\n addProseMirrorPlugins() {\n return [\n new Plugin9({\n key: new PluginKey7(\"tabindex\"),\n props: {\n attributes: () => this.editor.isEditable ? { tabindex: \"0\" } : {}\n }\n })\n ];\n }\n});\n\n// src/NodePos.ts\nvar NodePos = class _NodePos {\n constructor(pos, editor, isBlock = false, node = null) {\n this.currentNode = null;\n this.actualDepth = null;\n this.isBlock = isBlock;\n this.resolvedPos = pos;\n this.editor = editor;\n this.currentNode = node;\n }\n get name() {\n return this.node.type.name;\n }\n get node() {\n return this.currentNode || this.resolvedPos.node();\n }\n get element() {\n return this.editor.view.domAtPos(this.pos).node;\n }\n get depth() {\n var _a;\n return (_a = this.actualDepth) != null ? _a : this.resolvedPos.depth;\n }\n get pos() {\n return this.resolvedPos.pos;\n }\n get content() {\n return this.node.content;\n }\n set content(content) {\n let from = this.from;\n let to = this.to;\n if (this.isBlock) {\n if (this.content.size === 0) {\n console.error(`You can\\u2019t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);\n return;\n }\n from = this.from + 1;\n to = this.to - 1;\n }\n this.editor.commands.insertContentAt({ from, to }, content);\n }\n get attributes() {\n return this.node.attrs;\n }\n get textContent() {\n return this.node.textContent;\n }\n get size() {\n return this.node.nodeSize;\n }\n get from() {\n if (this.isBlock) {\n return this.pos;\n }\n return this.resolvedPos.start(this.resolvedPos.depth);\n }\n get range() {\n return {\n from: this.from,\n to: this.to\n };\n }\n get to() {\n if (this.isBlock) {\n return this.pos + this.size;\n }\n return this.resolvedPos.end(this.resolvedPos.depth) + (this.node.isText ? 0 : 1);\n }\n get parent() {\n if (this.depth === 0) {\n return null;\n }\n const parentPos = this.resolvedPos.start(this.resolvedPos.depth - 1);\n const $pos = this.resolvedPos.doc.resolve(parentPos);\n return new _NodePos($pos, this.editor);\n }\n get before() {\n let $pos = this.resolvedPos.doc.resolve(this.from - (this.isBlock ? 1 : 2));\n if ($pos.depth !== this.depth) {\n $pos = this.resolvedPos.doc.resolve(this.from - 3);\n }\n return new _NodePos($pos, this.editor);\n }\n get after() {\n let $pos = this.resolvedPos.doc.resolve(this.to + (this.isBlock ? 2 : 1));\n if ($pos.depth !== this.depth) {\n $pos = this.resolvedPos.doc.resolve(this.to + 3);\n }\n return new _NodePos($pos, this.editor);\n }\n get children() {\n const children = [];\n this.node.content.forEach((node, offset) => {\n const isBlock = node.isBlock && !node.isTextblock;\n const isNonTextAtom = node.isAtom && !node.isText;\n const targetPos = this.pos + offset + (isNonTextAtom ? 0 : 1);\n if (targetPos < 0 || targetPos > this.resolvedPos.doc.nodeSize - 2) {\n return;\n }\n const $pos = this.resolvedPos.doc.resolve(targetPos);\n if (!isBlock && $pos.depth <= this.depth) {\n return;\n }\n const childNodePos = new _NodePos($pos, this.editor, isBlock, isBlock ? node : null);\n if (isBlock) {\n childNodePos.actualDepth = this.depth + 1;\n }\n children.push(new _NodePos($pos, this.editor, isBlock, isBlock ? node : null));\n });\n return children;\n }\n get firstChild() {\n return this.children[0] || null;\n }\n get lastChild() {\n const children = this.children;\n return children[children.length - 1] || null;\n }\n closest(selector, attributes = {}) {\n let node = null;\n let currentNode = this.parent;\n while (currentNode && !node) {\n if (currentNode.node.type.name === selector) {\n if (Object.keys(attributes).length > 0) {\n const nodeAttributes = currentNode.node.attrs;\n const attrKeys = Object.keys(attributes);\n for (let index = 0; index < attrKeys.length; index += 1) {\n const key = attrKeys[index];\n if (nodeAttributes[key] !== attributes[key]) {\n break;\n }\n }\n } else {\n node = currentNode;\n }\n }\n currentNode = currentNode.parent;\n }\n return node;\n }\n querySelector(selector, attributes = {}) {\n return this.querySelectorAll(selector, attributes, true)[0] || null;\n }\n querySelectorAll(selector, attributes = {}, firstItemOnly = false) {\n let nodes = [];\n if (!this.children || this.children.length === 0) {\n return nodes;\n }\n const attrKeys = Object.keys(attributes);\n this.children.forEach((childPos) => {\n if (firstItemOnly && nodes.length > 0) {\n return;\n }\n if (childPos.node.type.name === selector) {\n const doesAllAttributesMatch = attrKeys.every((key) => attributes[key] === childPos.node.attrs[key]);\n if (doesAllAttributesMatch) {\n nodes.push(childPos);\n }\n }\n if (firstItemOnly && nodes.length > 0) {\n return;\n }\n nodes = nodes.concat(childPos.querySelectorAll(selector, attributes, firstItemOnly));\n });\n return nodes;\n }\n setAttribute(attributes) {\n const { tr } = this.editor.state;\n tr.setNodeMarkup(this.from, void 0, {\n ...this.node.attrs,\n ...attributes\n });\n this.editor.view.dispatch(tr);\n }\n};\n\n// src/style.ts\nvar 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: 0 !important;\n height: 0 !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// src/utilities/createStyleTag.ts\nfunction createStyleTag(style2, nonce, suffix) {\n const tiptapStyleTag = document.querySelector(`style[data-tiptap-style${suffix ? `-${suffix}` : \"\"}]`);\n if (tiptapStyleTag !== null) {\n return tiptapStyleTag;\n }\n const styleNode = document.createElement(\"style\");\n if (nonce) {\n styleNode.setAttribute(\"nonce\", nonce);\n }\n styleNode.setAttribute(`data-tiptap-style${suffix ? `-${suffix}` : \"\"}`, \"\");\n styleNode.innerHTML = style2;\n document.getElementsByTagName(\"head\")[0].appendChild(styleNode);\n return styleNode;\n}\n\n// src/Editor.ts\nvar Editor = class extends EventEmitter {\n constructor(options = {}) {\n super();\n this.css = null;\n this.editorView = null;\n this.isFocused = false;\n /**\n * The editor is considered initialized after the `create` event has been emitted.\n */\n this.isInitialized = false;\n this.extensionStorage = {};\n /**\n * A unique ID for this editor instance.\n */\n this.instanceId = Math.random().toString(36).slice(2, 9);\n this.options = {\n element: typeof document !== \"undefined\" ? document.createElement(\"div\") : null,\n content: \"\",\n injectCSS: true,\n injectNonce: void 0,\n extensions: [],\n autofocus: false,\n editable: true,\n editorProps: {},\n parseOptions: {},\n coreExtensionOptions: {},\n enableInputRules: true,\n enablePasteRules: true,\n enableCoreExtensions: true,\n enableContentCheck: false,\n emitContentError: false,\n onBeforeCreate: () => null,\n onCreate: () => null,\n onUpdate: () => null,\n onSelectionUpdate: () => null,\n onTransaction: () => null,\n onFocus: () => null,\n onBlur: () => null,\n onDestroy: () => null,\n onContentError: ({ error }) => {\n throw error;\n },\n onPaste: () => null,\n onDrop: () => null,\n onDelete: () => null\n };\n this.isCapturingTransaction = false;\n this.capturedTransaction = null;\n this.setOptions(options);\n this.createExtensionManager();\n this.createCommandManager();\n this.createSchema();\n this.on(\"beforeCreate\", this.options.onBeforeCreate);\n this.emit(\"beforeCreate\", { editor: this });\n this.on(\"contentError\", this.options.onContentError);\n this.on(\"create\", this.options.onCreate);\n this.on(\"update\", this.options.onUpdate);\n this.on(\"selectionUpdate\", this.options.onSelectionUpdate);\n this.on(\"transaction\", this.options.onTransaction);\n this.on(\"focus\", this.options.onFocus);\n this.on(\"blur\", this.options.onBlur);\n this.on(\"destroy\", this.options.onDestroy);\n this.on(\"drop\", ({ event, slice, moved }) => this.options.onDrop(event, slice, moved));\n this.on(\"paste\", ({ event, slice }) => this.options.onPaste(event, slice));\n this.on(\"delete\", this.options.onDelete);\n const initialDoc = this.createDoc();\n const selection = resolveFocusPosition(initialDoc, this.options.autofocus);\n this.editorState = EditorState.create({\n doc: initialDoc,\n schema: this.schema,\n selection: selection || void 0\n });\n if (this.options.element) {\n this.mount(this.options.element);\n }\n }\n /**\n * Attach the editor to the DOM, creating a new editor view.\n */\n mount(el) {\n if (typeof document === \"undefined\") {\n throw new Error(\n `[tiptap error]: The editor cannot be mounted because there is no 'document' defined in this environment.`\n );\n }\n this.createView(el);\n window.setTimeout(() => {\n if (this.isDestroyed) {\n return;\n }\n this.commands.focus(this.options.autofocus);\n this.emit(\"create\", { editor: this });\n this.isInitialized = true;\n }, 0);\n }\n /**\n * Remove the editor from the DOM, but still allow remounting at a different point in time\n */\n unmount() {\n var _a;\n if (this.editorView) {\n const dom = this.editorView.dom;\n if (dom == null ? void 0 : dom.editor) {\n delete dom.editor;\n }\n this.editorView.destroy();\n }\n this.editorView = null;\n this.isInitialized = false;\n (_a = this.css) == null ? void 0 : _a.remove();\n this.css = null;\n }\n /**\n * Returns the editor storage.\n */\n get storage() {\n return this.extensionStorage;\n }\n /**\n * An object of all registered commands.\n */\n get commands() {\n return this.commandManager.commands;\n }\n /**\n * Create a command chain to call multiple commands at once.\n */\n chain() {\n return this.commandManager.chain();\n }\n /**\n * Check if a command or a command chain can be executed. Without executing it.\n */\n can() {\n return this.commandManager.can();\n }\n /**\n * Inject CSS styles.\n */\n injectCSS() {\n if (this.options.injectCSS && typeof document !== \"undefined\") {\n this.css = createStyleTag(style, this.options.injectNonce);\n }\n }\n /**\n * Update editor options.\n *\n * @param options A list of options\n */\n setOptions(options = {}) {\n this.options = {\n ...this.options,\n ...options\n };\n if (!this.editorView || !this.state || this.isDestroyed) {\n return;\n }\n if (this.options.editorProps) {\n this.view.setProps(this.options.editorProps);\n }\n this.view.updateState(this.state);\n }\n /**\n * Update editable state of the editor.\n */\n setEditable(editable, emitUpdate = true) {\n this.setOptions({ editable });\n if (emitUpdate) {\n this.emit(\"update\", { editor: this, transaction: this.state.tr, appendedTransactions: [] });\n }\n }\n /**\n * Returns whether the editor is editable.\n */\n get isEditable() {\n return this.options.editable && this.view && this.view.editable;\n }\n /**\n * Returns the editor state.\n */\n get view() {\n if (this.editorView) {\n return this.editorView;\n }\n return new Proxy(\n {\n state: this.editorState,\n updateState: (state) => {\n this.editorState = state;\n },\n dispatch: (tr) => {\n this.editorState = this.state.apply(tr);\n },\n // Stub some commonly accessed properties to prevent errors\n composing: false,\n dragging: null,\n editable: true,\n isDestroyed: false\n },\n {\n get: (obj, key) => {\n if (key === \"state\") {\n return this.editorState;\n }\n if (key in obj) {\n return Reflect.get(obj, key);\n }\n throw new Error(\n `[tiptap error]: The editor view is not available. Cannot access view['${key}']. The editor may not be mounted yet.`\n );\n }\n }\n );\n }\n /**\n * Returns the editor state.\n */\n get state() {\n if (this.editorView) {\n this.editorState = this.view.state;\n }\n return this.editorState;\n }\n /**\n * Register a ProseMirror plugin.\n *\n * @param plugin A ProseMirror plugin\n * @param handlePlugins Control how to merge the plugin into the existing plugins.\n * @returns The new editor state\n */\n registerPlugin(plugin, handlePlugins) {\n const plugins = isFunction(handlePlugins) ? handlePlugins(plugin, [...this.state.plugins]) : [...this.state.plugins, plugin];\n const state = this.state.reconfigure({ plugins });\n this.view.updateState(state);\n return state;\n }\n /**\n * Unregister a ProseMirror plugin.\n *\n * @param nameOrPluginKeyToRemove The plugins name\n * @returns The new editor state or undefined if the editor is destroyed\n */\n unregisterPlugin(nameOrPluginKeyToRemove) {\n if (this.isDestroyed) {\n return void 0;\n }\n const prevPlugins = this.state.plugins;\n let plugins = prevPlugins;\n [].concat(nameOrPluginKeyToRemove).forEach((nameOrPluginKey) => {\n const name = typeof nameOrPluginKey === \"string\" ? `${nameOrPluginKey}$` : nameOrPluginKey.key;\n plugins = plugins.filter((plugin) => !plugin.key.startsWith(name));\n });\n if (prevPlugins.length === plugins.length) {\n return void 0;\n }\n const state = this.state.reconfigure({\n plugins\n });\n this.view.updateState(state);\n return state;\n }\n /**\n * Creates an extension manager.\n */\n createExtensionManager() {\n var _a, _b;\n const coreExtensions = this.options.enableCoreExtensions ? [\n Editable,\n ClipboardTextSerializer.configure({\n blockSeparator: (_b = (_a = this.options.coreExtensionOptions) == null ? void 0 : _a.clipboardTextSerializer) == null ? void 0 : _b.blockSeparator\n }),\n Commands,\n FocusEvents,\n Keymap,\n Tabindex,\n Drop,\n Paste,\n Delete\n ].filter((ext) => {\n if (typeof this.options.enableCoreExtensions === \"object\") {\n return this.options.enableCoreExtensions[ext.name] !== false;\n }\n return true;\n }) : [];\n const allExtensions = [...coreExtensions, ...this.options.extensions].filter((extension) => {\n return [\"extension\", \"node\", \"mark\"].includes(extension == null ? void 0 : extension.type);\n });\n this.extensionManager = new ExtensionManager(allExtensions, this);\n }\n /**\n * Creates an command manager.\n */\n createCommandManager() {\n this.commandManager = new CommandManager({\n editor: this\n });\n }\n /**\n * Creates a ProseMirror schema.\n */\n createSchema() {\n this.schema = this.extensionManager.schema;\n }\n /**\n * Creates the initial document.\n */\n createDoc() {\n let doc;\n try {\n doc = createDocument(this.options.content, this.schema, this.options.parseOptions, {\n errorOnInvalidContent: this.options.enableContentCheck\n });\n } catch (e) {\n if (!(e instanceof Error) || ![\"[tiptap error]: Invalid JSON content\", \"[tiptap error]: Invalid HTML content\"].includes(e.message)) {\n throw e;\n }\n this.emit(\"contentError\", {\n editor: this,\n error: e,\n disableCollaboration: () => {\n if (\"collaboration\" in this.storage && typeof this.storage.collaboration === \"object\" && this.storage.collaboration) {\n ;\n this.storage.collaboration.isDisabled = true;\n }\n this.options.extensions = this.options.extensions.filter((extension) => extension.name !== \"collaboration\");\n this.createExtensionManager();\n }\n });\n doc = createDocument(this.options.content, this.schema, this.options.parseOptions, {\n errorOnInvalidContent: false\n });\n }\n return doc;\n }\n /**\n * Creates a ProseMirror view.\n */\n createView(element) {\n var _a;\n this.editorView = new EditorView(element, {\n ...this.options.editorProps,\n attributes: {\n // add `role=\"textbox\"` to the editor element\n role: \"textbox\",\n ...(_a = this.options.editorProps) == null ? void 0 : _a.attributes\n },\n dispatchTransaction: this.dispatchTransaction.bind(this),\n state: this.editorState\n });\n const newState = this.state.reconfigure({\n plugins: this.extensionManager.plugins\n });\n this.view.updateState(newState);\n this.createNodeViews();\n this.prependClass();\n this.injectCSS();\n const dom = this.view.dom;\n dom.editor = this;\n }\n /**\n * Creates all node and mark views.\n */\n createNodeViews() {\n if (this.view.isDestroyed) {\n return;\n }\n this.view.setProps({\n markViews: this.extensionManager.markViews,\n nodeViews: this.extensionManager.nodeViews\n });\n }\n /**\n * Prepend class name to element.\n */\n prependClass() {\n this.view.dom.className = `tiptap ${this.view.dom.className}`;\n }\n captureTransaction(fn) {\n this.isCapturingTransaction = true;\n fn();\n this.isCapturingTransaction = false;\n const tr = this.capturedTransaction;\n this.capturedTransaction = null;\n return tr;\n }\n /**\n * The callback over which to send transactions (state updates) produced by the view.\n *\n * @param transaction An editor state transaction\n */\n dispatchTransaction(transaction) {\n if (this.view.isDestroyed) {\n return;\n }\n if (this.isCapturingTransaction) {\n if (!this.capturedTransaction) {\n this.capturedTransaction = transaction;\n return;\n }\n transaction.steps.forEach((step) => {\n var _a;\n return (_a = this.capturedTransaction) == null ? void 0 : _a.step(step);\n });\n return;\n }\n const { state, transactions } = this.state.applyTransaction(transaction);\n const selectionHasChanged = !this.state.selection.eq(state.selection);\n const rootTrWasApplied = transactions.includes(transaction);\n const prevState = this.state;\n this.emit(\"beforeTransaction\", {\n editor: this,\n transaction,\n nextState: state\n });\n if (!rootTrWasApplied) {\n return;\n }\n this.view.updateState(state);\n this.emit(\"transaction\", {\n editor: this,\n transaction,\n appendedTransactions: transactions.slice(1)\n });\n if (selectionHasChanged) {\n this.emit(\"selectionUpdate\", {\n editor: this,\n transaction\n });\n }\n const mostRecentFocusTr = transactions.findLast((tr) => tr.getMeta(\"focus\") || tr.getMeta(\"blur\"));\n const focus2 = mostRecentFocusTr == null ? void 0 : mostRecentFocusTr.getMeta(\"focus\");\n const blur2 = mostRecentFocusTr == null ? void 0 : mostRecentFocusTr.getMeta(\"blur\");\n if (focus2) {\n this.emit(\"focus\", {\n editor: this,\n event: focus2.event,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n transaction: mostRecentFocusTr\n });\n }\n if (blur2) {\n this.emit(\"blur\", {\n editor: this,\n event: blur2.event,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n transaction: mostRecentFocusTr\n });\n }\n if (transaction.getMeta(\"preventUpdate\") || !transactions.some((tr) => tr.docChanged) || prevState.doc.eq(state.doc)) {\n return;\n }\n this.emit(\"update\", {\n editor: this,\n transaction,\n appendedTransactions: transactions.slice(1)\n });\n }\n /**\n * Get attributes of the currently selected node or mark.\n */\n getAttributes(nameOrType) {\n return getAttributes(this.state, nameOrType);\n }\n isActive(nameOrAttributes, attributesOrUndefined) {\n const name = typeof nameOrAttributes === \"string\" ? nameOrAttributes : null;\n const attributes = typeof nameOrAttributes === \"string\" ? attributesOrUndefined : nameOrAttributes;\n return isActive(this.state, name, attributes);\n }\n /**\n * Get the document as JSON.\n */\n getJSON() {\n return this.state.doc.toJSON();\n }\n /**\n * Get the document as HTML.\n */\n getHTML() {\n return getHTMLFromFragment(this.state.doc.content, this.schema);\n }\n /**\n * Get the document as text.\n */\n getText(options) {\n const { blockSeparator = \"\\n\\n\", textSerializers = {} } = options || {};\n return getText(this.state.doc, {\n blockSeparator,\n textSerializers: {\n ...getTextSerializersFromSchema(this.schema),\n ...textSerializers\n }\n });\n }\n /**\n * Check if there is no content.\n */\n get isEmpty() {\n return isNodeEmpty(this.state.doc);\n }\n /**\n * Destroy the editor.\n */\n destroy() {\n this.emit(\"destroy\");\n this.unmount();\n this.removeAllListeners();\n }\n /**\n * Check if the editor is already destroyed.\n */\n get isDestroyed() {\n var _a, _b;\n return (_b = (_a = this.editorView) == null ? void 0 : _a.isDestroyed) != null ? _b : true;\n }\n $node(selector, attributes) {\n var _a;\n return ((_a = this.$doc) == null ? void 0 : _a.querySelector(selector, attributes)) || null;\n }\n $nodes(selector, attributes) {\n var _a;\n return ((_a = this.$doc) == null ? void 0 : _a.querySelectorAll(selector, attributes)) || null;\n }\n $pos(pos) {\n const $pos = this.state.doc.resolve(pos);\n return new NodePos($pos, this);\n }\n get $doc() {\n return this.$pos(0);\n }\n};\n\n// src/inputRules/markInputRule.ts\nfunction markInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match);\n if (attributes === false || attributes === null) {\n return null;\n }\n const { tr } = state;\n const captureGroup = match[match.length - 1];\n const fullMatch = match[0];\n if (captureGroup) {\n const startSpaces = fullMatch.search(/\\S/);\n const textStart = range.from + fullMatch.indexOf(captureGroup);\n const textEnd = textStart + captureGroup.length;\n const excludedMarks = getMarksBetween(range.from, range.to, state.doc).filter((item) => {\n const excluded = item.mark.type.excluded;\n return excluded.find((type) => type === config.type && type !== item.mark.type);\n }).filter((item) => item.to > textStart);\n if (excludedMarks.length) {\n return null;\n }\n if (textEnd < range.to) {\n tr.delete(textEnd, range.to);\n }\n if (textStart > range.from) {\n tr.delete(range.from + startSpaces, textStart);\n }\n const markEnd = range.from + startSpaces + captureGroup.length;\n tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\n tr.removeStoredMark(config.type);\n }\n }\n });\n}\n\n// src/inputRules/nodeInputRule.ts\nfunction nodeInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match) || {};\n const { tr } = state;\n const start = range.from;\n let end = range.to;\n const newNode = config.type.create(attributes);\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n let matchStart = start + offset;\n if (matchStart > end) {\n matchStart = end;\n } else {\n end = matchStart + match[1].length;\n }\n const lastChar = match[0][match[0].length - 1];\n tr.insertText(lastChar, start + match[0].length - 1);\n tr.replaceWith(matchStart, end, newNode);\n } else if (match[0]) {\n const insertionStart = config.type.isInline ? start : start - 1;\n tr.insert(insertionStart, config.type.create(attributes)).delete(tr.mapping.map(start), tr.mapping.map(end));\n }\n tr.scrollIntoView();\n }\n });\n}\n\n// src/inputRules/textblockTypeInputRule.ts\nfunction textblockTypeInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const $start = state.doc.resolve(range.from);\n const attributes = callOrReturn(config.getAttributes, void 0, match) || {};\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), config.type)) {\n return null;\n }\n state.tr.delete(range.from, range.to).setBlockType(range.from, range.from, config.type, attributes);\n }\n });\n}\n\n// src/inputRules/textInputRule.ts\nfunction textInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n let insert = config.replace;\n let start = range.from;\n const end = range.to;\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n const cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n state.tr.insertText(insert, start, end);\n }\n });\n}\n\n// src/inputRules/wrappingInputRule.ts\nimport { canJoin as canJoin2, findWrapping } from \"@tiptap/pm/transform\";\nfunction wrappingInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match, chain }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match) || {};\n const tr = state.tr.delete(range.from, range.to);\n const $start = tr.doc.resolve(range.from);\n const blockRange = $start.blockRange();\n const wrapping = blockRange && findWrapping(blockRange, config.type, attributes);\n if (!wrapping) {\n return null;\n }\n tr.wrap(blockRange, wrapping);\n if (config.keepMarks && config.editor) {\n const { selection, storedMarks } = state;\n const { splittableMarks } = config.editor.extensionManager;\n const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();\n if (marks) {\n const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n }\n }\n if (config.keepAttributes) {\n const nodeType = config.type.name === \"bulletList\" || config.type.name === \"orderedList\" ? \"listItem\" : \"taskList\";\n chain().updateAttributes(nodeType, attributes).run();\n }\n const before = tr.doc.resolve(range.from - 1).nodeBefore;\n if (before && before.type === config.type && canJoin2(tr.doc, range.from - 1) && (!config.joinPredicate || config.joinPredicate(match, before))) {\n tr.join(range.from - 1);\n }\n }\n });\n}\n\n// src/jsx-runtime.ts\nfunction Fragment6(props) {\n return props.children;\n}\nvar h = (tag, attributes) => {\n if (tag === \"slot\") {\n return 0;\n }\n if (tag instanceof Function) {\n return tag(attributes);\n }\n const { children, ...rest } = attributes != null ? attributes : {};\n if (tag === \"svg\") {\n throw new Error(\"SVG elements are not supported in the JSX syntax, use the array syntax instead\");\n }\n return [tag, rest, children];\n};\n\n// src/utilities/canInsertNode.ts\nimport { NodeSelection as NodeSelection4 } from \"@tiptap/pm/state\";\nfunction canInsertNode(state, nodeType) {\n const { selection } = state;\n const { $from } = selection;\n if (selection instanceof NodeSelection4) {\n const index = $from.index();\n const parent = $from.parent;\n return parent.canReplaceWith(index, index + 1, nodeType);\n }\n let depth = $from.depth;\n while (depth >= 0) {\n const index = $from.index(depth);\n const parent = $from.node(depth);\n const match = parent.contentMatchAt(index);\n if (match.matchType(nodeType)) {\n return true;\n }\n depth -= 1;\n }\n return false;\n}\n\n// src/utilities/escapeForRegEx.ts\nfunction escapeForRegEx(string) {\n return string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n}\n\n// src/utilities/isString.ts\nfunction isString(value) {\n return typeof value === \"string\";\n}\n\n// src/MarkView.ts\nfunction updateMarkViewAttributes(checkMark, editor, attrs = {}) {\n const { state } = editor;\n const { doc, tr } = state;\n const thisMark = checkMark;\n doc.descendants((node, pos) => {\n const from = tr.mapping.map(pos);\n const to = tr.mapping.map(pos) + node.nodeSize;\n let foundMark = null;\n node.marks.forEach((mark) => {\n if (mark !== thisMark) {\n return false;\n }\n foundMark = mark;\n });\n if (!foundMark) {\n return;\n }\n let needsUpdate = false;\n Object.keys(attrs).forEach((k) => {\n if (attrs[k] !== foundMark.attrs[k]) {\n needsUpdate = true;\n }\n });\n if (needsUpdate) {\n const updatedMark = checkMark.type.create({\n ...checkMark.attrs,\n ...attrs\n });\n tr.removeMark(from, to, checkMark.type);\n tr.addMark(from, to, updatedMark);\n }\n });\n if (tr.docChanged) {\n editor.view.dispatch(tr);\n }\n}\nvar MarkView = class {\n constructor(component, props, options) {\n this.component = component;\n this.editor = props.editor;\n this.options = { ...options };\n this.mark = props.mark;\n this.HTMLAttributes = props.HTMLAttributes;\n }\n get dom() {\n return this.editor.view.dom;\n }\n get contentDOM() {\n return null;\n }\n /**\n * Update the attributes of the mark in the document.\n * @param attrs The attributes to update.\n */\n updateAttributes(attrs, checkMark) {\n updateMarkViewAttributes(checkMark || this.mark, this.editor, attrs);\n }\n ignoreMutation(mutation) {\n if (!this.dom || !this.contentDOM) {\n return true;\n }\n if (typeof this.options.ignoreMutation === \"function\") {\n return this.options.ignoreMutation({ mutation });\n }\n if (mutation.type === \"selection\") {\n return false;\n }\n if (this.dom.contains(mutation.target) && mutation.type === \"childList\" && (isiOS() || isAndroid()) && this.editor.isFocused) {\n const changedNodes = [...Array.from(mutation.addedNodes), ...Array.from(mutation.removedNodes)];\n if (changedNodes.every((node) => node.isContentEditable)) {\n return false;\n }\n }\n if (this.contentDOM === mutation.target && mutation.type === \"attributes\") {\n return true;\n }\n if (this.contentDOM.contains(mutation.target)) {\n return false;\n }\n return true;\n }\n};\n\n// src/Node.ts\nvar Node3 = class _Node extends Extendable {\n constructor() {\n super(...arguments);\n this.type = \"node\";\n }\n /**\n * Create a new Node instance\n * @param config - Node configuration object or a function that returns a configuration object\n */\n static create(config = {}) {\n const resolvedConfig = typeof config === \"function\" ? config() : config;\n return new _Node(resolvedConfig);\n }\n configure(options) {\n return super.configure(options);\n }\n extend(extendedConfig) {\n const resolvedConfig = typeof extendedConfig === \"function\" ? extendedConfig() : extendedConfig;\n return super.extend(resolvedConfig);\n }\n};\n\n// src/NodeView.ts\nimport { NodeSelection as NodeSelection5 } from \"@tiptap/pm/state\";\nvar NodeView = class {\n constructor(component, props, options) {\n this.isDragging = false;\n this.component = component;\n this.editor = props.editor;\n this.options = {\n stopEvent: null,\n ignoreMutation: null,\n ...options\n };\n this.extension = props.extension;\n this.node = props.node;\n this.decorations = props.decorations;\n this.innerDecorations = props.innerDecorations;\n this.view = props.view;\n this.HTMLAttributes = props.HTMLAttributes;\n this.getPos = props.getPos;\n this.mount();\n }\n mount() {\n return;\n }\n get dom() {\n return this.editor.view.dom;\n }\n get contentDOM() {\n return null;\n }\n onDragStart(event) {\n var _a, _b, _c, _d, _e, _f, _g;\n const { view } = this.editor;\n const target = event.target;\n const dragHandle = target.nodeType === 3 ? (_a = target.parentElement) == null ? void 0 : _a.closest(\"[data-drag-handle]\") : target.closest(\"[data-drag-handle]\");\n if (!this.dom || ((_b = this.contentDOM) == null ? void 0 : _b.contains(target)) || !dragHandle) {\n return;\n }\n let x = 0;\n let y = 0;\n if (this.dom !== dragHandle) {\n const domBox = this.dom.getBoundingClientRect();\n const handleBox = dragHandle.getBoundingClientRect();\n const offsetX = (_d = event.offsetX) != null ? _d : (_c = event.nativeEvent) == null ? void 0 : _c.offsetX;\n const offsetY = (_f = event.offsetY) != null ? _f : (_e = event.nativeEvent) == null ? void 0 : _e.offsetY;\n x = handleBox.x - domBox.x + offsetX;\n y = handleBox.y - domBox.y + offsetY;\n }\n const clonedNode = this.dom.cloneNode(true);\n (_g = event.dataTransfer) == null ? void 0 : _g.setDragImage(clonedNode, x, y);\n const pos = this.getPos();\n if (typeof pos !== \"number\") {\n return;\n }\n const selection = NodeSelection5.create(view.state.doc, pos);\n const transaction = view.state.tr.setSelection(selection);\n view.dispatch(transaction);\n }\n stopEvent(event) {\n var _a;\n if (!this.dom) {\n return false;\n }\n if (typeof this.options.stopEvent === \"function\") {\n return this.options.stopEvent({ event });\n }\n const target = event.target;\n const isInElement = this.dom.contains(target) && !((_a = this.contentDOM) == null ? void 0 : _a.contains(target));\n if (!isInElement) {\n return false;\n }\n const isDragEvent = event.type.startsWith(\"drag\");\n const isDropEvent = event.type === \"drop\";\n const isInput = [\"INPUT\", \"BUTTON\", \"SELECT\", \"TEXTAREA\"].includes(target.tagName) || target.isContentEditable;\n if (isInput && !isDropEvent && !isDragEvent) {\n return true;\n }\n const { isEditable } = this.editor;\n const { isDragging } = this;\n const isDraggable = !!this.node.type.spec.draggable;\n const isSelectable = NodeSelection5.isSelectable(this.node);\n const isCopyEvent = event.type === \"copy\";\n const isPasteEvent = event.type === \"paste\";\n const isCutEvent = event.type === \"cut\";\n const isClickEvent = event.type === \"mousedown\";\n if (!isDraggable && isSelectable && isDragEvent && event.target === this.dom) {\n event.preventDefault();\n }\n if (isDraggable && isDragEvent && !isDragging && event.target === this.dom) {\n event.preventDefault();\n return false;\n }\n if (isDraggable && isEditable && !isDragging && isClickEvent) {\n const dragHandle = target.closest(\"[data-drag-handle]\");\n const isValidDragHandle = dragHandle && (this.dom === dragHandle || this.dom.contains(dragHandle));\n if (isValidDragHandle) {\n this.isDragging = true;\n document.addEventListener(\n \"dragend\",\n () => {\n this.isDragging = false;\n },\n { once: true }\n );\n document.addEventListener(\n \"drop\",\n () => {\n this.isDragging = false;\n },\n { once: true }\n );\n document.addEventListener(\n \"mouseup\",\n () => {\n this.isDragging = false;\n },\n { once: true }\n );\n }\n }\n if (isDragging || isDropEvent || isCopyEvent || isPasteEvent || isCutEvent || isClickEvent && isSelectable) {\n return false;\n }\n return true;\n }\n /**\n * Called when a DOM [mutation](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) or a selection change happens within the view.\n * @return `false` if the editor should re-read the selection or re-parse the range around the mutation\n * @return `true` if it can safely be ignored.\n */\n ignoreMutation(mutation) {\n if (!this.dom || !this.contentDOM) {\n return true;\n }\n if (typeof this.options.ignoreMutation === \"function\") {\n return this.options.ignoreMutation({ mutation });\n }\n if (this.node.isLeaf || this.node.isAtom) {\n return true;\n }\n if (mutation.type === \"selection\") {\n return false;\n }\n if (this.dom.contains(mutation.target) && mutation.type === \"childList\" && (isiOS() || isAndroid()) && this.editor.isFocused) {\n const changedNodes = [...Array.from(mutation.addedNodes), ...Array.from(mutation.removedNodes)];\n if (changedNodes.every((node) => node.isContentEditable)) {\n return false;\n }\n }\n if (this.contentDOM === mutation.target && mutation.type === \"attributes\") {\n return true;\n }\n if (this.contentDOM.contains(mutation.target)) {\n return false;\n }\n return true;\n }\n /**\n * Update the attributes of the prosemirror node.\n */\n updateAttributes(attributes) {\n this.editor.commands.command(({ tr }) => {\n const pos = this.getPos();\n if (typeof pos !== \"number\") {\n return false;\n }\n tr.setNodeMarkup(pos, void 0, {\n ...this.node.attrs,\n ...attributes\n });\n return true;\n });\n }\n /**\n * Delete the node.\n */\n deleteNode() {\n const from = this.getPos();\n if (typeof from !== \"number\") {\n return;\n }\n const to = from + this.node.nodeSize;\n this.editor.commands.deleteRange({ from, to });\n }\n};\n\n// src/pasteRules/markPasteRule.ts\nfunction markPasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler: ({ state, range, match, pasteEvent }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match, pasteEvent);\n if (attributes === false || attributes === null) {\n return null;\n }\n const { tr } = state;\n const captureGroup = match[match.length - 1];\n const fullMatch = match[0];\n let markEnd = range.to;\n if (captureGroup) {\n const startSpaces = fullMatch.search(/\\S/);\n const textStart = range.from + fullMatch.indexOf(captureGroup);\n const textEnd = textStart + captureGroup.length;\n const excludedMarks = getMarksBetween(range.from, range.to, state.doc).filter((item) => {\n const excluded = item.mark.type.excluded;\n return excluded.find((type) => type === config.type && type !== item.mark.type);\n }).filter((item) => item.to > textStart);\n if (excludedMarks.length) {\n return null;\n }\n if (textEnd < range.to) {\n tr.delete(textEnd, range.to);\n }\n if (textStart > range.from) {\n tr.delete(range.from + startSpaces, textStart);\n }\n markEnd = range.from + startSpaces + captureGroup.length;\n tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\n tr.removeStoredMark(config.type);\n }\n }\n });\n}\n\n// src/pasteRules/nodePasteRule.ts\nfunction nodePasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler({ match, chain, range, pasteEvent }) {\n const attributes = callOrReturn(config.getAttributes, void 0, match, pasteEvent);\n const content = callOrReturn(config.getContent, void 0, attributes);\n if (attributes === false || attributes === null) {\n return null;\n }\n const node = { type: config.type.name, attrs: attributes };\n if (content) {\n node.content = content;\n }\n if (match.input) {\n chain().deleteRange(range).insertContentAt(range.from, node);\n }\n }\n });\n}\n\n// src/pasteRules/textPasteRule.ts\nfunction textPasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n let insert = config.replace;\n let start = range.from;\n const end = range.to;\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n const cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n state.tr.insertText(insert, start, end);\n }\n });\n}\n\n// src/Tracker.ts\nvar Tracker = class {\n constructor(transaction) {\n this.transaction = transaction;\n this.currentStep = this.transaction.steps.length;\n }\n map(position) {\n let deleted = false;\n const mappedPosition = this.transaction.steps.slice(this.currentStep).reduce((newPosition, step) => {\n const mapResult = step.getMap().mapResult(newPosition);\n if (mapResult.deleted) {\n deleted = true;\n }\n return mapResult.pos;\n }, position);\n return {\n position: mappedPosition,\n deleted\n };\n }\n};\nexport {\n CommandManager,\n Editor,\n Extension,\n Fragment6 as Fragment,\n InputRule,\n Mark,\n MarkView,\n Node3 as Node,\n NodePos,\n NodeView,\n PasteRule,\n Tracker,\n callOrReturn,\n canInsertNode,\n combineTransactionSteps,\n createChainableState,\n createDocument,\n h as createElement,\n createNodeFromContent,\n createStyleTag,\n defaultBlockAt,\n deleteProps,\n elementFromString,\n escapeForRegEx,\n extensions_exports as extensions,\n findChildren,\n findChildrenInRange,\n findDuplicates,\n findParentNode,\n findParentNodeClosestToPos,\n flattenExtensions,\n fromString,\n generateHTML,\n generateJSON,\n generateText,\n getAttributes,\n getAttributesFromExtensions,\n getChangedRanges,\n getDebugJSON,\n getExtensionField,\n getHTMLFromFragment,\n getMarkAttributes,\n getMarkRange,\n getMarkType,\n getMarksBetween,\n getNodeAtPosition,\n getNodeAttributes,\n getNodeType,\n getRenderedAttributes,\n getSchema,\n getSchemaByResolvedExtensions,\n getSchemaTypeByName,\n getSchemaTypeNameByName,\n getSplittedAttributes,\n getText,\n getTextBetween,\n getTextContentFromNodes,\n getTextSerializersFromSchema,\n h,\n injectExtensionAttributesToParseRule,\n inputRulesPlugin,\n isActive,\n isAndroid,\n isAtEndOfNode,\n isAtStartOfNode,\n isEmptyObject,\n isExtensionRulesEnabled,\n isFunction,\n isList,\n isMacOS,\n isMarkActive,\n isNodeActive,\n isNodeEmpty,\n isNodeSelection,\n isNumber,\n isPlainObject,\n isRegExp,\n isString,\n isTextSelection,\n isiOS,\n markInputRule,\n markPasteRule,\n mergeAttributes,\n mergeDeep,\n minMax,\n nodeInputRule,\n nodePasteRule,\n objectIncludes,\n pasteRulesPlugin,\n posToDOMRect,\n removeDuplicates,\n resolveExtensions,\n resolveFocusPosition,\n rewriteUnknownContent,\n selectionToInsertionEnd,\n sortExtensions,\n splitExtensions,\n textInputRule,\n textPasteRule,\n textblockTypeInputRule,\n updateMarkViewAttributes,\n wrappingInputRule\n};\n//# sourceMappingURL=index.js.map"],"names":["__defProp","Object","defineProperty","__export","target","all","name","get","enumerable","createChainableState","config","state","transaction","selection","doc","storedMarks","apply","bind","applyTransaction","plugins","schema","reconfigure","toJSON","tr","CommandManager","constructor","props","this","editor","rawCommands","extensionManager","commands","customState","hasCustomState","view","buildProps","fromEntries","entries","map","command2","args","callback","getMeta","dispatch","chain","createChain","can","createCan","startTr","shouldDispatch","callbacks","hasStartTransaction","push","run","every","combineTransactionSteps","oldDoc","transactions","transform","Transform","forEach","steps","step","removeWhitespaces","node","children","childNodes","i","length","child","nodeType","nodeValue","test","removeChild","elementFromString","value","window","Error","wrappedValue","html","DOMParser","parseFromString","body","createNodeFromContent","content","options","ProseMirrorNode","Fragment","slice","parseOptions","isTextContent","Array","isArray","fromArray","item","nodeFromJSON","errorOnInvalidContent","check","error","cause","console","warn","hasInvalidContent","invalidContent","contentCheckSchema","Schema","topNode","spec","marks","nodes","append","__tiptap__private__unknown__catch__all__node","group","parseDOM","tag","getAttrs","e","outerHTML","fromSchema","parseSlice","parse","parser","createDocument","defaultBlockAt","match","edgeCount","type","edge","isTextblock","hasRequiredAttrs","findParentNodeClosestToPos","$pos","predicate","depth","pos","before","start","findParentNode","$from","getExtensionField","extension","field","context","parent","isFunction","callOrReturn","splitExtensions","extensions","baseExtensions","filter","nodeExtensions","markExtensions","mergeAttributes","objects","reduce","items","mergedAttributes","key","valueClasses","String","split","existingClasses","insertClasses","valueClass","includes","join","newStyles","style2","trim","Boolean","existingStyles","styleMap","Map","property","val","part","set","from","getTextBetween","startNode","range","to","blockSeparator","textSerializers","text","nodesBetween","index","_a","isBlock","textSerializer","isText","Math","max","getTextSerializersFromSchema","toText","getMarkType","nameOrType","getMarkAttributes","typeOrName","empty","$head","mark","find","markItem","attrs","getNodeType","getSchemaTypeNameByName","removeDuplicates","array","by","JSON","stringify","seen","prototype","hasOwnProperty","call","getChangedRanges","mapping","changes","maps","stepMap","ranges","newStart","newEnd","oldStart","invert","oldEnd","oldRange","newRange","uniqueChanges","change","_","some","otherChange","simplifyChangedRanges","isRegExp","toString","objectIncludes","object1","object2","strict","keys","findMarkInSet","attributes","k","isMarkInSet","getMarkRange","childAfter","parentOffset","mark2","childBefore","startIndex","startPos","offset","endIndex","endPos","nodeSize","childCount","getMarksBetween","resolve","getNodeAtPosition","maxDepth","currentDepth","currentNode","getSplittedAttributes","extensionAttributes","typeName","extensionAttribute","attribute","keepOnSplit","isMarkActive","selectionRange","markRanges","$to","relativeFrom","relativeTo","min","matchedRange","markRange","sum","excludedRange","excludes","isNodeActive","nodeRanges","matchedNodeRanges","nodeRange","isAtEndOfNode","$anchor","parentNode","$parentPos","end","isAtStartOfNode","isList","storage","isNodeEmpty","checkChildren","ignoreWhitespace","isAtom","isLeaf","isContentEmpty","childNode","isTextSelection","TextSelection","minMax","resolveFocusPosition","position","selectionAtStart","Selection","atStart","selectionAtEnd","atEnd","minPos","maxPos","TextSelection2","create","size","selectionToInsertionEnd","startLen","bias","last","ReplaceStep","ReplaceAroundStep","_from","_to","_newFrom","newTo","setSelection","Selection2","near","InputRule","handler","isPlainObject","getType","getPrototypeOf","mergeDeep","source","output","Extendable","configure","extend","addOptions","extendedConfig","Mark","_Mark","super","arguments","resolvedConfig","handleExit","currentPos","currentMarks","m","removeMark","removeStoredMark","insertText","PasteRule","extensions_exports","ClipboardTextSerializer","Commands","Delete","Drop","Editable","FocusEvents","Keymap","Paste","Tabindex","focusEventsPluginKey","Extension","_Extension","addProseMirrorPlugins","Plugin3","PluginKey","clipboardTextSerializer","range2","commands_exports","blur","clearContent","clearNodes","command","createParagraphNear","cut","deleteCurrentNode","deleteNode","deleteRange","deleteSelection","enter","exitCode","extendMarkRange","first","focus","insertContent","insertContentAt","joinBackward","joinDown","joinForward","joinItemBackward","joinItemForward","joinTextblockBackward","joinTextblockForward","joinUp","keyboardShortcut","lift","liftEmptyBlock","liftListItem","newlineInCode","resetAttributes","scrollIntoView","selectAll","selectNodeBackward","selectNodeForward","selectParentNode","selectTextblockEnd","selectTextblockStart","setContent","setMark","setMeta","setNode","setNodeSelection","setTextSelection","sinkListItem","splitBlock","splitListItem","toggleList","toggleMark","toggleNode","toggleWrap","undoInputRule","unsetAllMarks","unsetMark","updateAttributes","wrapIn","wrapInList","requestAnimationFrame","isDestroyed","dom","getSelection","removeAllRanges","emitUpdate","$mappedFrom","$mappedTo","blockRange","targetLiftDepth","liftTarget","defaultType","contentMatchAt","setNodeMarkup","fn","originalCreateParagraphNear","originRange","targetPos","contentSlice","newPos","insert","TextSelection3","after","delete","originalDeleteSelection","originalExitCode","newSelection","TextSelection4","isAndroid","navigator","platform","userAgent","isiOS","document","delayedFocus","hasFocus","isSameSelection","eq","setStoredMarks","updateSelection","applyInputRules","applyPasteRules","emitContentError","emit","disableCollaboration","collaboration","isDisabled","preserveWhitespace","enableContentCheck","isOnlyTextContent","isOnlyBlockContent","code","newContent","v","Fragment4","fromSelectionAtStart","isTextSelection2","hasContent","replaceWith","originalJoinUp","originalJoinDown","originalJoinBackward","originalJoinForward","point","joinPoint","joinPoint2","originalCommand","originalCommand2","isMacOS","parts","alt","ctrl","shift","meta","result","mod","normalizeKeyName","event","KeyboardEvent","altKey","ctrlKey","metaKey","shiftKey","bubbles","cancelable","capturedTransaction","captureTransaction","someProp","f","newStep","maybeStep","originalLift","originalLiftEmptyBlock","originalLiftListItem","originalNewlineInCode","deleteProps","obj","propOrProps","newObj","prop","markType","schemaType","addMark","AllSelection","originalSelectNodeBackward","originalSelectNodeForward","originalSelectParentNode","originalSelectTextblockEnd","originalSelectTextblockStart","document2","oldAttributes","addStoredMark","trimmedFrom","trimmedTo","newMarkType","cursor","$cursor","isInSet","someNodeSupportsMark","inlineContent","allowsMarkType","_pos","isInline","parentAllowsMarkType","currentMarksAllowMarkType","otherMark","canSetMark","attributesToCopy","sameParent","setBlockType","updatedState","NodeSelection2","TextSelection5","resolvedFrom","resolvedEnd","originalSinkListItem","ensureMarks","splittableMarks","filteredMarks","keepMarks","newAttributes","NodeSelection3","canSplit","deflt","indexAfter","types","TextSelection6","first2","$first","canReplaceWith","overrideAttrs","grandParent","wrap","Fragment5","depthBefore","d","copy","depthAfter","newNextTypeAttributes2","nextType2","contentMatch","createAndFill","replace","Slice","sel","n","TextSelection7","nextType","newTypeAttributes","newNextTypeAttributes","canSplit2","joinListBackwards","listType","list","nodeBefore","nodeAt","canJoin","joinListForwards","nodeAfter","listTypeOrName","itemTypeOrName","itemType","parentList","validContent","canWrapInList","extendEmptyMarkRange","toggleTypeOrName","toggleType","isActive2","plugin","undoable","isInputRules","getState","toUndo","j","docs","lastPos","lastNode","trimmedFrom2","trimmedTo2","originalWrapIn","originalWrapInList","addCommands","onUpdate","appendedTransactions","_b","_c","_a2","_b2","_c2","_d","coreExtensionOptions","filterTransaction","nextTransaction","mapResult","deletedAfter","deletedBefore","isFullyWithinRange","newFrom","deletedRange","partial","combinedTransform","_a3","_b3","RemoveMarkStep","foundBeforeMark","foundAfterMark","async","setTimeout","Plugin4","PluginKey2","handleDrop","moved","Plugin5","PluginKey3","editable","PluginKey4","Plugin6","handleDOMEvents","isFocused","addKeyboardShortcuts","handleBackspace","parentIsIsolating","isolating","parentPos","isAtStart","Selection3","textContent","handleDelete","baseKeymap","Enter","Backspace","pcKeymap","macKeymap","Plugin7","PluginKey5","appendTransaction","oldState","newState","tr2","docChanges","docChanged","ignoreTr","allFrom","allEnd","Plugin8","PluginKey6","handlePaste","_view","Plugin9","PluginKey7","isEditable","tabindex","markInputRule","getAttributes","captureGroup","fullMatch","startSpaces","search","textStart","indexOf","textEnd","excluded","markEnd","textblockTypeInputRule","$start","wrappingInputRule","wrapping","findWrapping","keepAttributes","canJoin2","joinPredicate","Node3","_Node","markPasteRule","pasteEvent"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=(e,t)=>{if("slot"===e)return 0;if(e instanceof Function)return e(t);const{children:n,...r}=null!=t?t:{};if("svg"===e)throw new Error("SVG elements are not supported in the JSX syntax, use the array syntax instead");return[e,r,n]};export{e as createElement,e as h,e as jsx,e as jsxDEV,e as jsxs};
|
|
2
|
+
//# sourceMappingURL=jsx-runtime.mjs.map
|