fix(perf): upgrade tiptap to 3.16.0 and happy-dom to 20.x (#2276)

* fix(perf): upgrade tiptap to 3.16.0 and happy-dom to 20.x

Resolves the SSR memory leak from unclosed happy-dom Window instances
created by @tiptap/html/server's generateJSON. Upstream tiptap PR #6686
(shipped in @tiptap/html 3.6.4) fixed this by disposing the Window in a
finally block; @tiptap/html 3.6.7+ requires happy-dom ^20 as a peer dep,
which also closes CVE-2025-61927 (CVSS 9.4 VM context escape RCE).

Supersedes #2275, which manually backported tiptap PR #6686 as a local
wrapper. Pulling the actual upstream fix removes the wrapper debt and
addresses the RCE in one shot.

Tiptap pins
-----------

@tiptap/core, /extensions, and /extension-text-style already floated to
^3.16.0; the other 15 packages were exact-pinned to 3.0.9. Production
was running a mixed family with core at 3.16.0 against extensions at
3.0.9. Aligning all 18 to exact 3.16.0 narrows that gap rather than
widening it.

Suggestion plugin fix
---------------------

@tiptap/suggestion 3.4.0 made two behavioral changes affecting
src/components/RichTextEditor/suggestion.ts:

1. Escape onKeyDown: returning true now means "consumer handled the
   event, don't auto-close." The old code destroyed the component and
   returned true, which left the plugin's internal state (decorations,
   active flag) active. Removed the custom Escape branch — the plugin
   now handles Escape via onExit, which already does the cleanup.

2. Outside-click closing: the plugin no longer attaches a global
   document mousedown handler. Restored that behavior locally using
   the new exitSuggestion(view) export to dispatch the exit transaction.

happy-dom 20 notes
------------------

happy-dom 20 disables JavaScript evaluation by default, which is
desirable defense-in-depth for the article-content parse path
(DOMParser.parseFromString doesn't execute scripts in the
generateJSON flow regardless).

happy-dom 19 dropped CommonJS support; Next.js 14 + Node 20 handles
ESM-only packages via require(). Verified by a full next build run.

Verification
------------

- pnpm install: lockfile clean, @tiptap/html@3.16.0 transitively
  resolves happy-dom@20.9.0
- pnpm exec tsc --noEmit: 4992 errors on main, 4992 errors on this
  branch — zero new errors anywhere (most are pre-existing Prisma
  type drift in article.service.ts and implicit-any drift elsewhere)
- pnpm next lint src/components/RichTextEditor/suggestion.ts: only
  pre-existing any warnings on the untouched updatePosition() helper
- next build: ✓ Compiled successfully (happy-dom 20 bundles cleanly
  through the Next.js loader; subsequent post-compile typecheck fails
  on the same AccountsCard.tsx error that fails on main)

Manual smoke testing required pre-merge: article render path, comment
@mention popup (open, arrow keys, Enter, Escape, outside click,
selection of an item), paste a YouTube URL, paste a StrawPoll URL.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(rich-text): align mention suggestion to SuggestionPluginKey

@tiptap/extension-mention's getSuggestionOptions creates a fresh
anonymous `new PluginKey()` per suggestion instance (verified at
node_modules/@tiptap/extension-mention/dist/index.js:14). Without
overriding it, exitSuggestion() — which defaults to
SuggestionPluginKey — would dispatch the exit metadata to a
different key than the active plugin reducer was watching, so
the outside-click handler would silently fail to close the popup
and the document mousedown listener would never be cleaned up.

The mention extension spreads overrideSuggestionOptions last
(line 44 of the same file), so setting pluginKey in the suggestion
config we pass to MentionNode.configure({ suggestion }) wins. Both
the plugin and exitSuggestion() now reference the same key.

