|  |  |  |  | (function (global, factory) { | 
					
						
							|  |  |  |  |   typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@tiptap/extension-bubble-menu'), require('react'), require('@tiptap/core'), require('react-dom'), require('@tiptap/extension-floating-menu')) : | 
					
						
							|  |  |  |  |   typeof define === 'function' && define.amd ? define(['exports', '@tiptap/extension-bubble-menu', 'react', '@tiptap/core', 'react-dom', '@tiptap/extension-floating-menu'], factory) : | 
					
						
							|  |  |  |  |   (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@tiptap/react"] = {}, global.extensionBubbleMenu, global.React, global.core, global.ReactDOM, global.extensionFloatingMenu)); | 
					
						
							|  |  |  |  | })(this, (function (exports, extensionBubbleMenu, React, core, ReactDOM, extensionFloatingMenu) { 'use strict'; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   var React__default = /*#__PURE__*/_interopDefaultLegacy(React); | 
					
						
							|  |  |  |  |   var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   const BubbleMenu = (props) => { | 
					
						
							|  |  |  |  |       const [element, setElement] = React.useState(null); | 
					
						
							|  |  |  |  |       React.useEffect(() => { | 
					
						
							|  |  |  |  |           if (!element) { | 
					
						
							|  |  |  |  |               return; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           if (props.editor.isDestroyed) { | 
					
						
							|  |  |  |  |               return; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           const { pluginKey = 'bubbleMenu', editor, tippyOptions = {}, updateDelay, shouldShow = null, } = props; | 
					
						
							|  |  |  |  |           const plugin = extensionBubbleMenu.BubbleMenuPlugin({ | 
					
						
							|  |  |  |  |               updateDelay, | 
					
						
							|  |  |  |  |               editor, | 
					
						
							|  |  |  |  |               element, | 
					
						
							|  |  |  |  |               pluginKey, | 
					
						
							|  |  |  |  |               shouldShow, | 
					
						
							|  |  |  |  |               tippyOptions, | 
					
						
							|  |  |  |  |           }); | 
					
						
							|  |  |  |  |           editor.registerPlugin(plugin); | 
					
						
							|  |  |  |  |           return () => editor.unregisterPlugin(pluginKey); | 
					
						
							|  |  |  |  |       }, [props.editor, element]); | 
					
						
							|  |  |  |  |       return (React__default["default"].createElement("div", { ref: setElement, className: props.className, style: { visibility: 'hidden' } }, props.children)); | 
					
						
							|  |  |  |  |   }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   class Editor extends core.Editor { | 
					
						
							|  |  |  |  |       constructor() { | 
					
						
							|  |  |  |  |           super(...arguments); | 
					
						
							|  |  |  |  |           this.contentComponent = null; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   const Portals = ({ renderers }) => { | 
					
						
							|  |  |  |  |       return (React__default["default"].createElement(React__default["default"].Fragment, null, Object.entries(renderers).map(([key, renderer]) => { | 
					
						
							|  |  |  |  |           return ReactDOM__default["default"].createPortal(renderer.reactElement, renderer.element, key); | 
					
						
							|  |  |  |  |       }))); | 
					
						
							|  |  |  |  |   }; | 
					
						
							|  |  |  |  |   class PureEditorContent extends React__default["default"].Component { | 
					
						
							|  |  |  |  |       constructor(props) { | 
					
						
							|  |  |  |  |           super(props); | 
					
						
							|  |  |  |  |           this.editorContentRef = React__default["default"].createRef(); | 
					
						
							|  |  |  |  |           this.initialized = false; | 
					
						
							|  |  |  |  |           this.state = { | 
					
						
							|  |  |  |  |               renderers: {}, | 
					
						
							|  |  |  |  |           }; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       componentDidMount() { | 
					
						
							|  |  |  |  |           this.init(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       componentDidUpdate() { | 
					
						
							|  |  |  |  |           this.init(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       init() { | 
					
						
							|  |  |  |  |           const { editor } = this.props; | 
					
						
							|  |  |  |  |           if (editor && editor.options.element) { | 
					
						
							|  |  |  |  |               if (editor.contentComponent) { | 
					
						
							|  |  |  |  |                   return; | 
					
						
							|  |  |  |  |               } | 
					
						
							|  |  |  |  |               const element = this.editorContentRef.current; | 
					
						
							|  |  |  |  |               element.append(...editor.options.element.childNodes); | 
					
						
							|  |  |  |  |               editor.setOptions({ | 
					
						
							|  |  |  |  |                   element, | 
					
						
							|  |  |  |  |               }); | 
					
						
							|  |  |  |  |               editor.contentComponent = this; | 
					
						
							|  |  |  |  |               editor.createNodeViews(); | 
					
						
							|  |  |  |  |               this.initialized = true; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       maybeFlushSync(fn) { | 
					
						
							|  |  |  |  |           // Avoid calling flushSync until the editor is initialized.
 | 
					
						
							|  |  |  |  |           // Initialization happens during the componentDidMount or componentDidUpdate
 | 
					
						
							|  |  |  |  |           // lifecycle methods, and React doesn't allow calling flushSync from inside
 | 
					
						
							|  |  |  |  |           // a lifecycle method.
 | 
					
						
							|  |  |  |  |           if (this.initialized) { | 
					
						
							|  |  |  |  |               ReactDOM.flushSync(fn); | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           else { | 
					
						
							|  |  |  |  |               fn(); | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       setRenderer(id, renderer) { | 
					
						
							|  |  |  |  |           this.maybeFlushSync(() => { | 
					
						
							|  |  |  |  |               this.setState(({ renderers }) => ({ | 
					
						
							|  |  |  |  |                   renderers: { | 
					
						
							|  |  |  |  |                       ...renderers, | 
					
						
							|  |  |  |  |                       [id]: renderer, | 
					
						
							|  |  |  |  |                   }, | 
					
						
							|  |  |  |  |               })); | 
					
						
							|  |  |  |  |           }); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       removeRenderer(id) { | 
					
						
							|  |  |  |  |           this.maybeFlushSync(() => { | 
					
						
							|  |  |  |  |               this.setState(({ renderers }) => { | 
					
						
							|  |  |  |  |                   const nextRenderers = { ...renderers }; | 
					
						
							|  |  |  |  |                   delete nextRenderers[id]; | 
					
						
							|  |  |  |  |                   return { renderers: nextRenderers }; | 
					
						
							|  |  |  |  |               }); | 
					
						
							|  |  |  |  |           }); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       componentWillUnmount() { | 
					
						
							|  |  |  |  |           const { editor } = this.props; | 
					
						
							|  |  |  |  |           if (!editor) { | 
					
						
							|  |  |  |  |               return; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           if (!editor.isDestroyed) { | 
					
						
							|  |  |  |  |               editor.view.setProps({ | 
					
						
							|  |  |  |  |                   nodeViews: {}, | 
					
						
							|  |  |  |  |               }); | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           editor.contentComponent = null; | 
					
						
							|  |  |  |  |           if (!editor.options.element.firstChild) { | 
					
						
							|  |  |  |  |               return; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           const newElement = document.createElement('div'); | 
					
						
							|  |  |  |  |           newElement.append(...editor.options.element.childNodes); | 
					
						
							|  |  |  |  |           editor.setOptions({ | 
					
						
							|  |  |  |  |               element: newElement, | 
					
						
							|  |  |  |  |           }); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       render() { | 
					
						
							|  |  |  |  |           const { editor, ...rest } = this.props; | 
					
						
							|  |  |  |  |           return (React__default["default"].createElement(React__default["default"].Fragment, null, | 
					
						
							|  |  |  |  |               React__default["default"].createElement("div", { ref: this.editorContentRef, ...rest }), | 
					
						
							|  |  |  |  |               React__default["default"].createElement(Portals, { renderers: this.state.renderers }))); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   const EditorContent = React__default["default"].memo(PureEditorContent); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   const FloatingMenu = (props) => { | 
					
						
							|  |  |  |  |       const [element, setElement] = React.useState(null); | 
					
						
							|  |  |  |  |       React.useEffect(() => { | 
					
						
							|  |  |  |  |           if (!element) { | 
					
						
							|  |  |  |  |               return; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           if (props.editor.isDestroyed) { | 
					
						
							|  |  |  |  |               return; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           const { pluginKey = 'floatingMenu', editor, tippyOptions = {}, shouldShow = null, } = props; | 
					
						
							|  |  |  |  |           const plugin = extensionFloatingMenu.FloatingMenuPlugin({ | 
					
						
							|  |  |  |  |               pluginKey, | 
					
						
							|  |  |  |  |               editor, | 
					
						
							|  |  |  |  |               element, | 
					
						
							|  |  |  |  |               tippyOptions, | 
					
						
							|  |  |  |  |               shouldShow, | 
					
						
							|  |  |  |  |           }); | 
					
						
							|  |  |  |  |           editor.registerPlugin(plugin); | 
					
						
							|  |  |  |  |           return () => editor.unregisterPlugin(pluginKey); | 
					
						
							|  |  |  |  |       }, [ | 
					
						
							|  |  |  |  |           props.editor, | 
					
						
							|  |  |  |  |           element, | 
					
						
							|  |  |  |  |       ]); | 
					
						
							|  |  |  |  |       return (React__default["default"].createElement("div", { ref: setElement, className: props.className, style: { visibility: 'hidden' } }, props.children)); | 
					
						
							|  |  |  |  |   }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   const ReactNodeViewContext = React.createContext({ | 
					
						
							|  |  |  |  |       onDragStart: undefined, | 
					
						
							|  |  |  |  |   }); | 
					
						
							|  |  |  |  |   const useReactNodeView = () => React.useContext(ReactNodeViewContext); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   const NodeViewContent = props => { | 
					
						
							|  |  |  |  |       const Tag = props.as || 'div'; | 
					
						
							|  |  |  |  |       const { nodeViewContentRef } = useReactNodeView(); | 
					
						
							|  |  |  |  |       return (React__default["default"].createElement(Tag, { ...props, ref: nodeViewContentRef, "data-node-view-content": "", style: { | 
					
						
							|  |  |  |  |               whiteSpace: 'pre-wrap', | 
					
						
							|  |  |  |  |               ...props.style, | 
					
						
							|  |  |  |  |           } })); | 
					
						
							|  |  |  |  |   }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   const NodeViewWrapper = React__default["default"].forwardRef((props, ref) => { | 
					
						
							|  |  |  |  |       const { onDragStart } = useReactNodeView(); | 
					
						
							|  |  |  |  |       const Tag = props.as || 'div'; | 
					
						
							|  |  |  |  |       return (React__default["default"].createElement(Tag, { ...props, ref: ref, "data-node-view-wrapper": "", onDragStart: onDragStart, style: { | 
					
						
							|  |  |  |  |               whiteSpace: 'normal', | 
					
						
							|  |  |  |  |               ...props.style, | 
					
						
							|  |  |  |  |           } })); | 
					
						
							|  |  |  |  |   }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   function isClassComponent(Component) { | 
					
						
							|  |  |  |  |       return !!(typeof Component === 'function' | 
					
						
							|  |  |  |  |           && Component.prototype | 
					
						
							|  |  |  |  |           && Component.prototype.isReactComponent); | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   function isForwardRefComponent(Component) { | 
					
						
							|  |  |  |  |       var _a; | 
					
						
							|  |  |  |  |       return !!(typeof Component === 'object' | 
					
						
							|  |  |  |  |           && ((_a = Component.$$typeof) === null || _a === void 0 ? void 0 : _a.toString()) === 'Symbol(react.forward_ref)'); | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   class ReactRenderer { | 
					
						
							|  |  |  |  |       constructor(component, { editor, props = {}, as = 'div', className = '', }) { | 
					
						
							|  |  |  |  |           this.ref = null; | 
					
						
							|  |  |  |  |           this.id = Math.floor(Math.random() * 0xFFFFFFFF).toString(); | 
					
						
							|  |  |  |  |           this.component = component; | 
					
						
							|  |  |  |  |           this.editor = editor; | 
					
						
							|  |  |  |  |           this.props = props; | 
					
						
							|  |  |  |  |           this.element = document.createElement(as); | 
					
						
							|  |  |  |  |           this.element.classList.add('react-renderer'); | 
					
						
							|  |  |  |  |           if (className) { | 
					
						
							|  |  |  |  |               this.element.classList.add(...className.split(' ')); | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           this.render(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       render() { | 
					
						
							|  |  |  |  |           var _a, _b; | 
					
						
							|  |  |  |  |           const Component = this.component; | 
					
						
							|  |  |  |  |           const props = this.props; | 
					
						
							|  |  |  |  |           if (isClassComponent(Component) || isForwardRefComponent(Component)) { | 
					
						
							|  |  |  |  |               props.ref = (ref) => { | 
					
						
							|  |  |  |  |                   this.ref = ref; | 
					
						
							|  |  |  |  |               }; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           this.reactElement = React__default["default"].createElement(Component, { ...props }); | 
					
						
							|  |  |  |  |           (_b = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.contentComponent) === null || _b === void 0 ? void 0 : _b.setRenderer(this.id, this); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       updateProps(props = {}) { | 
					
						
							|  |  |  |  |           this.props = { | 
					
						
							|  |  |  |  |               ...this.props, | 
					
						
							|  |  |  |  |               ...props, | 
					
						
							|  |  |  |  |           }; | 
					
						
							|  |  |  |  |           this.render(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       destroy() { | 
					
						
							|  |  |  |  |           var _a, _b; | 
					
						
							|  |  |  |  |           (_b = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.contentComponent) === null || _b === void 0 ? void 0 : _b.removeRenderer(this.id); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   class ReactNodeView extends core.NodeView { | 
					
						
							|  |  |  |  |       mount() { | 
					
						
							|  |  |  |  |           const props = { | 
					
						
							|  |  |  |  |               editor: this.editor, | 
					
						
							|  |  |  |  |               node: this.node, | 
					
						
							|  |  |  |  |               decorations: this.decorations, | 
					
						
							|  |  |  |  |               selected: false, | 
					
						
							|  |  |  |  |               extension: this.extension, | 
					
						
							|  |  |  |  |               getPos: () => this.getPos(), | 
					
						
							|  |  |  |  |               updateAttributes: (attributes = {}) => this.updateAttributes(attributes), | 
					
						
							|  |  |  |  |               deleteNode: () => this.deleteNode(), | 
					
						
							|  |  |  |  |           }; | 
					
						
							|  |  |  |  |           if (!this.component.displayName) { | 
					
						
							|  |  |  |  |               const capitalizeFirstChar = (string) => { | 
					
						
							|  |  |  |  |                   return string.charAt(0).toUpperCase() + string.substring(1); | 
					
						
							|  |  |  |  |               }; | 
					
						
							|  |  |  |  |               this.component.displayName = capitalizeFirstChar(this.extension.name); | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           const ReactNodeViewProvider = componentProps => { | 
					
						
							|  |  |  |  |               const Component = this.component; | 
					
						
							|  |  |  |  |               const onDragStart = this.onDragStart.bind(this); | 
					
						
							|  |  |  |  |               const nodeViewContentRef = element => { | 
					
						
							|  |  |  |  |                   if (element && this.contentDOMElement && element.firstChild !== this.contentDOMElement) { | 
					
						
							|  |  |  |  |                       element.appendChild(this.contentDOMElement); | 
					
						
							|  |  |  |  |                   } | 
					
						
							|  |  |  |  |               }; | 
					
						
							|  |  |  |  |               return (React__default["default"].createElement(ReactNodeViewContext.Provider, { value: { onDragStart, nodeViewContentRef } }, | 
					
						
							|  |  |  |  |                   React__default["default"].createElement(Component, { ...componentProps }))); | 
					
						
							|  |  |  |  |           }; | 
					
						
							|  |  |  |  |           ReactNodeViewProvider.displayName = 'ReactNodeView'; | 
					
						
							|  |  |  |  |           this.contentDOMElement = this.node.isLeaf | 
					
						
							|  |  |  |  |               ? null | 
					
						
							|  |  |  |  |               : document.createElement(this.node.isInline ? 'span' : 'div'); | 
					
						
							|  |  |  |  |           if (this.contentDOMElement) { | 
					
						
							|  |  |  |  |               // For some reason the whiteSpace prop is not inherited properly in Chrome and Safari
 | 
					
						
							|  |  |  |  |               // With this fix it seems to work fine
 | 
					
						
							|  |  |  |  |               // See: https://github.com/ueberdosis/tiptap/issues/1197
 | 
					
						
							|  |  |  |  |               this.contentDOMElement.style.whiteSpace = 'inherit'; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           let as = this.node.isInline ? 'span' : 'div'; | 
					
						
							|  |  |  |  |           if (this.options.as) { | 
					
						
							|  |  |  |  |               as = this.options.as; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           const { className = '' } = this.options; | 
					
						
							|  |  |  |  |           this.renderer = new ReactRenderer(ReactNodeViewProvider, { | 
					
						
							|  |  |  |  |               editor: this.editor, | 
					
						
							|  |  |  |  |               props, | 
					
						
							|  |  |  |  |               as, | 
					
						
							|  |  |  |  |               className: `node-${this.node.type.name} ${className}`.trim(), | 
					
						
							|  |  |  |  |           }); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       get dom() { | 
					
						
							|  |  |  |  |           var _a; | 
					
						
							|  |  |  |  |           if (this.renderer.element.firstElementChild | 
					
						
							|  |  |  |  |               && !((_a = this.renderer.element.firstElementChild) === null || _a === void 0 ? void 0 : _a.hasAttribute('data-node-view-wrapper'))) { | 
					
						
							|  |  |  |  |               throw Error('Please use the NodeViewWrapper component for your node view.'); | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           return this.renderer.element; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       get contentDOM() { | 
					
						
							|  |  |  |  |           if (this.node.isLeaf) { | 
					
						
							|  |  |  |  |               return null; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           return this.contentDOMElement; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       update(node, decorations) { | 
					
						
							|  |  |  |  |           const updateProps = (props) => { | 
					
						
							|  |  |  |  |               this.renderer.updateProps(props); | 
					
						
							|  |  |  |  |           }; | 
					
						
							|  |  |  |  |           if (node.type !== this.node.type) { | 
					
						
							|  |  |  |  |               return false; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           if (typeof this.options.update === 'function') { | 
					
						
							|  |  |  |  |               const oldNode = this.node; | 
					
						
							|  |  |  |  |               const oldDecorations = this.decorations; | 
					
						
							|  |  |  |  |               this.node = node; | 
					
						
							|  |  |  |  |               this.decorations = decorations; | 
					
						
							|  |  |  |  |               return this.options.update({ | 
					
						
							|  |  |  |  |                   oldNode, | 
					
						
							|  |  |  |  |                   oldDecorations, | 
					
						
							|  |  |  |  |                   newNode: node, | 
					
						
							|  |  |  |  |                   newDecorations: decorations, | 
					
						
							|  |  |  |  |                   updateProps: () => updateProps({ node, decorations }), | 
					
						
							|  |  |  |  |               }); | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           if (node === this.node && this.decorations === decorations) { | 
					
						
							|  |  |  |  |               return true; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           this.node = node; | 
					
						
							|  |  |  |  |           this.decorations = decorations; | 
					
						
							|  |  |  |  |           updateProps({ node, decorations }); | 
					
						
							|  |  |  |  |           return true; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       selectNode() { | 
					
						
							|  |  |  |  |           this.renderer.updateProps({ | 
					
						
							|  |  |  |  |               selected: true, | 
					
						
							|  |  |  |  |           }); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       deselectNode() { | 
					
						
							|  |  |  |  |           this.renderer.updateProps({ | 
					
						
							|  |  |  |  |               selected: false, | 
					
						
							|  |  |  |  |           }); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       destroy() { | 
					
						
							|  |  |  |  |           this.renderer.destroy(); | 
					
						
							|  |  |  |  |           this.contentDOMElement = null; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   function ReactNodeViewRenderer(component, options) { | 
					
						
							|  |  |  |  |       return (props) => { | 
					
						
							|  |  |  |  |           // try to get the parent component
 | 
					
						
							|  |  |  |  |           // this is important for vue devtools to show the component hierarchy correctly
 | 
					
						
							|  |  |  |  |           // maybe it’s `undefined` because <editor-content> isn’t rendered yet
 | 
					
						
							|  |  |  |  |           if (!props.editor.contentComponent) { | 
					
						
							|  |  |  |  |               return {}; | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           return new ReactNodeView(component, props, options); | 
					
						
							|  |  |  |  |       }; | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   function useForceUpdate() { | 
					
						
							|  |  |  |  |       const [, setValue] = React.useState(0); | 
					
						
							|  |  |  |  |       return () => setValue(value => value + 1); | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   const useEditor = (options = {}, deps = []) => { | 
					
						
							|  |  |  |  |       const [editor, setEditor] = React.useState(null); | 
					
						
							|  |  |  |  |       const forceUpdate = useForceUpdate(); | 
					
						
							|  |  |  |  |       React.useEffect(() => { | 
					
						
							|  |  |  |  |           let isMounted = true; | 
					
						
							|  |  |  |  |           const instance = new Editor(options); | 
					
						
							|  |  |  |  |           setEditor(instance); | 
					
						
							|  |  |  |  |           instance.on('transaction', () => { | 
					
						
							|  |  |  |  |               requestAnimationFrame(() => { | 
					
						
							|  |  |  |  |                   requestAnimationFrame(() => { | 
					
						
							|  |  |  |  |                       if (isMounted) { | 
					
						
							|  |  |  |  |                           forceUpdate(); | 
					
						
							|  |  |  |  |                       } | 
					
						
							|  |  |  |  |                   }); | 
					
						
							|  |  |  |  |               }); | 
					
						
							|  |  |  |  |           }); | 
					
						
							|  |  |  |  |           return () => { | 
					
						
							|  |  |  |  |               instance.destroy(); | 
					
						
							|  |  |  |  |               isMounted = false; | 
					
						
							|  |  |  |  |           }; | 
					
						
							|  |  |  |  |       }, deps); | 
					
						
							|  |  |  |  |       return editor; | 
					
						
							|  |  |  |  |   }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   exports.BubbleMenu = BubbleMenu; | 
					
						
							|  |  |  |  |   exports.Editor = Editor; | 
					
						
							|  |  |  |  |   exports.EditorContent = EditorContent; | 
					
						
							|  |  |  |  |   exports.FloatingMenu = FloatingMenu; | 
					
						
							|  |  |  |  |   exports.NodeViewContent = NodeViewContent; | 
					
						
							|  |  |  |  |   exports.NodeViewWrapper = NodeViewWrapper; | 
					
						
							|  |  |  |  |   exports.PureEditorContent = PureEditorContent; | 
					
						
							|  |  |  |  |   exports.ReactNodeViewRenderer = ReactNodeViewRenderer; | 
					
						
							|  |  |  |  |   exports.ReactRenderer = ReactRenderer; | 
					
						
							|  |  |  |  |   exports.useEditor = useEditor; | 
					
						
							|  |  |  |  |   Object.keys(core).forEach(function (k) { | 
					
						
							|  |  |  |  |     if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { | 
					
						
							|  |  |  |  |       enumerable: true, | 
					
						
							|  |  |  |  |       get: function () { return core[k]; } | 
					
						
							|  |  |  |  |     }); | 
					
						
							|  |  |  |  |   }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   Object.defineProperty(exports, '__esModule', { value: true }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | })); | 
					
						
							|  |  |  |  | //# sourceMappingURL=tiptap-react.umd.js.map
 |