Repository: ueberdosis/tiptap Branch: main Commit: 3b306eebc8a4 Files: 1936 Total size: 7.6 MB Directory structure: gitextract_m6860ykr/ ├── .changeset/ │ ├── README.md │ └── config.json ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .github/ │ ├── CODEOWNERS │ ├── DISCUSSION_TEMPLATE/ │ │ ├── community-extensions.yml │ │ ├── feature-requests.yml │ │ └── showcase.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── bug_report_pro.yml │ │ ├── config.yml │ │ └── documentation.yml │ ├── dependabot.yml │ ├── instructions/ │ │ ├── PR.instructions.md │ │ ├── changeset.instructions.md │ │ └── tiptap.instructions.md │ ├── pull_request_template.md │ └── workflows/ │ ├── build.yml │ ├── notify-discord.yml │ └── publish.yml ├── .gitignore ├── .husky/ │ └── pre-commit ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .vscode/ │ ├── launch.json │ └── settings.json ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── SECURITY.md ├── babel.config.js ├── commitlint.config.mjs ├── demos/ │ ├── CHANGELOG.md │ ├── dedupeDeps.txt │ ├── index.html │ ├── package.json │ ├── postcss.config.cjs │ ├── preview/ │ │ ├── Demo.vue │ │ ├── DemoFrame.vue │ │ ├── Shiki.vue │ │ ├── index.html │ │ ├── index.js │ │ ├── index.vue │ │ ├── shiki.worker.js │ │ └── style.css │ ├── public/ │ │ └── _redirects │ ├── setup/ │ │ ├── helper.ts │ │ ├── js.ts │ │ ├── react.ts │ │ ├── style.scss │ │ ├── svelte.ts │ │ └── vue.ts │ ├── src/ │ │ ├── Commands/ │ │ │ ├── Cut/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.jsx │ │ │ │ ├── index.spec.js │ │ │ │ └── styles.scss │ │ │ ├── InsertContent/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.jsx │ │ │ │ ├── index.spec.js │ │ │ │ └── styles.scss │ │ │ ├── InsertContentApplyingRules/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.jsx │ │ │ │ ├── index.spec.js │ │ │ │ └── styles.scss │ │ │ └── SetContent/ │ │ │ └── React/ │ │ │ ├── index.html │ │ │ ├── index.jsx │ │ │ ├── index.spec.js │ │ │ └── styles.scss │ │ ├── Demos/ │ │ │ ├── CollaborationSplitPane/ │ │ │ │ └── React/ │ │ │ │ ├── Editor.jsx │ │ │ │ ├── index.html │ │ │ │ ├── index.jsx │ │ │ │ ├── index.spec.js │ │ │ │ └── styles.scss │ │ │ └── SingleRoomCollab/ │ │ │ └── React/ │ │ │ ├── index.html │ │ │ ├── index.jsx │ │ │ ├── index.spec.js │ │ │ └── styles.scss │ │ ├── Dev/ │ │ │ └── .gitkeep │ │ ├── Examples/ │ │ │ ├── Accessibility/ │ │ │ │ └── React/ │ │ │ │ ├── InsertMenu.tsx │ │ │ │ ├── MenuBar.tsx │ │ │ │ ├── TextMenu.tsx │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.scss │ │ │ │ └── useMenubarNav.ts │ │ │ ├── AutolinkValidation/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Book/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ ├── Vue/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── index.vue │ │ │ │ └── content.js │ │ │ ├── CSSModules/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.module.css │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.module.css │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── CodeBlockLanguage/ │ │ │ │ ├── React/ │ │ │ │ │ ├── CodeBlockComponent.jsx │ │ │ │ │ ├── CodeBlockComponent.scss │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── CodeBlockComponent.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── CollaborativeEditing/ │ │ │ │ ├── React/ │ │ │ │ │ ├── MenuBar.jsx │ │ │ │ │ ├── MenuBar.scss │ │ │ │ │ ├── MenuItem.jsx │ │ │ │ │ ├── MenuItem.scss │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── MenuBar.vue │ │ │ │ ├── MenuItem.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Community/ │ │ │ │ ├── React/ │ │ │ │ │ ├── MentionList.jsx │ │ │ │ │ ├── MentionList.scss │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── suggestion.js │ │ │ │ └── Vue/ │ │ │ │ ├── MentionList.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ ├── index.vue │ │ │ │ └── suggestion.js │ │ │ ├── CustomDocument/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── CustomParagraph/ │ │ │ │ ├── React/ │ │ │ │ │ ├── Paragraph.jsx │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── Component.vue │ │ │ │ ├── Extension.js │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Default/ │ │ │ │ ├── React/ │ │ │ │ │ ├── MenuBar.tsx │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.spec.js │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── menuBarState.ts │ │ │ │ │ └── styles.scss │ │ │ │ ├── Svelte/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.spec.js │ │ │ │ │ ├── index.svelte │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Drawing/ │ │ │ │ └── Vue/ │ │ │ │ ├── Component.vue │ │ │ │ ├── Paper.js │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── EnterShortcuts/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.spec.js │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Formatting/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Images/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── InteractivityComponent/ │ │ │ │ ├── React/ │ │ │ │ │ ├── Component.jsx │ │ │ │ │ ├── Extension.js │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── Component.vue │ │ │ │ ├── Extension.js │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── InteractivityComponentContent/ │ │ │ │ ├── React/ │ │ │ │ │ ├── Component.jsx │ │ │ │ │ ├── Extension.js │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── Component.vue │ │ │ │ ├── Extension.js │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── InteractivityComponentProvideInject/ │ │ │ │ └── Vue/ │ │ │ │ ├── Component.vue │ │ │ │ ├── Editor.vue │ │ │ │ ├── Extension.js │ │ │ │ ├── ValidateInject.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── JSX/ │ │ │ │ ├── React/ │ │ │ │ │ ├── Paragraph.tsx │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.spec.js │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── Paragraph.tsx │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── MarkdownShortcuts/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Menus/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Minimal/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── MultiMention/ │ │ │ │ ├── React/ │ │ │ │ │ ├── MentionList.jsx │ │ │ │ │ ├── MentionList.scss │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── suggestions.js │ │ │ │ └── Vue/ │ │ │ │ ├── MentionList.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ ├── index.vue │ │ │ │ └── suggestions.js │ │ │ ├── NodePos/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.jsx │ │ │ │ ├── index.spec.js │ │ │ │ └── styles.scss │ │ │ ├── Performance/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.jsx │ │ │ │ ├── index.spec.js │ │ │ │ └── styles.scss │ │ │ ├── ResizableImages/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── ResizableNodes/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── Savvy/ │ │ │ │ ├── React/ │ │ │ │ │ ├── ColorHighlighter.ts │ │ │ │ │ ├── SmilieReplacer.ts │ │ │ │ │ ├── findColors.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── ColorHighlighter.ts │ │ │ │ ├── SmilieReplacer.ts │ │ │ │ ├── findColors.ts │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── StaticRendering/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ ├── index.tsx │ │ │ │ └── styles.scss │ │ │ ├── StaticRenderingAdvanced/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.tsx │ │ │ ├── Tables/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Tasks/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── TextDirection/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ ├── index.tsx │ │ │ │ └── styles.scss │ │ │ ├── TransformPastedHTML/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ └── Transition/ │ │ │ └── Vue/ │ │ │ ├── Extension.js │ │ │ ├── ParentComponent.vue │ │ │ ├── VueComponent.vue │ │ │ ├── index.html │ │ │ ├── index.spec.js │ │ │ └── index.vue │ │ ├── Experiments/ │ │ │ ├── All/ │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── CollaborationAnnotation/ │ │ │ │ └── Vue/ │ │ │ │ ├── extension/ │ │ │ │ │ ├── AnnotationItem.ts │ │ │ │ │ ├── AnnotationPlugin.ts │ │ │ │ │ ├── AnnotationState.ts │ │ │ │ │ ├── collaboration-annotation.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── CollaborationMappingPerformance/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.tsx │ │ │ │ └── styles.scss │ │ │ ├── Commands/ │ │ │ │ └── Vue/ │ │ │ │ ├── CommandsList.vue │ │ │ │ ├── commands.js │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ ├── index.vue │ │ │ │ └── suggestion.js │ │ │ ├── DestroyingEditor/ │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── Embeds/ │ │ │ │ └── Vue/ │ │ │ │ ├── iframe.ts │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── ExtensionStorage/ │ │ │ │ ├── React/ │ │ │ │ │ ├── CustomExtension.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── CustomExtension.ts │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── Figure/ │ │ │ │ └── Vue/ │ │ │ │ ├── figure.ts │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── GenericFigure/ │ │ │ │ └── Vue/ │ │ │ │ ├── figcaption.ts │ │ │ │ ├── figure.ts │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── GlobalDragHandle/ │ │ │ │ └── Vue/ │ │ │ │ ├── DragHandle.js │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── IsolatingClear/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── content.ts │ │ │ ├── Linter/ │ │ │ │ └── Vue/ │ │ │ │ ├── extension/ │ │ │ │ │ ├── Linter.ts │ │ │ │ │ ├── LinterPlugin.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── BadWords.ts │ │ │ │ │ ├── HeadingLevel.ts │ │ │ │ │ └── Punctuation.ts │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── MultipleEditorStyles/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ └── index.tsx │ │ │ ├── MultipleEditors/ │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── OnDelete/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.tsx │ │ │ │ └── styles.scss │ │ │ ├── OnUpdateRerender/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── TiptapComponent.vue │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ └── Tailwind/ │ │ │ └── JS/ │ │ │ └── index.html │ │ ├── Extensions/ │ │ │ ├── BackgroundColor/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.spec.js │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── BubbleMenu/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── CharacterCount/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── Collaboration/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── CollaborationCaret/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── CollaborationMapPositions/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.tsx │ │ │ │ └── styles.scss │ │ │ ├── CollaborationWithMenus/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Color/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.spec.js │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── DragHandle/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.vue │ │ │ │ └── style.css │ │ │ ├── DragHandleWithNodeViews/ │ │ │ │ └── React/ │ │ │ │ ├── extensions/ │ │ │ │ │ └── recommendation/ │ │ │ │ │ ├── Recommendation.jsx │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── views/ │ │ │ │ │ ├── RecommendationView.jsx │ │ │ │ │ └── index.jsx │ │ │ │ ├── index.html │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── Dropcursor/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── FileHandler/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── FloatingMenu/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── Focus/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── FontFamily/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── FontSize/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── index.spec.js │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Gapcursor/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── InvisibleCharacters/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── LineHeight/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.spec.js │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ ├── index.vue │ │ │ │ └── styles.scss │ │ │ ├── ListKeymap/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── Mathematics/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Placeholder/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── Selection/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.spec.js │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── TableOfContents/ │ │ │ │ ├── React/ │ │ │ │ │ ├── ToC.jsx │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ ├── Vue/ │ │ │ │ │ ├── ToC.vue │ │ │ │ │ ├── ToCEmptyState.vue │ │ │ │ │ ├── ToCItem.vue │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── index.vue │ │ │ │ └── content.js │ │ │ ├── TextAlign/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── TrailingNode/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── Typography/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── TypographyWithOverrides/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── index.spec.js │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── UndoRedo/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── UniqueID/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ └── UniqueIDWithYdoc/ │ │ │ └── React/ │ │ │ ├── index.html │ │ │ ├── index.jsx │ │ │ ├── index.spec.js │ │ │ └── styles.scss │ │ ├── GuideContent/ │ │ │ ├── ExportHTML/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── ExportJSON/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── GenerateHTML/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── index.tsx │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── GenerateJSON/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── index.spec.js │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── GenerateText/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── index.spec.js │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── ReadOnly/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── StaticRenderHTML/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── index.tsx │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ └── StaticRenderReact/ │ │ │ └── React/ │ │ │ ├── index.html │ │ │ ├── index.spec.js │ │ │ └── index.tsx │ │ ├── GuideGettingStarted/ │ │ │ └── VModel/ │ │ │ └── Vue/ │ │ │ ├── Editor.vue │ │ │ ├── index.html │ │ │ ├── index.spec.js │ │ │ └── index.vue │ │ ├── GuideMarkViews/ │ │ │ ├── ReactComponent/ │ │ │ │ └── React/ │ │ │ │ ├── Component.tsx │ │ │ │ ├── Extension.ts │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ ├── index.tsx │ │ │ │ └── styles.scss │ │ │ └── VueComponent/ │ │ │ └── Vue/ │ │ │ ├── Component.vue │ │ │ ├── Extension.ts │ │ │ ├── index.html │ │ │ ├── index.spec.js │ │ │ └── index.vue │ │ ├── GuideNodeViews/ │ │ │ ├── DragHandle/ │ │ │ │ ├── React/ │ │ │ │ │ ├── Component.jsx │ │ │ │ │ ├── DraggableItem.js │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── Component.vue │ │ │ │ ├── DraggableItem.js │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── JavaScript/ │ │ │ │ └── Vue/ │ │ │ │ ├── Extension.js │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── JavaScriptContent/ │ │ │ │ └── Vue/ │ │ │ │ ├── Extension.js │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── ReactComponent/ │ │ │ │ └── React/ │ │ │ │ ├── Component.tsx │ │ │ │ ├── Extension.ts │ │ │ │ ├── index.html │ │ │ │ ├── index.tsx │ │ │ │ └── styles.scss │ │ │ ├── ReactComponentContent/ │ │ │ │ └── React/ │ │ │ │ ├── Component.jsx │ │ │ │ ├── Extension.js │ │ │ │ ├── index.html │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── ReactComponentContext/ │ │ │ │ └── React/ │ │ │ │ ├── Component.tsx │ │ │ │ ├── Context.ts │ │ │ │ ├── Extension.ts │ │ │ │ ├── index.html │ │ │ │ ├── index.tsx │ │ │ │ └── styles.scss │ │ │ ├── VueComponent/ │ │ │ │ └── Vue/ │ │ │ │ ├── Component.vue │ │ │ │ ├── Extension.js │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ └── VueComponentContent/ │ │ │ └── Vue/ │ │ │ ├── Component.vue │ │ │ ├── Extension.js │ │ │ ├── index.html │ │ │ └── index.vue │ │ ├── Markdown/ │ │ │ ├── CustomSyntax/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.jsx │ │ │ │ └── styles.scss │ │ │ ├── Full/ │ │ │ │ └── React/ │ │ │ │ ├── content.ts │ │ │ │ ├── index.html │ │ │ │ ├── index.tsx │ │ │ │ └── styles.scss │ │ │ ├── Parse/ │ │ │ │ └── React/ │ │ │ │ ├── index.html │ │ │ │ └── index.jsx │ │ │ └── Serialize/ │ │ │ └── React/ │ │ │ ├── index.html │ │ │ ├── index.jsx │ │ │ └── styles.scss │ │ ├── Marks/ │ │ │ ├── Bold/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.spec.js │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Code/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Highlight/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Italic/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Link/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Strike/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Subscript/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Superscript/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── TextStyle/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ └── Underline/ │ │ │ ├── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.jsx │ │ │ │ ├── index.spec.js │ │ │ │ └── styles.scss │ │ │ └── Vue/ │ │ │ ├── index.html │ │ │ ├── index.spec.js │ │ │ └── index.vue │ │ ├── Nodes/ │ │ │ ├── Audio/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── Blockquote/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── BulletList/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── CodeBlock/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── CodeBlockLowlight/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ ├── Details/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Document/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Emoji/ │ │ │ │ ├── React/ │ │ │ │ │ ├── EmojiList.jsx │ │ │ │ │ ├── EmojiList.scss │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── suggestion.js │ │ │ │ └── Vue/ │ │ │ │ ├── EmojiList.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.vue │ │ │ │ └── suggestion.js │ │ │ ├── HardBreak/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Heading/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── HorizontalRule/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Image/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── ListItem/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Mention/ │ │ │ │ ├── React/ │ │ │ │ │ ├── MentionList.jsx │ │ │ │ │ ├── MentionList.scss │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── suggestion.js │ │ │ │ └── Vue/ │ │ │ │ ├── MentionList.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ ├── index.vue │ │ │ │ └── suggestion.js │ │ │ ├── OrderedList/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Paragraph/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Table/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── TaskItem/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── TaskList/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Text/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ ├── index.spec.js │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ ├── index.spec.js │ │ │ │ └── index.vue │ │ │ ├── Twitch/ │ │ │ │ ├── React/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.scss │ │ │ │ └── Vue/ │ │ │ │ ├── index.html │ │ │ │ └── index.vue │ │ │ └── Youtube/ │ │ │ ├── React/ │ │ │ │ ├── index.html │ │ │ │ ├── index.jsx │ │ │ │ ├── index.spec.js │ │ │ │ └── styles.scss │ │ │ └── Vue/ │ │ │ ├── index.html │ │ │ ├── index.spec.js │ │ │ └── index.vue │ │ ├── Overview/ │ │ │ └── Installation/ │ │ │ └── Vue/ │ │ │ ├── index.html │ │ │ └── index.vue │ │ ├── Tutorials/ │ │ │ ├── 1-1-textarea/ │ │ │ │ ├── React/ │ │ │ │ │ ├── Note.tsx │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── types.ts │ │ │ │ └── Vue/ │ │ │ │ ├── Note.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.vue │ │ │ │ ├── styles.scss │ │ │ │ └── types.ts │ │ │ ├── 1-2-tiptap/ │ │ │ │ ├── React/ │ │ │ │ │ ├── Note.tsx │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── types.ts │ │ │ │ └── Vue/ │ │ │ │ ├── Note.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.vue │ │ │ │ ├── styles.scss │ │ │ │ └── types.ts │ │ │ ├── 1-2-tiptap_lexical/ │ │ │ │ └── Lexical-React/ │ │ │ │ ├── Note.tsx │ │ │ │ ├── index.html │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.css │ │ │ │ └── types.ts │ │ │ ├── 1-3-yjs/ │ │ │ │ ├── React/ │ │ │ │ │ ├── Note.tsx │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── types.ts │ │ │ │ └── Vue/ │ │ │ │ ├── Note.vue │ │ │ │ ├── index.html │ │ │ │ ├── index.vue │ │ │ │ ├── styles.scss │ │ │ │ └── types.ts │ │ │ ├── 1-3-yjs_lexical/ │ │ │ │ └── Lexical-React/ │ │ │ │ ├── Note.tsx │ │ │ │ ├── index.html │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.css │ │ │ │ └── types.ts │ │ │ └── 1-4-collab/ │ │ │ ├── React/ │ │ │ │ ├── Note.tsx │ │ │ │ ├── index.html │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.scss │ │ │ │ └── types.ts │ │ │ └── Vue/ │ │ │ ├── Note.vue │ │ │ ├── index.html │ │ │ ├── index.vue │ │ │ ├── styles.scss │ │ │ └── types.ts │ │ └── variables.js │ ├── tailwind.config.js │ ├── tsconfig.json │ └── vite.config.ts ├── env.d.ts ├── package.json ├── packages/ │ ├── core/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── can.spec.ts │ │ │ ├── createNodeFromContent.spec.ts │ │ │ ├── dispatchTransaction.spec.ts │ │ │ ├── editorProps.spec.ts │ │ │ ├── extendExtensions.spec.ts │ │ │ ├── extendMarkRange.spec.ts │ │ │ ├── extensionOptions.spec.ts │ │ │ ├── extensionStorage.spec.ts │ │ │ ├── fromString.spec.ts │ │ │ ├── generateHTML.spec.ts │ │ │ ├── generateJSON.spec.ts │ │ │ ├── generateText.spec.ts │ │ │ ├── getAttributesFromExtensions.spec.ts │ │ │ ├── getMarkRange.spec.ts │ │ │ ├── getTextContentFromNodes.spec.ts │ │ │ ├── isActive.spec.ts │ │ │ ├── isNodeEmpty.spec.ts │ │ │ ├── mergeAttributes.spec.ts │ │ │ ├── mergeDeep.spec.ts │ │ │ ├── nodePos.spec.ts │ │ │ ├── onContentError.spec.ts │ │ │ ├── requiredAttributes.spec.ts │ │ │ └── unmounted.spec.ts │ │ ├── jsx-dev-runtime/ │ │ │ ├── index.cjs │ │ │ ├── index.d.cts │ │ │ ├── index.d.ts │ │ │ └── index.js │ │ ├── jsx-runtime/ │ │ │ ├── index.cjs │ │ │ ├── index.d.cts │ │ │ ├── index.d.ts │ │ │ └── index.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── CommandManager.ts │ │ │ ├── Editor.ts │ │ │ ├── EventEmitter.ts │ │ │ ├── Extendable.ts │ │ │ ├── Extension.ts │ │ │ ├── ExtensionManager.ts │ │ │ ├── InputRule.ts │ │ │ ├── Mark.ts │ │ │ ├── MarkView.ts │ │ │ ├── Node.ts │ │ │ ├── NodePos.ts │ │ │ ├── NodeView.ts │ │ │ ├── PasteRule.ts │ │ │ ├── Tracker.ts │ │ │ ├── __tests__/ │ │ │ │ └── transformPastedHTML.test.ts │ │ │ ├── commands/ │ │ │ │ ├── blur.ts │ │ │ │ ├── clearContent.ts │ │ │ │ ├── clearNodes.ts │ │ │ │ ├── command.ts │ │ │ │ ├── createParagraphNear.ts │ │ │ │ ├── cut.ts │ │ │ │ ├── deleteCurrentNode.ts │ │ │ │ ├── deleteNode.ts │ │ │ │ ├── deleteRange.ts │ │ │ │ ├── deleteSelection.ts │ │ │ │ ├── enter.ts │ │ │ │ ├── exitCode.ts │ │ │ │ ├── extendMarkRange.ts │ │ │ │ ├── first.ts │ │ │ │ ├── focus.ts │ │ │ │ ├── forEach.ts │ │ │ │ ├── index.ts │ │ │ │ ├── insertContent.ts │ │ │ │ ├── insertContentAt.ts │ │ │ │ ├── join.ts │ │ │ │ ├── joinItemBackward.ts │ │ │ │ ├── joinItemForward.ts │ │ │ │ ├── joinTextblockBackward.ts │ │ │ │ ├── joinTextblockForward.ts │ │ │ │ ├── keyboardShortcut.ts │ │ │ │ ├── lift.ts │ │ │ │ ├── liftEmptyBlock.ts │ │ │ │ ├── liftListItem.ts │ │ │ │ ├── newlineInCode.ts │ │ │ │ ├── resetAttributes.ts │ │ │ │ ├── scrollIntoView.ts │ │ │ │ ├── selectAll.ts │ │ │ │ ├── selectNodeBackward.ts │ │ │ │ ├── selectNodeForward.ts │ │ │ │ ├── selectParentNode.ts │ │ │ │ ├── selectTextblockEnd.ts │ │ │ │ ├── selectTextblockStart.ts │ │ │ │ ├── setContent.ts │ │ │ │ ├── setMark.ts │ │ │ │ ├── setMeta.ts │ │ │ │ ├── setNode.ts │ │ │ │ ├── setNodeSelection.ts │ │ │ │ ├── setTextDirection.ts │ │ │ │ ├── setTextSelection.ts │ │ │ │ ├── sinkListItem.ts │ │ │ │ ├── splitBlock.ts │ │ │ │ ├── splitListItem.ts │ │ │ │ ├── toggleList.ts │ │ │ │ ├── toggleMark.ts │ │ │ │ ├── toggleNode.ts │ │ │ │ ├── toggleWrap.ts │ │ │ │ ├── undoInputRule.ts │ │ │ │ ├── unsetAllMarks.ts │ │ │ │ ├── unsetMark.ts │ │ │ │ ├── unsetTextDirection.ts │ │ │ │ ├── updateAttributes.ts │ │ │ │ ├── wrapIn.ts │ │ │ │ └── wrapInList.ts │ │ │ ├── extensions/ │ │ │ │ ├── clipboardTextSerializer.ts │ │ │ │ ├── commands.ts │ │ │ │ ├── delete.ts │ │ │ │ ├── drop.ts │ │ │ │ ├── editable.ts │ │ │ │ ├── focusEvents.ts │ │ │ │ ├── index.ts │ │ │ │ ├── keymap.ts │ │ │ │ ├── paste.ts │ │ │ │ ├── tabindex.ts │ │ │ │ └── textDirection.ts │ │ │ ├── helpers/ │ │ │ │ ├── MappablePosition.ts │ │ │ │ ├── combineTransactionSteps.ts │ │ │ │ ├── createChainableState.ts │ │ │ │ ├── createDocument.ts │ │ │ │ ├── createNodeFromContent.ts │ │ │ │ ├── defaultBlockAt.ts │ │ │ │ ├── findChildren.ts │ │ │ │ ├── findChildrenInRange.ts │ │ │ │ ├── findParentNode.ts │ │ │ │ ├── findParentNodeClosestToPos.ts │ │ │ │ ├── flattenExtensions.ts │ │ │ │ ├── generateHTML.ts │ │ │ │ ├── generateJSON.ts │ │ │ │ ├── generateText.ts │ │ │ │ ├── getAttributes.ts │ │ │ │ ├── getAttributesFromExtensions.ts │ │ │ │ ├── getChangedRanges.ts │ │ │ │ ├── getDebugJSON.ts │ │ │ │ ├── getExtensionField.ts │ │ │ │ ├── getHTMLFromFragment.ts │ │ │ │ ├── getMarkAttributes.ts │ │ │ │ ├── getMarkRange.ts │ │ │ │ ├── getMarkType.ts │ │ │ │ ├── getMarksBetween.ts │ │ │ │ ├── getNodeAtPosition.ts │ │ │ │ ├── getNodeAttributes.ts │ │ │ │ ├── getNodeType.ts │ │ │ │ ├── getRenderedAttributes.ts │ │ │ │ ├── getSchema.ts │ │ │ │ ├── getSchemaByResolvedExtensions.ts │ │ │ │ ├── getSchemaTypeByName.ts │ │ │ │ ├── getSchemaTypeNameByName.ts │ │ │ │ ├── getSplittedAttributes.ts │ │ │ │ ├── getText.ts │ │ │ │ ├── getTextBetween.ts │ │ │ │ ├── getTextContentFromNodes.ts │ │ │ │ ├── getTextSerializersFromSchema.ts │ │ │ │ ├── index.ts │ │ │ │ ├── injectExtensionAttributesToParseRule.ts │ │ │ │ ├── isActive.ts │ │ │ │ ├── isAtEndOfNode.ts │ │ │ │ ├── isAtStartOfNode.ts │ │ │ │ ├── isExtensionRulesEnabled.ts │ │ │ │ ├── isList.ts │ │ │ │ ├── isMarkActive.ts │ │ │ │ ├── isNodeActive.ts │ │ │ │ ├── isNodeEmpty.ts │ │ │ │ ├── isNodeSelection.ts │ │ │ │ ├── isTextSelection.ts │ │ │ │ ├── posToDOMRect.ts │ │ │ │ ├── resolveExtensions.ts │ │ │ │ ├── resolveFocusPosition.ts │ │ │ │ ├── rewriteUnknownContent.ts │ │ │ │ ├── selectionToInsertionEnd.ts │ │ │ │ ├── sortExtensions.ts │ │ │ │ └── splitExtensions.ts │ │ │ ├── index.ts │ │ │ ├── inputRules/ │ │ │ │ ├── index.ts │ │ │ │ ├── markInputRule.ts │ │ │ │ ├── nodeInputRule.ts │ │ │ │ ├── textInputRule.ts │ │ │ │ ├── textblockTypeInputRule.ts │ │ │ │ └── wrappingInputRule.ts │ │ │ ├── jsx-runtime.ts │ │ │ ├── lib/ │ │ │ │ ├── ResizableNodeView.ts │ │ │ │ └── index.ts │ │ │ ├── pasteRules/ │ │ │ │ ├── index.ts │ │ │ │ ├── markPasteRule.ts │ │ │ │ ├── nodePasteRule.ts │ │ │ │ └── textPasteRule.ts │ │ │ ├── style.ts │ │ │ ├── types.ts │ │ │ └── utilities/ │ │ │ ├── callOrReturn.ts │ │ │ ├── canInsertNode.ts │ │ │ ├── createStyleTag.ts │ │ │ ├── deleteProps.ts │ │ │ ├── elementFromString.ts │ │ │ ├── escapeForRegEx.ts │ │ │ ├── findDuplicates.ts │ │ │ ├── fromString.ts │ │ │ ├── index.ts │ │ │ ├── isAndroid.ts │ │ │ ├── isEmptyObject.ts │ │ │ ├── isFirefox.ts │ │ │ ├── isFunction.ts │ │ │ ├── isMacOS.ts │ │ │ ├── isNumber.ts │ │ │ ├── isPlainObject.ts │ │ │ ├── isRegExp.ts │ │ │ ├── isSafari.ts │ │ │ ├── isString.ts │ │ │ ├── isiOS.ts │ │ │ ├── markdown/ │ │ │ │ ├── attributeUtils.ts │ │ │ │ ├── createAtomBlockMarkdownSpec.ts │ │ │ │ ├── createBlockMarkdownSpec.ts │ │ │ │ ├── createInlineMarkdownSpec.ts │ │ │ │ ├── index.ts │ │ │ │ ├── parseIndentedBlocks.ts │ │ │ │ └── renderNestedMarkdownContent.ts │ │ │ ├── mergeAttributes.ts │ │ │ ├── mergeDeep.ts │ │ │ ├── minMax.ts │ │ │ ├── objectIncludes.ts │ │ │ └── removeDuplicates.ts │ │ └── tsup.config.ts │ ├── extension-audio/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── audio.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── audio.ts │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ └── tsup.config.ts │ ├── extension-blockquote/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── blockquote.tsx │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-bold/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── bold.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── bold.tsx │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-bubble-menu/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── bubble-menu-plugin.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── bubble-menu-plugin.ts │ │ │ ├── bubble-menu.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-bullet-list/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-code/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── code.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-code-block/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── code-block.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-code-block-lowlight/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── codeBlockLowlight.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── code-block-lowlight.ts │ │ │ ├── index.ts │ │ │ └── lowlight-plugin.ts │ │ └── tsup.config.ts │ ├── extension-collaboration/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── collaboration.ts │ │ │ ├── helpers/ │ │ │ │ ├── CollaborationMappablePosition.ts │ │ │ │ ├── isChangeOrigin.ts │ │ │ │ └── yRelativePosition.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-collaboration-caret/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── collaboration-caret.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── collaboration-caret.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-color/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-details/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── content/ │ │ │ │ ├── details-content.ts │ │ │ │ └── index.ts │ │ │ ├── details.ts │ │ │ ├── helpers/ │ │ │ │ ├── findClosestVisibleNode.ts │ │ │ │ ├── isNodeVisible.ts │ │ │ │ └── setGapCursor.ts │ │ │ ├── index.ts │ │ │ └── summary/ │ │ │ ├── details-summary.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-document/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── document.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-drag-handle/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── defaultRules.spec.ts │ │ │ ├── drag-handle.spec.ts │ │ │ ├── edgeDetection.spec.ts │ │ │ ├── findBestDragTarget.spec.ts │ │ │ ├── normalizeOptions.spec.ts │ │ │ └── scoring.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── drag-handle-plugin.ts │ │ │ ├── drag-handle.ts │ │ │ ├── helpers/ │ │ │ │ ├── cloneElement.ts │ │ │ │ ├── defaultRules.ts │ │ │ │ ├── dragHandler.ts │ │ │ │ ├── edgeDetection.ts │ │ │ │ ├── findBestDragTarget.ts │ │ │ │ ├── findNextElementFromCursor.ts │ │ │ │ ├── getComputedStyle.ts │ │ │ │ ├── getInnerCoords.ts │ │ │ │ ├── getOuterNode.ts │ │ │ │ ├── minMax.ts │ │ │ │ ├── normalizeOptions.ts │ │ │ │ ├── removeNode.ts │ │ │ │ └── scoring.ts │ │ │ ├── index.ts │ │ │ └── types/ │ │ │ ├── options.ts │ │ │ └── rules.ts │ │ └── tsup.config.ts │ ├── extension-drag-handle-react/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── DragHandle.tsx │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-drag-handle-vue-2/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── DragHandle.ts │ │ │ ├── Vue.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-drag-handle-vue-3/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── DragHandle.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-emoji/ │ │ ├── CHANGELOG.md │ │ ├── __tests__/ │ │ │ └── emoji.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── data.ts │ │ │ ├── emoji.ts │ │ │ ├── generate.ts │ │ │ ├── helpers/ │ │ │ │ ├── emojiToShortcode.ts │ │ │ │ ├── removeDuplicates.ts │ │ │ │ ├── removeVariationSelector.ts │ │ │ │ └── shortcodeToEmoji.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-file-handler/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── FileHandlePlugin.ts │ │ │ ├── fileHandler.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ └── tsup.config.ts │ ├── extension-floating-menu/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── floating-menu-plugin.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── floating-menu-plugin.ts │ │ │ ├── floating-menu.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-font-family/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-hard-break/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── hard-break.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-heading/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── heading.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-highlight/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── highlight.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-horizontal-rule/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── horizontalRule.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── horizontal-rule.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-image/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── image.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-invisible-characters/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── invisible-characters.ts │ │ │ ├── plugin/ │ │ │ │ ├── InvisibleCharacter.ts │ │ │ │ ├── InvisibleCharactersPlugin.ts │ │ │ │ ├── InvisibleNode.ts │ │ │ │ ├── index.ts │ │ │ │ ├── invisible-characters/ │ │ │ │ │ ├── hardBreak.ts │ │ │ │ │ ├── paragraph.ts │ │ │ │ │ └── space.ts │ │ │ │ ├── reducers.ts │ │ │ │ ├── style.ts │ │ │ │ └── utils/ │ │ │ │ ├── create-decoration-widget.ts │ │ │ │ ├── create-style-tag.ts │ │ │ │ ├── get-updated-ranges.ts │ │ │ │ └── text-between.ts │ │ │ └── types.ts │ │ └── tsup.config.ts │ ├── extension-italic/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── italic.ts │ │ └── tsup.config.ts │ ├── extension-link/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── link.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── helpers/ │ │ │ │ ├── autolink.ts │ │ │ │ ├── clickHandler.ts │ │ │ │ ├── pasteHandler.ts │ │ │ │ └── whitespace.ts │ │ │ ├── index.ts │ │ │ └── link.ts │ │ └── tsup.config.ts │ ├── extension-list/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── taskItem.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── bullet-list/ │ │ │ │ ├── bullet-list.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── item/ │ │ │ │ ├── index.ts │ │ │ │ └── list-item.ts │ │ │ ├── keymap/ │ │ │ │ ├── index.ts │ │ │ │ ├── list-keymap.ts │ │ │ │ └── listHelpers/ │ │ │ │ ├── findListItemPos.ts │ │ │ │ ├── getNextListDepth.ts │ │ │ │ ├── handleBackspace.ts │ │ │ │ ├── handleDelete.ts │ │ │ │ ├── hasListBefore.ts │ │ │ │ ├── hasListItemAfter.ts │ │ │ │ ├── hasListItemBefore.ts │ │ │ │ ├── index.ts │ │ │ │ ├── listItemHasSubList.ts │ │ │ │ ├── nextListIsDeeper.ts │ │ │ │ └── nextListIsHigher.ts │ │ │ ├── kit/ │ │ │ │ └── index.ts │ │ │ ├── ordered-list/ │ │ │ │ ├── index.ts │ │ │ │ ├── ordered-list.ts │ │ │ │ └── utils.ts │ │ │ ├── task-item/ │ │ │ │ ├── index.ts │ │ │ │ └── task-item.ts │ │ │ └── task-list/ │ │ │ ├── index.ts │ │ │ └── task-list.ts │ │ └── tsup.config.ts │ ├── extension-mathematics/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── extensions/ │ │ │ │ ├── BlockMath.ts │ │ │ │ ├── InlineMath.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── mathematics.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ └── tsup.config.ts │ ├── extension-mention/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── mention.ts │ │ │ └── utils/ │ │ │ └── get-default-suggestion-attributes.ts │ │ └── tsup.config.ts │ ├── extension-node-range/ │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── helpers/ │ │ │ │ ├── NodeRangeBookmark.ts │ │ │ │ ├── NodeRangeSelection.ts │ │ │ │ ├── getNodeRangeDecorations.ts │ │ │ │ ├── getSelectionRanges.ts │ │ │ │ └── isNodeRangeSelection.ts │ │ │ ├── index.ts │ │ │ └── node-range.ts │ │ └── tsup.config.ts │ ├── extension-ordered-list/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-paragraph/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── paragraph.ts │ │ └── tsup.config.ts │ ├── extension-strike/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── strike.ts │ │ └── tsup.config.ts │ ├── extension-subscript/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── subscript.ts │ │ └── tsup.config.ts │ ├── extension-superscript/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── superscript.ts │ │ └── tsup.config.ts │ ├── extension-table/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── tableCell.spec.ts │ │ │ └── tableHeader.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── cell/ │ │ │ │ ├── index.ts │ │ │ │ └── table-cell.ts │ │ │ ├── header/ │ │ │ │ ├── index.ts │ │ │ │ └── table-header.ts │ │ │ ├── index.ts │ │ │ ├── kit/ │ │ │ │ └── index.ts │ │ │ ├── row/ │ │ │ │ ├── index.ts │ │ │ │ └── table-row.ts │ │ │ ├── table/ │ │ │ │ ├── TableView.ts │ │ │ │ ├── index.ts │ │ │ │ ├── table.ts │ │ │ │ └── utilities/ │ │ │ │ ├── colStyle.ts │ │ │ │ ├── createCell.ts │ │ │ │ ├── createColGroup.ts │ │ │ │ ├── createTable.ts │ │ │ │ ├── deleteTableWhenAllCellsSelected.ts │ │ │ │ ├── getTableNodeTypes.ts │ │ │ │ ├── isCellSelection.ts │ │ │ │ └── markdown.ts │ │ │ └── types.ts │ │ └── tsup.config.ts │ ├── extension-table-of-contents/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── plugin.ts │ │ │ ├── tableOfContents.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ └── tsup.config.ts │ ├── extension-text/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── text.ts │ │ └── tsup.config.ts │ ├── extension-text-align/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── text-align.ts │ │ └── tsup.config.ts │ ├── extension-text-style/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── background-color.spec.ts │ │ │ └── color.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── background-color/ │ │ │ │ ├── background-color.ts │ │ │ │ └── index.ts │ │ │ ├── color/ │ │ │ │ ├── color.ts │ │ │ │ └── index.ts │ │ │ ├── font-family/ │ │ │ │ ├── font-family.ts │ │ │ │ └── index.ts │ │ │ ├── font-size/ │ │ │ │ ├── font-size.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── line-height/ │ │ │ │ ├── index.ts │ │ │ │ └── line-height.ts │ │ │ ├── text-style/ │ │ │ │ └── index.ts │ │ │ └── text-style-kit/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-twitch/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── twitch.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── twitch.ts │ │ │ └── utils.ts │ │ └── tsup.config.ts │ ├── extension-typography/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── typography.ts │ │ └── tsup.config.ts │ ├── extension-underline/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── underline.ts │ │ └── tsup.config.ts │ ├── extension-unique-id/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── unique-id-collab.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── generate-unique-ids.ts │ │ │ ├── helpers/ │ │ │ │ └── findDuplicates.ts │ │ │ ├── index.ts │ │ │ └── unique-id.ts │ │ └── tsup.config.ts │ ├── extension-youtube/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── youtube.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── utils.ts │ │ │ └── youtube.ts │ │ └── tsup.config.ts │ ├── extensions/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── placeholder.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── character-count/ │ │ │ │ ├── character-count.ts │ │ │ │ └── index.ts │ │ │ ├── drop-cursor/ │ │ │ │ ├── drop-cursor.ts │ │ │ │ └── index.ts │ │ │ ├── focus/ │ │ │ │ ├── focus.ts │ │ │ │ └── index.ts │ │ │ ├── gap-cursor/ │ │ │ │ ├── gap-cursor.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── placeholder/ │ │ │ │ ├── index.ts │ │ │ │ └── placeholder.ts │ │ │ ├── selection/ │ │ │ │ ├── index.ts │ │ │ │ └── selection.ts │ │ │ ├── trailing-node/ │ │ │ │ ├── index.ts │ │ │ │ └── trailing-node.ts │ │ │ └── undo-redo/ │ │ │ ├── index.ts │ │ │ └── undo-redo.ts │ │ └── tsup.config.ts │ ├── html/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── generateHTML.spec.ts │ │ │ ├── generateJSON.spec.ts │ │ │ └── server-with-jsdom.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── generateHTML.ts │ │ │ ├── generateJSON.ts │ │ │ ├── getHTMLFromFragment.ts │ │ │ ├── index.ts │ │ │ └── server/ │ │ │ ├── generateHTML.ts │ │ │ ├── generateJSON.ts │ │ │ ├── getHTMLFromFragment.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── markdown/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── conversion-files/ │ │ │ │ ├── bullet-list.ts │ │ │ │ ├── custom-atom.ts │ │ │ │ ├── custom-block.ts │ │ │ │ ├── custom-inline.ts │ │ │ │ ├── hard-break-marks.ts │ │ │ │ ├── index.ts │ │ │ │ ├── link-with-title.ts │ │ │ │ ├── link-without-title.ts │ │ │ │ ├── mixed-list-types.ts │ │ │ │ ├── nested-nodes.ts │ │ │ │ ├── ordered-list-separated-by-bullet.ts │ │ │ │ ├── ordered-list-with-bullet-list.ts │ │ │ │ ├── ordered-list.ts │ │ │ │ ├── soft-break-marks.ts │ │ │ │ ├── task-list.ts │ │ │ │ └── trailing-whitespace-marks.ts │ │ │ ├── conversion.spec.ts │ │ │ ├── extensions/ │ │ │ │ └── blockquote.spec.ts │ │ │ ├── inline-marks-punctuation.spec.ts │ │ │ ├── manager.spec.ts │ │ │ ├── mixed-html.spec.ts │ │ │ ├── overlapping-marks.spec.ts │ │ │ ├── paragraph.spec.ts │ │ │ ├── server-side-parsing.spec.ts │ │ │ └── utilities.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── Extension.ts │ │ │ ├── MarkdownManager.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ └── tsup.config.ts │ ├── pm/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── changeset/ │ │ │ └── index.ts │ │ ├── collab/ │ │ │ └── index.ts │ │ ├── commands/ │ │ │ └── index.ts │ │ ├── dropcursor/ │ │ │ └── index.ts │ │ ├── gapcursor/ │ │ │ └── index.ts │ │ ├── history/ │ │ │ └── index.ts │ │ ├── inputrules/ │ │ │ └── index.ts │ │ ├── keymap/ │ │ │ └── index.ts │ │ ├── markdown/ │ │ │ └── index.ts │ │ ├── menu/ │ │ │ └── index.ts │ │ ├── model/ │ │ │ └── index.ts │ │ ├── package.json │ │ ├── schema-basic/ │ │ │ └── index.ts │ │ ├── schema-list/ │ │ │ └── index.ts │ │ ├── state/ │ │ │ └── index.ts │ │ ├── tables/ │ │ │ └── index.ts │ │ ├── trailing-node/ │ │ │ └── index.ts │ │ ├── transform/ │ │ │ └── index.ts │ │ ├── tsup.config.ts │ │ └── view/ │ │ └── index.ts │ ├── react/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── Context.tsx │ │ │ ├── Editor.ts │ │ │ ├── EditorContent.tsx │ │ │ ├── NodeViewContent.tsx │ │ │ ├── NodeViewWrapper.tsx │ │ │ ├── ReactMarkViewRenderer.tsx │ │ │ ├── ReactNodeViewRenderer.tsx │ │ │ ├── ReactRenderer.tsx │ │ │ ├── Tiptap.tsx │ │ │ ├── index.ts │ │ │ ├── menus/ │ │ │ │ ├── BubbleMenu.spec.ts │ │ │ │ ├── BubbleMenu.tsx │ │ │ │ ├── FloatingMenu.spec.ts │ │ │ │ ├── FloatingMenu.tsx │ │ │ │ ├── getAutoPluginKey.ts │ │ │ │ ├── index.ts │ │ │ │ └── useMenuElementProps.ts │ │ │ ├── types.ts │ │ │ ├── useEditor.ts │ │ │ ├── useEditorState.ts │ │ │ └── useReactNodeView.ts │ │ └── tsup.config.ts │ ├── starter-kit/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── starter-kit.ts │ │ └── tsup.config.ts │ ├── static-renderer/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── json-string.spec.ts │ │ │ ├── md-string.spec.ts │ │ │ └── react-string.spec.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── helpers.ts │ │ │ ├── index.ts │ │ │ ├── json/ │ │ │ │ ├── html-string/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── string.ts │ │ │ │ ├── react/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── react.ts │ │ │ │ └── renderer.ts │ │ │ └── pm/ │ │ │ ├── extensionRenderer.ts │ │ │ ├── html-string/ │ │ │ │ ├── html-string.ts │ │ │ │ └── index.ts │ │ │ ├── markdown/ │ │ │ │ ├── index.ts │ │ │ │ └── markdown.ts │ │ │ └── react/ │ │ │ ├── index.ts │ │ │ └── react.ts │ │ └── tsup.config.ts │ ├── suggestion/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── __tests__/ │ │ │ │ └── suggestion.test.ts │ │ │ ├── findSuggestionMatch.ts │ │ │ ├── index.ts │ │ │ └── suggestion.ts │ │ └── tsup.config.ts │ ├── vue-2/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── Editor.ts │ │ │ ├── EditorContent.ts │ │ │ ├── NodeViewContent.ts │ │ │ ├── NodeViewWrapper.ts │ │ │ ├── Vue.ts │ │ │ ├── VueNodeViewRenderer.ts │ │ │ ├── VueRenderer.ts │ │ │ ├── index.ts │ │ │ └── menus/ │ │ │ ├── BubbleMenu.ts │ │ │ ├── FloatingMenu.ts │ │ │ └── index.ts │ │ └── tsup.config.ts │ └── vue-3/ │ ├── CHANGELOG.md │ ├── README.md │ ├── __tests__/ │ │ ├── VueMarkViewRenderer.spec.ts │ │ └── VueRenderer.spec.ts │ ├── package.json │ ├── src/ │ │ ├── Editor.ts │ │ ├── EditorContent.ts │ │ ├── NodeViewContent.ts │ │ ├── NodeViewWrapper.ts │ │ ├── VueMarkViewRenderer.ts │ │ ├── VueNodeViewRenderer.ts │ │ ├── VueRenderer.ts │ │ ├── index.ts │ │ ├── menus/ │ │ │ ├── BubbleMenu.ts │ │ │ ├── FloatingMenu.ts │ │ │ └── index.ts │ │ └── useEditor.ts │ └── tsup.config.ts ├── packages-deprecated/ │ ├── .gitkeep │ ├── extension-character-count/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── extension-dropcursor/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-focus/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-gapcursor/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-history/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-list-item/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-list-keymap/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-placeholder/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-table-cell/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-table-header/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-table-row/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ ├── extension-task-item/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ └── tsup.config.ts │ └── extension-task-list/ │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src/ │ │ └── index.ts │ └── tsup.config.ts ├── patches/ │ └── @changesets__assemble-release-plan.patch ├── pnpm-workspace.yaml ├── scripts/ │ ├── aggregate-changeset.js │ ├── check-package-dists.sh │ └── make-demo.sh ├── skills/ │ └── tiptap/ │ └── SKILL.md ├── tests/ │ ├── cypress/ │ │ ├── fixtures/ │ │ │ └── example.json │ │ ├── integration/ │ │ │ └── core/ │ │ │ ├── pluginOrder.spec.ts │ │ │ └── transformPastedHTML.spec.ts │ │ ├── plugins/ │ │ │ └── index.js │ │ ├── support/ │ │ │ ├── commands.js │ │ │ └── e2e.js │ │ └── tsconfig.json │ ├── cypress.config.js │ └── package.json ├── tsconfig.build.json ├── tsconfig.json ├── turbo.json └── vitest.config.ts ================================================ FILE CONTENTS ================================================ ================================================ FILE: .changeset/README.md ================================================ # Changesets Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works with multi-package repos, or single-package repos to help you version and publish your code. You can find the full documentation for it [in our repository](https://github.com/changesets/changesets) We have a quick list of common questions to get you started engaging with this project in [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) ================================================ FILE: .changeset/config.json ================================================ { "$schema": "https://unpkg.com/@changesets/config@3.0.1/schema.json", "changelog": "@changesets/cli/changelog", "commit": false, "fixed": [["@tiptap/*"]], "linked": [], "access": "public", "baseBranch": "main", "updateInternalDependencies": "patch", "ignore": [], "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { "onlyUpdatePeerDependentsWhenOutOfRange": true } } ================================================ FILE: .editorconfig ================================================ # EditorConfig is awesome: http://EditorConfig.org root = true [*] end_of_line = lf charset = utf-8 insert_final_newline = true max_line_length = 100 trim_trailing_whitespace = true indent_style = space indent_size = 2 ================================================ FILE: .eslintignore ================================================ **/dist/** ================================================ FILE: .eslintrc.js ================================================ module.exports = { parserOptions: { parser: '@typescript-eslint/parser', sourceType: 'module', }, env: { es6: true, node: true, }, overrides: [ { files: ['./**/*.ts', './**/*.tsx', './**/*.js', './**/*.jsx'], extends: ['plugin:react-hooks/recommended'], }, { files: ['./**/*.ts', './**/*.tsx', './**/*.js', './**/*.jsx', './**/*.vue'], plugins: ['html', 'cypress', '@typescript-eslint', 'simple-import-sort'], env: { 'cypress/globals': true, }, globals: { document: false, window: false, }, extends: [ 'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended', 'plugin:vue/vue3-strongly-recommended', 'airbnb-base', 'prettier', ], rules: { curly: ['error', 'all'], 'no-continue': 'off', 'no-alert': 'off', 'no-console': ['warn', { allow: ['warn', 'error'] }], semi: ['error', 'never'], 'import/order': 'off', 'import/extensions': ['error', 'ignorePackages'], 'no-restricted-imports': [ 'error', { paths: [ { name: '..', message: 'Import from ../index.js instead.', }, { name: '.', message: 'Import from ./index.js instead.', }, ], }, ], 'import/no-extraneous-dependencies': 'off', 'import/no-unresolved': 'off', 'import/no-dynamic-require': 'off', 'arrow-parens': ['error', 'as-needed'], 'padded-blocks': 'off', 'class-methods-use-this': 'off', 'global-require': 'off', 'func-names': ['error', 'never'], 'arrow-body-style': 'off', 'max-len': 'off', 'no-return-assign': 'off', 'vue/one-component-per-file': 'off', 'vue/this-in-template': ['error', 'never'], 'vue/multi-word-component-names': 'off', 'vue/singleline-html-element-content-newline': 'off', 'no-param-reassign': 'off', 'import/prefer-default-export': 'off', 'consistent-return': 'off', 'prefer-destructuring': 'off', 'no-redeclare': 'off', '@typescript-eslint/no-redeclare': ['error'], 'no-unused-vars': 'off', '@typescript-eslint/no-unused-vars': ['error', { ignoreRestSiblings: true, argsIgnorePattern: '^_' }], 'no-use-before-define': 'off', '@typescript-eslint/no-use-before-define': ['error'], 'no-dupe-class-members': 'off', '@typescript-eslint/no-dupe-class-members': ['error'], 'lines-between-class-members': 'off', 'no-shadow': 'off', '@typescript-eslint/no-shadow': ['error'], '@typescript-eslint/no-require-imports': 'off', '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-empty-interface': 'off', '@typescript-eslint/explicit-module-boundary-type': 'off', '@typescript-eslint/no-var-requires': 'off', '@typescript-eslint/ban-ts-comment': 'off', '@typescript-eslint/ban-types': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/consistent-type-imports': ['error', { disallowTypeAnnotations: false }], 'simple-import-sort/imports': 'error', 'simple-import-sort/exports': 'error', }, }, ], } ================================================ FILE: .github/CODEOWNERS ================================================ # LICENSE LICENSE.md @philipisik ================================================ FILE: .github/DISCUSSION_TEMPLATE/community-extensions.yml ================================================ title: 'Community Extension: ' body: - type: markdown attributes: value: | Hey! Thanks for your time and effort to create a new community extension! Please make sure to fill out the form below. - type: textarea id: description attributes: label: Description description: Please describe how your extension works and what it does. placeholder: 'My extension does …' validations: required: true - type: textarea id: installation attributes: label: Installation description: Please describe how users can install your extension. placeholder: 'npm install …' validations: required: true - type: textarea id: usage attributes: label: Usage description: Please describe how users can use your extension in their editor. placeholder: 'To use my extension you have to …' validations: required: true - type: dropdown id: type attributes: label: Type description: Please select the type of this extension. options: - 'Node' - 'Mark' - 'Prosemirror plugin' - 'Package or Kit' - 'Other' validations: required: true - type: textarea id: other attributes: label: Other description: Feel free to add any other information about your extension. placeholder: 'I hope you like …' validations: required: false ================================================ FILE: .github/DISCUSSION_TEMPLATE/feature-requests.yml ================================================ title: 'Feature Request: ' labels: - 'Type: Feature Request' body: - type: markdown attributes: value: | Thanks for your time to create a new feature request! Please make sure to fill out the form below. - type: textarea id: description attributes: label: Description description: Please describe the feature you would like to see in Tiptap. placeholder: 'I wish there was an extension for …' validations: required: true - type: textarea id: use-case attributes: label: Use Case description: Please describe the use case for this feature. placeholder: 'I want to use this feature for …' validations: required: true - type: dropdown id: type attributes: label: Type description: Please select the type of this feature. options: - 'New extension' - 'New feature' - 'New Tiptap API' - 'Other' validations: required: true ================================================ FILE: .github/DISCUSSION_TEMPLATE/showcase.yml ================================================ title: 'Community Extension: ' body: - type: markdown attributes: value: | Hey! Thanks for using Tiptap in your project. We hope you had a great experience. Please take a moment to share your project with us. We would love to see what you built with Tiptap. - type: textarea id: description attributes: label: Description description: Please describe what your project is about placeholder: 'My project is about …' validations: required: true - type: input id: url attributes: label: URL description: If possible share the URL of your project. placeholder: 'https://example.com' validations: required: false - type: textarea id: about attributes: label: About description: Feel free to talk about how you used Tiptap in your project, what you liked about it, what you didn't like about it, and what you would like to see in the future. placeholder: 'If used Tiptap to …' validations: required: true - type: dropdown id: type attributes: label: Type description: Please select the type of your project. options: - 'Chat Application' - 'Commenting Application' - 'Content Management System' - 'Document Editor' - 'Document Editor with Collaboration' - 'Other' validations: required: true - type: textarea id: other attributes: label: Other description: Feel free to add any other information about your project. placeholder: 'I hope you like …' validations: required: false ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.yml ================================================ name: Bug Report description: Found a bug in the editor core or one of the extensions? Report it here to help us improve. labels: ["Open Source", "Needs Triage"] type: "Bug" body: - type: markdown attributes: value: '### Please provide details to help us diagnose the bug.' - type: input id: packages attributes: label: Affected Packages description: List the packages you were using when the bug occurred. placeholder: core, extension-mention, react validations: required: true - type: input id: version attributes: label: Version(s) description: Specify the version(s) of the affected packages. placeholder: 2.0.0 validations: required: true - type: textarea id: problem attributes: label: Bug Description description: Provide a clear and concise description of what the bug is. placeholder: 'The issue occurs when...' validations: required: true - type: dropdown id: browser attributes: label: Browser Used description: Select the browser where the bug was observed. options: - Chrome - Firefox - Safari - Edge - Other validations: required: true - type: markdown attributes: value: | ### CodeSandbox templates Please use the appropriate template below to provide a code example: * JavaScript: [JS Template](https://codesandbox.io/s/tiptap-js-fv1lyo) * React: [React Template](https://codesandbox.io/s/tiptap-react-qidlsv) * Vue 2: [Vue 2 Template](https://codesandbox.io/s/tiptap-vue-2-25nq3g) * Vue 3: [Vue 3 Template](https://codesandbox.io/p/sandbox/tiptap-vue-3-ci7q9h) - type: input id: sandbox attributes: label: Code Example URL description: 'Link a CodeSandbox, Stackblitz, GitHub repository, or similar to help us reproduce the issue faster.' placeholder: https://codesandbox.io/s/example validations: required: false - type: textarea id: expectation attributes: label: Expected Behavior description: Describe what you expected to happen. validations: required: true - type: textarea id: context attributes: label: Additional Context (Optional) description: 'Add any other context about the problem here, such as screenshots or videos.' - type: checkboxes attributes: label: Dependency Updates description: 'Have you updated your dependencies? This can often resolve issues.' options: - label: Yes, I've updated all my dependencies. required: true - type: markdown attributes: value: 'Thank you for helping us improve our open-source projects by reporting this issue!' ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report_pro.yml ================================================ name: Bug Report (Tiptap Pro) description: If you've encountered a bug with Tiptap Pro features, please report it here. labels: ["Pro", "Needs Triage"] type: "Bug" body: - type: markdown attributes: value: '### Please ensure this issue is for Tiptap Pro features only. Provide as much detail as possible to help us identify the issue quickly.' - type: input id: packages attributes: label: Affected Packages description: List all Tiptap Pro packages where you experienced the bug. placeholder: core, extension-mention, react validations: required: true - type: input id: version attributes: label: Version(s) description: Specify the version(s) of the affected packages. placeholder: 2.0.0 validations: required: true - type: textarea id: problem attributes: label: Description of the Bug description: Provide a clear and concise description of what the bug is. placeholder: 'The issue occurs when...' validations: required: true - type: dropdown id: browser attributes: label: Browser Used description: Select the browser where the bug was observed. options: - Chrome - Firefox - Safari - Edge - Other validations: required: true - type: markdown attributes: value: '### Helpful Code Examples' - type: markdown attributes: value: 'Providing a CodeSandbox link is crucial for diagnosing issues faster. Below are templates you might use:' - type: markdown attributes: value: | - JavaScript: [Template](https://codesandbox.io/s/tiptap-js-fv1lyo) - React: [Template](https://codesandbox.io/s/tiptap-react-qidlsv) - Vue 2: [Template](https://codesandbox.io/s/tiptap-vue-2-25nq3g) - Vue 3: [Template](https://codesandbox.io/p/sandbox/tiptap-vue-3-ci7q9h) - type: input id: sandbox attributes: label: Code Example (Preferred) description: 'Provide a link to a CodeSandbox or other code repository to help us reproduce the issue.' placeholder: https://codesandbox.io/s/example validations: required: false - type: textarea id: expectation attributes: label: Expected Behavior description: Describe what you expected to happen. validations: required: true - type: textarea id: context attributes: label: Additional Context (Optional) description: 'Add any other context about the problem here, like screenshots or videos.' - type: checkboxes attributes: label: Dependency Updates description: 'Have you updated your dependencies? It can often resolve issues.' options: - label: Yes, I've updated all my dependencies. required: true - type: markdown attributes: value: 'Thank you for contributing to Tiptap Pro by reporting this issue!' ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: New Feature Request url: https://github.com/ueberdosis/tiptap/discussions/new?category=feature-requests about: Interested in proposing a new feature for Tiptap? Submit your feature request here. - name: Help & Support url: https://github.com/ueberdosis/tiptap/discussions/new?category=questions-help about: Require assistance or have inquiries about using Tiptap? Ask your questions here. - name: Join our Discord url: https://discord.gg/WtJ49jGshW about: Interested in engaging with the Tiptap community? Join our Discord server. - name: Present your project url: https://github.com/ueberdosis/tiptap/discussions/new?category=showcase about: Developed something impressive using Tiptap? Share your project with the community here. - name: Present your Tiptap extensions url: https://github.com/ueberdosis/tiptap/discussions/new?category=community-extensions about: Created a Tiptap extension? Showcase your work to the community here. ================================================ FILE: .github/ISSUE_TEMPLATE/documentation.yml ================================================ name: Documentation feedback description: Share what we need to explain better. title: '[Documentation]: ' labels: - 'Type: Documentation' - 'Category: Open Source' - 'Status: New' body: - type: input id: url attributes: label: What’s the URL to the page you’re sending feedback for? placeholder: https://tiptap.dev/example validations: required: true - type: textarea id: part-of-the-documentation attributes: label: What part of the documentation needs improvement? placeholder: 'I’ve read the following page of the documentation …' validations: required: true - type: textarea id: good-parts attributes: label: What is helpful about that part? placeholder: 'I think this part is really good: …' validations: required: true - type: textarea id: bad-parts attributes: label: What is hard to understand, missing or misleading? placeholder: 'But you really need to improve …' validations: required: true - type: textarea id: context attributes: label: Anything to add? (optional) description: 'Add any other context or screenshots here.' - type: markdown attributes: value: | Thanks for taking the time to send us feedback! ================================================ FILE: .github/dependabot.yml ================================================ # Dependabot creates pull requests to keep your dependencies secure and up-to-date. # Documentation: https://docs.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates version: 2 updates: - package-ecosystem: 'github-actions' directory: '/' open-pull-requests-limit: 10 schedule: interval: 'weekly' day: 'monday' reviewers: - 'bdbch' ================================================ FILE: .github/instructions/PR.instructions.md ================================================ --- applyTo: '**' --- When asked to write a pull request description, use the following template: ``` ## Changes Overview ## Implementation Approach ## Testing Done ## Verification Steps ## Additional Notes ## Checklist - [ ] I have created a [changeset](https://github.com/changesets/changesets) for this PR if necessary. - [ ] My changes do not break the library. - [ ] I have added tests where applicable. - [ ] I have followed the project guidelines. - [ ] I have fixed any lint issues. ## Related Issues ``` When generating the pull request description, ensure it is clear, concise, and follows the provided template. Focus on the key aspects of the changes made, how they were implemented, and how they can be verified. Make it as minimal as possible to convey the necessary information effectively without causing to much noise and making it hard to read. ================================================ FILE: .github/instructions/changeset.instructions.md ================================================ --- applyTo: '**' --- When a user asks for a changeset to be generated, follow the following rules: Create a good changeset file for the changes in the diff. Don't include non-frontfacing changes, as the changeset file will be used for the changelog. Our users don't care about deep logic that they'll not interact with so we only want to generate changelog entries for front-facing/user-facing changes and API changes our users will need to know about. Make sure that the changeset file stays minimal and short but includes important information that may be important for our users to understand what actually changed. ================================================ FILE: .github/instructions/tiptap.instructions.md ================================================ --- applyTo: '**' --- # Tiptap This document explains how to work on the Tiptap monorepo in VS Code. It covers repo layout, local dev, linting and formatting, tests, docs, and release workflow. It is written to be friendly for both humans and AI coding assistants. --- ## What is Tiptap Tiptap is a headless rich text editor toolkit built on ProseMirror. It ships a small Core and many opt-in Extensions so you can compose exactly the editor you need for React, Vue, or vanilla apps. The project is optimized for user experience and developer experience. APIs are predictable, behavior is testable, and everything should be documented with JSDoc and runnable examples so we can generate API docs automatically. Key points for AI assistants: * Treat Tiptap as a collection of focused packages that together form an editor system. * Do not assume a single framework. Many packages are framework agnostic, with separate bindings for React and Vue. * Favor small pure utilities and deterministic code. Side effects should be explicit. --- ## Repository layout ``` . ├─ packages/ # Core and all first-party extensions │ ├─ core/ # Editor core (@tiptap/core) │ ├─ extension-*/ # Individual extensions │ ├─ pm/ # ProseMirror related internals and helpers │ └─ ... # Shared utilities, framework bindings, etc. ├─ demos/ # Vite app for live examples │ ├─ react/ # React demos │ └─ vue/ # Vue demos ├─ tests/ # Cypress e2e tests that run against the demos ├─ .changeset/ # Changesets for versioning and changelogs └─ .github/ # Workflows and docs like this file ``` Notes: * All packages we publish or use live under `packages/*`. * The `demos/` folder contains a Vite app. It automatically discovers and parses React and Vue demos so they appear in the UI without manual wiring. * Cypress tests in `tests/` expect the demos to be available on `http://localhost:3000`. ## NPM scripts Scripts defined at the repo root: * `pnpm dev` - start the demos on port 3000 * `pnpm build` - build all packages via Turborepo * `pnpm lint` - run eslint checks * `pnpm lint:fix` - run prettier + eslint fix * `pnpm test:open` - open Cypress against `tests/` * `pnpm test:run` - run Cypress in headless mode * `pnpm test` - build then run all tests * `pnpm serve` - build and serve the demos on port 3000 * `pnpm publish` - build and publish with Changesets * `pnpm reset` - remove caches, build artifacts, and reinstall deps --- ## Linting & formatting * ESLint config is at **`.eslintrc.js`** in the repo root. * Prettier config is at **`.prettierrc`** (or `prettier.config.json`). * Husky and lint-staged run automatically on commits. Run manually: ```bash pnpm lint pnpm lint:fix ``` --- ## Demos * Demos are a Vite app in `demos/`. * React and Vue examples live in `demos/react` and `demos/vue`. They are automatically parsed into the app. * Start in dev mode: ```bash pnpm dev ``` * Build static output and serve locally: ```bash pnpm serve ``` When adding a demo, keep it small and self-contained, with imports from published package names (`@tiptap/...`). --- ## Testing with Cypress * Cypress lives in `tests/` and drives the demos in a browser. * Tests assume the app is running on `http://localhost:3000`. Workflow: ```bash pnpm dev # terminal A pnpm test:open # terminal B ``` or for headless CI runs: ```bash pnpm test:run ``` --- ## Documentation style We focus heavily on **User Experience** and **Developer Experience**. Every public API must be documented with JSDoc, including: * `@param` and `@returns` annotations * Argument descriptions * At least one runnable example This ensures our automated API docs are complete and examples are usable without extra context. Example: ````ts /** * Toggle bold mark on the current selection. * * Example * ```ts * editor.chain().focus().toggleBold().run() * ``` * * @param editor - The editor instance * @returns true if the command was applied */ export function toggleBold(editor: Editor): boolean { // ... } ```` --- ## Versioning and releases with Changesets * Run `pnpm changeset` to create a new changeset (choose packages + bump type). * Run `pnpm version` to update versions and changelogs. * Maintainers publish with `pnpm publish`. Changelogs must describe **user-facing changes**. Avoid internal noise. --- ## Cleaning and resetting * `pnpm run clean:packages` - remove build artifacts * `pnpm run clean:packs` - remove generated tarballs * `pnpm reset` - full reset of caches, node\_modules, and lockfiles --- ## Principles * Keep packages modular and framework-agnostic where possible. * Breaking changes require a major bump and a clear migration path. * Always add or update demos and tests when introducing a feature. * Code should be deterministic, documented, and tested. --- ## Extra guidance (short additions) To make these instructions easier for automated agents and new contributors, the sections below add a few operational details and guardrails that speed up safe, repeatable changes. ### Environment - Recommended Node version: >=18.x. Use a node version manager (nvm, fnm) or Corepack to pin a runtime. - Recommended package manager: pnpm (use the repo's lockfile). If you see unexpected errors, run `pnpm reset`. ### Where to edit packages Packages live under `packages/*`. Public entry points are typically `packages//src/index.ts` and are referenced by the package's `package.json` (`main`/`module`/`exports`). Prefer editing `src/` files and keep package diffs focused. For framework bindings check `packages/react/` and `packages/vue-2/` or `packages/vue-3/`. ### Demos auto-discovery rules The demos app discovers examples automatically. When adding a demo: - Keep demo files small and self-contained. Import from published package names (for example `@tiptap/extension-foo`). - Name demo files clearly; follow existing naming conventions in `demos/`. ### Validation checklist (run locally before opening a PR) Run the following to validate changes quickly: ```bash pnpm lint pnpm build pnpm test # runs unit and/or cypress where configured pnpm dev # optionally run the demos and open http://localhost:3000 ``` If a single package is failing types, run a targeted build for that package (e.g. `pnpm -w -F @tiptap/core build`), or run `pnpm build` at the repo root. ### PR checklist - All checks pass (lint/build/tests). - Changeset added for user-facing changes (`pnpm changeset`). - Demo added/updated for UI-visible changes. - Short, clear PR description and changelog entry that explains why the change is needed. ### Guidance for automated agents and AI assistants - Make single-purpose, small diffs. Avoid sweeping changes in one PR. - Always run the validation checklist above after edits. - Add or update a demo and tests for user-visible behavior. For deterministic behaviour, favour unit tests over fragile e2e tests where possible. - Add a Changeset for any user-facing change. Do not change public APIs without a major bump; document migration steps in the PR description. ### Troubleshooting notes - If CI fails with dependency or lockfile errors, run `pnpm reset` locally and re-run the build. - For flaky Cypress tests, run the demo locally with `pnpm dev` and reproduce the failing test in `pnpm test:open`. --- These additions are intentionally short so they are easy to follow and scriptable by tools and agents. If you'd like, I can apply a slightly different tone or expand any section into more detail (for example, exact node/pnpm version pinning or demo naming patterns). ================================================ FILE: .github/pull_request_template.md ================================================ ## Changes Overview ## Implementation Approach ## Testing Done ## Verification Steps ## Additional Notes ## Checklist - [ ] I have created a [changeset](https://github.com/changesets/changesets) for this PR if necessary. - [ ] My changes do not break the library. - [ ] I have added tests where applicable. - [ ] I have followed the project guidelines. - [ ] I have fixed any lint issues. ## Related Issues ================================================ FILE: .github/workflows/build.yml ================================================ name: Verify env: NODE_VERSION: 24 PNPM_VERSION: 9.15.4 PNPM_STORE_DIR: .pnpm-store concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true on: push: branches: - main - next - release/* pull_request: branches: - main - next - release/* jobs: install-node-dependencies: name: Install node dependencies runs-on: ubuntu-latest timeout-minutes: 15 steps: - uses: actions/checkout@v6 - name: Install pnpm uses: pnpm/action-setup@v4 with: version: ${{ env.PNPM_VERSION }} - name: Use Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: pnpm - name: Configure pnpm store run: pnpm config set store-dir ${{ github.workspace }}/${{ env.PNPM_STORE_DIR }} - name: Install dependencies run: pnpm install --frozen-lockfile --strict-peer-dependencies - name: Install Cypress binary run: pnpm exec cypress install - name: Pack dependency artifacts run: | tar -czf /tmp/pnpm-store.tar.gz ${{ env.PNPM_STORE_DIR }} tar -czf /tmp/cypress-cache.tar.gz -C "$HOME/.cache" Cypress - name: Upload dependency artifacts uses: actions/upload-artifact@v4.6.2 with: name: node-dependencies path: | /tmp/pnpm-store.tar.gz /tmp/cypress-cache.tar.gz retention-days: 1 check-linting-formatting: name: Check linting & formatting runs-on: ubuntu-latest needs: build-packages timeout-minutes: 15 steps: - uses: actions/checkout@v6 - name: Install pnpm uses: pnpm/action-setup@v4 with: version: ${{ env.PNPM_VERSION }} - name: Use Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - name: Configure pnpm store run: pnpm config set store-dir ${{ github.workspace }}/${{ env.PNPM_STORE_DIR }} - name: Download dependency artifacts uses: actions/download-artifact@v4.3.0 with: name: node-dependencies path: /tmp/node-dependencies - name: Restore pnpm store run: tar -xzf /tmp/node-dependencies/pnpm-store.tar.gz - name: Restore dependencies run: pnpm install --offline --frozen-lockfile --strict-peer-dependencies - name: Run linting and formatting checks run: pnpm run lint build-packages: name: Build packages runs-on: ubuntu-latest needs: install-node-dependencies timeout-minutes: 20 steps: - uses: actions/checkout@v6 - name: Install pnpm uses: pnpm/action-setup@v4 with: version: ${{ env.PNPM_VERSION }} - name: Use Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - name: Configure pnpm store run: pnpm config set store-dir ${{ github.workspace }}/${{ env.PNPM_STORE_DIR }} - name: Download dependency artifacts uses: actions/download-artifact@v4.3.0 with: name: node-dependencies path: /tmp/node-dependencies - name: Restore pnpm store run: tar -xzf /tmp/node-dependencies/pnpm-store.tar.gz - name: Restore dependencies run: pnpm install --offline --frozen-lockfile --strict-peer-dependencies - name: Build packages run: pnpm run build && pnpm run build:demos - name: Pack build artifacts run: tar -czf /tmp/build-output.tar.gz packages/*/dist packages-deprecated/*/dist demos/dist - name: Upload build artifacts uses: actions/upload-artifact@v4.6.2 with: name: build-output path: /tmp/build-output.tar.gz retention-days: 1 run-unit-tests: name: Run unit tests runs-on: ubuntu-latest needs: build-packages timeout-minutes: 20 steps: - uses: actions/checkout@v6 - name: Install pnpm uses: pnpm/action-setup@v4 with: version: ${{ env.PNPM_VERSION }} - name: Use Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - name: Configure pnpm store run: pnpm config set store-dir ${{ github.workspace }}/${{ env.PNPM_STORE_DIR }} - name: Download dependency artifacts uses: actions/download-artifact@v4.3.0 with: name: node-dependencies path: /tmp/node-dependencies - name: Restore pnpm store run: tar -xzf /tmp/node-dependencies/pnpm-store.tar.gz - name: Restore dependencies run: pnpm install --offline --frozen-lockfile --strict-peer-dependencies - name: Download build artifacts uses: actions/download-artifact@v4.3.0 with: name: build-output path: /tmp/build-output - name: Restore build output run: tar -xzf /tmp/build-output/build-output.tar.gz - name: Run unit tests run: pnpm run test:unit run-e2e-tests: name: Run e2e tests runs-on: ubuntu-latest needs: build-packages timeout-minutes: 45 strategy: fail-fast: false matrix: test-spec: - { id: integration, name: Integration, spec: './tests/cypress/integration/**/*.spec.{js,ts}' } - { id: demos-commands, name: 'Demos/Commands', spec: './demos/src/Commands/**/*.spec.{js,ts}' } - { id: demos-examples, name: 'Demos/Examples', spec: './demos/src/Examples/**/*.spec.{js,ts}' } - { id: demos-experiments, name: 'Demos/Experiments', spec: './demos/src/Experiments/**/*.spec.{js,ts}' } - { id: demos-extensions, name: 'Demos/Extensions', spec: './demos/src/Extensions/**/*.spec.{js,ts}' } - { id: demos-guidecontent, name: 'Demos/GuideContent', spec: './demos/src/GuideContent/**/*.spec.{js,ts}' } - { id: demos-guidegettingstarted, name: 'Demos/GuideGettingStarted', spec: './demos/src/GuideGettingStarted/**/*.spec.{js,ts}' } - { id: demos-marks, name: 'Demos/Marks', spec: './demos/src/Marks/**/*.spec.{js,ts}' } - { id: demos-nodes, name: 'Demos/Nodes', spec: './demos/src/Nodes/**/*.spec.{js,ts}' } steps: - uses: actions/checkout@v6 - name: Install pnpm uses: pnpm/action-setup@v4 with: version: ${{ env.PNPM_VERSION }} - name: Use Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - name: Configure pnpm store run: pnpm config set store-dir ${{ github.workspace }}/${{ env.PNPM_STORE_DIR }} - name: Download dependency artifacts uses: actions/download-artifact@v4.3.0 with: name: node-dependencies path: /tmp/node-dependencies - name: Restore pnpm store run: tar -xzf /tmp/node-dependencies/pnpm-store.tar.gz - name: Restore dependencies run: pnpm install --offline --frozen-lockfile --strict-peer-dependencies - name: Restore Cypress cache run: mkdir -p "$HOME/.cache" && tar -xzf /tmp/node-dependencies/cypress-cache.tar.gz -C "$HOME/.cache" - name: Download build artifacts uses: actions/download-artifact@v4.3.0 with: name: build-output path: /tmp/build-output - name: Restore build output run: tar -xzf /tmp/build-output/build-output.tar.gz - name: Test ${{ matrix.test-spec.name }} uses: cypress-io/github-action@v6.10.2 with: install: false start: pnpm exec http-server ./demos/dist -s -p 3000 wait-on: http://localhost:3000 spec: ${{ matrix.test-spec.spec }} project: ./tests browser: chrome quiet: true - name: Export screenshots (on failure only) uses: actions/upload-artifact@v4.6.2 if: failure() with: name: cypress-screenshots-${{ matrix.test-spec.id }} path: tests/cypress/screenshots retention-days: 7 - name: Export screen recordings (on failure only) uses: actions/upload-artifact@v4.6.2 if: failure() with: name: cypress-videos-${{ matrix.test-spec.id }} path: tests/cypress/videos retention-days: 7 ================================================ FILE: .github/workflows/notify-discord.yml ================================================ name: Notify Discord on Release on: release: types: [published] jobs: discord_notify: name: Send release to Discord runs-on: ubuntu-latest permissions: contents: read steps: - name: Checkout uses: actions/checkout@v6 - name: Post release to Discord (tsickert/discord-webhook) uses: tsickert/discord-webhook@v7.0.0 with: webhook-url: ${{ secrets.DISCORD_RELEASES_STABLE_WEBHOOK }} embed-title: ${{ github.event.release.name || github.event.release.tag_name }} embed-description: ${{ github.event.release.body }} embed-url: ${{ github.event.release.html_url }} wait: true ================================================ FILE: .github/workflows/publish.yml ================================================ name: Publish env: NODE_VERSION: 24 PNPM_VERSION: 9.15.4 on: push: branches: - main - next - 'release/*' permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref_name }} cancel-in-progress: true jobs: build: name: Build runs-on: ubuntu-latest timeout-minutes: 30 steps: - name: Checkout repo uses: actions/checkout@v6 - name: Install pnpm uses: pnpm/action-setup@v4 with: version: ${{ env.PNPM_VERSION }} - name: Use Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: pnpm - name: Install dependencies run: pnpm install --frozen-lockfile --strict-peer-dependencies - name: Run build run: pnpm run build && pnpm run build:demos - name: Archive package dist artifacts run: tar -cf package-dist-artifacts.tar packages/*/dist packages-deprecated/*/dist - name: Upload package dist artifacts uses: actions/upload-artifact@v4 with: name: package-dist-artifacts if-no-files-found: error path: package-dist-artifacts.tar release: name: Bump Versions OR Release to Registry runs-on: ubuntu-latest timeout-minutes: 30 needs: build permissions: id-token: write contents: write pull-requests: write outputs: dist_tag: ${{ steps.resolve_dist_tag.outputs.dist_tag }} release_kind: ${{ steps.resolve_dist_tag.outputs.release_kind }} published: ${{ steps.changesets.outputs.published }} steps: - name: Checkout repo uses: actions/checkout@v6 - name: Install pnpm uses: pnpm/action-setup@v4 with: version: ${{ env.PNPM_VERSION }} - name: Use Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: pnpm - name: Update npm for trusted publishing run: npm install -g npm@11.6.2 - name: Install dependencies run: pnpm install --frozen-lockfile --strict-peer-dependencies - name: Download package dist artifacts uses: actions/download-artifact@v4 with: name: package-dist-artifacts path: . - name: Restore package dist artifacts run: tar -xf package-dist-artifacts.tar - name: Verify package dist artifacts run: bash ./scripts/check-package-dists.sh - name: Resolve npm dist-tag id: resolve_dist_tag run: | branch="${{ github.ref_name }}" if [ "$branch" = 'main' ]; then echo 'NPM_DIST_TAG=latest' >> "$GITHUB_ENV" echo 'dist_tag=latest' >> "$GITHUB_OUTPUT" echo 'release_kind=stable' >> "$GITHUB_OUTPUT" elif [ "$branch" = 'next' ]; then echo 'NPM_DIST_TAG=next' >> "$GITHUB_ENV" echo 'dist_tag=next' >> "$GITHUB_OUTPUT" echo 'release_kind=prerelease' >> "$GITHUB_OUTPUT" else release_tag="${branch#release/}" echo "NPM_DIST_TAG=${release_tag}-latest" >> "$GITHUB_ENV" echo "dist_tag=${release_tag}-latest" >> "$GITHUB_OUTPUT" echo 'release_kind=prerelease' >> "$GITHUB_OUTPUT" fi - name: Run changesets release flow id: changesets uses: changesets/action@v1 with: createGithubReleases: false version: pnpm run version publish: pnpm changeset publish --tag $NPM_DIST_TAG title: ${{ github.ref_name == 'main' && 'Publish a new stable version' || 'Publish a new release version' }} commit: '${{ github.ref_name == ''main'' && ''chore(release): publish a new stable version'' || ''chore(release): publish a new release version'' }}' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_CONFIG_PROVENANCE: true NPM_CONFIG_ACCESS: public notify-slack: name: Send notification to Slack runs-on: ubuntu-latest needs: release if: needs.release.outputs.published == 'true' timeout-minutes: 5 permissions: {} steps: - name: Send Slack notification uses: slackapi/slack-github-action@v2.1.1 with: webhook: ${{ secrets.SLACK_WEBHOOK_URL }} webhook-type: incoming-webhook payload: | { "message": "[Tiptap Editor ${{ needs.release.outputs.release_kind == 'stable' && 'Release' || 'Pre-release' }}]: Published packages from branch ${{ github.ref_name }} with npm tag ${{ needs.release.outputs.dist_tag }}." } env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} notify-slack-failure: name: Send failure notification to Slack runs-on: ubuntu-latest needs: release if: always() && needs.release.result == 'failure' timeout-minutes: 5 permissions: {} steps: - name: Send Slack failure notification uses: slackapi/slack-github-action@v2.1.1 with: webhook: ${{ secrets.SLACK_WEBHOOK_URL }} webhook-type: incoming-webhook payload: | { "message": "[Tiptap Editor Release]: There was an issue publishing packages from branch ${{ github.ref_name }}. Logs: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" } env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} ================================================ FILE: .gitignore ================================================ *.log .cache .DS_Store .temp node_modules dist .env .env.* .eslintcache .instructions .agent docs # Log files npm-debug.log* yarn-debug.log* yarn-error.log* # parcel-bundler cache (https://parceljs.org/) .cache # Turbo cache .turbo .rpt2_cache .rts2_cache .rts2_cache_cjs .rts2_cache_es .rts2_cache_umd tests/cypress/videos /tests/cypress/screenshots # Ignore intellij project files .idea # packaged files packages/**/*.tgz packages-deprecated/**/*.tgz demos/*.tgz # demo directories demos/src/Dev/** !demos/src/Dev/.gitkeep # instructions .github/instructions/* !.github/instructions/tiptap.instructions.md !.github/instructions/changeset.instructions.md !.github/instructions/PR.instructions.md ================================================ FILE: .husky/pre-commit ================================================ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" pnpm run lint:staged ================================================ FILE: .npmrc ================================================ link-workspace-packages=deep prefer-workspace-packages=true ================================================ FILE: .prettierignore ================================================ **/.git **/.svn **/.hg **/node_modules .turbo .changeset .github/**/* demos/dist/**/* demos/node_modules/**/* pnpm-lock.yaml ================================================ FILE: .prettierrc ================================================ { "trailingComma": "all", "tabWidth": 2, "semi": false, "singleQuote": true, "arrowParens": "avoid", "printWidth": 120 } ================================================ FILE: .vscode/launch.json ================================================ { "configurations": [ { "name": "Launch Tiptap demos in Google Chrome", "request": "launch", "type": "chrome", "url": "http://localhost:3000", "webRoot": "${workspaceFolder}" } ] } ================================================ FILE: .vscode/settings.json ================================================ { "typescript.tsdk": "node_modules/typescript/lib", "conventionalCommits.scopes": [ "ci", "docs", "maintainment", "tests", "core", "extension/blockquote", "extension/bold", "extension/bubble-menu", "extension/bullet-list", "extension/character-count", "extension/code", "extension/code-block", "extension/code-block-lowlight", "extension/collaboration", "extension/collaboration-caret", "extension/color", "extension/document", "extension/dropcursor", "extension/floating-menu", "extension/focus", "extension/font-family", "extension/font-size", "extension/gapcursor", "extension/hard-break", "extension/heading", "extension/highlight", "extension/history", "extension/horizontal-rule", "extension/image", "extension/italic", "extension/link", "extension/list-item", "extension/mention", "extension/ordered-list", "extension/paragraph", "extension/placeholder", "extension/strike", "extension/subscript", "extension/table", "extension/table-cell", "extension/table-header", "extension/table-row", "extension/task-item", "extension/task-list", "extension/text", "extension/text-align", "extension/text-style", "extension/typography", "extension/underline", "extension/youtube", "html", "react", "starter-kit", "suggestion", "vue-2", "vue-3" ], "editor.defaultFormatter": "esbenp.prettier-vscode", "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[typescriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[javascriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } } ================================================ FILE: CHANGELOG.md ================================================ # Releases ## v3.20.4 ### @tiptap/core #### Patch Changes - Fixed Tiptap not publishing with build dist artifacts ## v3.20.3 ### @tiptap/react #### Patch Changes - Forward BubbleMenu and FloatingMenu HTML props to the actual menu element so attributes like `className`, `style`, `data-*`, and event handlers bind to the positioned menu container. - Generate a stable per-instance menu plugin key automatically when `pluginKey` is omitted, so multiple BubbleMenu or FloatingMenu components can be mounted without colliding. ### @tiptap/vue-2 #### Patch Changes - Forward BubbleMenu and FloatingMenu HTML props to the actual menu element so attributes like `className`, `style`, `data-*`, and event handlers bind to the positioned menu container. - Generate a stable per-instance menu plugin key automatically when `pluginKey` is omitted, so multiple BubbleMenu or FloatingMenu components can be mounted without colliding. ### @tiptap/core #### Patch Changes - Fixed `isNodeEmpty()` so multi-line text with non-whitespace content is no longer treated as empty when `ignoreWhitespace` is enabled. - Fixed overlapping bold and italic markdown serialization and round-tripping. ### @tiptap/extension-unique-id #### Patch Changes - Fixed a bug where empty paragraphs accumulated in the document on every page reload when using the UniqueID extension with the Collaboration extension and an externally created Yjs provider. ### @tiptap/extension-youtube #### Patch Changes - Export missing `getEmbedUrlFromYoutubeUrl` and `isValidYoutubeUrl` embed URL utility functions ### @tiptap/vue-3 #### Patch Changes - Generate a stable per-instance menu plugin key automatically when `pluginKey` is omitted, so multiple BubbleMenu or FloatingMenu components can be mounted without colliding. ### @tiptap/extension-placeholder #### Patch Changes - Skip placeholder decorations on non-textblock nodes when `includeChildren` is enabled to prevent duplicate placeholders on wrapper nodes like lists. ### @tiptap/extension-bold #### Patch Changes - Fixed overlapping bold and italic markdown serialization and round-tripping. ### @tiptap/extension-italic #### Patch Changes - Fixed overlapping bold and italic markdown serialization and round-tripping. ### @tiptap/markdown #### Patch Changes - Fixed overlapping bold and italic markdown serialization and round-tripping. ## v3.20.2 ### @tiptap/core #### Patch Changes - Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and ` ` markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON. ### @tiptap/extension-blockquote #### Patch Changes - Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and ` ` markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON. ### @tiptap/extension-list #### Patch Changes - Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and ` ` markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON. ### @tiptap/extension-paragraph #### Patch Changes - Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and ` ` markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON. ### @tiptap/markdown #### Patch Changes - Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and ` ` markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON. ## v3.20.1 ### @tiptap/extension-code-block #### Patch Changes - Fix tilde-fenced code blocks (`~~~`) being silently dropped when parsing markdown ### @tiptap/extension-drag-handle #### Patch Changes - Fix Drag event listener is removed when a plugin is registered after the DragHandle plugin. ### @tiptap/extension-unique-id #### Patch Changes - Add support for `types: 'all'` in `UniqueID` to target every node type except `doc` and `text`. ### @tiptap/core #### Patch Changes - Fix inline `style` parsing in `mergeAttributes` for values containing `:` or `;` (e.g. `url(https://...)` or `url(data:...;charset=...,)`) and skip incomplete declarations ## v3.20.0 ### @tiptap/core #### Minor Changes - Add `transformPastedHTML` extension API that allows extensions to transform pasted HTML content before it's parsed into the editor, enabling cleanup of styles, removal of dangerous content, and modification of pasted HTML through a chainable transform system. #### Patch Changes - Fix checking if mark is active and toggling off marks when part of the selection does not allow the mark (e.g. a code block) - Global attributes now support shorthand string values for `types`: use `'*'` to apply to all nodes and marks, `'nodes'` for all nodes (excluding text), or `'marks'` for all marks. - Fixed a typo in the documentation of `editor.view` ### @tiptap/extension-drag-handle #### Patch Changes - Fix drag handle not appearing for atom/leaf nodes like images in both nested and non-nested modes - Add table structure rules to prevent drag handle on table rows, cells, and headers, and fix ghost table rows when dragging tables - Fix drag position resolving outside the document when dragging an empty text node at the end of the document ### @tiptap/markdown #### Patch Changes - Fixed getMarkdown() returning ` ` instead of empty string when editor is empty ### @tiptap/extension-bubble-menu #### Patch Changes - Fix `BubbleMenu`/`FloatingMenu` to use `pluginKey` as the transaction meta key so that multiple instances can be updated independently without affecting each other ### @tiptap/extension-floating-menu #### Patch Changes - Fix `BubbleMenu`/`FloatingMenu` to use `pluginKey` as the transaction meta key so that multiple instances can be updated independently without affecting each other ### @tiptap/react #### Minor Changes - Moved BubbleMenu and FloatingMenu to separate `@tiptap/react/menus` entrypoint to keep floating-ui optional - Simplified Tiptap component API with guaranteed non-null editor instance from useTiptap hook #### Patch Changes - Fix `BubbleMenu`/`FloatingMenu` to use `pluginKey` as the transaction meta key so that multiple instances can be updated independently without affecting each other ### @tiptap/extension-code-block-lowlight #### Patch Changes - Fixed a runtime error when initializing `CodeBlockLowlight` by switching the `CodeBlock` import to a named export. This prevents `extend is not a function` errors caused by ESM/CJS interop issues. ### @tiptap/extension-invisible-characters #### Patch Changes - Added missing storage typings ## v3.19.0 ### @tiptap/extension-link #### Patch Changes - Add `title` attribute to Link extension. The title can now be set via `setLink` and `toggleLink` commands and is rendered as an HTML title attribute. - Add title attribute support for markdown rendering. Links with titles are now serialized to markdown format `[text](url "title")`. ### @tiptap/react #### Minor Changes - Moved BubbleMenu and FloatingMenu to separate `@tiptap/react/menus` entrypoint to keep floating-ui optional - Simplified Tiptap component API with guaranteed non-null editor instance from useTiptap hook ## v3.18.0 ### @tiptap/extension-bubble-menu #### Patch Changes - Fix BubbleMenu and FloatingMenu props not updating after initialization ### @tiptap/extension-floating-menu #### Patch Changes - Fix BubbleMenu and FloatingMenu props not updating after initialization ### @tiptap/react #### Minor Changes - Introduce a new, optional React integration that provides a declarative `` component for setting up editors in React apps. Summary - Add a new, ergonomic way to initialize and use Tiptap editors in React via `` components. This is an additive change and does not remove or change existing APIs. Why this change - Improves ergonomics for React users by offering a component-first API that pairs well with React patterns (hooks, JSX composition and props-driven configuration). Migration and usage - The old programmatic setup remains supported for this major version — nothing breaks. We encourage consumers to try the new `` component and migrate when convenient. Example ```tsx import { Tiptap, useEditor } from '@tiptap/react' function MyEditor() { const editor = useEditor({ extensions: [StarterKit], content: '

