@tiptap/react 3.0.0 → 3.0.1

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.
Files changed (215) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +5 -1
  3. package/dist/index.cjs +1030 -1163
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.d.cts +350 -0
  6. package/dist/index.d.ts +350 -0
  7. package/dist/index.js +970 -1138
  8. package/dist/index.js.map +1 -1
  9. package/dist/menus/index.cjs +142 -0
  10. package/dist/menus/index.cjs.map +1 -0
  11. package/dist/menus/index.d.cts +19 -0
  12. package/dist/menus/index.d.ts +19 -0
  13. package/dist/menus/index.js +104 -0
  14. package/dist/menus/index.js.map +1 -0
  15. package/package.json +34 -21
  16. package/src/Context.tsx +18 -12
  17. package/src/Editor.ts +10 -11
  18. package/src/EditorContent.tsx +104 -64
  19. package/src/NodeViewContent.tsx +13 -8
  20. package/src/NodeViewWrapper.tsx +3 -2
  21. package/src/ReactMarkViewRenderer.tsx +111 -0
  22. package/src/ReactNodeViewRenderer.tsx +184 -67
  23. package/src/ReactRenderer.tsx +152 -51
  24. package/src/index.ts +2 -3
  25. package/src/menus/BubbleMenu.tsx +68 -0
  26. package/src/menus/FloatingMenu.tsx +68 -0
  27. package/src/menus/index.ts +2 -0
  28. package/src/types.ts +6 -0
  29. package/src/useEditor.ts +286 -166
  30. package/src/useEditorState.ts +133 -85
  31. package/src/useReactNodeView.ts +21 -5
  32. package/dist/index.umd.js +0 -1219
  33. package/dist/index.umd.js.map +0 -1
  34. package/dist/packages/core/src/CommandManager.d.ts +0 -20
  35. package/dist/packages/core/src/Editor.d.ts +0 -161
  36. package/dist/packages/core/src/EventEmitter.d.ts +0 -11
  37. package/dist/packages/core/src/Extension.d.ts +0 -343
  38. package/dist/packages/core/src/ExtensionManager.d.ts +0 -55
  39. package/dist/packages/core/src/InputRule.d.ts +0 -42
  40. package/dist/packages/core/src/Mark.d.ts +0 -451
  41. package/dist/packages/core/src/Node.d.ts +0 -611
  42. package/dist/packages/core/src/NodePos.d.ts +0 -44
  43. package/dist/packages/core/src/NodeView.d.ts +0 -31
  44. package/dist/packages/core/src/PasteRule.d.ts +0 -50
  45. package/dist/packages/core/src/Tracker.d.ts +0 -11
  46. package/dist/packages/core/src/commands/blur.d.ts +0 -13
  47. package/dist/packages/core/src/commands/clearContent.d.ts +0 -14
  48. package/dist/packages/core/src/commands/clearNodes.d.ts +0 -13
  49. package/dist/packages/core/src/commands/command.d.ts +0 -18
  50. package/dist/packages/core/src/commands/createParagraphNear.d.ts +0 -13
  51. package/dist/packages/core/src/commands/cut.d.ts +0 -20
  52. package/dist/packages/core/src/commands/deleteCurrentNode.d.ts +0 -13
  53. package/dist/packages/core/src/commands/deleteNode.d.ts +0 -15
  54. package/dist/packages/core/src/commands/deleteRange.d.ts +0 -14
  55. package/dist/packages/core/src/commands/deleteSelection.d.ts +0 -13
  56. package/dist/packages/core/src/commands/enter.d.ts +0 -13
  57. package/dist/packages/core/src/commands/exitCode.d.ts +0 -13
  58. package/dist/packages/core/src/commands/extendMarkRange.d.ts +0 -25
  59. package/dist/packages/core/src/commands/first.d.ts +0 -14
  60. package/dist/packages/core/src/commands/focus.d.ts +0 -27
  61. package/dist/packages/core/src/commands/forEach.d.ts +0 -14
  62. package/dist/packages/core/src/commands/index.d.ts +0 -55
  63. package/dist/packages/core/src/commands/insertContent.d.ts +0 -34
  64. package/dist/packages/core/src/commands/insertContentAt.d.ts +0 -47
  65. package/dist/packages/core/src/commands/join.d.ts +0 -41
  66. package/dist/packages/core/src/commands/joinItemBackward.d.ts +0 -13
  67. package/dist/packages/core/src/commands/joinItemForward.d.ts +0 -13
  68. package/dist/packages/core/src/commands/joinTextblockBackward.d.ts +0 -12
  69. package/dist/packages/core/src/commands/joinTextblockForward.d.ts +0 -12
  70. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +0 -14
  71. package/dist/packages/core/src/commands/lift.d.ts +0 -17
  72. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +0 -13
  73. package/dist/packages/core/src/commands/liftListItem.d.ts +0 -15
  74. package/dist/packages/core/src/commands/newlineInCode.d.ts +0 -13
  75. package/dist/packages/core/src/commands/resetAttributes.d.ts +0 -16
  76. package/dist/packages/core/src/commands/scrollIntoView.d.ts +0 -13
  77. package/dist/packages/core/src/commands/selectAll.d.ts +0 -13
  78. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +0 -13
  79. package/dist/packages/core/src/commands/selectNodeForward.d.ts +0 -13
  80. package/dist/packages/core/src/commands/selectParentNode.d.ts +0 -13
  81. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +0 -13
  82. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +0 -13
  83. package/dist/packages/core/src/commands/setContent.d.ts +0 -40
  84. package/dist/packages/core/src/commands/setMark.d.ts +0 -15
  85. package/dist/packages/core/src/commands/setMeta.d.ts +0 -15
  86. package/dist/packages/core/src/commands/setNode.d.ts +0 -16
  87. package/dist/packages/core/src/commands/setNodeSelection.d.ts +0 -14
  88. package/dist/packages/core/src/commands/setTextSelection.d.ts +0 -14
  89. package/dist/packages/core/src/commands/sinkListItem.d.ts +0 -15
  90. package/dist/packages/core/src/commands/splitBlock.d.ts +0 -17
  91. package/dist/packages/core/src/commands/splitListItem.d.ts +0 -15
  92. package/dist/packages/core/src/commands/toggleList.d.ts +0 -18
  93. package/dist/packages/core/src/commands/toggleMark.d.ts +0 -30
  94. package/dist/packages/core/src/commands/toggleNode.d.ts +0 -17
  95. package/dist/packages/core/src/commands/toggleWrap.d.ts +0 -16
  96. package/dist/packages/core/src/commands/undoInputRule.d.ts +0 -13
  97. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +0 -13
  98. package/dist/packages/core/src/commands/unsetMark.d.ts +0 -25
  99. package/dist/packages/core/src/commands/updateAttributes.d.ts +0 -24
  100. package/dist/packages/core/src/commands/wrapIn.d.ts +0 -16
  101. package/dist/packages/core/src/commands/wrapInList.d.ts +0 -16
  102. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +0 -5
  103. package/dist/packages/core/src/extensions/commands.d.ts +0 -3
  104. package/dist/packages/core/src/extensions/editable.d.ts +0 -2
  105. package/dist/packages/core/src/extensions/focusEvents.d.ts +0 -2
  106. package/dist/packages/core/src/extensions/index.d.ts +0 -6
  107. package/dist/packages/core/src/extensions/keymap.d.ts +0 -2
  108. package/dist/packages/core/src/extensions/tabindex.d.ts +0 -2
  109. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +0 -10
  110. package/dist/packages/core/src/helpers/createChainableState.d.ts +0 -10
  111. package/dist/packages/core/src/helpers/createDocument.d.ts +0 -12
  112. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +0 -15
  113. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +0 -7
  114. package/dist/packages/core/src/helpers/findChildren.d.ts +0 -9
  115. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +0 -10
  116. package/dist/packages/core/src/helpers/findParentNode.d.ts +0 -16
  117. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +0 -17
  118. package/dist/packages/core/src/helpers/generateHTML.d.ts +0 -8
  119. package/dist/packages/core/src/helpers/generateJSON.d.ts +0 -8
  120. package/dist/packages/core/src/helpers/generateText.d.ts +0 -12
  121. package/dist/packages/core/src/helpers/getAttributes.d.ts +0 -9
  122. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +0 -6
  123. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +0 -11
  124. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +0 -8
  125. package/dist/packages/core/src/helpers/getExtensionField.d.ts +0 -9
  126. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +0 -2
  127. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +0 -3
  128. package/dist/packages/core/src/helpers/getMarkRange.d.ts +0 -3
  129. package/dist/packages/core/src/helpers/getMarkType.d.ts +0 -2
  130. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +0 -3
  131. package/dist/packages/core/src/helpers/getNodeAtPosition.d.ts +0 -11
  132. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +0 -3
  133. package/dist/packages/core/src/helpers/getNodeType.d.ts +0 -2
  134. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +0 -3
  135. package/dist/packages/core/src/helpers/getSchema.d.ts +0 -4
  136. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +0 -10
  137. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +0 -8
  138. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +0 -8
  139. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +0 -9
  140. package/dist/packages/core/src/helpers/getText.d.ts +0 -15
  141. package/dist/packages/core/src/helpers/getTextBetween.d.ts +0 -14
  142. package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +0 -8
  143. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +0 -8
  144. package/dist/packages/core/src/helpers/index.d.ts +0 -50
  145. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +0 -9
  146. package/dist/packages/core/src/helpers/isActive.d.ts +0 -2
  147. package/dist/packages/core/src/helpers/isAtEndOfNode.d.ts +0 -2
  148. package/dist/packages/core/src/helpers/isAtStartOfNode.d.ts +0 -2
  149. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +0 -2
  150. package/dist/packages/core/src/helpers/isList.d.ts +0 -2
  151. package/dist/packages/core/src/helpers/isMarkActive.d.ts +0 -3
  152. package/dist/packages/core/src/helpers/isNodeActive.d.ts +0 -3
  153. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +0 -2
  154. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +0 -2
  155. package/dist/packages/core/src/helpers/isTextSelection.d.ts +0 -2
  156. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +0 -2
  157. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +0 -4
  158. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +0 -2
  159. package/dist/packages/core/src/helpers/splitExtensions.d.ts +0 -9
  160. package/dist/packages/core/src/index.d.ts +0 -24
  161. package/dist/packages/core/src/inputRules/index.d.ts +0 -5
  162. package/dist/packages/core/src/inputRules/markInputRule.d.ts +0 -13
  163. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +0 -23
  164. package/dist/packages/core/src/inputRules/textInputRule.d.ts +0 -10
  165. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +0 -15
  166. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +0 -28
  167. package/dist/packages/core/src/pasteRules/index.d.ts +0 -3
  168. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +0 -13
  169. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +0 -13
  170. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +0 -10
  171. package/dist/packages/core/src/style.d.ts +0 -1
  172. package/dist/packages/core/src/types.d.ts +0 -255
  173. package/dist/packages/core/src/utilities/callOrReturn.d.ts +0 -9
  174. package/dist/packages/core/src/utilities/createStyleTag.d.ts +0 -1
  175. package/dist/packages/core/src/utilities/deleteProps.d.ts +0 -6
  176. package/dist/packages/core/src/utilities/elementFromString.d.ts +0 -1
  177. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +0 -1
  178. package/dist/packages/core/src/utilities/findDuplicates.d.ts +0 -1
  179. package/dist/packages/core/src/utilities/fromString.d.ts +0 -1
  180. package/dist/packages/core/src/utilities/index.d.ts +0 -20
  181. package/dist/packages/core/src/utilities/isAndroid.d.ts +0 -1
  182. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +0 -1
  183. package/dist/packages/core/src/utilities/isFunction.d.ts +0 -1
  184. package/dist/packages/core/src/utilities/isMacOS.d.ts +0 -1
  185. package/dist/packages/core/src/utilities/isNumber.d.ts +0 -1
  186. package/dist/packages/core/src/utilities/isPlainObject.d.ts +0 -1
  187. package/dist/packages/core/src/utilities/isRegExp.d.ts +0 -1
  188. package/dist/packages/core/src/utilities/isString.d.ts +0 -1
  189. package/dist/packages/core/src/utilities/isiOS.d.ts +0 -1
  190. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +0 -1
  191. package/dist/packages/core/src/utilities/mergeDeep.d.ts +0 -1
  192. package/dist/packages/core/src/utilities/minMax.d.ts +0 -1
  193. package/dist/packages/core/src/utilities/objectIncludes.d.ts +0 -8
  194. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +0 -8
  195. package/dist/packages/extension-bubble-menu/src/bubble-menu-plugin.d.ts +0 -76
  196. package/dist/packages/extension-bubble-menu/src/bubble-menu.d.ts +0 -15
  197. package/dist/packages/extension-bubble-menu/src/index.d.ts +0 -4
  198. package/dist/packages/extension-floating-menu/src/floating-menu-plugin.d.ts +0 -66
  199. package/dist/packages/extension-floating-menu/src/floating-menu.d.ts +0 -15
  200. package/dist/packages/extension-floating-menu/src/index.d.ts +0 -4
  201. package/dist/packages/react/src/BubbleMenu.d.ts +0 -11
  202. package/dist/packages/react/src/Context.d.ts +0 -23
  203. package/dist/packages/react/src/Editor.d.ts +0 -12
  204. package/dist/packages/react/src/EditorContent.d.ts +0 -24
  205. package/dist/packages/react/src/FloatingMenu.d.ts +0 -10
  206. package/dist/packages/react/src/NodeViewContent.d.ts +0 -6
  207. package/dist/packages/react/src/NodeViewWrapper.d.ts +0 -6
  208. package/dist/packages/react/src/ReactNodeViewRenderer.d.ts +0 -16
  209. package/dist/packages/react/src/ReactRenderer.d.ts +0 -62
  210. package/dist/packages/react/src/index.d.ts +0 -13
  211. package/dist/packages/react/src/useEditor.d.ts +0 -39
  212. package/dist/packages/react/src/useEditorState.d.ts +0 -22
  213. package/dist/packages/react/src/useReactNodeView.d.ts +0 -6
  214. package/src/BubbleMenu.tsx +0 -57
  215. package/src/FloatingMenu.tsx +0 -64
