@tiptap/react 2.1.0-rc.8 → 2.1.0

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/dist/index.umd.js CHANGED
@@ -1,45 +1,14 @@
1
1
  (function (global, factory) {
2
- 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')) :
3
- typeof define === 'function' && define.amd ? define(['exports', '@tiptap/extension-bubble-menu', 'react', '@tiptap/core', 'react-dom', '@tiptap/extension-floating-menu'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@tiptap/react"] = {}, global.extensionBubbleMenu, global.React, global.core, global.ReactDOM, global.extensionFloatingMenu));
5
- })(this, (function (exports, extensionBubbleMenu, React, core, ReactDOM, extensionFloatingMenu) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@tiptap/extension-bubble-menu'), require('react'), require('react-dom'), require('@tiptap/core'), require('@tiptap/extension-floating-menu')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', '@tiptap/extension-bubble-menu', 'react', 'react-dom', '@tiptap/core', '@tiptap/extension-floating-menu'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@tiptap/react"] = {}, global.extensionBubbleMenu, global.React, global.ReactDOM, global.core, global.extensionFloatingMenu));
5
+ })(this, (function (exports, extensionBubbleMenu, React, ReactDOM, core, extensionFloatingMenu) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
9
9
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
10
10
  var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
11
11
 
12
- const BubbleMenu = (props) => {
13
- const [element, setElement] = React.useState(null);
14
- React.useEffect(() => {
15
- if (!element) {
16
- return;
17
- }
18
- if (props.editor.isDestroyed) {
19
- return;
20
- }
21
- const { pluginKey = 'bubbleMenu', editor, tippyOptions = {}, updateDelay, shouldShow = null, } = props;
22
- const plugin = extensionBubbleMenu.BubbleMenuPlugin({
23
- updateDelay,
24
- editor,
25
- element,
26
- pluginKey,
27
- shouldShow,
28
- tippyOptions,
29
- });
30
- editor.registerPlugin(plugin);
31
- return () => editor.unregisterPlugin(pluginKey);
32
- }, [props.editor, element]);
33
- return (React__default["default"].createElement("div", { ref: setElement, className: props.className, style: { visibility: 'hidden' } }, props.children));
34
- };
35
-
36
- class Editor extends core.Editor {
37
- constructor() {
38
- super(...arguments);
39
- this.contentComponent = null;
40
- }
41
- }
42
-
43
12
  const Portals = ({ renderers }) => {
44
13
  return (React__default["default"].createElement(React__default["default"].Fragment, null, Object.entries(renderers).map(([key, renderer]) => {
45
14
  return ReactDOM__default["default"].createPortal(renderer.reactElement, renderer.element, key);
@@ -135,29 +104,188 @@
135
104
  React__default["default"].createElement(Portals, { renderers: this.state.renderers })));
136
105
  }
137
106
  }
138
- const EditorContent = React__default["default"].memo(PureEditorContent);
107
+ // EditorContent should be re-created whenever the Editor instance changes
108
+ const EditorContentWithKey = (props) => {
109
+ const key = React__default["default"].useMemo(() => {
110
+ return Math.floor(Math.random() * 0xFFFFFFFF).toString();
111
+ }, [props.editor]);
112
+ // Can't use JSX here because it conflicts with the type definition of Vue's JSX, so use createElement
113
+ return React__default["default"].createElement(PureEditorContent, { key, ...props });
114
+ };
115
+ const EditorContent = React__default["default"].memo(EditorContentWithKey);
116
+
117
+ class Editor extends core.Editor {
118
+ constructor() {
119
+ super(...arguments);
120
+ this.contentComponent = null;
121
+ }
122
+ }
123
+
124
+ function useForceUpdate() {
125
+ const [, setValue] = React.useState(0);
126
+ return () => setValue(value => value + 1);
127
+ }
128
+ const useEditor = (options = {}, deps = []) => {
129
+ const [editor, setEditor] = React.useState(null);
130
+ const forceUpdate = useForceUpdate();
131
+ const { onBeforeCreate, onBlur, onCreate, onDestroy, onFocus, onSelectionUpdate, onTransaction, onUpdate, } = options;
132
+ const onBeforeCreateRef = React.useRef(onBeforeCreate);
133
+ const onBlurRef = React.useRef(onBlur);
134
+ const onCreateRef = React.useRef(onCreate);
135
+ const onDestroyRef = React.useRef(onDestroy);
136
+ const onFocusRef = React.useRef(onFocus);
137
+ const onSelectionUpdateRef = React.useRef(onSelectionUpdate);
138
+ const onTransactionRef = React.useRef(onTransaction);
139
+ const onUpdateRef = React.useRef(onUpdate);
140
+ // This effect will handle updating the editor instance
141
+ // when the event handlers change.
142
+ React.useEffect(() => {
143
+ if (!editor) {
144
+ return;
145
+ }
146
+ if (onBeforeCreate) {
147
+ editor.off('beforeCreate', onBeforeCreateRef.current);
148
+ editor.on('beforeCreate', onBeforeCreate);
149
+ onBeforeCreateRef.current = onBeforeCreate;
150
+ }
151
+ if (onBlur) {
152
+ editor.off('blur', onBlurRef.current);
153
+ editor.on('blur', onBlur);
154
+ onBlurRef.current = onBlur;
155
+ }
156
+ if (onCreate) {
157
+ editor.off('create', onCreateRef.current);
158
+ editor.on('create', onCreate);
159
+ onCreateRef.current = onCreate;
160
+ }
161
+ if (onDestroy) {
162
+ editor.off('destroy', onDestroyRef.current);
163
+ editor.on('destroy', onDestroy);
164
+ onDestroyRef.current = onDestroy;
165
+ }
166
+ if (onFocus) {
167
+ editor.off('focus', onFocusRef.current);
168
+ editor.on('focus', onFocus);
169
+ onFocusRef.current = onFocus;
170
+ }
171
+ if (onSelectionUpdate) {
172
+ editor.off('selectionUpdate', onSelectionUpdateRef.current);
173
+ editor.on('selectionUpdate', onSelectionUpdate);
174
+ onSelectionUpdateRef.current = onSelectionUpdate;
175
+ }
176
+ if (onTransaction) {
177
+ editor.off('transaction', onTransactionRef.current);
178
+ editor.on('transaction', onTransaction);
179
+ onTransactionRef.current = onTransaction;
180
+ }
181
+ if (onUpdate) {
182
+ editor.off('update', onUpdateRef.current);
183
+ editor.on('update', onUpdate);
184
+ onUpdateRef.current = onUpdate;
185
+ }
186
+ }, [onBeforeCreate, onBlur, onCreate, onDestroy, onFocus, onSelectionUpdate, onTransaction, onUpdate, editor]);
187
+ React.useEffect(() => {
188
+ let isMounted = true;
189
+ const instance = new Editor(options);
190
+ setEditor(instance);
191
+ instance.on('transaction', () => {
192
+ requestAnimationFrame(() => {
193
+ requestAnimationFrame(() => {
194
+ if (isMounted) {
195
+ forceUpdate();
196
+ }
197
+ });
198
+ });
199
+ });
200
+ return () => {
201
+ isMounted = false;
202
+ };
203
+ }, deps);
204
+ React.useEffect(() => {
205
+ return () => {
206
+ editor === null || editor === void 0 ? void 0 : editor.destroy();
207
+ };
208
+ }, [editor]);
209
+ return editor;
210
+ };
211
+
212
+ const EditorContext = React.createContext({
213
+ editor: null,
214
+ });
215
+ const EditorConsumer = EditorContext.Consumer;
216
+ const useCurrentEditor = () => React.useContext(EditorContext);
217
+ const EditorProvider = ({ children, slotAfter, slotBefore, ...editorOptions }) => {
218
+ const editor = useEditor(editorOptions);
219
+ if (!editor) {
220
+ return null;
221
+ }
222
+ return (React__default["default"].createElement(EditorContext.Provider, { value: { editor } },
223
+ slotBefore,
224
+ React__default["default"].createElement(EditorConsumer, null, ({ editor: currentEditor }) => (React__default["default"].createElement(EditorContent, { editor: currentEditor }))),
225
+ children,
226
+ slotAfter));
227
+ };
228
+
229
+ const BubbleMenu = (props) => {
230
+ const [element, setElement] = React.useState(null);
231
+ const { editor: currentEditor } = useCurrentEditor();
232
+ React.useEffect(() => {
233
+ var _a;
234
+ if (!element) {
235
+ return;
236
+ }
237
+ if (((_a = props.editor) === null || _a === void 0 ? void 0 : _a.isDestroyed) || (currentEditor === null || currentEditor === void 0 ? void 0 : currentEditor.isDestroyed)) {
238
+ return;
239
+ }
240
+ const { pluginKey = 'bubbleMenu', editor, tippyOptions = {}, updateDelay, shouldShow = null, } = props;
241
+ const menuEditor = editor || currentEditor;
242
+ if (!menuEditor) {
243
+ console.warn('BubbleMenu component is not rendered inside of an editor component or does not have editor prop.');
244
+ return;
245
+ }
246
+ const plugin = extensionBubbleMenu.BubbleMenuPlugin({
247
+ updateDelay,
248
+ editor: menuEditor,
249
+ element,
250
+ pluginKey,
251
+ shouldShow,
252
+ tippyOptions,
253
+ });
254
+ menuEditor.registerPlugin(plugin);
255
+ return () => menuEditor.unregisterPlugin(pluginKey);
256
+ }, [props.editor, currentEditor, element]);
257
+ return (React__default["default"].createElement("div", { ref: setElement, className: props.className, style: { visibility: 'hidden' } }, props.children));
258
+ };
139
259
 
140
260
  const FloatingMenu = (props) => {
141
261
  const [element, setElement] = React.useState(null);
262
+ const { editor: currentEditor } = useCurrentEditor();
142
263
  React.useEffect(() => {
264
+ var _a;
143
265
  if (!element) {
144
266
  return;
145
267
  }
146
- if (props.editor.isDestroyed) {
268
+ if (((_a = props.editor) === null || _a === void 0 ? void 0 : _a.isDestroyed) || (currentEditor === null || currentEditor === void 0 ? void 0 : currentEditor.isDestroyed)) {
147
269
  return;
148
270
  }
149
271
  const { pluginKey = 'floatingMenu', editor, tippyOptions = {}, shouldShow = null, } = props;
272
+ const menuEditor = editor || currentEditor;
273
+ if (!menuEditor) {
274
+ console.warn('FloatingMenu component is not rendered inside of an editor component or does not have editor prop.');
275
+ return;
276
+ }
150
277
  const plugin = extensionFloatingMenu.FloatingMenuPlugin({
151
278
  pluginKey,
152
- editor,
279
+ editor: menuEditor,
153
280
  element,
154
281
  tippyOptions,
155
282
  shouldShow,
156
283
  });
157
- editor.registerPlugin(plugin);
158
- return () => editor.unregisterPlugin(pluginKey);
284
+ menuEditor.registerPlugin(plugin);
285
+ return () => menuEditor.unregisterPlugin(pluginKey);
159
286
  }, [
160
287
  props.editor,
288
+ currentEditor,
161
289
  element,
162
290
  ]);
163
291
  return (React__default["default"].createElement("div", { ref: setElement, className: props.className, style: { visibility: 'hidden' } }, props.children));
@@ -285,6 +413,8 @@
285
413
  as = this.options.as;
286
414
  }
287
415
  const { className = '' } = this.options;
416
+ this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);
417
+ this.editor.on('selectionUpdate', this.handleSelectionUpdate);
288
418
  this.renderer = new ReactRenderer(ReactNodeViewProvider, {
289
419
  editor: this.editor,
290
420
  props,
@@ -307,6 +437,15 @@
307
437
  }
308
438
  return this.contentDOMElement;
309
439
  }
440
+ handleSelectionUpdate() {
441
+ const { from, to } = this.editor.state.selection;
442
+ if (from <= this.getPos() && to >= this.getPos() + this.node.nodeSize) {
443
+ this.selectNode();
444
+ }
445
+ else {
446
+ this.deselectNode();
447
+ }
448
+ }
310
449
  update(node, decorations) {
311
450
  const updateProps = (props) => {
312
451
  this.renderer.updateProps(props);
@@ -347,6 +486,7 @@
347
486
  }
348
487
  destroy() {
349
488
  this.renderer.destroy();
489
+ this.editor.off('selectionUpdate', this.handleSelectionUpdate);
350
490
  this.contentDOMElement = null;
351
491
  }
352
492
  }
@@ -362,99 +502,19 @@
362
502
  };
363
503
  }
364
504
 
365
- function useForceUpdate() {
366
- const [, setValue] = React.useState(0);
367
- return () => setValue(value => value + 1);
368
- }
369
- const useEditor = (options = {}, deps = []) => {
370
- const [editor, setEditor] = React.useState(null);
371
- const forceUpdate = useForceUpdate();
372
- const { onBeforeCreate, onBlur, onCreate, onDestroy, onFocus, onSelectionUpdate, onTransaction, onUpdate, } = options;
373
- const onBeforeCreateRef = React.useRef(onBeforeCreate);
374
- const onBlurRef = React.useRef(onBlur);
375
- const onCreateRef = React.useRef(onCreate);
376
- const onDestroyRef = React.useRef(onDestroy);
377
- const onFocusRef = React.useRef(onFocus);
378
- const onSelectionUpdateRef = React.useRef(onSelectionUpdate);
379
- const onTransactionRef = React.useRef(onTransaction);
380
- const onUpdateRef = React.useRef(onUpdate);
381
- // This effect will handle updating the editor instance
382
- // when the event handlers change.
383
- React.useEffect(() => {
384
- if (!editor) {
385
- return;
386
- }
387
- if (onBeforeCreate) {
388
- editor.off('beforeCreate', onBeforeCreateRef.current);
389
- editor.on('beforeCreate', onBeforeCreate);
390
- onBeforeCreateRef.current = onBeforeCreate;
391
- }
392
- if (onBlur) {
393
- editor.off('blur', onBlurRef.current);
394
- editor.on('blur', onBlur);
395
- onBlurRef.current = onBlur;
396
- }
397
- if (onCreate) {
398
- editor.off('create', onCreateRef.current);
399
- editor.on('create', onCreate);
400
- onCreateRef.current = onCreate;
401
- }
402
- if (onDestroy) {
403
- editor.off('destroy', onDestroyRef.current);
404
- editor.on('destroy', onDestroy);
405
- onDestroyRef.current = onDestroy;
406
- }
407
- if (onFocus) {
408
- editor.off('focus', onFocusRef.current);
409
- editor.on('focus', onFocus);
410
- onFocusRef.current = onFocus;
411
- }
412
- if (onSelectionUpdate) {
413
- editor.off('selectionUpdate', onSelectionUpdateRef.current);
414
- editor.on('selectionUpdate', onSelectionUpdate);
415
- onSelectionUpdateRef.current = onSelectionUpdate;
416
- }
417
- if (onTransaction) {
418
- editor.off('transaction', onTransactionRef.current);
419
- editor.on('transaction', onTransaction);
420
- onTransactionRef.current = onTransaction;
421
- }
422
- if (onUpdate) {
423
- editor.off('update', onUpdateRef.current);
424
- editor.on('update', onUpdate);
425
- onUpdateRef.current = onUpdate;
426
- }
427
- }, [onBeforeCreate, onBlur, onCreate, onDestroy, onFocus, onSelectionUpdate, onTransaction, onUpdate, editor]);
428
- React.useEffect(() => {
429
- let isMounted = true;
430
- const instance = new Editor(options);
431
- setEditor(instance);
432
- instance.on('transaction', () => {
433
- requestAnimationFrame(() => {
434
- requestAnimationFrame(() => {
435
- if (isMounted) {
436
- forceUpdate();
437
- }
438
- });
439
- });
440
- });
441
- return () => {
442
- instance.destroy();
443
- isMounted = false;
444
- };
445
- }, deps);
446
- return editor;
447
- };
448
-
449
505
  exports.BubbleMenu = BubbleMenu;
450
506
  exports.Editor = Editor;
507
+ exports.EditorConsumer = EditorConsumer;
451
508
  exports.EditorContent = EditorContent;
509
+ exports.EditorContext = EditorContext;
510
+ exports.EditorProvider = EditorProvider;
452
511
  exports.FloatingMenu = FloatingMenu;
453
512
  exports.NodeViewContent = NodeViewContent;
454
513
  exports.NodeViewWrapper = NodeViewWrapper;
455
514
  exports.PureEditorContent = PureEditorContent;
456
515
  exports.ReactNodeViewRenderer = ReactNodeViewRenderer;
457
516
  exports.ReactRenderer = ReactRenderer;
517
+ exports.useCurrentEditor = useCurrentEditor;
458
518
  exports.useEditor = useEditor;
459
519
  Object.keys(core).forEach(function (k) {
460
520
  if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/BubbleMenu.tsx","../src/Editor.ts","../src/EditorContent.tsx","../src/FloatingMenu.tsx","../src/useReactNodeView.ts","../src/NodeViewContent.tsx","../src/NodeViewWrapper.tsx","../src/ReactRenderer.tsx","../src/ReactNodeViewRenderer.tsx","../src/useEditor.ts"],"sourcesContent":["import { BubbleMenuPlugin, BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu'\nimport React, { useEffect, useState } from 'react'\n\ntype Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;\n\nexport type BubbleMenuProps = Omit<Optional<BubbleMenuPluginProps, 'pluginKey'>, 'element'> & {\n className?: string;\n children: React.ReactNode;\n updateDelay?: number;\n};\n\nexport const BubbleMenu = (props: BubbleMenuProps) => {\n const [element, setElement] = useState<HTMLDivElement | null>(null)\n\n useEffect(() => {\n if (!element) {\n return\n }\n\n if (props.editor.isDestroyed) {\n return\n }\n\n const {\n pluginKey = 'bubbleMenu', editor, tippyOptions = {}, updateDelay, shouldShow = null,\n } = props\n\n const plugin = BubbleMenuPlugin({\n updateDelay,\n editor,\n element,\n pluginKey,\n shouldShow,\n tippyOptions,\n })\n\n editor.registerPlugin(plugin)\n return () => editor.unregisterPlugin(pluginKey)\n }, [props.editor, element])\n\n return (\n <div ref={setElement} className={props.className} style={{ visibility: 'hidden' }}>\n {props.children}\n </div>\n )\n}\n","import { Editor as CoreEditor } from '@tiptap/core'\nimport React from 'react'\n\nimport { EditorContentProps, EditorContentState } from './EditorContent'\nimport { ReactRenderer } from './ReactRenderer'\n\ntype ContentComponent = React.Component<EditorContentProps, EditorContentState> & {\n setRenderer(id: string, renderer: ReactRenderer): void;\n removeRenderer(id: string): void;\n}\n\nexport class Editor extends CoreEditor {\n public contentComponent: ContentComponent | null = null\n}\n","import React, { HTMLProps } from 'react'\nimport ReactDOM, { flushSync } from 'react-dom'\n\nimport { Editor } from './Editor'\nimport { ReactRenderer } from './ReactRenderer'\n\nconst Portals: React.FC<{ renderers: Record<string, ReactRenderer> }> = ({ renderers }) => {\n return (\n <>\n {Object.entries(renderers).map(([key, renderer]) => {\n return ReactDOM.createPortal(renderer.reactElement, renderer.element, key)\n })}\n </>\n )\n}\n\nexport interface EditorContentProps extends HTMLProps<HTMLDivElement> {\n editor: Editor | null;\n}\n\nexport interface EditorContentState {\n renderers: Record<string, ReactRenderer>;\n}\n\nexport class PureEditorContent extends React.Component<EditorContentProps, EditorContentState> {\n editorContentRef: React.RefObject<any>\n\n initialized: boolean\n\n constructor(props: EditorContentProps) {\n super(props)\n this.editorContentRef = React.createRef()\n this.initialized = false\n\n this.state = {\n renderers: {},\n }\n }\n\n componentDidMount() {\n this.init()\n }\n\n componentDidUpdate() {\n this.init()\n }\n\n init() {\n const { editor } = this.props\n\n if (editor && editor.options.element) {\n if (editor.contentComponent) {\n return\n }\n\n const element = this.editorContentRef.current\n\n element.append(...editor.options.element.childNodes)\n\n editor.setOptions({\n element,\n })\n\n editor.contentComponent = this\n\n editor.createNodeViews()\n\n this.initialized = true\n }\n }\n\n maybeFlushSync(fn: () => void) {\n // Avoid calling flushSync until the editor is initialized.\n // Initialization happens during the componentDidMount or componentDidUpdate\n // lifecycle methods, and React doesn't allow calling flushSync from inside\n // a lifecycle method.\n if (this.initialized) {\n flushSync(fn)\n } else {\n fn()\n }\n }\n\n setRenderer(id: string, renderer: ReactRenderer) {\n this.maybeFlushSync(() => {\n this.setState(({ renderers }) => ({\n renderers: {\n ...renderers,\n [id]: renderer,\n },\n }))\n })\n }\n\n removeRenderer(id: string) {\n this.maybeFlushSync(() => {\n this.setState(({ renderers }) => {\n const nextRenderers = { ...renderers }\n\n delete nextRenderers[id]\n\n return { renderers: nextRenderers }\n })\n })\n }\n\n componentWillUnmount() {\n const { editor } = this.props\n\n if (!editor) {\n return\n }\n\n this.initialized = false\n\n if (!editor.isDestroyed) {\n editor.view.setProps({\n nodeViews: {},\n })\n }\n\n editor.contentComponent = null\n\n if (!editor.options.element.firstChild) {\n return\n }\n\n const newElement = document.createElement('div')\n\n newElement.append(...editor.options.element.childNodes)\n\n editor.setOptions({\n element: newElement,\n })\n }\n\n render() {\n const { editor, ...rest } = this.props\n\n return (\n <>\n <div ref={this.editorContentRef} {...rest} />\n {/* @ts-ignore */}\n <Portals renderers={this.state.renderers} />\n </>\n )\n }\n}\n\nexport const EditorContent = React.memo(PureEditorContent)\n","import { FloatingMenuPlugin, FloatingMenuPluginProps } from '@tiptap/extension-floating-menu'\nimport React, {\n useEffect, useState,\n} from 'react'\n\ntype Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>\n\nexport type FloatingMenuProps = Omit<Optional<FloatingMenuPluginProps, 'pluginKey'>, 'element'> & {\n className?: string,\n children: React.ReactNode\n}\n\nexport const FloatingMenu = (props: FloatingMenuProps) => {\n const [element, setElement] = useState<HTMLDivElement | null>(null)\n\n useEffect(() => {\n if (!element) {\n return\n }\n\n if (props.editor.isDestroyed) {\n return\n }\n\n const {\n pluginKey = 'floatingMenu',\n editor,\n tippyOptions = {},\n shouldShow = null,\n } = props\n\n const plugin = FloatingMenuPlugin({\n pluginKey,\n editor,\n element,\n tippyOptions,\n shouldShow,\n })\n\n editor.registerPlugin(plugin)\n return () => editor.unregisterPlugin(pluginKey)\n }, [\n props.editor,\n element,\n ])\n\n return (\n <div ref={setElement} className={props.className} style={{ visibility: 'hidden' }}>\n {props.children}\n </div>\n )\n}\n","import { createContext, useContext } from 'react'\n\nexport interface ReactNodeViewContextProps {\n onDragStart: (event: DragEvent) => void,\n nodeViewContentRef: (element: HTMLElement | null) => void,\n}\n\nexport const ReactNodeViewContext = createContext<Partial<ReactNodeViewContextProps>>({\n onDragStart: undefined,\n})\n\nexport const useReactNodeView = () => useContext(ReactNodeViewContext)\n","import React from 'react'\n\nimport { useReactNodeView } from './useReactNodeView'\n\nexport interface NodeViewContentProps {\n [key: string]: any,\n as?: React.ElementType,\n}\n\nexport const NodeViewContent: React.FC<NodeViewContentProps> = props => {\n const Tag = props.as || 'div'\n const { nodeViewContentRef } = useReactNodeView()\n\n return (\n <Tag\n {...props}\n ref={nodeViewContentRef}\n data-node-view-content=\"\"\n style={{\n whiteSpace: 'pre-wrap',\n ...props.style,\n }}\n />\n )\n}\n","import React from 'react'\n\nimport { useReactNodeView } from './useReactNodeView'\n\nexport interface NodeViewWrapperProps {\n [key: string]: any,\n as?: React.ElementType,\n}\n\nexport const NodeViewWrapper: React.FC<NodeViewWrapperProps> = React.forwardRef((props, ref) => {\n const { onDragStart } = useReactNodeView()\n const Tag = props.as || 'div'\n\n return (\n <Tag\n {...props}\n ref={ref}\n data-node-view-wrapper=\"\"\n onDragStart={onDragStart}\n style={{\n whiteSpace: 'normal',\n ...props.style,\n }}\n />\n )\n})\n","import { Editor } from '@tiptap/core'\nimport React from 'react'\n\nimport { Editor as ExtendedEditor } from './Editor'\n\nfunction isClassComponent(Component: any) {\n return !!(\n typeof Component === 'function'\n && Component.prototype\n && Component.prototype.isReactComponent\n )\n}\n\nfunction isForwardRefComponent(Component: any) {\n return !!(\n typeof Component === 'object'\n && Component.$$typeof?.toString() === 'Symbol(react.forward_ref)'\n )\n}\n\nexport interface ReactRendererOptions {\n editor: Editor,\n props?: Record<string, any>,\n as?: string,\n className?: string,\n attrs?: Record<string, string>,\n}\n\ntype ComponentType<R, P> =\n React.ComponentClass<P> |\n React.FunctionComponent<P> |\n React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<R>>;\n\nexport class ReactRenderer<R = unknown, P = unknown> {\n id: string\n\n editor: ExtendedEditor\n\n component: any\n\n element: Element\n\n props: Record<string, any>\n\n reactElement: React.ReactNode\n\n ref: R | null = null\n\n constructor(component: ComponentType<R, P>, {\n editor,\n props = {},\n as = 'div',\n className = '',\n attrs,\n }: ReactRendererOptions) {\n this.id = Math.floor(Math.random() * 0xFFFFFFFF).toString()\n this.component = component\n this.editor = editor as ExtendedEditor\n this.props = props\n this.element = document.createElement(as)\n this.element.classList.add('react-renderer')\n\n if (className) {\n this.element.classList.add(...className.split(' '))\n }\n\n if (attrs) {\n Object.keys(attrs).forEach(key => {\n this.element.setAttribute(key, attrs[key])\n })\n }\n\n this.render()\n }\n\n render(): void {\n const Component = this.component\n const props = this.props\n\n if (isClassComponent(Component) || isForwardRefComponent(Component)) {\n props.ref = (ref: R) => {\n this.ref = ref\n }\n }\n\n this.reactElement = <Component {...props } />\n\n this.editor?.contentComponent?.setRenderer(this.id, this)\n }\n\n updateProps(props: Record<string, any> = {}): void {\n this.props = {\n ...this.props,\n ...props,\n }\n\n this.render()\n }\n\n destroy(): void {\n this.editor?.contentComponent?.removeRenderer(this.id)\n }\n}\n","import {\n DecorationWithType,\n NodeView,\n NodeViewProps,\n NodeViewRenderer,\n NodeViewRendererOptions,\n NodeViewRendererProps,\n} from '@tiptap/core'\nimport { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { Decoration, NodeView as ProseMirrorNodeView } from '@tiptap/pm/view'\nimport React from 'react'\n\nimport { Editor } from './Editor'\nimport { ReactRenderer } from './ReactRenderer'\nimport { ReactNodeViewContext, ReactNodeViewContextProps } from './useReactNodeView'\n\nexport interface ReactNodeViewRendererOptions extends NodeViewRendererOptions {\n update:\n | ((props: {\n oldNode: ProseMirrorNode\n oldDecorations: Decoration[]\n newNode: ProseMirrorNode\n newDecorations: Decoration[]\n updateProps: () => void\n }) => boolean)\n | null\n as?: string\n className?: string\n attrs?: Record<string, string>\n}\n\nclass ReactNodeView extends NodeView<\n React.FunctionComponent,\n Editor,\n ReactNodeViewRendererOptions\n> {\n renderer!: ReactRenderer\n\n contentDOMElement!: HTMLElement | null\n\n mount() {\n const props: NodeViewProps = {\n editor: this.editor,\n node: this.node,\n decorations: this.decorations,\n selected: false,\n extension: this.extension,\n getPos: () => this.getPos(),\n updateAttributes: (attributes = {}) => this.updateAttributes(attributes),\n deleteNode: () => this.deleteNode(),\n }\n\n if (!(this.component as any).displayName) {\n const capitalizeFirstChar = (string: string): string => {\n return string.charAt(0).toUpperCase() + string.substring(1)\n }\n\n this.component.displayName = capitalizeFirstChar(this.extension.name)\n }\n\n const ReactNodeViewProvider: React.FunctionComponent = componentProps => {\n const Component = this.component\n const onDragStart = this.onDragStart.bind(this)\n const nodeViewContentRef: ReactNodeViewContextProps['nodeViewContentRef'] = element => {\n if (element && this.contentDOMElement && element.firstChild !== this.contentDOMElement) {\n element.appendChild(this.contentDOMElement)\n }\n }\n\n return (\n <>\n {/* @ts-ignore */}\n <ReactNodeViewContext.Provider value={{ onDragStart, nodeViewContentRef }}>\n {/* @ts-ignore */}\n <Component {...componentProps} />\n </ReactNodeViewContext.Provider>\n </>\n )\n }\n\n ReactNodeViewProvider.displayName = 'ReactNodeView'\n\n this.contentDOMElement = this.node.isLeaf\n ? null\n : document.createElement(this.node.isInline ? 'span' : 'div')\n\n if (this.contentDOMElement) {\n // For some reason the whiteSpace prop is not inherited properly in Chrome and Safari\n // With this fix it seems to work fine\n // See: https://github.com/ueberdosis/tiptap/issues/1197\n this.contentDOMElement.style.whiteSpace = 'inherit'\n }\n\n let as = this.node.isInline ? 'span' : 'div'\n\n if (this.options.as) {\n as = this.options.as\n }\n\n const { className = '' } = this.options\n\n this.renderer = new ReactRenderer(ReactNodeViewProvider, {\n editor: this.editor,\n props,\n as,\n className: `node-${this.node.type.name} ${className}`.trim(),\n attrs: this.options.attrs,\n })\n }\n\n get dom() {\n if (\n this.renderer.element.firstElementChild\n && !this.renderer.element.firstElementChild?.hasAttribute('data-node-view-wrapper')\n ) {\n throw Error('Please use the NodeViewWrapper component for your node view.')\n }\n\n return this.renderer.element as HTMLElement\n }\n\n get contentDOM() {\n if (this.node.isLeaf) {\n return null\n }\n\n return this.contentDOMElement\n }\n\n update(node: ProseMirrorNode, decorations: DecorationWithType[]) {\n const updateProps = (props?: Record<string, any>) => {\n this.renderer.updateProps(props)\n }\n\n if (node.type !== this.node.type) {\n return false\n }\n\n if (typeof this.options.update === 'function') {\n const oldNode = this.node\n const oldDecorations = this.decorations\n\n this.node = node\n this.decorations = decorations\n\n return this.options.update({\n oldNode,\n oldDecorations,\n newNode: node,\n newDecorations: decorations,\n updateProps: () => updateProps({ node, decorations }),\n })\n }\n\n if (node === this.node && this.decorations === decorations) {\n return true\n }\n\n this.node = node\n this.decorations = decorations\n\n updateProps({ node, decorations })\n\n return true\n }\n\n selectNode() {\n this.renderer.updateProps({\n selected: true,\n })\n }\n\n deselectNode() {\n this.renderer.updateProps({\n selected: false,\n })\n }\n\n destroy() {\n this.renderer.destroy()\n this.contentDOMElement = null\n }\n}\n\nexport function ReactNodeViewRenderer(\n component: any,\n options?: Partial<ReactNodeViewRendererOptions>,\n): NodeViewRenderer {\n return (props: NodeViewRendererProps) => {\n // try to get the parent component\n // this is important for vue devtools to show the component hierarchy correctly\n // maybe it’s `undefined` because <editor-content> isn’t rendered yet\n if (!(props.editor as Editor).contentComponent) {\n return {}\n }\n\n return new ReactNodeView(component, props, options) as unknown as ProseMirrorNodeView\n }\n}\n","import { EditorOptions } from '@tiptap/core'\nimport {\n DependencyList,\n useEffect,\n useRef,\n useState,\n} from 'react'\n\nimport { Editor } from './Editor'\n\nfunction useForceUpdate() {\n const [, setValue] = useState(0)\n\n return () => setValue(value => value + 1)\n}\n\nexport const useEditor = (options: Partial<EditorOptions> = {}, deps: DependencyList = []) => {\n const [editor, setEditor] = useState<Editor | null>(null)\n\n const forceUpdate = useForceUpdate()\n\n const {\n onBeforeCreate,\n onBlur,\n onCreate,\n onDestroy,\n onFocus,\n onSelectionUpdate,\n onTransaction,\n onUpdate,\n } = options\n\n const onBeforeCreateRef = useRef(onBeforeCreate)\n const onBlurRef = useRef(onBlur)\n const onCreateRef = useRef(onCreate)\n const onDestroyRef = useRef(onDestroy)\n const onFocusRef = useRef(onFocus)\n const onSelectionUpdateRef = useRef(onSelectionUpdate)\n const onTransactionRef = useRef(onTransaction)\n const onUpdateRef = useRef(onUpdate)\n\n // This effect will handle updating the editor instance\n // when the event handlers change.\n useEffect(() => {\n if (!editor) {\n return\n }\n\n if (onBeforeCreate) {\n editor.off('beforeCreate', onBeforeCreateRef.current)\n editor.on('beforeCreate', onBeforeCreate)\n onBeforeCreateRef.current = onBeforeCreate\n }\n\n if (onBlur) {\n editor.off('blur', onBlurRef.current)\n editor.on('blur', onBlur)\n onBlurRef.current = onBlur\n }\n\n if (onCreate) {\n editor.off('create', onCreateRef.current)\n editor.on('create', onCreate)\n onCreateRef.current = onCreate\n }\n\n if (onDestroy) {\n editor.off('destroy', onDestroyRef.current)\n editor.on('destroy', onDestroy)\n onDestroyRef.current = onDestroy\n }\n\n if (onFocus) {\n editor.off('focus', onFocusRef.current)\n editor.on('focus', onFocus)\n onFocusRef.current = onFocus\n }\n\n if (onSelectionUpdate) {\n editor.off('selectionUpdate', onSelectionUpdateRef.current)\n editor.on('selectionUpdate', onSelectionUpdate)\n onSelectionUpdateRef.current = onSelectionUpdate\n }\n\n if (onTransaction) {\n editor.off('transaction', onTransactionRef.current)\n editor.on('transaction', onTransaction)\n onTransactionRef.current = onTransaction\n }\n\n if (onUpdate) {\n editor.off('update', onUpdateRef.current)\n editor.on('update', onUpdate)\n onUpdateRef.current = onUpdate\n }\n }, [onBeforeCreate, onBlur, onCreate, onDestroy, onFocus, onSelectionUpdate, onTransaction, onUpdate, editor])\n\n useEffect(() => {\n let isMounted = true\n\n const instance = new Editor(options)\n\n setEditor(instance)\n\n instance.on('transaction', () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (isMounted) {\n forceUpdate()\n }\n })\n })\n })\n\n return () => {\n instance.destroy()\n isMounted = false\n }\n }, deps)\n\n return editor\n}\n"],"names":["useState","useEffect","BubbleMenuPlugin","React","CoreEditor","ReactDOM","flushSync","FloatingMenuPlugin","createContext","useContext","NodeView","useRef"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/EditorContent.tsx","../src/Editor.ts","../src/useEditor.ts","../src/Context.tsx","../src/BubbleMenu.tsx","../src/FloatingMenu.tsx","../src/useReactNodeView.ts","../src/NodeViewContent.tsx","../src/NodeViewWrapper.tsx","../src/ReactRenderer.tsx","../src/ReactNodeViewRenderer.tsx"],"sourcesContent":["import React, { HTMLProps } from 'react'\nimport ReactDOM, { flushSync } from 'react-dom'\n\nimport { Editor } from './Editor.js'\nimport { ReactRenderer } from './ReactRenderer.js'\n\nconst Portals: React.FC<{ renderers: Record<string, ReactRenderer> }> = ({ renderers }) => {\n return (\n <>\n {Object.entries(renderers).map(([key, renderer]) => {\n return ReactDOM.createPortal(renderer.reactElement, renderer.element, key)\n })}\n </>\n )\n}\n\nexport interface EditorContentProps extends HTMLProps<HTMLDivElement> {\n editor: Editor | null;\n}\n\nexport interface EditorContentState {\n renderers: Record<string, ReactRenderer>;\n}\n\nexport class PureEditorContent extends React.Component<EditorContentProps, EditorContentState> {\n editorContentRef: React.RefObject<any>\n\n initialized: boolean\n\n constructor(props: EditorContentProps) {\n super(props)\n this.editorContentRef = React.createRef()\n this.initialized = false\n\n this.state = {\n renderers: {},\n }\n }\n\n componentDidMount() {\n this.init()\n }\n\n componentDidUpdate() {\n this.init()\n }\n\n init() {\n const { editor } = this.props\n\n if (editor && editor.options.element) {\n if (editor.contentComponent) {\n return\n }\n\n const element = this.editorContentRef.current\n\n element.append(...editor.options.element.childNodes)\n\n editor.setOptions({\n element,\n })\n\n editor.contentComponent = this\n\n editor.createNodeViews()\n\n this.initialized = true\n }\n }\n\n maybeFlushSync(fn: () => void) {\n // Avoid calling flushSync until the editor is initialized.\n // Initialization happens during the componentDidMount or componentDidUpdate\n // lifecycle methods, and React doesn't allow calling flushSync from inside\n // a lifecycle method.\n if (this.initialized) {\n flushSync(fn)\n } else {\n fn()\n }\n }\n\n setRenderer(id: string, renderer: ReactRenderer) {\n this.maybeFlushSync(() => {\n this.setState(({ renderers }) => ({\n renderers: {\n ...renderers,\n [id]: renderer,\n },\n }))\n })\n }\n\n removeRenderer(id: string) {\n this.maybeFlushSync(() => {\n this.setState(({ renderers }) => {\n const nextRenderers = { ...renderers }\n\n delete nextRenderers[id]\n\n return { renderers: nextRenderers }\n })\n })\n }\n\n componentWillUnmount() {\n const { editor } = this.props\n\n if (!editor) {\n return\n }\n\n this.initialized = false\n\n if (!editor.isDestroyed) {\n editor.view.setProps({\n nodeViews: {},\n })\n }\n\n editor.contentComponent = null\n\n if (!editor.options.element.firstChild) {\n return\n }\n\n const newElement = document.createElement('div')\n\n newElement.append(...editor.options.element.childNodes)\n\n editor.setOptions({\n element: newElement,\n })\n }\n\n render() {\n const { editor, ...rest } = this.props\n\n return (\n <>\n <div ref={this.editorContentRef} {...rest} />\n {/* @ts-ignore */}\n <Portals renderers={this.state.renderers} />\n </>\n )\n }\n}\n\n// EditorContent should be re-created whenever the Editor instance changes\nconst EditorContentWithKey = (props: EditorContentProps) => {\n const key = React.useMemo(() => {\n return Math.floor(Math.random() * 0xFFFFFFFF).toString()\n }, [props.editor])\n\n // Can't use JSX here because it conflicts with the type definition of Vue's JSX, so use createElement\n return React.createElement(PureEditorContent, { key, ...props })\n}\n\nexport const EditorContent = React.memo(EditorContentWithKey)\n","import { Editor as CoreEditor } from '@tiptap/core'\nimport React from 'react'\n\nimport { EditorContentProps, EditorContentState } from './EditorContent.js'\nimport { ReactRenderer } from './ReactRenderer.js'\n\ntype ContentComponent = React.Component<EditorContentProps, EditorContentState> & {\n setRenderer(id: string, renderer: ReactRenderer): void;\n removeRenderer(id: string): void;\n}\n\nexport class Editor extends CoreEditor {\n public contentComponent: ContentComponent | null = null\n}\n","import { EditorOptions } from '@tiptap/core'\nimport {\n DependencyList,\n useEffect,\n useRef,\n useState,\n} from 'react'\n\nimport { Editor } from './Editor.js'\n\nfunction useForceUpdate() {\n const [, setValue] = useState(0)\n\n return () => setValue(value => value + 1)\n}\n\nexport const useEditor = (options: Partial<EditorOptions> = {}, deps: DependencyList = []) => {\n const [editor, setEditor] = useState<Editor | null>(null)\n\n const forceUpdate = useForceUpdate()\n\n const {\n onBeforeCreate,\n onBlur,\n onCreate,\n onDestroy,\n onFocus,\n onSelectionUpdate,\n onTransaction,\n onUpdate,\n } = options\n\n const onBeforeCreateRef = useRef(onBeforeCreate)\n const onBlurRef = useRef(onBlur)\n const onCreateRef = useRef(onCreate)\n const onDestroyRef = useRef(onDestroy)\n const onFocusRef = useRef(onFocus)\n const onSelectionUpdateRef = useRef(onSelectionUpdate)\n const onTransactionRef = useRef(onTransaction)\n const onUpdateRef = useRef(onUpdate)\n\n // This effect will handle updating the editor instance\n // when the event handlers change.\n useEffect(() => {\n if (!editor) {\n return\n }\n\n if (onBeforeCreate) {\n editor.off('beforeCreate', onBeforeCreateRef.current)\n editor.on('beforeCreate', onBeforeCreate)\n onBeforeCreateRef.current = onBeforeCreate\n }\n\n if (onBlur) {\n editor.off('blur', onBlurRef.current)\n editor.on('blur', onBlur)\n onBlurRef.current = onBlur\n }\n\n if (onCreate) {\n editor.off('create', onCreateRef.current)\n editor.on('create', onCreate)\n onCreateRef.current = onCreate\n }\n\n if (onDestroy) {\n editor.off('destroy', onDestroyRef.current)\n editor.on('destroy', onDestroy)\n onDestroyRef.current = onDestroy\n }\n\n if (onFocus) {\n editor.off('focus', onFocusRef.current)\n editor.on('focus', onFocus)\n onFocusRef.current = onFocus\n }\n\n if (onSelectionUpdate) {\n editor.off('selectionUpdate', onSelectionUpdateRef.current)\n editor.on('selectionUpdate', onSelectionUpdate)\n onSelectionUpdateRef.current = onSelectionUpdate\n }\n\n if (onTransaction) {\n editor.off('transaction', onTransactionRef.current)\n editor.on('transaction', onTransaction)\n onTransactionRef.current = onTransaction\n }\n\n if (onUpdate) {\n editor.off('update', onUpdateRef.current)\n editor.on('update', onUpdate)\n onUpdateRef.current = onUpdate\n }\n }, [onBeforeCreate, onBlur, onCreate, onDestroy, onFocus, onSelectionUpdate, onTransaction, onUpdate, editor])\n\n useEffect(() => {\n let isMounted = true\n\n const instance = new Editor(options)\n\n setEditor(instance)\n\n instance.on('transaction', () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (isMounted) {\n forceUpdate()\n }\n })\n })\n })\n\n return () => {\n isMounted = false\n }\n }, deps)\n\n useEffect(() => {\n return () => {\n editor?.destroy()\n }\n }, [editor])\n\n return editor\n}\n","import { EditorOptions } from '@tiptap/core'\nimport React, { createContext, ReactNode, useContext } from 'react'\n\nimport { Editor } from './Editor.js'\nimport { EditorContent } from './EditorContent.js'\nimport { useEditor } from './useEditor.js'\n\nexport type EditorContextValue = {\n editor: Editor | null;\n}\n\nexport const EditorContext = createContext<EditorContextValue>({\n editor: null,\n})\n\nexport const EditorConsumer = EditorContext.Consumer\n\nexport const useCurrentEditor = () => useContext(EditorContext)\n\nexport type EditorProviderProps = {\n children: ReactNode;\n slotBefore?: ReactNode;\n slotAfter?: ReactNode;\n} & Partial<EditorOptions>\n\nexport const EditorProvider = ({\n children, slotAfter, slotBefore, ...editorOptions\n}: EditorProviderProps) => {\n const editor = useEditor(editorOptions)\n\n if (!editor) {\n return null\n }\n\n return (\n <EditorContext.Provider value={{ editor }}>\n {slotBefore}\n <EditorConsumer>\n {({ editor: currentEditor }) => (\n <EditorContent editor={currentEditor} />\n )}\n </EditorConsumer>\n {children}\n {slotAfter}\n </EditorContext.Provider>\n )\n}\n","import { BubbleMenuPlugin, BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu'\nimport React, { useEffect, useState } from 'react'\n\nimport { useCurrentEditor } from './Context.js'\n\ntype Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;\n\nexport type BubbleMenuProps = Omit<Optional<BubbleMenuPluginProps, 'pluginKey' | 'editor'>, 'element'> & {\n className?: string;\n children: React.ReactNode;\n updateDelay?: number;\n};\n\nexport const BubbleMenu = (props: BubbleMenuProps) => {\n const [element, setElement] = useState<HTMLDivElement | null>(null)\n const { editor: currentEditor } = useCurrentEditor()\n\n useEffect(() => {\n if (!element) {\n return\n }\n\n if (props.editor?.isDestroyed || currentEditor?.isDestroyed) {\n return\n }\n\n const {\n pluginKey = 'bubbleMenu', editor, tippyOptions = {}, updateDelay, shouldShow = null,\n } = props\n\n const menuEditor = editor || currentEditor\n\n if (!menuEditor) {\n console.warn('BubbleMenu component is not rendered inside of an editor component or does not have editor prop.')\n return\n }\n\n const plugin = BubbleMenuPlugin({\n updateDelay,\n editor: menuEditor,\n element,\n pluginKey,\n shouldShow,\n tippyOptions,\n })\n\n menuEditor.registerPlugin(plugin)\n return () => menuEditor.unregisterPlugin(pluginKey)\n }, [props.editor, currentEditor, element])\n\n return (\n <div ref={setElement} className={props.className} style={{ visibility: 'hidden' }}>\n {props.children}\n </div>\n )\n}\n","import { FloatingMenuPlugin, FloatingMenuPluginProps } from '@tiptap/extension-floating-menu'\nimport React, {\n useEffect, useState,\n} from 'react'\n\nimport { useCurrentEditor } from './Context.js'\n\ntype Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>\n\nexport type FloatingMenuProps = Omit<Optional<FloatingMenuPluginProps, 'pluginKey' | 'editor'>, 'element'> & {\n className?: string,\n children: React.ReactNode\n}\n\nexport const FloatingMenu = (props: FloatingMenuProps) => {\n const [element, setElement] = useState<HTMLDivElement | null>(null)\n const { editor: currentEditor } = useCurrentEditor()\n\n useEffect(() => {\n if (!element) {\n return\n }\n\n if (props.editor?.isDestroyed || currentEditor?.isDestroyed) {\n return\n }\n\n const {\n pluginKey = 'floatingMenu',\n editor,\n tippyOptions = {},\n shouldShow = null,\n } = props\n\n const menuEditor = editor || currentEditor\n\n if (!menuEditor) {\n console.warn('FloatingMenu component is not rendered inside of an editor component or does not have editor prop.')\n return\n }\n\n const plugin = FloatingMenuPlugin({\n pluginKey,\n editor: menuEditor,\n element,\n tippyOptions,\n shouldShow,\n })\n\n menuEditor.registerPlugin(plugin)\n return () => menuEditor.unregisterPlugin(pluginKey)\n }, [\n props.editor,\n currentEditor,\n element,\n ])\n\n return (\n <div ref={setElement} className={props.className} style={{ visibility: 'hidden' }}>\n {props.children}\n </div>\n )\n}\n","import { createContext, useContext } from 'react'\n\nexport interface ReactNodeViewContextProps {\n onDragStart: (event: DragEvent) => void,\n nodeViewContentRef: (element: HTMLElement | null) => void,\n}\n\nexport const ReactNodeViewContext = createContext<Partial<ReactNodeViewContextProps>>({\n onDragStart: undefined,\n})\n\nexport const useReactNodeView = () => useContext(ReactNodeViewContext)\n","import React from 'react'\n\nimport { useReactNodeView } from './useReactNodeView.js'\n\nexport interface NodeViewContentProps {\n [key: string]: any,\n as?: React.ElementType,\n}\n\nexport const NodeViewContent: React.FC<NodeViewContentProps> = props => {\n const Tag = props.as || 'div'\n const { nodeViewContentRef } = useReactNodeView()\n\n return (\n <Tag\n {...props}\n ref={nodeViewContentRef}\n data-node-view-content=\"\"\n style={{\n whiteSpace: 'pre-wrap',\n ...props.style,\n }}\n />\n )\n}\n","import React from 'react'\n\nimport { useReactNodeView } from './useReactNodeView.js'\n\nexport interface NodeViewWrapperProps {\n [key: string]: any,\n as?: React.ElementType,\n}\n\nexport const NodeViewWrapper: React.FC<NodeViewWrapperProps> = React.forwardRef((props, ref) => {\n const { onDragStart } = useReactNodeView()\n const Tag = props.as || 'div'\n\n return (\n <Tag\n {...props}\n ref={ref}\n data-node-view-wrapper=\"\"\n onDragStart={onDragStart}\n style={{\n whiteSpace: 'normal',\n ...props.style,\n }}\n />\n )\n})\n","import { Editor } from '@tiptap/core'\nimport React from 'react'\n\nimport { Editor as ExtendedEditor } from './Editor.js'\n\nfunction isClassComponent(Component: any) {\n return !!(\n typeof Component === 'function'\n && Component.prototype\n && Component.prototype.isReactComponent\n )\n}\n\nfunction isForwardRefComponent(Component: any) {\n return !!(\n typeof Component === 'object'\n && Component.$$typeof?.toString() === 'Symbol(react.forward_ref)'\n )\n}\n\nexport interface ReactRendererOptions {\n editor: Editor,\n props?: Record<string, any>,\n as?: string,\n className?: string,\n attrs?: Record<string, string>,\n}\n\ntype ComponentType<R, P> =\n React.ComponentClass<P> |\n React.FunctionComponent<P> |\n React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<R>>;\n\nexport class ReactRenderer<R = unknown, P = unknown> {\n id: string\n\n editor: ExtendedEditor\n\n component: any\n\n element: Element\n\n props: Record<string, any>\n\n reactElement: React.ReactNode\n\n ref: R | null = null\n\n constructor(component: ComponentType<R, P>, {\n editor,\n props = {},\n as = 'div',\n className = '',\n attrs,\n }: ReactRendererOptions) {\n this.id = Math.floor(Math.random() * 0xFFFFFFFF).toString()\n this.component = component\n this.editor = editor as ExtendedEditor\n this.props = props\n this.element = document.createElement(as)\n this.element.classList.add('react-renderer')\n\n if (className) {\n this.element.classList.add(...className.split(' '))\n }\n\n if (attrs) {\n Object.keys(attrs).forEach(key => {\n this.element.setAttribute(key, attrs[key])\n })\n }\n\n this.render()\n }\n\n render(): void {\n const Component = this.component\n const props = this.props\n\n if (isClassComponent(Component) || isForwardRefComponent(Component)) {\n props.ref = (ref: R) => {\n this.ref = ref\n }\n }\n\n this.reactElement = <Component {...props } />\n\n this.editor?.contentComponent?.setRenderer(this.id, this)\n }\n\n updateProps(props: Record<string, any> = {}): void {\n this.props = {\n ...this.props,\n ...props,\n }\n\n this.render()\n }\n\n destroy(): void {\n this.editor?.contentComponent?.removeRenderer(this.id)\n }\n}\n","import {\n DecorationWithType,\n NodeView,\n NodeViewProps,\n NodeViewRenderer,\n NodeViewRendererOptions,\n NodeViewRendererProps,\n} from '@tiptap/core'\nimport { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { Decoration, NodeView as ProseMirrorNodeView } from '@tiptap/pm/view'\nimport React from 'react'\n\nimport { Editor } from './Editor.js'\nimport { ReactRenderer } from './ReactRenderer.js'\nimport { ReactNodeViewContext, ReactNodeViewContextProps } from './useReactNodeView.js'\n\nexport interface ReactNodeViewRendererOptions extends NodeViewRendererOptions {\n update:\n | ((props: {\n oldNode: ProseMirrorNode\n oldDecorations: Decoration[]\n newNode: ProseMirrorNode\n newDecorations: Decoration[]\n updateProps: () => void\n }) => boolean)\n | null\n as?: string\n className?: string\n attrs?: Record<string, string>\n}\n\nclass ReactNodeView extends NodeView<\n React.FunctionComponent,\n Editor,\n ReactNodeViewRendererOptions\n> {\n renderer!: ReactRenderer\n\n contentDOMElement!: HTMLElement | null\n\n mount() {\n const props: NodeViewProps = {\n editor: this.editor,\n node: this.node,\n decorations: this.decorations,\n selected: false,\n extension: this.extension,\n getPos: () => this.getPos(),\n updateAttributes: (attributes = {}) => this.updateAttributes(attributes),\n deleteNode: () => this.deleteNode(),\n }\n\n if (!(this.component as any).displayName) {\n const capitalizeFirstChar = (string: string): string => {\n return string.charAt(0).toUpperCase() + string.substring(1)\n }\n\n this.component.displayName = capitalizeFirstChar(this.extension.name)\n }\n\n const ReactNodeViewProvider: React.FunctionComponent = componentProps => {\n const Component = this.component\n const onDragStart = this.onDragStart.bind(this)\n const nodeViewContentRef: ReactNodeViewContextProps['nodeViewContentRef'] = element => {\n if (element && this.contentDOMElement && element.firstChild !== this.contentDOMElement) {\n element.appendChild(this.contentDOMElement)\n }\n }\n\n return (\n <>\n {/* @ts-ignore */}\n <ReactNodeViewContext.Provider value={{ onDragStart, nodeViewContentRef }}>\n {/* @ts-ignore */}\n <Component {...componentProps} />\n </ReactNodeViewContext.Provider>\n </>\n )\n }\n\n ReactNodeViewProvider.displayName = 'ReactNodeView'\n\n this.contentDOMElement = this.node.isLeaf\n ? null\n : document.createElement(this.node.isInline ? 'span' : 'div')\n\n if (this.contentDOMElement) {\n // For some reason the whiteSpace prop is not inherited properly in Chrome and Safari\n // With this fix it seems to work fine\n // See: https://github.com/ueberdosis/tiptap/issues/1197\n this.contentDOMElement.style.whiteSpace = 'inherit'\n }\n\n let as = this.node.isInline ? 'span' : 'div'\n\n if (this.options.as) {\n as = this.options.as\n }\n\n const { className = '' } = this.options\n\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this)\n this.editor.on('selectionUpdate', this.handleSelectionUpdate)\n\n this.renderer = new ReactRenderer(ReactNodeViewProvider, {\n editor: this.editor,\n props,\n as,\n className: `node-${this.node.type.name} ${className}`.trim(),\n attrs: this.options.attrs,\n })\n }\n\n get dom() {\n if (\n this.renderer.element.firstElementChild\n && !this.renderer.element.firstElementChild?.hasAttribute('data-node-view-wrapper')\n ) {\n throw Error('Please use the NodeViewWrapper component for your node view.')\n }\n\n return this.renderer.element as HTMLElement\n }\n\n get contentDOM() {\n if (this.node.isLeaf) {\n return null\n }\n\n return this.contentDOMElement\n }\n\n handleSelectionUpdate() {\n const { from, to } = this.editor.state.selection\n\n if (from <= this.getPos() && to >= this.getPos() + this.node.nodeSize) {\n this.selectNode()\n } else {\n this.deselectNode()\n }\n }\n\n update(node: ProseMirrorNode, decorations: DecorationWithType[]) {\n const updateProps = (props?: Record<string, any>) => {\n this.renderer.updateProps(props)\n }\n\n if (node.type !== this.node.type) {\n return false\n }\n\n if (typeof this.options.update === 'function') {\n const oldNode = this.node\n const oldDecorations = this.decorations\n\n this.node = node\n this.decorations = decorations\n\n return this.options.update({\n oldNode,\n oldDecorations,\n newNode: node,\n newDecorations: decorations,\n updateProps: () => updateProps({ node, decorations }),\n })\n }\n\n if (node === this.node && this.decorations === decorations) {\n return true\n }\n\n this.node = node\n this.decorations = decorations\n\n updateProps({ node, decorations })\n\n return true\n }\n\n selectNode() {\n this.renderer.updateProps({\n selected: true,\n })\n }\n\n deselectNode() {\n this.renderer.updateProps({\n selected: false,\n })\n }\n\n destroy() {\n this.renderer.destroy()\n this.editor.off('selectionUpdate', this.handleSelectionUpdate)\n this.contentDOMElement = null\n }\n}\n\nexport function ReactNodeViewRenderer(\n component: any,\n options?: Partial<ReactNodeViewRendererOptions>,\n): NodeViewRenderer {\n return (props: NodeViewRendererProps) => {\n // try to get the parent component\n // this is important for vue devtools to show the component hierarchy correctly\n // maybe it’s `undefined` because <editor-content> isn’t rendered yet\n if (!(props.editor as Editor).contentComponent) {\n return {}\n }\n\n return new ReactNodeView(component, props, options) as unknown as ProseMirrorNodeView\n }\n}\n"],"names":["React","ReactDOM","flushSync","CoreEditor","useState","useRef","useEffect","createContext","useContext","BubbleMenuPlugin","FloatingMenuPlugin","NodeView"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu';
2
2
  import React from 'react';
3
3
  declare type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
4
- export declare type BubbleMenuProps = Omit<Optional<BubbleMenuPluginProps, 'pluginKey'>, 'element'> & {
4
+ export declare type BubbleMenuProps = Omit<Optional<BubbleMenuPluginProps, 'pluginKey' | 'editor'>, 'element'> & {
5
5
  className?: string;
6
6
  children: React.ReactNode;
7
7
  updateDelay?: number;
8
8
  };
9
- export declare const BubbleMenu: (props: BubbleMenuProps) => JSX.Element;
9
+ export declare const BubbleMenu: (props: BubbleMenuProps) => React.JSX.Element;
10
10
  export {};
@@ -0,0 +1,15 @@
1
+ import { EditorOptions } from '@tiptap/core';
2
+ import React, { ReactNode } from 'react';
3
+ import { Editor } from './Editor.js';
4
+ export declare type EditorContextValue = {
5
+ editor: Editor | null;
6
+ };
7
+ export declare const EditorContext: React.Context<EditorContextValue>;
8
+ export declare const EditorConsumer: React.Consumer<EditorContextValue>;
9
+ export declare const useCurrentEditor: () => EditorContextValue;
10
+ export declare type EditorProviderProps = {
11
+ children: ReactNode;
12
+ slotBefore?: ReactNode;
13
+ slotAfter?: ReactNode;
14
+ } & Partial<EditorOptions>;
15
+ export declare const EditorProvider: ({ children, slotAfter, slotBefore, ...editorOptions }: EditorProviderProps) => React.JSX.Element | null;
@@ -1,7 +1,7 @@
1
1
  import { Editor as CoreEditor } from '@tiptap/core';
2
2
  import React from 'react';
3
- import { EditorContentProps, EditorContentState } from './EditorContent';
4
- import { ReactRenderer } from './ReactRenderer';
3
+ import { EditorContentProps, EditorContentState } from './EditorContent.js';
4
+ import { ReactRenderer } from './ReactRenderer.js';
5
5
  declare type ContentComponent = React.Component<EditorContentProps, EditorContentState> & {
6
6
  setRenderer(id: string, renderer: ReactRenderer): void;
7
7
  removeRenderer(id: string): void;
@@ -1,6 +1,6 @@
1
1
  import React, { HTMLProps } from 'react';
2
- import { Editor } from './Editor';
3
- import { ReactRenderer } from './ReactRenderer';
2
+ import { Editor } from './Editor.js';
3
+ import { ReactRenderer } from './ReactRenderer.js';
4
4
  export interface EditorContentProps extends HTMLProps<HTMLDivElement> {
5
5
  editor: Editor | null;
6
6
  }
@@ -18,6 +18,6 @@ export declare class PureEditorContent extends React.Component<EditorContentProp
18
18
  setRenderer(id: string, renderer: ReactRenderer): void;
19
19
  removeRenderer(id: string): void;
20
20
  componentWillUnmount(): void;
21
- render(): JSX.Element;
21
+ render(): React.JSX.Element;
22
22
  }
23
- export declare const EditorContent: React.MemoExoticComponent<typeof PureEditorContent>;
23
+ export declare const EditorContent: React.MemoExoticComponent<(props: EditorContentProps) => React.ReactElement<EditorContentProps, string | React.JSXElementConstructor<any>>>;
@@ -1,9 +1,9 @@
1
1
  import { FloatingMenuPluginProps } from '@tiptap/extension-floating-menu';
2
2
  import React from 'react';
3
3
  declare type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
4
- export declare type FloatingMenuProps = Omit<Optional<FloatingMenuPluginProps, 'pluginKey'>, 'element'> & {
4
+ export declare type FloatingMenuProps = Omit<Optional<FloatingMenuPluginProps, 'pluginKey' | 'editor'>, 'element'> & {
5
5
  className?: string;
6
6
  children: React.ReactNode;
7
7
  };
8
- export declare const FloatingMenu: (props: FloatingMenuProps) => JSX.Element;
8
+ export declare const FloatingMenu: (props: FloatingMenuProps) => React.JSX.Element;
9
9
  export {};
@@ -1,6 +1,6 @@
1
1
  import { Editor } from '@tiptap/core';
2
2
  import React from 'react';
3
- import { Editor as ExtendedEditor } from './Editor';
3
+ import { Editor as ExtendedEditor } from './Editor.js';
4
4
  export interface ReactRendererOptions {
5
5
  editor: Editor;
6
6
  props?: Record<string, any>;