@tiptap/react 2.0.0-beta.99 → 2.0.0-rc.2
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/README.md +3 -3
- package/dist/{tiptap-react.cjs.js → index.cjs} +229 -153
- package/dist/index.cjs.map +1 -0
- package/dist/{tiptap-react.esm.js → index.js} +229 -153
- package/dist/index.js.map +1 -0
- package/dist/{tiptap-react.umd.js → index.umd.js} +230 -154
- package/dist/index.umd.js.map +1 -0
- package/dist/packages/react/src/BubbleMenu.d.ts +4 -2
- package/dist/packages/react/src/Editor.d.ts +8 -2
- package/dist/packages/react/src/EditorContent.d.ts +5 -1
- package/dist/packages/react/src/FloatingMenu.d.ts +3 -2
- package/dist/packages/react/src/ReactNodeViewRenderer.d.ts +4 -2
- package/dist/packages/react/src/ReactRenderer.d.ts +5 -7
- package/dist/packages/react/src/index.d.ts +6 -6
- package/dist/packages/react/src/useEditor.d.ts +1 -1
- package/package.json +30 -16
- package/src/BubbleMenu.tsx +24 -24
- package/src/Editor.ts +9 -2
- package/src/EditorContent.tsx +51 -11
- package/src/FloatingMenu.tsx +18 -12
- package/src/NodeViewContent.tsx +2 -1
- package/src/NodeViewWrapper.tsx +2 -1
- package/src/ReactNodeViewRenderer.tsx +42 -27
- package/src/ReactRenderer.tsx +18 -24
- package/src/index.ts +6 -6
- package/src/useEditor.ts +68 -2
- package/LICENSE.md +0 -21
- package/dist/packages/core/src/CommandManager.d.ts +0 -20
- package/dist/packages/core/src/Editor.d.ts +0 -147
- package/dist/packages/core/src/EventEmitter.d.ts +0 -11
- package/dist/packages/core/src/Extension.d.ts +0 -227
- package/dist/packages/core/src/ExtensionManager.d.ts +0 -18
- package/dist/packages/core/src/InputRule.d.ts +0 -42
- package/dist/packages/core/src/Mark.d.ts +0 -319
- package/dist/packages/core/src/Node.d.ts +0 -388
- package/dist/packages/core/src/NodeView.d.ts +0 -27
- package/dist/packages/core/src/PasteRule.d.ts +0 -42
- package/dist/packages/core/src/Tracker.d.ts +0 -11
- package/dist/packages/core/src/commands/blur.d.ts +0 -12
- package/dist/packages/core/src/commands/clearContent.d.ts +0 -12
- package/dist/packages/core/src/commands/clearNodes.d.ts +0 -12
- package/dist/packages/core/src/commands/command.d.ts +0 -12
- package/dist/packages/core/src/commands/createParagraphNear.d.ts +0 -12
- package/dist/packages/core/src/commands/deleteNode.d.ts +0 -13
- package/dist/packages/core/src/commands/deleteRange.d.ts +0 -12
- package/dist/packages/core/src/commands/deleteSelection.d.ts +0 -12
- package/dist/packages/core/src/commands/enter.d.ts +0 -12
- package/dist/packages/core/src/commands/exitCode.d.ts +0 -12
- package/dist/packages/core/src/commands/extendMarkRange.d.ts +0 -13
- package/dist/packages/core/src/commands/first.d.ts +0 -12
- package/dist/packages/core/src/commands/focus.d.ts +0 -14
- package/dist/packages/core/src/commands/forEach.d.ts +0 -14
- package/dist/packages/core/src/commands/insertContent.d.ts +0 -16
- package/dist/packages/core/src/commands/insertContentAt.d.ts +0 -16
- package/dist/packages/core/src/commands/joinBackward.d.ts +0 -12
- package/dist/packages/core/src/commands/joinForward.d.ts +0 -12
- package/dist/packages/core/src/commands/keyboardShortcut.d.ts +0 -12
- package/dist/packages/core/src/commands/lift.d.ts +0 -13
- package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +0 -12
- package/dist/packages/core/src/commands/liftListItem.d.ts +0 -13
- package/dist/packages/core/src/commands/newlineInCode.d.ts +0 -12
- package/dist/packages/core/src/commands/resetAttributes.d.ts +0 -13
- package/dist/packages/core/src/commands/scrollIntoView.d.ts +0 -12
- package/dist/packages/core/src/commands/selectAll.d.ts +0 -12
- package/dist/packages/core/src/commands/selectNodeBackward.d.ts +0 -12
- package/dist/packages/core/src/commands/selectNodeForward.d.ts +0 -12
- package/dist/packages/core/src/commands/selectParentNode.d.ts +0 -12
- package/dist/packages/core/src/commands/setContent.d.ts +0 -13
- package/dist/packages/core/src/commands/setMark.d.ts +0 -13
- package/dist/packages/core/src/commands/setMeta.d.ts +0 -12
- package/dist/packages/core/src/commands/setNode.d.ts +0 -13
- package/dist/packages/core/src/commands/setNodeSelection.d.ts +0 -12
- package/dist/packages/core/src/commands/setTextSelection.d.ts +0 -12
- package/dist/packages/core/src/commands/sinkListItem.d.ts +0 -13
- package/dist/packages/core/src/commands/splitBlock.d.ts +0 -14
- package/dist/packages/core/src/commands/splitListItem.d.ts +0 -13
- package/dist/packages/core/src/commands/toggleList.d.ts +0 -13
- package/dist/packages/core/src/commands/toggleMark.d.ts +0 -18
- package/dist/packages/core/src/commands/toggleNode.d.ts +0 -13
- package/dist/packages/core/src/commands/toggleWrap.d.ts +0 -13
- package/dist/packages/core/src/commands/undoInputRule.d.ts +0 -12
- package/dist/packages/core/src/commands/unsetAllMarks.d.ts +0 -12
- package/dist/packages/core/src/commands/unsetMark.d.ts +0 -18
- package/dist/packages/core/src/commands/updateAttributes.d.ts +0 -13
- package/dist/packages/core/src/commands/wrapIn.d.ts +0 -13
- package/dist/packages/core/src/commands/wrapInList.d.ts +0 -13
- package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +0 -2
- package/dist/packages/core/src/extensions/commands.d.ts +0 -98
- package/dist/packages/core/src/extensions/editable.d.ts +0 -2
- package/dist/packages/core/src/extensions/focusEvents.d.ts +0 -2
- package/dist/packages/core/src/extensions/index.d.ts +0 -6
- package/dist/packages/core/src/extensions/keymap.d.ts +0 -2
- package/dist/packages/core/src/extensions/tabindex.d.ts +0 -2
- package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +0 -7
- package/dist/packages/core/src/helpers/createChainableState.d.ts +0 -5
- package/dist/packages/core/src/helpers/createDocument.d.ts +0 -3
- package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +0 -7
- package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +0 -2
- package/dist/packages/core/src/helpers/findChildren.d.ts +0 -3
- package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +0 -6
- package/dist/packages/core/src/helpers/findParentNode.d.ts +0 -9
- package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +0 -8
- package/dist/packages/core/src/helpers/generateHTML.d.ts +0 -2
- package/dist/packages/core/src/helpers/generateJSON.d.ts +0 -2
- package/dist/packages/core/src/helpers/generateText.d.ts +0 -5
- package/dist/packages/core/src/helpers/getAttributes.d.ts +0 -3
- package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +0 -6
- package/dist/packages/core/src/helpers/getChangedRanges.d.ts +0 -11
- package/dist/packages/core/src/helpers/getDebugJSON.d.ts +0 -8
- package/dist/packages/core/src/helpers/getExtensionField.d.ts +0 -2
- package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +0 -2
- package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +0 -3
- package/dist/packages/core/src/helpers/getMarkRange.d.ts +0 -3
- package/dist/packages/core/src/helpers/getMarkType.d.ts +0 -2
- package/dist/packages/core/src/helpers/getMarksBetween.d.ts +0 -3
- package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +0 -3
- package/dist/packages/core/src/helpers/getNodeType.d.ts +0 -2
- package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +0 -3
- package/dist/packages/core/src/helpers/getSchema.d.ts +0 -3
- package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +0 -3
- package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +0 -2
- package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +0 -2
- package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +0 -2
- package/dist/packages/core/src/helpers/getText.d.ts +0 -6
- package/dist/packages/core/src/helpers/getTextBetween.d.ts +0 -6
- package/dist/packages/core/src/helpers/getTextSeralizersFromSchema.d.ts +0 -3
- package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +0 -9
- package/dist/packages/core/src/helpers/isActive.d.ts +0 -2
- package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +0 -2
- package/dist/packages/core/src/helpers/isList.d.ts +0 -2
- package/dist/packages/core/src/helpers/isMarkActive.d.ts +0 -3
- package/dist/packages/core/src/helpers/isNodeActive.d.ts +0 -3
- package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +0 -2
- package/dist/packages/core/src/helpers/isNodeSelection.d.ts +0 -2
- package/dist/packages/core/src/helpers/isTextSelection.d.ts +0 -2
- package/dist/packages/core/src/helpers/posToDOMRect.d.ts +0 -2
- package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +0 -4
- package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +0 -2
- package/dist/packages/core/src/helpers/splitExtensions.d.ts +0 -9
- package/dist/packages/core/src/index.d.ts +0 -60
- package/dist/packages/core/src/inputRules/markInputRule.d.ts +0 -12
- package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +0 -12
- package/dist/packages/core/src/inputRules/textInputRule.d.ts +0 -9
- package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +0 -14
- package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +0 -23
- package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +0 -12
- package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +0 -9
- package/dist/packages/core/src/style.d.ts +0 -1
- package/dist/packages/core/src/types.d.ts +0 -210
- package/dist/packages/core/src/utilities/callOrReturn.d.ts +0 -9
- package/dist/packages/core/src/utilities/createStyleTag.d.ts +0 -1
- package/dist/packages/core/src/utilities/deleteProps.d.ts +0 -6
- package/dist/packages/core/src/utilities/elementFromString.d.ts +0 -1
- package/dist/packages/core/src/utilities/findDuplicates.d.ts +0 -1
- package/dist/packages/core/src/utilities/fromString.d.ts +0 -1
- package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
- package/dist/packages/core/src/utilities/isEmptyObject.d.ts +0 -1
- package/dist/packages/core/src/utilities/isFunction.d.ts +0 -1
- package/dist/packages/core/src/utilities/isNumber.d.ts +0 -1
- package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
- package/dist/packages/core/src/utilities/isPlainObject.d.ts +0 -1
- package/dist/packages/core/src/utilities/isRegExp.d.ts +0 -1
- package/dist/packages/core/src/utilities/isString.d.ts +0 -1
- package/dist/packages/core/src/utilities/isiOS.d.ts +0 -1
- package/dist/packages/core/src/utilities/mergeAttributes.d.ts +0 -1
- package/dist/packages/core/src/utilities/mergeDeep.d.ts +0 -1
- package/dist/packages/core/src/utilities/minMax.d.ts +0 -1
- package/dist/packages/core/src/utilities/objectIncludes.d.ts +0 -8
- package/dist/packages/core/src/utilities/removeDuplicates.d.ts +0 -8
- package/dist/packages/extension-blockquote/src/blockquote.d.ts +0 -24
- package/dist/packages/extension-blockquote/src/index.d.ts +0 -3
- package/dist/packages/extension-bold/src/bold.d.ts +0 -27
- package/dist/packages/extension-bold/src/index.d.ts +0 -3
- package/dist/packages/extension-bubble-menu/src/bubble-menu-plugin.d.ts +0 -43
- package/dist/packages/extension-bubble-menu/src/bubble-menu.d.ts +0 -6
- package/dist/packages/extension-bubble-menu/src/index.d.ts +0 -4
- package/dist/packages/extension-bullet-list/src/bullet-list.d.ts +0 -17
- package/dist/packages/extension-bullet-list/src/index.d.ts +0 -3
- package/dist/packages/extension-character-count/src/character-count.d.ts +0 -28
- package/dist/packages/extension-character-count/src/index.d.ts +0 -3
- package/dist/packages/extension-code/src/code.d.ts +0 -25
- package/dist/packages/extension-code/src/index.d.ts +0 -3
- package/dist/packages/extension-code-block/src/code-block.d.ts +0 -26
- package/dist/packages/extension-code-block/src/index.d.ts +0 -3
- package/dist/packages/extension-code-block-lowlight/src/code-block-lowlight.d.ts +0 -6
- package/dist/packages/extension-code-block-lowlight/src/index.d.ts +0 -3
- package/dist/packages/extension-code-block-lowlight/src/lowlight-plugin.d.ts +0 -6
- package/dist/packages/extension-collaboration/src/collaboration.d.ts +0 -30
- package/dist/packages/extension-collaboration/src/helpers/isChangeOrigin.d.ts +0 -2
- package/dist/packages/extension-collaboration/src/index.d.ts +0 -4
- package/dist/packages/extension-collaboration-cursor/src/collaboration-cursor.d.ts +0 -37
- package/dist/packages/extension-collaboration-cursor/src/index.d.ts +0 -3
- package/dist/packages/extension-color/src/color.d.ts +0 -20
- package/dist/packages/extension-color/src/index.d.ts +0 -3
- package/dist/packages/extension-document/src/document.d.ts +0 -2
- package/dist/packages/extension-document/src/index.d.ts +0 -3
- package/dist/packages/extension-dropcursor/src/dropcursor.d.ts +0 -7
- package/dist/packages/extension-dropcursor/src/index.d.ts +0 -3
- package/dist/packages/extension-floating-menu/src/floating-menu-plugin.d.ts +0 -40
- package/dist/packages/extension-floating-menu/src/floating-menu.d.ts +0 -6
- package/dist/packages/extension-floating-menu/src/index.d.ts +0 -4
- package/dist/packages/extension-focus/src/focus.d.ts +0 -6
- package/dist/packages/extension-focus/src/index.d.ts +0 -3
- package/dist/packages/extension-font-family/src/font-family.d.ts +0 -21
- package/dist/packages/extension-font-family/src/index.d.ts +0 -3
- package/dist/packages/extension-gapcursor/src/gapcursor.d.ts +0 -15
- package/dist/packages/extension-gapcursor/src/index.d.ts +0 -3
- package/dist/packages/extension-hard-break/src/hard-break.d.ts +0 -16
- package/dist/packages/extension-hard-break/src/index.d.ts +0 -3
- package/dist/packages/extension-heading/src/heading.d.ts +0 -26
- package/dist/packages/extension-heading/src/index.d.ts +0 -3
- package/dist/packages/extension-highlight/src/highlight.d.ts +0 -30
- package/dist/packages/extension-highlight/src/index.d.ts +0 -3
- package/dist/packages/extension-history/src/history.d.ts +0 -20
- package/dist/packages/extension-history/src/index.d.ts +0 -3
- package/dist/packages/extension-horizontal-rule/src/horizontal-rule.d.ts +0 -15
- package/dist/packages/extension-horizontal-rule/src/index.d.ts +0 -3
- package/dist/packages/extension-image/src/image.d.ts +0 -21
- package/dist/packages/extension-image/src/index.d.ts +0 -3
- package/dist/packages/extension-italic/src/index.d.ts +0 -3
- package/dist/packages/extension-italic/src/italic.d.ts +0 -27
- package/dist/packages/extension-link/src/helpers/autolink.d.ts +0 -7
- package/dist/packages/extension-link/src/helpers/clickHandler.d.ts +0 -7
- package/dist/packages/extension-link/src/helpers/pasteHandler.d.ts +0 -9
- package/dist/packages/extension-link/src/index.d.ts +0 -3
- package/dist/packages/extension-link/src/link.d.ts +0 -44
- package/dist/packages/extension-list-item/src/index.d.ts +0 -3
- package/dist/packages/extension-list-item/src/list-item.d.ts +0 -5
- package/dist/packages/extension-mention/src/index.d.ts +0 -3
- package/dist/packages/extension-mention/src/mention.d.ts +0 -14
- package/dist/packages/extension-ordered-list/src/index.d.ts +0 -3
- package/dist/packages/extension-ordered-list/src/ordered-list.d.ts +0 -17
- package/dist/packages/extension-paragraph/src/index.d.ts +0 -3
- package/dist/packages/extension-paragraph/src/paragraph.d.ts +0 -15
- package/dist/packages/extension-placeholder/src/index.d.ts +0 -3
- package/dist/packages/extension-placeholder/src/placeholder.d.ts +0 -15
- package/dist/packages/extension-strike/src/index.d.ts +0 -3
- package/dist/packages/extension-strike/src/strike.d.ts +0 -25
- package/dist/packages/extension-subscript/src/index.d.ts +0 -3
- package/dist/packages/extension-subscript/src/subscript.d.ts +0 -23
- package/dist/packages/extension-superscript/src/index.d.ts +0 -3
- package/dist/packages/extension-superscript/src/superscript.d.ts +0 -23
- package/dist/packages/extension-table/src/TableView.d.ts +0 -17
- package/dist/packages/extension-table/src/index.d.ts +0 -4
- package/dist/packages/extension-table/src/table.d.ts +0 -55
- package/dist/packages/extension-table/src/utilities/createCell.d.ts +0 -2
- package/dist/packages/extension-table/src/utilities/createTable.d.ts +0 -2
- package/dist/packages/extension-table/src/utilities/deleteTableWhenAllCellsSelected.d.ts +0 -2
- package/dist/packages/extension-table/src/utilities/getTableNodeTypes.d.ts +0 -4
- package/dist/packages/extension-table/src/utilities/isCellSelection.d.ts +0 -2
- package/dist/packages/extension-table-cell/src/index.d.ts +0 -3
- package/dist/packages/extension-table-cell/src/table-cell.d.ts +0 -5
- package/dist/packages/extension-table-header/src/index.d.ts +0 -3
- package/dist/packages/extension-table-header/src/table-header.d.ts +0 -5
- package/dist/packages/extension-table-row/src/index.d.ts +0 -3
- package/dist/packages/extension-table-row/src/table-row.d.ts +0 -5
- package/dist/packages/extension-task-item/src/index.d.ts +0 -3
- package/dist/packages/extension-task-item/src/task-item.d.ts +0 -7
- package/dist/packages/extension-task-list/src/index.d.ts +0 -3
- package/dist/packages/extension-task-list/src/task-list.d.ts +0 -16
- package/dist/packages/extension-text/src/index.d.ts +0 -3
- package/dist/packages/extension-text/src/text.d.ts +0 -2
- package/dist/packages/extension-text-align/src/index.d.ts +0 -3
- package/dist/packages/extension-text-align/src/text-align.d.ts +0 -21
- package/dist/packages/extension-text-style/src/index.d.ts +0 -3
- package/dist/packages/extension-text-style/src/text-style.d.ts +0 -15
- package/dist/packages/extension-typography/src/index.d.ts +0 -3
- package/dist/packages/extension-typography/src/typography.d.ts +0 -23
- package/dist/packages/extension-underline/src/index.d.ts +0 -3
- package/dist/packages/extension-underline/src/underline.d.ts +0 -23
- package/dist/packages/html/src/generateHTML.d.ts +0 -2
- package/dist/packages/html/src/generateJSON.d.ts +0 -2
- package/dist/packages/html/src/getHTMLFromFragment.d.ts +0 -2
- package/dist/packages/html/src/index.d.ts +0 -2
- package/dist/packages/starter-kit/src/index.d.ts +0 -3
- package/dist/packages/starter-kit/src/starter-kit.d.ts +0 -37
- package/dist/packages/suggestion/src/findSuggestionMatch.d.ts +0 -15
- package/dist/packages/suggestion/src/index.d.ts +0 -4
- package/dist/packages/suggestion/src/suggestion.d.ts +0 -49
- package/dist/tests/cypress/integration/core/can.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/core/editorProps.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/core/extendExtensions.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/core/extendMarkRange.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/core/extensionOptions.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/core/fromString.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/core/generateHTML.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/core/generateJSON.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/core/isActive.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/core/isClass.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/core/mergeAttributes.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/core/mergeDeep.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/core/pluginOrder.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/extensions/bold.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/extensions/codeBlockLowlight.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/html/generateHTML.spec.d.ts +0 -1
- package/dist/tests/cypress/integration/html/generateJSON.spec.d.ts +0 -1
- package/dist/tiptap-react.cjs.js.map +0 -1
- package/dist/tiptap-react.esm.js.map +0 -1
- package/dist/tiptap-react.umd.js.map +0 -1
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import { Editor } from '@tiptap/core';
|
|
2
|
+
import React from 'react';
|
|
3
3
|
import { Editor as ExtendedEditor } from './Editor';
|
|
4
4
|
export interface ReactRendererOptions {
|
|
5
5
|
editor: Editor;
|
|
6
6
|
props?: Record<string, any>;
|
|
7
7
|
as?: string;
|
|
8
8
|
className?: string;
|
|
9
|
+
attrs?: Record<string, string>;
|
|
9
10
|
}
|
|
10
|
-
declare type ComponentType<R> = React.ComponentClass | React.FunctionComponent | React.ForwardRefExoticComponent<
|
|
11
|
-
|
|
12
|
-
command: any;
|
|
13
|
-
} & React.RefAttributes<R>>;
|
|
14
|
-
export declare class ReactRenderer<R = unknown> {
|
|
11
|
+
declare type ComponentType<R, P> = React.ComponentClass<P> | React.FunctionComponent<P> | React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<R>>;
|
|
12
|
+
export declare class ReactRenderer<R = unknown, P = unknown> {
|
|
15
13
|
id: string;
|
|
16
14
|
editor: ExtendedEditor;
|
|
17
15
|
component: any;
|
|
@@ -19,7 +17,7 @@ export declare class ReactRenderer<R = unknown> {
|
|
|
19
17
|
props: Record<string, any>;
|
|
20
18
|
reactElement: React.ReactNode;
|
|
21
19
|
ref: R | null;
|
|
22
|
-
constructor(component: ComponentType<R>, { editor, props, as, className, }: ReactRendererOptions);
|
|
20
|
+
constructor(component: ComponentType<R, P>, { editor, props, as, className, attrs, }: ReactRendererOptions);
|
|
23
21
|
render(): void;
|
|
24
22
|
updateProps(props?: Record<string, any>): void;
|
|
25
23
|
destroy(): void;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export * from '@tiptap/core';
|
|
2
1
|
export * from './BubbleMenu';
|
|
3
2
|
export { Editor } from './Editor';
|
|
4
|
-
export * from './FloatingMenu';
|
|
5
|
-
export * from './useEditor';
|
|
6
|
-
export * from './ReactRenderer';
|
|
7
|
-
export * from './ReactNodeViewRenderer';
|
|
8
3
|
export * from './EditorContent';
|
|
9
|
-
export * from './
|
|
4
|
+
export * from './FloatingMenu';
|
|
10
5
|
export * from './NodeViewContent';
|
|
6
|
+
export * from './NodeViewWrapper';
|
|
7
|
+
export * from './ReactNodeViewRenderer';
|
|
8
|
+
export * from './ReactRenderer';
|
|
9
|
+
export * from './useEditor';
|
|
10
|
+
export * from '@tiptap/core';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DependencyList } from 'react';
|
|
2
1
|
import { EditorOptions } from '@tiptap/core';
|
|
2
|
+
import { DependencyList } from 'react';
|
|
3
3
|
import { Editor } from './Editor';
|
|
4
4
|
export declare const useEditor: (options?: Partial<EditorOptions>, deps?: DependencyList) => Editor | null;
|
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.0.0-
|
|
4
|
+
"version": "2.0.0-rc.2",
|
|
5
5
|
"homepage": "https://tiptap.dev",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"tiptap",
|
|
@@ -12,34 +12,48 @@
|
|
|
12
12
|
"type": "github",
|
|
13
13
|
"url": "https://github.com/sponsors/ueberdosis"
|
|
14
14
|
},
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/packages/react/src/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js",
|
|
19
|
+
"require": "./dist/index.cjs"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"main": "dist/index.cjs",
|
|
23
|
+
"module": "dist/index.js",
|
|
24
|
+
"umd": "dist/index.umd.js",
|
|
18
25
|
"types": "dist/packages/react/src/index.d.ts",
|
|
26
|
+
"type": "module",
|
|
19
27
|
"files": [
|
|
20
28
|
"src",
|
|
21
29
|
"dist"
|
|
22
30
|
],
|
|
23
31
|
"devDependencies": {
|
|
24
|
-
"@
|
|
25
|
-
"@
|
|
26
|
-
"react": "^
|
|
27
|
-
"react-dom": "^
|
|
32
|
+
"@tiptap/core": "^2.0.0-rc.1",
|
|
33
|
+
"@tiptap/pm": "^2.0.0-rc.1",
|
|
34
|
+
"@types/react": "^18.0.1",
|
|
35
|
+
"@types/react-dom": "^18.0.0",
|
|
36
|
+
"react": "^18.0.0",
|
|
37
|
+
"react-dom": "^18.0.0"
|
|
28
38
|
},
|
|
29
39
|
"peerDependencies": {
|
|
30
|
-
"@tiptap/core": "^2.0.0-
|
|
31
|
-
"
|
|
32
|
-
"react
|
|
40
|
+
"@tiptap/core": "^2.0.0-rc.1",
|
|
41
|
+
"@tiptap/pm": "^2.0.0-rc.1",
|
|
42
|
+
"react": "^17.0.0 || ^18.0.0",
|
|
43
|
+
"react-dom": "^17.0.0 || ^18.0.0"
|
|
33
44
|
},
|
|
34
45
|
"dependencies": {
|
|
35
|
-
"@tiptap/extension-bubble-menu": "^2.0.0-
|
|
36
|
-
"@tiptap/extension-floating-menu": "^2.0.0-
|
|
37
|
-
"prosemirror-view": "^1.23.3"
|
|
46
|
+
"@tiptap/extension-bubble-menu": "^2.0.0-rc.1",
|
|
47
|
+
"@tiptap/extension-floating-menu": "^2.0.0-rc.1"
|
|
38
48
|
},
|
|
39
49
|
"repository": {
|
|
40
50
|
"type": "git",
|
|
41
51
|
"url": "https://github.com/ueberdosis/tiptap",
|
|
42
52
|
"directory": "packages/react"
|
|
43
53
|
},
|
|
44
|
-
"
|
|
45
|
-
|
|
54
|
+
"sideEffects": false,
|
|
55
|
+
"scripts": {
|
|
56
|
+
"clean": "rm -rf dist",
|
|
57
|
+
"build": "npm run clean && rollup -c"
|
|
58
|
+
}
|
|
59
|
+
}
|
package/src/BubbleMenu.tsx
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
import React, { useEffect, useRef } from 'react'
|
|
2
1
|
import { BubbleMenuPlugin, BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu'
|
|
2
|
+
import React, { useEffect, useState } from 'react'
|
|
3
3
|
|
|
4
|
-
type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K
|
|
4
|
+
type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
|
|
5
5
|
|
|
6
6
|
export type BubbleMenuProps = Omit<Optional<BubbleMenuPluginProps, 'pluginKey'>, 'element'> & {
|
|
7
|
-
className?: string
|
|
8
|
-
|
|
7
|
+
className?: string;
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
updateDelay?: number;
|
|
10
|
+
};
|
|
9
11
|
|
|
10
|
-
export const BubbleMenu
|
|
11
|
-
const element =
|
|
12
|
+
export const BubbleMenu = (props: BubbleMenuProps) => {
|
|
13
|
+
const [element, setElement] = useState<HTMLDivElement | null>(null)
|
|
12
14
|
|
|
13
15
|
useEffect(() => {
|
|
14
|
-
if (!element
|
|
16
|
+
if (!element) {
|
|
17
|
+
return
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (props.editor.isDestroyed) {
|
|
15
21
|
return
|
|
16
22
|
}
|
|
17
23
|
|
|
18
24
|
const {
|
|
19
|
-
pluginKey = 'bubbleMenu',
|
|
20
|
-
editor,
|
|
21
|
-
tippyOptions = {},
|
|
22
|
-
shouldShow = null,
|
|
25
|
+
pluginKey = 'bubbleMenu', editor, tippyOptions = {}, updateDelay, shouldShow = null,
|
|
23
26
|
} = props
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
const plugin = BubbleMenuPlugin({
|
|
29
|
+
updateDelay,
|
|
27
30
|
editor,
|
|
28
|
-
element
|
|
29
|
-
|
|
31
|
+
element,
|
|
32
|
+
pluginKey,
|
|
30
33
|
shouldShow,
|
|
31
|
-
|
|
34
|
+
tippyOptions,
|
|
35
|
+
})
|
|
32
36
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}, [
|
|
37
|
-
props.editor,
|
|
38
|
-
element.current,
|
|
39
|
-
])
|
|
37
|
+
editor.registerPlugin(plugin)
|
|
38
|
+
return () => editor.unregisterPlugin(pluginKey)
|
|
39
|
+
}, [props.editor, element])
|
|
40
40
|
|
|
41
41
|
return (
|
|
42
|
-
<div ref={
|
|
42
|
+
<div ref={setElement} className={props.className} style={{ visibility: 'hidden' }}>
|
|
43
43
|
{props.children}
|
|
44
44
|
</div>
|
|
45
45
|
)
|
package/src/Editor.ts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
1
|
import { Editor as CoreEditor } from '@tiptap/core'
|
|
2
|
+
import React from 'react'
|
|
3
|
+
|
|
3
4
|
import { EditorContentProps, EditorContentState } from './EditorContent'
|
|
5
|
+
import { ReactRenderer } from './ReactRenderer'
|
|
6
|
+
|
|
7
|
+
type ContentComponent = React.Component<EditorContentProps, EditorContentState> & {
|
|
8
|
+
setRenderer(id: string, renderer: ReactRenderer): void;
|
|
9
|
+
removeRenderer(id: string): void;
|
|
10
|
+
}
|
|
4
11
|
|
|
5
12
|
export class Editor extends CoreEditor {
|
|
6
|
-
public contentComponent:
|
|
13
|
+
public contentComponent: ContentComponent | null = null
|
|
7
14
|
}
|
package/src/EditorContent.tsx
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
import React, { HTMLProps } from 'react'
|
|
2
|
-
import ReactDOM from 'react-dom'
|
|
2
|
+
import ReactDOM, { flushSync } from 'react-dom'
|
|
3
|
+
|
|
3
4
|
import { Editor } from './Editor'
|
|
4
5
|
import { ReactRenderer } from './ReactRenderer'
|
|
5
6
|
|
|
6
|
-
const Portals: React.FC<{ renderers:
|
|
7
|
+
const Portals: React.FC<{ renderers: Record<string, ReactRenderer> }> = ({ renderers }) => {
|
|
7
8
|
return (
|
|
8
9
|
<>
|
|
9
|
-
{
|
|
10
|
-
return ReactDOM.createPortal(
|
|
11
|
-
renderer.reactElement,
|
|
12
|
-
renderer.element,
|
|
13
|
-
key,
|
|
14
|
-
)
|
|
10
|
+
{Object.entries(renderers).map(([key, renderer]) => {
|
|
11
|
+
return ReactDOM.createPortal(renderer.reactElement, renderer.element, key)
|
|
15
12
|
})}
|
|
16
13
|
</>
|
|
17
14
|
)
|
|
18
15
|
}
|
|
19
16
|
|
|
20
17
|
export interface EditorContentProps extends HTMLProps<HTMLDivElement> {
|
|
21
|
-
editor: Editor | null
|
|
18
|
+
editor: Editor | null;
|
|
22
19
|
}
|
|
23
20
|
|
|
24
21
|
export interface EditorContentState {
|
|
25
|
-
renderers:
|
|
22
|
+
renderers: Record<string, ReactRenderer>;
|
|
26
23
|
}
|
|
27
24
|
|
|
28
25
|
export class PureEditorContent extends React.Component<EditorContentProps, EditorContentState> {
|
|
29
26
|
editorContentRef: React.RefObject<any>
|
|
30
27
|
|
|
28
|
+
initialized: boolean
|
|
29
|
+
|
|
31
30
|
constructor(props: EditorContentProps) {
|
|
32
31
|
super(props)
|
|
33
32
|
this.editorContentRef = React.createRef()
|
|
33
|
+
this.initialized = false
|
|
34
34
|
|
|
35
35
|
this.state = {
|
|
36
|
-
renderers:
|
|
36
|
+
renderers: {},
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -64,9 +64,46 @@ export class PureEditorContent extends React.Component<EditorContentProps, Edito
|
|
|
64
64
|
editor.contentComponent = this
|
|
65
65
|
|
|
66
66
|
editor.createNodeViews()
|
|
67
|
+
|
|
68
|
+
this.initialized = true
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
maybeFlushSync(fn: () => void) {
|
|
73
|
+
// Avoid calling flushSync until the editor is initialized.
|
|
74
|
+
// Initialization happens during the componentDidMount or componentDidUpdate
|
|
75
|
+
// lifecycle methods, and React doesn't allow calling flushSync from inside
|
|
76
|
+
// a lifecycle method.
|
|
77
|
+
if (this.initialized) {
|
|
78
|
+
flushSync(fn)
|
|
79
|
+
} else {
|
|
80
|
+
fn()
|
|
67
81
|
}
|
|
68
82
|
}
|
|
69
83
|
|
|
84
|
+
setRenderer(id: string, renderer: ReactRenderer) {
|
|
85
|
+
this.maybeFlushSync(() => {
|
|
86
|
+
this.setState(({ renderers }) => ({
|
|
87
|
+
renderers: {
|
|
88
|
+
...renderers,
|
|
89
|
+
[id]: renderer,
|
|
90
|
+
},
|
|
91
|
+
}))
|
|
92
|
+
})
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
removeRenderer(id: string) {
|
|
96
|
+
this.maybeFlushSync(() => {
|
|
97
|
+
this.setState(({ renderers }) => {
|
|
98
|
+
const nextRenderers = { ...renderers }
|
|
99
|
+
|
|
100
|
+
delete nextRenderers[id]
|
|
101
|
+
|
|
102
|
+
return { renderers: nextRenderers }
|
|
103
|
+
})
|
|
104
|
+
})
|
|
105
|
+
}
|
|
106
|
+
|
|
70
107
|
componentWillUnmount() {
|
|
71
108
|
const { editor } = this.props
|
|
72
109
|
|
|
@@ -74,6 +111,8 @@ export class PureEditorContent extends React.Component<EditorContentProps, Edito
|
|
|
74
111
|
return
|
|
75
112
|
}
|
|
76
113
|
|
|
114
|
+
this.initialized = false
|
|
115
|
+
|
|
77
116
|
if (!editor.isDestroyed) {
|
|
78
117
|
editor.view.setProps({
|
|
79
118
|
nodeViews: {},
|
|
@@ -101,6 +140,7 @@ export class PureEditorContent extends React.Component<EditorContentProps, Edito
|
|
|
101
140
|
return (
|
|
102
141
|
<>
|
|
103
142
|
<div ref={this.editorContentRef} {...rest} />
|
|
143
|
+
{/* @ts-ignore */}
|
|
104
144
|
<Portals renderers={this.state.renderers} />
|
|
105
145
|
</>
|
|
106
146
|
)
|
package/src/FloatingMenu.tsx
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
|
-
import React, { useEffect, useRef } from 'react'
|
|
2
1
|
import { FloatingMenuPlugin, FloatingMenuPluginProps } from '@tiptap/extension-floating-menu'
|
|
2
|
+
import React, {
|
|
3
|
+
useEffect, useState,
|
|
4
|
+
} from 'react'
|
|
3
5
|
|
|
4
6
|
type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>
|
|
5
7
|
|
|
6
8
|
export type FloatingMenuProps = Omit<Optional<FloatingMenuPluginProps, 'pluginKey'>, 'element'> & {
|
|
7
9
|
className?: string,
|
|
10
|
+
children: React.ReactNode
|
|
8
11
|
}
|
|
9
12
|
|
|
10
|
-
export const FloatingMenu
|
|
11
|
-
const element =
|
|
13
|
+
export const FloatingMenu = (props: FloatingMenuProps) => {
|
|
14
|
+
const [element, setElement] = useState<HTMLDivElement | null>(null)
|
|
12
15
|
|
|
13
16
|
useEffect(() => {
|
|
14
|
-
if (!element
|
|
17
|
+
if (!element) {
|
|
18
|
+
return
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (props.editor.isDestroyed) {
|
|
15
22
|
return
|
|
16
23
|
}
|
|
17
24
|
|
|
@@ -22,24 +29,23 @@ export const FloatingMenu: React.FC<FloatingMenuProps> = props => {
|
|
|
22
29
|
shouldShow = null,
|
|
23
30
|
} = props
|
|
24
31
|
|
|
25
|
-
|
|
32
|
+
const plugin = FloatingMenuPlugin({
|
|
26
33
|
pluginKey,
|
|
27
34
|
editor,
|
|
28
|
-
element
|
|
35
|
+
element,
|
|
29
36
|
tippyOptions,
|
|
30
37
|
shouldShow,
|
|
31
|
-
})
|
|
38
|
+
})
|
|
32
39
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
40
|
+
editor.registerPlugin(plugin)
|
|
41
|
+
return () => editor.unregisterPlugin(pluginKey)
|
|
36
42
|
}, [
|
|
37
43
|
props.editor,
|
|
38
|
-
element
|
|
44
|
+
element,
|
|
39
45
|
])
|
|
40
46
|
|
|
41
47
|
return (
|
|
42
|
-
<div ref={
|
|
48
|
+
<div ref={setElement} className={props.className} style={{ visibility: 'hidden' }}>
|
|
43
49
|
{props.children}
|
|
44
50
|
</div>
|
|
45
51
|
)
|
package/src/NodeViewContent.tsx
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
+
|
|
2
3
|
import { useReactNodeView } from './useReactNodeView'
|
|
3
4
|
|
|
4
5
|
export interface NodeViewContentProps {
|
|
@@ -16,8 +17,8 @@ export const NodeViewContent: React.FC<NodeViewContentProps> = props => {
|
|
|
16
17
|
ref={nodeViewContentRef}
|
|
17
18
|
data-node-view-content=""
|
|
18
19
|
style={{
|
|
19
|
-
...props.style,
|
|
20
20
|
whiteSpace: 'pre-wrap',
|
|
21
|
+
...props.style,
|
|
21
22
|
}}
|
|
22
23
|
/>
|
|
23
24
|
)
|
package/src/NodeViewWrapper.tsx
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
+
|
|
2
3
|
import { useReactNodeView } from './useReactNodeView'
|
|
3
4
|
|
|
4
5
|
export interface NodeViewWrapperProps {
|
|
@@ -17,8 +18,8 @@ export const NodeViewWrapper: React.FC<NodeViewWrapperProps> = React.forwardRef(
|
|
|
17
18
|
data-node-view-wrapper=""
|
|
18
19
|
onDragStart={onDragStart}
|
|
19
20
|
style={{
|
|
20
|
-
...props.style,
|
|
21
21
|
whiteSpace: 'normal',
|
|
22
|
+
...props.style,
|
|
22
23
|
}}
|
|
23
24
|
/>
|
|
24
25
|
)
|
|
@@ -1,30 +1,39 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
1
|
import {
|
|
2
|
+
DecorationWithType,
|
|
3
3
|
NodeView,
|
|
4
4
|
NodeViewProps,
|
|
5
5
|
NodeViewRenderer,
|
|
6
|
-
NodeViewRendererProps,
|
|
7
6
|
NodeViewRendererOptions,
|
|
7
|
+
NodeViewRendererProps,
|
|
8
8
|
} from '@tiptap/core'
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { Node as ProseMirrorNode } from '@tiptap/pm/model'
|
|
10
|
+
import { Decoration, NodeView as ProseMirrorNodeView } from '@tiptap/pm/view'
|
|
11
|
+
import React from 'react'
|
|
12
|
+
|
|
11
13
|
import { Editor } from './Editor'
|
|
12
14
|
import { ReactRenderer } from './ReactRenderer'
|
|
13
15
|
import { ReactNodeViewContext, ReactNodeViewContextProps } from './useReactNodeView'
|
|
14
16
|
|
|
15
17
|
export interface ReactNodeViewRendererOptions extends NodeViewRendererOptions {
|
|
16
|
-
update:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
update:
|
|
19
|
+
| ((props: {
|
|
20
|
+
oldNode: ProseMirrorNode
|
|
21
|
+
oldDecorations: Decoration[]
|
|
22
|
+
newNode: ProseMirrorNode
|
|
23
|
+
newDecorations: Decoration[]
|
|
24
|
+
updateProps: () => void
|
|
25
|
+
}) => boolean)
|
|
26
|
+
| null
|
|
27
|
+
as?: string
|
|
28
|
+
className?: string
|
|
29
|
+
attrs?: Record<string, string>
|
|
24
30
|
}
|
|
25
31
|
|
|
26
|
-
class ReactNodeView extends NodeView<
|
|
27
|
-
|
|
32
|
+
class ReactNodeView extends NodeView<
|
|
33
|
+
React.FunctionComponent,
|
|
34
|
+
Editor,
|
|
35
|
+
ReactNodeViewRendererOptions
|
|
36
|
+
> {
|
|
28
37
|
renderer!: ReactRenderer
|
|
29
38
|
|
|
30
39
|
contentDOMElement!: HTMLElement | null
|
|
@@ -53,19 +62,19 @@ class ReactNodeView extends NodeView<React.FunctionComponent, Editor, ReactNodeV
|
|
|
53
62
|
const Component = this.component
|
|
54
63
|
const onDragStart = this.onDragStart.bind(this)
|
|
55
64
|
const nodeViewContentRef: ReactNodeViewContextProps['nodeViewContentRef'] = element => {
|
|
56
|
-
if (
|
|
57
|
-
element
|
|
58
|
-
&& this.contentDOMElement
|
|
59
|
-
&& element.firstChild !== this.contentDOMElement
|
|
60
|
-
) {
|
|
65
|
+
if (element && this.contentDOMElement && element.firstChild !== this.contentDOMElement) {
|
|
61
66
|
element.appendChild(this.contentDOMElement)
|
|
62
67
|
}
|
|
63
68
|
}
|
|
64
69
|
|
|
65
70
|
return (
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
<>
|
|
72
|
+
{/* @ts-ignore */}
|
|
73
|
+
<ReactNodeViewContext.Provider value={{ onDragStart, nodeViewContentRef }}>
|
|
74
|
+
{/* @ts-ignore */}
|
|
75
|
+
<Component {...componentProps} />
|
|
76
|
+
</ReactNodeViewContext.Provider>
|
|
77
|
+
</>
|
|
69
78
|
)
|
|
70
79
|
}
|
|
71
80
|
|
|
@@ -88,11 +97,14 @@ class ReactNodeView extends NodeView<React.FunctionComponent, Editor, ReactNodeV
|
|
|
88
97
|
as = this.options.as
|
|
89
98
|
}
|
|
90
99
|
|
|
100
|
+
const { className = '' } = this.options
|
|
101
|
+
|
|
91
102
|
this.renderer = new ReactRenderer(ReactNodeViewProvider, {
|
|
92
103
|
editor: this.editor,
|
|
93
104
|
props,
|
|
94
105
|
as,
|
|
95
|
-
className: `node-${this.node.type.name}
|
|
106
|
+
className: `node-${this.node.type.name} ${className}`.trim(),
|
|
107
|
+
attrs: this.options.attrs,
|
|
96
108
|
})
|
|
97
109
|
}
|
|
98
110
|
|
|
@@ -104,7 +116,7 @@ class ReactNodeView extends NodeView<React.FunctionComponent, Editor, ReactNodeV
|
|
|
104
116
|
throw Error('Please use the NodeViewWrapper component for your node view.')
|
|
105
117
|
}
|
|
106
118
|
|
|
107
|
-
return this.renderer.element
|
|
119
|
+
return this.renderer.element as HTMLElement
|
|
108
120
|
}
|
|
109
121
|
|
|
110
122
|
get contentDOM() {
|
|
@@ -115,7 +127,7 @@ class ReactNodeView extends NodeView<React.FunctionComponent, Editor, ReactNodeV
|
|
|
115
127
|
return this.contentDOMElement
|
|
116
128
|
}
|
|
117
129
|
|
|
118
|
-
update(node: ProseMirrorNode, decorations:
|
|
130
|
+
update(node: ProseMirrorNode, decorations: DecorationWithType[]) {
|
|
119
131
|
const updateProps = (props?: Record<string, any>) => {
|
|
120
132
|
this.renderer.updateProps(props)
|
|
121
133
|
}
|
|
@@ -170,7 +182,10 @@ class ReactNodeView extends NodeView<React.FunctionComponent, Editor, ReactNodeV
|
|
|
170
182
|
}
|
|
171
183
|
}
|
|
172
184
|
|
|
173
|
-
export function ReactNodeViewRenderer(
|
|
185
|
+
export function ReactNodeViewRenderer(
|
|
186
|
+
component: any,
|
|
187
|
+
options?: Partial<ReactNodeViewRendererOptions>,
|
|
188
|
+
): NodeViewRenderer {
|
|
174
189
|
return (props: NodeViewRendererProps) => {
|
|
175
190
|
// try to get the parent component
|
|
176
191
|
// this is important for vue devtools to show the component hierarchy correctly
|
|
@@ -179,6 +194,6 @@ export function ReactNodeViewRenderer(component: any, options?: Partial<ReactNod
|
|
|
179
194
|
return {}
|
|
180
195
|
}
|
|
181
196
|
|
|
182
|
-
return new ReactNodeView(component, props, options) as ProseMirrorNodeView
|
|
197
|
+
return new ReactNodeView(component, props, options) as unknown as ProseMirrorNodeView
|
|
183
198
|
}
|
|
184
199
|
}
|
package/src/ReactRenderer.tsx
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
1
|
import { Editor } from '@tiptap/core'
|
|
2
|
+
import React from 'react'
|
|
3
|
+
|
|
3
4
|
import { Editor as ExtendedEditor } from './Editor'
|
|
4
5
|
|
|
5
6
|
function isClassComponent(Component: any) {
|
|
@@ -22,14 +23,15 @@ export interface ReactRendererOptions {
|
|
|
22
23
|
props?: Record<string, any>,
|
|
23
24
|
as?: string,
|
|
24
25
|
className?: string,
|
|
26
|
+
attrs?: Record<string, string>,
|
|
25
27
|
}
|
|
26
28
|
|
|
27
|
-
type ComponentType<R> =
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
type ComponentType<R, P> =
|
|
30
|
+
React.ComponentClass<P> |
|
|
31
|
+
React.FunctionComponent<P> |
|
|
32
|
+
React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<R>>;
|
|
31
33
|
|
|
32
|
-
export class ReactRenderer<R = unknown> {
|
|
34
|
+
export class ReactRenderer<R = unknown, P = unknown> {
|
|
33
35
|
id: string
|
|
34
36
|
|
|
35
37
|
editor: ExtendedEditor
|
|
@@ -44,11 +46,12 @@ export class ReactRenderer<R = unknown> {
|
|
|
44
46
|
|
|
45
47
|
ref: R | null = null
|
|
46
48
|
|
|
47
|
-
constructor(component: ComponentType<R>, {
|
|
49
|
+
constructor(component: ComponentType<R, P>, {
|
|
48
50
|
editor,
|
|
49
51
|
props = {},
|
|
50
52
|
as = 'div',
|
|
51
53
|
className = '',
|
|
54
|
+
attrs,
|
|
52
55
|
}: ReactRendererOptions) {
|
|
53
56
|
this.id = Math.floor(Math.random() * 0xFFFFFFFF).toString()
|
|
54
57
|
this.component = component
|
|
@@ -61,6 +64,12 @@ export class ReactRenderer<R = unknown> {
|
|
|
61
64
|
this.element.classList.add(...className.split(' '))
|
|
62
65
|
}
|
|
63
66
|
|
|
67
|
+
if (attrs) {
|
|
68
|
+
Object.keys(attrs).forEach(key => {
|
|
69
|
+
this.element.setAttribute(key, attrs[key])
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
|
|
64
73
|
this.render()
|
|
65
74
|
}
|
|
66
75
|
|
|
@@ -76,14 +85,7 @@ export class ReactRenderer<R = unknown> {
|
|
|
76
85
|
|
|
77
86
|
this.reactElement = <Component {...props } />
|
|
78
87
|
|
|
79
|
-
|
|
80
|
-
this.editor.contentComponent.setState({
|
|
81
|
-
renderers: this.editor.contentComponent.state.renderers.set(
|
|
82
|
-
this.id,
|
|
83
|
-
this,
|
|
84
|
-
),
|
|
85
|
-
})
|
|
86
|
-
}
|
|
88
|
+
this.editor?.contentComponent?.setRenderer(this.id, this)
|
|
87
89
|
}
|
|
88
90
|
|
|
89
91
|
updateProps(props: Record<string, any> = {}): void {
|
|
@@ -96,14 +98,6 @@ export class ReactRenderer<R = unknown> {
|
|
|
96
98
|
}
|
|
97
99
|
|
|
98
100
|
destroy(): void {
|
|
99
|
-
|
|
100
|
-
const { renderers } = this.editor.contentComponent.state
|
|
101
|
-
|
|
102
|
-
renderers.delete(this.id)
|
|
103
|
-
|
|
104
|
-
this.editor.contentComponent.setState({
|
|
105
|
-
renderers,
|
|
106
|
-
})
|
|
107
|
-
}
|
|
101
|
+
this.editor?.contentComponent?.removeRenderer(this.id)
|
|
108
102
|
}
|
|
109
103
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export * from '@tiptap/core'
|
|
2
1
|
export * from './BubbleMenu'
|
|
3
2
|
export { Editor } from './Editor'
|
|
4
|
-
export * from './FloatingMenu'
|
|
5
|
-
export * from './useEditor'
|
|
6
|
-
export * from './ReactRenderer'
|
|
7
|
-
export * from './ReactNodeViewRenderer'
|
|
8
3
|
export * from './EditorContent'
|
|
9
|
-
export * from './
|
|
4
|
+
export * from './FloatingMenu'
|
|
10
5
|
export * from './NodeViewContent'
|
|
6
|
+
export * from './NodeViewWrapper'
|
|
7
|
+
export * from './ReactNodeViewRenderer'
|
|
8
|
+
export * from './ReactRenderer'
|
|
9
|
+
export * from './useEditor'
|
|
10
|
+
export * from '@tiptap/core'
|