Timothy Jaeryang Baek 2 mesiacov pred
rodič
commit
da91aba10f

+ 235 - 278
package-lock.json

@@ -13,30 +13,26 @@
 				"@codemirror/lang-python": "^6.1.6",
 				"@codemirror/language-data": "^6.5.1",
 				"@codemirror/theme-one-dark": "^6.1.2",
+				"@floating-ui/dom": "^1.7.2",
 				"@huggingface/transformers": "^3.0.0",
 				"@mediapipe/tasks-vision": "^0.10.17",
 				"@pyscript/core": "^0.4.32",
 				"@sveltejs/adapter-node": "^2.0.0",
 				"@sveltejs/svelte-virtual-list": "^3.0.1",
-				"@tiptap/core": "^2.11.9",
-				"@tiptap/extension-bubble-menu": "^2.25.0",
-				"@tiptap/extension-character-count": "^2.25.0",
-				"@tiptap/extension-code-block-lowlight": "^2.11.9",
-				"@tiptap/extension-floating-menu": "^2.25.0",
-				"@tiptap/extension-highlight": "^2.10.0",
-				"@tiptap/extension-history": "^2.25.1",
-				"@tiptap/extension-link": "^2.25.0",
-				"@tiptap/extension-placeholder": "^2.10.0",
-				"@tiptap/extension-table": "^2.12.0",
-				"@tiptap/extension-table-cell": "^2.12.0",
-				"@tiptap/extension-table-header": "^2.12.0",
-				"@tiptap/extension-table-row": "^2.12.0",
-				"@tiptap/extension-task-item": "^2.25.0",
-				"@tiptap/extension-task-list": "^2.25.0",
-				"@tiptap/extension-typography": "^2.10.0",
-				"@tiptap/extension-underline": "^2.25.0",
-				"@tiptap/pm": "^2.11.7",
-				"@tiptap/starter-kit": "^2.10.0",
+				"@tiptap/core": "^3.0.7",
+				"@tiptap/extension-bubble-menu": "^2.26.1",
+				"@tiptap/extension-code-block-lowlight": "^3.0.7",
+				"@tiptap/extension-file-handler": "^3.0.7",
+				"@tiptap/extension-floating-menu": "^2.26.1",
+				"@tiptap/extension-highlight": "^3.0.7",
+				"@tiptap/extension-image": "^3.0.7",
+				"@tiptap/extension-link": "^3.0.7",
+				"@tiptap/extension-list": "^3.0.7",
+				"@tiptap/extension-table": "^3.0.7",
+				"@tiptap/extension-typography": "^3.0.7",
+				"@tiptap/extensions": "^3.0.7",
+				"@tiptap/pm": "^3.0.7",
+				"@tiptap/starter-kit": "^3.0.7",
 				"@xyflow/svelte": "^0.1.19",
 				"async": "^3.2.5",
 				"bits-ui": "^0.21.15",
@@ -64,6 +60,7 @@
 				"katex": "^0.16.22",
 				"kokoro-js": "^1.1.1",
 				"leaflet": "^1.9.4",
+				"lowlight": "^3.3.0",
 				"marked": "^9.1.0",
 				"mermaid": "^11.6.0",
 				"paneforge": "^0.0.6",
@@ -1216,28 +1213,28 @@
 			}
 		},
 		"node_modules/@floating-ui/core": {
-			"version": "1.7.1",
-			"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.1.tgz",
-			"integrity": "sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==",
+			"version": "1.7.2",
+			"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.2.tgz",
+			"integrity": "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==",
 			"license": "MIT",
 			"dependencies": {
-				"@floating-ui/utils": "^0.2.9"
+				"@floating-ui/utils": "^0.2.10"
 			}
 		},
 		"node_modules/@floating-ui/dom": {
-			"version": "1.7.1",
-			"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.1.tgz",
-			"integrity": "sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==",
+			"version": "1.7.2",
+			"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.2.tgz",
+			"integrity": "sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==",
 			"license": "MIT",
 			"dependencies": {
-				"@floating-ui/core": "^1.7.1",
-				"@floating-ui/utils": "^0.2.9"
+				"@floating-ui/core": "^1.7.2",
+				"@floating-ui/utils": "^0.2.10"
 			}
 		},
 		"node_modules/@floating-ui/utils": {
-			"version": "0.2.9",
-			"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz",
-			"integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==",
+			"version": "0.2.10",
+			"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
+			"integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
 			"license": "MIT"
 		},
 		"node_modules/@gulpjs/to-absolute-glob": {
@@ -3109,48 +3106,48 @@
 			}
 		},
 		"node_modules/@tiptap/core": {
-			"version": "2.11.9",
-			"resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.11.9.tgz",
-			"integrity": "sha512-UZSxQLLyJst47xep3jlyKM6y1ebZnmvbGsB7njBVjfxf5H+4yFpRJwwNqrBHM/vyU55LCtPChojqaYC1wXLf6g==",
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.0.7.tgz",
+			"integrity": "sha512-/NC0BbekWzi5sC+s7gRrGIv33cUfuiZUG5DWx8TNedA6b6aTFPHUe+2wKRPaPQ0pfGdOWU0nsOkboUJ9dAjl4g==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/pm": "^2.7.0"
+				"@tiptap/pm": "^3.0.7"
 			}
 		},
 		"node_modules/@tiptap/extension-blockquote": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.10.0.tgz",
-			"integrity": "sha512-6Xmfo2lpfIRcbfkLD/NGX4YgQqfgAbu6XaZQZf5oGtHLPTrz4D7Mw20GgNBHzae2XwUCwLMt6zXOkBgU/LnlZg==",
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.0.7.tgz",
+			"integrity": "sha512-bYJ7r4hYcBZ7GI0LSV0Oxb9rmy/qb0idAf/osvflG2r1tf5CsiW5NYAqlOYAsIVA2OCwXELDlRGCgeKBQ26Kyw==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
 		"node_modules/@tiptap/extension-bold": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.10.0.tgz",
