diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 0748bee79a..f809b4d75e 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -126,10 +126,6 @@ jobs: run: npm run generate-models && git diff --exit-code -- src/app/domain/models working-directory: client/ - - name: Check generated defaults are up to date - run: npm run generate-defaults && git diff --exit-code -- src/app/domain/models - working-directory: client/ - - uses: browser-actions/setup-chrome@v2 - name: Build motion diff diff --git a/client/cli/generate-models.ts b/client/cli/generate-models.ts index 1d190434e2..e604db164f 100644 --- a/client/cli/generate-models.ts +++ b/client/cli/generate-models.ts @@ -3,8 +3,8 @@ import * as yaml from 'js-yaml'; import * as path from 'path'; import { Project, Scope } from 'ts-morph'; -import { getCollectionsYaml, snakeToPascal } from './utils'; - +const SOURCE_META = path.resolve(path.join(__dirname, `../../meta/collection-meta.yml`)); +const SOURCE_COLLECTIONS = path.resolve(path.join(__dirname, `../../meta/collections/`)); const DESTINATION = path.resolve(path.join(__dirname, `../src/app/domain/models`)); function findModelFile(startPath: string, name: string): string | null { @@ -30,6 +30,33 @@ function findModelFile(startPath: string, name: string): string | null { return null; } +function getCollectionsYaml(): string { + if (!fs.existsSync(SOURCE_COLLECTIONS)) { + console.log(`no dir `, SOURCE_COLLECTIONS); + return null; + } + + let content = fs.readFileSync(SOURCE_META).toString(); + content += `\nmodels:`; + const files = fs.readdirSync(SOURCE_COLLECTIONS); + for (const file of files) { + const filename = path.join(SOURCE_COLLECTIONS, file); + if (filename.endsWith(`.yml`)) { + const collection = fs.readFileSync(filename).toString().replace(/^(.)/gm, ` $1`); + content += `\n ${file.substring(0, file.length - 4)}:\n${collection}`; + } + } + + return content; +} + +function snakeToPascal(input: string): string { + return input + .split(`_`) + .map(substr => substr.charAt(0).toUpperCase() + substr.slice(1)) + .join(``); +} + (async (): Promise => { const models: any = yaml.load(getCollectionsYaml())[`models`]; const project = new Project({}); diff --git a/client/cli/generate-permissions.ts b/client/cli/generate-permissions.ts index 739e5f6820..c3d6c0436b 100644 --- a/client/cli/generate-permissions.ts +++ b/client/cli/generate-permissions.ts @@ -7,7 +7,7 @@ import { overloadJsFunctions } from '@app/infrastructure/utils/overload-js-funct overloadJsFunctions(); -const SOURCE = path.resolve(path.join(__dirname, '../meta/permission.yml')); +const SOURCE = path.resolve(path.join(__dirname, '../../meta/permission.yml')); const BASE_PATH = path.resolve(path.join(__dirname, `..`)); const DOMAIN_DEFINITIONS_PATH = `src/app/domain/definitions`; @@ -33,21 +33,21 @@ const FILE_TEMPLATE_PERMISSION_RELATIONS = dedent` import { PermissionsMap } from './permission.config'; `; -const permissionMap: { [permission: string]: PermissionNode } = {}; +const permissionMap: Record = {}; /** * Helper class to generate the permission graph. Holds information about its permission as well as * its parents and children. */ class PermissionNode { - parents: PermissionNode[] = []; - children: PermissionNode[] = []; - permission: string; - enumKey: string; + public parents: PermissionNode[] = []; + public children: PermissionNode[] = []; + public permission: string; + public enumKey: string; public constructor(permission: string) { this.permission = permission; - this.enumKey = permission.replace(/[_\.]([a-z])/g, (_, c) => c.toUpperCase()); + this.enumKey = permission.replace(/[_.]([a-z])/g, (_, c) => c.toUpperCase()); } } @@ -137,7 +137,7 @@ function writePermissionRelations(nodes: PermissionNode[]): void { * @returns a set of all relatives of the given node in the given direction */ function getPermissionRelatives(node: PermissionNode, field: PermissionNodeRelativesField): Set { - let relatives = new Set(); + const relatives = new Set(); for (const relative of node[field]) { relatives.add(relative); relatives.update(getPermissionRelatives(relative, field)); diff --git a/client/cli/generate-settings-defaults.ts b/client/cli/generate-settings-defaults.ts index 595e6038b9..a409c1cacc 100644 --- a/client/cli/generate-settings-defaults.ts +++ b/client/cli/generate-settings-defaults.ts @@ -2,125 +2,41 @@ import * as fs from 'fs'; import * as yaml from 'js-yaml'; import * as path from 'path'; import dedent from 'ts-dedent'; -import { - ArrayLiteralExpression, - CallExpression, - ObjectLiteralExpression, - Project, - PropertyAssignment, - SyntaxKind -} from 'ts-morph'; -import { getCollectionsYaml } from './utils'; +import { MeetingSettingsDefinitionService } from '../src/app/site/pages/meetings/services/meeting-settings-definition.service/meeting-settings-definition.service'; -const SETTING_DEFINITIONS = path.resolve( - path.join( - __dirname, - '../src/app/site/pages/meetings/services/meeting-settings-definition.service/meeting-settings-definitions.ts' - ) -); +const SOURCE = path.resolve(path.join(__dirname, '../meta/models.yml')); const DESTINATION = path.resolve(path.join(__dirname, '../src/app/domain/definitions/meeting-settings-defaults.ts')); const FILE_TEMPLATE = dedent` // THIS FILE IS GENERATED AUTOMATICALLY. DO NOT CHANGE IT MANUALLY. - export const meetingSettingsDefaults: Record = { -`; - -export function isSettingsInput(item: any): any { - return `key` in item; -} - -function getMeetingSettings(): string[] { - const project = new Project(); - const sourceFile = project.addSourceFileAtPath(SETTING_DEFINITIONS); - - const meetingSettingsDecl = sourceFile.getVariableDeclarations().find(decl => decl.getName() === 'meetingSettings'); - - if (!meetingSettingsDecl) { - throw new Error('Variable "meetingSettings" not found.'); - } - - const initializer = meetingSettingsDecl.getInitializer(); - - if (!initializer || initializer.getKind() !== SyntaxKind.CallExpression) { - throw new Error('Initializer is not a function call.'); - } - - const callExpr = initializer as CallExpression; - - const calledFn = callExpr.getExpression(); - if (calledFn.getText() !== 'fillInSettingsDefaults') { - throw new Error(`Expected fillInSettingsDefaults(), got "${calledFn.getText()}".`); - } - - const args = callExpr.getArguments(); - if (args.length === 0) { - throw new Error('fillInSettingsDefaults() was called with no arguments.'); - } - - const arrayArg = args[0]; - - if (arrayArg.getKind() !== SyntaxKind.ArrayLiteralExpression) { - throw new Error(`Expected an array argument, got ${SyntaxKind[arrayArg.getKind()]}.`); - } - - const elements = (arrayArg as ArrayLiteralExpression).getElements(); - - const extractedKeys: string[] = []; - - for (const el of elements) { - if (el.getKind() === SyntaxKind.ObjectLiteralExpression) { - const objectEl = el as ObjectLiteralExpression; + import { _ } from "@ngx-translate/core"; + import { Settings } from '@app/domain/models/meetings/meeting'; - // Get all descendants with specific property name - const keyProps = objectEl - .getDescendants() - .filter(d => d.getKind() === SyntaxKind.PropertyAssignment) - .map(p => p as PropertyAssignment) - .filter(p => p.getName() === 'key'); - - for (const prop of keyProps) { - const initializer = prop.getInitializer(); - if (!initializer) continue; - - // Check if value is an array literal - if (initializer.getKind() === SyntaxKind.ArrayLiteralExpression) { - const array = initializer as ArrayLiteralExpression; - for (const element of array.getElements()) { - const value = element.getText().replace(/['`]/g, ''); - extractedKeys.push(value); - } - } else { - // Single value - const value = initializer.getText().replace(/['`]/g, ''); - extractedKeys.push(value); - } - } - } - } + export const meetingSettingsDefaults: { [key in keyof Settings]: any } = { +`; - return extractedKeys; -} +(async () => { + const buffer = fs.readFileSync(SOURCE); + const models: any = yaml.load(buffer.toString()); + const meeting = models['meeting']; -(async (): Promise => { - const models: any = yaml.load(getCollectionsYaml())['models']; - const meeting = models['meeting']['fields']; + const provider = new MeetingSettingsDefinitionService(); let content = FILE_TEMPLATE + '\n'; - for (const key of getMeetingSettings()) { - const defaultValue = meeting[key]?.default; + for (const key of provider.getSettingsKeys()) { + const value = provider.settingsMap[key]; + const defaultValue = meeting[key].default; if (defaultValue !== undefined) { - content += ` "${key as string}": `; + provider.validateDefault(key, defaultValue); + content += ` "${key}": `; const defaultString = JSON.stringify(defaultValue); - /* if (value.type === 'string' && !value.dontTranslateDefault) { content += `_(${defaultString}),\n`; - else { + } else { content += `${defaultString},\n`; } - */ - content += `${defaultString},\n`; } } content += '};\n'; diff --git a/client/cli/utils.ts b/client/cli/utils.ts deleted file mode 100644 index 2745e0411c..0000000000 --- a/client/cli/utils.ts +++ /dev/null @@ -1,32 +0,0 @@ -import * as fs from 'fs'; -import * as path from 'path'; - -const SOURCE_META = path.resolve(path.join(__dirname, `../../meta/collection-meta.yml`)); -const SOURCE_COLLECTIONS = path.resolve(path.join(__dirname, `../../meta/collections/`)); - -export function getCollectionsYaml(): string { - if (!fs.existsSync(SOURCE_COLLECTIONS)) { - console.log(`no dir `, SOURCE_COLLECTIONS); - return null; - } - - let content = fs.readFileSync(SOURCE_META).toString(); - content += `\nmodels:`; - const files = fs.readdirSync(SOURCE_COLLECTIONS); - for (const file of files) { - const filename = path.join(SOURCE_COLLECTIONS, file); - if (filename.endsWith(`.yml`)) { - const collection = fs.readFileSync(filename).toString().replace(/^(.)/gm, ` $1`); - content += `\n ${file.substring(0, file.length - 4)}:\n${collection}`; - } - } - - return content; -} - -export function snakeToPascal(input: string): string { - return input - .split(`_`) - .map(substr => substr.charAt(0).toUpperCase() + substr.slice(1)) - .join(``); -} diff --git a/client/package-lock.json b/client/package-lock.json index 919ddb72f2..f75dbf06f6 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -9,20 +9,20 @@ "version": "4.2.x-dev", "license": "MIT", "dependencies": { - "@angular/animations": "^22.0.7", - "@angular/cdk": "^22.0.5", - "@angular/common": "^22.0.7", - "@angular/compiler": "^22.0.7", - "@angular/core": "^22.0.7", - "@angular/forms": "^22.0.7", - "@angular/material": "^22.0.5", - "@angular/material-date-fns-adapter": "^22.0.5", - "@angular/platform-browser": "^22.0.7", - "@angular/platform-browser-dynamic": "^22.0.7", - "@angular/router": "^22.0.7", - "@angular/service-worker": "^22.0.7", - "@cantoo/pdf-lib": "^2.7.4", - "@coreui/angular-chartjs": "~5.7.6", + "@angular/animations": "^22.0.6", + "@angular/cdk": "^22.0.4", + "@angular/common": "^22.0.6", + "@angular/compiler": "^22.0.6", + "@angular/core": "^22.0.6", + "@angular/forms": "^22.0.6", + "@angular/material": "^22.0.4", + "@angular/material-date-fns-adapter": "^22.0.4", + "@angular/platform-browser": "^22.0.6", + "@angular/platform-browser-dynamic": "^22.0.6", + "@angular/router": "^22.0.6", + "@angular/service-worker": "^22.0.6", + "@cantoo/pdf-lib": "^2.7.2", + "@coreui/angular-chartjs": "~5.7.4", "@coreui/chartjs": "^4.1.0", "@date-fns/tz": "^1.5.0", "@intevation/tiptap-extension-office-paste": "^0.1.2", @@ -31,29 +31,30 @@ "@ngx-translate/core": "^17.0.0", "@ngx-translate/http-loader": "^17.0.0", "@openslides/motion-diff": "file:../packages/openslides-motion-diff", - "@tiptap/core": "^3.28.0", + "@tiptap/core": "^3.27.4", "@tiptap/extension-blockquote": "^3.27.4", - "@tiptap/extension-color": "^3.28.0", - "@tiptap/extension-highlight": "^3.28.0", - "@tiptap/extension-image": "^3.28.0", + "@tiptap/extension-color": "^3.27.4", + "@tiptap/extension-highlight": "^3.27.4", + "@tiptap/extension-image": "^3.27.4", "@tiptap/extension-link": "^3.23.4", "@tiptap/extension-list": "^3.22.4", - "@tiptap/extension-subscript": "^3.28.0", - "@tiptap/extension-superscript": "^3.28.0", - "@tiptap/extension-table": "^3.28.0", - "@tiptap/extension-text-align": "^3.28.0", + "@tiptap/extension-subscript": "^3.27.4", + "@tiptap/extension-superscript": "^3.27.4", + "@tiptap/extension-table": "^3.27.4", + "@tiptap/extension-text-align": "^3.27.4", "@tiptap/extension-text-style": "^3.4.2", "@tiptap/extensions": "^3.22.4", - "@tiptap/pm": "^3.28.0", - "@tiptap/starter-kit": "^3.28.0", + "@tiptap/pm": "^3.27.3", + "@tiptap/starter-kit": "^3.27.4", "@tsparticles/angular": "^3.0.0", "@tsparticles/engine": "^3.9.1", "@tsparticles/plugin-emitters": "^3.9.1", "@tsparticles/shape-text": "^3.9.1", "@tsparticles/slim": "^3.9.1", + "big.js": "^7.0.1", "chart.js": "^4.5.1", "cm-chess": "^3.6.3", - "cm-chessboard": "^8.12.14", + "cm-chessboard": "^8.12.12", "date-fns": "^4.4.0", "exceljs": "^4.4.0", "file-saver": "^2.0.5", @@ -80,11 +81,12 @@ "@angular-eslint/eslint-plugin-template": "^22.1.0", "@angular-eslint/schematics": "^22.1.0", "@angular-eslint/template-parser": "^22.1.0", - "@angular/build": "^22.0.7", - "@angular/cli": "^22.0.7", - "@angular/compiler-cli": "^22.0.7", - "@angular/language-server": "^22.0.7", + "@angular/build": "^22.0.6", + "@angular/cli": "^22.0.6", + "@angular/compiler-cli": "^22.0.6", + "@angular/language-server": "^22.0.6", "@stylistic/eslint-plugin": "^5.10.0", + "@types/big.js": "^7.0.0", "@types/file-saver": "^2.0.7", "@types/jasmine": "~5.1.15", "@types/js-yaml": "^4.0.9", @@ -93,14 +95,14 @@ "@types/qrcode": "^1.5.6", "@types/tinycolor2": "^1.4.6", "@types/video.js": "^7.3.58", - "@typescript-eslint/eslint-plugin": "^8.65.0", - "@typescript-eslint/parser": "^8.65.0", + "@typescript-eslint/eslint-plugin": "^8.64.0", + "@typescript-eslint/parser": "^8.64.0", "@vendure/ngx-translate-extract": "^10.2.0", "angular-eslint": "^22.1.0", "eslint": "^9.39.5", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.6", - "eslint-plugin-simple-import-sort": "^14.0.0", + "eslint-plugin-simple-import-sort": "^13.0.0", "eslint-plugin-unused-imports": "^4.4.1", "fetch-mock": "^12.6.0", "istanbul-lib-instrument": "^6.0.3", @@ -111,13 +113,13 @@ "karma-coverage": "~2.2.1", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.2.0", - "prettier": "^3.9.6", + "prettier": "^3.9.5", "ts-dedent": "^2.3.0", "ts-morph": "^28.0.0", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", "typescript": "^6.0.3", - "typescript-eslint": "^8.65.0" + "typescript-eslint": "^8.64.0" } }, "../packages/openslides-motion-diff": { @@ -134,7 +136,7 @@ "jsdom": "^29.0.2", "typescript": "^5.8.3", "vite": "^8.0.16", - "vite-plugin-dts": "^5.0.3", + "vite-plugin-dts": "^4.5.4", "vitest": "^4.1.8" } }, @@ -362,13 +364,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.2200.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2200.7.tgz", - "integrity": "sha512-t03YYe5amlcpsX5gpMGi96kpBNTMKY7/rJsRDNO3v98mSy7kzNXlgzy/jyfdFev7AJusuwVM5TKVsUAgQxCgCw==", + "version": "0.2200.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2200.6.tgz", + "integrity": "sha512-wTjUfiT5iEMc9+9z2zo1QGtzLpXk5Xx0bV6/zTO4n6+BCC0qReuYnIYt0iJCh649Q0vHq5++0zmZZK0KyXVMZQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "22.0.7", + "@angular-devkit/core": "22.0.6", "rxjs": "7.8.2" }, "bin": { @@ -381,9 +383,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-22.0.7.tgz", - "integrity": "sha512-r8XiflsVYcsvWp+zVvaNv5GsDoihaZ2OwWfn++N6YqTUZLcqDzqhsxeNk60sJ5V+Jn4ck1aKF4A9flmvSY+tpQ==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-22.0.6.tgz", + "integrity": "sha512-uAZ7TPn+8sDZcFtiM5nQpmqaR9lspLAf7RY7t7TXYP794001khRf+F/AhmONxmgFPWY01+eeJSvBx+FEnHCb0A==", "dev": true, "license": "MIT", "dependencies": { @@ -409,13 +411,13 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-22.0.7.tgz", - "integrity": "sha512-bKgnBB0LPAj44uVXfW0UO1rQBb3HGXDZxa1bLtESr/KCK4j5iiaXlHqvJjc/z0em1Ds9WNQOfNXjV3IdJo9sSw==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-22.0.6.tgz", + "integrity": "sha512-7bSiye4UrxvhYvYp1YIpVSVOFQZ75EXP3EE5/ShM3cPNtUTdXJiwHkD8SiLHNhPTB6Mzrq5tp1YlAXXRg/WgLw==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "22.0.7", + "@angular-devkit/core": "22.0.6", "jsonc-parser": "3.3.1", "magic-string": "0.30.21", "ora": "9.4.0", @@ -569,9 +571,9 @@ } }, "node_modules/@angular/animations": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-22.0.7.tgz", - "integrity": "sha512-Q9PS2SYyvY4/K90GGy4+F0X7X7YmEfzKOw3eGgJ+6MnpVFo2kII2WK/bI5spr3PWNrn/TvNNNqP//c8BNX2Lbg==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-22.0.6.tgz", + "integrity": "sha512-5bBAuKtawVK4KPq6U/yoE5yCyKymEnXNN7UJ1Lb7PUuuYmLnUXb7zJpC7HwtHTuV/0PTCkGlLE59NtcrrolTuA==", "deprecated": "@angular/animations is deprecated. Use `animate.enter` and `animate.leave` instead. For more information see: https://v22.angular.dev/guide/animations.", "license": "MIT", "dependencies": { @@ -581,20 +583,20 @@ "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/core": "22.0.7" + "@angular/core": "22.0.6" } }, "node_modules/@angular/build": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-22.0.7.tgz", - "integrity": "sha512-cm/QJmrIgsjzZJeBeqeNwgdgK6BGBKk7ca21jnSsrwlae3F9u1E8cImFbLeZSjEGghx4wFUacFDG+6lFEICntw==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-22.0.6.tgz", + "integrity": "sha512-mIp1snH1haw4pKiJwUmKyp9f31NRUTeUwqrl9W59X3Iv54egOnD1EdCc0jsW7WJVr/JHRZYVt/ooFelUB8uV8g==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2200.7", - "@babel/core": "7.29.7", - "@babel/helper-annotate-as-pure": "7.29.7", + "@angular-devkit/architect": "0.2200.6", + "@babel/core": "7.29.0", + "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", "@inquirer/confirm": "6.0.12", "@vitejs/plugin-basic-ssl": "2.3.0", @@ -633,7 +635,7 @@ "@angular/platform-browser": "^22.0.0", "@angular/platform-server": "^22.0.0", "@angular/service-worker": "^22.0.0", - "@angular/ssr": "^22.0.7", + "@angular/ssr": "^22.0.6", "istanbul-lib-instrument": "^6.0.0", "karma": "^6.4.0", "less": "^4.2.0", @@ -1195,9 +1197,9 @@ } }, "node_modules/@angular/cdk": { - "version": "22.0.5", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-22.0.5.tgz", - "integrity": "sha512-qy1scYkkhedGxrU2GjOUoh76xjsxCDOODWdVfg4aXLXG7RBIH6hOuKdcNpR/sWhfSdY02a11QYRN2CqoqWDvZQ==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-22.0.4.tgz", + "integrity": "sha512-XaH1ff9tOn4acPh0zWbrmJznfZqZ0KZkw5+DM5BIeM9URmAOI8xdZWmVNyaUpVSmriANFjeGZS+Sfat9S6hLOg==", "license": "MIT", "dependencies": { "parse5": "^8.0.0", @@ -1211,19 +1213,19 @@ } }, "node_modules/@angular/cli": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-22.0.7.tgz", - "integrity": "sha512-5r+fgP8ARnXZeylAGt5BuToVcR8Vn2QQZ6dPMe7V9o4NdvJqqOKmE7fEiRe7KaxIx5WSDhuAhgW9t+scLZQbvw==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-22.0.6.tgz", + "integrity": "sha512-/sEN1hVcywSML+yWrr/T7gbuGfIrZwKC+WhiOv5GksSQVUrSujWnMX4meRJ5ocG/Ie8UN48LJ7LVDsm32NBt1A==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2200.7", - "@angular-devkit/core": "22.0.7", - "@angular-devkit/schematics": "22.0.7", + "@angular-devkit/architect": "0.2200.6", + "@angular-devkit/core": "22.0.6", + "@angular-devkit/schematics": "22.0.6", "@inquirer/prompts": "8.4.2", "@listr2/prompt-adapter-inquirer": "4.2.3", "@modelcontextprotocol/sdk": "1.29.0", - "@schematics/angular": "22.0.7", + "@schematics/angular": "22.0.6", "@yarnpkg/lockfile": "1.1.0", "algoliasearch": "5.52.0", "ini": "6.0.0", @@ -1246,9 +1248,9 @@ } }, "node_modules/@angular/common": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-22.0.7.tgz", - "integrity": "sha512-iun8auXVnpPzunhtaPHMF0gSpByxv7kHhG3Nb6r34eJITW5p06LYyZbkAnl5ERArmgQvEV4pTjoo7ZTK3cJzzw==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-22.0.6.tgz", + "integrity": "sha512-+sC0W0FWGeZ/HKUhueCBX8kXdFQDlStbUSK6WF/32igfNYR/PdUrp2L5bU7q654yjxnMzFWDAB+Uvzv6YI/cQg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1257,14 +1259,14 @@ "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/core": "22.0.7", + "@angular/core": "22.0.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-22.0.7.tgz", - "integrity": "sha512-zhFPKYJzpml5bt58DkJq8S6S2bSJBomebgLYtUvZNLdQMicd5qmRGX6I3LO7Jd+HgjB2Flne/sloI+Jcyz1aOQ==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-22.0.6.tgz", + "integrity": "sha512-iFHsXOA14TsxK4jowmGfogI9Jb0ApL3z8EGTGvKMialqtw088HYjwJP1LT4OlO/wgmjSTq2peZ19jLPuhevNvw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1274,9 +1276,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-22.0.7.tgz", - "integrity": "sha512-/3HjBJUzljyPgb77R679+FN1+27xIGuLCAhuqzfj6DxX5WJOOmQOWE/k12eAZujE+ZypSf8ZGkfaukZV43FwoA==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-22.0.6.tgz", + "integrity": "sha512-HPiceCIEyIcTmOuIFiyqu04kbLoJhSUavcOy/kzJkJ2OPXtPvGKaimC4lgs0C86uFy4P6rj6PDITBe3AVHkMTA==", "dev": true, "license": "MIT", "dependencies": { @@ -1297,7 +1299,7 @@ "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/compiler": "22.0.7", + "@angular/compiler": "22.0.6", "typescript": ">=6.0 <6.1" }, "peerDependenciesMeta": { @@ -1306,10 +1308,58 @@ } } }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@angular/core": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-22.0.7.tgz", - "integrity": "sha512-A5xKJx5wuuZfeJhShyZvbgicYtT3Jpw/5wJd1cfrcKU+i63CagRIg9jSktTW/e+2hxG1tIQrfKQUGeclmsAUUA==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-22.0.6.tgz", + "integrity": "sha512-9AYGxmZlJhjLSepZaF/cn1LTC9xRHpUPtXlyyJdauTb4f77X/P0kVdmADztgF1Qy5oMd1V9UKebAe81gmqOH2g==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1318,7 +1368,7 @@ "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/compiler": "22.0.7", + "@angular/compiler": "22.0.6", "rxjs": "^6.5.3 || ^7.4.0", "zone.js": "~0.15.0 || ~0.16.0" }, @@ -1332,9 +1382,9 @@ } }, "node_modules/@angular/forms": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-22.0.7.tgz", - "integrity": "sha512-24ldrCORVCi3SoqtshjD8PcT5zg4aIXy9p8+GsO/c3yuhAouVOwL4z1/btNdo7UZv1asyaT3w4lgzprN8TGpjA==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-22.0.6.tgz", + "integrity": "sha512-pZGMk1TvT+m8z2ZGm90W0sBlo6fhtMAA2baZbMt3HbGRmY23vZv1Orv9npX3Z6a9CCNDY3XBMBvkuj8g7vde9Q==", "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", @@ -1345,20 +1395,20 @@ "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/common": "22.0.7", - "@angular/core": "22.0.7", - "@angular/platform-browser": "22.0.7", + "@angular/common": "22.0.6", + "@angular/core": "22.0.6", + "@angular/platform-browser": "22.0.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-server": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/language-server/-/language-server-22.0.7.tgz", - "integrity": "sha512-bjW+Rzh/cY3q8I0Ss5M07GMmDLiNxREPLnnqe4W2u9TPvBEHZjJLU7tWMgdmBfxndZFEfF5ij4vCpSdSJ9mlbw==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/language-server/-/language-server-22.0.6.tgz", + "integrity": "sha512-3wLhBdF/9GgW7Y4fKyW7e9TKyRC2firP9akb6Xd1TajqQzDxExdbKo+bBLML+njKWcOCknUAqR6OBNpDl/IrPA==", "dev": true, "license": "MIT", "dependencies": { - "@angular/language-service": "22.0.7", + "@angular/language-service": "22.0.6", "typescript": "6.0.3" }, "bin": { @@ -1369,9 +1419,9 @@ } }, "node_modules/@angular/language-service": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-22.0.7.tgz", - "integrity": "sha512-IT2CSgrb26S2SlVhWfCe0VHjv3Tdh5BG0W7LmFn1SWeQZQmUpKwyy+3pvCh3OKIUeNfqd4YNznIv8Vslnpof1A==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-22.0.6.tgz", + "integrity": "sha512-98+yuUDyt472Z5vUEQs2YFqeF+ET2YQIWsdbhp9gTAE/oCEfnPTV9iyvqqry79UpBH0ivGeBs2ISD1QUkKsWrA==", "dev": true, "license": "MIT", "engines": { @@ -1379,15 +1429,15 @@ } }, "node_modules/@angular/material": { - "version": "22.0.5", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-22.0.5.tgz", - "integrity": "sha512-A0SnDMvWQBxv3dB2w33GXwuo1/puKtFe8ZMQmIiurS5bbTQpV7UHAM0pWzg7L4DG2cvaH4WZGRPfNG3f8fh+yA==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-22.0.4.tgz", + "integrity": "sha512-htOFlTwMtcB9J4q6yPD9jJIQVJ5LfRub+KAiD4D7UU1iaCknpNuQKRfLrZh/mEdOVACI52jHAOXS3+eTkloXcQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/cdk": "22.0.5", + "@angular/cdk": "22.0.4", "@angular/common": "^22.0.0 || ^23.0.0", "@angular/core": "^22.0.0 || ^23.0.0", "@angular/forms": "^22.0.0 || ^23.0.0", @@ -1396,23 +1446,23 @@ } }, "node_modules/@angular/material-date-fns-adapter": { - "version": "22.0.5", - "resolved": "https://registry.npmjs.org/@angular/material-date-fns-adapter/-/material-date-fns-adapter-22.0.5.tgz", - "integrity": "sha512-TXag0QF9CwR5jR0dvX7wt23nk1Ck2EmfJg/xR/RI4HfHRz+1qiHhZ9K8oqU/37hGfFUCdL137hFw3OAMVYaywQ==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@angular/material-date-fns-adapter/-/material-date-fns-adapter-22.0.4.tgz", + "integrity": "sha512-0TZf1eByXqPbDyXldzqxF4PSPw/x1HtjpBdKVe4QjXFxlFVaSymRWr+Xwks0UVL+QzddZWk8TS+dcU462eeZ6g==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { "@angular/core": "^22.0.0 || ^23.0.0", - "@angular/material": "22.0.5", + "@angular/material": "22.0.4", "date-fns": ">2.20.0 <5.0" } }, "node_modules/@angular/platform-browser": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-22.0.7.tgz", - "integrity": "sha512-iCuREIWRnDCsd7mI5vn5ovXjcSwseWR4qfd+zo6QUrY2O9zkUNV79YuCqVjSzvWyvU2rtR5iRBvpB5JQgBELeg==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-22.0.6.tgz", + "integrity": "sha512-DyyYRx4jXlfaenf0mwsp9jcIak/c17QCFgJKA7OauSkQnk3dL+voMYEwdigfnTIUdw+2Y9wYDywLeuM6NychNQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1421,9 +1471,9 @@ "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/animations": "22.0.7", - "@angular/common": "22.0.7", - "@angular/core": "22.0.7" + "@angular/animations": "22.0.6", + "@angular/common": "22.0.6", + "@angular/core": "22.0.6" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1432,9 +1482,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-22.0.7.tgz", - "integrity": "sha512-FssnDZLIOYBsUO9EF4oHPHaNZyyCptVV0wYlGV5TlMWEJ6R3UllynUiQi03Zqyg344azgbPr2ieW3qoz0PAbsQ==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-22.0.6.tgz", + "integrity": "sha512-VKf8mg+BviBp3wlElZYxWFuXtMLQqd8rfm6jEzwP1Emaz2MCx69Y54dXopD81KJCqRwTmJUVxOjoubqUOlJzRw==", "deprecated": "@angular/platform-browser-dynamic is deprecated. Use `@angular/platform-browser` instead.", "license": "MIT", "dependencies": { @@ -1444,16 +1494,16 @@ "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/common": "22.0.7", - "@angular/compiler": "22.0.7", - "@angular/core": "22.0.7", - "@angular/platform-browser": "22.0.7" + "@angular/common": "22.0.6", + "@angular/compiler": "22.0.6", + "@angular/core": "22.0.6", + "@angular/platform-browser": "22.0.6" } }, "node_modules/@angular/router": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-22.0.7.tgz", - "integrity": "sha512-uMh+2S5y5Z6hTeFL85tDehfqAwVYjnTlHxpCrW+75RD4Z+rLl0/ff2ag3bXknzNyg0Q9LPOH6t/eCcQYajNOQQ==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-22.0.6.tgz", + "integrity": "sha512-s0BErBBadCXlvilob8aWke4H1FRlXDbnDfyYkjW6RkUaGQ4jzeEAzH56KsG2hf8NtBtYwkRlsLfOX9s5sPwm6w==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1462,16 +1512,16 @@ "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/common": "22.0.7", - "@angular/core": "22.0.7", - "@angular/platform-browser": "22.0.7", + "@angular/common": "22.0.6", + "@angular/core": "22.0.6", + "@angular/platform-browser": "22.0.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/service-worker": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-22.0.7.tgz", - "integrity": "sha512-Xd47hbaVZvkA4wcXBY570rkfX2eONyUfV15vgPx18bKrmPFlat7Fj75PCWIMn90Tg31BLtuozTZenGGjQXSy4g==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-22.0.6.tgz", + "integrity": "sha512-s0zE2MFVptHNd21c5sD2VXd9Dp5x6cgyDjIePKjRsfiILegX3i6pAj9xeZ6y160dsrLVmkHST+uY+oxOVMVUhg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1483,7 +1533,7 @@ "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/core": "22.0.7", + "@angular/core": "22.0.6", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -1513,21 +1563,21 @@ } }, "node_modules/@babel/core": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", - "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", - "@babel/helper-compilation-targets": "^7.29.7", - "@babel/helper-module-transforms": "^7.29.7", - "@babel/helpers": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/template": "^7.29.7", - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -1578,13 +1628,13 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", - "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.29.7" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -1790,9 +1840,9 @@ } }, "node_modules/@cantoo/pdf-lib": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/@cantoo/pdf-lib/-/pdf-lib-2.7.4.tgz", - "integrity": "sha512-tMet5mSJOESLAvSw/NnVoty2L7hHtWGtXt7CjxL4jeq1r3fg8lB7+sO0qKRyqR3kxeWfa8W5C5IuyNtHSVaTeQ==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@cantoo/pdf-lib/-/pdf-lib-2.7.2.tgz", + "integrity": "sha512-M+NYHU8nk8/XhaggiF7khx4R1GHxBOCKM0YmbKQZDga8BDxLmOC5b9HUEd9bmlIZQayRzz8kE/797MCSPEMhAA==", "license": "MIT", "dependencies": { "@pdf-lib/standard-fonts": "^1.0.0", @@ -1815,9 +1865,9 @@ } }, "node_modules/@coreui/angular-chartjs": { - "version": "5.7.6", - "resolved": "https://registry.npmjs.org/@coreui/angular-chartjs/-/angular-chartjs-5.7.6.tgz", - "integrity": "sha512-Yv+5FNF/w52hH7GQmjM6YDlvlC7VtClMMcjyii5D8sLjeS6tQoQlONgydRNhcU05xq588FxhYG0Bv6ibSj0R1Q==", + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/@coreui/angular-chartjs/-/angular-chartjs-5.7.4.tgz", + "integrity": "sha512-3IMyzCxNE8gdCHbgf1CJ6eRA1ykbiIAEzWFK1KCslGeDFf07HigCzadsycD8q9Lrfddw+iwW0cuEs9p7ybogTw==", "license": "MIT", "dependencies": { "lodash-es": "^4.18.1", @@ -4854,14 +4904,14 @@ ] }, "node_modules/@schematics/angular": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-22.0.7.tgz", - "integrity": "sha512-/GVLhB5zaxYGIaC4GFfsfk81SDq9ht0HbEHhHB+t1SqNPV8gnULDV2ZE0Cg+LGj+3YnPtSwpb7tS0vaHUcihVg==", + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-22.0.6.tgz", + "integrity": "sha512-pZP52HlQaILmFKK4/iA2OyQ7mMP2V/K6z3gxbykWgXk/MNJ605PWaptHZOuvAAp+0qsFWJbj0MLmDdR3yMhdMQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "22.0.7", - "@angular-devkit/schematics": "22.0.7", + "@angular-devkit/core": "22.0.6", + "@angular-devkit/schematics": "22.0.6", "jsonc-parser": "3.3.1", "typescript": "6.0.3" }, @@ -4995,220 +5045,192 @@ } }, "node_modules/@tiptap/core": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.28.0.tgz", - "integrity": "sha512-gUuD5WAYfbDxNSSJya/emh2KSzXZXLUYKW4fEnc1AQ5FE2twzh4LJ9UlKFIawigrUCAksWI5Fy1hRbv+5m4ZdQ==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.27.4.tgz", + "integrity": "sha512-8W/GwlEn0JwNdpyVfTWcXwHYUpj9BWwO++YxtizmgjJzlwigSh7/xLVJMwVykuQHQ2fCq5rkUvmBRtpHOMLUQA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/pm": "3.28.0" + "@tiptap/pm": "3.27.4" } }, "node_modules/@tiptap/extension-blockquote": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.28.0.tgz", - "integrity": "sha512-y8Xi6Z3AQLXedz0J8Z3kDsu7SKBmL50gKVXx3RK1Oo1cuCGhNChm3syChkAz3PLAbrPUM5rvJDSZdF2jUrDnng==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.27.4.tgz", + "integrity": "sha512-d1tOHgP3R5cOE+Ot8qL/dkLXRByajgn+j6cCXHqDtmJO2wsK9knmbKQ0SEjbKrU6OgHrTnY/EotNxBEBW9HGoA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0", - "@tiptap/pm": "3.28.0" + "@tiptap/core": "3.27.4", + "@tiptap/pm": "3.27.4" } }, "node_modules/@tiptap/extension-bold": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.28.0.tgz", - "integrity": "sha512-JhZQmr0AU741bOwjVMfuwJdK4g0TQwwPbeca9aqKHv5zvZw4i4G9G6fESVyMFc3Yag1ffpnq5EtNldHKTnMhlw==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.27.4.tgz", + "integrity": "sha512-wTtJUUAxCAZ01ICH2DNlOBzzHKRQ1ZST8aRYtIhBPzqEUhnJaKGcjnDB4X49fqPi48iXaPxzhsInDl+rVUujWg==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extension-bullet-list": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.28.0.tgz", - "integrity": "sha512-dSVuNiH7PFMmWGkNER9vfUb5bXUHDARvHbJ3l+APEb+ZiusVN1KFdM3nd/RsW/Rt5Gd3XwlIEU/c2Uf7cxYDcw==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.27.4.tgz", + "integrity": "sha512-rvja0N1RnwGJAVwDdbUfDIJ4NoT+KjPFaZudKiPuEMfMHfbqe4xcbbC2hsfs61JNcl2xmx+ohV6lzD9YxxJl1w==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "3.28.0" + "@tiptap/extension-list": "3.27.4" } }, "node_modules/@tiptap/extension-code": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.28.0.tgz", - "integrity": "sha512-AUw2Acof3CQE6Q6Y22saK4lyg0nkeJ4XXniU65TdAi/9TE66TGiO4NQJJNNPgu8+VMEwl5j8VsIFK8sfTcNYtg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "3.28.0" - } - }, - "node_modules/@tiptap/extension-code-block": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.28.0.tgz", - "integrity": "sha512-bHITDzT0umTLh+SiEVQzIXkCMt/TzbPM1+HQy9ZxgQDHAJj/vdmfNAnP3RCOrz4lETXyhNQ2b6kxeu3lWckxyA==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.27.4.tgz", + "integrity": "sha512-aPc7opCR1ylK4m4c2lsjLsGpEBD1fLQQKWd5PbZiJvrTF8gkdGZlYLt9A6VukpxeJyHhb22Jaj4fxgKmGMeTtw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0", - "@tiptap/pm": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extension-color": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-color/-/extension-color-3.28.0.tgz", - "integrity": "sha512-YbUMUdrgU04GDYoii1wuFVkiTSQoaEQh04kwgQayEQ46aUBEnnaJitWdp39aGMWYTIXD/c9K9cr5Vg8GSKcVxA==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-color/-/extension-color-3.27.4.tgz", + "integrity": "sha512-uGbgErKGKO4OTBGqnXOA1CGXa3IqoBaiPBGcHu/px01fS8EVFu0A7q5HS6vxFiMK6qW5x71sEpCA+FUINMAb3g==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-text-style": "3.28.0" + "@tiptap/extension-text-style": "3.27.4" } }, "node_modules/@tiptap/extension-document": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.28.0.tgz", - "integrity": "sha512-5SAKtlB1Tr/eZFhISL86HqmUup6rItvPtuPyRjmZo/VgbMwXEwiyAh1sMgFp5VNaeSMM14vJSyQpjhSaOmaBqg==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.27.4.tgz", + "integrity": "sha512-7nAqgfkgb9HADBeCTnOHuTiyZuxfxvMPT3nH4OZeY+cmtkI1On3QffqlmtcUPvNbkhT3o9ehA1hVfCnQ1Ye4LQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extension-dropcursor": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.28.0.tgz", - "integrity": "sha512-JA+dXQjjfJBpD0nVsZeddGVXRsmanESM9+8CtM35hI9wJnYMXay/B+5GUhswO20zhT3zhB2ZOTGe9knu6A8nIQ==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.27.4.tgz", + "integrity": "sha512-RiZasQJuUTUO3aME16Bn8eJH7cYnvhT5JCFDFq0ya/1iFI9wUQA2NJC5tb5TrZ74+sQwkYU9VzexnchM481Y9w==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extensions": "3.28.0" + "@tiptap/extensions": "3.27.4" } }, "node_modules/@tiptap/extension-gapcursor": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.28.0.tgz", - "integrity": "sha512-Wo73kM4q8z4Va9i4+0n1cO0UEMVUVBHPqM6cAqEYXjB4T48LQkKjRsiQydCezm185rQAsmm1dyi72gtvVQfdMg==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.27.4.tgz", + "integrity": "sha512-svLwSKcFhzpcJeXvxxKkRFuQpykmXrQefVhEsaXq0L95yJIIAGKMRmQC3mxKdzL2j0P9cY7V41bNVSyOAyvclw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extensions": "3.28.0" + "@tiptap/extensions": "3.27.4" } }, "node_modules/@tiptap/extension-hard-break": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.28.0.tgz", - "integrity": "sha512-JHIFjX1luJgQ4VFEkIeXZpbc54Qiw+69P8FmlazYTh7AIJ6iLCpMFgQFELnivEAZ+/vS0lMPQubg0rCeM3UrHw==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.27.4.tgz", + "integrity": "sha512-W+Z9pmDgqjbdu3NeZOQrzA15iM4w60Yd8l2CYzxcdApPVIfYzb2S3a7+u1RqW9wnTYb6xyZjASmFNfxXS4P4cg==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extension-heading": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.28.0.tgz", - "integrity": "sha512-rKjGG/Ik2lNaXBNVmONEDm5DBfGDLM1NWgSf5RRfBISrH8Lm1xqFruOB9tIaB0YUoSV3SBOiwTF9svmzvKSoRA==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.27.4.tgz", + "integrity": "sha512-RgvpxzuYk6QEK+az+eiXpWvGlUso42zNcGnjyUrvskoZjS47MbhSg8ylRYQSRtXE0ETlXhAx4J7iGlGr72kyIw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extension-highlight": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-highlight/-/extension-highlight-3.28.0.tgz", - "integrity": "sha512-T8uvQ1aZs+u496XxycMk5zAIwA0DxN+SCdSAFWCU7bqCAen3ulzOsk6RXJ+Jx40GqTV/ShPyIcEuaJVNurXxbg==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-highlight/-/extension-highlight-3.27.4.tgz", + "integrity": "sha512-STRX1qJLhTZslBF8fEE5qpTGrFd/g7Ufidjxt84p0uT8FrtcbfPUwyweeYwhZp7Iw8n+qODGYnheJTOpfaW2JA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0" - } - }, - "node_modules/@tiptap/extension-horizontal-rule": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.28.0.tgz", - "integrity": "sha512-neBCMWprkppQUoLWyeJZDHqBw+xKX2oNhLD9MbFlhKIr092zgfP4mpCvQnSkn1OHl156KzZMp070+NyLBjgQ7A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "3.28.0", - "@tiptap/pm": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extension-image": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-3.28.0.tgz", - "integrity": "sha512-aKGCdEjyujUcQ6tEtq4EPbKxEC16QsKapv3DeZs1c/UHFiEUalbbPHBnxjGnupiLz75IR+07GYqBoZ81kSCxiA==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-3.27.4.tgz", + "integrity": "sha512-yQ8CazyOL4z1/NbV1NLGv6DvchVhOXHH3uQ7md5VX/IGZruFpnm8IpF9MDpdAUxUFmTsXJDYyO2lWGO1PYWG8A==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extension-italic": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.28.0.tgz", - "integrity": "sha512-Yur/ELz6dNVKQC7m8wGjtoLFxamGjJmA0rUEEOacTH6J39aFmcSxYkEGNDkYHbZFyHFYqbej6eI3VE0h08O0mg==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.27.4.tgz", + "integrity": "sha512-PeZT4XbyxAp7Lqo/hfA1k5LI27g1RlgS+YgXp2CeHXIrUfSpO5HlZXh02Bvb0pOdl3RFw2tEKtlHzjt8Y1+Nwg==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extension-link": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.28.0.tgz", - "integrity": "sha512-hy/PqSeTyl317yseFcHGE+3XVfQKQYaL4uZuj27xlrcO7MZ15drt1h9sUZy1FTBF3mr8676pQu7aoEm/Ww4ZRA==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.27.4.tgz", + "integrity": "sha512-6K/FkNwMLWWQbNWKlycrUPTN7YcyVFdFwZncoBXe5WyarRjLTGw7ywafnCI9PDIWSq7ttzVL4NgjN2IN8kBXww==", "license": "MIT", "dependencies": { "linkifyjs": "^4.3.3" @@ -5218,201 +5240,201 @@ "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0", - "@tiptap/pm": "3.28.0" + "@tiptap/core": "3.27.4", + "@tiptap/pm": "3.27.4" } }, "node_modules/@tiptap/extension-list": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.28.0.tgz", - "integrity": "sha512-zQ66i5DuhVOndmZ0d7H475Y5Yb+BMx+zfCjFkCzEc6WVef5MumtxBVTkGLQ0ibxUaD71s4QQZbjHWagpaTg0eQ==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.27.4.tgz", + "integrity": "sha512-A0BgmRO1RE0yLCx9w7GQITtKfS9wLE5cdngSYDiSpwulcXJhJjKm5mZ4OUZmks2VN4HO5jMl2BWCGt2NSDhA+w==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0", - "@tiptap/pm": "3.28.0" + "@tiptap/core": "3.27.4", + "@tiptap/pm": "3.27.4" } }, "node_modules/@tiptap/extension-list-item": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.28.0.tgz", - "integrity": "sha512-GbXrnMac6knSetZY33NHwOrgXFPqH28uCklQqmOZQlsrdGqezDKk31qoEMr4GsKW9n/lViAeuc07oIzwLwCMng==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.27.4.tgz", + "integrity": "sha512-z5TVuPw2mkK0B/x+gFg3uUV7tBdaElDFg0zVgnXZCqlSVTLfIyInOOnG5LTWoAd9BdzBjGrzE3PohDcLVDDGBQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "3.28.0" + "@tiptap/extension-list": "3.27.4" } }, "node_modules/@tiptap/extension-list-keymap": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.28.0.tgz", - "integrity": "sha512-u9Wks8c/eQAv0RkULNggOyTKDD69WVbcV9H5cbasPDUbq5XbEFVa9ajxhEGfMmQ5et3EX0QL8qBi50K0GqbIjA==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.27.4.tgz", + "integrity": "sha512-on7JNDi7Eqz7UdZeZdiO83bQHo0flVDHzjmtR+v/nrCGW9H15D3CHs5+4ozLDiCvTK8tbkBuut/l9AWNxcCE/Q==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "3.28.0" + "@tiptap/extension-list": "3.27.4" } }, "node_modules/@tiptap/extension-ordered-list": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.28.0.tgz", - "integrity": "sha512-OZNYrKKL9D01ySOujlNbKlLS9/3wGgKNYeoHZUg0e+Ta8WPVvL3W1zH6TgiU5sF2ZSGUBoq3w7mdaO/iROlUkw==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.27.4.tgz", + "integrity": "sha512-bHwLiof0FqJfWzB0act7oEKMTZatEKQ4IYCvmyF5EktjMs4kxEatkPp4Yx/1LSYSjLy1MMT7oLELyaz2FFYyXA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "3.28.0" + "@tiptap/extension-list": "3.27.4" } }, "node_modules/@tiptap/extension-paragraph": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.28.0.tgz", - "integrity": "sha512-8UMlQIjzqf6r2hSJ/VeJ00RqaOrOB1J5rTk02Vcw2pYeHkOqp+B0ff0HFu4abT9x1q4oXrBAgMsxRtgh/kR14Q==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.27.4.tgz", + "integrity": "sha512-8Dnr1J5s/s4XYYuEF3b784NnCxLjXOlQpmGyXRxTAzW7JaOP08tIUJWVNvSMekfXc2vXa33HUbqjxyyWZEQ6LQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extension-strike": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.28.0.tgz", - "integrity": "sha512-VVj2ZZU9QYqiHLcjqMqRYvuHSsokj/AgUl+6TzLrKjlWwyZ18D4H2vkyI0g70iVTKnUpZ3sEy8WA/rqjgBjqBg==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.27.4.tgz", + "integrity": "sha512-8OXwcPKuV3ToBBgyvDxH1jQdObK5FIKCGiyIim6qNWiOpi9BhM3XYD+aO1khjv8qIjtoI/DYbizF4ewj09fX2g==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extension-subscript": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-subscript/-/extension-subscript-3.28.0.tgz", - "integrity": "sha512-lHROuWtzuMv3V4Q11j43Grqci5t0BAMbzIFinPyDSwxDfOCdpj0AwUS+TNNmi4sxZ49QwOXm/vzVMSSi2ChO5g==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-subscript/-/extension-subscript-3.27.4.tgz", + "integrity": "sha512-gs0AexP7GsE9vgdkwhqYgrKu7kD96PjmgCorsGLdA60m71eTavm6j8NN1m1nvcDPO1sTpP8ACs2mhipj+WS5Iw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0", - "@tiptap/pm": "3.28.0" + "@tiptap/core": "3.27.4", + "@tiptap/pm": "3.27.4" } }, "node_modules/@tiptap/extension-superscript": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-superscript/-/extension-superscript-3.28.0.tgz", - "integrity": "sha512-19MWwQIoREjZsEQ7fa/6DUMx15GKZ+iPkOcSdm/PE2rKiDXhec0acWPZTZgH5dluW9GJOMilk7Xl7U8oBNGfjQ==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-superscript/-/extension-superscript-3.27.4.tgz", + "integrity": "sha512-krlpnLeNBF6hVbQDrkuoXiy52v5YctoGPkLnxmftYNtloVrikRpgpetTRsFh0P6hLwv6g/g8SzoM23iMBB3S4A==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0", - "@tiptap/pm": "3.28.0" + "@tiptap/core": "3.27.4", + "@tiptap/pm": "3.27.4" } }, "node_modules/@tiptap/extension-table": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-3.28.0.tgz", - "integrity": "sha512-SX2Uwn/bFyrqjbBo2Hg9wfLT/ofByHm4f80BuG0h5/m89Ve78CgtaK2lGz9jHZRM7rKTG6eqel+PUZQUwcSzOg==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-3.27.4.tgz", + "integrity": "sha512-ejQjqt8GjUn4YswG/SsiLr/W3LZApZGUEDW0N7NoOduE0dBZ/pVJHPuqWu33kK+phJjSNCIN+bSAkoWE01rZSw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0", - "@tiptap/pm": "3.28.0" + "@tiptap/core": "3.27.4", + "@tiptap/pm": "3.27.4" } }, "node_modules/@tiptap/extension-text": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.28.0.tgz", - "integrity": "sha512-Jqp1LgfY1mnp4TQHoy+vnHyfn6qnnAM6nHgGwbY5zA8b/Xf1Etll6pziTx9p1J1qcfAgSrnjOyAmA++H7VQqww==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.27.4.tgz", + "integrity": "sha512-lKQH/hP4FBXsziHypd6Ywj8JFvMLM5GVkK1xsH6yApNuXbHq95rd42ZOYWpYILIBib7tlaz93z61d74UrJiuiw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extension-text-align": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-3.28.0.tgz", - "integrity": "sha512-P+KQMTtCpLFq9dRvy/fbyu2BGALulT/1HtsLbpFG4tKATaKa+cFnJ7rLZF7b3AdAMDNtXdnivxAtixAMBt2QWw==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-3.27.4.tgz", + "integrity": "sha512-ArfL7GLOXCSmrmiBiaWwAf7RPHXDdxLGPru29qKDLQDthjXcNOdlwlPBbolRu7mXwlSmaYpqWGrG75/AEat3mw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extension-text-style": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-3.28.0.tgz", - "integrity": "sha512-UreMyqZSv770+CXJK/l1qeHUdaNMQAVkxSOPWpiY9FiT8B4OQyjA7WBOlWrzbvVTzfJvXWk2Y3SWgVRx+/Cd9A==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-3.27.4.tgz", + "integrity": "sha512-Wmj64TQXY85gc7lUNbubW32sDCnVOJlpGraMeARRC9Z0EKBX1JpAxddo/64F17bn3kzLxXVszBFyLRcNgTdU2g==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extension-underline": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.28.0.tgz", - "integrity": "sha512-rwxCS6vTh2DJkNIYQX7JSrrRSmm76e2y48aZeuZO5ShkvLWMuJ3/zqDHRxAQVDiJhuE2Cp8NrTmPYlUc9YrT0A==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.27.4.tgz", + "integrity": "sha512-nRJGvRyEXDtINlHTW+C2oWcL3vmX1URVxAPpkD3Zwn5Rb/vEeOU/pk/w97I0iid816MR4iVbvl1XhbUVegK9gQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0" + "@tiptap/core": "3.27.4" } }, "node_modules/@tiptap/extensions": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.28.0.tgz", - "integrity": "sha512-DJT1khCK+O/pT1gQlAnoKAx6zwDkgv7GtnhSfkqm1/4KHC3x+SSJnBIgBl9oGHymA+DxWbW1EULU4V3d/kT2uQ==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.27.4.tgz", + "integrity": "sha512-d8opkg2iGtVwJmNGIqv0blfRxnvWOJp1brz+Z8CsP4ojSS2ZtaE46d6JSQ5OeJ7nMpjhT+9wh4UQcA7OSEO59w==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "3.28.0", - "@tiptap/pm": "3.28.0" + "@tiptap/core": "3.27.4", + "@tiptap/pm": "3.27.4" } }, "node_modules/@tiptap/pm": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.28.0.tgz", - "integrity": "sha512-ALcpwZMUdat9gjJKlpscpoqXStoLhU246LPEVBDvJdIsoUKvUu3MrzfXik2Y8mtSGfhjtm9O2TRkWxQiFVMwsQ==", + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.27.4.tgz", + "integrity": "sha512-UB8lcyomfWk7YGI2PZKNqcYXfyRA+PFj+QntlsUXyrsiA5JJIaE8SHKYjxKlGG/xtW3EtPm1b0p38T9Mk4xiFw==", "license": "MIT", "dependencies": { "prosemirror-changeset": "^2.4.1", @@ -5435,39 +5457,67 @@ } }, "node_modules/@tiptap/starter-kit": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.28.0.tgz", - "integrity": "sha512-pqvFpValV+ONtlu3l4s73ROm/tEjoGMmt6uHmSJaLbqTcMHkdWuR3flJ/5brr4IDHe1foxmNicMbRxlje7yBYw==", - "license": "MIT", - "dependencies": { - "@tiptap/core": "^3.28.0", - "@tiptap/extension-blockquote": "^3.28.0", - "@tiptap/extension-bold": "^3.28.0", - "@tiptap/extension-bullet-list": "^3.28.0", - "@tiptap/extension-code": "^3.28.0", - "@tiptap/extension-code-block": "^3.28.0", - "@tiptap/extension-document": "^3.28.0", - "@tiptap/extension-dropcursor": "^3.28.0", - "@tiptap/extension-gapcursor": "^3.28.0", - "@tiptap/extension-hard-break": "^3.28.0", - "@tiptap/extension-heading": "^3.28.0", - "@tiptap/extension-horizontal-rule": "^3.28.0", - "@tiptap/extension-italic": "^3.28.0", - "@tiptap/extension-link": "^3.28.0", - "@tiptap/extension-list": "^3.28.0", - "@tiptap/extension-list-item": "^3.28.0", - "@tiptap/extension-list-keymap": "^3.28.0", - "@tiptap/extension-ordered-list": "^3.28.0", - "@tiptap/extension-paragraph": "^3.28.0", - "@tiptap/extension-strike": "^3.28.0", - "@tiptap/extension-text": "^3.28.0", - "@tiptap/extension-underline": "^3.28.0", - "@tiptap/extensions": "^3.28.0", - "@tiptap/pm": "^3.28.0" + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.27.4.tgz", + "integrity": "sha512-/sb6rFxNt5BO4hWpUwvHh+Yh1kNyCQuuz3oDpGef5HUUjSdu9p9rfNiHWIUKBadK8VXuw5es7N+UlZ4hma+gvA==", + "license": "MIT", + "dependencies": { + "@tiptap/core": "^3.27.4", + "@tiptap/extension-blockquote": "^3.27.4", + "@tiptap/extension-bold": "^3.27.4", + "@tiptap/extension-bullet-list": "^3.27.4", + "@tiptap/extension-code": "^3.27.4", + "@tiptap/extension-code-block": "^3.27.4", + "@tiptap/extension-document": "^3.27.4", + "@tiptap/extension-dropcursor": "^3.27.4", + "@tiptap/extension-gapcursor": "^3.27.4", + "@tiptap/extension-hard-break": "^3.27.4", + "@tiptap/extension-heading": "^3.27.4", + "@tiptap/extension-horizontal-rule": "^3.27.4", + "@tiptap/extension-italic": "^3.27.4", + "@tiptap/extension-link": "^3.27.4", + "@tiptap/extension-list": "^3.27.4", + "@tiptap/extension-list-item": "^3.27.4", + "@tiptap/extension-list-keymap": "^3.27.4", + "@tiptap/extension-ordered-list": "^3.27.4", + "@tiptap/extension-paragraph": "^3.27.4", + "@tiptap/extension-strike": "^3.27.4", + "@tiptap/extension-text": "^3.27.4", + "@tiptap/extension-underline": "^3.27.4", + "@tiptap/extensions": "^3.27.4", + "@tiptap/pm": "^3.27.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-code-block": { + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.27.4.tgz", + "integrity": "sha512-a5caWfWN6Z6usy48vzJDDOhWoA6+rFFCHGpQM7jXn/7rRzYPcvBzTZUGptjEbltj4YqtrQ2tVwTJcCtbb+mknA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, + "peerDependencies": { + "@tiptap/core": "3.27.4", + "@tiptap/pm": "3.27.4" + } + }, + "node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-horizontal-rule": { + "version": "3.27.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.27.4.tgz", + "integrity": "sha512-2eQU/55nE5mhMJHALtLMuBL3dcVJUDVVT7n+uZYMaYE63BtCvC4VS08YLFSR7JZSVJIlgVAmdt5nAw0B+rEPNA==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.27.4", + "@tiptap/pm": "3.27.4" } }, "node_modules/@ts-morph/common": { @@ -6035,6 +6085,13 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/@types/big.js": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-7.0.0.tgz", + "integrity": "sha512-WfAGp7IbJvyB8EmWK4tJD24rJRAL6uVbw3LV/hJntFNam+os9KWKj0PzXo8rRRpjupYK8U0M8FoBB8dBhWF2dg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/cors": { "version": "2.8.17", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", @@ -6170,17 +6227,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz", - "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.64.0.tgz", + "integrity": "sha512-CGvQPBxN3wZLu6Rz2kFUpZeoCm78xUic92ck39KPePkO1NPOwjCqdQnm5Q87tpWw9vcBvW8XLrDXjH9PWYtJ3Q==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.65.0", - "@typescript-eslint/type-utils": "8.65.0", - "@typescript-eslint/utils": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0", + "@typescript-eslint/scope-manager": "8.64.0", + "@typescript-eslint/type-utils": "8.64.0", + "@typescript-eslint/utils": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -6193,22 +6250,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.65.0", + "@typescript-eslint/parser": "^8.64.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz", - "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.64.0.tgz", + "integrity": "sha512-KA0OshtlcCCXmbfqyZkM5pV3/WNraJf7DkJRLpyrmwPtud57H5BDX7C3k0LPSPxpprfRL+cJDGabF10mvNCoCw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.65.0", - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0", + "@typescript-eslint/scope-manager": "8.64.0", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/typescript-estree": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0", "debug": "^4.4.3" }, "engines": { @@ -6224,14 +6281,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz", - "integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.64.0.tgz", + "integrity": "sha512-tk4WpOJ6IEbGrVHaNmM0YRrwAD3exZlIK3iadQNAxh4YKk6jvUQ4ecq18n+v7+meh+cJ3j+D8nbk8sRKhlwLQg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.65.0", - "@typescript-eslint/types": "^8.65.0", + "@typescript-eslint/tsconfig-utils": "^8.64.0", + "@typescript-eslint/types": "^8.64.0", "debug": "^4.4.3" }, "engines": { @@ -6246,14 +6303,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz", - "integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.64.0.tgz", + "integrity": "sha512-CXEaFdYXjSTgKhisNkwCcJwTP8Pl+fmRrEQrri4nm3vU743bALrxzLmq7fHG/7e6a5xO0lDYeURpZmBuhHk54w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0" + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6264,9 +6321,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz", - "integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.64.0.tgz", + "integrity": "sha512-2yo8rRNKuzbVWQp5kslhANqZ2uDAeROQHBRZNPu8JDsHmeFNj/XJJhX/FhNUWmkHHvoNsKa6+tHJiig87EzsQw==", "dev": true, "license": "MIT", "engines": { @@ -6281,15 +6338,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz", - "integrity": "sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.64.0.tgz", + "integrity": "sha512-XWG4Fmmv/6SvyS9nH8jWrKs6terwJvE8cyRt1CzYYqzp9OrPhCT4cMc/f7C6RZCwG+qMmiffJS1/qJP8G1URtg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0", - "@typescript-eslint/utils": "8.65.0", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/typescript-estree": "8.64.0", + "@typescript-eslint/utils": "8.64.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -6306,9 +6363,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz", - "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.64.0.tgz", + "integrity": "sha512-qjhfuTfLXjA4IOzXvz0rTjT01BqEiIgPoUeMwiEjnaHKJMTNo8rH5pYW1a2L/0Dnux2fPC85AeyJoWaGa8WxTA==", "dev": true, "license": "MIT", "engines": { @@ -6320,16 +6377,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz", - "integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.64.0.tgz", + "integrity": "sha512-Pztpsn1aCE1oWDvDEfUk31nngvvF7vUB5SwHFEaZIFpvw7WJtqUHHL4plBZDA9HfWJJjL13BdG0YrJInTUvoVA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.65.0", - "@typescript-eslint/tsconfig-utils": "8.65.0", - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0", + "@typescript-eslint/project-service": "8.64.0", + "@typescript-eslint/tsconfig-utils": "8.64.0", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -6348,16 +6405,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.65.0.tgz", - "integrity": "sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.64.0.tgz", + "integrity": "sha512-aJUGVB3+U0htrrCjoA8qukw8cm8fNCGAxK/tVoS70k8aeb7DETKeFozRiVFIwEeN9WJLsjaP3ph8I60tY2XZoQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.65.0", - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0" + "@typescript-eslint/scope-manager": "8.64.0", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/typescript-estree": "8.64.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6372,13 +6429,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz", - "integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.64.0.tgz", + "integrity": "sha512-mrtuL8Nsn6gi2H4mo5KMTp823M+3Q19Ew/i+Zlikq20tIMm99C3Ez0dCmkWWnxut20esQvTg8aUSEhMcAOXhEw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/types": "8.64.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -6984,6 +7041,19 @@ "node": ">=0.6" } }, + "node_modules/big.js": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-7.0.1.tgz", + "integrity": "sha512-iFgV784tD8kq4ccF1xtNMZnXeZzVuXWWM+ERFzKQjv+A5G9HC8CY3DuV45vgzFFcW+u2tIvmF95+AzWgs6BjCg==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bigjs" + } + }, "node_modules/binary": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", @@ -7540,9 +7610,9 @@ } }, "node_modules/cm-chessboard": { - "version": "8.12.14", - "resolved": "https://registry.npmjs.org/cm-chessboard/-/cm-chessboard-8.12.14.tgz", - "integrity": "sha512-8yMu9IF7s82RkItRofvwgs9zdLyj7uoOgBNYpn26H3Zuo4q6bKm6czvzZvUeRieVlkPph4JrwdA3PG91jdMq8Q==", + "version": "8.12.12", + "resolved": "https://registry.npmjs.org/cm-chessboard/-/cm-chessboard-8.12.12.tgz", + "integrity": "sha512-AQ68/xn5FpIBTI7ySLQ0S/bKbzPRFZTCgNs8gG8fuxvg3DQ+R3kVUX7hWQUm1KrVyUoPuxTx1BuAqhVJoDtvoQ==", "license": "MIT" }, "node_modules/cm-pgn": { @@ -8439,9 +8509,9 @@ } }, "node_modules/eslint-plugin-simple-import-sort": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-14.0.0.tgz", - "integrity": "sha512-NUJO0+XFCkk+o5EsAJruTgnfMEpeWrPWeJS15UVF60GgXmqz1BJ9/3hzlvG7lkL8Bubzos5cCLptThbFfPnSMQ==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-13.0.0.tgz", + "integrity": "sha512-McAc+/Nlvcg4byY/CABGH8kqnefWBj8s3JA2okEtz8ixbECQgU46p0HkTUKa4YS7wvgGceimlc34p1nXqbWqtA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -12577,9 +12647,9 @@ } }, "node_modules/prettier": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", - "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "version": "3.9.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.5.tgz", + "integrity": "sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==", "dev": true, "license": "MIT", "bin": { @@ -14043,9 +14113,9 @@ } }, "node_modules/tar": { - "version": "7.5.20", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.20.tgz", - "integrity": "sha512-9FcyK4PA6+WbzlTM9WhQm6vB5W7cP7dUiPsv1g7YDwEQnQ1CGpK3MGlKk/ITVWMk05kHZuBhmVhiv8LZoy/PFQ==", + "version": "7.5.16", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.16.tgz", + "integrity": "sha512-56adEpPMouktRlBLXiaYFFzZ/3+JXa8P9n7WbR+ibIjtviN55mEaOkiysCnPnWm+7kkui1Dn8J9l+g6zV8731w==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -14311,16 +14381,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.65.0.tgz", - "integrity": "sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.64.0.tgz", + "integrity": "sha512-0qg+pDNMnqYzqH9AnNK+39tejHvsShUOUUoRUgtnTGE7QuMZhiFDnozq8nHJVq+Wae6NMLKNWLg5WmkcC/ndyQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.65.0", - "@typescript-eslint/parser": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0", - "@typescript-eslint/utils": "8.65.0" + "@typescript-eslint/eslint-plugin": "8.64.0", + "@typescript-eslint/parser": "8.64.0", + "@typescript-eslint/typescript-estree": "8.64.0", + "@typescript-eslint/utils": "8.64.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" diff --git a/client/package.json b/client/package.json index 7ee71cce38..5aa2d87983 100644 --- a/client/package.json +++ b/client/package.json @@ -32,20 +32,20 @@ "get-available-languages": "npm run ts -- cli/get-available-languages.ts" }, "dependencies": { - "@angular/animations": "^22.0.7", - "@angular/cdk": "^22.0.5", - "@angular/common": "^22.0.7", - "@angular/compiler": "^22.0.7", - "@angular/core": "^22.0.7", - "@angular/forms": "^22.0.7", - "@angular/material": "^22.0.5", - "@angular/material-date-fns-adapter": "^22.0.5", - "@angular/platform-browser": "^22.0.7", - "@angular/platform-browser-dynamic": "^22.0.7", - "@angular/router": "^22.0.7", - "@angular/service-worker": "^22.0.7", - "@cantoo/pdf-lib": "^2.7.4", - "@coreui/angular-chartjs": "~5.7.6", + "@angular/animations": "^22.0.6", + "@angular/cdk": "^22.0.4", + "@angular/common": "^22.0.6", + "@angular/compiler": "^22.0.6", + "@angular/core": "^22.0.6", + "@angular/forms": "^22.0.6", + "@angular/material": "^22.0.4", + "@angular/material-date-fns-adapter": "^22.0.4", + "@angular/platform-browser": "^22.0.6", + "@angular/platform-browser-dynamic": "^22.0.6", + "@angular/router": "^22.0.6", + "@angular/service-worker": "^22.0.6", + "@cantoo/pdf-lib": "^2.7.2", + "@coreui/angular-chartjs": "~5.7.4", "@coreui/chartjs": "^4.1.0", "@date-fns/tz": "^1.5.0", "@intevation/tiptap-extension-office-paste": "^0.1.2", @@ -54,29 +54,30 @@ "@ngx-translate/core": "^17.0.0", "@ngx-translate/http-loader": "^17.0.0", "@openslides/motion-diff": "file:../packages/openslides-motion-diff", - "@tiptap/core": "^3.28.0", + "@tiptap/core": "^3.27.4", "@tiptap/extension-blockquote": "^3.27.4", - "@tiptap/extension-color": "^3.28.0", - "@tiptap/extension-highlight": "^3.28.0", - "@tiptap/extension-image": "^3.28.0", + "@tiptap/extension-color": "^3.27.4", + "@tiptap/extension-highlight": "^3.27.4", + "@tiptap/extension-image": "^3.27.4", "@tiptap/extension-link": "^3.23.4", "@tiptap/extension-list": "^3.22.4", - "@tiptap/extension-subscript": "^3.28.0", - "@tiptap/extension-superscript": "^3.28.0", - "@tiptap/extension-table": "^3.28.0", - "@tiptap/extension-text-align": "^3.28.0", + "@tiptap/extension-subscript": "^3.27.4", + "@tiptap/extension-superscript": "^3.27.4", + "@tiptap/extension-table": "^3.27.4", + "@tiptap/extension-text-align": "^3.27.4", "@tiptap/extension-text-style": "^3.4.2", "@tiptap/extensions": "^3.22.4", - "@tiptap/pm": "^3.28.0", - "@tiptap/starter-kit": "^3.28.0", + "@tiptap/pm": "^3.27.3", + "@tiptap/starter-kit": "^3.27.4", "@tsparticles/angular": "^3.0.0", "@tsparticles/engine": "^3.9.1", "@tsparticles/plugin-emitters": "^3.9.1", "@tsparticles/shape-text": "^3.9.1", "@tsparticles/slim": "^3.9.1", + "big.js": "^7.0.1", "chart.js": "^4.5.1", "cm-chess": "^3.6.3", - "cm-chessboard": "^8.12.14", + "cm-chessboard": "^8.12.12", "date-fns": "^4.4.0", "exceljs": "^4.4.0", "file-saver": "^2.0.5", @@ -103,11 +104,12 @@ "@angular-eslint/eslint-plugin-template": "^22.1.0", "@angular-eslint/schematics": "^22.1.0", "@angular-eslint/template-parser": "^22.1.0", - "@angular/build": "^22.0.7", - "@angular/cli": "^22.0.7", - "@angular/compiler-cli": "^22.0.7", - "@angular/language-server": "^22.0.7", + "@angular/build": "^22.0.6", + "@angular/cli": "^22.0.6", + "@angular/compiler-cli": "^22.0.6", + "@angular/language-server": "^22.0.6", "@stylistic/eslint-plugin": "^5.10.0", + "@types/big.js": "^7.0.0", "@types/file-saver": "^2.0.7", "@types/jasmine": "~5.1.15", "@types/js-yaml": "^4.0.9", @@ -116,14 +118,14 @@ "@types/qrcode": "^1.5.6", "@types/tinycolor2": "^1.4.6", "@types/video.js": "^7.3.58", - "@typescript-eslint/eslint-plugin": "^8.65.0", - "@typescript-eslint/parser": "^8.65.0", + "@typescript-eslint/eslint-plugin": "^8.64.0", + "@typescript-eslint/parser": "^8.64.0", "@vendure/ngx-translate-extract": "^10.2.0", "angular-eslint": "^22.1.0", "eslint": "^9.39.5", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.6", - "eslint-plugin-simple-import-sort": "^14.0.0", + "eslint-plugin-simple-import-sort": "^13.0.0", "eslint-plugin-unused-imports": "^4.4.1", "fetch-mock": "^12.6.0", "istanbul-lib-instrument": "^6.0.3", @@ -134,13 +136,13 @@ "karma-coverage": "~2.2.1", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.2.0", - "prettier": "^3.9.6", + "prettier": "^3.9.5", "ts-dedent": "^2.3.0", "ts-morph": "^28.0.0", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", "typescript": "^6.0.3", - "typescript-eslint": "^8.65.0" + "typescript-eslint": "^8.64.0" }, "browser": { "fs": false diff --git a/client/src/app/domain/definitions/meeting-settings-defaults.ts b/client/src/app/domain/definitions/meeting-settings-defaults.ts index 3dd6d913cf..8eaa8ac779 100644 --- a/client/src/app/domain/definitions/meeting-settings-defaults.ts +++ b/client/src/app/domain/definitions/meeting-settings-defaults.ts @@ -1,70 +1,95 @@ // THIS FILE IS GENERATED AUTOMATICALLY. DO NOT CHANGE IT MANUALLY. +import { _ } from '@ngx-translate/core'; + export const meetingSettingsDefaults: Record = { - name: 'OpenSlides', + name: `Meeting title`, enable_anonymous: false, - users_pdf_wlan_encryption: 'WPA', + export_csv_separator: `;`, + export_csv_encoding: `utf-8`, + export_pdf_pagenumber_alignment: `center`, + export_pdf_fontsize: 10, + export_pdf_pagesize: `A4`, + export_pdf_line_height: 1.25, + export_pdf_page_margin_left: 20, + export_pdf_page_margin_top: 25, + export_pdf_page_margin_right: 20, + export_pdf_page_margin_bottom: 20, agenda_enable_numbering: true, - agenda_numeral_system: 'arabic', - agenda_item_creation: 'default_no', - agenda_new_items_default_visibility: 'internal', - agenda_show_subtitles: false, - agenda_show_topic_navigation_on_detail_view: false, + agenda_numeral_system: `arabic`, + agenda_item_creation: `default_no`, + agenda_new_items_default_visibility: `internal`, agenda_show_internal_items_on_projector: false, - list_of_speakers_initially_closed: false, + agenda_show_topic_navigation_on_detail_view: false, + agenda_show_subtitles: false, + list_of_speakers_enable_point_of_order_speakers: true, + list_of_speakers_enable_pro_contra_speech: false, + list_of_speakers_can_set_contribution_self: false, list_of_speakers_present_users_only: false, - list_of_speakers_allow_multiple_speakers: false, + list_of_speakers_speaker_note_for_everyone: true, + list_of_speakers_initially_closed: false, list_of_speakers_show_first_contribution: false, list_of_speakers_hide_contribution_count: false, - list_of_speakers_enable_pro_contra_speech: false, - list_of_speakers_can_set_contribution_self: false, + list_of_speakers_couple_countdown: true, list_of_speakers_show_amount_of_speakers_on_slide: true, - list_of_speakers_amount_next_on_projector: -1, list_of_speakers_amount_last_on_projector: 0, - list_of_speakers_couple_countdown: true, + list_of_speakers_amount_next_on_projector: -1, projector_countdown_warning_time: 0, projector_countdown_default_time: 60, - list_of_speakers_enable_point_of_order_speakers: true, - list_of_speakers_speaker_note_for_everyone: true, - list_of_speakers_can_create_point_of_order_for_others: false, - list_of_speakers_closing_disables_point_of_order: false, - list_of_speakers_enable_point_of_order_categories: false, - motions_preamble: 'The assembly may decide:', - motions_reason_required: false, - motions_default_line_numbering: 'outside', + motions_preamble: _(`The assembly may decide:`), + motions_default_line_numbering: `outside`, motions_line_length: 85, - motions_recommendation_text_mode: 'diff', - motions_show_referring_motions: true, - motions_show_sequential_number: true, - motions_enable_restricted_editor_for_non_manager: true, + motions_reason_required: false, motions_enable_text_on_projector: true, motions_enable_reason_on_projector: false, motions_enable_recommendation_on_projector: true, - motions_enable_sidebox_on_projector: false, + motions_show_referring_motions: true, motions_hide_metadata_background: false, - motions_number_with_blank: false, + motions_enable_sidebox_on_projector: false, + motions_show_sequential_number: true, + motions_recommendation_text_mode: `diff`, + motions_default_sorting: `number`, + motions_number_type: `per_category`, motions_number_min_digits: 2, - motions_number_type: 'per_category', - motions_default_sorting: 'number', + motions_number_with_blank: false, motions_amendments_enabled: true, motions_amendments_in_main_list: true, + motions_amendments_prefix: _(`-Ä`), + motions_amendments_text_mode: `paragraph`, motions_amendments_multiple_paragraphs: true, motions_amendments_of_amendments: false, - motions_amendments_prefix: '-Ä', - motions_amendments_text_mode: 'paragraph', motions_supporters_min_amount: 0, - poll_default_live_voting_enabled: false, - motions_enable_origin_motion_display: false, - motions_origin_motion_toggle_default: false, - assignment_poll_default_method: 'selection', + motions_block_slide_columns: 3, + motion_poll_default_type: `pseudoanonymous`, + motion_poll_default_method: `YNA`, + motion_poll_default_onehundred_percent_base: `YNA`, + motion_poll_ballot_paper_selection: `CUSTOM_NUMBER`, + motion_poll_ballot_paper_number: 8, + motion_poll_default_backend: `fast`, + motions_export_title: _(`Motions`), + motions_export_submitter_recommendation: true, + motions_export_follow_recommendation: false, + assignment_poll_default_method: `Y`, + assignment_poll_default_type: `pseudoanonymous`, + assignment_poll_default_onehundred_percent_base: `valid`, + assignment_poll_sort_poll_result_by_votes: true, assignment_poll_add_candidates_to_list_of_speakers: false, - users_allow_self_set_present: true, + assignment_poll_enable_max_votes_per_option: false, + assignment_poll_default_backend: `fast`, + assignment_poll_ballot_paper_selection: `CUSTOM_NUMBER`, + assignment_poll_ballot_paper_number: 8, + assignments_export_title: _(`Elections`), users_enable_presence_view: false, + users_allow_self_set_present: true, users_enable_vote_weight: false, - users_email_sender: 'OpenSlides', - users_email_subject: 'OpenSlides access data', - users_email_body: - 'Dear {name},\n\nthis is your personal OpenSlides login:\n\n{url}\nUsername: {username}\nPassword: {password}\n\n\nThis email was generated automatically.', + users_enable_vote_delegations: false, + users_pdf_welcometitle: _(`Welcome to OpenSlides`), + users_pdf_welcometext: _(`[Place for your welcome and help text.]`), + users_pdf_wlan_encryption: `WPA`, + users_pdf_url: `https://example.com`, + users_email_sender: `OpenSlides`, + users_email_subject: _(`OpenSlides access data`), + users_email_body: `Dear {name},\n\nthis is your personal OpenSlides login:\n\n{url}\nUsername: {username}\nPassword: {password}\n\n\nThis email was generated automatically.`, conference_show: false, conference_los_restriction: true, conference_auto_connect: false, @@ -74,24 +99,8 @@ export const meetingSettingsDefaults: Record = { conference_enable_helpdesk: false, applause_enable: false, applause_show_level: false, - applause_type: 'applause-type-bar', + applause_type: `applause-type-bar`, applause_min_amount: 1, applause_max_amount: 0, - applause_timeout: 5, - export_csv_separator: ';', - export_csv_encoding: 'utf-8', - export_pdf_pagenumber_alignment: 'center', - export_pdf_fontsize: 10, - export_pdf_line_height: 1.25, - export_pdf_page_margin_left: 20, - export_pdf_page_margin_right: 20, - export_pdf_page_margin_top: 25, - export_pdf_page_margin_bottom: 20, - export_pdf_pagesize: 'A4', - motions_export_title: 'Motions', - motions_export_submitter_recommendation: true, - motions_export_follow_recommendation: false, - assignments_export_title: 'Elections', - users_pdf_welcometitle: 'Welcome to OpenSlides', - users_pdf_welcometext: '[Place for your welcome and help text.]' + applause_timeout: 5 }; diff --git a/client/src/app/domain/definitions/permission-relations.ts b/client/src/app/domain/definitions/permission-relations.ts index 1da7f101d1..02e753edbb 100644 --- a/client/src/app/domain/definitions/permission-relations.ts +++ b/client/src/app/domain/definitions/permission-relations.ts @@ -4,13 +4,20 @@ import { PermissionsMap } from './permission.config'; export const permissionChildren: PermissionsMap = { 'agenda_item.can_manage': [Permission.agendaItemCanSeeInternal, Permission.agendaItemCanSee], + 'agenda_item.can_manage_polls': [ + Permission.agendaItemCanSeePolls, + Permission.agendaItemCanSeeInternal, + Permission.agendaItemCanSee + ], 'agenda_item.can_see': [], 'agenda_item.can_see_internal': [Permission.agendaItemCanSee], + 'agenda_item.can_see_polls': [Permission.agendaItemCanSeeInternal, Permission.agendaItemCanSee], 'assignment.can_manage': [Permission.assignmentCanNominateOther, Permission.assignmentCanSee], - 'assignment.can_manage_polls': [Permission.assignmentCanSee], + 'assignment.can_manage_polls': [Permission.assignmentCanSeePolls, Permission.assignmentCanSee], 'assignment.can_nominate_other': [Permission.assignmentCanSee], 'assignment.can_nominate_self': [Permission.assignmentCanSee], 'assignment.can_see': [], + 'assignment.can_see_polls': [Permission.assignmentCanSee], 'chat.can_manage': [], 'list_of_speakers.can_be_speaker': [], 'list_of_speakers.can_manage': [Permission.listOfSpeakersCanSee], @@ -37,12 +44,12 @@ export const permissionChildren: PermissionsMap = { Permission.motionCanForward ], 'motion.can_manage_metadata': [Permission.motionCanSee], - 'motion.can_manage_polls': [Permission.motionCanSee], + 'motion.can_manage_polls': [Permission.motionCanSeePolls, Permission.motionCanSee], 'motion.can_see': [], 'motion.can_see_internal': [Permission.motionCanSee], 'motion.can_see_origin': [Permission.motionCanSee], + 'motion.can_see_polls': [Permission.motionCanSee], 'motion.can_support': [Permission.motionCanSee], - 'poll.can_manage': [Permission.pollCanSeeProgress], 'poll.can_see_progress': [], 'projector.can_manage': [Permission.projectorCanSee], 'projector.can_see': [], @@ -62,8 +69,19 @@ export const permissionChildren: PermissionsMap = { export const permissionParents: PermissionsMap = { 'agenda_item.can_manage': [], - 'agenda_item.can_see': [Permission.agendaItemCanSeeInternal, Permission.agendaItemCanManage], - 'agenda_item.can_see_internal': [Permission.agendaItemCanManage], + 'agenda_item.can_manage_polls': [], + 'agenda_item.can_see': [ + Permission.agendaItemCanSeeInternal, + Permission.agendaItemCanManage, + Permission.agendaItemCanSeePolls, + Permission.agendaItemCanManagePolls + ], + 'agenda_item.can_see_internal': [ + Permission.agendaItemCanManage, + Permission.agendaItemCanSeePolls, + Permission.agendaItemCanManagePolls + ], + 'agenda_item.can_see_polls': [Permission.agendaItemCanManagePolls], 'assignment.can_manage': [], 'assignment.can_manage_polls': [], 'assignment.can_nominate_other': [Permission.assignmentCanManage], @@ -71,9 +89,11 @@ export const permissionParents: PermissionsMap = { 'assignment.can_see': [ Permission.assignmentCanNominateOther, Permission.assignmentCanManage, + Permission.assignmentCanSeePolls, Permission.assignmentCanManagePolls, Permission.assignmentCanNominateSelf ], + 'assignment.can_see_polls': [Permission.assignmentCanManagePolls], 'chat.can_manage': [], 'list_of_speakers.can_be_speaker': [], 'list_of_speakers.can_manage': [], @@ -101,15 +121,16 @@ export const permissionParents: PermissionsMap = { Permission.motionCanCreate, Permission.motionCanCreateAmendments, Permission.motionCanForward, + Permission.motionCanSeePolls, Permission.motionCanManagePolls, Permission.motionCanSupport, Permission.motionCanSeeOrigin ], 'motion.can_see_internal': [Permission.motionCanManage], 'motion.can_see_origin': [], + 'motion.can_see_polls': [Permission.motionCanManagePolls], 'motion.can_support': [], - 'poll.can_manage': [], - 'poll.can_see_progress': [Permission.pollCanManage], + 'poll.can_see_progress': [], 'projector.can_manage': [], 'projector.can_see': [Permission.projectorCanManage], 'tag.can_manage': [], diff --git a/client/src/app/domain/definitions/permission.config.ts b/client/src/app/domain/definitions/permission.config.ts index 4255c5d966..963f4f9af3 100644 --- a/client/src/app/domain/definitions/permission.config.ts +++ b/client/src/app/domain/definitions/permission.config.ts @@ -89,7 +89,12 @@ Optional combination of requests to speak with presence status is possible. ( > { display_name: _(`Can manage polls`), help_text: _(`Can create, change, start/stop and delete polls.`), - value: Permission.pollCanManage + value: Permission.agendaItemCanManagePolls + }, + { + display_name: _(`Can see ballot results`), + help_text: _(`Can see unpublished ballot results.`), + value: Permission.agendaItemCanSeePolls }, { display_name: _(`Can see moderation notes`), @@ -180,6 +185,11 @@ Further requirements: display_name: _(`Can manage motion polls`), help_text: _(`Can create, modify, start/stop and delete votings.`), value: Permission.motionCanManagePolls + }, + { + display_name: _(`Can see ballot results`), + help_text: _(`Can see unpublished ballot results.`), + value: Permission.motionCanSeePolls } ] }, @@ -208,6 +218,11 @@ Note: The right to vote is defined directly in the ballot.` help_text: _(`Can create, modify, start/stop and delete ballots.`), value: Permission.assignmentCanManagePolls }, + { + display_name: _(`Can see ballot results`), + help_text: _(`Can see unpublished ballot results.`), + value: Permission.assignmentCanSeePolls + }, { display_name: _(`Can nominate another participant`), help_text: _(`Can nominate other participants as candidates. @@ -335,6 +350,11 @@ Note: For privacy reasons, it is recommended to limit the rights to view the His Note: The chat menu item becomes visible to all participants, except admins, as soon as a chat has been created.`), value: Permission.chatCanManage + }, + { + display_name: _(`Can see poll progress`), + help_text: _(`Can see the progress bar of a running poll.`), + value: Permission.pollCanSeeProgress } ] } diff --git a/client/src/app/domain/definitions/permission.ts b/client/src/app/domain/definitions/permission.ts index 653a575683..86328d059f 100644 --- a/client/src/app/domain/definitions/permission.ts +++ b/client/src/app/domain/definitions/permission.ts @@ -5,13 +5,16 @@ */ export enum Permission { agendaItemCanManage = `agenda_item.can_manage`, + agendaItemCanManagePolls = `agenda_item.can_manage_polls`, agendaItemCanSee = `agenda_item.can_see`, agendaItemCanSeeInternal = `agenda_item.can_see_internal`, + agendaItemCanSeePolls = `agenda_item.can_see_polls`, assignmentCanManage = `assignment.can_manage`, assignmentCanManagePolls = `assignment.can_manage_polls`, assignmentCanNominateOther = `assignment.can_nominate_other`, assignmentCanNominateSelf = `assignment.can_nominate_self`, assignmentCanSee = `assignment.can_see`, + assignmentCanSeePolls = `assignment.can_see_polls`, chatCanManage = `chat.can_manage`, listOfSpeakersCanBeSpeaker = `list_of_speakers.can_be_speaker`, listOfSpeakersCanManage = `list_of_speakers.can_manage`, @@ -35,8 +38,8 @@ export enum Permission { motionCanSee = `motion.can_see`, motionCanSeeInternal = `motion.can_see_internal`, motionCanSeeOrigin = `motion.can_see_origin`, + motionCanSeePolls = `motion.can_see_polls`, motionCanSupport = `motion.can_support`, - pollCanManage = `poll.can_manage`, pollCanSeeProgress = `poll.can_see_progress`, projectorCanManage = `projector.can_manage`, projectorCanSee = `projector.can_see`, diff --git a/client/src/app/domain/models/meeting-users/meeting-user.ts b/client/src/app/domain/models/meeting-users/meeting-user.ts index 2d2b26aaea..fe9fec6fb0 100644 --- a/client/src/app/domain/models/meeting-users/meeting-user.ts +++ b/client/src/app/domain/models/meeting-users/meeting-user.ts @@ -24,8 +24,9 @@ export class MeetingUser extends BaseDecimalModel { public motion_supporter_ids!: Id[]; // (motion_supporter/meeting_user_id); public submitted_motion_ids!: Id[]; // (motion_submitter/meeting_user_id)[]; public assignment_candidate_ids!: Id[]; // (assignment_candidate/meeting_user_id)[]; - public vote_delegated_vote_ids!: Id[]; public vote_delegations_from_ids!: Id[]; // meeting_user/vote_delegated_to_id; + public acting_ballot_ids: Id[]; + public represented_ballot_ids: Id[]; public chat_message_ids!: Id[]; // (chat_message/meeting_user_id)[]; public structure_level_ids!: Id[]; // structure_level/meeting_user_ids @@ -52,6 +53,8 @@ export class MeetingUser extends BaseDecimalModel { `assignment_candidate_ids`, `vote_delegated_to_id`, `vote_delegations_from_ids`, + `acting_ballot_ids`, + `represented_ballot_ids`, `chat_message_ids`, `group_ids`, `structure_level_ids` diff --git a/client/src/app/domain/models/meetings/meeting-poll-default.ts b/client/src/app/domain/models/meetings/meeting-poll-default.ts new file mode 100644 index 0000000000..7344f1ee6b --- /dev/null +++ b/client/src/app/domain/models/meetings/meeting-poll-default.ts @@ -0,0 +1,37 @@ +import { HasMeetingId } from '../../interfaces'; +import { BaseModel } from '../base/base-model'; +import { PollVisibility } from '../poll'; +import { BaseOnehundredPercentBase } from '../poll/poll-config-types'; + +export class MeetingPollDefault extends BaseModel { + public static COLLECTION = `meeting_poll_default`; + + public sort_result_by_votes: boolean; + + public allow_abstain!: boolean; + public allow_nota: boolean; + public visibility: PollVisibility; + public strike_out: boolean; + public onehundred_percent_base: BaseOnehundredPercentBase; + public group_ids: number[]; + public display_chart: string; + + public constructor(input?: Partial) { + super(MeetingPollDefault.COLLECTION, input); + } + + public static readonly REQUESTABLE_FIELDS: (keyof MeetingPollDefault)[] = [ + `id`, + `sort_result_by_votes`, + `visibility`, + `allow_abstain`, + `allow_nota`, + `strike_out`, + `onehundred_percent_base`, + `group_ids`, + `display_chart`, + `meeting_id` + ]; +} + +export interface MeetingPollDefault extends HasMeetingId {} diff --git a/client/src/app/domain/models/meetings/meeting.constants.ts b/client/src/app/domain/models/meetings/meeting.constants.ts index d38548ec21..1832cbfbba 100644 --- a/client/src/app/domain/models/meetings/meeting.constants.ts +++ b/client/src/app/domain/models/meetings/meeting.constants.ts @@ -3,16 +3,6 @@ import { PROJECTIONDEFAULTS, ProjectiondefaultValue } from '../projector/project export type ExportCsvEncoding = `utf-8` | `iso-8859-15`; -/** - * Server side ballot choice definitions. - * Server-defined methods to determine the number of ballots to print - * Options are: - * - NUMBER_OF_DELEGATES Amount of users belonging to the predefined 'delegates' group (group id 2) - * - NUMBER_OF_ALL_PARTICIPANTS The amount of all registered users - * - CUSTOM_NUMBER a given number of ballots - */ -export type BallotPaperSelection = `NUMBER_OF_DELEGATES` | `NUMBER_OF_ALL_PARTICIPANTS` | `CUSTOM_NUMBER`; - export type ViewMeetingMediafileUsageKey = `logo_${LogoPlace}` | `font_${FontPlace}`; export type MeetingMediafileUsageIdKey = `${ViewMeetingMediafileUsageKey}_id`; diff --git a/client/src/app/domain/models/meetings/meeting.ts b/client/src/app/domain/models/meetings/meeting.ts index f88342a09d..aea5708e90 100644 --- a/client/src/app/domain/models/meetings/meeting.ts +++ b/client/src/app/domain/models/meetings/meeting.ts @@ -4,14 +4,8 @@ import { HasProperties } from '../../interfaces/has-properties'; import { AgendaItemCreation, AgendaItemType } from '../agenda/agenda-item'; import { BaseModel } from '../base/base-model'; import { ChangeRecoMode, LineNumberingMode } from '../motions/motions.constants'; -import { PollBackendDurationType, PollMethod, PollPercentBase, PollType } from '../poll/poll-constants'; import { ApplauseType } from './applause'; -import { - BallotPaperSelection, - ExportCsvEncoding, - MeetingDefaultProjectorIdsKey, - MeetingMediafileUsageIdKey -} from './meeting.constants'; +import { ExportCsvEncoding, MeetingDefaultProjectorIdsKey, MeetingMediafileUsageIdKey } from './meeting.constants'; export class Settings { // Old "general_*" configs @@ -144,16 +138,7 @@ export class Settings { public motions_create_enable_additional_submitter_text: boolean; public motions_enable_restricted_editor_for_manager: boolean; public motions_enable_restricted_editor_for_non_manager: boolean; - - public motion_poll_ballot_paper_selection!: BallotPaperSelection; - public motion_poll_ballot_paper_number!: number; - public motion_poll_default_type!: PollType; - public motion_poll_default_onehundred_percent_base!: PollPercentBase; - public motion_poll_default_group_ids!: Id[]; // (group/used_as_motion_poll_default_id)[]; - public motion_poll_default_backend!: PollBackendDurationType; - public motion_poll_default_method!: PollMethod; - public motion_poll_projection_name_order_first!: `first_name` | `last_name`; - public motion_poll_projection_max_columns!: number; + public motion_poll_config_id: Id; // Users public users_enable_presence_view!: boolean; @@ -178,30 +163,20 @@ export class Settings { public assignments_export_title!: string; public assignments_export_preamble!: string; - public assignment_poll_ballot_paper_selection!: BallotPaperSelection; - public assignment_poll_ballot_paper_number!: number; public assignment_poll_add_candidates_to_list_of_speakers!: boolean; - public assignment_poll_enable_max_votes_per_option!: boolean; - public assignment_poll_sort_poll_result_by_votes!: boolean; - public assignment_poll_default_type!: PollType; - public assignment_poll_default_method!: PollMethod; - public assignment_poll_default_onehundred_percent_base!: PollPercentBase; - public assignment_poll_default_group_ids!: Id[]; // (group/used_as_assignment_poll_default_id)[]; - public assignment_poll_default_backend!: PollBackendDurationType; + public assignment_poll_default_method: string; + public assignment_poll_config_id: Id; // topic poll - public topic_poll_default_group_ids: Id[]; // (group/used_as_poll_default_id)[]; - - // default poll - public poll_ballot_paper_selection: BallotPaperSelection; - public poll_ballot_paper_number: number; - public poll_sort_poll_result_by_votes: boolean; - public poll_default_type: PollType; - public poll_default_method: PollMethod; - public poll_default_onehundred_percent_base: PollPercentBase; - public poll_default_group_ids: Id[]; // (group/used_as_poll_default_id)[]; - public poll_default_backend: PollBackendDurationType; + public topic_poll_default_method: string; + public topic_poll_config_id: Id; + + // General poll settings public poll_default_live_voting_enabled: boolean; + public poll_enable_max_votes_per_option: boolean; + public poll_default_allow_invalid: boolean; + public poll_default_allow_vote_split: boolean; + public poll_projection_name_order_first: `first_name` | `last_name`; // SSO public external_id!: string; @@ -411,17 +386,6 @@ export class Meeting extends BaseModel { `motions_export_follow_recommendation`, `motions_enable_restricted_editor_for_manager`, `motions_enable_restricted_editor_for_non_manager`, - `motion_poll_ballot_paper_selection`, - `motion_poll_ballot_paper_number`, - `motion_poll_default_type`, - `motion_poll_default_method`, - `motion_poll_default_onehundred_percent_base`, - `motion_poll_default_group_ids`, - `motion_poll_default_backend`, - `motion_poll_projection_name_order_first`, - `motion_poll_projection_max_columns`, - `poll_candidate_list_ids`, - `poll_candidate_ids`, `meeting_user_ids`, `users_enable_presence_view`, `users_enable_vote_weight`, @@ -442,26 +406,17 @@ export class Meeting extends BaseModel { `users_forbid_delegator_to_vote`, `assignments_export_title`, `assignments_export_preamble`, - `assignment_poll_ballot_paper_selection`, - `assignment_poll_ballot_paper_number`, `assignment_poll_add_candidates_to_list_of_speakers`, - `assignment_poll_enable_max_votes_per_option`, - `assignment_poll_sort_poll_result_by_votes`, - `assignment_poll_default_type`, `assignment_poll_default_method`, - `assignment_poll_default_onehundred_percent_base`, - `assignment_poll_default_group_ids`, - `assignment_poll_default_backend`, - `poll_ballot_paper_selection`, - `poll_ballot_paper_number`, - `poll_sort_poll_result_by_votes`, - `poll_default_type`, - `poll_default_method`, - `poll_default_onehundred_percent_base`, - `poll_default_group_ids`, - `poll_default_backend`, + `assignment_poll_config_id`, + `motion_poll_config_id`, + `topic_poll_default_method`, + `topic_poll_config_id`, + `poll_enable_max_votes_per_option`, `poll_default_live_voting_enabled`, - `topic_poll_default_group_ids`, + `poll_default_allow_invalid`, + `poll_default_allow_vote_split`, + `poll_projection_name_order_first`, `projector_ids`, `all_projection_ids`, `projector_message_ids`, @@ -490,8 +445,6 @@ export class Meeting extends BaseModel { `motion_change_recommendation_ids`, `motion_state_ids`, `poll_ids`, - `option_ids`, - `vote_ids`, `assignment_ids`, `assignment_candidate_ids`, `personal_note_ids`, @@ -536,7 +489,6 @@ export class Meeting extends BaseModel { `default_projector_countdown_ids`, `default_projector_assignment_poll_ids`, `default_projector_motion_poll_ids`, - `default_projector_poll_ids`, `default_group_id`, `admin_group_id`, `anonymous_group_id`, diff --git a/client/src/app/domain/models/poll-candidate-lists/poll-candidate-list.ts b/client/src/app/domain/models/poll-candidate-lists/poll-candidate-list.ts deleted file mode 100644 index fbfeff3909..0000000000 --- a/client/src/app/domain/models/poll-candidate-lists/poll-candidate-list.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Id } from '../../definitions/key-types'; -import { HasMeetingId } from '../../interfaces'; -import { BaseModel } from '../base/base-model'; - -export class PollCandidateList extends BaseModel { - public static COLLECTION = `poll_candidate_list`; - - public option_id!: Id; // option/content_object_id; - public poll_candidate_ids!: Id[]; // poll_candidate/poll_candidate_list_id; - - public constructor(input?: any) { - super(PollCandidateList.COLLECTION, input); - } - - public static readonly REQUESTABLE_FIELDS: (keyof PollCandidateList)[] = [ - `id`, - `poll_candidate_ids`, - `meeting_id`, - `option_id` - ]; -} -export interface PollCandidateList extends HasMeetingId {} diff --git a/client/src/app/domain/models/poll-candidate-lists/poll-candidate.ts b/client/src/app/domain/models/poll-candidate-lists/poll-candidate.ts deleted file mode 100644 index 5b879d2774..0000000000 --- a/client/src/app/domain/models/poll-candidate-lists/poll-candidate.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Id } from '../../definitions/key-types'; -import { HasMeetingId } from '../../interfaces'; -import { BaseModel } from '../base/base-model'; - -export class PollCandidate extends BaseModel { - public static COLLECTION = `poll_candidate`; - - public weight!: number; - - public poll_candidate_list_id!: Id; // poll_candidate_list/poll_candidate_ids; - public user_id!: Id; // user/poll_candidate_ids; - - public constructor(input?: any) { - super(PollCandidate.COLLECTION, input); - } - - public static readonly REQUESTABLE_FIELDS: (keyof PollCandidate)[] = [ - `id`, - `poll_candidate_list_id`, - `user_id`, - `weight`, - `meeting_id` - ]; -} -export interface PollCandidate extends HasMeetingId {} diff --git a/client/src/app/domain/models/poll/base-poll-config.ts b/client/src/app/domain/models/poll/base-poll-config.ts new file mode 100644 index 0000000000..0b4fa7c023 --- /dev/null +++ b/client/src/app/domain/models/poll/base-poll-config.ts @@ -0,0 +1,6 @@ +import { Id } from '../../definitions/key-types'; +import { BaseModel } from '../base/base-model'; + +export abstract class BasePollConfigModel extends BaseModel { + public poll_id!: Id; +} diff --git a/client/src/app/domain/models/poll/generic-poll.ts b/client/src/app/domain/models/poll/generic-poll.ts index 4d63966ce0..0a61f21886 100644 --- a/client/src/app/domain/models/poll/generic-poll.ts +++ b/client/src/app/domain/models/poll/generic-poll.ts @@ -1,40 +1,21 @@ import { ViewTopic } from '@app/site/pages/meetings/pages/agenda'; import { ViewAssignment } from '@app/site/pages/meetings/pages/assignments'; import { ViewMotion } from '@app/site/pages/meetings/pages/motions'; -import { ViewPollCandidateList } from '@app/site/pages/meetings/pages/polls/view-models/view-poll-candidate-list'; -import { ViewUser } from '@app/site/pages/meetings/view-models/view-user'; -import { Observable } from 'rxjs'; +import { ViewMeetingUser } from '@app/site/pages/meetings/view-models/view-meeting-user'; -import { EntitledUsersEntry, PollClassType, PollMethod, PollPercentBase, PollState, PollType } from './poll-constants'; +import { PollConfigApproval } from './poll-config-approval'; +import { PollConfigRatingApproval } from './poll-config-rating-approval'; +import { PollConfigRatingScore } from './poll-config-rating-score'; +import { PollConfigSelection } from './poll-config-selection'; export type PollContentObject = ViewAssignment | ViewMotion | ViewTopic; +export type AnyPollConfig = PollConfigApproval | PollConfigRatingApproval | PollConfigRatingScore | PollConfigSelection; /** * The main interface to describe everything related to polls * This is a unification of the data received in the projector and ViewPoll; both * use this interface, so the poll services can work on this shared view on the data. */ -export interface PollData { - pollClassType?: PollClassType; - pollmethod: PollMethod; - state: PollState; - onehundred_percent_base: PollPercentBase; - votesvalid: number; - votesinvalid: number; - votescast: number; - type: PollType; - entitled_users_at_stop: EntitledUsersEntry[]; - options: OptionData[]; - options$: Observable; - global_option: OptionData; - global_yes?: boolean; - global_no?: boolean; - global_abstain?: boolean; - content_object?: PollContentObject; - getContentObjectTitle: () => string | null; -} - -export type PollDataKey = keyof PollData; export interface OptionTitle { title: string; @@ -53,7 +34,8 @@ export interface OptionData { amount_global_yes?: number; amount_global_no?: number; amount_global_abstain?: number; - content_object?: ViewUser | ViewMotion | ViewPollCandidateList; + meeting_user?: ViewMeetingUser; + text?: string; entries_amount?: number; } diff --git a/client/src/app/domain/models/poll/index.ts b/client/src/app/domain/models/poll/index.ts index 316a36a5fe..0ce0695181 100644 --- a/client/src/app/domain/models/poll/index.ts +++ b/client/src/app/domain/models/poll/index.ts @@ -1,6 +1,5 @@ export * from './generic-poll'; -export * from './option'; export * from './poll'; +export * from './poll-ballot'; export * from './poll-constants'; -export * from './vote'; export * from './vote-constants'; diff --git a/client/src/app/domain/models/poll/option.ts b/client/src/app/domain/models/poll/option.ts deleted file mode 100644 index afd8cd32dc..0000000000 --- a/client/src/app/domain/models/poll/option.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Fqid, Id, Ids } from '../../definitions/key-types'; -import { BaseDecimalModel } from '../base/base-decimal-model'; - -export class Option extends BaseDecimalModel