@@ -1,16 +0,0 @@
1
- import { NodeViewRenderer, NodeViewRendererOptions } from '@tiptap/core';
2
- import { Node as ProseMirrorNode } from '@tiptap/pm/model';
3
- import { Decoration } from '@tiptap/pm/view';
4
- export interface ReactNodeViewRendererOptions extends NodeViewRendererOptions {
5
- update: ((props: {
6
- oldNode: ProseMirrorNode;
7
- oldDecorations: Decoration[];
8
- newNode: ProseMirrorNode;
9
- newDecorations: Decoration[];
10
- updateProps: () => void;
11
- }) => boolean) | null;
12
- as?: string;
13
- className?: string;
14
- attrs?: Record<string, string>;
15
- }
16
- export declare function ReactNodeViewRenderer(component: any, options?: Partial<ReactNodeViewRendererOptions>): NodeViewRenderer;
@@ -1,62 +0,0 @@
1
- import { Editor } from '@tiptap/core';
2
- import React from 'react';
3
- import { Editor as ExtendedEditor } from './Editor.js';
4
- export interface ReactRendererOptions {
5
- /**
6
- * The editor instance.
7
- * @type {Editor}
8
- */
9
- editor: Editor;
10
- /**
11
- * The props for the component.
12
- * @type {Record<string, any>}
13
- * @default {}
14
- */
15
- props?: Record<string, any>;
16
- /**
17
- * The tag name of the element.
18
- * @type {string}
19
- * @default 'div'
20
- */
21
- as?: string;
22
- /**
23
- * The class name of the element.
24
- * @type {string}
25
- * @default ''
26
- * @example 'foo bar'
27
- */
28
- className?: string;
29
- /**
30
- * The attributes of the element.
31
- * @type {Record<string, string>}
32
- * @default {}
33
- * @example { 'data-foo': 'bar' }
34
- */
35
- attrs?: Record<string, string>;
36
- }
37
- type ComponentType<R, P> = React.ComponentClass<P> | React.FunctionComponent<P> | React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<R>>;
38
- /**
39
- * The ReactRenderer class. It's responsible for rendering React components inside the editor.
40
- * @example
41
- * new ReactRenderer(MyComponent, {
42
- * editor,
43
- * props: {
44
- * foo: 'bar',
45
- * },
46
- * as: 'span',
47
- * })
48
- */
49
- export declare class ReactRenderer<R = unknown, P = unknown> {
50
- id: string;
51
- editor: ExtendedEditor;
52
- component: any;
53
- element: Element;
54
- props: Record<string, any>;
55
- reactElement: React.ReactNode;
56
- ref: R | null;
57
- constructor(component: ComponentType<R, P>, { editor, props, as, className, attrs, }: ReactRendererOptions);
58
- render(): void;
59
- updateProps(props?: Record<string, any>): void;
60
- destroy(): void;
61
- }
62
- export {};
@@ -1,13 +0,0 @@
1
- export * from './BubbleMenu.js';
2
- export * from './Context.js';
3
- export { Editor } from './Editor.js';
4
- export * from './EditorContent.js';
5
- export * from './FloatingMenu.js';
6
- export * from './NodeViewContent.js';
7
- export * from './NodeViewWrapper.js';
8
- export * from './ReactNodeViewRenderer.js';
9
- export * from './ReactRenderer.js';
10
- export * from './useEditor.js';
11
- export * from './useEditorState.js';
12
- export * from './useReactNodeView.js';
13
- export * from '@tiptap/core';
@@ -1,39 +0,0 @@
1
- import { EditorOptions } from '@tiptap/core';
2
- import { DependencyList } from 'react';
3
- import { Editor } from './Editor.js';
4
- /**
5
- * The options for the `useEditor` hook.
6
- */
7
- export type UseEditorOptions = Partial<EditorOptions> & {
8
- /**
9
- * Whether to render the editor on the first render.
10
- * If client-side rendering, set this to `true`.
11
- * If server-side rendering, set this to `false`.
12
- * @default true
13
- */
14
- immediatelyRender?: boolean;
15
- /**
16
- * Whether to re-render the editor on each transaction.
17
- * This is legacy behavior that will be removed in future versions.
18
- * @default true
19
- */
20
- shouldRerenderOnTransaction?: boolean;
21
- };
22
- /**
23
- * This hook allows you to create an editor instance.
24
- * @param options The editor options
25
- * @param deps The dependencies to watch for changes
26
- * @returns The editor instance
27
- * @example const editor = useEditor({ extensions: [...] })
28
- */
29
- export declare function useEditor(options: UseEditorOptions & {
30
- immediatelyRender: true;
31
- }, deps?: DependencyList): Editor;
32
- /**
33
- * This hook allows you to create an editor instance.
34
- * @param options The editor options
35
- * @param deps The dependencies to watch for changes
36
- * @returns The editor instance
37
- * @example const editor = useEditor({ extensions: [...] })
38
- */
39
- export declare function useEditor(options?: UseEditorOptions, deps?: DependencyList): Editor | null;
@@ -1,22 +0,0 @@
1
- import type { Editor } from './Editor.js';
2
- export type EditorStateSnapshot<TEditor extends Editor | null = Editor | null> = {
3
- editor: TEditor;
4
- transactionNumber: number;
5
- };
6
- export type UseEditorStateOptions<TSelectorResult, TEditor extends Editor | null = Editor | null> = {
7
- /**
8
- * The editor instance.
9
- */
10
- editor: TEditor;
11
- /**
12
- * A selector function to determine the value to compare for re-rendering.
13
- */
14
- selector: (context: EditorStateSnapshot<TEditor>) => TSelectorResult;
15
- /**
16
- * A custom equality function to determine if the editor should re-render.
17
- * @default `(a, b) => a === b`
18
- */
19
- equalityFn?: (a: TSelectorResult, b: TSelectorResult | null) => boolean;
20
- };
21
- export declare function useEditorState<TSelectorResult>(options: UseEditorStateOptions<TSelectorResult, Editor>): TSelectorResult;
22
- export declare function useEditorState<TSelectorResult>(options: UseEditorStateOptions<TSelectorResult, Editor | null>): TSelectorResult | null;
@@ -1,6 +0,0 @@
1
- export interface ReactNodeViewContextProps {
2
- onDragStart: (event: DragEvent) => void;
3
- nodeViewContentRef: (element: HTMLElement | null) => void;
4
- }
5
- export declare const ReactNodeViewContext: import("react").Context<Partial<ReactNodeViewContextProps>>;
6
- export declare const useReactNodeView: () => Partial<ReactNodeViewContextProps>;
@@ -1,57 +0,0 @@
1
- import { BubbleMenuPlugin, BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu'
2
- import React, { useEffect, useState } from 'react'
3
-
4
- import { useCurrentEditor } from './Context.js'
5
-
6
- type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
7
-
8
- export type BubbleMenuProps = Omit<Optional<BubbleMenuPluginProps, 'pluginKey'>, 'element' | 'editor'> & {
9
- editor: BubbleMenuPluginProps['editor'] | null;
10
- className?: string;
11
- children: React.ReactNode;
12
- updateDelay?: number;
13
- };
14
-
15
- export const BubbleMenu = (props: BubbleMenuProps) => {
16
- const [element, setElement] = useState<HTMLDivElement | null>(null)
17
- const { editor: currentEditor } = useCurrentEditor()
18
-
19
- useEffect(() => {
20
- if (!element) {
21
- return
22
- }
23
-
24
- if (props.editor?.isDestroyed || currentEditor?.isDestroyed) {
25
- return
26
- }
27
-
28
- const {
29
- pluginKey = 'bubbleMenu', editor, tippyOptions = {}, updateDelay, shouldShow = null,
30
- } = props
31
-
32
- const menuEditor = editor || currentEditor
33
-
34
- if (!menuEditor) {
35
- console.warn('BubbleMenu component is not rendered inside of an editor component or does not have editor prop.')
36
- return
37
- }
38
-
39
- const plugin = BubbleMenuPlugin({
40
- updateDelay,
41
- editor: menuEditor,
42
- element,
43
- pluginKey,
44
- shouldShow,
45
- tippyOptions,
46
- })
47
-
48
- menuEditor.registerPlugin(plugin)
49
- return () => menuEditor.unregisterPlugin(pluginKey)
50
- }, [props.editor, currentEditor, element])
51
-
52
- return (
53
- <div ref={setElement} className={props.className} style={{ visibility: 'hidden' }}>
54
- {props.children}
55
- </div>
56
- )
57
- }
@@ -1,64 +0,0 @@
1
- import { FloatingMenuPlugin, FloatingMenuPluginProps } from '@tiptap/extension-floating-menu'
2
- import React, {
3
- useEffect, useState,
4
- } from 'react'
5
-
6
- import { useCurrentEditor } from './Context.js'
7
-
8
- type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>
9
-
10
- export type FloatingMenuProps = Omit<Optional<FloatingMenuPluginProps, 'pluginKey'>, 'element' | 'editor'> & {
11
- editor: FloatingMenuPluginProps['editor'] | null;
12
- className?: string,
13
- children: React.ReactNode
14
- }
15
-
16
- export const FloatingMenu = (props: FloatingMenuProps) => {
17
- const [element, setElement] = useState<HTMLDivElement | null>(null)
18
- const { editor: currentEditor } = useCurrentEditor()
19
-
20
- useEffect(() => {
21
- if (!element) {
22
- return
23
- }
24
-
25
- if (props.editor?.isDestroyed || currentEditor?.isDestroyed) {
26
- return
27
- }
28
-
29
- const {
30
- pluginKey = 'floatingMenu',
31
- editor,
32
- tippyOptions = {},
33
- shouldShow = null,
34
- } = props
35
-
36
- const menuEditor = editor || currentEditor
37
-
38
- if (!menuEditor) {
39
- console.warn('FloatingMenu component is not rendered inside of an editor component or does not have editor prop.')
40
- return
41
- }
42
-
43
- const plugin = FloatingMenuPlugin({
44
- pluginKey,
45
- editor: menuEditor,
46
- element,
47
- tippyOptions,
48
- shouldShow,
49
- })
50
-
51
- menuEditor.registerPlugin(plugin)
52
- return () => menuEditor.unregisterPlugin(pluginKey)
53
- }, [
54
- props.editor,
55
- currentEditor,
56
- element,
57
- ])
58
-
59
- return (
60
- <div ref={setElement} className={props.className} style={{ visibility: 'hidden' }}>
61
- {props.children}
62
- </div>
63
- )
64
- }