-			"integrity": "sha512-1wL8UI1Aii0u2cbDEvwyqsZb2pgBt8HLJdsIax/ELoF2tKCD5821nElqTGLBBg4pUGPa0ru9ZemuL8GdXZp3Qg==",
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.0.7.tgz",
+			"integrity": "sha512-CQG07yvrIsScLe5NplAuCkVh0sd97Udv1clAGbqfzeV8YfzpV3M7J/Vb09pWyovx3SjDqfsZpkr3RemeKEPY9Q==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
 		"node_modules/@tiptap/extension-bubble-menu": {
-			"version": "2.25.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.25.0.tgz",
-			"integrity": "sha512-BnbfQWRXJDDy9/x/0Atu2Nka5ZAMyXLDFqzSLMAXqXSQcG6CZRTSNRgOCnjpda6Hq2yCtq7l/YEoXkbHT1ZZdQ==",
+			"version": "2.26.1",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.26.1.tgz",
+			"integrity": "sha512-oHevUcZbTMFOTpdCEo4YEDe044MB4P1ZrWyML8CGe5tnnKdlI9BN03AXpI1mEEa5CA3H1/eEckXx8EiCgYwQ3Q==",
 			"license": "MIT",
 			"dependencies": {
 				"tippy.js": "^6.3.7"
@@ -3165,107 +3162,107 @@
 			}
 		},
 		"node_modules/@tiptap/extension-bullet-list": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.10.0.tgz",
-			"integrity": "sha512-Cl+DGu6D3SgF/hlKUDNet3gaZFy6cPEonOOkHwzXoybDXXdddFbaTvt9MLkBRUR3ldksXuVRP2/LwZsK5WyxJQ==",
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.0.7.tgz",
+			"integrity": "sha512-9gPc3Tw2Bw7qKLbyW0s05YntE77127pOXQXcclB4I3MXAuz/K03f+DGuSRhOq9K2Oo86BPHdL5I9Ap9cmuS0Tg==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/extension-list": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-character-count": {
-			"version": "2.25.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-character-count/-/extension-character-count-2.25.0.tgz",
-			"integrity": "sha512-F+4DxJFptbX3oioqNwS38zOTi6gH9CumV/ISeOIvr4ao7Iija3tNonGDsHhxD05njjbYNIp1OKsxtnzbWukgMA==",
+		"node_modules/@tiptap/extension-code": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.0.7.tgz",
+			"integrity": "sha512-6wdUqtXbnIuyKR7xteF2UCnsW2dLNtBKxWvAiOweA7L41HYvburh/tjbkffkNc5KP2XsKzdGbygpunwJMPj6+A==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0",
-				"@tiptap/pm": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-code": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.10.0.tgz",
-			"integrity": "sha512-8JznKG1Jmv8gJezZGPoka8oRmfrcAAnMEOeMpKXjwMrIbQ6QynTZpqMGGVL1kfkZlLV84PYm+CGjGgjSsT4iZw==",
+		"node_modules/@tiptap/extension-code-block": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.0.7.tgz",
+			"integrity": "sha512-WifMv7N1G1Fnd2oZ+g80FjBpV/eI/fxHKCK3hw03l8LoWgeFaU/6LC93qTV6idkfia3YwiA6WnuyOqlI0FSZ9A==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7",
+				"@tiptap/pm": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-code-block": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.10.0.tgz",
-			"integrity": "sha512-QH+LP7L1s1EJlrDFnfgOP0q+Siqt0Zbkx4ICMcUGvEsycl53Ti8P0DRW7fAjRISdTCItuWJYvtmiYY7O3rYb+Q==",
+		"node_modules/@tiptap/extension-code-block-lowlight": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-3.0.7.tgz",
+			"integrity": "sha512-y1sHjzxpYqIKikdT5y5ajCOw4hDIPGjPpIBP7x7iw7jyt8a/w/bI8ozUk4epLBpgOvvAwmdIqi7eV7ORMvQaGQ==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0",
-				"@tiptap/pm": "^2.7.0"
+				"@tiptap/core": "^3.0.7",
+				"@tiptap/extension-code-block": "^3.0.7",
+				"@tiptap/pm": "^3.0.7",
+				"highlight.js": "^11",
+				"lowlight": "^2 || ^3"
 			}
 		},
