@tiptap/react 2.1.0-rc.10 → 2.1.0-rc.12

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);
@@ -145,27 +114,178 @@
145
114
  };
146
115
  const EditorContent = React__default["default"].memo(EditorContentWithKey);
147
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
+ };
259
+
148
260
  const FloatingMenu = (props) => {
149
261
  const [element, setElement] = React.useState(null);
262
+ const { editor: currentEditor } = useCurrentEditor();
150
263
  React.useEffect(() => {
264
+ var _a;
151
265
  if (!element) {
152
266
  return;
153
267
  }
154
- 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)) {
155
269
  return;
156
270
  }
157
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
+ }
158
277
  const plugin = extensionFloatingMenu.FloatingMenuPlugin({
159
278
  pluginKey,
160
- editor,
279
+ editor: menuEditor,
161
280
  element,
162
281
  tippyOptions,
163
282
  shouldShow,
164
283
  });
165
- editor.registerPlugin(plugin);
166
- return () => editor.unregisterPlugin(pluginKey);
284
+ menuEditor.registerPlugin(plugin);
285
+ return () => menuEditor.unregisterPlugin(pluginKey);
167
286
  }, [
168
287
  props.editor,
288
+ currentEditor,
169
289
  element,
170
290
  ]);
171
291
  return (React__default["default"].createElement("div", { ref: setElement, className: props.className, style: { visibility: 'hidden' } }, props.children));
@@ -382,103 +502,19 @@
382
502
  };
383
503
  }
384
504
 
385
- function useForceUpdate() {
386
- const [, setValue] = React.useState(0);
387
- return () => setValue(value => value + 1);
388
- }
389
- const useEditor = (options = {}, deps = []) => {
390
- const [editor, setEditor] = React.useState(null);
391
- const forceUpdate = useForceUpdate();
392
- const { onBeforeCreate, onBlur, onCreate, onDestroy, onFocus, onSelectionUpdate, onTransaction, onUpdate, } = options;
393
- const onBeforeCreateRef = React.useRef(onBeforeCreate);
394
- const onBlurRef = React.useRef(onBlur);
395
- const onCreateRef = React.useRef(onCreate);
396
- const onDestroyRef = React.useRef(onDestroy);
397
- const onFocusRef = React.useRef(onFocus);
398
- const onSelectionUpdateRef = React.useRef(onSelectionUpdate);
399
- const onTransactionRef = React.useRef(onTransaction);
400
- const onUpdateRef = React.useRef(onUpdate);
401
- // This effect will handle updating the editor instance
402
- // when the event handlers change.
403
- React.useEffect(() => {
404
- if (!editor) {
405
- return;
406
- }
407
- if (onBeforeCreate) {
408
- editor.off('beforeCreate', onBeforeCreateRef.current);
409
- editor.on('beforeCreate', onBeforeCreate);
410
- onBeforeCreateRef.current = onBeforeCreate;
411
- }
412
- if (onBlur) {
413
- editor.off('blur', onBlurRef.current);
414
- editor.on('blur', onBlur);
415
- onBlurRef.current = onBlur;
416
- }
417
- if (onCreate) {
418
- editor.off('create', onCreateRef.current);
419
- editor.on('create', onCreate);
420
- onCreateRef.current = onCreate;
421
- }
422
- if (onDestroy) {
423
- editor.off('destroy', onDestroyRef.current);
424
- editor.on('destroy', onDestroy);
425
- onDestroyRef.current = onDestroy;
426
- }
427
- if (onFocus) {
428
- editor.off('focus', onFocusRef.current);
429
- editor.on('focus', onFocus);
430
- onFocusRef.current = onFocus;
431
- }
432
- if (onSelectionUpdate) {
433
- editor.off('selectionUpdate', onSelectionUpdateRef.current);
434
- editor.on('selectionUpdate', onSelectionUpdate);
435
- onSelectionUpdateRef.current = onSelectionUpdate;
436
- }
437
- if (onTransaction) {
438
- editor.off('transaction', onTransactionRef.current);
439
- editor.on('transaction', onTransaction);
440
- onTransactionRef.current = onTransaction;
441
- }
442
- if (onUpdate) {
443
- editor.off('update', onUpdateRef.current);
444
- editor.on('update', onUpdate);
445
- onUpdateRef.current = onUpdate;
446
- }
447
- }, [onBeforeCreate, onBlur, onCreate, onDestroy, onFocus, onSelectionUpdate, onTransaction, onUpdate, editor]);
448
- React.useEffect(() => {
449
- let isMounted = true;
450
- const instance = new Editor(options);
451
- setEditor(instance);
452
- instance.on('transaction', () => {
453
- requestAnimationFrame(() => {
454
- requestAnimationFrame(() => {
455
- if (isMounted) {
456
- forceUpdate();
457
- }
458
- });
459
- });
460
- });
461
- return () => {
462
- isMounted = false;
463
- };
464
- }, deps);
465
- React.useEffect(() => {
466
- return () => {
467
- editor === null || editor === void 0 ? void 0 : editor.destroy();
468
- };
469
- }, [editor]);
470
- return editor;
471
- };
472
-
473
505
  exports.BubbleMenu = BubbleMenu;