Hello from Tiptap

' }) return ( My Bubble Menu My Floating Menu {/* MenuBar can use the new `useTiptap` hook to read the editor instance from context */} ) } ``` Deprecation plan - The old imperative setup will remain fully backward-compatible for this major release. We plan to deprecate (and remove) the legacy setup in the next major version — a deprecation notice and migration guide will be published ahead of that change. #### Patch Changes - Fix BubbleMenu and FloatingMenu props not updating after initialization - Fixed extension storage not updating in React and Vue node views ### @tiptap/vue-3 #### Patch Changes - Fixed extension storage not updating in React and Vue node views ### @tiptap/markdown #### Patch Changes - Upgrade marked.js from v15.0.12 to v17.0.1. Note that `**)**` requires whitespace when adjacent to alphanumeric text per CommonMark specification. ### @tiptap/extensions #### Patch Changes - Added a new `dataAttribute` to the extension option to control which attribute name will be used for the placeholder label. ## v3.17.1 ### @tiptap/extension-paragraph #### Patch Changes - Fixed markdown serialization doubling newlines and parsing collapsing multiple blank lines ### @tiptap/markdown #### Patch Changes - Fixed markdown serialization doubling newlines and parsing collapsing multiple blank lines - Fixed markdown HTML parsing when window object is unavailable in server-side environments - Fixed ordered list numbering when list has a non-default start value ### @tiptap/vue-3 #### Patch Changes - Fixed IME input (Chinese, Japanese, Korean) in Vue 3 mark views by preventing DOM element destruction during composition events ### @tiptap/extension-collaboration-caret #### Patch Changes - Fixed CollaborationCaret crash with "Cannot read properties of undefined (reading 'doc')" error by updating to @tiptap/y-tiptap@3.0.2, which includes a guard against undefined state during editor initialization. This issue affected editors initialized with HTML content, particularly when using tables. ### @tiptap/extension-collaboration #### Patch Changes - Fixed CollaborationCaret crash with "Cannot read properties of undefined (reading 'doc')" error by updating to @tiptap/y-tiptap@3.0.2, which includes a guard against undefined state during editor initialization. This issue affected editors initialized with HTML content, particularly when using tables. ### @tiptap/extension-drag-handle #### Patch Changes - Fixed CollaborationCaret crash with "Cannot read properties of undefined (reading 'doc')" error by updating to @tiptap/y-tiptap@3.0.2, which includes a guard against undefined state during editor initialization. This issue affected editors initialized with HTML content, particularly when using tables. ### @tiptap/html #### Patch Changes - Fixed server-side HTML parsing crash when content contains link, script, or style tags with resource references. - Fixed server exports failing in Node.js test environments with jsdom/happy-dom ### @tiptap/extension-bubble-menu #### Patch Changes - Fixed bubble and floating menus to properly handle hide middleware data, hiding menus when reference element is scrolled out of view ### @tiptap/extension-floating-menu #### Patch Changes - Fixed bubble and floating menus to properly handle hide middleware data, hiding menus when reference element is scrolled out of view ### @tiptap/core #### Patch Changes - Fixed `$nodes()` method to correctly return inline nodes (like text, mention, etc.) by fixing the `children` getter in `NodePos` class - Fixed ResizableNodeView contentDOM getter to return null instead of undefined for proper TypeScript compatibility ### @tiptap/extension-list #### Patch Changes - Fixed ordered list numbering when list has a non-default start value ## v3.17.0 ### @tiptap/extension-bubble-menu #### Patch Changes - Added a safeguard to avoid `TypeError: Cannot read properties of null (reading 'domFromPos')` being thrown when the editor was being destroyed ### @tiptap/extension-drag-handle #### Minor Changes - Added nested drag handle support, allowing drag handles to appear for nested content like list items and blockquotes with configurable edge detection and custom rules. #### Patch Changes - Fixed Firefox bug where the text caret becomes invisible after drag and drop. ### @tiptap/core #### Patch Changes - Added `isFirefox` utility to core ### @tiptap/extension-drag-handle-react #### Minor Changes - Added nested drag handle support, allowing drag handles to appear for nested content like list items and blockquotes with configurable edge detection and custom rules. ### @tiptap/extension-drag-handle-vue-2 #### Minor Changes - Added nested drag handle support, allowing drag handles to appear for nested content like list items and blockquotes with configurable edge detection and custom rules. ### @tiptap/extension-drag-handle-vue-3 #### Minor Changes - Added nested drag handle support, allowing drag handles to appear for nested content like list items and blockquotes with configurable edge detection and custom rules. ## v3.16.0 ### @tiptap/extension-audio #### Minor Changes - Add a native audio extension with demos and tests. ### @tiptap/markdown #### Patch Changes - Fix incorrect Markdown output when underline is mixed with bold or italic and their ranges do not fully overlap. - Fix overlapping underline/bold/italic serialization and add tests ### @tiptap/extension-link #### Patch Changes - Fixed an issue where clicking on non-link elements (like images) required multiple clicks to select them. The link click handler now properly returns early when the clicked element is not a link, allowing other node handlers to process the click event. ### @tiptap/extension-floating-menu #### Minor Changes - Add updateEvent support for FloatingMenu to allow programmatic position updates via `setMeta('floatingMenu', 'updatePosition')` ### @tiptap/react #### Minor Changes - Add updateEvent support for FloatingMenu to allow programmatic position updates via `setMeta('floatingMenu', 'updatePosition')` ### @tiptap/vue-2 #### Minor Changes - Add updateEvent support for FloatingMenu to allow programmatic position updates via `setMeta('floatingMenu', 'updatePosition')` ### @tiptap/vue-3 #### Minor Changes - Add updateEvent support for FloatingMenu to allow programmatic position updates via `setMeta('floatingMenu', 'updatePosition')` ### @tiptap/extension-unique-id #### Patch Changes - Improved `findDuplicates` helper performance from O(n²) to O(n) by using Set-based lookups instead of Array.indexOf ## v3.15.3 ### @tiptap/core #### Patch Changes - Fix Safari scrolling to top when using editor.chain().focus() commands ## v3.15.2 ### @tiptap/extension-link #### Patch Changes - Prevent auto-linking of bare hostnames (e.g., `localhost`) and IP addresses without a protocol prefix ### @tiptap/extension-list #### Patch Changes - Fix lost HTML attributes in TaskItem node view updates ### @tiptap/vue-2 #### Patch Changes - Fix Vue prop validation warning for `appendTo` prop in BubbleMenu and FloatingMenu ### @tiptap/vue-3 #### Patch Changes - Fix Vue prop validation warning for `appendTo` prop in BubbleMenu and FloatingMenu ### @tiptap/extension-youtube #### Patch Changes - Fix YouTube Shorts embed URLs using incorrect query parameter separator ### @tiptap/react #### Patch Changes - Fix race conditions in ReactRenderer causing destroyed renderers to be re-added in Strict Mode ## v3.15.1 ### @tiptap/suggestion #### Patch Changes - Add a new `shouldShow` callback to the `Suggestion` utility. This allows developers to filter when suggestions are displayed, which is especially useful for collaborative environments to prevent suggestions from popping open for remote users. ## v3.15.0 ### @tiptap/core #### Minor Changes - Add a new `dispatchTransaction` hook to extensions, allowing developers to intercept, modify, or block transactions before they are applied to the editor state. ### @tiptap/extension-unique-id #### Patch Changes - Fix unique ID assignment when handling empty nodes by checking next node's attribute state in the transaction document before modifying it, preventing incorrect ID assignments. ## v3.14.0 ### @tiptap/extension-twitch #### Minor Changes - Add new Twitch extension for embedding Twitch videos, clips, and live channels in the editor. Supports customizable parameters like autoplay, muted, and start time, with attribute-level overrides for per-embed configuration. ### @tiptap/react #### Patch Changes - Append all children of editors parent node to element Fixes a regression introduced by #6972, that resulted in elements that got appended to the editors parent node staying detached. E.g. the drag handle plugin is affected by this regression. ### @tiptap/vue-2 #### Patch Changes - Append all children of editors parent node to element Fixes a regression introduced by #6972, that resulted in elements that got appended to the editors parent node staying detached. E.g. the drag handle plugin is affected by this regression. ### @tiptap/vue-3 #### Patch Changes - Append all children of editors parent node to element Fixes a regression introduced by #6972, that resulted in elements that got appended to the editors parent node staying detached. E.g. the drag handle plugin is affected by this regression. ### @tiptap/extension-drag-handle #### Patch Changes - Fix `findElementNextToCoords` to resolve the parent when `nodeAt(pos)` is null (e.g., inside an atom node that allows inline content) ## v3.13.0 ### @tiptap/extension-drag-handle #### Patch Changes - Added `data-dragging` attribute to drag handle elements to track drag state. ### @tiptap/extension-drag-handle-react #### Patch Changes - Added `data-dragging` attribute to drag handle elements to track drag state. ### @tiptap/extension-drag-handle-vue-2 #### Patch Changes - Added `data-dragging` attribute to drag handle elements to track drag state. ### @tiptap/extension-drag-handle-vue-3 #### Patch Changes - Added `data-dragging` attribute to drag handle elements to track drag state. ### @tiptap/extension-link #### Patch Changes - Ensure `enableClickSelection` works regardless of the `openOnClick` option by always registering the link click handler plugin. ### @tiptap/extension-table-of-contents #### Patch Changes - Skip the table of contents update logic during IME input method composition to avoid interference with input. ### @tiptap/markdown #### Patch Changes - Fixed trailing and leading whitespace handling in markdown serialization for inline marks ### @tiptap/extension-mention #### Patch Changes - Add 'mentionSuggestionChar' to allowedAttributes for Markdown serialization in multi-mention setups. The attribute is only serialized when it differs from the default '@' character, keeping markdown output clean for single-mention users. ### @tiptap/core #### Minor Changes - 1. **Added** an optional `createCustomHandle` callback to `ResizableNodeView`, allowing developers to fully customize resize handles. When provided, it replaces the default handle creation and bypasses the built-in `positionHandle` logic, giving complete control over markup, styling, and positioning while preserving backward compatibility. 2. **Removed** predefined inline styles from the `wrapper` element to better support dynamic alignment. This eliminates the need for `!important` overrides in user styles. 3. **Added** an editor `update` event listener to dynamically attach or remove resize handles based on the editor’s editable state. The implementation tracks the previous editable state to avoid unnecessary re-renders. #### Patch Changes - Add 'mentionSuggestionChar' to allowedAttributes for Markdown serialization in multi-mention setups. The attribute is only serialized when it differs from the default '@' character, keeping markdown output clean for single-mention users. ### @tiptap/extension-image #### Minor Changes - 1. **Added** an optional `createCustomHandle` callback to `ResizableNodeView`, allowing developers to fully customize resize handles. When provided, it replaces the default handle creation and bypasses the built-in `positionHandle` logic, giving complete control over markup, styling, and positioning while preserving backward compatibility. 2. **Removed** predefined inline styles from the `wrapper` element to better support dynamic alignment. This eliminates the need for `!important` overrides in user styles. 3. **Added** an editor `update` event listener to dynamically attach or remove resize handles based on the editor’s editable state. The implementation tracks the previous editable state to avoid unnecessary re-renders. ## v3.12.1 ### @tiptap/extension-table-of-contents #### Patch Changes - Fixed a bug that mutated the ProseMirror document during server-side rendering, which could cause "Invalid content for node doc" errors. ## v3.12.0 ### @tiptap/extension-collaboration #### Minor Changes - Implement position mapping using the `MappablePosition` class. This enables position mapping in collaborative editing scenarios. - Introduce `MappablePosition` class in core with `position`, `fromJSON`, and `toJSON` methods - Add `editor.utils` property with `getUpdatedPosition(position, transaction)` and `createMappablePosition()` methods - Create `CollaborationMappablePosition` subclass that extends `MappablePosition` with Y.js relative position support ### @tiptap/core #### Minor Changes - Implement position mapping using the `MappablePosition` class. This enables position mapping in collaborative editing scenarios. - Introduce `MappablePosition` class in core with `position`, `fromJSON`, and `toJSON` methods - Add `editor.utils` property with `getUpdatedPosition(position, transaction)` and `createMappablePosition()` methods - Create `CollaborationMappablePosition` subclass that extends `MappablePosition` with Y.js relative position support ### @tiptap/extension-collaboration-caret #### Patch Changes - Avoid mutating `this.options` in the `updateUser` command. `this.options` can be a getter and is not writable; the command now updates the provider awareness directly so user updates are applied correctly. ### @tiptap/react #### Minor Changes - Replaced unmaintained `fast-deep-equal` dependency with maintained `fast-equals` #### Patch Changes - Fix a bug where React node views could receive invalid positions from `this.getPos()` when ProseMirror and React render cycles got out of sync, which could cause errors during updates. ## v3.11.1 ### @tiptap/core #### Patch Changes - Improve TypeScript generics for Node.extend The Node.extend method's TypeScript signature was updated so that ExtendedConfig can extend NodeConfig and MarkConfig, improving type inference when extending Node and Mark classes with additional config properties. This is a type-only change — there are no runtime behavior changes. ### @tiptap/extensions #### Patch Changes - Fixed a bug where the TrailingNode extension would not use the node option to assume the default node type ## v3.11.0 ### @tiptap/core #### Minor Changes - Add native text direction support for RTL and bidirectional content. The editor now includes a `textDirection` option that can be set to `'ltr'`, `'rtl'`, or `'auto'` to control the direction of all content globally. Additionally, new `setTextDirection` and `unsetTextDirection` commands allow for granular control of text direction on specific nodes. This enables proper rendering of right-to-left languages like Arabic and Hebrew, as well as bidirectional text mixing multiple languages. ## v3.10.8 ### @tiptap/core #### Patch Changes - Fixed a bug that caused extra characters to be inserted after a parsed, nestable content block by accounting for leading newlines - Add documentation comments to Tiptap JSON types - allow `undefined` as a value for the `default` attribute key - Fix `updateAttributes` and `resetAttributes` commands to return accurate results when used with `.can()`. Previously, these commands would always return `true` even when they couldn't perform the operation. Now they correctly return `false` when no matching nodes or marks are found in the selection. ### @tiptap/extension-text-align #### Patch Changes - Fix `setTextAlign` and `unsetTextAlign` commands to work correctly with `.can()` checks. Changed logic from `.every()` to `.some()` to return `true` when at least one configured node type matches, rather than requiring all types to match. ### @tiptap/static-renderer #### Patch Changes - Fix static HTML renderer incorrectly generating self-closing tags for HTML elements that require proper closing tags (iframe, script, style, etc.). ### @tiptap/markdown #### Patch Changes - Fixed CommonJS compatibility by downgrading `marked` dependency from v16 to v15. ## v3.10.7 ### @tiptap/vue-2 #### Patch Changes - Fix BubbleMenu plugin registration not triggering due to missing element reference during component initialization. ## v3.10.6 ### @tiptap/vue-2 #### Patch Changes - Fix BubbleMenu and FloatingMenu component runtime errors in Vue 2. ## v3.10.5 ### @tiptap/extension-collaboration #### Patch Changes - Fixed collaborative editing errors with certain emoji combinations (like 🔴🟢, 😎🐈, 🟣🔵) by updating `@tiptap/y-tiptap` to stable v3.0.0. ### @tiptap/extension-collaboration-caret #### Patch Changes - Fixed collaborative editing errors with certain emoji combinations (like 🔴🟢, 😎🐈, 🟣🔵) by updating `@tiptap/y-tiptap` to stable v3.0.0. ### @tiptap/extension-drag-handle #### Patch Changes - Fixed collaborative editing errors with certain emoji combinations (like 🔴🟢, 😎🐈, 🟣🔵) by updating `@tiptap/y-tiptap` to stable v3.0.0. ### @tiptap/core #### Patch Changes - Fixed ProseMirror schema generation to properly respect `isRequired` attribute configuration. Previously, attributes marked with `isRequired: true` were incorrectly treated as optional because a `default` property was always included in the schema specification. ProseMirror determines attribute requirements by the absence of the `default` property, so now the `default` is only included when the attribute is not required and a default value is explicitly defined. ### @tiptap/extension-unique-id #### Patch Changes - Fixed infinite transaction loop that caused browser tabs to freeze when using UniqueID and TrailingNode extensions together. ### @tiptap/extensions #### Patch Changes - Fixed infinite transaction loop that caused browser tabs to freeze when using UniqueID and TrailingNode extensions together. ## v3.10.4 ### @tiptap/core #### Patch Changes - Fix autofocus behavior to prevent unwanted scrolling when disabled ### @tiptap/extension-blockquote #### Patch Changes - Fixed nested blockquote markdown serialization to properly handle multi-level nesting ## v3.10.3 ### @tiptap/markdown #### Patch Changes - Fix markdown serialization to prevent marks from continuing after hard breaks. Previously, marks like bold would incorrectly persist across hard breaks in the markdown output. - Fixed a bug where marks were resolved in incorrect orders, breaking markdown rendering for nested marks. - Fix parsing of mixed bullet lists and task lists. Previously, Marked.js would group consecutive bullet list items and task list items into a single list token, causing incorrect parsing. Now the parser detects mixed lists and splits them into separate bulletList and taskList nodes. ## v3.10.2 ### @tiptap/markdown #### Patch Changes - Fix parsing of mixed inline HTML within Markdown content so that inline HTML fragments are parsed correctly. ### @tiptap/extension-table #### Patch Changes - Allow setting custom table widths by respecting user-provided `style` attributes instead of always overriding them with calculated widths. ## v3.10.1 ### @tiptap/core #### Patch Changes - Use correct `ResizableNodeView` class name ## v3.10.0 ### @tiptap/core #### Minor Changes - Add a new ResizableNodeview NodeView to core that wraps elements (images, videos, iframes) with configurable resize handles. It provides live onResize/onCommit callbacks, min/max constraints, aspect-ratio support, and styling hooks (class names + data attributes) to improve UX when resizing media inside the editor. - the addNodeView function can now return `null` to dynamically disable rendering of a node view While this should not directly cause any issues, it's noteworthy as it still could affect some behavior in some edge cases. ### @tiptap/extension-image #### Minor Changes - Added a new `resize` option that allows images to be resized. The option adds resize handlers to images allowing users to manually resize images via drag and drop or touch ## v3.9.1 ### @tiptap/extension-table #### Patch Changes - Add a `renderWrapper` option to the Table extension so consumers can customize whether the table wrapper for the resizable node view should be rendered in non-editable mode as well. ## v3.9.0 ### @tiptap/vue-3 #### Patch Changes - Fix attribute forwarding for BubbleMenu and FloatingMenu Vue 3 components to allow setting z-index and other HTML attributes ### @tiptap/extension-hard-break #### Patch Changes - Ensure that markdown hard breaks (two spaces followed by a newline) are parsed so they render as line breaks (`
`) in the editor when using `contentType: 'markdown'`. Fixes #7107 ### @tiptap/extension-unique-id #### Minor Changes - Add `updateDocument` option to disable document updates caused by the Unique ID extension. ### @tiptap/core #### Patch Changes - Only remove injected CSS on unmount if no other editors are in the document (fixes #6836) ### @tiptap/extension-drag-handle #### Patch Changes - Replace DOM traversal with browser's native elementsFromPoint for better performance. - Use elementsFromPoint instead of querySelectorAll - Add clampToContent helper for coordinate boundary validation - Add findClosestTopLevelBlock helper for efficient block lookup - Future-proof for root-level mousemove listeners ### @tiptap/react #### Patch Changes - Prevent Bubble Menu plugin from re-loading every time the BubbleMenu component re-renders. Reverts a regression introduced in v3.6.3, in PR #7028. ## v3.8.0 ### @tiptap/extension-unique-id #### Minor Changes - Add `updateDocument` option to disable document updates caused by the Unique ID extension. ### @tiptap/react #### Patch Changes - Prevent Bubble Menu plugin from re-loading every time the BubbleMenu component re-renders. Reverts a regression introduced in v3.6.3, in PR #7028. ## v3.7.2 ### @tiptap/html #### Patch Changes - Fix [CVE-2025-62410](https://www.cve.org/CVERecord?id=CVE-2025-62410) by updating happy-dom to ^20.0.2 ## v3.7.1 ### @tiptap/markdown #### Patch Changes - Editors will not throw an error anymore when `content` is an empty string and `contentType` is `markdown` - Remove invalid server configuration from package.json ## v3.7.0 ### @tiptap/core #### Minor Changes - All commands and their corresponding TypeScript types are now exported from `@tiptap/core` so they can be imported and referenced directly by consumers. This makes it easier to build typed helpers, extensions, and tests that depend on the command signatures. Why: - Previously some command option types were only available as internal types or scattered across files, which made it awkward for downstream users to import and reuse them. ```ts import { commands } from '@tiptap/core' ``` Notes: - This is a non-breaking, additive change. It improves ergonomics for TypeScript consumers. - If you rely on previously private/internal types, prefer the exported types from `@tiptap/core` going forward. - Add comprehensive bidirectional markdown support to Tiptap through a new `@tiptap/markdown` package and Markdown utilities in `@tiptap/core`. **New Package: `@tiptap/markdown`** - A new official extension that provides full Markdown parsing and serialization capabilities using [MarkedJS](https://marked.js.org) as the underlying Markdown parser. **Core Features:** **Extension API** - **`Markdown` Extension**: Main extension that adds Markdown support to your editor - **`MarkdownManager`**: Core engine for parsing and serializing Markdown - Parse Markdown strings to Tiptap JSON: `editor.markdown.parse(markdown)` - Serialize Tiptap JSON to Markdown: `editor.markdown.serialize(json)` - Access to underlying marked.js instance: `editor.markdown.instance` #### Editor Methods - **`editor.getMarkdown()`**: Serialize current editor content to Markdown string - **`editor.markdown`**: Access to MarkdownManager instance for advanced operations **Editor Options:** - **`contentType`**: Control the type of content that is inserted into the editor. Can be `json`, `html` or `markdown` - defaults to `json` and will automatically detect invalid content types (like JSON when it is actually Markdown). ```typescript new Editor({ content: '# Hello World', contentType: 'markdown', }) ``` **Command Options:** All content commands now support an `contentType` option: - **`setContent(markdown, { contentType: 'markdown' })`**: Replace editor content with markdown - **`insertContent(markdown, { contentType: 'markdown' })`**: Insert markdown at cursor position - **`insertContentAt(position, markdown, { contentType: 'markdown' })`**: Insert Markdown at specific position For more, check [the documentation](https://tiptap.dev/docs/editor/markdown). #### Patch Changes - The extension manager now provides a new property `baseExtensions` that contains an unflattened array of extensions ### @tiptap/markdown #### Minor Changes - Add comprehensive bidirectional markdown support to Tiptap through a new `@tiptap/markdown` package and Markdown utilities in `@tiptap/core`. **New Package: `@tiptap/markdown`** - A new official extension that provides full Markdown parsing and serialization capabilities using [MarkedJS](https://marked.js.org) as the underlying Markdown parser. **Core Features:** **Extension API** - **`Markdown` Extension**: Main extension that adds Markdown support to your editor - **`MarkdownManager`**: Core engine for parsing and serializing Markdown - Parse Markdown strings to Tiptap JSON: `editor.markdown.parse(markdown)` - Serialize Tiptap JSON to Markdown: `editor.markdown.serialize(json)` - Access to underlying marked.js instance: `editor.markdown.instance` #### Editor Methods - **`editor.getMarkdown()`**: Serialize current editor content to Markdown string - **`editor.markdown`**: Access to MarkdownManager instance for advanced operations **Editor Options:** - **`contentType`**: Control the type of content that is inserted into the editor. Can be `json`, `html` or `markdown` - defaults to `json` and will automatically detect invalid content types (like JSON when it is actually Markdown). ```typescript new Editor({ content: '# Hello World', contentType: 'markdown', }) ``` **Command Options:** All content commands now support an `contentType` option: - **`setContent(markdown, { contentType: 'markdown' })`**: Replace editor content with markdown - **`insertContent(markdown, { contentType: 'markdown' })`**: Insert markdown at cursor position - **`insertContentAt(position, markdown, { contentType: 'markdown' })`**: Insert Markdown at specific position For more, check [the documentation](https://tiptap.dev/docs/editor/markdown). ### @tiptap/extension-link #### Patch Changes - Paste Handlers and onPaste plugin now respect shouldAutoLink/validate options ### @tiptap/extensions #### Patch Changes - Make the `TrailingNode` extension's `node` option optional and derive the default node type from the editor schema when available. Previously the extension used a hard-coded `'paragraph'` default and the `node` option was required in the TypeScript definitions. This change: - makes `node` optional in the options type, - prefers the editor schema's top node default type when resolving the trailing node, and - falls back to the configured option or `'paragraph'` as a last resort. This fixes cases where projects use a different top-level default node and prevents the extension from inserting an incorrect trailing node type. ## v3.6.7 ### @tiptap/html #### Patch Changes - Fix CVE-2025-61927 by bumping happy-dom to 20.0.0 Bumps the transitive/dev dependency happy-dom from ^18.0.1 → ^20.0.0 in @tiptap/html to address CVE-2025-61927. This is a dependency/security-only change and does not modify any public APIs. Why: - happy-dom released a security fix for CVE-2025-61927; updating prevents the vulnerability being pulled into consumers that depend on @tiptap/html. ## v3.6.6 ### @tiptap/extension-floating-menu #### Patch Changes - Fixed a problem where the position of a menu is not updated on creation when shouldShow is true ### @tiptap/extension-bubble-menu #### Patch Changes - Fixed a problem where the position of a menu is not updated on creation when shouldShow is true ### @tiptap/vue-3 #### Patch Changes - Fixed a bug that caused conditionally rendered bubble menus not to be attached to the DOM correctly ## v3.6.5 ### @tiptap/extension-horizontal-rule #### Patch Changes - Added nextNodeType option to horizontal-rule extension, allowing users to specify which node type should be inserted after a horizontal rule ### @tiptap/html #### Patch Changes - Fix: Clean up happy-dom window instance fixing a memory leak caused by unclosed happy-dom windows ### @tiptap/core #### Patch Changes - Editors can now emit `transaction` and `update` events before being mounted. This means smoother state handling and instant feedback from editors, even when they're not in the DOM. ## v3.6.4 ### @tiptap/html #### Patch Changes - Fix: Clean up happy-dom window instance fixing a memory leak caused by unclosed happy-dom windows ## v3.6.3 ### @tiptap/react #### Patch Changes - Updated the React `FloatingMenu` plugin hook dependencies to match the `BubbleMenu` behavior. The FloatingMenu will now respond to changes in `appendTo`, `pluginKey`, `shouldShow`, and `options`. - Resolved an issue where the React BubbleMenu did not update when FloatingUI option props changed after initial mount. The BubbleMenu now correctly responds to updated option props. - Improved the BubbleMenu's usability by ensuring the `appendTo` prop passed to the React BubbleMenu component is now correctly forwarded to the underlying bubble menu plugin. This fix allows developers to customize where the BubbleMenu is attached in the DOM, helping resolve issues with positioning and portal setups in React apps. ### @tiptap/extensions #### Patch Changes - The Selection extension now uses the correct SelectionOptions type, providing accurate typings for its options. ### @tiptap/extension-code-block #### Patch Changes - Configuration options for the CodeBlock extension now support `null` and `undefined` values. This makes custom setups more flexible and avoids unnecessary type errors when omitting optional overrides. All existing default values and fallback logic remain in place - no breaking changes for existing code. ### @tiptap/core #### Patch Changes - Refined the `JSONContent.attrs` definition to exactly mirror the structure returned by `editor.getJSON()`. This ensures strict type safety and consistency between the editor output and the expected type, eliminating errors caused by mismatched attribute signatures. ### @tiptap/extension-table-of-contents #### Patch Changes - Improve typings by inferring the storage type for the Table of Contents extension ### @tiptap/extension-floating-menu #### Patch Changes - You can now pass a callback to the `appendTo` option in the floating and bubble menu extensions. The callback must return an element synchronously, so menus can be appended to elements that are created dynamically. ### @tiptap/extension-bubble-menu #### Patch Changes - You can now pass a callback to the `appendTo` option in the floating and bubble menu extensions. The callback must return an element synchronously, so menus can be appended to elements that are created dynamically. ## v3.6.2 ### @tiptap/extension-bubble-menu #### Patch Changes - Fix a bug where the bubble menu could throw an error if the editor was destroyed while the plugin was cleaning up. ## v3.6.1 ### @tiptap/react #### Patch Changes - Hotfix: Fix a crash in the React package that could occur during mounting/unmounting when the editor wasn't fully initialized. This prevents a runtime error and improves stability. ## v3.6.0 ### @tiptap/core #### Patch Changes - Improve typing and docs for `EditorOptions.element` to reflect all supported mounting modes and align behavior across adapters. - `element` now accepts: - `Element`: the editor is appended inside the given element. - `{ mount: HTMLElement }`: the editor is mounted directly to `mount` (no extra wrapper). - `(editorEl: HTMLElement) => void`: a function that receives the editor element so you can place it anywhere in the DOM. - `null`: no automatic mounting. ### @tiptap/extension-table #### Patch Changes - Parse cell `colwidth` from nearest `` when missing on the cell When importing HTML, table column widths are often declared on a surrounding `` rather than on each ``. Previously, `tableCell` only read the `colwidth` attribute from the cell itself and would lose width information in that case. The implementation now falls back to reading the corresponding ``'s `width` from the table's `` using the cell's index. This is a non-breaking bugfix that preserves layout information when HTML uses ``. Consider adding a small demo or unit test to assert colwidth is preserved for cells when only the `` contains width attributes. - Fixes table wrapper replacement and lost selections when `resizable: true`. TableView.ignoreMutation now ignores attribute/childList/characterData mutations that occur inside the table wrapper but outside the editable `contentDOM`, preventing wrapper re-creation during resize interactions so selections (e.g. `mergeCells()`) are preserved. No API or breaking changes. ### @tiptap/extension-bubble-menu #### Patch Changes - Remove recently added `updateBubbleMenuPosition` method because it would not work in the React and Vue versions of the BubbleMenu, only in the vanilla extension. And that would confuse developers. Write the `transactionHandler` method as an arrow function because arrow functions have no `this`, so the `this` remains the instance of the `BubbleMenuView` class. ### @tiptap/extension-unique-id #### Minor Changes - Create a utility to add unique IDs to a document in the server The utility is called `generateUniqueIds` and is exported from the `@tiptap/extension-unique-id` package. It has the same functionality as the `UniqueID` extension, but without the need to create an `Editor` instance. This lets you add unique IDs to the document in the server. It takes the following parameters: - `doc`: The Tiptap JSON document to add unique IDs to. - `extensions`: The extensions to use. Must include the `UniqueID` extension. It returns the updated Tiptap JSON document, with the unique IDs added to the nodes. ### @tiptap/vue-3 #### Minor Changes - Pass `attrs` through Vue 3 menus ## v3.5.3 ### @tiptap/extension-text-style #### Patch Changes - Merge nested span styles only for immediate child spans and guard style values. - Replace non-standard/fragile selector approach and avoid re-processing nested `` elements. - Read parent style once, merge with child style only when present, and remove empty `style` attributes. - Improves parsing performance and robustness in browsers, Node/JSDOM and tests. This change fixes a bug that could cause exponential work when parsing deeply nested `` elements - in extreme cases that could make the tab unresponsive or crash the renderer. It is a bugfix / performance improvement with no public API changes. ## v3.5.2 ### @tiptap/react #### Patch Changes - Tiptap will now correctly insert a React MarkViews' content into the correct element within `MarkViewContent` component ## v3.5.1 ### @tiptap/extension-floating-menu #### Patch Changes - Add `appendTo` support to `FloatingMenu` and pass it through in React/Vue 2/Vue 3 for both `BubbleMenu` and `FloatingMenu` to allow fixing clipping/z-index issues. ### @tiptap/react #### Patch Changes - Add `appendTo` support to `FloatingMenu` and pass it through in React/Vue 2/Vue 3 for both `BubbleMenu` and `FloatingMenu` to allow fixing clipping/z-index issues. ### @tiptap/vue-2 #### Patch Changes - Add `appendTo` support to `FloatingMenu` and pass it through in React/Vue 2/Vue 3 for both `BubbleMenu` and `FloatingMenu` to allow fixing clipping/z-index issues. ### @tiptap/vue-3 #### Patch Changes - Add `appendTo` support to `FloatingMenu` and pass it through in React/Vue 2/Vue 3 for both `BubbleMenu` and `FloatingMenu` to allow fixing clipping/z-index issues. # [2.4.0](https://github.com/ueberdosis/tiptap/compare/v2.3.2...v2.4.0) (2024-05-14) ### Bug Fixes - **core:** configure should use the parent of the current instance, to avoid duplication ([#5147](https://github.com/ueberdosis/tiptap/issues/5147)) ([4db463c](https://github.com/ueberdosis/tiptap/commit/4db463c6bbcc3a17ee8eb591bea8e357120ecb35)) - fix ts error for BubbleMenu and FloatingMenu in @tiptap/react ([#5126](https://github.com/ueberdosis/tiptap/issues/5126)) ([baff4af](https://github.com/ueberdosis/tiptap/commit/baff4af39e2b8970d7cab99859ece41228643f9d)) ### Features - added jsdocs ([#4356](https://github.com/ueberdosis/tiptap/issues/4356)) ([b941eea](https://github.com/ueberdosis/tiptap/commit/b941eea6daba09d48a5d18ccc1b9a1d84b2249dd)) ## [2.3.2](https://github.com/ueberdosis/tiptap/compare/v2.3.1...v2.3.2) (2024-05-08) ### Bug Fixes - NodePos querySelectorAll function ([#5094](https://github.com/ueberdosis/tiptap/issues/5094)) ([4900a27](https://github.com/ueberdosis/tiptap/commit/4900a27c5389d9a2d0d69f407ca3db0155304315)) ## [2.3.1](https://github.com/ueberdosis/tiptap/compare/v2.3.0...v2.3.1) (2024-04-30) **Note:** Version bump only for package tiptap # [2.3.0](https://github.com/ueberdosis/tiptap/compare/v2.2.6...v2.3.0) (2024-04-09) ### Bug Fixes - **core:** fix nodepos child lookup ([#5038](https://github.com/ueberdosis/tiptap/issues/5038)) ([22ced31](https://github.com/ueberdosis/tiptap/commit/22ced318723003365fbfd8f59b8dac79c7563017)) ### Features - **core:** apply input and paste rules when using insertContent methods ([#5046](https://github.com/ueberdosis/tiptap/issues/5046)) ([96b6abc](https://github.com/ueberdosis/tiptap/commit/96b6abcf6edbc6cac03a391130d9feebb6de3a04)) ## [2.2.6](https://github.com/ueberdosis/tiptap/compare/v2.2.5...v2.2.6) (2024-04-06) ### Bug Fixes - unexpected renderText() for contentful nodes ([#3410](https://github.com/ueberdosis/tiptap/issues/3410)) ([d6c71a8](https://github.com/ueberdosis/tiptap/commit/d6c71a838d590f78fdff15c805d93f43c8a5a1a5)) ## [2.2.5](https://github.com/ueberdosis/tiptap/compare/v2.2.4...v2.2.5) (2024-04-05) ### Bug Fixes - Disallow only whitespace between markdown shortcuts delimiters ([#4866](https://github.com/ueberdosis/tiptap/issues/4866)) ([aa029fe](https://github.com/ueberdosis/tiptap/commit/aa029fe2242aeadc38555b2832df6ae1614c7d1d)) - **extension-link:** Avoid auto-linking partial text for invalid TLDs ([#4865](https://github.com/ueberdosis/tiptap/issues/4865)) ([4474d05](https://github.com/ueberdosis/tiptap/commit/4474d056daf9280ebb10b31f98bb000e953132e5)) ## [2.2.4](https://github.com/ueberdosis/tiptap/compare/v2.2.3...v2.2.4) (2024-02-23) ### Bug Fixes - mark nocookie youtube url as valid when parsing html ([#4883](https://github.com/ueberdosis/tiptap/issues/4883)) ([099e10d](https://github.com/ueberdosis/tiptap/commit/099e10df923d851dd866354e9abca331d995b65c)) - typecheck drag and clipboard events for testing environments ([bbee9a3](https://github.com/ueberdosis/tiptap/commit/bbee9a3c3090fa40bf366591682b42a3f6ec5f91)) ## [2.2.3](https://github.com/ueberdosis/tiptap/compare/v2.2.2...v2.2.3) (2024-02-15) ### Bug Fixes - fix test path ([21aa96d](https://github.com/ueberdosis/tiptap/commit/21aa96dee8deab1f439b7f655b8ed266a516a4cd)) ## [2.2.2](https://github.com/ueberdosis/tiptap/compare/v2.2.1...v2.2.2) (2024-02-07) ### Bug Fixes - **react:** use ref instead of state in useEditor to prevent rerenders ([#4856](https://github.com/ueberdosis/tiptap/issues/4856)) ([56a5737](https://github.com/ueberdosis/tiptap/commit/56a5737ed102ee75ec72f9cc2847e3c977f431bd)) ## [2.2.1](https://github.com/ueberdosis/tiptap/compare/v2.2.0...v2.2.1) (2024-01-31) **Note:** Version bump only for package tiptap # [2.2.0](https://github.com/ueberdosis/tiptap/compare/v2.1.16...v2.2.0) (2024-01-29) ### Bug Fixes - **core:** fix new lines being added via elementFromString ([#4767](https://github.com/ueberdosis/tiptap/issues/4767)) ([b7a2504](https://github.com/ueberdosis/tiptap/commit/b7a2504f16f46563537c890930cb2c332c256175)) - fix bug [#4785](https://github.com/ueberdosis/tiptap/issues/4785) ([#4836](https://github.com/ueberdosis/tiptap/issues/4836)) ([f3cba1e](https://github.com/ueberdosis/tiptap/commit/f3cba1e0b0288156c1427437e5a0b9e03cd67e63)) - fix imports, fix demos, unpin y-prosemirror ([681aa57](https://github.com/ueberdosis/tiptap/commit/681aa577bff500015c3f925e300c55a71c73efaf)) - fix newline stripping via insertContent ([8954007](https://github.com/ueberdosis/tiptap/commit/8954007b2b92b040d69b26a0866ae58fabf5e512)) # [2.2.0-rc.8](https://github.com/ueberdosis/tiptap/compare/v2.1.14...v2.2.0-rc.8) (2024-01-08) ### Bug Fixes - **core:** fix options now being empty ([fc67cb1](https://github.com/ueberdosis/tiptap/commit/fc67cb1b7166c1ab6b6e0174539c9e29c364eace)) # [2.2.0-rc.7](https://github.com/ueberdosis/tiptap/compare/v2.2.0-rc.6...v2.2.0-rc.7) (2023-11-27) ### Bug Fixes - **core:** set defaultOptions to undefined by default ([448b433](https://github.com/ueberdosis/tiptap/commit/448b433ee7847bfba4cd803d8c8820763ceedafc)) # [2.2.0-rc.6](https://github.com/ueberdosis/tiptap/compare/v2.2.0-rc.5...v2.2.0-rc.6) (2023-11-23) ### Reverts - Revert "fix/react-renderer-node-attrs (#4321)" ([a4af83c](https://github.com/ueberdosis/tiptap/commit/a4af83ca52c8e020f88990af53981591559205a9)), closes [#4321](https://github.com/ueberdosis/tiptap/issues/4321) - Revert "autolink improvement" ([ef10ae5](https://github.com/ueberdosis/tiptap/commit/ef10ae53b2a3854fceefc2999e166ed1fe4e9b32)) # [2.2.0-rc.4](https://github.com/ueberdosis/tiptap/compare/v2.1.11...v2.2.0-rc.4) (2023-10-10) ### Bug Fixes - add missing attributes in extension-link ([#4429](https://github.com/ueberdosis/tiptap/issues/4429)) ([0578265](https://github.com/ueberdosis/tiptap/commit/0578265bfe548a7f574cdbe055ef07b9029d8797)) - **history:** use correct shortcuts for undo/redo ([520ce79](https://github.com/ueberdosis/tiptap/commit/520ce790c3dff2d0774211fe30fdce1905655b09)) ### Features - **extension/youtube:** Allow youtube shorts urls to be embedded ([4d79cb8](https://github.com/ueberdosis/tiptap/commit/4d79cb85c93353cdb5ead518da63cf8f9fa71497)) # [2.2.0-rc.3](https://github.com/ueberdosis/tiptap/compare/v2.2.0-rc.2...v2.2.0-rc.3) (2023-08-18) # [2.2.0-rc.1](https://github.com/ueberdosis/tiptap/compare/v2.2.0-rc.0...v2.2.0-rc.1) (2023-08-18) # [2.2.0-rc.0](https://github.com/ueberdosis/tiptap/compare/v2.1.5...v2.2.0-rc.0) (2023-08-18) ### Features - **placeholder:** allow editor-is-empty class on any node ([#4335](https://github.com/ueberdosis/tiptap/issues/4335)) ([ff929b1](https://github.com/ueberdosis/tiptap/commit/ff929b179de930619005a773bb4186ae2aa2ec58)) ## [2.1.16](https://github.com/ueberdosis/tiptap/compare/v2.1.15...v2.1.16) (2024-01-10) ### Bug Fixes - **core:** fix new lines being added via elementFromString ([#4767](https://github.com/ueberdosis/tiptap/issues/4767)) ([2235908](https://github.com/ueberdosis/tiptap/commit/2235908c28f388eda041d1d5d017554d513fe909)) ### Reverts - Revert "fix(extension-link): fix link not being kept when pasting url with link (#3975)" ([1b34271](https://github.com/ueberdosis/tiptap/commit/1b34271edfdd6e81f670f9ddb15cd6838d986e9f)), closes [#3975](https://github.com/ueberdosis/tiptap/issues/3975) ## [2.1.15](https://github.com/ueberdosis/tiptap/compare/v2.1.14...v2.1.15) (2024-01-08) ### Bug Fixes - **core:** fix insertContentAt keeping new lines in html content ([#4465](https://github.com/ueberdosis/tiptap/issues/4465)) ([135a12f](https://github.com/ueberdosis/tiptap/commit/135a12f7aa2df839a0b619704110a360b980c738)) - **link:** fix tests ([d495d92](https://github.com/ueberdosis/tiptap/commit/d495d92a1f7b1c51e09ac8f4934e15a2d1cf070d)) ### Reverts - Revert "update package-lock" ([faead69](https://github.com/ueberdosis/tiptap/commit/faead6987337ea8471619fdc3124437954772a1a)) ## [2.1.14](https://github.com/ueberdosis/tiptap/compare/v2.1.13...v2.1.14) (2024-01-08) ### Bug Fixes - **typography:** require spaces after divisions to not break date formats ([#4696](https://github.com/ueberdosis/tiptap/issues/4696)) ([f6d7e00](https://github.com/ueberdosis/tiptap/commit/f6d7e00a746a67fa440a3fa0f5362295959873d2)) ## [2.1.13](https://github.com/ueberdosis/tiptap/compare/v2.1.12...v2.1.13) (2023-11-30) ### Bug Fixes - **react:** fix performance regression because of select/deselect ([#4661](https://github.com/ueberdosis/tiptap/issues/4661)) ([ad7f659](https://github.com/ueberdosis/tiptap/commit/ad7f659ed08a6a7c57056b78edbded014549f2dc)) ## [2.1.12](https://github.com/ueberdosis/tiptap/compare/v2.1.11...v2.1.12) (2023-10-11) ### Bug Fixes - **link:** restore pasteHandler and add existing url check ([#4523](https://github.com/ueberdosis/tiptap/issues/4523)) ([1a7b428](https://github.com/ueberdosis/tiptap/commit/1a7b4280d2f9c334d14b16016c29e9f4862716a0)) ## [2.1.11](https://github.com/ueberdosis/tiptap/compare/v2.1.10...v2.1.11) (2023-09-20) ### Reverts - Revert "v2.2.11" ([6aa755a](https://github.com/ueberdosis/tiptap/commit/6aa755a04b9955fc175c7ab33dee527d0d5deef0)) ## [2.1.10](https://github.com/ueberdosis/tiptap/compare/v2.1.9...v2.1.10) (2023-09-15) **Note:** Version bump only for package tiptap ## [2.1.9](https://github.com/ueberdosis/tiptap/compare/v2.1.8...v2.1.9) (2023-09-14) ### Bug Fixes - add missing attributes in extension-link ([#4429](https://github.com/ueberdosis/tiptap/issues/4429)) ([74b6444](https://github.com/ueberdosis/tiptap/commit/74b644438829d6ee9b0795bc70c55f2755d7438c)) ## [2.1.8](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.7...v2.1.8) (2023-09-04) **Note:** Version bump only for package tiptap ## [2.1.7](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.6...v2.1.7) (2023-09-04) ### Bug Fixes - **horizontal-rule:** fix insertion being broken on empty docs ([#4375](https://github.com/ueberdosis/tiptap-workspace/issues/4375)) ([2a83166](https://github.com/ueberdosis/tiptap-workspace/commit/2a83166a46f97a9fc42ae23ce5367bb58bcdab74)) ## [2.1.6](https://github.com/ueberdosis/tiptap/compare/v2.1.5...v2.1.6) (2023-08-18) ### Bug Fixes - **core:** fix broken export ([4227f32](https://github.com/ueberdosis/tiptap/commit/4227f324a5bfd4f0905c70ac8ea68903352f911b)) ## [2.1.5](https://github.com/ueberdosis/tiptap/compare/v2.1.4...v2.1.5) (2023-08-18) ### Bug Fixes - **list-key-map:** fix broken imports ([#4350](https://github.com/ueberdosis/tiptap/issues/4350)) ([e40ac25](https://github.com/ueberdosis/tiptap/commit/e40ac2584e813893a61c91a456bdcd2cf6652b50)) ## [2.1.4](https://github.com/ueberdosis/tiptap/compare/v2.1.3...v2.1.4) (2023-08-18) ### Bug Fixes - replace the whole node in nodeInputRule ([#4341](https://github.com/ueberdosis/tiptap/issues/4341)) ([ffeefe2](https://github.com/ueberdosis/tiptap/commit/ffeefe21ff3c1f951a5a4f9ae9697317ddd1c5ad)) ## [2.1.3](https://github.com/ueberdosis/tiptap/compare/v2.1.2...v2.1.3) (2023-08-18) ### Bug Fixes - fix autolink when code is not enabled for editor ([#4344](https://github.com/ueberdosis/tiptap/issues/4344)) ([f2ac7b9](https://github.com/ueberdosis/tiptap/commit/f2ac7b90912a78b90216a7d7d084c86f0c0eef48)) ## [2.1.2](https://github.com/ueberdosis/tiptap/compare/v2.1.1...v2.1.2) (2023-08-17) ### Bug Fixes - **core:** fix error when merging class attributes ([#4340](https://github.com/ueberdosis/tiptap/issues/4340)) ([a251946](https://github.com/ueberdosis/tiptap/commit/a2519468589e2baa44901a66a3a06b24dc8626d6)) ## [2.1.1](https://github.com/ueberdosis/tiptap/compare/v2.1.0...v2.1.1) (2023-08-16) **Note:** Version bump only for package tiptap # [2.1.0](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.14...v2.1.0) (2023-08-16) **Note:** Version bump only for package tiptap # [2.1.0-rc.14](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.13...v2.1.0-rc.14) (2023-08-11) **Note:** Version bump only for package tiptap # [2.1.0-rc.13](https://github.com/ueberdosis/tiptap-workspace/compare/v2.0.4...v2.1.0-rc.13) (2023-08-11) ### Bug Fixes - **demos:** add missing extensions ([6383fd5](https://github.com/ueberdosis/tiptap-workspace/commit/6383fd54080b2ad555286cd0e7c4ad880200200f)) - **demos:** update deps ([05a2edf](https://github.com/ueberdosis/tiptap-workspace/commit/05a2edfc16e297effa86d1583fb1680be0320f25)) - **link:** Fix autolinking and pasting ([#4292](https://github.com/ueberdosis/tiptap-workspace/issues/4292)) ([a2ce734](https://github.com/ueberdosis/tiptap-workspace/commit/a2ce734d681039fd61d402987e0842ddef6af595)) - **strikethrough:** update strikethrough shortcut ([#4288](https://github.com/ueberdosis/tiptap-workspace/issues/4288)) ([fd35db4](https://github.com/ueberdosis/tiptap-workspace/commit/fd35db4d090d9fdfef1196fb1f6f858f13cf53d1)) # [2.1.0-rc.12](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.11...v2.1.0-rc.12) (2023-07-14) # [2.1.0-rc.11](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.10...v2.1.0-rc.11) (2023-07-07) ### Bug Fixes - **core:** fix cut and insertContentAt functions ([#4187](https://github.com/ueberdosis/tiptap-workspace/issues/4187)) ([6b65af8](https://github.com/ueberdosis/tiptap-workspace/commit/6b65af8fc31ffbbcf79b89bfdaceee7aadbf3f27)) - **tests:** fix link rel tests ([c1d1854](https://github.com/ueberdosis/tiptap-workspace/commit/c1d18543b03b1fb6b99a2f3546aa5da10c919920)) # [2.1.0-rc.10](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.9...v2.1.0-rc.10) (2023-07-07) ### Bug Fixes - do not use window.open for links in readonly mode ([#4073](https://github.com/ueberdosis/tiptap-workspace/issues/4073)) ([4bca77e](https://github.com/ueberdosis/tiptap-workspace/commit/4bca77e4e9c96596d584cf71b8d831dc2ab0a421)) - **extension-link:** fixes link going to wrong url ([#4078](https://github.com/ueberdosis/tiptap-workspace/issues/4078)) ([3053865](https://github.com/ueberdosis/tiptap-workspace/commit/30538654752ab3ded6e56c869745ccacc8cdeabc)) - **link:** Prevent auto-linking when typing URL inside inline code mark ([#4160](https://github.com/ueberdosis/tiptap-workspace/issues/4160)) ([b24df3a](https://github.com/ueberdosis/tiptap-workspace/commit/b24df3aa4c2f3fdb2ed6122d2d32fb7c4e07f2af)) - **react:** check props.clientRect before creating ReactRenderer ([#4138](https://github.com/ueberdosis/tiptap-workspace/issues/4138)) ([d710846](https://github.com/ueberdosis/tiptap-workspace/commit/d710846ecb6a3059dfbc21300b9a4b887a8defa3)) - **react:** update select state when text selection is around node ([#4148](https://github.com/ueberdosis/tiptap-workspace/issues/4148)) ([5bd5bd4](https://github.com/ueberdosis/tiptap-workspace/commit/5bd5bd4ecdbe1f952b23d5f5efad16b6ed5cc44f)) ### Features - **docs:** added cdn installation guide ([#4045](https://github.com/ueberdosis/tiptap-workspace/issues/4045)) ([8536508](https://github.com/ueberdosis/tiptap-workspace/commit/853650885b7c4f2217a4b37bc42ee65b4cd6026a)) # [2.1.0-rc.9](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.8...v2.1.0-rc.9) (2023-06-15) # [2.1.0-rc.8](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.7...v2.1.0-rc.8) (2023-05-25) # [2.1.0-rc.7](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.6...v2.1.0-rc.7) (2023-05-25) # [2.1.0-rc.5](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.4...v2.1.0-rc.5) (2023-05-25) ### Bug Fixes - **extension-link:** fix paste handling ([d19267e](https://github.com/ueberdosis/tiptap-workspace/commit/d19267ecefabf08e4bd27c52424ed83991ce7270)) - typo in commands.md ([a2a9822](https://github.com/ueberdosis/tiptap-workspace/commit/a2a9822f240df2301932a67225d9adcac2f18807)) ### Features - add tiptap class ([614fc80](https://github.com/ueberdosis/tiptap-workspace/commit/614fc8082c376bf3c40a05c23ceda6b4a6fbf8d0)) # [2.1.0-rc.4](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.3...v2.1.0-rc.4) (2023-04-27) ### Bug Fixes - **link:** fix links autolinking when not needed ([#3989](https://github.com/ueberdosis/tiptap-workspace/issues/3989)) ([71946c1](https://github.com/ueberdosis/tiptap-workspace/commit/71946c18accf8a2e8192951de870f84e25f58ed5)) # [2.1.0-rc.3](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.2...v2.1.0-rc.3) (2023-04-26) ### Bug Fixes - **core:** remove configure from extend functionality ([4af54da](https://github.com/ueberdosis/tiptap-workspace/commit/4af54da3e09c69c0b5326f9952d456436855914d)) # [2.1.0-rc.2](https://github.com/ueberdosis/tiptap-workspace/compare/v2.0.3...v2.1.0-rc.2) (2023-04-26) ### Bug Fixes - **extension-link:** fix link not being kept when pasting url with link ([#3975](https://github.com/ueberdosis/tiptap-workspace/issues/3975)) ([e7d7d49](https://github.com/ueberdosis/tiptap-workspace/commit/e7d7d496376c8c11e24c342e20bd179a6ea7dcee)) # [2.1.0-rc.1](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.0...v2.1.0-rc.1) (2023-04-12) ### Bug Fixes - **bubble-menu:** fix debounce not working with collab/collaboration cursor ([#3956](https://github.com/ueberdosis/tiptap-workspace/issues/3956)) ([e8cef04](https://github.com/ueberdosis/tiptap-workspace/commit/e8cef0404b5039ec2657536976b8b31931afd337)) # [2.1.0-rc.0](https://github.com/ueberdosis/tiptap-workspace/compare/v2.0.2...v2.1.0-rc.0) (2023-04-05) ### Bug Fixes - clear nodes when cursor at start of empty isolating parent ([#3943](https://github.com/ueberdosis/tiptap-workspace/issues/3943)) ([7278ee2](https://github.com/ueberdosis/tiptap-workspace/commit/7278ee2b05de2f96efddf3b1dc3bfd3d52262cbb)) - **list-item:** improve delete behaviour ([09782a5](https://github.com/ueberdosis/tiptap-workspace/commit/09782a5b066b2f9f52f0ef1d8701d6e5b063dc63)) - **lists:** improve list behaviour ([684e48a](https://github.com/ueberdosis/tiptap-workspace/commit/684e48a4a7778a0140c94f0c5345db868174ad81)) - Update peerDependencies to fix lerna version tasks ([#3914](https://github.com/ueberdosis/tiptap-workspace/issues/3914)) ([0c1bba3](https://github.com/ueberdosis/tiptap-workspace/commit/0c1bba3137b535776bcef95ff3c55e13f5a2db46)) # [2.1.0-rc.12](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.11...v2.1.0-rc.12) (2023-07-14) **Note:** Version bump only for package tiptap # [2.1.0-rc.11](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.10...v2.1.0-rc.11) (2023-07-07) ### Bug Fixes - **core:** fix cut and insertContentAt functions ([#4187](https://github.com/ueberdosis/tiptap/issues/4187)) ([6b65af8](https://github.com/ueberdosis/tiptap/commit/6b65af8fc31ffbbcf79b89bfdaceee7aadbf3f27)) - **tests:** fix link rel tests ([c1d1854](https://github.com/ueberdosis/tiptap/commit/c1d18543b03b1fb6b99a2f3546aa5da10c919920)) # [2.1.0-rc.10](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.9...v2.1.0-rc.10) (2023-07-07) ### Bug Fixes - do not use window.open for links in readonly mode ([#4073](https://github.com/ueberdosis/tiptap/issues/4073)) ([4bca77e](https://github.com/ueberdosis/tiptap/commit/4bca77e4e9c96596d584cf71b8d831dc2ab0a421)) - **extension-link:** fixes link going to wrong url ([#4078](https://github.com/ueberdosis/tiptap/issues/4078)) ([3053865](https://github.com/ueberdosis/tiptap/commit/30538654752ab3ded6e56c869745ccacc8cdeabc)) - **link:** Prevent auto-linking when typing URL inside inline code mark ([#4160](https://github.com/ueberdosis/tiptap/issues/4160)) ([b24df3a](https://github.com/ueberdosis/tiptap/commit/b24df3aa4c2f3fdb2ed6122d2d32fb7c4e07f2af)) - **react:** check props.clientRect before creating ReactRenderer ([#4138](https://github.com/ueberdosis/tiptap/issues/4138)) ([d710846](https://github.com/ueberdosis/tiptap/commit/d710846ecb6a3059dfbc21300b9a4b887a8defa3)) - **react:** update select state when text selection is around node ([#4148](https://github.com/ueberdosis/tiptap/issues/4148)) ([5bd5bd4](https://github.com/ueberdosis/tiptap/commit/5bd5bd4ecdbe1f952b23d5f5efad16b6ed5cc44f)) ### Features - **docs:** added cdn installation guide ([#4045](https://github.com/ueberdosis/tiptap/issues/4045)) ([8536508](https://github.com/ueberdosis/tiptap/commit/853650885b7c4f2217a4b37bc42ee65b4cd6026a)) # [2.1.0-rc.9](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.8...v2.1.0-rc.9) (2023-06-15) ### Bug Fixes - **list-item:** improve delete behaviour ([09782a5](https://github.com/ueberdosis/tiptap/commit/09782a5b066b2f9f52f0ef1d8701d6e5b063dc63)) - **lists:** improve list behaviour ([684e48a](https://github.com/ueberdosis/tiptap/commit/684e48a4a7778a0140c94f0c5345db868174ad81)) # [2.1.0-rc.8](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.7...v2.1.0-rc.8) (2023-05-25) **Note:** Version bump only for package tiptap # [2.1.0-rc.7](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.6...v2.1.0-rc.7) (2023-05-25) **Note:** Version bump only for package tiptap # [2.1.0-rc.6](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.5...v2.1.0-rc.6) (2023-05-25) **Note:** Version bump only for package tiptap # [2.1.0-rc.5](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.4...v2.1.0-rc.5) (2023-05-25) ### Bug Fixes - **extension-link:** fix paste handling ([d19267e](https://github.com/ueberdosis/tiptap/commit/d19267ecefabf08e4bd27c52424ed83991ce7270)) - typo in commands.md ([a2a9822](https://github.com/ueberdosis/tiptap/commit/a2a9822f240df2301932a67225d9adcac2f18807)) ### Features - add tiptap class ([614fc80](https://github.com/ueberdosis/tiptap/commit/614fc8082c376bf3c40a05c23ceda6b4a6fbf8d0)) # [2.1.0-rc.4](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.3...v2.1.0-rc.4) (2023-04-27) ### Bug Fixes - **link:** fix links autolinking when not needed ([#3989](https://github.com/ueberdosis/tiptap/issues/3989)) ([71946c1](https://github.com/ueberdosis/tiptap/commit/71946c18accf8a2e8192951de870f84e25f58ed5)) # [2.1.0-rc.3](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.2...v2.1.0-rc.3) (2023-04-26) ### Bug Fixes - **core:** remove configure from extend functionality ([4af54da](https://github.com/ueberdosis/tiptap/commit/4af54da3e09c69c0b5326f9952d456436855914d)) # [2.1.0-rc.2](https://github.com/ueberdosis/tiptap/compare/v2.0.3...v2.1.0-rc.2) (2023-04-26) ### Bug Fixes - **extension-link:** fix link not being kept when pasting url with link ([#3975](https://github.com/ueberdosis/tiptap/issues/3975)) ([e7d7d49](https://github.com/ueberdosis/tiptap/commit/e7d7d496376c8c11e24c342e20bd179a6ea7dcee)) # [2.1.0-rc.1](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.0...v2.1.0-rc.1) (2023-04-12) ### Bug Fixes - **bubble-menu:** fix debounce not working with collab/collaboration cursor ([#3956](https://github.com/ueberdosis/tiptap/issues/3956)) ([e8cef04](https://github.com/ueberdosis/tiptap/commit/e8cef0404b5039ec2657536976b8b31931afd337)) # [2.1.0-rc.0](https://github.com/ueberdosis/tiptap/compare/v2.0.2...v2.1.0-rc.0) (2023-04-05) ### Bug Fixes - clear nodes when cursor at start of empty isolating parent ([#3943](https://github.com/ueberdosis/tiptap/issues/3943)) ([7278ee2](https://github.com/ueberdosis/tiptap/commit/7278ee2b05de2f96efddf3b1dc3bfd3d52262cbb)) - Update peerDependencies to fix lerna version tasks ([#3914](https://github.com/ueberdosis/tiptap/issues/3914)) ([0c1bba3](https://github.com/ueberdosis/tiptap/commit/0c1bba3137b535776bcef95ff3c55e13f5a2db46)) # [2.1.0-rc.0](https://github.com/ueberdosis/tiptap/compare/v2.0.2...v2.1.0-rc.0) (2023-04-05) ### Bug Fixes - clear nodes when cursor at start of empty isolating parent ([#3943](https://github.com/ueberdosis/tiptap/issues/3943)) ([7278ee2](https://github.com/ueberdosis/tiptap/commit/7278ee2b05de2f96efddf3b1dc3bfd3d52262cbb)) - Update peerDependencies to fix lerna version tasks ([#3914](https://github.com/ueberdosis/tiptap/issues/3914)) ([0c1bba3](https://github.com/ueberdosis/tiptap/commit/0c1bba3137b535776bcef95ff3c55e13f5a2db46)) - **bubble-menu:** fix debounce not working with collab/collaboration cursor ([#3956](https://github.com/ueberdosis/tiptap/issues/3956)) ([a78f8cd](https://github.com/ueberdosis/tiptap/commit/a78f8cd9646008e4db938fa3c22b0714c8bb5849)) ## [2.0.3](https://github.com/ueberdosis/tiptap/compare/v2.0.2...v2.0.3) (2023-04-13) ### Bug Fixes - **bubble-menu:** fix debounce not working with collab/collaboration cursor ([#3956](https://github.com/ueberdosis/tiptap/issues/3956)) ([e8cef04](https://github.com/ueberdosis/tiptap/commit/e8cef0404b5039ec2657536976b8b31931afd337)) ## [2.0.2](https://github.com/ueberdosis/tiptap/compare/v2.0.1...v2.0.2) (2023-04-03) ### Bug Fixes - **react:** fix rebinding events not overwriting editor.on ([#3935](https://github.com/ueberdosis/tiptap/issues/3935)) ([64ab357](https://github.com/ueberdosis/tiptap/commit/64ab3570c1e86a65f5022793acb0292d8972dcd7)) ### Features - add box-shadow to collab demo ([c5496c1](https://github.com/ueberdosis/tiptap/commit/c5496c1b27783150dafb5ebdf6bda43648a46316)) - landingpage demo ([#3925](https://github.com/ueberdosis/tiptap/issues/3925)) ([958925f](https://github.com/ueberdosis/tiptap/commit/958925f2560ca786cd0cf52b83b7ae51deb7dd77)) - Tiptap collab demo styling ([87840b0](https://github.com/ueberdosis/tiptap/commit/87840b0f0821ca65d9f104d9c90512021aa70113)) ## [2.0.1](https://github.com/ueberdosis/tiptap/compare/v2.0.0...v2.0.1) (2023-03-30) ### Bug Fixes - Update peerDependencies to fix lerna version tasks ([#3914](https://github.com/ueberdosis/tiptap/issues/3914)) ([0534f76](https://github.com/ueberdosis/tiptap/commit/0534f76401bf5399c01ca7f39d87f7221d91b4f7)) ## [2.0.0](https://github.com/ueberdosis/tiptap/compare/tiptap@1.32.2...v2.0.0) (2023-03-29) ## What's Changed - Fix sending of emptystring class for Prosemirror decoration by @ascott18 in https://github.com/ueberdosis/tiptap/pull/1004 - build(deps): bump actions/cache from v2.1.4 to v2.1.5 by @dependabot in https://github.com/ueberdosis/tiptap/pull/1024 - build(deps): bump actions/upload-artifact from v2.2.2 to v2.2.3 by @dependabot in https://github.com/ueberdosis/tiptap/pull/1025 - Add install instructions by @MarcelloTheArcane in https://github.com/ueberdosis/tiptap/pull/1196 - Fix a small typo by @swanson in https://github.com/ueberdosis/tiptap/pull/1211 - Add missing word by @swanson in https://github.com/ueberdosis/tiptap/pull/1216 - Clarify table header documentation by @swanson in https://github.com/ueberdosis/tiptap/pull/1215 - Typo fix by @swanson in https://github.com/ueberdosis/tiptap/pull/1217 - Make Horizontal Rule compatible with Typography extension by @chrisarmstrong in https://github.com/ueberdosis/tiptap/pull/1241 - Fix returning true/false in can().chain().run() by @Markario in https://github.com/ueberdosis/tiptap/pull/1252 - [Docs] Improve example integration with Laravel Livewire by @iksaku in https://github.com/ueberdosis/tiptap/pull/1255 - feat: better types for Vue 2 by @zcuric in https://github.com/ueberdosis/tiptap/pull/1253 - Fix typo by @DannyFeliz in https://github.com/ueberdosis/tiptap/pull/1262 - HorizontalRule is included in defaultExtensions by @Duncank in https://github.com/ueberdosis/tiptap/pull/1267 - VueRenderer's ref is undefined when in production mode by @thechrisoshow in https://github.com/ueberdosis/tiptap/pull/1271 - feat: expose node helpers by @zcuric in https://github.com/ueberdosis/tiptap/pull/1278 - New Feature: Generate JSON from HTML by @hanspagel in https://github.com/ueberdosis/tiptap/pull/1273 - feat: export mark helpers by @zcuric in https://github.com/ueberdosis/tiptap/pull/1301 - When text align is default, don't add a style attribute by @robguthrie in https://github.com/ueberdosis/tiptap/pull/1251 - docs: complete list of extensions with changed name by @Deckluhm in https://github.com/ueberdosis/tiptap/pull/1305 - fix(core): Increment `i` in `defaultBlockAt` by @andreavaccari in https://github.com/ueberdosis/tiptap/pull/1315 - Fix text-align extension url by @ralbear in https://github.com/ueberdosis/tiptap/pull/1325 - docs: fix typo by @Priestch in https://github.com/ueberdosis/tiptap/pull/1339 - Allow passing of DependencyList to useEditor by @YousefED in https://github.com/ueberdosis/tiptap/pull/1376 - a small clerical error? by @akirarika in https://github.com/ueberdosis/tiptap/pull/1380 - Make HTML in docs valid by @MoPaMo in https://github.com/ueberdosis/tiptap/pull/1381 - Wording improvement by @jonathanmach in https://github.com/ueberdosis/tiptap/pull/1389 - Prevent tiptap from creating duplicate style tags when injecting css by @mmachatschek in https://github.com/ueberdosis/tiptap/pull/1399 - Adding type definition for result and removing the ts-nocheck by @sereneinserenade in https://github.com/ueberdosis/tiptap/pull/1419 - Fix name of FloatingMenu by @shadow-light in https://github.com/ueberdosis/tiptap/pull/1429 - New extensions: add subscript and superscript extensions (including docs and tests) by @hanspagel in https://github.com/ueberdosis/tiptap/pull/1404 - Exclude superscript from subscript, and vice versa. by @BrianHung in https://github.com/ueberdosis/tiptap/pull/1436 - Add keyboard shortcuts to toggle superscript and subscript marks. by @BrianHung in https://github.com/ueberdosis/tiptap/pull/1437 - Make drop cursor default to regular caret color by @shadow-light in https://github.com/ueberdosis/tiptap/pull/1444 - use forwardRef for react wrappers by @YousefED in https://github.com/ueberdosis/tiptap/pull/1452 - Mention: Add text attribute by @tomhrtly in https://github.com/ueberdosis/tiptap/pull/1322 - Fix removal of textStyle mark when any style resets by @bttger in https://github.com/ueberdosis/tiptap/pull/1465 - Fix parsing of mention nodes by @shadow-light in https://github.com/ueberdosis/tiptap/pull/1471 - Correct default for dropcursor color in docs by @shadow-light in https://github.com/ueberdosis/tiptap/pull/1479 - Improve gapcursor docs by @carlobeltrame in https://github.com/ueberdosis/tiptap/pull/1497 - VueRenderer documentation with version 3 by @Tazi0 in https://github.com/ueberdosis/tiptap/pull/1491 - Update introduction.md by @phillduffy in https://github.com/ueberdosis/tiptap/pull/1509 - Link to contribution guidelines in CONTRIBUTING.md by @robertvanhoesel in https://github.com/ueberdosis/tiptap/pull/1541 - build(deps): bump actions/setup-node from 2.1.5 to 2.2.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/1544 - export createTable by @YousefED in https://github.com/ueberdosis/tiptap/pull/1469 - doc update: onSelection → onSelectionUpdate by @forresto in https://github.com/ueberdosis/tiptap/pull/1555 - update task-item.ts nodeview to update data-checked by @BrianHung in https://github.com/ueberdosis/tiptap/pull/1567 - Fix typo by @JavierMartinz in https://github.com/ueberdosis/tiptap/pull/1587 - Replace node-sass with dart sass and fix deprecation warning by @mmachatschek in https://github.com/ueberdosis/tiptap/pull/1590 - Readd russian history shortcuts by @mmachatschek in https://github.com/ueberdosis/tiptap/pull/1589 - Fix custom start for ordered lists by @mmachatschek in https://github.com/ueberdosis/tiptap/pull/1594 - Doc fix: Remove braces from isEmpty & isEditable by @WilliamIPark in https://github.com/ueberdosis/tiptap/pull/1599 - Export NodeViewRendererOptions by @sibiraj-s in https://github.com/ueberdosis/tiptap/pull/1607 - Update hostic-dom to fix style attributes by @sibiraj-s in https://github.com/ueberdosis/tiptap/pull/1618 - fix: export text align extension options by @iamursky in https://github.com/ueberdosis/tiptap/pull/1592 - fix: export starter kit extension options by @iamursky in https://github.com/ueberdosis/tiptap/pull/1593 - Adding types to Linter and making the structure a bit easier by @sereneinserenade in https://github.com/ueberdosis/tiptap/pull/1492 - Additional input rules for typography by @arthurmcgregor in https://github.com/ueberdosis/tiptap/pull/1624 - chore: add repository for all packages.json by @iamandrewluca in https://github.com/ueberdosis/tiptap/pull/1628 - Fix typo by @ValentaTomas in https://github.com/ueberdosis/tiptap/pull/1634 - Change TextAlignOptions to interface (not type) by @arthurmcgregor in https://github.com/ueberdosis/tiptap/pull/1623 - Allow a rule to be skipped from the getAttributes callback by @joevallender in https://github.com/ueberdosis/tiptap/pull/1625 - Fix multi character suggest by @flaviouk in https://github.com/ueberdosis/tiptap/pull/1620 - Provide more context to update function to enable fewer re-renders by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/1648 - Examples: Syntax highlighting for React by @hanspagel in https://github.com/ueberdosis/tiptap/pull/1583 - Apply the correct regex in markPasteRule by @joevallender in https://github.com/ueberdosis/tiptap/pull/1671 - Fix typo by @Spone in https://github.com/ueberdosis/tiptap/pull/1693 - build(deps): bump actions/setup-node from 2.2.0 to 2.4.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/1697 - fix: use correct state when doc changed externally by @dkrym in https://github.com/ueberdosis/tiptap/pull/1646 - ✨ Add CreateNodeFromContentOptions to insertContent by @castroCrea in https://github.com/ueberdosis/tiptap/pull/1678 - Use correct reference for options.editorProps by @robertvanhoesel in https://github.com/ueberdosis/tiptap/pull/1540 - ✨ Add typography trademark by @castroCrea in https://github.com/ueberdosis/tiptap/pull/1699 - Menu improvements by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/1714 - Docs: Disable history demo buttons when commands are not available by @domnantas in https://github.com/ueberdosis/tiptap/pull/1721 - fix some react focus issues by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/1724 - Update alpine docs by @sibiraj-s in https://github.com/ueberdosis/tiptap/pull/1733 - Packages: Add a new `Color` extension to set the text color by @hanspagel in https://github.com/ueberdosis/tiptap/pull/1744 - docs: add color picker to color extension demo by @domnantas in https://github.com/ueberdosis/tiptap/pull/1790 - Fix Editor Reactivity by @nVitius in https://github.com/ueberdosis/tiptap/pull/1804 - Add missing comma in example by @carlobeltrame in https://github.com/ueberdosis/tiptap/pull/1849 - Allow triggering suggestions without prefix space by @jkosir in https://github.com/ueberdosis/tiptap/pull/1826 - fix: change `this.value` to `value` in the vue examples with v-model by @MiloLug in https://github.com/ueberdosis/tiptap/pull/1813 - Fix: Don’t initialize tippy on requestAnimationFrame to avoid race conditions by @enriquecastl in https://github.com/ueberdosis/tiptap/pull/1820 - ✨ Follow Ref on ForwardRef component in reactRenderer by @castroCrea in https://github.com/ueberdosis/tiptap/pull/1690 - feat: add extendEmptyMarkRange option to mark commands by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/1859 - Include children in placeholder plugin by @nickdbush in https://github.com/ueberdosis/tiptap/pull/1416 - Horizontal rule demo: add selected style by @cadars in https://github.com/ueberdosis/tiptap/pull/1848 - feat: add getText() and generateText() methods (fix #1428) by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/1875 - Fix usage example of CollaborationCursor by @carlobeltrame in https://github.com/ueberdosis/tiptap/pull/1911 - Add type for async items on suggestions (fix TS strict types complain) by @d8vjork in https://github.com/ueberdosis/tiptap/pull/1912 - Fix: code-block-lowlight child extensions do not highlight code by @enriquecastl in https://github.com/ueberdosis/tiptap/pull/1917 - Use pasteRegex in addPasteRules by @jvissers in https://github.com/ueberdosis/tiptap/pull/1922 - Docs: Clear up Prosemirror EditorProps usage by @domnantas in https://github.com/ueberdosis/tiptap/pull/1918 - Add enableCoreExtensions flag by @flaviouk in https://github.com/ueberdosis/tiptap/pull/1923 - Docs: Update command names in upgrade guide by @jakedolan in https://github.com/ueberdosis/tiptap/pull/1906 - Fix: nodeInputRule() support for group match by @nokola in https://github.com/ueberdosis/tiptap/pull/1574 - Fix "destory" method in view plugins. by @KaneCohen in https://github.com/ueberdosis/tiptap/pull/1882 - Fix 'Edit on Github' link url for examples in docs by @mmachatschek in https://github.com/ueberdosis/tiptap/pull/1929 - New example for custom documents (to force a heading on the top) by @hanspagel in https://github.com/ueberdosis/tiptap/pull/1948 - Added better types for event emitter by @HuiiBuh in https://github.com/ueberdosis/tiptap/pull/1959 - Use ref to move contentDOM by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/1960 - fix: compatibility with lowlight v2 by @fengzilong in https://github.com/ueberdosis/tiptap/pull/1939 - build(deps): bump actions/setup-node from 2.4.0 to 2.4.1 by @dependabot in https://github.com/ueberdosis/tiptap/pull/1978 - Fix typo in hard-break.md by @davidkrijgsman in https://github.com/ueberdosis/tiptap/pull/1988 - Added Next.js installation guide & express setup for React by @alb in https://github.com/ueberdosis/tiptap/pull/1984 - Fixed typo in React installation guide by @alb in https://github.com/ueberdosis/tiptap/pull/1989 - docs: update styling by @hzpeng57 in https://github.com/ueberdosis/tiptap/pull/1998 - React collaboration demo by @svenadlung in https://github.com/ueberdosis/tiptap/pull/1991 - Integrate input rules and paste rules into the core by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/1997 - Changing use of InputRule to textInputRule for Savvy example by @jakedolan in https://github.com/ueberdosis/tiptap/pull/2007 - docs: correct the wording by @mittalyashu in https://github.com/ueberdosis/tiptap/pull/2012 - Fix #2016 Image input rule by @nokola in https://github.com/ueberdosis/tiptap/pull/2020 - Improve `ReactRenderer` types by @rfgamaral in https://github.com/ueberdosis/tiptap/pull/2011 - Add `editor` dependency when registering `BubbleMenuPlugin` by @ValentaTomas in https://github.com/ueberdosis/tiptap/pull/2018 - Allow to use commands within InputRule and PasteRule by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/2035 - build(deps): bump actions/checkout from 2.3.4 to 2.3.5 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2051 - Add extension storage by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/2069 - Separate drags from drops in stopEvent by @thatsjonsense in https://github.com/ueberdosis/tiptap/pull/2070 - Add editor to items prop in suggestion plugin by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/2082 - Check node type above custom update fn by @thatsjonsense in https://github.com/ueberdosis/tiptap/pull/2081 - Add savvy example tests by @donovanglover in https://github.com/ueberdosis/tiptap/pull/2043 - Add unit tests for demos/src/Examples/Minimal/Vue by @AlexandruValeanu in https://github.com/ueberdosis/tiptap/pull/2047 - Added tests for Menus example by @alb in https://github.com/ueberdosis/tiptap/pull/2052 - Docs: Fixing onUpdate example by @chris-sev in https://github.com/ueberdosis/tiptap/pull/2084 - Fix menu example in doc by @phoenixgao in https://github.com/ueberdosis/tiptap/pull/2089 - Replace `defaultOptions` with `addOptions` by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/2088 - docs: fix typo by @Deckluhm in https://github.com/ueberdosis/tiptap/pull/2093 - Use the new storage feature for the `CollaborationCursor` extension by @hanspagel in https://github.com/ueberdosis/tiptap/pull/2096 - Improve behavior when using insertContent by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/2147 - build(deps): bump actions/checkout from 2.3.5 to 2.4.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2145 - Switch from hostic dom to zeed dom by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/2151 - fix typo in events.md by @millerrafi in https://github.com/ueberdosis/tiptap/pull/2152 - update getJSON return type to JSONContent by @lecstor in https://github.com/ueberdosis/tiptap/pull/2153 - Update image.md by @georgemandis in https://github.com/ueberdosis/tiptap/pull/2154 - update zeed dom by @floriankrueger in https://github.com/ueberdosis/tiptap/pull/2155 - Floating menu - remove composition check by @dkrym in https://github.com/ueberdosis/tiptap/pull/2137 - Remove console.log statement from codeblock-lowlight-plugin file by @enriquecastl in https://github.com/ueberdosis/tiptap/pull/2168 - Ignore iOS mutations when unfocused by @thatsjonsense in https://github.com/ueberdosis/tiptap/pull/2170 - feat: Allow array of extensions for `enableInputRules` and `enablePasteRules` by @aguingand in https://github.com/ueberdosis/tiptap/pull/2119 - Export type ColorOptions by @apaar97 in https://github.com/ueberdosis/tiptap/pull/2180 - Split vue and react variant for interactivity demo by @svenadlung in https://github.com/ueberdosis/tiptap/pull/2186 - Add `setEditable` to the Editor documentation by @floriankrueger in https://github.com/ueberdosis/tiptap/pull/2199 - Bump actions/cache from 2.1.5 to 2.1.7 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2207 - Bump actions/setup-node from 2.4.1 to 2.5.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2208 - feat(ReactNodeViewRenderer): Add `as` option and pass through to ReactRenderer by @jessicalc in https://github.com/ueberdosis/tiptap/pull/2213 - Add support for autolink by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/2226 - initialize autofocus selection in `createView` by @BrianHung in https://github.com/ueberdosis/tiptap/pull/2212 - Use named exports instead of default exports by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/2238 - Svelte Example: remove wrong `type="context"` tag by @duruer in https://github.com/ueberdosis/tiptap/pull/2240 - A brand new `CharacterCount` extension by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/2256 - join lists on toggleList by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/2260 - build(deps): bump actions/upload-artifact from 2.2.3 to 2.3.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2269 - fix: show FloatingMenu by default only if focused by @jaulz in https://github.com/ueberdosis/tiptap/pull/2275 - Improve backspace handling by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/2284 - Make sure editor is available on first render by @ryanto in https://github.com/ueberdosis/tiptap/pull/2282 - fix typo in floating menu docs by @nucleartux in https://github.com/ueberdosis/tiptap/pull/2290 - Add setup for plain js demos by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/2288 - build(deps): bump actions/upload-artifact from 2.3.0 to 2.3.1 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2300 - Remove `element.current` from `useEffect` in `BubbleMenu` and `FloatingMenu` by @ValentaTomas in https://github.com/ueberdosis/tiptap/pull/2297 - Using vue 2 and 3 when passing props to VueRenderer in Mention plugin by @domstrueboy in https://github.com/ueberdosis/tiptap/pull/2319 - Fix typo in readme by @stijndcl in https://github.com/ueberdosis/tiptap/pull/2333 - Fix typos in typescript.md by @hatefrad in https://github.com/ueberdosis/tiptap/pull/2339 - typo in docs/api/editor.md by @milahu in https://github.com/ueberdosis/tiptap/pull/2338 - Added setup script syntax to Vue 3 install docs by @NuroDev in https://github.com/ueberdosis/tiptap/pull/2324 - build(deps): bump actions/setup-node from 2.5.0 to 2.5.1 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2343 - change reactrenderer component type definition by @lukesmurray in https://github.com/ueberdosis/tiptap/pull/2327 - Export type FontFamilyOptions by @apaar97 in https://github.com/ueberdosis/tiptap/pull/2345 - Update vue3.md Grammar Error In Docs by @Aiyush-G in https://github.com/ueberdosis/tiptap/pull/2349 - Fix typo in contributing.md by @webri in https://github.com/ueberdosis/tiptap/pull/2352 - Vue3 CLI doesn't have "npm run dev" by @Aiyush-G in https://github.com/ueberdosis/tiptap/pull/2350 - fix: export type `Level` for external use by @webri in https://github.com/ueberdosis/tiptap/pull/2354 - add way to cancel inputrules and pasterules by @philippkuehn in https://github.com/ueberdosis/tiptap/pull/2368 - Mark `@tiptap/react` and `@tiptap/core` as side effect free by @dcastil in https://github.com/ueberdosis/tiptap/pull/2361 - Nuxt specific corrections by @gsqrt2 in https://github.com/ueberdosis/tiptap/pull/2410 - build(deps): bump nanoid from 3.1.30 to 3.2.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2419 - build(deps): bump node-fetch from 2.6.6 to 2.6.7 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2424 - fix: use toggleHeader from prosemirror-tables by @jpobley in https://github.com/ueberdosis/tiptap/pull/2412 - docs(nodes/image/react): remove v-if by @strdr4605 in https://github.com/ueberdosis/tiptap/pull/2461 - Fix: Typo in Focus Command Documentation of Editor by @AngadSethi in https://github.com/ueberdosis/tiptap/pull/2476 - expose hasAnchor to custom placeholder function by @YousefED in https://github.com/ueberdosis/tiptap/pull/2470 - Add key bindings for uppercase letters for bold, italic and underline by @mejo- in https://github.com/ueberdosis/tiptap/pull/2478 - Allow individual Typography rules to be disabled by @rfgamaral in https://github.com/ueberdosis/tiptap/pull/2449 - Docs/toc undo fix by @codemzy in https://github.com/ueberdosis/tiptap/pull/2484 - build(deps): bump nanoid from 3.1.30 to 3.2.0 in /demos by @dependabot in https://github.com/ueberdosis/tiptap/pull/2480 - chore: added visual studio code debugging launch options by @bdbch in https://github.com/ueberdosis/tiptap/pull/2695 - fix: don't override behaviour of Home / End in pc keymap by @scottsidwell in https://github.com/ueberdosis/tiptap/pull/2691 - fix: Mark the bubble/floating menu extensions as side effect free by @rfgamaral in https://github.com/ueberdosis/tiptap/pull/2677 - build(deps-dev): bump minimist from 1.2.5 to 1.2.6 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2667 - build(deps): bump minimist from 1.2.5 to 1.2.6 in /demos by @dependabot in https://github.com/ueberdosis/tiptap/pull/2672 - fix: prevent suggestions from being active when editor is readonly by @scottsidwell in https://github.com/ueberdosis/tiptap/pull/2692 - fix: Allow tippyOptions.getReferenceClientRect in bubble menu to be overridden by @fleon in https://github.com/ueberdosis/tiptap/pull/2668 - fix: allow [] as a prefix for task items by @bdbch in https://github.com/ueberdosis/tiptap/pull/2698 - fix: improve Vue nodeViewProps typing by @DanSnow in https://github.com/ueberdosis/tiptap/pull/2681 - fix: remove extension-text-style from character-cout peer dependencies by @pradel in https://github.com/ueberdosis/tiptap/pull/2696 - fix(extension-link): prevent parsing `javascript:` pseudo-protocol by @phenax in https://github.com/ueberdosis/tiptap/pull/2646 - build(deps): bump actions/cache from 2.1.7 to 3.0.2 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2701 - build(deps): bump actions/checkout from 2.4.0 to 3.0.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2699 - build(deps): bump actions/upload-artifact from 2.3.1 to 3.0.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2700 - build(deps): bump actions/setup-node from 2.5.1 to 3.1.1 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2705 - Add support for React 18 by @dcastil in https://github.com/ueberdosis/tiptap/pull/2676 - fix broken GuideContent demos not rendering because of unexpected use… by @bdbch in https://github.com/ueberdosis/tiptap/pull/2709 - Docs: fix file names in PHP installation by @aguingand in https://github.com/ueberdosis/tiptap/pull/2644 - Add support for CSS Modules by @XAHTEP26 in https://github.com/ueberdosis/tiptap/pull/2723 - Use vitejs/plugin-react and include react dependencies by @svenadlung in https://github.com/ueberdosis/tiptap/pull/2732 - build(deps-dev): bump minimist from 1.2.5 to 1.2.6 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2725 - build(deps): bump actions/checkout from 3.0.0 to 3.0.2 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2727 - feat: Add `onBeforeStart` and `onBeforeUpdate` handlers to the render function by @rfgamaral in https://github.com/ueberdosis/tiptap/pull/2628 - feat: Add a generic type for suggestion items by @rfgamaral in https://github.com/ueberdosis/tiptap/pull/2610 - Reduce bundle size of @tiptap/extension-table package by @enriquecastl in https://github.com/ueberdosis/tiptap/pull/2622 - Update Suggestion package.json by @dphuang2 in https://github.com/ueberdosis/tiptap/pull/2739 - fix: Support inline nodes with content in @tiptap/suggestion by @thatsjonsense in https://github.com/ueberdosis/tiptap/pull/2648 - Allow class attribute through setLink() by @Ken-vdE in https://github.com/ueberdosis/tiptap/pull/2758 - update people by @patrickbaber in https://github.com/ueberdosis/tiptap/pull/2776 - fix: properly calculate setDragImage position by @dilizarov in https://github.com/ueberdosis/tiptap/pull/2768 - Ensure VueNodeViewRenderer will use Editor's Global Vue Instance by @ralphschindler in https://github.com/ueberdosis/tiptap/pull/2604 - refactor(global): remove yarn in favor for npm by @bdbch in https://github.com/ueberdosis/tiptap/pull/2775 - add support for CSP nonces in createStyleTag by @fekle in https://github.com/ueberdosis/tiptap/pull/2601 - add validate option to link extension by @bdbch in https://github.com/ueberdosis/tiptap/pull/2781 - Cypress tests for examples by @bdbch in https://github.com/ueberdosis/tiptap/pull/2777 - build(deps): bump actions/setup-node from 3.1.1 to 3.2.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2793 - fix: extendMarkRange doesn't work when cursor is at end of mark, despite isActive() returning true for that mark by @JDinABox in https://github.com/ueberdosis/tiptap/pull/2717 - Expose "range" to textSerializer. Used in "getTextBetween" by @panta82 in https://github.com/ueberdosis/tiptap/pull/2684 - Export `getTextSerializersFromSchema` helper, and fix typo in its name by @sjdemartini in https://github.com/ueberdosis/tiptap/pull/2750 - fix: disable broken tests for experiements with further todo message by @bdbch in https://github.com/ueberdosis/tiptap/pull/2808 - Add `className` option and pass through to ReactRenderer by @anton-liubushkin in https://github.com/ueberdosis/tiptap/pull/2794 - Fix InputRule regex matcher ignoring non-text leaflets in textBefore by @bdbch in https://github.com/ueberdosis/tiptap/pull/2807 - Add option to allow task items to be checkable (uncontrolled) by @kaspnilsson in https://github.com/ueberdosis/tiptap/pull/2474 - feat: Required attributes by @thatsjonsense in https://github.com/ueberdosis/tiptap/pull/2640 - Update team by @montapro in https://github.com/ueberdosis/tiptap/pull/2791 - fix: Only trigger image input rule at the start or with a preceding space by @rfgamaral in https://github.com/ueberdosis/tiptap/pull/2830 - In Vue 2 VueRenderer, only Vue.extend() non-VueConstructor arguments by @ralphschindler in https://github.com/ueberdosis/tiptap/pull/2824 - fix(suggestion): :bug: make clientrect prop optional by @bdbch in https://github.com/ueberdosis/tiptap/pull/2813 - build(deps): bump actions/cache from 3.0.2 to 3.0.3 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2851 - Fixed(vue-2): `Avoid mutating a prop directly` error message to reproduce by @HondryTravis in https://github.com/ueberdosis/tiptap/pull/2834 - Add support for custom protocols in extension-link by @shaunabanana in https://github.com/ueberdosis/tiptap/pull/2832 - fix(textStyle): Null-safe parseHTML getting no color/fontFamily from HTMLElement styles by @d8vjork in https://github.com/ueberdosis/tiptap/pull/2825 - build(deps): bump actions/upload-artifact from 3.0.0 to 3.1.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2820 - Declare lowlight as a peerDependency in `@tiptap/extension-code-block-lowlight` by @enriquecastl in https://github.com/ueberdosis/tiptap/pull/2625 - add precommit hook for linting and automatic eslint fixes + update eslint packages by @bdbch in https://github.com/ueberdosis/tiptap/pull/2862 - Adding missing extensions to docs in https://tiptap.dev/api/extensions by @Lior539 in https://github.com/ueberdosis/tiptap/pull/2856 - docs(docs): add missing documentation for commands by @bdbch in https://github.com/ueberdosis/tiptap/pull/2861 - refactor: use index files for imports to simplify the export flow by @bdbch in https://github.com/ueberdosis/tiptap/pull/2870 - feat(extension/youtube): :sparkles: new youtube embed extension by @bdbch in https://github.com/ueberdosis/tiptap/pull/2814 - build(deps): bump actions/cache from 3.0.3 to 3.0.4 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2877 - build(deps): bump actions/setup-node from 3.2.0 to 3.3.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2878 - chore: migrate to new versions of prosemirror packages by @bdbch in https://github.com/ueberdosis/tiptap/pull/2854 - docs: improve docs for youtube extension by @svenadlung in https://github.com/ueberdosis/tiptap/pull/2902 - Allow setting `whiteSpace` style for `NodeViewWrapper` & `NodeViewContent` by @EvitanRelta in https://github.com/ueberdosis/tiptap/pull/2884 - refactor(maintainment): set dependency versions for prosemirror and y… by @bdbch in https://github.com/ueberdosis/tiptap/pull/2904 - feat: Allow multiple prefix characters to trigger a suggestion by @rfgamaral in https://github.com/ueberdosis/tiptap/pull/2896 - fix: editor don't has contentComponent attribute when suggestion onUp… by @Young6118 in https://github.com/ueberdosis/tiptap/pull/2916 - Fix state update after component unmounted by @SavKS in https://github.com/ueberdosis/tiptap/pull/2857 - docs: fix livewire attribute by @ccchapman in https://github.com/ueberdosis/tiptap/pull/2928 - build(deps): bump parse-url from 6.0.0 to 6.0.2 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2961 - fix(core): only respect text of node before current position (#2937) by @svenadlung in https://github.com/ueberdosis/tiptap/pull/2941 - chore: lint only staged files by @ahhshm in https://github.com/ueberdosis/tiptap/pull/2957 - fix(core): dont use selection for setContent replacement by @bdbch in https://github.com/ueberdosis/tiptap/pull/2934 - refactor: remove duplicated function by @ahhshm in https://github.com/ueberdosis/tiptap/pull/2956 - docs(figure): pass an object to `nodeInputRule` by @ahhshm in https://github.com/ueberdosis/tiptap/pull/2954 - docs: update alpine installation by @patrickbaber in https://github.com/ueberdosis/tiptap/pull/3081 - docs(extensions): mention community extensions and discussion thread by @sereneinserenade in https://github.com/ueberdosis/tiptap/pull/2991 - build(deps-dev): bump svelte from 3.48.0 to 3.49.0 in /demos by @dependabot in https://github.com/ueberdosis/tiptap/pull/2992 - build(deps-dev): bump svelte from 3.48.0 to 3.49.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2993 - fix(core): isNodeSelection, isTextSelection not always false by @kivikakk in https://github.com/ueberdosis/tiptap/pull/3089 - build(deps): bump actions/setup-node from 3.3.0 to 3.4.1 by @dependabot in https://github.com/ueberdosis/tiptap/pull/2998 - build(deps): bump terser from 5.14.1 to 5.14.2 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3009 - build(deps): bump actions/cache from 3.0.4 to 3.0.7 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3087 - Fix pasteRulesPlugin always adding one extra character to text range by @Billiam in https://github.com/ueberdosis/tiptap/pull/2968 - fix: let StarterKit be imported as common js module via named import by @sipec in https://github.com/ueberdosis/tiptap/pull/2967 - fix(core): createCan command props shouldn't try dispatch (#3025) by @kivikakk in https://github.com/ueberdosis/tiptap/pull/3026 - build(deps): bump actions/cache from 3.0.7 to 3.0.8 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3112 - fix(core): setNodeSelection should not clamp pos by Selection.atStart/atEnd by @kivikakk in https://github.com/ueberdosis/tiptap/pull/3091 - Make Suggestion extension use view.dom instead of document by @Faleij in https://github.com/ueberdosis/tiptap/pull/3093 - fix(core): make setEditable trigger onUpdate function by @bdbch in https://github.com/ueberdosis/tiptap/pull/2935 - fix: fix React Node View render problem in React 18 by @Darmody in https://github.com/ueberdosis/tiptap/pull/2985 - feature(core): add exit handling for marks by @bdbch in https://github.com/ueberdosis/tiptap/pull/2925 - build(deps-dev): bump vite from 2.9.12 to 2.9.13 in /demos by @dependabot in https://github.com/ueberdosis/tiptap/pull/3141 - build(deps-dev): bump vite from 2.9.12 to 2.9.13 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3145 - fix: vue inject grammar warning by @zhxqc in https://github.com/ueberdosis/tiptap/pull/3144 - fix(core): make setEditable trigger all 'update' listeners by @Rhys-T in https://github.com/ueberdosis/tiptap/pull/3140 - fix: Typo by @NagariaHussain in https://github.com/ueberdosis/tiptap/pull/3132 - docs: fix naming by @masl in https://github.com/ueberdosis/tiptap/pull/3151 - Include bubble menu element when checking if the editor view still has focus by @StefKors in https://github.com/ueberdosis/tiptap/pull/3150 - Fix typo in docs by @carlobeltrame in https://github.com/ueberdosis/tiptap/pull/3162 - fix(extension-code-block-lowlight): Bump lowlight to 2.7.0, remove outdated @types by @tarngerine in https://github.com/ueberdosis/tiptap/pull/3002 - fix(core): insert PasteRule Node at matched position (#2942) by @edlb in https://github.com/ueberdosis/tiptap/pull/2943 - add-empty-editor-class-to-root-div by @BrianHung in https://github.com/ueberdosis/tiptap/pull/2665 - build(deps): bump parse-path from 4.0.4 to 5.0.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3178 - fix: move React `flushSync` to microtask by @sampi in https://github.com/ueberdosis/tiptap/pull/3188 - Fix bubble menu and floating menu being available when editor is not editable by @bdbch in https://github.com/ueberdosis/tiptap/pull/3195 - feat: Add alias condition to code-block-lowlight by @dngwoodo in https://github.com/ueberdosis/tiptap/pull/3155 - feat(extension-typography): add servicemark input rule by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3220 - fix(types): fix link and table type errors by @johnfraney in https://github.com/ueberdosis/tiptap/pull/3208 - test: fix failing test by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3230 - feat(extension-link): Change autolink to only apply after breaking a word by @C-Hess in https://github.com/ueberdosis/tiptap/pull/3232 - chore(maintainment): :rocket: update prosemirror packages by @bdbch in https://github.com/ueberdosis/tiptap/pull/3237 - fix(core): Can() does not work for setting marks by @C-Hess in https://github.com/ueberdosis/tiptap/pull/3223 - Ensure text blocks exist before referencing them by @ScopeyNZ in https://github.com/ueberdosis/tiptap/pull/3251 - fix(core): InputRules does not work for ranges containing multiple text nodes by @hamflx in https://github.com/ueberdosis/tiptap/pull/3205 - fix(core) - support attributes being null/undefined by @albertogiunta in https://github.com/ueberdosis/tiptap/pull/3245 - fix: set default allowedPrefixes null by @Matrixbirds in https://github.com/ueberdosis/tiptap/pull/3239 - fix(extension/link): fix last word value being undefined by @bdbch in https://github.com/ueberdosis/tiptap/pull/3258 - build(deps): bump d3-color from 3.0.1 to 3.1.0 in /demos by @dependabot in https://github.com/ueberdosis/tiptap/pull/3260 - docs: link YouTube node docs to proper GitHub url by @nielslanting in https://github.com/ueberdosis/tiptap/pull/3283 - fix: typo in docs by @danielyuenhx in https://github.com/ueberdosis/tiptap/pull/3265 - Fixed dragged text not being deleted after drop on another editor by @LuchoCateura in https://github.com/ueberdosis/tiptap/pull/3279 - Fixed using both color and highlight together by @nkonev in https://github.com/ueberdosis/tiptap/pull/3311 - Cleanup linkifyjs when the editor is destroyed by @educastellano in https://github.com/ueberdosis/tiptap/pull/3316 - Feature/youtube parameters by @LuchoCateura in https://github.com/ueberdosis/tiptap/pull/3307 - Fix installation and examples link by @catalinmiron in https://github.com/ueberdosis/tiptap/pull/3298 - fix(docs): typo by @Calvein in https://github.com/ueberdosis/tiptap/pull/3362 - fix(extension/placeholder): Resolve placeholder performance issues by @C-Hess in https://github.com/ueberdosis/tiptap/pull/3361 - build(deps): bump parse-url from 7.0.2 to 8.1.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3384 - refactor(extension/bubble-menu): add debounce to bubble menu updates by @bdbch in https://github.com/ueberdosis/tiptap/pull/3385 - build(deps): bump actions/setup-node from 3.4.1 to 3.5.1 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3318 - docs: Fix typos in CHANGELOG.md by @rvrvrv in https://github.com/ueberdosis/tiptap/pull/3328 - build(deps): bump actions/cache from 3.0.8 to 3.0.11 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3317 - fix: remove blur event listener from tippy element (#3365) by @MihirGH in https://github.com/ueberdosis/tiptap/pull/3366 - fixes typo in suggestion.ts by @alejandrogarciasalas in https://github.com/ueberdosis/tiptap/pull/3386 - docs(svelte): fix link to get started with svelte by @taismassaro in https://github.com/ueberdosis/tiptap/pull/3396 - build(deps): bump loader-utils from 2.0.2 to 2.0.3 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3395 - Update jobs.md by @montapro in https://github.com/ueberdosis/tiptap/pull/3432 - extension/table: Fix prosemirror-tables dependency not using a correct namespace by @bdbch in https://github.com/ueberdosis/tiptap/pull/3448 - typo: custom-extensions.md completely by @williamsk91 in https://github.com/ueberdosis/tiptap/pull/3447 - Fix #3435 - CommonJS and ESM loading confusion by @tomi-bigpi in https://github.com/ueberdosis/tiptap/pull/3436 - build(deps): bump loader-utils from 2.0.3 to 2.0.4 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3426 - Fix cursor not following to new node when using a react node view by @ruipserra in https://github.com/ueberdosis/tiptap/pull/3331 - fix(core): implement deleteCurrentNode command & fix node joining on Delete key by @bdbch in https://github.com/ueberdosis/tiptap/pull/3192 - fix(link): allow to unset target attribute by @dargmuesli in https://github.com/ueberdosis/tiptap/pull/3425 - feat(commands): add joinUp and joinDown command & refactor join command code by @bdbch in https://github.com/ueberdosis/tiptap/pull/3455 - docs: rotate demo rooms by @patrickbaber in https://github.com/ueberdosis/tiptap/pull/3475 - Draft: Moves all prosemirror deps to peerDependencies & devDependencies by @janthurau in https://github.com/ueberdosis/tiptap/pull/3487 - fix(extension-bubble-menu): don't debounce without valid selection by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3501 - refactor(extension-youtube): rename utility function name by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3498 - Check if url is valid before creating YouTube player by @umgustavo in https://github.com/ueberdosis/tiptap/pull/3484 - Fix docs menus.md missing word by @kandros in https://github.com/ueberdosis/tiptap/pull/3457 - build(deps): bump minimatch from 3.0.4 to 3.1.2 in /demos by @dependabot in https://github.com/ueberdosis/tiptap/pull/3489 - Fix: custom text serializers should override text serializers defined in the schema by @tovaschreier in https://github.com/ueberdosis/tiptap/pull/3546 - Update sink-list-item.md by @vuau in https://github.com/ueberdosis/tiptap/pull/3629 - 🧹 Allow `editor.setEditable` to omit updates by @ZaymonFC in https://github.com/ueberdosis/tiptap/pull/3301 - Change Build Process to Lerna + tsup & prepare for prosemirror-meta package by @bdbch in https://github.com/ueberdosis/tiptap/pull/3555 - fix(typo): typescript.md by @N0N1m3 in https://github.com/ueberdosis/tiptap/pull/3657 - Update schema.md by @matrei in https://github.com/ueberdosis/tiptap/pull/3645 - New Feature: Prosemirror Meta Package by @bdbch in https://github.com/ueberdosis/tiptap/pull/3556 - Added CSS Required for Setup by @james-william-r in https://github.com/ueberdosis/tiptap/pull/3711 - Update installation guides by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3698 - Make y-prosemirror a peer dependency (extension-collaboration) by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3697 - Remove lodash types, replace pm deps (extension-bubble-menu) by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3696 - Remove lodash dependencies in extension-floating-menu by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3695 - build(deps): bump cypress-io/github-action from 4.2.0 to 5.0.8 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3707 - build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3687 - Move back from tsup/esbuild to rollup by @bdbch in https://github.com/ueberdosis/tiptap/pull/3720 - fix: Draggable nodes should respect drag handles by @matthewmullin01 in https://github.com/ueberdosis/tiptap/pull/3677 - build(deps): bump actions/cache from 3.0.11 to 3.2.5 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3741 - build(deps): bump act10ns/slack from 1 to 2 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3404 - build(deps): bump json5 from 1.0.1 to 1.0.2 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3605 - build(deps): bump json5 from 2.2.1 to 2.2.3 in /demos by @dependabot in https://github.com/ueberdosis/tiptap/pull/3607 - build(deps): bump actions/checkout from 3.0.2 to 3.3.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3609 - build(deps): bump actions/upload-artifact from 3.1.0 to 3.1.2 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3610 - build(deps): bump actions/setup-node from 3.5.1 to 3.6.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3613 - Update regex to exclude channel URL unfurling by @JustMaier in https://github.com/ueberdosis/tiptap/pull/3750 - Fix type for BubbleMenu prop pluginKey by @rumbcam in https://github.com/ueberdosis/tiptap/pull/3678 - Extend `nodePasteRule` `find` type to most generic `PasteRuleFinder` by @jiegillet in https://github.com/ueberdosis/tiptap/pull/3759 - fix(extension-link): Click handler opens selected link instead of clicked link by @jmtaber129 in https://github.com/ueberdosis/tiptap/pull/3732 - fix(typography): dont create fractions in the middle of a string by @bdbch in https://github.com/ueberdosis/tiptap/pull/3762 - Use Tailwind CDN direclty? by @RicoTrevisan in https://github.com/ueberdosis/tiptap/pull/3643 - fix: override schema text serializers if provided in getText options by @harrisonlo in https://github.com/ueberdosis/tiptap/pull/3672 - chore: add eslintcache by @Simon-He95 in https://github.com/ueberdosis/tiptap/pull/3525 - document removing or overriding link attributes by @epelc in https://github.com/ueberdosis/tiptap/pull/3576 - Add onFirstRender callback option by @Flamenco in https://github.com/ueberdosis/tiptap/pull/3600 - Add Plugin Key to placeholder component. by @tazirahmb in https://github.com/ueberdosis/tiptap/pull/3652 - Export `createNodeFromContent` and other missing helpers by @jacksleight in https://github.com/ueberdosis/tiptap/pull/3558 - fix: Queue flushSync call by @kylealwyn in https://github.com/ueberdosis/tiptap/pull/3533 - build(deps): bump cypress-io/github-action from 5.0.8 to 5.0.9 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3766 - feat: #3540 Ability to preserve marks on lists by @gethari in https://github.com/ueberdosis/tiptap/pull/3541 - Move y-prosemirror to peer-deps by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3763 - fix: #3773 - Array for content breaks editor by @gethari in https://github.com/ueberdosis/tiptap/pull/3786 - Docs Update for Installation instructions for PHP Livewire by @peterfox in https://github.com/ueberdosis/tiptap/pull/3618 - add optionalSlashSlash to protocol options by @taras-turchenko-moc in https://github.com/ueberdosis/tiptap/pull/3675 - fix(core): allow insertContentAt and insertContent text node arrays by @bdbch in https://github.com/ueberdosis/tiptap/pull/3790 - chore: allow new ReactComponentContent components to be created by @bdbch in https://github.com/ueberdosis/tiptap/pull/3782 - fix(react): reset initialized when editorcontent is unmounting by @bdbch in https://github.com/ueberdosis/tiptap/pull/3781 - docs: add extension cli note to contributing docs by @bdbch in https://github.com/ueberdosis/tiptap/pull/3793 - fix: update typings for node view decorations by @bdbch in https://github.com/ueberdosis/tiptap/pull/3783 - build(deps): bump actions/cache from 3.2.5 to 3.2.6 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3795 - Fix destroyed view causing errors on dispatchTransaction by @bdbch in https://github.com/ueberdosis/tiptap/pull/3799 - Only allow left mouse button to open links by @thecodrr in https://github.com/ueberdosis/tiptap/pull/3777 - Optimize empty document detection in `documentClear` plugin by @thecodrr in https://github.com/ueberdosis/tiptap/pull/3778 - fix: use prose-base class for sm screens by @cstrnt in https://github.com/ueberdosis/tiptap/pull/3810 - Adds attributes to toggleList by @katerlouis in https://github.com/ueberdosis/tiptap/pull/3776 - fix(tests): add assertion for each valid/invalid link by @bdbch in https://github.com/ueberdosis/tiptap/pull/3815 - feat(react): allow html attrs in react renderer by @bdbch in https://github.com/ueberdosis/tiptap/pull/3812 - fix(react): allow updating event handlers on editor by @bdbch in https://github.com/ueberdosis/tiptap/pull/3811 - Improve Cypress Test runner performance with parallelization by @bdbch in https://github.com/ueberdosis/tiptap/pull/3817 - build(deps): bump cypress-io/github-action from 5.0.9 to 5.2.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3835 - fix: Ordered list start support broke in #3541 by @gethari in https://github.com/ueberdosis/tiptap/pull/3833 - Refactor typings (extension-youtube) by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3842 - build(deps): bump actions/checkout from 3.3.0 to 3.4.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3864 - build(deps): bump cypress-io/github-action from 5.2.0 to 5.5.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3863 - build(deps-dev): bump webpack from 5.73.0 to 5.76.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3855 - Docs: consistent naming of Tiptap by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3882 - [PROPOSAL] dynamic default attributes by @mylesj in https://github.com/ueberdosis/tiptap/pull/3379 - style(core): fix linting issues by @bdbch in https://github.com/ueberdosis/tiptap/pull/3884 - Handle NodeViews in BubbleMenu positioning by @bdbch in https://github.com/ueberdosis/tiptap/pull/3881 - chore: add Dev demo folder by @bdbch in https://github.com/ueberdosis/tiptap/pull/3887 - CI: Remove slack notifications by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3885 - Docs: Update nodes and extensions lists by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3886 - Docs: Remove pro extension callout from collab docs by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3883 - Fixing reoccurring issue #3331 and improving related PR #3533 by @KentoMoriwaki in https://github.com/ueberdosis/tiptap/pull/3862 - Release Candidate Preparation by @bdbch in https://github.com/ueberdosis/tiptap/pull/3890 - chore: add new release and prerelease actions by @bdbch in https://github.com/ueberdosis/tiptap/pull/3836 - Updates @hocuspocus/provider, moves demo to TiptapCollab by @janthurau in https://github.com/ueberdosis/tiptap/pull/3895 - Merge pull request #3895 from ueberdosis/feature/ttCollabProvider by @janthurau in https://github.com/ueberdosis/tiptap/pull/3897 - Collaboration: Fix history after late-registering plugins by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3901 - ci: remove slack notifications by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3898 - build(deps): bump actions/checkout from 3.4.0 to 3.5.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3889 - build(deps): bump cypress-io/github-action from 5.5.0 to 5.5.1 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3888 - build(deps): bump actions/cache from 3.2.6 to 3.3.1 by @dependabot in https://github.com/ueberdosis/tiptap/pull/3846 - docs: prepare for stable release by @svenadlung in https://github.com/ueberdosis/tiptap/pull/3892 - New Issue & Discussion Templates by @bdbch in https://github.com/ueberdosis/tiptap/pull/3907 - feat(core): add editor to this context in schema functions by @bdbch in https://github.com/ueberdosis/tiptap/pull/3909 ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing Contributions are **welcome** and will be fully **credited**. Please read and understand the [contribution guide](https://www.tiptap.dev/overview/contributing/) before creating an issue or pull request. ## Etiquette This project is open source, and as such, the maintainers give their free time to build and maintain the source code held within. They make the code freely available in the hope that it will be of use to other developers. It would be extremely unfair for them to suffer abuse or anger for their hard work. Please be considerate towards maintainers when raising issues or presenting pull requests. Let's show the world that developers are civilized and selfless people. It's the duty of the maintainer to ensure that all submissions to the project are of sufficient quality to benefit the project. Many developers have different skillsets, strengths, and weaknesses. Respect the maintainer's decision, and do not be upset or abusive if your submission is not used. ## Security If you discover a security vulnerability, please refer to our [Security Policy](SECURITY.md) for reporting instructions. ## Viability When requesting or submitting new features, first consider whether it might be useful to others. Open source projects are used by many developers, who may have entirely different needs to your own. Think about whether or not your feature is likely to be used by other users of the project. ## Procedure Before filing an issue: - Attempt to replicate the problem, to ensure that it wasn't a coincidental incident. Create a CodeSandbox to reproduce the issue. Use one of these templates to get started: - [JavaScript template](https://codesandbox.io/s/tiptap-js-fv1lyo) - [React template](https://codesandbox.io/s/tiptap-react-qidlsv) - [Vue 2 template](https://codesandbox.io/s/tiptap-vue-2-25nq3g) - [Vue 3 template](https://codesandbox.io/p/sandbox/tiptap-vue-3-ci7q9h) - Check to make sure your feature suggestion isn't already present within the project. - Check the pull requests tab to ensure that the bug doesn't have a fix in progress. - Check the pull requests tab to ensure that the feature isn't already in progress. Before submitting a pull request: - Check the codebase to ensure that your feature doesn't already exist. - Check the pull requests to ensure that another person hasn't already submitted the feature or fix. Before committing: - Make sure to run the tests and linter before committing your changes. - If you are making changes to one of the packages, make sure to **always** include a [changeset](https://github.com/changesets/changesets) in your PR describing **what changed** with a **description** of the change. Those are responsible for changelog creation ## Create a new demo To make it easier to add new demos to the demos app we provide a small helper script via `pnpm run make:demo` that scaffolds a new demo directory from our default template. **What it does** - Prompts for a demo name and category. - Validates the category is one of: `Dev`, `Examples`, `Extensions`, `Experiments`, `Marks`, `Nodes`. - Copies the template `demos/src/Examples/Default` to `demos/src//`. **How to use** - From the repository root run: - If the script is executable: - Or with bash directly: - Follow the interactive prompts for the demo name and category. **Notes and follow-up steps** - The script only copies the template. After the scaffold is created, update the demo's files (title, description, imports) to reflect your example. - Make sure to review the generated demo in `demos/` and run the demos app (`pnpm dev`) to verify it appears and works as expected. - If your demo changes package behaviour or exposes user-facing changes, follow the normal rule and add a changeset and tests as needed. - If you don't want your demo to be included in the Git repository, use the `Dev` category. Demos in this category are ignored by git via `.gitignore`. ## Publishing New Packages When adding a new package to the repository that does not yet exist on NPM, additional setup is required before the automated publish CI can release it: 1. **Manual initial publish** - The package must be published manually to NPM for the first time using normal user authentication. This is required because trusted publishing can only be configured for packages that already exist on the registry. - For a single package, run `pnpm run build && pnpm publish` from the package directory (e.g., `packages/extension-audio/`). - Alternatively, run `pnpm run publish` from the root directory to publish all packages. 2. **Configure trusted publishing** - After the initial publish, set up [NPM trusted publishing](https://docs.npmjs.com/trusted-publishers) (also known as provenance) for the package on NPM. This allows the GitHub Actions workflow to publish subsequent versions automatically. Without this setup, the publish CI will fail when attempting to release a new package. ## Requirements If the project maintainer has any additional requirements, you will find them listed here. - **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date. - **One pull request per feature** - If you want to do more than one thing, send multiple pull requests. - **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](https://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting. **Happy coding**! ================================================ FILE: LICENSE.md ================================================ MIT License Copyright (c) 2025, Tiptap GmbH Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ ![Tiptap Editor](.github/assets/cover.png) [![LFX Health Score](https://insights.production.lfx.dev/api/badge/health-score?project=tiptap)](https://insights.linuxfoundation.org/project/tiptap) [![Build Status](https://github.com/ueberdosis/tiptap/actions/workflows/build.yml/badge.svg)](https://github.com/ueberdosis/tiptap/actions/workflows/build.yml) [![Version](https://img.shields.io/npm/v/@tiptap/core.svg?label=version)](https://www.npmjs.com/package/@tiptap/core) [![Downloads](https://img.shields.io/npm/dm/@tiptap/core.svg)](https://npmcharts.com/compare/@tiptap/core?minimal=true) [![License](https://img.shields.io/npm/l/@tiptap/core.svg)](https://www.npmjs.com/package/@tiptap/core) [![Chat](https://img.shields.io/badge/chat-on%20discord-7289da.svg?sanitize=true)](https://discord.gg/WtJ49jGshW) [![Sponsor](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub)](https://github.com/sponsors/ueberdosis) # Tiptap Editor The Tiptap Editor is a headless, framework-agnostic rich text editor that's customizable and extendable through extensions. Its headless nature means it comes without a set user interface, offering full design freedom (for a jumpstart, see linked [UI templates](#examples-codesandbox-and-ui-templates) below). Tiptap is based on the highly reliable [ProseMirror](https://github.com/ProseMirror/prosemirror) library. Tiptap Editor is complemented by the collaboration open-source backend [Hocuspocus](https://github.com/ueberdosis/hocuspocus). Both the Editor and Hocuspocus form the foundation of the [Tiptap Suite](https://tiptap.dev/). ### How does the Tiptap Editor work? - **Headless Framework:** Tiptap does not rely on a user interface. So there is no need for class overrides or code hacks. If you do need an example UI feel free to browse our [UI templates](#examples-codesandbox-and-ui-templates) linked below. - **Framework-agnostic:** The Tiptap Editor is designed to work across different frontend frameworks. This means whether you're using Vue, React, or plain JavaScript, Tiptap integrates without compatibility issues. - **Extension based:** Extensions in Tiptap allow for a tailored editing experience, from simple text styling to advanced features like drag-and-drop block editing. You have the option to choose from over 100 extensions available in the [documentation](https://tiptap.dev/docs/editor/extensions) and [community](https://github.com/ueberdosis/awesome-tiptap/#community-extensions) to enhance your editor's functionality. - **Customize your UX:** The editor was built to give you control to define your own [extensions](https://tiptap.dev/docs/editor/guide/custom-extensions) and [nodes](https://tiptap.dev/docs/editor/api/nodes). ### Editor Pro Extensions The **Pro Extensions** are a set of advanced functionalities that enhance the capabilities of the Tiptap Editor. They are additional features that can be integrated into the base editor to provide more sophisticated editing options. Key functionalities include collaborative editing, commenting, versioning, document conversion and AI related features. Review the docs right [here](https://tiptap.dev/docs/editor/extensions). Pro Extensions need a valid subscription. ### Make your editor collaborative Interested in collaborative editing? Check out our open-source package [Hocuspocus](https://github.com/ueberdosis/hocuspocus) - a collaboration backend built around the CRDT power of [Yjs](https://github.com/yjs/yjs). Hocuspocus serves as the backbone for the [Tiptap Suite](https://tiptap.dev/). ## Documentation For more detailed information, make sure to check out our [documentation](https://tiptap.dev/docs/editor/installation). If you encounter any problems or have suggestions for our system, please open an issue. ### Examples, CodeSandbox and UI Templates Have a look at the [examples to see Tiptap in action](https://tiptap.dev/examples) or review and fork our codesandboxes. - [Basic example of the Tiptap editor.](https://codesandbox.io/p/devbox/editor-9x9dkd?embed=1&file=%2Fsrc%2FApp.js) - [Collaboration ready Tiptap CodeSandbox](https://codesandbox.io/p/devbox/collaboration-4stk94) - React notion-like block editor template: [Demo](https://templates.tiptap.dev/) ## About Tiptap Tiptap is a collection of developer components based on open-source technology, forming the basis of our advanced, paid features. It includes the open-source editor component, collaboration features, Content AI, and Tiptap Cloud. We are developing open-source products that also shape our paid features. We're committed to improving both, ensuring quality and reliability in every update. For more details, visit the Tiptap [documentation](https://tiptap.dev/docs/editor/introduction) or [website](https://tiptap.dev/). ### Community For help, discussion about best practices, or any other conversation that would benefit from being searchable: [Discuss Tiptap on GitHub](https://github.com/ueberdosis/tiptap/discussions) ### Sponsors 💖