-		"node_modules/@tiptap/extension-code-block-lowlight": {
-			"version": "2.11.9",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.11.9.tgz",
-			"integrity": "sha512-bB8N59A2aU18/ieyKRZAI0J0xyimmUckYePqBkUX8HFnq8yf9HsM0NPFpqZdK0eqjnZYCXcNwAI3YluLsHuutw==",
+		"node_modules/@tiptap/extension-document": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.0.7.tgz",
+			"integrity": "sha512-HJg1nPPZ9fv5oEMwpONeIfT0FjTrgNGuGAat/hgcBi/R2GUNir2/PM/3d6y8QtkR/EgkgcFakCc9azySXLmyUQ==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0",
-				"@tiptap/extension-code-block": "^2.7.0",
-				"@tiptap/pm": "^2.7.0",
-				"highlight.js": "^11",
-				"lowlight": "^2 || ^3"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-document": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.10.0.tgz",
-			"integrity": "sha512-vseMW3EKiQAPgdbN48Y8F0nRqWhhrAo9DLacAfP7tu0x3uv44uotNjDBtAgp5QmJmqQVyrEdkLSZaU5vFzduhQ==",
+		"node_modules/@tiptap/extension-dropcursor": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.0.7.tgz",
+			"integrity": "sha512-0i2XWdRgYbj6PEPC+pMcGiF/hwg0jl+MavPt1733qWzoDqMEls9cEBTQ9S4HS0TI/jbN/kNavTQ5LlI33kWrww==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/extensions": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-dropcursor": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.10.0.tgz",
-			"integrity": "sha512-tifxp/a3NxTjLAuYBx9XAwVo4MSDoY/mQ8E18QtuXj0vuieCFxd8Bkyre0otubIAAQePXLTVGQoxPrKmMAa+Jg==",
+		"node_modules/@tiptap/extension-file-handler": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-file-handler/-/extension-file-handler-3.0.7.tgz",
+			"integrity": "sha512-eNJOqLaM91erqm6W7k+ocG09fuiVI4B+adWhv97sFim9TboF0sEIWEYdl68z06N1/+tXv6w8S4zUYQCOzxlVtw==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0",
-				"@tiptap/pm": "^2.7.0"
+				"@tiptap/core": "^3.0.7",
+				"@tiptap/extension-text-style": "^3.0.7",
+				"@tiptap/pm": "^3.0.7"
 			}
 		},
 		"node_modules/@tiptap/extension-floating-menu": {
-			"version": "2.25.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.25.0.tgz",
-			"integrity": "sha512-hPZ5SNpI14smTz4GpWQXTnxmeICINYiABSgXcsU5V66tik9OtxKwoCSR/gpU35esaAFUVRdjW7+sGkACLZD5AQ==",
+			"version": "2.26.1",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.26.1.tgz",
+			"integrity": "sha512-OJF+H6qhQogVTMedAGSWuoL1RPe3LZYXONuFCVyzHnvvMpK+BP1vm180E2zDNFnn/DVA+FOrzNGpZW7YjoFH1w==",
 			"license": "MIT",
 			"dependencies": {
 				"tippy.js": "^6.3.7"
@@ -3280,103 +3277,101 @@
 			}
 		},
 		"node_modules/@tiptap/extension-gapcursor": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.10.0.tgz",
-			"integrity": "sha512-GViEnSnEBE74k7SYdXrQ4aXlKmWkrd9awdj/TgDSORgpZ4Dfyqtn+ENIWWby4NhL+BPM9P5hGCjkQXZsi6JKOw==",
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.0.7.tgz",
+			"integrity": "sha512-F4ERd5r59WHbY0ALBbrJ/2z9dl+7VSmsMV/ZkzTgq0TZV9KKz3SsCFcCdIZEYzRCEp69/yYtkTofN10xIa+J6A==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0",
-				"@tiptap/pm": "^2.7.0"
+				"@tiptap/extensions": "^3.0.7"
 			}
 		},
 		"node_modules/@tiptap/extension-hard-break": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.10.0.tgz",
-			"integrity": "sha512-NL/xPYUhhvQyCnOO5Yn+BlBOMLC1ru32nw7ox12TShGmaeKBrnV0DhzBRkyJU0MqCS26oWjieNPxfu0lR3oMSA==",
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.0.7.tgz",
+			"integrity": "sha512-OWrFrKp9PDs9nKJRmyPX22YoscqmoW25VZYeUfvNcAYtI84xYz871s1JmLZkpxqOyI9TafUADFiaRISDnX5EcA==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
 		"node_modules/@tiptap/extension-heading": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.10.0.tgz",
-			"integrity": "sha512-x2Uj5wrAHFaUdlChwLoQVmWtzZCuNyJpBRA19kA4idWL5z+6cIrUWepvwVBxA8ou6ictbzWW15o+blKtW7DlqA==",
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.0.7.tgz",
+			"integrity": "sha512-uS7fFcilFuzKEvhUgndELqlGweD+nZeLOb6oqUE5hM49vECjM7qVjVQnlhV+MH2W1w8eD08cn1lu6lDxaMOe5w==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
 		"node_modules/@tiptap/extension-highlight": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-highlight/-/extension-highlight-2.10.0.tgz",
