diff --git a/client/package-lock.json b/client/package-lock.json index d48a498af1..3d560ab296 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -9,38 +9,38 @@ "version": "4.1.x-dev", "license": "MIT", "dependencies": { - "@angular/animations": "^18.2.5", - "@angular/cdk": "^18.2.5", - "@angular/common": "^18.2.5", - "@angular/compiler": "^18.2.5", - "@angular/core": "^18.2.5", - "@angular/forms": "^18.2.5", - "@angular/material": "^18.2.5", - "@angular/material-date-fns-adapter": "^18.2.5", - "@angular/platform-browser": "^18.2.5", - "@angular/platform-browser-dynamic": "^18.2.5", - "@angular/router": "^18.2.5", - "@angular/service-worker": "^18.2.5", + "@angular/animations": "^18.2.6", + "@angular/cdk": "^18.2.6", + "@angular/common": "^18.2.6", + "@angular/compiler": "^18.2.6", + "@angular/core": "^18.2.6", + "@angular/forms": "^18.2.6", + "@angular/material": "^18.2.6", + "@angular/material-date-fns-adapter": "^18.2.6", + "@angular/platform-browser": "^18.2.6", + "@angular/platform-browser-dynamic": "^18.2.6", + "@angular/router": "^18.2.6", + "@angular/service-worker": "^18.2.6", "@material/typography": "^14.0.0", "@ngx-pwa/local-storage": "^18.0.0", "@ngx-translate/core": "^15.0.0", "@ngx-translate/http-loader": "^8.0.0", - "@tiptap/core": "^2.7.2", - "@tiptap/extension-color": "^2.7.2", - "@tiptap/extension-highlight": "^2.7.2", - "@tiptap/extension-image": "^2.7.2", - "@tiptap/extension-link": "^2.7.2", - "@tiptap/extension-subscript": "^2.7.2", - "@tiptap/extension-superscript": "^2.7.2", - "@tiptap/extension-table": "^2.7.2", - "@tiptap/extension-table-cell": "^2.7.2", - "@tiptap/extension-table-header": "^2.7.2", - "@tiptap/extension-table-row": "^2.7.2", - "@tiptap/extension-text-align": "^2.7.2", - "@tiptap/extension-text-style": "^2.5.4", - "@tiptap/extension-underline": "^2.7.2", - "@tiptap/pm": "^2.5.4", - "@tiptap/starter-kit": "^2.7.2", + "@tiptap/core": "^2.7.4", + "@tiptap/extension-color": "^2.7.4", + "@tiptap/extension-highlight": "^2.7.4", + "@tiptap/extension-image": "^2.7.4", + "@tiptap/extension-link": "^2.7.4", + "@tiptap/extension-subscript": "^2.7.4", + "@tiptap/extension-superscript": "^2.7.4", + "@tiptap/extension-table": "^2.7.4", + "@tiptap/extension-table-cell": "^2.7.4", + "@tiptap/extension-table-header": "^2.7.4", + "@tiptap/extension-table-row": "^2.7.4", + "@tiptap/extension-text-align": "^2.7.4", + "@tiptap/extension-text-style": "^2.7.4", + "@tiptap/extension-underline": "^2.7.4", + "@tiptap/pm": "^2.7.4", + "@tiptap/starter-kit": "^2.7.4", "@tsparticles/angular": "^3.0.0", "@tsparticles/engine": "^3.5.0", "@tsparticles/plugin-emitters": "^3.5.0", @@ -57,6 +57,7 @@ "material-design-icons-iconfont": "^6.7.0", "ng2-charts": "^6.0.1", "ng2-pdf-viewer": "^10.3.1", + "ngx-cookie-service": "^18.0.0", "ngx-date-fns": "^11.0.0", "ngx-device-detector": "^8.0.0", "ngx-file-drop": "^16.0.0", @@ -72,19 +73,19 @@ "zone.js": "^0.14.10" }, "devDependencies": { - "@angular-devkit/build-angular": "^18.2.5", + "@angular-devkit/build-angular": "^18.2.6", "@angular-eslint/builder": "^18.3.1", "@angular-eslint/eslint-plugin": "^18.3.1", "@angular-eslint/eslint-plugin-template": "^18.3.1", "@angular-eslint/schematics": "^18.3.1", "@angular-eslint/template-parser": "^18.3.1", - "@angular/cli": "^18.2.5", - "@angular/compiler-cli": "^18.2.5", + "@angular/cli": "^18.2.6", + "@angular/compiler-cli": "^18.2.6", "@colsen1991/ngx-translate-extract-marker": "^2.0.8", "@types/file-saver": "^2.0.7", "@types/jasmine": "~5.1.4", "@types/js-yaml": "^4.0.9", - "@types/node": "^20.16.5", + "@types/node": "^20.16.10", "@types/pdfmake": "^0.2.9", "@types/qrcode": "^1.5.5", "@types/tinycolor2": "^1.4.6", @@ -97,7 +98,7 @@ "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-unused-imports": "^4.1.4", - "fetch-mock": "^11.1.4", + "fetch-mock": "^11.1.5", "jasmine-core": "~5.3.0", "js-yaml": "^4.1.0", "karma": "~6.4.4", @@ -128,12 +129,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1802.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.5.tgz", - "integrity": "sha512-c7sVoW85Yqj7IYvNKxtNSGS5I7gWpORorg/xxLZX3OkHWXDrwYbb5LN/2p5/Aytxyb0aXl4o5fFOu6CUwcaLUw==", + "version": "0.1802.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.6.tgz", + "integrity": "sha512-oF7cPFdTLxeuvXkK/opSdIxZ1E4LrBbmuytQ/nCoAGOaKBWdqvwagRZ6jVhaI0Gwu48rkcV7Zhesg/ESNnROdw==", "dev": true, "dependencies": { - "@angular-devkit/core": "18.2.5", + "@angular-devkit/core": "18.2.6", "rxjs": "7.8.1" }, "engines": { @@ -143,16 +144,16 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.5.tgz", - "integrity": "sha512-dIvb0AHoRIMM6tLuG4t6lDDslSAYP77wqytodsN317UzFOuuCPernXbO8NJs+QHxj09nPsem1T5vnvpO2E/PVQ==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.6.tgz", + "integrity": "sha512-u12cJZttgs5j7gICHWSmcaTCu0EFXEzKqI8nkYCwq2MtuJlAXiMQSXYuEP9OU3Go4vMAPtQh2kShyOWCX5b4EQ==", "dev": true, "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.5", - "@angular-devkit/build-webpack": "0.1802.5", - "@angular-devkit/core": "18.2.5", - "@angular/build": "18.2.5", + "@angular-devkit/architect": "0.1802.6", + "@angular-devkit/build-webpack": "0.1802.6", + "@angular-devkit/core": "18.2.6", + "@angular/build": "18.2.6", "@babel/core": "7.25.2", "@babel/generator": "7.25.0", "@babel/helper-annotate-as-pure": "7.24.7", @@ -163,7 +164,7 @@ "@babel/preset-env": "7.25.3", "@babel/runtime": "7.25.0", "@discoveryjs/json-ext": "0.6.1", - "@ngtools/webpack": "18.2.5", + "@ngtools/webpack": "18.2.6", "@vitejs/plugin-basic-ssl": "1.1.0", "ansi-colors": "4.1.3", "autoprefixer": "10.4.20", @@ -316,12 +317,12 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1802.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.5.tgz", - "integrity": "sha512-6qkcrWBdkxojCVHGWcdJaz4G+7QTjFvmc+3g8xvLc9sYvJq1I059gfXhDnC0FxiA0MT4cY/26ECYWUHTD5CJLQ==", + "version": "0.1802.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.6.tgz", + "integrity": "sha512-JMLcXFaitJplwZMKkqhbYirINCRD6eOPZuIGaIOVynXYGWgvJkLT9t5C2wm9HqSLtp1K7NcYG2Y7PtTVR4krnQ==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1802.5", + "@angular-devkit/architect": "0.1802.6", "rxjs": "7.8.1" }, "engines": { @@ -335,9 +336,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.5.tgz", - "integrity": "sha512-r9TumPlJ8PvA2+yz4sp+bUHgtznaVKzhvXTN5qL1k4YP8LJ7iZWMR2FOP+HjukHZOTsenzmV9pszbogabqwoZQ==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.6.tgz", + "integrity": "sha512-la4CFvs5PcRWSkQ/H7TB5cPZirFVA9GoWk5LzIk8si6VjWBJRm8b3keKJoC9LlNeABRUIR5z0ocYkyQQUhdMfg==", "dev": true, "dependencies": { "ajv": "8.17.1", @@ -391,12 +392,12 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.5.tgz", - "integrity": "sha512-NUmz2UQ1Xl4cf4j1AgkwIfsCjBzAPgfeC3IBrD29hSOBE1Y3j6auqjBkvw50v6mbSPxESND995Xy13HpK1Xflw==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.6.tgz", + "integrity": "sha512-uIttrQ2cQ2PWAFFVPeCoNR8xvs7tPJ2i8gzqsIwYdge107xDC6u9CqfgmBqPDSFpWj+IiC2Jwcm8Z4HYKU4+7A==", "dev": true, "dependencies": { - "@angular-devkit/core": "18.2.5", + "@angular-devkit/core": "18.2.6", "jsonc-parser": "3.3.1", "magic-string": "0.30.11", "ora": "5.4.1", @@ -518,9 +519,9 @@ } }, "node_modules/@angular/animations": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.5.tgz", - "integrity": "sha512-IlXtW/Nj48ZzjHUzH1TykZcSR64ScJx39T3IHnjV2z/bVATzZ36JGoadQHdqpJNKBodYJNgtJCGLCbgAvGWY2g==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.6.tgz", + "integrity": "sha512-vy9wy+Q9beiRxkEO8wNxFQ63AqAujGvk8AUHepxxIT7QNNc512TNKz8uH+feWDPO38Dm2obwYQHMGzs3WO7pUA==", "dependencies": { "tslib": "^2.3.0" }, @@ -528,17 +529,17 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.5" + "@angular/core": "18.2.6" } }, "node_modules/@angular/build": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.5.tgz", - "integrity": "sha512-XWkmjzgeUga0SJ0lYSYcTuYOWTyqcln2mNfBp7Ae/GZ+/7+APbedsIZEiZGZwveOIyOpTM5wguNSoe9khDl5Ig==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.6.tgz", + "integrity": "sha512-TQzX6Mi7uXFvmz7+OVl4Za7WawYPcx+B5Ewm6IY/DdMyB9P/Z4tbKb1LO+ynWUXYwm7avXo6XQQ4m5ArDY5F/A==", "dev": true, "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.5", + "@angular-devkit/architect": "0.1802.6", "@babel/core": "7.25.2", "@babel/helper-annotate-as-pure": "7.24.7", "@babel/helper-split-export-declaration": "7.24.7", @@ -557,7 +558,7 @@ "parse5-html-rewriting-stream": "7.0.0", "picomatch": "4.0.2", "piscina": "4.6.1", - "rollup": "4.20.0", + "rollup": "4.22.4", "sass": "1.77.6", "semver": "7.6.3", "vite": "5.4.6", @@ -629,9 +630,9 @@ } }, "node_modules/@angular/cdk": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.5.tgz", - "integrity": "sha512-HLg5cfrIrgNIJJ+0v3kLieHeLPJLFNOBO359holXOrKUPRG+XQ3CT8EzSvREFm1XkaSEsDC0+dnG0ouNhOPFpQ==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.6.tgz", + "integrity": "sha512-Gfq/iv4zhlKYpdQkDaBRwxI71NHNUHM1Cs1XhnZ0/oFct5HXvSv1RHRGTKqBJLLACaAPzZKXJ/UglLoyO5CNiQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -645,17 +646,17 @@ } }, "node_modules/@angular/cli": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.5.tgz", - "integrity": "sha512-97uNs0HsOdnMaTlNJKFjIBUXw0wz43uYvSSKmIpBt7eq1LaPLju1G/qpDIHx2YwhMClPrXXrW2H/xdvqZiIw+w==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.6.tgz", + "integrity": "sha512-tdXsnV/w+Rgu8q0zFsLU5L9ImTVqrTol1vppHaQkJ/vuoHy+s8ZEbBqhVrO/ffosNb2xseUybGYvqMS4zkNQjg==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1802.5", - "@angular-devkit/core": "18.2.5", - "@angular-devkit/schematics": "18.2.5", + "@angular-devkit/architect": "0.1802.6", + "@angular-devkit/core": "18.2.6", + "@angular-devkit/schematics": "18.2.6", "@inquirer/prompts": "5.3.8", "@listr2/prompt-adapter-inquirer": "2.0.15", - "@schematics/angular": "18.2.5", + "@schematics/angular": "18.2.6", "@yarnpkg/lockfile": "1.1.0", "ini": "4.1.3", "jsonc-parser": "3.3.1", @@ -678,9 +679,9 @@ } }, "node_modules/@angular/common": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.5.tgz", - "integrity": "sha512-m+KJrtbFXTE36jP/po6UAMeUR/enQxRHpVGLCRcIcE7VWVH1ZcOvoW1yqh2A6k+KxWXeajlq/Z04nnMhcoxMRw==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.6.tgz", + "integrity": "sha512-89793ow+wrI1c7C6kyMbnweLNIZHzXthosxAEjipRZGBrqBYjvTtkE45Fl+5yBa3JO7bAhyGkUnEoyvWtZIAEA==", "dependencies": { "tslib": "^2.3.0" }, @@ -688,14 +689,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.5", + "@angular/core": "18.2.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.5.tgz", - "integrity": "sha512-vcqe9x4dGGAnMfPhEpcZyiSVgAiqJeK80LqP1vWoAmBR+HeOqAilSv6SflcLAtuTzwgzMMAvD2T+SMCgUvaqww==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.6.tgz", + "integrity": "sha512-3tX2/Qw+bZ8XzKitviH8jzNGyY0uohhehhBB57OJOCc+yr4ojy/7SYFnun1lSsRnDztdCE461641X4iQLCQ94w==", "dependencies": { "tslib": "^2.3.0" }, @@ -703,7 +704,7 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.5" + "@angular/core": "18.2.6" }, "peerDependenciesMeta": { "@angular/core": { @@ -712,9 +713,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.5.tgz", - "integrity": "sha512-CCCtZobUTUfId/RTYtuDCw5R1oK0w65hdAUMRP1MdGmd8bb8DKJA86u1QCWwozL3rbXlIIX4ognQ6urQ43k/Gw==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.6.tgz", + "integrity": "sha512-b5x9STfjNiNM/S0D+CnqRP9UOxPtSz1+RlCH5WdOMiW/p8j5p6dBix8YYgTe6Wg3OD7eItD2pnFQKgF/dWiopA==", "dev": true, "dependencies": { "@babel/core": "7.25.2", @@ -735,14 +736,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/compiler": "18.2.5", + "@angular/compiler": "18.2.6", "typescript": ">=5.4 <5.6" } }, "node_modules/@angular/core": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.5.tgz", - "integrity": "sha512-5BLVc5gXxzanQkADNS9WPsor3vNF5nQcyIHBi5VScErwM5vVZ7ATH1iZwaOg1ykDEVTFVhKDwD0X1aaqGDbhmQ==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.6.tgz", + "integrity": "sha512-PjFad2j4YBwLVTw+0Te8CJCa/tV0W8caTHG8aOjj3ObdL6ihGI+FKnwerLc9RVzDFd14BOO4C6/+LbOQAh3Ltw==", "dependencies": { "tslib": "^2.3.0" }, @@ -755,9 +756,9 @@ } }, "node_modules/@angular/forms": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.5.tgz", - "integrity": "sha512-ohKeH+EZCCIyGSiFYlraWLzssGAZc13P92cuYpXB62322PkcA5u0IT72mML9JWGKRqF2zteVsw4koWHVxXM5mA==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.6.tgz", + "integrity": "sha512-quGkUqTxlBaLB8C/RnpfFG57fdmNF5RQ+368N89Ma++2lpIsVAHaGZZn4yOyo3wNYaM2jBxNqaYxOzZNUl5Tig==", "dependencies": { "tslib": "^2.3.0" }, @@ -765,22 +766,22 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.5", - "@angular/core": "18.2.5", - "@angular/platform-browser": "18.2.5", + "@angular/common": "18.2.6", + "@angular/core": "18.2.6", + "@angular/platform-browser": "18.2.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/material": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.2.5.tgz", - "integrity": "sha512-+Yz8ayKz1ALz2UvPrM33FHSUmrE0GKHn+Gg79l6NdC4eSrzAAYBVdLfQvCBWCgtdvs7IiegbCnnAJiqXVC1DDg==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.2.6.tgz", + "integrity": "sha512-ObxC/vomSb9QF3vIztuiInQzws+D6u09Dhfx6uNFjtyICqxEFpF7+Qx7QVDWrsuXOgxZTKgacK8f46iV8hWUfg==", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { "@angular/animations": "^18.0.0 || ^19.0.0", - "@angular/cdk": "18.2.5", + "@angular/cdk": "18.2.6", "@angular/common": "^18.0.0 || ^19.0.0", "@angular/core": "^18.0.0 || ^19.0.0", "@angular/forms": "^18.0.0 || ^19.0.0", @@ -789,22 +790,22 @@ } }, "node_modules/@angular/material-date-fns-adapter": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/material-date-fns-adapter/-/material-date-fns-adapter-18.2.5.tgz", - "integrity": "sha512-m4wsgPRbuyhN/fB+VtrvW4jFyH5TIUol0oj/ZT9dQP1+y7NLrYhbLg2LIxe+DMzsbVVMMEccRGnJYRftk5Nm3Q==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/material-date-fns-adapter/-/material-date-fns-adapter-18.2.6.tgz", + "integrity": "sha512-9c6JLo+xzLuRJNUPf/VqGo8FCQDyfkvWXWKHPswTq9O5jKjjc3hLdybghhpmvXihQG/t8XnVG3MgtDvTLAlvRA==", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { "@angular/core": "^18.0.0 || ^19.0.0", - "@angular/material": "18.2.5", + "@angular/material": "18.2.6", "date-fns": ">2.20.0 <4.0" } }, "node_modules/@angular/platform-browser": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.5.tgz", - "integrity": "sha512-PoX9idwnOpTJBlujzZ2nFGOsmCnZzOH7uNSWIR7trdoq0b1AFXfrxlCQ36qWamk7bbhJI4H28L8YTmKew/nXDA==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.6.tgz", + "integrity": "sha512-RA8UMiYNLga+QMwpKcDw1357gYPfPyY/rmLeezMak//BbsENFYQOJ4Z6DBOBNiPlHxmBsUJMGaKdlpQhfCROyQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -812,9 +813,9 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/animations": "18.2.5", - "@angular/common": "18.2.5", - "@angular/core": "18.2.5" + "@angular/animations": "18.2.6", + "@angular/common": "18.2.6", + "@angular/core": "18.2.6" }, "peerDependenciesMeta": { "@angular/animations": { @@ -823,9 +824,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.5.tgz", - "integrity": "sha512-5u0IuAt1r5e2u2vSKhp3phnaf6hH89B/q7GErfPse1sdDfNI6wHVppxai28PAfAj9gwooJun6MjFWhJFLzS44A==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.6.tgz", + "integrity": "sha512-kGBU3FNc+DF9r33hwHZqiWoZgQbCDdEIucU0NCLCIg0Hw6/Q9Hr2ndjxQI+WynCPg0JeBn34jpouvpeJer3YDQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -833,16 +834,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.5", - "@angular/compiler": "18.2.5", - "@angular/core": "18.2.5", - "@angular/platform-browser": "18.2.5" + "@angular/common": "18.2.6", + "@angular/compiler": "18.2.6", + "@angular/core": "18.2.6", + "@angular/platform-browser": "18.2.6" } }, "node_modules/@angular/router": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.5.tgz", - "integrity": "sha512-OjZV1PTiSwT0ytmR0ykveLYzs4uQWf0EuIclZmWqM/bb8Q4P+gJl7/sya05nGnZsj6nHGOL0e/LhSZ3N+5p6qg==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.6.tgz", + "integrity": "sha512-t57Sqja8unHhZlPr+4CWnQacuox2M4p2pMHps+31wt337qH6mKf4jqDmK0dE/MFdRyKjT2a2E/2NwtxXxcWNuw==", "dependencies": { "tslib": "^2.3.0" }, @@ -850,16 +851,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.5", - "@angular/core": "18.2.5", - "@angular/platform-browser": "18.2.5", + "@angular/common": "18.2.6", + "@angular/core": "18.2.6", + "@angular/platform-browser": "18.2.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/service-worker": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-18.2.5.tgz", - "integrity": "sha512-MoF2n7z/X+yqK89mIRHQutVHIBTyEUo/fDEL8LcuBP4KOZmX9cRoCEt+vqH49BkArsgOM0jNFMYCM8yt0jg7pw==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-18.2.6.tgz", + "integrity": "sha512-KNqRAunG0yj3jVA/YYKH9wbAe261gAIwKeQsJyeMHGR48H88tSKdcstttNZZ3S6wdhp7tcyUC526Fc4phXnSJw==", "dependencies": { "tslib": "^2.3.0" }, @@ -870,8 +871,8 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.5", - "@angular/core": "18.2.5" + "@angular/common": "18.2.6", + "@angular/core": "18.2.6" } }, "node_modules/@babel/code-frame": { @@ -4045,9 +4046,9 @@ ] }, "node_modules/@ngtools/webpack": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.5.tgz", - "integrity": "sha512-L0n4eHObeqEOYRfSP+e4SeF/dmwxOIFy9xYvYCOUwOLrW4b3+a1+kkT30pqyfL72LFtpf0cmUwaWEFIcWl5PCg==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.6.tgz", + "integrity": "sha512-7HwOPE1EOgcHnpt4brSiT8G2CcXB50G0+CbCBaKGy4LYCG3Y3mrlzF5Fup9HvMJ6Tzqd62RqzpKKYBiGUT7hxg==", "dev": true, "engines": { "node": "^18.19.1 || ^20.11.1 || >=22.0.0", @@ -4446,9 +4447,9 @@ "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", - "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "cpu": [ "arm" ], @@ -4459,9 +4460,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz", - "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", "cpu": [ "arm64" ], @@ -4472,9 +4473,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", - "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], @@ -4485,9 +4486,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz", - "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", "cpu": [ "x64" ], @@ -4498,9 +4499,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz", - "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", "cpu": [ "arm" ], @@ -4511,9 +4512,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz", - "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "cpu": [ "arm" ], @@ -4524,9 +4525,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz", - "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", "cpu": [ "arm64" ], @@ -4537,9 +4538,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz", - "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", "cpu": [ "arm64" ], @@ -4550,9 +4551,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz", - "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", "cpu": [ "ppc64" ], @@ -4563,9 +4564,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz", - "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "cpu": [ "riscv64" ], @@ -4576,9 +4577,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz", - "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", "cpu": [ "s390x" ], @@ -4589,9 +4590,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz", - "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], @@ -4602,9 +4603,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz", - "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "cpu": [ "x64" ], @@ -4615,9 +4616,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz", - "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "cpu": [ "arm64" ], @@ -4628,9 +4629,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz", - "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "cpu": [ "ia32" ], @@ -4641,9 +4642,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz", - "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "cpu": [ "x64" ], @@ -4654,13 +4655,13 @@ ] }, "node_modules/@schematics/angular": { - "version": "18.2.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.5.tgz", - "integrity": "sha512-tBXhk9OGT4U6VsBNbuCNl2ITDOF3NYdGrEieIHU+lHSkpJNGZUIGxCgXCETXkmXDq1pe4wFZSKelWjeqYDfX0g==", + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.6.tgz", + "integrity": "sha512-Y988EoOEQDLEyHu3414T6AeVUyx21AexBHQNbUNQkK8cxlxyB6m1eH1cx6vFgLRFUTsLVv+C6Ln/ICNTfLcG4A==", "dev": true, "dependencies": { - "@angular-devkit/core": "18.2.5", - "@angular-devkit/schematics": "18.2.5", + "@angular-devkit/core": "18.2.6", + "@angular-devkit/schematics": "18.2.6", "jsonc-parser": "3.3.1" }, "engines": { @@ -4762,9 +4763,9 @@ "dev": true }, "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" @@ -4774,9 +4775,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" @@ -4786,9 +4787,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" @@ -4798,9 +4799,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" @@ -4810,9 +4811,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" @@ -4822,9 +4823,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" @@ -4835,9 +4836,9 @@ } }, "node_modules/@tiptap/extension-color": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-color/-/extension-color-2.7.2.tgz", - "integrity": "sha512-PFblz3384reTN0v4niNSkwIit06SQEgdwXQDBnuuyh4Stwb5sf+Pv2znvUR9O0g52RoI0qwbXG+QFiWYoo6Sww==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-color/-/extension-color-2.7.4.tgz", + "integrity": "sha512-UI6RvjD0vBA2KyQ8E4gQHqCRimUw8M/LpnpumcgFpXCrZTO4ltADuR+7cHhXvNfcVxY17/bPY/WF3yTsR0dqiQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -4848,9 +4849,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" @@ -4860,9 +4861,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" @@ -4873,9 +4874,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" @@ -4886,9 +4887,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" @@ -4898,9 +4899,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" @@ -4910,9 +4911,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" @@ -4922,9 +4923,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" @@ -4935,9 +4936,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" @@ -4948,9 +4949,9 @@ } }, "node_modules/@tiptap/extension-image": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-2.7.2.tgz", - "integrity": "sha512-gGjUXhsoART3FZ/12+JdqAEdHGNi3chga6l6LKraXva2+S4JIcadODQP9oRSNineCSyISoxpZMZtWt5cdoG7vw==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-2.7.4.tgz", + "integrity": "sha512-hUBN8q42pxrKR0erLTl5N0mq4HYP0aKIbZaxBui9DdlMaE1qkrm4bJ+Ori+OabUvhEbnky1HYhmrYaUDEPTfdQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -4960,9 +4961,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" @@ -4972,9 +4973,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==", "dependencies": { "linkifyjs": "^4.1.0" }, @@ -4988,9 +4989,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" @@ -5000,9 +5001,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" @@ -5012,9 +5013,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" @@ -5024,9 +5025,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" @@ -5036,9 +5037,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" @@ -5048,9 +5049,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" @@ -5060,9 +5061,9 @@ } }, "node_modules/@tiptap/extension-table": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-2.7.2.tgz", - "integrity": "sha512-FHNSh6k319p1OW+KZbn5yXp6YwlgfkpPz5eI4YbyXOKRYQw+mh/uDeBhlzaPUpoc0FRXdBGQWmGHj7KPpGJpAw==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-2.7.4.tgz", + "integrity": "sha512-zL9BKQFJDGkwKnr1MYzCfpBllhlL8pDR3Sf5WscbN66I+rXrAdpFl75AbWf7gE0Tk2YaJldshFkakgWN1tr+2A==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -5073,9 +5074,9 @@ } }, "node_modules/@tiptap/extension-table-cell": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-table-cell/-/extension-table-cell-2.7.2.tgz", - "integrity": "sha512-I2H9FtqGxYvym6eUX+x94sDXpczDhhhjertdH64cf6HDbUGm0FQloE0XdA0f6VaL4I8qaSpnybd04R8nztTe5g==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-cell/-/extension-table-cell-2.7.4.tgz", + "integrity": "sha512-8/mM0lv8k6dRBjGHNh9HIGNaRuq+A/7h699GC7A9xuE7R1/xjDMKRZpPTmvogqfAq2U6mH16oxr/KpBuixji1w==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -5085,9 +5086,9 @@ } }, "node_modules/@tiptap/extension-table-header": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-table-header/-/extension-table-header-2.7.2.tgz", - "integrity": "sha512-e076DPR1mZelfkyl0bWrgHsOvA0QQ7VJpgVld7vVBN8KzK1NNCyg7gp+5uKh84UEfsCyQIZ6IM8X8RljbM1bCg==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-header/-/extension-table-header-2.7.4.tgz", + "integrity": "sha512-ZChahHwx0WlPynbMc4zsIgAAOar695A1AYTkWes7Y454xJy1vkGw607w+DVEHCWxU5h943H2UF7DUgzQS9XbAg==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -5097,9 +5098,9 @@ } }, "node_modules/@tiptap/extension-table-row": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-table-row/-/extension-table-row-2.7.2.tgz", - "integrity": "sha512-O2RA0R8TA9ejoxCpOIWqIvklGzjv8f5VhBBbfYMgAM9tgD4jsNCHsKBwZuy0V5eEu3gnwyKXHEpWLyG08tJuFA==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-row/-/extension-table-row-2.7.4.tgz", + "integrity": "sha512-JxR6PdLiXUjW8VC7YdVSIvd8D7RKVOPPPK7cFrawxS4tKz+1temsK8hNZ3RKhajwS5ya4IRT+iKhSRetVnjuww==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -5109,9 +5110,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" @@ -5121,9 +5122,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" @@ -5133,9 +5134,9 @@ } }, "node_modules/@tiptap/extension-text-style": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-2.7.2.tgz", - "integrity": "sha512-AvUHV6ULnB0AWpyzw895cUNwRCC5lu4+6Vdn5u81xqMC+J6+8WdYqAmfprqBlcMwpj40Q9K+OAYgXRyisu+zIA==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-2.7.4.tgz", + "integrity": "sha512-KQ50wDxwH0tFs+9vWP56aaJVyCRl93e3B/cIVJtvTV1HANtkjxFAdrvW1HOaUk9aVBdeLRFbz+YIzf/LxNZ2Wg==", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -5145,9 +5146,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" @@ -5157,9 +5158,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", @@ -5186,30 +5187,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", @@ -5823,9 +5824,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": "*", @@ -5901,9 +5914,9 @@ } }, "node_modules/@types/node": { - "version": "20.16.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz", - "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", + "version": "20.16.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.10.tgz", + "integrity": "sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==", "dev": true, "dependencies": { "undici-types": "~6.19.2" @@ -9844,9 +9857,9 @@ } }, "node_modules/fetch-mock": { - "version": "11.1.4", - "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-11.1.4.tgz", - "integrity": "sha512-Enndh1ApARgYDPfWFgfzLeSgdQVasMj6qDWDArya6quj3Z83AVGsl1YrVe8OxWVWsN7a+56RQRoGNmo9HdldAg==", + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-11.1.5.tgz", + "integrity": "sha512-KHmZDnZ1ry0pCTrX4YG5DtThHi0MH+GNI9caESnzX/nMJBrvppUHMvLx47M0WY9oAtKOMiPfZDRpxhlHg89BOA==", "dev": true, "dependencies": { "@types/glob-to-regexp": "^0.4.4", @@ -13233,6 +13246,18 @@ "tslib": "^2.3.0" } }, + "node_modules/ngx-cookie-service": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-18.0.0.tgz", + "integrity": "sha512-hkkUckzZTXXWtFgvVkT2hg6mwYMLXioXDZWBsVCOy9gYkADjsj0N5VViO7eo2izQ0VcMPd/Etog1trf/T4oZMQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "peerDependencies": { + "@angular/common": "^18.0.0-rc.0", + "@angular/core": "^18.0.0-rc.0" + } + }, "node_modules/ngx-date-fns": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/ngx-date-fns/-/ngx-date-fns-11.0.0.tgz", @@ -13942,9 +13967,9 @@ } }, "node_modules/ordered-binary": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz", - "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.2.tgz", + "integrity": "sha512-JTo+4+4Fw7FreyAvlSLjb1BBVaxEQAacmjD3jjuyPZclpbEghTvQZbXBb2qPd2LeIMxiHwXBZUcpmG2Gl/mDEA==", "dev": true }, "node_modules/orderedmap": { @@ -15511,9 +15536,9 @@ } }, "node_modules/rollup": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz", - "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -15526,22 +15551,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.20.0", - "@rollup/rollup-android-arm64": "4.20.0", - "@rollup/rollup-darwin-arm64": "4.20.0", - "@rollup/rollup-darwin-x64": "4.20.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", - "@rollup/rollup-linux-arm-musleabihf": "4.20.0", - "@rollup/rollup-linux-arm64-gnu": "4.20.0", - "@rollup/rollup-linux-arm64-musl": "4.20.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", - "@rollup/rollup-linux-riscv64-gnu": "4.20.0", - "@rollup/rollup-linux-s390x-gnu": "4.20.0", - "@rollup/rollup-linux-x64-gnu": "4.20.0", - "@rollup/rollup-linux-x64-musl": "4.20.0", - "@rollup/rollup-win32-arm64-msvc": "4.20.0", - "@rollup/rollup-win32-ia32-msvc": "4.20.0", - "@rollup/rollup-win32-x64-msvc": "4.20.0", + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "fsevents": "~2.3.2" } }, diff --git a/client/package.json b/client/package.json index c3efe4bfda..b7eea2e869 100644 --- a/client/package.json +++ b/client/package.json @@ -36,38 +36,38 @@ "get-available-languages": "npm run ts -- cli/get-available-languages.ts" }, "dependencies": { - "@angular/animations": "^18.2.5", - "@angular/cdk": "^18.2.5", - "@angular/common": "^18.2.5", - "@angular/compiler": "^18.2.5", - "@angular/core": "^18.2.5", - "@angular/forms": "^18.2.5", - "@angular/material": "^18.2.5", - "@angular/material-date-fns-adapter": "^18.2.5", - "@angular/platform-browser": "^18.2.5", - "@angular/platform-browser-dynamic": "^18.2.5", - "@angular/router": "^18.2.5", - "@angular/service-worker": "^18.2.5", + "@angular/animations": "^18.2.6", + "@angular/cdk": "^18.2.6", + "@angular/common": "^18.2.6", + "@angular/compiler": "^18.2.6", + "@angular/core": "^18.2.6", + "@angular/forms": "^18.2.6", + "@angular/material": "^18.2.6", + "@angular/material-date-fns-adapter": "^18.2.6", + "@angular/platform-browser": "^18.2.6", + "@angular/platform-browser-dynamic": "^18.2.6", + "@angular/router": "^18.2.6", + "@angular/service-worker": "^18.2.6", "@material/typography": "^14.0.0", "@ngx-pwa/local-storage": "^18.0.0", "@ngx-translate/core": "^15.0.0", "@ngx-translate/http-loader": "^8.0.0", - "@tiptap/core": "^2.7.2", - "@tiptap/extension-color": "^2.7.2", - "@tiptap/extension-highlight": "^2.7.2", - "@tiptap/extension-image": "^2.7.2", - "@tiptap/extension-link": "^2.7.2", - "@tiptap/extension-subscript": "^2.7.2", - "@tiptap/extension-superscript": "^2.7.2", - "@tiptap/extension-table": "^2.7.2", - "@tiptap/extension-table-cell": "^2.7.2", - "@tiptap/extension-table-header": "^2.7.2", - "@tiptap/extension-table-row": "^2.7.2", - "@tiptap/extension-text-align": "^2.7.2", - "@tiptap/extension-text-style": "^2.5.4", - "@tiptap/extension-underline": "^2.7.2", - "@tiptap/pm": "^2.5.4", - "@tiptap/starter-kit": "^2.7.2", + "@tiptap/core": "^2.7.4", + "@tiptap/extension-color": "^2.7.4", + "@tiptap/extension-highlight": "^2.7.4", + "@tiptap/extension-image": "^2.7.4", + "@tiptap/extension-link": "^2.7.4", + "@tiptap/extension-subscript": "^2.7.4", + "@tiptap/extension-superscript": "^2.7.4", + "@tiptap/extension-table": "^2.7.4", + "@tiptap/extension-table-cell": "^2.7.4", + "@tiptap/extension-table-header": "^2.7.4", + "@tiptap/extension-table-row": "^2.7.4", + "@tiptap/extension-text-align": "^2.7.4", + "@tiptap/extension-text-style": "^2.7.4", + "@tiptap/extension-underline": "^2.7.4", + "@tiptap/pm": "^2.7.4", + "@tiptap/starter-kit": "^2.7.4", "@tsparticles/angular": "^3.0.0", "@tsparticles/engine": "^3.5.0", "@tsparticles/plugin-emitters": "^3.5.0", @@ -84,6 +84,7 @@ "material-design-icons-iconfont": "^6.7.0", "ng2-charts": "^6.0.1", "ng2-pdf-viewer": "^10.3.1", + "ngx-cookie-service": "^18.0.0", "ngx-date-fns": "^11.0.0", "ngx-device-detector": "^8.0.0", "ngx-file-drop": "^16.0.0", @@ -99,19 +100,19 @@ "zone.js": "^0.14.10" }, "devDependencies": { - "@angular-devkit/build-angular": "^18.2.5", + "@angular-devkit/build-angular": "^18.2.6", "@angular-eslint/builder": "^18.3.1", "@angular-eslint/eslint-plugin": "^18.3.1", "@angular-eslint/eslint-plugin-template": "^18.3.1", "@angular-eslint/schematics": "^18.3.1", "@angular-eslint/template-parser": "^18.3.1", - "@angular/cli": "^18.2.5", - "@angular/compiler-cli": "^18.2.5", + "@angular/cli": "^18.2.6", + "@angular/compiler-cli": "^18.2.6", "@colsen1991/ngx-translate-extract-marker": "^2.0.8", "@types/file-saver": "^2.0.7", "@types/jasmine": "~5.1.4", "@types/js-yaml": "^4.0.9", - "@types/node": "^20.16.5", + "@types/node": "^20.16.10", "@types/pdfmake": "^0.2.9", "@types/qrcode": "^1.5.5", "@types/tinycolor2": "^1.4.6", @@ -124,7 +125,7 @@ "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-unused-imports": "^4.1.4", - "fetch-mock": "^11.1.4", + "fetch-mock": "^11.1.5", "jasmine-core": "~5.3.0", "js-yaml": "^4.1.0", "karma": "~6.4.4", diff --git a/client/src/app/domain/definitions/meeting-settings-defaults.ts b/client/src/app/domain/definitions/meeting-settings-defaults.ts index 77a5b1ca80..73a0100c2b 100644 --- a/client/src/app/domain/definitions/meeting-settings-defaults.ts +++ b/client/src/app/domain/definitions/meeting-settings-defaults.ts @@ -44,6 +44,7 @@ export const meetingSettingsDefaults: { [key: string]: any } = { motions_enable_reason_on_projector: false, motions_enable_recommendation_on_projector: true, motions_show_referring_motions: true, + motions_hide_metadata_background: false, motions_enable_sidebox_on_projector: false, motions_show_sequential_number: true, motions_recommendation_text_mode: `diff`, diff --git a/client/src/app/domain/definitions/permission.config.ts b/client/src/app/domain/definitions/permission.config.ts index e53f46d07d..1318575aaf 100644 --- a/client/src/app/domain/definitions/permission.config.ts +++ b/client/src/app/domain/definitions/permission.config.ts @@ -7,6 +7,7 @@ export type PermissionsMap = { [key in Permission]?: Permission[] }; export interface DisplayPermission { display_name: string; help_text?: string; + anon_allowed?: boolean; value: Permission; } @@ -24,6 +25,7 @@ export const PERMISSIONS: AppPermission[] = [ help_text: _( `Can see the Autopilot menu item with all content for which appropriate permissions are set.` ), + anon_allowed: true, value: Permission.meetingCanSeeAutopilot }, { @@ -31,6 +33,7 @@ export const PERMISSIONS: AppPermission[] = [ help_text: _( `Can see the Projector menu item and all projectors (in the Autopilot as well as in the Projector menu item)` ), + anon_allowed: true, value: Permission.projectorCanSee }, { @@ -46,11 +49,13 @@ export const PERMISSIONS: AppPermission[] = [ { display_name: _(`Can see agenda`), help_text: _(`Can see the Agenda menu item and all public topics in the agenda.`), + anon_allowed: true, value: Permission.agendaItemCanSee }, { display_name: _(`Can see internal items and time scheduling of agenda`), help_text: _(`Can see all internal topics, schedules and comments.`), + anon_allowed: true, value: Permission.agendaItemCanSeeInternal }, { @@ -63,6 +68,7 @@ export const PERMISSIONS: AppPermission[] = [ { display_name: _(`Can see list of speakers`), help_text: _(`Can see all lists of speakers`), + anon_allowed: true, value: Permission.listOfSpeakersCanSee }, { @@ -74,7 +80,7 @@ export const PERMISSIONS: AppPermission[] = [ }, { display_name: _(`Can put oneself on the list of speakers`), - help_text: _(`Is allowed to add himself/herself to the list of speakers. + help_text: _(`Is allowed to add himself/herself to the list of speakers. Note: Optional combination of requests to speak with presence status is possible. ( > [Settings] > [List of speakers] > [General] )`), @@ -88,6 +94,7 @@ Optional combination of requests to speak with presence status is possible. ( > { display_name: _(`Can see moderation notes`), help_text: _(`Can see all moderation notes in each list of speakers.`), + anon_allowed: true, value: Permission.agendaItemCanSeeModeratorNotes }, { @@ -105,6 +112,7 @@ Optional combination of requests to speak with presence status is possible. ( > help_text: _( `Can see the Motions menu item and all motions unless they are limited by access restrictions in the workflow.` ), + anon_allowed: true, value: Permission.motionCanSee }, { @@ -114,6 +122,7 @@ Optional combination of requests to speak with presence status is possible. ( > Tip: Cross-check desired visibility of motions with test delegate account. ` ), + anon_allowed: true, value: Permission.motionCanSeeInternal }, { @@ -133,10 +142,10 @@ Tip: Cross-check desired visibility of motions with test delegate account. ` { display_name: _(`Can forward motions`), help_text: _( - `Can forward motions to other meetings within the OpenSlides instance. + `Can forward motions to other meetings within the OpenSlides instance. Further requirements: -1. forwarding hierarchy must be set at the organizational level in the committee. +1. forwarding hierarchy must be set at the organizational level in the committee. 2. target meeting must be created. 3. forwarding must be activated in the workflow in the state.` ), @@ -176,10 +185,11 @@ Further requirements: { display_name: _(`Can see elections`), help_text: _( - `Can see the menu item Elections, including the list of candidates and results. + `Can see the menu item Elections, including the list of candidates and results. Note: The right to vote is defined directly in the ballot.` ), + anon_allowed: true, value: Permission.assignmentCanSee }, { @@ -191,7 +201,7 @@ Note: The right to vote is defined directly in the ballot.` }, { display_name: _(`Can nominate another participant`), - help_text: _(`Can nominate other participants as candidates. + help_text: _(`Can nominate other participants as candidates. Requires group permission: [Can see participants]`), value: Permission.assignmentCanNominateOther @@ -209,10 +219,11 @@ Requires group permission: [Can see participants]`), { display_name: _(`Can see participants`), help_text: _( - `Can see the menu item Participants and therefore the following data from all participants: -Personal data: Name, pronoun, gender. + `Can see the menu item Participants and therefore the following data from all participants: +Personal data: Name, pronoun, gender. Meeting specific information: Structure level, Group, Participant number, About me, Presence status.` ), + anon_allowed: true, value: Permission.userCanSee }, { @@ -220,6 +231,7 @@ Meeting specific information: Structure level, Group, Participant number, About help_text: _( `Can see email, username, membership number, SSO identification and locked out state of all participants.` ), + anon_allowed: true, value: Permission.userCanSeeSensitiveData }, { @@ -247,6 +259,7 @@ Meeting specific information: Structure level, Group, Participant number, About help_text: _(`Can see the Files menu item and all shared folders and files. Note: Sharing of folders and files may be restricted by group assignment.`), + anon_allowed: true, value: Permission.mediafileCanSee }, { @@ -269,6 +282,7 @@ Note: Sharing of folders and files may be restricted by group assignment.`), { display_name: _(`Can see the front page`), help_text: _(`Can see the Home menu item.`), + anon_allowed: true, value: Permission.meetingCanSeeFrontpage }, { @@ -276,15 +290,17 @@ Note: Sharing of folders and files may be restricted by group assignment.`), help_text: _( `Can see the livestream if there is a livestream URL entered in > [Settings] > [Livestream].` ), + anon_allowed: true, value: Permission.meetingCanSeeLivestream }, { display_name: _(`Can see history`), help_text: _( - `Can see the History menu item with the history of processing timestamps for motions, elections and participants. + `Can see the History menu item with the history of processing timestamps for motions, elections and participants. Note: For privacy reasons, it is recommended to limit the rights to view the History significantly.` ), + anon_allowed: true, value: Permission.meetingCanSeeHistory }, { diff --git a/client/src/app/domain/models/meetings/meeting.ts b/client/src/app/domain/models/meetings/meeting.ts index 8eb731a4db..c42c3e7f92 100644 --- a/client/src/app/domain/models/meetings/meeting.ts +++ b/client/src/app/domain/models/meetings/meeting.ts @@ -139,6 +139,7 @@ export class Settings { public motions_export_preamble!: string; public motions_export_submitter_recommendation!: boolean; public motions_export_follow_recommendation!: boolean; + public motions_hide_metadata_background: boolean; public motion_poll_ballot_paper_selection!: BallotPaperSelection; public motion_poll_ballot_paper_number!: number; @@ -254,6 +255,7 @@ export class Meeting extends BaseModel { public default_group_id!: Id; // group/default_group_for_meeting_id; public admin_group_id!: Id; // group/admin_group_for_meeting_id; + public anonymous_group_id!: Id; // group/anonymous_group_for_meeting_id; public list_of_speakers_countdown_id: Id; // projector_countdown/used_as_list_of_speakers_meeting_id; public poll_countdown_id: Id; // projector_countdown/used_as_poll_countdown_meeting_id; @@ -372,6 +374,7 @@ export class Meeting extends BaseModel { `motions_enable_recommendation_on_projector`, `motions_show_referring_motions`, `motions_show_sequential_number`, + `motions_hide_metadata_background`, `motions_recommendations_by`, `motions_block_slide_columns`, `motions_recommendation_text_mode`, @@ -515,7 +518,8 @@ export class Meeting extends BaseModel { `default_projector_motion_poll_ids`, `default_projector_poll_ids`, `default_group_id`, - `admin_group_id` + `admin_group_id`, + `anonymous_group_id` ]; } export interface Meeting diff --git a/client/src/app/domain/models/users/group.ts b/client/src/app/domain/models/users/group.ts index 1843ba71c5..f23b0f058b 100644 --- a/client/src/app/domain/models/users/group.ts +++ b/client/src/app/domain/models/users/group.ts @@ -17,6 +17,7 @@ export class Group extends BaseModel { public meeting_user_ids!: Id[]; // (meeting_user/group_ids)[]; public default_group_for_meeting_id!: Id; // meeting/default_group_id; + public anonymous_group_for_meeting_id!: Id; // meeting/admin_group_id; public admin_group_for_meeting_id!: Id; // meeting/admin_group_id; public meeting_mediafile_access_group_ids!: Id[]; // (mediafile/access_group_ids)[]; public meeting_mediafile_inherited_access_group_ids!: Id[]; // (mediafile/inherited_access_group_ids)[]; @@ -34,6 +35,10 @@ export class Group extends BaseModel { return !!this.admin_group_for_meeting_id; } + public get isAnonymousGroup(): boolean { + return !!this.anonymous_group_for_meeting_id; + } + public get isDefaultGroup(): boolean { return !!this.default_group_for_meeting_id; } @@ -50,6 +55,7 @@ export class Group extends BaseModel { `weight`, `meeting_user_ids`, `default_group_for_meeting_id`, + `anonymous_group_for_meeting_id`, `admin_group_for_meeting_id`, `meeting_mediafile_access_group_ids`, `meeting_mediafile_inherited_access_group_ids`, diff --git a/client/src/app/gateways/base-icc-gateway.service.ts b/client/src/app/gateways/base-icc-gateway.service.ts index 53fd038d95..69df86160d 100644 --- a/client/src/app/gateways/base-icc-gateway.service.ts +++ b/client/src/app/gateways/base-icc-gateway.service.ts @@ -3,6 +3,7 @@ import { filter, Observable } from 'rxjs'; import { SharedWorkerService } from '../openslides-main-module/services/shared-worker.service'; import { ActiveMeetingIdService } from '../site/pages/meetings/services/active-meeting-id.service'; +import { OperatorService } from '../site/services/operator.service'; import { WorkerResponse } from '../worker/interfaces'; import { HttpService } from './http.service'; @@ -33,6 +34,7 @@ export abstract class BaseICCGatewayService { private httpService = inject(HttpService); protected activeMeetingIdService = inject(ActiveMeetingIdService); + protected operator = inject(OperatorService); private sharedWorker = inject(SharedWorkerService); /** @@ -41,7 +43,7 @@ export abstract class BaseICCGatewayService { */ protected setupConnections(): void { this.activeMeetingIdService.meetingIdObservable.subscribe(meetingId => { - if (meetingId) { + if (meetingId && !this.operator.isAnonymous) { this.connect(meetingId); } else { this.disconnect(); diff --git a/client/src/app/gateways/notify.service.ts b/client/src/app/gateways/notify.service.ts index c4611a6400..b9baf89a2c 100644 --- a/client/src/app/gateways/notify.service.ts +++ b/client/src/app/gateways/notify.service.ts @@ -1,6 +1,5 @@ import { Injectable } from '@angular/core'; import { Observable, Subject } from 'rxjs'; -import { OperatorService } from 'src/app/site/services/operator.service'; import { BaseICCGatewayService } from './base-icc-gateway.service'; @@ -109,7 +108,7 @@ export class NotifyService extends BaseICCGatewayService = [ `default_meeting_for_committee_id`, diff --git a/client/src/app/infrastructure/definitions/relations/relations.ts b/client/src/app/infrastructure/definitions/relations/relations.ts index 8621a66717..5323ef2904 100644 --- a/client/src/app/infrastructure/definitions/relations/relations.ts +++ b/client/src/app/infrastructure/definitions/relations/relations.ts @@ -666,6 +666,12 @@ export const RELATIONS: Relation[] = [ AField: `default_group`, BField: `default_group_for_meeting` }), + ...makeO2O({ + AViewModel: ViewMeeting, + BViewModel: ViewGroup, + AField: `anonymous_group`, + BField: `anonymous_group_for_meeting` + }), ...makeO2O({ AViewModel: ViewMeeting, BViewModel: ViewGroup, diff --git a/client/src/app/site/guards/auth.guard.ts b/client/src/app/site/guards/auth.guard.ts index 11ad20e04b..35a3d06a1d 100644 --- a/client/src/app/site/guards/auth.guard.ts +++ b/client/src/app/site/guards/auth.guard.ts @@ -47,7 +47,7 @@ export class AuthGuard { } else if (!(await this.authCheck.hasAccessToMeeting(state.url))) { return false; } - if (!(await this.authCheck.isAuthenticated())) { + if (!(await this.authCheck.isAuthenticated(state.url))) { return this.reroute.toLogin(state.url); } return await this.authCheck.isAuthorized(route.data); diff --git a/client/src/app/site/guards/permission.guard.ts b/client/src/app/site/guards/permission.guard.ts index 7dd6c832cd..4b40d80f81 100644 --- a/client/src/app/site/guards/permission.guard.ts +++ b/client/src/app/site/guards/permission.guard.ts @@ -18,6 +18,10 @@ export class PermissionGuard { public async canLoad(route: Route, segments: UrlSegment[]): Promise { const url = this.getCurrentNavigationUrl(); + if (this.isLoginPage(url)) { + return true; + } + if (this.osRouter.isOrganizationUrl(url)) { if (!(await this.authCheck.isAuthorizedToSeeOrganization())) { return this.reroute.getOnlyMeetingUrlTree(url === `/info` ? [`info`] : []); @@ -25,7 +29,7 @@ export class PermissionGuard { } else if (!(await this.authCheck.hasAccessToMeeting(url))) { return await this.reroute.handleForbiddenRoute(route.data, segments, url); } - if (!(await this.authCheck.isAuthenticated())) { + if (!(await this.authCheck.isAuthenticated(url))) { return this.reroute.toLogin(url); } if (route.data && !(await this.authCheck.isAuthorized(route.data))) { @@ -43,4 +47,8 @@ export class PermissionGuard { public getCurrentNavigationUrl(): string { return this.router.getCurrentNavigation()?.extractedUrl.toString() || this.router.url; } + + private isLoginPage(url: string): boolean { + return url.startsWith(`/login`) || new RegExp(`^\/[0-9]+\/login`).test(url); + } } diff --git a/client/src/app/site/modules/global-headbar/components/account-button/account-button.component.html b/client/src/app/site/modules/global-headbar/components/account-button/account-button.component.html index aba1d90a0b..b0cf5113a9 100644 --- a/client/src/app/site/modules/global-headbar/components/account-button/account-button.component.html +++ b/client/src/app/site/modules/global-headbar/components/account-button/account-button.component.html @@ -1,7 +1,11 @@
- {{ username }} + @if (isLoggedIn) { + {{ username }} + } @else { + {{ 'Public Access' | translate }} + }
@@ -15,7 +19,13 @@
-
{{ username }}
+
+ @if (isLoggedIn) { + {{ username }} + } @else { + {{ 'Public Access' | translate }} + } +
@if (user) {
{{ getOmlVerboseName() | translate }}
} @@ -72,7 +82,7 @@ {{ 'Logout' | translate }}
- } @else if (!user) { + } @else if (!isLoggedIn) {
- } -
- @if (guestsEnabled) { - - } -
- - - - {{ 'Internal login' | translate }} - - - @if (loginAreaExpanded) { -
- -
+
+ @if (guestsEnabled) { + } -
-
+
+ + + + {{ 'Internal login' | translate }} + + + @if (loginAreaExpanded) { +
+ +
+ } +
+
+ } }
@@ -93,7 +93,6 @@


