diff --git a/package-lock.json b/package-lock.json index 29288f733e..7f58bbe4a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,11 +22,11 @@ "@nextcloud/moment": "^1.3.5", "@nextcloud/router": "^3.1.0", "@nextcloud/vue": "^8.39.0", - "@tiptap/extension-character-count": "^3.23.4", - "@tiptap/extension-task-item": "^3.23.4", - "@tiptap/extension-task-list": "^3.23.4", - "@tiptap/starter-kit": "^3.23.4", - "@tiptap/vue-2": "^3.23.4", + "@tiptap/extension-character-count": "^3.24.0", + "@tiptap/extension-task-item": "^3.24.0", + "@tiptap/extension-task-list": "^3.24.0", + "@tiptap/starter-kit": "^3.24.0", + "@tiptap/vue-2": "^3.24.0", "@vueuse/core": "^11.3.0", "debounce": "^3.0.0", "dompurify": "^3.4.7", @@ -5107,48 +5107,48 @@ "license": "MIT" }, "node_modules/@tiptap/core": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.23.4.tgz", - "integrity": "sha512-ni2LWE52bVeSt3L2HVBSmbBw+elc32ATej9C68EyKzN/8vR5ILxFn6RCdDTKm4asmwZyq2jys12dKmBdWMr9QA==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.24.0.tgz", + "integrity": "sha512-GTAsXAI32p4hEZgPzvUv2RPrObxamy9AFhmhG10fXSvN/cDUs8naEYVIqDV3Sh99jMwQEbTFKW1E1mcspsY6ow==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/pm": "3.23.4" + "@tiptap/pm": "3.24.0" } }, "node_modules/@tiptap/extension-blockquote": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.23.4.tgz", - "integrity": "sha512-7YjSibNlPcy9eGK+tHt5G/Njr7nPxl+rZ3rCC6TwtLIRLSHPnoGDsfFOgTPkXxaQcE1a/VQwemnYfWc3kdIjDQ==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.24.0.tgz", + "integrity": "sha512-DgwEEJ1GbDQcT054ynxoaZGmB9apGeUklPrinq9o6xdLHpdg+bO9HCQzggdB8n21VLLglb8jfAEWsVNwh3eASQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4" + "@tiptap/core": "3.24.0" } }, "node_modules/@tiptap/extension-bold": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.23.4.tgz", - "integrity": "sha512-3L9tnZ12i+98u5df2nV2zGu/sc3rhI87E3ocn1YYAO8PJUAgZnMwdet8JawCrS1uut5sRKlxo3SXEmdNfRVm/w==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.24.0.tgz", + "integrity": "sha512-CujogYaynasklFKHADUseuvj8X2FnWktTCCo3Hl+nlyRvBTmm5TK2aqiamg3v2P4dBh3O6a70mo8BfRJPuiR1g==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4" + "@tiptap/core": "3.24.0" } }, "node_modules/@tiptap/extension-bubble-menu": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.23.4.tgz", - "integrity": "sha512-EPTpL/IFp/aTGZErBq/Mc3dKznj6G/qNEkVYWjueOn1oKApyT0P6WVHGvu/vpMdErhzmoGDuFPPGVS6T8Upx2Q==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.24.0.tgz", + "integrity": "sha512-jRXD+JPu9ayvq78g8hsCxx4q/qUFtrdfIYirRSf5YUseuuUbtfrq83AsGabcygpUTefjJkMQoXNITkh6294Ggw==", "license": "MIT", "optional": true, "dependencies": { @@ -5159,93 +5159,93 @@ "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4", - "@tiptap/pm": "3.23.4" + "@tiptap/core": "3.24.0", + "@tiptap/pm": "3.24.0" } }, "node_modules/@tiptap/extension-bullet-list": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.23.4.tgz", - "integrity": "sha512-mXB2KZOz1R+E6VNTZ3vzdAk7ZDGKjPmsJEZIQg1B5qRycTKg49/rCCkLA2QnqAwX6BzS3mLLH1RWE2W0oXD7vg==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.24.0.tgz", + "integrity": "sha512-IOpAm5c4XVVVvkOef+V9XYMVpea+3MgBpCQgn83UQRlwO9eIMwmcyxOznu7gQPQVShTEpkt4T6uK+ZN9o8meIA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "3.23.4" + "@tiptap/extension-list": "3.24.0" } }, "node_modules/@tiptap/extension-character-count": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-character-count/-/extension-character-count-3.23.4.tgz", - "integrity": "sha512-oxaTE6iDBa+/Ftq95vMP6rTOynJSJ7sEZybBnmb1zn63+jpiz6ovDrY6Ox7uA8avvGdBOnh6uUUjGIymA4iiTg==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-character-count/-/extension-character-count-3.24.0.tgz", + "integrity": "sha512-tYHLoGHhCNOOiAF0MmIngS1w8rVBtzaKJdnBi2NFlC3U8c3Tfj6qImjH4Eq5DUa6MyTBCmvIq0T6XtUjfbnfQQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extensions": "3.23.4" + "@tiptap/extensions": "3.24.0" } }, "node_modules/@tiptap/extension-code": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.23.4.tgz", - "integrity": "sha512-C0TeRipMycUEBnV+Mzx6eLp/yZb6Vi/waP3Tkb0lO5/ikg7LWLB7AlmMunjIXEUcR/pJHID/aEh5PfJFpysUDg==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.24.0.tgz", + "integrity": "sha512-MAQtrPRQ+HRmcGotWbksdIGeH1gqayFAdvi4lNGeFT7taHXP1o1XD7CQp7iYIKmg8IU4/MQ+RdetSfuC1A9edQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4" + "@tiptap/core": "3.24.0" } }, "node_modules/@tiptap/extension-code-block": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.23.4.tgz", - "integrity": "sha512-UEU1w/85CSNKktbhESnIRmtjKcH7DeschReZA8err1wAnYLTKzid5ucnJSJ25iRg2V5Fnuws5gnPT5CVgdfXCQ==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.24.0.tgz", + "integrity": "sha512-NZglw4oHoH6oJ5+HvxxQCYk+wODJmsxzUpRQdsOmje08sekQH+Zt9i4UKimBhg4urpd5r+dKXTslab9a5eQ86w==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4", - "@tiptap/pm": "3.23.4" + "@tiptap/core": "3.24.0", + "@tiptap/pm": "3.24.0" } }, "node_modules/@tiptap/extension-document": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.23.4.tgz", - "integrity": "sha512-YC4G6VkxT629rlqUTwD6XvOpxjvghn7fxrK4RbyKVJY2C6E1vgmX0won1Ast6v+qTE6iONOMS6f6VyPxSGjg4w==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.24.0.tgz", + "integrity": "sha512-yxgM3+yXy2XZzEwH43y2Kp8D1BkblxEWLXqo0YCoAKtxyKCcEaT8kdlf70kS7D0+VSzYU4D0iN7VdQIYHcL2mA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4" + "@tiptap/core": "3.24.0" } }, "node_modules/@tiptap/extension-dropcursor": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.23.4.tgz", - "integrity": "sha512-ujJQUIENk0RwVFCh5g/TOSEv1a7Pnam/cjHmSUqHWUNZkYS9aOqjm+JfURJPCinRS2oHvo3AARul5mkKgDJYcA==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.24.0.tgz", + "integrity": "sha512-Dbv1c5LnvG3PT+yEbCNroyOeeUkHq9wcir2pbC7wri7g7d2sCi0+HvKH0MAxLwY3j5NJJSiSyG2ypMaXOAs4sg==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extensions": "3.23.4" + "@tiptap/extensions": "3.24.0" } }, "node_modules/@tiptap/extension-floating-menu": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.23.4.tgz", - "integrity": "sha512-eAc72bKM26yIPx0jsU8qdjE71vFNVu5R9jGbdItBMFc0SPLS4qY8g+8RJ+iWoLwbcSEpgooLS9D9sLfdAU+Tvw==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.24.0.tgz", + "integrity": "sha512-7QEbf3mUzFAkejjQGX9f0L507oMtnOBRwHt2skUTR+9yXgudsN8zaDBSSRHLeMWGk9b7L293ZMA6zCRrZaHrfA==", "license": "MIT", "optional": true, "funding": { @@ -5254,80 +5254,80 @@ }, "peerDependencies": { "@floating-ui/dom": "^1.0.0", - "@tiptap/core": "3.23.4", - "@tiptap/pm": "3.23.4" + "@tiptap/core": "3.24.0", + "@tiptap/pm": "3.24.0" } }, "node_modules/@tiptap/extension-gapcursor": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.23.4.tgz", - "integrity": "sha512-RuyvOlIGP6UpVOc0Lw0L63jKLtYM49CNhPV2OMSfwwwbBZ3pJGos2/SqpYg71d3sn+qpsAopS4Pfr8iPZog73A==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.24.0.tgz", + "integrity": "sha512-CzCP5/jni5RFwW9jCfBO6auh83GbaioMTpSk6tyR3sd+CbwlBcUdsJFGJkbaRdiSS9dgIyi+6hRbhjpYdHcp+w==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extensions": "3.23.4" + "@tiptap/extensions": "3.24.0" } }, "node_modules/@tiptap/extension-hard-break": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.23.4.tgz", - "integrity": "sha512-ODlpZCi7n136BH9luM09EFL8Pg+bbRCd0tzCQM5BKMXRkLitYZA8Gl/f5DLmGJ50wzFsDPXK2Br2g9UvZK7COg==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.24.0.tgz", + "integrity": "sha512-T/ZEBiHQPMyTqDvXG0tiqBToNeuSemIPmNtdoGSgBN/degVl7VJZqQIrLIvOUHfjf3QkRs7TE/mcqTJsIboO/g==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4" + "@tiptap/core": "3.24.0" } }, "node_modules/@tiptap/extension-heading": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.23.4.tgz", - "integrity": "sha512-8W9Hqi0J69Xbqg08nPf4xRMJXMccaKFAgUE1tvy5PAWJSQxOMwkKQXgZXxwe+80sOMUnV8qveBqUy/ODMPgAxQ==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.24.0.tgz", + "integrity": "sha512-GCSgapIzQPqEGNcVGE0/Pcjg5wITMLYJlrS3GGVw7BPmECJwgexcoOsEwkxtzJnXT/HpFXbvOFW43sM0KeHSjg==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4" + "@tiptap/core": "3.24.0" } }, "node_modules/@tiptap/extension-horizontal-rule": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.23.4.tgz", - "integrity": "sha512-EA4kK8ywZ4dQNOdxeZbplmDDs5T5LjMgHpqxRwukj9wwKiILOK5E3fcKm1fCKh9Q02w96jax6YVccHwmgJP3sQ==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.24.0.tgz", + "integrity": "sha512-DFzWJTrb23x+qssLLs85vEyho8ItUGp3RY9XUsVTIAGZn5IsoUw8wMsvIBlH1ux4Ch7gLchtcD6kpTdMdrL9kw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4", - "@tiptap/pm": "3.23.4" + "@tiptap/core": "3.24.0", + "@tiptap/pm": "3.24.0" } }, "node_modules/@tiptap/extension-italic": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.23.4.tgz", - "integrity": "sha512-jUAHi+HZlg47BzgVIy6y/UH5vev7vPQ95jddhB5K3hC122kvWFMXlken7UOnqzbxNcHs2+4Oi/ZJirYMpT4P5w==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.24.0.tgz", + "integrity": "sha512-mf3cbNlbMPUNj3IyUkIke+o3ZpOUrtVeY5Yqs5IM/VhkUUh/PdIzqw74VuqEAJ0Z4oZ6nNDHeYLrl3Be1j99lQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4" + "@tiptap/core": "3.24.0" } }, "node_modules/@tiptap/extension-link": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.23.4.tgz", - "integrity": "sha512-XjxltY7MomwfTs6jmN6Bw5bb/upb34lpyqv2RiXppFTK25Br7ipksRjUpWpB4/csZeg30qwrLGVKxCol38ffrw==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.24.0.tgz", + "integrity": "sha512-MwMoNGG2mL5XGFV1tEGunBRglwsIbW+ZOB2QnKiv+Mcbi2JCWMrorndJZBqpVPR5nM+Bef2KnpchEJmYlQLvKQ==", "license": "MIT", "dependencies": { "linkifyjs": "^4.3.3" @@ -5337,159 +5337,159 @@ "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4", - "@tiptap/pm": "3.23.4" + "@tiptap/core": "3.24.0", + "@tiptap/pm": "3.24.0" } }, "node_modules/@tiptap/extension-list": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.23.4.tgz", - "integrity": "sha512-yuauDm6qW/7q+ZO0YJBKQEGdnUm6DDTJM8AMp9bMZrT4jRf/zyUtNcZ91QEfFvBcyVuI+10PIOXtNPevhQ741Q==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.24.0.tgz", + "integrity": "sha512-GcxDVMMmDGj7OFTBrV7JpVgr5wxlr2vmjwH7U8QxZX7OJI5vrsMYl/U6KRTvUpG8wP+Zmo5jRlLM+BbL+a/W3g==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4", - "@tiptap/pm": "3.23.4" + "@tiptap/core": "3.24.0", + "@tiptap/pm": "3.24.0" } }, "node_modules/@tiptap/extension-list-item": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.23.4.tgz", - "integrity": "sha512-Q/JXosShD5oyDwukE6igdrZD2lb0ZgyoQTHYchk0pzU4frClFbn3RI1wKP+XeqKLhdO6KH2WZ9rERGH7PtDi7Q==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.24.0.tgz", + "integrity": "sha512-zl/U3viJiV9OzkKM37AHIUN1af1TSLrcbHUUoNLkfJ33Nq+NlpaXpCVK0rKRqiLFJf7zk/a5KWG5CrOy9TxjKA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "3.23.4" + "@tiptap/extension-list": "3.24.0" } }, "node_modules/@tiptap/extension-list-keymap": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.23.4.tgz", - "integrity": "sha512-9FezifCfuoc0o+5K6l4QNOOfelqxnDGg/f9oL1D/LFZPC54bPxpWWft9QCWOqyqZgyLCLjbCjciAlbgkrFUmmw==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.24.0.tgz", + "integrity": "sha512-69fKcrngYGEKWNn4R5oLwl0YuV3FY4kufEValVcjnihUmqJTE1vx+fwctYoTsOGnIuNGpUIQ7f9YDD/0w34qBw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "3.23.4" + "@tiptap/extension-list": "3.24.0" } }, "node_modules/@tiptap/extension-ordered-list": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.23.4.tgz", - "integrity": "sha512-+3ofyssYnOTa1+nFWEmCAY1ngn8nAV1xo25JnNNC87NMU9WkSgr93jB7/uUJP0uui1C2dBLlaup3XXm108yarw==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.24.0.tgz", + "integrity": "sha512-buRa6bmBDw0TztH+rAcusIye14DiLDS+yGheo6GiNCTD7kKJnksXagBdxvip3jhW5sx7gyAKvoBmvGSg1BbsGA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "3.23.4" + "@tiptap/extension-list": "3.24.0" } }, "node_modules/@tiptap/extension-paragraph": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.23.4.tgz", - "integrity": "sha512-KbhXjCFzWphvFn5VU7E4dtmYDm+bssI1i0+CnXPWCXkjdaaX88ck68Xp1fKz8/bbI/CqlgiNDO/3TvqgtZ6woQ==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.24.0.tgz", + "integrity": "sha512-wD06aB6hO7LgcrlhGiw7I64k2tus9kNoICX5R+UecBSB1DVJdzKvXoXL2kPNv4DqYvljHdkIeK/OpuOTQd6MJA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4" + "@tiptap/core": "3.24.0" } }, "node_modules/@tiptap/extension-strike": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.23.4.tgz", - "integrity": "sha512-Vnq5vW801zPbu1LtKeA5k4R241jY+hRjXeijYwIPxy15KzIiipY12518HiCf6/8kkRbMxgOfdYg9X4BRV3HV3g==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.24.0.tgz", + "integrity": "sha512-sfN1iQs6Fdlorrfe8wipDkTPwu/Egx3s2fkY7TAWusTGFHwlovuRUGFKqCL9dI4N3u6uqUMpEuWmQNgv+aQGjQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4" + "@tiptap/core": "3.24.0" } }, "node_modules/@tiptap/extension-task-item": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-task-item/-/extension-task-item-3.23.4.tgz", - "integrity": "sha512-b6lmmwCcF5/9WetpgnSa5gxq/dRpJNJNvl4om/XKVRsvC9MQ3GwJMnhjPmcIneop4M5n++644+PJRu/N03uM7w==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-task-item/-/extension-task-item-3.24.0.tgz", + "integrity": "sha512-2VtX6VOp4SJk5E/VHeSC2Acfbge6h69TUBhF7hFebbiCDyB73xCaPKcuClIyzOlWJgpWz2ZPXwVB+Y3meXw+yw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "3.23.4" + "@tiptap/extension-list": "3.24.0" } }, "node_modules/@tiptap/extension-task-list": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-task-list/-/extension-task-list-3.23.4.tgz", - "integrity": "sha512-WIz4MHvPZssS5pNTTn2BuriCNrHA6jeS1XiRIqJFrvRXj7Kc9scXtGpne3GmisXDDeDKcP1IjREwQO9nlD8mVw==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-task-list/-/extension-task-list-3.24.0.tgz", + "integrity": "sha512-EIbB/WQ7L92WfaY5AF9upH93nIgBHjGt5zwPYoX+ZTpBncebr1AEDF7rc+LHNuSa1g1ToOKbFB88ep02IIXOjA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "3.23.4" + "@tiptap/extension-list": "3.24.0" } }, "node_modules/@tiptap/extension-text": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.23.4.tgz", - "integrity": "sha512-q9kxver/MR18p66aWZHSPycnr9hcBFyVGeGj8gf+BQCzn5hpvtSYTfLvk1nq8GFhygdQ9/e3f7B5ovrm/jnpvw==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.24.0.tgz", + "integrity": "sha512-Im7keLPEihxm3+LyF+drYCoaOY5hlq35lvHAp/el6M8pJ/scts88HrYpdR1Yc4BtpZBIhfHSyWgPaupI4qwdeg==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4" + "@tiptap/core": "3.24.0" } }, "node_modules/@tiptap/extension-underline": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.23.4.tgz", - "integrity": "sha512-F1ocPT10LV+seky25R1TMCRdc/Iof99jLcDSYDGr6mNEDY4ct2RvOeSM8aDdYq6CkH+vXt3i3JDeRwV23KzswQ==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.24.0.tgz", + "integrity": "sha512-D4W4X3UMq9dLVIOfPB9+UodQ4eAJ8yDcm8qFWAwq0a15YWH6bnwulCuIdV+U5dEG+yaRxN8haB9GrrID9jmrSA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4" + "@tiptap/core": "3.24.0" } }, "node_modules/@tiptap/extensions": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.23.4.tgz", - "integrity": "sha512-SlGPXauW8iKWG7wwuwC/0y/smLImp0h6GBIGgNnTBgIP/ThXQnjLMSZH0mW/REO87dQxkku01V3ARRywi+juhg==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.24.0.tgz", + "integrity": "sha512-z6gRYzy2ucJp07OQ0F2W07NxyhMTxPYH1ia2eGiQkWax1i56oExpjMsDHP8THWlg8Tb7NnbfKpkfh881EsmofA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.23.4", - "@tiptap/pm": "3.23.4" + "@tiptap/core": "3.24.0", + "@tiptap/pm": "3.24.0" } }, "node_modules/@tiptap/pm": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.23.4.tgz", - "integrity": "sha512-+C5ngcoza47n3MjtjVBqBEBICPC0McdbwzJ+X6SSCviCLoqnSYanv5mIX9HWG0Q4fJ4BkdNM3VibZUxQaTbKyQ==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.24.0.tgz", + "integrity": "sha512-QQP/78ryOZDN99gNBV7dgh69/8AYaOYQYFklq/iR+ZRFaaL3+qqHFvPVJapGkzPdymBgNJ34xjFM8n5pJ4QmMg==", "license": "MIT", "dependencies": { "prosemirror-changeset": "^2.3.0", @@ -5497,6 +5497,7 @@ "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", + "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", "prosemirror-model": "^1.24.1", "prosemirror-schema-list": "^1.5.0", @@ -5511,35 +5512,35 @@ } }, "node_modules/@tiptap/starter-kit": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.23.4.tgz", - "integrity": "sha512-3VhU+NO6/ec9DMj/5Ej0nzARSq42cXnqW+QHCmTL3FNXkXQz+tw1KlfruT5GGJ3M0RssjWjRC0a39N/4S3qxeA==", - "license": "MIT", - "dependencies": { - "@tiptap/core": "^3.23.4", - "@tiptap/extension-blockquote": "^3.23.4", - "@tiptap/extension-bold": "^3.23.4", - "@tiptap/extension-bullet-list": "^3.23.4", - "@tiptap/extension-code": "^3.23.4", - "@tiptap/extension-code-block": "^3.23.4", - "@tiptap/extension-document": "^3.23.4", - "@tiptap/extension-dropcursor": "^3.23.4", - "@tiptap/extension-gapcursor": "^3.23.4", - "@tiptap/extension-hard-break": "^3.23.4", - "@tiptap/extension-heading": "^3.23.4", - "@tiptap/extension-horizontal-rule": "^3.23.4", - "@tiptap/extension-italic": "^3.23.4", - "@tiptap/extension-link": "^3.23.4", - "@tiptap/extension-list": "^3.23.4", - "@tiptap/extension-list-item": "^3.23.4", - "@tiptap/extension-list-keymap": "^3.23.4", - "@tiptap/extension-ordered-list": "^3.23.4", - "@tiptap/extension-paragraph": "^3.23.4", - "@tiptap/extension-strike": "^3.23.4", - "@tiptap/extension-text": "^3.23.4", - "@tiptap/extension-underline": "^3.23.4", - "@tiptap/extensions": "^3.23.4", - "@tiptap/pm": "^3.23.4" + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.24.0.tgz", + "integrity": "sha512-Ef4PCP96vcY2GonXN9J0M8iC6zvxPTmQlL/QZiCwuYqqnH/hNpYIjNSQdTndiDpxRKofa32Sr2HWktgEnL32Bg==", + "license": "MIT", + "dependencies": { + "@tiptap/core": "^3.24.0", + "@tiptap/extension-blockquote": "^3.24.0", + "@tiptap/extension-bold": "^3.24.0", + "@tiptap/extension-bullet-list": "^3.24.0", + "@tiptap/extension-code": "^3.24.0", + "@tiptap/extension-code-block": "^3.24.0", + "@tiptap/extension-document": "^3.24.0", + "@tiptap/extension-dropcursor": "^3.24.0", + "@tiptap/extension-gapcursor": "^3.24.0", + "@tiptap/extension-hard-break": "^3.24.0", + "@tiptap/extension-heading": "^3.24.0", + "@tiptap/extension-horizontal-rule": "^3.24.0", + "@tiptap/extension-italic": "^3.24.0", + "@tiptap/extension-link": "^3.24.0", + "@tiptap/extension-list": "^3.24.0", + "@tiptap/extension-list-item": "^3.24.0", + "@tiptap/extension-list-keymap": "^3.24.0", + "@tiptap/extension-ordered-list": "^3.24.0", + "@tiptap/extension-paragraph": "^3.24.0", + "@tiptap/extension-strike": "^3.24.0", + "@tiptap/extension-text": "^3.24.0", + "@tiptap/extension-underline": "^3.24.0", + "@tiptap/extensions": "^3.24.0", + "@tiptap/pm": "^3.24.0" }, "funding": { "type": "github", @@ -5547,9 +5548,9 @@ } }, "node_modules/@tiptap/vue-2": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-3.23.4.tgz", - "integrity": "sha512-Q4PuaPB5CdsD9+DvE8d9FVyPXWxiUQijOnycq1VThfCDzZQFQhzAM9x3OGqx9Kznnja7Z9GPgDKMnFrc8t8M6w==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-3.24.0.tgz", + "integrity": "sha512-unpWywV+FFylntChy6u5iEOzijFME78m3t86iwY3cBy+lVpdOcX/Ym5+6HSBrvrk6Y3ejsxEG6Q9G1+j9MQhZw==", "license": "MIT", "dependencies": { "vue-ts-types": "1.6.2" @@ -5559,12 +5560,12 @@ "url": "https://github.com/sponsors/ueberdosis" }, "optionalDependencies": { - "@tiptap/extension-bubble-menu": "^3.23.4", - "@tiptap/extension-floating-menu": "^3.23.4" + "@tiptap/extension-bubble-menu": "^3.24.0", + "@tiptap/extension-floating-menu": "^3.24.0" }, "peerDependencies": { - "@tiptap/core": "3.23.4", - "@tiptap/pm": "3.23.4", + "@tiptap/core": "3.24.0", + "@tiptap/pm": "3.24.0", "vue": "^2.6.0" } }, @@ -14491,6 +14492,16 @@ "rope-sequence": "^1.3.0" } }, + "node_modules/prosemirror-inputrules": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz", + "integrity": "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, "node_modules/prosemirror-keymap": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz", diff --git a/package.json b/package.json index 51de5e3fea..660eac3ee6 100644 --- a/package.json +++ b/package.json @@ -45,11 +45,11 @@ "@nextcloud/moment": "^1.3.5", "@nextcloud/router": "^3.1.0", "@nextcloud/vue": "^8.39.0", - "@tiptap/extension-character-count": "^3.23.4", - "@tiptap/extension-task-item": "^3.23.4", - "@tiptap/extension-task-list": "^3.23.4", - "@tiptap/starter-kit": "^3.23.4", - "@tiptap/vue-2": "^3.23.4", + "@tiptap/extension-character-count": "^3.24.0", + "@tiptap/extension-task-item": "^3.24.0", + "@tiptap/extension-task-list": "^3.24.0", + "@tiptap/starter-kit": "^3.24.0", + "@tiptap/vue-2": "^3.24.0", "@vueuse/core": "^11.3.0", "debounce": "^3.0.0", "dompurify": "^3.4.7", diff --git a/playwright.config.ts b/playwright.config.ts index 60b9e4c131..03e3c8d098 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -5,6 +5,7 @@ import { defineConfig, devices } from "@playwright/test"; +const isCi = !!process.env.CI; const readyPort = process.env.PLAYWRIGHT_READY_PORT ?? "18089"; /** @@ -12,18 +13,21 @@ const readyPort = process.env.PLAYWRIGHT_READY_PORT ?? "18089"; */ export default defineConfig({ testDir: "./playwright", - timeout: 60000, + timeout: isCi ? 120000 : 60000, - /* Run tests in files in parallel */ - fullyParallel: true, + /* Run tests within files in parallel locally only; CI shares one Nextcloud container. */ + fullyParallel: !isCi, /* Fail the build on CI if you accidentally left test.only in the source code. */ - forbidOnly: !!process.env.CI, + forbidOnly: isCi, /* Retry on CI only */ - retries: process.env.CI ? 2 : 0, - /* Opt out of parallel tests on CI. */ - workers: 4, + retries: isCi ? 2 : 0, + /* Keep CI below the point where the shared Nextcloud container saturates. */ + workers: isCi ? 2 : 4, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: process.env.CI ? [["github"], ["line"]] : "list", + reporter: isCi ? [["github"], ["line"]] : "list", + expect: { + timeout: isCi ? 30000 : 5000, + }, /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { /* Base URL to use in actions like `await page.goto('./')`. */ diff --git a/playwright/support/commands.ts b/playwright/support/commands.ts index eef1a39a64..d5bd65db45 100644 --- a/playwright/support/commands.ts +++ b/playwright/support/commands.ts @@ -5,6 +5,10 @@ import { expect, type Locator, type Page } from '@playwright/test' +const IS_CI = !!process.env.CI +const ACTION_TIMEOUT = IS_CI ? 30000 : 10000 +const APP_LOAD_TIMEOUT = IS_CI ? 45000 : 10000 + function escapeRegExp(value: string) { return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') } @@ -48,7 +52,7 @@ async function firstVisible(locator: Locator, timeout: number = 0) { } async function navigateViaNavLink(page: Page, link: Locator) { - await link.waitFor({ state: 'visible', timeout: 10000 }) + await link.waitFor({ state: 'visible', timeout: ACTION_TIMEOUT }) await link.scrollIntoViewIfNeeded() const href = await link.getAttribute('href') @@ -59,11 +63,15 @@ async function navigateViaNavLink(page: Page, link: Locator) { } } -async function openTableActionsMenu(page: Page) { - await waitForTransientModalsToClose(page) +async function waitForAppToFinishLoading(page: Page) { await expect(page.locator('.icon-loading').first()).toBeHidden({ - timeout: 10000, + timeout: APP_LOAD_TIMEOUT, }) +} + +async function openTableActionsMenu(page: Page) { + await waitForTransientModalsToClose(page) + await waitForAppToFinishLoading(page) const menuButton = page.locator('[data-cy="customTableAction"] button').first() const anyMenuAction = page.locator( @@ -71,11 +79,11 @@ async function openTableActionsMenu(page: Page) { ) for (let attempt = 1; attempt <= 3; attempt++) { - await menuButton.waitFor({ state: 'visible', timeout: 10000 }) + await menuButton.waitFor({ state: 'visible', timeout: ACTION_TIMEOUT }) await menuButton.scrollIntoViewIfNeeded() await page.locator('.toastify').first().waitFor({ state: 'hidden', timeout: 5000 }).catch(() => {}) await menuButton.click() - if (await firstVisible(anyMenuAction, 10000)) { + if (await firstVisible(anyMenuAction, ACTION_TIMEOUT)) { return } @@ -132,9 +140,7 @@ export async function ensureNavigationOpen(page: Page) { } export async function openCreateRowModal(page: Page) { - await expect(page.locator('.icon-loading').first()).toBeHidden({ - timeout: 10000, - }) + await waitForAppToFinishLoading(page) const createRowButton = page.locator('[data-cy="createRowBtn"]').filter({ hasText: 'Create row' }).first() for (let attempt = 1; attempt <= 2; attempt++) { @@ -153,9 +159,7 @@ export async function openCreateRowModal(page: Page) { export async function createTable(page: Page, title: string) { await ensureNavigationOpen(page) - await expect(page.locator('.icon-loading').first()).toBeHidden({ - timeout: 10000, - }) + await waitForAppToFinishLoading(page) const createDialog = page.getByRole('dialog', { name: /^Create table$/ }) const navCreateButton = page.locator('[data-cy="navigationCreateTableIcon"]').first() @@ -241,9 +245,7 @@ export async function deleteRow(page: Page, rowIndex: number) { } export async function createView(page: Page, title: string) { - await expect(page.locator('.icon-loading').first()).toBeHidden({ - timeout: 10000, - }) + await waitForAppToFinishLoading(page) await openTableActionsMenu(page) const createViewBtn = page .locator('[data-cy="dataTableCreateViewBtn"]') @@ -276,9 +278,7 @@ export async function openCreateColumnModal( page: Page, isFirstColumn: boolean, ) { - await expect(page.locator('.icon-loading').first()).toBeHidden({ - timeout: 10000, - }) + await waitForAppToFinishLoading(page) if (isFirstColumn) { const createBtn = page .locator('.button-vue__text') @@ -420,9 +420,7 @@ export async function sortTableColumn( columnTitle: string, mode: 'ASC' | 'DESC' = 'ASC', ) { - await expect(page.locator('.icon-loading').first()).toBeHidden({ - timeout: 10000, - }) + await waitForAppToFinishLoading(page) const th = page.locator('th').filter({ hasText: columnTitle }) await th.hover() await th.getByRole('button', { name: 'Actions' }).click() @@ -443,7 +441,10 @@ export async function loadTable(page: Page, name: string) { .locator(`[data-cy="navigationTableItem"] a[title="${name}"]`) .last() await navigateViaNavLink(page, tableLink) - await expect(page.locator('.icon-loading').first()).toBeHidden() + await waitForAppToFinishLoading(page) + await expect(page.locator('h1').filter({ hasText: name }).first()).toBeVisible({ + timeout: APP_LOAD_TIMEOUT, + }) } export async function getTutorialTableName(page: Page) { @@ -458,7 +459,10 @@ export async function loadView(page: Page, name: string) { page, page.locator(`[data-cy="navigationViewItem"] a[title="${name}"]`), ) - await expect(page.locator('.icon-loading').first()).toBeHidden() + await waitForAppToFinishLoading(page) + await expect(page.locator('h1').filter({ hasText: name }).first()).toBeVisible({ + timeout: APP_LOAD_TIMEOUT, + }) } export async function loadContext(page: Page, title: string) { @@ -467,11 +471,14 @@ export async function loadContext(page: Page, title: string) { .locator('[data-cy="navigationContextItem"]') .filter({ hasText: title }) .first() - await contextItem.waitFor({ state: 'visible', timeout: 10000 }) + await contextItem.waitFor({ state: 'visible', timeout: ACTION_TIMEOUT }) await contextItem.scrollIntoViewIfNeeded() const contextLink = contextItem.locator('a').first() await navigateViaNavLink(page, contextLink) - await expect(page.locator('.icon-loading').first()).toBeHidden() + await waitForAppToFinishLoading(page) + await expect(page.locator('h1').filter({ hasText: title }).first()).toBeVisible({ + timeout: APP_LOAD_TIMEOUT, + }) } export async function unifiedSearch(page: Page, term: string) {