@myrmidon/cadmus-refs-asserted-ids 11.0.0 → 11.0.1
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"myrmidon-cadmus-refs-asserted-ids.mjs","sources":["../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/item-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/pin-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/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/public-api.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/myrmidon-cadmus-refs-asserted-ids.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Observable, map, of } from 'rxjs';\r\n\r\n// myrmidon\r\nimport { DataPage } from '@myrmidon/ngx-tools';\r\n\r\n// bricks\r\nimport {\r\n RefLookupFilter,\r\n RefLookupService,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// cadmus\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\nimport { Item } from '@myrmidon/cadmus-core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ItemRefLookupService implements RefLookupService {\r\n public readonly id = 'item';\r\n\r\n constructor(private _itemService: ItemService) {}\r\n\r\n public lookup(filter: RefLookupFilter, options?: any): Observable<Item[]> {\r\n return this._itemService\r\n .getItems(\r\n {\r\n title: filter.text,\r\n },\r\n 1,\r\n filter.limit || 10\r\n )\r\n .pipe(map((page: DataPage<Item>) => page.items));\r\n }\r\n\r\n public getById(id: string): Observable<Item | undefined> {\r\n if (!id) {\r\n return of(undefined);\r\n }\r\n return this._itemService\r\n .getItem(id, false, true)\r\n .pipe(map((item) => item ?? undefined));\r\n }\r\n\r\n getName(item: Item): string {\r\n return item?.title;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { map, Observable, of } from 'rxjs';\r\n\r\n// myrmidon\r\nimport { DataPage, ErrorWrapper } from '@myrmidon/ngx-tools';\r\n\r\n// bricks\r\nimport {\r\n RefLookupFilter,\r\n RefLookupService,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// cadmus\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\nimport { DataPinInfo, IndexLookupDefinition } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * Pin-based lookup filter. This is a RefLookupFilter with the addition\r\n * of the item ID and part ID, which are used to filter the results\r\n * by the ItemPinLookupComponent.\r\n */\r\nexport interface PinRefLookupFilter extends RefLookupFilter {\r\n itemId?: string;\r\n partId?: string;\r\n}\r\n\r\n/**\r\n * Cadmus pin-based lookup data service. The text being searched here is just\r\n * the pin's value, according to the options specified. These options correspond\r\n * to an index lookup definition. The resulting items are of type DataPinInfo.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class PinRefLookupService implements RefLookupService {\r\n public readonly id = 'pin';\r\n\r\n constructor(private _itemService: ItemService) {}\r\n\r\n public getById(_id: string): Observable<any | undefined> {\r\n // Pins are index search results, not individually addressable entities\r\n return of(undefined);\r\n }\r\n\r\n public getName(item: any | undefined): string {\r\n return item?.value || '';\r\n }\r\n\r\n private buildQuery(\r\n def: IndexLookupDefinition,\r\n filter: PinRefLookupFilter,\r\n ): string {\r\n const sb: string[] = [];\r\n const AND = ' AND ';\r\n\r\n if (def.typeId) {\r\n sb.push(`[partTypeId=${def.typeId}]`);\r\n }\r\n if (def.roleId) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[roleId=${def.roleId}]`);\r\n }\r\n if (def.name) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[name=${def.name}]`);\r\n }\r\n if (filter.itemId) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[itemId=${filter.itemId}]`);\r\n }\r\n if (filter.partId) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[partId=${filter.partId}]`);\r\n }\r\n if (filter.text) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n // for other operators see backend SqlQueryBuilderBase.cs\r\n sb.push(`[value*=${filter.text}]`); // *= is \"contains\"\r\n }\r\n\r\n return sb.join('');\r\n }\r\n\r\n public lookup(filter: PinRefLookupFilter, options?: any): Observable<any[]> {\r\n // the index lookup definition is required\r\n const def = options as IndexLookupDefinition;\r\n if (!def) {\r\n return of([]);\r\n }\r\n\r\n // build the corresponding pin query\r\n const query = this.buildQuery(def, filter);\r\n\r\n // search the index\r\n return this._itemService.searchPins(query, 1, filter.limit).pipe(\r\n map((w: ErrorWrapper<DataPage<DataPinInfo>>) => {\r\n if (w.error) {\r\n console.error(w.error);\r\n return [];\r\n } else {\r\n return w.value?.items || [];\r\n }\r\n }),\r\n );\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n effect,\r\n Inject,\r\n input,\r\n model,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n signal,\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\n// material\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\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n// myrmidon\r\nimport { FlatLookupPipe } from '@myrmidon/ngx-tools';\r\n\r\n// bricks\r\nimport {\r\n LookupProviderOptions,\r\n RefLookupSetEvent,\r\n RefLookupComponent,\r\n RefLookupConfig,\r\n RefLookupSetComponent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// cadmus\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\n// local\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 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 FormsModule,\r\n ReactiveFormsModule,\r\n // material\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 MatTooltipModule,\r\n // myrmidon\r\n FlatLookupPipe,\r\n // bricks\r\n RefLookupComponent,\r\n RefLookupSetComponent,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PinTargetLookupComponent implements OnInit, OnDestroy {\r\n private readonly _subs: Subscription[] = [];\r\n private _updatingForm = false;\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 public readonly pinByTypeMode = model<boolean>();\r\n\r\n /**\r\n * True when the user can switch between by-type and by-item mode.\r\n */\r\n public readonly canSwitchMode = model<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 public readonly canEditTarget = input<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 public readonly lookupDefinitions = model<IndexLookupDefinitions>();\r\n /**\r\n * The optional configurations for using external lookup services.\r\n */\r\n public readonly extLookupConfigs = input<RefLookupConfig[]>([]);\r\n\r\n /**\r\n * Optional preset options for external lookup providers.\r\n * Maps provider IDs to their available scopes.\r\n */\r\n public readonly lookupProviderOptions = input<LookupProviderOptions>();\r\n\r\n /**\r\n * The target to be edited.\r\n */\r\n public readonly target = model<PinTarget>();\r\n\r\n /**\r\n * The default value for part type key when the by-type mode is active.\r\n */\r\n public readonly defaultPartTypeKey = input<string>();\r\n\r\n /**\r\n * Emitted when user closes the editor.\r\n */\r\n public readonly editorClose = output();\r\n\r\n /**\r\n * Emitted when the user requests more items from an external lookup.\r\n */\r\n public readonly extMoreRequest = output<RefLookupSetEvent>();\r\n\r\n /**\r\n * Emitted when the user changes the external lookup configuration.\r\n */\r\n public readonly extLookupConfigChange = output<RefLookupConfig>();\r\n\r\n public readonly filter = signal<PinRefLookupFilter>({\r\n text: '',\r\n limit: 10,\r\n });\r\n public readonly pinFilterOptions = signal<IndexLookupDefinition | undefined>(\r\n undefined\r\n );\r\n public readonly lookupData = signal<PinLookupData | undefined>(undefined);\r\n // by type\r\n public readonly modelEntries = signal<ThesaurusEntry[]>([]);\r\n public readonly partTypeKeys = signal<string[]>([]);\r\n // by item\r\n public readonly itemParts = signal<Part[]>([]);\r\n\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 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 // 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\r\n // when pinByTypeMode changes, adjust form\r\n effect(() => {\r\n if (!this._updatingForm) {\r\n if (!this.byTypeMode.value) {\r\n this._startWithByTypeMode = this.pinByTypeMode();\r\n } else {\r\n this.byTypeMode.setValue(this.pinByTypeMode() || false, {\r\n emitEvent: false,\r\n });\r\n this.byTypeMode.updateValueAndValidity();\r\n }\r\n }\r\n });\r\n\r\n // when target changes, update form\r\n effect(() => {\r\n const target = this.target();\r\n console.log('target changed', target);\r\n this.updateForm(target);\r\n });\r\n }\r\n\r\n private emitTargetChange(): void {\r\n if (!this._updatingForm) {\r\n this.target.set(this.getTarget());\r\n }\r\n }\r\n\r\n private forceByItem(): void {\r\n this.pinByTypeMode.set(false);\r\n this.canSwitchMode.set(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.set(this._presetLookupDefs);\r\n }\r\n // keys are all the defined lookup searches\r\n this.partTypeKeys.set(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 const defs: IndexLookupDefinitions = {};\r\n this.modelEntries().forEach((e) => {\r\n defs[e.value] = {\r\n name: e.value,\r\n typeId: e.id,\r\n };\r\n });\r\n this.lookupDefinitions.set(defs);\r\n // set type keys from thesaurus entries\r\n this.partTypeKeys.set(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 (by lookup), 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, { emitEvent: false });\r\n this.itemParts.set(item?.parts || []);\r\n this.filter.set({\r\n ...this.filter(),\r\n itemId: item?.id,\r\n });\r\n })\r\n );\r\n\r\n // whenever itemPart changes (by user selection), update target and\r\n // 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.set({\r\n ...this.filter(),\r\n partId: part?.id,\r\n });\r\n this.updateTarget(true);\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.set(\r\n key ? this.lookupDefinitions()![key] : undefined\r\n );\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.set(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 // slash, pin's name, slash, 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.name}/${pin.value}`\r\n : `I${pin.itemId}/${pin.name}/${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 emitChange(): void {\r\n this.target.set(this.getTarget());\r\n }\r\n\r\n private updateTarget(suppressEmit = false): void {\r\n this._updatingForm = true;\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\r\n this._updatingForm = false;\r\n\r\n if (!suppressEmit) {\r\n this.emitTargetChange();\r\n }\r\n }\r\n\r\n private updateTargetFromData(): void {\r\n // Update GID and label without emitting changes\r\n if (!this.external.value) {\r\n this.gid.setValue(this.buildGid(), { emitEvent: false });\r\n this.gid.updateValueAndValidity();\r\n this.label.setValue(this.buildLabel(), { emitEvent: false });\r\n this.label.updateValueAndValidity();\r\n }\r\n }\r\n\r\n private updateForm(target?: PinTarget): void {\r\n this._updatingForm = true;\r\n\r\n try {\r\n // reset if no target\r\n if (!target) {\r\n this.lookupData.set(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\r\n // set gid and label\r\n this.gid.setValue(target.gid || '', { emitEvent: false });\r\n this.label.setValue(target.label || '', { emitEvent: false });\r\n // reset lookup\r\n this.lookupData.set({\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\r\n // if target is internal, get item\r\n if (target.itemId) {\r\n this._itemService.getItem(target.itemId, true, true).subscribe({\r\n next: (item) => {\r\n this._updatingForm = true;\r\n this.item.setValue(item, { emitEvent: false });\r\n this.form.markAsPristine();\r\n this.external.setValue(false, { emitEvent: false });\r\n this.updateTargetFromData();\r\n this._updatingForm = false;\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error('Item service error', error);\r\n }\r\n this._updatingForm = true;\r\n this.external.setValue(false, { emitEvent: false });\r\n this._updatingForm = false;\r\n },\r\n });\r\n } else {\r\n this.external.setValue(true, {\r\n emitEvent: false,\r\n });\r\n this.updateTargetFromData();\r\n }\r\n } finally {\r\n // ensure flag is reset even if there's an error\r\n if (!target?.itemId) {\r\n this._updatingForm = false;\r\n }\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: unknown): void {\r\n if (!item) {\r\n this.itemPart.setValue(null);\r\n this.itemParts.set([]);\r\n return;\r\n }\r\n // load item's parts\r\n this._itemService.getItem((item as 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(true); // suppress emit to avoid double emission\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error('Error getting item', error);\r\n }\r\n this.itemPart.setValue(null);\r\n this.itemParts.set([]);\r\n this.updateTarget(true); // suppress emit to avoid double emission\r\n },\r\n });\r\n }\r\n\r\n private loadItemInfo(pin?: DataPinInfo): void {\r\n if (!pin) {\r\n return;\r\n }\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.set({\r\n pin: pin,\r\n item: result.item!,\r\n metaPart: result.part as MetadataPart,\r\n });\r\n this.updateTarget(true); // suppress emit to avoid double emission\r\n },\r\n error: (error) => {\r\n this.lookupData.set(undefined);\r\n console.error('Error loading item/metadata', error);\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: unknown): void {\r\n this.loadItemInfo(info as DataPinInfo);\r\n }\r\n\r\n public onExtItemChange(event: RefLookupSetEvent): void {\r\n if (event.item) {\r\n this._updatingForm = true;\r\n setTimeout(() => {\r\n this.gid.setValue(event.itemId, { emitEvent: false });\r\n this.gid.updateValueAndValidity();\r\n this.gid.markAsDirty();\r\n\r\n this.label.setValue(event.itemLabel, { emitEvent: false });\r\n this.label.updateValueAndValidity();\r\n this.label.markAsDirty();\r\n\r\n this._updatingForm = false;\r\n });\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 onExtConfigChange(config: RefLookupConfig): void {\r\n this.extLookupConfigChange.emit(config);\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 this.form.markAllAsTouched();\r\n return;\r\n }\r\n this.emitTargetChange();\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 @if (!external.value) {\r\n <div>\r\n @if (canSwitchMode()) {\r\n <mat-checkbox [formControl]=\"byTypeMode\"> by type</mat-checkbox>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <!-- label -->\r\n <div>\r\n @if (external.value || canEditTarget()) {\r\n <mat-form-field>\r\n <mat-label>label</mat-label>\r\n <input matInput [formControl]=\"label\" />\r\n @if ($any(label).errors?.required && (label.dirty || label.touched)) {\r\n <mat-error>label required</mat-error>\r\n } @if ( $any(label).errors?.maxLength && (label.dirty || label.touched)\r\n ) {\r\n <mat-error>label too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @if (!external.value && !canEditTarget() && label.value) {\r\n <div class=\"info\"><span class=\"label\">label</span>{{ label.value }}</div>\r\n }\r\n </div>\r\n\r\n <!-- gid -->\r\n <div id=\"gid-container\">\r\n @if (external.value || canEditTarget()) {\r\n <mat-form-field>\r\n <mat-label>GID</mat-label>\r\n <input matInput [formControl]=\"gid\" />\r\n @if ($any(gid).errors?.required && (gid.dirty || gid.touched)) {\r\n <mat-error>GID required</mat-error>\r\n } @if ($any(gid).errors?.maxLength && (gid.dirty || gid.touched)) {\r\n <mat-error>GID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @if (!external.value && !canEditTarget() && gid.value) {\r\n <div class=\"info\">\r\n <span class=\"label\">GID</span> <span class=\"gid\">{{ gid.value }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- external lookup set -->\r\n @if (external.value && extLookupConfigs().length) {\r\n <fieldset>\r\n <legend>external lookup</legend>\r\n <cadmus-refs-lookup-set\r\n [configs]=\"extLookupConfigs()\"\r\n [lookupProviderOptions]=\"lookupProviderOptions()\"\r\n (itemChange)=\"onExtItemChange($event)\"\r\n (moreRequest)=\"onExtMoreRequest($event)\"\r\n (configChange)=\"onExtConfigChange($any($event))\"\r\n />\r\n </fieldset>\r\n }\r\n\r\n <!-- BY ITEM -->\r\n @if (!external.value) {\r\n <fieldset>\r\n <legend>internal lookup</legend>\r\n <div class=\"form-row\">\r\n @if (!byTypeMode.value) {\r\n <fieldset class=\"form-row\">\r\n <legend>pin filters</legend>\r\n <!-- item filter -->\r\n <cadmus-refs-lookup\r\n [service]=\"itemLookupService\"\r\n label=\"item\"\r\n (itemChange)=\"onItemLookupChange($event)\"\r\n />\r\n <!-- part filter -->\r\n @if (itemParts().length) {\r\n <mat-form-field>\r\n <mat-label>part</mat-label>\r\n <mat-select [formControl]=\"itemPart\">\r\n <mat-option [value]=\"null\">(any)</mat-option>\r\n @for (p of itemParts(); track p) {\r\n <mat-option [value]=\"p\">{{\r\n p.typeId | flatLookup : modelEntries() : \"id\" : \"value\"\r\n }}</mat-option>\r\n }\r\n </mat-select>\r\n <mat-hint>parts: {{ itemParts().length }}</mat-hint>\r\n </mat-form-field>\r\n }\r\n </fieldset>\r\n }\r\n <!-- BY TYPE -->\r\n @if (byTypeMode.value) {\r\n <div>\r\n <!-- part type filter -->\r\n @if (partTypeKeys().length) {\r\n <mat-form-field>\r\n <mat-label>part type</mat-label>\r\n <mat-select [formControl]=\"partTypeKey\">\r\n @for (k of partTypeKeys(); track k) {\r\n <mat-option [value]=\"k\">{{ k }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n }\r\n <!-- PIN -->\r\n @if (partTypeKey.value) {\r\n <div>\r\n <!-- pin lookup -->\r\n <cadmus-refs-lookup\r\n [service]=\"pinLookupService\"\r\n [baseFilter]=\"filter()\"\r\n [options]=\"pinFilterOptions()\"\r\n label=\"pin\"\r\n (itemChange)=\"onPinLookupChange($event)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n <!-- data -->\r\n @if (lookupData()?.pin?.name) {\r\n <mat-expansion-panel id=\"data\">\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 name -->\r\n @if (lookupData()?.pin?.name) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Copy value\"\r\n [cdkCopyToClipboard]=\"lookupData()!.pin!.name\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>pin name</td>\r\n <td>{{ lookupData()!.pin.name }}</td>\r\n </tr>\r\n }\r\n <!-- pin value -->\r\n @if (lookupData()?.pin?.value) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Copy value\"\r\n [cdkCopyToClipboard]=\"lookupData()!.pin!.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>pin value</td>\r\n <td>{{ lookupData()!.pin.value }}</td>\r\n </tr>\r\n }\r\n <!-- item ID -->\r\n @if (lookupData()?.pin?.itemId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData()!.pin!.itemId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 }\r\n <!-- item title -->\r\n @if (lookupData()?.item?.title) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData()!.item!.title\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 }\r\n <!-- part ID -->\r\n @if (lookupData()?.pin?.partId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData()!.pin!.partId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 }\r\n <!-- part type ID -->\r\n @if (lookupData()?.pin?.partTypeId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData()!.pin!.partTypeId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 }\r\n <!-- part role ID -->\r\n @if (lookupData()?.pin?.roleId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData()!.pin!.roleId!\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 @for ( m of lookupData()?.metaPart?.metadata || []; track m; let i =\r\n $index) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"m.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 }\r\n </tbody>\r\n </table>\r\n </mat-expansion-panel>\r\n }\r\n </fieldset>\r\n }\r\n\r\n <!-- buttons -->\r\n <div class=\"button-row\" id=\"toolbar\">\r\n <button mat-icon-button type=\"button\" (click)=\"close()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button mat-flat-button type=\"submit\" [disabled]=\"form.invalid\">\r\n <mat-icon>check_circle</mat-icon>\r\n target\r\n </button>\r\n </div>\r\n</form>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n Inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime, filter } from 'rxjs/operators';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n// material\r\nimport { MatButtonModule } from '@angular/material/button';\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 { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n// myrmidon\r\nimport { RamStorageService } from '@myrmidon/ngx-tools';\r\n\r\n// bricks\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\n\r\n// cadmus\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport {\r\n LOOKUP_CONFIGS_KEY,\r\n LookupProviderOptions,\r\n RefLookupConfig,\r\n RefLookupSetEvent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\nimport { ThesaurusEntriesPickerComponent } from '@myrmidon/cadmus-thesaurus-store';\r\n\r\n// local\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 features?: string[];\r\n note?: string;\r\n scope?: string;\r\n assertion?: Assertion;\r\n}\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 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 ReactiveFormsModule,\r\n // material\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatTooltipModule,\r\n // bricks\r\n AssertionComponent,\r\n // cadmus\r\n ThesaurusEntriesPickerComponent,\r\n // local\r\n PinTargetLookupComponent,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AssertedCompositeIdComponent {\r\n private _updatingForm: boolean | undefined;\r\n private _lookupConfigDirty = true;\r\n\r\n public readonly extLookupConfigs = signal<RefLookupConfig[]>([]);\r\n public readonly targetExpanded = signal<boolean>(false);\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 features: FormControl<string[]>;\r\n public note: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n // asserted-id-features\r\n public readonly featureEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * The ID being edited.\r\n */\r\n public readonly id = model<AssertedCompositeId>();\r\n\r\n /**\r\n * True if the UI has a submit button.\r\n */\r\n public readonly hasSubmit = input<boolean>();\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 public readonly pinByTypeMode = input<boolean>();\r\n\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 public readonly canSwitchMode = input<boolean>();\r\n\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n public readonly canEditTarget = input<boolean>();\r\n\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 public readonly lookupDefinitions = input<IndexLookupDefinitions>();\r\n\r\n /**\r\n * Optional preset options for external lookup providers.\r\n * Maps provider IDs to their available scopes.\r\n */\r\n public readonly lookupProviderOptions = input<LookupProviderOptions>();\r\n\r\n /**\r\n * The default part type key to be used.\r\n */\r\n public readonly defaultPartTypeKey = input<string>();\r\n\r\n /**\r\n * Emitted whenever the user requests to close the editor.\r\n */\r\n public readonly editorClose = output();\r\n\r\n /**\r\n * Emitted when the user requests more.\r\n */\r\n public readonly extMoreRequest = output<RefLookupSetEvent>();\r\n\r\n /**\r\n * The thesaurus entries from featureEntries whose id matches\r\n * any of the current features.\r\n */\r\n public readonly idFeatures = computed<ThesaurusEntry[]>(() => {\r\n const features = this.features.value;\r\n const entries = this.featureEntries();\r\n if (!features || features.length === 0 || !entries) {\r\n return [];\r\n }\r\n return entries.filter((e) => features.includes(e.id));\r\n });\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 // form\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.features = formBuilder.control([], { nonNullable: true });\r\n this.note = formBuilder.control(null, Validators.maxLength(1000));\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 features: this.features,\r\n note: this.note,\r\n assertion: this.assertion,\r\n });\r\n\r\n // external lookup configs\r\n this.extLookupConfigs.set(\r\n settings.retrieve<RefLookupConfig[]>(LOOKUP_CONFIGS_KEY) || [],\r\n );\r\n\r\n // when id changes, update form\r\n effect(() => {\r\n const id = this.id();\r\n this.updateForm(id);\r\n });\r\n\r\n // when form changes, emit id change\r\n this.form.valueChanges\r\n .pipe(\r\n // react only on user changes, when form is valid\r\n filter(() => !this._updatingForm && this.form.valid),\r\n debounceTime(300),\r\n takeUntilDestroyed(),\r\n )\r\n .subscribe((_) => {\r\n this.emitIdChange();\r\n });\r\n }\r\n\r\n public onEntriesChange(entries: ThesaurusEntry[]): void {\r\n const ids = entries.map((e) => e.id);\r\n this.features.setValue(ids);\r\n this.features.markAsDirty();\r\n this.features.updateValueAndValidity();\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 if (this.form.valid) {\r\n this.targetExpanded.set(false);\r\n }\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, { emitEvent: false });\r\n this.scope.setValue(id.scope || null, { emitEvent: false });\r\n this.tag.setValue(id.tag || null, { emitEvent: false });\r\n this.features.setValue(id.features || [], { emitEvent: false });\r\n this.note.setValue(id.note || null, { emitEvent: false });\r\n this.assertion.setValue(id.assertion || null, { emitEvent: false });\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 features: this.features.value?.length ? this.features.value : undefined,\r\n note: this.note.value?.trim() || undefined,\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.set(this.getId());\r\n }\r\n }\r\n\r\n public onEditorClose(): void {\r\n this.targetExpanded.set(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 onExtLookupConfigChange(config: RefLookupConfig): void {\r\n if (this._lookupConfigDirty || this._updatingForm) {\r\n this._lookupConfigDirty = false;\r\n return;\r\n }\r\n\r\n // update scope if external lookup config is selected\r\n const external = !this.target.value?.name;\r\n if (this._updatingForm || !external) {\r\n return;\r\n }\r\n if (\r\n !this.scope.value ||\r\n this.extLookupConfigs().some((c) => c.name === this.scope.value)\r\n ) {\r\n this.scope.setValue(config.service!.id || null);\r\n this.scope.markAsDirty();\r\n this.scope.updateValueAndValidity();\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.set(this.getId());\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 @if (idTagEntries()?.length) {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of idTagEntries(); track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- scope (bound) -->\r\n @if (idScopeEntries()?.length) {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <mat-select [formControl]=\"scope\">\r\n @for (e of idScopeEntries(); track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- scope (free) -->\r\n @else {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <input matInput [formControl]=\"scope\" />\r\n @if (\r\n $any(scope.errors)?.maxLength && (scope.dirty || scope.touched)\r\n ) {\r\n <mat-error>scope too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- label and GID -->\r\n @if (target.value?.label) {\r\n <div class=\"info\">\r\n <span class=\"label\">label</span>{{ target.value?.label }}\r\n </div>\r\n }\r\n @if (target.value?.gid) {\r\n <div class=\"info\">\r\n <span class=\"label\">GID</span>{{ target.value?.gid }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- target -->\r\n <div class=\"boxed\">\r\n <mat-expansion-panel\r\n [expanded]=\"targetExpanded()\"\r\n (expandedChange)=\"targetExpanded.set($event)\"\r\n >\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 [lookupProviderOptions]=\"lookupProviderOptions()\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey()\"\r\n [target]=\"target.value || undefined\"\r\n [extLookupConfigs]=\"extLookupConfigs()\"\r\n (targetChange)=\"onTargetChange($event)\"\r\n (editorClose)=\"onEditorClose()\"\r\n (extMoreRequest)=\"onExtMoreRequest($event)\"\r\n (extLookupConfigChange)=\"onExtLookupConfigChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- features -->\r\n @if (featureEntries()?.length) {\r\n <div class=\"margin-top-sm\">\r\n <fieldset>\r\n <legend>features</legend>\r\n <cadmus-thesaurus-entries-picker\r\n [availableEntries]=\"featureEntries()!\"\r\n [hierarchicLabels]=\"true\"\r\n [entries]=\"idFeatures()\"\r\n (entriesChange)=\"onEntriesChange($event)\"\r\n emptyMessage=\"\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n\r\n <!-- note -->\r\n <div class=\"margin-top-sm\">\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <input matInput [formControl]=\"note\" />\r\n @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n <mat-error>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- assertion -->\r\n <div class=\"boxed margin-top\">\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 || undefined\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </div>\r\n </div>\r\n\r\n <!-- buttons -->\r\n @if (hasSubmit()) {\r\n <div>\r\n <button mat-icon-button type=\"button\" (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button mat-icon-button type=\"submit\" [disabled]=\"form.invalid\">\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n</form>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n model,\r\n signal,\r\n} from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } 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 { LookupProviderOptions } from '@myrmidon/cadmus-refs-lookup';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { deepCopy, FlatLookupPipe } from '@myrmidon/ngx-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 composite IDs editor.\r\n */\r\n@Component({\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 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 FlatLookupPipe\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AssertedCompositeIdsComponent {\r\n /**\r\n * The asserted IDs.\r\n */\r\n public readonly ids = model<AssertedCompositeId[]>([]);\r\n\r\n public readonly editedIndex = signal<number>(-1);\r\n public readonly edited = signal<AssertedCompositeId | undefined>(undefined);\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n // asserted-id-features\r\n public readonly featureEntries = input<ThesaurusEntry[]>();\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 public readonly pinByTypeMode = input<boolean>();\r\n\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 public readonly canSwitchMode = input<boolean>();\r\n\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n public readonly canEditTarget = input<boolean>();\r\n\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 public readonly lookupDefinitions = input<IndexLookupDefinitions>();\r\n\r\n /**\r\n * The default part type key.\r\n */\r\n public readonly defaultPartTypeKey = input<string>();\r\n\r\n /**\r\n * Optional preset options for external lookup providers.\r\n * Maps provider IDs to their available scopes.\r\n */\r\n public readonly lookupProviderOptions = input<LookupProviderOptions>();\r\n\r\n constructor(private _dialogService: DialogService) {}\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.set(index);\r\n this.edited.set(deepCopy(id));\r\n }\r\n\r\n public closeId(): void {\r\n this.editedIndex.set(-1);\r\n this.edited.set(undefined);\r\n }\r\n\r\n public saveId(entry: AssertedCompositeId): void {\r\n const ids = [...this.ids()];\r\n if (this.editedIndex() === -1) {\r\n ids.push(entry);\r\n } else {\r\n ids.splice(this.editedIndex(), 1, entry);\r\n }\r\n this.ids.set(ids);\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 ids = [...this.ids()];\r\n ids.splice(index, 1);\r\n this.ids.set(ids);\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 id = this.ids()[index];\r\n const ids = [...this.ids()];\r\n ids.splice(index, 1);\r\n ids.splice(index - 1, 0, id);\r\n this.ids.set(ids);\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.ids().length) {\r\n return;\r\n }\r\n const id = this.ids()[index];\r\n const ids = [...this.ids()];\r\n ids.splice(index, 1);\r\n ids.splice(index + 1, 0, id);\r\n this.ids.set(ids);\r\n }\r\n\r\n public onIdChange(id?: AssertedCompositeId): void {\r\n this.saveId(id!);\r\n }\r\n}\r\n","<div>\r\n <!-- buttons -->\r\n <button type=\"button\" class=\"mat-primary\" mat-flat-button (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n <!-- list -->\r\n @if (ids().length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>type</th>\r\n <th>label</th>\r\n <th>gid</th>\r\n <th>features</th>\r\n <th>ass.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (\r\n id of ids();\r\n track id;\r\n let i = $index;\r\n let first = $first;\r\n let last = $last\r\n ) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(id, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ id.scope }}</td>\r\n <td>\r\n <mat-icon>{{ id?.target?.name ? \"login\" : \"logout\" }}</mat-icon>\r\n </td>\r\n <td>{{ id?.target?.label }}</td>\r\n <td>{{ id?.target?.gid }}</td>\r\n <td>\r\n @for (f of id?.features; let last = $last; track f) {\r\n {{ f | flatLookup: featureEntries() : \"id\" : \"value\" }}\r\n @if (!last) {\r\n ,\r\n }\r\n }\r\n </td>\r\n <td>{{ id?.assertion ? \"Y\" : \"N\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n <!-- editor -->\r\n @if (edited()) {\r\n <mat-expansion-panel [expanded]=\"edited()\" [disabled]=\"!edited()\">\r\n <mat-expansion-panel-header\r\n ><mat-icon>{{ edited()?.target?.name ? \"login\" : \"logout\" }}</mat-icon>\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 [featureEntries]=\"featureEntries()\"\r\n [hasSubmit]=\"true\"\r\n [pinByTypeMode]=\"pinByTypeMode()\"\r\n [canSwitchMode]=\"canSwitchMode()\"\r\n [canEditTarget]=\"canEditTarget()\"\r\n [lookupDefinitions]=\"lookupDefinitions()\"\r\n [lookupProviderOptions]=\"lookupProviderOptions()\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey()\"\r\n [id]=\"edited()\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n />\r\n </mat-expansion-panel>\r\n }\r\n</div>\r\n","import { Component, Inject, input, output, signal, ChangeDetectionStrategy } 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 { forkJoin, of, take } from 'rxjs';\r\n\r\n// material\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\n// bricks\r\nimport {\r\n LookupProviderOptions,\r\n RefLookupComponent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// cadmus\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\nimport {\r\n DataPinInfo,\r\n IndexLookupDefinitions,\r\n Item,\r\n Part,\r\n} from '@myrmidon/cadmus-core';\r\n\r\n// local\r\nimport { PinRefLookupService } from '../services/pin-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\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 selector: 'cadmus-scoped-pin-lookup',\r\n templateUrl: './scoped-pin-lookup.component.html',\r\n styleUrls: ['./scoped-pin-lookup.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n // material\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n // bricks\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\r\n public readonly keys = signal<string[]>([]);\r\n public readonly info = signal<LookupInfo | undefined>(undefined);\r\n\r\n // builder\r\n public id: FormControl<string | null>;\r\n public idForm: FormGroup;\r\n\r\n /**\r\n * Emitted whenever the user picks an ID.\r\n */\r\n public readonly idPick = output<string>();\r\n\r\n /**\r\n * Optional preset options for lookup providers.\r\n * Maps provider IDs to their available scopes.\r\n */\r\n public readonly lookupProviderOptions = input<LookupProviderOptions>();\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.set(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 }\r\n\r\n public 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: unknown): void {\r\n const info: LookupInfo = {\r\n pin: item as DataPinInfo,\r\n };\r\n // lookup item and its metadata part if any\r\n forkJoin({\r\n item: item\r\n ? this._itemService.getItem((item as DataPinInfo).itemId, false, true)\r\n : of(null),\r\n part: item\r\n ? this._itemService.getPartFromTypeAndRole(\r\n (item as DataPinInfo).itemId,\r\n METADATA_PART_ID,\r\n undefined,\r\n true\r\n )\r\n : of(null),\r\n })\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (result) => {\r\n if (result.item) {\r\n info.item = result.item;\r\n info.part = result.part as MetadataPart;\r\n this.info.set(info);\r\n }\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.set(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 @if (keys().length > 1) {\r\n <mat-form-field>\r\n <mat-label>type</mat-label>\r\n <mat-select [formControl]=\"key\">\r\n @for (k of keys(); track k) {\r\n <mat-option [value]=\"k\">{{ k }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ($any(key).errors?.required && (key.dirty || key.touched)) {\r\n <mat-error>type required</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <cadmus-refs-lookup\r\n [service]=\"lookupService\"\r\n label=\"pin\"\r\n [options]=\"key.value ? lookupDefs[key.value] : undefined\"\r\n [lookupProviderOptions]=\"lookupProviderOptions()\"\r\n (itemChange)=\"onItemChange($event)\"\r\n />\r\n </form>\r\n </div>\r\n\r\n <!-- builder -->\r\n @if (info()) {\r\n <mat-expansion-panel [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 @if ($any(id).errors?.required && (id.dirty || id.touched)) {\r\n <mat-error>ID required</mat-error>\r\n }\r\n @if ($any(id).errors?.maxLength && (id.dirty || id.touched)) {\r\n <mat-error>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 class=\"mat-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 class=\"mat-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 class=\"fit-width\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"appendIdComponent('pin')\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 (click)=\"appendIdComponent('itemId')\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 (click)=\"appendIdComponent('partId')\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 (click)=\"appendIdComponent('partTypeId')\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 (click)=\"appendIdComponent('partRoleId')\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 <!-- part's metadata -->\r\n @for (m of info()!.part?.metadata; track m; let i = $index) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"appendIdComponent('metadata', i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 }\r\n </tbody>\r\n </table>\r\n </mat-expansion-panel>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n effect,\r\n Inject,\r\n input,\r\n model,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n signal,\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 { Subscription } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\n// material\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\n// bricks\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\n\r\n// cadmus\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { LookupProviderOptions } from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// local\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport { ScopedPinLookupComponent } from '../scoped-pin-lookup/scoped-pin-lookup.component';\r\n\r\n/**\r\n * An asserted ID.\r\n */\r\nexport interface AssertedId {\r\n tag?: string;\r\n value: string;\r\n label?: string;\r\n scope: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n/**\r\n * Asserted ID editor component.\r\n */\r\n@Component({\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 FormsModule,\r\n ReactiveFormsModule,\r\n // material\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n // bricks\r\n AssertionComponent,\r\n ScopedPinLookupComponent,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AssertedIdComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n private _updatingForm: boolean | undefined;\r\n\r\n public tag: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public label: 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 readonly lookupExpanded = signal<boolean>(false);\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * The asserted ID being edited.\r\n */\r\n public readonly id = model<AssertedId>();\r\n\r\n /**\r\n * True to hide the pin-based EID lookup UI.\r\n */\r\n public readonly noEidLookup = input<boolean>();\r\n\r\n /**\r\n * Optional preset options for lookup providers.\r\n * Maps provider IDs to their available scopes.\r\n */\r\n public readonly lookupProviderOptions = input<LookupProviderOptions>();\r\n\r\n /**\r\n * True to show the submit button.\r\n */\r\n public readonly hasSubmit = input<boolean>();\r\n\r\n /**\r\n * Emitted when the editor is closed.\r\n */\r\n public readonly editorClose = output();\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.label = formBuilder.control(null, Validators.maxLength(500));\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 label: this.label,\r\n scope: this.scope,\r\n assertion: this.assertion,\r\n });\r\n\r\n // when id changes, update form\r\n effect(() => {\r\n this.updateForm(this.id());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._sub = this.form.valueChanges\r\n .pipe(debounceTime(300))\r\n .subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\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.set(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.label.setValue(value.label || null);\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 label: this.label.value?.trim() || undefined,\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.set(this.getId());\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.set(this.getId());\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 @if (idTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of idTagEntries(); track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- scope (bound) -->\r\n @if (idScopeEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>scope</mat-label>\r\n <mat-select [formControl]=\"scope\">\r\n @for (e of idScopeEntries(); track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- scope (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>scope</mat-label>\r\n <input matInput [formControl]=\"scope\" />\r\n @if ($any(scope.errors)?.maxLength && (scope.dirty || scope.touched)) {\r\n <mat-error>scope too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\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 @if ($any(value.errors)?.required && (value.dirty || value.touched)) {\r\n <mat-error>value required</mat-error>\r\n } @if ($any(value.errors)?.maxLength && (value.dirty || value.touched))\r\n {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- label -->\r\n <mat-form-field>\r\n <mat-label>label</mat-label>\r\n <input matInput [formControl]=\"label\" />\r\n @if ($any(label.errors)?.maxLength && (label.dirty || label.touched)) {\r\n <mat-error>label too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- lookup -->\r\n @if (!noEidLookup()) {\r\n <div>\r\n <mat-expansion-panel\r\n [expanded]=\"lookupExpanded()\"\r\n (expandedChange)=\"lookupExpanded.set($event)\"\r\n >\r\n <mat-expansion-panel-header>lookup</mat-expansion-panel-header>\r\n <cadmus-scoped-pin-lookup\r\n [lookupProviderOptions]=\"lookupProviderOptions()\"\r\n (idPick)=\"onIdPick($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </div>\r\n }\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 || undefined\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n @if (hasSubmit()) {\r\n <div>\r\n <button mat-icon-button type=\"button\" (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button mat-icon-button type=\"submit\" [disabled]=\"form.invalid\">\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n</form>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n model,\r\n signal,\r\n} from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { take } from 'rxjs';\r\n\r\n// material\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n// myrmidon\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { deepCopy } from '@myrmidon/ngx-tools';\r\n\r\n// cadmus\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { LookupProviderOptions } from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// local\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 selector: 'cadmus-refs-asserted-ids',\r\n templateUrl: './asserted-ids.component.html',\r\n styleUrls: ['./asserted-ids.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n // material\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n // bricks\r\n AssertedIdComponent,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AssertedIdsComponent {\r\n public readonly editedIndex = signal<number>(-1);\r\n public readonly edited = signal<AssertedId | undefined>(undefined);\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n public readonly ids = model<AssertedId[]>([]);\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * Optional preset options for lookup providers.\r\n * Maps provider IDs to their available scopes.\r\n */\r\n public readonly lookupProviderOptions = input<LookupProviderOptions>();\r\n\r\n constructor(private _dialogService: DialogService) {}\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.set(index);\r\n this.edited.set(deepCopy(id));\r\n }\r\n\r\n public closeId(): void {\r\n this.editedIndex.set(-1);\r\n this.edited.set(undefined);\r\n }\r\n\r\n public saveId(id: AssertedId): void {\r\n const ids = [...this.ids()];\r\n if (this.editedIndex() === -1) {\r\n ids.push(id);\r\n } else {\r\n ids.splice(this.editedIndex(), 1, id);\r\n }\r\n this.ids.set(ids);\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 ids = [...this.ids()];\r\n ids.splice(index, 1);\r\n this.ids.set(ids);\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 id = this.ids()[index];\r\n const ids = [...this.ids()];\r\n ids.splice(index, 1);\r\n ids.splice(index - 1, 0, id);\r\n this.ids.set(ids);\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.ids().length) {\r\n return;\r\n }\r\n const id = this.ids()[index];\r\n const ids = [...this.ids()];\r\n ids.splice(index, 1);\r\n ids.splice(index + 1, 0, id);\r\n this.ids.set(ids);\r\n }\r\n\r\n public onIdChange(id?: AssertedId): void {\r\n this.saveId(id!);\r\n }\r\n}\r\n","<div>\r\n <div>\r\n <button type=\"button\" mat-flat-button class=\"mat-primary\" (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n </div>\r\n @if (ids().length) {\r\n <table>\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 @for ( id of ids(); track id; let i = $index; let first = $first; let last\r\n = $last) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(id, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ id.scope }}</td>\r\n <td>{{ id.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n } @if (edited()) {\r\n <mat-expansion-panel [expanded]=\"edited()\" [disabled]=\"!edited()\">\r\n <mat-expansion-panel-header\r\n >ID #{{ editedIndex() + 1 }}</mat-expansion-panel-header\r\n >\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 [lookupProviderOptions]=\"lookupProviderOptions()\"\r\n [hasSubmit]=\"true\"\r\n [id]=\"edited()\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n />\r\n </mat-expansion-panel>\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of cadmus-refs-asserted-ids\r\n */\r\n\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/asserted-id/asserted-id.component';\r\nexport * from './lib/asserted-ids/asserted-ids.component';\r\nexport * from './lib/pin-target-lookup/pin-target-lookup.component';\r\nexport * from './lib/scoped-pin-lookup/scoped-pin-lookup.component';\r\n\r\nexport * from './lib/services/item-ref-lookup.service';\r\nexport * from './lib/services/pin-ref-lookup.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["METADATA_PART_ID","i1.ItemRefLookupService","i2.PinRefLookupService","i3","i5","i7","i9","i10","i11","i12","debounceTime","i1","i4","i6","i8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"myrmidon-cadmus-refs-asserted-ids.mjs","sources":["../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/item-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/pin-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/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/public-api.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/myrmidon-cadmus-refs-asserted-ids.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Observable, map, of } from 'rxjs';\r\n\r\n// myrmidon\r\nimport { DataPage } from '@myrmidon/ngx-tools';\r\n\r\n// bricks\r\nimport {\r\n RefLookupFilter,\r\n RefLookupService,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// cadmus\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\nimport { Item } from '@myrmidon/cadmus-core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ItemRefLookupService implements RefLookupService {\r\n public readonly id = 'item';\r\n\r\n constructor(private _itemService: ItemService) {}\r\n\r\n public lookup(filter: RefLookupFilter, options?: any): Observable<Item[]> {\r\n return this._itemService\r\n .getItems(\r\n {\r\n title: filter.text,\r\n },\r\n 1,\r\n filter.limit || 10\r\n )\r\n .pipe(map((page: DataPage<Item>) => page.items));\r\n }\r\n\r\n public getById(id: string): Observable<Item | undefined> {\r\n if (!id) {\r\n return of(undefined);\r\n }\r\n return this._itemService\r\n .getItem(id, false, true)\r\n .pipe(map((item) => item ?? undefined));\r\n }\r\n\r\n getName(item: Item): string {\r\n return item?.title;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { map, Observable, of } from 'rxjs';\r\n\r\n// myrmidon\r\nimport { DataPage, ErrorWrapper } from '@myrmidon/ngx-tools';\r\n\r\n// bricks\r\nimport {\r\n RefLookupFilter,\r\n RefLookupService,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// cadmus\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\nimport { DataPinInfo, IndexLookupDefinition } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * Pin-based lookup filter. This is a RefLookupFilter with the addition\r\n * of the item ID and part ID, which are used to filter the results\r\n * by the ItemPinLookupComponent.\r\n */\r\nexport interface PinRefLookupFilter extends RefLookupFilter {\r\n itemId?: string;\r\n partId?: string;\r\n}\r\n\r\n/**\r\n * Cadmus pin-based lookup data service. The text being searched here is just\r\n * the pin's value, according to the options specified. These options correspond\r\n * to an index lookup definition. The resulting items are of type DataPinInfo.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class PinRefLookupService implements RefLookupService {\r\n public readonly id = 'pin';\r\n\r\n constructor(private _itemService: ItemService) {}\r\n\r\n public getById(_id: string): Observable<any | undefined> {\r\n // Pins are index search results, not individually addressable entities\r\n return of(undefined);\r\n }\r\n\r\n public getName(item: any | undefined): string {\r\n return item?.value || '';\r\n }\r\n\r\n private buildQuery(\r\n def: IndexLookupDefinition,\r\n filter: PinRefLookupFilter,\r\n ): string {\r\n const sb: string[] = [];\r\n const AND = ' AND ';\r\n\r\n if (def.typeId) {\r\n sb.push(`[partTypeId=${def.typeId}]`);\r\n }\r\n if (def.roleId) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[roleId=${def.roleId}]`);\r\n }\r\n if (def.name) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[name=${def.name}]`);\r\n }\r\n if (filter.itemId) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[itemId=${filter.itemId}]`);\r\n }\r\n if (filter.partId) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[partId=${filter.partId}]`);\r\n }\r\n if (filter.text) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n // for other operators see backend SqlQueryBuilderBase.cs\r\n sb.push(`[value*=${filter.text}]`); // *= is \"contains\"\r\n }\r\n\r\n return sb.join('');\r\n }\r\n\r\n public lookup(filter: PinRefLookupFilter, options?: any): Observable<any[]> {\r\n // the index lookup definition is required\r\n const def = options as IndexLookupDefinition;\r\n if (!def) {\r\n return of([]);\r\n }\r\n\r\n // build the corresponding pin query\r\n const query = this.buildQuery(def, filter);\r\n\r\n // search the index\r\n return this._itemService.searchPins(query, 1, filter.limit).pipe(\r\n map((w: ErrorWrapper<DataPage<DataPinInfo>>) => {\r\n if (w.error) {\r\n console.error(w.error);\r\n return [];\r\n } else {\r\n return w.value?.items || [];\r\n }\r\n }),\r\n );\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n effect,\r\n Inject,\r\n input,\r\n model,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n signal,\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\n// material\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\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n// myrmidon\r\nimport { FlatLookupPipe } from '@myrmidon/ngx-tools';\r\n\r\n// bricks\r\nimport {\r\n LookupProviderOptions,\r\n RefLookupSetEvent,\r\n RefLookupComponent,\r\n RefLookupConfig,\r\n RefLookupSetComponent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// cadmus\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\n// local\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 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 FormsModule,\r\n ReactiveFormsModule,\r\n // material\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 MatTooltipModule,\r\n // myrmidon\r\n FlatLookupPipe,\r\n // bricks\r\n RefLookupComponent,\r\n RefLookupSetComponent,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PinTargetLookupComponent implements OnInit, OnDestroy {\r\n private readonly _subs: Subscription[] = [];\r\n private _updatingForm = false;\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 public readonly pinByTypeMode = model<boolean>();\r\n\r\n /**\r\n * True when the user can switch between by-type and by-item mode.\r\n */\r\n public readonly canSwitchMode = model<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 public readonly canEditTarget = input<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 public readonly lookupDefinitions = model<IndexLookupDefinitions>();\r\n /**\r\n * The optional configurations for using external lookup services.\r\n */\r\n public readonly extLookupConfigs = input<RefLookupConfig[]>([]);\r\n\r\n /**\r\n * Optional preset options for external lookup providers.\r\n * Maps provider IDs to their available scopes.\r\n */\r\n public readonly lookupProviderOptions = input<LookupProviderOptions>();\r\n\r\n /**\r\n * The target to be edited.\r\n */\r\n public readonly target = model<PinTarget>();\r\n\r\n /**\r\n * True to hide the internal \"external\" target source checkbox,\r\n * letting the parent component fully command the source mode via\r\n * externalMode.\r\n */\r\n public readonly hideTargetSelector = input<boolean>(false);\r\n\r\n /**\r\n * When set, commands whether the target source is external (true)\r\n * or internal (false), overriding the internal heuristic based on\r\n * the target's itemId. Leave unset to let this component decide on\r\n * its own, as before.\r\n */\r\n public readonly externalMode = input<boolean>();\r\n\r\n /**\r\n * The default value for part type key when the by-type mode is active.\r\n */\r\n public readonly defaultPartTypeKey = input<string>();\r\n\r\n /**\r\n * Emitted when user closes the editor.\r\n */\r\n public readonly editorClose = output();\r\n\r\n /**\r\n * Emitted when the user requests more items from an external lookup.\r\n */\r\n public readonly extMoreRequest = output<RefLookupSetEvent>();\r\n\r\n /**\r\n * Emitted when the user changes the external lookup configuration.\r\n */\r\n public readonly extLookupConfigChange = output<RefLookupConfig>();\r\n\r\n public readonly filter = signal<PinRefLookupFilter>({\r\n text: '',\r\n limit: 10,\r\n });\r\n public readonly pinFilterOptions = signal<IndexLookupDefinition | undefined>(\r\n undefined\r\n );\r\n public readonly lookupData = signal<PinLookupData | undefined>(undefined);\r\n // by type\r\n public readonly modelEntries = signal<ThesaurusEntry[]>([]);\r\n public readonly partTypeKeys = signal<string[]>([]);\r\n // by item\r\n public readonly itemParts = signal<Part[]>([]);\r\n\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 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 // 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\r\n // when pinByTypeMode changes, adjust form\r\n effect(() => {\r\n if (!this._updatingForm) {\r\n if (!this.byTypeMode.value) {\r\n this._startWithByTypeMode = this.pinByTypeMode();\r\n } else {\r\n this.byTypeMode.setValue(this.pinByTypeMode() || false, {\r\n emitEvent: false,\r\n });\r\n this.byTypeMode.updateValueAndValidity();\r\n }\r\n }\r\n });\r\n\r\n // when target changes, update form\r\n effect(() => {\r\n const target = this.target();\r\n console.log('target changed', target);\r\n this.updateForm(target);\r\n });\r\n\r\n // when externalMode is commanded by the parent, sync it to the\r\n // external form control\r\n effect(() => {\r\n const externalMode = this.externalMode();\r\n if (externalMode !== undefined && this.external.value !== externalMode) {\r\n this.external.setValue(externalMode);\r\n this.external.markAsDirty();\r\n }\r\n });\r\n }\r\n\r\n private emitTargetChange(): void {\r\n if (!this._updatingForm) {\r\n this.target.set(this.getTarget());\r\n }\r\n }\r\n\r\n private forceByItem(): void {\r\n this.pinByTypeMode.set(false);\r\n this.canSwitchMode.set(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.set(this._presetLookupDefs);\r\n }\r\n // keys are all the defined lookup searches\r\n this.partTypeKeys.set(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 const defs: IndexLookupDefinitions = {};\r\n this.modelEntries().forEach((e) => {\r\n defs[e.value] = {\r\n name: e.value,\r\n typeId: e.id,\r\n };\r\n });\r\n this.lookupDefinitions.set(defs);\r\n // set type keys from thesaurus entries\r\n this.partTypeKeys.set(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 (by lookup), 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, { emitEvent: false });\r\n this.itemParts.set(item?.parts || []);\r\n this.filter.set({\r\n ...this.filter(),\r\n itemId: item?.id,\r\n });\r\n })\r\n );\r\n\r\n // whenever itemPart changes (by user selection), update target and\r\n // 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.set({\r\n ...this.filter(),\r\n partId: part?.id,\r\n });\r\n this.updateTarget(true);\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.set(\r\n key ? this.lookupDefinitions()![key] : undefined\r\n );\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.set(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 // slash, pin's name, slash, 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.name}/${pin.value}`\r\n : `I${pin.itemId}/${pin.name}/${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 emitChange(): void {\r\n this.target.set(this.getTarget());\r\n }\r\n\r\n private updateTarget(suppressEmit = false): void {\r\n this._updatingForm = true;\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\r\n this._updatingForm = false;\r\n\r\n if (!suppressEmit) {\r\n this.emitTargetChange();\r\n }\r\n }\r\n\r\n private updateTargetFromData(): void {\r\n // Update GID and label without emitting changes\r\n if (!this.external.value) {\r\n this.gid.setValue(this.buildGid(), { emitEvent: false });\r\n this.gid.updateValueAndValidity();\r\n this.label.setValue(this.buildLabel(), { emitEvent: false });\r\n this.label.updateValueAndValidity();\r\n }\r\n }\r\n\r\n private updateForm(target?: PinTarget): void {\r\n this._updatingForm = true;\r\n\r\n try {\r\n // reset if no target\r\n if (!target) {\r\n this.lookupData.set(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\r\n // set gid and label\r\n this.gid.setValue(target.gid || '', { emitEvent: false });\r\n this.label.setValue(target.label || '', { emitEvent: false });\r\n // reset lookup\r\n this.lookupData.set({\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\r\n // if target is internal, get item\r\n if (target.itemId) {\r\n this._itemService.getItem(target.itemId, true, true).subscribe({\r\n next: (item) => {\r\n this._updatingForm = true;\r\n this.item.setValue(item, { emitEvent: false });\r\n this.form.markAsPristine();\r\n if (this.externalMode() === undefined) {\r\n this.external.setValue(false, { emitEvent: false });\r\n }\r\n this.updateTargetFromData();\r\n this._updatingForm = false;\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error('Item service error', error);\r\n }\r\n this._updatingForm = true;\r\n if (this.externalMode() === undefined) {\r\n this.external.setValue(false, { emitEvent: false });\r\n }\r\n this._updatingForm = false;\r\n },\r\n });\r\n } else {\r\n if (this.externalMode() === undefined) {\r\n this.external.setValue(true, {\r\n emitEvent: false,\r\n });\r\n }\r\n this.updateTargetFromData();\r\n }\r\n } finally {\r\n // ensure flag is reset even if there's an error\r\n if (!target?.itemId) {\r\n this._updatingForm = false;\r\n }\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: unknown): void {\r\n if (!item) {\r\n this.itemPart.setValue(null);\r\n this.itemParts.set([]);\r\n return;\r\n }\r\n // load item's parts\r\n this._itemService.getItem((item as 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(true); // suppress emit to avoid double emission\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error('Error getting item', error);\r\n }\r\n this.itemPart.setValue(null);\r\n this.itemParts.set([]);\r\n this.updateTarget(true); // suppress emit to avoid double emission\r\n },\r\n });\r\n }\r\n\r\n private loadItemInfo(pin?: DataPinInfo): void {\r\n if (!pin) {\r\n return;\r\n }\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.set({\r\n pin: pin,\r\n item: result.item!,\r\n metaPart: result.part as MetadataPart,\r\n });\r\n this.updateTarget(true); // suppress emit to avoid double emission\r\n },\r\n error: (error) => {\r\n this.lookupData.set(undefined);\r\n console.error('Error loading item/metadata', error);\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: unknown): void {\r\n this.loadItemInfo(info as DataPinInfo);\r\n }\r\n\r\n public onExtItemChange(event: RefLookupSetEvent): void {\r\n if (event.item) {\r\n this._updatingForm = true;\r\n setTimeout(() => {\r\n this.gid.setValue(event.itemId, { emitEvent: false });\r\n this.gid.updateValueAndValidity();\r\n this.gid.markAsDirty();\r\n\r\n this.label.setValue(event.itemLabel, { emitEvent: false });\r\n this.label.updateValueAndValidity();\r\n this.label.markAsDirty();\r\n\r\n this._updatingForm = false;\r\n });\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 onExtConfigChange(config: RefLookupConfig): void {\r\n this.extLookupConfigChange.emit(config);\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 this.form.markAllAsTouched();\r\n return;\r\n }\r\n this.emitTargetChange();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"form-row\">\r\n <!-- external -->\r\n @if (!hideTargetSelector()) {\r\n <mat-checkbox [formControl]=\"external\">external</mat-checkbox>\r\n }\r\n <!-- mode switcher -->\r\n @if (!external.value) {\r\n <div>\r\n @if (canSwitchMode()) {\r\n <mat-checkbox [formControl]=\"byTypeMode\"> by type</mat-checkbox>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <!-- label -->\r\n <div>\r\n @if (external.value || canEditTarget()) {\r\n <mat-form-field>\r\n <mat-label>label</mat-label>\r\n <input matInput [formControl]=\"label\" />\r\n @if ($any(label).errors?.required && (label.dirty || label.touched)) {\r\n <mat-error>label required</mat-error>\r\n } @if ( $any(label).errors?.maxLength && (label.dirty || label.touched)\r\n ) {\r\n <mat-error>label too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @if (!external.value && !canEditTarget() && label.value) {\r\n <div class=\"info\"><span class=\"label\">label</span>{{ label.value }}</div>\r\n }\r\n </div>\r\n\r\n <!-- gid -->\r\n <div id=\"gid-container\">\r\n @if (external.value || canEditTarget()) {\r\n <mat-form-field>\r\n <mat-label>GID</mat-label>\r\n <input matInput [formControl]=\"gid\" />\r\n @if ($any(gid).errors?.required && (gid.dirty || gid.touched)) {\r\n <mat-error>GID required</mat-error>\r\n } @if ($any(gid).errors?.maxLength && (gid.dirty || gid.touched)) {\r\n <mat-error>GID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @if (!external.value && !canEditTarget() && gid.value) {\r\n <div class=\"info\">\r\n <span class=\"label\">GID</span> <span class=\"gid\">{{ gid.value }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- external lookup set -->\r\n @if (external.value && extLookupConfigs().length) {\r\n <fieldset>\r\n <legend>external lookup</legend>\r\n <cadmus-refs-lookup-set\r\n [configs]=\"extLookupConfigs()\"\r\n [lookupProviderOptions]=\"lookupProviderOptions()\"\r\n (itemChange)=\"onExtItemChange($event)\"\r\n (moreRequest)=\"onExtMoreRequest($event)\"\r\n (configChange)=\"onExtConfigChange($any($event))\"\r\n />\r\n </fieldset>\r\n }\r\n\r\n <!-- BY ITEM -->\r\n @if (!external.value) {\r\n <fieldset>\r\n <legend>internal lookup</legend>\r\n <div class=\"form-row\">\r\n @if (!byTypeMode.value) {\r\n <fieldset class=\"form-row\">\r\n <legend>pin filters</legend>\r\n <!-- item filter -->\r\n <cadmus-refs-lookup\r\n [service]=\"itemLookupService\"\r\n label=\"item\"\r\n (itemChange)=\"onItemLookupChange($event)\"\r\n />\r\n <!-- part filter -->\r\n @if (itemParts().length) {\r\n <mat-form-field>\r\n <mat-label>part</mat-label>\r\n <mat-select [formControl]=\"itemPart\">\r\n <mat-option [value]=\"null\">(any)</mat-option>\r\n @for (p of itemParts(); track p) {\r\n <mat-option [value]=\"p\">{{\r\n p.typeId | flatLookup : modelEntries() : \"id\" : \"value\"\r\n }}</mat-option>\r\n }\r\n </mat-select>\r\n <mat-hint>parts: {{ itemParts().length }}</mat-hint>\r\n </mat-form-field>\r\n }\r\n </fieldset>\r\n }\r\n <!-- BY TYPE -->\r\n @if (byTypeMode.value) {\r\n <div>\r\n <!-- part type filter -->\r\n @if (partTypeKeys().length) {\r\n <mat-form-field>\r\n <mat-label>part type</mat-label>\r\n <mat-select [formControl]=\"partTypeKey\">\r\n @for (k of partTypeKeys(); track k) {\r\n <mat-option [value]=\"k\">{{ k }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n }\r\n <!-- PIN -->\r\n @if (partTypeKey.value) {\r\n <div>\r\n <!-- pin lookup -->\r\n <cadmus-refs-lookup\r\n [service]=\"pinLookupService\"\r\n [baseFilter]=\"filter()\"\r\n [options]=\"pinFilterOptions()\"\r\n label=\"pin\"\r\n (itemChange)=\"onPinLookupChange($event)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n <!-- data -->\r\n @if (lookupData()?.pin?.name) {\r\n <mat-expansion-panel id=\"data\">\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 name -->\r\n @if (lookupData()?.pin?.name) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Copy value\"\r\n [cdkCopyToClipboard]=\"lookupData()!.pin!.name\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>pin name</td>\r\n <td>{{ lookupData()!.pin.name }}</td>\r\n </tr>\r\n }\r\n <!-- pin value -->\r\n @if (lookupData()?.pin?.value) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Copy value\"\r\n [cdkCopyToClipboard]=\"lookupData()!.pin!.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>pin value</td>\r\n <td>{{ lookupData()!.pin.value }}</td>\r\n </tr>\r\n }\r\n <!-- item ID -->\r\n @if (lookupData()?.pin?.itemId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData()!.pin!.itemId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 }\r\n <!-- item title -->\r\n @if (lookupData()?.item?.title) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData()!.item!.title\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 }\r\n <!-- part ID -->\r\n @if (lookupData()?.pin?.partId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData()!.pin!.partId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 }\r\n <!-- part type ID -->\r\n @if (lookupData()?.pin?.partTypeId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData()!.pin!.partTypeId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 }\r\n <!-- part role ID -->\r\n @if (lookupData()?.pin?.roleId) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"lookupData()!.pin!.roleId!\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 @for ( m of lookupData()?.metaPart?.metadata || []; track m; let i =\r\n $index) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [cdkCopyToClipboard]=\"m.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 }\r\n </tbody>\r\n </table>\r\n </mat-expansion-panel>\r\n }\r\n </fieldset>\r\n }\r\n\r\n <!-- buttons -->\r\n <div class=\"button-row\" id=\"toolbar\">\r\n <button mat-icon-button type=\"button\" (click)=\"close()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button mat-flat-button type=\"submit\" [disabled]=\"form.invalid\">\r\n <mat-icon>check_circle</mat-icon>\r\n target\r\n </button>\r\n </div>\r\n</form>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n Inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime, filter } from 'rxjs/operators';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n// material\r\nimport { MatButtonModule } from '@angular/material/button';\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 { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n// myrmidon\r\nimport { RamStorageService } from '@myrmidon/ngx-tools';\r\n\r\n// bricks\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\n\r\n// cadmus\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport {\r\n LOOKUP_CONFIGS_KEY,\r\n LookupProviderOptions,\r\n RefLookupConfig,\r\n RefLookupSetEvent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\nimport { ThesaurusEntriesPickerComponent } from '@myrmidon/cadmus-thesaurus-store';\r\n\r\n// taxonomy\r\nimport { TaxoStoreNode } from '@myrmidon/taxo-store-api';\r\nimport { FlagOption, TaxoStorePicker } from '@myrmidon/taxo-store-picker';\r\n\r\n// local\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 * The mode used to source the target of an asserted composite ID:\r\n * - internal: the target points to a pin/item in this database.\r\n * - external: the target is a free GID/label pair.\r\n * - taxonomy: the target is picked from a taxonomy tree (TaxoStorePicker).\r\n */\r\nexport type AssertedCompositeIdTargetMode = 'internal' | 'external' | 'taxonomy';\r\n\r\n/**\r\n * The prefix prepended to the GID of any target sourced from a taxonomy\r\n * tree, so that it can be told apart from a plain external GID when\r\n * reloading an existing ID.\r\n */\r\nexport const TAXONOMY_GID_PREFIX = '@TX:';\r\n\r\n/**\r\n * The key used to retrieve the taxonomy lookup configurations via\r\n * RamStorageService.\r\n */\r\nexport const LOOKUP_TAXOSTORE_CONFIGS_KEY =\r\n 'cadmus-refs-asserted-ids.taxostore-configs';\r\n\r\n/**\r\n * Configuration for a taxonomy tree to be used as a lookup source for\r\n * an asserted composite ID's target.\r\n */\r\nexport interface TaxoStoreLookupConfig {\r\n /**\r\n * The ID of the taxonomy tree to pick nodes from.\r\n */\r\n treeId: string;\r\n /**\r\n * A human-friendly name for this source, used both in the source\r\n * selector and as the label for the taxonomy lookup component.\r\n */\r\n treeName: string;\r\n hasTopNodeFilter?: boolean;\r\n hasFlagsFilter?: boolean;\r\n availableFlags?: FlagOption[];\r\n canEdit?: boolean;\r\n canAdd?: boolean;\r\n canDelete?: boolean;\r\n hideLoc?: boolean;\r\n hideFilter?: boolean;\r\n}\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 features?: string[];\r\n note?: string;\r\n scope?: string;\r\n assertion?: Assertion;\r\n}\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, a lookup ID or a taxonomy ID.\r\n */\r\n@Component({\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 ReactiveFormsModule,\r\n // material\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatTooltipModule,\r\n // bricks\r\n AssertionComponent,\r\n // cadmus\r\n ThesaurusEntriesPickerComponent,\r\n // taxonomy\r\n TaxoStorePicker,\r\n // local\r\n PinTargetLookupComponent,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AssertedCompositeIdComponent {\r\n private _updatingForm: boolean | undefined;\r\n private _lookupConfigDirty = true;\r\n\r\n public readonly extLookupConfigs = signal<RefLookupConfig[]>([]);\r\n public readonly targetExpanded = signal<boolean>(false);\r\n\r\n /**\r\n * The taxonomy lookup configurations, if any.\r\n */\r\n public readonly taxoLookupConfigs = signal<TaxoStoreLookupConfig[]>([]);\r\n\r\n /**\r\n * True if at least 1 taxonomy lookup configuration is available, so\r\n * that the taxonomy source mode can be selected.\r\n */\r\n public readonly hasTaxonomy = computed(\r\n () => this.taxoLookupConfigs().length > 0,\r\n );\r\n\r\n /**\r\n * The currently selected target source mode.\r\n */\r\n public readonly targetMode = signal<AssertedCompositeIdTargetMode>(\r\n 'internal',\r\n );\r\n\r\n /**\r\n * The taxonomy lookup configuration currently selected when\r\n * targetMode is 'taxonomy'.\r\n */\r\n public readonly selectedTaxoConfig = signal<\r\n TaxoStoreLookupConfig | undefined\r\n >(undefined);\r\n\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 features: FormControl<string[]>;\r\n public note: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n // asserted-id-features\r\n public readonly featureEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * The ID being edited.\r\n */\r\n public readonly id = model<AssertedCompositeId>();\r\n\r\n /**\r\n * True if the UI has a submit button.\r\n */\r\n public readonly hasSubmit = input<boolean>();\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 public readonly pinByTypeMode = input<boolean>();\r\n\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 public readonly canSwitchMode = input<boolean>();\r\n\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n public readonly canEditTarget = input<boolean>();\r\n\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 public readonly lookupDefinitions = input<IndexLookupDefinitions>();\r\n\r\n /**\r\n * Optional preset options for external lookup providers.\r\n * Maps provider IDs to their available scopes.\r\n */\r\n public readonly lookupProviderOptions = input<LookupProviderOptions>();\r\n\r\n /**\r\n * The default part type key to be used.\r\n */\r\n public readonly defaultPartTypeKey = input<string>();\r\n\r\n /**\r\n * Emitted whenever the user requests to close the editor.\r\n */\r\n public readonly editorClose = output();\r\n\r\n /**\r\n * Emitted when the user requests more.\r\n */\r\n public readonly extMoreRequest = output<RefLookupSetEvent>();\r\n\r\n /**\r\n * The thesaurus entries from featureEntries whose id matches\r\n * any of the current features.\r\n */\r\n public readonly idFeatures = computed<ThesaurusEntry[]>(() => {\r\n const features = this.features.value;\r\n const entries = this.featureEntries();\r\n if (!features || features.length === 0 || !entries) {\r\n return [];\r\n }\r\n return entries.filter((e) => features.includes(e.id));\r\n });\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 // form\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.features = formBuilder.control([], { nonNullable: true });\r\n this.note = formBuilder.control(null, Validators.maxLength(1000));\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 features: this.features,\r\n note: this.note,\r\n assertion: this.assertion,\r\n });\r\n\r\n // external lookup configs\r\n this.extLookupConfigs.set(\r\n settings.retrieve<RefLookupConfig[]>(LOOKUP_CONFIGS_KEY) || [],\r\n );\r\n\r\n // taxonomy lookup configs\r\n this.taxoLookupConfigs.set(\r\n settings.retrieve<TaxoStoreLookupConfig[]>(\r\n LOOKUP_TAXOSTORE_CONFIGS_KEY,\r\n ) || [],\r\n );\r\n\r\n // when id changes, update form\r\n effect(() => {\r\n const id = this.id();\r\n this.updateForm(id);\r\n });\r\n\r\n // when form changes, emit id change\r\n this.form.valueChanges\r\n .pipe(\r\n // react only on user changes, when form is valid\r\n filter(() => !this._updatingForm && this.form.valid),\r\n debounceTime(300),\r\n takeUntilDestroyed(),\r\n )\r\n .subscribe((_) => {\r\n this.emitIdChange();\r\n });\r\n }\r\n\r\n public onEntriesChange(entries: ThesaurusEntry[]): void {\r\n const ids = entries.map((e) => e.id);\r\n this.features.setValue(ids);\r\n this.features.markAsDirty();\r\n this.features.updateValueAndValidity();\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 if (this.form.valid) {\r\n this.targetExpanded.set(false);\r\n }\r\n }\r\n\r\n /**\r\n * Reset the target to an empty value without collapsing the target\r\n * panel. This is used when switching source mode, as opposed to\r\n * onTargetChange, which is used when the user has actually picked a\r\n * target and the panel can be collapsed.\r\n */\r\n private resetTarget(): void {\r\n this.target.setValue({ gid: '', label: '' }, { emitEvent: false });\r\n this.target.markAsDirty();\r\n this.target.updateValueAndValidity({ emitEvent: 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 this.targetMode.set('internal');\r\n this.selectedTaxoConfig.set(undefined);\r\n } else {\r\n this.target.setValue(id.target, { emitEvent: false });\r\n this.scope.setValue(id.scope || null, { emitEvent: false });\r\n this.tag.setValue(id.tag || null, { emitEvent: false });\r\n this.features.setValue(id.features || [], { emitEvent: false });\r\n this.note.setValue(id.note || null, { emitEvent: false });\r\n this.assertion.setValue(id.assertion || null, { emitEvent: false });\r\n this.form.markAsPristine();\r\n this.updateTargetMode(id.target);\r\n }\r\n this._updatingForm = false;\r\n }\r\n\r\n /**\r\n * Detect the target source mode from the target itself, and update\r\n * targetMode and selectedTaxoConfig accordingly.\r\n */\r\n private updateTargetMode(target?: PinTarget | null): void {\r\n // internal targets always have a pin name\r\n if (target?.name) {\r\n this.targetMode.set('internal');\r\n this.selectedTaxoConfig.set(undefined);\r\n return;\r\n }\r\n\r\n // taxonomy targets have a GID prefixed by TAXONOMY_GID_PREFIX, followed\r\n // by the tree ID (with spaces replaced by underscores) and the node key\r\n if (target?.gid?.startsWith(TAXONOMY_GID_PREFIX)) {\r\n this.targetMode.set('taxonomy');\r\n const rest = target.gid.substring(TAXONOMY_GID_PREFIX.length);\r\n const treeIdPart = rest.split('/', 1)[0];\r\n const configs = this.taxoLookupConfigs();\r\n this.selectedTaxoConfig.set(\r\n configs.find((c) => c.treeId.replace(/\\s+/g, '_') === treeIdPart) ||\r\n configs[0],\r\n );\r\n return;\r\n }\r\n\r\n // anything else is a plain external target\r\n this.targetMode.set('external');\r\n this.selectedTaxoConfig.set(undefined);\r\n }\r\n\r\n /**\r\n * Called when the user changes the target source mode.\r\n */\r\n public onTargetModeChange(mode: AssertedCompositeIdTargetMode): void {\r\n if (this.targetMode() === mode) {\r\n return;\r\n }\r\n this.targetMode.set(mode);\r\n\r\n if (mode === 'taxonomy') {\r\n if (!this.selectedTaxoConfig()) {\r\n this.selectedTaxoConfig.set(this.taxoLookupConfigs()[0]);\r\n }\r\n // a target from another mode is not a taxonomy target: reset it\r\n if (!this.target.value?.gid?.startsWith(TAXONOMY_GID_PREFIX)) {\r\n this.resetTarget();\r\n }\r\n } else {\r\n this.selectedTaxoConfig.set(undefined);\r\n // a taxonomy target is not valid for internal/external mode: reset it\r\n if (this.target.value?.gid?.startsWith(TAXONOMY_GID_PREFIX)) {\r\n this.resetTarget();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Called when the user changes the taxonomy tree to pick nodes from.\r\n */\r\n public onTaxoConfigChange(config: TaxoStoreLookupConfig): void {\r\n if (this.selectedTaxoConfig() === config) {\r\n return;\r\n }\r\n this.selectedTaxoConfig.set(config);\r\n // the previously picked node belongs to another tree: reset target\r\n if (this.target.value?.gid?.startsWith(TAXONOMY_GID_PREFIX)) {\r\n this.resetTarget();\r\n }\r\n }\r\n\r\n /**\r\n * Called when the user picks a node from the taxonomy picker.\r\n */\r\n public onTaxoNodePick(node: TaxoStoreNode | null): void {\r\n if (!node) {\r\n return;\r\n }\r\n const config = this.selectedTaxoConfig();\r\n if (!config) {\r\n return;\r\n }\r\n const treeIdPart = config.treeId.replace(/\\s+/g, '_');\r\n this.onTargetChange({\r\n gid: `${TAXONOMY_GID_PREFIX}${treeIdPart}/${node.key}`,\r\n label: node.label,\r\n });\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 features: this.features.value?.length ? this.features.value : undefined,\r\n note: this.note.value?.trim() || undefined,\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.set(this.getId());\r\n }\r\n }\r\n\r\n public onEditorClose(): void {\r\n this.targetExpanded.set(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 onExtLookupConfigChange(config: RefLookupConfig): void {\r\n if (this._lookupConfigDirty || this._updatingForm) {\r\n this._lookupConfigDirty = false;\r\n return;\r\n }\r\n\r\n // update scope if external lookup config is selected\r\n const external = !this.target.value?.name;\r\n if (this._updatingForm || !external) {\r\n return;\r\n }\r\n if (\r\n !this.scope.value ||\r\n this.extLookupConfigs().some((c) => c.name === this.scope.value)\r\n ) {\r\n this.scope.setValue(config.service!.id || null);\r\n this.scope.markAsDirty();\r\n this.scope.updateValueAndValidity();\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.set(this.getId());\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 @if (idTagEntries()?.length) {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of idTagEntries(); track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- scope (bound) -->\r\n @if (idScopeEntries()?.length) {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <mat-select [formControl]=\"scope\">\r\n @for (e of idScopeEntries(); track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- scope (free) -->\r\n @else {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <input matInput [formControl]=\"scope\" />\r\n @if (\r\n $any(scope.errors)?.maxLength && (scope.dirty || scope.touched)\r\n ) {\r\n <mat-error>scope too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- label and GID -->\r\n @if (target.value?.label) {\r\n <div class=\"info\">\r\n <span class=\"label\">label</span>{{ target.value?.label }}\r\n </div>\r\n }\r\n @if (target.value?.gid) {\r\n <div class=\"info\">\r\n <span class=\"label\">GID</span>{{ target.value?.gid }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- target -->\r\n <div class=\"boxed\">\r\n <mat-expansion-panel\r\n [expanded]=\"targetExpanded()\"\r\n (expandedChange)=\"targetExpanded.set($event)\"\r\n >\r\n <mat-expansion-panel-header>target</mat-expansion-panel-header>\r\n\r\n <!-- target source mode -->\r\n <div class=\"form-row\">\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>source</mat-label>\r\n <mat-select\r\n [value]=\"targetMode()\"\r\n (selectionChange)=\"onTargetModeChange($event.value)\"\r\n >\r\n <mat-option value=\"internal\">🔗 internal</mat-option>\r\n <mat-option value=\"external\">🌐 external</mat-option>\r\n @if (hasTaxonomy()) {\r\n <mat-option value=\"taxonomy\">🌴 taxonomy</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n @if (targetMode() === 'taxonomy') {\r\n <!-- taxonomy source -->\r\n @if (taxoLookupConfigs().length > 1) {\r\n <div class=\"form-row\">\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>tree</mat-label>\r\n <mat-select\r\n [value]=\"selectedTaxoConfig()\"\r\n (selectionChange)=\"onTaxoConfigChange($event.value)\"\r\n >\r\n @for (c of taxoLookupConfigs(); track c.treeId) {\r\n <mat-option [value]=\"c\">{{ c.treeName }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (selectedTaxoConfig(); as taxoConfig) {\r\n <ts-taxo-store-picker\r\n [treeId]=\"taxoConfig.treeId\"\r\n [hasTopNodeFilter]=\"taxoConfig.hasTopNodeFilter ?? false\"\r\n [hasFlagsFilter]=\"taxoConfig.hasFlagsFilter ?? false\"\r\n [availableFlags]=\"taxoConfig.availableFlags ?? []\"\r\n [canEdit]=\"taxoConfig.canEdit ?? true\"\r\n [canAdd]=\"taxoConfig.canAdd ?? true\"\r\n [canDelete]=\"taxoConfig.canDelete ?? true\"\r\n [hideLoc]=\"taxoConfig.hideLoc ?? false\"\r\n [hideFilter]=\"taxoConfig.hideFilter ?? false\"\r\n [label]=\"taxoConfig.treeName\"\r\n (nodePick)=\"onTaxoNodePick($event)\"\r\n />\r\n }\r\n } @else {\r\n <cadmus-pin-target-lookup\r\n [hideTargetSelector]=\"true\"\r\n [externalMode]=\"targetMode() === 'external'\"\r\n [pinByTypeMode]=\"pinByTypeMode()\"\r\n [canSwitchMode]=\"canSwitchMode()\"\r\n [canEditTarget]=\"canEditTarget()\"\r\n [lookupDefinitions]=\"lookupDefinitions()\"\r\n [lookupProviderOptions]=\"lookupProviderOptions()\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey()\"\r\n [target]=\"target.value || undefined\"\r\n [extLookupConfigs]=\"extLookupConfigs()\"\r\n (targetChange)=\"onTargetChange($event)\"\r\n (editorClose)=\"onEditorClose()\"\r\n (extMoreRequest)=\"onExtMoreRequest($event)\"\r\n (extLookupConfigChange)=\"onExtLookupConfigChange($event)\"\r\n />\r\n }\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- features -->\r\n @if (featureEntries()?.length) {\r\n <div class=\"margin-top-sm\">\r\n <fieldset>\r\n <legend>features</legend>\r\n <cadmus-thesaurus-entries-picker\r\n [availableEntries]=\"featureEntries()!\"\r\n [hierarchicLabels]=\"true\"\r\n [entries]=\"idFeatures()\"\r\n (entriesChange)=\"onEntriesChange($event)\"\r\n emptyMessage=\"\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n\r\n <!-- note -->\r\n <div class=\"margin-top-sm\">\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <input matInput [formControl]=\"note\" />\r\n @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n <mat-error>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- assertion -->\r\n <div class=\"boxed margin-top\">\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 || undefined\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </div>\r\n </div>\r\n\r\n <!-- buttons -->\r\n @if (hasSubmit()) {\r\n <div>\r\n <button mat-icon-button type=\"button\" (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button mat-icon-button type=\"submit\" [disabled]=\"form.invalid\">\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n</form>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n model,\r\n signal,\r\n} from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } 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 { LookupProviderOptions } from '@myrmidon/cadmus-refs-lookup';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { deepCopy, FlatLookupPipe } from '@myrmidon/ngx-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 composite IDs editor.\r\n */\r\n@Component({\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 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 FlatLookupPipe\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AssertedCompositeIdsComponent {\r\n /**\r\n * The asserted IDs.\r\n */\r\n public readonly ids = model<AssertedCompositeId[]>([]);\r\n\r\n public readonly editedIndex = signal<number>(-1);\r\n public readonly edited = signal<AssertedCompositeId | undefined>(undefined);\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n // asserted-id-features\r\n public readonly featureEntries = input<ThesaurusEntry[]>();\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 public readonly pinByTypeMode = input<boolean>();\r\n\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 public readonly canSwitchMode = input<boolean>();\r\n\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n public readonly canEditTarget = input<boolean>();\r\n\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 public readonly lookupDefinitions = input<IndexLookupDefinitions>();\r\n\r\n /**\r\n * The default part type key.\r\n */\r\n public readonly defaultPartTypeKey = input<string>();\r\n\r\n /**\r\n * Optional preset options for external lookup providers.\r\n * Maps provider IDs to their available scopes.\r\n */\r\n public readonly lookupProviderOptions = input<LookupProviderOptions>();\r\n\r\n constructor(private _dialogService: DialogService) {}\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.set(index);\r\n this.edited.set(deepCopy(id));\r\n }\r\n\r\n public closeId(): void {\r\n this.editedIndex.set(-1);\r\n this.edited.set(undefined);\r\n }\r\n\r\n public saveId(entry: AssertedCompositeId): void {\r\n const ids = [...this.ids()];\r\n if (this.editedIndex() === -1) {\r\n ids.push(entry);\r\n } else {\r\n ids.splice(this.editedIndex(), 1, entry);\r\n }\r\n this.ids.set(ids);\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 ids = [...this.ids()];\r\n ids.splice(index, 1);\r\n this.ids.set(ids);\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 id = this.ids()[index];\r\n const ids = [...this.ids()];\r\n ids.splice(index, 1);\r\n ids.splice(index - 1, 0, id);\r\n this.ids.set(ids);\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.ids().length) {\r\n return;\r\n }\r\n const id = this.ids()[index];\r\n const ids = [...this.ids()];\r\n ids.splice(index, 1);\r\n ids.splice(index + 1, 0, id);\r\n this.ids.set(ids);\r\n }\r\n\r\n public onIdChange(id?: AssertedCompositeId): void {\r\n this.saveId(id!);\r\n }\r\n}\r\n","<div>\r\n <!-- buttons -->\r\n <button type=\"button\" class=\"mat-primary\" mat-flat-button (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n <!-- list -->\r\n @if (ids().length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>type</th>\r\n <th>label</th>\r\n <th>gid</th>\r\n <th>features</th>\r\n <th>ass.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (\r\n id of ids();\r\n track id;\r\n let i = $index;\r\n let first = $first;\r\n let last = $last\r\n ) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(id, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ id.scope }}</td>\r\n <td>\r\n <mat-icon>{{ id?.target?.name ? \"login\" : \"logout\" }}</mat-icon>\r\n </td>\r\n <td>{{ id?.target?.label }}</td>\r\n <td>{{ id?.target?.gid }}</td>\r\n <td>\r\n @for (f of id?.features; let last = $last; track f) {\r\n {{ f | flatLookup: featureEntries() : \"id\" : \"value\" }}\r\n @if (!last) {\r\n ,\r\n }\r\n }\r\n </td>\r\n <td>{{ id?.assertion ? \"Y\" : \"N\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n <!-- editor -->\r\n @if (edited()) {\r\n <mat-expansion-panel [expanded]=\"edited()\" [disabled]=\"!edited()\">\r\n <mat-expansion-panel-header\r\n ><mat-icon>{{ edited()?.target?.name ? \"login\" : \"logout\" }}</mat-icon>\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 [featureEntries]=\"featureEntries()\"\r\n [hasSubmit]=\"true\"\r\n [pinByTypeMode]=\"pinByTypeMode()\"\r\n [canSwitchMode]=\"canSwitchMode()\"\r\n [canEditTarget]=\"canEditTarget()\"\r\n [lookupDefinitions]=\"lookupDefinitions()\"\r\n [lookupProviderOptions]=\"lookupProviderOptions()\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey()\"\r\n [id]=\"edited()\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n />\r\n </mat-expansion-panel>\r\n }\r\n</div>\r\n","import { Component, Inject, input, output, signal, ChangeDetectionStrategy } 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 { forkJoin, of, take } from 'rxjs';\r\n\r\n// material\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\n// bricks\r\nimport {\r\n LookupProviderOptions,\r\n RefLookupComponent,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// cadmus\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\nimport {\r\n DataPinInfo,\r\n IndexLookupDefinitions,\r\n Item,\r\n Part,\r\n} from '@myrmidon/cadmus-core';\r\n\r\n// local\r\nimport { PinRefLookupService } from '../services/pin-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\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 selector: 'cadmus-scoped-pin-lookup',\r\n templateUrl: './scoped-pin-lookup.component.html',\r\n styleUrls: ['./scoped-pin-lookup.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n // material\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n // bricks\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\r\n public readonly keys = signal<string[]>([]);\r\n public readonly info = signal<LookupInfo | undefined>(undefined);\r\n\r\n // builder\r\n public id: FormControl<string | null>;\r\n public idForm: FormGroup;\r\n\r\n /**\r\n * Emitted whenever the user picks an ID.\r\n */\r\n public readonly idPick = output<string>();\r\n\r\n /**\r\n * Optional preset options for lookup providers.\r\n * Maps provider IDs to their available scopes.\r\n */\r\n public readonly lookupProviderOptions = input<LookupProviderOptions>();\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.set(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 }\r\n\r\n public 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: unknown): void {\r\n const info: LookupInfo = {\r\n pin: item as DataPinInfo,\r\n };\r\n // lookup item and its metadata part if any\r\n forkJoin({\r\n item: item\r\n ? this._itemService.getItem((item as DataPinInfo).itemId, false, true)\r\n : of(null),\r\n part: item\r\n ? this._itemService.getPartFromTypeAndRole(\r\n (item as DataPinInfo).itemId,\r\n METADATA_PART_ID,\r\n undefined,\r\n true\r\n )\r\n : of(null),\r\n })\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (result) => {\r\n if (result.item) {\r\n info.item = result.item;\r\n info.part = result.part as MetadataPart;\r\n this.info.set(info);\r\n }\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.set(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 @if (keys().length > 1) {\r\n <mat-form-field>\r\n <mat-label>type</mat-label>\r\n <mat-select [formControl]=\"key\">\r\n @for (k of keys(); track k) {\r\n <mat-option [value]=\"k\">{{ k }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ($any(key).errors?.required && (key.dirty || key.touched)) {\r\n <mat-error>type required</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <cadmus-refs-lookup\r\n [service]=\"lookupService\"\r\n label=\"pin\"\r\n [options]=\"key.value ? lookupDefs[key.value] : undefined\"\r\n [lookupProviderOptions]=\"lookupProviderOptions()\"\r\n (itemChange)=\"onItemChange($event)\"\r\n />\r\n </form>\r\n </div>\r\n\r\n <!-- builder -->\r\n @if (info()) {\r\n <mat-expansion-panel [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 @if ($any(id).errors?.required && (id.dirty || id.touched)) {\r\n <mat-error>ID required</mat-error>\r\n }\r\n @if ($any(id).errors?.maxLength && (id.dirty || id.touched)) {\r\n <mat-error>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 class=\"mat-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 class=\"mat-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 class=\"fit-width\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"appendIdComponent('pin')\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 (click)=\"appendIdComponent('itemId')\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 (click)=\"appendIdComponent('partId')\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 (click)=\"appendIdComponent('partTypeId')\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 (click)=\"appendIdComponent('partRoleId')\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 <!-- part's metadata -->\r\n @for (m of info()!.part?.metadata; track m; let i = $index) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"appendIdComponent('metadata', i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 }\r\n </tbody>\r\n </table>\r\n </mat-expansion-panel>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n effect,\r\n Inject,\r\n input,\r\n model,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n signal,\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 { Subscription } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\n// material\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\n// bricks\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\n\r\n// cadmus\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { LookupProviderOptions } from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// local\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport { ScopedPinLookupComponent } from '../scoped-pin-lookup/scoped-pin-lookup.component';\r\n\r\n/**\r\n * An asserted ID.\r\n */\r\nexport interface AssertedId {\r\n tag?: string;\r\n value: string;\r\n label?: string;\r\n scope: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n/**\r\n * Asserted ID editor component.\r\n */\r\n@Component({\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 FormsModule,\r\n ReactiveFormsModule,\r\n // material\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n // bricks\r\n AssertionComponent,\r\n ScopedPinLookupComponent,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AssertedIdComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n private _updatingForm: boolean | undefined;\r\n\r\n public tag: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public label: 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 readonly lookupExpanded = signal<boolean>(false);\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * The asserted ID being edited.\r\n */\r\n public readonly id = model<AssertedId>();\r\n\r\n /**\r\n * True to hide the pin-based EID lookup UI.\r\n */\r\n public readonly noEidLookup = input<boolean>();\r\n\r\n /**\r\n * Optional preset options for lookup providers.\r\n * Maps provider IDs to their available scopes.\r\n */\r\n public readonly lookupProviderOptions = input<LookupProviderOptions>();\r\n\r\n /**\r\n * True to show the submit button.\r\n */\r\n public readonly hasSubmit = input<boolean>();\r\n\r\n /**\r\n * Emitted when the editor is closed.\r\n */\r\n public readonly editorClose = output();\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.label = formBuilder.control(null, Validators.maxLength(500));\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 label: this.label,\r\n scope: this.scope,\r\n assertion: this.assertion,\r\n });\r\n\r\n // when id changes, update form\r\n effect(() => {\r\n this.updateForm(this.id());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._sub = this.form.valueChanges\r\n .pipe(debounceTime(300))\r\n .subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\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.set(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.label.setValue(value.label || null);\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 label: this.label.value?.trim() || undefined,\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.set(this.getId());\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.set(this.getId());\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 @if (idTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of idTagEntries(); track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- scope (bound) -->\r\n @if (idScopeEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>scope</mat-label>\r\n <mat-select [formControl]=\"scope\">\r\n @for (e of idScopeEntries(); track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- scope (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>scope</mat-label>\r\n <input matInput [formControl]=\"scope\" />\r\n @if ($any(scope.errors)?.maxLength && (scope.dirty || scope.touched)) {\r\n <mat-error>scope too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\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 @if ($any(value.errors)?.required && (value.dirty || value.touched)) {\r\n <mat-error>value required</mat-error>\r\n } @if ($any(value.errors)?.maxLength && (value.dirty || value.touched))\r\n {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- label -->\r\n <mat-form-field>\r\n <mat-label>label</mat-label>\r\n <input matInput [formControl]=\"label\" />\r\n @if ($any(label.errors)?.maxLength && (label.dirty || label.touched)) {\r\n <mat-error>label too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- lookup -->\r\n @if (!noEidLookup()) {\r\n <div>\r\n <mat-expansion-panel\r\n [expanded]=\"lookupExpanded()\"\r\n (expandedChange)=\"lookupExpanded.set($event)\"\r\n >\r\n <mat-expansion-panel-header>lookup</mat-expansion-panel-header>\r\n <cadmus-scoped-pin-lookup\r\n [lookupProviderOptions]=\"lookupProviderOptions()\"\r\n (idPick)=\"onIdPick($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </div>\r\n }\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 || undefined\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n @if (hasSubmit()) {\r\n <div>\r\n <button mat-icon-button type=\"button\" (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button mat-icon-button type=\"submit\" [disabled]=\"form.invalid\">\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n</form>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n model,\r\n signal,\r\n} from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { take } from 'rxjs';\r\n\r\n// material\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n// myrmidon\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { deepCopy } from '@myrmidon/ngx-tools';\r\n\r\n// cadmus\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { LookupProviderOptions } from '@myrmidon/cadmus-refs-lookup';\r\n\r\n// local\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 selector: 'cadmus-refs-asserted-ids',\r\n templateUrl: './asserted-ids.component.html',\r\n styleUrls: ['./asserted-ids.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n // material\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n // bricks\r\n AssertedIdComponent,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AssertedIdsComponent {\r\n public readonly editedIndex = signal<number>(-1);\r\n public readonly edited = signal<AssertedId | undefined>(undefined);\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n public readonly ids = model<AssertedId[]>([]);\r\n\r\n // asserted-id-scopes\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n // asserted-id-tags\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n // assertion-tags\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-types\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-tags\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * Optional preset options for lookup providers.\r\n * Maps provider IDs to their available scopes.\r\n */\r\n public readonly lookupProviderOptions = input<LookupProviderOptions>();\r\n\r\n constructor(private _dialogService: DialogService) {}\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.set(index);\r\n this.edited.set(deepCopy(id));\r\n }\r\n\r\n public closeId(): void {\r\n this.editedIndex.set(-1);\r\n this.edited.set(undefined);\r\n }\r\n\r\n public saveId(id: AssertedId): void {\r\n const ids = [...this.ids()];\r\n if (this.editedIndex() === -1) {\r\n ids.push(id);\r\n } else {\r\n ids.splice(this.editedIndex(), 1, id);\r\n }\r\n this.ids.set(ids);\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 ids = [...this.ids()];\r\n ids.splice(index, 1);\r\n this.ids.set(ids);\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 id = this.ids()[index];\r\n const ids = [...this.ids()];\r\n ids.splice(index, 1);\r\n ids.splice(index - 1, 0, id);\r\n this.ids.set(ids);\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.ids().length) {\r\n return;\r\n }\r\n const id = this.ids()[index];\r\n const ids = [...this.ids()];\r\n ids.splice(index, 1);\r\n ids.splice(index + 1, 0, id);\r\n this.ids.set(ids);\r\n }\r\n\r\n public onIdChange(id?: AssertedId): void {\r\n this.saveId(id!);\r\n }\r\n}\r\n","<div>\r\n <div>\r\n <button type=\"button\" mat-flat-button class=\"mat-primary\" (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n </div>\r\n @if (ids().length) {\r\n <table>\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 @for ( id of ids(); track id; let i = $index; let first = $first; let last\r\n = $last) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(id, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">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 matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ id.scope }}</td>\r\n <td>{{ id.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n } @if (edited()) {\r\n <mat-expansion-panel [expanded]=\"edited()\" [disabled]=\"!edited()\">\r\n <mat-expansion-panel-header\r\n >ID #{{ editedIndex() + 1 }}</mat-expansion-panel-header\r\n >\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 [lookupProviderOptions]=\"lookupProviderOptions()\"\r\n [hasSubmit]=\"true\"\r\n [id]=\"edited()\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n />\r\n </mat-expansion-panel>\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of cadmus-refs-asserted-ids\r\n */\r\n\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/asserted-id/asserted-id.component';\r\nexport * from './lib/asserted-ids/asserted-ids.component';\r\nexport * from './lib/pin-target-lookup/pin-target-lookup.component';\r\nexport * from './lib/scoped-pin-lookup/scoped-pin-lookup.component';\r\n\r\nexport * from './lib/services/item-ref-lookup.service';\r\nexport * from './lib/services/pin-ref-lookup.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["METADATA_PART_ID","i1.ItemRefLookupService","i2.PinRefLookupService","i3","i5","i7","i9","i10","i11","i12","debounceTime","i1","i4","i6","i8"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmBa,oBAAoB,CAAA;AAGX,IAAA,YAAA;IAFJ,EAAE,GAAG,MAAM;AAE3B,IAAA,WAAA,CAAoB,YAAyB,EAAA;QAAzB,IAAA,CAAA,YAAY,GAAZ,YAAY;IAAgB;IAEzC,MAAM,CAAC,MAAuB,EAAE,OAAa,EAAA;QAClD,OAAO,IAAI,CAAC;AACT,aAAA,QAAQ,CACP;YACE,KAAK,EAAE,MAAM,CAAC,IAAI;AACnB,SAAA,EACD,CAAC,EACD,MAAM,CAAC,KAAK,IAAI,EAAE;AAEnB,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,IAAoB,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD;AAEO,IAAA,OAAO,CAAC,EAAU,EAAA;QACvB,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,OAAO,EAAE,CAAC,SAAS,CAAC;QACtB;QACA,OAAO,IAAI,CAAC;AACT,aAAA,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI;AACvB,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,SAAS,CAAC,CAAC;IAC3C;AAEA,IAAA,OAAO,CAAC,IAAU,EAAA;QAChB,OAAO,IAAI,EAAE,KAAK;IACpB;uGA5BW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,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;;2FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACQD;;;;AAIG;MAIU,mBAAmB,CAAA;AAGV,IAAA,YAAA;IAFJ,EAAE,GAAG,KAAK;AAE1B,IAAA,WAAA,CAAoB,YAAyB,EAAA;QAAzB,IAAA,CAAA,YAAY,GAAZ,YAAY;IAAgB;AAEzC,IAAA,OAAO,CAAC,GAAW,EAAA;;AAExB,QAAA,OAAO,EAAE,CAAC,SAAS,CAAC;IACtB;AAEO,IAAA,OAAO,CAAC,IAAqB,EAAA;AAClC,QAAA,OAAO,IAAI,EAAE,KAAK,IAAI,EAAE;IAC1B;IAEQ,UAAU,CAChB,GAA0B,EAC1B,MAA0B,EAAA;QAE1B,MAAM,EAAE,GAAa,EAAE;QACvB,MAAM,GAAG,GAAG,OAAO;AAEnB,QAAA,IAAI,GAAG,CAAC,MAAM,EAAE;YACd,EAAE,CAAC,IAAI,CAAC,CAAA,YAAA,EAAe,GAAG,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;QACvC;AACA,QAAA,IAAI,GAAG,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE;AACb,gBAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YACd;YACA,EAAE,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,GAAG,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;QACnC;AACA,QAAA,IAAI,GAAG,CAAC,IAAI,EAAE;AACZ,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE;AACb,gBAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YACd;YACA,EAAE,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,GAAG,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;QAC/B;AACA,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE;AACb,gBAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YACd;YACA,EAAE,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,MAAM,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;QACtC;AACA,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE;AACb,gBAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YACd;YACA,EAAE,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,MAAM,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;QACtC;AACA,QAAA,IAAI,MAAM,CAAC,IAAI,EAAE;AACf,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE;AACb,gBAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YACd;;YAEA,EAAE,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,MAAM,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC,CAAC;QACrC;AAEA,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;IACpB;IAEO,MAAM,CAAC,MAA0B,EAAE,OAAa,EAAA;;QAErD,MAAM,GAAG,GAAG,OAAgC;QAC5C,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;QACf;;QAGA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;;QAG1C,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;AACtB,gBAAA,OAAO,EAAE;YACX;iBAAO;AACL,gBAAA,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;YAC7B;QACF,CAAC,CAAC,CACH;IACH;uGAhFW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,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;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACqCD;AACA,MAAMA,kBAAgB,GAAG,mBAAmB;AAmC5C;;;;;;AAMG;MA0BU,wBAAwB,CAAA;AA4GzB,IAAA,iBAAA;AACD,IAAA,iBAAA;AACA,IAAA,gBAAA;AACC,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,SAAA;IAhHO,KAAK,GAAmB,EAAE;IACnC,aAAa,GAAG,KAAK;AACrB,IAAA,oBAAoB;AAE5B;;;AAGG;AACa,IAAA,aAAa,GAAG,KAAK;iGAAW;AAEhD;;AAEG;AACa,IAAA,aAAa,GAAG,KAAK;iGAAW;AAChD;;;AAGG;AACa,IAAA,aAAa,GAAG,KAAK;iGAAW;AAChD;;;;;;;AAOG;AACa,IAAA,iBAAiB,GAAG,KAAK;qGAA0B;AACnE;;AAEG;IACa,gBAAgB,GAAG,KAAK,CAAoB,EAAE;yFAAC;AAE/D;;;AAGG;AACa,IAAA,qBAAqB,GAAG,KAAK;yGAAyB;AAEtE;;AAEG;AACa,IAAA,MAAM,GAAG,KAAK;0FAAa;AAE3C;;;;AAIG;IACa,kBAAkB,GAAG,KAAK,CAAU,KAAK;2FAAC;AAE1D;;;;;AAKG;AACa,IAAA,YAAY,GAAG,KAAK;gGAAW;AAE/C;;AAEG;AACa,IAAA,kBAAkB,GAAG,KAAK;sGAAU;AAEpD;;AAEG;IACa,WAAW,GAAG,MAAM,EAAE;AAEtC;;AAEG;IACa,cAAc,GAAG,MAAM,EAAqB;AAE5D;;AAEG;IACa,qBAAqB,GAAG,MAAM,EAAmB;IAEjD,MAAM,GAAG,MAAM,CAAqB;AAClD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,KAAK,EAAE,EAAE;AACV,KAAA;+EAAC;IACc,gBAAgB,GAAG,MAAM,CACvC,SAAS;yFACV;IACe,UAAU,GAAG,MAAM,CAA4B,SAAS;mFAAC;;IAEzD,YAAY,GAAG,MAAM,CAAmB,EAAE;qFAAC;IAC3C,YAAY,GAAG,MAAM,CAAW,EAAE;qFAAC;;IAEnC,SAAS,GAAG,MAAM,CAAS,EAAE;kFAAC;;AAGvC,IAAA,IAAI;AACJ,IAAA,QAAQ;;AAER,IAAA,WAAW;;AAEX,IAAA,GAAG;AACH,IAAA,KAAK;AACL,IAAA,UAAU;AACV,IAAA,QAAQ;AACR,IAAA,IAAI;AAEX,IAAA,WAAA,CAEU,iBAAyC,EAC1C,iBAAuC,EACvC,gBAAqC,EACpC,YAAyB,EACzB,YAA8B,EAC9B,SAAsB,EAC9B,WAAwB,EAAA;QANhB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAClB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QACf,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,SAAS,GAAT,SAAS;;QAIjB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;QAC5C,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;QACF,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;AACF,QAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACnE,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACjE,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;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AAC1B,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,aAAa,EAAE;gBAClD;qBAAO;oBACL,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,KAAK,EAAE;AACtD,wBAAA,SAAS,EAAE,KAAK;AACjB,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,UAAU,CAAC,sBAAsB,EAAE;gBAC1C;YACF;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,YAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC;AACrC,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACzB,QAAA,CAAC,CAAC;;;QAIF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,IAAI,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,YAAY,EAAE;AACtE,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;AACpC,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC7B;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC;IACF;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;IAEQ,SAAS,GAAA;;AAEf,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC7B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACpD;;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAG,CAAC,CAAC;;;QAI7D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;;gBAE7B,MAAM,IAAI,GAA2B,EAAE;gBACvC,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAChC,oBAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG;wBACd,IAAI,EAAE,CAAC,CAAC,KAAK;wBACb,MAAM,EAAE,CAAC,CAAC,EAAE;qBACb;AACH,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;;gBAEhC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;YAChE;QACF;;QAGA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE;YAC/B,IAAI,CAAC,WAAW,EAAE;QACpB;aAAO;;AAEL,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CACvB,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CACpD;QACH;IACF;IAEO,QAAQ,GAAA;;AAEb,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;QAChC;;QAGA,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,IAAI,CAAC,IAAI,CAAC;aACP,IAAI,CAAC,oBAAoB,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC;AAC9C,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAClB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAClD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;gBACd,GAAG,IAAI,CAAC,MAAM,EAAE;gBAChB,MAAM,EAAE,IAAI,EAAE,EAAE;AACjB,aAAA,CAAC;QACJ,CAAC,CAAC,CACL;;;QAID,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,IAAI,CAAC,QAAQ,CAAC;aACX,IAAI,CAAC,oBAAoB,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC;AAC9C,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;YACpC;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;gBACd,GAAG,IAAI,CAAC,MAAM,EAAE;gBAChB,MAAM,EAAE,IAAI,EAAE,EAAE;AACjB,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACzB,CAAC,CAAC,CACL;;QAGD,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,IAAI,CAAC,WAAW,CAAC;aACd,IAAI,CAAC,oBAAoB,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC;AAC9C,aAAA,SAAS,CAAC,CAAC,GAAG,KAAI;YACjB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CACvB,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CACjD;QACH,CAAC,CAAC,CACL;;;QAID,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,IAAI,CAAC,QAAQ,CAAC;aACX,IAAI,CAAC,oBAAoB,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC;AAC9C,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;YACJ;iBAAO;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YACvD;AACA,YAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE;QACrC,CAAC,CAAC,CACL;;QAGD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;AAC5D,YAAA,IAAI,EAAE,CAAC,CAAC,KAAI;gBACV,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;AACtC,gBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE;oBAC/B,IAAI,CAAC,SAAS,EAAE;gBAClB;qBAAO;oBACL,IAAI,CAAC,WAAW,EAAE;gBACpB;YACF,CAAC;YACD,KAAK,EAAE,MAAK;gBACV,IAAI,CAAC,WAAW,EAAE;YACpB,CAAC;AACF,SAAA,CAAC;IACJ;IAEO,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;QAC7B;IACF;IAEQ,QAAQ,GAAA;;;QAGd,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG;AAClC,QAAA,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE;AACf,YAAA,OAAO,IAAI;QACb;QACA,OAAO,GAAG,CAAC;AACT,cAAE,CAAA,CAAA,EAAI,GAAG,CAAC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAC,IAAI,CAAA,CAAA,EAAI,GAAG,CAAC,KAAK,CAAA;AACzC,cAAE,CAAA,CAAA,EAAI,GAAG,CAAC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAC,IAAI,CAAA,CAAA,EAAI,GAAG,CAAC,KAAK,EAAE;IAC/C;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE;AAC3B,YAAA,OAAO,IAAI;QACb;QACA,MAAM,EAAE,GAAa,EAAE;;QAEvB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE;AAChC,YAAA,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,YAAA,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;QAChB;;QAEA,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,UAAU,EAAG,CAAC,GAAI,CAAC,MAAM,CAAC;;QAEzE,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE;YACtC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CACjC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,EAAG,CAAC,GAAG,CAAC,UAAU,CAClD;AACD,YAAA,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;AACb,YAAA,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,UAAW,CAAC;YACxD,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;AAClC,gBAAA,EAAE,CAAC,IAAI,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,CAAA,CAAE,CAAC;YAChD;AACA,YAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;QACd;AACA,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;IACpB;IAEQ,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;QACH;aAAO;YACL,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG;YAClC,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;QACH;IACF;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACnC;IAEQ,YAAY,CAAC,YAAY,GAAG,KAAK,EAAA;AACvC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE;AACjC,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AACtC,YAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE;AACnC,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;QAC1B;AAEA,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAE1B,IAAI,CAAC,YAAY,EAAE;YACjB,IAAI,CAAC,gBAAgB,EAAE;QACzB;IACF;IAEQ,oBAAoB,GAAA;;AAE1B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACxD,YAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5D,YAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE;QACrC;IACF;AAEQ,IAAA,UAAU,CAAC,MAAkB,EAAA;AACnC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,QAAA,IAAI;;YAEF,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9B,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AAChB,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBAClB;YACF;;AAGA,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACzD,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAE7D,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAClB,gBAAA,GAAG,EAAE;AACH,oBAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;AAC3B,oBAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;AAC3B,oBAAA,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;AACnC,oBAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;AAC3B,oBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;AACvB,oBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;AAC1B,iBAAA;AACF,aAAA,CAAC;;AAGF,YAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;AAC7D,oBAAA,IAAI,EAAE,CAAC,IAAI,KAAI;AACb,wBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,wBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC9C,wBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC1B,wBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,EAAE;AACrC,4BAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;wBACrD;wBACA,IAAI,CAAC,oBAAoB,EAAE;AAC3B,wBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;oBAC5B,CAAC;AACD,oBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;wBACf,IAAI,KAAK,EAAE;AACT,4BAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC;wBAC5C;AACA,wBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,wBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,EAAE;AACrC,4BAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;wBACrD;AACA,wBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;oBAC5B,CAAC;AACF,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,EAAE;AACrC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC3B,wBAAA,SAAS,EAAE,KAAK;AACjB,qBAAA,CAAC;gBACJ;gBACA,IAAI,CAAC,oBAAoB,EAAE;YAC7B;QACF;gBAAU;;AAER,YAAA,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;YAC5B;QACF;IACF;AAEA;;;;;AAKG;AACI,IAAA,kBAAkB,CAAC,IAAa,EAAA;QACrC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB;QACF;;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAE,IAAc,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;AAClE,YAAA,IAAI,EAAE,CAAC,CAAC,KAAI;;AAEV,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACf,IAAI,KAAK,EAAE;AACT,oBAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC;gBAC5C;AACA,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC5B,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AACtB,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;AACF,SAAA,CAAC;IACJ;AAEQ,IAAA,YAAY,CAAC,GAAiB,EAAA;QACpC,IAAI,CAAC,GAAG,EAAE;YACR;QACF;AACA,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,EACVA,kBAAgB,EAChB,SAAS,EACT,IAAI,CACL;SACF;AACE,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,MAAM,KAAI;AACf,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAClB,oBAAA,GAAG,EAAE,GAAG;oBACR,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,QAAQ,EAAE,MAAM,CAAC,IAAoB;AACtC,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9B,gBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;YACrD,CAAC;AACF,SAAA,CAAC;IACN;AAEA;;;;;;;;AAQG;AACI,IAAA,iBAAiB,CAAC,IAAa,EAAA;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAmB,CAAC;IACxC;AAEO,IAAA,eAAe,CAAC,KAAwB,EAAA;AAC7C,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YACzB,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACrD,gBAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE;AACjC,gBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;AAEtB,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC1D,gBAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE;AACnC,gBAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AAExB,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC5B,YAAA,CAAC,CAAC;QACJ;IACF;AAEO,IAAA,gBAAgB,CAAC,KAAwB,EAAA;AAC9C,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;IAEO,QAAQ,GAAA;QACb,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,EAAE;AAC/C,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;IACJ;AAEO,IAAA,iBAAiB,CAAC,MAAuB,EAAA;AAC9C,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;IACzC;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB;IAEO,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC5B;QACF;QACA,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAxkBW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,kBA2GzB,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,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AA3GvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1IrC,4nUA2SA,EAAA,MAAA,EAAA,CAAA,sgCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrLI,WAAW,ywBACX,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;;AAEnB,gBAAA,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,iBAAiB,mbACjB,kBAAkB,EAAA,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,EAClB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,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,EAAAC,IAAA,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,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,+sBACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AAIhB,gBAAA,kBAAkB,uRAClB,qBAAqB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA;;gBAHrB,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOL,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAzBpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,OAAA,EAG3B;wBACP,WAAW;wBACX,mBAAmB;;wBAEnB,eAAe;wBACf,eAAe;wBACf,iBAAiB;wBACjB,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,eAAe;wBACf,gBAAgB;;wBAEhB,cAAc;;wBAEd,kBAAkB;wBAClB,qBAAqB;qBACtB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4nUAAA,EAAA,MAAA,EAAA,CAAA,sgCAAA,CAAA,EAAA;;0BA6G5C,MAAM;2BAAC,wBAAwB;;;AEpLpC;;;;AAIG;AACI,MAAM,mBAAmB,GAAG;AAEnC;;;AAGG;AACI,MAAM,4BAA4B,GACvC;AAwCF;;;AAGG;MA0BU,4BAA4B,CAAA;AAkI9B,IAAA,aAAA;AAEA,IAAA,UAAA;AAnID,IAAA,aAAa;IACb,kBAAkB,GAAG,IAAI;IAEjB,gBAAgB,GAAG,MAAM,CAAoB,EAAE;yFAAC;IAChD,cAAc,GAAG,MAAM,CAAU,KAAK;uFAAC;AAEvD;;AAEG;IACa,iBAAiB,GAAG,MAAM,CAA0B,EAAE;0FAAC;AAEvE;;;AAGG;AACa,IAAA,WAAW,GAAG,QAAQ,CACpC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,GAAG,CAAC;oFAC1C;AAED;;AAEG;IACa,UAAU,GAAG,MAAM,CACjC,UAAU;mFACX;AAED;;;AAGG;IACa,kBAAkB,GAAG,MAAM,CAEzC,SAAS;2FAAC;;AAGL,IAAA,MAAM;AACN,IAAA,KAAK;AACL,IAAA,GAAG;AACH,IAAA,QAAQ;AACR,IAAA,IAAI;AACJ,IAAA,SAAS;AACT,IAAA,IAAI;;AAGK,IAAA,cAAc,GAAG,KAAK;kGAAoB;;AAE1C,IAAA,YAAY,GAAG,KAAK;gGAAoB;;AAExC,IAAA,aAAa,GAAG,KAAK;iGAAoB;;AAEzC,IAAA,cAAc,GAAG,KAAK;kGAAoB;;AAE1C,IAAA,aAAa,GAAG,KAAK;iGAAoB;;AAEzC,IAAA,cAAc,GAAG,KAAK;kGAAoB;AAE1D;;AAEG;AACa,IAAA,EAAE,GAAG,KAAK;sFAAuB;AAEjD;;AAEG;AACa,IAAA,SAAS,GAAG,KAAK;6FAAW;AAE5C;;;AAGG;AACa,IAAA,aAAa,GAAG,KAAK;iGAAW;AAEhD;;;AAGG;AACa,IAAA,aAAa,GAAG,KAAK;iGAAW;AAEhD;;AAEG;AACa,IAAA,aAAa,GAAG,KAAK;iGAAW;AAEhD;;;;;;;AAOG;AACa,IAAA,iBAAiB,GAAG,KAAK;qGAA0B;AAEnE;;;AAGG;AACa,IAAA,qBAAqB,GAAG,KAAK;yGAAyB;AAEtE;;AAEG;AACa,IAAA,kBAAkB,GAAG,KAAK;sGAAU;AAEpD;;AAEG;IACa,WAAW,GAAG,MAAM,EAAE;AAEtC;;AAEG;IACa,cAAc,GAAG,MAAM,EAAqB;AAE5D;;;AAGG;AACa,IAAA,UAAU,GAAG,QAAQ,CAAmB,MAAK;AAC3D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,QAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;AAClD,YAAA,OAAO,EAAE;QACX;AACA,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;mFAAC;AAEF,IAAA,WAAA,CACE,WAAwB,EACjB,aAAkC,EAElC,UAAkC,EACzC,QAA2B,EAAA;QAHpB,IAAA,CAAA,aAAa,GAAb,aAAa;QAEb,IAAA,CAAA,UAAU,GAAV,UAAU;;AAIjB,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC5D,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1C,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,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CACvB,QAAQ,CAAC,QAAQ,CAAoB,kBAAkB,CAAC,IAAI,EAAE,CAC/D;;AAGD,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CACxB,QAAQ,CAAC,QAAQ,CACf,4BAA4B,CAC7B,IAAI,EAAE,CACR;;QAGD,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AACrB,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,IAAI,CAAC;aACP,IAAI;;QAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EACpDC,cAAY,CAAC,GAAG,CAAC,EACjB,kBAAkB,EAAE;AAErB,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;YACf,IAAI,CAAC,YAAY,EAAE;AACrB,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,eAAe,CAAC,OAAyB,EAAA;AAC9C,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE;IACxC;AAEO,IAAA,iBAAiB,CAAC,SAAgC,EAAA;QACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC;IAC5C;AAEO,IAAA,cAAc,CAAC,MAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAO,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE;AACpC,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC;IACF;AAEA;;;;;AAKG;IACK,WAAW,GAAA;QACjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAClE,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;QACzB,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC1D;AAEQ,IAAA,UAAU,CAAC,EAAmC,EAAA;AACpD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QACzB,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/B,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;QACxC;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACrD,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC3D,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACvD,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC/D,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACzD,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACnE,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC1B,YAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,CAAC;QAClC;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;IAC5B;AAEA;;;AAGG;AACK,IAAA,gBAAgB,CAAC,MAAyB,EAAA;;AAEhD,QAAA,IAAI,MAAM,EAAE,IAAI,EAAE;AAChB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/B,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;YACtC;QACF;;;QAIA,IAAI,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/B,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,CAAC;AAC7D,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;YACxC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,UAAU,CAAC;AAC/D,gBAAA,OAAO,CAAC,CAAC,CAAC,CACb;YACD;QACF;;AAGA,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;IACxC;AAEA;;AAEG;AACI,IAAA,kBAAkB,CAAC,IAAmC,EAAA;AAC3D,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC9B;QACF;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AAEzB,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC9B,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D;;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE;gBAC5D,IAAI,CAAC,WAAW,EAAE;YACpB;QACF;aAAO;AACL,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;;AAEtC,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE;gBAC3D,IAAI,CAAC,WAAW,EAAE;YACpB;QACF;IACF;AAEA;;AAEG;AACI,IAAA,kBAAkB,CAAC,MAA6B,EAAA;AACrD,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,MAAM,EAAE;YACxC;QACF;AACA,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC;;AAEnC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE;YAC3D,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;AAEA;;AAEG;AACI,IAAA,cAAc,CAAC,IAA0B,EAAA;QAC9C,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE;QACxC,IAAI,CAAC,MAAM,EAAE;YACX;QACF;AACA,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC;YAClB,GAAG,EAAE,GAAG,mBAAmB,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAA,CAAE;YACtD,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,SAAA,CAAC;IACJ;IAEQ,KAAK,GAAA;QACX,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI;AACzC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;QAChC,OAAO;AACL,YAAA,MAAM,EAAE;AACN,kBAAE;AACE,oBAAA,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE;oBACtB,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE;AAC1C;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,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,SAAS;YACvE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS;AAC1C,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS;SAC7C;IACH;IAEO,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YACrB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B;IACF;IAEO,aAAa,GAAA;AAClB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IAChC;AAEO,IAAA,gBAAgB,CAAC,KAAwB,EAAA;AAC9C,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;AAEO,IAAA,uBAAuB,CAAC,MAAuB,EAAA;QACpD,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,EAAE;AACjD,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B;QACF;;QAGA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI;AACzC,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,EAAE;YACnC;QACF;AACA,QAAA,IACE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;YACjB,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAChE;AACA,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAQ,CAAC,EAAE,IAAI,IAAI,CAAC;AAC/C,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE;QACrC;IACF;IAEO,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB;IAEO,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACnB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B;IACF;AA/XW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,+EAmI7B,wBAAwB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAnIvB,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,EAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClJzC,yxOAkMA,EAAA,MAAA,EAAA,CAAA,g7BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpEI,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,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,sGAAA,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;;gBAEnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,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,EAClB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,aAAa,EAAA,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,EACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,EAAA,qBAAA,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,EAAA,EAAA,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,EAAA,0BAAA,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,EAAA,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,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;gBAEhB,kBAAkB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;gBAElB,+BAA+B,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;gBAE/B,eAAe,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,EAAA,YAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;gBAEf,wBAAwB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIf,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAzBxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mCAAmC,EAAA,OAAA,EAGpC;wBACP,mBAAmB;;wBAEnB,eAAe;wBACf,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,eAAe;wBACf,gBAAgB;;wBAEhB,kBAAkB;;wBAElB,+BAA+B;;wBAE/B,eAAe;;wBAEf,wBAAwB;qBACzB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,yxOAAA,EAAA,MAAA,EAAA,CAAA,g7BAAA,CAAA,EAAA;;0BAqI5C,MAAM;2BAAC,wBAAwB;;;AE1PpC;;AAEG;MAmBU,6BAA6B,CAAA;AA4DpB,IAAA,cAAA;AA3DpB;;AAEG;IACa,GAAG,GAAG,KAAK,CAAwB,EAAE;4EAAC;AAEtC,IAAA,WAAW,GAAG,MAAM,CAAS,CAAC,CAAC;oFAAC;IAChC,MAAM,GAAG,MAAM,CAAkC,SAAS;+EAAC;;AAG3D,IAAA,cAAc,GAAG,KAAK;kGAAoB;;AAE1C,IAAA,YAAY,GAAG,KAAK;gGAAoB;;AAExC,IAAA,aAAa,GAAG,KAAK;iGAAoB;;AAEzC,IAAA,cAAc,GAAG,KAAK;kGAAoB;;AAE1C,IAAA,aAAa,GAAG,KAAK;iGAAoB;;AAEzC,IAAA,cAAc,GAAG,KAAK;kGAAoB;AAE1D;;;AAGG;AACa,IAAA,aAAa,GAAG,KAAK;iGAAW;AAEhD;;;AAGG;AACa,IAAA,aAAa,GAAG,KAAK;iGAAW;AAEhD;;AAEG;AACa,IAAA,aAAa,GAAG,KAAK;iGAAW;AAEhD;;;;;;;AAOG;AACa,IAAA,iBAAiB,GAAG,KAAK;qGAA0B;AAEnE;;AAEG;AACa,IAAA,kBAAkB,GAAG,KAAK;sGAAU;AAEpD;;;AAGG;AACa,IAAA,qBAAqB,GAAG,KAAK;yGAAyB;AAEtE,IAAA,WAAA,CAAoB,cAA6B,EAAA;QAA7B,IAAA,CAAA,cAAc,GAAd,cAAc;IAAkB;IAE7C,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;IACH;IAEO,MAAM,CAAC,EAAuB,EAAE,KAAa,EAAA;AAClD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/B;IAEO,OAAO,GAAA;QACZ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5B;AAEO,IAAA,MAAM,CAAC,KAA0B,EAAA;QACtC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE;AAC7B,YAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;QACjB;aAAO;AACL,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC;QAC1C;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;QACjB,IAAI,CAAC,OAAO,EAAE;IAChB;AAEO,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC;AACF,aAAA,OAAO,CAAC,cAAc,EAAE,YAAY;AACpC,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,GAAG,KAAI;YACjB,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;oBAChC,IAAI,CAAC,OAAO,EAAE;gBAChB;gBACA,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,gBAAA,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACpB,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACnB;AACF,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;YACb;QACF;QACA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,QAAA,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACpB,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACnB;AAEO,IAAA,UAAU,CAAC,KAAa,EAAA;QAC7B,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE;YAClC;QACF;QACA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,QAAA,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACpB,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACnB;AAEO,IAAA,UAAU,CAAC,EAAwB,EAAA;AACxC,QAAA,IAAI,CAAC,MAAM,CAAC,EAAG,CAAC;IAClB;uGApIW,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,GAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChD1C,01HAgHA,EAAA,MAAA,EAAA,CAAA,+fAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7EI,WAAW,8BACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,iBAAiB,8BACjB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,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,EAClB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,aAAa,mLACb,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,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAC5B,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIL,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAlBzC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oCAAoC,EAAA,OAAA,EAGrC;wBACP,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACf,iBAAiB;wBACjB,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,4BAA4B;wBAC5B;qBACD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,01HAAA,EAAA,MAAA,EAAA,CAAA,+fAAA,CAAA,EAAA;;;AETjD;AACA,MAAM,gBAAgB,GAAG,mBAAmB;AAe5C;;;;;;AAMG;MAoBU,wBAAwB,CAAA;AAyBzB,IAAA,YAAA;AACD,IAAA,aAAA;AAEA,IAAA,UAAA;;AA1BF,IAAA,GAAG;AACH,IAAA,OAAO;IAEE,IAAI,GAAG,MAAM,CAAW,EAAE;6EAAC;IAC3B,IAAI,GAAG,MAAM,CAAyB,SAAS;6EAAC;;AAGzD,IAAA,EAAE;AACF,IAAA,MAAM;AAEb;;AAEG;IACa,MAAM,GAAG,MAAM,EAAU;AAEzC;;;AAGG;AACa,IAAA,qBAAqB,GAAG,KAAK;yGAAyB;AAEtE,IAAA,WAAA,CACE,WAAwB,EAChB,YAAyB,EAC1B,aAAkC,EAElC,UAAkC,EAAA;QAHjC,IAAA,CAAA,YAAY,GAAZ,YAAY;QACb,IAAA,CAAA,aAAa,GAAb,aAAa;QAEb,IAAA,CAAA,UAAU,GAAV,UAAU;;;AAIjB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAEtC,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC;YAC/B,GAAG,EAAE,IAAI,CAAC,GAAG;AACd,SAAA,CAAC;;QAEF,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;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;YAC9B,EAAE,EAAE,IAAI,CAAC,EAAE;AACZ,SAAA,CAAC;IACJ;IAEO,QAAQ,GAAA;;QAEb,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE;QACnC;IACF;AAEO,IAAA,YAAY,CAAC,IAAa,EAAA;AAC/B,QAAA,MAAM,IAAI,GAAe;AACvB,YAAA,GAAG,EAAE,IAAmB;SACzB;;AAED,QAAA,QAAQ,CAAC;AACP,YAAA,IAAI,EAAE;AACJ,kBAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAE,IAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI;AACrE,kBAAE,EAAE,CAAC,IAAI,CAAC;AACZ,YAAA,IAAI,EAAE;AACJ,kBAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB,CACrC,IAAoB,CAAC,MAAM,EAC5B,gBAAgB,EAChB,SAAS,EACT,IAAI;AAER,kBAAE,EAAE,CAAC,IAAI,CAAC;SACb;AACE,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,MAAM,KAAI;AACf,gBAAA,IAAI,MAAM,CAAC,IAAI,EAAE;AACf,oBAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,oBAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAoB;AACvC,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBACrB;YACF,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CACX,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,6BAA6B,CAC9D;YACH,CAAC;AACF,SAAA,CAAC;IACN;AAEO,IAAA,iBAAiB,CAAC,IAAY,EAAE,SAAS,GAAG,CAAC,CAAC,EAAA;QACnD,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;QAE5B,QAAQ,IAAI;AACV,YAAA,KAAK,KAAK;gBACR,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK;gBAC5B;AACF,YAAA,KAAK,QAAQ;gBACX,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE;gBACjC;AACF,YAAA,KAAK,QAAQ;gBACX,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE;gBACjC;AACF,YAAA,KAAK,YAAY;gBACf,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE;gBACrC;AACF,YAAA,KAAK,YAAY;gBACf,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE;gBACrC;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK;gBAClD;;AAGJ,QAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;AACrB,QAAA,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE;IAClC;IAEO,MAAM,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACvB;QACF;QACA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAM,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;IAC1B;IAEO,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;AACf,QAAA,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;AACrB,QAAA,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE;IAClC;AArIW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,0GA2BzB,wBAAwB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AA3BvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/ErC,wlLAyKA,EAAA,MAAA,EAAA,CAAA,6bAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvGI,WAAW,ywBACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,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;;gBAEnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,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,EAClB,kBAAkB,ghBAClB,aAAa,EAAA,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,EACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,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,EAAA,qBAAA,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,EAAA,EAAA,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,EAAA,0BAAA,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,EAAA,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,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,SAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGT,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAnBpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,eAAA,EAGnB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,WAAW;wBACX,mBAAmB;;wBAEnB,eAAe;wBACf,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,eAAe;;wBAEf,kBAAkB;AACnB,qBAAA,EAAA,QAAA,EAAA,wlLAAA,EAAA,MAAA,EAAA,CAAA,6bAAA,CAAA,EAAA;;0BA6BE,MAAM;2BAAC,wBAAwB;;;AErDpC;;AAEG;MAqBU,mBAAmB,CAAA;AAoDrB,IAAA,aAAA;AAEA,IAAA,UAAA;AArDD,IAAA,IAAI;AACJ,IAAA,aAAa;AAEd,IAAA,GAAG;AACH,IAAA,KAAK;AACL,IAAA,KAAK;AACL,IAAA,KAAK;AACL,IAAA,SAAS;AACT,IAAA,IAAI;IAEK,cAAc,GAAG,MAAM,CAAU,KAAK;uFAAC;;AAGvC,IAAA,cAAc,GAAG,KAAK;kGAAoB;;AAE1C,IAAA,YAAY,GAAG,KAAK;gGAAoB;;AAExC,IAAA,aAAa,GAAG,KAAK;iGAAoB;;AAEzC,IAAA,cAAc,GAAG,KAAK;kGAAoB;;AAE1C,IAAA,aAAa,GAAG,KAAK;iGAAoB;AAEzD;;AAEG;AACa,IAAA,EAAE,GAAG,KAAK;sFAAc;AAExC;;AAEG;AACa,IAAA,WAAW,GAAG,KAAK;+FAAW;AAE9C;;;AAGG;AACa,IAAA,qBAAqB,GAAG,KAAK;yGAAyB;AAEtE;;AAEG;AACa,IAAA,SAAS,GAAG,KAAK;6FAAW;AAE5C;;AAEG;IACa,WAAW,GAAG,MAAM,EAAE;AAEtC,IAAA,WAAA,CACE,WAAwB,EACjB,aAAkC,EAElC,UAAkC,EAAA;QAFlC,IAAA,CAAA,aAAa,GAAb,aAAa;QAEb,IAAA,CAAA,UAAU,GAAV,UAAU;AAEjB,QAAA,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9D,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;AACF,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1C,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,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,SAAA,CAAC;;QAGF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AAC5B,QAAA,CAAC,CAAC;IACJ;IAEO,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACnB,aAAA,IAAI,CAACJ,cAAY,CAAC,GAAG,CAAC;AACtB,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACf,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACvB,IAAI,CAAC,YAAY,EAAE;YACrB;AACF,QAAA,CAAC,CAAC;IACN;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE;IAC1B;AAEO,IAAA,iBAAiB,CAAC,SAAgC,EAAA;QACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC;IAC5C;AAEO,IAAA,QAAQ,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IAChC;AAEQ,IAAA,UAAU,CAAC,KAA6B,EAAA;AAC9C,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QACzB,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;QACnB;aAAO;YACL,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC;AAChD,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;QAC5B;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;IAC5B;IAEQ,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,SAAS;YAC5C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AACrC,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS;SAC7C;IACH;IAEO,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YACrB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B;IACF;IAEO,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB;IAEO,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACnB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B;IACF;AA9IW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,+EAqDpB,wBAAwB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AArDvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,EAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5EhC,0qHA8GA,EAAA,MAAA,EAAA,CAAA,qZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjDI,WAAW,ywBACX,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;;gBAEnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAS,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,EAClB,kBAAkB,6YAClB,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,EAAAR,IAAA,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,EAAA,qBAAA,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,EAAAS,EAAA,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,EAAA,0BAAA,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,EAAAA,EAAA,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;;AAEf,gBAAA,kBAAkB,+OAClB,wBAAwB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIf,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBApB/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,OAAA,EAG1B;wBACP,WAAW;wBACX,mBAAmB;;wBAEnB,eAAe;wBACf,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,eAAe;;wBAEf,kBAAkB;wBAClB,wBAAwB;qBACzB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,0qHAAA,EAAA,MAAA,EAAA,CAAA,qZAAA,CAAA,EAAA;;0BAuD5C,MAAM;2BAAC,wBAAwB;;;AEnGpC;;AAEG;MAkBU,oBAAoB,CAAA;AA0BX,IAAA,cAAA;AAzBJ,IAAA,WAAW,GAAG,MAAM,CAAS,CAAC,CAAC;oFAAC;IAChC,MAAM,GAAG,MAAM,CAAyB,SAAS;+EAAC;AAElE;;AAEG;IACa,GAAG,GAAG,KAAK,CAAe,EAAE;4EAAC;;AAG7B,IAAA,cAAc,GAAG,KAAK;kGAAoB;;AAE1C,IAAA,YAAY,GAAG,KAAK;gGAAoB;;AAExC,IAAA,aAAa,GAAG,KAAK;iGAAoB;;AAEzC,IAAA,cAAc,GAAG,KAAK;kGAAoB;;AAE1C,IAAA,aAAa,GAAG,KAAK;iGAAoB;AAEzD;;;AAGG;AACa,IAAA,qBAAqB,GAAG,KAAK;yGAAyB;AAEtE,IAAA,WAAA,CAAoB,cAA6B,EAAA;QAA7B,IAAA,CAAA,cAAc,GAAd,cAAc;IAAkB;IAE7C,KAAK,GAAA;QACV,IAAI,CAAC,MAAM,CACT;AACE,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,KAAK,EAAE,EAAE;SACV,EACD,CAAC,CAAC,CACH;IACH;IAEO,MAAM,CAAC,EAAc,EAAE,KAAa,EAAA;AACzC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/B;IAEO,OAAO,GAAA;QACZ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5B;AAEO,IAAA,MAAM,CAAC,EAAc,EAAA;QAC1B,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE;AAC7B,YAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACd;aAAO;AACL,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;QACjB,IAAI,CAAC,OAAO,EAAE;IAChB;AAEO,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC;AACF,aAAA,OAAO,CAAC,cAAc,EAAE,YAAY;AACpC,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,GAAG,KAAI;YACjB,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;oBAChC,IAAI,CAAC,OAAO,EAAE;gBAChB;gBACA,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,gBAAA,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACpB,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACnB;AACF,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;YACb;QACF;QACA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,QAAA,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACpB,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACnB;AAEO,IAAA,UAAU,CAAC,KAAa,EAAA;QAC7B,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE;YAClC;QACF;QACA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,QAAA,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACpB,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACnB;AAEO,IAAA,UAAU,CAAC,EAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,EAAG,CAAC;IAClB;uGAnGW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,GAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClDjC,igFAiFA,EAAA,MAAA,EAAA,CAAA,+fAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3CI,WAAW,8BACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;AAEnB,gBAAA,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,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,EAClB,aAAa,mLACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;gBAEhB,mBAAmB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIV,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAjBhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,OAAA,EAG3B;wBACP,WAAW;wBACX,mBAAmB;;wBAEnB,eAAe;wBACf,kBAAkB;wBAClB,aAAa;wBACb,gBAAgB;;wBAEhB,mBAAmB;qBACpB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,igFAAA,EAAA,MAAA,EAAA,CAAA,+fAAA,CAAA,EAAA;;;AEhDjD;;AAEG;;ACFH;;AAEG;;;;"}
|