-			"integrity": "sha512-HU8UuKU7ljlzNn7jg29pM8QtIX7QvePcBjcWAt6K3qVwF1cbBNguIjKRY2rmoonU2nu8I6GknQNgV847kZifCQ==",
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-highlight/-/extension-highlight-3.0.7.tgz",
+			"integrity": "sha512-3oIRuXAg7l9+VPIMwHycXcqtZ7XJcC5vnLhPAQXIesYun6L9EoXmQox0225z8jpPG70N8zfl+YSd4qjsTMPaAg==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-history": {
-			"version": "2.25.1",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.25.1.tgz",
-			"integrity": "sha512-ZoxxOAObk1U8H3d+XEG0MjccJN0ViGIKEZqnLUSswmVweYPdkJG2WF2pEif9hpwJONslvLTKa+f8jwK5LEnJLQ==",
+		"node_modules/@tiptap/extension-horizontal-rule": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.0.7.tgz",
+			"integrity": "sha512-m0r4tzfVX3r0ZD7uvDf/GAiVr7lJjYwhZHC+M+JMhYXVI6eB9OXXzhdOIsw9W5QcmhCBaqU+VuPKUusTn4TKLg==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0",
-				"@tiptap/pm": "^2.7.0"
+				"@tiptap/core": "^3.0.7",
+				"@tiptap/pm": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-horizontal-rule": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.10.0.tgz",
-			"integrity": "sha512-el1SzI/x/h4HW8UltxJlyMSrRsO55ypKPLQHJC9h7F6kTTR31fJUzQa3AeTFrZvXS0kNHIFRpAMstw+N0L5TYg==",
+		"node_modules/@tiptap/extension-image": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-3.0.7.tgz",
+			"integrity": "sha512-hs6TiSmefwvAqxwhy4+ZFCbmAXiAeWq4v5Zd65kQ7dvN7epeV0NM7ME5su/oscQgoKvNAy1r/4sJVaTnHomYMQ==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0",
-				"@tiptap/pm": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
 		"node_modules/@tiptap/extension-italic": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.10.0.tgz",
-			"integrity": "sha512-MqPYbHAEeO8QBvZRIkF4J2OTf/uiUPzUiXGLJ50w1ozfMBIw1txMvfR3g2cpwfvZlcOgYTgy7M0Oq00nQz5eXg==",
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.0.7.tgz",
+			"integrity": "sha512-L05cehSOd7iZWI/igPb90TgQ6RKk2UuuYdatmXff3QUJpYPYct6abcrMb+CeFKJqE9vaXy46dCQkOuPW+bFwkA==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
 		"node_modules/@tiptap/extension-link": {
-			"version": "2.25.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.25.0.tgz",
-			"integrity": "sha512-jNd+1Fd7wiIbxlS51weBzyDtBEBSVzW0cgzdwOzBYQtPJueRyXNNVERksyinDuVgcfvEWgmNZUylgzu7mehnEg==",
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.0.7.tgz",
+			"integrity": "sha512-e53MddBSVKpxxQ2JmHfyZQ2VBLwqlZxqwn0DQHFMXyCKTzpdUC0DOtkvrY7OVz6HA3yz29qR+qquQxIxcDPrfg==",
 			"license": "MIT",
 			"dependencies": {
 				"linkifyjs": "^4.2.0"
@@ -3386,215 +3381,177 @@
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0",
-				"@tiptap/pm": "^2.7.0"
+				"@tiptap/core": "^3.0.7",
+				"@tiptap/pm": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-list-item": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.10.0.tgz",
-			"integrity": "sha512-BxC6NNHd2xcC+mk5hpYWURUdj/mRz6TGFwH5CsyrUXPxApx0+V+EPHaAgdpu8dr+jtTEzjXF62V6e2JmOAPimg==",
-			"license": "MIT",
-			"funding": {
-				"type": "github",
-				"url": "https://github.com/sponsors/ueberdosis"
-			},
-			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
-			}
-		},
-		"node_modules/@tiptap/extension-ordered-list": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.10.0.tgz",
-			"integrity": "sha512-jsK+mvzs7HmxQuQOU3HgIga+v7zUbQlmSP4/danusqUihJ+lc1n0frDCIkVvJrnSB3FChvNgT6ZEA14HOhdJzg==",
-			"license": "MIT",
-			"funding": {
-				"type": "github",
-				"url": "https://github.com/sponsors/ueberdosis"
-			},
-			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
-			}
-		},
-		"node_modules/@tiptap/extension-paragraph": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.10.0.tgz",
-			"integrity": "sha512-4LUkVaJYjNdNZ7QOX6TRcA+m7oCtyrLGk49G22wl7XcPBkQPILP1mCUCU4f41bhjfhCgK5PPWP63kMtD+cEACg==",
-			"license": "MIT",
-			"funding": {
-				"type": "github",
-				"url": "https://github.com/sponsors/ueberdosis"
-			},
-			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
-			}
-		},
-		"node_modules/@tiptap/extension-placeholder": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.10.0.tgz",
-			"integrity": "sha512-1o6azk2plgYAFgMrV3prnBb1NZjl2V1T3wwnH4n3/h9z9lJ0v5BBAk9r+TRYSrcdXknwwHAWFYnQe6dc9buG2g==",
+		"node_modules/@tiptap/extension-list": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.0.7.tgz",
+			"integrity": "sha512-rwu5dXRO0YLyxndMHI17PoxK0x0ZaMZKRZflqOy8fSnXNwd3Tdy8/6a9tsmpgO38kOZEYuvMVaeB7J/+UeBVLg==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0",
-				"@tiptap/pm": "^2.7.0"
+				"@tiptap/core": "^3.0.7",
+				"@tiptap/pm": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-strike": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.10.0.tgz",
-			"integrity": "sha512-SxApLJMQkxnmPGR3lwaskvLK61yI+Bu9hGZGdwMZqNh6o3LoDOxDaXjHD5joeMYQiqQrBE9zg46506MsXtrU7Q==",
+		"node_modules/@tiptap/extension-list-item": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.0.7.tgz",
+			"integrity": "sha512-QfW+dtukl5v6oOA1n4wtAYev5yY78nqc2O8jHGZD18xhqNVerh2xBVIH9wOGHPz4q5Em2Ju7xbqXYl0vg2De+w==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/extension-list": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-table": {
-			"version": "2.12.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-2.12.0.tgz",
-			"integrity": "sha512-tT3IbbBal0vPQ1Bc/3Xl+tmqqZQCYWxnycBPl/WZBqhd57DWzfJqRPESwCGUIJgjOtTnipy/ulvj0FxHi1j9JA==",
+		"node_modules/@tiptap/extension-list-keymap": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.0.7.tgz",
+			"integrity": "sha512-KJWXsyHU8E6SGmlZMHNjSg+XrkmCncJT2l5QGEjTUjlhqwulu+4psTDRio9tCdtepiasTL7qEekGWAhz9wEgzQ==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0",
-				"@tiptap/pm": "^2.7.0"
+				"@tiptap/extension-list": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-table-cell": {
-			"version": "2.12.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-table-cell/-/extension-table-cell-2.12.0.tgz",
-			"integrity": "sha512-8i35uCkmkSiQxMiZ+DLgT/wj24P5U/Zo3jr1e0tMAAMG7sRO1MljjLmkpV8WCdBo0xoRqzkz4J7Nkq+DtzZv9Q==",
+		"node_modules/@tiptap/extension-ordered-list": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.0.7.tgz",
+			"integrity": "sha512-F/cbG0vt1cjkoJ4A65E6vpZQizZwnE4gJHKAw3ymDdCoZKYaO4OV1UTo98W/jgryORy/HLO12+hogsRvgRvK9Q==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/extension-list": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-table-header": {
-			"version": "2.12.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-table-header/-/extension-table-header-2.12.0.tgz",
-			"integrity": "sha512-gRKEsy13KKLpg9RxyPeUGqh4BRFSJ2Bc2KQP1ldhef6CPRYHCbGycxXCVQ5aAb7Mhpo54L+AAkmAv1iMHUTflw==",
+		"node_modules/@tiptap/extension-paragraph": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.0.7.tgz",
+			"integrity": "sha512-1lp+/CbYmm1ZnR6CNlreUIWCNQk0cBzLVgS5R8SKfVyYaXo11qQq6Yq8URLhpuge4yXkPGMhClwCLzJ9D9R+eg==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-table-row": {
-			"version": "2.12.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-table-row/-/extension-table-row-2.12.0.tgz",
-			"integrity": "sha512-AEW/Zl9V0IoaYDBLMhF5lVl0xgoIJs3IuKCsIYxGDlxBfTVFC6PfQzvuy296CMjO5ZcZ0xalVipPV9ggsMRD+w==",
+		"node_modules/@tiptap/extension-strike": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.0.7.tgz",
+			"integrity": "sha512-WUCd5CMgS6pg0ZGKXsaxVrnEvO/h6XUehebL0yggAsRKSoGERInR2iLfhU4p1f4zk0cD3ydNLJdqZu0H/MIABw==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-task-item": {
-			"version": "2.25.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-task-item/-/extension-task-item-2.25.0.tgz",
-			"integrity": "sha512-8F7Z7jbsyGrPLHQCn+n39zdqIgxwR1kJ1nL5ZwhEW3ZhJgkFF0WMJSv36mwIJwL08p8um/c6g72AYB/e8CD7eA==",
+		"node_modules/@tiptap/extension-table": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-3.0.7.tgz",
+			"integrity": "sha512-S4tvIgagzWnvXLHfltXucgS9TlBwPcQTjQR4llbxmKHAQM4+e77+NGcXXDcQ7E1TdAp3Tk8xRGerGIP7kjCFRA==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0",
-				"@tiptap/pm": "^2.7.0"
+				"@tiptap/core": "^3.0.7",
+				"@tiptap/pm": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-task-list": {
-			"version": "2.25.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-task-list/-/extension-task-list-2.25.0.tgz",
-			"integrity": "sha512-2mASqp8MJ0dyc1OK6c8P7m/zwoVDv8PV+XsRR9O3tpIz/zjUVrOl0W4IndjUPBMa7cpJX8fGj8iC3DaRNpSMcg==",
+		"node_modules/@tiptap/extension-text": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.0.7.tgz",
+			"integrity": "sha512-yf5dNcPLB5SbQ0cQq8qyjiMj9khx4Y4EJoyrDSAok/9zYM3ULqwTPkTSZ2eW6VX/grJeyBVleeBHk1PjJ7NiVw==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-text": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.10.0.tgz",
-			"integrity": "sha512-SSnNncADS1KucdEcJlF6WGCs5+1pAhPrD68vlw34oj3NDT3Zh05KiyXsCV3Nw4wpHOnbWahV+z3uT2SnR+xgoQ==",
+		"node_modules/@tiptap/extension-text-style": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-3.0.7.tgz",
+			"integrity": "sha512-naJ1XxlbFJ1qlpA+i54lQYKuhWP1dnkUslM86OT0TZt0zJBeu7LIrqSOVGmMB++lF/btnQLMnYkYSSnkLgIw3A==",
 			"license": "MIT",
+			"peer": true,
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-text-style": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-2.10.0.tgz",
-			"integrity": "sha512-VZtH1dp64wg1UcFtUPpRQK+kOm4JHBIv+WXuKX7EnpIEKjHKnyfV94BBVmaqY5UE4n3kbkkmIRB2Cmix/10AMg==",
+		"node_modules/@tiptap/extension-typography": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-typography/-/extension-typography-3.0.7.tgz",
+			"integrity": "sha512-Oz0EIkq8TDd15aupMYcH2L6izdI/LEO0e7+K+OhljTK5g/sGApLxCDdTlmX2szB9EXbTbOpwLKIEz2bPc3HvBA==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-typography": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-typography/-/extension-typography-2.10.0.tgz",
-			"integrity": "sha512-03IOfJm4bk2hZ4SsSfxgBOVzcDxMRBlFD7ZY12H2EGNf1TKxj/0ANWhAH54FtquuOMoY5aWg5LZf0lk++8UDAw==",
+		"node_modules/@tiptap/extension-underline": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.0.7.tgz",
+			"integrity": "sha512-pw2v5kbkovaWaC1G2IxP7g94vmUMlRBzZlCnLEyfFxtGa9LVAsUFlFFWaYJEmq7ZPG/tblWCnFfEZuQqFVd8Sg==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7"
 			}
 		},
