@myrmidon/cadmus-refs-asserted-ids 5.0.1 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/asserted-composite-id/asserted-composite-id.component.mjs +13 -16
- package/esm2022/lib/asserted-composite-ids/asserted-composite-ids.component.mjs +9 -12
- package/esm2022/lib/asserted-id/asserted-id.component.mjs +13 -16
- package/esm2022/lib/asserted-ids/asserted-ids.component.mjs +8 -11
- package/esm2022/lib/pin-target-lookup/pin-target-lookup.component.mjs +16 -25
- package/esm2022/lib/scoped-pin-lookup/scoped-pin-lookup.component.mjs +13 -19
- package/esm2022/lib/services/item-ref-lookup.service.mjs +3 -3
- package/esm2022/lib/services/pin-ref-lookup.service.mjs +3 -3
- package/fesm2022/myrmidon-cadmus-refs-asserted-ids.mjs +47 -64
- package/fesm2022/myrmidon-cadmus-refs-asserted-ids.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"myrmidon-cadmus-refs-asserted-ids.mjs","sources":["../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/pin-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/scoped-pin-lookup/scoped-pin-lookup.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/scoped-pin-lookup/scoped-pin-lookup.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/item-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/pin-target-lookup/pin-target-lookup.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/pin-target-lookup/pin-target-lookup.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-id/asserted-composite-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-id/asserted-composite-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-ids/asserted-composite-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-ids/asserted-composite-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/public-api.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/myrmidon-cadmus-refs-asserted-ids.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { map, Observable, of } from 'rxjs';\n\nimport { ItemService } from '@myrmidon/cadmus-api';\nimport { DataPinInfo, IndexLookupDefinition } from '@myrmidon/cadmus-core';\nimport {\n RefLookupFilter,\n RefLookupService,\n} from '@myrmidon/cadmus-refs-lookup';\nimport { DataPage, ErrorWrapper } from '@myrmidon/ng-tools';\n\n/**\n * Pin-based lookup filter. This is a RefLookupFilter with the addition\n * of the item ID and part ID, which are used to filter the results\n * by the ItemPinLookupComponent.\n */\nexport interface PinRefLookupFilter extends RefLookupFilter {\n itemId?: string;\n partId?: string;\n}\n\n/**\n * Cadmus pin-based lookup data service. The text being searched here is just\n * the pin's value, according to the options specified. These options correspond\n * to an index lookup definition. The resulting items are of type DataPinInfo.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class PinRefLookupService implements RefLookupService {\n constructor(private _itemService: ItemService) {}\n\n public getName(item: any | undefined): string {\n return item?.value || '';\n }\n\n private buildQuery(\n def: IndexLookupDefinition,\n filter: PinRefLookupFilter\n ): string {\n const sb: string[] = [];\n const AND = ' AND ';\n\n if (def.typeId) {\n sb.push(`[partTypeId=${def.typeId}]`);\n }\n if (def.roleId) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[roleId=${def.roleId}]`);\n }\n if (def.name) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[name=${def.name}]`);\n }\n if (filter.itemId) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[itemId=${filter.itemId}]`);\n }\n if (filter.partId) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[partId=${filter.partId}]`);\n }\n if (filter.text) {\n if (sb.length) {\n sb.push(AND);\n }\n // for other operators see backend SqlQueryBuilderBase.cs\n sb.push(`[value*=${filter.text}]`); // *= is \"contains\"\n }\n\n return sb.join('');\n }\n\n public lookup(filter: PinRefLookupFilter, options?: any): Observable<any[]> {\n // the index lookup definition is required\n const def = options as IndexLookupDefinition;\n if (!def) {\n return of([]);\n }\n\n // build the corresponding pin query\n const query = this.buildQuery(def, filter);\n\n // search the index\n return this._itemService.searchPins(query, 1, filter.limit).pipe(\n map((w: ErrorWrapper<DataPage<DataPinInfo>>) => {\n if (w.error) {\n console.error(w.error);\n return [];\n } else {\n return w.value?.items || [];\n }\n })\n );\n }\n}\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Inject, Output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\n\r\nimport {\r\n DataPinInfo,\r\n IndexLookupDefinitions,\r\n Item,\r\n Part,\r\n} from '@myrmidon/cadmus-core';\r\nimport { forkJoin, take } from 'rxjs';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\nimport { RefLookupComponent } from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// from Cadmus general parts\r\nconst METADATA_PART_ID = 'it.vedph.metadata';\r\ninterface MetadataPart extends Part {\r\n metadata: {\r\n type?: string;\r\n name: string;\r\n value: string;\r\n }[];\r\n}\r\n\r\ninterface LookupInfo {\r\n pin: DataPinInfo;\r\n item?: Item;\r\n part?: MetadataPart;\r\n}\r\n\r\n/*\r\n * Scoped pin-based lookup component. This component provides a list\r\n * of pin-based searches, with a lookup control. Whenever the user\r\n * picks a pin value, he gets the details about its item and part, and\r\n * item's metadata part, if any. He can then use these data to build\r\n * some EID by variously assembling these components.\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'cadmus-scoped-pin-lookup',\r\n templateUrl: './scoped-pin-lookup.component.html',\r\n styleUrls: ['./scoped-pin-lookup.component.css'],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n // Cadmus\r\n RefLookupComponent,\r\n ],\r\n})\r\nexport class ScopedPinLookupComponent {\r\n // lookup\r\n public key: FormControl<string | null>;\r\n public keyForm: FormGroup;\r\n public keys: string[];\r\n public info?: LookupInfo;\r\n // builder\r\n public id: FormControl<string | null>;\r\n public idForm: FormGroup;\r\n\r\n @Output()\r\n public idPick: EventEmitter<string>;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n private _itemService: ItemService,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions\r\n ) {\r\n // lookup\r\n // keys are all the defined lookup searches\r\n this.keys = Object.keys(lookupDefs);\r\n // the selected key defines the lookup scope\r\n this.key = formBuilder.control(null);\r\n this.keyForm = formBuilder.group({\r\n key: this.key,\r\n });\r\n // id\r\n this.id = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.idForm = formBuilder.group({\r\n id: this.id,\r\n });\r\n // event\r\n this.idPick = new EventEmitter<string>();\r\n }\r\n\r\n ngOnInit(): void {\r\n // pre-select a unique key\r\n if (this.keys.length === 1) {\r\n this.key.setValue(this.keys[0]);\r\n this.key.markAsDirty();\r\n this.key.updateValueAndValidity();\r\n }\r\n }\r\n\r\n public onItemChange(item: DataPinInfo): void {\r\n const info: LookupInfo = {\r\n pin: item,\r\n };\r\n // lookup item and its metadata part if any\r\n forkJoin({\r\n item: this._itemService.getItem(item.itemId, false, true),\r\n part: this._itemService.getPartFromTypeAndRole(\r\n item.itemId,\r\n METADATA_PART_ID,\r\n undefined,\r\n true\r\n ),\r\n })\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (result) => {\r\n info.item = result.item!;\r\n info.part = result.part as MetadataPart;\r\n this.info = info;\r\n },\r\n error: (error) => {\r\n console.error(\r\n error ? JSON.stringify(error) : 'Error loading item/metadata'\r\n );\r\n },\r\n });\r\n }\r\n\r\n public appendIdComponent(type: string, metaIndex = -1): void {\r\n let id = this.id.value || '';\r\n\r\n switch (type) {\r\n case 'pin':\r\n id += this.info?.pin.value;\r\n break;\r\n case 'itemId':\r\n id += this.info!.item?.id || '';\r\n break;\r\n case 'partId':\r\n id += this.info!.part?.id || '';\r\n break;\r\n case 'partTypeId':\r\n id += this.info!.part?.typeId || '';\r\n break;\r\n case 'partRoleId':\r\n id += this.info!.part?.roleId || '';\r\n break;\r\n case 'metadata':\r\n id += this.info!.part!.metadata[metaIndex].value;\r\n break;\r\n }\r\n\r\n this.id.setValue(id);\r\n this.id.markAsDirty();\r\n this.id.updateValueAndValidity();\r\n }\r\n\r\n public pickId(): void {\r\n if (this.idForm.invalid) {\r\n return;\r\n }\r\n this.idPick.emit(this.id.value!);\r\n this.info = undefined;\r\n }\r\n\r\n public resetId(): void {\r\n this.id.reset();\r\n this.id.markAsDirty();\r\n this.id.updateValueAndValidity();\r\n }\r\n}\r\n","<div>\r\n <!-- lookup -->\r\n <div>\r\n <form [formGroup]=\"keyForm\" class=\"form-row\">\r\n <!-- key -->\r\n <mat-form-field *ngIf=\"keys.length > 1\">\r\n <mat-label>type</mat-label>\r\n <mat-select [formControl]=\"key\">\r\n <mat-option *ngFor=\"let k of keys\" [value]=\"k\">{{ k }}</mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"$any(key).errors?.required && (key.dirty || key.touched)\"\r\n >type required</mat-error\r\n >\r\n </mat-form-field>\r\n <cadmus-ref-lookup\r\n [service]=\"lookupService\"\r\n label=\"pin\"\r\n [options]=\"key.value ? lookupDefs[key.value] : undefined\"\r\n (itemChange)=\"onItemChange($event)\"\r\n ></cadmus-ref-lookup>\r\n </form>\r\n </div>\r\n\r\n <!-- builder -->\r\n <mat-expansion-panel *ngIf=\"info\" [expanded]=\"info\" [disabled]=\"!info\">\r\n <mat-expansion-panel-header>ID builder</mat-expansion-panel-header>\r\n <!-- ID -->\r\n <div>\r\n <form [formGroup]=\"idForm\" (submit)=\"pickId()\">\r\n <mat-form-field style=\"width: 100%\">\r\n <input matInput [formControl]=\"id\" />\r\n <mat-error\r\n *ngIf=\"$any(id).errors?.required && (id.dirty || id.touched)\"\r\n >ID required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(id).errors?.maxLength && (id.dirty || id.touched)\"\r\n >ID too long</mat-error\r\n >\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matSuffix\r\n (click)=\"resetId()\"\r\n [disabled]=\"!id.value\"\r\n >\r\n <mat-icon color=\"warn\">close</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matSuffix\r\n (click)=\"pickId()\"\r\n [disabled]=\"idForm.invalid\"\r\n >\r\n <mat-icon color=\"primary\">check_circle</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </form>\r\n </div>\r\n <!-- table -->\r\n <table>\r\n <thead>\r\n <th></th>\r\n <th>source</th>\r\n <th>value</th>\r\n </thead>\r\n <tbody>\r\n <!-- pin -->\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"appendIdComponent('pin')\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>pin</td>\r\n <td>{{ info!.pin.value }}</td>\r\n </tr>\r\n <!-- item ID -->\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"appendIdComponent('itemId')\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>item ID</td>\r\n <td>{{ info!.item?.id }}</td>\r\n </tr>\r\n <!-- item title -->\r\n <tr>\r\n <td></td>\r\n <td>item title</td>\r\n <td>{{ info!.item?.title }}</td>\r\n </tr>\r\n <!-- part ID -->\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"appendIdComponent('partId')\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>part ID</td>\r\n <td>{{ info!.part?.id }}</td>\r\n </tr>\r\n <!-- part type ID -->\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"appendIdComponent('partTypeId')\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>part type ID</td>\r\n <td>{{ info!.part?.typeId }}</td>\r\n </tr>\r\n <!-- part role ID -->\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"appendIdComponent('partRoleId')\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>part role ID</td>\r\n <td>{{ info!.part?.roleId }}</td>\r\n </tr>\r\n\r\n <!-- part's metadata -->\r\n <tr *ngFor=\"let m of info!.part?.metadata; let i = index\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"appendIdComponent('metadata', i)\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td class=\"metadata\">{{ m.name }}</td>\r\n <td class=\"metadata\">{{ m.value }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </mat-expansion-panel>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelectModule } from '@angular/material/select';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport { ScopedPinLookupComponent } from '../scoped-pin-lookup/scoped-pin-lookup.component';\r\n\r\nexport interface AssertedId {\r\n tag?: string;\r\n value: string;\r\n scope: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'cadmus-refs-asserted-id',\r\n templateUrl: './asserted-id.component.html',\r\n styleUrls: ['./asserted-id.component.css'],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n AssertionComponent,\r\n ScopedPinLookupComponent,\r\n ],\r\n})\r\nexport class AssertedIdComponent implements OnInit {\r\n private _updatingForm: boolean | undefined;\r\n private _id: AssertedId | undefined;\r\n\r\n public tag: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public scope: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n public lookupExpanded: boolean;\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public get id(): AssertedId | undefined | null {\r\n return this._id;\r\n }\r\n public set id(value: AssertedId | undefined | null) {\r\n if (this._id !== value) {\r\n this._id = value || undefined;\r\n this.updateForm(this._id);\r\n }\r\n }\r\n\r\n /**\r\n * True to hide the pin-based EID lookup UI.\r\n */\r\n @Input()\r\n public noEidLookup: boolean | undefined;\r\n\r\n @Input()\r\n public hasSubmit: boolean | undefined;\r\n\r\n @Output()\r\n public idChange: EventEmitter<AssertedId>;\r\n\r\n @Output()\r\n public editorClose: EventEmitter<any>;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions\r\n ) {\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.value = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n tag: this.tag,\r\n value: this.value,\r\n scope: this.scope,\r\n assertion: this.assertion,\r\n });\r\n this.lookupExpanded = false;\r\n // events\r\n this.idChange = new EventEmitter<AssertedId>();\r\n this.editorClose = new EventEmitter<any>();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n }\r\n\r\n public onIdPick(id: string): void {\r\n this.value.setValue(id);\r\n this.value.markAsDirty();\r\n this.value.updateValueAndValidity();\r\n this.lookupExpanded = false;\r\n }\r\n\r\n private updateForm(value: AssertedId | undefined): void {\r\n this._updatingForm = true;\r\n if (!value) {\r\n this.form.reset();\r\n } else {\r\n this.tag.setValue(value.tag || null);\r\n this.value.setValue(value.value);\r\n this.scope.setValue(value.scope);\r\n this.assertion.setValue(value.assertion || null);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n }\r\n\r\n private getId(): AssertedId {\r\n return {\r\n tag: this.tag.value?.trim(),\r\n value: this.value.value?.trim() || '',\r\n scope: this.scope.value?.trim() || '',\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n if (!this.hasSubmit) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.valid) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div>\r\n <div class=\"form-row\">\r\n <!-- tag (bound) -->\r\n <mat-form-field *ngIf=\"idTagEntries?.length\" style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n <mat-option *ngFor=\"let e of idTagEntries\" [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- tag (free) -->\r\n <mat-form-field *ngIf=\"!idTagEntries?.length\" style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n <mat-error\r\n *ngIf=\"$any(tag.errors)?.maxLength && (tag.dirty || tag.touched)\"\r\n >tag too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- scope (bound) -->\r\n <mat-form-field *ngIf=\"idScopeEntries?.length\" style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select [formControl]=\"scope\">\r\n <mat-option *ngFor=\"let e of idScopeEntries\" [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- scope (free) -->\r\n <mat-form-field *ngIf=\"!idScopeEntries?.length\" style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput [formControl]=\"scope\" />\r\n <mat-error\r\n *ngIf=\"$any(scope.errors)?.maxLength && (scope.dirty || scope.touched)\"\r\n >scope too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput [formControl]=\"value\" />\r\n <mat-error\r\n *ngIf=\"$any(value.errors)?.required && (value.dirty || value.touched)\"\r\n >value required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(value.errors)?.maxLength && (value.dirty || value.touched)\"\r\n >value too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- lookup -->\r\n <div *ngIf=\"!noEidLookup\" style=\"margin-top: 4px\">\r\n <mat-expansion-panel [(expanded)]=\"lookupExpanded\">\r\n <mat-expansion-panel-header>lookup</mat-expansion-panel-header>\r\n <cadmus-scoped-pin-lookup\r\n (idPick)=\"onIdPick($event)\"\r\n ></cadmus-scoped-pin-lookup>\r\n </mat-expansion-panel>\r\n </div>\r\n </div>\r\n\r\n <!-- assertion -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [assertion]=\"assertion.value\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n >\r\n </cadmus-refs-assertion>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div *ngIf=\"hasSubmit\">\r\n <button mat-icon-button color=\"warn\" type=\"button\" (click)=\"cancel()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n color=\"primary\"\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon>check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs';\r\n\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { DialogService } from '@myrmidon/ng-mat-tools';\r\n\r\nimport {\r\n AssertedId,\r\n AssertedIdComponent,\r\n} from '../asserted-id/asserted-id.component';\r\n\r\n/**\r\n * Asserted IDs editor.\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'cadmus-refs-asserted-ids',\r\n templateUrl: './asserted-ids.component.html',\r\n styleUrls: ['./asserted-ids.component.css'],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatExpansionModule,\r\n MatIconModule,\r\n AssertedIdComponent,\r\n ],\r\n})\r\nexport class AssertedIdsComponent {\r\n private _ids: AssertedId[];\r\n private _editedIndex: number;\r\n public edited?: AssertedId;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedId[]) {\r\n if (this._ids !== value) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n }\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n @Output()\r\n public idsChange: EventEmitter<AssertedId[]>;\r\n\r\n public entries: FormControl<AssertedId[]>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder, private _dialogService: DialogService) {\r\n this._ids = [];\r\n this._editedIndex = -1;\r\n this.idsChange = new EventEmitter<AssertedId[]>();\r\n this.entries = formBuilder.control([], { nonNullable: true });\r\n // form\r\n this.form = formBuilder.group({\r\n ids: this.entries,\r\n });\r\n }\r\n\r\n private updateForm(ids: AssertedId[]): void {\r\n if (!ids?.length) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(ids, { emitEvent: false });\r\n this.entries.updateValueAndValidity();\r\n this.form.markAsPristine();\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.entries.value);\r\n }\r\n\r\n public addId(): void {\r\n this.editId(\r\n {\r\n scope: '',\r\n value: '',\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editId(id: AssertedId, index: number): void {\r\n this._editedIndex = index;\r\n this.edited = id;\r\n }\r\n\r\n public closeId(): void {\r\n this._editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveId(entry: AssertedId): void {\r\n const entries = [...this.entries.value];\r\n if (this._editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this._editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeId();\r\n }\r\n\r\n public deleteId(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete ID?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this._editedIndex === index) {\r\n this.closeId();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n });\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public onIdChange(id: AssertedId): void {\r\n this.saveId(id);\r\n this.emitIdsChange();\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <div>\r\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n </div>\r\n <table *ngIf=\"entries.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>value</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let entry of entries.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry.value }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header>ID {{edited?.value}}</mat-expansion-panel-header>\r\n <cadmus-refs-asserted-id\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [hasSubmit]=\"true\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-id>\r\n </mat-expansion-panel>\r\n</form>\r\n","import { Injectable } from '@angular/core';\nimport { Observable, map } from 'rxjs';\n\nimport { ItemService } from '@myrmidon/cadmus-api';\nimport { Item } from '@myrmidon/cadmus-core';\nimport {\n RefLookupFilter,\n RefLookupService,\n} from '@myrmidon/cadmus-refs-lookup';\nimport { DataPage } from '@myrmidon/ng-tools';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ItemRefLookupService implements RefLookupService {\n constructor(private _itemService: ItemService) {}\n\n public lookup(filter: RefLookupFilter, options?: any): Observable<Item[]> {\n return this._itemService\n .getItems(\n {\n title: filter.text,\n },\n 1,\n filter.limit || 10\n )\n .pipe(map((page: DataPage<Item>) => page.items));\n }\n\n getName(item: Item): string {\n return item?.title;\n }\n}\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport {\r\n Subscription,\r\n debounceTime,\r\n distinctUntilChanged,\r\n forkJoin,\r\n take,\r\n} from 'rxjs';\r\n\r\nimport { ItemService, ThesaurusService } from '@myrmidon/cadmus-api';\r\nimport {\r\n DataPinInfo,\r\n IndexLookupDefinition,\r\n IndexLookupDefinitions,\r\n Item,\r\n Part,\r\n ThesaurusEntry,\r\n} from '@myrmidon/cadmus-core';\r\n\r\nimport { ClipboardModule } from '@angular/cdk/clipboard';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\n\r\nimport { NgToolsModule } from '@myrmidon/ng-tools';\r\nimport {\r\n RefLookupComponent,\r\n RefLookupConfig,\r\n RefLookupSetComponent,\r\n RefLookupSetEvent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport {\r\n PinRefLookupFilter,\r\n PinRefLookupService,\r\n} from '../services/pin-ref-lookup.service';\r\nimport { ItemRefLookupService } from '../services/item-ref-lookup.service';\r\n\r\n// from Cadmus general parts\r\nconst METADATA_PART_ID = 'it.vedph.metadata';\r\ninterface MetadataPart extends Part {\r\n metadata: {\r\n type?: string;\r\n name: string;\r\n value: string;\r\n }[];\r\n}\r\n\r\n/**\r\n * Pin lookup data used internally by the component.\r\n */\r\nexport interface PinLookupData {\r\n pin: DataPinInfo;\r\n item?: Item;\r\n metaPart?: MetadataPart;\r\n}\r\n\r\n/**\r\n * A pin-based target. This includes pin's name and value, and\r\n * the item's ID and optional part IDs. The label is a user friendly\r\n * string representation of the target, while the gid is a globally\r\n * unique identifier for the target.\r\n */\r\nexport interface PinTarget {\r\n gid: string;\r\n label: string;\r\n itemId?: string;\r\n partId?: string;\r\n partTypeId?: string;\r\n roleId?: string;\r\n name?: string;\r\n value?: string;\r\n}\r\n\r\n/*\r\n * Scoped pin-based lookup component. This component provides a list\r\n * of pin-based searches, with a lookup control. Whenever the user\r\n * picks a pin value, he gets the details about its item and part, and\r\n * item's metadata part, if any. He can then use these data to build\r\n * some EID by variously assembling these components.\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'cadmus-pin-target-lookup',\r\n templateUrl: './pin-target-lookup.component.html',\r\n styleUrls: ['./pin-target-lookup.component.css'],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n ClipboardModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n // myrmidon\r\n NgToolsModule,\r\n // Cadmus\r\n RefLookupComponent,\r\n RefLookupSetComponent,\r\n ],\r\n})\r\nexport class PinTargetLookupComponent implements OnInit, OnDestroy {\r\n private _subs: Subscription[];\r\n private _target: PinTarget | undefined;\r\n private _noTargetUpdate?: boolean;\r\n private _startWithByTypeMode?: boolean;\r\n\r\n /**\r\n * True when the by-type pin lookup mode is active.\r\n * User can change mode unless modeSwitching is false.\r\n */\r\n @Input()\r\n public get pinByTypeMode(): boolean | undefined {\r\n return this.byTypeMode?.value;\r\n }\r\n public set pinByTypeMode(value: boolean | undefined) {\r\n if (!this.byTypeMode) {\r\n this._startWithByTypeMode = value;\r\n } else {\r\n this.byTypeMode.setValue(value || false);\r\n this.byTypeMode.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * True when the user can switch between by-type and by-item mode.\r\n */\r\n @Input()\r\n public canSwitchMode?: boolean;\r\n /**\r\n * True when the user can edit the target's gid/label for internal\r\n * targets.\r\n */\r\n @Input()\r\n public canEditTarget?: boolean;\r\n /**\r\n * The lookup definitions to be used for the by-type lookup. If\r\n * not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n @Input()\r\n public lookupDefinitions?: IndexLookupDefinitions;\r\n /**\r\n * The optional configurations for using external lookup services.\r\n */\r\n @Input()\r\n public extLookupConfigs: RefLookupConfig[];\r\n\r\n /**\r\n * True if when a new target is set it should be internal rather than\r\n * external by default.\r\n */\r\n @Input()\r\n public internalDefault: boolean | undefined;\r\n\r\n /**\r\n * The target to be edited.\r\n */\r\n @Input()\r\n public get target(): PinTarget | undefined | null {\r\n return this._target;\r\n }\r\n public set target(value: PinTarget | undefined | null) {\r\n if (this._target === value) {\r\n return;\r\n }\r\n this._target = value || undefined;\r\n this.updateForm(this._target);\r\n }\r\n\r\n /**\r\n * The default value for part type key when the by-type mode is active.\r\n */\r\n @Input()\r\n public defaultPartTypeKey?: string | null;\r\n\r\n /**\r\n * Emitted when user closes the editor.\r\n */\r\n @Output()\r\n public editorClose: EventEmitter<any>;\r\n /**\r\n * Emitted whenever the target changes.\r\n * The event's value is the new target.\r\n */\r\n @Output()\r\n public targetChange: EventEmitter<PinTarget>;\r\n\r\n @Output()\r\n public extMoreRequest: EventEmitter<RefLookupSetEvent>;\r\n\r\n // by type\r\n public modelEntries: ThesaurusEntry[];\r\n public partTypeKeys: string[];\r\n // by item\r\n public itemParts: Part[];\r\n // form - by item\r\n public item: FormControl<Item | null>;\r\n public itemPart: FormControl<Part | null>;\r\n // form - by type\r\n public partTypeKey: FormControl<string | null>;\r\n // form - both\r\n public gid: FormControl<string | null>;\r\n public label: FormControl<string | null>;\r\n public byTypeMode: FormControl<boolean>;\r\n public external: FormControl<boolean>;\r\n public form: FormGroup;\r\n\r\n public filter: PinRefLookupFilter;\r\n public pinFilterOptions?: IndexLookupDefinition;\r\n public lookupData?: PinLookupData;\r\n\r\n constructor(\r\n @Inject('indexLookupDefinitions')\r\n private _presetLookupDefs: IndexLookupDefinitions,\r\n public itemLookupService: ItemRefLookupService,\r\n public pinLookupService: PinRefLookupService,\r\n private _itemService: ItemService,\r\n private _thesService: ThesaurusService,\r\n private _snackbar: MatSnackBar,\r\n formBuilder: FormBuilder\r\n ) {\r\n this.partTypeKeys = [];\r\n this.itemParts = [];\r\n this._subs = [];\r\n this.modelEntries = [];\r\n this.extLookupConfigs = [];\r\n // this is the default filter for the pin lookup, which will\r\n // be merged with values provided by user here\r\n this.filter = {\r\n text: '',\r\n limit: 10,\r\n };\r\n // form\r\n this.item = formBuilder.control(null);\r\n this.itemPart = formBuilder.control(null);\r\n this.partTypeKey = formBuilder.control(null);\r\n this.gid = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.label = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.byTypeMode = formBuilder.control(false, { nonNullable: true });\r\n this.external = formBuilder.control(false, { nonNullable: true });\r\n this.form = formBuilder.group({\r\n item: this.item,\r\n itemPart: this.itemPart,\r\n partTypeKey: this.partTypeKey,\r\n gid: this.gid,\r\n label: this.label,\r\n byTypeMode: this.byTypeMode,\r\n external: this.external,\r\n });\r\n // events\r\n this.targetChange = new EventEmitter<PinTarget>();\r\n this.editorClose = new EventEmitter<any>();\r\n this.extMoreRequest = new EventEmitter<RefLookupSetEvent>();\r\n }\r\n\r\n private forceByItem(): void {\r\n this.pinByTypeMode = false;\r\n this.canSwitchMode = false;\r\n }\r\n\r\n private setupKeys(): void {\r\n // use DI presets if no lookup definitions\r\n if (!this.lookupDefinitions) {\r\n this.lookupDefinitions = this._presetLookupDefs;\r\n }\r\n // keys are all the defined lookup searches\r\n this.partTypeKeys = Object.keys(this.lookupDefinitions);\r\n\r\n // if no keys, get them from thesaurus model-types;\r\n // if this is not available, just force by item mode.\r\n if (!this.partTypeKeys.length) {\r\n if (this.modelEntries?.length) {\r\n // set lookupDefinitions from thesaurus entries\r\n this.lookupDefinitions = {};\r\n this.modelEntries.forEach((e) => {\r\n this.lookupDefinitions![e.value] = {\r\n name: e.value,\r\n typeId: e.id,\r\n };\r\n });\r\n // set type keys from thesaurus entries\r\n this.partTypeKeys = this.modelEntries.map((e) => e.value);\r\n }\r\n }\r\n\r\n // if still no keys, force by item mode\r\n if (!this.partTypeKeys.length) {\r\n this.forceByItem();\r\n } else {\r\n // set default key\r\n this.partTypeKey.setValue(\r\n this.defaultPartTypeKey || this.partTypeKeys[0]\r\n );\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n // set start mode if required\r\n if (this._startWithByTypeMode) {\r\n this.byTypeMode.setValue(true);\r\n }\r\n\r\n // whenever item changes, update item's parts and filter\r\n this._subs.push(\r\n this.item.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((item) => {\r\n this.itemPart.setValue(null);\r\n this.itemParts = item?.parts || [];\r\n this.filter = {\r\n ...this.filter,\r\n itemId: item?.id,\r\n };\r\n })\r\n );\r\n\r\n // whenever itemPart changes, update target and eventually gid\r\n this._subs.push(\r\n this.itemPart.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((part) => {\r\n if (!this.gid.value || this.gid.pristine) {\r\n this.gid.setValue(this.buildGid());\r\n }\r\n this.filter = {\r\n ...this.filter,\r\n partId: part?.id,\r\n };\r\n this.updateTarget();\r\n })\r\n );\r\n\r\n // whenever partTypeKey changes, update filter's options\r\n this._subs.push(\r\n this.partTypeKey.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((key) => {\r\n this.pinFilterOptions = key\r\n ? this.lookupDefinitions![key]\r\n : undefined;\r\n })\r\n );\r\n\r\n // whenever external changes, set required validator in label\r\n // (true for external, false for internal)\r\n this._subs.push(\r\n this.external.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((external) => {\r\n if (external) {\r\n this.label.setValidators([\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n } else {\r\n this.label.setValidators([Validators.maxLength(300)]);\r\n }\r\n this.label.updateValueAndValidity();\r\n })\r\n );\r\n\r\n // load model-types thesaurus entries\r\n this._thesService.getThesaurus('model-types', true).subscribe({\r\n next: (t) => {\r\n this.modelEntries = t.entries || [];\r\n if (this.modelEntries?.length) {\r\n this.setupKeys();\r\n } else {\r\n this.forceByItem();\r\n }\r\n },\r\n error: () => {\r\n this.forceByItem();\r\n },\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n for (let i = 0; i < this._subs.length; i++) {\r\n this._subs[i].unsubscribe();\r\n }\r\n }\r\n\r\n private buildGid(): string | null {\r\n // the GID is the part ID if any, or the item ID, followed by\r\n // the pin's value (=EID)\r\n const pin = this.lookupData?.pin;\r\n if (!pin?.value) {\r\n return null;\r\n }\r\n return pin.partId\r\n ? `P${pin.partId}/${pin.value}`\r\n : `I${pin.itemId}/${pin.value}`;\r\n }\r\n\r\n private buildLabel(): string | null {\r\n if (!this.lookupData?.pin) {\r\n return null;\r\n }\r\n const sb: string[] = [];\r\n // pin value\r\n if (this.lookupData.pin.value) {\r\n sb.push(this.lookupData.pin.value);\r\n sb.push(' | ');\r\n }\r\n // item title\r\n sb.push(this.lookupData.item?.title || this.lookupData.pin?.itemId);\r\n // part type and role\r\n if (this.lookupData.pin.partTypeId) {\r\n const e = this.modelEntries?.find(\r\n (e) => e.id === this.lookupData!.pin.partTypeId\r\n );\r\n sb.push(' (');\r\n sb.push(e?.value || this.lookupData.pin.partTypeId);\r\n if (this.lookupData.pin.roleId) {\r\n sb.push(`, ${this.lookupData.pin.roleId}`);\r\n }\r\n sb.push(')');\r\n }\r\n return sb.join('');\r\n }\r\n\r\n private getTarget(): PinTarget {\r\n if (this.external.value) {\r\n return {\r\n gid: this.gid.value || '',\r\n label: this.label.value || '',\r\n };\r\n } else {\r\n const pin = this.lookupData?.pin;\r\n return {\r\n gid: this.gid.value || '',\r\n label: this.label.value || '',\r\n itemId: pin?.itemId || '',\r\n partId: pin?.partId || '',\r\n partTypeId: pin?.partTypeId || '',\r\n roleId: pin?.roleId || '',\r\n name: pin?.name || '',\r\n value: pin?.value || '',\r\n };\r\n }\r\n }\r\n\r\n private updateTarget(): void {\r\n if (this._noTargetUpdate) {\r\n return;\r\n }\r\n if (!this.external.value) {\r\n this.gid.setValue(this.buildGid());\r\n this.gid.updateValueAndValidity();\r\n this.gid.markAsDirty();\r\n this.label.setValue(this.buildLabel());\r\n this.label.updateValueAndValidity();\r\n this.label.markAsDirty();\r\n }\r\n this._target = this.getTarget();\r\n }\r\n\r\n private updateForm(target?: PinTarget): void {\r\n // build pin info from target\r\n if (!target) {\r\n this.lookupData = undefined;\r\n this.item.reset();\r\n this.itemPart.reset();\r\n this.gid.reset();\r\n this.label.reset();\r\n return;\r\n }\r\n this._noTargetUpdate = true;\r\n this.gid.setValue(target.gid || '');\r\n this.label.setValue(target.label || '');\r\n this.lookupData = {\r\n pin: {\r\n itemId: target.itemId || '',\r\n partId: target.partId || '',\r\n partTypeId: target.partTypeId || '',\r\n roleId: target.roleId || '',\r\n name: target.name || '',\r\n value: target.value || '',\r\n },\r\n };\r\n // get item\r\n if (target.itemId) {\r\n this._itemService.getItem(target.itemId, true, true).subscribe({\r\n next: (item) => {\r\n this.item.setValue(item);\r\n this.form.markAsPristine();\r\n this._noTargetUpdate = false;\r\n this.external.setValue(!target.name);\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error(JSON.stringify(error));\r\n }\r\n this.external.setValue(!target.name);\r\n this._noTargetUpdate = false;\r\n },\r\n });\r\n } else {\r\n this.external.setValue(!target.name && !this.internalDefault);\r\n this._noTargetUpdate = false;\r\n this.updateTarget();\r\n }\r\n }\r\n\r\n /**\r\n * Called when the item lookup changes (item is looked up\r\n * by its title).\r\n *\r\n * @param item The item got from lookup.\r\n */\r\n public onItemLookupChange(item: Item): void {\r\n // load item's parts\r\n this._itemService.getItem(item.id, true, true).subscribe({\r\n next: (i) => {\r\n // setting the item will trigger its parts update\r\n this.item.setValue(i);\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error(JSON.stringify(error));\r\n }\r\n this.itemPart.setValue(null);\r\n this.itemParts = [];\r\n this.updateTarget();\r\n },\r\n });\r\n }\r\n\r\n private loadItemInfo(pin: DataPinInfo): void {\r\n forkJoin({\r\n item: this._itemService.getItem(pin.itemId, false, true),\r\n part: this._itemService.getPartFromTypeAndRole(\r\n pin.itemId,\r\n METADATA_PART_ID,\r\n undefined,\r\n true\r\n ),\r\n })\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (result) => {\r\n this.lookupData = {\r\n pin: pin,\r\n item: result.item!,\r\n metaPart: result.part as MetadataPart,\r\n };\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n this.lookupData = undefined;\r\n console.error(\r\n error ? JSON.stringify(error) : 'Error loading item/metadata'\r\n );\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Called when the pin lookup change. A pin is looked up by its\r\n * name and value (=the filter's text), and optionally by:\r\n * - its index lookup definition (selected by partTypeKey).\r\n * - its item (defined by item, in filter).\r\n * - its part (defined by itemPart, in filter).\r\n *\r\n * @param info The pin info from pin lookup.\r\n */\r\n public onPinLookupChange(info: DataPinInfo): void {\r\n this.loadItemInfo(info);\r\n }\r\n\r\n public onExtItemChange(event: RefLookupSetEvent): void {\r\n setTimeout(() => {\r\n this.gid.setValue(event.itemId);\r\n this.gid.updateValueAndValidity();\r\n this.gid.markAsDirty();\r\n\r\n this.label.setValue(event.itemLabel);\r\n this.label.updateValueAndValidity();\r\n this.label.markAsDirty();\r\n });\r\n }\r\n\r\n public onExtMoreRequest(event: RefLookupSetEvent): void {\r\n this.extMoreRequest.emit(event);\r\n }\r\n\r\n public onCopied(): void {\r\n this._snackbar.open('Copied to clipboard', 'OK', {\r\n duration: 1500,\r\n });\r\n }\r\n\r\n public close(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this._target = this.getTarget();\r\n this.targetChange.emit(this._target);\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"form-row\">\r\n <!-- external -->\r\n <mat-checkbox [formControl]=\"external\">external</mat-checkbox>\r\n <!-- mode switcher -->\r\n <div *ngIf=\"!external.value\">\r\n <mat-checkbox [formControl]=\"byTypeMode\" *ngIf=\"canSwitchMode\">\r\n by type</mat-checkbox\r\n >\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <!-- label -->\r\n <div>\r\n <mat-form-field *ngIf=\"external.value || canEditTarget\">\r\n <mat-label>label</mat-label>\r\n <input matInput [formControl]=\"label\" />\r\n <mat-error\r\n *ngIf=\"$any(label).errors?.required && (label.dirty || label.touched)\"\r\n >label required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"\r\n $any(label).errors?.maxLength && (label.dirty || label.touched)\r\n \"\r\n >label too long</mat-error\r\n >\r\n </mat-form-field>\r\n <div\r\n *ngIf=\"!external.value && !canEditTarget && label.value\"\r\n class=\"info\"\r\n >\r\n <span class=\"label\">label</span>{{ label.value }}\r\n </div>\r\n </div>\r\n\r\n <!-- gid -->\r\n <div>\r\n <mat-form-field *ngIf=\"external.value || canEditTarget\">\r\n <mat-label>GID</mat-label>\r\n <input matInput [formControl]=\"gid\" />\r\n <mat-error\r\n *ngIf=\"$any(gid).errors?.required && (gid.dirty || gid.touched)\"\r\n >GID required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(gid).errors?.maxLength && (gid.dirty || gid.touched)\"\r\n >GID too long</mat-error\r\n >\r\n </mat-form-field>\r\n <div *ngIf=\"!external.value && !canEditTarget && gid.value\" class=\"info\">\r\n <span class=\"label\">GID</span> <span class=\"gid\">{{ gid.value }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- external lookup set -->\r\n <div *ngIf=\"external.value && extLookupConfigs?.length\">\r\n <cadmus-ref-lookup-set\r\n [configs]=\"extLookupConfigs\"\r\n (itemChange)=\"onExtItemChange($event)\"\r\n (moreRequest)=\"onExtMoreRequest($event)\"\r\n ></cadmus-ref-lookup-set>\r\n </div>\r\n\r\n <!-- BY ITEM -->\r\n <div *ngIf=\"!external.value\">\r\n <fieldset *ngIf=\"!byTypeMode.value\" class=\"form-row\">\r\n <legend>pin filters</legend>\r\n <!-- item filter -->\r\n <cadmus-ref-lookup\r\n [service]=\"itemLookupService\"\r\n label=\"item\"\r\n (itemChange)=\"onItemLookupChange($event)\"\r\n ></cadmus-ref-lookup>\r\n\r\n <!-- part filter -->\r\n <mat-form-field *ngIf=\"itemParts.length\">\r\n <mat-label>part</mat-label>\r\n <mat-select [formControl]=\"itemPart\">\r\n <mat-option [value]=\"null\">(any)</mat-option>\r\n <mat-option *ngFor=\"let p of itemParts\" [value]=\"p\">{{\r\n p.typeId | flatLookup : modelEntries : \"id\" : \"value\"\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </fieldset>\r\n\r\n <!-- BY TYPE -->\r\n <div *ngIf=\"byTypeMode.value\">\r\n <!-- par type filter -->\r\n <mat-form-field *ngIf=\"partTypeKeys?.length\">\r\n <mat-label>part type</mat-label>\r\n <mat-select [formControl]=\"partTypeKey\">\r\n <mat-option *ngFor=\"let k of partTypeKeys\" [value]=\"k\">{{\r\n k\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- PIN -->\r\n <div *ngIf=\"partTypeKey.value\">\r\n <!-- pin lookup -->\r\n <cadmus-ref-lookup\r\n [service]=\"pinLookupService\"\r\n [baseFilter]=\"filter\"\r\n [options]=\"pinFilterOptions\"\r\n label=\"pin\"\r\n (itemChange)=\"onPinLookupChange($event)\"\r\n ></cadmus-ref-lookup>\r\n </div>\r\n\r\n <!-- data -->\r\n <mat-expansion-panel id=\"data\" *ngIf=\"lookupData?.pin?.name\">\r\n <mat-expansion-panel-header>pin data</mat-expansion-panel-header>\r\n <!-- table -->\r\n <table>\r\n <thead>\r\n <th></th>\r\n <th>source</th>\r\n <th>value</th>\r\n </thead>\r\n <tbody>\r\n <!-- pin -->\r\n <tr *ngIf=\"lookupData?.pin?.value\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>pin</td>\r\n <td>{{ lookupData!.pin.value }}</td>\r\n </tr>\r\n <!-- item ID -->\r\n <tr *ngIf=\"lookupData?.pin?.itemId\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.itemId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>item ID</td>\r\n <td>{{ lookupData!.pin.itemId }}</td>\r\n </tr>\r\n <!-- item title -->\r\n <tr *ngIf=\"lookupData?.item?.title\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.item!.title\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>item title</td>\r\n <td>{{ lookupData!.item!.title }}</td>\r\n </tr>\r\n <!-- part ID -->\r\n <tr *ngIf=\"lookupData?.pin?.partId\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.partId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part ID</td>\r\n <td>{{ lookupData!.pin.partId }}</td>\r\n </tr>\r\n <!-- part type ID -->\r\n <tr *ngIf=\"lookupData?.pin?.partTypeId\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.partTypeId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part type ID</td>\r\n <td>{{ lookupData!.pin!.partTypeId }}</td>\r\n </tr>\r\n <!-- part role ID -->\r\n <tr *ngIf=\"lookupData?.pin?.roleId\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.roleId!\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part role ID</td>\r\n <td>{{ lookupData!.pin!.roleId }}</td>\r\n </tr>\r\n\r\n <!-- part's metadata -->\r\n <tr\r\n *ngFor=\"\r\n let m of lookupData?.metaPart?.metadata || [];\r\n let i = index\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"m.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td class=\"metadata\">{{ m.name }}</td>\r\n <td class=\"metadata\">{{ m.value }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div>\r\n <button mat-flat-button type=\"button\" (click)=\"close()\">\r\n <mat-icon color=\"warn\">close</mat-icon>\r\n </button>\r\n <button mat-flat-button type=\"submit\" [disabled]=\"form.invalid\">\r\n <mat-icon color=\"primary\">check_circle</mat-icon> target\r\n </button>\r\n </div>\r\n</form>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\nimport { RamStorageService } from '@myrmidon/ng-tools';\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\nimport {\r\n RefLookupConfig,\r\n RefLookupSetEvent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport {\r\n PinTarget,\r\n PinTargetLookupComponent,\r\n} from '../pin-target-lookup/pin-target-lookup.component';\r\n\r\n/**\r\n * An asserted composite ID. This can be an external ID, having only the ID value\r\n * as its target.gid property; or a lookup ID, with a pin-based target.\r\n * In both cases, we can add a tag, a scope, and an assertion.\r\n */\r\nexport interface AssertedCompositeId {\r\n target: PinTarget;\r\n tag?: string;\r\n scope?: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n/**\r\n * The key to be used to retrieve the external lookup configs from the\r\n * settings storage. This is equal to the selector of\r\n * AssertedCompositeIdComponent plus \".configs\".\r\n */\r\nexport const ASSERTED_COMPOSITE_ID_CONFIGS_KEY =\r\n 'cadmus-refs-asserted-composite-id.configs';\r\n\r\n/**\r\n * An asserted composite ID editor. This allows the user to edit an asserted\r\n * composite ID, which can be an external ID or a lookup ID.\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'cadmus-refs-asserted-composite-id',\r\n templateUrl: './asserted-composite-id.component.html',\r\n styleUrls: ['./asserted-composite-id.component.css'],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n AssertionComponent,\r\n PinTargetLookupComponent,\r\n ],\r\n})\r\nexport class AssertedCompositeIdComponent implements OnInit {\r\n private _updatingForm: boolean | undefined;\r\n private _id: AssertedCompositeId | undefined;\r\n\r\n public extLookupConfigs: RefLookupConfig[];\r\n public targetExpanded: boolean;\r\n // form\r\n public target: FormControl<PinTarget | null>;\r\n public scope: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * The ID being edited.\r\n */\r\n @Input()\r\n public get id(): AssertedCompositeId | undefined | null {\r\n return this._id;\r\n }\r\n public set id(value: AssertedCompositeId | undefined | null) {\r\n if (this._id !== value) {\r\n this._id = value || undefined;\r\n this.updateForm(this._id);\r\n }\r\n }\r\n\r\n /**\r\n * True if when a new ID is set it should be internal rather than\r\n * external by default.\r\n */\r\n @Input()\r\n public internalDefault: boolean | undefined;\r\n\r\n /**\r\n * True if the UI has a submit button.\r\n */\r\n @Input()\r\n public hasSubmit: boolean | undefined;\r\n\r\n /**\r\n * True when the internal UI preselected mode should be by type rather than\r\n * by item. User can change mode unless modeSwitching is false.\r\n */\r\n @Input()\r\n public pinByTypeMode?: boolean;\r\n /**\r\n * True when the user can switch between by-type and by-item mode in\r\n * the internal UI.\r\n */\r\n @Input()\r\n public canSwitchMode?: boolean;\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n @Input()\r\n public canEditTarget?: boolean;\r\n /**\r\n * The lookup definitions to be used for the by-type lookup in the internal UI.\r\n * If not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n @Input()\r\n public lookupDefinitions?: IndexLookupDefinitions;\r\n\r\n /**\r\n * The default part type key to be used.\r\n */\r\n @Input()\r\n public defaultPartTypeKey?: string | null;\r\n\r\n /**\r\n * Emitted whenever the ID changes.\r\n */\r\n @Output()\r\n public idChange: EventEmitter<AssertedCompositeId>;\r\n\r\n /**\r\n * Emitted whenever the user requests to close the editor.\r\n */\r\n @Output()\r\n public editorClose: EventEmitter<any>;\r\n\r\n @Output()\r\n public extMoreRequest: EventEmitter<RefLookupSetEvent>;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions,\r\n settings: RamStorageService\r\n ) {\r\n this.target = formBuilder.control(null, Validators.required);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n target: this.target,\r\n scope: this.scope,\r\n tag: this.tag,\r\n assertion: this.assertion,\r\n });\r\n this.targetExpanded = false;\r\n this.extLookupConfigs =\r\n settings.retrieve<RefLookupConfig[]>(ASSERTED_COMPOSITE_ID_CONFIGS_KEY) ||\r\n [];\r\n // events\r\n this.idChange = new EventEmitter<AssertedCompositeId>();\r\n this.editorClose = new EventEmitter<any>();\r\n this.extMoreRequest = new EventEmitter<RefLookupSetEvent>();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n }\r\n\r\n public onTargetChange(target: PinTarget): void {\r\n this.target.setValue(target);\r\n this.target.markAsDirty();\r\n this.target.updateValueAndValidity();\r\n this.targetExpanded = false;\r\n }\r\n\r\n private updateForm(id: AssertedCompositeId | undefined): void {\r\n this._updatingForm = true;\r\n if (!id) {\r\n this.form.reset();\r\n } else {\r\n this.target.setValue(id.target);\r\n this.scope.setValue(id.scope || null);\r\n this.tag.setValue(id.tag || null);\r\n this.assertion.setValue(id.assertion || null);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n }\r\n\r\n private getId(): AssertedCompositeId {\r\n const external = !this.target.value?.name;\r\n const target = this.target.value;\r\n return {\r\n target: external\r\n ? {\r\n gid: target?.gid || '',\r\n label: target?.label || target?.gid || '',\r\n }\r\n : target!,\r\n scope: this.scope.value?.trim() || '',\r\n tag: this.tag.value?.trim(),\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n if (!this.hasSubmit) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n\r\n public onEditorClose(): void {\r\n this.targetExpanded = false;\r\n }\r\n\r\n public onExtMoreRequest(event: RefLookupSetEvent): void {\r\n this.extMoreRequest.emit(event);\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.valid) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div>\r\n <div class=\"form-row\">\r\n <!-- tag (bound) -->\r\n <mat-form-field *ngIf=\"idTagEntries?.length\" class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n <mat-option *ngFor=\"let e of idTagEntries\" [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- tag (free) -->\r\n <mat-form-field *ngIf=\"!idTagEntries?.length\" class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n <mat-error\r\n *ngIf=\"$any(tag.errors)?.maxLength && (tag.dirty || tag.touched)\"\r\n >tag too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- scope (bound) -->\r\n <mat-form-field *ngIf=\"idScopeEntries?.length\" class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <mat-select [formControl]=\"scope\">\r\n <mat-option *ngFor=\"let e of idScopeEntries\" [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- scope (free) -->\r\n <mat-form-field *ngIf=\"!idScopeEntries?.length\" class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <input matInput [formControl]=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(scope.errors)?.maxLength && (scope.dirty || scope.touched)\r\n \"\r\n >scope too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- label and GID -->\r\n <div class=\"info\" *ngIf=\"target.value?.label\">\r\n <span class=\"label\">label</span>{{ target.value?.label }}\r\n </div>\r\n <div class=\"info\" *ngIf=\"target.value?.gid\">\r\n <span class=\"label\">GID</span>{{ target.value?.gid }}\r\n </div>\r\n </div>\r\n\r\n <!-- target -->\r\n <div class=\"boxed\">\r\n <mat-expansion-panel [(expanded)]=\"targetExpanded\">\r\n <mat-expansion-panel-header>target</mat-expansion-panel-header>\r\n <cadmus-pin-target-lookup\r\n [pinByTypeMode]=\"pinByTypeMode\"\r\n [canSwitchMode]=\"canSwitchMode\"\r\n [canEditTarget]=\"canEditTarget\"\r\n [lookupDefinitions]=\"lookupDefinitions\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey\"\r\n [target]=\"target.value\"\r\n [internalDefault]=\"internalDefault\"\r\n [extLookupConfigs]=\"extLookupConfigs\"\r\n (targetChange)=\"onTargetChange($event)\"\r\n (editorClose)=\"onEditorClose()\"\r\n (extMoreRequest)=\"onExtMoreRequest($event)\"\r\n ></cadmus-pin-target-lookup>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- assertion -->\r\n <br />\r\n <div class=\"boxed\">\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [assertion]=\"assertion.value\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n >\r\n </cadmus-refs-assertion>\r\n </mat-expansion-panel>\r\n </div>\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div *ngIf=\"hasSubmit\">\r\n <button\r\n mat-icon-button\r\n color=\"warn\"\r\n type=\"button\"\r\n (click)=\"cancel()\"\r\n [disabled]=\"!this.target.value?.gid || !this.target.value?.label\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n color=\"primary\"\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon>check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs';\r\n\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { DialogService } from '@myrmidon/ng-mat-tools';\r\n\r\nimport {\r\n AssertedCompositeId,\r\n AssertedCompositeIdComponent,\r\n} from '../asserted-composite-id/asserted-composite-id.component';\r\n\r\n/**\r\n * Asserted IDs editor.\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'cadmus-refs-asserted-composite-ids',\r\n templateUrl: './asserted-composite-ids.component.html',\r\n styleUrls: ['./asserted-composite-ids.component.css'],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n AssertedCompositeIdComponent,\r\n ],\r\n})\r\nexport class AssertedCompositeIdsComponent {\r\n private _ids: AssertedCompositeId[];\r\n private _editedIndex: number;\r\n public edited?: AssertedCompositeId;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedCompositeId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedCompositeId[]) {\r\n if (this._ids !== value) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n }\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * True when the internal UI preselected mode should be by type rather than\r\n * by item. User can change mode unless modeSwitching is false.\r\n */\r\n @Input()\r\n public pinByTypeMode?: boolean;\r\n /**\r\n * True when the user can switch between by-type and by-item mode in\r\n * the internal UI.\r\n */\r\n @Input()\r\n public canSwitchMode?: boolean;\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n @Input()\r\n public canEditTarget?: boolean;\r\n /**\r\n * The lookup definitions to be used for the by-type lookup in the internal UI.\r\n * If not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n @Input()\r\n public lookupDefinitions?: IndexLookupDefinitions;\r\n\r\n /**\r\n * The default part type key.\r\n */\r\n @Input()\r\n public defaultPartTypeKey?: string | null;\r\n\r\n /**\r\n * True if when a new ID is set it should be internal rather than\r\n * external by default.\r\n */\r\n @Input()\r\n public internalDefault: boolean | undefined;\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n @Output()\r\n public idsChange: EventEmitter<AssertedCompositeId[]>;\r\n\r\n public entries: FormControl<AssertedCompositeId[]>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder, private _dialogService: DialogService) {\r\n this._ids = [];\r\n this._editedIndex = -1;\r\n this.idsChange = new EventEmitter<AssertedCompositeId[]>();\r\n this.entries = formBuilder.control([], { nonNullable: true });\r\n // form\r\n this.form = formBuilder.group({\r\n ids: this.entries,\r\n });\r\n }\r\n\r\n private updateForm(ids: AssertedCompositeId[]): void {\r\n if (!ids?.length) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(ids, { emitEvent: false });\r\n this.entries.updateValueAndValidity();\r\n this.form.markAsPristine();\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.entries.value);\r\n }\r\n\r\n public addId(): void {\r\n this.editId(\r\n {\r\n target: { gid: '', label: '' },\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editId(id: AssertedCompositeId, index: number): void {\r\n this._editedIndex = index;\r\n this.edited = id;\r\n }\r\n\r\n public closeId(): void {\r\n this._editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveId(entry: AssertedCompositeId): void {\r\n const entries = [...this.entries.value];\r\n if (this._editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this._editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeId();\r\n }\r\n\r\n public deleteId(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete ID?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this._editedIndex === index) {\r\n this.closeId();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n });\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public onIdChange(id: AssertedCompositeId): void {\r\n this.saveId(id);\r\n this.emitIdsChange();\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <!-- buttons -->\r\n <button type=\"button\" color=\"primary\" mat-flat-button (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n <!-- list -->\r\n <table *ngIf=\"entries.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>label</th>\r\n <th>value</th>\r\n <th>ass.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let entry of entries.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry?.target?.label }}</td>\r\n <td>{{ entry?.target?.gid }}</td>\r\n <td>{{ entry?.assertion ? \"Y\" : \"N\" }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header\r\n >ID {{ edited?.target?.label }}</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-asserted-composite-id\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [hasSubmit]=\"true\"\r\n [pinByTypeMode]=\"pinByTypeMode\"\r\n [canSwitchMode]=\"canSwitchMode\"\r\n [canEditTarget]=\"canEditTarget\"\r\n [lookupDefinitions]=\"lookupDefinitions\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey\"\r\n [internalDefault]=\"internalDefault\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-composite-id>\r\n </mat-expansion-panel>\r\n</form>\r\n","/*\r\n * Public API Surface of cadmus-refs-asserted-ids\r\n */\r\n\r\nexport * from './lib/asserted-id/asserted-id.component';\r\nexport * from './lib/asserted-ids/asserted-ids.component';\r\nexport * from './lib/scoped-pin-lookup/scoped-pin-lookup.component';\r\nexport * from './lib/asserted-composite-id/asserted-composite-id.component';\r\nexport * from './lib/asserted-composite-ids/asserted-composite-ids.component';\r\nexport * from './lib/pin-target-lookup/pin-target-lookup.component';\r\n\r\nexport * from './lib/services/pin-ref-lookup.service';\r\nexport * from './lib/services/item-ref-lookup.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["METADATA_PART_ID","i4","i1","i5","i6","i7","i9","i10","debounceTime","i1.ItemRefLookupService","i2.PinRefLookupService","i3","i8","i12","i13","i14","i15","i16"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA;;;;AAIG;MAIU,mBAAmB,CAAA;AAC9B,IAAA,WAAA,CAAoB,YAAyB,EAAA;QAAzB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAa;KAAI;AAE1C,IAAA,OAAO,CAAC,IAAqB,EAAA;AAClC,QAAA,OAAO,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;KAC1B;IAEO,UAAU,CAChB,GAA0B,EAC1B,MAA0B,EAAA;QAE1B,MAAM,EAAE,GAAa,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,OAAO,CAAC;AAEpB,QAAA,IAAI,GAAG,CAAC,MAAM,EAAE;YACd,EAAE,CAAC,IAAI,CAAC,CAAA,YAAA,EAAe,GAAG,CAAC,MAAM,CAAG,CAAA,CAAA,CAAC,CAAC;SACvC;AACD,QAAA,IAAI,GAAG,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE;AACb,gBAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACd;YACD,EAAE,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,GAAG,CAAC,MAAM,CAAG,CAAA,CAAA,CAAC,CAAC;SACnC;AACD,QAAA,IAAI,GAAG,CAAC,IAAI,EAAE;AACZ,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE;AACb,gBAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACd;YACD,EAAE,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,GAAG,CAAC,IAAI,CAAG,CAAA,CAAA,CAAC,CAAC;SAC/B;AACD,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE;AACb,gBAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACd;YACD,EAAE,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,MAAM,CAAC,MAAM,CAAG,CAAA,CAAA,CAAC,CAAC;SACtC;AACD,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE;AACb,gBAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACd;YACD,EAAE,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,MAAM,CAAC,MAAM,CAAG,CAAA,CAAA,CAAC,CAAC;SACtC;AACD,QAAA,IAAI,MAAM,CAAC,IAAI,EAAE;AACf,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE;AACb,gBAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACd;;YAED,EAAE,CAAC,IAAI,CAAC,CAAW,QAAA,EAAA,MAAM,CAAC,IAAI,CAAG,CAAA,CAAA,CAAC,CAAC;SACpC;AAED,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACpB;IAEM,MAAM,CAAC,MAA0B,EAAE,OAAa,EAAA;;QAErD,MAAM,GAAG,GAAG,OAAgC,CAAC;QAC7C,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;SACf;;QAGD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;;QAG3C,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAC9D,GAAG,CAAC,CAAC,CAAsC,KAAI;AAC7C,YAAA,IAAI,CAAC,CAAC,KAAK,EAAE;AACX,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACvB,gBAAA,OAAO,EAAE,CAAC;aACX;iBAAM;AACL,gBAAA,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;aAC7B;SACF,CAAC,CACH,CAAC;KACH;8GAzEU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACED;AACA,MAAMA,kBAAgB,GAAG,mBAAmB,CAAC;AAe7C;;;;;;AAMG;MAoBU,wBAAwB,CAAA;AAanC,IAAA,WAAA,CACE,WAAwB,EAChB,YAAyB,EAC1B,aAAkC,EAElC,UAAkC,EAAA;QAHjC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAa;QAC1B,IAAa,CAAA,aAAA,GAAb,aAAa,CAAqB;QAElC,IAAU,CAAA,UAAA,GAAV,UAAU,CAAwB;;;QAIzC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAEpC,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC;YAC/B,GAAG,EAAE,IAAI,CAAC,GAAG;AACd,SAAA,CAAC,CAAC;;QAEH,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;AAClC,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC;AAC1B,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;YAC9B,EAAE,EAAE,IAAI,CAAC,EAAE;AACZ,SAAA,CAAC,CAAC;;AAEH,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,EAAU,CAAC;KAC1C;IAED,QAAQ,GAAA;;QAEN,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;SACnC;KACF;AAEM,IAAA,YAAY,CAAC,IAAiB,EAAA;AACnC,QAAA,MAAM,IAAI,GAAe;AACvB,YAAA,GAAG,EAAE,IAAI;SACV,CAAC;;AAEF,QAAA,QAAQ,CAAC;AACP,YAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AACzD,YAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAC5C,IAAI,CAAC,MAAM,EACXA,kBAAgB,EAChB,SAAS,EACT,IAAI,CACL;SACF,CAAC;AACC,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,MAAM,KAAI;AACf,gBAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAoB,CAAC;AACxC,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aAClB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CACX,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,6BAA6B,CAC9D,CAAC;aACH;AACF,SAAA,CAAC,CAAC;KACN;AAEM,IAAA,iBAAiB,CAAC,IAAY,EAAE,SAAS,GAAG,CAAC,CAAC,EAAA;QACnD,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;QAE7B,QAAQ,IAAI;AACV,YAAA,KAAK,KAAK;gBACR,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC;gBAC3B,MAAM;AACR,YAAA,KAAK,QAAQ;gBACX,EAAE,IAAI,IAAI,CAAC,IAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;gBAChC,MAAM;AACR,YAAA,KAAK,QAAQ;gBACX,EAAE,IAAI,IAAI,CAAC,IAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;gBAChC,MAAM;AACR,YAAA,KAAK,YAAY;gBACf,EAAE,IAAI,IAAI,CAAC,IAAK,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;gBACpC,MAAM;AACR,YAAA,KAAK,YAAY;gBACf,EAAE,IAAI,IAAI,CAAC,IAAK,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;gBACpC,MAAM;AACR,YAAA,KAAK,UAAU;AACb,gBAAA,EAAE,IAAI,IAAI,CAAC,IAAK,CAAC,IAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;gBACjD,MAAM;SACT;AAED,QAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC;KAClC;IAEM,MAAM,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACvB,OAAO;SACR;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAM,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;KACvB;IAEM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC;KAClC;AAvHU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,0GAiBzB,wBAAwB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAjBvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,mHCxErC,+tKA0KA,EAAA,MAAA,EAAA,CAAA,kMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/GI,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,mqBACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,oYAClB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,0WACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;gBAEf,kBAAkB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGT,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAnBpC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,0BAA0B,EAG3B,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACf,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,eAAe;;wBAEf,kBAAkB;AACnB,qBAAA,EAAA,QAAA,EAAA,+tKAAA,EAAA,MAAA,EAAA,CAAA,kMAAA,CAAA,EAAA,CAAA;;0BAmBE,MAAM;2BAAC,wBAAwB,CAAA;yCAN3B,MAAM,EAAA,CAAA;sBADZ,MAAM;;;MExBI,mBAAmB,CAAA;AAgC9B,IAAA,IACW,EAAE,GAAA;QACX,OAAO,IAAI,CAAC,GAAG,CAAC;KACjB;IACD,IAAW,EAAE,CAAC,KAAoC,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,GAAG,KAAK,IAAI,SAAS,CAAC;AAC9B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC3B;KACF;AAiBD,IAAA,WAAA,CACE,WAAwB,EACjB,aAAkC,EAElC,UAAkC,EAAA;QAFlC,IAAa,CAAA,aAAA,GAAb,aAAa,CAAqB;QAElC,IAAU,CAAA,UAAA,GAAV,UAAU,CAAwB;AAEzC,QAAA,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;AACrC,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC;AAC1B,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;YAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;;AAE5B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAc,CAAC;AAC/C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,EAAO,CAAC;KAC5C;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC7D,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;AACH,SAAC,CAAC,CAAC;KACJ;AAEM,IAAA,iBAAiB,CAAC,SAAgC,EAAA;QACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;KAC5C;AAEM,IAAA,QAAQ,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC7B;AAEO,IAAA,UAAU,CAAC,KAA6B,EAAA;AAC9C,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;SACnB;aAAM;YACL,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;SAC5B;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC5B;IAEO,KAAK,GAAA;QACX,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;YACrC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AACrC,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS;SAC7C,CAAC;KACH;IAEM,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC9B;KACF;IAEM,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACzB;IAEM,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC9B;KACF;AA7IU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,+EA6DpB,wBAAwB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGA7DvB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1DhC,u4GA+FA,EDlDI,MAAA,EAAA,CAAA,gWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,0WACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,wBAAwB,EAAA,QAAA,EAAA,0BAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGf,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAnB/B,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,yBAAyB,EAG1B,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACf,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,eAAe;wBACf,kBAAkB;wBAClB,wBAAwB;AACzB,qBAAA,EAAA,QAAA,EAAA,u4GAAA,EAAA,MAAA,EAAA,CAAA,gWAAA,CAAA,EAAA,CAAA;;0BA+DE,MAAM;2BAAC,wBAAwB,CAAA;yCA/C3B,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAKC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAKC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAKC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAKC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAIK,EAAE,EAAA,CAAA;sBADZ,KAAK;gBAeC,WAAW,EAAA,CAAA;sBADjB,KAAK;gBAIC,SAAS,EAAA,CAAA;sBADf,KAAK;gBAIC,QAAQ,EAAA,CAAA;sBADd,MAAM;gBAIA,WAAW,EAAA,CAAA;sBADjB,MAAM;;;AE3FT;;AAEG;MAeU,oBAAoB,CAAA;AAK/B;;AAEG;AACH,IAAA,IACW,GAAG,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IACD,IAAW,GAAG,CAAC,KAAmB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACxB;KACF;IA+BD,WAAY,CAAA,WAAwB,EAAU,cAA6B,EAAA;QAA7B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAe;AACzE,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,EAAgB,CAAC;AAClD,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;;AAE9D,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;YAC5B,GAAG,EAAE,IAAI,CAAC,OAAO;AAClB,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,UAAU,CAAC,GAAiB,EAAA;AAClC,QAAA,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO;SACR;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;KAC5B;IAEO,aAAa,GAAA;QACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KACzC;IAEM,KAAK,GAAA;QACV,IAAI,CAAC,MAAM,CACT;AACE,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,KAAK,EAAE,EAAE;SACV,EACD,CAAC,CAAC,CACH,CAAC;KACH;IAEM,MAAM,CAAC,EAAc,EAAE,KAAa,EAAA;AACzC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;KAClB;IAEM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;KACzB;AAEM,IAAA,MAAM,CAAC,KAAiB,EAAA;QAC7B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,EAAE;AAC5B,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrB;aAAM;YACL,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;SAC7C;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;AAEM,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,cAAc;AAChB,aAAA,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC;AACrC,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,aAAA,SAAS,CAAC,CAAC,GAAG,KAAI;YACjB,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,EAAE;oBAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;iBAChB;gBACD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAA,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/B,gBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC3B,gBAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;gBACtC,IAAI,CAAC,aAAa,EAAE,CAAC;aACtB;AACH,SAAC,CAAC,CAAC;KACN;AAEM,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,OAAO;SACR;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAEM,IAAA,UAAU,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE;YAC1C,OAAO;SACR;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAEM,IAAA,UAAU,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;8GA5JU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,ECvCjC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,g9EAkFA,EDnDI,MAAA,EAAA,CAAA,oDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,oLACb,mBAAmB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGV,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAdhC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,0BAA0B,EAG3B,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,kBAAkB;wBAClB,aAAa;wBACb,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,g9EAAA,EAAA,MAAA,EAAA,CAAA,oDAAA,CAAA,EAAA,CAAA;8GAWU,GAAG,EAAA,CAAA;sBADb,KAAK;gBAaC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAKC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAKC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAKC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAKC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAOC,SAAS,EAAA,CAAA;sBADf,MAAM;;;MEnEI,oBAAoB,CAAA;AAC/B,IAAA,WAAA,CAAoB,YAAyB,EAAA;QAAzB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAa;KAAI;IAE1C,MAAM,CAAC,MAAuB,EAAE,OAAa,EAAA;QAClD,OAAO,IAAI,CAAC,YAAY;AACrB,aAAA,QAAQ,CACP;YACE,KAAK,EAAE,MAAM,CAAC,IAAI;AACnB,SAAA,EACD,CAAC,EACD,MAAM,CAAC,KAAK,IAAI,EAAE,CACnB;AACA,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,IAAoB,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KACpD;AAED,IAAA,OAAO,CAAC,IAAU,EAAA;QAChB,OAAO,IAAI,EAAE,KAAK,CAAC;KACpB;8GAjBU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;AC+CD;AACA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAmC7C;;;;;;AAMG;MAyBU,wBAAwB,CAAA;AAMnC;;;AAGG;AACH,IAAA,IACW,aAAa,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;KAC/B;IACD,IAAW,aAAa,CAAC,KAA0B,EAAA;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;SACnC;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC;SAC1C;KACF;AAoCD;;AAEG;AACH,IAAA,IACW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IACD,IAAW,MAAM,CAAC,KAAmC,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;YAC1B,OAAO;SACR;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,SAAS,CAAC;AAClC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC/B;AA4CD,IAAA,WAAA,CAEU,iBAAyC,EAC1C,iBAAuC,EACvC,gBAAqC,EACpC,YAAyB,EACzB,YAA8B,EAC9B,SAAsB,EAC9B,WAAwB,EAAA;QANhB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAwB;QAC1C,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAsB;QACvC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAqB;QACpC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAa;QACzB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;QAC9B,IAAS,CAAA,SAAA,GAAT,SAAS,CAAa;AAG9B,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;;;QAG3B,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE,EAAE;SACV,CAAC;;QAEF,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;AACnC,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC;AAC1B,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;AACrC,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC;AAC1B,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,SAAA,CAAC,CAAC;;AAEH,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAa,CAAC;AAClD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,EAAO,CAAC;AAC3C,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,YAAY,EAAqB,CAAC;KAC7D;IAEO,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC5B;IAEO,SAAS,GAAA;;AAEf,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;SACjD;;QAED,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;;;AAIxD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;;AAE7B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;gBAC5B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC9B,oBAAA,IAAI,CAAC,iBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG;wBACjC,IAAI,EAAE,CAAC,CAAC,KAAK;wBACb,MAAM,EAAE,CAAC,CAAC,EAAE;qBACb,CAAC;AACJ,iBAAC,CAAC,CAAC;;AAEH,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;aAC3D;SACF;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;aAAM;;AAEL,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CACvB,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAChD,CAAC;SACH;KACF;IAEM,QAAQ,GAAA;;AAEb,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SAChC;;QAGD,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,IAAI,CAAC,IAAI,CAAC,YAAY;aACnB,IAAI,CAAC,oBAAoB,EAAE,EAAEO,cAAY,CAAC,GAAG,CAAC,CAAC;AAC/C,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAClB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,GAAG;gBACZ,GAAG,IAAI,CAAC,MAAM;gBACd,MAAM,EAAE,IAAI,EAAE,EAAE;aACjB,CAAC;SACH,CAAC,CACL,CAAC;;QAGF,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,IAAI,CAAC,QAAQ,CAAC,YAAY;aACvB,IAAI,CAAC,oBAAoB,EAAE,EAAEA,cAAY,CAAC,GAAG,CAAC,CAAC;AAC/C,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;aACpC;YACD,IAAI,CAAC,MAAM,GAAG;gBACZ,GAAG,IAAI,CAAC,MAAM;gBACd,MAAM,EAAE,IAAI,EAAE,EAAE;aACjB,CAAC;YACF,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB,CAAC,CACL,CAAC;;QAGF,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,IAAI,CAAC,WAAW,CAAC,YAAY;aAC1B,IAAI,CAAC,oBAAoB,EAAE,EAAEA,cAAY,CAAC,GAAG,CAAC,CAAC;AAC/C,aAAA,SAAS,CAAC,CAAC,GAAG,KAAI;YACjB,IAAI,CAAC,gBAAgB,GAAG,GAAG;AACzB,kBAAE,IAAI,CAAC,iBAAkB,CAAC,GAAG,CAAC;kBAC5B,SAAS,CAAC;SACf,CAAC,CACL,CAAC;;;QAIF,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,IAAI,CAAC,QAAQ,CAAC,YAAY;aACvB,IAAI,CAAC,oBAAoB,EAAE,EAAEA,cAAY,CAAC,GAAG,CAAC,CAAC;AAC/C,aAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;YACtB,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AACvB,oBAAA,UAAU,CAAC,QAAQ;AACnB,oBAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC;AAC1B,iBAAA,CAAC,CAAC;aACJ;iBAAM;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACvD;AACD,YAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;SACrC,CAAC,CACL,CAAC;;QAGF,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;AAC5D,YAAA,IAAI,EAAE,CAAC,CAAC,KAAI;gBACV,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;AACpC,gBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;oBAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;iBAClB;qBAAM;oBACL,IAAI,CAAC,WAAW,EAAE,CAAC;iBACpB;aACF;YACD,KAAK,EAAE,MAAK;gBACV,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB;AACF,SAAA,CAAC,CAAC;KACJ;IAEM,WAAW,GAAA;AAChB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC7B;KACF;IAEO,QAAQ,GAAA;;;AAGd,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;AACjC,QAAA,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE;AACf,YAAA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,GAAG,CAAC,MAAM;cACb,IAAI,GAAG,CAAC,MAAM,CAAI,CAAA,EAAA,GAAG,CAAC,KAAK,CAAE,CAAA;cAC7B,CAAI,CAAA,EAAA,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAA,CAAE,CAAC;KACnC;IAEO,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC;SACb;QACD,MAAM,EAAE,GAAa,EAAE,CAAC;;QAExB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE;YAC7B,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnC,YAAA,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAChB;;AAED,QAAA,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;;QAEpE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE;YAClC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAC/B,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAW,CAAC,GAAG,CAAC,UAAU,CAChD,CAAC;AACF,YAAA,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,YAAA,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE;AAC9B,gBAAA,EAAE,CAAC,IAAI,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAA,CAAE,CAAC,CAAC;aAC5C;AACD,YAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACd;AACD,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACpB;IAEO,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACvB,OAAO;AACL,gBAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;AACzB,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;aAC9B,CAAC;SACH;aAAM;AACL,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;YACjC,OAAO;AACL,gBAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;AACzB,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;AAC7B,gBAAA,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE;AACzB,gBAAA,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE;AACzB,gBAAA,UAAU,EAAE,GAAG,EAAE,UAAU,IAAI,EAAE;AACjC,gBAAA,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE;AACzB,gBAAA,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE;AACrB,gBAAA,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;aACxB,CAAC;SACH;KACF;IAEO,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,OAAO;SACR;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;SAC1B;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;KACjC;AAEO,IAAA,UAAU,CAAC,MAAkB,EAAA;;QAEnC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO;SACR;AACD,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG;AAChB,YAAA,GAAG,EAAE;AACH,gBAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;AAC3B,gBAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;AAC3B,gBAAA,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;AACnC,gBAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;AAC3B,gBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;AACvB,gBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;AAC1B,aAAA;SACF,CAAC;;AAEF,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;AAC7D,gBAAA,IAAI,EAAE,CAAC,IAAI,KAAI;AACb,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACzB,oBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC3B,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;oBAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACrC,IAAI,CAAC,YAAY,EAAE,CAAC;iBACrB;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;oBACf,IAAI,KAAK,EAAE;wBACT,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;qBACtC;oBACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrC,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;iBAC9B;AACF,aAAA,CAAC,CAAC;SACJ;aAAM;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;KACF;AAED;;;;;AAKG;AACI,IAAA,kBAAkB,CAAC,IAAU,EAAA;;AAElC,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;AACvD,YAAA,IAAI,EAAE,CAAC,CAAC,KAAI;;AAEV,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACf,IAAI,KAAK,EAAE;oBACT,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;iBACtC;AACD,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7B,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;AACF,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,YAAY,CAAC,GAAgB,EAAA;AACnC,QAAA,QAAQ,CAAC;AACP,YAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AACxD,YAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAC5C,GAAG,CAAC,MAAM,EACV,gBAAgB,EAChB,SAAS,EACT,IAAI,CACL;SACF,CAAC;AACC,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,MAAM,KAAI;gBACf,IAAI,CAAC,UAAU,GAAG;AAChB,oBAAA,GAAG,EAAE,GAAG;oBACR,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,QAAQ,EAAE,MAAM,CAAC,IAAoB;iBACtC,CAAC;gBACF,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5B,gBAAA,OAAO,CAAC,KAAK,CACX,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,6BAA6B,CAC9D,CAAC;aACH;AACF,SAAA,CAAC,CAAC;KACN;AAED;;;;;;;;AAQG;AACI,IAAA,iBAAiB,CAAC,IAAiB,EAAA;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KACzB;AAEM,IAAA,eAAe,CAAC,KAAwB,EAAA;QAC7C,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAEvB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AAC3B,SAAC,CAAC,CAAC;KACJ;AAEM,IAAA,gBAAgB,CAAC,KAAwB,EAAA;AAC9C,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACjC;IAEM,QAAQ,GAAA;QACb,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,EAAE;AAC/C,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CAAC;KACJ;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACzB;IAEM,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACrB,OAAO;SACR;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACtC;AAlgBU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,kBAmHzB,wBAAwB,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAV,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAnHvB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/HrC,m0RAkQA,EDrJI,MAAA,EAAA,CAAA,+nBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAiB,EACjB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,uYAClB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;gBAEf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AAEb,gBAAA,kBAAkB,kOAClB,qBAAqB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGZ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAxBpC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,0BAA0B,EAG3B,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACf,eAAe;wBACf,iBAAiB;wBACjB,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,eAAe;;wBAEf,aAAa;;wBAEb,kBAAkB;wBAClB,qBAAqB;AACtB,qBAAA,EAAA,QAAA,EAAA,m0RAAA,EAAA,MAAA,EAAA,CAAA,+nBAAA,CAAA,EAAA,CAAA;;0BAqHE,MAAM;2BAAC,wBAAwB,CAAA;yNAxGvB,aAAa,EAAA,CAAA;sBADvB,KAAK;gBAiBC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAOC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAWC,iBAAiB,EAAA,CAAA;sBADvB,KAAK;gBAMC,gBAAgB,EAAA,CAAA;sBADtB,KAAK;gBAQC,eAAe,EAAA,CAAA;sBADrB,KAAK;gBAOK,MAAM,EAAA,CAAA;sBADhB,KAAK;gBAgBC,kBAAkB,EAAA,CAAA;sBADxB,KAAK;gBAOC,WAAW,EAAA,CAAA;sBADjB,MAAM;gBAOA,YAAY,EAAA,CAAA;sBADlB,MAAM;gBAIA,cAAc,EAAA,CAAA;sBADpB,MAAM;;;AErKT;;;;AAIG;AACI,MAAM,iCAAiC,GAC5C,4CAA4C;AAE9C;;;AAGG;MAoBU,4BAA4B,CAAA;AAiCvC;;AAEG;AACH,IAAA,IACW,EAAE,GAAA;QACX,OAAO,IAAI,CAAC,GAAG,CAAC;KACjB;IACD,IAAW,EAAE,CAAC,KAA6C,EAAA;AACzD,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,GAAG,KAAK,IAAI,SAAS,CAAC;AAC9B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC3B;KACF;AAgED,IAAA,WAAA,CACE,WAAwB,EACjB,aAAkC,EAElC,UAAkC,EACzC,QAA2B,EAAA;QAHpB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAqB;QAElC,IAAU,CAAA,UAAA,GAAV,UAAU,CAAwB;AAGzC,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;YAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,gBAAgB;AACnB,YAAA,QAAQ,CAAC,QAAQ,CAAoB,iCAAiC,CAAC;AACvE,gBAAA,EAAE,CAAC;;AAEL,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAuB,CAAC;AACxD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,EAAO,CAAC;AAC3C,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,YAAY,EAAqB,CAAC;KAC7D;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC7D,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;AACH,SAAC,CAAC,CAAC;KACJ;AAEM,IAAA,iBAAiB,CAAC,SAAgC,EAAA;QACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;KAC5C;AAEM,IAAA,cAAc,CAAC,MAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC7B;AAEO,IAAA,UAAU,CAAC,EAAmC,EAAA;AACpD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;SACnB;aAAM;YACL,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;SAC5B;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC5B;IAEO,KAAK,GAAA;QACX,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACjC,OAAO;AACL,YAAA,MAAM,EAAE,QAAQ;AACd,kBAAE;AACE,oBAAA,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE;oBACtB,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE;AAC1C,iBAAA;AACH,kBAAE,MAAO;YACX,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;YACrC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE;AAC3B,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS;SAC7C,CAAC;KACH;IAEM,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC9B;KACF;IAEM,aAAa,GAAA;AAClB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC7B;AAEM,IAAA,gBAAgB,CAAC,KAAwB,EAAA;AAC9C,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACjC;IAEM,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACzB;IAEM,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC9B;KACF;AAjNU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,+EAgH7B,wBAAwB,EAAA,EAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAhHvB,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnFzC,84HA8GA,EDxCI,MAAA,EAAA,CAAA,2kBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,0WACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,wBAAwB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGf,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAnBxC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,mCAAmC,EAGpC,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACf,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,eAAe;wBACf,kBAAkB;wBAClB,wBAAwB;AACzB,qBAAA,EAAA,QAAA,EAAA,84HAAA,EAAA,MAAA,EAAA,CAAA,2kBAAA,CAAA,EAAA,CAAA;;0BAkHE,MAAM;2BAAC,wBAAwB,CAAA;2EAjG3B,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAKC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAKC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAKC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAKC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAOK,EAAE,EAAA,CAAA;sBADZ,KAAK;gBAgBC,eAAe,EAAA,CAAA;sBADrB,KAAK;gBAOC,SAAS,EAAA,CAAA;sBADf,KAAK;gBAQC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAOC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAMC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAWC,iBAAiB,EAAA,CAAA;sBADvB,KAAK;gBAOC,kBAAkB,EAAA,CAAA;sBADxB,KAAK;gBAOC,QAAQ,EAAA,CAAA;sBADd,MAAM;gBAOA,WAAW,EAAA,CAAA;sBADjB,MAAM;gBAIA,cAAc,EAAA,CAAA;sBADpB,MAAM;;;AEnKT;;AAEG;MAmBU,6BAA6B,CAAA;AAKxC;;AAEG;AACH,IAAA,IACW,GAAG,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IACD,IAAW,GAAG,CAAC,KAA4B,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACxB;KACF;IAwED,WAAY,CAAA,WAAwB,EAAU,cAA6B,EAAA;QAA7B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAe;AACzE,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,EAAyB,CAAC;AAC3D,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;;AAE9D,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;YAC5B,GAAG,EAAE,IAAI,CAAC,OAAO;AAClB,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,UAAU,CAAC,GAA0B,EAAA;AAC3C,QAAA,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO;SACR;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;KAC5B;IAEO,aAAa,GAAA;QACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KACzC;IAEM,KAAK,GAAA;QACV,IAAI,CAAC,MAAM,CACT;YACE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;SAC/B,EACD,CAAC,CAAC,CACH,CAAC;KACH;IAEM,MAAM,CAAC,EAAuB,EAAE,KAAa,EAAA;AAClD,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;KAClB;IAEM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;KACzB;AAEM,IAAA,MAAM,CAAC,KAA0B,EAAA;QACtC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,EAAE;AAC5B,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrB;aAAM;YACL,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;SAC7C;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;AAEM,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,cAAc;AAChB,aAAA,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC;AACrC,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,aAAA,SAAS,CAAC,CAAC,GAAG,KAAI;YACjB,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,EAAE;oBAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;iBAChB;gBACD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAA,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/B,gBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC3B,gBAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;gBACtC,IAAI,CAAC,aAAa,EAAE,CAAC;aACtB;AACH,SAAC,CAAC,CAAC;KACN;AAEM,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,OAAO;SACR;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAEM,IAAA,UAAU,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE;YAC1C,OAAO;SACR;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAEM,IAAA,UAAU,CAAC,EAAuB,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;8GApMU,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/C1C,i/FA+FA,ED5DI,MAAA,EAAA,CAAA,6HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,wUACf,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,8BAClB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,4BAA4B,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGnB,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAlBzC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,oCAAoC,EAGrC,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACf,iBAAiB;wBACjB,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,4BAA4B;AAC7B,qBAAA,EAAA,QAAA,EAAA,i/FAAA,EAAA,MAAA,EAAA,CAAA,6HAAA,CAAA,EAAA,CAAA;8GAWU,GAAG,EAAA,CAAA;sBADb,KAAK;gBAaC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAKC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAKC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAKC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAKC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAQC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAOC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAMC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAWC,iBAAiB,EAAA,CAAA;sBADvB,KAAK;gBAOC,kBAAkB,EAAA,CAAA;sBADxB,KAAK;gBAQC,eAAe,EAAA,CAAA;sBADrB,KAAK;gBAOC,SAAS,EAAA,CAAA;sBADf,MAAM;;;AElIT;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"myrmidon-cadmus-refs-asserted-ids.mjs","sources":["../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/pin-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/scoped-pin-lookup/scoped-pin-lookup.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/scoped-pin-lookup/scoped-pin-lookup.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/item-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/pin-target-lookup/pin-target-lookup.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/pin-target-lookup/pin-target-lookup.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-id/asserted-composite-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-id/asserted-composite-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-ids/asserted-composite-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-ids/asserted-composite-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/public-api.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/myrmidon-cadmus-refs-asserted-ids.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { map, Observable, of } from 'rxjs';\n\nimport { ItemService } from '@myrmidon/cadmus-api';\nimport { DataPinInfo, IndexLookupDefinition } from '@myrmidon/cadmus-core';\nimport {\n RefLookupFilter,\n RefLookupService,\n} from '@myrmidon/cadmus-refs-lookup';\nimport { DataPage, ErrorWrapper } from '@myrmidon/ng-tools';\n\n/**\n * Pin-based lookup filter. This is a RefLookupFilter with the addition\n * of the item ID and part ID, which are used to filter the results\n * by the ItemPinLookupComponent.\n */\nexport interface PinRefLookupFilter extends RefLookupFilter {\n itemId?: string;\n partId?: string;\n}\n\n/**\n * Cadmus pin-based lookup data service. The text being searched here is just\n * the pin's value, according to the options specified. These options correspond\n * to an index lookup definition. The resulting items are of type DataPinInfo.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class PinRefLookupService implements RefLookupService {\n constructor(private _itemService: ItemService) {}\n\n public getName(item: any | undefined): string {\n return item?.value || '';\n }\n\n private buildQuery(\n def: IndexLookupDefinition,\n filter: PinRefLookupFilter\n ): string {\n const sb: string[] = [];\n const AND = ' AND ';\n\n if (def.typeId) {\n sb.push(`[partTypeId=${def.typeId}]`);\n }\n if (def.roleId) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[roleId=${def.roleId}]`);\n }\n if (def.name) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[name=${def.name}]`);\n }\n if (filter.itemId) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[itemId=${filter.itemId}]`);\n }\n if (filter.partId) {\n if (sb.length) {\n sb.push(AND);\n }\n sb.push(`[partId=${filter.partId}]`);\n }\n if (filter.text) {\n if (sb.length) {\n sb.push(AND);\n }\n // for other operators see backend SqlQueryBuilderBase.cs\n sb.push(`[value*=${filter.text}]`); // *= is \"contains\"\n }\n\n return sb.join('');\n }\n\n public lookup(filter: PinRefLookupFilter, options?: any): Observable<any[]> {\n // the index lookup definition is required\n const def = options as IndexLookupDefinition;\n if (!def) {\n return of([]);\n }\n\n // build the corresponding pin query\n const query = this.buildQuery(def, filter);\n\n // search the index\n return this._itemService.searchPins(query, 1, filter.limit).pipe(\n map((w: ErrorWrapper<DataPage<DataPinInfo>>) => {\n if (w.error) {\n console.error(w.error);\n return [];\n } else {\n return w.value?.items || [];\n }\n })\n );\n }\n}\n","\r\nimport { Component, EventEmitter, Inject, Output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\n\r\nimport {\r\n DataPinInfo,\r\n IndexLookupDefinitions,\r\n Item,\r\n Part,\r\n} from '@myrmidon/cadmus-core';\r\nimport { forkJoin, take } from 'rxjs';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\nimport { RefLookupComponent } from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// from Cadmus general parts\r\nconst METADATA_PART_ID = 'it.vedph.metadata';\r\ninterface MetadataPart extends Part {\r\n metadata: {\r\n type?: string;\r\n name: string;\r\n value: string;\r\n }[];\r\n}\r\n\r\ninterface LookupInfo {\r\n pin: DataPinInfo;\r\n item?: Item;\r\n part?: MetadataPart;\r\n}\r\n\r\n/*\r\n * Scoped pin-based lookup component. This component provides a list\r\n * of pin-based searches, with a lookup control. Whenever the user\r\n * picks a pin value, he gets the details about its item and part, and\r\n * item's metadata part, if any. He can then use these data to build\r\n * some EID by variously assembling these components.\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'cadmus-scoped-pin-lookup',\r\n templateUrl: './scoped-pin-lookup.component.html',\r\n styleUrls: ['./scoped-pin-lookup.component.css'],\r\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n RefLookupComponent\n],\r\n})\r\nexport class ScopedPinLookupComponent {\r\n // lookup\r\n public key: FormControl<string | null>;\r\n public keyForm: FormGroup;\r\n public keys: string[];\r\n public info?: LookupInfo;\r\n // builder\r\n public id: FormControl<string | null>;\r\n public idForm: FormGroup;\r\n\r\n @Output()\r\n public idPick: EventEmitter<string>;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n private _itemService: ItemService,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions\r\n ) {\r\n // lookup\r\n // keys are all the defined lookup searches\r\n this.keys = Object.keys(lookupDefs);\r\n // the selected key defines the lookup scope\r\n this.key = formBuilder.control(null);\r\n this.keyForm = formBuilder.group({\r\n key: this.key,\r\n });\r\n // id\r\n this.id = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.idForm = formBuilder.group({\r\n id: this.id,\r\n });\r\n // event\r\n this.idPick = new EventEmitter<string>();\r\n }\r\n\r\n ngOnInit(): void {\r\n // pre-select a unique key\r\n if (this.keys.length === 1) {\r\n this.key.setValue(this.keys[0]);\r\n this.key.markAsDirty();\r\n this.key.updateValueAndValidity();\r\n }\r\n }\r\n\r\n public onItemChange(item: DataPinInfo): void {\r\n const info: LookupInfo = {\r\n pin: item,\r\n };\r\n // lookup item and its metadata part if any\r\n forkJoin({\r\n item: this._itemService.getItem(item.itemId, false, true),\r\n part: this._itemService.getPartFromTypeAndRole(\r\n item.itemId,\r\n METADATA_PART_ID,\r\n undefined,\r\n true\r\n ),\r\n })\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (result) => {\r\n info.item = result.item!;\r\n info.part = result.part as MetadataPart;\r\n this.info = info;\r\n },\r\n error: (error) => {\r\n console.error(\r\n error ? JSON.stringify(error) : 'Error loading item/metadata'\r\n );\r\n },\r\n });\r\n }\r\n\r\n public appendIdComponent(type: string, metaIndex = -1): void {\r\n let id = this.id.value || '';\r\n\r\n switch (type) {\r\n case 'pin':\r\n id += this.info?.pin.value;\r\n break;\r\n case 'itemId':\r\n id += this.info!.item?.id || '';\r\n break;\r\n case 'partId':\r\n id += this.info!.part?.id || '';\r\n break;\r\n case 'partTypeId':\r\n id += this.info!.part?.typeId || '';\r\n break;\r\n case 'partRoleId':\r\n id += this.info!.part?.roleId || '';\r\n break;\r\n case 'metadata':\r\n id += this.info!.part!.metadata[metaIndex].value;\r\n break;\r\n }\r\n\r\n this.id.setValue(id);\r\n this.id.markAsDirty();\r\n this.id.updateValueAndValidity();\r\n }\r\n\r\n public pickId(): void {\r\n if (this.idForm.invalid) {\r\n return;\r\n }\r\n this.idPick.emit(this.id.value!);\r\n this.info = undefined;\r\n }\r\n\r\n public resetId(): void {\r\n this.id.reset();\r\n this.id.markAsDirty();\r\n this.id.updateValueAndValidity();\r\n }\r\n}\r\n","<div>\n <!-- lookup -->\n <div>\n <form [formGroup]=\"keyForm\" class=\"form-row\">\n <!-- key -->\n @if (keys.length > 1) {\n <mat-form-field>\n <mat-label>type</mat-label>\n <mat-select [formControl]=\"key\">\n @for (k of keys; track k) {\n <mat-option [value]=\"k\">{{ k }}</mat-option>\n }\n </mat-select>\n @if ($any(key).errors?.required && (key.dirty || key.touched)) {\n <mat-error\n >type required</mat-error\n >\n }\n </mat-form-field>\n }\n <cadmus-ref-lookup\n [service]=\"lookupService\"\n label=\"pin\"\n [options]=\"key.value ? lookupDefs[key.value] : undefined\"\n (itemChange)=\"onItemChange($event)\"\n ></cadmus-ref-lookup>\n </form>\n </div>\n\n <!-- builder -->\n @if (info) {\n <mat-expansion-panel [expanded]=\"info\" [disabled]=\"!info\">\n <mat-expansion-panel-header>ID builder</mat-expansion-panel-header>\n <!-- ID -->\n <div>\n <form [formGroup]=\"idForm\" (submit)=\"pickId()\">\n <mat-form-field style=\"width: 100%\">\n <input matInput [formControl]=\"id\" />\n @if ($any(id).errors?.required && (id.dirty || id.touched)) {\n <mat-error\n >ID required</mat-error\n >\n }\n @if ($any(id).errors?.maxLength && (id.dirty || id.touched)) {\n <mat-error\n >ID too long</mat-error\n >\n }\n <button\n mat-icon-button\n type=\"button\"\n matSuffix\n (click)=\"resetId()\"\n [disabled]=\"!id.value\"\n >\n <mat-icon color=\"warn\">close</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n matSuffix\n (click)=\"pickId()\"\n [disabled]=\"idForm.invalid\"\n >\n <mat-icon color=\"primary\">check_circle</mat-icon>\n </button>\n </mat-form-field>\n </form>\n </div>\n <!-- table -->\n <table>\n <thead>\n <th></th>\n <th>source</th>\n <th>value</th>\n </thead>\n <tbody>\n <!-- pin -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('pin')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>pin</td>\n <td>{{ info!.pin.value }}</td>\n </tr>\n <!-- item ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('itemId')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>item ID</td>\n <td>{{ info!.item?.id }}</td>\n </tr>\n <!-- item title -->\n <tr>\n <td></td>\n <td>item title</td>\n <td>{{ info!.item?.title }}</td>\n </tr>\n <!-- part ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('partId')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>part ID</td>\n <td>{{ info!.part?.id }}</td>\n </tr>\n <!-- part type ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('partTypeId')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>part type ID</td>\n <td>{{ info!.part?.typeId }}</td>\n </tr>\n <!-- part role ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('partRoleId')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>part role ID</td>\n <td>{{ info!.part?.roleId }}</td>\n </tr>\n <!-- part's metadata -->\n @for (m of info!.part?.metadata; track m; let i = $index) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('metadata', i)\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td class=\"metadata\">{{ m.name }}</td>\n <td class=\"metadata\">{{ m.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n </mat-expansion-panel>\n }\n </div>\n","\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelectModule } from '@angular/material/select';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport { ScopedPinLookupComponent } from '../scoped-pin-lookup/scoped-pin-lookup.component';\r\n\r\nexport interface AssertedId {\r\n tag?: string;\r\n value: string;\r\n scope: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'cadmus-refs-asserted-id',\r\n templateUrl: './asserted-id.component.html',\r\n styleUrls: ['./asserted-id.component.css'],\r\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n AssertionComponent,\n ScopedPinLookupComponent\n],\r\n})\r\nexport class AssertedIdComponent implements OnInit {\r\n private _updatingForm: boolean | undefined;\r\n private _id: AssertedId | undefined;\r\n\r\n public tag: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public scope: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n public lookupExpanded: boolean;\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public get id(): AssertedId | undefined | null {\r\n return this._id;\r\n }\r\n public set id(value: AssertedId | undefined | null) {\r\n if (this._id !== value) {\r\n this._id = value || undefined;\r\n this.updateForm(this._id);\r\n }\r\n }\r\n\r\n /**\r\n * True to hide the pin-based EID lookup UI.\r\n */\r\n @Input()\r\n public noEidLookup: boolean | undefined;\r\n\r\n @Input()\r\n public hasSubmit: boolean | undefined;\r\n\r\n @Output()\r\n public idChange: EventEmitter<AssertedId>;\r\n\r\n @Output()\r\n public editorClose: EventEmitter<any>;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions\r\n ) {\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.value = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n tag: this.tag,\r\n value: this.value,\r\n scope: this.scope,\r\n assertion: this.assertion,\r\n });\r\n this.lookupExpanded = false;\r\n // events\r\n this.idChange = new EventEmitter<AssertedId>();\r\n this.editorClose = new EventEmitter<any>();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n }\r\n\r\n public onIdPick(id: string): void {\r\n this.value.setValue(id);\r\n this.value.markAsDirty();\r\n this.value.updateValueAndValidity();\r\n this.lookupExpanded = false;\r\n }\r\n\r\n private updateForm(value: AssertedId | undefined): void {\r\n this._updatingForm = true;\r\n if (!value) {\r\n this.form.reset();\r\n } else {\r\n this.tag.setValue(value.tag || null);\r\n this.value.setValue(value.value);\r\n this.scope.setValue(value.scope);\r\n this.assertion.setValue(value.assertion || null);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n }\r\n\r\n private getId(): AssertedId {\r\n return {\r\n tag: this.tag.value?.trim(),\r\n value: this.value.value?.trim() || '',\r\n scope: this.scope.value?.trim() || '',\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n if (!this.hasSubmit) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.valid) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <div>\n <div class=\"form-row\">\n <!-- tag (bound) -->\n @if (idTagEntries?.length) {\n <mat-form-field style=\"width: 8em\">\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of idTagEntries; track e) {\n <mat-option [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @if (!idTagEntries?.length) {\n <mat-form-field style=\"width: 8em\">\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\n <mat-error\n >tag too long</mat-error\n >\n }\n </mat-form-field>\n }\n\n <!-- scope (bound) -->\n @if (idScopeEntries?.length) {\n <mat-form-field style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n @for (e of idScopeEntries; track e) {\n <mat-option [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- scope (free) -->\n @if (!idScopeEntries?.length) {\n <mat-form-field style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <input matInput [formControl]=\"scope\" />\n @if ($any(scope.errors)?.maxLength && (scope.dirty || scope.touched)) {\n <mat-error\n >scope too long</mat-error\n >\n }\n </mat-form-field>\n }\n\n <!-- value -->\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput [formControl]=\"value\" />\n @if ($any(value.errors)?.required && (value.dirty || value.touched)) {\n <mat-error\n >value required</mat-error\n >\n }\n @if ($any(value.errors)?.maxLength && (value.dirty || value.touched)) {\n <mat-error\n >value too long</mat-error\n >\n }\n </mat-form-field>\n\n <!-- lookup -->\n @if (!noEidLookup) {\n <div style=\"margin-top: 4px\">\n <mat-expansion-panel [(expanded)]=\"lookupExpanded\">\n <mat-expansion-panel-header>lookup</mat-expansion-panel-header>\n <cadmus-scoped-pin-lookup\n (idPick)=\"onIdPick($event)\"\n ></cadmus-scoped-pin-lookup>\n </mat-expansion-panel>\n </div>\n }\n </div>\n\n <!-- assertion -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\n <cadmus-refs-assertion\n [assTagEntries]=\"assTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [refTagEntries]=\"refTagEntries\"\n [assertion]=\"assertion.value\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n </div>\n\n <!-- buttons -->\n @if (hasSubmit) {\n <div>\n <button mat-icon-button color=\"warn\" type=\"button\" (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </button>\n <button\n mat-icon-button\n color=\"primary\"\n type=\"submit\"\n [disabled]=\"form.invalid\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n </div>\n }\n </form>\n","\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs';\r\n\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { DialogService } from '@myrmidon/ng-mat-tools';\r\n\r\nimport {\r\n AssertedId,\r\n AssertedIdComponent,\r\n} from '../asserted-id/asserted-id.component';\r\n\r\n/**\r\n * Asserted IDs editor.\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'cadmus-refs-asserted-ids',\r\n templateUrl: './asserted-ids.component.html',\r\n styleUrls: ['./asserted-ids.component.css'],\r\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatExpansionModule,\n MatIconModule,\n AssertedIdComponent\n],\r\n})\r\nexport class AssertedIdsComponent {\r\n private _ids: AssertedId[];\r\n private _editedIndex: number;\r\n public edited?: AssertedId;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedId[]) {\r\n if (this._ids !== value) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n }\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n @Output()\r\n public idsChange: EventEmitter<AssertedId[]>;\r\n\r\n public entries: FormControl<AssertedId[]>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder, private _dialogService: DialogService) {\r\n this._ids = [];\r\n this._editedIndex = -1;\r\n this.idsChange = new EventEmitter<AssertedId[]>();\r\n this.entries = formBuilder.control([], { nonNullable: true });\r\n // form\r\n this.form = formBuilder.group({\r\n ids: this.entries,\r\n });\r\n }\r\n\r\n private updateForm(ids: AssertedId[]): void {\r\n if (!ids?.length) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(ids, { emitEvent: false });\r\n this.entries.updateValueAndValidity();\r\n this.form.markAsPristine();\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.entries.value);\r\n }\r\n\r\n public addId(): void {\r\n this.editId(\r\n {\r\n scope: '',\r\n value: '',\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editId(id: AssertedId, index: number): void {\r\n this._editedIndex = index;\r\n this.edited = id;\r\n }\r\n\r\n public closeId(): void {\r\n this._editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveId(entry: AssertedId): void {\r\n const entries = [...this.entries.value];\r\n if (this._editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this._editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeId();\r\n }\r\n\r\n public deleteId(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete ID?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this._editedIndex === index) {\r\n this.closeId();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n });\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public onIdChange(id: AssertedId): void {\r\n this.saveId(id);\r\n this.emitIdsChange();\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\n <div>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"addId()\">\n <mat-icon>add_circle</mat-icon> ID\n </button>\n </div>\n @if (entries.value?.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>scope</th>\n <th>value</th>\n </tr>\n </thead>\n <tbody>\n @for (\n entry of entries.value; track\n entry; let i = $index; let first = $first; let last = $last) {\n <tr\n >\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n matTooltip=\"Edit this ID\"\n (click)=\"editId(entry, i)\"\n >\n <mat-icon>edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID up\"\n [disabled]=\"first\"\n (click)=\"moveIdUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID down\"\n [disabled]=\"last\"\n (click)=\"moveIdDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n color=\"warn\"\n matTooltip=\"Delete this ID\"\n (click)=\"deleteId(i)\"\n >\n <mat-icon>remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entry.scope }}</td>\n <td>{{ entry.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\n <mat-expansion-panel-header>ID {{edited?.value}}</mat-expansion-panel-header>\n <cadmus-refs-asserted-id\n [idScopeEntries]=\"idScopeEntries\"\n [idTagEntries]=\"idTagEntries\"\n [assTagEntries]=\"assTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [refTagEntries]=\"refTagEntries\"\n [hasSubmit]=\"true\"\n [id]=\"edited\"\n (idChange)=\"onIdChange($event)\"\n (editorClose)=\"closeId()\"\n ></cadmus-refs-asserted-id>\n </mat-expansion-panel>\n</form>\n","import { Injectable } from '@angular/core';\nimport { Observable, map } from 'rxjs';\n\nimport { ItemService } from '@myrmidon/cadmus-api';\nimport { Item } from '@myrmidon/cadmus-core';\nimport {\n RefLookupFilter,\n RefLookupService,\n} from '@myrmidon/cadmus-refs-lookup';\nimport { DataPage } from '@myrmidon/ng-tools';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ItemRefLookupService implements RefLookupService {\n constructor(private _itemService: ItemService) {}\n\n public lookup(filter: RefLookupFilter, options?: any): Observable<Item[]> {\n return this._itemService\n .getItems(\n {\n title: filter.text,\n },\n 1,\n filter.limit || 10\n )\n .pipe(map((page: DataPage<Item>) => page.items));\n }\n\n getName(item: Item): string {\n return item?.title;\n }\n}\n","\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport {\r\n Subscription,\r\n debounceTime,\r\n distinctUntilChanged,\r\n forkJoin,\r\n take,\r\n} from 'rxjs';\r\n\r\nimport { ItemService, ThesaurusService } from '@myrmidon/cadmus-api';\r\nimport {\r\n DataPinInfo,\r\n IndexLookupDefinition,\r\n IndexLookupDefinitions,\r\n Item,\r\n Part,\r\n ThesaurusEntry,\r\n} from '@myrmidon/cadmus-core';\r\n\r\nimport { ClipboardModule } from '@angular/cdk/clipboard';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\n\r\nimport { NgToolsModule } from '@myrmidon/ng-tools';\r\nimport {\r\n RefLookupComponent,\r\n RefLookupConfig,\r\n RefLookupSetComponent,\r\n RefLookupSetEvent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport {\r\n PinRefLookupFilter,\r\n PinRefLookupService,\r\n} from '../services/pin-ref-lookup.service';\r\nimport { ItemRefLookupService } from '../services/item-ref-lookup.service';\r\n\r\n// from Cadmus general parts\r\nconst METADATA_PART_ID = 'it.vedph.metadata';\r\ninterface MetadataPart extends Part {\r\n metadata: {\r\n type?: string;\r\n name: string;\r\n value: string;\r\n }[];\r\n}\r\n\r\n/**\r\n * Pin lookup data used internally by the component.\r\n */\r\nexport interface PinLookupData {\r\n pin: DataPinInfo;\r\n item?: Item;\r\n metaPart?: MetadataPart;\r\n}\r\n\r\n/**\r\n * A pin-based target. This includes pin's name and value, and\r\n * the item's ID and optional part IDs. The label is a user friendly\r\n * string representation of the target, while the gid is a globally\r\n * unique identifier for the target.\r\n */\r\nexport interface PinTarget {\r\n gid: string;\r\n label: string;\r\n itemId?: string;\r\n partId?: string;\r\n partTypeId?: string;\r\n roleId?: string;\r\n name?: string;\r\n value?: string;\r\n}\r\n\r\n/*\r\n * Scoped pin-based lookup component. This component provides a list\r\n * of pin-based searches, with a lookup control. Whenever the user\r\n * picks a pin value, he gets the details about its item and part, and\r\n * item's metadata part, if any. He can then use these data to build\r\n * some EID by variously assembling these components.\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'cadmus-pin-target-lookup',\r\n templateUrl: './pin-target-lookup.component.html',\r\n styleUrls: ['./pin-target-lookup.component.css'],\r\n imports: [\n FormsModule,\n ReactiveFormsModule,\n ClipboardModule,\n MatButtonModule,\n MatCheckboxModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n NgToolsModule,\n RefLookupComponent,\n RefLookupSetComponent\n],\r\n})\r\nexport class PinTargetLookupComponent implements OnInit, OnDestroy {\r\n private _subs: Subscription[];\r\n private _target: PinTarget | undefined;\r\n private _noTargetUpdate?: boolean;\r\n private _startWithByTypeMode?: boolean;\r\n\r\n /**\r\n * True when the by-type pin lookup mode is active.\r\n * User can change mode unless modeSwitching is false.\r\n */\r\n @Input()\r\n public get pinByTypeMode(): boolean | undefined {\r\n return this.byTypeMode?.value;\r\n }\r\n public set pinByTypeMode(value: boolean | undefined) {\r\n if (!this.byTypeMode) {\r\n this._startWithByTypeMode = value;\r\n } else {\r\n this.byTypeMode.setValue(value || false);\r\n this.byTypeMode.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * True when the user can switch between by-type and by-item mode.\r\n */\r\n @Input()\r\n public canSwitchMode?: boolean;\r\n /**\r\n * True when the user can edit the target's gid/label for internal\r\n * targets.\r\n */\r\n @Input()\r\n public canEditTarget?: boolean;\r\n /**\r\n * The lookup definitions to be used for the by-type lookup. If\r\n * not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n @Input()\r\n public lookupDefinitions?: IndexLookupDefinitions;\r\n /**\r\n * The optional configurations for using external lookup services.\r\n */\r\n @Input()\r\n public extLookupConfigs: RefLookupConfig[];\r\n\r\n /**\r\n * True if when a new target is set it should be internal rather than\r\n * external by default.\r\n */\r\n @Input()\r\n public internalDefault: boolean | undefined;\r\n\r\n /**\r\n * The target to be edited.\r\n */\r\n @Input()\r\n public get target(): PinTarget | undefined | null {\r\n return this._target;\r\n }\r\n public set target(value: PinTarget | undefined | null) {\r\n if (this._target === value) {\r\n return;\r\n }\r\n this._target = value || undefined;\r\n this.updateForm(this._target);\r\n }\r\n\r\n /**\r\n * The default value for part type key when the by-type mode is active.\r\n */\r\n @Input()\r\n public defaultPartTypeKey?: string | null;\r\n\r\n /**\r\n * Emitted when user closes the editor.\r\n */\r\n @Output()\r\n public editorClose: EventEmitter<any>;\r\n /**\r\n * Emitted whenever the target changes.\r\n * The event's value is the new target.\r\n */\r\n @Output()\r\n public targetChange: EventEmitter<PinTarget>;\r\n\r\n @Output()\r\n public extMoreRequest: EventEmitter<RefLookupSetEvent>;\r\n\r\n // by type\r\n public modelEntries: ThesaurusEntry[];\r\n public partTypeKeys: string[];\r\n // by item\r\n public itemParts: Part[];\r\n // form - by item\r\n public item: FormControl<Item | null>;\r\n public itemPart: FormControl<Part | null>;\r\n // form - by type\r\n public partTypeKey: FormControl<string | null>;\r\n // form - both\r\n public gid: FormControl<string | null>;\r\n public label: FormControl<string | null>;\r\n public byTypeMode: FormControl<boolean>;\r\n public external: FormControl<boolean>;\r\n public form: FormGroup;\r\n\r\n public filter: PinRefLookupFilter;\r\n public pinFilterOptions?: IndexLookupDefinition;\r\n public lookupData?: PinLookupData;\r\n\r\n constructor(\r\n @Inject('indexLookupDefinitions')\r\n private _presetLookupDefs: IndexLookupDefinitions,\r\n public itemLookupService: ItemRefLookupService,\r\n public pinLookupService: PinRefLookupService,\r\n private _itemService: ItemService,\r\n private _thesService: ThesaurusService,\r\n private _snackbar: MatSnackBar,\r\n formBuilder: FormBuilder\r\n ) {\r\n this.partTypeKeys = [];\r\n this.itemParts = [];\r\n this._subs = [];\r\n this.modelEntries = [];\r\n this.extLookupConfigs = [];\r\n // this is the default filter for the pin lookup, which will\r\n // be merged with values provided by user here\r\n this.filter = {\r\n text: '',\r\n limit: 10,\r\n };\r\n // form\r\n this.item = formBuilder.control(null);\r\n this.itemPart = formBuilder.control(null);\r\n this.partTypeKey = formBuilder.control(null);\r\n this.gid = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.label = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.byTypeMode = formBuilder.control(false, { nonNullable: true });\r\n this.external = formBuilder.control(false, { nonNullable: true });\r\n this.form = formBuilder.group({\r\n item: this.item,\r\n itemPart: this.itemPart,\r\n partTypeKey: this.partTypeKey,\r\n gid: this.gid,\r\n label: this.label,\r\n byTypeMode: this.byTypeMode,\r\n external: this.external,\r\n });\r\n // events\r\n this.targetChange = new EventEmitter<PinTarget>();\r\n this.editorClose = new EventEmitter<any>();\r\n this.extMoreRequest = new EventEmitter<RefLookupSetEvent>();\r\n }\r\n\r\n private forceByItem(): void {\r\n this.pinByTypeMode = false;\r\n this.canSwitchMode = false;\r\n }\r\n\r\n private setupKeys(): void {\r\n // use DI presets if no lookup definitions\r\n if (!this.lookupDefinitions) {\r\n this.lookupDefinitions = this._presetLookupDefs;\r\n }\r\n // keys are all the defined lookup searches\r\n this.partTypeKeys = Object.keys(this.lookupDefinitions);\r\n\r\n // if no keys, get them from thesaurus model-types;\r\n // if this is not available, just force by item mode.\r\n if (!this.partTypeKeys.length) {\r\n if (this.modelEntries?.length) {\r\n // set lookupDefinitions from thesaurus entries\r\n this.lookupDefinitions = {};\r\n this.modelEntries.forEach((e) => {\r\n this.lookupDefinitions![e.value] = {\r\n name: e.value,\r\n typeId: e.id,\r\n };\r\n });\r\n // set type keys from thesaurus entries\r\n this.partTypeKeys = this.modelEntries.map((e) => e.value);\r\n }\r\n }\r\n\r\n // if still no keys, force by item mode\r\n if (!this.partTypeKeys.length) {\r\n this.forceByItem();\r\n } else {\r\n // set default key\r\n this.partTypeKey.setValue(\r\n this.defaultPartTypeKey || this.partTypeKeys[0]\r\n );\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n // set start mode if required\r\n if (this._startWithByTypeMode) {\r\n this.byTypeMode.setValue(true);\r\n }\r\n\r\n // whenever item changes, update item's parts and filter\r\n this._subs.push(\r\n this.item.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((item) => {\r\n this.itemPart.setValue(null);\r\n this.itemParts = item?.parts || [];\r\n this.filter = {\r\n ...this.filter,\r\n itemId: item?.id,\r\n };\r\n })\r\n );\r\n\r\n // whenever itemPart changes, update target and eventually gid\r\n this._subs.push(\r\n this.itemPart.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((part) => {\r\n if (!this.gid.value || this.gid.pristine) {\r\n this.gid.setValue(this.buildGid());\r\n }\r\n this.filter = {\r\n ...this.filter,\r\n partId: part?.id,\r\n };\r\n this.updateTarget();\r\n })\r\n );\r\n\r\n // whenever partTypeKey changes, update filter's options\r\n this._subs.push(\r\n this.partTypeKey.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((key) => {\r\n this.pinFilterOptions = key\r\n ? this.lookupDefinitions![key]\r\n : undefined;\r\n })\r\n );\r\n\r\n // whenever external changes, set required validator in label\r\n // (true for external, false for internal)\r\n this._subs.push(\r\n this.external.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((external) => {\r\n if (external) {\r\n this.label.setValidators([\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n } else {\r\n this.label.setValidators([Validators.maxLength(300)]);\r\n }\r\n this.label.updateValueAndValidity();\r\n })\r\n );\r\n\r\n // load model-types thesaurus entries\r\n this._thesService.getThesaurus('model-types', true).subscribe({\r\n next: (t) => {\r\n this.modelEntries = t.entries || [];\r\n if (this.modelEntries?.length) {\r\n this.setupKeys();\r\n } else {\r\n this.forceByItem();\r\n }\r\n },\r\n error: () => {\r\n this.forceByItem();\r\n },\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n for (let i = 0; i < this._subs.length; i++) {\r\n this._subs[i].unsubscribe();\r\n }\r\n }\r\n\r\n private buildGid(): string | null {\r\n // the GID is the part ID if any, or the item ID, followed by\r\n // the pin's value (=EID)\r\n const pin = this.lookupData?.pin;\r\n if (!pin?.value) {\r\n return null;\r\n }\r\n return pin.partId\r\n ? `P${pin.partId}/${pin.value}`\r\n : `I${pin.itemId}/${pin.value}`;\r\n }\r\n\r\n private buildLabel(): string | null {\r\n if (!this.lookupData?.pin) {\r\n return null;\r\n }\r\n const sb: string[] = [];\r\n // pin value\r\n if (this.lookupData.pin.value) {\r\n sb.push(this.lookupData.pin.value);\r\n sb.push(' | ');\r\n }\r\n // item title\r\n sb.push(this.lookupData.item?.title || this.lookupData.pin?.itemId);\r\n // part type and role\r\n if (this.lookupData.pin.partTypeId) {\r\n const e = this.modelEntries?.find(\r\n (e) => e.id === this.lookupData!.pin.partTypeId\r\n );\r\n sb.push(' (');\r\n sb.push(e?.value || this.lookupData.pin.partTypeId);\r\n if (this.lookupData.pin.roleId) {\r\n sb.push(`, ${this.lookupData.pin.roleId}`);\r\n }\r\n sb.push(')');\r\n }\r\n return sb.join('');\r\n }\r\n\r\n private getTarget(): PinTarget {\r\n if (this.external.value) {\r\n return {\r\n gid: this.gid.value || '',\r\n label: this.label.value || '',\r\n };\r\n } else {\r\n const pin = this.lookupData?.pin;\r\n return {\r\n gid: this.gid.value || '',\r\n label: this.label.value || '',\r\n itemId: pin?.itemId || '',\r\n partId: pin?.partId || '',\r\n partTypeId: pin?.partTypeId || '',\r\n roleId: pin?.roleId || '',\r\n name: pin?.name || '',\r\n value: pin?.value || '',\r\n };\r\n }\r\n }\r\n\r\n private updateTarget(): void {\r\n if (this._noTargetUpdate) {\r\n return;\r\n }\r\n if (!this.external.value) {\r\n this.gid.setValue(this.buildGid());\r\n this.gid.updateValueAndValidity();\r\n this.gid.markAsDirty();\r\n this.label.setValue(this.buildLabel());\r\n this.label.updateValueAndValidity();\r\n this.label.markAsDirty();\r\n }\r\n this._target = this.getTarget();\r\n }\r\n\r\n private updateForm(target?: PinTarget): void {\r\n // build pin info from target\r\n if (!target) {\r\n this.lookupData = undefined;\r\n this.item.reset();\r\n this.itemPart.reset();\r\n this.gid.reset();\r\n this.label.reset();\r\n return;\r\n }\r\n this._noTargetUpdate = true;\r\n this.gid.setValue(target.gid || '');\r\n this.label.setValue(target.label || '');\r\n this.lookupData = {\r\n pin: {\r\n itemId: target.itemId || '',\r\n partId: target.partId || '',\r\n partTypeId: target.partTypeId || '',\r\n roleId: target.roleId || '',\r\n name: target.name || '',\r\n value: target.value || '',\r\n },\r\n };\r\n // get item\r\n if (target.itemId) {\r\n this._itemService.getItem(target.itemId, true, true).subscribe({\r\n next: (item) => {\r\n this.item.setValue(item);\r\n this.form.markAsPristine();\r\n this._noTargetUpdate = false;\r\n this.external.setValue(!target.name);\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error(JSON.stringify(error));\r\n }\r\n this.external.setValue(!target.name);\r\n this._noTargetUpdate = false;\r\n },\r\n });\r\n } else {\r\n this.external.setValue(!target.name && !this.internalDefault);\r\n this._noTargetUpdate = false;\r\n this.updateTarget();\r\n }\r\n }\r\n\r\n /**\r\n * Called when the item lookup changes (item is looked up\r\n * by its title).\r\n *\r\n * @param item The item got from lookup.\r\n */\r\n public onItemLookupChange(item: Item): void {\r\n // load item's parts\r\n this._itemService.getItem(item.id, true, true).subscribe({\r\n next: (i) => {\r\n // setting the item will trigger its parts update\r\n this.item.setValue(i);\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error(JSON.stringify(error));\r\n }\r\n this.itemPart.setValue(null);\r\n this.itemParts = [];\r\n this.updateTarget();\r\n },\r\n });\r\n }\r\n\r\n private loadItemInfo(pin: DataPinInfo): void {\r\n forkJoin({\r\n item: this._itemService.getItem(pin.itemId, false, true),\r\n part: this._itemService.getPartFromTypeAndRole(\r\n pin.itemId,\r\n METADATA_PART_ID,\r\n undefined,\r\n true\r\n ),\r\n })\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (result) => {\r\n this.lookupData = {\r\n pin: pin,\r\n item: result.item!,\r\n metaPart: result.part as MetadataPart,\r\n };\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n this.lookupData = undefined;\r\n console.error(\r\n error ? JSON.stringify(error) : 'Error loading item/metadata'\r\n );\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Called when the pin lookup change. A pin is looked up by its\r\n * name and value (=the filter's text), and optionally by:\r\n * - its index lookup definition (selected by partTypeKey).\r\n * - its item (defined by item, in filter).\r\n * - its part (defined by itemPart, in filter).\r\n *\r\n * @param info The pin info from pin lookup.\r\n */\r\n public onPinLookupChange(info: DataPinInfo): void {\r\n this.loadItemInfo(info);\r\n }\r\n\r\n public onExtItemChange(event: RefLookupSetEvent): void {\r\n setTimeout(() => {\r\n this.gid.setValue(event.itemId);\r\n this.gid.updateValueAndValidity();\r\n this.gid.markAsDirty();\r\n\r\n this.label.setValue(event.itemLabel);\r\n this.label.updateValueAndValidity();\r\n this.label.markAsDirty();\r\n });\r\n }\r\n\r\n public onExtMoreRequest(event: RefLookupSetEvent): void {\r\n this.extMoreRequest.emit(event);\r\n }\r\n\r\n public onCopied(): void {\r\n this._snackbar.open('Copied to clipboard', 'OK', {\r\n duration: 1500,\r\n });\r\n }\r\n\r\n public close(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this._target = this.getTarget();\r\n this.targetChange.emit(this._target);\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <div class=\"form-row\">\n <!-- external -->\n <mat-checkbox [formControl]=\"external\">external</mat-checkbox>\n <!-- mode switcher -->\n @if (!external.value) {\n <div>\n @if (canSwitchMode) {\n <mat-checkbox [formControl]=\"byTypeMode\">\n by type</mat-checkbox\n >\n }\n </div>\n }\n </div>\n\n <div class=\"form-row\">\n <!-- label -->\n <div>\n @if (external.value || canEditTarget) {\n <mat-form-field>\n <mat-label>label</mat-label>\n <input matInput [formControl]=\"label\" />\n @if ($any(label).errors?.required && (label.dirty || label.touched)) {\n <mat-error\n >label required</mat-error\n >\n }\n @if (\n $any(label).errors?.maxLength && (label.dirty || label.touched)\n ) {\n <mat-error\n >label too long</mat-error\n >\n }\n </mat-form-field>\n }\n @if (!external.value && !canEditTarget && label.value) {\n <div\n class=\"info\"\n >\n <span class=\"label\">label</span>{{ label.value }}\n </div>\n }\n </div>\n\n <!-- gid -->\n <div>\n @if (external.value || canEditTarget) {\n <mat-form-field>\n <mat-label>GID</mat-label>\n <input matInput [formControl]=\"gid\" />\n @if ($any(gid).errors?.required && (gid.dirty || gid.touched)) {\n <mat-error\n >GID required</mat-error\n >\n }\n @if ($any(gid).errors?.maxLength && (gid.dirty || gid.touched)) {\n <mat-error\n >GID too long</mat-error\n >\n }\n </mat-form-field>\n }\n @if (!external.value && !canEditTarget && gid.value) {\n <div class=\"info\">\n <span class=\"label\">GID</span> <span class=\"gid\">{{ gid.value }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- external lookup set -->\n @if (external.value && extLookupConfigs?.length) {\n <div>\n <cadmus-ref-lookup-set\n [configs]=\"extLookupConfigs\"\n (itemChange)=\"onExtItemChange($event)\"\n (moreRequest)=\"onExtMoreRequest($event)\"\n ></cadmus-ref-lookup-set>\n </div>\n }\n\n <!-- BY ITEM -->\n @if (!external.value) {\n <div>\n @if (!byTypeMode.value) {\n <fieldset class=\"form-row\">\n <legend>pin filters</legend>\n <!-- item filter -->\n <cadmus-ref-lookup\n [service]=\"itemLookupService\"\n label=\"item\"\n (itemChange)=\"onItemLookupChange($event)\"\n ></cadmus-ref-lookup>\n <!-- part filter -->\n @if (itemParts.length) {\n <mat-form-field>\n <mat-label>part</mat-label>\n <mat-select [formControl]=\"itemPart\">\n <mat-option [value]=\"null\">(any)</mat-option>\n @for (p of itemParts; track p) {\n <mat-option [value]=\"p\">{{\n p.typeId | flatLookup : modelEntries : \"id\" : \"value\"\n }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </fieldset>\n }\n <!-- BY TYPE -->\n @if (byTypeMode.value) {\n <div>\n <!-- par type filter -->\n @if (partTypeKeys?.length) {\n <mat-form-field>\n <mat-label>part type</mat-label>\n <mat-select [formControl]=\"partTypeKey\">\n @for (k of partTypeKeys; track k) {\n <mat-option [value]=\"k\">{{\n k\n }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </div>\n }\n <!-- PIN -->\n @if (partTypeKey.value) {\n <div>\n <!-- pin lookup -->\n <cadmus-ref-lookup\n [service]=\"pinLookupService\"\n [baseFilter]=\"filter\"\n [options]=\"pinFilterOptions\"\n label=\"pin\"\n (itemChange)=\"onPinLookupChange($event)\"\n ></cadmus-ref-lookup>\n </div>\n }\n <!-- data -->\n @if (lookupData?.pin?.name) {\n <mat-expansion-panel id=\"data\">\n <mat-expansion-panel-header>pin data</mat-expansion-panel-header>\n <!-- table -->\n <table>\n <thead>\n <th></th>\n <th>source</th>\n <th>value</th>\n </thead>\n <tbody>\n <!-- pin -->\n @if (lookupData?.pin?.value) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n [cdkCopyToClipboard]=\"lookupData!.pin!.value\"\n (cdkCopyToClipboardCopied)=\"onCopied()\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </td>\n <td>pin</td>\n <td>{{ lookupData!.pin.value }}</td>\n </tr>\n }\n <!-- item ID -->\n @if (lookupData?.pin?.itemId) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n [cdkCopyToClipboard]=\"lookupData!.pin!.itemId\"\n (cdkCopyToClipboardCopied)=\"onCopied()\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </td>\n <td>item ID</td>\n <td>{{ lookupData!.pin.itemId }}</td>\n </tr>\n }\n <!-- item title -->\n @if (lookupData?.item?.title) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n [cdkCopyToClipboard]=\"lookupData!.item!.title\"\n (cdkCopyToClipboardCopied)=\"onCopied()\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </td>\n <td>item title</td>\n <td>{{ lookupData!.item!.title }}</td>\n </tr>\n }\n <!-- part ID -->\n @if (lookupData?.pin?.partId) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n [cdkCopyToClipboard]=\"lookupData!.pin!.partId\"\n (cdkCopyToClipboardCopied)=\"onCopied()\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </td>\n <td>part ID</td>\n <td>{{ lookupData!.pin.partId }}</td>\n </tr>\n }\n <!-- part type ID -->\n @if (lookupData?.pin?.partTypeId) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n [cdkCopyToClipboard]=\"lookupData!.pin!.partTypeId\"\n (cdkCopyToClipboardCopied)=\"onCopied()\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </td>\n <td>part type ID</td>\n <td>{{ lookupData!.pin!.partTypeId }}</td>\n </tr>\n }\n <!-- part role ID -->\n @if (lookupData?.pin?.roleId) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n [cdkCopyToClipboard]=\"lookupData!.pin!.roleId!\"\n (cdkCopyToClipboardCopied)=\"onCopied()\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </td>\n <td>part role ID</td>\n <td>{{ lookupData!.pin!.roleId }}</td>\n </tr>\n }\n <!-- part's metadata -->\n @for (\n m of lookupData?.metaPart?.metadata || []; track\n m; let i = $index) {\n <tr\n >\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n [cdkCopyToClipboard]=\"m.value\"\n (cdkCopyToClipboardCopied)=\"onCopied()\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </td>\n <td class=\"metadata\">{{ m.name }}</td>\n <td class=\"metadata\">{{ m.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n </mat-expansion-panel>\n }\n </div>\n }\n\n <!-- buttons -->\n <div>\n <button mat-flat-button type=\"button\" (click)=\"close()\">\n <mat-icon color=\"warn\">close</mat-icon>\n </button>\n <button mat-flat-button type=\"submit\" [disabled]=\"form.invalid\">\n <mat-icon color=\"primary\">check_circle</mat-icon> target\n </button>\n </div>\n </form>\n","\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\nimport { RamStorageService } from '@myrmidon/ng-tools';\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\nimport {\r\n RefLookupConfig,\r\n RefLookupSetEvent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport {\r\n PinTarget,\r\n PinTargetLookupComponent,\r\n} from '../pin-target-lookup/pin-target-lookup.component';\r\n\r\n/**\r\n * An asserted composite ID. This can be an external ID, having only the ID value\r\n * as its target.gid property; or a lookup ID, with a pin-based target.\r\n * In both cases, we can add a tag, a scope, and an assertion.\r\n */\r\nexport interface AssertedCompositeId {\r\n target: PinTarget;\r\n tag?: string;\r\n scope?: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n/**\r\n * The key to be used to retrieve the external lookup configs from the\r\n * settings storage. This is equal to the selector of\r\n * AssertedCompositeIdComponent plus \".configs\".\r\n */\r\nexport const ASSERTED_COMPOSITE_ID_CONFIGS_KEY =\r\n 'cadmus-refs-asserted-composite-id.configs';\r\n\r\n/**\r\n * An asserted composite ID editor. This allows the user to edit an asserted\r\n * composite ID, which can be an external ID or a lookup ID.\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'cadmus-refs-asserted-composite-id',\r\n templateUrl: './asserted-composite-id.component.html',\r\n styleUrls: ['./asserted-composite-id.component.css'],\r\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n AssertionComponent,\n PinTargetLookupComponent\n],\r\n})\r\nexport class AssertedCompositeIdComponent implements OnInit {\r\n private _updatingForm: boolean | undefined;\r\n private _id: AssertedCompositeId | undefined;\r\n\r\n public extLookupConfigs: RefLookupConfig[];\r\n public targetExpanded: boolean;\r\n // form\r\n public target: FormControl<PinTarget | null>;\r\n public scope: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * The ID being edited.\r\n */\r\n @Input()\r\n public get id(): AssertedCompositeId | undefined | null {\r\n return this._id;\r\n }\r\n public set id(value: AssertedCompositeId | undefined | null) {\r\n if (this._id !== value) {\r\n this._id = value || undefined;\r\n this.updateForm(this._id);\r\n }\r\n }\r\n\r\n /**\r\n * True if when a new ID is set it should be internal rather than\r\n * external by default.\r\n */\r\n @Input()\r\n public internalDefault: boolean | undefined;\r\n\r\n /**\r\n * True if the UI has a submit button.\r\n */\r\n @Input()\r\n public hasSubmit: boolean | undefined;\r\n\r\n /**\r\n * True when the internal UI preselected mode should be by type rather than\r\n * by item. User can change mode unless modeSwitching is false.\r\n */\r\n @Input()\r\n public pinByTypeMode?: boolean;\r\n /**\r\n * True when the user can switch between by-type and by-item mode in\r\n * the internal UI.\r\n */\r\n @Input()\r\n public canSwitchMode?: boolean;\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n @Input()\r\n public canEditTarget?: boolean;\r\n /**\r\n * The lookup definitions to be used for the by-type lookup in the internal UI.\r\n * If not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n @Input()\r\n public lookupDefinitions?: IndexLookupDefinitions;\r\n\r\n /**\r\n * The default part type key to be used.\r\n */\r\n @Input()\r\n public defaultPartTypeKey?: string | null;\r\n\r\n /**\r\n * Emitted whenever the ID changes.\r\n */\r\n @Output()\r\n public idChange: EventEmitter<AssertedCompositeId>;\r\n\r\n /**\r\n * Emitted whenever the user requests to close the editor.\r\n */\r\n @Output()\r\n public editorClose: EventEmitter<any>;\r\n\r\n @Output()\r\n public extMoreRequest: EventEmitter<RefLookupSetEvent>;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions,\r\n settings: RamStorageService\r\n ) {\r\n this.target = formBuilder.control(null, Validators.required);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n target: this.target,\r\n scope: this.scope,\r\n tag: this.tag,\r\n assertion: this.assertion,\r\n });\r\n this.targetExpanded = false;\r\n this.extLookupConfigs =\r\n settings.retrieve<RefLookupConfig[]>(ASSERTED_COMPOSITE_ID_CONFIGS_KEY) ||\r\n [];\r\n // events\r\n this.idChange = new EventEmitter<AssertedCompositeId>();\r\n this.editorClose = new EventEmitter<any>();\r\n this.extMoreRequest = new EventEmitter<RefLookupSetEvent>();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n }\r\n\r\n public onTargetChange(target: PinTarget): void {\r\n this.target.setValue(target);\r\n this.target.markAsDirty();\r\n this.target.updateValueAndValidity();\r\n this.targetExpanded = false;\r\n }\r\n\r\n private updateForm(id: AssertedCompositeId | undefined): void {\r\n this._updatingForm = true;\r\n if (!id) {\r\n this.form.reset();\r\n } else {\r\n this.target.setValue(id.target);\r\n this.scope.setValue(id.scope || null);\r\n this.tag.setValue(id.tag || null);\r\n this.assertion.setValue(id.assertion || null);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n }\r\n\r\n private getId(): AssertedCompositeId {\r\n const external = !this.target.value?.name;\r\n const target = this.target.value;\r\n return {\r\n target: external\r\n ? {\r\n gid: target?.gid || '',\r\n label: target?.label || target?.gid || '',\r\n }\r\n : target!,\r\n scope: this.scope.value?.trim() || '',\r\n tag: this.tag.value?.trim(),\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n if (!this.hasSubmit) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n\r\n public onEditorClose(): void {\r\n this.targetExpanded = false;\r\n }\r\n\r\n public onExtMoreRequest(event: RefLookupSetEvent): void {\r\n this.extMoreRequest.emit(event);\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.valid) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <div>\n <div class=\"form-row\">\n <!-- tag (bound) -->\n @if (idTagEntries?.length) {\n <mat-form-field class=\"short-text\">\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of idTagEntries; track e) {\n <mat-option [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @if (!idTagEntries?.length) {\n <mat-form-field class=\"short-text\">\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\n <mat-error\n >tag too long</mat-error\n >\n }\n </mat-form-field>\n }\n\n <!-- scope (bound) -->\n @if (idScopeEntries?.length) {\n <mat-form-field class=\"short-text\">\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n @for (e of idScopeEntries; track e) {\n <mat-option [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- scope (free) -->\n @if (!idScopeEntries?.length) {\n <mat-form-field class=\"short-text\">\n <mat-label>scope</mat-label>\n <input matInput [formControl]=\"scope\" />\n @if (\n $any(scope.errors)?.maxLength && (scope.dirty || scope.touched)\n ) {\n <mat-error\n >scope too long</mat-error\n >\n }\n </mat-form-field>\n }\n\n <!-- label and GID -->\n @if (target.value?.label) {\n <div class=\"info\">\n <span class=\"label\">label</span>{{ target.value?.label }}\n </div>\n }\n @if (target.value?.gid) {\n <div class=\"info\">\n <span class=\"label\">GID</span>{{ target.value?.gid }}\n </div>\n }\n </div>\n\n <!-- target -->\n <div class=\"boxed\">\n <mat-expansion-panel [(expanded)]=\"targetExpanded\">\n <mat-expansion-panel-header>target</mat-expansion-panel-header>\n <cadmus-pin-target-lookup\n [pinByTypeMode]=\"pinByTypeMode\"\n [canSwitchMode]=\"canSwitchMode\"\n [canEditTarget]=\"canEditTarget\"\n [lookupDefinitions]=\"lookupDefinitions\"\n [defaultPartTypeKey]=\"defaultPartTypeKey\"\n [target]=\"target.value\"\n [internalDefault]=\"internalDefault\"\n [extLookupConfigs]=\"extLookupConfigs\"\n (targetChange)=\"onTargetChange($event)\"\n (editorClose)=\"onEditorClose()\"\n (extMoreRequest)=\"onExtMoreRequest($event)\"\n ></cadmus-pin-target-lookup>\n </mat-expansion-panel>\n </div>\n\n <!-- assertion -->\n <br />\n <div class=\"boxed\">\n <mat-expansion-panel>\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\n <cadmus-refs-assertion\n [assTagEntries]=\"assTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [refTagEntries]=\"refTagEntries\"\n [assertion]=\"assertion.value\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n </div>\n </div>\n\n <!-- buttons -->\n @if (hasSubmit) {\n <div>\n <button\n mat-icon-button\n color=\"warn\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"!this.target.value?.gid || !this.target.value?.label\"\n >\n <mat-icon>close</mat-icon>\n </button>\n <button\n mat-icon-button\n color=\"primary\"\n type=\"submit\"\n [disabled]=\"form.invalid\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n </div>\n }\n </form>\n","\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs';\r\n\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { DialogService } from '@myrmidon/ng-mat-tools';\r\n\r\nimport {\r\n AssertedCompositeId,\r\n AssertedCompositeIdComponent,\r\n} from '../asserted-composite-id/asserted-composite-id.component';\r\n\r\n/**\r\n * Asserted IDs editor.\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'cadmus-refs-asserted-composite-ids',\r\n templateUrl: './asserted-composite-ids.component.html',\r\n styleUrls: ['./asserted-composite-ids.component.css'],\r\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatCheckboxModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n AssertedCompositeIdComponent\n],\r\n})\r\nexport class AssertedCompositeIdsComponent {\r\n private _ids: AssertedCompositeId[];\r\n private _editedIndex: number;\r\n public edited?: AssertedCompositeId;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedCompositeId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedCompositeId[]) {\r\n if (this._ids !== value) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n }\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * True when the internal UI preselected mode should be by type rather than\r\n * by item. User can change mode unless modeSwitching is false.\r\n */\r\n @Input()\r\n public pinByTypeMode?: boolean;\r\n /**\r\n * True when the user can switch between by-type and by-item mode in\r\n * the internal UI.\r\n */\r\n @Input()\r\n public canSwitchMode?: boolean;\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n @Input()\r\n public canEditTarget?: boolean;\r\n /**\r\n * The lookup definitions to be used for the by-type lookup in the internal UI.\r\n * If not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n @Input()\r\n public lookupDefinitions?: IndexLookupDefinitions;\r\n\r\n /**\r\n * The default part type key.\r\n */\r\n @Input()\r\n public defaultPartTypeKey?: string | null;\r\n\r\n /**\r\n * True if when a new ID is set it should be internal rather than\r\n * external by default.\r\n */\r\n @Input()\r\n public internalDefault: boolean | undefined;\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n @Output()\r\n public idsChange: EventEmitter<AssertedCompositeId[]>;\r\n\r\n public entries: FormControl<AssertedCompositeId[]>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder, private _dialogService: DialogService) {\r\n this._ids = [];\r\n this._editedIndex = -1;\r\n this.idsChange = new EventEmitter<AssertedCompositeId[]>();\r\n this.entries = formBuilder.control([], { nonNullable: true });\r\n // form\r\n this.form = formBuilder.group({\r\n ids: this.entries,\r\n });\r\n }\r\n\r\n private updateForm(ids: AssertedCompositeId[]): void {\r\n if (!ids?.length) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(ids, { emitEvent: false });\r\n this.entries.updateValueAndValidity();\r\n this.form.markAsPristine();\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.entries.value);\r\n }\r\n\r\n public addId(): void {\r\n this.editId(\r\n {\r\n target: { gid: '', label: '' },\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editId(id: AssertedCompositeId, index: number): void {\r\n this._editedIndex = index;\r\n this.edited = id;\r\n }\r\n\r\n public closeId(): void {\r\n this._editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveId(entry: AssertedCompositeId): void {\r\n const entries = [...this.entries.value];\r\n if (this._editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this._editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeId();\r\n }\r\n\r\n public deleteId(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete ID?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this._editedIndex === index) {\r\n this.closeId();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n });\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public onIdChange(id: AssertedCompositeId): void {\r\n this.saveId(id);\r\n this.emitIdsChange();\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\n <!-- buttons -->\n <button type=\"button\" color=\"primary\" mat-flat-button (click)=\"addId()\">\n <mat-icon>add_circle</mat-icon> ID\n </button>\n <!-- list -->\n @if (entries.value?.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>scope</th>\n <th>label</th>\n <th>value</th>\n <th>ass.</th>\n </tr>\n </thead>\n <tbody>\n @for (\n entry of entries.value; track\n entry; let i = $index; let first = $first; let last = $last) {\n <tr\n >\n <td class=\"fit-width\">\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n matTooltip=\"Edit this ID\"\n (click)=\"editId(entry, i)\"\n >\n <mat-icon>edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID up\"\n [disabled]=\"first\"\n (click)=\"moveIdUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this ID down\"\n [disabled]=\"last\"\n (click)=\"moveIdDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n color=\"warn\"\n matTooltip=\"Delete this ID\"\n (click)=\"deleteId(i)\"\n >\n <mat-icon>remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entry.scope }}</td>\n <td>{{ entry?.target?.label }}</td>\n <td>{{ entry?.target?.gid }}</td>\n <td>{{ entry?.assertion ? \"Y\" : \"N\" }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- editor -->\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\n <mat-expansion-panel-header\n >ID {{ edited?.target?.label }}</mat-expansion-panel-header\n >\n <cadmus-refs-asserted-composite-id\n [idScopeEntries]=\"idScopeEntries\"\n [idTagEntries]=\"idTagEntries\"\n [assTagEntries]=\"assTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [refTagEntries]=\"refTagEntries\"\n [hasSubmit]=\"true\"\n [pinByTypeMode]=\"pinByTypeMode\"\n [canSwitchMode]=\"canSwitchMode\"\n [canEditTarget]=\"canEditTarget\"\n [lookupDefinitions]=\"lookupDefinitions\"\n [defaultPartTypeKey]=\"defaultPartTypeKey\"\n [internalDefault]=\"internalDefault\"\n [id]=\"edited\"\n (idChange)=\"onIdChange($event)\"\n (editorClose)=\"closeId()\"\n ></cadmus-refs-asserted-composite-id>\n </mat-expansion-panel>\n </form>\n","/*\r\n * Public API Surface of cadmus-refs-asserted-ids\r\n */\r\n\r\nexport * from './lib/asserted-id/asserted-id.component';\r\nexport * from './lib/asserted-ids/asserted-ids.component';\r\nexport * from './lib/scoped-pin-lookup/scoped-pin-lookup.component';\r\nexport * from './lib/asserted-composite-id/asserted-composite-id.component';\r\nexport * from './lib/asserted-composite-ids/asserted-composite-ids.component';\r\nexport * from './lib/pin-target-lookup/pin-target-lookup.component';\r\n\r\nexport * from './lib/services/pin-ref-lookup.service';\r\nexport * from './lib/services/item-ref-lookup.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["METADATA_PART_ID","i1","i4","i5","i6","i8","i9","i3","debounceTime","i1.ItemRefLookupService","i2.PinRefLookupService","i7","i10","i11","i12","i13","i14","i15"],"mappings":"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"}
|