- @if (guestsEnabled && showExtra) { } diff --git a/client/src/app/site/pages/login/pages/login-mask/components/login-mask/login-mask.component.ts b/client/src/app/site/pages/login/pages/login-mask/components/login-mask/login-mask.component.ts index 947a4af760..50f5aac231 100644 --- a/client/src/app/site/pages/login/pages/login-mask/components/login-mask/login-mask.component.ts +++ b/client/src/app/site/pages/login/pages/login-mask/components/login-mask/login-mask.component.ts @@ -4,13 +4,16 @@ import { ActivatedRoute } from '@angular/router'; import { marker as _ } from '@colsen1991/ngx-translate-extract-marker'; import { TranslateService } from '@ngx-translate/core'; import { filter, Observable, Subscription } from 'rxjs'; +import { Meeting } from 'src/app/domain/models/meetings/meeting'; import { fadeInAnim } from 'src/app/infrastructure/animations'; import { BaseMeetingComponent } from 'src/app/site/pages/meetings/base/base-meeting.component'; import { ViewMeeting } from 'src/app/site/pages/meetings/view-models/view-meeting'; -import { OrganizationService } from 'src/app/site/pages/organization/services/organization.service'; +import { ORGANIZATION_ID, OrganizationService } from 'src/app/site/pages/organization/services/organization.service'; import { OrganizationSettingsService } from 'src/app/site/pages/organization/services/organization-settings.service'; import { ViewOrganization } from 'src/app/site/pages/organization/view-models/view-organization'; import { AuthService } from 'src/app/site/services/auth.service'; +import { AutoupdateService } from 'src/app/site/services/autoupdate'; +import { ModelRequestBuilderService } from 'src/app/site/services/model-request-builder'; import { OpenSlidesRouterService } from 'src/app/site/services/openslides-router.service'; import { OperatorService } from 'src/app/site/services/operator.service'; import { ParentErrorStateMatcher } from 'src/app/ui/modules/search-selector/validators'; @@ -34,9 +37,7 @@ interface LoginValues { animations: [fadeInAnim] }) export class LoginMaskComponent extends BaseMeetingComponent implements OnInit, OnDestroy { - public get meetingObservable(): Observable { - return this.activeMeetingService.meetingObservable; - } + public meeting: Meeting; public get organizationObservable(): Observable { return this.orgaService.organizationObservable; @@ -89,10 +90,13 @@ export class LoginMaskComponent extends BaseMeetingComponent implements OnInit, private loginMessage = `Loading data. Please wait ...`; private currentMeetingId: number | null = null; + private guestMeetingId: number | null = null; public constructor( protected override translate: TranslateService, private authService: AuthService, + private autoupdate: AutoupdateService, + private modelRequestBuilder: ModelRequestBuilderService, private operator: OperatorService, private route: ActivatedRoute, private osRouter: OpenSlidesRouterService, @@ -120,7 +124,9 @@ export class LoginMaskComponent extends BaseMeetingComponent implements OnInit, // Maybe the operator changes and the user is logged in. If so, redirect him and boot OpenSlides. this.operatorSubscription = this.operator.operatorUpdated.subscribe(() => { this.clearOperatorSubscription(); - this.osRouter.navigateAfterLogin(this.currentMeetingId); + if (this.authService.isAuthenticated()) { + this.osRouter.navigateAfterLogin(this.currentMeetingId); + } }); this.route.queryParams.pipe(filter(params => params[`checkBrowser`])).subscribe(params => { @@ -128,7 +134,9 @@ export class LoginMaskComponent extends BaseMeetingComponent implements OnInit, }); this.route.params.subscribe(params => { if (params[`meetingId`]) { - this.checkIfGuestsEnabled(params[`meetingId`]); + this.loadMeeting(params[`meetingId`]); + } else { + this.loadActiveMeetings(); } }); @@ -178,7 +186,8 @@ export class LoginMaskComponent extends BaseMeetingComponent implements OnInit, } public async guestLogin(): Promise { - this.router.navigate([`${this.currentMeetingId}/`]); + await this.authService.anonLogin(); + this.osRouter.navigateAfterLogin(this.currentMeetingId || this.guestMeetingId); } public async samlLogin(): Promise { @@ -215,9 +224,42 @@ export class LoginMaskComponent extends BaseMeetingComponent implements OnInit, } } - private checkIfGuestsEnabled(meetingId: string): void { + private async loadMeeting(meetingId: string): Promise { this.currentMeetingId = Number(meetingId); - this.meetingSettingsService.get(`enable_anonymous`).subscribe(isEnabled => (this.guestsEnabled = isEnabled)); + const resp = await this.autoupdate.single( + await this.modelRequestBuilder.build({ + ids: [this.currentMeetingId], + viewModelCtor: ViewMeeting, + fieldset: [`enable_anonymous`, `name`] + }), + `meeting_login` + ); + if (!resp || !resp[`meeting`] || !resp[`meeting`][this.currentMeetingId]) { + return; + } + + this.meeting = new Meeting(resp[`meeting`][this.currentMeetingId]); + this.guestsEnabled = this.meeting.enable_anonymous; + } + + private async loadActiveMeetings(): Promise { + const resp = await this.autoupdate.single( + await this.modelRequestBuilder.build({ + ids: [ORGANIZATION_ID], + viewModelCtor: ViewOrganization, + follow: [{ idField: `active_meeting_ids`, fieldset: [`enable_anonymous`] }] + }), + `meeting_login` + ); + if (!resp || !resp[`meeting`]) { + return; + } + const publicMeetings = Object.values(resp[`meeting`]).filter(m => m[`enable_anonymous`]); + + this.guestsEnabled = !!publicMeetings.length; + if (publicMeetings.length === 1) { + this.guestMeetingId = publicMeetings[0][`id`]; + } } private checkDevice(): void { diff --git a/client/src/app/site/pages/meetings/meetings-routing.module.ts b/client/src/app/site/pages/meetings/meetings-routing.module.ts index f2de6970e6..33e401572f 100644 --- a/client/src/app/site/pages/meetings/meetings-routing.module.ts +++ b/client/src/app/site/pages/meetings/meetings-routing.module.ts @@ -2,6 +2,7 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { Permission } from '../../../domain/definitions/permission'; +import { AuthGuard } from '../../guards/auth.guard'; import { PermissionGuard } from '../../guards/permission.guard'; import { MeetingsNavigationWrapperComponent } from './modules/meetings-navigation/components/meetings-navigation-wrapper/meetings-navigation-wrapper.component'; @@ -12,9 +13,7 @@ const routes: Routes = [ children: [ { path: ``, - loadChildren: () => import(`./pages/home/home.module`).then(m => m.HomeModule), - data: { meetingPermissions: [Permission.meetingCanSeeFrontpage] }, - canLoad: [PermissionGuard] + loadChildren: () => import(`./pages/home/home.module`).then(m => m.HomeModule) }, { path: `agenda`, @@ -86,7 +85,14 @@ const routes: Routes = [ path: `error`, loadChildren: () => import(`../error/error.module`).then(m => m.ErrorModule) } - ] + ], + canActivate: [AuthGuard], + canActivateChild: [AuthGuard], + canLoad: [PermissionGuard] + }, + { + path: `login`, + loadChildren: () => import(`../login/login.module`).then(m => m.LoginModule) } ]; diff --git a/client/src/app/site/pages/meetings/modules/list-of-speakers-content/components/list-of-speakers-content/list-of-speakers-content.component.ts b/client/src/app/site/pages/meetings/modules/list-of-speakers-content/components/list-of-speakers-content/list-of-speakers-content.component.ts index 83e9aee261..513f521e5e 100644 --- a/client/src/app/site/pages/meetings/modules/list-of-speakers-content/components/list-of-speakers-content/list-of-speakers-content.component.ts +++ b/client/src/app/site/pages/meetings/modules/list-of-speakers-content/components/list-of-speakers-content/list-of-speakers-content.component.ts @@ -79,7 +79,8 @@ export class ListOfSpeakersContentComponent extends BaseMeetingComponent impleme public get addSelf(): boolean { return ( this.permission.listOfSpeakersCanBeSpeaker && - !(this.voteDelegationEnabled && this.forbidDelegatorToAddSelf && this.operator.user.isVoteRightDelegated) + !(this.voteDelegationEnabled && this.forbidDelegatorToAddSelf && this.operator.user.isVoteRightDelegated) && + !this.operator.isAnonymous ); } diff --git a/client/src/app/site/pages/meetings/modules/poll/components/base-poll-form/base-poll-form.component.html b/client/src/app/site/pages/meetings/modules/poll/components/base-poll-form/base-poll-form.component.html index 3e59be74cc..aba0ec4fbd 100644 --- a/client/src/app/site/pages/meetings/modules/poll/components/base-poll-form/base-poll-form.component.html +++ b/client/src/app/site/pages/meetings/modules/poll/components/base-poll-form/base-poll-form.component.html @@ -36,7 +36,7 @@

{ /** * The projector where this slide is projected on. */ + private _projector!: ViewProjector; + public get projector(): ViewProjector { + return this._projector; + } + @Input() - public projector!: ViewProjector; + public set projector(value: ViewProjector) { + this.setProjector(value); + } + + protected setProjector(value: ViewProjector): void { + this._projector = value; + } protected setData(value: SlideData): void { this._data = value; diff --git a/client/src/app/site/pages/meetings/modules/projector/modules/slides/components/mediafile-slide/components/mediafile-slide.component.html b/client/src/app/site/pages/meetings/modules/projector/modules/slides/components/mediafile-slide/components/mediafile-slide.component.html index 5dbef1bf3c..554a8a2cd7 100644 --- a/client/src/app/site/pages/meetings/modules/projector/modules/slides/components/mediafile-slide/components/mediafile-slide.component.html +++ b/client/src/app/site/pages/meetings/modules/projector/modules/slides/components/mediafile-slide/components/mediafile-slide.component.html @@ -13,12 +13,12 @@

} diff --git a/client/src/app/site/pages/meetings/modules/projector/modules/slides/components/mediafile-slide/components/mediafile-slide.component.ts b/client/src/app/site/pages/meetings/modules/projector/modules/slides/components/mediafile-slide/components/mediafile-slide.component.ts index 7c5330855a..ac6c46e8e7 100644 --- a/client/src/app/site/pages/meetings/modules/projector/modules/slides/components/mediafile-slide/components/mediafile-slide.component.ts +++ b/client/src/app/site/pages/meetings/modules/projector/modules/slides/components/mediafile-slide/components/mediafile-slide.component.ts @@ -1,5 +1,7 @@ -import { Component } from '@angular/core'; +import { Component, ViewChild } from '@angular/core'; +import { PdfViewerComponent } from 'ng2-pdf-viewer'; import { IMAGE_MIMETYPES, PDF_MIMETYPES } from 'src/app/site/pages/meetings/pages/mediafiles'; +import { ViewProjector } from 'src/app/site/pages/meetings/pages/projectors'; import { BaseSlideComponent } from '../../../base/base-slide-component'; import { MediafileSlideData } from '../mediafile-slide-data'; @@ -10,6 +12,9 @@ import { MediafileSlideData } from '../mediafile-slide-data'; styleUrls: [`./mediafile-slide.component.scss`] }) export class MediafileSlideComponent extends BaseSlideComponent { + @ViewChild(PdfViewerComponent) + public pdfViewer: PdfViewerComponent; + public get url(): string { return `/system/media/get/${this.data.data.id}`; } @@ -38,8 +43,25 @@ export class MediafileSlideComponent extends BaseSlideComponent @if (data.data.show_sidebox) { -