474
506
  exports.Editor = Editor;
507
+ exports.EditorConsumer = EditorConsumer;
475
508
  exports.EditorContent = EditorContent;
509
+ exports.EditorContext = EditorContext;
510
+ exports.EditorProvider = EditorProvider;
476
511
  exports.FloatingMenu = FloatingMenu;
477
512
  exports.NodeViewContent = NodeViewContent;
478
513
  exports.NodeViewWrapper = NodeViewWrapper;
479
514
  exports.PureEditorContent = PureEditorContent;
480
515
  exports.ReactNodeViewRenderer = ReactNodeViewRenderer;
481
516
  exports.ReactRenderer = ReactRenderer;
517
+ exports.useCurrentEditor = useCurrentEditor;
482
518
  exports.useEditor = useEditor;
483
519
  Object.keys(core).forEach(function (k) {
484
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.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 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 { 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.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","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"],"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;
@@ -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
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,4 +1,5 @@
1
1
  export * from './BubbleMenu.js';
2
+ export * from './Context.js';
2
3
  export { Editor } from './Editor.js';
3
4
  export * from './EditorContent.js';
4
5
  export * from './FloatingMenu.js';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tiptap/react",
3
3
  "description": "React components for tiptap",
4
- "version": "2.1.0-rc.10",
4
+ "version": "2.1.0-rc.12",
5
5
  "homepage": "https://tiptap.dev",
6
6
  "keywords": [
7
7
  "tiptap",
@@ -29,14 +29,14 @@
29
29
  "dist"
30
30
  ],
31
31
  "dependencies": {
32
- "@tiptap/extension-bubble-menu": "^2.1.0-rc.10",
33
- "@tiptap/extension-floating-menu": "^2.1.0-rc.10"
32
+ "@tiptap/extension-bubble-menu": "^2.1.0-rc.12",
33
+ "@tiptap/extension-floating-menu": "^2.1.0-rc.12"
34
34
  },
35
35
  "devDependencies": {
36
- "@tiptap/core": "^2.1.0-rc.10",
37
- "@tiptap/pm": "^2.1.0-rc.10",
38
- "@types/react": "^18.0.1",
39
- "@types/react-dom": "^18.0.0",
36
+ "@tiptap/core": "^2.1.0-rc.12",
37
+ "@tiptap/pm": "^2.1.0-rc.12",
38
+ "@types/react": "^18.2.14",
39
+ "@types/react-dom": "^18.2.6",
40
40
  "react": "^18.0.0",
41
41
  "react-dom": "^18.0.0"
42
42
  },