-		"node_modules/@tiptap/extension-underline": {
-			"version": "2.25.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.25.0.tgz",
-			"integrity": "sha512-RqXkWSMJyllfsDukugDzWEZfWRUOgcqzuMWC40BnuDUs4KgdRA0nhVUWJbLfUEmXI0UVqN5OwYTTAdhaiF7kjQ==",
+		"node_modules/@tiptap/extensions": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.0.7.tgz",
+			"integrity": "sha512-GkXX5l7Q/543BKsC14j8M3qT+75ILb7138zy7cZoHm/s1ztV1XTknpEswBZIRZA9n6qq+Wd9g5qkbR879s6xhA==",
 			"license": "MIT",
 			"funding": {
 				"type": "github",
 				"url": "https://github.com/sponsors/ueberdosis"
 			},
 			"peerDependencies": {
-				"@tiptap/core": "^2.7.0"
+				"@tiptap/core": "^3.0.7",
+				"@tiptap/pm": "^3.0.7"
 			}
 		},
 		"node_modules/@tiptap/pm": {
-			"version": "2.11.7",
-			"resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.11.7.tgz",
-			"integrity": "sha512-7gEEfz2Q6bYKXM07vzLUD0vqXFhC5geWRA6LCozTiLdVFDdHWiBrvb2rtkL5T7mfLq03zc1QhH7rI3F6VntOEA==",
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.0.7.tgz",
+			"integrity": "sha512-f8PnWjYqbMCxny8cyjbFNeIyeOYLECTa/7gj8DJr53Ns+P94b4kYIt/GkveR5KoOxsbmXi8Uc4mjcR1giQPaIQ==",
 			"license": "MIT",
 			"dependencies": {
-				"prosemirror-changeset": "^2.2.1",
+				"prosemirror-changeset": "^2.3.0",
 				"prosemirror-collab": "^1.3.1",
 				"prosemirror-commands": "^1.6.2",
 				"prosemirror-dropcursor": "^1.8.1",
@@ -3604,14 +3561,14 @@
 				"prosemirror-keymap": "^1.2.2",
 				"prosemirror-markdown": "^1.13.1",
 				"prosemirror-menu": "^1.2.4",
-				"prosemirror-model": "^1.23.0",
+				"prosemirror-model": "^1.24.1",
 				"prosemirror-schema-basic": "^1.2.3",
-				"prosemirror-schema-list": "^1.4.1",
+				"prosemirror-schema-list": "^1.5.0",
 				"prosemirror-state": "^1.4.3",
 				"prosemirror-tables": "^1.6.4",
 				"prosemirror-trailing-node": "^3.0.0",
 				"prosemirror-transform": "^1.10.2",
-				"prosemirror-view": "^1.37.0"
+				"prosemirror-view": "^1.38.1"
 			},
 			"funding": {
 				"type": "github",
@@ -3619,32 +3576,35 @@
 			}
 		},
 		"node_modules/@tiptap/starter-kit": {
-			"version": "2.10.0",
-			"resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.10.0.tgz",
-			"integrity": "sha512-hMIM9a6HjYZo25EzhZHlKEIR7CFi0grRSOltEyggiyBuQqKFkI7iwCpZVVtviDV1FwV0EPANpIAxPS7aBRgFdg==",
-			"license": "MIT",
-			"dependencies": {
-				"@tiptap/core": "^2.10.0",
-				"@tiptap/extension-blockquote": "^2.10.0",
-				"@tiptap/extension-bold": "^2.10.0",
-				"@tiptap/extension-bullet-list": "^2.10.0",
-				"@tiptap/extension-code": "^2.10.0",
-				"@tiptap/extension-code-block": "^2.10.0",
-				"@tiptap/extension-document": "^2.10.0",
-				"@tiptap/extension-dropcursor": "^2.10.0",
-				"@tiptap/extension-gapcursor": "^2.10.0",
-				"@tiptap/extension-hard-break": "^2.10.0",
-				"@tiptap/extension-heading": "^2.10.0",
-				"@tiptap/extension-history": "^2.10.0",
-				"@tiptap/extension-horizontal-rule": "^2.10.0",
-				"@tiptap/extension-italic": "^2.10.0",
-				"@tiptap/extension-list-item": "^2.10.0",
-				"@tiptap/extension-ordered-list": "^2.10.0",
-				"@tiptap/extension-paragraph": "^2.10.0",
-				"@tiptap/extension-strike": "^2.10.0",
-				"@tiptap/extension-text": "^2.10.0",
-				"@tiptap/extension-text-style": "^2.10.0",
-				"@tiptap/pm": "^2.10.0"
+			"version": "3.0.7",
+			"resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.0.7.tgz",
+			"integrity": "sha512-oTHZp6GXQQaZfZi8Fh7klH2YUeGq73XPF35CFw41mwdWdUUUms3ipaCKFqUyEYO21JMf3pZylJLxUucx5U7isg==",
+			"license": "MIT",
+			"dependencies": {
+				"@tiptap/core": "^3.0.7",
+				"@tiptap/extension-blockquote": "^3.0.7",
+				"@tiptap/extension-bold": "^3.0.7",
+				"@tiptap/extension-bullet-list": "^3.0.7",
+				"@tiptap/extension-code": "^3.0.7",
+				"@tiptap/extension-code-block": "^3.0.7",
+				"@tiptap/extension-document": "^3.0.7",
+				"@tiptap/extension-dropcursor": "^3.0.7",
+				"@tiptap/extension-gapcursor": "^3.0.7",
+				"@tiptap/extension-hard-break": "^3.0.7",
+				"@tiptap/extension-heading": "^3.0.7",
+				"@tiptap/extension-horizontal-rule": "^3.0.7",
+				"@tiptap/extension-italic": "^3.0.7",
+				"@tiptap/extension-link": "^3.0.7",
+				"@tiptap/extension-list": "^3.0.7",
+				"@tiptap/extension-list-item": "^3.0.7",
+				"@tiptap/extension-list-keymap": "^3.0.7",
+				"@tiptap/extension-ordered-list": "^3.0.7",
+				"@tiptap/extension-paragraph": "^3.0.7",
+				"@tiptap/extension-strike": "^3.0.7",
+				"@tiptap/extension-text": "^3.0.7",
+				"@tiptap/extension-underline": "^3.0.7",
+				"@tiptap/extensions": "^3.0.7",
+				"@tiptap/pm": "^3.0.7"
 			},
 			"funding": {
 				"type": "github",
@@ -3919,7 +3879,6 @@
 			"resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
 			"integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
 			"license": "MIT",
-			"peer": true,
 			"dependencies": {
 				"@types/unist": "*"
 			}
@@ -4003,8 +3962,7 @@
 		"node_modules/@types/unist": {
 			"version": "2.0.10",
 			"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
-			"integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==",
-			"peer": true
+			"integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
 		},
 		"node_modules/@types/yauzl": {
 			"version": "2.10.3",
@@ -6378,7 +6336,6 @@
 			"resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
 			"integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
 			"license": "MIT",
-			"peer": true,
 			"dependencies": {
 				"dequal": "^2.0.0"
 			},
@@ -7665,9 +7622,10 @@
 			"dev": true
 		},
 		"node_modules/highlight.js": {
-			"version": "11.9.0",
-			"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz",
-			"integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==",
+			"version": "11.11.1",
+			"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz",
+			"integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==",
+			"license": "BSD-3-Clause",
 			"engines": {
 				"node": ">=12.0.0"
 			}
@@ -8941,15 +8899,14 @@
 			}
 		},
 		"node_modules/lowlight": {
-			"version": "3.1.0",
-			"resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.1.0.tgz",
-			"integrity": "sha512-CEbNVoSikAxwDMDPjXlqlFYiZLkDJHwyGu/MfOsJnF3d7f3tds5J3z8s/l9TMXhzfsJCCJEAsD78842mwmg0PQ==",
+			"version": "3.3.0",
+			"resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.3.0.tgz",
+			"integrity": "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==",
 			"license": "MIT",
-			"peer": true,
 			"dependencies": {
 				"@types/hast": "^3.0.0",
 				"devlop": "^1.0.0",
-				"highlight.js": "~11.9.0"
+				"highlight.js": "~11.11.0"
 			},
 			"funding": {
 				"type": "github",
@@ -10108,9 +10065,9 @@
 			}
 		},
 		"node_modules/prosemirror-changeset": {
-			"version": "2.2.1",
-			"resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz",
-			"integrity": "sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==",
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz",
+			"integrity": "sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==",
 			"license": "MIT",
 			"dependencies": {
 				"prosemirror-transform": "^1.0.0"

+ 16 - 19
package.json

@@ -57,30 +57,26 @@
 		"@codemirror/lang-python": "^6.1.6",
 		"@codemirror/language-data": "^6.5.1",
 		"@codemirror/theme-one-dark": "^6.1.2",
+		"@floating-ui/dom": "^1.7.2",
 		"@huggingface/transformers": "^3.0.0",
 		"@mediapipe/tasks-vision": "^0.10.17",
 		"@pyscript/core": "^0.4.32",
 		"@sveltejs/adapter-node": "^2.0.0",
 		"@sveltejs/svelte-virtual-list": "^3.0.1",
-		"@tiptap/core": "^2.11.9",
-		"@tiptap/extension-bubble-menu": "^2.25.0",
-		"@tiptap/extension-character-count": "^2.25.0",
-		"@tiptap/extension-code-block-lowlight": "^2.11.9",
-		"@tiptap/extension-floating-menu": "^2.25.0",
-		"@tiptap/extension-highlight": "^2.10.0",
-		"@tiptap/extension-history": "^2.25.1",
-		"@tiptap/extension-link": "^2.25.0",
-		"@tiptap/extension-placeholder": "^2.10.0",
-		"@tiptap/extension-table": "^2.12.0",
-		"@tiptap/extension-table-cell": "^2.12.0",
-		"@tiptap/extension-table-header": "^2.12.0",
-		"@tiptap/extension-table-row": "^2.12.0",
-		"@tiptap/extension-task-item": "^2.25.0",
-		"@tiptap/extension-task-list": "^2.25.0",
-		"@tiptap/extension-typography": "^2.10.0",
-		"@tiptap/extension-underline": "^2.25.0",
-		"@tiptap/pm": "^2.11.7",
-		"@tiptap/starter-kit": "^2.10.0",
+		"@tiptap/core": "^3.0.7",
+		"@tiptap/extension-bubble-menu": "^2.26.1",
+		"@tiptap/extension-code-block-lowlight": "^3.0.7",
+		"@tiptap/extension-file-handler": "^3.0.7",
+		"@tiptap/extension-floating-menu": "^2.26.1",
+		"@tiptap/extension-highlight": "^3.0.7",
+		"@tiptap/extension-image": "^3.0.7",
+		"@tiptap/extension-link": "^3.0.7",
+		"@tiptap/extension-list": "^3.0.7",
+		"@tiptap/extension-table": "^3.0.7",
+		"@tiptap/extension-typography": "^3.0.7",
+		"@tiptap/extensions": "^3.0.7",
+		"@tiptap/pm": "^3.0.7",
+		"@tiptap/starter-kit": "^3.0.7",
 		"@xyflow/svelte": "^0.1.19",
 		"async": "^3.2.5",
 		"bits-ui": "^0.21.15",
@@ -108,6 +104,7 @@
 		"katex": "^0.16.22",
 		"kokoro-js": "^1.1.1",
 		"leaflet": "^1.9.4",
+		"lowlight": "^3.3.0",
 		"marked": "^9.1.0",
 		"mermaid": "^11.6.0",
 		"paneforge": "^0.0.6",

+ 36 - 34
src/lib/components/common/RichTextInput.svelte

@@ -72,32 +72,28 @@
 	import { keymap } from 'prosemirror-keymap';
 
 	import { AIAutocompletion } from './RichTextInput/AutoCompletion.js';
-	import Table from '@tiptap/extension-table';
-	import TableRow from '@tiptap/extension-table-row';
-	import TableHeader from '@tiptap/extension-table-header';
-	import TableCell from '@tiptap/extension-table-cell';
 
-	import Link from '@tiptap/extension-link';
-	import Underline from '@tiptap/extension-underline';
-	import TaskItem from '@tiptap/extension-task-item';
-	import TaskList from '@tiptap/extension-task-list';
-
-	import CharacterCount from '@tiptap/extension-character-count';
-
-	import CodeBlockLowlight from '@tiptap/extension-code-block-lowlight';
-	import Placeholder from '@tiptap/extension-placeholder';
 	import StarterKit from '@tiptap/starter-kit';
-	import Highlight from '@tiptap/extension-highlight';
-	import Typography from '@tiptap/extension-typography';
 
+	// Bubble and Floating menus are currently fixed to v2 due to styling issues in v3
+	// TODO: Update to v3 when styling issues are resolved
 	import BubbleMenu from '@tiptap/extension-bubble-menu';
 	import FloatingMenu from '@tiptap/extension-floating-menu';
 
+	import { TableKit } from '@tiptap/extension-table';
+	import { ListKit } from '@tiptap/extension-list';
+	import { Placeholder, CharacterCount } from '@tiptap/extensions';
+
+	import Typography from '@tiptap/extension-typography';
+	import Highlight from '@tiptap/extension-highlight';
+	import CodeBlockLowlight from '@tiptap/extension-code-block-lowlight';
+
 	import { all, createLowlight } from 'lowlight';
 
 	import { PASTED_TEXT_CHARACTER_LIMIT } from '$lib/constants';
 
 	import FormattingButtons from './RichTextInput/FormattingButtons.svelte';
+	import { duration } from 'dayjs';
 
 	export let oncompositionstart = (e) => {};
 	export let oncompositionend = (e) => {};
@@ -146,6 +142,14 @@
 	let yXmlFragment = null;
 	let awareness = null;
 
+	const getEditorInstance = async () => {
+		return new Promise((resolve) => {
+			setTimeout(() => {
+				resolve(editor);
+			}, 0);
+		});
+	};
+
 	// Custom Yjs Socket.IO provider
 	class SocketIOProvider {
 		constructor(doc, documentId, socket, user) {
@@ -217,6 +221,8 @@
 							if (state.length === 2 && state[0] === 0 && state[1] === 0) {
 								// Empty state, check if we have content to initialize
 								// check if editor empty as well
+								// const editor = await getEditorInstance();
+
 								const isEmptyEditor = !editor || editor.getText().trim() === '';
 								if (isEmptyEditor) {
 									if (content && (data?.sessions ?? ['']).length === 1) {
@@ -808,35 +814,30 @@
 			initializeCollaboration();
 		}
 
+		console.log(bubbleMenuElement, floatingMenuElement);
+
 		editor = new Editor({
 			element: element,
 			extensions: [
 				StarterKit,
+				Placeholder.configure({ placeholder }),
+
 				CodeBlockLowlight.configure({
 					lowlight
 				}),
 				Highlight,
 				Typography,
-				Underline,
 
-				Placeholder.configure({ placeholder }),
-				Table.configure({ resizable: true }),
-				TableRow,
-				TableHeader,
-				TableCell,
-				TaskList,
-				TaskItem.configure({
-					nested: true
+				TableKit.configure({
+					table: { resizable: true }
+				}),
+				ListKit.configure({
+					taskItem: {
+						nested: true
+					}
 				}),
 				CharacterCount.configure({}),
-				...(link
-					? [
-							Link.configure({
-								openOnClick: true,
-								linkOnPaste: true
-							})
-						]
-					: []),
+
 				...(autocomplete
 					? [
 							AIAutocompletion.configure({
@@ -887,6 +888,7 @@
 			onTransaction: () => {
 				// force re-render so `editor.isActive` works as expected
 				editor = editor;
+				if (!editor) return;
 
 				htmlValue = editor.getHTML();
 				jsonValue = editor.getJSON();
@@ -1163,11 +1165,11 @@
 </script>
 
 {#if showFormattingButtons}
-	<div bind:this={bubbleMenuElement} class="p-0">
+	<div bind:this={bubbleMenuElement} id="bubble-menu" class="p-0">
 		<FormattingButtons {editor} />
 	</div>
 
-	<div bind:this={floatingMenuElement} class="p-0">
+	<div bind:this={floatingMenuElement} id="floating-menu" class="p-0">
 		<FormattingButtons {editor} />
 	</div>
 {/if}

+ 19 - 3
src/lib/components/notes/NoteEditor.svelte

@@ -725,9 +725,25 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
 	const onDragOver = (e) => {
 		e.preventDefault();
 
-		// Check if a file is being dragged.
-		if (e.dataTransfer?.types?.includes('Files')) {
-			dragged = true;
+		if (
+			e.dataTransfer?.types?.includes('text/plain') ||
+			e.dataTransfer?.types?.includes('text/html')
+		) {
+			dragged = false;
+			return;
+		}
+
+		// Check if the dragged item is a file or image
+		if (e.dataTransfer?.types?.includes('Files') && e.dataTransfer?.items) {
+			const items = Array.from(e.dataTransfer.items);
+			const hasFiles = items.some((item) => item.kind === 'file');
+			const hasImages = items.some((item) => item.type.startsWith('image/'));
+
+			if (hasFiles && !hasImages) {
+				dragged = true;
+			} else {
+				dragged = false;
+			}
 		} else {
 			dragged = false;
 		}