Complish

Storyblok

PostHog

Reflect

Ziff Media

Basewell

Poggio
[iFixit](https://www.ifixit.com/), [ApostropheCMS](https://apostrophecms.com/), [Novadiscovery](http://www.novadiscovery.com/), [Omics Data Automation](https://www.omicsautomation.com), [Flow Mobile](https://www.flowmobile.app/), [DocIQ](https://www.dociq.io/) and [hundreds of awesome individuals](https://github.com/sponsors/ueberdosis). ### Contributing Feel like adding some magic of your own to Tiptap Editor Core? We welcome contributions! Please see our [CONTRIBUTING](CONTRIBUTING.md) guidelines for how to get started. ### Contributors [Sam Willis](https://github.com/samwillis), [Brian Hung](https://github.com/BrianHung), [Dirk Holtwick](https://github.com/holtwick), [Sam Duvall](https://github.com/SamDuvall), [Christoph Flathmann](https://github.com/Chrissi2812), [Erick Wilder](https://github.com/erickwilder), [Marius Tolzmann](https://github.com/mariux), [jjangga0214](https://github.com/jjangga0214), [Maya Nedeljkovich](https://github.com/mayacoda), [Ryan Bliss](https://github.com/ryanbliss), [Gregor](https://github.com/gambolputty) and [many more](../../contributors). ## License The MIT License (MIT). Please see [License File](LICENSE.md) for more information. ================================================ FILE: SECURITY.md ================================================ # Security Policy ## Reporting Vulnerabilities If you discover a security vulnerability in Tiptap, please report it responsibly. We appreciate your help in keeping our users safe. ### How to Report **Please do not report security vulnerabilities through public GitHub issues.** Send details to security@tiptap.dev. Include a description of the vulnerability, steps to reproduce, and any potential impact. We will acknowledge receipt within 48 hours and provide updates as we investigate. ## Response Process Vulnerabilities are assessed and prioritized based on severity, exploitability, and business impact. Fixes are deployed according to the following timelines: - **Critical** (e.g., remote code execution, data breaches): Fixed and released within 24 hours. - **High** (e.g., significant data exposure): Fixed and released within 72 hours. - **Medium** (e.g., moderate leaks): Fixed and released within 14 days. - **Low** (e.g., minor issues): Addressed in the next scheduled update. We follow responsible disclosure practices and will credit reporters unless requested otherwise. ## Scope This policy applies to all Tiptap packages and related infrastructure. Reports are handled through our established vulnerability management process. ## Contact For questions, email security@tiptap.dev or humans@tiptap.dev. ================================================ FILE: babel.config.js ================================================ module.exports = { presets: ['@babel/preset-env', '@babel/preset-react'], plugins: ['@babel/plugin-proposal-nullish-coalescing-operator', '@babel/plugin-proposal-optional-chaining'], } ================================================ FILE: commitlint.config.mjs ================================================ export default { extends: ['@commitlint/config-conventional'] } ================================================ FILE: demos/CHANGELOG.md ================================================ # Change Log ## 3.0.1 ### Major Changes - a92f4a6: We are now building packages with tsup which does not support UMD builds, please repackage if you require UMD builds ### Patch Changes - 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory - 8c69002: Synced beta with stable features ## 3.0.0-beta.1 ### Patch Changes - 8c69002: Synced beta with stable features ## 3.0.0-next.2 ### Patch Changes - 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory ## 3.0.0-next.1 ### Major Changes - a92f4a6: We are now building packages with tsup which does not support UMD builds, please repackage if you require UMD builds ## 3.0.0-next.0 ### Major Changes - a92f4a6: We are now building packages with tsup which does not support UMD builds, please repackage if you require UMD builds ## 2.5.2 ### Patch Changes - 98fffbb: Upgraded prosemirror-tables to 1.6.3 to fix cells being resizable while the editor is uneditable ## 2.5.1 ### Patch Changes - 7619215: The link extension's `validate` option now applies to both auto-linking and XSS mitigation. While, the new `shouldAutoLink` option is used to disable auto linking on an otherwise valid url. ## 2.5.0 ### Minor Changes - 6834a7f: Bundling of packages no longer includes tiptap dependency type definitions ## 2.4.2 ### Patch Changes - d6e56c4: declare lowlight to be a peer dep of extension-code-block-lowlight, update usage to v3 ## 2.4.1 ### Patch Changes - 85d21ca: Updated demos and reverted vue specific performance enhancements until we know they work > in commit ff04353b3ee0e6fc63733a673e2b27d2272a3355 revert: "fix(vue-3): faster component rendering (#5206)" > This reverts commit 31f37464912b7b21f3a565ca63222b9f5b6cce00. and > in commit dbab8e42eac893a0237566fb30c14b4ed0f3674a revert: "fix(vue-3): fix editor.state updating too late during a transaction due to reactiveState fixes #4870 (#5252)" > This reverts commit 509676ed4a63b84b904a98c1e34d18449d25c2a7. All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. # [2.4.0](https://github.com/ueberdosis/tiptap/compare/v2.3.2...v2.4.0) (2024-05-14) **Note:** Version bump only for package tiptap-demos ## [2.3.2](https://github.com/ueberdosis/tiptap/compare/v2.3.1...v2.3.2) (2024-05-08) ### Bug Fixes - NodePos querySelectorAll function ([#5094](https://github.com/ueberdosis/tiptap/issues/5094)) ([4900a27](https://github.com/ueberdosis/tiptap/commit/4900a27c5389d9a2d0d69f407ca3db0155304315)) ## [2.3.1](https://github.com/ueberdosis/tiptap/compare/v2.3.0...v2.3.1) (2024-04-30) **Note:** Version bump only for package tiptap-demos # [2.3.0](https://github.com/ueberdosis/tiptap/compare/v2.2.6...v2.3.0) (2024-04-09) ### Bug Fixes - **core:** fix nodepos child lookup ([#5038](https://github.com/ueberdosis/tiptap/issues/5038)) ([22ced31](https://github.com/ueberdosis/tiptap/commit/22ced318723003365fbfd8f59b8dac79c7563017)) ### Features - **core:** apply input and paste rules when using insertContent methods ([#5046](https://github.com/ueberdosis/tiptap/issues/5046)) ([96b6abc](https://github.com/ueberdosis/tiptap/commit/96b6abcf6edbc6cac03a391130d9feebb6de3a04)) ## [2.2.6](https://github.com/ueberdosis/tiptap/compare/v2.2.5...v2.2.6) (2024-04-06) **Note:** Version bump only for package tiptap-demos ## [2.2.5](https://github.com/ueberdosis/tiptap/compare/v2.2.4...v2.2.5) (2024-04-05) **Note:** Version bump only for package tiptap-demos ## [2.2.4](https://github.com/ueberdosis/tiptap/compare/v2.2.3...v2.2.4) (2024-02-23) **Note:** Version bump only for package tiptap-demos ## [2.2.3](https://github.com/ueberdosis/tiptap/compare/v2.2.2...v2.2.3) (2024-02-15) ### Bug Fixes - fix test path ([21aa96d](https://github.com/ueberdosis/tiptap/commit/21aa96dee8deab1f439b7f655b8ed266a516a4cd)) ## [2.2.2](https://github.com/ueberdosis/tiptap/compare/v2.2.1...v2.2.2) (2024-02-07) **Note:** Version bump only for package tiptap-demos ## [2.2.1](https://github.com/ueberdosis/tiptap/compare/v2.2.0...v2.2.1) (2024-01-31) **Note:** Version bump only for package tiptap-demos # [2.2.0](https://github.com/ueberdosis/tiptap/compare/v2.1.16...v2.2.0) (2024-01-29) ### Bug Fixes - **core:** fix new lines being added via elementFromString ([#4767](https://github.com/ueberdosis/tiptap/issues/4767)) ([b7a2504](https://github.com/ueberdosis/tiptap/commit/b7a2504f16f46563537c890930cb2c332c256175)) - fix imports, fix demos, unpin y-prosemirror ([681aa57](https://github.com/ueberdosis/tiptap/commit/681aa577bff500015c3f925e300c55a71c73efaf)) - fix newline stripping via insertContent ([8954007](https://github.com/ueberdosis/tiptap/commit/8954007b2b92b040d69b26a0866ae58fabf5e512)) # [2.2.0-rc.8](https://github.com/ueberdosis/tiptap/compare/v2.1.14...v2.2.0-rc.8) (2024-01-08) # [2.2.0-rc.7](https://github.com/ueberdosis/tiptap/compare/v2.2.0-rc.6...v2.2.0-rc.7) (2023-11-27) # [2.2.0-rc.6](https://github.com/ueberdosis/tiptap/compare/v2.2.0-rc.5...v2.2.0-rc.6) (2023-11-23) # [2.2.0-rc.4](https://github.com/ueberdosis/tiptap/compare/v2.1.11...v2.2.0-rc.4) (2023-10-10) # [2.2.0-rc.3](https://github.com/ueberdosis/tiptap/compare/v2.2.0-rc.2...v2.2.0-rc.3) (2023-08-18) # [2.2.0-rc.1](https://github.com/ueberdosis/tiptap/compare/v2.2.0-rc.0...v2.2.0-rc.1) (2023-08-18) # [2.2.0-rc.0](https://github.com/ueberdosis/tiptap/compare/v2.1.5...v2.2.0-rc.0) (2023-08-18) ### Features - **placeholder:** allow editor-is-empty class on any node ([#4335](https://github.com/ueberdosis/tiptap/issues/4335)) ([ff929b1](https://github.com/ueberdosis/tiptap/commit/ff929b179de930619005a773bb4186ae2aa2ec58)) ## [2.1.16](https://github.com/ueberdosis/tiptap/compare/v2.1.15...v2.1.16) (2024-01-10) ### Bug Fixes - **core:** fix new lines being added via elementFromString ([#4767](https://github.com/ueberdosis/tiptap/issues/4767)) ([2235908](https://github.com/ueberdosis/tiptap/commit/2235908c28f388eda041d1d5d017554d513fe909)) ## [2.1.15](https://github.com/ueberdosis/tiptap/compare/v2.1.14...v2.1.15) (2024-01-08) ### Bug Fixes - **core:** fix insertContentAt keeping new lines in html content ([#4465](https://github.com/ueberdosis/tiptap/issues/4465)) ([135a12f](https://github.com/ueberdosis/tiptap/commit/135a12f7aa2df839a0b619704110a360b980c738)) - **link:** fix tests ([d495d92](https://github.com/ueberdosis/tiptap/commit/d495d92a1f7b1c51e09ac8f4934e15a2d1cf070d)) ## [2.1.14](https://github.com/ueberdosis/tiptap/compare/v2.1.13...v2.1.14) (2024-01-08) ### Bug Fixes - **typography:** require spaces after divisions to not break date formats ([#4696](https://github.com/ueberdosis/tiptap/issues/4696)) ([f6d7e00](https://github.com/ueberdosis/tiptap/commit/f6d7e00a746a67fa440a3fa0f5362295959873d2)) ## [2.1.13](https://github.com/ueberdosis/tiptap/compare/v2.1.12...v2.1.13) (2023-11-30) **Note:** Version bump only for package tiptap-demos ## [2.1.12](https://github.com/ueberdosis/tiptap/compare/v2.1.11...v2.1.12) (2023-10-11) **Note:** Version bump only for package tiptap-demos ## [2.1.11](https://github.com/ueberdosis/tiptap/compare/v2.1.10...v2.1.11) (2023-09-20) ### Reverts - Revert "v2.2.11" ([6aa755a](https://github.com/ueberdosis/tiptap/commit/6aa755a04b9955fc175c7ab33dee527d0d5deef0)) ## [2.1.10](https://github.com/ueberdosis/tiptap/compare/v2.1.9...v2.1.10) (2023-09-15) **Note:** Version bump only for package tiptap-demos ## [2.1.9](https://github.com/ueberdosis/tiptap/compare/v2.1.8...v2.1.9) (2023-09-14) **Note:** Version bump only for package tiptap-demos ## [2.1.8](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.7...v2.1.8) (2023-09-04) **Note:** Version bump only for package tiptap-demos ## [2.1.7](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.6...v2.1.7) (2023-09-04) **Note:** Version bump only for package tiptap-demos ## [2.1.6](https://github.com/ueberdosis/tiptap/compare/v2.1.5...v2.1.6) (2023-08-18) **Note:** Version bump only for package tiptap-demos # [2.2.0-rc.2](https://github.com/ueberdosis/tiptap/compare/v2.1.6...v2.2.0-rc.2) (2023-08-18) # [2.2.0-rc.1](https://github.com/ueberdosis/tiptap/compare/v2.2.0-rc.0...v2.2.0-rc.1) (2023-08-18) # [2.2.0-rc.0](https://github.com/ueberdosis/tiptap/compare/v2.1.5...v2.2.0-rc.0) (2023-08-18) ### Features - **placeholder:** allow editor-is-empty class on any node ([#4335](https://github.com/ueberdosis/tiptap/issues/4335)) ([ff929b1](https://github.com/ueberdosis/tiptap/commit/ff929b179de930619005a773bb4186ae2aa2ec58)) # [2.2.0-rc.1](https://github.com/ueberdosis/tiptap/compare/v2.2.0-rc.0...v2.2.0-rc.1) (2023-08-18) **Note:** Version bump only for package tiptap-demos # [2.2.0-rc.0](https://github.com/ueberdosis/tiptap/compare/v2.1.5...v2.2.0-rc.0) (2023-08-18) ### Features - **placeholder:** allow editor-is-empty class on any node ([#4335](https://github.com/ueberdosis/tiptap/issues/4335)) ([ff929b1](https://github.com/ueberdosis/tiptap/commit/ff929b179de930619005a773bb4186ae2aa2ec58)) ## [2.1.6](https://github.com/ueberdosis/tiptap/compare/v2.1.5...v2.1.6) (2023-08-18) **Note:** Version bump only for package tiptap-demos ## [2.1.5](https://github.com/ueberdosis/tiptap/compare/v2.1.4...v2.1.5) (2023-08-18) **Note:** Version bump only for package tiptap-demos ## [2.1.4](https://github.com/ueberdosis/tiptap/compare/v2.1.3...v2.1.4) (2023-08-18) **Note:** Version bump only for package tiptap-demos ## [2.1.3](https://github.com/ueberdosis/tiptap/compare/v2.1.2...v2.1.3) (2023-08-18) **Note:** Version bump only for package tiptap-demos ## [2.1.2](https://github.com/ueberdosis/tiptap/compare/v2.1.1...v2.1.2) (2023-08-17) ### Bug Fixes - **core:** fix error when merging class attributes ([#4340](https://github.com/ueberdosis/tiptap/issues/4340)) ([a251946](https://github.com/ueberdosis/tiptap/commit/a2519468589e2baa44901a66a3a06b24dc8626d6)) ## [2.1.1](https://github.com/ueberdosis/tiptap/compare/v2.1.0...v2.1.1) (2023-08-16) **Note:** Version bump only for package tiptap-demos # [2.1.0](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.14...v2.1.0) (2023-08-16) **Note:** Version bump only for package tiptap-demos # [2.1.0-rc.14](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.13...v2.1.0-rc.14) (2023-08-11) **Note:** Version bump only for package tiptap-demos # [2.1.0-rc.13](https://github.com/ueberdosis/tiptap-workspace/compare/v2.0.4...v2.1.0-rc.13) (2023-08-11) ### Bug Fixes - **demos:** add missing extensions ([6383fd5](https://github.com/ueberdosis/tiptap-workspace/commit/6383fd54080b2ad555286cd0e7c4ad880200200f)) - **demos:** update deps ([05a2edf](https://github.com/ueberdosis/tiptap-workspace/commit/05a2edfc16e297effa86d1583fb1680be0320f25)) - **strikethrough:** update strikethrough shortcut ([#4288](https://github.com/ueberdosis/tiptap-workspace/issues/4288)) ([fd35db4](https://github.com/ueberdosis/tiptap-workspace/commit/fd35db4d090d9fdfef1196fb1f6f858f13cf53d1)) # [2.1.0-rc.12](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.11...v2.1.0-rc.12) (2023-07-14) # [2.1.0-rc.11](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.10...v2.1.0-rc.11) (2023-07-07) ### Bug Fixes - **tests:** fix link rel tests ([c1d1854](https://github.com/ueberdosis/tiptap-workspace/commit/c1d18543b03b1fb6b99a2f3546aa5da10c919920)) # [2.1.0-rc.10](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.9...v2.1.0-rc.10) (2023-07-07) ### Bug Fixes - **react:** check props.clientRect before creating ReactRenderer ([#4138](https://github.com/ueberdosis/tiptap-workspace/issues/4138)) ([d710846](https://github.com/ueberdosis/tiptap-workspace/commit/d710846ecb6a3059dfbc21300b9a4b887a8defa3)) # [2.1.0-rc.9](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.8...v2.1.0-rc.9) (2023-06-15) # [2.1.0-rc.8](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.7...v2.1.0-rc.8) (2023-05-25) # [2.1.0-rc.5](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.4...v2.1.0-rc.5) (2023-05-25) ### Features - add tiptap class ([614fc80](https://github.com/ueberdosis/tiptap-workspace/commit/614fc8082c376bf3c40a05c23ceda6b4a6fbf8d0)) # [2.1.0-rc.4](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.3...v2.1.0-rc.4) (2023-04-27) # [2.1.0-rc.3](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.2...v2.1.0-rc.3) (2023-04-26) # [2.1.0-rc.2](https://github.com/ueberdosis/tiptap-workspace/compare/v2.0.3...v2.1.0-rc.2) (2023-04-26) ### Bug Fixes - **extension-link:** fix link not being kept when pasting url with link ([#3975](https://github.com/ueberdosis/tiptap-workspace/issues/3975)) ([e7d7d49](https://github.com/ueberdosis/tiptap-workspace/commit/e7d7d496376c8c11e24c342e20bd179a6ea7dcee)) # [2.1.0-rc.1](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.0...v2.1.0-rc.1) (2023-04-12) ### Bug Fixes - **bubble-menu:** fix debounce not working with collab/collaboration cursor ([#3956](https://github.com/ueberdosis/tiptap-workspace/issues/3956)) ([e8cef04](https://github.com/ueberdosis/tiptap-workspace/commit/e8cef0404b5039ec2657536976b8b31931afd337)) # [2.1.0-rc.0](https://github.com/ueberdosis/tiptap-workspace/compare/v2.0.2...v2.1.0-rc.0) (2023-04-05) ### Bug Fixes - clear nodes when cursor at start of empty isolating parent ([#3943](https://github.com/ueberdosis/tiptap-workspace/issues/3943)) ([7278ee2](https://github.com/ueberdosis/tiptap-workspace/commit/7278ee2b05de2f96efddf3b1dc3bfd3d52262cbb)) - Update peerDependencies to fix lerna version tasks ([#3914](https://github.com/ueberdosis/tiptap-workspace/issues/3914)) ([0c1bba3](https://github.com/ueberdosis/tiptap-workspace/commit/0c1bba3137b535776bcef95ff3c55e13f5a2db46)) # [2.1.0-rc.12](https://github.com/ueberdosis/tiptap-workspace/compare/v2.1.0-rc.11...v2.1.0-rc.12) (2023-07-14) **Note:** Version bump only for package tiptap-demos # [2.1.0-rc.11](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.10...v2.1.0-rc.11) (2023-07-07) ### Bug Fixes - **tests:** fix link rel tests ([c1d1854](https://github.com/ueberdosis/tiptap/commit/c1d18543b03b1fb6b99a2f3546aa5da10c919920)) # [2.1.0-rc.10](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.9...v2.1.0-rc.10) (2023-07-07) ### Bug Fixes - **react:** check props.clientRect before creating ReactRenderer ([#4138](https://github.com/ueberdosis/tiptap/issues/4138)) ([d710846](https://github.com/ueberdosis/tiptap/commit/d710846ecb6a3059dfbc21300b9a4b887a8defa3)) # [2.1.0-rc.9](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.8...v2.1.0-rc.9) (2023-06-15) **Note:** Version bump only for package tiptap-demos # [2.1.0-rc.8](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.7...v2.1.0-rc.8) (2023-05-25) **Note:** Version bump only for package tiptap-demos # [2.1.0-rc.7](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.6...v2.1.0-rc.7) (2023-05-25) **Note:** Version bump only for package tiptap-demos # [2.1.0-rc.6](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.5...v2.1.0-rc.6) (2023-05-25) **Note:** Version bump only for package tiptap-demos # [2.1.0-rc.5](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.4...v2.1.0-rc.5) (2023-05-25) ### Features - add tiptap class ([614fc80](https://github.com/ueberdosis/tiptap/commit/614fc8082c376bf3c40a05c23ceda6b4a6fbf8d0)) # [2.1.0-rc.4](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.3...v2.1.0-rc.4) (2023-04-27) **Note:** Version bump only for package tiptap-demos # [2.1.0-rc.3](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.2...v2.1.0-rc.3) (2023-04-26) **Note:** Version bump only for package tiptap-demos # [2.1.0-rc.2](https://github.com/ueberdosis/tiptap/compare/v2.0.3...v2.1.0-rc.2) (2023-04-26) ### Bug Fixes - **extension-link:** fix link not being kept when pasting url with link ([#3975](https://github.com/ueberdosis/tiptap/issues/3975)) ([e7d7d49](https://github.com/ueberdosis/tiptap/commit/e7d7d496376c8c11e24c342e20bd179a6ea7dcee)) # [2.1.0-rc.1](https://github.com/ueberdosis/tiptap/compare/v2.1.0-rc.0...v2.1.0-rc.1) (2023-04-12) ### Bug Fixes - **bubble-menu:** fix debounce not working with collab/collaboration cursor ([#3956](https://github.com/ueberdosis/tiptap/issues/3956)) ([e8cef04](https://github.com/ueberdosis/tiptap/commit/e8cef0404b5039ec2657536976b8b31931afd337)) # [2.1.0-rc.0](https://github.com/ueberdosis/tiptap/compare/v2.0.2...v2.1.0-rc.0) (2023-04-05) ### Bug Fixes - clear nodes when cursor at start of empty isolating parent ([#3943](https://github.com/ueberdosis/tiptap/issues/3943)) ([7278ee2](https://github.com/ueberdosis/tiptap/commit/7278ee2b05de2f96efddf3b1dc3bfd3d52262cbb)) - Update peerDependencies to fix lerna version tasks ([#3914](https://github.com/ueberdosis/tiptap/issues/3914)) ([0c1bba3](https://github.com/ueberdosis/tiptap/commit/0c1bba3137b535776bcef95ff3c55e13f5a2db46)) # [2.1.0-rc.0](https://github.com/ueberdosis/tiptap/compare/v2.0.2...v2.1.0-rc.0) (2023-04-05) ### Bug Fixes - clear nodes when cursor at start of empty isolating parent ([#3943](https://github.com/ueberdosis/tiptap/issues/3943)) ([7278ee2](https://github.com/ueberdosis/tiptap/commit/7278ee2b05de2f96efddf3b1dc3bfd3d52262cbb)) - **bubble-menu:** fix debounce not working with collab/collaboration cursor ([#3956](https://github.com/ueberdosis/tiptap/issues/3956)) ([a78f8cd](https://github.com/ueberdosis/tiptap/commit/a78f8cd9646008e4db938fa3c22b0714c8bb5849)) ## [2.0.3](https://github.com/ueberdosis/tiptap/compare/v2.0.2...v2.0.3) (2023-04-13) ### Bug Fixes - **bubble-menu:** fix debounce not working with collab/collaboration cursor ([#3956](https://github.com/ueberdosis/tiptap/issues/3956)) ([e8cef04](https://github.com/ueberdosis/tiptap/commit/e8cef0404b5039ec2657536976b8b31931afd337)) ## [2.0.2](https://github.com/ueberdosis/tiptap/compare/v2.0.1...v2.0.2) (2023-04-03) ### Features - add box-shadow to collab demo ([c5496c1](https://github.com/ueberdosis/tiptap/commit/c5496c1b27783150dafb5ebdf6bda43648a46316)) - landingpage demo ([#3925](https://github.com/ueberdosis/tiptap/issues/3925)) ([958925f](https://github.com/ueberdosis/tiptap/commit/958925f2560ca786cd0cf52b83b7ae51deb7dd77)) - Tiptap collab demo styling ([87840b0](https://github.com/ueberdosis/tiptap/commit/87840b0f0821ca65d9f104d9c90512021aa70113)) ## [2.0.1](https://github.com/ueberdosis/tiptap/compare/v2.0.0...v2.0.1) (2023-03-30) ### Bug Fixes - Update peerDependencies to fix lerna version tasks ([#3914](https://github.com/ueberdosis/tiptap/issues/3914)) ([0534f76](https://github.com/ueberdosis/tiptap/commit/0534f76401bf5399c01ca7f39d87f7221d91b4f7)) # [2.0.0-beta.220](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.219...v2.0.0-beta.220) (2023-02-28) ### Bug Fixes - **core:** fix destroyed view causing errors on dispatchTransaction ([#3799](https://github.com/ueberdosis/tiptap/issues/3799)) ([3c07ca0](https://github.com/ueberdosis/tiptap/commit/3c07ca0b9c48cef60d56acdd44812e20e05fc928)) - **tests:** fix tests for lists ([02eec8a](https://github.com/ueberdosis/tiptap/commit/02eec8aaefc2709dc20f91c3c8f9eca84cddc12d)) # [2.0.0-beta.219](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.218...v2.0.0-beta.219) (2023-02-27) ### Bug Fixes - **core:** allow insertContentAt and insertContent text node arrays ([#3790](https://github.com/ueberdosis/tiptap/issues/3790)) ([0300630](https://github.com/ueberdosis/tiptap/commit/0300630a5b04b61d4eef8155f24ca0ef2d683966)) ### Features - [#3540](https://github.com/ueberdosis/tiptap/issues/3540) Ability to preserve marks on lists ([#3541](https://github.com/ueberdosis/tiptap/issues/3541)) ([36bb1e1](https://github.com/ueberdosis/tiptap/commit/36bb1e1041f91da6437272e7196702df868eae0f)) # [2.0.0-beta.218](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.217...v2.0.0-beta.218) (2023-02-18) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.217](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.216...v2.0.0-beta.217) (2023-02-09) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.216](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.215...v2.0.0-beta.216) (2023-02-08) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.215](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.214...v2.0.0-beta.215) (2023-02-08) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.214](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.213...v2.0.0-beta.214) (2023-02-08) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.213](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.212...v2.0.0-beta.213) (2023-02-07) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.212](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.211...v2.0.0-beta.212) (2023-02-03) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.211](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.210...v2.0.0-beta.211) (2023-02-02) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.210](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.209...v2.0.0-beta.210) (2023-02-02) ### Features - **pm:** new prosemirror package for dependency resolving ([f387ad3](https://github.com/ueberdosis/tiptap/commit/f387ad3dd4c2b30eaea33fb0ba0b42e0cd39263b)) # [2.0.0-beta.209](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.208...v2.0.0-beta.209) (2022-12-16) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.208](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.207...v2.0.0-beta.208) (2022-12-16) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.207](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.206...v2.0.0-beta.207) (2022-12-08) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.206](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.205...v2.0.0-beta.206) (2022-12-08) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.205](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.204...v2.0.0-beta.205) (2022-12-05) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.204](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.203...v2.0.0-beta.204) (2022-11-25) ### Bug Fixes - **tests:** fix autolink validation test ([5150095](https://github.com/ueberdosis/tiptap/commit/5150095c6b510c080f4aa35f54d2387543f86da8)) # [2.0.0-beta.203](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.202...v2.0.0-beta.203) (2022-11-24) ### Bug Fixes - **extension/table:** move dependency from @\_ueberdosis to [@tiptap](https://github.com/tiptap) ([#3448](https://github.com/ueberdosis/tiptap/issues/3448)) ([31c3a9a](https://github.com/ueberdosis/tiptap/commit/31c3a9aad9eb37f445eadcd27135611291178ca6)) # [2.0.0-beta.202](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.201...v2.0.0-beta.202) (2022-11-04) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.201](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.200...v2.0.0-beta.201) (2022-11-04) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.200](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.199...v2.0.0-beta.200) (2022-11-04) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.199](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.198...v2.0.0-beta.199) (2022-09-30) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.198](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.197...v2.0.0-beta.198) (2022-09-29) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.197](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.196...v2.0.0-beta.197) (2022-09-26) ### Bug Fixes - **core:** Can() does not work for setting marks ([#3223](https://github.com/ueberdosis/tiptap/issues/3223)) ([17a41da](https://github.com/ueberdosis/tiptap/commit/17a41da5a7a14879cf490c81914084791c4c494c)) # [2.0.0-beta.196](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.195...v2.0.0-beta.196) (2022-09-20) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.195](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.194...v2.0.0-beta.195) (2022-09-14) ### Bug Fixes - **extension/bubble-menu:** :bug: fix bubble menu and floating menu being available when editor not editable ([#3195](https://github.com/ueberdosis/tiptap/issues/3195)) ([fa96749](https://github.com/ueberdosis/tiptap/commit/fa96749ce22ec67125da491cfeeb38623b9f0d6e)) # [2.0.0-beta.194](https://github.com/ueberdosis/tiptap/compare/v2.0.0-beta.193...v2.0.0-beta.194) (2022-09-11) **Note:** Version bump only for package tiptap-demos # [2.0.0-beta.193](https://github.com/ueberdosis/tiptap/compare/v0.1.2...v2.0.0-beta.193) (2022-09-10) ### Bug Fixes - bump documents ([43611ea](https://github.com/ueberdosis/tiptap/commit/43611ea2e70d3dc66ff907ba7ca377bf74814543)) - disable broken tests for experiements with further todo message ([b8ae9e2](https://github.com/ueberdosis/tiptap/commit/b8ae9e27622857093c6ca539901956da5cc291e5)) - don’t check for active node in wrapIn command, fix [#1059](https://github.com/ueberdosis/tiptap/issues/1059) ([170ec4b](https://github.com/ueberdosis/tiptap/commit/170ec4be5b3c8362890ca3100a223b505f788381)) - **extension/collaboration:** :ambulance: pin y-prosemirror version to 1.0.20 to fix broken functionality with vue ([5989f3b](https://github.com/ueberdosis/tiptap/commit/5989f3b780bb64b2884d81dcd41a95d98a0714b2)) - fix RangeError bug when selecting all text, fix [#2490](https://github.com/ueberdosis/tiptap/issues/2490) ([70422dd](https://github.com/ueberdosis/tiptap/commit/70422dd107ed1ecdd8dfe41a8a93297124d2f1e0)) - **maintainment:** fix cjs issues with prosemirror-tables ([eb92597](https://github.com/ueberdosis/tiptap/commit/eb925976038fbf59f6ba333ccc57ea84113da00e)) - remove some magic strings ([6c34dec](https://github.com/ueberdosis/tiptap/commit/6c34dec33ac39c9f037a0a72e4525f3fc6d422bf)) - **suggestion:** :bug: make clientrect prop optional as it can potentially be undefined ([#2813](https://github.com/ueberdosis/tiptap/issues/2813)) ([f019f70](https://github.com/ueberdosis/tiptap/commit/f019f70a19c34715e2d5c3921d348e11c7ac51a3)), closes [#2795](https://github.com/ueberdosis/tiptap/issues/2795) - temp fix collaboration demo ([4528756](https://github.com/ueberdosis/tiptap/commit/45287563f3cfb389095a2794cb2001d65e56d633)) ### Features - Add extension storage ([#2069](https://github.com/ueberdosis/tiptap/issues/2069)) ([7ffabf2](https://github.com/ueberdosis/tiptap/commit/7ffabf251c408a652eec1931cc78a8bd43cccb67)) - add getText() and generateText() methods (fix [#1428](https://github.com/ueberdosis/tiptap/issues/1428)) ([#1875](https://github.com/ueberdosis/tiptap/issues/1875)) ([fe6a3e7](https://github.com/ueberdosis/tiptap/commit/fe6a3e7491f6a42123d3d8a92ab588f2a40d7799)) - add some improvements to `CharacterCount` extension ([#2256](https://github.com/ueberdosis/tiptap/issues/2256)), fix [#1049](https://github.com/ueberdosis/tiptap/issues/1049), fix [#1550](https://github.com/ueberdosis/tiptap/issues/1550), fix [#1839](https://github.com/ueberdosis/tiptap/issues/1839), fix [#2245](https://github.com/ueberdosis/tiptap/issues/2245) ([5daa870](https://github.com/ueberdosis/tiptap/commit/5daa870b0906f0387fe07041681bc6f5b3774617)) - Add support for autolink ([#2226](https://github.com/ueberdosis/tiptap/issues/2226)) ([3d68981](https://github.com/ueberdosis/tiptap/commit/3d68981b47d087fff40549d2143eb952fc9e0a50)) - **extension-link:** :sparkles: add validate option to link extension ([23e67ad](https://github.com/ueberdosis/tiptap/commit/23e67adfa730df7364bc31220d0ed0e8ea522593)), closes [#2779](https://github.com/ueberdosis/tiptap/issues/2779) - **extension/youtube:** :sparkles: new youtube embed extension ([#2814](https://github.com/ueberdosis/tiptap/issues/2814)) ([1c0554b](https://github.com/ueberdosis/tiptap/commit/1c0554b7c06d80145274353e58d56608b097fbe4)) - Integrate input rules and paste rules into the core ([#1997](https://github.com/ueberdosis/tiptap/issues/1997)) ([723b955](https://github.com/ueberdosis/tiptap/commit/723b955cecc5c92c8aad897ce16c60fb62976571)) - parseHTML for attributes should return the value instead of an object now, fix [#1863](https://github.com/ueberdosis/tiptap/issues/1863) ([8a3b47a](https://github.com/ueberdosis/tiptap/commit/8a3b47a529d28b28b50d634c6ff69b8e5aad3080)) ================================================ FILE: demos/dedupeDeps.txt ================================================ d3 highlight.js/lib/languages/css highlight.js/lib/languages/javascript highlight.js/lib/languages/typescript highlight.js/lib/languages/xml highlight.js/lib/core linkifyjs lowlight react react-dom react-dom/client use-sync-external-store/shim use-sync-external-store/shim/with-selector shiki @floating-ui/dom uuid y-webrtc yjs prosemirror-changeset prosemirror-collab prosemirror-commands prosemirror-dropcursor prosemirror-gapcursor prosemirror-history prosemirror-inputrules prosemirror-keymap prosemirror-markdown prosemirror-menu prosemirror-model prosemirror-schema-basic prosemirror-schema-list prosemirror-state prosemirror-tables prosemirror-trailing-node prosemirror-transform prosemirror-view @hocuspocus/provider @lifeomic/attempt @tiptap/y-tiptap ================================================ FILE: demos/index.html ================================================ ================================================ FILE: demos/package.json ================================================ { "name": "tiptap-demos", "version": "3.0.1", "private": true, "type": "module", "scripts": { "start": "vite --host", "build:demos": "vite build", "preview": "vite preview" }, "dependencies": { "@floating-ui/dom": "^1.6.13", "@hocuspocus/provider": "^2.15.0", "@hocuspocus/transformer": "^2.15.0", "@lexical/react": "^0.36.2", "@lifeomic/attempt": "3.1.0", "@shikijs/core": "1.10.3", "@tiptap/y-tiptap": "^3.0.0", "d3": "^7.9.0", "fast-glob": "^3.3.2", "highlight.js": "^11.11.1", "katex": "^0.16.4", "lexical": "^0.36.2", "linkifyjs": "^4.3.2", "lowlight": "^3.3.0", "prosemirror-changeset": "^2.3.0", "prosemirror-collab": "^1.3.1", "prosemirror-commands": "^1.6.2", "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", "prosemirror-markdown": "^1.13.1", "prosemirror-menu": "^1.2.4", "prosemirror-model": "^1.24.1", "prosemirror-schema-basic": "^1.2.3", "prosemirror-schema-list": "^1.5.0", "prosemirror-state": "^1.4.3", "prosemirror-tables": "^1.6.2", "prosemirror-trailing-node": "^3.0.0", "prosemirror-transform": "^1.10.2", "prosemirror-view": "^1.38.1", "remixicon": "^2.5.0", "shiki": "^1.25.1", "y-webrtc": "10.3.0", "yjs": "13.6.23" }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "3.1.2", "@types/node": "22.10.3", "@types/uuid": "^8.3.4", "@vitejs/plugin-react": "^1.3.2", "@vitejs/plugin-vue": "^5.2.1", "autoprefixer": "^10.4.20", "esbuild": "0.25.0", "iframe-resizer": "^4.4.5", "postcss": "^8.4.49", "postcss-import": "^15.1.0", "react": "^19.0.0", "react-dom": "^19.0.0", "sass": "^1.83.0", "svelte": "^4.2.19", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "uuid": "^8.3.2", "vite": "^5.4.20", "vite-plugin-checker": "^0.6.4", "vue": "^3.5.13", "vue-router": "^4.5.0" } } ================================================ FILE: demos/postcss.config.cjs ================================================ module.exports = { plugins: { 'postcss-import': {}, 'tailwindcss/nesting': {}, tailwindcss: {}, autoprefixer: {}, }, } ================================================ FILE: demos/preview/Demo.vue ================================================ ================================================ FILE: demos/preview/DemoFrame.vue ================================================