Caught in review of #2276.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Zachary Lowden
2026-05-18 08:23:17 -05:00
committed by GitHub
parent 143c0eceff
commit 47ac55b78f
3 changed files with 343 additions and 305 deletions
+19 -19
View File
@@ -133,24 +133,25 @@
"@tanstack/react-query": "^4.12.0",
"@tanstack/react-query-devtools": "^4.13.0",
"@tanstack/react-virtual": "^3.13.12",
"@tiptap/core": "^3.16.0",
"@tiptap/extension-color": "3.0.9",
"@tiptap/extension-heading": "3.0.9",
"@tiptap/extension-image": "3.0.9",
"@tiptap/extension-link": "3.0.9",
"@tiptap/extension-mention": "3.0.9",
"@tiptap/extension-placeholder": "3.0.9",
"@tiptap/extension-text": "3.0.9",
"@tiptap/extension-text-style": "^3.16.0",
"@tiptap/extension-underline": "3.0.9",
"@tiptap/extension-youtube": "3.0.9",
"@tiptap/extensions": "^3.16.0",
"@tiptap/html": "3.0.9",
"@tiptap/pm": "3.0.9",
"@tiptap/react": "3.0.9",
"@tiptap/starter-kit": "3.0.9",
"@tiptap/static-renderer": "3.0.9",
"@tiptap/suggestion": "3.0.9",
"@tiptap/core": "3.16.0",
"@tiptap/extension-color": "3.16.0",
"@tiptap/extension-heading": "3.16.0",
"@tiptap/extension-image": "3.16.0",
"@tiptap/extension-link": "3.16.0",
"@tiptap/extension-mention": "3.16.0",
"@tiptap/extension-placeholder": "3.16.0",
"@tiptap/extension-text": "3.16.0",
"@tiptap/extension-text-style": "3.16.0",
"@tiptap/extension-underline": "3.16.0",
"@tiptap/extension-youtube": "3.16.0",
"@tiptap/extensions": "3.16.0",
"@tiptap/html": "3.16.0",
"@tiptap/pm": "3.16.0",
"@tiptap/react": "3.16.0",
"@tiptap/starter-kit": "3.16.0",
"@tiptap/static-renderer": "3.16.0",
"@tiptap/suggestion": "3.16.0",
"happy-dom": "^20.0.2",
"@trpc/client": "^10.45.0",
"@trpc/next": "^10.45.0",
"@trpc/react-query": "^10.45.0",
@@ -313,7 +314,6 @@
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-tailwindcss": "^3.15.1",
"happy-dom": "^18.0.1",
"husky": "^9.1.1",
"lint-staged": "^15.2.7",
"pg-format": "^1.0.4",
+300 -279
View File
@@ -99,7 +99,7 @@ importers:
version: 7.17.8(@mantine/core@7.17.8(@mantine/hooks@7.17.8(patch_hash=b45a85bd4d007c796b93eb90a75d3234b81cce13964921b25721734c7ed79f64)(react@18.3.1))(@types/react@18.0.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.17.8(patch_hash=b45a85bd4d007c796b93eb90a75d3234b81cce13964921b25721734c7ed79f64)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/tiptap':
specifier: ^7.17.7
version: 7.17.8(@mantine/core@7.17.8(@mantine/hooks@7.17.8(patch_hash=b45a85bd4d007c796b93eb90a75d3234b81cce13964921b25721734c7ed79f64)(react@18.3.1))(@types/react@18.0.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.17.8(patch_hash=b45a85bd4d007c796b93eb90a75d3234b81cce13964921b25721734c7ed79f64)(react@18.3.1))(@tiptap/extension-link@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))(@tiptap/react@3.0.9(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
version: 7.17.8(@mantine/core@7.17.8(@mantine/hooks@7.17.8(patch_hash=b45a85bd4d007c796b93eb90a75d3234b81cce13964921b25721734c7ed79f64)(react@18.3.1))(@types/react@18.0.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.17.8(patch_hash=b45a85bd4d007c796b93eb90a75d3234b81cce13964921b25721734c7ed79f64)(react@18.3.1))(@tiptap/extension-link@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))(@tiptap/react@3.16.0(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@marsidev/react-turnstile':
specifier: ^1.0.1
version: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -203,59 +203,59 @@ importers:
specifier: ^3.13.12
version: 3.13.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tiptap/core':
specifier: ^3.16.0
version: 3.16.0(@tiptap/pm@3.0.9)
specifier: 3.16.0
version: 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-color':
specifier: 3.0.9
version: 3.0.9(@tiptap/extension-text-style@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9)))
specifier: 3.16.0
version: 3.16.0(@tiptap/extension-text-style@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0)))
'@tiptap/extension-heading':
specifier: 3.0.9
version: 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
specifier: 3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-image':
specifier: 3.0.9
version: 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
specifier: 3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-link':
specifier: 3.0.9
version: 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
specifier: 3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-mention':
specifier: 3.0.9
version: 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(@tiptap/suggestion@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))
specifier: 3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)(@tiptap/suggestion@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))
'@tiptap/extension-placeholder':
specifier: 3.0.9
version: 3.0.9(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))
specifier: 3.16.0
version: 3.16.0(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))
'@tiptap/extension-text':
specifier: 3.0.9
version: 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
specifier: 3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-text-style':
specifier: ^3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
specifier: 3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-underline':
specifier: 3.0.9
version: 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
specifier: 3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-youtube':
specifier: 3.0.9
version: 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
specifier: 3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extensions':
specifier: ^3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
specifier: 3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/html':
specifier: 3.0.9
version: 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(happy-dom@18.0.1)
specifier: 3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)(happy-dom@20.9.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))
'@tiptap/pm':
specifier: 3.0.9
version: 3.0.9
specifier: 3.16.0
version: 3.16.0
'@tiptap/react':
specifier: 3.0.9
version: 3.0.9(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: 3.16.0
version: 3.16.0(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tiptap/starter-kit':
specifier: 3.0.9
version: 3.0.9
specifier: 3.16.0
version: 3.16.0
'@tiptap/static-renderer':
specifier: 3.0.9
version: 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: 3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tiptap/suggestion':
specifier: 3.0.9
version: 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
specifier: 3.16.0
version: 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@trpc/client':
specifier: ^10.45.0
version: 10.45.2(@trpc/server@10.45.2)
@@ -352,6 +352,9 @@ importers:
gray-matter:
specifier: ^4.0.3
version: 4.0.3
happy-dom:
specifier: ^20.0.2
version: 20.9.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
he:
specifier: ^1.2.0
version: 1.2.0
@@ -694,7 +697,7 @@ importers:
version: 5.62.0(eslint@8.22.0)(typescript@5.9.2)
'@vitest/coverage-v8':
specifier: ^4.0.18
version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.9)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@27.4.0(@noble/hashes@1.8.0)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(msw@2.12.10(@types/node@20.19.9)(typescript@5.9.2))(sass@1.90.0)(sugarss@5.0.1(postcss@8.5.6))(terser@5.47.1)(tsx@4.20.3)(yaml@2.8.1))
version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.9)(happy-dom@20.9.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(jiti@2.5.1)(jsdom@27.4.0(@noble/hashes@1.8.0)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(msw@2.12.10(@types/node@20.19.9)(typescript@5.9.2))(sass@1.90.0)(sugarss@5.0.1(postcss@8.5.6))(terser@5.47.1)(tsx@4.20.3)(yaml@2.8.1))
autoprefixer:
specifier: ^10.4.19
version: 10.4.21(postcss@8.5.6)
@@ -737,9 +740,6 @@ importers:
eslint-plugin-tailwindcss:
specifier: ^3.15.1
version: 3.18.2(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.17))(@types/node@20.19.9)(typescript@5.9.2)))
happy-dom:
specifier: ^18.0.1
version: 18.0.1
husky:
specifier: ^9.1.1
version: 9.1.7
@@ -787,7 +787,7 @@ importers:
version: 5.9.2
vitest:
specifier: ^4.0.18
version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.9)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@27.4.0(@noble/hashes@1.8.0)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(msw@2.12.10(@types/node@20.19.9)(typescript@5.9.2))(sass@1.90.0)(sugarss@5.0.1(postcss@8.5.6))(terser@5.47.1)(tsx@4.20.3)(yaml@2.8.1)
version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.9)(happy-dom@20.9.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(jiti@2.5.1)(jsdom@27.4.0(@noble/hashes@1.8.0)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(msw@2.12.10(@types/node@20.19.9)(typescript@5.9.2))(sass@1.90.0)(sugarss@5.0.1(postcss@8.5.6))(terser@5.47.1)(tsx@4.20.3)(yaml@2.8.1)
ws:
specifier: ^8.19.0
version: 8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
@@ -3529,159 +3529,159 @@ packages:
peerDependencies:
'@tiptap/pm': ^3.16.0
'@tiptap/extension-blockquote@3.0.9':
resolution: {integrity: sha512-dGhMWb6GIjgIUuLQDhSlHT6yB4YvnYqe01nHzEvcbSii75KOcLwboVnqxw4p+gsDZLvZRGv/6bZBJh7GKZa8OQ==}
'@tiptap/extension-blockquote@3.23.4':
resolution: {integrity: sha512-7YjSibNlPcy9eGK+tHt5G/Njr7nPxl+rZ3rCC6TwtLIRLSHPnoGDsfFOgTPkXxaQcE1a/VQwemnYfWc3kdIjDQ==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/core': 3.23.4
'@tiptap/extension-bold@3.0.9':
resolution: {integrity: sha512-rVULIFt9ZO+fO5ty9zuC3HwY3knxUw7q9JBztpKPfQQCuIJ+iQnOfB8NtI3L8hxVSxhIR1pqr8B3S/8vlpXbVg==}
'@tiptap/extension-bold@3.23.4':
resolution: {integrity: sha512-3L9tnZ12i+98u5df2nV2zGu/sc3rhI87E3ocn1YYAO8PJUAgZnMwdet8JawCrS1uut5sRKlxo3SXEmdNfRVm/w==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/core': 3.23.4
'@tiptap/extension-bubble-menu@3.0.9':
resolution: {integrity: sha512-fZQfdSbKJl3J+Yi+s8NrcLBgXHOaGVD4g+vn+orTPUlZdG9FWvEoon8DexOdK9OvYnW6QMM7kS8whOgpogVyUQ==}
'@tiptap/extension-bubble-menu@3.23.4':
resolution: {integrity: sha512-EPTpL/IFp/aTGZErBq/Mc3dKznj6G/qNEkVYWjueOn1oKApyT0P6WVHGvu/vpMdErhzmoGDuFPPGVS6T8Upx2Q==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/pm': ^3.0.9
'@tiptap/core': 3.23.4
'@tiptap/pm': 3.23.4
'@tiptap/extension-bullet-list@3.0.9':
resolution: {integrity: sha512-Aob5TVfrtoEzfTm3wl7lognmWia6EEilOxLihSGISCvI4FTndJg+mwhumduQeYCLWkF9i/DR87m2/3EbjR3R4Q==}
'@tiptap/extension-bullet-list@3.23.4':
resolution: {integrity: sha512-mXB2KZOz1R+E6VNTZ3vzdAk7ZDGKjPmsJEZIQg1B5qRycTKg49/rCCkLA2QnqAwX6BzS3mLLH1RWE2W0oXD7vg==}
peerDependencies:
'@tiptap/extension-list': ^3.0.9
'@tiptap/extension-list': 3.23.4
'@tiptap/extension-code-block@3.0.9':
resolution: {integrity: sha512-H692k9sHIE3rR3S+BIknQXsLb8HSojk+7gQ5DV0hYajSzpJ02OUL4AnNlpMuSgZuaq+ljpN4sT8kCIzIE1kQxw==}
'@tiptap/extension-code-block@3.23.4':
resolution: {integrity: sha512-UEU1w/85CSNKktbhESnIRmtjKcH7DeschReZA8err1wAnYLTKzid5ucnJSJ25iRg2V5Fnuws5gnPT5CVgdfXCQ==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/pm': ^3.0.9
'@tiptap/core': 3.23.4
'@tiptap/pm': 3.23.4
'@tiptap/extension-code@3.0.9':
resolution: {integrity: sha512-jMo7crwLIefwy13WI2FzxlyJN9AbLNsESFbJuv/KPzjpN7uzPKYsE33Uy2IZD5hPoHtA5UmAUfbz0HzWtWy5Yw==}
'@tiptap/extension-code@3.23.4':
resolution: {integrity: sha512-C0TeRipMycUEBnV+Mzx6eLp/yZb6Vi/waP3Tkb0lO5/ikg7LWLB7AlmMunjIXEUcR/pJHID/aEh5PfJFpysUDg==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/core': 3.23.4
'@tiptap/extension-color@3.0.9':
resolution: {integrity: sha512-cA68vy5lZwBVqBLMEDL6rjKIBPXRV+sUjmV+UokJcguAUTerHLK0dAHcbKRp9hJ6KF6z1KAOC7u3ZBhyjibC1w==}
'@tiptap/extension-color@3.16.0':
resolution: {integrity: sha512-ws9hayQKncfztUnOL0isLgGg1Bzl8/pcPQQVtXSH336DLzaPQB1Uv2fBmUlBx229IZHa6YKI9oGZSYfXSi934A==}
peerDependencies:
'@tiptap/extension-text-style': ^3.0.9
'@tiptap/extension-text-style': ^3.16.0
'@tiptap/extension-document@3.0.9':
resolution: {integrity: sha512-DB/R5e6QvuGhY8EhCkfNjR2xQfz/TOWoxfQGhDuy5U+oK3WBwCcHq9t5+nbSCMHtKfi/i49aHKDvv7TQCpuP0w==}
'@tiptap/extension-document@3.23.4':
resolution: {integrity: sha512-YC4G6VkxT629rlqUTwD6XvOpxjvghn7fxrK4RbyKVJY2C6E1vgmX0won1Ast6v+qTE6iONOMS6f6VyPxSGjg4w==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/core': 3.23.4
'@tiptap/extension-dropcursor@3.0.9':
resolution: {integrity: sha512-+P+1nfeCtPLj3OHNiATOL3UyM2omZ8+ac6MKm+FxunRAZZsHzbEFUYYdLF7prEmaf0z0c1k4LKSWpbrIX92pKA==}
'@tiptap/extension-dropcursor@3.23.4':
resolution: {integrity: sha512-ujJQUIENk0RwVFCh5g/TOSEv1a7Pnam/cjHmSUqHWUNZkYS9aOqjm+JfURJPCinRS2oHvo3AARul5mkKgDJYcA==}
peerDependencies:
'@tiptap/extensions': ^3.0.9
'@tiptap/extensions': 3.23.4
'@tiptap/extension-floating-menu@3.0.9':
resolution: {integrity: sha512-WYQ3mW6G0zxoni6TegpQ46a1Qe1zj8Ev5sBH79H4Mbf0qsc7MOq07jLjipv9M0EJJPUi0cfkQlwfV41nH1ue/g==}
'@tiptap/extension-floating-menu@3.23.4':
resolution: {integrity: sha512-eAc72bKM26yIPx0jsU8qdjE71vFNVu5R9jGbdItBMFc0SPLS4qY8g+8RJ+iWoLwbcSEpgooLS9D9sLfdAU+Tvw==}
peerDependencies:
'@floating-ui/dom': ^1.0.0
'@tiptap/core': ^3.0.9
'@tiptap/pm': ^3.0.9
'@tiptap/core': 3.23.4
'@tiptap/pm': 3.23.4
'@tiptap/extension-gapcursor@3.0.9':
resolution: {integrity: sha512-+jy7Z/V6nOtvWin+zJYYoRwEYDOHDlF34Ey1T7A8aRcJlPeAQhoB1Ek7R3Rd3nsuByz70IfQapDvkbhY1nkNvQ==}
'@tiptap/extension-gapcursor@3.23.4':
resolution: {integrity: sha512-RuyvOlIGP6UpVOc0Lw0L63jKLtYM49CNhPV2OMSfwwwbBZ3pJGos2/SqpYg71d3sn+qpsAopS4Pfr8iPZog73A==}
peerDependencies:
'@tiptap/extensions': ^3.0.9
'@tiptap/extensions': 3.23.4
'@tiptap/extension-hard-break@3.0.9':
resolution: {integrity: sha512-PWNYsUwVsMWt/R5/OWjfGb+7DQT0DvH+1owBimRq0pWZepg8qkz1jdPGgsRmUFyERRsXeEpgj3VaQfrgbyUfrA==}
'@tiptap/extension-hard-break@3.23.4':
resolution: {integrity: sha512-ODlpZCi7n136BH9luM09EFL8Pg+bbRCd0tzCQM5BKMXRkLitYZA8Gl/f5DLmGJ50wzFsDPXK2Br2g9UvZK7COg==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/core': 3.23.4
'@tiptap/extension-heading@3.0.9':
resolution: {integrity: sha512-LRLCIt87fvDZ5CdkinzhkCwRz5ax6FlsjJzG32MJ3wXyvVslqeLXBvH28JFUZEyzgcd/SnYmYxnef5+yvAX61g==}
'@tiptap/extension-heading@3.16.0':
resolution: {integrity: sha512-du4d1Ukvhr1zvPWlU/HS3NMlRswzGRSNDNfCFUhdYgQoHOSnUXshnlKD3E5H0EHfL9UwT4JFyqAT3+1ZnahkdA==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/core': ^3.16.0
'@tiptap/extension-horizontal-rule@3.0.9':
resolution: {integrity: sha512-jPNCOte0y9R3Y4PiEA/CRGgRk8WoL700Mnn8NPVHa4juUjvMl1qxL8hdnW/k8cxhrBA8tV0qcq82+/Vqq6jSfA==}
'@tiptap/extension-horizontal-rule@3.23.4':
resolution: {integrity: sha512-EA4kK8ywZ4dQNOdxeZbplmDDs5T5LjMgHpqxRwukj9wwKiILOK5E3fcKm1fCKh9Q02w96jax6YVccHwmgJP3sQ==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/pm': ^3.0.9
'@tiptap/core': 3.23.4
'@tiptap/pm': 3.23.4
'@tiptap/extension-image@3.0.9':
resolution: {integrity: sha512-/2igN/oIF58zqX5fcg00bf6qGLcQyXHysl5I8GiurkvO95d+SQTlYbJneSRUpt6CgrUKbhRnMBPVubmapgg+Zw==}
'@tiptap/extension-image@3.16.0':
resolution: {integrity: sha512-mTjt4kdyVtY/2dJcfxAgBae/dkH+r6GwARl7NlPtnI3EzpELFR65FNuOQyTxFXP3yfV9uMtPpq6Wevk8aLTsxQ==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/core': ^3.16.0
'@tiptap/extension-italic@3.0.9':
resolution: {integrity: sha512-Gt4FbMtZerzKpit8+FvIjIQ3CBD559/FFC+kOT9y8JHlINeqWyh/bgHuaA/9/XtHphOQiA7NDwOiuPh4KIKpqA==}
'@tiptap/extension-italic@3.23.4':
resolution: {integrity: sha512-jUAHi+HZlg47BzgVIy6y/UH5vev7vPQ95jddhB5K3hC122kvWFMXlken7UOnqzbxNcHs2+4Oi/ZJirYMpT4P5w==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/core': 3.23.4
'@tiptap/extension-link@3.0.9':
resolution: {integrity: sha512-cOsG3vpct7/JuenxCePDj5dlaSUEe2eK/g/jlRixgW4Llx5DvG2yj8+gha4MHdCUp/MrUBR4M+NJk1dOOSKXGw==}
'@tiptap/extension-link@3.16.0':
resolution: {integrity: sha512-WPPJLtGXQadBVVwH6gcMpaXIgfvFF9NGpE2IVqleVKR3Epv2Rd4aWd4oyAdrT8KU9G6dzMXZfkrB8aArTDKxYQ==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/pm': ^3.0.9
'@tiptap/core': ^3.16.0
'@tiptap/pm': ^3.16.0
'@tiptap/extension-list-item@3.0.9':
resolution: {integrity: sha512-K+ogk1BH/eYhsK9nSTXNdIXlxQcXzty6h1QFiZNr9XmaLk+q4NZFHR5FVz3EJ7QXyw+Gv/2FQn+T2Q/GpbMxZQ==}
'@tiptap/extension-list-item@3.23.4':
resolution: {integrity: sha512-Q/JXosShD5oyDwukE6igdrZD2lb0ZgyoQTHYchk0pzU4frClFbn3RI1wKP+XeqKLhdO6KH2WZ9rERGH7PtDi7Q==}
peerDependencies:
'@tiptap/extension-list': ^3.0.9
'@tiptap/extension-list': 3.23.4
'@tiptap/extension-list-keymap@3.0.9':
resolution: {integrity: sha512-naz4+EFzLN695f53GATiglPOc5SOLBm1DNhhUHZNlrUVfDtKmrdbo8t9a/NhAE6Ne/pfg5tbuS+OKuvbJaJcAg==}
'@tiptap/extension-list-keymap@3.23.4':
resolution: {integrity: sha512-9FezifCfuoc0o+5K6l4QNOOfelqxnDGg/f9oL1D/LFZPC54bPxpWWft9QCWOqyqZgyLCLjbCjciAlbgkrFUmmw==}
peerDependencies:
'@tiptap/extension-list': ^3.0.9
'@tiptap/extension-list': 3.23.4
'@tiptap/extension-list@3.0.9':
resolution: {integrity: sha512-y5JQoFmVR+6FhDdEz2oFIMkURSRSDhCtsrlNWdUpSTGnTAa2WZT7nEhHcIMSGvYU3t0fkfLQ9yTMSaQZFa5GLA==}
'@tiptap/extension-list@3.23.4':
resolution: {integrity: sha512-yuauDm6qW/7q+ZO0YJBKQEGdnUm6DDTJM8AMp9bMZrT4jRf/zyUtNcZ91QEfFvBcyVuI+10PIOXtNPevhQ741Q==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/pm': ^3.0.9
'@tiptap/core': 3.23.4
'@tiptap/pm': 3.23.4
'@tiptap/extension-mention@3.0.9':
resolution: {integrity: sha512-DTQNAQkHZ+7Enlt3KvjqN6eECINlqPpET4Drzwj8Mmz9kMILc87cz3G2cwEKRrS9A1Xn3H3VpWvElWE2Wq9JHw==}
'@tiptap/extension-mention@3.16.0':
resolution: {integrity: sha512-4vCC8XxHruYSTdoRr37GXvUDvSU0nEc9tUr6673ylOMxPu2lvMb7W+unDn6p5mQu91vKvotyzJMtyHCo9Ac3Fw==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/pm': ^3.0.9
'@tiptap/suggestion': ^3.0.9
'@tiptap/core': ^3.16.0
'@tiptap/pm': ^3.16.0
'@tiptap/suggestion': ^3.16.0
'@tiptap/extension-ordered-list@3.0.9':
resolution: {integrity: sha512-ACubdGc/y/rKPEgHTO7hDSg547wRRA+Es7c/rQgjrkpI///LBJQfixyUvNg2UNNPttNsavF/CUwhshCeo9MeBA==}
'@tiptap/extension-ordered-list@3.23.4':
resolution: {integrity: sha512-+3ofyssYnOTa1+nFWEmCAY1ngn8nAV1xo25JnNNC87NMU9WkSgr93jB7/uUJP0uui1C2dBLlaup3XXm108yarw==}
peerDependencies:
'@tiptap/extension-list': ^3.0.9
'@tiptap/extension-list': 3.23.4
'@tiptap/extension-paragraph@3.0.9':
resolution: {integrity: sha512-K5zGg4zLxxqAG0BgtRpLvKclYSGoSSuU1Fza0M5MwUgrFA0S2q4JnLB1czQ77S4pfb3hpScIe50fwJzZmIUEQw==}
'@tiptap/extension-paragraph@3.23.4':
resolution: {integrity: sha512-KbhXjCFzWphvFn5VU7E4dtmYDm+bssI1i0+CnXPWCXkjdaaX88ck68Xp1fKz8/bbI/CqlgiNDO/3TvqgtZ6woQ==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/core': 3.23.4
'@tiptap/extension-placeholder@3.0.9':
resolution: {integrity: sha512-OgDVijDrNFDJpe/1/yMx6VFEmGBt0vE6ZWw5kGkM4NVfOxhRvv6mSZXio269dc9oBSjmyTISKaI1JAYVCfyJIw==}
'@tiptap/extension-placeholder@3.16.0':
resolution: {integrity: sha512-sbffATC2fwyRF9i483fSRj5MTADCqD1QUl4LCAt8VO+cVEQbV19WV5J7EQ8wIjDEoFoOKIUXdU/0CEcF4IpjDQ==}
peerDependencies:
'@tiptap/extensions': ^3.0.9
'@tiptap/extensions': ^3.16.0
'@tiptap/extension-strike@3.0.9':
resolution: {integrity: sha512-2TBQ9P/FGe+/34ckfwP+eCdb4vbxDVZ5qD0piDIR9Ws5QI5IdtW90pNO4roxiPeRdVFrhTbFPEIuL0tg4NQRmg==}
'@tiptap/extension-strike@3.23.4':
resolution: {integrity: sha512-Vnq5vW801zPbu1LtKeA5k4R241jY+hRjXeijYwIPxy15KzIiipY12518HiCf6/8kkRbMxgOfdYg9X4BRV3HV3g==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/core': 3.23.4
'@tiptap/extension-text-style@3.16.0':
resolution: {integrity: sha512-D+gIqMvCDYTCvnOVpFwfqjSi0UVAbe/9jXP765WlZsN5SOZm4tGOCo+AGxdxReWHsfteM+bdxaK6It1EDRrmiA==}
peerDependencies:
'@tiptap/core': ^3.16.0
'@tiptap/extension-text@3.0.9':
resolution: {integrity: sha512-yWdz4aW1nu5YGcinxfu3FXiwMnP/7jp+s7dFXhq9m/6zhDUD2+qyUwhJfIU4Tcz+BGdVHqoNgOA3QXLMA6jyFA==}
'@tiptap/extension-text@3.16.0':
resolution: {integrity: sha512-KTewoX4wZq95cKnjBbogRwBFoGgM6qUg1yjCQ/M6Ajkp4Mtp8Iki9EiAxtfk76b/wtXFf3DsDhFOeVqgKyYbYg==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/core': ^3.16.0
'@tiptap/extension-underline@3.0.9':
resolution: {integrity: sha512-xLR5NbnxlEJmvfb4Aj8wCbTmh/ycnPsSDeP8+TAsdAYxypSA6BP6G0t4d4NWreqAq+tq6QV6Eh0+YDN0G1VZxw==}
'@tiptap/extension-underline@3.16.0':
resolution: {integrity: sha512-obXAPgHVZocMaW6HtKyCYsN4CxHogWr23gioyEQcpIX0LeegHDqxkoPrjIPX6Tn1isDyvXchcSKWHEfiHO3ZOA==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/core': ^3.16.0
'@tiptap/extension-youtube@3.0.9':
resolution: {integrity: sha512-9buHygO7zPOCzuR65FgenKwwk2BrcBRelin5xtC+TweugKDXY9+XmvKnGrY6Lz12dxbFh+G4RAhWMZHFt+gBIQ==}
'@tiptap/extension-youtube@3.16.0':
resolution: {integrity: sha512-G+g36rzbanNxnN9t5SUvqoL5ooT+5QexZNANG9JFb2Lg74oweCaX4IUEgwo03X/oVrr/cehcVS3QUAh15vyYgQ==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/core': ^3.16.0
'@tiptap/extensions@3.16.0':
resolution: {integrity: sha512-0iVrn0FHcHIRMdsQLQbf16NgYrKz+Sup/8dDMVBy1QoHn5Hb51QZABqXJTZ6u7My34b4fNZrSggzBAE7l7N/pA==}
@@ -3689,40 +3689,42 @@ packages:
'@tiptap/core': ^3.16.0
'@tiptap/pm': ^3.16.0
'@tiptap/html@3.0.9':
resolution: {integrity: sha512-DJotl3aHrfxoOlyNsOhBPuSMsghm1pv/vgHQvo1MxgP0+sBpx7zjxMuydMU87ywGcgaEpUSbE52NJQLgtbXJ5A==}
'@tiptap/html@3.16.0':
resolution: {integrity: sha512-6DnnzMSfLzlcJ2MdqvmeJ76LfbPPJU9EHxLnPmAhN1ZPrtpkeSKmCUpLohkgR/U/InZxeOjrCn2M4vQfxCor/Q==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/pm': ^3.0.9
happy-dom: ^18.0.1
'@tiptap/core': ^3.16.0
'@tiptap/pm': ^3.16.0
happy-dom: ^20.0.2
'@tiptap/pm@3.0.9':
resolution: {integrity: sha512-cJdnpGyirRxwi6M4IkyapEK/jhcjFXdfX3uhJp/4uVH1dynNXalV0gE/YnH/yt55kzwvG9OUrwOQt+t1iXgNog==}
'@tiptap/pm@3.16.0':
resolution: {integrity: sha512-FMxZ6Tc5ONKa/EByDV8lswct6YW2lF/wn11zqXmrfBZhdG7UQPTijpSwb6TCqaO5GOHmixaIaDPj+zimUREHQA==}
'@tiptap/react@3.0.9':
resolution: {integrity: sha512-BbvWPSgYGvd9m8fPXKI81gf9KP+1SMCPpscbtbbhPyxiW2ziY+jwo+i7MwVI73P89hWAJCy/43UnOde438HmOA==}
'@tiptap/react@3.16.0':
resolution: {integrity: sha512-r1R19Ma4zxGt8ImiNOqSArAnWO239KUI9tTVeelgTyekPj7643lO8GbtuXJfAeWGPduDIpcAgR/Dd4NKieetiA==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/pm': ^3.0.9
'@tiptap/core': ^3.16.0
'@tiptap/pm': ^3.16.0
'@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
'@types/react-dom': ^17.0.0 || ^18.0.0 || ^19.0.0
react: ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0
'@tiptap/starter-kit@3.0.9':
resolution: {integrity: sha512-CYg6tV5fYOvkP1gyATkJJj+nFYmwjDKLipQc/r0D/tHKypxefENrm4G7mf4B78zsB/izfk5mW3iujvyeod6EcQ==}
'@tiptap/starter-kit@3.16.0':
resolution: {integrity: sha512-eWi+77SgKyhSx91Hmn32ER+gPN6FfInGtod4A+XxSG+LqS/sn6kpUEdowYrnqiZzhUXZCSTSJvC+UcMUZHOkxQ==}
'@tiptap/static-renderer@3.0.9':
resolution: {integrity: sha512-DZ7QmEmBHB1SbP0pOd0yrbfkRZX572fo5Mi2x2xHDOVToQcfcfjG77XR3y9W+rKY7L9rYXS0kYcd4CT02duc3g==}
'@tiptap/static-renderer@3.16.0':
resolution: {integrity: sha512-5mZKhlS7DUeH+fTYTgqY8EqSzXrtcKsIrD9o7pcGHgnlw3BqqTmLzTQFP6jsiShy1OQyxfU8/VNzVGlnJwi7wg==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/pm': ^3.0.9
'@tiptap/core': ^3.16.0
'@tiptap/pm': ^3.16.0
react: ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0
'@tiptap/suggestion@3.0.9':
resolution: {integrity: sha512-irthqfUybezo3IwR6AXvyyTOtkzwfvvst58VXZtTnR1nN6NEcrs3TQoY3bGKGbN83bdiquKh6aU2nLnZfAhoXg==}
'@tiptap/suggestion@3.16.0':
resolution: {integrity: sha512-o0fix23VeqiFtvGqJkiBLlBrbfhSMeYFlXPoanU7zbL1TC2dhhEb6nlUr8Ppnc6pkUpWwo7JSN18hjJutPYGPw==}
peerDependencies:
'@tiptap/core': ^3.0.9
'@tiptap/pm': ^3.0.9
'@tiptap/core': ^3.16.0
'@tiptap/pm': ^3.16.0
'@tootallnate/once@2.0.0':
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
@@ -5467,6 +5469,10 @@ packages:
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'}
entities@7.0.1:
resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
engines: {node: '>=0.12'}
entities@8.0.0:
resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==}
engines: {node: '>=20.19.0'}
@@ -5832,6 +5838,10 @@ packages:
fast-diff@1.3.0:
resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
fast-equals@5.4.0:
resolution: {integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==}
engines: {node: '>=6.0.0'}
fast-fifo@1.3.2:
resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
@@ -6200,8 +6210,8 @@ packages:
resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
engines: {node: '>=10'}
happy-dom@18.0.1:
resolution: {integrity: sha512-qn+rKOW7KWpVTtgIUi6RVmTBZJSe2k0Db0vh1f7CWrWclkkc7/Q+FrOfkZIb2eiErLyqu5AXEzE7XthO9JVxRA==}
happy-dom@20.9.0:
resolution: {integrity: sha512-GZZ9mKe8r646NUAf/zemnGbjYh4Bt8/MqASJY+pSm5ZDtc3YQox+4gsLI7yi1hba6o+eCsGxpHn5+iEVn31/FQ==}
engines: {node: '>=20.0.0'}
has-bigints@1.1.0:
@@ -11803,12 +11813,12 @@ snapshots:
dependencies:
react: 18.3.1
'@mantine/tiptap@7.17.8(@mantine/core@7.17.8(@mantine/hooks@7.17.8(patch_hash=b45a85bd4d007c796b93eb90a75d3234b81cce13964921b25721734c7ed79f64)(react@18.3.1))(@types/react@18.0.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.17.8(patch_hash=b45a85bd4d007c796b93eb90a75d3234b81cce13964921b25721734c7ed79f64)(react@18.3.1))(@tiptap/extension-link@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))(@tiptap/react@3.0.9(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
'@mantine/tiptap@7.17.8(@mantine/core@7.17.8(@mantine/hooks@7.17.8(patch_hash=b45a85bd4d007c796b93eb90a75d3234b81cce13964921b25721734c7ed79f64)(react@18.3.1))(@types/react@18.0.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.17.8(patch_hash=b45a85bd4d007c796b93eb90a75d3234b81cce13964921b25721734c7ed79f64)(react@18.3.1))(@tiptap/extension-link@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))(@tiptap/react@3.16.0(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@mantine/core': 7.17.8(@mantine/hooks@7.17.8(patch_hash=b45a85bd4d007c796b93eb90a75d3234b81cce13964921b25721734c7ed79f64)(react@18.3.1))(@types/react@18.0.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/hooks': 7.17.8(patch_hash=b45a85bd4d007c796b93eb90a75d3234b81cce13964921b25721734c7ed79f64)(react@18.3.1)
'@tiptap/extension-link': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/react': 3.0.9(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tiptap/extension-link': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/react': 3.16.0(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -13440,151 +13450,151 @@ snapshots:
'@tanstack/virtual-core@3.13.12': {}
'@tiptap/core@3.16.0(@tiptap/pm@3.0.9)':
'@tiptap/core@3.16.0(@tiptap/pm@3.16.0)':
dependencies:
'@tiptap/pm': 3.0.9
'@tiptap/pm': 3.16.0
'@tiptap/extension-blockquote@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-blockquote@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-bold@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-bold@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-bubble-menu@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)':
'@tiptap/extension-bubble-menu@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)':
dependencies:
'@floating-ui/dom': 1.7.3
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/pm': 3.0.9
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/pm': 3.16.0
optional: true
'@tiptap/extension-bullet-list@3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))':
'@tiptap/extension-bullet-list@3.23.4(@tiptap/extension-list@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/extension-list': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/extension-list': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-code-block@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)':
'@tiptap/extension-code-block@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/pm': 3.0.9
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/pm': 3.16.0
'@tiptap/extension-code@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-code@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-color@3.0.9(@tiptap/extension-text-style@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9)))':
'@tiptap/extension-color@3.16.0(@tiptap/extension-text-style@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0)))':
dependencies:
'@tiptap/extension-text-style': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
'@tiptap/extension-text-style': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-document@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-document@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-dropcursor@3.0.9(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))':
'@tiptap/extension-dropcursor@3.23.4(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/extensions': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/extensions': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-floating-menu@3.0.9(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)':
'@tiptap/extension-floating-menu@3.23.4(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)':
dependencies:
'@floating-ui/dom': 1.7.3
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/pm': 3.0.9
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/pm': 3.16.0
optional: true
'@tiptap/extension-gapcursor@3.0.9(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))':
'@tiptap/extension-gapcursor@3.23.4(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/extensions': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/extensions': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-hard-break@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-hard-break@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-heading@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-heading@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-horizontal-rule@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)':
'@tiptap/extension-horizontal-rule@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/pm': 3.0.9
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/pm': 3.16.0
'@tiptap/extension-image@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-image@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-italic@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-italic@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-link@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)':
'@tiptap/extension-link@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/pm': 3.0.9
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/pm': 3.16.0
linkifyjs: 4.3.2
'@tiptap/extension-list-item@3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))':
'@tiptap/extension-list-item@3.23.4(@tiptap/extension-list@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/extension-list': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/extension-list': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-list-keymap@3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))':
'@tiptap/extension-list-keymap@3.23.4(@tiptap/extension-list@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/extension-list': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/extension-list': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-list@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)':
'@tiptap/extension-list@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/pm': 3.0.9
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/pm': 3.16.0
'@tiptap/extension-mention@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(@tiptap/suggestion@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))':
'@tiptap/extension-mention@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)(@tiptap/suggestion@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/pm': 3.0.9
'@tiptap/suggestion': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/pm': 3.16.0
'@tiptap/suggestion': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-ordered-list@3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))':
'@tiptap/extension-ordered-list@3.23.4(@tiptap/extension-list@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/extension-list': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/extension-list': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-paragraph@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-paragraph@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-placeholder@3.0.9(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))':
'@tiptap/extension-placeholder@3.16.0(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/extensions': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/extensions': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-strike@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-strike@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-text-style@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-text-style@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-text@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-text@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-underline@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-underline@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-youtube@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))':
'@tiptap/extension-youtube@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)':
'@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/pm': 3.0.9
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/pm': 3.16.0
'@tiptap/html@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(happy-dom@18.0.1)':
'@tiptap/html@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)(happy-dom@20.9.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/pm': 3.0.9
happy-dom: 18.0.1
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/pm': 3.16.0
happy-dom: 20.9.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
'@tiptap/pm@3.0.9':
'@tiptap/pm@3.16.0':
dependencies:
prosemirror-changeset: 2.3.1
prosemirror-collab: 1.3.1
@@ -13605,59 +13615,61 @@ snapshots:
prosemirror-transform: 1.10.4
prosemirror-view: 1.40.1
'@tiptap/react@3.0.9(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
'@tiptap/react@3.16.0(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/pm': 3.0.9
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/pm': 3.16.0
'@types/react': 18.0.14
'@types/react-dom': 18.0.5
'@types/use-sync-external-store': 0.0.6
fast-deep-equal: 3.1.3
fast-equals: 5.4.0
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
use-sync-external-store: 1.5.0(react@18.3.1)
optionalDependencies:
'@tiptap/extension-bubble-menu': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/extension-floating-menu': 3.0.9(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/extension-bubble-menu': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-floating-menu': 3.23.4(@floating-ui/dom@1.7.3)(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
transitivePeerDependencies:
- '@floating-ui/dom'
'@tiptap/starter-kit@3.0.9':
'@tiptap/starter-kit@3.16.0':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/extension-blockquote': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
'@tiptap/extension-bold': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
'@tiptap/extension-bullet-list': 3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))
'@tiptap/extension-code': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
'@tiptap/extension-code-block': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/extension-document': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
'@tiptap/extension-dropcursor': 3.0.9(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))
'@tiptap/extension-gapcursor': 3.0.9(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))
'@tiptap/extension-hard-break': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
'@tiptap/extension-heading': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
'@tiptap/extension-horizontal-rule': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/extension-italic': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
'@tiptap/extension-link': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/extension-list': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/extension-list-item': 3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))
'@tiptap/extension-list-keymap': 3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))
'@tiptap/extension-ordered-list': 3.0.9(@tiptap/extension-list@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))
'@tiptap/extension-paragraph': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
'@tiptap/extension-strike': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
'@tiptap/extension-text': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
'@tiptap/extension-underline': 3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))
'@tiptap/extensions': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)
'@tiptap/pm': 3.0.9
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/extension-blockquote': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-bold': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-bullet-list': 3.23.4(@tiptap/extension-list@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))
'@tiptap/extension-code': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-code-block': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-document': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-dropcursor': 3.23.4(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))
'@tiptap/extension-gapcursor': 3.23.4(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))
'@tiptap/extension-hard-break': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-heading': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-horizontal-rule': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-italic': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-link': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-list': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/extension-list-item': 3.23.4(@tiptap/extension-list@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))
'@tiptap/extension-list-keymap': 3.23.4(@tiptap/extension-list@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))
'@tiptap/extension-ordered-list': 3.23.4(@tiptap/extension-list@3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))
'@tiptap/extension-paragraph': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-strike': 3.23.4(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-text': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extension-underline': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))
'@tiptap/extensions': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)
'@tiptap/pm': 3.16.0
'@tiptap/static-renderer@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
'@tiptap/static-renderer@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/pm': 3.0.9
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/pm': 3.16.0
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
'@tiptap/suggestion@3.0.9(@tiptap/core@3.16.0(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)':
'@tiptap/suggestion@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)':
dependencies:
'@tiptap/core': 3.16.0(@tiptap/pm@3.0.9)
'@tiptap/pm': 3.0.9
'@tiptap/core': 3.16.0(@tiptap/pm@3.16.0)
'@tiptap/pm': 3.16.0
'@tootallnate/once@2.0.0': {}
@@ -14130,7 +14142,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.9)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@27.4.0(@noble/hashes@1.8.0)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(msw@2.12.10(@types/node@20.19.9)(typescript@5.9.2))(sass@1.90.0)(sugarss@5.0.1(postcss@8.5.6))(terser@5.47.1)(tsx@4.20.3)(yaml@2.8.1))':
'@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.9)(happy-dom@20.9.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(jiti@2.5.1)(jsdom@27.4.0(@noble/hashes@1.8.0)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(msw@2.12.10(@types/node@20.19.9)(typescript@5.9.2))(sass@1.90.0)(sugarss@5.0.1(postcss@8.5.6))(terser@5.47.1)(tsx@4.20.3)(yaml@2.8.1))':
dependencies:
'@bcoe/v8-coverage': 1.0.2
'@vitest/utils': 4.0.18
@@ -14142,7 +14154,7 @@ snapshots:
obug: 2.1.1
std-env: 3.10.0
tinyrainbow: 3.0.3
vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.9)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@27.4.0(@noble/hashes@1.8.0)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(msw@2.12.10(@types/node@20.19.9)(typescript@5.9.2))(sass@1.90.0)(sugarss@5.0.1(postcss@8.5.6))(terser@5.47.1)(tsx@4.20.3)(yaml@2.8.1)
vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.9)(happy-dom@20.9.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(jiti@2.5.1)(jsdom@27.4.0(@noble/hashes@1.8.0)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(msw@2.12.10(@types/node@20.19.9)(typescript@5.9.2))(sass@1.90.0)(sugarss@5.0.1(postcss@8.5.6))(terser@5.47.1)(tsx@4.20.3)(yaml@2.8.1)
'@vitest/expect@4.0.18':
dependencies:
@@ -15474,6 +15486,8 @@ snapshots:
entities@6.0.1: {}
entities@7.0.1: {}
entities@8.0.0:
optional: true
@@ -16053,6 +16067,8 @@ snapshots:
fast-diff@1.3.0: {}
fast-equals@5.4.0: {}
fast-fifo@1.3.2: {}
fast-glob@3.3.3:
@@ -16500,11 +16516,17 @@ snapshots:
dependencies:
duplexer: 0.1.2
happy-dom@18.0.1:
happy-dom@20.9.0(bufferutil@4.0.9)(utf-8-validate@5.0.10):
dependencies:
'@types/node': 20.19.9
'@types/whatwg-mimetype': 3.0.2
'@types/ws': 8.18.1
entities: 7.0.1
whatwg-mimetype: 3.0.0
ws: 8.20.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
transitivePeerDependencies:
- bufferutil
- utf-8-validate
has-bigints@1.1.0: {}
@@ -20902,7 +20924,7 @@ snapshots:
tsx: 4.20.3
yaml: 2.8.1
vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.9)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@27.4.0(@noble/hashes@1.8.0)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(msw@2.12.10(@types/node@20.19.9)(typescript@5.9.2))(sass@1.90.0)(sugarss@5.0.1(postcss@8.5.6))(terser@5.47.1)(tsx@4.20.3)(yaml@2.8.1):
vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.9)(happy-dom@20.9.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(jiti@2.5.1)(jsdom@27.4.0(@noble/hashes@1.8.0)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(msw@2.12.10(@types/node@20.19.9)(typescript@5.9.2))(sass@1.90.0)(sugarss@5.0.1(postcss@8.5.6))(terser@5.47.1)(tsx@4.20.3)(yaml@2.8.1):
dependencies:
'@vitest/expect': 4.0.18
'@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@20.19.9)(typescript@5.9.2))(vite@7.3.1(@types/node@20.19.9)(jiti@2.5.1)(sass@1.90.0)(sugarss@5.0.1(postcss@8.5.6))(terser@5.47.1)(tsx@4.20.3)(yaml@2.8.1))
@@ -20927,7 +20949,7 @@ snapshots:
optionalDependencies:
'@opentelemetry/api': 1.9.0
'@types/node': 20.19.9
happy-dom: 18.0.1
happy-dom: 20.9.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
jsdom: 27.4.0(@noble/hashes@1.8.0)(bufferutil@4.0.9)(utf-8-validate@5.0.10)
transitivePeerDependencies:
- jiti
@@ -21151,7 +21173,6 @@ snapshots:
optionalDependencies:
bufferutil: 4.0.9
utf-8-validate: 5.0.10
optional: true
wsl-utils@0.1.0:
dependencies:
+24 -7
View File
@@ -1,4 +1,5 @@
import type { SuggestionOptions } from '@tiptap/suggestion';
import { exitSuggestion, SuggestionPluginKey } from '@tiptap/suggestion';
import { computePosition, flip, shift } from '@floating-ui/dom';
import { posToDOMRect, ReactRenderer } from '@tiptap/react';
@@ -11,13 +12,19 @@ export function getSuggestions(options?: Options) {
const { defaultSuggestions = [] } = options || {};
const suggestion: Omit<SuggestionOptions, 'editor'> = {
// @tiptap/extension-mention creates a fresh anonymous PluginKey per
// suggestion instance. exitSuggestion() defaults to SuggestionPluginKey,
// so without aligning the keys here the metadata-only exit transaction
// would never reach the mention plugin's reducer and outside-click
// would silently fail to close the popup.
pluginKey: SuggestionPluginKey,
items: ({ query }) =>
defaultSuggestions
.filter((suggestion) => suggestion.label.toLowerCase().startsWith(query.toLowerCase()))
.slice(0, 5),
render: () => {
let component: ReactRenderer<MentionListRef>;
// let popup: TippyInstance[] | undefined;
let outsideClickHandler: ((event: MouseEvent) => void) | null = null;
return {
onStart: (props) => {
@@ -32,6 +39,18 @@ export function getSuggestions(options?: Options) {
document.body.appendChild(component.element);
updatePosition(props.editor, component.element);
// @tiptap/suggestion 3.4.0 removed the built-in document mousedown
// handler that closed popups on outside click. Restore that behavior
// here so clicking outside the popup and editor exits the suggestion.
outsideClickHandler = (event: MouseEvent) => {
const target = event.target as Node | null;
if (!target) return;
if (component.element.contains(target)) return;
if (props.editor.view.dom.contains(target)) return;
exitSuggestion(props.editor.view);
};
document.addEventListener('mousedown', outsideClickHandler);
},
onUpdate(props) {
@@ -42,16 +61,14 @@ export function getSuggestions(options?: Options) {
},
onKeyDown(props) {
if (props.event.key === 'Escape') {
component.destroy();
return true;
}
return component.ref?.onKeyDown(props) ?? true;
},
onExit() {
if (outsideClickHandler) {
document.removeEventListener('mousedown', outsideClickHandler);
outsideClickHandler = null;
}
component.element.remove();
component.destroy();
},