From 152bb7a3ee8e24c604c4efb4a744e40c8078bb58 Mon Sep 17 00:00:00 2001 From: Fabian Emilius Date: Thu, 26 Sep 2024 16:24:56 +0200 Subject: [PATCH] Add more information to presentation emails --- client/package-lock.json | 458 ++++++++++-------- client/package.json | 36 +- ...hesis-presentation-invitation-updated.html | 5 + .../thesis-presentation-invitation.html | 5 + .../ls1/service/MailingService.java | 8 +- .../thesistrack/ls1/utility/MailBuilder.java | 10 + 6 files changed, 293 insertions(+), 229 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index e65bdfe4..862540b5 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -9,19 +9,19 @@ "version": "3.0.0", "license": "MIT", "dependencies": { - "@mantine/core": "7.12.2", - "@mantine/dates": "7.12.2", - "@mantine/dropzone": "7.12.2", - "@mantine/form": "7.12.2", - "@mantine/hooks": "7.12.2", - "@mantine/notifications": "7.12.2", - "@mantine/tiptap": "7.12.2", - "@tiptap/extension-highlight": "2.7.2", - "@tiptap/extension-subscript": "2.7.2", - "@tiptap/extension-superscript": "2.7.2", - "@tiptap/extension-text-align": "2.7.2", - "@tiptap/extension-underline": "2.7.2", - "@tiptap/starter-kit": "2.7.2", + "@mantine/core": "7.13.0", + "@mantine/dates": "7.13.0", + "@mantine/dropzone": "7.13.0", + "@mantine/form": "7.13.0", + "@mantine/hooks": "7.13.0", + "@mantine/notifications": "7.13.0", + "@mantine/tiptap": "7.13.0", + "@tiptap/extension-highlight": "2.7.4", + "@tiptap/extension-subscript": "2.7.4", + "@tiptap/extension-superscript": "2.7.4", + "@tiptap/extension-text-align": "2.7.4", + "@tiptap/extension-underline": "2.7.4", + "@tiptap/starter-kit": "2.7.4", "i18n-iso-countries": "7.12.0", "jwt-decode": "4.0.0", "keycloak-js": "25.0.6", @@ -35,8 +35,8 @@ "devDependencies": { "@eslint/compat": "1.1.1", "@eslint/eslintrc": "3.1.0", - "@eslint/js": "9.11.0", - "@types/react": "18.3.8", + "@eslint/js": "9.11.1", + "@types/react": "18.3.9", "@types/react-dom": "18.3.0", "@typescript-eslint/eslint-plugin": "8.7.0", "@typescript-eslint/parser": "8.7.0", @@ -45,7 +45,7 @@ "copy-webpack-plugin": "12.0.2", "css-loader": "7.1.2", "css-minimizer-webpack-plugin": "7.0.0", - "eslint": "9.11.0", + "eslint": "9.11.1", "eslint-config-prettier": "9.1.0", "eslint-plugin-prettier": "5.2.1", "eslint-plugin-react": "7.36.1", @@ -62,9 +62,9 @@ "terser-webpack-plugin": "5.3.10", "ts-loader": "9.5.1", "ts-node": "10.9.2", - "typescript": "5.6.2", + "typescript": "5.5.4", "typescript-plugin-css-modules": "5.1.0", - "webpack": "5.94.0", + "webpack": "5.95.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-server": "5.1.0", @@ -274,6 +274,15 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/core": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", + "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", @@ -310,9 +319,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.11.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.0.tgz", - "integrity": "sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ==", + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz", + "integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -561,9 +570,9 @@ "dev": true }, "node_modules/@mantine/core": { - "version": "7.12.2", - "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.12.2.tgz", - "integrity": "sha512-FrMHOKq4s3CiPIxqZ9xnVX7H4PEGNmbtHMvWO/0YlfPgoV0Er/N/DNJOFW1ys4WSnidPTayYeB41riyxxGOpRQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.13.0.tgz", + "integrity": "sha512-aQpx3Q69ATDhVopBNkWS0sql93ZaPqeA5jTgqU7GxZvJdkpG87vbKYgp4cDV/gqr7BYu4kel0smeHYuPemiZ8Q==", "dependencies": { "@floating-ui/react": "^0.26.9", "clsx": "^2.1.1", @@ -573,44 +582,44 @@ "type-fest": "^4.12.0" }, "peerDependencies": { - "@mantine/hooks": "7.12.2", + "@mantine/hooks": "7.13.0", "react": "^18.2.0", "react-dom": "^18.2.0" } }, "node_modules/@mantine/dates": { - "version": "7.12.2", - "resolved": "https://registry.npmjs.org/@mantine/dates/-/dates-7.12.2.tgz", - "integrity": "sha512-qsDDl9qF80QLG1n6JiysyELAhbNLbV3qmXRAIU3GJLLxtZfyD9ntOUg0B64EpNl3Py4btXNo4yniFdu1JSUgwg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/dates/-/dates-7.13.0.tgz", + "integrity": "sha512-fCNS7JPCqnTtFJeGxdl2yFaMxyCP44BP2tYVZYC5KejvhfeA9u8AmtD5FsOnrdjMEnVc1DpLJobrwfmp98Ektg==", "dependencies": { "clsx": "^2.1.1" }, "peerDependencies": { - "@mantine/core": "7.12.2", - "@mantine/hooks": "7.12.2", + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", "dayjs": ">=1.0.0", "react": "^18.2.0", "react-dom": "^18.2.0" } }, "node_modules/@mantine/dropzone": { - "version": "7.12.2", - "resolved": "https://registry.npmjs.org/@mantine/dropzone/-/dropzone-7.12.2.tgz", - "integrity": "sha512-VXKpgFBfRfci6eQEyrmNSsTR7LdtErDhWloVw7W6YRsCqJxJHg9e3luG+yIk+tokzSyLoLOVZRX/mESDEso3PQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/dropzone/-/dropzone-7.13.0.tgz", + "integrity": "sha512-NDpSJ6rEN8dJwI5/qImG+6lNH/bLmf3cz4cErMR/DXNMUZGGGVx8V81oJfKoXlQi3P+yy0d6UOPiqAz1wkdC8Q==", "dependencies": { "react-dropzone-esm": "15.0.1" }, "peerDependencies": { - "@mantine/core": "7.12.2", - "@mantine/hooks": "7.12.2", + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", "react": "^18.2.0", "react-dom": "^18.2.0" } }, "node_modules/@mantine/form": { - "version": "7.12.2", - "resolved": "https://registry.npmjs.org/@mantine/form/-/form-7.12.2.tgz", - "integrity": "sha512-MknzDN5F7u/V24wVrL5VIXNvE7/6NMt40K6w3p7wbKFZiLhdh/tDWdMcRN7PkkWF1j2+eoVCBAOCL74U3BzNag==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/form/-/form-7.13.0.tgz", + "integrity": "sha512-CeQbE08D7JNA+YyaGKAdFj40rp0JDFobcobIgNZzIyzXX8QNxIrtGhX3QqKIiwiFcjJi4WCxUSzDrd6vOKaEmA==", "dependencies": { "fast-deep-equal": "^3.1.3", "klona": "^2.0.6" @@ -620,43 +629,43 @@ } }, "node_modules/@mantine/hooks": { - "version": "7.12.2", - "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.12.2.tgz", - "integrity": "sha512-dVMw8jpM0hAzc8e7/GNvzkk9N0RN/m+PKycETB3H6lJGuXJJSRR4wzzgQKpEhHwPccktDpvb4rkukKDq2jA8Fg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.13.0.tgz", + "integrity": "sha512-oQpwSi0gajH3UR1DFa9MQ+zeYy75xbc8Im9jIIepLbiJXtIcPK+yll1BMxNwPQLYU1pYI6ZgUazI2PoykVNmsg==", "peerDependencies": { "react": "^18.2.0" } }, "node_modules/@mantine/notifications": { - "version": "7.12.2", - "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.12.2.tgz", - "integrity": "sha512-gTvLHkoAZ42v5bZxibP9A50djp5ndEwumVhHSa7mxQ8oSS23tt3It/6hOqH7M+9kHY0a8s+viMiflUzTByA9qg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.13.0.tgz", + "integrity": "sha512-EEgKFxUK/4s2FKTYb6hKFbcsLwnccSe/8GsJ18DWGiLRxFq9DsgWCzfPAe+PVcGTITYfK7nbKxEF5l+KLdPOtQ==", "dependencies": { - "@mantine/store": "7.12.2", + "@mantine/store": "7.13.0", "react-transition-group": "4.4.5" }, "peerDependencies": { - "@mantine/core": "7.12.2", - "@mantine/hooks": "7.12.2", + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", "react": "^18.2.0", "react-dom": "^18.2.0" } }, "node_modules/@mantine/store": { - "version": "7.12.2", - "resolved": "https://registry.npmjs.org/@mantine/store/-/store-7.12.2.tgz", - "integrity": "sha512-NqL31sO/KcAETEWP/CiXrQOQNoE4168vZsxyXacQHGBueVMJa64WIDQtKLHrCnFRMws3vsXF02/OO4bH4XGcMQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/store/-/store-7.13.0.tgz", + "integrity": "sha512-ldYJGMcmqTxffQMCQZZWNtXKlG649S3BGM8ukeZ6FLZckVXLQAR2o+G5EkETNihh0sJKR7DVsYHltL5hyxYLkg==", "peerDependencies": { "react": "^18.2.0" } }, "node_modules/@mantine/tiptap": { - "version": "7.12.2", - "resolved": "https://registry.npmjs.org/@mantine/tiptap/-/tiptap-7.12.2.tgz", - "integrity": "sha512-Z43UlQ7e92P6pP9QIOjHaP/6k0GvzfxvcOfxo/AEDVUUTDTDu73N1gXSEJg/cdGBnBN2hCR+kAXPXGVGn2qq4g==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/tiptap/-/tiptap-7.13.0.tgz", + "integrity": "sha512-WoquUeyX6s6CVFkm4qwJWSt9e10JjX9p/LdGPpdKLn0lrJ4vGJy+L2zFDcoDxwXwgUKIw32rTmIoSsxUBziVIQ==", "peerDependencies": { - "@mantine/core": "7.12.2", - "@mantine/hooks": "7.12.2", + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", "@tiptap/extension-link": ">=2.1.12", "@tiptap/react": ">=2.1.12", "react": "^18.2.0", @@ -758,9 +767,9 @@ } }, "node_modules/@tiptap/core": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.7.2.tgz", - "integrity": "sha512-rGAH90LPMR5OIG7vuTDRw8WxDYxPXSxuGtu++mxPF+Bv7V2ijPOy3P1oyV1G3KGoS0pPiNugLh+tVLsElcx/9Q==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.7.4.tgz", + "integrity": "sha512-1VTQdNQChgxdVC8+b8QEW6cUxPSD9EDTzg9YRSLWtTtUDQ09sRSVs7eHIn1LcRHVs6PwcAsNgKE4FSjBw0sRlg==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -770,9 +779,9 @@ } }, "node_modules/@tiptap/extension-blockquote": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.7.2.tgz", - "integrity": "sha512-EUBYiEE9lL49YUZC9rv5UjiS04byB0HhsWoCerc1nBO6wjqv+TK/3rCFHzqRQ0LpVuLDwzBMaoD08+kHe43y+A==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.7.4.tgz", + "integrity": "sha512-N6rhiwVRpsxRz4Qt8cvKgpqjBxdi8GTbU/v2MV/BTONWb7Ch9ajv9HO6koEDdOeb77JVhpWztzYysTjJo2KTyQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -782,9 +791,9 @@ } }, "node_modules/@tiptap/extension-bold": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.7.2.tgz", - "integrity": "sha512-idRZz5/c5CJTDQ8xCU+45gyhbAM+9P8l9wpkeSAEGV4N1i8HBO7FXbWk+ZMQLhZhGJ0Ng36gzBVTsv5bNGpAAg==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.7.4.tgz", + "integrity": "sha512-Yq2ErekgpsOLCGYfQc1H3tUdmecKHDBWTPesVtqg0ct/3ZbKskhFoR6bPQWZH/ZRXQb1ARA+aMp/iqM/hqm+KQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -794,9 +803,9 @@ } }, "node_modules/@tiptap/extension-bubble-menu": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.7.2.tgz", - "integrity": "sha512-U4LjkVDrJZEfWeZai8AYT7GaI6d7gzLm7Z7bSzZ0sH5fOry2qkwLycRDI9YZlM95yaVIVB5GE93lrgDS5mOP3A==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.7.4.tgz", + "integrity": "sha512-Vx9gFFgz/6R+FIzOCbUNFOJAy4lKr/vbG2l1Ujn4PKber8OWV1JUHXF5MKhMKUupr+Yvu5h3ctBcOe1tZt/NIA==", "peer": true, "dependencies": { "tippy.js": "^6.3.7" @@ -811,9 +820,9 @@ } }, "node_modules/@tiptap/extension-bullet-list": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.7.2.tgz", - "integrity": "sha512-/RBy/qZpJe4Il1LzI1unQAKWMDjLXQoAU9gNIu6eAlHunHzwRUQ9zvH+7PNF5JkFkEbMtJLoz7NTS5qdndHldw==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.7.4.tgz", + "integrity": "sha512-uO08vui6uEgLEgLIYJSLrUb2An3u0If8XRW0Z0kB13zpwQ9pq0S1JOc0KwPTDPeIrgLQ7OOH87/bM9rGUFC3AQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -823,9 +832,9 @@ } }, "node_modules/@tiptap/extension-code": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.7.2.tgz", - "integrity": "sha512-C2umR5tNR0PJ7v+mvkm869nsjQm2rbM0ZgOQb/75htEScVAttNxMg2TYAEbIE8WM7mcIVUFhxPz8QuuUDMPCaA==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.7.4.tgz", + "integrity": "sha512-GB7gR8tV1fz+70wcSN+hLVm1qET/YmkxIaOfczHEOLLH7Td0C3kyQ5Q+eQ8KN0Ds7NBHFXn3zn051Q8gk9+5tw==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -835,9 +844,9 @@ } }, "node_modules/@tiptap/extension-code-block": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.7.2.tgz", - "integrity": "sha512-ATvrH59IG/dsfpH6+Yb+RvRFbNx6BUVBZoIMbG/jA76vbXxIcT3UcGoDIorCUJqA2KwpniZOfQOmZ2o6eg9hZQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.7.4.tgz", + "integrity": "sha512-jRKVAEdy3G0SMphWXCTk9SnMuTmJE6blXglU66H89j9R+hG+G0dHfOWhlubhUy6nI2BLy8jJ/isnOzg97iZuQw==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -848,9 +857,9 @@ } }, "node_modules/@tiptap/extension-document": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.7.2.tgz", - "integrity": "sha512-WyMGytHhb3MbNhJ8kUXTx/jHZ9XPaaPRJu1TYdVZNQ4pg7K47qLJ2KMOyLEFy7e5HcJUkYfhRHpyQGHkiu3brg==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.7.4.tgz", + "integrity": "sha512-Vsq9e/uW7k/5l1K9bCmuccBSrHhK3i0fbfnTp33G1byTCizheUo3UWFl8MSDammlhRkW/soIZFGdflsj5AJWog==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -860,9 +869,9 @@ } }, "node_modules/@tiptap/extension-dropcursor": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.7.2.tgz", - "integrity": "sha512-hZCIl5C/8m+4yIXa39+qFmUyH1/pPlnxu3OAgSxwxpA2NIM7DUMJnFZFt+4pEkmGD/5XEGKlLuBqvYzHC3OUBg==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.7.4.tgz", + "integrity": "sha512-hhE0RTluEEFxfqh8/jpmQRgy5AipTcd+WMK5cBw2zCa9If/qhY0EvysydEPwDU7yDEa13NDqV63x5oN9GKv2pg==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -873,9 +882,9 @@ } }, "node_modules/@tiptap/extension-floating-menu": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.7.2.tgz", - "integrity": "sha512-1z/kluQUQP3JmWb7vrC/ERi79lNuQegU6WRptRgSSQhFxeDPQX9CBK3I7HYy9bvSxnIa1/3GrKzL6gfaKU8WDA==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.7.4.tgz", + "integrity": "sha512-EGDq9eVT/fIJo6AOvXtRIWurAbGx0Fv2hIjQobX8AmCoOp3KjYalbQPbo1d3cyqanXG7sNRhBehIXc8Nv+AUWA==", "peer": true, "dependencies": { "tippy.js": "^6.3.7" @@ -890,9 +899,9 @@ } }, "node_modules/@tiptap/extension-gapcursor": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.7.2.tgz", - "integrity": "sha512-4gFwVp9J+d1M/6OqqsJmtg3/SLgiRiTM+h40vlCveu/yqliON9qSOhpuFE1PJkH4OpCH2l7YtyZRGEjo3ffuJQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.7.4.tgz", + "integrity": "sha512-1HTaCR6kcw5PvUJWEGKQ/Eh2HPXUmN6k1LK0rgJC4CxqiFxNNnPKGED9LcYheJbyMYk0Fz3rtaulxd3ipdIOsQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -903,9 +912,9 @@ } }, "node_modules/@tiptap/extension-hard-break": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.7.2.tgz", - "integrity": "sha512-44dZMi0N1fNhQ8i7bFnj4JYfhn4B6+vHuEueJPZS1iOsJc715m3e8ZSfDBk7VXCGKrksCxPMJ7guO0Y1PVryow==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.7.4.tgz", + "integrity": "sha512-ut81vNPQyDYi8LhOzPfFZGnPToYGQbBR6bvFE0e8WY9sRfvUZHr/GvkMjPuWuA8M5sBMqS5cLNyqPrI8h4R7Jg==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -915,9 +924,9 @@ } }, "node_modules/@tiptap/extension-heading": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.7.2.tgz", - "integrity": "sha512-i26Skx/womkqkG3aQW9PPh8UUS5znAWxNb5SzxBowJoISq1thOUsdmb16PdL9tljsO8vKy4sAPOx3hT5oVN7uw==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.7.4.tgz", + "integrity": "sha512-ZLFHhFvmDD6YKPf4wftZd4wtT510yHjzG90A14wyKCpm0Bq9wOYzx4Q+owvlp5vMwenqHuq3KGz4Sf3w6N5gkw==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -927,9 +936,9 @@ } }, "node_modules/@tiptap/extension-highlight": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-highlight/-/extension-highlight-2.7.2.tgz", - "integrity": "sha512-mWlwvhv9kQ9JiGpTS29MXX9UQ90gZ3QgdcZlRANOjwTlh9GOcxCzJ7VW1fLfPgqNvswpbUTwJnlCAP2owKKMFA==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-highlight/-/extension-highlight-2.7.4.tgz", + "integrity": "sha512-5YTOIfryziPKNe6Bt9zUp1fL1J4+Kz/x3+41AJsSpKyb87WW5wkBA2XCJcoEAizVbaFvaaAHFCuVwkWc/4fnpw==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -939,9 +948,9 @@ } }, "node_modules/@tiptap/extension-history": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.7.2.tgz", - "integrity": "sha512-l5jyPawcJ5qdZmSzryMLV+egEJeh2p9AmZRzv6QHug0PhhFNvujEHWEc1WXn+tY/OP2fAesfyed3bjdTVh2sFw==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.7.4.tgz", + "integrity": "sha512-xRgGXNrtjDGVOeLeZzGqw4/OtwIoloLU3QLn/qaOggVS7jr1HVTqMHw4nZVcUJfnB/UQ90yl53hBKZ8z3AxcCA==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -952,9 +961,9 @@ } }, "node_modules/@tiptap/extension-horizontal-rule": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.7.2.tgz", - "integrity": "sha512-WneHFFgAqCwksb5bJ6dfK3mLwZVSJ51FtaooXp4d1C/KZjqNTWoQBTrXHsPTFqz6swcRSFLG9xQgsh48grcmZw==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.7.4.tgz", + "integrity": "sha512-6mKkiGK9O+eGDeewpUHGyM2Xjlp69Oy+N/0o5zdzfN84YqVPqLV+Y7ub6fMxZUvmRt6L0kuv/ZoDoxeUk+QNKg==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -965,9 +974,9 @@ } }, "node_modules/@tiptap/extension-italic": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.7.2.tgz", - "integrity": "sha512-evrvsuMNhx9X4SG6iIcIRS0BdIwMlKTEKLc5jWWu5A3NnS9wOb8JT+wLTS1glwFAdrqKHUjUpWS6JMWF4O/mgQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.7.4.tgz", + "integrity": "sha512-j/86hNMRd2PbJX6DOs7CbrYgFJSXvZMnWkYRRol7XEELvEuIWoAgyJrW5HkDbVxmGfWPnLlqsoW7iTHml7P+Bg==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -977,9 +986,9 @@ } }, "node_modules/@tiptap/extension-link": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.7.2.tgz", - "integrity": "sha512-9RDhkp+naG53Ffmhqt6kRLkLT0Iun6WF++/If+os6w0w9t6BQUL4+A2ngZob65eu/xkN4NZXnjWcLg9gSrxGIQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.7.4.tgz", + "integrity": "sha512-nVzCEkK85JuNJH7oHW922V7LSjnZseihDsSCHCWjVNVgc+21s2ncGz16ZNOgiCOcnvxv7PtIB0EefXSuFZVPAQ==", "peer": true, "dependencies": { "linkifyjs": "^4.1.0" @@ -994,9 +1003,9 @@ } }, "node_modules/@tiptap/extension-list-item": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.7.2.tgz", - "integrity": "sha512-aP9E9XcwUMnsAdL4QD5e0HLZeW1I6Br67SH/e2yN1ZaJjJeN3XMq8N11QbBfMtkequqNk9cGrEj52TPi22MqXg==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.7.4.tgz", + "integrity": "sha512-2EiXAtkZdCUHCfYRQsslniQhUzvo8zEm+M6JHcsIRBRf27iE+nXrD6jq1WH2ZIUNLDUs4JsJhtc89aoSYkJGKw==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1006,9 +1015,9 @@ } }, "node_modules/@tiptap/extension-ordered-list": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.7.2.tgz", - "integrity": "sha512-uanvByYOYdFRgn/71UmIc0B7pIt9srL0XG5d8k8SeQS3cbdGgOMy7CjzwY7n3MuW3KJx6AqIZPfOsA2dKhVSEQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.7.4.tgz", + "integrity": "sha512-Y7fnw3lTyOd1h6t5hKSkYqbJXteafIviRdmrQ/ERRayojV934DjRPBeMQnYcArE6nI178/wLI9YMt1HSMJklRw==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1018,9 +1027,9 @@ } }, "node_modules/@tiptap/extension-paragraph": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.7.2.tgz", - "integrity": "sha512-yMzUGNojNv0lLEE+38GOpgRI327EyEZK/uEHlyzbjAWRvqE6aZ+oEB4JUuoJXX2Ad9gwN16dGHnxL//ieTxrkQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.7.4.tgz", + "integrity": "sha512-Pv3zsyuE+RItlkZVFcjcnz+Omp/UCEO03n9daeHljMUl7Rt775fXtcTNKPqO65f2B2MPBxrSdJpTsoMK0bbcjA==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1030,9 +1039,9 @@ } }, "node_modules/@tiptap/extension-strike": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.7.2.tgz", - "integrity": "sha512-ryDAdG/yXVCSdoDnEHeLBYxnjFXbIVHX4MmiagGSQRlgznlgylXjf+gnO9mxW+ulLvH4Wfz8FzZl2ra7nqLLwQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.7.4.tgz", + "integrity": "sha512-ELMFUCE9MlF0qsGzHJl0AxzGUVyS9rglk6pzidoB0iU1LuzUa/K1el5ID2ksSFdq2+STK17rOWQxUiv3X8C7gw==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1042,9 +1051,9 @@ } }, "node_modules/@tiptap/extension-subscript": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-subscript/-/extension-subscript-2.7.2.tgz", - "integrity": "sha512-goqv2TtpmbmL/7eLvhtIZvZ0Jq28pnLE/ni1kEoar01Jnt4vb63ZvGTkIPUPwP/7C8SsXB4KlVofa6rcpkjwhw==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-subscript/-/extension-subscript-2.7.4.tgz", + "integrity": "sha512-EZLwt/u1PQcIVuXRA+Lq8zVuzLxajNiJi5C2XqwvyLhhNGySvYqWCy2Nr80dTiwOe+yZVr9gwVQOvOE53EHW2A==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1054,9 +1063,9 @@ } }, "node_modules/@tiptap/extension-superscript": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-superscript/-/extension-superscript-2.7.2.tgz", - "integrity": "sha512-QLWiDaVGnXsNTFW6VTp3kMHb8iL1HcbHWZHVD44OvuK+qmjbdtJF7zFRTj8iTiL9LjbjujRfpRvtIt9r8J09CQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-superscript/-/extension-superscript-2.7.4.tgz", + "integrity": "sha512-AFYvbVCkOsix+2QVTl036LJeMpNNJT/XOCnxcCaWUeVwNKxrLxlGLzwrNqCC7hW6eYd73/Ht4+mzGIAGM78PPA==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1066,9 +1075,9 @@ } }, "node_modules/@tiptap/extension-text": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.7.2.tgz", - "integrity": "sha512-VjzG7W53Lx2q8XV0rUHetVTQWDK28XTCTW3IzxYxHp2joB/k9q3xgE/5Vs+7DOLSHIKq2BmwQNyaE+XjUF5iYQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.7.4.tgz", + "integrity": "sha512-1bF9LdfUumqXOz0A6xnOo7UHx+YLshxjMnjoMXjv7cOFOjdHbLmwKNTKGd2ltoCy3bSajoCPhPZL2Id89XDZfQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1078,9 +1087,9 @@ } }, "node_modules/@tiptap/extension-text-align": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-2.7.2.tgz", - "integrity": "sha512-sLQ7sl2fgkJD4MOP2t83kJccIJCnj19Bt5DRmlVb7pFDBaoDrQPH3Q9kw8GZznqr3PYCckRkPOyg0C3AdAVsnw==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-2.7.4.tgz", + "integrity": "sha512-/zJFhFko6yztjVlXL+Rpb4cpfSHydtFXkj+eto3Mjs0r+xzAsgP7WmQU2oTq482X1uvbfHD9u9SGSKH4jPcmig==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1090,9 +1099,9 @@ } }, "node_modules/@tiptap/extension-underline": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.7.2.tgz", - "integrity": "sha512-c3tPjxOusNZAlF/LG2RcTOPQrpUEKSjB9xwpEIJa/pZ59zQdivOdZGdOoCe6zqkDOT+Sh7sBoQKKwzIPi1csTQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.7.4.tgz", + "integrity": "sha512-1WT2ZHjBoyW6MzKrLC1v2KJszuozh6jzIbcabslRRNaEJFfsjIFgfU3TBpaXF+JKEBCi3h1JpWMgmtnr0puFVA==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1102,9 +1111,9 @@ } }, "node_modules/@tiptap/pm": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.7.2.tgz", - "integrity": "sha512-RiRPlwpuE6IHDJytE0tglbFlWELOaqeyGRGv25wBTjzV1plnqC5B3U65XY/8kKuuLjdd3NpRfR68DXBafusSBg==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.7.4.tgz", + "integrity": "sha512-YXjgPLN6/msTkKakuzgBm6Dd/Li3ORtysSki3fHnOFcy8R4c5JZLkYECQk6aJHsxvl/vGvNgaJy5yCDbhnaTAg==", "dependencies": { "prosemirror-changeset": "^2.2.1", "prosemirror-collab": "^1.3.1", @@ -1131,13 +1140,13 @@ } }, "node_modules/@tiptap/react": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-2.7.2.tgz", - "integrity": "sha512-4d1TQMRHtqagCarty1iQIJMLYZ2YzBHBgAt4HlPeoDUI4MHZutOIdkl1UXmxZwh/d5p6a+tZGTVOV4aKXMW2Iw==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-2.7.4.tgz", + "integrity": "sha512-ZJZsK0GVOFLBnQFOfVbR3auYElInh419E2LjmQzka3IL1/T130i6gL6kZoSzTwubGijnzKbWlaBAmc8NUboSgQ==", "peer": true, "dependencies": { - "@tiptap/extension-bubble-menu": "^2.7.2", - "@tiptap/extension-floating-menu": "^2.7.2", + "@tiptap/extension-bubble-menu": "^2.7.4", + "@tiptap/extension-floating-menu": "^2.7.4", "@types/use-sync-external-store": "^0.0.6", "fast-deep-equal": "^3", "use-sync-external-store": "^1.2.2" @@ -1154,30 +1163,30 @@ } }, "node_modules/@tiptap/starter-kit": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.7.2.tgz", - "integrity": "sha512-cKbhGXsi3IFtQcEZ2jGiRhuDy3AmT7oajrCgQ6KI6yis40yilTsVafUcLhDRchBaOvNJeS6kPy8QVKS7cJKqFw==", - "dependencies": { - "@tiptap/core": "^2.7.2", - "@tiptap/extension-blockquote": "^2.7.2", - "@tiptap/extension-bold": "^2.7.2", - "@tiptap/extension-bullet-list": "^2.7.2", - "@tiptap/extension-code": "^2.7.2", - "@tiptap/extension-code-block": "^2.7.2", - "@tiptap/extension-document": "^2.7.2", - "@tiptap/extension-dropcursor": "^2.7.2", - "@tiptap/extension-gapcursor": "^2.7.2", - "@tiptap/extension-hard-break": "^2.7.2", - "@tiptap/extension-heading": "^2.7.2", - "@tiptap/extension-history": "^2.7.2", - "@tiptap/extension-horizontal-rule": "^2.7.2", - "@tiptap/extension-italic": "^2.7.2", - "@tiptap/extension-list-item": "^2.7.2", - "@tiptap/extension-ordered-list": "^2.7.2", - "@tiptap/extension-paragraph": "^2.7.2", - "@tiptap/extension-strike": "^2.7.2", - "@tiptap/extension-text": "^2.7.2", - "@tiptap/pm": "^2.7.2" + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.7.4.tgz", + "integrity": "sha512-ALOphzdSZ+ZgOllc0gKxn7iDQ3c3BEBJzc5dQE1pJMeDHrGu/fAGXtffJOyJsVoBGTB14TXK6decMNUUwBApiA==", + "dependencies": { + "@tiptap/core": "^2.7.4", + "@tiptap/extension-blockquote": "^2.7.4", + "@tiptap/extension-bold": "^2.7.4", + "@tiptap/extension-bullet-list": "^2.7.4", + "@tiptap/extension-code": "^2.7.4", + "@tiptap/extension-code-block": "^2.7.4", + "@tiptap/extension-document": "^2.7.4", + "@tiptap/extension-dropcursor": "^2.7.4", + "@tiptap/extension-gapcursor": "^2.7.4", + "@tiptap/extension-hard-break": "^2.7.4", + "@tiptap/extension-heading": "^2.7.4", + "@tiptap/extension-history": "^2.7.4", + "@tiptap/extension-horizontal-rule": "^2.7.4", + "@tiptap/extension-italic": "^2.7.4", + "@tiptap/extension-list-item": "^2.7.4", + "@tiptap/extension-ordered-list": "^2.7.4", + "@tiptap/extension-paragraph": "^2.7.4", + "@tiptap/extension-strike": "^2.7.4", + "@tiptap/extension-text": "^2.7.4", + "@tiptap/pm": "^2.7.4" }, "funding": { "type": "github", @@ -1274,9 +1283,21 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz", + "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dev": true, "dependencies": { "@types/node": "*", @@ -1346,6 +1367,25 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==" + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -1359,9 +1399,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.5.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", - "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", + "version": "22.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.2.tgz", + "integrity": "sha512-866lXSrpGpgyHBZUa2m9YNWqHDjjM0aBTJlNtYaGEw4rqY/dcD7deRVTbBBAJelfA7oaGDbNftXF/TL/A6RgoA==", "dev": true, "dependencies": { "undici-types": "~6.19.2" @@ -1419,9 +1459,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.3.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz", - "integrity": "sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==", + "version": "18.3.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.9.tgz", + "integrity": "sha512-+BpAVyTpJkNWWSSnaLBk6ePpHLOGJKnEQNbINNovPWzvEUyAe3e+/d494QdEh71RekM/qV7lw6jzf1HGrJyAtQ==", "devOptional": true, "dependencies": { "@types/prop-types": "*", @@ -2440,9 +2480,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "dev": true, "funding": [ { @@ -2459,8 +2499,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, @@ -2572,9 +2612,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001663", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz", - "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==", + "version": "1.0.30001664", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz", + "integrity": "sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==", "dev": true, "funding": [ { @@ -3630,9 +3670,9 @@ } }, "node_modules/dompurify": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", - "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==", + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz", + "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==", "optional": true }, "node_modules/domutils": { @@ -3684,9 +3724,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.27", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz", - "integrity": "sha512-o37j1vZqCoEgBuWWXLHQgTN/KDKe7zwpiY5CPeq2RvUqOyJw9xnrULzZAEVQ5p4h+zjMk7hgtOoPdnLxr7m/jw==", + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.29.tgz", + "integrity": "sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw==", "dev": true }, "node_modules/emoji-regex": { @@ -3962,20 +4002,23 @@ } }, "node_modules/eslint": { - "version": "9.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.0.tgz", - "integrity": "sha512-yVS6XODx+tMFMDFcG4+Hlh+qG7RM6cCJXtQhCKLSsr3XkLvWggHjCqjfh0XsPPnt1c56oaT6PMgW9XWQQjdHXA==", + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz", + "integrity": "sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.11.0", "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.6.0", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.11.0", + "@eslint/js": "9.11.1", "@eslint/plugin-kit": "^0.2.0", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -7980,10 +8023,11 @@ } }, "node_modules/prosemirror-markdown": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.0.tgz", - "integrity": "sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.1.tgz", + "integrity": "sha512-Sl+oMfMtAjWtlcZoj/5L/Q39MpEnVZ840Xo330WJWUvgyhNmLBLN7MsHn07s53nG/KImevWHSE6fEj4q/GihHw==", "dependencies": { + "@types/markdown-it": "^14.0.0", "markdown-it": "^14.0.0", "prosemirror-model": "^1.20.0" } @@ -9664,9 +9708,9 @@ } }, "node_modules/terser": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.33.0.tgz", - "integrity": "sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.0.tgz", + "integrity": "sha512-y5NUX+U9HhVsK/zihZwoq4r9dICLyV2jXGOriDAVOeKhq3LKVjgJbGO90FisozXLlJfvjHqgckGmJFBb9KYoWQ==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -10068,9 +10112,9 @@ } }, "node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -10370,9 +10414,9 @@ } }, "node_modules/webpack": { - "version": "5.94.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", - "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "version": "5.95.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", + "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", "dev": true, "dependencies": { "@types/estree": "^1.0.5", diff --git a/client/package.json b/client/package.json index a54fc89c..dcf9a95b 100644 --- a/client/package.json +++ b/client/package.json @@ -14,19 +14,19 @@ "check-build-speed": "BUILD_SPEED=true webpack --env NODE_ENV=production" }, "dependencies": { - "@mantine/core": "7.12.2", - "@mantine/dates": "7.12.2", - "@mantine/dropzone": "7.12.2", - "@mantine/form": "7.12.2", - "@mantine/hooks": "7.12.2", - "@mantine/notifications": "7.12.2", - "@mantine/tiptap": "7.12.2", - "@tiptap/extension-highlight": "2.7.2", - "@tiptap/extension-subscript": "2.7.2", - "@tiptap/extension-superscript": "2.7.2", - "@tiptap/extension-text-align": "2.7.2", - "@tiptap/extension-underline": "2.7.2", - "@tiptap/starter-kit": "2.7.2", + "@mantine/core": "7.13.0", + "@mantine/dates": "7.13.0", + "@mantine/dropzone": "7.13.0", + "@mantine/form": "7.13.0", + "@mantine/hooks": "7.13.0", + "@mantine/notifications": "7.13.0", + "@mantine/tiptap": "7.13.0", + "@tiptap/extension-highlight": "2.7.4", + "@tiptap/extension-subscript": "2.7.4", + "@tiptap/extension-superscript": "2.7.4", + "@tiptap/extension-text-align": "2.7.4", + "@tiptap/extension-underline": "2.7.4", + "@tiptap/starter-kit": "2.7.4", "i18n-iso-countries": "7.12.0", "jwt-decode": "4.0.0", "keycloak-js": "25.0.6", @@ -40,8 +40,8 @@ "devDependencies": { "@eslint/compat": "1.1.1", "@eslint/eslintrc": "3.1.0", - "@eslint/js": "9.11.0", - "@types/react": "18.3.8", + "@eslint/js": "9.11.1", + "@types/react": "18.3.9", "@types/react-dom": "18.3.0", "@typescript-eslint/eslint-plugin": "8.7.0", "@typescript-eslint/parser": "8.7.0", @@ -50,7 +50,7 @@ "copy-webpack-plugin": "12.0.2", "css-loader": "7.1.2", "css-minimizer-webpack-plugin": "7.0.0", - "eslint": "9.11.0", + "eslint": "9.11.1", "eslint-config-prettier": "9.1.0", "eslint-plugin-prettier": "5.2.1", "eslint-plugin-react": "7.36.1", @@ -67,9 +67,9 @@ "terser-webpack-plugin": "5.3.10", "ts-loader": "9.5.1", "ts-node": "10.9.2", - "typescript": "5.6.2", + "typescript": "5.5.4", "typescript-plugin-css-modules": "5.1.0", - "webpack": "5.94.0", + "webpack": "5.95.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-server": "5.1.0", diff --git a/server/mail-templates/thesis-presentation-invitation-updated.html b/server/mail-templates/thesis-presentation-invitation-updated.html index a15ad7f1..8839f0b3 100644 --- a/server/mail-templates/thesis-presentation-invitation-updated.html +++ b/server/mail-templates/thesis-presentation-invitation-updated.html @@ -11,6 +11,7 @@

INVITATION

{{thesis.title}}

Supervisor: {{thesis.supervisors}}
+
Advisor(s): {{thesis.advisors}}

The presentation will be in {{presentation.language}}. Everybody is cordially invited to attend. @@ -21,3 +22,7 @@

INVITATION

Abstract
{{thesis.abstractText}}

+ +

+ Full Details: {{presentationUrl}} +

\ No newline at end of file diff --git a/server/mail-templates/thesis-presentation-invitation.html b/server/mail-templates/thesis-presentation-invitation.html index a15ad7f1..fccd4757 100644 --- a/server/mail-templates/thesis-presentation-invitation.html +++ b/server/mail-templates/thesis-presentation-invitation.html @@ -11,6 +11,7 @@

INVITATION

{{thesis.title}}

Supervisor: {{thesis.supervisors}}
+
Advisor(s): {{thesis.advisors}}

The presentation will be in {{presentation.language}}. Everybody is cordially invited to attend. @@ -21,3 +22,7 @@

INVITATION

Abstract
{{thesis.abstractText}}

+ +

+ Full Details: {{presentationUrl}} +

diff --git a/server/src/main/java/thesistrack/ls1/service/MailingService.java b/server/src/main/java/thesistrack/ls1/service/MailingService.java index e7214268..205f54e2 100644 --- a/server/src/main/java/thesistrack/ls1/service/MailingService.java +++ b/server/src/main/java/thesistrack/ls1/service/MailingService.java @@ -202,8 +202,8 @@ public void sendScheduledPresentationEmail(String action, ThesisPresentation pre .sendToChairStudents() .fillThesisPresentationPlaceholders(presentation); - for (ThesisRole role : presentation.getThesis().getRoles()) { - publicBuilder.addPrimarySender(role.getUser()); + for (User student : presentation.getThesis().getStudents()) { + publicBuilder.addPrimarySender(student); } if (icsFile != null && !icsFile.isBlank()) { @@ -237,8 +237,8 @@ public void sendPresentationDeletedEmail(User deletingUser, ThesisPresentation p .sendToChairStudents() .fillThesisPresentationPlaceholders(presentation); - for (ThesisRole role : presentation.getThesis().getRoles()) { - publicBuilder.addPrimarySender(role.getUser()); + for (User student : presentation.getThesis().getStudents()) { + publicBuilder.addPrimarySender(student); } publicBuilder.send(javaMailSender, uploadService); diff --git a/server/src/main/java/thesistrack/ls1/utility/MailBuilder.java b/server/src/main/java/thesistrack/ls1/utility/MailBuilder.java index 68b16046..14951435 100644 --- a/server/src/main/java/thesistrack/ls1/utility/MailBuilder.java +++ b/server/src/main/java/thesistrack/ls1/utility/MailBuilder.java @@ -102,12 +102,20 @@ public MailBuilder addDefaultBccRecipients() { } public MailBuilder addPrimaryRecipient(User user) { + if (primaryRecipients.contains(user)) { + return this; + } + primaryRecipients.add(user); return this; } public MailBuilder addSecondaryRecipient(InternetAddress address) { + if (secondaryRecipients.contains(address)) { + return this; + } + secondaryRecipients.add(address); return this; @@ -242,6 +250,8 @@ public MailBuilder fillThesisPresentationPlaceholders(ThesisPresentation present replaceDtoPlaceholders(ThesisDto.ThesisPresentationDto.fromPresentationEntity(presentation), "presentation", formatters); + replacePlaceholder("presentationUrl", config.getClientHost() + "/presentations/" + presentation.getId()); + return this; }