|  |  | import { BubbleMenuPlugin } from '@tiptap/extension-bubble-menu';
 | 
						
						
						
							|  |  | import React, { useState, useEffect, createContext, useContext } from 'react';
 | 
						
						
						
							|  |  | import { Editor as Editor$1, NodeView } from '@tiptap/core';
 | 
						
						
						
							|  |  | export * from '@tiptap/core';
 | 
						
						
						
							|  |  | import ReactDOM, { flushSync } from 'react-dom';
 | 
						
						
						
							|  |  | import { FloatingMenuPlugin } from '@tiptap/extension-floating-menu';
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | const BubbleMenu = (props) => {
 | 
						
						
						
							|  |  |     const [element, setElement] = useState(null);
 | 
						
						
						
							|  |  |     useEffect(() => {
 | 
						
						
						
							|  |  |         if (!element) {
 | 
						
						
						
							|  |  |             return;
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  |         if (props.editor.isDestroyed) {
 | 
						
						
						
							|  |  |             return;
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  |         const { pluginKey = 'bubbleMenu', editor, tippyOptions = {}, updateDelay, shouldShow = null, } = props;
 | 
						
						
						
							|  |  |         const plugin = BubbleMenuPlugin({
 | 
						
						
						
							|  |  |             updateDelay,
 | 
						
						
						
							|  |  |             editor,
 | 
						
						
						
							|  |  |             element,
 | 
						
						
						
							|  |  |             pluginKey,
 | 
						
						
						
							|  |  |             shouldShow,
 | 
						
						
						
							|  |  |             tippyOptions,
 | 
						
						
						
							|  |  |         });
 | 
						
						
						
							|  |  |         editor.registerPlugin(plugin);
 | 
						
						
						
							|  |  |         return () => editor.unregisterPlugin(pluginKey);
 | 
						
						
						
							|  |  |     }, [props.editor, element]);
 | 
						
						
						
							|  |  |     return (React.createElement("div", { ref: setElement, className: props.className, style: { visibility: 'hidden' } }, props.children));
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | class Editor extends Editor$1 {
 | 
						
						
						
							|  |  |     constructor() {
 | 
						
						
						
							|  |  |         super(...arguments);
 | 
						
						
						
							|  |  |         this.contentComponent = null;
 | 
						
						
						
							|  |  |     }
 | 
						
						
						
							|  |  | }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | const Portals = ({ renderers }) => {
 | 
						
						
						
							|  |  |     return (React.createElement(React.Fragment, null, Object.entries(renderers).map(([key, renderer]) => {
 | 
						
						
						
							|  |  |         return ReactDOM.createPortal(renderer.reactElement, renderer.element, key);
 | 
						
						
						
							|  |  |     })));
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | class PureEditorContent extends React.Component {
 | 
						
						
						
							|  |  |     constructor(props) {
 | 
						
						
						
							|  |  |         super(props);
 | 
						
						
						
							|  |  |         this.editorContentRef = React.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) {
 | 
						
						
						
							|  |  |             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.createElement(React.Fragment, null,
 | 
						
						
						
							|  |  |             React.createElement("div", { ref: this.editorContentRef, ...rest }),
 | 
						
						
						
							|  |  |             React.createElement(Portals, { renderers: this.state.renderers })));
 | 
						
						
						
							|  |  |     }
 | 
						
						
						
							|  |  | }
 | 
						
						
						
							|  |  | const EditorContent = React.memo(PureEditorContent);
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | const FloatingMenu = (props) => {
 | 
						
						
						
							|  |  |     const [element, setElement] = useState(null);
 | 
						
						
						
							|  |  |     useEffect(() => {
 | 
						
						
						
							|  |  |         if (!element) {
 | 
						
						
						
							|  |  |             return;
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  |         if (props.editor.isDestroyed) {
 | 
						
						
						
							|  |  |             return;
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  |         const { pluginKey = 'floatingMenu', editor, tippyOptions = {}, shouldShow = null, } = props;
 | 
						
						
						
							|  |  |         const plugin = FloatingMenuPlugin({
 | 
						
						
						
							|  |  |             pluginKey,
 | 
						
						
						
							|  |  |             editor,
 | 
						
						
						
							|  |  |             element,
 | 
						
						
						
							|  |  |             tippyOptions,
 | 
						
						
						
							|  |  |             shouldShow,
 | 
						
						
						
							|  |  |         });
 | 
						
						
						
							|  |  |         editor.registerPlugin(plugin);
 | 
						
						
						
							|  |  |         return () => editor.unregisterPlugin(pluginKey);
 | 
						
						
						
							|  |  |     }, [
 | 
						
						
						
							|  |  |         props.editor,
 | 
						
						
						
							|  |  |         element,
 | 
						
						
						
							|  |  |     ]);
 | 
						
						
						
							|  |  |     return (React.createElement("div", { ref: setElement, className: props.className, style: { visibility: 'hidden' } }, props.children));
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | const ReactNodeViewContext = createContext({
 | 
						
						
						
							|  |  |     onDragStart: undefined,
 | 
						
						
						
							|  |  | });
 | 
						
						
						
							|  |  | const useReactNodeView = () => useContext(ReactNodeViewContext);
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | const NodeViewContent = props => {
 | 
						
						
						
							|  |  |     const Tag = props.as || 'div';
 | 
						
						
						
							|  |  |     const { nodeViewContentRef } = useReactNodeView();
 | 
						
						
						
							|  |  |     return (React.createElement(Tag, { ...props, ref: nodeViewContentRef, "data-node-view-content": "", style: {
 | 
						
						
						
							|  |  |             whiteSpace: 'pre-wrap',
 | 
						
						
						
							|  |  |             ...props.style,
 | 
						
						
						
							|  |  |         } }));
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | const NodeViewWrapper = React.forwardRef((props, ref) => {
 | 
						
						
						
							|  |  |     const { onDragStart } = useReactNodeView();
 | 
						
						
						
							|  |  |     const Tag = props.as || 'div';
 | 
						
						
						
							|  |  |     return (React.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.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 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.createElement(ReactNodeViewContext.Provider, { value: { onDragStart, nodeViewContentRef } },
 | 
						
						
						
							|  |  |                 React.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] = useState(0);
 | 
						
						
						
							|  |  |     return () => setValue(value => value + 1);
 | 
						
						
						
							|  |  | }
 | 
						
						
						
							|  |  | const useEditor = (options = {}, deps = []) => {
 | 
						
						
						
							|  |  |     const [editor, setEditor] = useState(null);
 | 
						
						
						
							|  |  |     const forceUpdate = useForceUpdate();
 | 
						
						
						
							|  |  |     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;
 | 
						
						
						
							|  |  | };
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | export { BubbleMenu, Editor, EditorContent, FloatingMenu, NodeViewContent, NodeViewWrapper, PureEditorContent, ReactNodeViewRenderer, ReactRenderer, useEditor };
 | 
						
						
						
							|  |  | //# sourceMappingURL=tiptap-react.esm.js.map
 |