manual
', - ruleSet: [] -}; - -const closedCode = { - id: 2, - label: 'Closed', - score: 0, - type: 'RESIDUAL_AUTO', - manualInstruction: '', - ruleSet: [] -}; - -const variableCoding = { - id: 'VAR', - alias: 'ALIAS', - label: 'Variable', +const coding = (id: string, training = false) => ({ + id, + alias: `${id}_ALIAS`, + label: id, sourceType: 'BASE', - manualInstruction: 'general
', - codes: [manualCode, closedCode] + processing: training ? ['CODER_TRAINING_REQUIRED'] : [], + codes: [ + { + id: 0, label: 'Zero', type: 'FULL_CREDIT', score: 0, ruleSets: [], manualInstruction: 'Bewerten
' + }, + { + id: 1, label: 'Rest', type: 'RESIDUAL_AUTO', score: 0, ruleSets: [], manualInstruction: '' + } + ] +}); +const unit = { + id: 1, key: 'U.VOCS', name: 'Unit', scheme: JSON.stringify({ version: '3.0', variableCodings: [coding('A', true), coding('B')] }), metadata: { items: [] } }; -describe('CodebookGenerator', () => { - it('returns an empty json buffer for empty codebooks', async () => { - await expect(CodebookGenerator.generateCodebook([], contentSetting as never, [])) - .resolves.toEqual(Buffer.from('[]', 'utf-8')); - }); - - it('formats and filters book variables and codes', () => { - const generator = CodebookGenerator as unknown as Recordmanual
' - }); + it('retains all / not-required training choices', async () => { + for (const [trainingRequirement, count] of [['all', 2], ['not-required', 1]] as const) { + const buffer = await CodebookGenerator.generateCodebook([unit], { ...options, trainingRequirement }, []); + expect(JSON.parse(buffer.toString())[0].variables).toHaveLength(count); + } }); - it('keeps codes without manual instructions when closed variables are included', () => { - const generator = CodebookGenerator as unknown as RecordKodierschema mit Schemer Version ab 1.5 erzeugen!
' - }; - if (contentSetting.showScore) codeInfo.score = ''; - return codeInfo; - } - - private static getCodeInfoFromCodeAsText(code: CodeData, contentSetting: CodeBookContentSetting): CodeInfo { - const codeAsText = ToTextFactory.codeAsText(code, 'SIMPLE'); - const rulesDescription = contentSetting.hasOnlyManualCoding && !contentSetting.hasClosedVars ? '' : - this.getRulesDescription(codeAsText, code); - const codeInfo: CodeInfo = { - id: `${code.id}`, - label: contentSetting.codeLabelToUpper ? codeAsText.label.toUpperCase() : codeAsText.label, - description: `${rulesDescription}${code.manualInstruction}` - }; - if (contentSetting.showScore) codeInfo.score = codeAsText.score.toString(); - return codeInfo; - } - - private static getRulesDescription(codeAsText: CodeAsText, code: CodeData): string { - let rulesDescription = ''; - codeAsText.ruleSetDescriptions.forEach( - (ruleSetDescription: string) => { - if (ruleSetDescription !== 'Keine Regeln definiert.') { - rulesDescription += `${ruleSetDescription}
`; - } else if (code.manualInstruction === '') rulesDescription += `${ruleSetDescription}
`; + const items = (unit.metadata?.items || []).flatMap(item => { + const id = item.id ?? item.key; + if (id === undefined || id === null) return []; + return codings.filter((variable: { id: string; alias?: string }) => { + const variableId = variable.alias || variable.id; + return item.variableId === variable.id || item.variableId === variableId || + item[variableId] !== undefined || item[variableId.replace(/\./g, '_')] !== undefined; + }).map((variable: { id: string; alias?: string }) => ({ id: String(id), variableId: variable.alias || variable.id })); + }); + if (scheme && options.trainingRequirement && options.trainingRequirement !== 'all') { + scheme.variableCodings = codings.filter((variable: { processing?: string[] }) => { + const required = variable.processing?.includes('CODER_TRAINING_REQUIRED') ?? false; + return options.trainingRequirement === 'required' ? required : !required; + }); } - ); - return rulesDescription; + return { + ...unit, + key: unit.key.replace(/\.vocs$/i, ''), + scheme: scheme ? JSON.stringify(scheme) : unit.scheme, + metadata: { items } + }; + }); + try { + const blob = await SharedCodebookGenerator.generateCodebook(normalized, options, missings); + return Buffer.from(await blob.arrayBuffer()); + } catch (error) { + if (error instanceof CodebookGenerationError) throw new BadRequestException(error.message); + throw error; + } } } diff --git a/apps/backend/src/app/admin/code-book/codebook.interfaces.ts b/apps/backend/src/app/admin/code-book/codebook.interfaces.ts index 2565f2f22..c42afa4c5 100644 --- a/apps/backend/src/app/admin/code-book/codebook.interfaces.ts +++ b/apps/backend/src/app/admin/code-book/codebook.interfaces.ts @@ -1,3 +1,4 @@ +import type { CodeBookContentSetting as SharedCodebookOptions } from '@iqb/ngx-coding-components/codebook-models'; import { VariableInfo } from '@iqbspecs/variable-info/variable-info.interface'; /** @@ -13,27 +14,7 @@ export interface ItemMetadata { export type CodebookExportFormat = 'docx' | 'json'; export type CodebookTrainingRequirementFilter = 'all' | 'required' | 'not-required'; -export interface CodeBookContentSetting { - /** Export format (docx or json) */ - exportFormat: CodebookExportFormat; - /** Missings profile name */ - missingsProfile: string; - /** Include only manual coding */ - hasOnlyManualCoding: boolean; - /** Include general instructions */ - hasGeneralInstructions: boolean; - /** Include derived variables */ - hasDerivedVars: boolean; - /** Include only variables with codes */ - hasOnlyVarsWithCodes: boolean; - /** Include closed variables */ - hasClosedVars: boolean; - /** Convert code labels to uppercase */ - codeLabelToUpper: boolean; - /** Show score */ - showScore: boolean; - /** Hide item-variable relation */ - hideItemVarRelation: boolean; +export interface CodeBookContentSetting extends SharedCodebookOptions { /** Filter variables by increased coder training requirement */ trainingRequirement?: CodebookTrainingRequirementFilter; /** Restrict variables to a job definition */ diff --git a/package-lock.json b/package-lock.json index a8030204a..7407fcc57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "@angular/router": "21.2.24", "@iqb/metadata-components": "1.0.0", "@iqb/metadata-resolver": "0.2.0", - "@iqb/responses": "^5.2.0", + "@iqb/responses": "5.2.0", "@iqbspecs/coding-scheme": "^3.4.1", "@iqbspecs/metadata-profile": "^0.11.1", "@iqbspecs/metadata-values": "^3.0.1", @@ -82,7 +82,8 @@ "tslib": "^2.3.0", "typeorm": "^0.3.31", "uuid": "11.1.1", - "xml2js": "^0.6.2" + "xml2js": "^0.6.2", + "@iqb/ngx-coding-components": "file:vendor/iqb-ngx-coding-components-4.1.0.tgz" }, "devDependencies": { "@angular-devkit/build-angular": "21.2.24", @@ -17084,7 +17085,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -18551,7 +18551,6 @@ "version": "5.3.4", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", - "dev": true, "license": "MIT", "engines": { "node": "*" @@ -32689,6 +32688,1019 @@ "engines": { "node": ">=8" } + }, + "node_modules/@cortex-js/compute-engine": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/@cortex-js/compute-engine/-/compute-engine-0.24.1.tgz", + "integrity": "sha512-B9pLaZFC1vBrL64yR2LQWy2sj1E/+wtwIVokPuPqX8YWXwj9W2AMVyS9pSMN8gEdjpAC50nSmtL6110Rgi7dKA==", + "license": "MIT", + "dependencies": { + "complex.js": "^2.1.1", + "decimal.js": "^10.4.3" + }, + "engines": { + "node": ">=16.14.2", + "npm": ">=8.5.0" + } + }, + "node_modules/@iqb/mathlive": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@iqb/mathlive/-/mathlive-0.4.1.tgz", + "integrity": "sha512-SjMXUBazoLvhDqpJVw6JvqD185B/XMKsINtcOIQSh8EU22ciMBpJbhFcDjOiD6DjPU65cFuOjmLMavp5jbp6iw==", + "license": "MIT", + "dependencies": { + "@cortex-js/compute-engine": "0.24.1" + }, + "engines": { + "node": ">=16.14.2", + "npm": ">=8.5.0" + } + }, + "node_modules/@iqb/ngx-coding-components": { + "version": "4.1.0", + "resolved": "file:vendor/iqb-ngx-coding-components-4.1.0.tgz", + "integrity": "sha512-nOFQi3hih9LAjZZaITFWjL01B40z4+5QlL0TbcaEM72SzbuS1e2alRjF4kTlSJzEbKFkGLENuIak49ey6J/CZQ==", + "license": "MIT", + "dependencies": { + "@iqb/mathlive": "^0.4.1", + "@iqb/responses": "5.2.2", + "buffer": "6.0.3", + "cheerio": "1.1.2", + "docx": "8.5.0", + "image-size": "1.2.1", + "katex": "^0.16.11", + "mathml2omml": "0.5.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^21.0.0", + "@angular/cdk": "^21.0.0", + "@angular/common": "^21.0.0", + "@angular/compiler": "^21.0.0", + "@angular/core": "^21.0.0", + "@angular/elements": "^21.0.0", + "@angular/forms": "^21.0.0", + "@angular/material": "^21.0.0", + "@angular/platform-browser": "^21.0.0", + "@angular/platform-browser-dynamic": "^21.0.0", + "@angular/router": "^21.0.0", + "@iqbspecs/coding-scheme": "^3.4.1", + "@iqbspecs/response": "^1.5.1 || ^2.0.0", + "@iqbspecs/variable-info": "^1.3.0", + "@ngx-translate/core": "^15.0.0", + "@tiptap/core": "^2.23.1", + "@tiptap/extension-blockquote": "^2.23.1", + "@tiptap/extension-bold": "^2.23.1", + "@tiptap/extension-bubble-menu": "^2.23.1", + "@tiptap/extension-bullet-list": "^2.23.1", + "@tiptap/extension-color": "^2.23.1", + "@tiptap/extension-document": "^2.23.1", + "@tiptap/extension-floating-menu": "^2.23.1", + "@tiptap/extension-font-family": "^2.23.1", + "@tiptap/extension-heading": "^2.23.1", + "@tiptap/extension-highlight": "^2.23.1", + "@tiptap/extension-history": "^2.23.1", + "@tiptap/extension-image": "^2.23.1", + "@tiptap/extension-italic": "^2.23.1", + "@tiptap/extension-list-item": "^2.23.1", + "@tiptap/extension-ordered-list": "^2.23.1", + "@tiptap/extension-paragraph": "^2.23.1", + "@tiptap/extension-strike": "^2.23.1", + "@tiptap/extension-subscript": "^2.23.1", + "@tiptap/extension-superscript": "^2.23.1", + "@tiptap/extension-text": "^2.23.1", + "@tiptap/extension-text-align": "^2.23.1", + "@tiptap/extension-text-style": "^2.23.1", + "@tiptap/extension-underline": "^2.23.1", + "mathjs": "^12.4.2", + "ngx-tiptap": "^12.0.0", + "prosemirror-state": "^1.3.4", + "rxjs": "~7.8.0", + "zone.js": "~0.15.0" + } + }, + "node_modules/@iqb/ngx-coding-components/node_modules/@iqb/responses": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@iqb/responses/-/responses-5.2.2.tgz", + "integrity": "sha512-bHv1LHLVlkyL6rvlQgBedgi5lVFwNKEQaijJAw1HWUmYvKfV2+tZuU/+JvrJ3oVi42frcYF6Z5p7QldR30rx8A==", + "license": "CC0 1.0", + "dependencies": { + "@iqbspecs/coding-scheme": "^3.4.1", + "@iqbspecs/response": "^2.0.0", + "@iqbspecs/variable-info": "^1.3.0", + "mathjs": "^15.1.0" + } + }, + "node_modules/@iqb/ngx-coding-components/node_modules/@iqb/responses/node_modules/@iqbspecs/response": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iqbspecs/response/-/response-2.0.0.tgz", + "integrity": "sha512-PSEqXhFTGodpmkxkDD8aBWbNDi0R+308k2lvZwMO8lrDvsKA5CXQCmrEzYfNQoTlTaR9wwO+PHWpuHtNmTL6gw==", + "license": "CC0 1.0" + }, + "node_modules/@iqb/ngx-coding-components/node_modules/@iqb/responses/node_modules/mathjs": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-15.2.0.tgz", + "integrity": "sha512-UAQzSVob9rNLdGpqcFMYmSu9dkuLYy7Lr2hBEQS5SHQdknA9VppJz3cy2KkpMzTODunad6V6cNv+5kOLsePLow==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.26.10", + "complex.js": "^2.2.5", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "^5.2.1", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.2.1" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@iqb/ngx-coding-components/node_modules/@types/node": { + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@iqb/ngx-coding-components/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@iqb/ngx-coding-components/node_modules/cheerio": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz", + "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==", + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.0.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.12.0", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=20.18.1" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/@iqb/ngx-coding-components/node_modules/docx": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/docx/-/docx-8.5.0.tgz", + "integrity": "sha512-4SbcbedPXTciySXiSnNNLuJXpvxFe5nqivbiEHXyL8P/w0wx2uW7YXNjnYgjW0e2e6vy+L/tMISU/oAiXCl57Q==", + "license": "MIT", + "dependencies": { + "@types/node": "^20.3.1", + "jszip": "^3.10.1", + "nanoid": "^5.0.4", + "xml": "^1.0.1", + "xml-js": "^1.6.8" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@iqb/ngx-coding-components/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@iqb/ngx-coding-components/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/@iqb/ngx-coding-components/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@remirror/core-constants": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz", + "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==", + "license": "MIT", + "peer": true + }, + "node_modules/@tiptap/core": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.27.3.tgz", + "integrity": "sha512-a5LfRbLpfaGI3hbL/LPHUYHI0I+FQHdSHsy8L4YnVIuu3hXcm3QZgkWbpEGf8hCz8krk6zEiu0+iFOjTySU2FA==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-blockquote": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.27.3.tgz", + "integrity": "sha512-NwK7FUFF0CKGJt/qNDR7plL/9vkJQBy8ziiyn8lk3j/j6tAFlCpgBMj420A1T26ItDpwOCyyaq+PMWHML+E4VQ==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-bold": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.27.3.tgz", + "integrity": "sha512-d5tQLAl5nHNrHNkBEgHJ0GYQ52iAsq83fUiKnDxPWuF6leKMOtkUBt9rw918p/L6MPg/MHROZ3Qt4Q+lmVYbfQ==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-bubble-menu": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.27.3.tgz", + "integrity": "sha512-08dt5pG9j3NTID1BnKT+FlfVgf16BPXEYtDCmPMLQq/jKHlOP49SRBAGhvYHZt8K7xkj0+JYhcgcJfytukTcKQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "tippy.js": "^6.3.7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.27.3.tgz", + "integrity": "sha512-LEYkcuCCHYDm6NHWZRIl3Lpac1jXFhABZZpEj+V/ypPgPwKQSIzUMCySHXXNCUQOK3ipF0Z+O18kFnekag8ZLQ==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-color": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-color/-/extension-color-2.27.3.tgz", + "integrity": "sha512-+xHveJ8YfneusZIp87/8UW7VfdtCVgE5iN3JkTudC1TdYCnMqxbaIwQaGtsBH+UxinXhJSU9tcsD1P6QgKJSqg==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/extension-text-style": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-document": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.27.3.tgz", + "integrity": "sha512-U10TnvBa6WTjBu64U4gn/HaxkBs/96q0U6mKH0PO9Ab0n3Bf/iN4HMtix2TEa3qWlJ8peVk9/RBwjyxNVNub4w==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-floating-menu": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.27.3.tgz", + "integrity": "sha512-4Be2efRPxLqZT0QB/IStVdVR1wP+FVPQxw/7qJ+xRk+m7EX45LVO0hvRdMK9aMO8Yd8JK2Wh9V3DbCN6cZ89vw==", + "license": "MIT", + "peer": true, + "dependencies": { + "tippy.js": "^6.3.7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-font-family": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-font-family/-/extension-font-family-2.27.3.tgz", + "integrity": "sha512-TwTUCxv2uFfYItW8xMrzVjJaH8KNZXwY9KF1a9PtxtJmFCylJBkYst+V0QYZlgseQfes/tZjZyiGd1QQcgTrgQ==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/extension-text-style": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-heading": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.27.3.tgz", + "integrity": "sha512-VWcj9b5VAhMJSAeG8xZyzCaVCcwmBGJL2k77lE2ZQaCS/jSvKUTN5ntd/1vwLrmaduciB7FmdVgOmWFcODyX1Q==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-highlight": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-highlight/-/extension-highlight-2.27.3.tgz", + "integrity": "sha512-NalKhoLGfXelD1P+2wThcpiorINDqeNz05brko28Tg+Ue9skOKO54Uh0XCoe93Mig/MvP/KQbi578LCYz8mqmw==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-history": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.27.3.tgz", + "integrity": "sha512-btT7Teg9xtWbv9q6uc38aIQbZsbMhgNu1NGLf7nLf7Vqzm+GRCpRF5EzlF9RpwEPtC2j1bxrDzpy427Su1qF7w==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-image": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-2.27.3.tgz", + "integrity": "sha512-YCOxC+UOFisHVpowPc3UmUtJDV9tjKJLeHKef3DZ6h1ixOnp2LStuhy2ohcSjISg1mZlYrx+/GoYottjwj7pww==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-italic": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.27.3.tgz", + "integrity": "sha512-ycgP6h7QQ4WXojOlH7gQEWwzNEzkIkVzdfH6jAZtZ2nw71L5KO1t5kt6Iu382CmQa60skDTuErbfiBUx7a3e2A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.27.3.tgz", + "integrity": "sha512-jWh5tZdNiZDx8X3jKV80EM6zMfUeRD3HKNVGcj5izqNncgH+/jJtF3hDmpP0nbFmhren8BQFo6W5f9L/GqtAVA==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.27.3.tgz", + "integrity": "sha512-RvxSnE8rpiMSosD7ANCsyA+7XPEz0R6mDOFlORMqAf+NnPfCnH8dguVuKBGOdodPj69NcTSlA/6VBCS+3J0CLw==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-paragraph": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.27.3.tgz", + "integrity": "sha512-Nbevu3wZk212NDpp1FaN05UbTHA4NHP2B5bAmkP8z3I+/ITvEgp7p9vFqJxZhe7fmqCSFlzhKj8ibmBc+Iu4CQ==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-strike": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.27.3.tgz", + "integrity": "sha512-9Ax1UIRDOdPk/bGnHbKM39Bw+Zb0PV8IInlT6hr8K1or0wWZuiyE4zlKP3bhAB6IcDr4mJLJQ6TEmxKihivC5A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-subscript": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-subscript/-/extension-subscript-2.27.3.tgz", + "integrity": "sha512-x5Q1UVHLVP24wteh0xMSnwQ59WDKwNDOH0HzgbJ/UrDnN4f9H/haflQ4yZL0xdT2cYpvzJGPBugi2iKLcpeZjg==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-superscript": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-superscript/-/extension-superscript-2.27.3.tgz", + "integrity": "sha512-dLZ9FBG6w5xlEeEsDR8T0nmI3ZDAYgLdkb/+bj8yOkzIUAbf9eDsE3HgqUrHPIm/7h9arJydnrdgOaxVDVlldg==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-text": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.27.3.tgz", + "integrity": "sha512-9VnSK7qXUuZevNzE0FIymbc8BbY5X+0k4NxxO2dtPBOX4IoNHcWzmpLcuCggd3uN6XYLAXhDi/w2hkmBtig8Mw==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-text-align": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-2.27.3.tgz", + "integrity": "sha512-1gUN+rdCkuYDePfY8/AixiftkXZDqDN1czZS+e5QIZCNcYnFPIIVu4qurE9kaE0NYo46/RPhPERFBQAbK+dWFw==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-text-style": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-2.27.3.tgz", + "integrity": "sha512-Z4ZKju7vA2vUCeWVgEWERHvnln6XtgEMcb29xW8i25dSrw5Qefn/b+ym7JPkaMvjWbbQ+5VtECiaEYdL3rRH6Q==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-underline": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.27.3.tgz", + "integrity": "sha512-9qc6WtfF7j+gwlbz7ChmwjPqDRF8T2vbHMrZLoWERAez2pOi9VfRG7lj437sc1v9LPT31FlWyIkaTDTGqYMPWA==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/pm": { + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.27.3.tgz", + "integrity": "sha512-E9mBCSwe8YdWXvpjRMqddx4Yd5lEj+EprNM+4J+MtBXPGFZCUAa90rkOKU4m+Pn7rd1N5s7wRsExqFco79twbg==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-changeset": "^2.3.0", + "prosemirror-collab": "^1.3.1", + "prosemirror-commands": "^1.6.2", + "prosemirror-dropcursor": "^1.8.1", + "prosemirror-gapcursor": "^1.3.2", + "prosemirror-history": "^1.4.1", + "prosemirror-inputrules": "^1.4.0", + "prosemirror-keymap": "^1.2.2", + "prosemirror-markdown": "^1.13.1", + "prosemirror-menu": "^1.2.4", + "prosemirror-model": "^1.23.0", + "prosemirror-schema-basic": "^1.2.3", + "prosemirror-schema-list": "^1.4.1", + "prosemirror-state": "^1.4.3", + "prosemirror-tables": "^1.6.4", + "prosemirror-trailing-node": "^3.0.0", + "prosemirror-transform": "^1.10.2", + "prosemirror-view": "^1.42.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/markdown-it": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.2.0.tgz", + "integrity": "sha512-NoQ2yGlLWj4wpxMs+TYmRKk3thDrQ97agr7sFqfLsAlvoS8SNQuTrlObhFqG9iugdTtgOE9jpJ6FNM4ZGsa5xQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "license": "MIT", + "peer": true + }, + "node_modules/crelt": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.7.tgz", + "integrity": "sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==", + "license": "MIT", + "peer": true + }, + "node_modules/linkify-it": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.2.tgz", + "integrity": "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/markdown-it": { + "version": "14.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.3.2.tgz", + "integrity": "sha512-sHHjZ5fJKlgrG4qns2YwVcdNep35h5fERrfkD2YNsb9UFk0UIHarbiTaHKVMlPuWAoiilyK8Fv/jAm11slsY7Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.5.0", + "linkify-it": "^5.0.2", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/mdurl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.1.0.tgz", + "integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==", + "license": "MIT", + "peer": true + }, + "node_modules/ngx-tiptap": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ngx-tiptap/-/ngx-tiptap-12.0.0.tgz", + "integrity": "sha512-m8jngTbQZWCMDSogwMcXaNpIpNvCx47D6hWM6lgmOLR2UC5vvvphQmDuC1t66Cn4brdol/vUVVFBbgqo56Jsmw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=19.0.0", + "@angular/core": ">=19.0.0", + "@angular/forms": ">=19.0.0", + "@tiptap/core": ">=2.7.0", + "@tiptap/extension-bubble-menu": "^2.7.0", + "@tiptap/extension-floating-menu": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/orderedmap": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", + "license": "MIT", + "peer": true + }, + "node_modules/prosemirror-changeset": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.4.4.tgz", + "integrity": "sha512-Gyuz9jYdrAeA9I7AholyOes9KUmv/lEwsC5O9s5xF5VB3EgTPsXMGUxz4+H1B+wKVPdZbvRcg1Cp3x8qX+8ofA==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-collab": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz", + "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-commands": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.2.tgz", + "integrity": "sha512-q6Q6szxqdu9Xd6EcdKsqXghu5nQdZTpB4Q9yd04WRc7/jt763e/rT60Owh0L1GYY+T46o5rD+9lEN36dZS43tw==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.10.2" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.4.tgz", + "integrity": "sha512-VmKxhcA6a+h5oPSYmfF1ZNeQqPbyYaIxqZsKqeYCyTlPtrjUgNaHL3P8vVaO19oqAV0zuaM/axkowZHrB1P3Tg==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.1.tgz", + "integrity": "sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.0.tgz", + "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-inputrules": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz", + "integrity": "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz", + "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-markdown": { + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.8.tgz", + "integrity": "sha512-Zi43BXX28jmxDJKvk8TDS2gMkBY/mgP8ynd6l/Vxrv8rgNFs5hsV1G0VscxTID1UCzVPcidADP9fUOBY3xxUeA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/markdown-it": "^14.0.0", + "markdown-it": "^14.0.0", + "prosemirror-model": "^1.25.0" + } + }, + "node_modules/prosemirror-menu": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.3.2.tgz", + "integrity": "sha512-6VgUJTYod0nMBlCaYJGhXGLu7Gt4AvcwcOq0YfJCY/6Uh+3S7UsWhpy6rJFCBFOmonq1hD8KyWOtZhkppd4YPg==", + "license": "MIT", + "peer": true, + "dependencies": { + "crelt": "^1.0.0", + "prosemirror-commands": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.25.12", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.12.tgz", + "integrity": "sha512-Ue2gTmXMa7EhpLNhC7J+h4+ykD8ha12K6rrZFFKKJHBForfIStw5gJ6Zrf1mqqAa9NmpmEB4wp9bKmA4eUVjWg==", + "license": "MIT", + "peer": true, + "dependencies": { + "orderedmap": "^2.0.0" + } + }, + "node_modules/prosemirror-schema-basic": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.5.tgz", + "integrity": "sha512-McBWhfgOfThyu3Nltbs8SOUbM4t/h0pxteibaaHd1QR4S+F1t0u7M1ETaCE6/cveFoF+2fowTIBNkJOyeZQjNg==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-model": "^1.25.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz", + "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.7.3" + } + }, + "node_modules/prosemirror-state": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.4.tgz", + "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } + }, + "node_modules/prosemirror-tables": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.8.5.tgz", + "integrity": "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-keymap": "^1.2.3", + "prosemirror-model": "^1.25.4", + "prosemirror-state": "^1.4.4", + "prosemirror-transform": "^1.10.5", + "prosemirror-view": "^1.41.4" + } + }, + "node_modules/prosemirror-trailing-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz", + "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@remirror/core-constants": "3.0.0", + "escape-string-regexp": "^4.0.0" + }, + "peerDependencies": { + "prosemirror-model": "^1.22.1", + "prosemirror-state": "^1.4.2", + "prosemirror-view": "^1.33.8" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.12.2.tgz", + "integrity": "sha512-PE/aY0HEY4zczvmqrilgkUK/WautF0chvMqkmM/iN5/aPHvwrCWaQZjS6CIZp+K84YrvPFqrL+YArrfJX8xX7g==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-model": "^1.21.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.42.6", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.42.6.tgz", + "integrity": "sha512-3g25f6hKV2bBxo3puH3EcYWmmVNSH0iWmNsMVT7sugDSpA025jgpOLarcDWr39SdzPjYMaiYtRdNtXialPSjEQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-model": "^1.25.12", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/rope-sequence": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", + "license": "MIT", + "peer": true + }, + "node_modules/tippy.js": { + "version": "6.3.7", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", + "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@popperjs/core": "^2.9.0" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT", + "peer": true + }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT", + "peer": true } } } diff --git a/package.json b/package.json index 7ee247a53..88a2a3620 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "@angular/router": "21.2.24", "@iqb/metadata-components": "1.0.0", "@iqb/metadata-resolver": "0.2.0", - "@iqb/responses": "^5.2.0", + "@iqb/ngx-coding-components": "file:vendor/iqb-ngx-coding-components-4.1.0.tgz", + "@iqb/responses": "5.2.0", "@iqbspecs/coding-scheme": "^3.4.1", "@iqbspecs/metadata-profile": "^0.11.1", "@iqbspecs/metadata-values": "^3.0.1", diff --git a/vendor/iqb-ngx-coding-components-4.1.0.tgz b/vendor/iqb-ngx-coding-components-4.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..fa7014faeecceb8a1cf8d014ef407cc610839a22 GIT binary patch literal 295254 zcmV)OK(@ahiwFP!00002|LnbKbKE$xC^}zneR&Zt;zhiVFvr(Z)h@9%?Xs++rPTHu zc{!5Y-DhOA%py@$XmP3LqNQz}UvvM-`(rN>07-xZSuC;a?wRSHh_MO;5{X12Gm%In zW`=ofOmN5iCFq!*g-4!uy)wZr_KncsS$7>Y0X(&O;5jyBf)`#c2RTe zwvms6Hp0H&Lc1@~IC9O9crLoSA}$G=E%dp85E-K;tr1Rr?-nXwbT4-r2!;MVt$>h^ z!^n5h*hSBtp{7p<+3dE_*uBV&zd3eW7v0OtR&(s4UDR#0C>8+l0hvZHH1g}w$Z1jpXIsHukrl@Lb+n#%!f}RfGIXC+Os%suUO#;zQMNsYPf&& z`tA2u($>+i$;1U#k{j;F#pm}ktRD{Fo)1qIY@6q@WN8)iSZ-O0GBot>CE8`iT`uut zqJ!w-Uv)EnESo=={OlRZeWH&nKYIp~AbxxJM89g9*vK|U*cJ;c%-*6Tp4-Z?V1hLj zkC~6C;%ZCCm%L?oq4=7Ic8>4D)5ulAk~mKqG)jNdvC7OQuXlLcH}oT{tnkoM6kn=< z6|9}y8d7|HXw2<4^T_p*CnZNjfgjYQt2WwRcR9m-K-doO*JVsb1MM0U7hXFg77h>> z2S}?k;Y%WcD0+o&56Cn^b1ETGLYL|^$dG7ZeHIM6Qz(KGBG4Vhy%@P z`FNDY(j1+G>^<-dQ1n4lVJV1MD%3C6p7J2eHF8ED7b#4&nep}dgD1hiU2pVt@UPol z$`{4+4_mNP?>5!uWg8>T5ph+jM*`h3X5s>(egvwlb9xFIoqD&Kbz~ZDcs8?1$aG9* z@P)ciy?f+a68LtAZ96aV%9~-^KIA>pap=TqwX4FQ zWjB{K#tpmCf~M2ZvCqBO0fI%NCAZKom&Or~YsTFUXa(gtO8R}-P^!YBJ&R)Y=|){4 z*+f>XY6dVPfI`ej<{~{m!eh_J%5d=lqcF1zCSX^9@_-@wA%ldlYtg?lc2JS`IZL0I zy<&;mMz=6c6?_L&uG6-8-$Afl#6*(eA&xIWKq%{U&|8cx`atuKo^Q3$C<>A5g{;IU zA@+sp6mzw5rJpiR1^P<7I3miRbYuK}cnW*t{qKi!oKYE~&U53;r)ttvBC26tPkeX* zJ3G3>O5lOAh5id{QfF0Gp=OzM=6f^jhXmYUc|&z(Ot9Ljhc9m M~?S3;f>2K1PI)sKdUuixySRNFRWZRu>kW6ui<(6#W`i0p7XH#^6)%~H1S<$JCL zT{uO1_<2Z``4zO+|8 SSrx0wR?Uc+P;QEEn%B{WB9Zv@Aw`QJH$S= ze&99GZc PeR( z`2;x6cVY4=K6K*Iryb>y7C7K@y>K%gu 4)NBZe(Q|FLX2 z_~WtVWiekeOWJ sX<-RMri)d#1tKh^^Zek=B^S#^R-HYfto7;Q4+SVkuA6$H6B2zWpYi~bt zD_^t)qZ_WwCd~7#N&>a4zq$M=IgU2lsK44qn{Bk-r5+Vtu)cXYU!KpOw=x-@1PSCK zL^7P8$lO#ZXXI`gcacAf&~?3{-?PLDnD3685{v4$0A4_$zaI?$6x#-@PoOW*bbfb* zic!&TF|;b;tZ+o-ihCY7RQlHTd7+`jE#v2lb6eR&Wn;*jyZ0sw4z9q zQc^!^1+*XS8q>6|=NDVd(*^vHIDlDj-TwR6ZG>$whw`E)snVo1^w8V)edE4aB;01c zXW}4u?b^h}LmPvg5HwvlC26N_Ew%xAZ} excC_PwjF~C$4En77m&k`E|777~ymUJbaODXe!>KxcSEI z36DipfCf%kv1v%^B?K9YTOJXL9fz~3C&|Jf{b)bUxWg7_`Yb>gItABK@Dl5d#-+v~ z#KpZ*DCgcg$FVuYog6^uO#;_KWqwAs4&?@Upat
P%gUtruhL64qV{a~Jwg6%4M9 z-`Xh;Yf2TJ#KG9fb2a&stCz#oBs6Sd27fa4@4(p6pG>?QCWb&uA2wav=<~y$O#Drm zIQWx^m&3$xW9u6KDTsd$9*+LBl9$EB(ddkZ82-t~zY8PJ{$%83G4c%if3ouL#>yjK z`>MX@k&lh*f+)m)egASw^z5P+9l8m*c}&O4Y(z)N;hXv}WUkD~6Qkry+5BV=RvIc2 zFW`l*bhiB(ax2hzp;;CVXjX>&=`l~q(CjJ_Ug#u-(UO43Q8!O$RT@kHz7h6wis4dG z3x!kPyQPa^==+}E)IPYAk9Wt1c1R`|9T3}^_#f|%*FWAJ9Vba3goCfoag;*ZNgFZX zyo~)QyI6GY8*ad2d5PyX4Ks`k`-~>^aE!Y=Ny4~3w$2!JKIfw*QYd;ZjyuLrsKbi# z*PxOc%ElcHLqNOmr{e1?Hq6Xtpnnz<^fHC^ eTB;zckjkct*y1tbJUYe z3~gitczsn<#qvp_p;+>(Ma<6Q0zKyhtn~^4)_TQh4wAbm4OPg07G8X3r7(u6AecHk zI!Y9krU%1sTb%f;9tb5lRi<(?5>2U3R643KerYgRMcZhw*)P5AB&qUh;lKy7>MM