@arsedizioni/ars-utils 21.1.3 → 21.1.4

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":"arsedizioni-ars-utils-clipper.ui.mjs","sources":["../../../projects/ars-utils/clipper.ui/ui/document-index/document-index.component.ts","../../../projects/ars-utils/clipper.ui/ui/document-index/document-index.component.html","../../../projects/ars-utils/clipper.ui/ui/document-manager/document-manager.ts","../../../projects/ars-utils/clipper.ui/ui/document-menu/document-menu.component.ts","../../../projects/ars-utils/clipper.ui/ui/document-menu/document-menu.component.html","../../../projects/ars-utils/clipper.ui/ui/document/document.component.ts","../../../projects/ars-utils/clipper.ui/ui/document/document.component.html","../../../projects/ars-utils/clipper.ui/documents.ts","../../../projects/ars-utils/clipper.ui/ui/search-calendar/search-calendar.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-calendar/search-calendar.component.html","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.html","../../../projects/ars-utils/clipper.ui/ui/search-result-manager/search-result-manager.ts","../../../projects/ars-utils/clipper.ui/ui/search-result-item/search-result-item.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-result-item/search-result-item.component.html","../../../projects/ars-utils/clipper.ui/ui/references/references.component.ts","../../../projects/ars-utils/clipper.ui/ui/references/references.component.html","../../../projects/ars-utils/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.html","../../../projects/ars-utils/clipper.ui/ui/search-free-text-help/search-free-text-help.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-help/search-free-text-help.component.html","../../../projects/ars-utils/clipper.ui/ui/browser/browser.component.ts","../../../projects/ars-utils/clipper.ui/ui/browser/browser.component.html","../../../projects/ars-utils/clipper.ui/ui/browser/browser-dialog/browser-dialog.component.ts","../../../projects/ars-utils/clipper.ui/ui/browser/browser-dialog/browser-dialog.component.html","../../../projects/ars-utils/clipper.ui/public_api.ts","../../../projects/ars-utils/clipper.ui/arsedizioni-ars-utils-clipper.ui.ts"],"sourcesContent":["import { NgStyle } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnInit,\r\n inject,\r\n signal,\r\n output,\r\n viewChild\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatListModule, MatSelectionList } from '@angular/material/list';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperDocumentAnchorInfo,\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { finalize } from 'rxjs';\r\n\r\n\r\nexport interface ClipperDocumentIndexDialogData {\r\n documentId: string;\r\n excludedTypes?: number[];\r\n multiple?: boolean;\r\n}\r\n\r\nexport interface ClipperDocumentIndexDialogResult {\r\n data: ClipperDocumentAnchorInfo[]\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './document-index.component.html',\r\n styleUrls: ['./document-index.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FlexLayoutModule,\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatListModule,\r\n NgStyle,\r\n MatTooltipModule,\r\n MatDialogActions,\r\n MatButtonModule,\r\n MatDialogClose,\r\n ],\r\n})\r\nexport class ClipperDocumentIndexComponent implements OnInit {\r\n readonly selection = viewChild.required<MatSelectionList>('selection');\r\n readonly done = output<ClipperDocumentIndexDialogResult>();\r\n\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private clipperService = inject(ClipperService);\r\n private dialogService = inject(DialogService);\r\n protected dialogData: ClipperDocumentIndexDialogData = inject(MAT_DIALOG_DATA);\r\n protected items?: ClipperDocumentAnchorInfo[];\r\n protected okDisabled = signal<boolean>(false);\r\n\r\n ngOnInit(): void {\r\n if (this.dialogData) {\r\n if (this.dialogData.documentId) {\r\n this.load();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Display document structure\r\n */\r\n private load() {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!this.dialogData) return;\r\n this.dialogService.setBusy('Caricamento in corso...');\r\n this.clipperService.index(this.dialogData.documentId)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.items = [];\r\n r.value?.items.forEach((n: ClipperDocumentAnchorInfo) => {\r\n\r\n if (!this.dialogData.excludedTypes || this.dialogData.excludedTypes.indexOf(n.type) === -1) {\r\n if (n.title) n.description = n.title;\r\n else {\r\n if (n.type < 3) {\r\n n.description = n.text.trim();\r\n } else {\r\n n.description =\r\n n.typeDescription.trim() + ' ' + n.text.trim() + '.';\r\n }\r\n }\r\n this.items.push(n);\r\n }\r\n });\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n });\r\n }\r\n\r\n /**\r\n * Handle selection/deselection of an item\r\n */\r\n protected select() {\r\n const selection = this.selection();\r\n this.okDisabled.set(\r\n !selection || selection.selectedOptions.selected.length === 0);\r\n }\r\n\r\n /**\r\n * Confirm selection\r\n * @param item: the selected item or null to use multiple selection if allowed\r\n */\r\n protected use(item: ClipperDocumentAnchorInfo = null) {\r\n if (this.okDisabled()) return;\r\n if (this.dialogData?.multiple) {\r\n if (item) return; // multiple and single item selection not supported\r\n let selection: ClipperDocumentAnchorInfo[] = [];\r\n this.selection().selectedOptions.selected.forEach(n => {\r\n selection.push(n.value);\r\n });\r\n this.done.emit({ data: selection });\r\n } else if (item) {\r\n this.done.emit({ data: [item] });\r\n }\r\n }\r\n}\r\n","<h2 mat-dialog-title>Indice</h2>\r\n<mat-dialog-content>\r\n @if (!items || items.length === 0) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <mat-selection-list dense #selection (selectionChange)=\"select();\" [multiple]=\"dialogData.multiple\"\r\n hideSingleSelectionIndicator=\"true\">\r\n @for (item of items; track $index) {\r\n @if (item.type > 4) {\r\n <div class=\"small uppercase truncated accent\" style=\"display: flex; align-items: center; min-height: 36px;\">\r\n <div><b>{{item.description}}</b></div>\r\n </div>\r\n } @else {\r\n <mat-list-option [selected]=\"false\" [value]=\"item\" (click)=\"use(item)\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div [fxFlex]=\"(10 * item.level) + 'px'\"></div>\r\n <div fxFlex=\"*\" class=\"truncated\">\r\n <div class=\"small\" [matTooltip]=\"item.description\">{{item.description}}</div>\r\n </div>\r\n </div>\r\n </mat-list-option>\r\n }\r\n }\r\n </mat-selection-list>\r\n }\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n @if (dialogData.multiple) {\r\n <button mat-flat-button [disabled]=\"okDisabled()\" (click)=\"use()\">Usa</button>\r\n }\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n</mat-dialog-actions>","import { Clipboard } from '@angular/cdk/clipboard';\r\nimport { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\r\nimport { ClipperDocumentInfo, ClipperExportDocumentsParams, ClipperMessages, ClipperModel, ClipperModule, ClipperQueryReferencesMode, ClipperSearchParams, ClipperSendDocumentsByEmailParams, ClipperService } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { BroadcastService, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogResult } from '@arsedizioni/ars-utils/ui';\r\nimport { ApplicationDialogService, SelectableItem, SelectDialogDelete, SendToDialogComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport saveAs from 'file-saver';\r\nimport { ClipperReferenceDialogResult, ClipperReferencesComponent } from '../references/references.component';\r\nimport { finalize } from 'rxjs';\r\n\r\n\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ClipperDocumentManager {\r\n\r\n protected clipboard = inject(Clipboard);\r\n public clipperService = inject(ClipperService);\r\n protected broadcastService = inject(BroadcastService);\r\n protected dialogService = inject(ApplicationDialogService);\r\n protected canUseArchive = signal<boolean>(false);\r\n protected canHandleTooManyResults = signal<boolean>(false);\r\n\r\n\r\n\r\n /**\r\n * Export a document in pdf format\r\n * @param item : the document to export\r\n */\r\n exportPdf(item: ClipperDocumentInfo) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!item) return;\r\n this.dialogService\r\n .confirm(\"Confermi l'esportazione?\", 'Attenzione!')\r\n .componentInstance.choosen.subscribe((data: DialogResult) => {\r\n if (data.result === 'ok') {\r\n const id = item.id || item.documentId;\r\n this.dialogService.busy('Esportazione in corso...');\r\n this.clipperService.exportPdf(id)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n saveAs(r, (item.title1 ? item.title1 : id) + '.pdf');\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Export current document list or just the selected documents as a csv\r\n * @param documentIds: the document id list\r\n * @param searchParams: the search params\r\n * @param format: the export format: 1) list 2) deadlines\r\n */\r\n exportItems(\r\n documentIds: string[] | undefined,\r\n searchParams: ClipperSearchParams | undefined = undefined,\r\n format: number = 1) {\r\n if (!this.clipperService.loggedIn()) return;\r\n let model: ClipperExportDocumentsParams = { ids: documentIds ?? [], query: null, format: format };\r\n if (!model.ids || model.ids.length === 0) {\r\n model.query = searchParams;\r\n }\r\n this.dialogService.busy('Salvataggio in corso...');\r\n this.clipperService.export(model)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (r.type === 'application/json') {\r\n r.text().then(json => this.dialogService.error(JSON.parse(json).message));\r\n } else {\r\n if (format === 1) {\r\n saveAs(r, 'elenco_' + SystemUtils.formatDate(new Date(), 'yyyyMMddhhmmss') + '.csv');\r\n } else {\r\n saveAs(r, 'scadenze_' + SystemUtils.formatDate(new Date(), 'yyyyMMddhhmmss') + '.ics');\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Export a single deadline\r\n * @param item : the document to export\r\n */\r\n exportDeadline(item: ClipperDocumentInfo) {\r\n this.exportItems([item.documentId], undefined, 2);\r\n }\r\n\r\n /**\r\n * Archive a list of items\r\n * @param items: the item list\r\n */\r\n addToArchive(items: ClipperDocumentInfo[]) {\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_ARCHIVE_ADD, items);\r\n }\r\n\r\n /**\r\n * Create a new deadline\r\n * @param item : the item to add\r\n */\r\n addToCalendar(item: ClipperDocumentInfo) {\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_CALENDAR_ADD, item);\r\n }\r\n\r\n /**\r\n * Add a list of items to working documents\r\n * @param items : the item list\r\n */\r\n addItemsToWorkingDocuments(items: ClipperDocumentInfo[]) {\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_WORKING_ADD, items);\r\n }\r\n\r\n /**\r\n * Add a list of items to working documents\r\n * @param items : the item list\r\n */\r\n addItemsToBag(items: ClipperDocumentInfo[]) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.clipperService.addToBag(items?.map(n => n.documentId ?? n.id) ?? []);\r\n }\r\n\r\n\r\n /**\r\n * Copy metadata to clipboard\r\n * @param item : the item to copy\r\n */\r\n copyMetadataToClipboard(item: ClipperDocumentInfo) {\r\n if (!item || item.model === ClipperModel.Coordinamento) return;\r\n let meta =\r\n (item.id ?? item.documentId) + '\\t' +\r\n item.title1?.replaceAll(\"\\r\\n\", \" \") + '\\t';\r\n if (item.title2)\r\n meta += item.title2.replaceAll(\"\\r\\n\", \" \");\r\n meta += '\\t';\r\n if (item.number)\r\n meta += item.number;\r\n meta += '\\t';\r\n if (item.publishingDate) {\r\n item.publishingDate = new Date(item.publishingDate);\r\n meta += SystemUtils.formatDate(item.publishingDate);\r\n } else if (item.date) {\r\n item.date = new Date(item.date);\r\n meta += SystemUtils.formatDate(item.date);\r\n }\r\n meta += '\\t';\r\n if (item.originDescription)\r\n meta += item.originDescription\r\n this.clipboard.copy(meta);\r\n this.dialogService.toast(\"Metadati copiati negli appunti.\");\r\n }\r\n\r\n /**\r\n * Show a document permalink\r\n * @param item : the item to show the link for\r\n */\r\n showLink(item: ClipperDocumentInfo) {\r\n if (!item) return;\r\n let id = item.id ? item.id : item.documentId;\r\n const channels = item.channelName\r\n ? 'Canali: ' + item.channelName + '<br>'\r\n : '';\r\n let origin = item.origin\r\n ? 'Origine: ' +\r\n item.origin +\r\n ' - ' +\r\n (item.originDescription ? item.originDescription : '') +\r\n '<br>'\r\n : '';\r\n const topics = item.topics ? 'Argomento: ' + item.topics + '<br>' : '';\r\n if (!id) return;\r\n let message =\r\n \"<p >Il link che trovi qui sotto è un riferimento diretto al documento selezionato.</p>\" +\r\n \"<p >Lo puoi utilizzare nella tua documentazione o inviarlo per email ad un tuo collega. La persona che desidererà visualizzare il documento dovrà necessariamente essere un utente abbonato.</p>\" +\r\n \"<p >Seleziona e copia (fai CTRL+C) il link qui sotto.</p>\" +\r\n \"<div class='small accent'>\" +\r\n 'https://clipper.arsedizioni.it/?id=' +\r\n id +\r\n '</div>' +\r\n '<br>' +\r\n '<hr>' +\r\n '<p class=\"small\">' +\r\n channels +\r\n origin +\r\n topics\r\n '</p>';\r\n\r\n this.dialogService.info(message, 'Copia link', 'Chiudi');\r\n }\r\n\r\n /**\r\n * Send documents links by email\r\n * @param items : the document list\r\n */\r\n sendItemsTo(items: ClipperDocumentInfo[]) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!items || items.length === 0) return;\r\n const d = this.dialogService.open(SendToDialogComponent, {\r\n ariaLabel: 'invia documenti per email',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n closeOnNavigation: false,\r\n data: {\r\n info:\r\n 'Puoi inviare i documenti a chi vuoi ma, per poterli visualizzare, è necessario essere un utente abbonato.',\r\n count: items.length,\r\n },\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '100%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((data: ClipperSendDocumentsByEmailParams) => {\r\n data.ids = items?.map(n => n.documentId ?? n.id) ?? [];\r\n this.dialogService.busy('Invio in corso...');\r\n this.clipperService.sendTo(data)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.dialogService.toast('Invio completato con successo.');\r\n d.close();\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Display a document report\r\n * @param documentId : the document id\r\n * @param title: the document short title\r\n */\r\n openReport(documentId: string, title?: string ) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!documentId) return;\r\n this.clipperService.report(documentId)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n saveAs(r, (title ? title : documentId) + '.html');\r\n });\r\n }\r\n\r\n /**\r\n * Open an item\r\n * This should be always overridden\r\n * @param documentId : the document id\r\n * @param query : the query document\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n open(\r\n _documentId?: string,\r\n _query?: string,\r\n _newWindow?: boolean) {\r\n }\r\n\r\n /**\r\n * Display a document report\r\n * @param item : the document\r\n */\r\n report(item: ClipperDocumentInfo) {\r\n if (!item) return;\r\n if (item.model != ClipperModel.NormativaVigente && item.model != ClipperModel.Scadenze) {\r\n this.dialogService.info(\"Questa funzionalità non è disponibile per questo tipo di documento.\");\r\n return;\r\n } else {\r\n this.openReport(item.documentId, item.title1);\r\n }\r\n }\r\n\r\n /**\r\n * Browse document references\r\n * @param document id : the document id\r\n * @param mode : the reference mode\r\n */\r\n openReferences(documentId: string, mode: ClipperQueryReferencesMode = ClipperQueryReferencesMode.ReferencesIn) {\r\n if (!documentId) return;\r\n const d = this.dialogService.open(ClipperReferencesComponent, {\r\n ariaLabel: 'riferimenti legati al documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n closeOnNavigation: false,\r\n data: { \r\n documentId: documentId, \r\n mode: mode, \r\n canUseArchive: this.canUseArchive(),\r\n canHandleTooManyResults: this.canHandleTooManyResults() \r\n },\r\n minWidth: '375px',\r\n maxWidth: '1200px',\r\n width: '100%',\r\n height: '100%',\r\n });\r\n d.afterClosed()\r\n .subscribe((r: ClipperReferenceDialogResult) => {\r\n if (r && r.documentId) this.open(r.documentId);\r\n });\r\n }\r\n\r\n /**\r\n * Manage clipper bag\r\n */\r\n openBag() {\r\n let items: SelectableItem[] = [];\r\n this.clipperService.bag().forEach(n => {\r\n let title = n.title1 ?? n.title2;\r\n items.push({\r\n template: title,\r\n bag: n,\r\n searchBag: { name: title },\r\n });\r\n });\r\n const d = this.dialogService.select({\r\n title: 'Gestisci documenti di lavoro',\r\n multipleSelection: false,\r\n mustSelect: false,\r\n okCaption: 'SELEZIONA',\r\n items: items,\r\n total: items?.length ?? 0,\r\n canDelete: true,\r\n canView: true,\r\n });\r\n d.componentInstance.view\r\n .subscribe((r: SelectableItem) => {\r\n let item = r.bag;\r\n this.open(item.documentId);\r\n });\r\n d.componentInstance.delete\r\n .subscribe((r: SelectDialogDelete) => {\r\n var item = r.selectedItems[0].bag;\r\n this.clipperService.removeFromBag(item.documentId).add(\r\n () => {\r\n this.dialogService.toast('Operazione completata con successo.');\r\n for (let p = 0; p < r.items.length; p++) {\r\n if (r.items[p].bag.DocumentId === item.DocumentId) {\r\n r.items.splice(p, 1);\r\n if (r.items.length === 0) d.close();\r\n return;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Print current document\r\n */\r\n print() {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"print\"}', '*');\r\n }\r\n\r\n /**\r\n * Find in current document\r\n */\r\n find() {\r\n this.dialogService.info('Per cercare nel documento premi CTRL + F.');\r\n }\r\n\r\n\r\n ////\r\n // AI Assistant\r\n ////\r\n /**\r\n * AI: concern me service\r\n * @param document: the document\r\n */\r\n AI_concernMe(document?: ClipperDocumentInfo) {\r\n if (!document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.AI_CONCERN_ME, document);\r\n }\r\n\r\n /**\r\n * AI: explain service\r\n * @param document: the document\r\n */\r\n AI_explain(document?: ClipperDocumentInfo) {\r\n if (!document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.AI_EXPLAIN, document);\r\n }\r\n\r\n\r\n /**\r\n * AI: comment service\r\n * @param document: the document\r\n */\r\n AI_comment(document?: ClipperDocumentInfo) {\r\n if (!document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.AI_COMMENT, document);\r\n }\r\n\r\n /**\r\n* AI: news service\r\n* @param document: the document\r\n*/\r\n AI_news(document?: ClipperDocumentInfo) {\r\n if (!document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.AI_NEWS, document);\r\n }\r\n\r\n ////\r\n // Registro e scadenzario\r\n ////\r\n\r\n /**\r\n * Checks if a module is supported by RS\r\n * @param module : the module to check\r\n * @returns: true if the module is supported\r\n */\r\n isModuleSupportedByRS(module: ClipperModule): boolean {\r\n return module === ClipperModule.GazzetteBollettiniEFontiDiverse ||\r\n module === ClipperModule.NormativaVigente ||\r\n module === ClipperModule.ScadenzeESegnalazioni;\r\n }\r\n\r\n /**\r\n * Checks if a model is supported by RS\r\n * @param model : the model to check\r\n * @returns: true if the model is supported\r\n */\r\n isModelSupportedByRS(model: ClipperModel): boolean {\r\n return model === ClipperModel.AggiornamentoNormativo ||\r\n model === ClipperModel.NormativaVigente ||\r\n model === ClipperModel.Scadenze;\r\n\r\n }\r\n\r\n /**\r\n * Checks if all documents are supported by RS\r\n * @param documents : the list of documents\r\n * @returns: true if all documents supports RS\r\n */\r\n canSupportRS(documents: ClipperDocumentInfo[]): boolean {\r\n let allow = false;\r\n documents.forEach(n => {\r\n allow = this.isModelSupportedByRS(n.model);\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n /**\r\n * Checks if RS is enabled for all given documents\r\n * @param documents : the documents to check\r\n * @returns true if alla documents ar RS enabled\r\n */\r\n RS_enabled(documents: ClipperDocumentInfo[]): boolean {\r\n if (!documents || documents.length === 0) return false;\r\n let allow = false;\r\n documents.forEach(n => {\r\n allow = n && (n.model === ClipperModel.NormativaVigente ||\r\n n.model === ClipperModel.AggiornamentoNormativo ||\r\n n.model === ClipperModel.GiurisprudenzaRecente ||\r\n n.model === ClipperModel.Scadenze);\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n /**\r\n * New law\r\n * @param documents: the array of documents to link to the law\r\n */\r\n RS_newLaw(documents?: ClipperDocumentInfo[]) {\r\n if (!this.clipperService.supportsRS() || !documents) return;\r\n this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_NEW_LAW, documents);\r\n }\r\n\r\n /**\r\n * New activity\r\n * @param document: the document to link to the activity\r\n */\r\n RS_newActivity(document?: ClipperDocumentInfo) {\r\n if (!this.clipperService.supportsRS() || !document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_NEW_ACTIVITY, document);\r\n }\r\n\r\n /**\r\n * Document usage report\r\n * @param document: the law\r\n */\r\n RS_usageReport(document?: ClipperDocumentInfo) {\r\n if (!this.clipperService.supportsRS() || !document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_USAGE_REPORT, document);\r\n }\r\n\r\n\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, Renderer2, Signal, inject, input, viewChild } from '@angular/core';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\r\nimport { FlexModule } from '@ngbracket/ngx-layout';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ClipperDocumentInfo, ClipperModel, ClipperService, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\n\r\n@Component({\r\n selector: 'clipper-document-menu',\r\n templateUrl: './document-menu.component.html',\r\n styleUrls: ['./document-menu.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexModule, MatMenuModule, MatIconModule, MatDividerModule, MatTooltipModule]\r\n\r\n})\r\nexport class ClipperDocumentMenuComponent implements OnInit, OnDestroy {\r\n\r\n private rsMenuTrigger: Signal<MatMenuTrigger | undefined> = viewChild<MatMenuTrigger>('rsMenuTrigger');\r\n private aiAssistantMenuTrigger: Signal<MatMenuTrigger | undefined> = viewChild<MatMenuTrigger>('aiAssistantMenuTrigger');\r\n private linksMenuTrigger: Signal<MatMenuTrigger | undefined> = viewChild<MatMenuTrigger>('linksMenuTrigger');\r\n private allMenuTriggers: Signal<MatMenuTrigger | undefined>[] = [\r\n this.linksMenuTrigger,\r\n this.rsMenuTrigger,\r\n this.aiAssistantMenuTrigger\r\n ]\r\n private renderer2 = inject(Renderer2);\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private clipperService = inject(ClipperService);\r\n readonly useSelections = input<boolean>(false);\r\n readonly selectionSource = input<'bag' | 'selection' | 'none' | undefined>('selection');\r\n protected selection = (): ClipperDocumentInfo[] => {\r\n if (this.useSelections()) {\r\n switch (this.selectionSource()) {\r\n case 'bag':\r\n return this.parent()?.clipperService.bag() ?? [];\r\n case 'selection':\r\n return this.parent()?.selection?.all ?? [];\r\n }\r\n }\r\n return [];\r\n };\r\n readonly parent = input.required<ClipperSearchResultManager>();\r\n readonly item = input<ClipperDocumentInfo>();\r\n readonly isReference = input<boolean>(false);\r\n readonly isReadable = input<boolean>(true);\r\n readonly isReadableModel = input<ClipperModel | undefined>(undefined);\r\n readonly isLawInForce = input<boolean>(false);\r\n readonly canPrint = input<boolean>(false);\r\n readonly canFind = input<boolean>(false);\r\n readonly canUseCalendar = input<boolean>(false);\r\n readonly canUseArchive = input<boolean>(false);\r\n readonly canUseAIAssistant = input<boolean>(false);\r\n protected canUseAIEditor: boolean = this.clipperService.loginInfo?.context.hasAIEditor;\r\n readonly canUseRS = input<boolean>(true);\r\n readonly canOpenDocument = input<boolean>(true);\r\n protected canDeselectAll = (): boolean => this.selectionSource() === 'selection' && this.selection().length > 0;\r\n protected canManageBag = (): boolean => this.selectionSource() === 'bag';\r\n protected canOpen = (): boolean => this.canOpenDocument() && this.hasSingleSelection();\r\n protected canSendByEmail = (): boolean => this.getMultipleSelection().length > 0;\r\n protected canAddToArchive = (): boolean => this.canUseArchive() && this.canSendByEmail();\r\n protected canAddToCalendar = (): boolean => {\r\n let canAdd = true;\r\n this.getMultipleSelection()?.forEach(n => {\r\n if (n.model !== ClipperModel.Scadenze && n.model !== ClipperModel.Segnalazioni) {\r\n canAdd = false;\r\n return;\r\n }\r\n });\r\n return canAdd && this.canUseCalendar() && !this.isReference();\r\n }\r\n protected canExportCalendar = (): boolean => {\r\n let canExport = true;\r\n this.getMultipleSelection()?.forEach(n => {\r\n if (n.model !== ClipperModel.Scadenze && n.model !== ClipperModel.Segnalazioni) {\r\n canExport = false;\r\n return;\r\n }\r\n });\r\n return canExport && this.canUseCalendar() && !this.isReference();\r\n }\r\n protected canAddToWorkingDocuments = (): boolean => {\r\n if (this.selectionSource() !== 'bag') {\r\n const items = this.getMultipleSelection();\r\n if (items.length > 0) {\r\n let canAdd = true;\r\n items.forEach(n => {\r\n if (n.model === ClipperModel.Coordinamento) {\r\n canAdd = false;\r\n return;\r\n }\r\n });\r\n return canAdd;\r\n }\r\n } \r\n return false;\r\n }\r\n protected canSaveAsPdf = (): boolean => {\r\n const item = this.getSingleSelection();\r\n return item !== undefined && item?.model !== ClipperModel.Coordinamento;\r\n }\r\n protected canSetAsRead = (): boolean => {\r\n const items = this.getMultipleSelection();\r\n return this.isReadable() && (items.length > 1 || (items.length === 1 && items[0].isRead !== true &&\r\n ClipperUtils.isClipperModelReadable(this.isReadableModel() ?? items[0].model)));\r\n };\r\n protected canSetAsUnread = (): boolean => {\r\n const items = this.getMultipleSelection();\r\n return this.isReadable() && (items.length > 1 || (items.length === 1 && items[0].isRead === true &&\r\n ClipperUtils.isClipperModelReadable(this.isReadableModel() ?? items[0].model)));\r\n };\r\n protected canAccessRS = (): boolean => {\r\n const items = this.getMultipleSelection();\r\n return this.clipperService.supportsRS() && this.canUseRS() && this.parent()?.RS_enabled(items) === true;\r\n };\r\n\r\n ngOnInit(): void {\r\n if (this.selectionSource() === \"selection\") {\r\n this.parent()?.selection?.changed\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(() => {\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n }\r\n\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n\r\n /**\r\n * Get a single selection\r\n * @returns the single selection or null\r\n */\r\n protected getSingleSelection(): ClipperDocumentInfo | undefined {\r\n if (this.item()) {\r\n return this.item();\r\n } else if (this.selection().length === 1) {\r\n return this.selection()[0];\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Get multiple selection\r\n * @returns : the multiple selection or array empty\r\n */\r\n protected getMultipleSelection(): ClipperDocumentInfo[] {\r\n if (this.item()) {\r\n const item = this.item();\r\n if (item) {\r\n return [item];\r\n }\r\n } else if (this.selection().length > 0) {\r\n return this.selection();\r\n }\r\n return [];\r\n }\r\n\r\n /**\r\n * Check if only one element is selected\r\n * @returns true if only one element is selectedf\r\n */\r\n protected hasSingleSelection(): boolean {\r\n return this.item()?.documentId?.length > 0 || this.selection().length === 1;\r\n }\r\n\r\n /** \r\n * Show and hide sub menus\r\n * @param trigger: the trigger to use or null to deselect\r\n */\r\n protected showSubMenu(trigger?: MatMenuTrigger) {\r\n this.allMenuTriggers.forEach(menuTrigger => {\r\n const menu = menuTrigger();\r\n if (menu) {\r\n if (menu.menuOpen) {\r\n menu.closeMenu();\r\n this.resetSubMenu(menu);\r\n }\r\n }\r\n });\r\n trigger?.openMenu();\r\n }\r\n\r\n /**\r\n * Reset sub menu\r\n * @param trigger: the trigger to use\r\n */\r\n protected resetSubMenu(trigger: MatMenuTrigger) {\r\n this.renderer2.removeClass(trigger['_element'].nativeElement, 'cdk-focused');\r\n this.renderer2.removeClass(trigger['_element'].nativeElement, 'cdk-program-focused');\r\n }\r\n\r\n /**\r\n * Check if current item or selection is read\r\n * @returns 0 if not read, 1 if read, 2 if unknown\r\n */\r\n protected isRead(): number {\r\n if (this.item()) return this.item()?.isRead === true ? 1 : 0;\r\n if (this.parent()?.hasAnySelection()) return 2;\r\n const firstSelection = this.parent()?.getSingleSelection();\r\n if (firstSelection) {\r\n return firstSelection.isRead === true ? 1 : 0;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Set the is read flag value\r\n * @param value: true or false\r\n */\r\n protected setRead(value: boolean) {\r\n this.parent()?.setRead(value, this.item());\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param item : the item \r\n * @param newWindow : true to open in new window\r\n */\r\n protected open(item: ClipperDocumentInfo, newWindow: boolean = false) {\r\n if (item.documentId) {\r\n this.parent()?.open(item.documentId, undefined, newWindow);\r\n }\r\n }\r\n\r\n /**\r\n * Open document references\r\n * @param item : the item \r\n * @param mode: the mode\r\n */\r\n protected openReferences(item: ClipperDocumentInfo, mode: number) {\r\n if (item.documentId) {\r\n this.parent()?.openReferences(item.documentId, mode);\r\n }\r\n }\r\n\r\n}\r\n","@if (canDeselectAll()) {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (canManageBag()) {\r\n<button mat-menu-item (click)=\"parent().openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\" (mouseenter)=\"showSubMenu()\"\r\n (click)=\"open(getSingleSelection())\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento in una nuova finestra'\" (mouseenter)=\"showSubMenu()\"\r\n (click)=\"open(getSingleSelection(), true)\">\r\n <mat-icon>open_in_new</mat-icon>Apri in una nuova finestra...\r\n</button>\r\n@if (canAddToWorkingDocuments()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(getMultipleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"parent().print()\" [attr.aria-label]=\"'Stampa documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <div>Stampa</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+P</div>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"parent().find()\" [attr.aria-label]=\"'Trova nel documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <div>Trova nel documento</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+F</div>\r\n </div>\r\n</button>\r\n}\r\n@if (canSendByEmail()) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(getMultipleSelection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (canAddToArchive()) {\r\n<button mat-menu-item (click)=\"parent().addToArchive(getMultipleSelection())\" [attr.aria-label]=\"'Archivia'\">\r\n <mat-icon>account_tree</mat-icon>Archivia\r\n</button>\r\n}\r\n@if (canSaveAsPdf()) {\r\n<button mat-menu-item (click)=\"parent().exportPdf(getSingleSelection())\" (mouseenter)=\"showSubMenu()\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n<button mat-menu-item [attr.aria-label]=\"'Copia metadati negli appunti'\"\r\n (click)=\"parent().copyMetadataToClipboard(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>content_copy</mat-icon>Copia metadati\r\n</button>\r\n@if (!isReference() && canOpen()) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\" #linksMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(linksMenuTrigger)\" (mouseleave)=\"resetSubMenu(linksMenuTrigger)\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"openReferences(getSingleSelection(), 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"openReferences(getSingleSelection(), 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n}\r\n@if (canAddToCalendar()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi al calendario'\"\r\n (click)=\"parent().addToCalendar(getSingleSelection())\">\r\n <mat-icon>alarm</mat-icon> Crea scadenza\r\n</button>\r\n}\r\n@if (canExportCalendar()) {\r\n@if(useSelections()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportResults(2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n} @else if (item()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\"\r\n (click)=\"parent().exportItems([item().documentId], null, 2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n}\r\n}\r\n@if (canSetAsUnread()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (canSetAsRead()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come già letto'\" (click)=\"setRead(true)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>flag</mat-icon>Segna come già letto\r\n</button>\r\n}\r\n\r\n\r\n@if (isLawInForce() && canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report'\" (click)=\"parent().report(getSingleSelection())\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n\r\n@if (canUseAIAssistant() && hasSingleSelection()) {\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item matTooltip=\"Assistente IA\" [attr.aria-label]=\"'Assistente IA'\"\r\n [matMenuTriggerFor]=\"aiAssistantMenu\" #aiAssistantMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(aiAssistantMenuTrigger)\" (mouseleave)=\"resetSubMenu(aiAssistantMenuTrigger)\">\r\n <mat-icon>borg</mat-icon>\r\n Assistente IA\r\n</button>\r\n<mat-menu #aiAssistantMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Mi riguarda?'\" (click)=\"parent().AI_concernMe(getSingleSelection())\">\r\n Mi riguarda?\r\n </button>\r\n <button mat-menu-item [attr.aria-label]=\"'Di che si tratta?'\" (click)=\"parent().AI_explain(getSingleSelection())\">\r\n Di che si tratta?\r\n </button>\r\n @if (canUseAIEditor) {\r\n <button mat-menu-item [attr.aria-label]=\"'Genera commento tecnico'\"\r\n (click)=\"parent().AI_comment(getSingleSelection())\">\r\n Genera commento tecnico\r\n </button>\r\n <button mat-menu-item [attr.aria-label]=\"'Genera news'\" (click)=\"parent().AI_news(getSingleSelection())\">\r\n Genera news\r\n </button>\r\n }\r\n</mat-menu>\r\n}\r\n\r\n@if (canAccessRS()) {\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"rsMenu\" #rsMenuTrigger=\"matMenuTrigger\" (mouseenter)=\"showSubMenu(rsMenuTrigger)\"\r\n (mouseleave)=\"resetSubMenu(rsMenuTrigger)\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n<mat-menu #rsMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw(getMultipleSelection())\">\r\n Nuova legge\r\n </button>\r\n @if (hasSingleSelection()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attività'\" (click)=\"parent().RS_newActivity(getSingleSelection())\">\r\n Nuova attività\r\n </button>\r\n }\r\n @if (hasSingleSelection()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\"\r\n (click)=\"parent().RS_usageReport(getSingleSelection())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>\r\n}","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n Renderer2,\r\n inject,\r\n signal,\r\n output,\r\n viewChild\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n ClipperDocumentAnchorInfo,\r\n ClipperDocumentInfo,\r\n ClipperDocumentRelevants,\r\n ClipperMessages,\r\n ClipperModel,\r\n ClipperModule,\r\n ClipperQueryReferencesMode,\r\n ClipperSearchParams,\r\n ClipperSelectionMode, ClipperUserInfo, ClipperUtils\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport {\r\n SafeUrlPipe,\r\n SystemUtils,\r\n ThemeType\r\n} from '@arsedizioni/ars-utils/core';\r\nimport { FilePreviewComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ClipperReferenceDialogResult, ClipperReferencesComponent } from '../references/references.component';\r\nimport { ClipperDocumentIndexComponent, ClipperDocumentIndexDialogResult } from '../document-index/document-index.component';\r\nimport { ClipperDocumentManager } from '../document-manager/document-manager';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { ClipperDocumentsUtils } from '../../documents';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\n\r\n\r\nexport interface ClipperDocumentDialogData {\r\n selectionMode?: ClipperSelectionMode;\r\n selectableModules?: ClipperModule[];\r\n id: string;\r\n query?: string;\r\n theme?: ThemeType;\r\n canUseArchive?: boolean;\r\n canHandleTooManyResults?: boolean;\r\n\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './document.component.html',\r\n styleUrls: ['./document.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FlexLayoutModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n MatProgressBarModule,\r\n MatDialogContent,\r\n MatSidenavModule,\r\n SafeUrlPipe,\r\n ClipperDocumentMenuComponent\r\n ],\r\n})\r\nexport class ClipperDocumentComponent extends ClipperDocumentManager\r\n implements OnInit, OnDestroy {\r\n readonly relevantsPane = viewChild.required<MatDrawer>('relevantsPane');\r\n readonly closing = output();\r\n readonly opening = output<string>();\r\n\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private breakpointObserver = inject(BreakpointObserver);\r\n private renderer = inject(Renderer2);\r\n private rendererListener1: any;\r\n private router = inject(Router);\r\n private dialogRef = inject(MatDialogRef<ClipperDocumentComponent>);\r\n protected dialogData: ClipperDocumentDialogData = inject(MAT_DIALOG_DATA) ?? { mode: ClipperQueryReferencesMode.ReferencesIn };\r\n protected url = signal<string>(null);\r\n protected title = signal<string>(null);\r\n protected busy = signal<boolean>(false);\r\n protected lastQuery?: string;\r\n protected lastAugmentedQuery?: string[] = [];\r\n protected lastDocument?: ClipperDocumentInfo = {};\r\n protected relevants: ClipperDocumentRelevants = {\r\n items: [],\r\n hits: 0,\r\n hit: 0,\r\n minimumScore: 100,\r\n };\r\n protected relevantsPaneHasBackdrop: boolean = false;\r\n protected relevantsPaneClosed: boolean = false;\r\n protected relevantsBusy = signal<boolean>(false);\r\n protected hasRelevants = signal<boolean>(false);\r\n protected user: ClipperUserInfo | undefined = this.clipperService.loginInfo?.context;\r\n\r\n\r\n ngOnInit(): void {\r\n if (this.dialogData) {\r\n if (this.dialogData.id) {\r\n const url =\r\n this.clipperService.serviceUri +\r\n \"/documents/render/?query=\" +\r\n (this.dialogData.query ?? '') +\r\n \"&theme=\" +\r\n this.dialogData.theme +\r\n \"&id=\" +\r\n this.dialogData.id\r\n this.navigateByUrl(url);\r\n\r\n }\r\n }\r\n\r\n // Listen to window messages\r\n this.rendererListener1 = this.renderer.listen(\r\n 'window',\r\n 'message',\r\n (e: Event) => {\r\n const event = e as MessageEvent;\r\n if (!event) return;\r\n if (event.data) {\r\n try {\r\n var data = JSON.parse(event.data);\r\n if (data) {\r\n switch (data.type) {\r\n case 'navigated':\r\n this.navigated(\r\n data.id,\r\n data.title1,\r\n data.title2,\r\n data.tags,\r\n data.model,\r\n data.module,\r\n data.moduleName,\r\n data.date,\r\n data.number,\r\n data.author,\r\n data.origin,\r\n data.originDescription,\r\n data.bag,\r\n data.validityInfo,\r\n data.expiringInfo,\r\n data.primaryId,\r\n data.primaryModel,\r\n data.secondaryId,\r\n data.isTrial\r\n );\r\n break;\r\n case 'navigate':\r\n this.navigate(data.url);\r\n break;\r\n case 'references':\r\n this.openReferences(\r\n data.id,\r\n data.mode,\r\n data.model,\r\n data.anchor,\r\n data.anchorTitle,\r\n data.update\r\n );\r\n break;\r\n case 'hits':\r\n this.relevants.hits = data.total;\r\n this.updateRelevants();\r\n break;\r\n }\r\n this.changeDetector.markForCheck();\r\n }\r\n } catch {\r\n }\r\n }\r\n }\r\n );\r\n\r\n // Observe layout changes\r\n this.breakpointObserver\r\n .observe([\r\n Breakpoints.XSmall,\r\n Breakpoints.Small,\r\n Breakpoints.Medium,\r\n Breakpoints.Large,\r\n Breakpoints.XLarge,\r\n ])\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(result => {\r\n for (const query of Object.keys(result.breakpoints)) {\r\n if (result.breakpoints[query]) {\r\n this.handleRelevantsPaneVisibility();\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n if (this.rendererListener1) {\r\n this.rendererListener1();\r\n }\r\n }\r\n\r\n /**\r\n * Show hide relevants pane manually\r\n */\r\n protected toggleRelevantsPane() {\r\n this.relevantsPaneClosed = !this.relevantsPaneClosed;\r\n this.relevantsPane()?.toggle();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle filter pane visibility\r\n */\r\n private handleRelevantsPaneVisibility() {\r\n const relevantsPane = this.relevantsPane();\r\n if (relevantsPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (relevantsPane.opened) {\r\n relevantsPane.close();\r\n }\r\n relevantsPane.mode = 'over';\r\n relevantsPane.disableClose = false;\r\n this.relevantsPaneHasBackdrop = true;\r\n } else {\r\n if (!relevantsPane.opened && !this.relevantsPaneClosed && this.hasRelevants()) {\r\n relevantsPane.open();\r\n } else if (relevantsPane.opened && this.relevantsPaneClosed) {\r\n relevantsPane.close();\r\n }\r\n relevantsPane.mode = 'side';\r\n relevantsPane.disableClose = true;\r\n this.relevantsPaneHasBackdrop = false;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Close dialog\r\n */\r\n\r\n protected close() {\r\n if (this.closing) {\r\n this.closing.emit();\r\n }\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n\r\n /**\r\n * Navigate to a new document\r\n * @param id : the document id\r\n */\r\n navigate(id: string) {\r\n if (!id || id.length == 0)\r\n return; // Nothing to do\r\n\r\n if (id.indexOf('?') !== -1) {\r\n if (id.startsWith('/api'))\r\n this.navigateByUrl(this.clipperService.serviceUri + id.substring(4));\r\n else if (!id.startsWith(this.clipperService.serviceUri))\r\n this.navigateByUrl(this.clipperService.serviceUri + id);\r\n else this.navigateByUrl(id);\r\n } else\r\n this.navigateByUrl(\r\n this.clipperService.serviceUri +\r\n \"/documents/render/?query=&id=\" + id);\r\n\r\n }\r\n\r\n /**\r\n * Navigate by url\r\n * @param url : the url to navigate to\r\n */\r\n navigateByUrl(url: string) {\r\n if (!url || url.length === 0 || url === 'about:blank')\r\n return; // Nothing to do\r\n // Clean url, take only the first anchor\r\n let parts = url.split('#');\r\n url = parts[0];\r\n if (parts.length > 1) {\r\n url += '#' + parts[1];\r\n }\r\n // Handle free text query\r\n let query = '';\r\n let p = url.indexOf('query=');\r\n if (p !== -1) {\r\n p += 6;\r\n while (url.length > p && url[p] !== '&' && url[p] !== '#') {\r\n query += url[p++];\r\n }\r\n if (query.length > 0) {\r\n // Reset\r\n this.relevants.hit = 0;\r\n try {\r\n query = decodeURIComponent(encodeURIComponent(query));\r\n } catch {\r\n }\r\n\r\n const queryParts = query.split('__TERM__');\r\n if (queryParts.length > 0) {\r\n this.lastQuery = queryParts[0];\r\n if (queryParts.length > 1) {\r\n this.lastAugmentedQuery = [];\r\n for (var i = 1; i < queryParts.length; i++) {\r\n this.lastAugmentedQuery.push(queryParts[i]);\r\n }\r\n }\r\n }\r\n\r\n\r\n }\r\n }\r\n // Theme\r\n if (url.indexOf('theme=') === -1) {\r\n p = url.indexOf('id=');\r\n if (p !== -1) {\r\n url = url.substring(0, p) + 'theme=' + this.dialogData.theme + '&' + url.substring(p);\r\n }\r\n }\r\n\r\n let navigateToFile = url.indexOf('&file=true') !== -1;\r\n if (navigateToFile === true) {\r\n // Preview\r\n this.previewFile(url);\r\n } else {\r\n this.clipperService.preRender().subscribe(() => {\r\n // Begin loading only if not downloading a file\r\n this.busy.set(url.indexOf('documents/render/item') === -1);\r\n // Navigate\r\n this.url.set(url);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Navigated callback \r\n */\r\n public navigated(\r\n id: string, // Documnent id\r\n title1: string, // Title 1\r\n title2: string, // Title 2\r\n tags: string, // Tag\r\n model: number, // Model\r\n moduleId: number, // Module\r\n moduleName: string, // Module name\r\n date: string, // Date\r\n number: string, // Number\r\n author: string, // Author\r\n origin: string, // Origin\r\n originDescription: string, // Origin description\r\n bag: string, // Flags\r\n validityInfo: string, // Info about validity\r\n expiringInfo: string, // Info about expiring date\r\n primaryId: string, // Primary document id\r\n primaryModel: number, // Primary document model\r\n secondaryId: string, // Secondary document id\r\n isTrial: boolean // True if is a trial request\r\n ) {\r\n // Check for session expiring\r\n if (title1 === 'Sessione non valida') {\r\n this.dialogService\r\n .error(title2, null, title1, 'Accedi di nuovo')\r\n .afterClosed()\r\n .subscribe(() => {\r\n this.router.navigate(['login']);\r\n });\r\n return;\r\n }\r\n\r\n // Store data\r\n if (!this.lastDocument) {\r\n this.lastDocument = {};\r\n }\r\n this.lastDocument.id = id;\r\n this.lastDocument.documentId = id;\r\n this.lastDocument.title1 = title1 ? SystemUtils.urlDecode(title1) : null;\r\n this.lastDocument.title2 = title2 ? SystemUtils.urlDecode(title2) : null;\r\n this.lastDocument.tags = tags;\r\n this.lastDocument.model = model;\r\n this.lastDocument.module = moduleId;\r\n this.lastDocument.moduleName = moduleName;\r\n this.lastDocument.date = new Date(date);\r\n this.lastDocument.number = number;\r\n this.lastDocument.author = author;\r\n this.lastDocument.origin = origin;\r\n this.lastDocument.originDescription = originDescription;\r\n this.lastDocument.bag = bag;\r\n this.lastDocument.validityInfo = validityInfo;\r\n this.lastDocument.primaryId = primaryId;\r\n this.lastDocument.primaryModel = primaryModel;\r\n this.lastDocument.hasPrimary =\r\n primaryId &&\r\n (model === ClipperModel.AggiornamentoNormativo ||\r\n model === ClipperModel.NormativaVigente);\r\n if (primaryId) {\r\n var description = '';\r\n switch (primaryModel ? primaryModel : model) {\r\n case ClipperModel.NormativaVigente:\r\n description = 'Testo vigente';\r\n break;\r\n case ClipperModel.AggiornamentoNormativo:\r\n description = 'Testo storico';\r\n break;\r\n case ClipperModel.Scadenze:\r\n description = 'Scadenza';\r\n break;\r\n case ClipperModel.Coordinamento:\r\n description = 'Modifica';\r\n break;\r\n default:\r\n description = 'Collegamento';\r\n break;\r\n }\r\n this.lastDocument.primaryDescription = description;\r\n }\r\n this.lastDocument.secondaryId = secondaryId;\r\n this.lastDocument.isTrial = isTrial;\r\n\r\n // Handle expiring info\r\n this.lastDocument.expiringDescription = undefined;\r\n if (expiringInfo) {\r\n let parts = expiringInfo.split('#');\r\n if (parts.length > 0) {\r\n let parts2 = parts[0].split('|');\r\n if (parts2.length > 0)\r\n this.lastDocument.expiringDate = new Date(parts2[0]);\r\n if (parts2.length > 1) this.lastDocument.expiringInfo = parts2[1];\r\n if (parts2.length > 2)\r\n this.lastDocument.expiringInfo += '|' + parts2[2];\r\n }\r\n if (parts.length > 1) this.lastDocument.expiringDescription = parts[1];\r\n }\r\n\r\n // Set title\r\n this.title.set(this.lastDocument.title1\r\n ? this.lastDocument.title1\r\n : this.lastDocument.title2);\r\n\r\n // Get last document update\r\n this.clipperService.lastUpdate(this.lastDocument.id).subscribe(r => {\r\n if (r.success) {\r\n this.lastDocument.lastUpdate = r.value;\r\n this.changeDetector.markForCheck();\r\n }\r\n });\r\n\r\n // Notify navigation has completed\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_NAVIGATED, {\r\n document: SystemUtils.clone(this.lastDocument),\r\n });\r\n\r\n this.busy.set(false);\r\n\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * goto previous document in history\r\n */\r\n protected back() {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"back\"}', '*');\r\n }\r\n\r\n /**\r\n * Goto next document in history\r\n */\r\n protected forward() {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"forward\"}', '*');\r\n }\r\n\r\n\r\n\r\n /**\r\n * Goto next relevant item\r\n */\r\n protected nextRelevant() {\r\n let i = this.relevants.hit + 1;\r\n if (i <= this.relevants.hits) {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"relevant\", \"value\": \"next\"}', '*');\r\n this.relevants.hit++;\r\n }\r\n }\r\n\r\n /**\r\n * Goto previous relevant item\r\n */\r\n protected previousRelevant() {\r\n let i = this.relevants.hit - 1;\r\n if (i > 0) {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage(\r\n '{\"type\": \"relevant\", \"value\": \"previous\"}',\r\n '*'\r\n );\r\n this.relevants.hit--;\r\n }\r\n }\r\n\r\n /**\r\n * Goto a relevant item\r\n * @param item : the item to go to\r\n */\r\n protected gotoRelevant(item: ClipperDocumentAnchorInfo) {\r\n if (item.type === 20) {\r\n window.open(\r\n this.clipperService.serviceUri +\r\n \"/documents/render/item/?theme=\" + this.dialogData.theme + \"&id=\" + item.documentId,\r\n '_blank'\r\n );\r\n } else {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage(\r\n '{\"type\": \"relevant\", \"value\": \"' + item.uri + '\"}',\r\n '*'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Update relevant items\r\n */\r\n private updateRelevants() {\r\n const query = this.lastAugmentedQuery.length > 0\r\n ? this.lastAugmentedQuery.join(\"__TERM__\")\r\n : this.lastQuery;\r\n if (\r\n !query ||\r\n query.length === 0 ||\r\n query === ' ') {\r\n this.handleRelevantsPaneVisibility();\r\n } else {\r\n let params = new ClipperSearchParams();\r\n params.id = this.lastDocument.documentId ?? this.lastDocument.id;\r\n params.text = query;\r\n params.count = 1;\r\n this.clipperService\r\n .query(params)\r\n .subscribe(r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n let minimumScore = 0;\r\n if (r.value?.items && r.value?.items.length > 0) {\r\n r.value.items[0].anchors.forEach(n => {\r\n let score = n.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n if (minimumScore > score) minimumScore = score;\r\n n.score = score;\r\n });\r\n this.relevants.minimumScore = minimumScore;\r\n this.relevants.items = r.value.items[0].anchors;\r\n this.hasRelevants.set(this.relevants.items?.length > 0);\r\n }\r\n this.handleRelevantsPaneVisibility();\r\n this.changeDetector.markForCheck();\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n /**\r\n * Display document structure\r\n */\r\n protected index(documentId: string) {\r\n let d = this.dialogService.open(ClipperDocumentIndexComponent, {\r\n ariaLabel: 'indice documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n closeOnNavigation: false,\r\n data: {\r\n documentId: documentId,\r\n excludedTypes: null,\r\n multiple: false\r\n },\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '100%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: ClipperDocumentIndexDialogResult) => {\r\n const item = r.data.length > 0 ? r.data[0] : null;\r\n if (item) {\r\n if (item.documentId === documentId) {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage(\r\n '{\"type\": \"goto\", \"value\":\"' + item.uri + '\"}',\r\n '*'\r\n );\r\n } else {\r\n this.openDocument(item.documentId + '#' + item.uri,);\r\n }\r\n }\r\n\r\n d.close();\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Get the id in a query string\r\n * @param url : the url to process\r\n * @param name : the optional id paramenter name. Default is 'id'\r\n * @returns : the id parame\r\n */\r\n private getId(url: string, name: string = 'id'): string {\r\n const start = url.lastIndexOf(name + '=') + 3;\r\n const end = url.indexOf('&', start);\r\n return url.substring(start, end);\r\n }\r\n\r\n /**\r\n * Preview a file if possible\r\n * @param url : the url to preview\r\n */\r\n private previewFile(url: string) {\r\n if (!url || url.length === 0)\r\n return; // Nothing to do\r\n // Get the id\r\n let id = this.getId(url);\r\n if (!id || id.length === 0)\r\n return; // Nothing to do\r\n // Create the url\r\n this.clipperService.newOTP(id).subscribe(\r\n r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else if (!r.value.canPreview)\r\n // Donload manually\r\n location.href = url;\r\n else {\r\n this.dialogService.open(FilePreviewComponent, {\r\n panelClass: 'preview-panel',\r\n ariaLabel: 'anteprima',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n data: {\r\n url: url,\r\n embed: r.value.canEmbed\r\n },\r\n minWidth: '375px',\r\n maxWidth: '900px',\r\n width: '100%',\r\n height: '100%'\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show document comment\r\n */\r\n protected showComment() {\r\n if (this.lastDocument?.bag[7] !== 'T') return;\r\n this.clipperService\r\n .comment(this.lastDocument?.documentId)\r\n .subscribe(r => {\r\n if (!r.success) {\r\n if (r.message === \"Il tuo abbonamento non consente di visualizzare i commenti alle norme.\")\r\n this.dialogService.error(\"Il servizio di <b>commenti alle norme</b> non è compreso nel tuo abbonamento, per maggiori informazioni rivolgersi all'agente commerciale di riferimento o inviare una mail a <a href='mailto:sales@arsedizioni.it' target='_blank'>sales@arsedizioni.it</a>.\", null, \"Attenzione\");\r\n else\r\n this.dialogService.error(r.message);\r\n } else {\r\n if (r.value && r.value.length > 1) {\r\n this.dialogService.info(\r\n r.value.replace(/<\\/p><br>\\r\\n/g, '</p>\\r\\n'),\r\n \"Commento\",\r\n \"Chiudi\",\r\n 700);\r\n } else\r\n this.dialogService.info(\"Commento non più disponibile o in fase di revisione.\");\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n override open(documentId: string, query?: string, newWindow?: boolean) {\r\n if (!newWindow) {\r\n if (this.opening) this.opening.emit(documentId);\r\n else this.openDocument(documentId, query);\r\n } else {\r\n window.open((this.clipperService.appUri ?? '') + '/documento/' + documentId, '_blank');\r\n }\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n */\r\n private openDocument(documentId: string, query?: string) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.dialogService.baseService,\r\n this.clipperService,\r\n documentId,\r\n query,\r\n this.dialogData.selectionMode,\r\n this.dialogData.selectableModules,\r\n this.dialogData.theme,\r\n this.dialogData.canUseArchive,\r\n this.dialogData.canHandleTooManyResults\r\n );\r\n }\r\n\r\n /**\r\n * Browse document references\r\n * @param documentId : the document id\r\n * @param mode : the mode\r\n */\r\n override openReferences(\r\n documentId: string,\r\n mode: ClipperQueryReferencesMode = ClipperQueryReferencesMode.ReferencesIn,\r\n model: number = null,\r\n anchor: string = null,\r\n anchorTitle: string = null,\r\n update: boolean = true\r\n ) {\r\n\r\n this.dialogService.open(ClipperReferencesComponent, {\r\n ariaLabel: 'riferimenti legati al documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n closeOnNavigation: false,\r\n data: {\r\n documentId: documentId ?? this.lastDocument?.documentId,\r\n mode: mode,\r\n model: model,\r\n anchor: anchor,\r\n anchorTitle: anchorTitle,\r\n update: update,\r\n canUseArchive: this.dialogData.canUseArchive,\r\n canHandleTooManyResults: this.dialogData.canHandleTooManyResults\r\n },\r\n minWidth: '375px',\r\n maxWidth: '1200px',\r\n width: '100%',\r\n height: '100%',\r\n }).afterClosed()\r\n .subscribe((r: ClipperReferenceDialogResult) => {\r\n if (r && r.documentId) {\r\n this.navigate(r.documentId);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Display a report\r\n * @param item\r\n */\r\n protected displayReport(item: ClipperDocumentInfo) {\r\n if (!item) return;\r\n if (item.model != ClipperModel.NormativaVigente && item.model != ClipperModel.Scadenze) {\r\n this.dialogService.info(\"Questa funzionalità non è disponibile per questo tipo di documento.\");\r\n return;\r\n }\r\n this.openReport(item.id, item.title1 ? item.title1 : item.title2);\r\n }\r\n\r\n /**\r\n * Checks if documents can be selected and returned as message\r\n */\r\n protected canSelect(): boolean {\r\n const a = this.dialogData.selectionMode ?? 0;\r\n const b = this.dialogData.selectableModules?.length ?? 0;\r\n const canSelect = this.lastDocument &&\r\n a > 0 &&\r\n (b === 0\r\n ? (this.lastDocument?.model === ClipperModel.NormativaVigente || this.lastDocument?.model === ClipperModel.AggiornamentoNormativo)\r\n : (this.dialogData.selectableModules?.findIndex(x => x === ClipperUtils.getClipperModuleFromModel(this.lastDocument)) !== -1));\r\n return canSelect;\r\n }\r\n\r\n /**\r\n * Send a message with current selection and close dialog\r\n */\r\n protected select() {\r\n if (this.lastDocument) {\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_SELECTED_INNER, this.lastDocument);\r\n this.changeDetector.markForCheck();\r\n this.close();\r\n }\r\n }\r\n\r\n}\r\n\r\n","<div class=\"clipper-document-fixed\">\r\n <div style=\"height:6px\">\r\n @if (busy()) {\r\n <mat-progress-bar style=\"z-index:11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start start\" fxFill>\r\n <div fxFlex=\"*\" class=\"title-container\">\r\n <div class=\"title bold\">{{title()}}</div>\r\n @if (lastDocument && lastDocument.tags) {\r\n <div style=\"padding-top: 5px;\">\r\n <div class=\"x-small bold uppercase\">\r\n TAG: <span class=\"accent\">{{lastDocument?.tags}}</span>\r\n </div>\r\n </div>\r\n }\r\n @if (lastDocument && lastDocument.lastUpdate) {\r\n <div style=\"padding-top: 5px;\">\r\n <div class=\"x-small bold uppercase\">\r\n AGGIORNATO A:\r\n <span class=\"accent\">{{lastDocument.lastUpdate}}</span>\r\n </div>\r\n </div>\r\n }\r\n @if (lastDocument && (lastDocument.expiringDescription || lastDocument.validityInfo)) {\r\n <div style=\"padding-top: 5px;\">\r\n @if (lastDocument.expiringDescription) {\r\n <div class=\"x-small error bold uppercase\">\r\n {{lastDocument.expiringDescription}}</div>\r\n }\r\n @if (lastDocument.validityInfo) {\r\n <div class=\"x-small error bold uppercase\"><b>Attenzione!</b>\r\n {{lastDocument.validityInfo}}</div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n @if (canSelect()) {\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\" style=\"margin-top: 8px;\">\r\n <span class=\"small\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"select()\"\r\n class=\"clipper-selection-icon-button\" matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\"\r\n style=\"margin-top: 4px;\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"48px\" fxLayoutAlign=\"end\">\r\n <div class=\"dialog-close\">\r\n <button fxHide.lt-md fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\"\r\n aria-label=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n <button fxHide.lt-md fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Avanti\" aria-label=\"Avanti\"\r\n (click)=\"forward()\">\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row wrap \" fxFill fxLayoutAlign=\"space-between center\" style=\"padding: 10px 10px 10px 15px;\">\r\n <div fxFlex.xs=\"100\">\r\n @if (lastDocument?.model === 9) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"index(lastDocument?.documentId)\">\r\n Indice\r\n </button>\r\n }\r\n @if (lastDocument?.bag && (lastDocument?.bag[1] ==='T' || lastDocument?.bag[3] ==='T')) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Collegamenti\"\r\n [attr.aria-label]=\"'Collegamenti al documento'\" [matMenuTriggerFor]=\"menuLinks\">\r\n Collegamenti\r\n </button>\r\n }\r\n <mat-menu #menuLinks=\"matMenu\">\r\n @if (lastDocument?.bag && lastDocument?.bag[1] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti richiamati'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[3] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti che richiamano'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[2] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra juris'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche subite'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] !=='T' && lastDocument?.bag[6] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche apportate'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n </mat-menu>\r\n @if (lastDocument?.hasPrimary) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra documento primario'\"\r\n (click)=\"navigate(lastDocument?.primaryId)\">\r\n {{lastDocument?.primaryDescription}}\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[2] ==='T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" fxHide.lt-md mat-button [attr.aria-label]=\"'Mostra juris'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] === 'T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" fxHide.lt-md mat-button [attr.aria-label]=\"'Mostra modifiche subite'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] !== 'T' && lastDocument?.bag[6] === 'T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra modifiche apportate'\" (click)=\"openReferences(lastDocument?.documentId, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n @if (lastDocument?.secondaryId) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra documento secondario'\"\r\n (click)=\"navigate(lastDocument?.secondaryId)\">\r\n Testo storico\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[7] === 'T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra commento'\"\r\n (click)=\"showComment()\">\r\n Commento\r\n </button>\r\n }\r\n </div>\r\n <div fxFlex.xs=\"100\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (hasRelevants() && relevants.hits) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n <div fxFlexAlign=\"center\" class=\"small item-greyed\" style=\"margin-left:20px; margin-right: 5px\"\r\n matTooltip=\"Parole evidenziate\">{{relevants.hit}}\r\n di {{relevants.hits}}</div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla parola precedente'\"\r\n (click)=\"previousRelevant()\" matTooltip=\"Parola precedente\" [disabled]=\"relevants.hit <= 1\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla prossima parola'\"\r\n (click)=\"nextRelevant()\" matTooltip=\"Prossima parola\" [disabled]=\"relevants.hit >= relevants.hits\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azioni sul documento\"\r\n [attr.aria-label]=\"'Azioni da eseguire sul documento'\" [matMenuTriggerFor]=\"menuActions\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menuActions=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"lastDocument\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"lastDocument\" [canOpenDocument]=\"false\" [canPrint]=\"true\"\r\n [canFind]=\"true\" [isReadable]=\"false\" [canUseArchive]=\"dialogData.canUseArchive ?? false\"\r\n [isLawInForce]=\"lastDocument?.model === 9\" selectionSource=\"none\"\r\n [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n @if (hasRelevants() && relevants.items && relevantsPane && (!relevantsPane.opened || relevantsPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Rilevanza\" aria-label=\"'Rilevanza'\"\r\n (click)=\"toggleRelevantsPane()\">\r\n <mat-icon>right_panel_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content id=\"clipper-document-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"[relevantsPaneHasBackdrop]\">\r\n <mat-drawer #relevantsPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (relevantsBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (relevantsBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"78px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"title\">Rilevanza</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-icon-button (click)=\"toggleRelevantsPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"relevants-container scroll-auto\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div>\r\n <p>Parti del documento più significative per la ricerca di <span class='word-hit'>{{lastQuery}}</span>\r\n @if((lastAugmentedQuery?.length ?? 0) > 0) {\r\n &nbsp; + &nbsp; <span class='word-hit-ai'\r\n [matTooltip]=\"'Assistente IA ha considerato anche: ' + lastAugmentedQuery?.join(', ')\"><mat-icon\r\n style=\"width:14px; height:14px; font-size:16px\">borg</mat-icon>&nbsp;Assistente&nbsp;IA</span>\r\n }\r\n </p>\r\n </div>\r\n <div fxFlex=\"*\">\r\n <nav class=\"relevants-items\">\r\n <ul>\r\n @for (item of relevants.items; track $index) {\r\n <li class=\"small\" (click)=\"gotoRelevant(item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\">\r\n {{item.title}}\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (item.score > 1.2) {\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px'\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div class=\"fill scroll-hidden\">\r\n <iframe id=\"clipper-document-iframe\" class=\"iframe\" [src]=\"url() | safeUrl\"></iframe>\r\n </div>\r\n </mat-drawer-container>\r\n</mat-dialog-content>","import { MatDialogRef } from '@angular/material/dialog';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport {\r\n ClipperModule,\r\n ClipperSelectionMode,\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperDocumentComponent } from './ui/document/document.component';\r\nimport { ThemeType } from '@arsedizioni/ars-utils/core';\r\n\r\nexport class ClipperDocumentsUtils {\r\n /**\r\n * Open a document\r\n * @param dialogService: the dialog service\r\n * @param clipperService: the clipper service\r\n * @param documentId : the document id \r\n * @param query : the query for highlight\r\n * @param selectionMode : the clipper selection mode\r\n * @param selectableModules : the clipper selectable modules\r\n * @param theme: the theme to use. Default is system\r\n * @param canUseArchive: ture if archive is available\r\n * @param canHandleTooManyResults: true if the component should handle too many results\r\n */\r\n static openDocument(\r\n dialogService: DialogService,\r\n clipperService: ClipperService,\r\n documentId: string,\r\n query?: string ,\r\n selectionMode?: ClipperSelectionMode,\r\n selectableModules?: ClipperModule[],\r\n theme?: ThemeType,\r\n canUseArchive?: boolean,\r\n canHandleTooManyResults?: boolean): MatDialogRef<ClipperDocumentComponent> | undefined {\r\n\r\n if (!clipperService.loggedIn()) {\r\n dialogService.error(\"Clipper non è disponibile in questo momento. Verifica la connessione.\");\r\n return undefined;\r\n }\r\n if (!documentId) {\r\n dialogService.error(\"Documento non valido.\");\r\n return undefined;\r\n }\r\n return dialogService.open(ClipperDocumentComponent, {\r\n ariaLabel: 'documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n data: {\r\n id: documentId,\r\n query: query,\r\n selectionMode: selectionMode,\r\n selectableModules: selectableModules,\r\n theme: theme,\r\n canUseArchive: canUseArchive,\r\n canHandleTooManyResults: canHandleTooManyResults\r\n },\r\n minWidth: '375px',\r\n maxWidth: '1400px',\r\n width: '100%',\r\n height: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Extract document title\r\n * @param title : the full document title\r\n */\r\n static parseDocumentTitle(title: string) {\r\n const p = title?.indexOf('[');\r\n if (p !== -1) {\r\n return title.substring(0, p);\r\n }\r\n return title;\r\n }\r\n\r\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, input, signal, output, viewChild } from '@angular/core';\r\nimport { DateInterval } from '@arsedizioni/ars-utils/core';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatCalendar, MatCalendarCellClassFunction } from '@angular/material/datepicker';\r\nimport { endOfDay, endOfMonth, startOfMonth, startOfToday, subDays } from 'date-fns';\r\nimport { CalendarEmptyHeader } from '@arsedizioni/ars-utils/ui.application';\r\nimport { ClipperSearchCalendarSnapshotMonth, ClipperSearchCalendarSnapshotResult } from '@arsedizioni/ars-utils/clipper.common';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'clipper-search-calendar',\r\n templateUrl: './search-calendar.component.html',\r\n styleUrls: ['./search-calendar.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FlexModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatCalendar,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatDividerModule,\r\n MatExpansionModule\r\n ],\r\n})\r\nexport class ClipperSearchCalendarComponent {\r\n readonly calendar = viewChild.required<MatCalendar<any>>('calendar');\r\n readonly changed = output<DateInterval | undefined>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n protected busy = signal<boolean>(false);\r\n protected months = signal<ClipperSearchCalendarSnapshotMonth[] | undefined>(undefined);\r\n protected calendarSpecialDays?: number[];\r\n protected calendarEmptyHeader = CalendarEmptyHeader;\r\n public calendarDate: Date = startOfToday();\r\n protected calendarDateClass: MatCalendarCellClassFunction<Date> = (cellDate) => {\r\n if (!this.calendarSpecialDays) return '';\r\n if (this.calendarSpecialDays[cellDate.getDate() - 1] > 0) {\r\n if (cellDate < startOfToday()) return 'special-date-expired';\r\n else if (subDays(cellDate, 15) <= startOfToday()) return 'special-date-expiring';\r\n else return 'special-date';\r\n }\r\n return '';\r\n };\r\n protected calendarDateFilter = (cellDate: Date): boolean => {\r\n return this.canFilter() && this.calendarSpecialDays != null && this.calendarSpecialDays[cellDate.getDate() - 1] > 0;\r\n }\r\n readonly canFilter = input<boolean>(false);\r\n\r\n\r\n /**\r\n * Update calendar\r\n * @param month : the month snapshot\r\n * @param months : the months snapshot\r\n * @param date : the new current date\r\n */\r\n update(month?: ClipperSearchCalendarSnapshotResult,\r\n months?: ClipperSearchCalendarSnapshotResult,\r\n date: Date = startOfToday()) {\r\n if (months?.months) {\r\n this.months.set(months.months);\r\n }\r\n if (month && month.months && month.months.length > 0) {\r\n this.calendarSpecialDays = month.months[0].days;\r\n }\r\n const calendar = this.calendar();\r\n if (calendar) {\r\n calendar.activeDate = date;\r\n calendar.selected = date;\r\n calendar.updateTodaysDate();\r\n }\r\n this.calendarDate = date;\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n /**\r\n * Filter by date\r\n * @param date : the date to filter to or \"month\" to filter by the whole month.\r\n */\r\n protected filterByDate(date?: Date | string) {\r\n if (date === 'month') {\r\n if (this.calendarDate) {\r\n const today = new Date();\r\n const start = endOfDay(startOfMonth(this.calendarDate));\r\n const end = endOfMonth(this.calendarDate);\r\n this.changed.emit(new DateInterval(start, end));\r\n if (start <= today && end >= today) {\r\n const calendar = this.calendar();\r\n calendar.selected = today;\r\n calendar.updateTodaysDate();\r\n }\r\n }\r\n } else if (date) {\r\n this.changed.emit(\r\n new DateInterval(\r\n endOfDay(date as Date),\r\n endOfDay(date as Date)));\r\n this.calendarDate = date as Date;\r\n const calendar = this.calendar();\r\n calendar.selected = date;\r\n calendar.updateTodaysDate();\r\n } else {\r\n this.changed.emit(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Filter by month\r\n * @param monthInfo: the month info\r\n */\r\n protected filterByMonth(monthInfo: ClipperSearchCalendarSnapshotMonth) {\r\n const newDate = new Date(monthInfo.year, monthInfo.month - 1, 1);\r\n const today = new Date();\r\n const start = endOfDay(startOfMonth(newDate));\r\n const end = endOfMonth(newDate);\r\n this.changed.emit(new DateInterval(start, end));\r\n this.calendarSpecialDays = monthInfo.days;\r\n const calendar = this.calendar();\r\n if (start <= today && end >= today) {\r\n calendar.selected = today;\r\n }\r\n calendar.activeDate = newDate;\r\n calendar.updateTodaysDate();\r\n this.calendarDate = newDate;\r\n }\r\n}\r\n","<div fxLayout=\"column\" fxFill class=\"calendar-container scroll-hidden\">\r\n <div class=\"calendar-months\">\r\n <div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"center\" fxLayoutGap=\"8px\" fxFill>\r\n @for (m of months(); track $index) {\r\n <button fxFlex=\"37px\" mat-button class=\"small uppercase\" (click)=\"filterByMonth(m)\" [disabled]=\"m.total === 0\">\r\n @if (m.expired) {\r\n <span class=\"expired\" [matTooltip]=\"m.expired + ' elementi in ritardo'\">{{m.monthShortName}}</span>\r\n } @else {\r\n <span [matTooltip]=\"m.total + ' elementi'\">{{m.monthShortName}}</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"separator\"></div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-auto\">\r\n @if (!busy()) {\r\n <mat-calendar #calendar [headerComponent]=\"calendarEmptyHeader\" [dateClass]=\"calendarDateClass\"\r\n [dateFilter]=\"calendarDateFilter\" (selectedChange)=\"filterByDate($event)\" class=\"calendar-month\">\r\n </mat-calendar>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around\" style=\"padding:0 15px\">\r\n <button type=\"button\" mat-stroked-button (click)=\"filterByDate('month')\">Tutto il\r\n mese</button>\r\n </div>\r\n }\r\n </div>\r\n</div>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperFacet,\r\n ClipperSearchFacet,\r\n ClipperSearchFacetGroup,\r\n ClipperSearchFacetsSnapshot\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\n\r\n@Component({\r\n selector: 'clipper-search-facets',\r\n templateUrl: './search-facets.component.html',\r\n styleUrls: ['./search-facets.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexModule, MatButtonModule, MatTooltipModule, MatChipsModule, MatIconModule, \r\n MatDividerModule, MatExpansionModule]\r\n})\r\nexport class ClipperSearchFacetsComponent {\r\n readonly changed = output<ClipperSearchFacetsSnapshot>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n protected snapshot: ClipperSearchFacetsSnapshot = new ClipperSearchFacetsSnapshot();\r\n\r\n public hasFacets = (): boolean => this.snapshot.hasFacets;\r\n\r\n public handleTooManyResults = input<boolean>(false);\r\n\r\n /**\r\n * Update facets\r\n * @param values : the facets values\r\n * @param interval : the date interval for YEAR facets\r\n */\r\n update(values?: ClipperSearchFacet[][], interval?: string) {\r\n this.snapshot.interval = interval;\r\n if (values) {\r\n this.snapshot.groups = [];\r\n values.forEach(n => {\r\n const name = n[0].typeName;\r\n const index = n[0].type;\r\n const i = this.snapshot.usedGroups.findIndex(n => n.index === index);\r\n const j = this.snapshot.groups.findIndex(n => n.index === index);\r\n if (i === -1 && j === -1) {\r\n this.snapshot.groups.push({\r\n name: name,\r\n selectedValue: null,\r\n selectedValueDescription: null,\r\n values: n,\r\n index: index,\r\n }); \r\n }\r\n });\r\n }\r\n this.snapshot.hasFacets = this.snapshot.groups.length > 0 || this.snapshot.usedGroups.length > 0; \r\n this.snapshot.hasMoreFacets = this.snapshot.hasFacets && this.snapshot.groups.length > this.snapshot.usedGroups.length; \r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Use a facet item as filter\r\n * @param group : the facet group\r\n * @param item : the facet item\r\n */\r\n protected use(group: ClipperSearchFacetGroup, item: ClipperSearchFacet) {\r\n group.selectedValue = item.value;\r\n group.selectedValueDescription = item.title;\r\n const j = this.snapshot.groups.findIndex(n => n.index === group.index);\r\n if (j !== -1) {\r\n this.snapshot.groups.splice(j, 1);\r\n let updated = false;\r\n this.snapshot.usedGroups.forEach((n, i) => {\r\n if (!updated && n.index > group.index) {\r\n this.snapshot.usedGroups.splice(i, 0, group);\r\n updated = true;\r\n }\r\n });\r\n if (!updated) {\r\n this.snapshot.usedGroups.push(group);\r\n }\r\n }\r\n this.apply();\r\n }\r\n\r\n /**\r\n * dismiss a facet group filter\r\n * @param group : the facet group\r\n * @param apply : true to emit changed event and generate a new search, false just for update\r\n */\r\n protected dismiss(group: ClipperSearchFacetGroup, apply: boolean = true) {\r\n group.selectedValue = undefined;\r\n group.selectedValueDescription = undefined;\r\n const i = this.snapshot.usedGroups.findIndex(n => n.index === group.index);\r\n if (i !== -1) {\r\n this.snapshot.usedGroups.splice(i, 1);\r\n let updated = false;\r\n this.snapshot.groups.forEach((n, j) => {\r\n if (!updated && n.index > group.index) {\r\n this.snapshot.groups.splice(j, 0, group);\r\n updated = true;\r\n }\r\n });\r\n if (!updated) {\r\n this.snapshot.groups.push(group);\r\n }\r\n }\r\n if (apply) {\r\n this.apply();\r\n }\r\n }\r\n\r\n /**\r\n * Apply filter\r\n */\r\n private apply() {\r\n if (this.snapshot.usedGroups.length > 0) {\r\n this.snapshot.usedGroups.forEach(n => {\r\n if (n.index === ClipperFacet.Year) {\r\n if (n.selectedValue) {\r\n this.snapshot.fromDate = new Date(parseInt(n.selectedValue), 0, 1, 12, 0, 0);\r\n this.snapshot.toDate = new Date(parseInt(n.selectedValue), 11, 31, 12, 0, 0);\r\n } else {\r\n this.snapshot.fromDate = undefined;\r\n this.snapshot.toDate = undefined;\r\n }\r\n } else if (n.index === ClipperFacet.Sector) {\r\n this.snapshot.sector = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.Author) {\r\n this.snapshot.author = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.DocumentType) {\r\n this.snapshot.type = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.Article) {\r\n this.snapshot.anchor = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.Reason) {\r\n this.snapshot.reason = n.selectedValue ?? null;\r\n }\r\n });\r\n }\r\n if (this.snapshot.groups.length > 0) {\r\n this.snapshot.groups.forEach(n => {\r\n if (n.index === ClipperFacet.Year) {\r\n this.snapshot.fromDate = undefined;\r\n this.snapshot.toDate = undefined;\r\n } else if (n.index === ClipperFacet.Sector) {\r\n this.snapshot.sector = undefined;\r\n } else if (n.index === ClipperFacet.Author) {\r\n this.snapshot.author = undefined;\r\n } else if (n.index === ClipperFacet.DocumentType) {\r\n this.snapshot.type = undefined;\r\n } else if (n.index === ClipperFacet.Article) {\r\n this.snapshot.anchor = undefined;\r\n } else if (n.index === ClipperFacet.Reason) {\r\n this.snapshot.reason = undefined;\r\n }\r\n });\r\n }\r\n this.changed.emit(this.snapshot);\r\n }\r\n\r\n /**\r\n * Clear facets by group index\r\n * @param index : the group index to clear. Use -1 to clear all groups at once\r\n * @returns : the number of groups dismissed\r\n */\r\n protected clear(index: number = -1): number {\r\n let dismissed = 0;\r\n this.snapshot.usedGroups.forEach(n => {\r\n if (index === -1 || index === n.index) {\r\n if (n.index === ClipperFacet.Year) {\r\n this.snapshot.fromDate = undefined;\r\n this.snapshot.toDate = undefined;\r\n } else if (n.index === ClipperFacet.Sector) {\r\n this.snapshot.sector = undefined;\r\n } else if (n.index === ClipperFacet.Author) {\r\n this.snapshot.author = undefined;\r\n } else if (n.index === ClipperFacet.DocumentType) {\r\n this.snapshot.type = undefined;\r\n } else if (n.index === ClipperFacet.Article) {\r\n this.snapshot.anchor = undefined;\r\n } else if (n.index === ClipperFacet.Reason) {\r\n this.snapshot.reason = undefined;\r\n }\r\n this.dismiss(n, false);\r\n dismissed++;\r\n }\r\n });\r\n if (dismissed) {\r\n this.changed.emit(this.snapshot);\r\n }\r\n return dismissed;\r\n }\r\n\r\n /**\r\n * Reset\r\n */\r\n reset() {\r\n this.snapshot.groups = [];\r\n this.snapshot.usedGroups = [];\r\n this.snapshot.hasFacets = false;\r\n this.snapshot.fromDate = undefined;\r\n this.snapshot.toDate = undefined;\r\n this.snapshot.sector = undefined;\r\n this.snapshot.author = undefined;\r\n this.snapshot.anchor = undefined;\r\n this.snapshot.type = undefined;\r\n this.snapshot.reason = undefined;\r\n }\r\n\r\n /**\r\n * Restore data\r\n * @param data : the data to restore\r\n */\r\n restore(data: ClipperSearchFacetsSnapshot) {\r\n if (data) {\r\n this.snapshot = data;\r\n this.changeDetector.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * Save data\r\n */\r\n save(): ClipperSearchFacetsSnapshot {\r\n return this.snapshot;\r\n }\r\n}\r\n","<div fxLayout=\"column\" fxFill class=\"facets-container scroll-hidden\">\r\n @if (snapshot.usedGroups.length > 0) {\r\n <div class=\"facets-selection\">\r\n <mat-chip-set aria-label=\"Selezione\">\r\n @for (ug of snapshot.usedGroups; track $index) {\r\n <mat-chip (removed)=\"dismiss(ug)\" [matTooltip]=\"ug.selectedValueDescription ?? ''\" matTooltipPosition=\"above\">\r\n {{ug.selectedValueDescription}}\r\n <button matChipRemove [attr.aria-label]=\"'Rimuovi ' + ug.name\" [matTooltip]=\"'Rimuovi ' + ug.name\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n }\r\n </mat-chip-set>\r\n <mat-divider class=\"divider\"></mat-divider>\r\n </div>\r\n }\r\n <div fxFlex=\"*\" class=\"scroll-auto facets-items-container\">\r\n @if (snapshot.groups.length > 0) {\r\n @for (group of snapshot.groups; track group.index; let i = $index) {\r\n <mat-accordion multi displayMode=\"flat\">\r\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0 \" [expanded]=\"i == 0\">\r\n <mat-expansion-panel-header class=\"accordion-header\" [attr.aria-label]=\"group.name\">\r\n <mat-panel-title>\r\n @if (group.index == 2 && snapshot.interval) {\r\n {{snapshot.interval}} ({{group.values.length}})\r\n } @else {\r\n {{group.name}} ({{group.values.length}})\r\n }\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <nav class=\"facets-items\">\r\n <ul>\r\n @for (item of group.values; track $index) {\r\n <li (click)=\"use(group, item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"truncated\">\r\n <div class=\"truncated\">{{item.title}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n {{!handleTooManyResults() && snapshot.hasTooManyResults ? '~' : ''}}{{item.count}}\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n }\r\n } @else if (snapshot.hasFacets && !snapshot.hasMoreFacets) {\r\n <div class=\"facets-message\">\r\n <p class=\"small\"><i>Tutte le opzioni sono state selezionate</i></p>\r\n </div>\r\n }\r\n </div>\r\n</div>","import { BreakpointObserver } from '@angular/cdk/layout';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component, OnDestroy, inject, signal,\r\n viewChild\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { ClipperDocumentInfo, ClipperMessages, ClipperModel, ClipperSearchParams, ClipperSearchResult, ClipperSelectionMode, ClipperSort, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';\r\nimport {\r\n DateFormat,\r\n NameValueItem, ScreenService, SelectableModel, SystemUtils,\r\n ThemeService\r\n} from '@arsedizioni/ars-utils/core';\r\nimport { startOfDay, startOfToday, subDays } from 'date-fns';\r\nimport { Subject } from 'rxjs';\r\nimport { ClipperDocumentsUtils } from '../../documents';\r\nimport { ClipperDocumentManager } from '../document-manager/document-manager';\r\nimport { ClipperSearchCalendarComponent } from '../search-calendar/search-calendar.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ApplicationDialogService } from '@arsedizioni/ars-utils/ui.application';\r\n\r\n\r\n\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ClipperDocumentManager, ClipperSearchFacetsComponent, ClipperSearchCalendarComponent],\r\n})\r\nexport class ClipperSearchResultManager\r\n extends ClipperDocumentManager\r\n implements OnDestroy {\r\n readonly paginator = viewChild<MatPaginator>('paginator');\r\n readonly facets = viewChild<ClipperSearchFacetsComponent>('facets');\r\n readonly calendar = viewChild<ClipperSearchCalendarComponent>('calendar');\r\n protected unsubscribe: Subject<void> = new Subject<void>();\r\n protected changeDetector = inject(ChangeDetectorRef);\r\n protected breakpointObserver = inject(BreakpointObserver);\r\n private themeService = inject(ThemeService);\r\n public screenService = inject(ScreenService);\r\n public dialogService = inject(ApplicationDialogService);\r\n public selection: SelectableModel<ClipperDocumentInfo, string> | undefined;\r\n public selectionMode = signal<ClipperSelectionMode>(ClipperSelectionMode.None);\r\n protected snapshot: ClipperSearchResult | undefined = new ClipperSearchResult();\r\n protected filterBusy = signal<boolean>(false);\r\n protected filterParams: ClipperSearchParams = new ClipperSearchParams();\r\n protected filterPaneHasBackdrop: boolean = false;\r\n protected filterPaneClosed: boolean = false;\r\n protected filterPane2HasBackdrop: boolean = false;\r\n protected filterPane2Closed: boolean = false;\r\n protected sortOptions: NameValueItem<ClipperSort>[] = [];\r\n protected sortMode: NameValueItem<ClipperSort> | undefined;\r\n protected scrollPos: number = 0;\r\n protected scrollerId: string = 'scroller_' + SystemUtils.generateUUID();\r\n protected restorableId: string | undefined;\r\n protected hasFacets = signal<boolean>(false);\r\n protected hasRegions = (): boolean => {\r\n return (this.filterParams.sectors?.filter(n => n.value === 'LR').length ?? 0) > 0;\r\n };\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n\r\n /**\r\n * Update menu buttons visibility when the menu is closed\r\n */\r\n updateMenuButtonsVisibility() {\r\n if (this.snapshot) {\r\n this.snapshot.items?.forEach(n => {\r\n n.isMenuOpen = false;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Scroll on top o list area\r\n * @param top: the top position\r\n */\r\n scroll(top: number = 0) {\r\n const elem = document.getElementById(this.scrollerId);\r\n if (elem) {\r\n elem.scrollTo({ top: top, left: 0, behavior: 'auto' });\r\n }\r\n }\r\n\r\n /**\r\n * Check if every element are selected\r\n */\r\n allSelected(): boolean {\r\n return this.selection?.current?.selected?.length === this.snapshot?.items?.length;\r\n }\r\n\r\n /**\r\n * Master selection toggle\r\n * @param select: true to select all elements false to deselect all elements\r\n */\r\n selectAll(select: boolean = true) {\r\n if (select) {\r\n this.snapshot?.items?.forEach(n => this.selection?.select(n, n.documentId));\r\n } else {\r\n this.snapshot?.items?.forEach(n => this.selection?.deselect(n, n.documentId));\r\n }\r\n }\r\n\r\n /**\r\n * Check if selections exists\r\n * @returns true if at least one element is selected\r\n */\r\n hasAnySelection(): boolean {\r\n return (this.selection?.all?.length ?? 0) > 0;\r\n }\r\n\r\n /**\r\n * Check if only one element is selected\r\n * @returns true if only one element is selected\r\n */\r\n hasSingleSelection(): boolean {\r\n return (this.selection?.all?.length ?? 0) === 1;\r\n }\r\n\r\n /**\r\n * Get the first selected item \r\n * @returns the selected item or null \r\n */\r\n getSingleSelection(): ClipperDocumentInfo | undefined {\r\n return this.hasAnySelection() ? this.selection?.all[0] : undefined;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Clear selection\r\n */\r\n clearSelection() {\r\n return this.selection?.clear();\r\n }\r\n\r\n /**\r\n * Return the number of selected items or null\r\n * @returns Return the number of selected items\r\n */\r\n countSelections(): number | undefined {\r\n return (this.selection && this.selection?.all?.length > 0) ? this.selection?.all?.length : undefined;\r\n }\r\n\r\n /**\r\n * Get the selected id\r\n */\r\n getSeletectId(): string | undefined {\r\n if (this.hasAnySelection()) {\r\n return this.selection?.all[0].documentId;\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Get all selected ids\r\n */\r\n getSeletectIds(): string[] | undefined {\r\n if ((this.selection?.all?.length ?? 0) > 100) {\r\n this.dialogService.error('La selezione non può contenere più di 100 elementi.');\r\n return undefined;\r\n }\r\n let ids: string[] = [];\r\n if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n ids.push(n.documentId);\r\n });\r\n }\r\n return ids;\r\n }\r\n\r\n /**\r\n * Get all selected ids\r\n * @returns a tuple list with id and data\r\n */\r\n getSeletectIdsAndData(): [string, ClipperDocumentInfo][] | undefined {\r\n if ((this.selection?.all?.length ?? 0) > 100) {\r\n this.dialogService.error('La selezione non può contenere più di 100 elementi.');\r\n return undefined;\r\n }\r\n let data: [string, ClipperDocumentInfo][] = [];\r\n if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n data.push([n.documentId, n]);\r\n });\r\n }\r\n return data;\r\n }\r\n\r\n\r\n /**\r\n * Prepare result items\r\n * @param items : the items to process\r\n * @param params : the current search params\r\n */\r\n prepareResultItems(items: ClipperDocumentInfo[], params: ClipperSearchParams) {\r\n const today = startOfToday();\r\n const groupByYear =\r\n !params.sortMode ||\r\n params.sortMode === ClipperSort.DateAsc ||\r\n params.sortMode === ClipperSort.DateDesc ||\r\n params.sortMode === ClipperSort.SourceDateAsc ||\r\n params.sortMode === ClipperSort.SourceDateDesc;\r\n const groupByRelevance = params.sortMode === ClipperSort.Relevance;\r\n const groupByPopularity = params.sortMode === ClipperSort.Popularity;\r\n let group = '';\r\n items?.forEach(n => {\r\n n.documentId = n.documentId ?? n.id;\r\n this.selection?.updateCurrent(n, n.documentId);\r\n if (n.model === ClipperModel.Quesiti) {\r\n n.info = \"Quesito n° \" + n.number + \" del \" + SystemUtils.formatDate(n.date, \"d MMM yyyy\");\r\n } else if (n.model === ClipperModel.Scadenze ||\r\n n.model === ClipperModel.Segnalazioni) {\r\n switch (n.model) {\r\n case ClipperModel.Scadenze:\r\n n.originDescription = 'Scadenza';\r\n break;\r\n case ClipperModel.Segnalazioni:\r\n n.originDescription = 'Segnalazione';\r\n break;\r\n }\r\n if (n.expiringInfo) {\r\n let parts = n.expiringInfo.split('|');\r\n if (parts.length === 3) {\r\n n.expiringDescription = parts[2];\r\n }\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n const d = startOfDay(subDays(n.date, 15));\r\n n.isExpiring = today <= n.date && today >= d;\r\n n.isExpired = n.date < today;\r\n\r\n }\r\n } else {\r\n if ((n.model === ClipperModel.Articoli ||\r\n n.model === ClipperModel.News) &&\r\n n.tags) {\r\n n.info = n.tags.toUpperCase();\r\n }\r\n if (n.model !== ClipperModel.AggiornamentoNormativo &&\r\n n.model !== ClipperModel.NormativaVigente &&\r\n n.model !== ClipperModel.GiurisprudenzaRecente &&\r\n n.model !== ClipperModel.Juris &&\r\n n.date) {\r\n n.date = startOfDay(new Date(n.date ?? n.publishingDate));\r\n const d = startOfDay(subDays(startOfToday(), 7))\r\n n.isNew = n.date > d;\r\n }\r\n if (n.anchors) {\r\n let anchorType: number | undefined;\r\n let anchors: any = [];\r\n n.anchors.forEach(a => {\r\n if (a.type === 20) return;\r\n if (a.type !== anchorType) {\r\n if (a.type >= 3)\r\n anchors.push({ text: a.typeDescription });\r\n anchorType = a.type;\r\n }\r\n let score = a.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n anchors.push({\r\n text: a.text,\r\n title: a.title,\r\n documentId: a.documentId,\r\n uri: a.uri,\r\n veryRelevant: score > 0.7\r\n });\r\n });\r\n n.anchors = anchors;\r\n }\r\n if (n.validityState > 0) {\r\n n.validityDescription = 'Non è più vigente';\r\n n.isExpired = true;\r\n if (n.validUntilDate) {\r\n const expiringDate = startOfDay(new Date(n.validUntilDate));\r\n if (expiringDate < today) {\r\n n.validityDescription =\r\n 'Non più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n } else {\r\n n.validityDescription =\r\n 'Non sarà più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n n.isExpired = false;\r\n }\r\n }\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n const d = startOfDay(subDays(n.date, 15));\r\n n.isExpiring = today <= n.date && today >= d;\r\n n.isExpired = n.date < today;\r\n }\r\n }\r\n if (groupByYear) {\r\n const d = this.filterParams.models?.length > 1\r\n ? n.publishingDate\r\n : n.date;\r\n const year = SystemUtils.formatDate(d, DateFormat.LongMonthAndYear)?.toLowerCase();\r\n if (group !== year) {\r\n n.group = year;\r\n group = year;\r\n }\r\n } else if (groupByRelevance) {\r\n if (group !== 'none') {\r\n n.group =\r\n 'Elementi più rilevanti per la ricerca: ' + params.text;\r\n group = 'none';\r\n }\r\n } else if (groupByPopularity) {\r\n if (group !== 'none') {\r\n n.group = 'Elementi più popolari in ordine decrescente';\r\n group = 'none';\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Prepare results\r\n * @param data : the result list to prepare\r\n * @param newSearch : true if is a new search\r\n */\r\n prepareResults(data: ClipperSearchResult, newSearch: boolean = false) {\r\n const currentTotal = this.snapshot?.total ?? 0;\r\n this.selection?.current.clear();\r\n if (!newSearch) {\r\n data.facets = this.snapshot?.facets;\r\n }\r\n this.snapshot = data;\r\n if (this.snapshot.total == -1) {\r\n this.snapshot.total = currentTotal;\r\n }\r\n if (this.snapshot.items) {\r\n this.prepareResultItems(this.snapshot.items, this.filterParams);\r\n }\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n /**\r\n * Save current document list or just the selected documents as a csv\r\n * @param format: the export format: 1) list, 2) deadlines\r\n */\r\n exportResults(format: number = 1) {\r\n if (this.snapshot?.total > 0 || this.hasAnySelection()) {\r\n this.exportItems(this.getSeletectIds(), this.filterParams, format);\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Return item state css class\r\n * @param item : the item to evaluate\r\n */\r\n getItemStateCssClass(item: ClipperDocumentInfo): string | undefined {\r\n if (item.isRead !== true && ClipperUtils.isClipperModelReadable(item.model)) return 'unread-bg';\r\n else if (item.isExpired) return 'expired-bg';\r\n //else if (item.popularity === 3) return 'popular-bg';\r\n //else if (item.popularity > 3) return 'very-popular-bg';\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Return the item state tooltip text\r\n * @param item : the item to evaluate\r\n */\r\n getItemStateTooltip(item: ClipperDocumentInfo): string {\r\n if (item.isRead !== true && ClipperUtils.isClipperModelReadable(item.model)) return 'Non letto';\r\n else if (item.isExpired) return 'Non più vigente';\r\n //else if (item.popularity === 3) return 'Documento con numero di citazioni alto';\r\n //else if (item.popularity > 3) return 'Documento con numero di citazioni molto alto';\r\n return '';\r\n }\r\n\r\n /**\r\n * Return the item icon\r\n * @param item : the item to evaluate\r\n */\r\n getItemIcon(item: ClipperDocumentInfo): string {\r\n switch (item.model) {\r\n case ClipperModel.NormativaVigente: return 'gavel';\r\n case ClipperModel.Articoli:\r\n case ClipperModel.Quesiti:\r\n case ClipperModel.MetodiDiAnalisi: return 'extension';\r\n default: return 'updated';\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the read flag\r\n * @param item : the item to update\r\n * @paran e: the optional click event\r\n */\r\n toggleRead(item: ClipperDocumentInfo, e?: Event) {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n this.setRead(!item?.isRead, item);\r\n\r\n }\r\n\r\n /**\r\n * Toggle the selection flag\r\n * @param item : the item to update\r\n * @paran e: the optional click event\r\n */\r\n toggleSelection(item: ClipperDocumentInfo, e?: Event) {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n this.selection?.toggle(item, item.documentId)\r\n\r\n\r\n }\r\n\r\n\r\n /**\r\n * Set read flag\r\n * @param value: the flag value\r\n * @param item: the item to set or null to use current selection\r\n */\r\n setRead(value: boolean, item?: ClipperDocumentInfo) {\r\n let documentIds: string[] = [];\r\n if (item) {\r\n documentIds = [item.documentId];\r\n } else if (this.hasAnySelection()) {\r\n documentIds = this.selection?.all?.map(n => n.documentId);\r\n }\r\n return this.clipperService.updateState({ documentIds: documentIds, isRead: value })\r\n .subscribe(r => {\r\n if (r.success) {\r\n if (item) {\r\n if (item.isRead !== value) {\r\n item.isRead = value;\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_READ, { document: item, value: value });\r\n this.clipperService.updateUnreadItems(\r\n ClipperUtils.getClipperModuleFromModel(item),\r\n item.model,\r\n value ? -1 : 1);\r\n this.changeDetector.markForCheck();\r\n }\r\n } else if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n if (n.isRead !== value) {\r\n n.isRead = value;\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_READ, { document: n, value: value });\r\n this.clipperService.updateUnreadItems(\r\n ClipperUtils.getClipperModuleFromModel(n),\r\n n.model,\r\n value ? -1 : 1);\r\n this.changeDetector.markForCheck();\r\n }\r\n })\r\n }\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_DASHBOARD_UPDATED);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n * @param newWindow: true if the document must be open into a new window\r\n * @param canUseArchive: true if archive is available\r\n */\r\n override open(documentId: string, query?: string, newWindow?: boolean) {\r\n if (!newWindow) this.openDocument(documentId, query);\r\n else {\r\n window.open((this.clipperService.appUri ?? '') + '/documento/' + documentId, '_blank');\r\n }\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n * @param query: the current query or null \r\n */\r\n openDocument(documentId: string, query?: string) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.dialogService.baseService,\r\n this.clipperService,\r\n documentId,\r\n query ?? this.filterParams.expandTextQueryUsingAI\r\n ? (this.filterParams.augmentedText ?? this.filterParams.text)\r\n : this.filterParams.text,\r\n this.selectionMode(),\r\n null,\r\n this.themeService.getTheme(),\r\n this.canUseArchive(),\r\n this.canHandleTooManyResults()\r\n );\r\n\r\n }\r\n\r\n ///\r\n // Restorable\r\n ///\r\n\r\n /**\r\n * Save restorable data\r\n * @param id : the restorable id\r\n * @param storage : the storage to use. Default si session storage.\r\n */\r\n save(id: string, storage: Storage = sessionStorage) {\r\n storage.setItem(\r\n id,\r\n JSON.stringify({\r\n paginator: {\r\n index: this.paginator()?.pageIndex ?? 0,\r\n total: this.snapshot?.total ?? 0,\r\n size: this.paginator()?.pageSize ?? this.filterParams?.count ?? 15\r\n },\r\n facets: this.facets()?.save(),\r\n filterParams: this.filterParams,\r\n scroll: this.scrollPos,\r\n sort: { mode: this.sortMode, options: this.sortOptions },\r\n data: this.snapshot\r\n ? { items: this.snapshot.items, total: this.snapshot.total }\r\n : null\r\n }));\r\n }\r\n\r\n /**\r\n * Restore data\r\n * @param id : the restorable id\r\n * @param storage : the storage to use. Default si session storage.\r\n */\r\n restore(id: string, storage: Storage = sessionStorage) {\r\n const value = storage.getItem(id);\r\n if (value) {\r\n const data = JSON.parse(value);\r\n if (data) {\r\n this.filterParams = data.filterParams;\r\n const modules = SystemUtils.clone(this.filterParams.modules);\r\n const sectors = SystemUtils.clone(this.filterParams.sectors);\r\n const authors = SystemUtils.clone(this.filterParams.authors);\r\n const tags = SystemUtils.clone(this.filterParams.tags);\r\n const topics = SystemUtils.clone(this.filterParams.topics);\r\n this.filterParams.modules = modules;\r\n this.filterParams.sectors = undefined;\r\n this.filterParams.authors = undefined;\r\n this.filterParams.tags = undefined;\r\n this.filterParams.topics = undefined;\r\n this.snapshot = data.data;\r\n this.sortMode = data.sort.mode;\r\n this.sortOptions = data.sort.options;\r\n setTimeout(() => {\r\n this.filterParams.sectors = sectors;\r\n this.filterParams.authors = authors;\r\n this.filterParams.tags = tags;\r\n this.filterParams.topics = topics;\r\n const facets = this.facets();\r\n if (facets && data.facets) {\r\n facets.restore(data.facets);\r\n this.hasFacets.set(data.facets.hasFacets === true ? true : false);\r\n }\r\n const paginator = this.paginator();\r\n if (paginator && data.paginator) {\r\n paginator.pageIndex = data.paginator.index;\r\n paginator.pageSize = data.paginator.size;\r\n paginator.length = data.paginator.total;\r\n }\r\n this.scroll(data.scroll ?? 0);\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_SEARCH_RESTORED, data.filterParams)\r\n this.changeDetector.detectChanges();\r\n }, 750);\r\n\r\n }\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, input, OnInit } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuModule } from '@angular/material/menu';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ClipperDocumentInfo, ClipperMessages, ClipperModel, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { BroadcastService, FormatPipe, ScreenService } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\n\r\n\r\nexport enum ClipperSearchResultItemDisplayMode {\r\n List = 1,\r\n Tile = 2,\r\n Stripe = 3\r\n}\r\n\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'clipper-search-result-item',\r\n templateUrl: './search-result-item.component.html',\r\n styleUrls: ['./search-result-item.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n FlexLayoutModule,\r\n FormatPipe\r\n ],\r\n})\r\nexport class ClipperSearchResultItemComponent implements OnInit {\r\n\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n protected screenService = inject(ScreenService);\r\n protected broadcastService = inject(BroadcastService);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n readonly parent = input.required<ClipperSearchResultManager>();\r\n readonly item = input.required<ClipperDocumentInfo>();\r\n readonly actions = input.required<MatMenu>();\r\n readonly tileNoPictureUrl = input<string>();\r\n readonly tilePictureUrl = input<string>();\r\n readonly isSelectable = input<boolean>(true);\r\n readonly isReadable = input<boolean>(true); \r\n readonly isReadableModel = input<ClipperModel | undefined>(undefined);\r\n readonly displayModifiedTitle = input<boolean>(false);\r\n readonly displayModelName = input<boolean>(false);\r\n readonly displayDate = input<boolean>(true);\r\n readonly displayMode = input<ClipperSearchResultItemDisplayMode>(ClipperSearchResultItemDisplayMode.List);\r\n protected readonly displayModesEnum: typeof ClipperSearchResultItemDisplayMode = ClipperSearchResultItemDisplayMode;\r\n protected readonly modelsEnum: typeof ClipperModel = ClipperModel;\r\n\r\n ngOnInit(): void {\r\n this.parent()?.selection?.changed\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(() => {\r\n this.changeDetector.markForCheck();\r\n });\r\n\r\n // React to message broadcasting\r\n this.broadcastService.getMessage()\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(message => {\r\n if (message.id === ClipperMessages.DOCUMENT_NAVIGATED) {\r\n if (this.isReadable() && this.item().documentId === message.data.document.documentId && !this.item().isRead) {\r\n this.parent()?.setRead(true, this.item());\r\n }\r\n } else if (message.id === ClipperMessages.DOCUMENT_READ) {\r\n if (this.isReadable() && this.item().documentId === message.data.document.documentId) {\r\n this.item().isRead = message.data.value;\r\n this.changeDetector.markForCheck();\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Checks if current item is selected\r\n * @returns true if current item is selected\r\n */\r\n protected isSelected(): boolean {\r\n return this.isSelectable() && this.parent()?.selection?.isSelected(this.item().documentId);\r\n };\r\n\r\n /**\r\n * Checks if current item is read\r\n * @returns true if current item is read\r\n */\r\n protected isRead(): boolean {\r\n return this.isReadable() && ClipperUtils.isClipperModelReadable(\r\n this.isReadableModel() ?? this.item().model) && this.item().isRead === true;\r\n };\r\n\r\n /**\r\n * Checks if current item can be read\r\n * @returns true if current item can be read\r\n */\r\n protected canBeRead(): boolean {\r\n return this.isReadable() && ClipperUtils.isClipperModelReadable(\r\n this.isReadableModel() ?? this.item().model) && this.item().isRead !== true;\r\n };\r\n \r\n\r\n}\r\n","<div>\r\n @if (displayMode() === displayModesEnum.List ) {\r\n <div class=\"item\" fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill\r\n [class.item-selected]=\"isSelected()\" [matContextMenuTriggerFor]=\"actions()\"\r\n [matContextMenuTriggerData]=\"{item: item()}\" (mouseenter)=\"item().isOver = true\"\r\n (mouseleave)=\"item().isOver = false\">\r\n <div fxFlex=\"6px\" fxFlexAlign=\"stretch\" [class]=\"parent().getItemStateCssClass(item())\"\r\n [matTooltip]=\"parent().getItemStateTooltip(item())\"><span></span>\r\n </div>\r\n <div [fxFlex]=\"isSelectable() ? '48px' : '16px'\" fxLayoutAlign=\"center\">\r\n @if (isSelectable() && (screenService.isTouchable || item().isOver || isSelected())) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? parent().selection?.toggle(item(), item().documentId) : null\" [checked]=\"isSelected()\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\">\r\n <div class=\"item-content\">\r\n @if (displayModelName() && item().modelName) {\r\n @if (item().origin === 'GC' || item().origin === 'GN') {\r\n <div class=\"info-2\">GIURISPRUDENZA</div>\r\n } @else {\r\n <div class=\"info-2\">{{item().modelName}}</div>\r\n }\r\n }\r\n @if (item().info && item().model === modelsEnum.Quesiti) {\r\n @if(item().info) {\r\n <div class=\"info-1\">{{item().info}}</div>\r\n }\r\n }@else if(item().model === modelsEnum.NormativaVigente ||\r\n item().model === modelsEnum.AggiornamentoNormativo ||\r\n item().model === modelsEnum.GiurisprudenzaRecente ||\r\n item().model === modelsEnum.Juris) {\r\n @if (item().author && (item().origin === 'LR' || item().origin === 'GC' || item().origin\r\n === 'GN')) {\r\n <div class=\"info-1\">{{item().author}}</div>\r\n }\r\n @if(item().model === modelsEnum.Juris && displayDate() && item().date) {\r\n <div class=\"info-1\">{{item().date | format:'D':'d MMM yyyy'}}</div>\r\n }\r\n }@else if (displayDate() && item().date) {\r\n <div class=\"info-1\">{{item().date | format:'D':'d MMM yyyy'}}</div>\r\n }\r\n <div>\r\n <a class=\"link\" (click)=\"parent().open(item().documentId)\"\r\n [attr.aria-label]=\"'Apri documento ' + item().title1\">{{item().title1 ?? item().title2}}</a>\r\n @if (item().part > 0) {\r\n <span class=\"badge\">PARTE {{item().part}}</span>\r\n }\r\n @if (item().isCommented) {\r\n <span class=\"badge\">COMMENTATA</span>\r\n }\r\n @if (item().validityState > 0) {\r\n <span class=\"badge-red\">{{item().validityDescription}}</span>\r\n }\r\n </div>\r\n @if(item().description && item().model === modelsEnum.Coordinamento) {\r\n <div class=\"title\">{{item().description}}</div>\r\n }\r\n @if (item().title2 &&\r\n item().model !== modelsEnum.Coordinamento &&\r\n item().model !== modelsEnum.News &&\r\n item().model !== modelsEnum.AllerteAlimentari &&\r\n item().model !== modelsEnum.Articoli &&\r\n item().model !== modelsEnum.Juris &&\r\n item().model !== modelsEnum.Quesiti &&\r\n item().model !== modelsEnum.Scadenze &&\r\n item().model !== modelsEnum.Segnalazioni) {\r\n <div class=\"title\">{{item().title2}}</div>\r\n }\r\n @if (item().originDescription &&\r\n item().model !== modelsEnum.Scadenze &&\r\n item().model !== modelsEnum.Segnalazioni &&\r\n item().model !== modelsEnum.News &&\r\n item().model !== modelsEnum.Articoli &&\r\n item().model !== modelsEnum.Juris) {\r\n <div class=\"info-1\" [class.info-3]=\"(item().model === modelsEnum.Coordinamento && (item().validFromDate || item().applicableFromDate))\">\r\n {{item().originDescription}}\r\n @if (item().model === modelsEnum.Coordinamento ) {\r\n @if (item().validFromDate) {\r\n in vigore da: <span class=\"bold\">{{item().validFromDate | format:'D':'d MMMM yyyy'}}</span>\r\n }\r\n @if (item().applicableFromDate) {\r\n applicabile da: <span class=\"bold\">{{item().applicableFromDate | format:'D':'d MMMM yyyy'}}</span>\r\n }\r\n }\r\n </div>\r\n }\r\n @if (item().anchors?.length > 0) {\r\n <div class=\"details\">\r\n <div>DETTAGLIO</div>\r\n <div class=\"links\">\r\n @for (a of item().anchors; track $index) {\r\n <span>\r\n @if (a.uri && a.text) {\r\n <a (click)=\"parent().open(a.documentId + '#' + a.uri)\" [matTooltip]=\"a.title\">{{a.text}} @if\r\n (a.veryRelevant) {\r\n <sup>\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' \r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n </sup>\r\n }</a>\r\n }\r\n @if (!a.uri && a.text) {\r\n <span>{{a.text}}</span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @if (item().taxonomy?.length > 0) {\r\n <div class=\"details\">\r\n <div>ARGOMENTI</div>\r\n <div class=\"links\">\r\n @for (n of item().taxonomy?.split('\\r\\n'); track $index) {\r\n <div class=\"link\">\r\n {{n}}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @if (item().model === modelsEnum.News ||\r\n item().model === modelsEnum.Articoli ||\r\n item().model === modelsEnum.Juris) {\r\n @if (item().info){\r\n <div class=\"details\">\r\n <div class=\"links\">\r\n <div>{{item().info}}</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n @if (item().model === modelsEnum.Coordinamento) {\r\n @if (item().title1 && displayModifiedTitle()) {\r\n <div class=\"details\">\r\n <div>TITOLO DOCUMENTO MODIFICATO</div>\r\n <div class=\"links\">\r\n <div>{{item().title1}}</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n @if (item().model === modelsEnum.Scadenze || item().model === modelsEnum.Segnalazioni) {\r\n @if (item().expiringDescription) {\r\n <div class=\"details\">\r\n <div>PROSSIMA SCADENZA</div>\r\n <div class=\"links\">\r\n <div>{{item().expiringDescription}}</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (canBeRead())\r\n {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Segna come già letta\" [attr.aria-label]=\"'Segna come già letta'\"\r\n (click)=\"parent().toggleRead(item(), $event)\" [hidden]=\"!(item().isOver || item().isMenuOpen)\">\r\n <mat-icon>flag</mat-icon>\r\n </button>\r\n }\r\n @if(item().model === modelsEnum.Scadenze || item().model === modelsEnum.Segnalazioni) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Aggiungi al tuo calendario\"\r\n [attr.aria-label]=\"'Aggiungi al tuo calendario'\" [hidden]=\"!(item().isOver || item().isMenuOpen)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\" [attr.aria-label]=\"'Menu opzioni'\"\r\n [matMenuTriggerFor]=\"actions()\" [matMenuTriggerData]=\"{item: item()}\" (click)=\"item().isMenuOpen = true\"\r\n [hidden]=\"!(item().isOver || item().isMenuOpen)\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n } @else if (displayMode() === displayModesEnum.Tile ) {\r\n <div class=\"tile\" [matContextMenuTriggerFor]=\"actions()\" [matContextMenuTriggerData]=\"{item: item()}\"\r\n (mouseenter)=\"item().isOver = true\" (mouseleave)=\"item().isOver = false\" [class.item-selected]=\"isSelected()\"\r\n [class.item-unread]=\"isRead()\" (click)=\"parent().open(item().documentId)\">\r\n <div class=\"image\">\r\n @if (canBeRead() || isSelectable()) {\r\n <div class=\"buttons\">\r\n @if (canBeRead()) {\r\n <button mat-icon-button class=\"unread-button\" matTooltip=\"Segna come già letto\"\r\n (click)=\"parent().toggleRead(item(), $event)\"><mat-icon>flag</mat-icon></button>\r\n }\r\n @if (isSelectable() && (isSelected() || item().isOver === true)) {\r\n <button mat-icon-button class=\"check\" [class.check-selected]=\"isSelected()\" matTooltip=\"Seleziona/Deseleziona\"\r\n (click)=\"parent().toggleSelection(item(), $event)\"><mat-icon>check</mat-icon></button>\r\n }\r\n </div>\r\n }\r\n <div class=\"info-1\">{{item().modelName}}</div>\r\n @if (item().info) {\r\n <div class=\"info-2\">{{item().info}}</div>\r\n }\r\n @if (item().pictureId && tilePictureUrl()) {\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tilePictureUrl() + '?id=' + item().pictureId\" [alt]=\"item().title2\" />\r\n } @else if (tileNoPictureUrl()) {\r\n <picture>\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tileNoPictureUrl()\"\r\n [alt]=\"item().title2 || 'immagine non trovata'\" />\r\n </picture>\r\n }\r\n </div>\r\n <div class=\"body\">\r\n <div class=\"date\">\r\n <span class=\"date-day\" [class.unread]=\"!item().isRead\">{{item().date | format:'D':'d\r\n MMMM'}}</span>\r\n <span class=\"date-divider\"></span>\r\n <span>{{item().date| format:'D':'yyyy'}}</span>\r\n </div>\r\n <div class=\"title\">{{item().title2}}</div>\r\n </div>\r\n </div>\r\n } @else if (displayMode() === displayModesEnum.Stripe ) {\r\n <div class=\"stripe\" [matContextMenuTriggerFor]=\"actions()\" [matContextMenuTriggerData]=\"{item: item()}\"\r\n (mouseenter)=\"item().isOver = true\" (mouseleave)=\"item().isOver = false\" [class.item-selected]=\"isSelected()\"\r\n [class.item-unread]=\"isRead()\" (click)=\"parent().open(item().documentId)\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div>\r\n <div fxLayout=\"row\">\r\n <div fxHide.xs class=\"image\">\r\n @if (canBeRead() || isSelectable()) {\r\n <div class=\"buttons\">\r\n @if (canBeRead()) {\r\n <button mat-icon-button class=\"unread-button\" matTooltip=\"Segna come già letto\"\r\n (click)=\"parent().toggleRead(item(), $event)\"><mat-icon>flag</mat-icon></button>\r\n }\r\n @if (isSelectable() && (isSelected() || item().isOver === true)) {\r\n <button mat-icon-button class=\"check\" [class.check-selected]=\"isSelected()\"\r\n matTooltip=\"Seleziona/Deseleziona\"\r\n (click)=\"parent().toggleSelection(item(), $event)\"><mat-icon>check</mat-icon></button>\r\n }\r\n </div>\r\n }\r\n @if (item().pictureId && tilePictureUrl()) {\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tilePictureUrl() + '?id=' + item().pictureId\"\r\n [alt]=\"item().title2\" />\r\n } @else if (tileNoPictureUrl()) {\r\n <picture>\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tileNoPictureUrl()\"\r\n [alt]=\"item().title2 || 'immagine non trovata'\" />\r\n </picture>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"body\">\r\n <div class=\"date\">\r\n <span class=\"date-day\" [class.unread]=\"!item().isRead\">{{item().date | format:'D':'d\r\n MMMM'}}</span>\r\n <span class=\"date-divider\"></span>\r\n <span>{{item().date| format:'D':'yyyy'}}</span>\r\n </div>\r\n <div class=\"title\">{{item().title2}}</div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n <div class=\"info-1\">{{item().modelName}}</div>\r\n @if (item().info) {\r\n <div class=\"info-2\">{{item().info}}</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>","import { Breakpoints } from '@angular/cdk/layout';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject, viewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperDocumentInfo,\r\n ClipperQueryReferencesMode, ClipperReferencesSearchParams, ClipperSearchFacetsResult, ClipperSearchFacetsSnapshot,\r\n ClipperSearchParams,\r\n ClipperUserInfo\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ApiResult, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { finalize, takeUntil } from 'rxjs/operators';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\r\n\r\n\r\nexport interface ClipperReferencesDialogData {\r\n mode?: ClipperQueryReferencesMode;\r\n anchor?: string;\r\n anchorTitle?: string;\r\n documentId: string;\r\n model: number;\r\n canUseArchive?: boolean;\r\n canHandleTooManyResults?: boolean;\r\n}\r\n\r\nexport interface ClipperReferenceDialogResult {\r\n documentId: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './references.component.html',\r\n styleUrls: ['./references.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FlexLayoutModule,\r\n MatDialogTitle,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatCheckboxModule,\r\n MatSlideToggleModule,\r\n FormsModule,\r\n MatMenuModule,\r\n MatBadgeModule,\r\n MatPaginatorModule,\r\n MatDialogContent,\r\n MatSidenavModule,\r\n MatProgressBarModule,\r\n ClipperDocumentMenuComponent,\r\n ClipperSearchFacetsComponent,\r\n ClipperSearchResultItemComponent,\r\n ],\r\n})\r\nexport class ClipperReferencesComponent extends ClipperSearchResultManager\r\n implements OnInit, OnDestroy, AfterViewInit {\r\n readonly filterPane = viewChild.required<MatDrawer>('filterPane');\r\n\r\n private dialogRef = inject(MatDialogRef<ClipperReferencesComponent>);\r\n protected dialogData: ClipperReferencesDialogData = inject(MAT_DIALOG_DATA) ?? { mode: ClipperQueryReferencesMode.ReferencesIn };\r\n protected title?: string;\r\n protected item?: ClipperDocumentInfo;\r\n protected user: ClipperUserInfo | undefined = this.clipperService.loginInfo?.context; \r\n \r\n ngOnInit() {\r\n if (this.dialogData) {\r\n switch (this.dialogData.mode) {\r\n case ClipperQueryReferencesMode.ReferencesIn:\r\n this.title = \"Documenti richiamati nelle note o nel testo\";\r\n break;\r\n case ClipperQueryReferencesMode.ReferencesOut:\r\n this.title = \"Documenti che richiamano quello in visione\";\r\n break;\r\n case ClipperQueryReferencesMode.ChangesIn:\r\n this.title = \"Modifiche subite\";\r\n break;\r\n case ClipperQueryReferencesMode.ChangesOut:\r\n this.title = \"Modifiche apportate\";\r\n break;\r\n case ClipperQueryReferencesMode.Juris:\r\n this.title = \"Giurisprudenza associata\";\r\n break;\r\n }\r\n if (this.dialogData.anchorTitle) {\r\n this.title += \" - \" + this.dialogData.anchorTitle;\r\n }\r\n // Use service snapshot\r\n this.snapshot = this.clipperService.referencesSnapshot() ?? { searchParams: new ClipperSearchParams(), interval: \"-1\" };\r\n if (\r\n this.filterParams.mode !== this.dialogData.mode ||\r\n this.filterParams.id !== this.dialogData.documentId ||\r\n this.filterParams.anchor !== this.dialogData.anchor\r\n ) {\r\n this.filterParams = new ClipperSearchParams();\r\n this.filterParams.mode = this.dialogData.mode;\r\n this.filterParams.model = this.dialogData.model;\r\n this.filterParams.anchor = this.dialogData.anchor;\r\n this.filterParams.id = this.dialogData.documentId;\r\n this.filterParams.useModifierInfo = this.dialogData.mode === ClipperQueryReferencesMode.ChangesOut;\r\n this.filterParams.returnModifierInfo = this.dialogData.mode !== ClipperQueryReferencesMode.ChangesOut;\r\n this.clipperService.referencesSnapshot.set(this.snapshot);\r\n }\r\n }\r\n\r\n // Initialize selection\r\n this.selection = new SelectableModel<ClipperDocumentInfo, string>(true, 'documentId');\r\n\r\n // Observe layout changes\r\n this.breakpointObserver\r\n .observe([\r\n Breakpoints.XSmall,\r\n Breakpoints.Small,\r\n Breakpoints.Medium,\r\n Breakpoints.Large,\r\n Breakpoints.XLarge,\r\n ])\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe((result: any) => {\r\n for (const query of Object.keys(result.breakpoints)) {\r\n if (result.breakpoints[query]) {\r\n this.handleFilterPaneVisibility();\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n // Handle filter pane \r\n this.handleFilterPaneVisibility();\r\n // Handle facets\r\n const facets = this.facets();\r\n if (facets) {\r\n facets.changed\r\n .subscribe((value: ClipperSearchFacetsSnapshot) => {\r\n this.snapshot.facets = value;\r\n this.fetch(true);\r\n });\r\n }\r\n }, 0);\r\n this.fetch(true);\r\n this.restoreFacets();\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n\r\n /**\r\n * Show hide filter pane manually\r\n */\r\n protected toggleFilterPane() {\r\n this.filterPaneClosed = !this.filterPaneClosed;\r\n this.filterPane()?.toggle();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle filter pane visibility\r\n */\r\n private handleFilterPaneVisibility() {\r\n const filterPane = this.filterPane();\r\n if (filterPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (filterPane.opened) {\r\n filterPane.close();\r\n }\r\n filterPane.mode = 'over';\r\n filterPane.disableClose = false;\r\n this.filterPaneHasBackdrop = true;\r\n } else {\r\n if (!this.hasFacets()) {\r\n filterPane.close();\r\n } else if (!filterPane.opened && !this.filterPaneClosed) {\r\n filterPane.open();\r\n } else if (filterPane.opened && this.filterPaneClosed) {\r\n filterPane.close();\r\n }\r\n filterPane.mode = 'side';\r\n filterPane.disableClose = true;\r\n this.filterPaneHasBackdrop = false;\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Close dialog\r\n */\r\n close() {\r\n this.dialogRef.close();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Send document links by email\r\n * @param item : the item to add\r\n */\r\n sendTo(item: ClipperDocumentInfo = null) {\r\n this.sendItemsTo(item ? [item] : this.selection?.all);\r\n }\r\n\r\n\r\n\r\n /**\r\n * Prepare the search params\r\n * @param newSearch : true if it is a new search\r\n * @return the new search params\r\n */\r\n private prepareFetch(newSearch: boolean = false): ClipperSearchParams {\r\n const newParams = SystemUtils.clone(this.filterParams) as ClipperSearchParams;\r\n newParams.count = 15;\r\n newParams.useModifierInfo =\r\n newParams.mode === ClipperQueryReferencesMode.ChangesOut;\r\n newParams.returnModifierInfo =\r\n newParams.mode !== ClipperQueryReferencesMode.ChangesOut;\r\n if (newSearch) {\r\n newParams.first = 0;\r\n } \r\n // Apply facets\r\n if (this.snapshot.facets?.fromDate) {\r\n newParams.fromDate = this.snapshot.facets?.fromDate;\r\n newParams.toDate = this.snapshot.facets?.toDate;\r\n newParams.year = this.snapshot.facets?.fromDate.getFullYear();\r\n } \r\n if (this.snapshot.facets?.sector) {\r\n newParams.sector = this.snapshot.facets?.sector;\r\n }\r\n if (this.snapshot.facets?.type) {\r\n newParams.type = this.snapshot.facets?.type;\r\n }\r\n if (this.snapshot.facets?.author) {\r\n newParams.author = this.snapshot.facets?.author;\r\n }\r\n return newParams;\r\n }\r\n\r\n /**\r\n * Get e refrences search params form clipper search params\r\n * @param params : the clipper search params\r\n * @returns : the references search params\r\n */\r\n private toReferencesSearchParams(params: ClipperSearchParams): ClipperReferencesSearchParams {\r\n return {\r\n documentId: params.id,\r\n year: params.year,\r\n sector: params.sector,\r\n author: params.author,\r\n anchor: params.anchor,\r\n model: params.model?.toString() ?? null,\r\n mode: params.mode,\r\n excludeTextReferences: params.excludeTextReferences,\r\n excludeNotesReferences: params.excludeNotesReferences,\r\n returnModifierInfo: params.returnModifierInfo,\r\n useModifierInfo: params.useModifierInfo,\r\n count: 15,\r\n first: params.first ?? 0\r\n }\r\n }\r\n\r\n /**\r\n * Perform a search\r\n * @param newSearch: true if is a new search\r\n */\r\n fetch(newSearch: boolean = false) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.dialogService.busy('Ricerca in corso...');\r\n const searchParams = this.prepareFetch(newSearch);\r\n if (searchParams) { \r\n this.clipperService.references(this.toReferencesSearchParams(searchParams))\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n this.prepareResults(r.value, newSearch);\r\n\r\n // Handle facets\r\n if (this.snapshot.total > 0) {\r\n if (newSearch)\r\n // Update facets\r\n this.fetchFacets(searchParams);\r\n } else {\r\n this.hideFacets();\r\n }\r\n\r\n if (newSearch) {\r\n const paginator = this.paginator();\r\n if (paginator) paginator.pageIndex = 0;\r\n }\r\n\r\n this.scroll(0);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Show a new page result\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n fetchMore(e: PageEvent) {\r\n let first = e.pageIndex * (this.filterParams.count ?? 15);\r\n this.filterParams.first = first;\r\n this.fetch();\r\n }\r\n\r\n /**\r\n * Get facets\r\n * @param params: the clipper search params\r\n */\r\n fetchFacets(params: ClipperSearchParams) {\r\n if (!this.clipperService.loggedIn() || !params) return;\r\n if (!this.snapshot.facets || this.snapshot.facets?.hasMoreFacets) {\r\n this.filterBusy.set(true);\r\n this.clipperService.referencesFacets(this.toReferencesSearchParams(params))\r\n .subscribe({\r\n next: (r: ApiResult<ClipperSearchFacetsResult>) => {\r\n if (r.success) {\r\n let hasFacets = (r.value.facets?.length ?? 0) > 0;\r\n if (r.value.facets) {\r\n const facets = this.facets();\r\n facets?.update(r.value.facets, r.value.interval);\r\n if (facets && this.snapshot) {\r\n hasFacets = facets.hasFacets();\r\n this.snapshot.facets = facets.save();\r\n this.snapshot.facets.hasTooManyResults = (this.snapshot?.total ?? 0) >= 1000;\r\n }\r\n }\r\n this.hasFacets.set(hasFacets);\r\n this.handleFilterPaneVisibility();\r\n }\r\n },\r\n complete: () => {\r\n this.filterBusy.set(false);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Hide facets\r\n */\r\n protected hideFacets() {\r\n this.hasFacets.set(false);\r\n this.facets()?.reset();\r\n this.filterPane().close();\r\n this.filterPaneClosed = false;\r\n }\r\n /**\r\n * Try to restore stored facets\r\n */\r\n restoreFacets() {\r\n if (this.snapshot.facets) {\r\n this.facets().restore(this.snapshot.facets);\r\n this.handleFilterPaneVisibility();\r\n }\r\n }\r\n\r\n /**\r\n * Close current dialog and return the id to navigate to\r\n * @param documentId : the document id\r\n */\r\n open(documentId: string) {\r\n this.dialogRef.close({ documentId: documentId });\r\n }\r\n\r\n /**\r\n* Return item state css class\r\n* @param item : the item to evaluate\r\n*/\r\n override getItemStateCssClass(item: ClipperDocumentInfo): string | undefined {\r\n if (item.isExpired) return 'expired-bg';\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Return the item state tooltip text\r\n * @param item : the item to evaluate\r\n */\r\n override getItemStateTooltip(item: ClipperDocumentInfo): string {\r\n if (item.isExpired) return 'Non più vigente';\r\n return '';\r\n }\r\n}\r\n","<div class=\"clipper-references-fixed\">\r\n <div class=\"dialog-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\r\n (!filterPane.opened || filterPaneClosed))) {\r\n <div style=\"padding: 0 5px 0 24px; height: 48px; min-height: 48px;\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData.mode === 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"filterParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n &nbsp; Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (dialogData.mode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"filterParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n &nbsp; Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\" [matBadge]=\"selection?.all.length\">\r\n <mat-icon>checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [useSelections]=\"true\"\r\n [canUseArchive]=\"dialogData.canUseArchive ?? false\"\r\n [isReadable]=\"false\" [isReference]=\"true\" [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>right_panel_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"78px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\" style=\"padding: 0 5px;\">\r\n <clipper-search-facets #facets [handleTooManyResults]=\"dialogData.canHandleTooManyResults\" ></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div class=\"message-container\">\r\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [class.group-spaced]=\"i > 0\">{{item.group}}</div>\r\n </div>\r\n }\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\" [isReadable]=\"false\"\r\n [actions]=\"contextMenu\"></clipper-search-result-item>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\"\r\n [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\" [canUseArchive]=\"dialogData.canUseArchive ?? false\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <!-- legend -->\r\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\r\n <div class=\"legend expired-bg \"></div>\r\n non più vigente\r\n </div>\r\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [class.wide]=\"filterPane?.opened\">\r\n <div fxLayout=\"row\">\r\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\r\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\"\r\n (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</mat-dialog-content>","import { ChangeDetectionStrategy, Component, inject, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\nexport interface SearchFreeTextQueryParams {\r\n query: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-free-text-query-builder.component.html',\r\n styleUrls: ['./search-free-text-query-builder.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatFormFieldModule, MatInputModule,\r\n MatButtonModule, MatIconModule, MatDialogActions, MatDialogClose]\r\n})\r\nexport class ClipperSearchFreeTextQueryBuilderComponent {\r\n readonly done = output<SearchFreeTextQueryParams>();\r\n\r\n private dialogService = inject(DialogService);\r\n\r\n protected queryAnd: string = '';\r\n protected queryOr: string = '';\r\n protected queryNot: string = '';\r\n protected queryPhrase: string = '';\r\n protected queryStart: string = '';\r\n\r\n /**\r\n * Clear\r\n */\r\n protected clear() {\r\n this.queryAnd = undefined;\r\n this.queryOr = undefined;\r\n this.queryNot = undefined;\r\n this.queryPhrase = undefined;\r\n this.queryStart = undefined;\r\n }\r\n\r\n /**\r\n * Submit\r\n */\r\n protected ok() {\r\n let query = '';\r\n // Phrase\r\n if (this.queryPhrase.length > 0) {\r\n query += ' \"';\r\n query += this.queryPhrase.replace('\"', '').trim();\r\n query += '\" ';\r\n }\r\n // Or\r\n if (this.queryOr.length > 0) {\r\n let parts = this.queryOr.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ' ';\r\n query += '\"';\r\n query += parts[i].replace('\"', '').trim();\r\n query += '\" ';\r\n }\r\n query += ' ';\r\n }\r\n // And\r\n if (this.queryAnd.length > 0) {\r\n let parts = this.queryAnd.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ' ';\r\n query += '+\"';\r\n query += parts[i].replace('\"', '').trim();\r\n query += '\" ';\r\n }\r\n query += ' ';\r\n }\r\n // Start with\r\n if (this.queryStart.length > 0) {\r\n if (query.length > 0) query += ' +\"';\r\n query += this.queryStart.replace('\"', '').trim();\r\n query += '*';\r\n query += '\" ';\r\n }\r\n // Not\r\n if (this.queryNot.length > 0) {\r\n if (query.length === 0) {\r\n // Invalid query\r\n this.dialogService.error(\r\n \"L'operatore di esclusione funziona solo se prima è stato inserito un valore in almeno uno degli altri quattro campi.\"\r\n );\r\n return;\r\n }\r\n let parts = this.queryNot.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ' ';\r\n query += '-\"';\r\n query += parts[i].replace('\"', '').trim();\r\n query += '\" ';\r\n }\r\n query += ' ';\r\n }\r\n\r\n\r\n // Notify\r\n if (query.length > 0) this.done.emit({ query: query.trim() });\r\n }\r\n}\r\n","<h2 mat-dialog-title>Trova gli elementi che contengono...</h2>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\" style=\"padding-bottom: 20px;\">\r\n <mat-form-field>\r\n <mat-label>Questa esatta parola o frase</mat-label>\r\n <input matInput name=\"queryPhrase\" [(ngModel)]=\"queryPhrase\" maxlength=\"200\" />\r\n @if (queryPhrase) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryPhrase=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tutte queste parole</mat-label>\r\n <input matInput name=\"queryAnd\" [(ngModel)]=\"queryAnd\" maxlength=\"200\" />\r\n @if (queryAnd) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryAnd=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n <mat-hint>Separate da virgola</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Una qualunque di queste parole</mat-label>\r\n <input matInput name=\"queryOr\" [(ngModel)]=\"queryOr\" maxlength=\"200\" />\r\n @if (queryOr) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryOr=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n <mat-hint>Separate da virgola</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Parole che iniziano con</mat-label>\r\n <input matInput name=\"queryStart\" [(ngModel)]=\"queryStart\" maxlength=\"200\" />\r\n @if (queryStart) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryStart=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Nessuna qualunque di queste parole</mat-label>\r\n <input matInput name=\"queryNot\" [(ngModel)]=\"queryNot\" maxlength=\"200\" />\r\n @if (queryNot) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryNot=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n <mat-hint>Separate da virgola. L'operatore di esclusione funziona solo se prima è stato inserito un valore in\r\n almeno uno degli altri quattro campi. </mat-hint>\r\n </mat-form-field>\r\n </div> \r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\" fxLayoutAlign=\"start\">\r\n <button type=\"button\" mat-stroked-button (click)=\"clear()\" >Pulisci</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button (click)=\"ok()\">Ok</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-free-text-help.component.html',\r\n styleUrls: ['./search-free-text-help.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, FlexModule, MatButtonModule, MatDialogClose]\r\n})\r\nexport class ClipperSearchFreeTextHelpComponent{\r\n}\r\n","<h2 mat-dialog-title>Come effettuare la ricerca in testo libero</h2>\r\n<mat-dialog-content>\r\n <p>Normalmente viene sempre effettuata una ricerca per frase: tutte le parole specificate debbono essere\r\n \"ragionevolmente vicine\" (entro 5 parole) l'una dall'altra.</p>\r\n <p>La ricerca per frase di solito produce i risultati più rilevanti.</p>\r\n <p>Tuttavia è possibile istruire Clipper per eseguire ricerche differenti e più complesse.</p>\r\n <p>Tutte gli elementi che compongono la stringa di ricerca devono essere separati da virgola.</p>\r\n <ul>\r\n <li>Se un elemento è composto da più parole è una frase, altrimenti una parola</li>\r\n <li>Aggiungendo un <b style=\"font-size: 20px\">+</b> davanti all'elemento, l'elemento <b>dovrà per forza</b> essere presente nel documento\r\n </li>\r\n <li>Aggiungendo un <b style=\"font-size: 20px\">-</b> davanti all'elemento, l'elemento <b>non dovrà</b> essere presente nel documento</li>\r\n </ul>\r\n <p>Ecco alcuni esempi:</p>\r\n <ul>\r\n <li><b>serbatoi interrati</b>: sarà effettuata una ricerca per la frase \"serbatoi interrati\"</li>\r\n <li><b>serbatoi, interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono una o l'altra parola.</li>\r\n <li><b>serbatoi, +interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono necessariamente \"interrati\" ed eventualmente \"serbatoi\".</li>\r\n <li><b>serbatoi, -interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono necessariamente \"interrati\" ma non \"serbatoi\".</li>\r\n <li><b>\"serbatoi interrati\", -gas</b>: sarà effettuata una ricerca per la frase \"serbatoi interrati\" e per la parola \"gas\"; il risultato sarà tutti i documenti che contengono la frase \"serbatoi interrati\" ma non la parola \"gas\".</li>\r\n </ul>\r\n <p>Saranno mostrati per primi (più rilevanti) i documenti che rispettano in pieno la condizione.</p>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill >\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n","import { Breakpoints } from '@angular/cdk/layout';\r\nimport { ScrollDispatcher, ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, computed, inject, input, OnDestroy, OnInit, Signal, signal, viewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatBadge } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule, MatExpansionPanel } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInput, MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ClipperAuthors, ClipperChannel, ClipperDocumentChangeReasons, ClipperDocumentInfo, ClipperMessages, ClipperModel, ClipperModule, ClipperRegions, ClipperSearchFacetsSnapshot, ClipperSearchParams, ClipperSearchUtils, ClipperSectors, ClipperSectorTypes, ClipperSort, ClipperSources, ClipperUserInfo, ClipperUserSearch, ClipperUtils, SectorInfo } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ArsCoreModule, DateInterval, INode, NameValueItem, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogResult } from '@arsedizioni/ars-utils/ui';\r\nimport { ButtonSelectorComponent, ButtonToggleComponent, ChipsSelectorComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { finalize, takeUntil } from 'rxjs';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\nimport { ClipperSearchFreeTextQueryBuilderComponent, SearchFreeTextQueryParams } from '../search-free-text-query-builder/search-free-text-query-builder.component';\r\nimport { ClipperSearchFreeTextHelpComponent } from '../search-free-text-help/search-free-text-help.component';\r\n\r\n\r\n\r\n\r\n@Component({\r\n selector: 'clipper-browser',\r\n standalone: true,\r\n imports: [FormsModule, FlexLayoutModule, MatIconModule, MatButtonModule, MatTooltipModule, MatSidenavModule,\r\n MatExpansionModule, MatDividerModule, MatMenuModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, MatBadge,\r\n ScrollingModule, MatSelectModule, MatChipsModule, MatSlideToggleModule, MatPaginator, MatCheckboxModule, MatButtonToggleModule, MatProgressBarModule,\r\n ArsCoreModule, ChipsSelectorComponent, ButtonSelectorComponent, ButtonToggleComponent,\r\n ClipperDocumentMenuComponent, ClipperSearchResultManager, ClipperSearchResultItemComponent, ClipperSearchFacetsComponent,\r\n ClipperSearchFreeTextHelpComponent, ClipperSearchFreeTextQueryBuilderComponent],\r\n templateUrl: './browser.component.html',\r\n styleUrl: './browser.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ClipperBrowserComponent extends ClipperSearchResultManager implements OnInit, OnDestroy, AfterViewInit {\r\n\r\n\r\n readonly filterByNumber = viewChild<MatInput>('filterByNumber');\r\n readonly filterByText = viewChild<MatInput>('filterByText');\r\n readonly filterByChangeNumber = viewChild<MatInput>('filterByChangeNumber');\r\n readonly filterPane = viewChild.required<MatDrawer>('filterPane');\r\n readonly filterPane2 = viewChild.required<MatDrawer>('filterPane2');\r\n readonly filterSelector = viewChild<ButtonSelectorComponent>('filterSelector');\r\n readonly moduleSelector = viewChild.required<ChipsSelectorComponent>('moduleSelector');\r\n readonly sourceExpansionPanel = viewChild<MatExpansionPanel>('sourceExpansionPanel');\r\n readonly otherOptionsExpansionPanel = viewChild<MatExpansionPanel>('otherOptionsExpansionPanel');\r\n readonly modifierExpansionPanel = viewChild<MatExpansionPanel>('modifierExpansionPanel');\r\n\r\n readonly showChannels = input<boolean>(true);\r\n readonly showRSOptions = input<boolean>(true);\r\n readonly showAIAssistantOptions = input<boolean>(false);\r\n readonly selectableModules = input<ClipperModule[]>([]);\r\n readonly initialModule = input<ClipperModule | undefined>(undefined);\r\n protected scrollDispatcher = inject(ScrollDispatcher);\r\n protected filterDescription = signal<string>('');\r\n protected filters = signal<NameValueItem<ClipperUserSearch>[]>([]);\r\n protected filter: Signal<NameValueItem<ClipperUserSearch> | undefined> = computed(() => {\r\n return this.hasFilters() && this.filterParams.searchId\r\n ? this.filters().find(x => x.value.id === this.filterParams.searchId)\r\n : null\r\n });\r\n protected hasAIAssistant: boolean = this.showAIAssistantOptions() && this.clipperService.loginInfo?.context.hasAIAssistant === true;\r\n protected hasFilters: Signal<boolean> = computed(() => {\r\n return this.filters().length > 0;\r\n });\r\n protected isLaws = (allowEmpty: boolean = true): boolean => {\r\n return (allowEmpty && this.filterParams.modules && this.filterParams.modules.length === 0) || (this.filterParams.modules?.findIndex(x =>\r\n x.value === ClipperModule.GazzetteBollettiniEFontiDiverse ||\r\n x.value === ClipperModule.NormativaVigente ||\r\n x.value === ClipperModule.GiurisprudenzaRecente) !== -1);\r\n }\r\n protected isReadable = (): boolean => {\r\n return ((this.canSearch() && this.filterParams.modules?.length === 0) ||\r\n (this.filterParams.modules && this.filterParams.modules.length > 0 &&\r\n this.filterParams.modules.findIndex(module => module.value === ClipperModule.NormativaVigente\r\n || module.value === ClipperModule.ScadenzeESegnalazioni) === -1)) ?? false;\r\n\r\n }\r\n\r\n protected isCoordination = (): boolean => {\r\n return (this.filterParams.modules && this.filterParams.modules.length > 0 && (this.filterParams.modules?.findIndex(x =>\r\n x.value === ClipperModule.ModificheAbrogazioniERinvii) !== -1)) === true;\r\n }\r\n\r\n protected isSortedByDate = (): boolean => {\r\n return (this.sortMode?.value === ClipperSort.DateAsc ||\r\n this.sortMode?.value === ClipperSort.DateDesc ||\r\n this.sortMode?.value === ClipperSort.SourceDateAsc ||\r\n this.sortMode?.value === ClipperSort.SourceDateDesc);\r\n }\r\n protected canSearch = (): boolean => {\r\n return this.isFiltering(this.filterParams);\r\n };\r\n protected sectors = signal<SectorInfo[]>([]);\r\n protected hasSectors = (): boolean => {\r\n return this.isLaws();\r\n };\r\n protected regions = signal<NameValueItem<string>[]>([]);\r\n protected override hasRegions = (): boolean => {\r\n return this.hasSectors() && (this.filterParams.sectors?.filter(n => n.value === 'LR').length ?? 0) > 0;\r\n };\r\n protected sources = signal<NameValueItem<string>[]>([...ClipperSources]);\r\n protected hasSource = (): boolean => this.isLaws();\r\n protected authors = signal<NameValueItem<string>[]>([]);\r\n protected types = signal<NameValueItem<string>[]>([]);\r\n protected topics: INode[] = [];\r\n protected hasTopics = (): boolean => this.isLaws();\r\n private allowTags: Signal<boolean> = computed(() => {\r\n return this.clipperService.allowTags();\r\n });\r\n protected tags = signal<NameValueItem<string>[]>([]);\r\n protected hasTags = (): boolean => {\r\n return (this.tags()?.length > 0 &&\r\n ((this.filterParams.modules?.length === 0 && (this.hasModule(ClipperModule.News) || this.hasModule(ClipperModule.Approfondimenti))) ||\r\n this.filterParams.modules?.findIndex(module => module.value === ClipperModule.News\r\n || module.value === ClipperModule.Approfondimenti) !== -1)) ?? false;\r\n };\r\n protected reasons = signal<NameValueItem<number>[]>([...ClipperDocumentChangeReasons]);\r\n protected modules = signal<NameValueItem<ClipperModule>[]>(this.getAllModules());\r\n protected interval: DateInterval = new DateInterval();\r\n protected sourceInterval: DateInterval = new DateInterval();\r\n protected user: ClipperUserInfo | undefined = this.clipperService.loginInfo?.context;\r\n ngOnInit(): void {\r\n // Initialize filter\r\n this.filterParams.version = 7;\r\n this.filterParams.modules = [{ name: \"Normativa vigente\", shortName: \"Normativa vigente\", value: ClipperModule.NormativaVigente }];\r\n this.initializeFilter();\r\n\r\n // Initialize selection\r\n this.selection = new SelectableModel<ClipperDocumentInfo, string>(true, 'documentId');\r\n\r\n // Observe layout changes\r\n this.breakpointObserver\r\n .observe([\r\n Breakpoints.XSmall,\r\n Breakpoints.Small,\r\n Breakpoints.Medium,\r\n Breakpoints.Large,\r\n Breakpoints.XLarge,\r\n ])\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(result => {\r\n for (const query of Object.keys(result.breakpoints)) {\r\n if (result.breakpoints[query]) {\r\n this.handleFilterPaneVisibility();\r\n }\r\n }\r\n });\r\n\r\n // React to message broadcasting\r\n this.broadcastService.getMessage()\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(message => {\r\n if (message.id === ClipperMessages.COMMAND_DASHBOARD_UPDATED) {\r\n this.updateModulesUnreadItems();\r\n } else if (message.id === ClipperMessages.COMMAND_SEARCH_RESTORED) {\r\n const filter = this.filter();\r\n if (filter) {\r\n this.selectFilter(filter);\r\n }\r\n this.handleFilterPaneVisibility();\r\n }\r\n });\r\n\r\n // Load tags\r\n if (this.allowTags()) {\r\n this.loadTags();\r\n }\r\n\r\n // Load topics\r\n this.loadTopics();\r\n\r\n // Load searches\r\n this.loadFilters();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n // Handle filter pane \r\n this.handleFilterPaneVisibility();\r\n this.filterPane().openedChange.subscribe(() => {\r\n this.updateFilterPaneFocus();\r\n });\r\n this.updateFilterPaneFocus();\r\n this.updateModulesUnreadItems();\r\n this.modulesChanged();\r\n // Handle facets\r\n if (this.facets()) {\r\n this.facets().changed\r\n .subscribe((value: ClipperSearchFacetsSnapshot) => {\r\n if (this.snapshot) {\r\n this.snapshot.facets = value;\r\n this.fetch(true);\r\n }\r\n });\r\n }\r\n\r\n // Handle initial module\r\n if (this.initialModule()) {\r\n this.moduleSelector()?.select(this.modules().find(x => x.value === this.initialModule()) ?? this.modules()[0]);\r\n } else {\r\n this.moduleSelector()?.select(this.modules()[0]);\r\n }\r\n\r\n }, 0);\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n\r\n override ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n\r\n /**\r\n * Get all available modules\r\n */\r\n private getAllModules(): NameValueItem<ClipperModule>[] {\r\n let modules: NameValueItem<ClipperModule>[] = [];\r\n modules.push({ name: \"News\", shortName: \"News\", value: ClipperModule.News });\r\n modules.push({ name: \"Gazzette, Bollettini e fonti diverse\", shortName: \"Gazzette, Bollettini e fonti diverse\", value: ClipperModule.GazzetteBollettiniEFontiDiverse });\r\n modules.push({ name: \"Modifiche, abrogazioni e rinvii\", shortName: \"Modifiche, abrogazioni e rinvii\", value: ClipperModule.ModificheAbrogazioniERinvii });\r\n modules.push({ name: \"Normativa vigente\", shortName: \"Normativa vigente\", value: ClipperModule.NormativaVigente });\r\n modules.push({ name: \"Giurisprudenza\", shortName: \"Giurisprudenza\", value: ClipperModule.GiurisprudenzaRecente });\r\n modules.push({ name: \"Articoli\", shortName: \"Articoli\", value: ClipperModule.Approfondimenti });\r\n modules.push({ name: \"Note a sentenza\", shortName: \"Note a sentenza\", value: ClipperModule.Giurisprudenza });\r\n modules.push({ name: \"Quesiti\", shortName: \"Quesiti\", value: ClipperModule.QuesitiECasiRisolti });\r\n modules.push({ name: \"Scadenze e segnalazioni\", shortName: \"Scadenze e segnalazioni\", value: ClipperModule.ScadenzeESegnalazioni });\r\n return modules;\r\n }\r\n\r\n /**\r\n * Return the snapshot document by id\r\n * @param id : the document id\r\n * @returns the document or null\r\n */\r\n public getSnapshotDocument(id: string): ClipperDocumentInfo | undefined {\r\n return this.snapshot.items.find(x => x.documentId === id || x.id === id);\r\n }\r\n\r\n\r\n /**\r\n * Load tags\r\n */\r\n protected loadTags() {\r\n this.clipperService.getTags()\r\n .subscribe(r => {\r\n if (r.success) {\r\n this.tags.set(r.value);\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Load topics\r\n */\r\n private loadTopics() {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.clipperService.getTopicsAsTree()\r\n .subscribe(r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n this.topics = SystemUtils.toNodes(r.value.children as INode[]);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show hide filter pane manually\r\n */\r\n protected toggleFilterPane() {\r\n this.filterPaneClosed = !this.filterPaneClosed;\r\n this.filterPane()?.toggle();\r\n }\r\n\r\n /**\r\n * Show hide filter pane manually\r\n */\r\n protected toggleFilterPane2() {\r\n this.filterPane2Closed = !this.filterPane2Closed;\r\n this.filterPane2()?.toggle();\r\n }\r\n\r\n\r\n /**\r\n * Handle filter pane visibility\r\n */\r\n protected handleFilterPaneVisibility() {\r\n const filterPane = this.filterPane();\r\n if (filterPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (filterPane.opened) {\r\n filterPane.close();\r\n }\r\n filterPane.mode = 'over';\r\n filterPane.disableClose = false;\r\n this.filterPaneHasBackdrop = true;\r\n } else {\r\n if (!filterPane.opened && !this.filterPaneClosed) {\r\n filterPane.open();\r\n } else if (filterPane.opened && this.filterPaneClosed) {\r\n filterPane.close();\r\n }\r\n filterPane.mode = 'side';\r\n filterPane.disableClose = true;\r\n this.filterPaneHasBackdrop = false;\r\n }\r\n }\r\n setTimeout(() => {\r\n const filterPane2 = this.filterPane2();\r\n if (filterPane2) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (filterPane2.opened) {\r\n filterPane2.close();\r\n }\r\n filterPane2.mode = 'over';\r\n filterPane2.disableClose = false;\r\n this.filterPane2HasBackdrop = true;\r\n } else {\r\n if (!this.hasFacets()) {\r\n filterPane2.close();\r\n } else if (!filterPane2.opened && !this.filterPane2Closed) {\r\n filterPane2.open();\r\n } else if (filterPane2.opened && this.filterPane2Closed) {\r\n filterPane2.close();\r\n }\r\n filterPane2.mode = 'side';\r\n filterPane2.disableClose = true;\r\n this.filterPane2HasBackdrop = false;\r\n }\r\n }\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Initialize filter\r\n */\r\n private initializeFilter() {\r\n this.filterParams.channels = this.clipperService.activeChannels();\r\n this.channelsChanged(false);\r\n }\r\n\r\n /**\r\n * Update filter when channels changes\r\n * @param updateChannels: true to update channels\r\n */\r\n protected channelsChanged(updateChannels: boolean = true) {\r\n if (updateChannels) {\r\n this.clipperService.updateChannels(this.filterParams.channels);\r\n }\r\n const sectors: SectorInfo[] = [];\r\n const regions: NameValueItem<string>[] = [];\r\n const modules = this.getAllModules();\r\n this.filterParams.channels?.forEach(channel => {\r\n if (channel.value == ClipperChannel.SostanzeAlimentari && this.hasModule(ClipperModule.AllerteAlimentari)) {\r\n modules.push({ name: \"Allerte alimentari\", shortName: \"Allerte alimentari\", value: ClipperModule.AllerteAlimentari });\r\n }\r\n const channelSettings = this.clipperService.loginInfo?.channels?.find(x => x.channelId === channel.value);\r\n if (channelSettings) {\r\n channelSettings.sectors.filter(x => x.checked).forEach(x => {\r\n if (sectors.findIndex(y => y.value === x.value) === -1) {\r\n ClipperSectors.filter(y => y.group === 'S' && y.value === x.value).forEach(y => {\r\n sectors.push(y);\r\n });\r\n }\r\n });\r\n channelSettings.regions.filter(x => x.checked).forEach(x => {\r\n if (regions.findIndex(y => y.value === x.value) === -1) {\r\n ClipperRegions.filter(y => y.value === x.value).forEach(y => {\r\n regions.push(y);\r\n });\r\n }\r\n });\r\n }\r\n });\r\n this.modules.set(modules);\r\n this.sectors.set(sectors);\r\n this.regions.set(regions);\r\n if (this.filterParams.modules) {\r\n this.filterParams.modules = this.filterParams.modules.filter(x => this.modules().findIndex(y => y.value === x.value) !== -1) ?? [];\r\n }\r\n if (this.filterParams.sectors) {\r\n this.filterParams.sectors = this.filterParams.sectors.filter(x => this.sectors().findIndex(y => y.value === x.value) !== -1) ?? [];\r\n }\r\n if (this.filterParams.authors) {\r\n this.filterParams.authors = this.filterParams.authors.filter(x => this.regions().findIndex(y => y.value === x.value) !== -1) ?? [];\r\n }\r\n this.sectorsChanged();\r\n this.updateModulesUnreadItems();\r\n }\r\n\r\n /**\r\n * Update filter pane focus\r\n */\r\n private updateFilterPaneFocus() {\r\n setTimeout(() => {\r\n let focusableElement = this.filterByText();\r\n if (this.isLaws()) {\r\n focusableElement = this.filterByNumber();\r\n }\r\n focusableElement?.focus();\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Load filters\r\n */\r\n protected loadFilters() {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.clipperService.loadSearches(ClipperModule.Ricerca)\r\n .subscribe(\r\n r => {\r\n if (r.success) {\r\n const items: NameValueItem<ClipperUserSearch>[] = [];\r\n r.value.forEach(n => {\r\n items.push({ name: n.name ?? '', value: n });\r\n });\r\n this.filters.set(items);\r\n this.handleFilterPaneVisibility();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Save a filter\r\n * @param newFilter: true to save a new filter. Default is false.\r\n */\r\n saveFilter(newFilter: boolean = false) {\r\n this.loadFilter();\r\n if (newFilter || !this.filterParams.searchId) {\r\n const d = this.dialogService.prompt(\r\n \"Crea un nuovo filtro\",\r\n 0,\r\n \"Nome filtro\");\r\n d.componentInstance.done.subscribe((data) => {\r\n if (data?.value) {\r\n this.clipperService.saveSearch({\r\n module: ClipperModule.Ricerca,\r\n name: data.value,\r\n data: JSON.stringify(this.filterParams)\r\n }).subscribe(r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n const newItem = { name: r.value.name ?? '', value: r.value };\r\n this.filters.update(items => [...items, newItem]);\r\n setTimeout(() => {\r\n this.filterSelector()?.select(newItem);\r\n }, 250);\r\n this.dialogService.toast(\"Operazione completata con successo.\");\r\n d.close();\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n this.clipperService.saveSearch({\r\n id: this.filterParams.searchId,\r\n data: JSON.stringify(this.filterParams)\r\n }).subscribe(r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.filters.update(items => {\r\n const item = items.find(n => n.value.id === r.value.id);\r\n if (item) {\r\n item.value.data = r.value.data;\r\n }\r\n return [...items];\r\n });\r\n this.dialogService.toast(\"Operazione completata con successo.\");\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Delete a filter\r\n */\r\n deleteFilter() {\r\n if (this.filterParams.searchId) {\r\n this.dialogService.confirm(\"Vuoi davvero eliminare il filtro in uso?\", \"Conferma\", \"Si, eliminalo\")\r\n .componentInstance.choosen\r\n .subscribe((data: DialogResult) => {\r\n if (data.result === 'ok') {\r\n if (this.filterParams.searchId) {\r\n this.clipperService.deleteSearch(this.filterParams.searchId)\r\n .subscribe(r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.filters.update(items => {\r\n const p = items.findIndex(x => x.value.id === this.filterParams.searchId);\r\n if (p !== -1) {\r\n items.splice(p, 1);\r\n }\r\n return [...items];\r\n });\r\n this.filterSelector()?.reset();\r\n this.filterParams.searchId = undefined;\r\n this.filterParams.searchName = undefined;\r\n this.dialogService.toast('Operazione completata con successo.');\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Select a filter\r\n */\r\n selectFilter(item: NameValueItem<ClipperUserSearch> | undefined) {\r\n if (item && item.value.data) {\r\n this.filterSelector().select(item, false);\r\n const filter = JSON.parse(item.value.data);\r\n this.filterParams.searchId = item.value.id;\r\n this.filterParams.searchName = item.value.name;\r\n this.filterParams.modules = filter.modules;\r\n setTimeout(() => {\r\n this.filterParams.sectors = filter.sectors;\r\n this.filterParams.authors = filter.authors;\r\n this.filterParams.number = filter.number;\r\n this.filterParams.tags = filter.tags;\r\n this.filterParams.year = filter.year;\r\n if (filter.fromDate && filter.toDate) {\r\n this.interval.from = filter.fromDate;\r\n this.interval.to = filter.toDate;\r\n }\r\n this.filterParams.text = filter.text;\r\n this.filterParams.titleOnly = filter.titleOnly;\r\n this.filterParams.showCommentedDocumentsOnly = filter.showCommentedDocumentsOnly;\r\n this.filterParams.showNotAbrogatedDocumentsOnly = filter.showNotAbrogatedDocumentsOnly;\r\n this.filterParams.expandTextQueryUsingAI = filter.expandTextQueryUsingAI;\r\n this.filterParams.sourceNumber = filter.sourceNumber;\r\n this.filterParams.sourceYear = filter.sourceYear;\r\n if (filter.sourceFromDate && filter.sourceToDate) {\r\n this.sourceInterval.from = filter.sourceFromDate;\r\n this.sourceInterval.to = filter.sourceToDate;\r\n }\r\n this.filterParams.source = filter.source;\r\n this.filterParams.type = filter.type;\r\n this.filterParams.topic = filter.topic;\r\n this.filterParams.topics = filter.topics;\r\n this.filterParams.changeReason = filter.changeReason;\r\n this.filterParams.changedNumber = filter.changedNumber;\r\n this.filterParams.changedTitle = filter.changedTitle;\r\n this.filterParams.changedYear = filter.changedYear;\r\n this.filterParams.modifierNumber = filter.modifierNumber;\r\n this.filterParams.modifierTitle = filter.modifierTitle;\r\n this.filterParams.modifierYear = filter.modifierYear;\r\n // Show expansion panels\r\n if (this.filterParams.sourceNumber != undefined ||\r\n this.filterParams.sourceYear != undefined ||\r\n this.filterParams.source != undefined ||\r\n this.sourceInterval.from != undefined) {\r\n this.sourceExpansionPanel()?.open();\r\n }\r\n if (!this.isCoordination() && this.filterParams.sourceNumber != undefined ||\r\n this.filterParams.author != undefined ||\r\n this.filterParams.type != undefined) {\r\n this.otherOptionsExpansionPanel()?.open();\r\n } else if (this.isCoordination() && this.filterParams.changeReason != undefined) {\r\n this.otherOptionsExpansionPanel()?.open();\r\n }\r\n if (this.isCoordination() &&\r\n this.filterParams.modifierNumber != undefined ||\r\n this.filterParams.modifierYear != undefined ||\r\n this.filterParams.modifierTitle != undefined) {\r\n this.modifierExpansionPanel()?.open();\r\n }\r\n }, 250);\r\n } else {\r\n this.clearFilter();\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Clear current filter params\r\n */\r\n protected clearFilter() {\r\n ClipperSearchUtils.clear(this.filterParams);\r\n const module = this.modules().find(x => x.value === ClipperModule.NormativaVigente);\r\n if (module) {\r\n this.filterParams.modules = [module];\r\n }\r\n this.filterSelector()?.reset();\r\n this.filterParams.searchId = undefined;\r\n this.filterParams.searchName = undefined;\r\n this.interval.clear();\r\n this.sourceInterval.clear();\r\n }\r\n\r\n /**\r\n * Load selected filter\r\n */\r\n private loadFilter() {\r\n if (this.filterParams.year && this.filterParams.year > 0) {\r\n const year = this.filterParams.year;\r\n this.filterParams.fromDate = new Date(year, 0, 1, 2);\r\n this.filterParams.toDate = new Date(year, 11, 31, 2);\r\n } else {\r\n this.filterParams.year = undefined;\r\n }\r\n if (this.interval) {\r\n this.filterParams.fromDate = this.interval.from;\r\n this.filterParams.toDate = this.interval.to;\r\n }\r\n if (this.filterParams.sourceYear && this.filterParams.sourceYear > 0) {\r\n const year = this.filterParams.sourceYear;\r\n this.filterParams.sourceFromDate = new Date(year, 0, 1, 2);\r\n this.filterParams.sourceToDate = new Date(year, 11, 31, 2);\r\n } else {\r\n this.filterParams.sourceYear = undefined;\r\n }\r\n if (this.sourceInterval) {\r\n this.filterParams.sourceFromDate = this.sourceInterval.from;\r\n this.filterParams.sourceToDate = this.sourceInterval.to;\r\n }\r\n if (this.filterParams.text) {\r\n this.filterParams.text = ClipperSearchUtils.normalizeTextQuery(this.filterParams.text);\r\n }\r\n }\r\n\r\n /**\r\n * Apply current filter params\r\n */\r\n protected applyFilter() {\r\n if (this.canSearch()) {\r\n this.facets()?.reset();\r\n this.fetch(true);\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Manage sectors selection changes\r\n */\r\n protected sectorsChanged() {\r\n // Reset authors and types\r\n this.filterParams.authors = [];\r\n this.filterParams.type = undefined;\r\n let authors: NameValueItem<string>[] = [];\r\n const sectors =\r\n (this.filterParams.sectors?.length ?? 0) > 0\r\n ? this.filterParams.sectors\r\n : this.sectors();\r\n ClipperAuthors.forEach(n => {\r\n if (sectors &&\r\n sectors.length > 0 &&\r\n sectors.findIndex(x => x.value === n.sectorId) !== -1) {\r\n authors.push(n);\r\n }\r\n });\r\n if (authors.length == 0) {\r\n ClipperAuthors.forEach(n => {\r\n if (!n.sectorId) {\r\n authors.push(n);\r\n }\r\n });\r\n }\r\n let types: NameValueItem<string>[] = [];\r\n ClipperSectorTypes.forEach(n => {\r\n if (sectors &&\r\n sectors.length > 0 &&\r\n sectors.findIndex(x => x.value === n.parentValue) !== -1) {\r\n types.push(n);\r\n }\r\n });\r\n if (types.length == 0) {\r\n types = [...ClipperSectorTypes];\r\n }\r\n this.authors.set(authors.sort((a, b) => a.name.localeCompare(b.name)));\r\n this.types.set(types);\r\n }\r\n\r\n /**\r\n * Check if any search parameter has been set\r\n * @param params : the search params to check\r\n * @returns true if at least one parameters has been set\r\n */\r\n private isFiltering(params: ClipperSearchParams): boolean {\r\n return (params.sector !== null\r\n || (params.sectors?.length ?? 0) > 0\r\n || params.author !== null\r\n || (params.authors?.length ?? 0) > 0\r\n || params.topic !== null\r\n || (params.topics?.length ?? 0) > 0\r\n || params.taxonomy !== null\r\n || params.taxonomyPath !== null\r\n || params.taxonomyNode !== null\r\n || params.number !== null\r\n || params.fromDate !== null\r\n || params.toDate !== null\r\n || params.year !== null\r\n || params.sourceNumber !== null\r\n || params.source !== null\r\n || params.sourceFromDate !== null\r\n || params.sourceToDate !== null\r\n || params.sourceYear !== null\r\n || params.tag !== null\r\n || (params.tags?.length ?? 0) > 0\r\n || params.text !== null\r\n || params.titleOnly === true\r\n || params.type !== null\r\n || params.showUnreadDocumentsOnly === true\r\n || params.showCommentedDocumentsOnly === true\r\n || params.changeReason !== null\r\n || params.changedNumber !== null\r\n || params.changedYear !== null\r\n || params.changedTitle !== null\r\n || params.modifierNumber !== null\r\n || params.modifierYear !== null\r\n || params.modifierTitle !== null\r\n || params.model !== null\r\n || (params.models?.length ?? 0) > 0\r\n || params.module !== null\r\n || (params.modules?.length ?? 0) > 0\r\n || this.interval.from != null\r\n || this.interval.to != null\r\n || this.sourceInterval.from != null\r\n || this.sourceInterval.to != null);\r\n }\r\n\r\n\r\n /**\r\n * Checkif a single module is selected\r\n * @param module : the module to check\r\n * @returns : true if the specified module is the only one selected\r\n */\r\n private isSingleModule(module: ClipperModule): boolean {\r\n return (this.filterParams.modules?.length === 1 && this.filterParams.modules?.findIndex(x => x.value === module) !== -1);\r\n }\r\n\r\n /**\r\n * Update modules unread items\r\n */\r\n private updateModulesUnreadItems() {\r\n this.modules().forEach(module => {\r\n let totalUnread = 0;\r\n if (module.value === ClipperModule.News) {\r\n totalUnread = this.clipperService.dashboard.getUnreadItems(module.value, ClipperModel.News);\r\n } else if (module.value === ClipperModule.Approfondimenti) {\r\n totalUnread = this.clipperService.dashboard.getUnreadItems(module.value, ClipperModel.Articoli);\r\n } else if (module.value === ClipperModule.Giurisprudenza) {\r\n totalUnread = this.clipperService.dashboard.getUnreadItems(module.value, ClipperModel.Juris);\r\n } else if (module.value === ClipperModule.GiurisprudenzaRecente) {\r\n totalUnread = this.clipperService.dashboard.getUnreadItems(ClipperModule.Giurisprudenza, null);\r\n } else {\r\n totalUnread = this.clipperService.dashboard.getUnreadItems(module.value, null);\r\n }\r\n if (totalUnread > 0) {\r\n module.bag = totalUnread.toString();\r\n module.bagInfo = totalUnread + ' non letti';\r\n } else {\r\n module.bag = undefined;\r\n module.bagInfo = undefined;\r\n }\r\n });\r\n this.modules.update(values => [...values]);\r\n }\r\n\r\n /**\r\n * Checks if a module is supported\r\n * @param module : the module to check\r\n * @returns true if the module is supported\r\n */\r\n private hasModule(module: ClipperModule) {\r\n return (this.selectableModules().length === 0 || this.selectableModules().findIndex(x => x === module) !== -1) &&\r\n this.modules().findIndex(x => x.value === module) !== -1;\r\n }\r\n\r\n /**\r\n * Manage module selection changes \r\n */\r\n protected modulesChanged() {\r\n const hasModules = (this.filterParams.modules?.length ?? 0) > 0;\r\n // Update models\r\n if (!hasModules) {\r\n this.filterParams.models = [];\r\n // Update sectors\r\n this.sectors.set(ClipperSectors.filter(n => n.group === 'S').map(n => {\r\n return { name: n.shortName ?? n.name, value: n.value };\r\n }));\r\n } else {\r\n this.filterParams.models = ClipperSearchUtils.getModulesModels(this.filterParams.modules);\r\n // Update sectors\r\n if (this.isSingleModule(ClipperModule.ScadenzeESegnalazioni)) {\r\n this.sectors.set([]);\r\n } else if (this.isSingleModule(ClipperModule.GiurisprudenzaRecente)) {\r\n this.sectors.set(ClipperSectors.filter(n => n.group === 'S' && n.value[0] === 'G').map(n => {\r\n return { name: n.shortName ?? n.name, value: n.value };\r\n }));\r\n } else if (this.isLaws()) {\r\n this.sectors.set(ClipperSectors.filter(n => n.group === 'S').map(n => {\r\n return { name: n.shortName ?? n.name, value: n.value };\r\n }));\r\n }\r\n }\r\n this.selection?.clear();\r\n this.sectorsChanged();\r\n this.updateFilterPaneFocus();\r\n }\r\n\r\n /**\r\n * Check modules against current selected in filter\r\n * @param modules : the modules to check for\r\n * @param mode : thc check mode: 1) exactly all elements 2) all elements 3) any of the elements specified\r\n * @returns true if the check is successfull\r\n */\r\n private checkModules(modules: ClipperModule[], mode: number = 1): boolean {\r\n const currentModules = this.filterParams.modules;\r\n let ok: boolean = false;\r\n if (mode === 1) {\r\n // All and only the elements specified\r\n currentModules?.forEach(n => {\r\n ok = (modules.findIndex(x => x === n.value) ?? -1) !== -1;\r\n if (!ok) {\r\n return;\r\n }\r\n });\r\n return ok && modules.length >= (currentModules?.length ?? 0);\r\n } else if (mode === 2) {\r\n // All the elements specified\r\n modules.forEach(n => {\r\n ok = (currentModules?.findIndex(x => x.value === n) ?? -1) !== -1;\r\n if (!ok) {\r\n return;\r\n }\r\n });\r\n } else if (mode === 3) {\r\n // Any of the specified elements \r\n modules.forEach(n => {\r\n ok = (currentModules?.findIndex(x => x.value === n) ?? -1) !== -1;\r\n if (ok) {\r\n return;\r\n }\r\n });\r\n }\r\n return ok;\r\n }\r\n\r\n /**\r\n * Prepare the module specific query\r\n * @param newSearch : true if is a new search\r\n * @returns the new search params\r\n */\r\n private prepareFetch(newSearch: boolean = false): ClipperSearchParams {\r\n if (this.interval) {\r\n this.filterParams.fromDate = this.interval.fromAsDate;\r\n this.filterParams.toDate = this.interval.toAsDate;\r\n }\r\n if (this.sourceInterval) {\r\n this.filterParams.sourceFromDate = this.sourceInterval.fromAsDate;\r\n this.filterParams.sourceToDate = this.sourceInterval.toAsDate;\r\n }\r\n let newParams: ClipperSearchParams = new ClipperSearchParams();\r\n if ((this.filterParams.modules?.length ?? 0) > 0) {\r\n newParams.first = this.filterParams.first;\r\n newParams.channels = this.filterParams.channels\r\n newParams.count = this.filterParams.count;\r\n newParams.sortMode = this.filterParams.sortMode;\r\n if (this.isCoordination()) {\r\n newParams.models = [ClipperModel.Coordinamento];\r\n newParams.authors = this.filterParams.authors ?? [];\r\n newParams.sectors = this.filterParams.sectors ?? [];\r\n newParams.fromDate = this.filterParams.fromDate;\r\n newParams.toDate = this.filterParams.toDate;\r\n newParams.changeReason = this.filterParams.changeReason;\r\n newParams.changedNumber = this.filterParams.changedNumber;\r\n newParams.changedYear = this.filterParams.changedYear;\r\n newParams.changedTitle = this.filterParams.changedTitle;\r\n newParams.modifierNumber = this.filterParams.modifierNumber;\r\n newParams.modifierYear = this.filterParams.modifierYear;\r\n newParams.modifierTitle = this.filterParams.modifierTitle;\r\n } else {\r\n newParams.text = this.filterParams.text;\r\n newParams.titleOnly = this.filterParams.titleOnly;\r\n newParams.expandTextQueryUsingAI = this.filterParams.expandTextQueryUsingAI;\r\n newParams.fromDate = this.filterParams.fromDate;\r\n newParams.toDate = this.filterParams.toDate;\r\n newParams.models = ClipperSearchUtils.getModulesModels(this.filterParams.modules);\r\n if (this.checkModules([\r\n ClipperModule.News,\r\n ClipperModule.GazzetteBollettiniEFontiDiverse,\r\n ClipperModule.GiurisprudenzaRecente,\r\n ClipperModule.QuesitiECasiRisolti,\r\n ClipperModule.AllerteAlimentari], 1)) {\r\n newParams.showUnreadDocumentsOnly = this.filterParams.showUnreadDocumentsOnly;\r\n }\r\n if (this.checkModules([\r\n ClipperModule.NormativaVigente,\r\n ClipperModule.GazzetteBollettiniEFontiDiverse,\r\n ClipperModule.GiurisprudenzaRecente], 1)) {\r\n newParams.showCommentedDocumentsOnly = this.filterParams.showCommentedDocumentsOnly;\r\n newParams.showNotAbrogatedDocumentsOnly = this.filterParams.showNotAbrogatedDocumentsOnly;\r\n newParams.sectors = this.filterParams.sectors;\r\n newParams.number = this.filterParams.number;\r\n newParams.year = this.filterParams.year;\r\n newParams.topics = this.filterParams.topics;\r\n newParams.authors = this.filterParams.authors ?? [];\r\n if (newParams.authors.length == 0 && this.filterParams.author) {\r\n newParams.authors = [{ name: '?', value: this.filterParams.author }];\r\n }\r\n newParams.types = this.filterParams.types ?? [];\r\n if (newParams.types.length == 0 && this.filterParams.type) {\r\n newParams.types = [{ name: '?', value: this.filterParams.type }];\r\n }\r\n newParams.source = this.filterParams.source;\r\n newParams.sourceNumber = this.filterParams.sourceNumber;\r\n newParams.sourceYear = this.filterParams.sourceYear;\r\n newParams.sourceFromDate = this.filterParams.sourceFromDate;\r\n newParams.sourceToDate = this.filterParams.sourceToDate;\r\n }\r\n if (this.checkModules([ClipperModule.News], 1)) {\r\n newParams.tags = this.filterParams.tags;\r\n }\r\n }\r\n } else {\r\n newParams = SystemUtils.clone(this.filterParams);\r\n newParams.authors = this.filterParams.authors ?? [];\r\n if (newParams.authors.length == 0 && this.filterParams.author) {\r\n newParams.authors = [{ name: '?', value: this.filterParams.author }];\r\n }\r\n newParams.types = this.filterParams.types ?? [];\r\n if (newParams.types.length == 0 && this.filterParams.type) {\r\n newParams.types = [{ name: '?', value: this.filterParams.type }];\r\n }\r\n }\r\n // Setup sort options\r\n this.sortOptions = ClipperUtils.getClipperAvailableSortOptions(this.filterParams.modules, newParams);\r\n if (newParams.text && newSearch) {\r\n this.sortMode = this.sortOptions[0];\r\n this.changeDetector.markForCheck();\r\n }\r\n if (!this.sortMode || this.sortOptions.findIndex(x => x.value == this.sortMode?.value) === -1) {\r\n this.sortMode = this.sortOptions[0];\r\n }\r\n newParams.sortMode = this.sortMode.value;\r\n // Apply facets\r\n if (this.snapshot?.facets?.fromDate) {\r\n newParams.fromDate = this.snapshot.facets?.fromDate;\r\n newParams.toDate = this.snapshot.facets?.toDate;\r\n newParams.year = this.snapshot.facets?.fromDate.getFullYear();\r\n }\r\n if (this.snapshot?.facets?.sector) {\r\n if (this.snapshot?.facets?.sector) {\r\n const model: ClipperModel = parseInt(this.snapshot.facets?.sector) as ClipperModel;\r\n if (model > 0) {\r\n newParams.models = [model];\r\n } else\r\n newParams.sectors = [{ value: this.snapshot.facets?.sector ?? \"\", name: \"\" }];\r\n } else {\r\n if ((newParams.sectors?.length ?? 0) == 0)\r\n newParams.models = ClipperSearchUtils.getModulesModels(this.filterParams.modules);\r\n }\r\n }\r\n if (this.snapshot?.facets?.type) {\r\n newParams.types = [{ value: this.snapshot.facets.type ?? \"\", name: \"\" }];\r\n }\r\n if (this.snapshot?.facets?.author) {\r\n newParams.authors = [{ value: this.snapshot.facets?.author ?? \"\", name: \"\" }];\r\n }\r\n\r\n newParams.version = 7;\r\n newParams.count = 15;\r\n if (newSearch) {\r\n newParams.first = 0;\r\n }\r\n\r\n // Compute a filter description\r\n this.updateFilterDescription();\r\n\r\n return newParams;\r\n }\r\n\r\n /**\r\n * Update filter description\r\n */\r\n private updateFilterDescription() {\r\n let filterDescription = \"\";\r\n this.filterParams.modules?.forEach((n, i) => {\r\n if (i > 0) filterDescription += \", \";\r\n filterDescription += n.shortName;\r\n });\r\n if ((this.filterParams.sectors?.length ?? 0) > 0) {\r\n filterDescription += \" > \";\r\n this.filterParams.sectors?.forEach((n, i) => {\r\n if (i > 0) filterDescription += \", \";\r\n filterDescription += n.name;\r\n });\r\n }\r\n if ((this.filterParams.authors?.length ?? 0) > 0) {\r\n filterDescription += \" > \";\r\n this.filterParams.authors?.forEach((n, i) => {\r\n if (i > 0) filterDescription += \", \";\r\n filterDescription += n.name;\r\n });\r\n }\r\n this.filterDescription.set(filterDescription);\r\n }\r\n\r\n /**\r\n * Get facets\r\n * @param params: the clipper search params\r\n */\r\n protected fetchFacets(params: ClipperSearchParams) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.filterBusy.set(true);\r\n this.clipperService.queryFacets(params)\r\n .subscribe({\r\n next: r => {\r\n if (r.success) {\r\n let hasFacets = (r.value.facets?.length ?? 0) > 0;\r\n if (r.value.facets) {\r\n this.facets()?.update(r.value.facets, r.value.interval);\r\n if (this.facets && this.snapshot) {\r\n hasFacets = this.facets().hasFacets();\r\n this.snapshot.facets = this.facets().save();\r\n this.snapshot.facets.hasTooManyResults = (this.snapshot?.total ?? 0) >= 1000;\r\n }\r\n }\r\n this.hasFacets.set(hasFacets);\r\n this.handleFilterPaneVisibility();\r\n }\r\n },\r\n complete: () => {\r\n this.filterBusy.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Hide facets\r\n */\r\n protected hideFacets() {\r\n this.hasFacets.set(false);\r\n this.facets()?.reset();\r\n this.filterPane2().close();\r\n this.filterPane2Closed = false;\r\n }\r\n\r\n /**\r\n * Fetch data\r\n * @param newSearch true if is a new search\r\n */\r\n protected fetch(newSearch: boolean = false) {\r\n const searchParams = this.prepareFetch(newSearch);\r\n this.dialogService.busy('Ricerca in corso...');\r\n this.clipperService.query(searchParams)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n // Handle data\r\n this.prepareResults(r.value, newSearch);\r\n // Handle facets\r\n if (this.snapshot?.total ?? 0 > 0) {\r\n if (newSearch) {\r\n this.fetchFacets(searchParams);\r\n }\r\n } else {\r\n this.hideFacets();\r\n }\r\n\r\n if (newSearch) {\r\n if (this.paginator()) {\r\n this.paginator().pageIndex = 0;\r\n }\r\n this.filterParams.augmentedText = r.value.terms?.join(\"__TERM__\");\r\n }\r\n\r\n this.scroll(0);\r\n this.handleFilterPaneVisibility();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show a new page result\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n protected fetchMore(e: PageEvent) {\r\n let first = e.pageIndex * (this.filterParams.count ?? 15);\r\n this.filterParams.first = first;\r\n this.fetch();\r\n }\r\n\r\n\r\n /**\r\n * Change sort\r\n * @param new sort: the new sort value\r\n */\r\n protected sort(newSort?: NameValueItem<any>) {\r\n if (newSort) {\r\n this.sortMode = newSort;\r\n this.fetch();\r\n }\r\n }\r\n\r\n /**\r\n* Show free text help\r\n*/\r\n protected help() {\r\n this.dialogService.open(ClipperSearchFreeTextHelpComponent, {\r\n ariaLabel: 'informazioni ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '800px',\r\n width: '99%',\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Compose a free text search query\r\n */\r\n protected compose() {\r\n let d = this.dialogService.open(ClipperSearchFreeTextQueryBuilderComponent, {\r\n ariaLabel: 'costruisci ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '500px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done.subscribe((result: SearchFreeTextQueryParams) => {\r\n this.filterParams.text = result.query;\r\n this.changeDetector.markForCheck();\r\n d.close();\r\n });\r\n }\r\n\r\n /**\r\n * Add a topic\r\n */\r\n protected addTopic() {\r\n this.dialogService\r\n .selectTree(\r\n this.topics,\r\n 'Seleziona un argomento',\r\n undefined,\r\n (this.filterParams.topics && this.filterParams.topics.length > 0)\r\n ? this.filterParams.topics[this.filterParams.topics.length - 1].name\r\n : undefined\r\n )\r\n .componentInstance.done.subscribe(r => {\r\n if (!this.filterParams.topics) {\r\n this.filterParams.topics = [];\r\n }\r\n r.selectedItems.forEach(item => {\r\n this.filterParams.topics?.push({ name: item.bag.name, value: item.bag.id });\r\n this.changeDetector.markForCheck();\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Remove a topic\r\n */\r\n protected deleteTopic(item: NameValueItem<string>) {\r\n const p = this.filterParams.topics?.findIndex(x => x.value === item.value) ?? -1;\r\n if (p !== -1) {\r\n this.filterParams.topics?.splice(p, 1);\r\n this.changeDetector.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * Clear all topics\r\n */\r\n protected clearTopics() {\r\n this.filterParams.topics = []\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n}\r\n\r\n\r\n","<mat-drawer-container [hasBackdrop]=\"filterPaneHasBackdrop\" class=\"fill\">\r\n <mat-drawer #filterPane class=\"drawer\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"78px\" class=\"title-container\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"title\">Filtro</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"saveFilter(true)\"\r\n matTooltip=\"Crea una nuovo filtro con i parametri attuali \"><mat-icon>add</mat-icon></button>\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>left_panel_close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n @if(hasFilters()) {\r\n <div style=\"padding:10px 20px\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\">\r\n <button-selector #filterSelector [options]=\"filters()\" label=\"Seleziona un filtro salvato\"\r\n labelSelected=\"Filtro in uso:\" fxFlexAlign=\"center\" (selected)=\"selectFilter($event)\"\r\n [matTooltip]=\"filterParams.searchName ?? ''\"></button-selector>\r\n </div>\r\n @if(filterParams.searchId) {\r\n <div fxFlex=\"40px\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"deleteFilter()\"\r\n matTooltip=\"Elimina il filtro in uso\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <div fxFlex=\"*\" class=\"content scroll-hidden\" style=\"padding-bottom: 10px;\">\r\n <div class=\"scroll-auto\" style=\"padding: 0 10px;\">\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"applyFilter()\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Cerca in..\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n\r\n <chips-selector #moduleSelector [(ngModel)]=\"filterParams.modules\" [collapseAt]=\"599\" [multiple]=\"true\"\r\n label=\"Sezioni\" name=\"modules\" [options]=\"modules()\" (changed)=\"modulesChanged()\">\r\n </chips-selector>\r\n </mat-expansion-panel>\r\n\r\n @if((hasTags() || hasTopics()) && !isCoordination()) {\r\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Argomenti\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n @if(hasTags()) {\r\n <chips-selector [collapseAt]=\"599\" [(ngModel)]=\"filterParams.tags\" [multiple]=\"true\" name=\"tags\"\r\n label=\"Argomenti\" [options]=\"tags()\"></chips-selector>\r\n }\r\n @if(hasTopics()) {\r\n @if ((filterParams.topics?.length ?? 0) > 0) {\r\n <mat-chip-grid #topics [(ngModel)]=\"filterParams.topics\" name=\"topics\" style=\"padding-bottom: 5px;\">\r\n @for (o of filterParams.topics; track $index) {\r\n <mat-chip-row [value]=\"o\" (removed)=\"deleteTopic(o)\">\r\n {{o.name}}\r\n <button matChipRemove>\r\n <mat-icon>cancel</mat-icon>\r\n </button></mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input style=\"display: none;\" [matChipInputFor]=\"topics\" />\r\n }\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\">\r\n <button mat-button type=\"button\" (click)=\"addTopic()\"><mat-icon>add</mat-icon> Aggiungi\r\n argomento</button>\r\n @if ((filterParams.topics?.length ?? 0) > 0) {\r\n <button mat-button type=\"button\" (click)=\"clearTopics()\"><mat-icon>delete</mat-icon> Azzera</button>\r\n }\r\n </div>\r\n }\r\n </mat-expansion-panel>\r\n }\r\n @if(hasSectors()) {\r\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [collapseAt]=\"599\" [(ngModel)]=\"filterParams.sectors\" [multiple]=\"true\" name=\"sectors\"\r\n label=\"Settori\" [options]=\"sectors()\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector [(ngModel)]=\"filterParams.authors\" [multiple]=\"true\" name=\"authors\" mode=\"collapsed\"\r\n label=\"Tutte le regioni\" [options]=\"regions()\" />\r\n }\r\n </mat-expansion-panel>\r\n }\r\n @if(!isCoordination()) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"49\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"filterParams.number\" name=\"number\"\r\n #filterByNumber=\"matInput\" />\r\n @if (filterParams.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"39\" fxFlex.xs=\"49\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"filterParams.year\"\r\n name=\"year\" />\r\n @if (filterParams.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\"\r\n #rangeFrom1=\"ngModel\" name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"filterParams.text\" name=\"text\"\r\n #filterByText=\"matInput\" />\r\n @if (filterParams.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\"\r\n aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"filterPaneOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n @if(filterParams.text) {\r\n <div style=\"padding-bottom:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"filterParams.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(hasAIAssistant) {\r\n <div style=\"padding-bottom:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"filterParams.expandTextQueryUsingAI\" name=\"expandTextQueryUsingAI\">\r\n <div>Usa <mat-icon style=\"height:20px; width:20px; font-size:22px\">borg</mat-icon> Assistente IA\r\n per potenziare la ricerca</div>\r\n </mat-slide-toggle>\r\n </div>\r\n }\r\n }\r\n @if(isLaws(false)) {\r\n <div style=\"padding-bottom:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"filterParams.showNotAbrogatedDocumentsOnly\"\r\n name=\"showNotAbrogatedDocumentsOnly\">Mostra solo elementi non abrogati</mat-slide-toggle>\r\n </div>\r\n <div style=\"padding-bottom:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"filterParams.showCommentedDocumentsOnly\"\r\n name=\"showCommentedDocumentsOnly\">Mostra solo elementi con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n @if(isReadable()) {\r\n <div style=\"padding-bottom:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"filterParams.showUnreadDocumentsOnly\"\r\n name=\"showUnreadDocumentsOnly\">Mostra solo elementi non letti</mat-slide-toggle>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws(false)) {\r\n <mat-expansion-panel #sourceExpansionPanel class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"filterParams.sourceNumber\" name=\"sourceNumber\" />\r\n @if (filterParams.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"filterParams.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (filterParams.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\"\r\n [end]=\"true\" #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"filterParams.source\" name=\"source\">\r\n @for (s of sources(); track $index) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #otherOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(authors().length > 0 && !hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"filterParams.author\" name=\"author\">\r\n @for (a of authors(); track $index) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"filterParams.type\" name=\"type\">\r\n @for (t of types(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n </mat-expansion-panel>\r\n }\r\n } @else {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Periodo\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <mat-form-field style=\"width:100%\">\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\"\r\n #rangeFrom1=\"ngModel\" name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n @if(isReadable()) {\r\n <div style=\"padding-bottom:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"filterParams.showUnreadDocumentsOnly\"\r\n name=\"showUnreadDocumentsOnly\">Mostra solo elementi non letti</mat-slide-toggle>\r\n </div>\r\n }\r\n </mat-expansion-panel>\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"filterParams.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (filterParams.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"filterParams.changedYear\"\r\n name=\"changedYear\" />\r\n @if (filterParams.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"filterParams.changedTitle\" name=\"changedTitle\" />\r\n @if (filterParams.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #modifierOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"filterParams.modifierNumber\" name=\"modifierNumber\" />\r\n @if (filterParams.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"filterParams.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (filterParams.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"filterParams.modifierTitle\" name=\"modifierTitle\" />\r\n @if (filterParams.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #otherOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"filterParams.changeReason\" name=\"changeReason\">\r\n @for (r of reasons(); track $index) {\r\n <mat-option [value]=\"r.value\" [matTooltip]=\"r.name\">\r\n {{r.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n </div>\r\n </div>\r\n @if(showChannels()) {\r\n <div style=\"padding:10px\">\r\n <div fxLayout=\"column\">\r\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0\" style=\"margin-bottom: 10px;\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Canali\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n @for (c of clipperService.availableChannels(); track $index) {\r\n <div class=\"channel-box\" [class.channel-disabled]=\"!c.active || c.disabled\" [matTooltip]=\"c.name\">\r\n <span class=\"label\">{{c.header}}</span>\r\n </div>\r\n }\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <chips-selector [collapseAt]=\"599\" [(ngModel)]=\"filterParams.channels\" [multiple]=\"true\" name=\"channels\"\r\n label=\"Canali\" [options]=\"clipperService.availableChannels()\"\r\n (changed)=\"channelsChanged()\"></chips-selector>\r\n\r\n </mat-expansion-panel>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"end\">\r\n <button mat-stroked-button (click)=\"clearFilter()\">Pulisci</button>\r\n <button mat-stroked-button (click)=\"saveFilter()\" style=\"margin-left: 10px;\">Salva</button>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"end\" mat-flat-button (click)=\"applyFilter()\"\r\n [disabled]=\"!canSearch()\">Applica</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxLayoutGap=\"10px\" fxFill class=\"drawer-content scroll-hidden\">\r\n <div class=\"module-toolbar \">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <div fxFlex=\"49\" fxFlex.lt-md=\"100\" style=\"padding-left: 10px; padding-bottom: 5px;\">\r\n @if(!filterPane.opened) {\r\n <button-toggle cssClass=\"small\" cssClassSmall=\"x-small\" iconOn=\"left_panel_close\" iconOff=\"tune\"\r\n labelOn=\"Nascondi<br>filtri\" labelOff=\"Mostra<br>filtri\" [value]=\"filterPane.opened\"\r\n (changed)=\"toggleFilterPane()\"></button-toggle>\r\n }\r\n </div>\r\n <div fxFlex=\"49\" fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\">\r\n <div fxLayout=\"row\" style=\"height:48px; padding-bottom: 5px;\">\r\n @if((snapshot?.total ?? 0) > 0) {\r\n @if(sortOptions && sortOptions.length > 0) {\r\n <button-selector [options]=\"sortOptions\" label=\"Ordina per:\" style=\"margin-right: 5px;\" [border]=\"0\"\r\n fxFlexAlign=\"center\" [(ngModel)]=\"sortMode\" name=\"sortMode\" (selected)=\"sort($event)\"></button-selector>\r\n }\r\n <button fxFlexAlign=\"center\" mat-icon-button matSuffix matTooltip=\"Opzioni sulla selezione\"\r\n aria-label=\"Opzioni sulla selezione\" [matMenuTriggerFor]=\"selectionOptionsMenu\"\r\n [matBadge]=\"countSelections()\"><mat-icon>checklist</mat-icon></button>\r\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Salva elenco in Excel \"\r\n (click)=\"exportResults()\"><mat-icon>save_alt</mat-icon></button>\r\n @if (!filterPane2?.opened && hasFacets()){\r\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Affina ricerca\"\r\n (click)=\"toggleFilterPane2()\"><mat-icon>right_panel_open</mat-icon></button>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"module-content\">\r\n <mat-drawer-container [hasBackdrop]=\"filterPane2HasBackdrop\" class=\"fill\">\r\n <mat-drawer #filterPane2 class=\"drawer-small drawer-with-loader\" position=\"end\" opened=\"false\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"78px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-icon-button (click)=\"toggleFilterPane2()\"\r\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"content scroll-hidden\" style=\"padding: 0 5px;\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" cdkScrollable class=\"scroll-auto\" style=\"padding: 0 20px;\">\r\n @if (!snapshot?.total) {\r\n <div class=\"message-container\">\r\n @if(snapshot?.total === 0) {\r\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\r\n } @else {\r\n <div class=\"message\">\r\n <p fxHide.xs><b>Esegui una ricerca compilando i campi necessari nella maschera di ricarca qui a\r\n fianco.</b></p>\r\n <p fxHide.gt-xs><b>Fai click sul bottone <span class=\"accent\"><mat-icon>tune</mat-icon></span> ed esegui\r\n una\r\n ricerca compilando i campi necessari.</b></p>\r\n <p>E' possibile salvare i parametri delle le ricerche più utilizzate facendo clic su &nbsp;\r\n <mat-icon\r\n style=\"display: inline-flex; border-radius: 9999px; height: 25px; width: 25px; color: var(--ars-color-text-low); background-color: var(--ars-color-accent);\">add</mat-icon>.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n @if (snapshot && (snapshot.total ?? 0) > 0) {\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group && isSortedByDate()) {\r\n <div class=\"items-group-title\">\r\n <div [class.group-spaced]=\"i > 0\">{{item.group}}</div>\r\n </div>\r\n }\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\" [displayModelName]=\"true\" [actions]=\"contextMenu\"\r\n [isReadable]=\"true\"></clipper-search-result-item>\r\n }\r\n }\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <!-- legend -->\r\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\r\n <div class=\"legend unread-bg\"></div>\r\n non letto\r\n <!--<div class=\"legend next very-popular-bg\"></div>\r\n molto citato\r\n <div class=\"legend next popular-bg\"></div>\r\n citato-->\r\n <div class=\"legend next expired-bg \"></div>\r\n non più vigente\r\n </div>\r\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [class.wide]=\"filterPane2?.opened\">\r\n <div fxLayout=\"row\">\r\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\r\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count\" [showFirstLastButtons]=\"true\"\r\n (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n </div>\r\n </div>\r\n</mat-drawer-container>\r\n<mat-menu #filterPaneOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>\r\n<mat-menu #selectionOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"selectAll()\">\r\n <mat-icon>select_all</mat-icon>Seleziona tutti\r\n </button>\r\n <clipper-document-menu [parent]=\"this\" [useSelections]=\"true\" [isReadable]=\"true\" [canUseArchive]=\"false\"\r\n [canUseCalendar]=\"false\" [canUseAIAssistant]=\"hasAIAssistant\" [canUseRS]=\"showRSOptions()\">\r\n </clipper-document-menu>\r\n</mat-menu>\r\n<mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"true\" [canUseArchive]=\"false\"\r\n [canUseCalendar]=\"false\" [canUseAIAssistant]=\"hasAIAssistant\" [canUseRS]=\"showRSOptions()\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n</mat-menu>","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnInit, viewChild } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogClose, MatDialogContent, MatDialogRef } from '@angular/material/dialog';\r\nimport { ClipperMessages, ClipperModule, ClipperSelectionMode, ClipperService, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { BroadcastService, SystemUtils, ThemeType } from '@arsedizioni/ars-utils/core';\r\nimport { ClipperBrowserComponent } from '../browser.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\nexport interface ClipperBrowserDialogData {\r\n showChannels?: boolean;\r\n selectionMode?: ClipperSelectionMode;\r\n selectableModules?: ClipperModule[];\r\n selectionMessage?: string;\r\n initialModule?: number;\r\n theme?: ThemeType;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './browser-dialog.component.html',\r\n styleUrls: ['./browser-dialog.component.scss'],\r\n imports: [MatDialogClose, MatDialogContent, MatButtonModule, MatBadgeModule, MatIconModule, FlexLayoutModule, ClipperBrowserComponent],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ClipperBrowserDialogComponent implements OnInit, AfterViewInit {\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n readonly clipperBrowser = viewChild.required<ClipperBrowserComponent>('clipperBrowser');\r\n protected clipperService = inject(ClipperService);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n protected dialogData: ClipperBrowserDialogData = inject(MAT_DIALOG_DATA);\r\n private dialogRef = inject(MatDialogRef<ClipperBrowserDialogComponent>);\r\n private broadcastService = inject(BroadcastService);\r\n\r\n\r\n ngOnInit(): void {\r\n this.broadcastService.getMessage()\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(message => {\r\n if (message.id === ClipperMessages.DOCUMENT_SELECTED_INNER) {\r\n const document = this.clipperBrowser().getSnapshotDocument(message.data.documentId || message.data.id);\r\n if (document) {\r\n this.broadcastService.sendMessage(\r\n this.dialogData.selectionMessage ?? ClipperMessages.DOCUMENT_SELECTED, [document]);\r\n this.changeDetector.markForCheck();\r\n this.dialogRef.close();\r\n }\r\n }\r\n });\r\n }\r\n\r\nngAfterViewInit(): void {\r\n this.clipperBrowser().selectionMode.set(this.dialogData.selectionMode);\r\n}\r\n\r\n /**\r\n * Checks if documents can be selected and returned as message\r\n */\r\n protected canSelect(): boolean {\r\n const selection = this.clipperBrowser().selection;\r\n let allow =\r\n selection &&\r\n ((this.dialogData.selectionMode === ClipperSelectionMode.Single &&\r\n selection.all.length === 1) ||\r\n (this.dialogData.selectionMode === ClipperSelectionMode.TwoOrMore &&\r\n selection.all.length > 1) ||\r\n (this.dialogData.selectionMode === ClipperSelectionMode.Multi &&\r\n selection.all.length > 0));\r\n if (allow && (this.dialogData.selectableModules?.length ?? 0) > 0) {\r\n selection?.all.forEach(n => {\r\n const module = ClipperUtils.getClipperModuleFromModel(n);\r\n if (this.dialogData.selectableModules?.findIndex(x => x === module) === -1) {\r\n allow = false;\r\n return;\r\n }\r\n });\r\n }\r\n return allow === true;\r\n\r\n }\r\n\r\n /**\r\n * Send a message with current selection and close dialog\r\n */\r\n protected select() {\r\n const selection = this.clipperBrowser().selection;\r\n if (selection?.all && selection?.all.length > 0) {\r\n this.broadcastService.sendMessage(\r\n this.dialogData.selectionMessage ?? ClipperMessages.DOCUMENT_SELECTED,\r\n selection?.all\r\n );\r\n this.changeDetector.markForCheck();\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n}\r\n","<div style=\"padding:10px 0 10px 0\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"dialog-title\">\r\n <a href=\"https://clipper.arsedizioni.it\" matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">\r\n <div class=\"clipper-logo\"></div>\r\n </a>\r\n </div>\r\n <div fxFlex=\"*\"></div>\r\n @if ((dialogData.selectionMode ?? 0) > 0 && canSelect()) {\r\n <div fxFlexAlign=\"center\" fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\">\r\n <span class=\"small bold\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"select()\"\r\n matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\" class=\"clipper-selection-icon-button\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlexAlign=\"center\" class=\"dialog-close\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" fxLayoutGap=\"5px\">\r\n @if (clipperService.bag.length > 0) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Documenti di lavoro\"\r\n aria-label=\"'Documenti di lavoro'\" (click)=\"clipperBrowser.openBag()\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"clipperService.bag.length\"\r\n >work_outline</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" mat-icon-button matTooltip=\"Chiudi\" [mat-dialog-close]=\"true\" aria-label=\"Chiudi\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content style=\"padding: 0\">\r\n <clipper-browser #clipperBrowser class=\"wide fill\" [showChannels]=\"dialogData.showChannels ?? true\"\r\n [selectableModules]=\"dialogData.selectableModules ?? []\"\r\n [initialModule]=\"dialogData.initialModule\" [showRSOptions]=\"false\" [showAIAssistantOptions]=\"false\"></clipper-browser>\r\n</mat-dialog-content>","/*\r\n * Public API Surface of ars-utils\r\n */\r\n\r\n\r\nexport * from './ui/references/references.component';\r\nexport * from './ui/browser/browser.component';\r\nexport * from './ui/browser/browser-dialog/browser-dialog.component';\r\nexport * from './ui/search-facets/search-facets.component';\r\nexport * from './ui/search-free-text-help/search-free-text-help.component';\r\nexport * from './ui/search-free-text-query-builder/search-free-text-query-builder.component';\r\nexport * from './ui/search-result-item/search-result-item.component';\r\nexport * from './ui/search-calendar/search-calendar.component';\r\nexport * from './ui/search-result-manager/search-result-manager';\r\nexport * from './ui/document/document.component';\r\nexport * from './ui/document-index/document-index.component';\r\nexport * from './ui/document-menu/document-menu.component';\r\nexport * from './documents';\r\nexport * from './ui/document-manager/document-manager';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i4","i2","i3","i5","takeUntil","FlexModule","i6","finalize","i8","i9","i11","i1","i7","i10","i12","i13","i17","i18"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqDa,6BAA6B,CAAA;AAlB1C,IAAA,WAAA,GAAA;AAmBW,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAmB,WAAW,CAAC;QAC7D,IAAA,CAAA,IAAI,GAAG,MAAM,EAAoC;AAElD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACnC,QAAA,IAAA,CAAA,UAAU,GAAmC,MAAM,CAAC,eAAe,CAAC;AAEpE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAU,KAAK,sDAAC;AAuE9C,IAAA;IArEC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;gBAC9B,IAAI,CAAC,IAAI,EAAE;YACb;QACF;IACF;AAEA;;AAEG;IACK,IAAI,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YAAE;QACrC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,yBAAyB,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU;AACjD,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;aACnD,SAAS,CAAC,CAAC,IAAG;AACb,YAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YACrC;iBAAO;AACL,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;gBACf,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAA4B,KAAI;oBAEtD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;wBAC1F,IAAI,CAAC,CAAC,KAAK;AAAE,4BAAA,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK;6BAC/B;AACH,4BAAA,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE;gCACd,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;4BAC/B;iCAAO;AACL,gCAAA,CAAC,CAAC,WAAW;AACX,oCAAA,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG;4BACxD;wBACF;AACA,wBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBACpB;AACF,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YACpC;AAEF,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;IACO,MAAM,GAAA;AACd,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,CAAC,SAAS,IAAI,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IAClE;AAEA;;;AAGG;IACO,GAAG,CAAC,OAAkC,IAAI,EAAA;QAClD,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE;AAC7B,YAAA,IAAI,IAAI;AAAE,gBAAA,OAAO;YACjB,IAAI,SAAS,GAAgC,EAAE;AAC/C,YAAA,IAAI,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAG;AACpD,gBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACzB,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACrC;aAAO,IAAI,IAAI,EAAE;AACf,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC;IACF;8GA/EW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAjBxB,WAAW,CAAC,YAAY,EAAE,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpC5C,m7CAmCqB,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDOjB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gNAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,cAAc,+HACd,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEb,gBAAgB,6TAChB,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EACf,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGL,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAlBzC,SAAS;AACF,YAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,EAAE,EAAA,eAAA,EAG3B,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP;wBACP,gBAAgB;wBAChB,cAAc;wBACd,gBAAgB;wBAChB,aAAa;wBACb,OAAO;wBACP,gBAAgB;wBAChB,gBAAgB;wBAChB,eAAe;wBACf,cAAc;AACf,qBAAA,EAAA,QAAA,EAAA,m7CAAA,EAAA;uEAGyD,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEtC1D,sBAAsB,CAAA;AALnC,IAAA,WAAA,GAAA;AAOc,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAChC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACpC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAChD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAU,KAAK,yDAAC;AACtC,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAU,KAAK,mEAAC;AAid7D,IAAA;AA7cG;;;AAGD;AACC,IAAA,SAAS,CAAC,IAAyB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YAAE;AACrC,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,CAAC;AACA,aAAA,OAAO,CAAC,0BAA0B,EAAE,aAAa;aACjD,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAkB,KAAI;AACxD,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;gBACtB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU;AACrC,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,0BAA0B,CAAC;AACnD,gBAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AAC3B,qBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;qBACnD,SAAS,CAAC,CAAC,IAAG;oBACX,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC;AACxD,gBAAA,CAAC,CAAC;YACV;AACJ,QAAA,CAAC,CAAC;IACV;AAEA;;;;;AAKG;AACH,IAAA,WAAW,CACP,WAAiC,EACjC,eAAgD,SAAS,EACzD,SAAiB,CAAC,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YAAE;AACrC,QAAA,IAAI,KAAK,GAAiC,EAAE,GAAG,EAAE,WAAW,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;AACjG,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,KAAK,CAAC,KAAK,GAAG,YAAY;QAC9B;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAClD,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK;AAC3B,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;aACnD,SAAS,CAAC,CAAC,IAAG;AACX,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE;gBAC/B,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7E;iBAAO;AACH,gBAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AACd,oBAAA,MAAM,CAAC,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,EAAE,gBAAgB,CAAC,GAAG,MAAM,CAAC;gBACxF;qBAAO;AACH,oBAAA,MAAM,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,EAAE,gBAAgB,CAAC,GAAG,MAAM,CAAC;gBAC1F;YACJ;AACJ,QAAA,CAAC,CAAC;IACV;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,IAAyB,EAAA;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACrD;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,KAA4B,EAAA;QACrC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,mBAAmB,EAAE,KAAK,CAAC;IACjF;AAEA;;;AAGG;AACH,IAAA,aAAa,CAAC,IAAyB,EAAA;QACnC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,oBAAoB,EAAE,IAAI,CAAC;IACjF;AAEA;;;AAGE;AACF,IAAA,0BAA0B,CAAC,KAA4B,EAAA;QACnD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,mBAAmB,EAAE,KAAK,CAAC;IACjF;AAEA;;;AAGE;AACF,IAAA,aAAa,CAAC,KAA4B,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YAAE;QACrC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IAC7E;AAGA;;;AAGG;AACH,IAAA,uBAAuB,CAAC,IAAyB,EAAA;QAC7C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,aAAa;YAAE;AACxD,QAAA,IAAI,IAAI,GACJ,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;YACnC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;QAC/C,IAAI,IAAI,CAAC,MAAM;YACX,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;QAC/C,IAAI,IAAI,IAAI;QACZ,IAAI,IAAI,CAAC,MAAM;AACX,YAAA,IAAI,IAAI,IAAI,CAAC,MAAM;QACvB,IAAI,IAAI,IAAI;AACZ,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YACnD,IAAI,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;QACvD;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YAClB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/B,IAAI,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7C;QACA,IAAI,IAAI,IAAI;QACZ,IAAI,IAAI,CAAC,iBAAiB;AACtB,YAAA,IAAI,IAAI,IAAI,CAAC,iBAAiB;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,iCAAiC,CAAC;IAC/D;AAEA;;;AAGG;AACH,IAAA,QAAQ,CAAC,IAAyB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU;AAC5C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;AAClB,cAAE,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG;cAChC,EAAE;AACR,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC;AACd,cAAE,WAAW;AACb,gBAAA,IAAI,CAAC,MAAM;gBACX,KAAK;AACL,iBAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;gBACtD;cACE,EAAE;AACR,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,EAAE;AACtE,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,IAAI,OAAO,GACP,wFAAwF;YACxF,kMAAkM;YAClM,2DAA2D;YAC3D,4BAA4B;YAC5B,qCAAqC;YACrC,EAAE;YACF,QAAQ;YACR,MAAM;YACN,MAAM;YACN,mBAAmB;YACnB,QAAQ;YACR,MAAM;AACN,YAAA,MAAM;AACV,QAAA,MAAM;QAEN,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC;IAC5D;AAEA;;;AAGG;AACH,IAAA,WAAW,CAAC,KAA4B,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YAAE;AACrC,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,EAAE;AACrD,YAAA,SAAS,EAAE,2BAA2B;AACtC,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,IAAI,EAAE;AACF,gBAAA,IAAI,EACA,2GAA2G;gBAC/G,KAAK,EAAE,KAAK,CAAC,MAAM;AACtB,aAAA;AACD,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,KAAK,EAAE,MAAM;AAChB,SAAA,CAAC;QACF,CAAC,CAAC,iBAAiB,CAAC;AACf,aAAA,SAAS,CAAC,CAAC,IAAuC,KAAI;YACnD,IAAI,CAAC,GAAG,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE;AACtD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAC5C,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI;AAC1B,iBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;iBACnD,SAAS,CAAC,CAAC,IAAG;AACX,gBAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;oBACZ,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;gBACvC;qBAAO;AACH,oBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,gCAAgC,CAAC;oBAC1D,CAAC,CAAC,KAAK,EAAE;gBACb;AACJ,YAAA,CAAC,CAAC;AACV,QAAA,CAAC,CAAC;IACV;AAEA;;;;AAIG;IACH,UAAU,CAAC,UAAkB,EAAE,KAAc,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YAAE;AACrC,QAAA,IAAI,CAAC,UAAU;YAAE;AACjB,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU;AAChC,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;aACnD,SAAS,CAAC,CAAC,IAAG;AACX,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,GAAG,UAAU,IAAI,OAAO,CAAC;AACrD,QAAA,CAAC,CAAC;IACV;AAEA;;;;;;AAME;AACF,IAAA,IAAI,CACA,WAAoB,EACpB,MAAe,EACf,UAAoB,EAAA;IACxB;AAEA;;;AAGG;AACH,IAAA,MAAM,CAAC,IAAyB,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,QAAQ,EAAE;AACpF,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qEAAqE,CAAC;YAC9F;QACJ;aAAO;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;QACjD;IACJ;AAEA;;;;AAIG;AACH,IAAA,cAAc,CAAC,UAAkB,EAAE,IAAA,GAAmC,0BAA0B,CAAC,YAAY,EAAA;AACzG,QAAA,IAAI,CAAC,UAAU;YAAE;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,0BAA0B,EAAE;AAC1D,YAAA,SAAS,EAAE,iCAAiC;AAC5C,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,IAAI,EAAE;AACF,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AACnC,gBAAA,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;AACxD,aAAA;AACD,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA,CAAC;QACF,CAAC,CAAC,WAAW;AACR,aAAA,SAAS,CAAC,CAAC,CAA+B,KAAI;AAC3C,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU;AAAE,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AAClD,QAAA,CAAC,CAAC;IACV;AAEA;;AAEG;IACH,OAAO,GAAA;QACH,IAAI,KAAK,GAAqB,EAAE;QAChC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,IAAG;YAClC,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM;YAChC,KAAK,CAAC,IAAI,CAAC;AACP,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;AAC7B,aAAA,CAAC;AACN,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAChC,YAAA,KAAK,EAAE,8BAA8B;AACrC,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,SAAS,EAAE,WAAW;AACtB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,OAAO,EAAE,IAAI;AAChB,SAAA,CAAC;QACF,CAAC,CAAC,iBAAiB,CAAC;AACf,aAAA,SAAS,CAAC,CAAC,CAAiB,KAAI;AAC7B,YAAA,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B,QAAA,CAAC,CAAC;QACN,CAAC,CAAC,iBAAiB,CAAC;AACf,aAAA,SAAS,CAAC,CAAC,CAAqB,KAAI;YACjC,IAAI,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG;AACjC,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAClD,MAAK;AACD,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,qCAAqC,CAAC;AAC/D,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,oBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;wBAC/C,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACpB,wBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;4BAAE,CAAC,CAAC,KAAK,EAAE;wBACnC;oBACJ;gBACJ;AACJ,YAAA,CAAC,CAAC;AACV,QAAA,CAAC,CAAC;IACV;AAEA;;AAEG;IACH,KAAK,GAAA;QACD,IAAI,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAQ;QACjE,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,mBAAmB,EAAE,GAAG,CAAC;IAC1D;AAEA;;AAEG;IACH,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,2CAA2C,CAAC;IACxE;;;;AAMA;;;AAGC;AACD,IAAA,YAAY,CAAC,QAA8B,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ;YAAE;QACf,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,aAAa,EAAE,QAAQ,CAAC;IAC9E;AAEA;;;AAGC;AACD,IAAA,UAAU,CAAC,QAA8B,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ;YAAE;QACf,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC3E;AAGA;;;AAGC;AACD,IAAA,UAAU,CAAC,QAA8B,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ;YAAE;QACf,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC3E;AAEA;;;AAGF;AACE,IAAA,OAAO,CAAC,QAA8B,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ;YAAE;QACf,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC;IACxE;;;;AAMA;;;;AAIE;AACF,IAAA,qBAAqB,CAAC,MAAqB,EAAA;AACvC,QAAA,OAAO,MAAM,KAAK,aAAa,CAAC,+BAA+B;YAC3D,MAAM,KAAK,aAAa,CAAC,gBAAgB;AACzC,YAAA,MAAM,KAAK,aAAa,CAAC,qBAAqB;IACtD;AAEA;;;;AAIG;AACH,IAAA,oBAAoB,CAAC,KAAmB,EAAA;AACpC,QAAA,OAAO,KAAK,KAAK,YAAY,CAAC,sBAAsB;YAChD,KAAK,KAAK,YAAY,CAAC,gBAAgB;AACvC,YAAA,KAAK,KAAK,YAAY,CAAC,QAAQ;IAEvC;AAEA;;;;AAIE;AACF,IAAA,YAAY,CAAC,SAAgC,EAAA;QACzC,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAG;YAClB,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,KAAK;gBAAE;AAChB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,KAAK;IAChB;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,SAAgC,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QACtD,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAG;YAClB,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,gBAAgB;AACnD,gBAAA,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,sBAAsB;AAC/C,gBAAA,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,qBAAqB;AAC9C,gBAAA,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,QAAQ,CAAC;AACtC,YAAA,IAAI,CAAC,KAAK;gBAAE;AAChB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,KAAK;IAChB;AAEA;;;AAGE;AACF,IAAA,SAAS,CAAC,SAAiC,EAAA;QACvC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS;YAAE;QACrD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,kBAAkB,EAAE,SAAS,CAAC;IACpF;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,QAA8B,EAAA;QACzC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ;YAAE;QACpD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,uBAAuB,EAAE,QAAQ,CAAC;IACxF;AAEA;;;AAGE;AACF,IAAA,cAAc,CAAC,QAA8B,EAAA;QACzC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ;YAAE;QACpD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,uBAAuB,EAAE,QAAQ,CAAC;IACxF;8GArdS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,wEAJrB,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAId,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;;;MCIY,4BAA4B,CAAA;AATzC,IAAA,WAAA,GAAA;AAWU,QAAA,IAAA,CAAA,aAAa,GAAuC,SAAS,CAAiB,eAAe,yDAAC;AAC9F,QAAA,IAAA,CAAA,sBAAsB,GAAuC,SAAS,CAAiB,wBAAwB,kEAAC;AAChH,QAAA,IAAA,CAAA,gBAAgB,GAAuC,SAAS,CAAiB,kBAAkB,4DAAC;AACpG,QAAA,IAAA,CAAA,eAAe,GAAyC;AAC9D,YAAA,IAAI,CAAC,gBAAgB;AACrB,YAAA,IAAI,CAAC,aAAa;AAClB,YAAA,IAAI,CAAC;SACN;AACO,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAA,IAAA,CAAA,WAAW,GAAkB,IAAI,OAAO,EAAQ;AAChD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACtC,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,KAAK,yDAAC;AACrC,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAA2C,WAAW,2DAAC;QAC7E,IAAA,CAAA,SAAS,GAAG,MAA4B;AAChD,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,gBAAA,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC5B,oBAAA,KAAK,KAAK;wBACR,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE;AAClD,oBAAA,KAAK,WAAW;wBACd,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE;;YAEhD;AACA,YAAA,OAAO,EAAE;AACX,QAAA,CAAC;AACQ,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAA8B;QACrD,IAAA,CAAA,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAuB;AACnC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,KAAK,uDAAC;AACnC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,IAAI,sDAAC;AACjC,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAA2B,SAAS,2DAAC;AAC5D,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAU,KAAK,wDAAC;AACpC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAChC,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAU,KAAK,mDAAC;AAC/B,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAU,KAAK,0DAAC;AACtC,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,KAAK,yDAAC;AACrC,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAU,KAAK,6DAAC;QACxC,IAAA,CAAA,cAAc,GAAY,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW;AAC7E,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,IAAI,oDAAC;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAU,IAAI,2DAAC;AACrC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAe,IAAI,CAAC,eAAe,EAAE,KAAK,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC;QACrG,IAAA,CAAA,YAAY,GAAG,MAAe,IAAI,CAAC,eAAe,EAAE,KAAK,KAAK;AAC9D,QAAA,IAAA,CAAA,OAAO,GAAG,MAAe,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC5E,QAAA,IAAA,CAAA,cAAc,GAAG,MAAe,IAAI,CAAC,oBAAoB,EAAE,CAAC,MAAM,GAAG,CAAC;AACtE,QAAA,IAAA,CAAA,eAAe,GAAG,MAAe,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;QAC9E,IAAA,CAAA,gBAAgB,GAAG,MAAc;YACzC,IAAI,MAAM,GAAG,IAAI;YACjB,IAAI,CAAC,oBAAoB,EAAE,EAAE,OAAO,CAAC,CAAC,IAAG;AACvC,gBAAA,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,EAAE;oBAC9E,MAAM,GAAG,KAAK;oBACd;gBACF;AACF,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC/D,QAAA,CAAC;QACS,IAAA,CAAA,iBAAiB,GAAG,MAAc;YAC1C,IAAI,SAAS,GAAG,IAAI;YACpB,IAAI,CAAC,oBAAoB,EAAE,EAAE,OAAO,CAAC,CAAC,IAAG;AACvC,gBAAA,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,EAAE;oBAC9E,SAAS,GAAG,KAAK;oBACjB;gBACF;AACF,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAClE,QAAA,CAAC;QACS,IAAA,CAAA,wBAAwB,GAAG,MAAc;AACjD,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,KAAK,EAAE;AACpC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACzC,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpB,IAAI,MAAM,GAAG,IAAI;AACjB,oBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;wBAChB,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,aAAa,EAAE;4BAC1C,MAAM,GAAG,KAAK;4BACd;wBACF;AACF,oBAAA,CAAC,CAAC;AACF,oBAAA,OAAO,MAAM;gBACf;YACF;AACA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;QACS,IAAA,CAAA,YAAY,GAAG,MAAc;AACrC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE;YACtC,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,EAAE,KAAK,KAAK,YAAY,CAAC,aAAa;AACzE,QAAA,CAAC;QACS,IAAA,CAAA,YAAY,GAAG,MAAc;AACrC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE;YACzC,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI;AAC9F,gBAAA,YAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACnF,QAAA,CAAC;QACS,IAAA,CAAA,cAAc,GAAG,MAAc;AACvC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE;YACzC,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI;AAC9F,gBAAA,YAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACnF,QAAA,CAAC;QACS,IAAA,CAAA,WAAW,GAAG,MAAc;AACpC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE;YACzC,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI;AACzG,QAAA,CAAC;AA8HF,IAAA;IA5HC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,WAAW,EAAE;AAC1C,YAAA,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE;AACvB,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;iBAChC,SAAS,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AACpC,YAAA,CAAC,CAAC;QACN;IACF;IAGA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;IAC7B;AAGA;;;AAGG;IACO,kBAAkB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE;QACpB;aAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5B;AACA,QAAA,OAAO,SAAS;IAClB;AAEA;;;AAGG;IACO,oBAAoB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AACf,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,IAAI,IAAI,EAAE;gBACR,OAAO,CAAC,IAAI,CAAC;YACf;QACF;aAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE;QACzB;AACA,QAAA,OAAO,EAAE;IACX;AAEA;;;AAGE;IACQ,kBAAkB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,KAAK,CAAC;IAC7E;AAEA;;;AAGE;AACQ,IAAA,WAAW,CAAC,OAAwB,EAAA;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,IAAG;AACzC,YAAA,MAAM,IAAI,GAAG,WAAW,EAAE;YAC1B,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,SAAS,EAAE;AAChB,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACzB;YACF;AACF,QAAA,CAAC,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE;IACrB;AAEA;;;AAGG;AACO,IAAA,YAAY,CAAC,OAAuB,EAAA;AAC5C,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC;AAC5E,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,qBAAqB,CAAC;IACtF;AAEA;;;AAGG;IACO,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;AAC5D,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE;AAAE,YAAA,OAAO,CAAC;QAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,EAAE;QAC1D,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,cAAc,CAAC,MAAM,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;QAC/C;AACA,QAAA,OAAO,CAAC;IACV;AAEA;;;AAGG;AACO,IAAA,OAAO,CAAC,KAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5C;AAEA;;;;AAIG;AACO,IAAA,IAAI,CAAC,IAAyB,EAAE,SAAA,GAAqB,KAAK,EAAA;AAClE,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC;QAC5D;IACF;AAEA;;;;AAIC;IACS,cAAc,CAAC,IAAyB,EAAE,IAAY,EAAA;AAC9D,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;QACtD;IACF;8GA/NW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,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,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBzC,0yQAiMC,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjLW,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gNAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,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,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,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,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAG3E,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBATxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,0yQAAA,EAAA;2EAKD,eAAe,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACN,wBAAwB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAC9B,kBAAkB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEyDvG,MAAO,wBAAyB,SAAQ,sBAAsB,CAAA;AApBpE,IAAA,WAAA,GAAA;;AAsBW,QAAA,IAAA,CAAA,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAY,eAAe,CAAC;QAC9D,IAAA,CAAA,OAAO,GAAG,MAAM,EAAE;QAClB,IAAA,CAAA,OAAO,GAAG,MAAM,EAAU;AAE3B,QAAA,IAAA,CAAA,WAAW,GAAkB,IAAI,OAAO,EAAQ;AAChD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAE5B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,EAAC,YAAsC,EAAC;AACxD,QAAA,IAAA,CAAA,UAAU,GAA8B,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,0BAA0B,CAAC,YAAY,EAAE;AACpH,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAS,IAAI,+CAAC;AAC1B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAS,IAAI,iDAAC;AAC5B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAU,KAAK,gDAAC;QAE7B,IAAA,CAAA,kBAAkB,GAAc,EAAE;QAClC,IAAA,CAAA,YAAY,GAAyB,EAAE;AACvC,QAAA,IAAA,CAAA,SAAS,GAA6B;AAC9C,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,YAAY,EAAE,GAAG;SAClB;QACS,IAAA,CAAA,wBAAwB,GAAY,KAAK;QACzC,IAAA,CAAA,mBAAmB,GAAY,KAAK;AACpC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAU,KAAK,yDAAC;AACtC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAU,KAAK,wDAAC;QACrC,IAAA,CAAA,IAAI,GAAgC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO;AAmsBrF,IAAA;IAhsBC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;AACtB,gBAAA,MAAM,GAAG,GACP,IAAI,CAAC,cAAc,CAAC,UAAU;oBAC9B,2BAA2B;AAC3B,qBAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC7B,SAAS;oBACT,IAAI,CAAC,UAAU,CAAC,KAAK;oBACrB,MAAM;AACN,oBAAA,IAAI,CAAC,UAAU,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAEzB;QACF;;AAGA,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC3C,QAAQ,EACR,SAAS,EACT,CAAC,CAAQ,KAAI;YACX,MAAM,KAAK,GAAG,CAAiB;AAC/B,YAAA,IAAI,CAAC,KAAK;gBAAE;AACZ,YAAA,IAAI,KAAK,CAAC,IAAI,EAAE;AACd,gBAAA,IAAI;oBACF,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;oBACjC,IAAI,IAAI,EAAE;AACR,wBAAA,QAAQ,IAAI,CAAC,IAAI;AACf,4BAAA,KAAK,WAAW;AACd,gCAAA,IAAI,CAAC,SAAS,CACZ,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,CACb;gCACD;AACF,4BAAA,KAAK,UAAU;AACb,gCAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gCACvB;AACF,4BAAA,KAAK,YAAY;gCACf,IAAI,CAAC,cAAc,CACjB,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,MAAM,CACZ;gCACD;AACF,4BAAA,KAAK,MAAM;gCACT,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK;gCAChC,IAAI,CAAC,eAAe,EAAE;gCACtB;;AAEJ,wBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;oBACpC;gBACF;AAAE,gBAAA,MAAM;gBACR;YACF;AACF,QAAA,CAAC,CACF;;AAGD,QAAA,IAAI,CAAC;AACF,aAAA,OAAO,CAAC;AACP,YAAA,WAAW,CAAC,MAAM;AAClB,YAAA,WAAW,CAAC,KAAK;AACjB,YAAA,WAAW,CAAC,MAAM;AAClB,YAAA,WAAW,CAAC,KAAK;AACjB,YAAA,WAAW,CAAC,MAAM;SACnB;AACA,aAAA,IAAI,CAACC,WAAS,CAAC,IAAI,CAAC,WAAW,CAAC;aAChC,SAAS,CAAC,MAAM,IAAG;AAClB,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AACnD,gBAAA,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;oBAC7B,IAAI,CAAC,6BAA6B,EAAE;gBACtC;YACF;AACF,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;AAEA;;AAEC;IACS,mBAAmB,GAAA;AAC3B,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,mBAAmB;AACpD,QAAA,IAAI,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE;IAChC;AAIA;;AAEG;IACK,6BAA6B,GAAA;AACnC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;QAC1C,IAAI,aAAa,EAAE;YACjB,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;gBACvD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC;gBACpD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;AACvD,gBAAA,IAAI,aAAa,CAAC,MAAM,EAAE;oBACxB,aAAa,CAAC,KAAK,EAAE;gBACvB;AACA,gBAAA,aAAa,CAAC,IAAI,GAAG,MAAM;AAC3B,gBAAA,aAAa,CAAC,YAAY,GAAG,KAAK;AAClC,gBAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;YACtC;iBAAO;AACL,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;oBAC7E,aAAa,CAAC,IAAI,EAAE;gBACtB;qBAAO,IAAI,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE;oBAC3D,aAAa,CAAC,KAAK,EAAE;gBACvB;AACA,gBAAA,aAAa,CAAC,IAAI,GAAG,MAAM;AAC3B,gBAAA,aAAa,CAAC,YAAY,GAAG,IAAI;AACjC,gBAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;YACvC;QACF;IACF;AAEA;;AAEG;IAEO,KAAK,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QACrB;QACA,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QACxB,CAAC,EAAE,GAAG,CAAC;IACT;AAEA;;;AAGG;AACH,IAAA,QAAQ,CAAC,EAAU,EAAA;AACjB,QAAA,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC;AACvB,YAAA,OAAO;QAET,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;AAC1B,YAAA,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;AACvB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;iBACjE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;gBACrD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,EAAE,CAAC;;AACpD,gBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7B;;AACE,YAAA,IAAI,CAAC,aAAa,CAChB,IAAI,CAAC,cAAc,CAAC,UAAU;gBAC9B,+BAA+B,GAAG,EAAE,CAAC;IAE3C;AAEA;;;AAGG;AACH,IAAA,aAAa,CAAC,GAAW,EAAA;QACvB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,KAAK,aAAa;AACnD,YAAA,OAAO;;QAET,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1B,QAAA,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;QACvB;;QAEA,IAAI,KAAK,GAAG,EAAE;QACd,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACZ,CAAC,IAAI,CAAC;YACN,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACzD,gBAAA,KAAK,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;YACnB;AACA,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEpB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;AACtB,gBAAA,IAAI;oBACF,KAAK,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBACvD;AAAE,gBAAA,MAAM;gBACR;gBAEA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;AAC1C,gBAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,oBAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;AAC9B,oBAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,wBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,wBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BAC1C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBAC7C;oBACF;gBACF;YAGF;QACF;;QAEA,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;AAChC,YAAA,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACZ,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YACvF;QACF;QAEA,IAAI,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACrD,QAAA,IAAI,cAAc,KAAK,IAAI,EAAE;;AAE3B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;QACvB;aAAO;YACL,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,MAAK;;AAE7C,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC;;AAE1D,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACnB,YAAA,CAAC,CAAC;QACJ;IACF;AAEA;;AAEG;IACI,SAAS,CACd,EAAU;AACV,IAAA,MAAc;AACd,IAAA,MAAc;AACd,IAAA,IAAY;AACZ,IAAA,KAAa;AACb,IAAA,QAAgB;AAChB,IAAA,UAAkB;AAClB,IAAA,IAAY;AACZ,IAAA,MAAc;AACd,IAAA,MAAc;AACd,IAAA,MAAc;AACd,IAAA,iBAAyB;AACzB,IAAA,GAAW;AACX,IAAA,YAAoB;AACpB,IAAA,YAAoB;AACpB,IAAA,SAAiB;AACjB,IAAA,YAAoB;AACpB,IAAA,WAAmB;AACnB,IAAA,OAAgB;;;AAGhB,QAAA,IAAI,MAAM,KAAK,qBAAqB,EAAE;AACpC,YAAA,IAAI,CAAC;iBACF,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB;AAC7C,iBAAA,WAAW;iBACX,SAAS,CAAC,MAAK;gBACd,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;AACjC,YAAA,CAAC,CAAC;YACJ;QACF;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;QACxB;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,EAAE;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI;AACxE,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI;AACxE,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,QAAQ;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,UAAU;QACzC,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,GAAG,iBAAiB;AACvD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,YAAY;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,SAAS;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,YAAY;QAC7C,IAAI,CAAC,YAAY,CAAC,UAAU;YAC1B,SAAS;AACT,iBAAC,KAAK,KAAK,YAAY,CAAC,sBAAsB;AAC5C,oBAAA,KAAK,KAAK,YAAY,CAAC,gBAAgB,CAAC;QAC5C,IAAI,SAAS,EAAE;YACb,IAAI,WAAW,GAAG,EAAE;YACpB,QAAQ,YAAY,GAAG,YAAY,GAAG,KAAK;gBACzC,KAAK,YAAY,CAAC,gBAAgB;oBAChC,WAAW,GAAG,eAAe;oBAC7B;gBACF,KAAK,YAAY,CAAC,sBAAsB;oBACtC,WAAW,GAAG,eAAe;oBAC7B;gBACF,KAAK,YAAY,CAAC,QAAQ;oBACxB,WAAW,GAAG,UAAU;oBACxB;gBACF,KAAK,YAAY,CAAC,aAAa;oBAC7B,WAAW,GAAG,UAAU;oBACxB;AACF,gBAAA;oBACE,WAAW,GAAG,cAAc;oBAC5B;;AAEJ,YAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,GAAG,WAAW;QACpD;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,WAAW;AAC3C,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,OAAO;;AAGnC,QAAA,IAAI,CAAC,YAAY,CAAC,mBAAmB,GAAG,SAAS;QACjD,IAAI,YAAY,EAAE;YAChB,IAAI,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;AACnC,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AAChC,gBAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AACnB,oBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtD,gBAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC;AACjE,gBAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;oBACnB,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;YACrD;AACA,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,IAAI,CAAC,YAAY,CAAC,mBAAmB,GAAG,KAAK,CAAC,CAAC,CAAC;QACxE;;QAGA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/B,cAAE,IAAI,CAAC,YAAY,CAAC;AACpB,cAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;;AAG7B,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AACjE,YAAA,IAAI,CAAC,CAAC,OAAO,EAAE;gBACb,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK;AACtC,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YACpC;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,kBAAkB,EAAE;YACpE,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/C,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAEpB,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IACpC;AAEA;;AAEG;IACO,IAAI,GAAA;QACZ,IAAI,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAQ;QACjE,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,kBAAkB,EAAE,GAAG,CAAC;IACvD;AAEA;;AAEG;IACO,OAAO,GAAA;QACf,IAAI,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAQ;QACjE,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,qBAAqB,EAAE,GAAG,CAAC;IAC1D;AAIA;;AAEG;IACO,YAAY,GAAA;QACpB,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YAC5B,IAAI,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAQ;YACjE,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,uCAAuC,EAAE,GAAG,CAAC;AAC1E,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;QACtB;IACF;AAEA;;AAEG;IACO,gBAAgB,GAAA;QACxB,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE;YACT,IAAI,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAQ;YACjE,CAAC,EAAE,aAAa,CAAC,WAAW,CAC1B,2CAA2C,EAC3C,GAAG,CACJ;AACD,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;QACtB;IACF;AAEA;;;AAGG;AACO,IAAA,YAAY,CAAC,IAA+B,EAAA;AACpD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE;AACpB,YAAA,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,cAAc,CAAC,UAAU;AAC9B,gBAAA,gCAAgC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,UAAU,EACnF,QAAQ,CACT;QACH;aAAO;YACL,IAAI,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAQ;AACjE,YAAA,CAAC,EAAE,aAAa,CAAC,WAAW,CAC1B,iCAAiC,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,EACnD,GAAG,CACJ;QACH;IACF;AAEA;;AAEG;IACK,eAAe,GAAA;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG;cAC3C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU;AACzC,cAAE,IAAI,CAAC,SAAS;AAClB,QAAA,IACE,CAAC,KAAK;YACN,KAAK,CAAC,MAAM,KAAK,CAAC;YAClB,KAAK,KAAK,GAAG,EAAE;YACf,IAAI,CAAC,6BAA6B,EAAE;QACtC;aAAO;AACL,YAAA,IAAI,MAAM,GAAG,IAAI,mBAAmB,EAAE;AACtC,YAAA,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE;AAChE,YAAA,MAAM,CAAC,IAAI,GAAG,KAAK;AACnB,YAAA,MAAM,CAAC,KAAK,GAAG,CAAC;AAChB,YAAA,IAAI,CAAC;iBACF,KAAK,CAAC,MAAM;iBACZ,SAAS,CAAC,CAAC,IAAG;gBACb,IAAI,CAAC,CAAC,CAAC,OAAO;oBAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;qBAC9C;oBACH,IAAI,YAAY,GAAG,CAAC;AACpB,oBAAA,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/C,wBAAA,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAG;AACnC,4BAAA,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK;4BACnB,IAAI,KAAK,GAAG,CAAC;gCAAE,KAAK,IAAI,CAAC;iCACpB,IAAI,KAAK,GAAG,CAAC;gCAAE,KAAK,IAAI,CAAC;iCACzB,IAAI,KAAK,GAAG,CAAC;gCAAE,KAAK,IAAI,CAAC;4BAC9B,IAAI,YAAY,GAAG,KAAK;gCAAE,YAAY,GAAG,KAAK;AAC9C,4BAAA,CAAC,CAAC,KAAK,GAAG,KAAK;AACjB,wBAAA,CAAC,CAAC;AACF,wBAAA,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,YAAY;AAC1C,wBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO;AAC/C,wBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;oBACzD;oBACA,IAAI,CAAC,6BAA6B,EAAE;AACpC,oBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;gBACpC;AACF,YAAA,CAAC,CAAC;QACN;IACF;AAIA;;AAEG;AACO,IAAA,KAAK,CAAC,UAAkB,EAAA;QAChC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,6BAA6B,EAAE;AAC7D,YAAA,SAAS,EAAE,kBAAkB;AAC7B,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,IAAI,EAAE;AACJ,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,KAAK,EAAE,MAAM;AACd,SAAA,CAAC;QACF,CAAC,CAAC,iBAAiB,CAAC;AACjB,aAAA,SAAS,CAAC,CAAC,CAAmC,KAAI;YACjD,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;YACjD,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE;oBAClC,IAAI,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAQ;AACjE,oBAAA,CAAC,EAAE,aAAa,CAAC,WAAW,CAC1B,4BAA4B,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,EAC9C,GAAG,CACJ;gBACH;qBAAO;AACL,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAE;gBACtD;YACF;YAEA,CAAC,CAAC,KAAK,EAAE;AACX,QAAA,CAAC,CAAC;IACN;AAGA;;;;;AAKC;AACO,IAAA,KAAK,CAAC,GAAW,EAAE,IAAA,GAAe,IAAI,EAAA;AAC5C,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;QAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;QACnC,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC;IAClC;AAEA;;;AAGG;AACK,IAAA,WAAW,CAAC,GAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAC1B,YAAA,OAAO;;QAET,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AACxB,YAAA,OAAO;;AAET,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CACtC,CAAC,IAAG;YACF,IAAI,CAAC,CAAC,CAAC,OAAO;gBAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9C,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU;;AAE1B,gBAAA,QAAQ,CAAC,IAAI,GAAG,GAAG;iBAChB;AACH,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC5C,oBAAA,UAAU,EAAE,eAAe;AAC3B,oBAAA,SAAS,EAAE,WAAW;AACtB,oBAAA,SAAS,EAAE,KAAK;AAChB,oBAAA,YAAY,EAAE,KAAK;AACnB,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,IAAI,EAAE;AACJ,wBAAA,GAAG,EAAE,GAAG;AACR,wBAAA,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;AAChB,qBAAA;AACD,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,MAAM,EAAE;AACT,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACN;AAEA;;AAEI;IACM,WAAW,GAAA;QACnB,IAAI,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE;AACvC,QAAA,IAAI,CAAC;AACF,aAAA,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU;aACrC,SAAS,CAAC,CAAC,IAAG;AACb,YAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,CAAC,OAAO,KAAK,wEAAwE;oBACxF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,+PAA+P,EAAE,IAAI,EAAE,YAAY,CAAC;;oBAE7S,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YACvC;iBAAO;AACL,gBAAA,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,EAC7C,UAAU,EACV,QAAQ,EACR,GAAG,CAAC;gBACR;;AACE,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,sDAAsD,CAAC;YACnF;AACF,QAAA,CAAC,CAAC;IACN;AAGA;;;;;AAKG;AACM,IAAA,IAAI,CAAC,UAAkB,EAAE,KAAc,EAAE,SAAmB,EAAA;QACnE,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,IAAI,CAAC,OAAO;AAAE,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;;AAC1C,gBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC;QAC3C;aAAO;AACL,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE,IAAI,aAAa,GAAG,UAAU,EAAE,QAAQ,CAAC;QACxF;IACF;AAEA;;;;AAIG;IACK,YAAY,CAAC,UAAkB,EAAE,KAAc,EAAA;AACrD,QAAA,IAAI,CAAC,UAAU;YAAE;QACjB,qBAAqB,CAAC,YAAY,CAChC,IAAI,CAAC,aAAa,CAAC,WAAW,EAC9B,IAAI,CAAC,cAAc,EACnB,UAAU,EACV,KAAK,EACL,IAAI,CAAC,UAAU,CAAC,aAAa,EAC7B,IAAI,CAAC,UAAU,CAAC,iBAAiB,EACjC,IAAI,CAAC,UAAU,CAAC,KAAK,EACrB,IAAI,CAAC,UAAU,CAAC,aAAa,EAC7B,IAAI,CAAC,UAAU,CAAC,uBAAuB,CACxC;IACH;AAEA;;;;AAIG;AACM,IAAA,cAAc,CACrB,UAAkB,EAClB,OAAmC,0BAA0B,CAAC,YAAY,EAC1E,KAAA,GAAgB,IAAI,EACpB,SAAiB,IAAI,EACrB,cAAsB,IAAI,EAC1B,SAAkB,IAAI,EAAA;AAGtB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,0BAA0B,EAAE;AAClD,YAAA,SAAS,EAAE,iCAAiC;AAC5C,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,IAAI,EAAE;AACJ,gBAAA,UAAU,EAAE,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,UAAU;AACvD,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,WAAW,EAAE,WAAW;AACxB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa;AAC5C,gBAAA,uBAAuB,EAAE,IAAI,CAAC,UAAU,CAAC;AAC1C,aAAA;AACD,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;SACf,CAAC,CAAC,WAAW;AACX,aAAA,SAAS,CAAC,CAAC,CAA+B,KAAI;AAC7C,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;AACrB,gBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;YAC7B;AACF,QAAA,CAAC,CAAC;IACN;AAEA;;;AAGG;AACO,IAAA,aAAa,CAAC,IAAyB,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,QAAQ,EAAE;AACtF,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qEAAqE,CAAC;YAC9F;QACF;QACA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACnE;AAEA;;AAEG;IACO,SAAS,GAAA;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,CAAC;QAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC;AACxD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY;AACjC,YAAA,CAAC,GAAG,CAAC;aACJ,CAAC,KAAK;mBACF,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,YAAY,CAAC,gBAAgB,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,YAAY,CAAC,sBAAsB;AACjI,mBAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,yBAAyB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClI,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;IACO,MAAM,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,uBAAuB,EAAE,IAAI,CAAC,YAAY,CAAC;AAC7F,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YAClC,IAAI,CAAC,KAAK,EAAE;QACd;IACF;8GA/tBW,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,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,cAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAnBnB,WAAW,CAAC,YAAY,EAAE,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7D5C,qtZAkQqB,EAAA,MAAA,EAAA,CAAA,4meAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/LjB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gNAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,+bAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,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,UAAA,EAAA,IAAA,EAChB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,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,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEhB,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,EAAA,aAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAD5B,WAAW,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIF,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBApBpC,SAAS;AACF,YAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,EAAE,EAAA,eAAA,EAG3B,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP;wBACP,gBAAgB;wBAChB,eAAe;wBACf,gBAAgB;wBAChB,aAAa;wBACb,aAAa;wBACb,gBAAgB;wBAChB,oBAAoB;wBACpB,gBAAgB;wBAChB,gBAAgB;wBAChB,WAAW;wBACX;AACD,qBAAA,EAAA,QAAA,EAAA,qtZAAA,EAAA,MAAA,EAAA,CAAA,4meAAA,CAAA,EAAA;2EAIsD,eAAe,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MExE3D,qBAAqB,CAAA;AAChC;;;;;;;;;;;AAWG;AACH,IAAA,OAAO,YAAY,CACjB,aAA4B,EAC5B,cAA8B,EAC9B,UAAkB,EAClB,KAAc,EACd,aAAoC,EACpC,iBAAmC,EACnC,KAAiB,EACjB,aAAuB,EACvB,uBAAiC,EAAA;AAEjC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE;AAC9B,YAAA,aAAa,CAAC,KAAK,CAAC,uEAAuE,CAAC;AAC5F,YAAA,OAAO,SAAS;QAClB;QACA,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,aAAa,CAAC,KAAK,CAAC,uBAAuB,CAAC;AAC5C,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAClD,YAAA,SAAS,EAAE,WAAW;AACtB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,IAAI,EAAE;AACJ,gBAAA,EAAE,EAAE,UAAU;AACd,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,aAAa,EAAE,aAAa;AAC5B,gBAAA,iBAAiB,EAAE,iBAAiB;AACpC,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,aAAa,EAAE,aAAa;AAC5B,gBAAA,uBAAuB,EAAE;AAC1B,aAAA;AACD,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE;AACT,SAAA,CAAC;IACJ;AAEA;;;AAGG;IACH,OAAO,kBAAkB,CAAC,KAAa,EAAA;QACrC,MAAM,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACZ,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9B;AACA,QAAA,OAAO,KAAK;IACd;AAED;;MC1CY,8BAA8B,CAAA;AAjB3C,IAAA,WAAA,GAAA;AAkBW,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAmB,UAAU,CAAC;QAC3D,IAAA,CAAA,OAAO,GAAG,MAAM,EAA4B;AAC7C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAExC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAU,KAAK,gDAAC;AAC7B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAmD,SAAS,kDAAC;QAE5E,IAAA,CAAA,mBAAmB,GAAG,mBAAmB;QAC5C,IAAA,CAAA,YAAY,GAAS,YAAY,EAAE;AAChC,QAAA,IAAA,CAAA,iBAAiB,GAAuC,CAAC,QAAQ,KAAI;YAC7E,IAAI,CAAC,IAAI,CAAC,mBAAmB;AAAE,gBAAA,OAAO,EAAE;AACxC,YAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;gBACxD,IAAI,QAAQ,GAAG,YAAY,EAAE;AAAE,oBAAA,OAAO,sBAAsB;qBACvD,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE;AAAE,oBAAA,OAAO,uBAAuB;;AAC3E,oBAAA,OAAO,cAAc;YAC5B;AACA,YAAA,OAAO,EAAE;AACX,QAAA,CAAC;AACS,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,QAAc,KAAa;YACzD,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;AACrH,QAAA,CAAC;AACS,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,KAAK,qDAAC;AA+E5C,IAAA;AA5EC;;;;;AAKG;AACH,IAAA,MAAM,CAAC,KAA2C,EAChD,MAA4C,EAC5C,IAAA,GAAa,YAAY,EAAE,EAAA;AAC3B,QAAA,IAAI,MAAM,EAAE,MAAM,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC;AACA,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACpD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;QACjD;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAChC,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,UAAU,GAAG,IAAI;AAC1B,YAAA,QAAQ,CAAC,QAAQ,GAAG,IAAI;YACxB,QAAQ,CAAC,gBAAgB,EAAE;QAC7B;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IACpC;AAGA;;;AAGG;AACO,IAAA,YAAY,CAAC,IAAoB,EAAA;AACzC,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;gBACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACvD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AACzC,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC/C,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;AAClC,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,oBAAA,QAAQ,CAAC,QAAQ,GAAG,KAAK;oBACzB,QAAQ,CAAC,gBAAgB,EAAE;gBAC7B;YACF;QACF;aAAO,IAAI,IAAI,EAAE;AACf,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,IAAI,YAAY,CACd,QAAQ,CAAC,IAAY,CAAC,EACtB,QAAQ,CAAC,IAAY,CAAC,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAY;AAChC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,YAAA,QAAQ,CAAC,QAAQ,GAAG,IAAI;YACxB,QAAQ,CAAC,gBAAgB,EAAE;QAC7B;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAC9B;IACF;AAEA;;;AAGG;AACO,IAAA,aAAa,CAAC,SAA6C,EAAA;AACnE,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;AAChE,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;QACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC7C,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,IAAI;AACzC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAChC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;AAClC,YAAA,QAAQ,CAAC,QAAQ,GAAG,KAAK;QAC3B;AACA,QAAA,QAAQ,CAAC,UAAU,GAAG,OAAO;QAC7B,QAAQ,CAAC,gBAAgB,EAAE;AAC3B,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO;IAC7B;8GApGW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,0XCjC3C,k0CA4BM,EAAA,MAAA,EAAA,CAAA,+VAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDLFE,YAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gNAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,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,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,EAChB,WAAW,6YACX,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,8BAChB,kBAAkB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGT,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAjB1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,cAGvB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACPI,YAAU;wBACV,eAAe;wBACf,gBAAgB;wBAChB,WAAW;wBACX,cAAc;wBACd,aAAa;wBACb,gBAAgB;wBAChB;AACD,qBAAA,EAAA,QAAA,EAAA,k0CAAA,EAAA,MAAA,EAAA,CAAA,+VAAA,CAAA,EAAA;sEAGwD,UAAU,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;METxD,4BAA4B,CAAA;AATzC,IAAA,WAAA,GAAA;QAUW,IAAA,CAAA,OAAO,GAAG,MAAM,EAA+B;AAChD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAExC,QAAA,IAAA,CAAA,QAAQ,GAAgC,IAAI,2BAA2B,EAAE;QAE5E,IAAA,CAAA,SAAS,GAAG,MAAe,IAAI,CAAC,QAAQ,CAAC,SAAS;AAElD,QAAA,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAU,KAAK,gEAAC;AAwMpD,IAAA;AAtMC;;;;AAIC;IACD,MAAM,CAAC,MAA+B,EAAE,QAAiB,EAAA;AACvD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,QAAQ;QACjC,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;AACzB,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAG;gBACjB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;gBAC1B,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;gBACvB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;gBACpE,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;gBAChE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACxB,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AACxB,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,aAAa,EAAE,IAAI;AACnB,wBAAA,wBAAwB,EAAE,IAAI;AAC9B,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,KAAK,EAAE,KAAK;AACb,qBAAA,CAAC;gBACJ;AACF,YAAA,CAAC,CAAC;QACJ;QACA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAChG,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM;AACtH,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IACpC;AAIA;;;;AAIG;IACO,GAAG,CAAC,KAA8B,EAAE,IAAwB,EAAA;AACpE,QAAA,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK;AAChC,QAAA,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,KAAK;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;AACtE,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,OAAO,GAAG,KAAK;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBACxC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE;AACrC,oBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;oBAC5C,OAAO,GAAG,IAAI;gBAChB;AACF,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,OAAO,EAAE;gBACZ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YACtC;QACF;QACA,IAAI,CAAC,KAAK,EAAE;IACd;AAEA;;;;AAIG;AACO,IAAA,OAAO,CAAC,KAA8B,EAAE,KAAA,GAAiB,IAAI,EAAA;AACrE,QAAA,KAAK,CAAC,aAAa,GAAG,SAAS;AAC/B,QAAA,KAAK,CAAC,wBAAwB,GAAG,SAAS;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;AAC1E,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACZ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,OAAO,GAAG,KAAK;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBACnC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE;AACtC,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;oBACxC,OAAO,GAAG,IAAI;gBAChB;AACF,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,OAAO,EAAE;gBACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC;QACF;QACA,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,KAAK,EAAE;QACd;IACF;AAEA;;AAEG;IACK,KAAK,GAAA;QACX,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACvC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAG;gBACnC,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,IAAI,EAAE;AACjC,oBAAA,IAAI,CAAC,CAAC,aAAa,EAAE;wBACnB,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;wBAC5E,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC9E;yBAAO;AACL,wBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,SAAS;AAClC,wBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;oBAClC;gBACF;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,MAAM,EAAE;oBAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,aAAa,IAAI,IAAI;gBAChD;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,MAAM,EAAE;oBAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,aAAa,IAAI,IAAI;gBAChD;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,EAAE;oBAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,aAAa,IAAI,IAAI;gBAC9C;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,OAAO,EAAE;oBAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,aAAa,IAAI,IAAI;gBAChD;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,MAAM,EAAE;oBAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,aAAa,IAAI,IAAI;gBAChD;AACF,YAAA,CAAC,CAAC;QACJ;QACA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAG;gBAC/B,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,IAAI,EAAE;AACjC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,SAAS;AAClC,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;gBAClC;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,MAAM,EAAE;AAC1C,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;gBAClC;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,MAAM,EAAE;AAC1C,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;gBAClC;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,EAAE;AAChD,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS;gBAChC;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,OAAO,EAAE;AAC3C,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;gBAClC;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,MAAM,EAAE;AAC1C,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;gBAClC;AACF,YAAA,CAAC,CAAC;QACJ;QACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAClC;AAEA;;;;AAIG;IACO,KAAK,CAAC,KAAA,GAAgB,CAAC,CAAC,EAAA;QAChC,IAAI,SAAS,GAAG,CAAC;QACjB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAG;YACnC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE;gBACrC,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,IAAI,EAAE;AACjC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,SAAS;AAClC,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;gBAClC;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,MAAM,EAAE;AAC1C,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;gBAClC;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,MAAM,EAAE;AAC1C,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;gBAClC;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,EAAE;AAChD,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS;gBAChC;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,OAAO,EAAE;AAC3C,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;gBAClC;qBAAO,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,MAAM,EAAE;AAC1C,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;gBAClC;AACA,gBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC;AACtB,gBAAA,SAAS,EAAE;YACb;AACF,QAAA,CAAC,CAAC;QACF,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClC;AACA,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE;AAC7B,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,SAAS;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;IAClC;AAEA;;;AAGG;AACH,IAAA,OAAO,CAAC,IAAiC,EAAA;QACvC,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACpC;IACF;AAEA;;AAEG;IACH,IAAI,GAAA;QACF,OAAO,IAAI,CAAC,QAAQ;IACtB;8GA/MW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBzC,k+EAuDM,EAAA,MAAA,EAAA,CAAA,2/cAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjCMA,YAAU,+hGAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,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,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,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,EACpF,gBAAgB,kIAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAE3B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBATxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAACD,YAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa;wBACpF,gBAAgB,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,k+EAAA,EAAA,MAAA,EAAA,CAAA,2/cAAA,CAAA,EAAA;;;AEOnC,MAAO,0BACT,SAAQ,sBAAsB,CAAA;AAPlC,IAAA,WAAA,GAAA;;AASa,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAe,WAAW,qDAAC;AAChD,QAAA,IAAA,CAAA,MAAM,GAAG,SAAS,CAA+B,QAAQ,kDAAC;AAC1D,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAiC,UAAU,oDAAC;AAC/D,QAAA,IAAA,CAAA,WAAW,GAAkB,IAAI,OAAO,EAAQ;AAChD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACjD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACpC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAEhD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAuB,oBAAoB,CAAC,IAAI,yDAAC;AACpE,QAAA,IAAA,CAAA,QAAQ,GAAoC,IAAI,mBAAmB,EAAE;AACrE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAU,KAAK,sDAAC;AACnC,QAAA,IAAA,CAAA,YAAY,GAAwB,IAAI,mBAAmB,EAAE;QAC7D,IAAA,CAAA,qBAAqB,GAAY,KAAK;QACtC,IAAA,CAAA,gBAAgB,GAAY,KAAK;QACjC,IAAA,CAAA,sBAAsB,GAAY,KAAK;QACvC,IAAA,CAAA,iBAAiB,GAAY,KAAK;QAClC,IAAA,CAAA,WAAW,GAAiC,EAAE;QAE9C,IAAA,CAAA,SAAS,GAAW,CAAC;AACrB,QAAA,IAAA,CAAA,UAAU,GAAW,WAAW,GAAG,WAAW,CAAC,YAAY,EAAE;AAE7D,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAU,KAAK,qDAAC;QAClC,IAAA,CAAA,UAAU,GAAG,MAAc;YACjC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC;AACrF,QAAA,CAAC;AA2gBJ,IAAA;IAzgBG,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;IAC/B;AAGA;;AAEG;IACH,2BAA2B,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAG;AAC7B,gBAAA,CAAC,CAAC,UAAU,GAAG,KAAK;AACxB,YAAA,CAAC,CAAC;QACN;IACJ;AAEA;;;AAGG;IACH,MAAM,CAAC,MAAc,CAAC,EAAA;QAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;QACrD,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC1D;IACJ;AAEA;;AAEG;IACH,WAAW,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM;IACrF;AAEA;;;AAGG;IACH,SAAS,CAAC,SAAkB,IAAI,EAAA;QAC5B,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;QAC/E;aAAO;YACH,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;QACjF;IACJ;AAEA;;;AAGE;IACF,eAAe,GAAA;AACX,QAAA,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;IACjD;AAEA;;;AAGE;IACF,kBAAkB,GAAA;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC;IACnD;AAEA;;;AAGE;IACF,kBAAkB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS;IACtE;AAIA;;AAEE;IACF,cAAc,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE;IAClC;AAEA;;;AAGC;IACD,eAAe,GAAA;AACX,QAAA,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS;IACxG;AAEA;;AAEA;IACA,aAAa,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YACxB,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU;QAC5C;AACA,QAAA,OAAO,SAAS;IACpB;AAEA;;AAED;IACC,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC,IAAI,GAAG,EAAE;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,qDAAqD,CAAC;AAC/E,YAAA,OAAO,SAAS;QACpB;QACA,IAAI,GAAG,GAAa,EAAE;AACtB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YACxB,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,IAAG;AAC7B,gBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AAC1B,YAAA,CAAC,CAAC;QACN;AACA,QAAA,OAAO,GAAG;IACd;AAEA;;;AAGG;IACH,qBAAqB,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC,IAAI,GAAG,EAAE;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,qDAAqD,CAAC;AAC/E,YAAA,OAAO,SAAS;QACpB;QACA,IAAI,IAAI,GAAoC,EAAE;AAC9C,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YACxB,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,IAAG;gBAC7B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAChC,YAAA,CAAC,CAAC;QACN;AACA,QAAA,OAAO,IAAI;IACf;AAGA;;;;AAIG;IACH,kBAAkB,CAAC,KAA4B,EAAE,MAA2B,EAAA;AACxE,QAAA,MAAM,KAAK,GAAG,YAAY,EAAE;AAC5B,QAAA,MAAM,WAAW,GACb,CAAC,MAAM,CAAC,QAAQ;AAChB,YAAA,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC,OAAO;AACvC,YAAA,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC,QAAQ;AACxC,YAAA,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC,aAAa;AAC7C,YAAA,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC,cAAc;QAClD,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC,SAAS;QAClE,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC,UAAU;QACpE,IAAI,KAAK,GAAG,EAAE;AACd,QAAA,KAAK,EAAE,OAAO,CAAC,CAAC,IAAG;YACf,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE;YACnC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC;YAC9C,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,OAAO,EAAE;gBAClC,CAAC,CAAC,IAAI,GAAG,aAAa,GAAG,CAAC,CAAC,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC;YAC9F;AAAO,iBAAA,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,QAAQ;AACxC,gBAAA,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,EAAE;AACvC,gBAAA,QAAQ,CAAC,CAAC,KAAK;oBACX,KAAK,YAAY,CAAC,QAAQ;AACtB,wBAAA,CAAC,CAAC,iBAAiB,GAAG,UAAU;wBAChC;oBACJ,KAAK,YAAY,CAAC,YAAY;AAC1B,wBAAA,CAAC,CAAC,iBAAiB,GAAG,cAAc;wBACpC;;AAER,gBAAA,IAAI,CAAC,CAAC,YAAY,EAAE;oBAChB,IAAI,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;AACrC,oBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACpB,wBAAA,CAAC,CAAC,mBAAmB,GAAG,KAAK,CAAC,CAAC,CAAC;oBACpC;gBACJ;AACA,gBAAA,IAAI,CAAC,CAAC,YAAY,EAAE;AAChB,oBAAA,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;AAC7C,oBAAA,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACzC,oBAAA,CAAC,CAAC,UAAU,GAAG,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC;oBAC5C,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK;gBAEhC;YACJ;iBAAO;AACH,gBAAA,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,QAAQ;AAClC,oBAAA,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,IAAI;oBAC7B,CAAC,CAAC,IAAI,EAAE;oBACR,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;gBACjC;AACA,gBAAA,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,sBAAsB;AAC/C,oBAAA,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,gBAAgB;AACzC,oBAAA,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,qBAAqB;AAC9C,oBAAA,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK;oBAC9B,CAAC,CAAC,IAAI,EAAE;AACR,oBAAA,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;AACzD,oBAAA,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;oBAChD,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;gBACxB;AACA,gBAAA,IAAI,CAAC,CAAC,OAAO,EAAE;AACX,oBAAA,IAAI,UAA8B;oBAClC,IAAI,OAAO,GAAQ,EAAE;AACrB,oBAAA,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAG;AAClB,wBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE;4BAAE;AACnB,wBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE;AACvB,4BAAA,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;gCACX,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;AAC7C,4BAAA,UAAU,GAAG,CAAC,CAAC,IAAI;wBACvB;AACA,wBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK;wBACnB,IAAI,KAAK,GAAG,CAAC;4BAAE,KAAK,IAAI,CAAC;6BACpB,IAAI,KAAK,GAAG,CAAC;4BAAE,KAAK,IAAI,CAAC;6BACzB,IAAI,KAAK,GAAG,CAAC;4BAAE,KAAK,IAAI,CAAC;wBAC9B,OAAO,CAAC,IAAI,CAAC;4BACT,IAAI,EAAE,CAAC,CAAC,IAAI;4BACZ,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,UAAU,EAAE,CAAC,CAAC,UAAU;4BACxB,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,YAAY,EAAE,KAAK,GAAG;AACzB,yBAAA,CAAC;AACN,oBAAA,CAAC,CAAC;AACF,oBAAA,CAAC,CAAC,OAAO,GAAG,OAAO;gBACvB;AACA,gBAAA,IAAI,CAAC,CAAC,aAAa,GAAG,CAAC,EAAE;AACrB,oBAAA,CAAC,CAAC,mBAAmB,GAAG,mBAAmB;AAC3C,oBAAA,CAAC,CAAC,SAAS,GAAG,IAAI;AAClB,oBAAA,IAAI,CAAC,CAAC,cAAc,EAAE;AAClB,wBAAA,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;AAC3D,wBAAA,IAAI,YAAY,GAAG,KAAK,EAAE;AACtB,4BAAA,CAAC,CAAC,mBAAmB;gCACjB,sBAAsB;AACtB,oCAAA,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC;AACpC,oCAAA,GAAG;wBACX;6BAAO;AACH,4BAAA,CAAC,CAAC,mBAAmB;gCACjB,2BAA2B;AAC3B,oCAAA,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC;AACpC,oCAAA,GAAG;AACP,4BAAA,CAAC,CAAC,SAAS,GAAG,KAAK;wBACvB;oBACJ;gBACJ;AACA,gBAAA,IAAI,CAAC,CAAC,YAAY,EAAE;AAChB,oBAAA,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;AAC7C,oBAAA,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACzC,oBAAA,CAAC,CAAC,UAAU,GAAG,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC;oBAC5C,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK;gBAChC;YACJ;YACA,IAAI,WAAW,EAAE;gBACb,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG;sBACvC,CAAC,CAAC;AACJ,sBAAE,CAAC,CAAC,IAAI;AACZ,gBAAA,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE;AAClF,gBAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAChB,oBAAA,CAAC,CAAC,KAAK,GAAG,IAAI;oBACd,KAAK,GAAG,IAAI;gBAChB;YACJ;iBAAO,IAAI,gBAAgB,EAAE;AACzB,gBAAA,IAAI,KAAK,KAAK,MAAM,EAAE;AAClB,oBAAA,CAAC,CAAC,KAAK;AACH,wBAAA,yCAAyC,GAAG,MAAM,CAAC,IAAI;oBAC3D,KAAK,GAAG,MAAM;gBAClB;YACJ;iBAAO,IAAI,iBAAiB,EAAE;AAC1B,gBAAA,IAAI,KAAK,KAAK,MAAM,EAAE;AAClB,oBAAA,CAAC,CAAC,KAAK,GAAG,6CAA6C;oBACvD,KAAK,GAAG,MAAM;gBAClB;YACJ;AACJ,QAAA,CAAC,CAAC;IACN;AAGA;;;;AAIG;AACH,IAAA,cAAc,CAAC,IAAyB,EAAE,SAAA,GAAqB,KAAK,EAAA;QAChE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC;AAC9C,QAAA,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE;QAC/B,IAAI,CAAC,SAAS,EAAE;YACZ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM;QACvC;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,YAAY;QACtC;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;QACnE;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IACtC;AAGA;;;AAGE;IACF,aAAa,CAAC,SAAiB,CAAC,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;QACtE;IACJ;AAGA;;;AAGE;AACF,IAAA,oBAAoB,CAAC,IAAyB,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,YAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,WAAW;aAC1F,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,YAAY;;;AAG5C,QAAA,OAAO,SAAS;IACpB;AAEA;;;AAGG;AACH,IAAA,mBAAmB,CAAC,IAAyB,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,YAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,WAAW;aAC1F,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,iBAAiB;;;AAGjD,QAAA,OAAO,EAAE;IACb;AAEA;;;AAGE;AACF,IAAA,WAAW,CAAC,IAAyB,EAAA;AACjC,QAAA,QAAQ,IAAI,CAAC,KAAK;AACd,YAAA,KAAK,YAAY,CAAC,gBAAgB,EAAE,OAAO,OAAO;YAClD,KAAK,YAAY,CAAC,QAAQ;YAC1B,KAAK,YAAY,CAAC,OAAO;AACzB,YAAA,KAAK,YAAY,CAAC,eAAe,EAAE,OAAO,WAAW;AACrD,YAAA,SAAS,OAAO,SAAS;;IAEjC;AAEA;;;;AAIG;IACH,UAAU,CAAC,IAAyB,EAAE,CAAS,EAAA;QAC3C,CAAC,EAAE,cAAc,EAAE;QACnB,CAAC,EAAE,eAAe,EAAE;QACpB,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;IAErC;AAEA;;;;AAIE;IACF,eAAe,CAAC,IAAyB,EAAE,CAAS,EAAA;QAChD,CAAC,EAAE,cAAc,EAAE;QACnB,CAAC,EAAE,eAAe,EAAE;QACpB,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;IAGjD;AAGA;;;;AAIE;IACF,OAAO,CAAC,KAAc,EAAE,IAA0B,EAAA;QAC9C,IAAI,WAAW,GAAa,EAAE;QAC9B,IAAI,IAAI,EAAE;AACN,YAAA,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QACnC;AAAO,aAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC/B,YAAA,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;QAC7D;AACA,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;aAC7E,SAAS,CAAC,CAAC,IAAG;AACX,YAAA,IAAI,CAAC,CAAC,OAAO,EAAE;gBACX,IAAI,IAAI,EAAE;AACN,oBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE;AACvB,wBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,wBAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;wBAClG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CACjC,YAAY,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAC5C,IAAI,CAAC,KAAK,EACV,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACnB,wBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;oBACtC;gBACJ;AAAO,qBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;oBAC/B,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,IAAG;AAC7B,wBAAA,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,EAAE;AACpB,4BAAA,CAAC,CAAC,MAAM,GAAG,KAAK;AAChB,4BAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;4BAC/F,IAAI,CAAC,cAAc,CAAC,iBAAiB,CACjC,YAAY,CAAC,yBAAyB,CAAC,CAAC,CAAC,EACzC,CAAC,CAAC,KAAK,EACP,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACnB,4BAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;wBACtC;AACJ,oBAAA,CAAC,CAAC;gBACN;gBACA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,yBAAyB,CAAC;YAChF;AACJ,QAAA,CAAC,CAAC;IACV;AAEA;;;;;;AAMD;AACU,IAAA,IAAI,CAAC,UAAkB,EAAE,KAAc,EAAE,SAAmB,EAAA;AACjE,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC;aAC/C;AACD,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE,IAAI,aAAa,GAAG,UAAU,EAAE,QAAQ,CAAC;QAC1F;IACJ;AAEA;;;;AAIG;IACH,YAAY,CAAC,UAAkB,EAAE,KAAc,EAAA;AAC3C,QAAA,IAAI,CAAC,UAAU;YAAE;QACjB,qBAAqB,CAAC,YAAY,CAC9B,IAAI,CAAC,aAAa,CAAC,WAAW,EAC9B,IAAI,CAAC,cAAc,EACnB,UAAU,EACV,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC;AACvB,eAAG,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI;AAC5D,cAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAC5B,IAAI,CAAC,aAAa,EAAE,EACpB,IAAI,EACJ,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAC5B,IAAI,CAAC,aAAa,EAAE,EACpB,IAAI,CAAC,uBAAuB,EAAE,CACjC;IAEL;;;;AAMA;;;;AAIG;AACH,IAAA,IAAI,CAAC,EAAU,EAAE,OAAA,GAAmB,cAAc,EAAA;QAC9C,OAAO,CAAC,OAAO,CACX,EAAE,EACF,IAAI,CAAC,SAAS,CAAC;AACX,YAAA,SAAS,EAAE;gBACP,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,IAAI,CAAC;AACvC,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC;AAChC,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI;AACnE,aAAA;AACD,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,MAAM,EAAE,IAAI,CAAC,SAAS;AACtB,YAAA,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE;YACxD,IAAI,EAAE,IAAI,CAAC;AACP,kBAAE,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAC1D,kBAAE;AACT,SAAA,CAAC,CAAC;IACX;AAEA;;;;AAIG;AACH,IAAA,OAAO,CAAC,EAAU,EAAE,OAAA,GAAmB,cAAc,EAAA;QACjD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,IAAI,KAAK,EAAE;YACP,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC9B,IAAI,IAAI,EAAE;AACN,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;AACrC,gBAAA,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AAC5D,gBAAA,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AAC5D,gBAAA,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AAC5D,gBAAA,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACtD,gBAAA,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAC1D,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,OAAO;AACnC,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,SAAS;AACrC,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,SAAS;AACrC,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,SAAS;AAClC,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,SAAS;AACpC,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI;gBACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;gBAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;gBACpC,UAAU,CAAC,MAAK;AACZ,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,OAAO;AACnC,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,OAAO;AACnC,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI;AAC7B,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM;AACjC,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,oBAAA,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;AACvB,wBAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;wBAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;oBACrE;AACA,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,oBAAA,IAAI,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;wBAC7B,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;wBAC1C,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;wBACxC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;oBAC3C;oBACA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AAC7B,oBAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,uBAAuB,EAAE,IAAI,CAAC,YAAY,CAAC;AAC7F,oBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;gBACvC,CAAC,EAAE,GAAG,CAAC;YAEX;QACJ;IACJ;8GAviBS,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,iaALzB,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKd,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,4BAA4B,EAAE,8BAA8B,CAAC;AAClG,iBAAA;uEAIgD,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACE,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACJ,UAAU,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ICtBhE;AAAZ,CAAA,UAAY,kCAAkC,EAAA;AAC5C,IAAA,kCAAA,CAAA,kCAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,kCAAA,CAAA,kCAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,kCAAA,CAAA,kCAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU;AACZ,CAAC,EAJW,kCAAkC,KAAlC,kCAAkC,GAAA,EAAA,CAAA,CAAA;MAuBjC,gCAAgC,CAAA;AAhB7C,IAAA,WAAA,GAAA;AAkBU,QAAA,IAAA,CAAA,WAAW,GAAkB,IAAI,OAAO,EAAQ;AAC9C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC7C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAA8B;AACrD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAuB;AAC5C,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAW;QACnC,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;QAClC,IAAA,CAAA,cAAc,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAChC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAU,IAAI,wDAAC;AACnC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,IAAI,sDAAC;AACjC,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAA2B,SAAS,2DAAC;AAC5D,QAAA,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAU,KAAK,gEAAC;AAC5C,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,4DAAC;AACxC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,IAAI,uDAAC;AAClC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAqC,kCAAkC,CAAC,IAAI,uDAAC;QACtF,IAAA,CAAA,gBAAgB,GAA8C,kCAAkC;QAChG,IAAA,CAAA,UAAU,GAAwB,YAAY;AAsDlE,IAAA;IApDC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE;AACvB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;aAChC,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AACpC,QAAA,CAAC,CAAC;;AAGJ,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU;AAC7B,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;aAChC,SAAS,CAAC,OAAO,IAAG;YACnB,IAAI,OAAO,CAAC,EAAE,KAAK,eAAe,CAAC,kBAAkB,EAAE;AACrD,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAC3G,oBAAA,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC3C;YACF;iBAAO,IAAI,OAAO,CAAC,EAAE,KAAK,eAAe,CAAC,aAAa,EAAE;gBACvD,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;oBACpF,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK;AACvC,oBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;gBACpC;YACF;AACF,QAAA,CAAC,CAAC;IAEN;AAEA;;;AAGG;IACO,UAAU,GAAA;QAClB,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC;IAC5F;;AAEA;;;AAGG;IACO,MAAM,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,YAAY,CAAC,sBAAsB,CAC7D,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI;IAC/E;;AAEE;;;AAGC;IACS,SAAS,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,YAAY,CAAC,sBAAsB,CAC7D,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI;IAC/E;;8GAtES,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpC7C,40YA4QM,EAAA,MAAA,EAAA,CAAA,s2bAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjPF,iBAAiB,qbACjB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,UAAA,EAAA,IAAA,EAChB,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,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,EAAA,2BAAA,EAAA,mCAAA,EAAA,+BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,k+HAChB,UAAU,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGD,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAhB5C,SAAS;AACS,YAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,4BAA4B,EAAA,UAAA,EAG1B,IAAI,EAAA,OAAA,EACP;wBACP,iBAAiB;wBACjB,eAAe;wBACf,gBAAgB;wBAChB,aAAa;wBACb,aAAa;wBACb,gBAAgB;wBAChB;AACD,qBAAA,EAAA,QAAA,EAAA,40YAAA,EAAA,MAAA,EAAA,CAAA,s2bAAA,CAAA,EAAA;;;AEmCG,MAAO,0BAA2B,SAAQ,0BAA0B,CAAA;AA1B1E,IAAA,WAAA,GAAA;;AA4BW,QAAA,IAAA,CAAA,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAY,YAAY,CAAC;AAEzD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,EAAC,YAAwC,EAAC;AAC1D,QAAA,IAAA,CAAA,UAAU,GAAgC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,0BAA0B,CAAC,YAAY,EAAE;QAGtH,IAAA,CAAA,IAAI,GAAgC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO;AAwUrF,IAAA;IAtUC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI;gBAC1B,KAAK,0BAA0B,CAAC,YAAY;AAC1C,oBAAA,IAAI,CAAC,KAAK,GAAG,6CAA6C;oBAC1D;gBACF,KAAK,0BAA0B,CAAC,aAAa;AAC3C,oBAAA,IAAI,CAAC,KAAK,GAAG,4CAA4C;oBACzD;gBACF,KAAK,0BAA0B,CAAC,SAAS;AACvC,oBAAA,IAAI,CAAC,KAAK,GAAG,kBAAkB;oBAC/B;gBACF,KAAK,0BAA0B,CAAC,UAAU;AACxC,oBAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB;oBAClC;gBACF,KAAK,0BAA0B,CAAC,KAAK;AACnC,oBAAA,IAAI,CAAC,KAAK,GAAG,0BAA0B;oBACvC;;AAEJ,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;gBAC/B,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW;YACnD;;YAEA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YACvH,IACE,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI;gBAC/C,IAAI,CAAC,YAAY,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,UAAU;gBACnD,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EACnD;AACA,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,EAAE;gBAC7C,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI;gBAC7C,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;gBAC/C,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;gBACjD,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU;AACjD,gBAAA,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,0BAA0B,CAAC,UAAU;AAClG,gBAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,0BAA0B,CAAC,UAAU;gBACrG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC3D;QACF;;QAGA,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAA8B,IAAI,EAAE,YAAY,CAAC;;AAGrF,QAAA,IAAI,CAAC;AACF,aAAA,OAAO,CAAC;AACP,YAAA,WAAW,CAAC,MAAM;AAClB,YAAA,WAAW,CAAC,KAAK;AACjB,YAAA,WAAW,CAAC,MAAM;AAClB,YAAA,WAAW,CAAC,KAAK;AACjB,YAAA,WAAW,CAAC,MAAM;SACnB;AACA,aAAA,IAAI,CAACC,WAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AAChC,aAAA,SAAS,CAAC,CAAC,MAAW,KAAI;AACzB,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AACnD,gBAAA,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;oBAC7B,IAAI,CAAC,0BAA0B,EAAE;gBACnC;YACF;AACF,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;IAC7B;IAEA,eAAe,GAAA;QACb,UAAU,CAAC,MAAK;;YAEd,IAAI,CAAC,0BAA0B,EAAE;;AAEjC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,CAAC;AACJ,qBAAA,SAAS,CAAC,CAAC,KAAkC,KAAI;AAChD,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK;AAC5B,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAClB,gBAAA,CAAC,CAAC;YACN;QACF,CAAC,EAAE,CAAC,CAAC;AACL,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAChB,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;IACrC;AAGA;;AAEC;IACS,gBAAgB,GAAA;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB;AAC9C,QAAA,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE;IAC7B;AAIA;;AAEG;IACK,0BAA0B,GAAA;AAChC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;QACpC,IAAI,UAAU,EAAE;YACd,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;gBACvD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC;gBACpD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;AACvD,gBAAA,IAAI,UAAU,CAAC,MAAM,EAAE;oBACrB,UAAU,CAAC,KAAK,EAAE;gBACpB;AACA,gBAAA,UAAU,CAAC,IAAI,GAAG,MAAM;AACxB,gBAAA,UAAU,CAAC,YAAY,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;YACnC;iBAAO;AACL,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;oBACrB,UAAU,CAAC,KAAK,EAAE;gBACpB;qBAAO,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;oBACvD,UAAU,CAAC,IAAI,EAAE;gBACnB;qBAAO,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBACrD,UAAU,CAAC,KAAK,EAAE;gBACpB;AACA,gBAAA,UAAU,CAAC,IAAI,GAAG,MAAM;AACxB,gBAAA,UAAU,CAAC,YAAY,GAAG,IAAI;AAC9B,gBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;YACpC;QACF;IACF;AAGA;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;AAIA;;;AAGG;IACH,MAAM,CAAC,OAA4B,IAAI,EAAA;AACrC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;IACvD;AAIA;;;;AAIG;IACK,YAAY,CAAC,YAAqB,KAAK,EAAA;QAC7C,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAwB;AAC7E,QAAA,SAAS,CAAC,KAAK,GAAG,EAAE;AACpB,QAAA,SAAS,CAAC,eAAe;AACvB,YAAA,SAAS,CAAC,IAAI,KAAK,0BAA0B,CAAC,UAAU;AAC1D,QAAA,SAAS,CAAC,kBAAkB;AAC1B,YAAA,SAAS,CAAC,IAAI,KAAK,0BAA0B,CAAC,UAAU;QAC1D,IAAI,SAAS,EAAE;AACb,YAAA,SAAS,CAAC,KAAK,GAAG,CAAC;QACrB;;QAEA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE;YAClC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ;YACnD,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;AAC/C,YAAA,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE;QAC/D;QACA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE;YAChC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;QACjD;QACA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE;YAC9B,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI;QAC7C;QACA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE;YAChC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;QACjD;AACA,QAAA,OAAO,SAAS;IAClB;AAEA;;;;AAIG;AACK,IAAA,wBAAwB,CAAC,MAA2B,EAAA;QAC1D,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,EAAE;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI;YACvC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;YACnD,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;YACrD,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YAC7C,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI;SACxB;IACH;AAEA;;;AAGG;IACH,KAAK,CAAC,YAAqB,KAAK,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YAAE;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;QACjD,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC;AACvE,iBAAA,IAAI,CAACG,UAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;iBACnD,SAAS,CAAC,CAAC,IAAG;gBACb,IAAI,CAAC,CAAC,CAAC,OAAO;oBAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;qBAC9C;oBACH,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC;;oBAGvC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE;AAC3B,wBAAA,IAAI,SAAS;;AAEX,4BAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;oBAClC;yBAAO;wBACL,IAAI,CAAC,UAAU,EAAE;oBACnB;oBAEA,IAAI,SAAS,EAAE;AACb,wBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,wBAAA,IAAI,SAAS;AAAE,4BAAA,SAAS,CAAC,SAAS,GAAG,CAAC;oBACxC;AAEA,oBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChB;AACF,YAAA,CAAC,CAAC;QACN;IACF;AAEA;;;AAGG;AACH,IAAA,SAAS,CAAC,CAAY,EAAA;AACpB,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC;AACzD,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK;QAC/B,IAAI,CAAC,KAAK,EAAE;IACd;AAEA;;;AAGE;AACF,IAAA,WAAW,CAAC,MAA2B,EAAA;QACrC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM;YAAE;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE;AAChE,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YACzB,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;AACvE,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,CAAuC,KAAI;AAChD,oBAAA,IAAI,CAAC,CAAC,OAAO,EAAE;AACb,wBAAA,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AACjD,wBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE;AAClB,4BAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,4BAAA,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;AAChD,4BAAA,IAAI,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,gCAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE;gCAC9B,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE;AACpC,gCAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,IAAI;4BAC9E;wBACF;AACA,wBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;wBAC7B,IAAI,CAAC,0BAA0B,EAAE;oBACnC;gBACF,CAAC;gBACD,QAAQ,EAAE,MAAK;AACb,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC5B;AACD,aAAA,CAAC;QACN;IACF;AAEA;;AAEG;IACO,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;IAC/B;AACA;;AAEC;IACD,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC3C,IAAI,CAAC,0BAA0B,EAAE;QACnC;IACF;AAEA;;;AAGG;AACH,IAAA,IAAI,CAAC,UAAkB,EAAA;QACrB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IAClD;AAEA;;;AAGA;AACS,IAAA,oBAAoB,CAAC,IAAyB,EAAA;QACrD,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,YAAY;AACvC,QAAA,OAAO,SAAS;IAClB;AAEA;;;AAGG;AACM,IAAA,mBAAmB,CAAC,IAAyB,EAAA;QACpD,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,iBAAiB;AAC5C,QAAA,OAAO,EAAE;IACX;8GA/UW,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,8EAzBrB,WAAW,CAAC,YAAY,EAAE,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5C5C,4hNAuIqB,EAAA,MAAA,EAAA,CAAA,uncAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrFjB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gNAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,cAAc,8HACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,UAAA,EAAA,IAAA,EAChB,aAAa,mLACb,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,aAAa,ksBACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,gBAAgB,wdAChB,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,EAAA,aAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,4BAA4B,0HAC5B,gCAAgC,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGvB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA1BtC,SAAS;AACF,YAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,EAAE,EAAA,UAAA,EAGhC,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,gBAAgB;wBAChB,cAAc;wBACd,eAAe;wBACf,gBAAgB;wBAChB,aAAa;wBACb,iBAAiB;wBACjB,oBAAoB;wBACpB,WAAW;wBACX,aAAa;wBACb,cAAc;wBACd,kBAAkB;wBAClB,gBAAgB;wBAChB,gBAAgB;wBAChB,oBAAoB;wBACpB,4BAA4B;wBAC5B,4BAA4B;wBAC5B,gCAAgC;AACjC,qBAAA,EAAA,QAAA,EAAA,4hNAAA,EAAA,MAAA,EAAA,CAAA,uncAAA,CAAA,EAAA;wEAImD,YAAY,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME/CrD,0CAA0C,CAAA;AATvD,IAAA,WAAA,GAAA;QAUW,IAAA,CAAA,IAAI,GAAG,MAAM,EAA6B;AAE3C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAEnC,IAAA,CAAA,QAAQ,GAAW,EAAE;QACrB,IAAA,CAAA,OAAO,GAAW,EAAE;QACpB,IAAA,CAAA,QAAQ,GAAW,EAAE;QACrB,IAAA,CAAA,WAAW,GAAW,EAAE;QACxB,IAAA,CAAA,UAAU,GAAW,EAAE;AA4ElC,IAAA;AA1EC;;AAEG;IACO,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;IAC7B;AAEA;;AAEG;IACO,EAAE,GAAA;QACV,IAAI,KAAK,GAAG,EAAE;;QAEd,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,KAAK,IAAI,IAAI;AACb,YAAA,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;YACjD,KAAK,IAAI,IAAI;QACf;;QAEA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AACnC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,KAAK,IAAI,GAAG;gBAClC,KAAK,IAAI,GAAG;AACZ,gBAAA,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;gBACzC,KAAK,IAAI,IAAI;YACf;YACA,KAAK,IAAI,GAAG;QACd;;QAEA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;AACpC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,KAAK,IAAI,GAAG;gBAClC,KAAK,IAAI,IAAI;AACb,gBAAA,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;gBACzC,KAAK,IAAI,IAAI;YACf;YACA,KAAK,IAAI,GAAG;QACd;;QAEA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,IAAI,KAAK;AACpC,YAAA,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;YAChD,KAAK,IAAI,GAAG;YACZ,KAAK,IAAI,IAAI;QACf;;QAEA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAEtB,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,sHAAsH,CACvH;gBACD;YACF;YACA,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;AACpC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,KAAK,IAAI,GAAG;gBAClC,KAAK,IAAI,IAAI;AACb,gBAAA,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;gBACzC,KAAK,IAAI,IAAI;YACf;YACA,KAAK,IAAI,GAAG;QACd;;AAIA,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IAC/D;8GApFW,0CAA0C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1C,0CAA0C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EARrC,WAAW,CAAC,YAAY,EAAE,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChB5C,q+FAkEqB,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7CT,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,qvCAAEL,YAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gNAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,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,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,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,EACrG,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,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,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,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,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEvD,0CAA0C,EAAA,UAAA,EAAA,CAAA;kBATtD,SAAS;2BACF,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,EAAE,EAAA,UAAA,EAGhC,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAED,YAAU,EAAE,kBAAkB,EAAE,cAAc;AACrG,wBAAA,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,q+FAAA,EAAA;;;MERxD,kCAAkC,CAAA;8GAAlC,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,8EAP3B,WAAW,CAAC,YAAY,EAAE,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECP9C,w8EA8BA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDlBc,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,yGAAE,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAEA,YAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,sXAAE,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEhG,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAR9C,SAAS;2BACA,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,EAAE,EAAA,eAAA,EAG3B,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,WACP,CAAC,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAEA,YAAU,EAAE,eAAe,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,w8EAAA,EAAA;;;AEuCxG,MAAO,uBAAwB,SAAQ,0BAA0B,CAAA;AAbvE,IAAA,WAAA,GAAA;;AAgBW,QAAA,IAAA,CAAA,cAAc,GAAG,SAAS,CAAW,gBAAgB,0DAAC;AACtD,QAAA,IAAA,CAAA,YAAY,GAAG,SAAS,CAAW,cAAc,wDAAC;AAClD,QAAA,IAAA,CAAA,oBAAoB,GAAG,SAAS,CAAW,sBAAsB,gEAAC;AAClE,QAAA,IAAA,CAAA,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAY,YAAY,CAAC;AACxD,QAAA,IAAA,CAAA,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAY,aAAa,CAAC;AAC1D,QAAA,IAAA,CAAA,cAAc,GAAG,SAAS,CAA0B,gBAAgB,0DAAC;AACrE,QAAA,IAAA,CAAA,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAyB,gBAAgB,CAAC;AAC7E,QAAA,IAAA,CAAA,oBAAoB,GAAG,SAAS,CAAoB,sBAAsB,gEAAC;AAC3E,QAAA,IAAA,CAAA,0BAA0B,GAAG,SAAS,CAAoB,4BAA4B,sEAAC;AACvF,QAAA,IAAA,CAAA,sBAAsB,GAAG,SAAS,CAAoB,wBAAwB,kEAAC;AAE/E,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAU,IAAI,wDAAC;AACnC,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,IAAI,yDAAC;AACpC,QAAA,IAAA,CAAA,sBAAsB,GAAG,KAAK,CAAU,KAAK,kEAAC;AAC9C,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAkB,EAAE,6DAAC;AAC9C,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAA4B,SAAS,yDAAC;AAC1D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAS,EAAE,6DAAC;AACtC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAqC,EAAE,mDAAC;AACxD,QAAA,IAAA,CAAA,MAAM,GAAyD,QAAQ,CAAC,MAAK;YACrF,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;kBAC1C,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,QAAQ;kBAClE,IAAI;AACV,QAAA,CAAC,kDAAC;AACQ,QAAA,IAAA,CAAA,cAAc,GAAY,IAAI,CAAC,sBAAsB,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,cAAc,KAAK,IAAI;AACzH,QAAA,IAAA,CAAA,UAAU,GAAoB,QAAQ,CAAC,MAAK;YACpD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC;AAClC,QAAA,CAAC,sDAAC;AACQ,QAAA,IAAA,CAAA,MAAM,GAAG,CAAC,UAAA,GAAsB,IAAI,KAAa;AACzD,YAAA,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,IACnI,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,+BAA+B;AACzD,gBAAA,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,gBAAgB;gBAC1C,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,QAAA,CAAC;QACS,IAAA,CAAA,UAAU,GAAG,MAAc;AACnC,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC;AAClE,iBAAC,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;AAChE,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC;AACxE,2BAAA,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK;AAElF,QAAA,CAAC;QAES,IAAA,CAAA,cAAc,GAAG,MAAc;YACvC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,IAClH,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI;AAC5E,QAAA,CAAC;QAES,IAAA,CAAA,cAAc,GAAG,MAAc;YACvC,QAAQ,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,WAAW,CAAC,OAAO;AAClD,gBAAA,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,WAAW,CAAC,QAAQ;AAC7C,gBAAA,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,WAAW,CAAC,aAAa;gBAClD,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,WAAW,CAAC,cAAc;AACvD,QAAA,CAAC;QACS,IAAA,CAAA,SAAS,GAAG,MAAc;YAClC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5C,QAAA,CAAC;AACS,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAe,EAAE,mDAAC;QAClC,IAAA,CAAA,UAAU,GAAG,MAAc;AACnC,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE;AACtB,QAAA,CAAC;AACS,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAA0B,EAAE,mDAAC;QACpC,IAAA,CAAA,UAAU,GAAG,MAAc;AAC5C,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC;AACxG,QAAA,CAAC;QACS,IAAA,CAAA,OAAO,GAAG,MAAM,CAA0B,CAAC,GAAG,cAAc,CAAC,mDAAC;QAC9D,IAAA,CAAA,SAAS,GAAG,MAAe,IAAI,CAAC,MAAM,EAAE;AACxC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAA0B,EAAE,mDAAC;AAC7C,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAA0B,EAAE,iDAAC;QAC3C,IAAA,CAAA,MAAM,GAAY,EAAE;QACpB,IAAA,CAAA,SAAS,GAAG,MAAe,IAAI,CAAC,MAAM,EAAE;AAC1C,QAAA,IAAA,CAAA,SAAS,GAAoB,QAAQ,CAAC,MAAK;AACjD,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;AACxC,QAAA,CAAC,qDAAC;AACQ,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAA0B,EAAE,gDAAC;QAC1C,IAAA,CAAA,OAAO,GAAG,MAAc;YAChC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC;AAC7B,iBAAC,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;AAChI,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC;AACzE,2BAAA,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK;AAC5E,QAAA,CAAC;QACS,IAAA,CAAA,OAAO,GAAG,MAAM,CAA0B,CAAC,GAAG,4BAA4B,CAAC,mDAAC;QAC5E,IAAA,CAAA,OAAO,GAAG,MAAM,CAAiC,IAAI,CAAC,aAAa,EAAE,mDAAC;AACtE,QAAA,IAAA,CAAA,QAAQ,GAAiB,IAAI,YAAY,EAAE;AAC3C,QAAA,IAAA,CAAA,cAAc,GAAiB,IAAI,YAAY,EAAE;QACjD,IAAA,CAAA,IAAI,GAAgC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO;AA0iCrF,IAAA;IAziCC,QAAQ,GAAA;;AAEN,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,mBAAmB,EAAE,KAAK,EAAE,aAAa,CAAC,gBAAgB,EAAE,CAAC;QAClI,IAAI,CAAC,gBAAgB,EAAE;;QAGvB,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAA8B,IAAI,EAAE,YAAY,CAAC;;AAGrF,QAAA,IAAI,CAAC;AACF,aAAA,OAAO,CAAC;AACP,YAAA,WAAW,CAAC,MAAM;AAClB,YAAA,WAAW,CAAC,KAAK;AACjB,YAAA,WAAW,CAAC,MAAM;AAClB,YAAA,WAAW,CAAC,KAAK;AACjB,YAAA,WAAW,CAAC,MAAM;SACnB;AACA,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;aAChC,SAAS,CAAC,MAAM,IAAG;AAClB,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AACnD,gBAAA,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;oBAC7B,IAAI,CAAC,0BAA0B,EAAE;gBACnC;YACF;AACF,QAAA,CAAC,CAAC;;AAGJ,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU;AAC7B,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;aAChC,SAAS,CAAC,OAAO,IAAG;YACnB,IAAI,OAAO,CAAC,EAAE,KAAK,eAAe,CAAC,yBAAyB,EAAE;gBAC5D,IAAI,CAAC,wBAAwB,EAAE;YACjC;iBAAO,IAAI,OAAO,CAAC,EAAE,KAAK,eAAe,CAAC,uBAAuB,EAAE;AACjE,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;gBAC5B,IAAI,MAAM,EAAE;AACV,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAC3B;gBACA,IAAI,CAAC,0BAA0B,EAAE;YACnC;AACF,QAAA,CAAC,CAAC;;AAGJ,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,QAAQ,EAAE;QACjB;;QAGA,IAAI,CAAC,UAAU,EAAE;;QAGjB,IAAI,CAAC,WAAW,EAAE;IACpB;IAEA,eAAe,GAAA;QACb,UAAU,CAAC,MAAK;;YAEd,IAAI,CAAC,0BAA0B,EAAE;YACjC,IAAI,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;gBAC5C,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,cAAc,EAAE;;AAErB,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,gBAAA,IAAI,CAAC,MAAM,EAAE,CAAC;AACX,qBAAA,SAAS,CAAC,CAAC,KAAkC,KAAI;AAChD,oBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,wBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK;AAC5B,wBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBAClB;AACF,gBAAA,CAAC,CAAC;YACN;;AAGA,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,gBAAA,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAChH;iBAAO;AACL,gBAAA,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAClD;QAEF,CAAC,EAAE,CAAC,CAAC;AACL,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;IACrC;IAGS,WAAW,GAAA;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;IAC7B;AAGA;;AAEK;IACG,aAAa,GAAA;QACnB,IAAI,OAAO,GAAmC,EAAE;AAChD,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC;AAC5E,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sCAAsC,EAAE,SAAS,EAAE,sCAAsC,EAAE,KAAK,EAAE,aAAa,CAAC,+BAA+B,EAAE,CAAC;AACvK,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iCAAiC,EAAE,SAAS,EAAE,iCAAiC,EAAE,KAAK,EAAE,aAAa,CAAC,2BAA2B,EAAE,CAAC;AACzJ,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,mBAAmB,EAAE,KAAK,EAAE,aAAa,CAAC,gBAAgB,EAAE,CAAC;AAClH,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,CAAC,qBAAqB,EAAE,CAAC;AACjH,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC,eAAe,EAAE,CAAC;AAC/F,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,aAAa,CAAC,cAAc,EAAE,CAAC;AAC5G,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,mBAAmB,EAAE,CAAC;AACjG,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,SAAS,EAAE,yBAAyB,EAAE,KAAK,EAAE,aAAa,CAAC,qBAAqB,EAAE,CAAC;AACnI,QAAA,OAAO,OAAO;IAChB;AAEA;;;;AAIG;AACI,IAAA,mBAAmB,CAAC,EAAU,EAAA;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IAC1E;AAGA;;AAEE;IACQ,QAAQ,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO;aACxB,SAAS,CAAC,CAAC,IAAG;AACb,YAAA,IAAI,CAAC,CAAC,OAAO,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;YACxB;AACF,QAAA,CAAC,CAAC;IACN;AAGA;;AAEG;IACK,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YAAE;AACrC,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe;aAChC,SAAS,CAAC,CAAC,IAAG;YACb,IAAI,CAAC,CAAC,CAAC,OAAO;gBAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;iBAC9C;AACH,gBAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAmB,CAAC;YAChE;AACF,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;IACO,gBAAgB,GAAA;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB;AAC9C,QAAA,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE;IAC7B;AAEA;;AAEE;IACQ,iBAAiB,GAAA;AACzB,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,iBAAiB;AAChD,QAAA,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE;IAC9B;AAGA;;AAEG;IACO,0BAA0B,GAAA;AAClC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;QACpC,IAAI,UAAU,EAAE;YACd,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;gBACvD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC;gBACpD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;AACvD,gBAAA,IAAI,UAAU,CAAC,MAAM,EAAE;oBACrB,UAAU,CAAC,KAAK,EAAE;gBACpB;AACA,gBAAA,UAAU,CAAC,IAAI,GAAG,MAAM;AACxB,gBAAA,UAAU,CAAC,YAAY,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;YACnC;iBAAO;gBACL,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;oBAChD,UAAU,CAAC,IAAI,EAAE;gBACnB;qBAAO,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBACrD,UAAU,CAAC,KAAK,EAAE;gBACpB;AACA,gBAAA,UAAU,CAAC,IAAI,GAAG,MAAM;AACxB,gBAAA,UAAU,CAAC,YAAY,GAAG,IAAI;AAC9B,gBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;YACpC;QACF;QACA,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;YACtC,IAAI,WAAW,EAAE;gBACf,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;oBACvD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC;oBACpD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;AACvD,oBAAA,IAAI,WAAW,CAAC,MAAM,EAAE;wBACtB,WAAW,CAAC,KAAK,EAAE;oBACrB;AACA,oBAAA,WAAW,CAAC,IAAI,GAAG,MAAM;AACzB,oBAAA,WAAW,CAAC,YAAY,GAAG,KAAK;AAChC,oBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;gBACpC;qBAAO;AACL,oBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;wBACrB,WAAW,CAAC,KAAK,EAAE;oBACrB;yBAAO,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;wBACzD,WAAW,CAAC,IAAI,EAAE;oBACpB;yBAAO,IAAI,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE;wBACvD,WAAW,CAAC,KAAK,EAAE;oBACrB;AACA,oBAAA,WAAW,CAAC,IAAI,GAAG,MAAM;AACzB,oBAAA,WAAW,CAAC,YAAY,GAAG,IAAI;AAC/B,oBAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;gBACrC;YACF;QACF,CAAC,EAAE,GAAG,CAAC;IACT;AAEA;;AAEG;IACK,gBAAgB,GAAA;QACtB,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE;AACjE,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;IAC7B;AAEA;;;AAGG;IACO,eAAe,CAAC,iBAA0B,IAAI,EAAA;QACtD,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;QAChE;QACA,MAAM,OAAO,GAAiB,EAAE;QAChC,MAAM,OAAO,GAA4B,EAAE;AAC3C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;QACpC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,IAAG;AAC5C,YAAA,IAAI,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,kBAAkB,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE;AACzG,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,SAAS,EAAE,oBAAoB,EAAE,KAAK,EAAE,aAAa,CAAC,iBAAiB,EAAE,CAAC;YACvH;YACA,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,KAAK,CAAC;YACzG,IAAI,eAAe,EAAE;AACnB,gBAAA,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAG;oBACzD,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;wBACtD,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAG;AAC7E,4BAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACjB,wBAAA,CAAC,CAAC;oBACJ;AACF,gBAAA,CAAC,CAAC;AACF,gBAAA,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAG;oBACzD,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;wBACtD,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAG;AAC1D,4BAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACjB,wBAAA,CAAC,CAAC;oBACJ;AACF,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QACpI;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QACpI;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QACpI;QACA,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,wBAAwB,EAAE;IACjC;AAEA;;AAEC;IACO,qBAAqB,GAAA;QAC3B,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE;AAC1C,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,gBAAA,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAAE;YAC1C;YACA,gBAAgB,EAAE,KAAK,EAAE;QAC3B,CAAC,EAAE,GAAG,CAAC;IACT;AAEA;;AAEE;IACQ,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YAAE;QACrC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO;aACnD,SAAS,CACR,CAAC,IAAG;AACF,YAAA,IAAI,CAAC,CAAC,OAAO,EAAE;gBACb,MAAM,KAAK,GAAuC,EAAE;AACpD,gBAAA,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AAClB,oBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAC9C,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBACvB,IAAI,CAAC,0BAA0B,EAAE;YACnC;AACF,QAAA,CAAC,CAAC;IACR;AAEA;;;AAGG;IACH,UAAU,CAAC,YAAqB,KAAK,EAAA;QACnC,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC5C,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CACjC,sBAAsB,EACtB,CAAC,EACD,aAAa,CAAC;YAChB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC1C,gBAAA,IAAI,IAAI,EAAE,KAAK,EAAE;AACf,oBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;wBAC7B,MAAM,EAAE,aAAa,CAAC,OAAO;wBAC7B,IAAI,EAAE,IAAI,CAAC,KAAK;wBAChB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY;AACvC,qBAAA,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AACf,wBAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;4BACd,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;wBACrC;6BAAO;AACL,4BAAA,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;AAC5D,4BAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC;4BACjD,UAAU,CAAC,MAAK;gCACd,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC;4BACxC,CAAC,EAAE,GAAG,CAAC;AACP,4BAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,qCAAqC,CAAC;4BAC/D,CAAC,CAAC,KAAK,EAAE;wBACX;AACF,oBAAA,CAAC,CAAC;gBACJ;AACF,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;AAC7B,gBAAA,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ;gBAC9B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY;AACvC,aAAA,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AACf,gBAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;oBACd,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;gBACrC;qBAAO;AACL,oBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAG;wBAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;wBACvD,IAAI,IAAI,EAAE;4BACR,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI;wBAChC;AACA,wBAAA,OAAO,CAAC,GAAG,KAAK,CAAC;AACnB,oBAAA,CAAC,CAAC;AACF,oBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,qCAAqC,CAAC;gBACjE;AACF,YAAA,CAAC,CAAC;QACJ;IACF;AAEA;;AAEE;IACF,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC9B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,0CAA0C,EAAE,UAAU,EAAE,eAAe;AAC/F,iBAAA,iBAAiB,CAAC;AAClB,iBAAA,SAAS,CAAC,CAAC,IAAkB,KAAI;AAChC,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACxB,oBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;wBAC9B,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ;6BACxD,SAAS,CAAC,CAAC,IAAG;AACb,4BAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;gCACd,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;4BACrC;iCAAO;AACL,gCAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAG;oCAC1B,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AACzE,oCAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACZ,wCAAA,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;oCACpB;AACA,oCAAA,OAAO,CAAC,GAAG,KAAK,CAAC;AACnB,gCAAA,CAAC,CAAC;AACF,gCAAA,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE;AAC9B,gCAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,SAAS;AACtC,gCAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,SAAS;AACxC,gCAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,qCAAqC,CAAC;4BACjE;AACF,wBAAA,CAAC,CAAC;oBACN;gBACF;AACF,YAAA,CAAC,CAAC;QACN;IACF;AAEA;;AAEE;AACF,IAAA,YAAY,CAAC,IAAkD,EAAA;QAC7D,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YAC3B,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;AACzC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;YAC1C,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;YAC9C,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;YAC1C,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;gBAC1C,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;gBAC1C,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;gBACxC,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;gBACpC,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;gBACpC,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE;oBACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ;oBACpC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM;gBAClC;gBACA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;gBACpC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;gBAC9C,IAAI,CAAC,YAAY,CAAC,0BAA0B,GAAG,MAAM,CAAC,0BAA0B;gBAChF,IAAI,CAAC,YAAY,CAAC,6BAA6B,GAAG,MAAM,CAAC,6BAA6B;gBACtF,IAAI,CAAC,YAAY,CAAC,sBAAsB,GAAG,MAAM,CAAC,sBAAsB;gBACxE,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;gBACpD,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;gBAChD,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,YAAY,EAAE;oBAChD,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,MAAM,CAAC,cAAc;oBAChD,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,MAAM,CAAC,YAAY;gBAC9C;gBACA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;gBACxC,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;gBACpC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;gBACtC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;gBACxC,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;gBACpD,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa;gBACtD,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;gBACpD,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;gBAClD,IAAI,CAAC,YAAY,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc;gBACxD,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa;gBACtD,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;;AAEpD,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,SAAS;AAC7C,oBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,SAAS;AACzC,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,SAAS;AACrC,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,SAAS,EAAE;AACvC,oBAAA,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE;gBACrC;AACA,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,SAAS;AACvE,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,SAAS;AACrC,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,SAAS,EAAE;AACrC,oBAAA,IAAI,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE;gBAC3C;AAAO,qBAAA,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,SAAS,EAAE;AAC/E,oBAAA,IAAI,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE;gBAC3C;gBACA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,oBAAA,IAAI,CAAC,YAAY,CAAC,cAAc,IAAI,SAAS;AAC7C,oBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,SAAS;AAC3C,oBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,SAAS,EAAE;AAC9C,oBAAA,IAAI,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE;gBACvC;YACF,CAAC,EAAE,GAAG,CAAC;QACT;aAAO;YACL,IAAI,CAAC,WAAW,EAAE;QACpB;IAEF;AAEA;;AAEG;IACO,WAAW,GAAA;AACnB,QAAA,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,gBAAgB,CAAC;QACnF,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC;QACtC;AACA,QAAA,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,SAAS;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,SAAS;AACxC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;IAC7B;AAEA;;AAEC;IACO,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE;AACxD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;AACnC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACtD;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,SAAS;QACpC;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI;YAC/C,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE;QAC7C;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,CAAC,EAAE;AACpE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU;AACzC,YAAA,IAAI,CAAC,YAAY,CAAC,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5D;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,SAAS;QAC1C;AACA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI;YAC3D,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE;QACzD;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACxF;IACF;AAEA;;AAEE;IACQ,WAAW,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAClB;IACF;AAGA;;AAEG;IACO,cAAc,GAAA;;AAEtB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,EAAE;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,SAAS;QAClC,IAAI,OAAO,GAA4B,EAAE;AACzC,QAAA,MAAM,OAAO,GACX,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI;AACzC,cAAE,IAAI,CAAC,YAAY,CAAC;AACpB,cAAE,IAAI,CAAC,OAAO,EAAE;AACpB,QAAA,cAAc,CAAC,OAAO,CAAC,CAAC,IAAG;AACzB,YAAA,IAAI,OAAO;gBACT,OAAO,CAAC,MAAM,GAAG,CAAC;AAClB,gBAAA,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;AACvD,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACjB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;AACvB,YAAA,cAAc,CAAC,OAAO,CAAC,CAAC,IAAG;AACzB,gBAAA,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;AACf,oBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjB;AACF,YAAA,CAAC,CAAC;QACJ;QACA,IAAI,KAAK,GAA4B,EAAE;AACvC,QAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAG;AAC7B,YAAA,IAAI,OAAO;gBACT,OAAO,CAAC,MAAM,GAAG,CAAC;AAClB,gBAAA,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;AAC1D,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACf;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AACrB,YAAA,KAAK,GAAG,CAAC,GAAG,kBAAkB,CAAC;QACjC;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;AAEA;;;;AAIG;AACK,IAAA,WAAW,CAAC,MAA2B,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,MAAM,KAAK;eACrB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI;eAChC,MAAM,CAAC,MAAM,KAAK;eAClB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI;eAChC,MAAM,CAAC,KAAK,KAAK;eACjB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI;eAC/B,MAAM,CAAC,QAAQ,KAAK;eACpB,MAAM,CAAC,YAAY,KAAK;eACxB,MAAM,CAAC,YAAY,KAAK;eACxB,MAAM,CAAC,MAAM,KAAK;eAClB,MAAM,CAAC,QAAQ,KAAK;eACpB,MAAM,CAAC,MAAM,KAAK;eAClB,MAAM,CAAC,IAAI,KAAK;eAChB,MAAM,CAAC,YAAY,KAAK;eACxB,MAAM,CAAC,MAAM,KAAK;eAClB,MAAM,CAAC,cAAc,KAAK;eAC1B,MAAM,CAAC,YAAY,KAAK;eACxB,MAAM,CAAC,UAAU,KAAK;eACtB,MAAM,CAAC,GAAG,KAAK;eACf,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI;eAC7B,MAAM,CAAC,IAAI,KAAK;eAChB,MAAM,CAAC,SAAS,KAAK;eACrB,MAAM,CAAC,IAAI,KAAK;eAChB,MAAM,CAAC,uBAAuB,KAAK;eACnC,MAAM,CAAC,0BAA0B,KAAK;eACtC,MAAM,CAAC,YAAY,KAAK;eACxB,MAAM,CAAC,aAAa,KAAK;eACzB,MAAM,CAAC,WAAW,KAAK;eACvB,MAAM,CAAC,YAAY,KAAK;eACxB,MAAM,CAAC,cAAc,KAAK;eAC1B,MAAM,CAAC,YAAY,KAAK;eACxB,MAAM,CAAC,aAAa,KAAK;eACzB,MAAM,CAAC,KAAK,KAAK;eACjB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI;eAC/B,MAAM,CAAC,MAAM,KAAK;eAClB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI;AAChC,eAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI;AACtB,eAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI;AACpB,eAAA,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI;AAC5B,eAAA,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,IAAI;IACrC;AAGA;;;;AAIG;AACK,IAAA,cAAc,CAAC,MAAqB,EAAA;AAC1C,QAAA,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;IACzH;AAEA;;AAEG;IACK,wBAAwB,GAAA;QAC9B,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,IAAG;YAC9B,IAAI,WAAW,GAAG,CAAC;YACnB,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC,IAAI,EAAE;AACvC,gBAAA,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;YAC7F;iBAAO,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC,eAAe,EAAE;AACzD,gBAAA,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC;YACjG;iBAAO,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC,cAAc,EAAE;AACxD,gBAAA,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;YAC9F;iBAAO,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC,qBAAqB,EAAE;AAC/D,gBAAA,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC;YAChG;iBAAO;AACL,gBAAA,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;YAChF;AACA,YAAA,IAAI,WAAW,GAAG,CAAC,EAAE;AACnB,gBAAA,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE;AACnC,gBAAA,MAAM,CAAC,OAAO,GAAG,WAAW,GAAG,YAAY;YAC7C;iBAAO;AACL,gBAAA,MAAM,CAAC,GAAG,GAAG,SAAS;AACtB,gBAAA,MAAM,CAAC,OAAO,GAAG,SAAS;YAC5B;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IAC5C;AAEA;;;;AAIG;AACK,IAAA,SAAS,CAAC,MAAqB,EAAA;AACrC,QAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3G,YAAA,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D;AAEA;;AAEG;IACO,cAAc,GAAA;AACtB,QAAA,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;;QAE/D,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE;;YAE7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;AACnE,gBAAA,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;YACxD,CAAC,CAAC,CAAC;QACL;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;;YAEzF,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE;AAC5D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB;iBAAO,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE;AACnE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;AACzF,oBAAA,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;gBACxD,CAAC,CAAC,CAAC;YACL;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;AACnE,oBAAA,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;gBACxD,CAAC,CAAC,CAAC;YACL;QACF;AACA,QAAA,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE;QACvB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,qBAAqB,EAAE;IAC9B;AAEA;;;;;AAKG;AACK,IAAA,YAAY,CAAC,OAAwB,EAAE,IAAA,GAAe,CAAC,EAAA;AAC7D,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO;QAChD,IAAI,EAAE,GAAY,KAAK;AACvB,QAAA,IAAI,IAAI,KAAK,CAAC,EAAE;;AAEd,YAAA,cAAc,EAAE,OAAO,CAAC,CAAC,IAAG;gBAC1B,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;gBACzD,IAAI,CAAC,EAAE,EAAE;oBACP;gBACF;AACF,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,EAAE,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC;QAC9D;AAAO,aAAA,IAAI,IAAI,KAAK,CAAC,EAAE;;AAErB,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAG;gBAClB,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;gBACjE,IAAI,CAAC,EAAE,EAAE;oBACP;gBACF;AACF,YAAA,CAAC,CAAC;QACJ;AAAO,aAAA,IAAI,IAAI,KAAK,CAAC,EAAE;;AAErB,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAG;gBAClB,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;gBACjE,IAAI,EAAE,EAAE;oBACN;gBACF;AACF,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,EAAE;IACX;AAEA;;;;AAIC;IACO,YAAY,CAAC,YAAqB,KAAK,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU;YACrD,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ;QACnD;AACA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU;YACjE,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ;QAC/D;AACA,QAAA,IAAI,SAAS,GAAwB,IAAI,mBAAmB,EAAE;AAC9D,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;YAChD,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;YACzC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ;YAC/C,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;YACzC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ;AAC/C,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;gBACzB,SAAS,CAAC,MAAM,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC;gBAC/C,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE;gBACnD,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE;gBACnD,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ;gBAC/C,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;gBAC3C,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY;gBACvD,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa;gBACzD,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW;gBACrD,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY;gBACvD,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc;gBAC3D,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY;gBACvD,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa;YAC3D;iBAAO;gBACL,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;gBACvC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS;gBACjD,SAAS,CAAC,sBAAsB,GAAG,IAAI,CAAC,YAAY,CAAC,sBAAsB;gBAC3E,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ;gBAC/C,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;AAC3C,gBAAA,SAAS,CAAC,MAAM,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;gBACjF,IAAI,IAAI,CAAC,YAAY,CAAC;AACpB,oBAAA,aAAa,CAAC,IAAI;AAClB,oBAAA,aAAa,CAAC,+BAA+B;AAC7C,oBAAA,aAAa,CAAC,qBAAqB;AACnC,oBAAA,aAAa,CAAC,mBAAmB;AACjC,oBAAA,aAAa,CAAC;iBAAkB,EAAE,CAAC,CAAC,EAAE;oBACtC,SAAS,CAAC,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB;gBAC/E;gBACA,IAAI,IAAI,CAAC,YAAY,CAAC;AACpB,oBAAA,aAAa,CAAC,gBAAgB;AAC9B,oBAAA,aAAa,CAAC,+BAA+B;AAC7C,oBAAA,aAAa,CAAC;iBAAsB,EAAE,CAAC,CAAC,EAAE;oBAC1C,SAAS,CAAC,0BAA0B,GAAG,IAAI,CAAC,YAAY,CAAC,0BAA0B;oBACnF,SAAS,CAAC,6BAA6B,GAAG,IAAI,CAAC,YAAY,CAAC,6BAA6B;oBACzF,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO;oBAC7C,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;oBAC3C,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;oBACvC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;oBAC3C,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE;AACnD,oBAAA,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC7D,wBAAA,SAAS,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;oBACtE;oBACA,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;AAC/C,oBAAA,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACzD,wBAAA,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;oBAClE;oBACA,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;oBAC3C,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY;oBACvD,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU;oBACnD,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc;oBAC3D,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY;gBACzD;AACA,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;oBAC9C,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;gBACzC;YACF;QACF;aAAO;YACL,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;YAChD,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE;AACnD,YAAA,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC7D,gBAAA,SAAS,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACtE;YACA,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;AAC/C,YAAA,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACzD,gBAAA,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YAClE;QACF;;AAEA,QAAA,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,8BAA8B,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC;AACpG,QAAA,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,EAAE;YAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACpC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;YAC7F,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrC;QACA,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK;;QAExC,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;YACnC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ;YACnD,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;AAC/C,YAAA,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE;QAC/D;QACA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;YACjC,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;AACjC,gBAAA,MAAM,KAAK,GAAiB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAiB;AAClF,gBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,oBAAA,SAAS,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;gBAC5B;;oBACE,SAAS,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YACjF;iBAAO;gBACL,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC;AACvC,oBAAA,SAAS,CAAC,MAAM,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YACrF;QACF;QACA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;YAC/B,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAC1E;QACA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;YACjC,SAAS,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAC/E;AAEA,QAAA,SAAS,CAAC,OAAO,GAAG,CAAC;AACrB,QAAA,SAAS,CAAC,KAAK,GAAG,EAAE;QACpB,IAAI,SAAS,EAAE;AACb,YAAA,SAAS,CAAC,KAAK,GAAG,CAAC;QACrB;;QAGA,IAAI,CAAC,uBAAuB,EAAE;AAE9B,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;IACK,uBAAuB,GAAA;QAC7B,IAAI,iBAAiB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC1C,IAAI,CAAC,GAAG,CAAC;gBAAE,iBAAiB,IAAI,IAAI;AACpC,YAAA,iBAAiB,IAAI,CAAC,CAAC,SAAS;AAClC,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;YAChD,iBAAiB,IAAI,KAAK;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBAC1C,IAAI,CAAC,GAAG,CAAC;oBAAE,iBAAiB,IAAI,IAAI;AACpC,gBAAA,iBAAiB,IAAI,CAAC,CAAC,IAAI;AAC7B,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;YAChD,iBAAiB,IAAI,KAAK;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBAC1C,IAAI,CAAC,GAAG,CAAC;oBAAE,iBAAiB,IAAI,IAAI;AACpC,gBAAA,iBAAiB,IAAI,CAAC,CAAC,IAAI;AAC7B,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC/C;AAEA;;;AAGE;AACQ,IAAA,WAAW,CAAC,MAA2B,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YAAE;AACrC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM;AACnC,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,CAAC,IAAG;AACR,gBAAA,IAAI,CAAC,CAAC,OAAO,EAAE;AACb,oBAAA,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AACjD,oBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE;AAClB,wBAAA,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;wBACvD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;4BAChC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE;AACrC,4BAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;AAC3C,4BAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,IAAI;wBAC9E;oBACF;AACA,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;oBAC7B,IAAI,CAAC,0BAA0B,EAAE;gBACnC;YACF,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5B;AACD,SAAA,CAAC;IACN;AAEA;;AAEG;IACO,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;IAChC;AAEA;;;AAGG;IACO,KAAK,CAAC,YAAqB,KAAK,EAAA;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;AACjD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAC9C,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,YAAY;AACnC,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;aACnD,SAAS,CAAC,CAAC,IAAG;YACb,IAAI,CAAC,CAAC,CAAC,OAAO;gBAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;iBAC9C;;gBAEH,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC;;gBAEvC,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE;oBACjC,IAAI,SAAS,EAAE;AACb,wBAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;oBAChC;gBACF;qBAAO;oBACL,IAAI,CAAC,UAAU,EAAE;gBACnB;gBAEA,IAAI,SAAS,EAAE;AACb,oBAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,wBAAA,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,GAAG,CAAC;oBAChC;AACA,oBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;gBACnE;AAEA,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,0BAA0B,EAAE;YACnC;AACF,QAAA,CAAC,CAAC;IACN;AAEA;;;AAGE;AACQ,IAAA,SAAS,CAAC,CAAY,EAAA;AAC9B,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC;AACzD,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK;QAC/B,IAAI,CAAC,KAAK,EAAE;IACd;AAGA;;;AAGC;AACS,IAAA,IAAI,CAAC,OAA4B,EAAA;QACzC,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;YACvB,IAAI,CAAC,KAAK,EAAE;QACd;IACF;AAEA;;AAEA;IACU,IAAI,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kCAAkC,EAAE;AAC1D,YAAA,SAAS,EAAE,sBAAsB;AACjC,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,KAAK,EAAE,KAAK;AACb,SAAA,CAAC;IAEJ;AAEA;;AAEG;IACO,OAAO,GAAA;QACf,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,0CAA0C,EAAE;AAC1E,YAAA,SAAS,EAAE,oBAAoB;AAC/B,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,KAAK,EAAE,KAAK;AACb,SAAA,CAAC;QACF,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAiC,KAAI;YACvE,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK;AACrC,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YAClC,CAAC,CAAC,KAAK,EAAE;AACX,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEC;IACS,QAAQ,GAAA;AAChB,QAAA,IAAI,CAAC;aACF,UAAU,CACT,IAAI,CAAC,MAAM,EACX,wBAAwB,EACxB,SAAS,EACT,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AAC9D,cAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;cAC9D,SAAS;AAEd,aAAA,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAG;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC7B,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE;YAC/B;AACA,YAAA,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,IAAG;gBAC7B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;AAC3E,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AACpC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;AACO,IAAA,WAAW,CAAC,IAA2B,EAAA;QAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACZ,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACpC;IACF;AAEA;;AAEG;IACO,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IACpC;8GA/nCW,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,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,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,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,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,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,4BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnDpC,silCA+mBW,EAAA,MAAA,EAAA,CAAA,gyfAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtkBC,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,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,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,yEAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gNAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,+bAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,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,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,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,EAAAM,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACzG,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,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,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,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,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,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,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,iNACtH,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,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,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,EAAA,+BAAA,EAAA,aAAA,EAAA,IAAA,EAAA,UAAA,EAAA,UAAA,EAAA,iCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,wEAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpJ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,cAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrF,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,EAAA,aAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAA8B,gCAAgC,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAM/G,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAbnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB;wBACzG,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,QAAQ;AACtH,wBAAA,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB;AACpJ,wBAAA,aAAa,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,qBAAqB;AACrF,wBAAA,4BAA4B,EAAE,0BAA0B,EAAE,gCAAgC,EAAE,4BAA4B;AACxH,wBAAA,kCAAkC,EAAE,0CAA0C,CAAC,EAAA,eAAA,EAGhE,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,silCAAA,EAAA,MAAA,EAAA,CAAA,gyfAAA,CAAA,EAAA;AAKD,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,gBAAgB,sEAClB,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACN,sBAAsB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACtB,YAAY,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACX,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACL,gBAAgB,wEACR,gBAAgB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACxB,sBAAsB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,0BAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAChB,4BAA4B,gFAChC,wBAAwB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEnC5E,6BAA6B,CAAA;AAR1C,IAAA,WAAA,GAAA;AASU,QAAA,IAAA,CAAA,WAAW,GAAkB,IAAI,OAAO,EAAQ;AAC/C,QAAA,IAAA,CAAA,cAAc,GAAG,SAAS,CAAC,QAAQ,CAA0B,gBAAgB,CAAC;AAC7E,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACzC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxC,QAAA,IAAA,CAAA,UAAU,GAA6B,MAAM,CAAC,eAAe,CAAC;AAChE,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,EAAC,YAA2C,EAAC;AAC/D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAgEpD,IAAA;IA7DC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU;AAC7B,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;aAChC,SAAS,CAAC,OAAO,IAAG;YACnB,IAAI,OAAO,CAAC,EAAE,KAAK,eAAe,CAAC,uBAAuB,EAAE;gBAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtG,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAC9B,IAAI,CAAC,UAAU,CAAC,gBAAgB,IAAI,eAAe,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,CAAC;AACrF,oBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAClC,oBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;gBACxB;YACF;AACF,QAAA,CAAC,CAAC;IACN;IAEF,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IACxE;AAEE;;AAEG;IACO,SAAS,GAAA;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS;QACjD,IAAI,KAAK,GACP,SAAS;aACR,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,oBAAoB,CAAC,MAAM;AAC7D,gBAAA,SAAS,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;iBACzB,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,oBAAoB,CAAC,SAAS;AAC/D,oBAAA,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;iBAC1B,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,oBAAoB,CAAC,KAAK;oBAC3D,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChC,QAAA,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;AACjE,YAAA,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,IAAG;gBACzB,MAAM,MAAM,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBACxD,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC1E,KAAK,GAAG,KAAK;oBACb;gBACF;AACF,YAAA,CAAC,CAAC;QACJ;QACA,OAAO,KAAK,KAAK,IAAI;IAEvB;AAEA;;AAEG;IACO,MAAM,GAAA;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS;AACjD,QAAA,IAAI,SAAS,EAAE,GAAG,IAAI,SAAS,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAC/B,IAAI,CAAC,UAAU,CAAC,gBAAgB,IAAI,eAAe,CAAC,iBAAiB,EACrE,SAAS,EAAE,GAAG,CACf;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAClC,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QACxB;IACF;8GArEW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAPxB,WAAW,CAAC,YAAY,EAAE,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrB5C,w3EAwCqB,q+bDhBT,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,8iBAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhB,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,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,EAAE,gBAAgB,u+HAAE,uBAAuB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAI1H,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBARzC,SAAS;AACF,YAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,EAAE,EAAA,OAAA,EAGnC,CAAC,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,EAAA,UAAA,EAC1H,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,w3EAAA,EAAA,MAAA,EAAA,CAAA,66bAAA,CAAA,EAAA;4EAIuB,gBAAgB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE9BxF;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"arsedizioni-ars-utils-clipper.ui.mjs","sources":["../../../projects/ars-utils/clipper.ui/ui/document-index/document-index.component.ts","../../../projects/ars-utils/clipper.ui/ui/document-index/document-index.component.html","../../../projects/ars-utils/clipper.ui/ui/document-manager/document-manager.ts","../../../projects/ars-utils/clipper.ui/ui/document-menu/document-menu.component.ts","../../../projects/ars-utils/clipper.ui/ui/document-menu/document-menu.component.html","../../../projects/ars-utils/clipper.ui/ui/document/document.component.ts","../../../projects/ars-utils/clipper.ui/ui/document/document.component.html","../../../projects/ars-utils/clipper.ui/documents.ts","../../../projects/ars-utils/clipper.ui/ui/search-calendar/search-calendar.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-calendar/search-calendar.component.html","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.html","../../../projects/ars-utils/clipper.ui/ui/search-result-manager/search-result-manager.ts","../../../projects/ars-utils/clipper.ui/ui/search-result-item/search-result-item.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-result-item/search-result-item.component.html","../../../projects/ars-utils/clipper.ui/ui/references/references.component.ts","../../../projects/ars-utils/clipper.ui/ui/references/references.component.html","../../../projects/ars-utils/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.html","../../../projects/ars-utils/clipper.ui/ui/search-free-text-help/search-free-text-help.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-help/search-free-text-help.component.html","../../../projects/ars-utils/clipper.ui/ui/browser/browser.component.ts","../../../projects/ars-utils/clipper.ui/ui/browser/browser.component.html","../../../projects/ars-utils/clipper.ui/ui/browser/browser-dialog/browser-dialog.component.ts","../../../projects/ars-utils/clipper.ui/ui/browser/browser-dialog/browser-dialog.component.html","../../../projects/ars-utils/clipper.ui/public_api.ts","../../../projects/ars-utils/clipper.ui/arsedizioni-ars-utils-clipper.ui.ts"],"sourcesContent":["import { NgStyle } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnInit,\r\n inject,\r\n signal,\r\n output,\r\n viewChild\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatListModule, MatSelectionList } from '@angular/material/list';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperDocumentAnchorInfo,\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { finalize } from 'rxjs';\r\n\r\n\r\nexport interface ClipperDocumentIndexDialogData {\r\n documentId: string;\r\n excludedTypes?: number[];\r\n multiple?: boolean;\r\n}\r\n\r\nexport interface ClipperDocumentIndexDialogResult {\r\n data: ClipperDocumentAnchorInfo[]\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './document-index.component.html',\r\n styleUrls: ['./document-index.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FlexLayoutModule,\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatListModule,\r\n NgStyle,\r\n MatTooltipModule,\r\n MatDialogActions,\r\n MatButtonModule,\r\n MatDialogClose,\r\n ],\r\n})\r\nexport class ClipperDocumentIndexComponent implements OnInit {\r\n readonly selection = viewChild.required<MatSelectionList>('selection');\r\n readonly done = output<ClipperDocumentIndexDialogResult>();\r\n\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private clipperService = inject(ClipperService);\r\n private dialogService = inject(DialogService);\r\n protected dialogData: ClipperDocumentIndexDialogData = inject(MAT_DIALOG_DATA);\r\n protected items?: ClipperDocumentAnchorInfo[];\r\n protected okDisabled = signal<boolean>(false);\r\n\r\n ngOnInit(): void {\r\n if (this.dialogData) {\r\n if (this.dialogData.documentId) {\r\n this.load();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Display document structure\r\n */\r\n private load() {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!this.dialogData) return;\r\n this.dialogService.setBusy('Caricamento in corso...');\r\n this.clipperService.index(this.dialogData.documentId)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.items = [];\r\n r.value?.items.forEach((n: ClipperDocumentAnchorInfo) => {\r\n\r\n if (!this.dialogData.excludedTypes || this.dialogData.excludedTypes.indexOf(n.type) === -1) {\r\n if (n.title) n.description = n.title;\r\n else {\r\n if (n.type < 3) {\r\n n.description = n.text.trim();\r\n } else {\r\n n.description =\r\n n.typeDescription.trim() + ' ' + n.text.trim() + '.';\r\n }\r\n }\r\n this.items.push(n);\r\n }\r\n });\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n });\r\n }\r\n\r\n /**\r\n * Handle selection/deselection of an item\r\n */\r\n protected select() {\r\n const selection = this.selection();\r\n this.okDisabled.set(\r\n !selection || selection.selectedOptions.selected.length === 0);\r\n }\r\n\r\n /**\r\n * Confirm selection\r\n * @param item: the selected item or null to use multiple selection if allowed\r\n */\r\n protected use(item: ClipperDocumentAnchorInfo = null) {\r\n if (this.okDisabled()) return;\r\n if (this.dialogData?.multiple) {\r\n if (item) return; // multiple and single item selection not supported\r\n let selection: ClipperDocumentAnchorInfo[] = [];\r\n this.selection().selectedOptions.selected.forEach(n => {\r\n selection.push(n.value);\r\n });\r\n this.done.emit({ data: selection });\r\n } else if (item) {\r\n this.done.emit({ data: [item] });\r\n }\r\n }\r\n}\r\n","<h2 mat-dialog-title>Indice</h2>\r\n<mat-dialog-content>\r\n @if (!items || items.length === 0) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <mat-selection-list dense #selection (selectionChange)=\"select();\" [multiple]=\"dialogData.multiple\"\r\n hideSingleSelectionIndicator=\"true\">\r\n @for (item of items; track $index) {\r\n @if (item.type > 4) {\r\n <div class=\"small uppercase truncated accent\" style=\"display: flex; align-items: center; min-height: 36px;\">\r\n <div><b>{{item.description}}</b></div>\r\n </div>\r\n } @else {\r\n <mat-list-option [selected]=\"false\" [value]=\"item\" (click)=\"use(item)\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div [fxFlex]=\"(10 * item.level) + 'px'\"></div>\r\n <div fxFlex=\"*\" class=\"truncated\">\r\n <div class=\"small\" [matTooltip]=\"item.description\">{{item.description}}</div>\r\n </div>\r\n </div>\r\n </mat-list-option>\r\n }\r\n }\r\n </mat-selection-list>\r\n }\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n @if (dialogData.multiple) {\r\n <button mat-flat-button [disabled]=\"okDisabled()\" (click)=\"use()\">Usa</button>\r\n }\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n</mat-dialog-actions>","import { Clipboard } from '@angular/cdk/clipboard';\r\nimport { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\r\nimport { ClipperDocumentInfo, ClipperExportDocumentsParams, ClipperMessages, ClipperModel, ClipperModule, ClipperQueryReferencesMode, ClipperSearchParams, ClipperSendDocumentsByEmailParams, ClipperService } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { BroadcastService, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogResult } from '@arsedizioni/ars-utils/ui';\r\nimport { ApplicationDialogService, SelectableItem, SelectDialogDelete, SendToDialogComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport saveAs from 'file-saver';\r\nimport { ClipperReferenceDialogResult, ClipperReferencesComponent } from '../references/references.component';\r\nimport { finalize } from 'rxjs';\r\n\r\n\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ClipperDocumentManager {\r\n\r\n protected clipboard = inject(Clipboard);\r\n public clipperService = inject(ClipperService);\r\n protected broadcastService = inject(BroadcastService);\r\n protected dialogService = inject(ApplicationDialogService);\r\n protected canUseArchive = signal<boolean>(false);\r\n protected canHandleTooManyResults = signal<boolean>(false);\r\n\r\n\r\n\r\n /**\r\n * Export a document in pdf format\r\n * @param item : the document to export\r\n */\r\n exportPdf(item: ClipperDocumentInfo) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!item) return;\r\n this.dialogService\r\n .confirm(\"Confermi l'esportazione?\", 'Attenzione!')\r\n .componentInstance.choosen.subscribe((data: DialogResult) => {\r\n if (data.result === 'ok') {\r\n const id = item.id || item.documentId;\r\n this.dialogService.busy('Esportazione in corso...');\r\n this.clipperService.exportPdf(id)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n saveAs(r, (item.title1 ? item.title1 : id) + '.pdf');\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Export current document list or just the selected documents as a csv\r\n * @param documentIds: the document id list\r\n * @param searchParams: the search params\r\n * @param format: the export format: 1) list 2) deadlines\r\n */\r\n exportItems(\r\n documentIds: string[] | undefined,\r\n searchParams: ClipperSearchParams | undefined = undefined,\r\n format: number = 1) {\r\n if (!this.clipperService.loggedIn()) return;\r\n let model: ClipperExportDocumentsParams = { ids: documentIds ?? [], query: null, format: format };\r\n if (!model.ids || model.ids.length === 0) {\r\n model.query = searchParams;\r\n }\r\n this.dialogService.busy('Salvataggio in corso...');\r\n this.clipperService.export(model)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (r.type === 'application/json') {\r\n r.text().then(json => this.dialogService.error(JSON.parse(json).message));\r\n } else {\r\n if (format === 1) {\r\n saveAs(r, 'elenco_' + SystemUtils.formatDate(new Date(), 'yyyyMMddhhmmss') + '.csv');\r\n } else {\r\n saveAs(r, 'scadenze_' + SystemUtils.formatDate(new Date(), 'yyyyMMddhhmmss') + '.ics');\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Export a single deadline\r\n * @param item : the document to export\r\n */\r\n exportDeadline(item: ClipperDocumentInfo) {\r\n this.exportItems([item.documentId], undefined, 2);\r\n }\r\n\r\n /**\r\n * Archive a list of items\r\n * @param items: the item list\r\n */\r\n addToArchive(items: ClipperDocumentInfo[]) {\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_ARCHIVE_ADD, items);\r\n }\r\n\r\n /**\r\n * Create a new deadline\r\n * @param item : the item to add\r\n */\r\n addToCalendar(item: ClipperDocumentInfo) {\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_CALENDAR_ADD, item);\r\n }\r\n\r\n /**\r\n * Add a list of items to working documents\r\n * @param items : the item list\r\n */\r\n addItemsToWorkingDocuments(items: ClipperDocumentInfo[]) {\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_WORKING_ADD, items);\r\n }\r\n\r\n /**\r\n * Add a list of items to working documents\r\n * @param items : the item list\r\n */\r\n addItemsToBag(items: ClipperDocumentInfo[]) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.clipperService.addToBag(items?.map(n => n.documentId ?? n.id) ?? []);\r\n }\r\n\r\n\r\n /**\r\n * Copy metadata to clipboard\r\n * @param item : the item to copy\r\n */\r\n copyMetadataToClipboard(item: ClipperDocumentInfo) {\r\n if (!item || item.model === ClipperModel.Coordinamento) return;\r\n let meta =\r\n (item.id ?? item.documentId) + '\\t' +\r\n item.title1?.replaceAll(\"\\r\\n\", \" \") + '\\t';\r\n if (item.title2)\r\n meta += item.title2.replaceAll(\"\\r\\n\", \" \");\r\n meta += '\\t';\r\n if (item.number)\r\n meta += item.number;\r\n meta += '\\t';\r\n if (item.publishingDate) {\r\n item.publishingDate = new Date(item.publishingDate);\r\n meta += SystemUtils.formatDate(item.publishingDate);\r\n } else if (item.date) {\r\n item.date = new Date(item.date);\r\n meta += SystemUtils.formatDate(item.date);\r\n }\r\n meta += '\\t';\r\n if (item.originDescription)\r\n meta += item.originDescription\r\n this.clipboard.copy(meta);\r\n this.dialogService.toast(\"Metadati copiati negli appunti.\");\r\n }\r\n\r\n /**\r\n * Show a document permalink\r\n * @param item : the item to show the link for\r\n */\r\n showLink(item: ClipperDocumentInfo) {\r\n if (!item) return;\r\n let id = item.id ? item.id : item.documentId;\r\n const channels = item.channelName\r\n ? 'Canali: ' + item.channelName + '<br>'\r\n : '';\r\n let origin = item.origin\r\n ? 'Origine: ' +\r\n item.origin +\r\n ' - ' +\r\n (item.originDescription ? item.originDescription : '') +\r\n '<br>'\r\n : '';\r\n const topics = item.topics ? 'Argomento: ' + item.topics + '<br>' : '';\r\n if (!id) return;\r\n let message =\r\n \"<p >Il link che trovi qui sotto è un riferimento diretto al documento selezionato.</p>\" +\r\n \"<p >Lo puoi utilizzare nella tua documentazione o inviarlo per email ad un tuo collega. La persona che desidererà visualizzare il documento dovrà necessariamente essere un utente abbonato.</p>\" +\r\n \"<p >Seleziona e copia (fai CTRL+C) il link qui sotto.</p>\" +\r\n \"<div class='small accent'>\" +\r\n 'https://clipper.arsedizioni.it/?id=' +\r\n id +\r\n '</div>' +\r\n '<br>' +\r\n '<hr>' +\r\n '<p class=\"small\">' +\r\n channels +\r\n origin +\r\n topics\r\n '</p>';\r\n\r\n this.dialogService.info(message, 'Copia link', 'Chiudi');\r\n }\r\n\r\n /**\r\n * Send documents links by email\r\n * @param items : the document list\r\n */\r\n sendItemsTo(items: ClipperDocumentInfo[]) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!items || items.length === 0) return;\r\n const d = this.dialogService.open(SendToDialogComponent, {\r\n ariaLabel: 'invia documenti per email',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n closeOnNavigation: false,\r\n data: {\r\n info:\r\n 'Puoi inviare i documenti a chi vuoi ma, per poterli visualizzare, è necessario essere un utente abbonato.',\r\n count: items.length,\r\n },\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '100%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((data: ClipperSendDocumentsByEmailParams) => {\r\n data.ids = items?.map(n => n.documentId ?? n.id) ?? [];\r\n this.dialogService.busy('Invio in corso...');\r\n this.clipperService.sendTo(data)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.dialogService.toast('Invio completato con successo.');\r\n d.close();\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Display a document report\r\n * @param documentId : the document id\r\n * @param title: the document short title\r\n */\r\n openReport(documentId: string, title?: string ) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!documentId) return;\r\n this.clipperService.report(documentId)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n saveAs(r, (title ? title : documentId) + '.html');\r\n });\r\n }\r\n\r\n /**\r\n * Open an item\r\n * This should be always overridden\r\n * @param documentId : the document id\r\n * @param query : the query document\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n open(\r\n _documentId?: string,\r\n _query?: string,\r\n _newWindow?: boolean) {\r\n }\r\n\r\n /**\r\n * Display a document report\r\n * @param item : the document\r\n */\r\n report(item: ClipperDocumentInfo) {\r\n if (!item) return;\r\n if (item.model != ClipperModel.NormativaVigente && item.model != ClipperModel.Scadenze) {\r\n this.dialogService.info(\"Questa funzionalità non è disponibile per questo tipo di documento.\");\r\n return;\r\n } else {\r\n this.openReport(item.documentId, item.title1);\r\n }\r\n }\r\n\r\n /**\r\n * Browse document references\r\n * @param document id : the document id\r\n * @param mode : the reference mode\r\n */\r\n openReferences(documentId: string, mode: ClipperQueryReferencesMode = ClipperQueryReferencesMode.ReferencesIn) {\r\n if (!documentId) return;\r\n const d = this.dialogService.open(ClipperReferencesComponent, {\r\n ariaLabel: 'riferimenti legati al documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n closeOnNavigation: false,\r\n data: { \r\n documentId: documentId, \r\n mode: mode, \r\n canUseArchive: this.canUseArchive(),\r\n canHandleTooManyResults: this.canHandleTooManyResults() \r\n },\r\n minWidth: '375px',\r\n maxWidth: '1200px',\r\n width: '100%',\r\n height: '100%',\r\n });\r\n d.afterClosed()\r\n .subscribe((r: ClipperReferenceDialogResult) => {\r\n if (r && r.documentId) this.open(r.documentId);\r\n });\r\n }\r\n\r\n /**\r\n * Manage clipper bag\r\n */\r\n openBag() {\r\n let items: SelectableItem[] = [];\r\n this.clipperService.bag().forEach(n => {\r\n let title = n.title1 ?? n.title2;\r\n items.push({\r\n template: title,\r\n bag: n,\r\n searchBag: { name: title },\r\n });\r\n });\r\n const d = this.dialogService.select({\r\n title: 'Gestisci documenti di lavoro',\r\n multipleSelection: false,\r\n mustSelect: false,\r\n okCaption: 'SELEZIONA',\r\n items: items,\r\n total: items?.length ?? 0,\r\n canDelete: true,\r\n canView: true,\r\n });\r\n d.componentInstance.view\r\n .subscribe((r: SelectableItem) => {\r\n let item = r.bag;\r\n this.open(item.documentId);\r\n });\r\n d.componentInstance.delete\r\n .subscribe((r: SelectDialogDelete) => {\r\n var item = r.selectedItems[0].bag;\r\n this.clipperService.removeFromBag(item.documentId).add(\r\n () => {\r\n this.dialogService.toast('Operazione completata con successo.');\r\n for (let p = 0; p < r.items.length; p++) {\r\n if (r.items[p].bag.DocumentId === item.DocumentId) {\r\n r.items.splice(p, 1);\r\n if (r.items.length === 0) d.close();\r\n return;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Print current document\r\n */\r\n print() {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"print\"}', '*');\r\n }\r\n\r\n /**\r\n * Find in current document\r\n */\r\n find() {\r\n this.dialogService.info('Per cercare nel documento premi CTRL + F.');\r\n }\r\n\r\n\r\n ////\r\n // AI Assistant\r\n ////\r\n /**\r\n * AI: concern me service\r\n * @param document: the document\r\n */\r\n AI_concernMe(document?: ClipperDocumentInfo) {\r\n if (!document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.AI_CONCERN_ME, document);\r\n }\r\n\r\n /**\r\n * AI: explain service\r\n * @param document: the document\r\n */\r\n AI_explain(document?: ClipperDocumentInfo) {\r\n if (!document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.AI_EXPLAIN, document);\r\n }\r\n\r\n\r\n /**\r\n * AI: comment service\r\n * @param document: the document\r\n */\r\n AI_comment(document?: ClipperDocumentInfo) {\r\n if (!document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.AI_COMMENT, document);\r\n }\r\n\r\n /**\r\n* AI: news service\r\n* @param document: the document\r\n*/\r\n AI_news(document?: ClipperDocumentInfo) {\r\n if (!document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.AI_NEWS, document);\r\n }\r\n\r\n ////\r\n // Registro e scadenzario\r\n ////\r\n\r\n /**\r\n * Checks if a module is supported by RS\r\n * @param module : the module to check\r\n * @returns: true if the module is supported\r\n */\r\n isModuleSupportedByRS(module: ClipperModule): boolean {\r\n return module === ClipperModule.GazzetteBollettiniEFontiDiverse ||\r\n module === ClipperModule.NormativaVigente ||\r\n module === ClipperModule.ScadenzeESegnalazioni;\r\n }\r\n\r\n /**\r\n * Checks if a model is supported by RS\r\n * @param model : the model to check\r\n * @returns: true if the model is supported\r\n */\r\n isModelSupportedByRS(model: ClipperModel): boolean {\r\n return model === ClipperModel.AggiornamentoNormativo ||\r\n model === ClipperModel.NormativaVigente ||\r\n model === ClipperModel.Scadenze;\r\n\r\n }\r\n\r\n /**\r\n * Checks if all documents are supported by RS\r\n * @param documents : the list of documents\r\n * @returns: true if all documents supports RS\r\n */\r\n canSupportRS(documents: ClipperDocumentInfo[]): boolean {\r\n let allow = false;\r\n documents.forEach(n => {\r\n allow = this.isModelSupportedByRS(n.model);\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n /**\r\n * Checks if RS is enabled for all given documents\r\n * @param documents : the documents to check\r\n * @returns true if alla documents ar RS enabled\r\n */\r\n RS_enabled(documents: ClipperDocumentInfo[]): boolean {\r\n if (!documents || documents.length === 0) return false;\r\n let allow = false;\r\n documents.forEach(n => {\r\n allow = n && (n.model === ClipperModel.NormativaVigente ||\r\n n.model === ClipperModel.AggiornamentoNormativo ||\r\n n.model === ClipperModel.GiurisprudenzaRecente ||\r\n n.model === ClipperModel.Scadenze);\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n /**\r\n * New law\r\n * @param documents: the array of documents to link to the law\r\n */\r\n RS_newLaw(documents?: ClipperDocumentInfo[]) {\r\n if (!this.clipperService.supportsRS() || !documents) return;\r\n this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_NEW_LAW, documents);\r\n }\r\n\r\n /**\r\n * New activity\r\n * @param document: the document to link to the activity\r\n */\r\n RS_newActivity(document?: ClipperDocumentInfo) {\r\n if (!this.clipperService.supportsRS() || !document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_NEW_ACTIVITY, document);\r\n }\r\n\r\n /**\r\n * Document usage report\r\n * @param document: the law\r\n */\r\n RS_usageReport(document?: ClipperDocumentInfo) {\r\n if (!this.clipperService.supportsRS() || !document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_USAGE_REPORT, document);\r\n }\r\n\r\n\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, Renderer2, Signal, inject, input, viewChild } from '@angular/core';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\r\nimport { FlexModule } from '@ngbracket/ngx-layout';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ClipperDocumentInfo, ClipperModel, ClipperService, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\n\r\n@Component({\r\n selector: 'clipper-document-menu',\r\n templateUrl: './document-menu.component.html',\r\n styleUrls: ['./document-menu.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexModule, MatMenuModule, MatIconModule, MatDividerModule, MatTooltipModule]\r\n\r\n})\r\nexport class ClipperDocumentMenuComponent implements OnInit, OnDestroy {\r\n\r\n private rsMenuTrigger: Signal<MatMenuTrigger | undefined> = viewChild<MatMenuTrigger>('rsMenuTrigger');\r\n private aiAssistantMenuTrigger: Signal<MatMenuTrigger | undefined> = viewChild<MatMenuTrigger>('aiAssistantMenuTrigger');\r\n private linksMenuTrigger: Signal<MatMenuTrigger | undefined> = viewChild<MatMenuTrigger>('linksMenuTrigger');\r\n private allMenuTriggers: Signal<MatMenuTrigger | undefined>[] = [\r\n this.linksMenuTrigger,\r\n this.rsMenuTrigger,\r\n this.aiAssistantMenuTrigger\r\n ]\r\n private renderer2 = inject(Renderer2);\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private clipperService = inject(ClipperService);\r\n readonly useSelections = input<boolean>(false);\r\n readonly selectionSource = input<'bag' | 'selection' | 'none' | undefined>('selection');\r\n protected selection = (): ClipperDocumentInfo[] => {\r\n if (this.useSelections()) {\r\n switch (this.selectionSource()) {\r\n case 'bag':\r\n return this.parent()?.clipperService.bag() ?? [];\r\n case 'selection':\r\n return this.parent()?.selection?.all ?? [];\r\n }\r\n }\r\n return [];\r\n };\r\n readonly parent = input.required<ClipperSearchResultManager>();\r\n readonly item = input<ClipperDocumentInfo>();\r\n readonly isReference = input<boolean>(false);\r\n readonly isReadable = input<boolean>(true);\r\n readonly isReadableModel = input<ClipperModel | undefined>(undefined);\r\n readonly isLawInForce = input<boolean>(false);\r\n readonly canPrint = input<boolean>(false);\r\n readonly canFind = input<boolean>(false);\r\n readonly canUseCalendar = input<boolean>(false);\r\n readonly canUseArchive = input<boolean>(false);\r\n readonly canUseAIAssistant = input<boolean>(false);\r\n protected canUseAIEditor: boolean = this.clipperService.loginInfo?.context.hasAIEditor;\r\n readonly canUseRS = input<boolean>(true);\r\n readonly canOpenDocument = input<boolean>(true);\r\n protected canDeselectAll = (): boolean => this.selectionSource() === 'selection' && this.selection().length > 0;\r\n protected canManageBag = (): boolean => this.selectionSource() === 'bag';\r\n protected canOpen = (): boolean => this.canOpenDocument() && this.hasSingleSelection();\r\n protected canSendByEmail = (): boolean => this.getMultipleSelection().length > 0;\r\n protected canAddToArchive = (): boolean => this.canUseArchive() && this.canSendByEmail();\r\n protected canAddToCalendar = (): boolean => {\r\n let canAdd = true;\r\n this.getMultipleSelection()?.forEach(n => {\r\n if (n.model !== ClipperModel.Scadenze && n.model !== ClipperModel.Segnalazioni) {\r\n canAdd = false;\r\n return;\r\n }\r\n });\r\n return canAdd && this.canUseCalendar() && !this.isReference();\r\n }\r\n protected canExportCalendar = (): boolean => {\r\n let canExport = true;\r\n this.getMultipleSelection()?.forEach(n => {\r\n if (n.model !== ClipperModel.Scadenze && n.model !== ClipperModel.Segnalazioni) {\r\n canExport = false;\r\n return;\r\n }\r\n });\r\n return canExport && this.canUseCalendar() && !this.isReference();\r\n }\r\n protected canAddToWorkingDocuments = (): boolean => {\r\n if (this.selectionSource() !== 'bag') {\r\n const items = this.getMultipleSelection();\r\n if (items.length > 0) {\r\n let canAdd = true;\r\n items.forEach(n => {\r\n if (n.model === ClipperModel.Coordinamento) {\r\n canAdd = false;\r\n return;\r\n }\r\n });\r\n return canAdd;\r\n }\r\n } \r\n return false;\r\n }\r\n protected canSaveAsPdf = (): boolean => {\r\n const item = this.getSingleSelection();\r\n return item !== undefined && item?.model !== ClipperModel.Coordinamento;\r\n }\r\n protected canSetAsRead = (): boolean => {\r\n const items = this.getMultipleSelection();\r\n return this.isReadable() && (items.length > 1 || (items.length === 1 && items[0].isRead !== true &&\r\n ClipperUtils.isClipperModelReadable(this.isReadableModel() ?? items[0].model)));\r\n };\r\n protected canSetAsUnread = (): boolean => {\r\n const items = this.getMultipleSelection();\r\n return this.isReadable() && (items.length > 1 || (items.length === 1 && items[0].isRead === true &&\r\n ClipperUtils.isClipperModelReadable(this.isReadableModel() ?? items[0].model)));\r\n };\r\n protected canAccessRS = (): boolean => {\r\n const items = this.getMultipleSelection();\r\n return this.clipperService.supportsRS() && this.canUseRS() && this.parent()?.RS_enabled(items) === true;\r\n };\r\n\r\n ngOnInit(): void {\r\n if (this.selectionSource() === \"selection\") {\r\n this.parent()?.selection?.changed\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(() => {\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n }\r\n\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n\r\n /**\r\n * Get a single selection\r\n * @returns the single selection or null\r\n */\r\n protected getSingleSelection(): ClipperDocumentInfo | undefined {\r\n if (this.item()) {\r\n return this.item();\r\n } else if (this.selection().length === 1) {\r\n return this.selection()[0];\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Get multiple selection\r\n * @returns : the multiple selection or array empty\r\n */\r\n protected getMultipleSelection(): ClipperDocumentInfo[] {\r\n if (this.item()) {\r\n const item = this.item();\r\n if (item) {\r\n return [item];\r\n }\r\n } else if (this.selection().length > 0) {\r\n return this.selection();\r\n }\r\n return [];\r\n }\r\n\r\n /**\r\n * Check if only one element is selected\r\n * @returns true if only one element is selectedf\r\n */\r\n protected hasSingleSelection(): boolean {\r\n return this.item()?.documentId?.length > 0 || this.selection().length === 1;\r\n }\r\n\r\n /** \r\n * Show and hide sub menus\r\n * @param trigger: the trigger to use or null to deselect\r\n */\r\n protected showSubMenu(trigger?: MatMenuTrigger) {\r\n this.allMenuTriggers.forEach(menuTrigger => {\r\n const menu = menuTrigger();\r\n if (menu) {\r\n if (menu.menuOpen) {\r\n menu.closeMenu();\r\n this.resetSubMenu(menu);\r\n }\r\n }\r\n });\r\n trigger?.openMenu();\r\n }\r\n\r\n /**\r\n * Reset sub menu\r\n * @param trigger: the trigger to use\r\n */\r\n protected resetSubMenu(trigger: MatMenuTrigger) {\r\n this.renderer2.removeClass(trigger['_element'].nativeElement, 'cdk-focused');\r\n this.renderer2.removeClass(trigger['_element'].nativeElement, 'cdk-program-focused');\r\n }\r\n\r\n /**\r\n * Check if current item or selection is read\r\n * @returns 0 if not read, 1 if read, 2 if unknown\r\n */\r\n protected isRead(): number {\r\n if (this.item()) return this.item()?.isRead === true ? 1 : 0;\r\n if (this.parent()?.hasAnySelection()) return 2;\r\n const firstSelection = this.parent()?.getSingleSelection();\r\n if (firstSelection) {\r\n return firstSelection.isRead === true ? 1 : 0;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Set the is read flag value\r\n * @param value: true or false\r\n */\r\n protected setRead(value: boolean) {\r\n this.parent()?.setRead(value, this.item());\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param item : the item \r\n * @param newWindow : true to open in new window\r\n */\r\n protected open(item: ClipperDocumentInfo, newWindow: boolean = false) {\r\n if (item.documentId) {\r\n this.parent()?.open(item.documentId, undefined, newWindow);\r\n }\r\n }\r\n\r\n /**\r\n * Open document references\r\n * @param item : the item \r\n * @param mode: the mode\r\n */\r\n protected openReferences(item: ClipperDocumentInfo, mode: number) {\r\n if (item.documentId) {\r\n this.parent()?.openReferences(item.documentId, mode);\r\n }\r\n }\r\n\r\n}\r\n","@if (canDeselectAll()) {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (canManageBag()) {\r\n<button mat-menu-item (click)=\"parent().openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\" (mouseenter)=\"showSubMenu()\"\r\n (click)=\"open(getSingleSelection())\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento in una nuova finestra'\" (mouseenter)=\"showSubMenu()\"\r\n (click)=\"open(getSingleSelection(), true)\">\r\n <mat-icon>open_in_new</mat-icon>Apri in una nuova finestra...\r\n</button>\r\n@if (canAddToWorkingDocuments()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(getMultipleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"parent().print()\" [attr.aria-label]=\"'Stampa documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <div>Stampa</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+P</div>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"parent().find()\" [attr.aria-label]=\"'Trova nel documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <div>Trova nel documento</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+F</div>\r\n </div>\r\n</button>\r\n}\r\n@if (canSendByEmail()) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(getMultipleSelection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (canAddToArchive()) {\r\n<button mat-menu-item (click)=\"parent().addToArchive(getMultipleSelection())\" [attr.aria-label]=\"'Archivia'\">\r\n <mat-icon>account_tree</mat-icon>Archivia\r\n</button>\r\n}\r\n@if (canSaveAsPdf()) {\r\n<button mat-menu-item (click)=\"parent().exportPdf(getSingleSelection())\" (mouseenter)=\"showSubMenu()\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n<button mat-menu-item [attr.aria-label]=\"'Copia metadati negli appunti'\"\r\n (click)=\"parent().copyMetadataToClipboard(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>content_copy</mat-icon>Copia metadati\r\n</button>\r\n@if (!isReference() && canOpen()) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\" #linksMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(linksMenuTrigger)\" (mouseleave)=\"resetSubMenu(linksMenuTrigger)\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"openReferences(getSingleSelection(), 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"openReferences(getSingleSelection(), 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n}\r\n@if (canAddToCalendar()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi al calendario'\"\r\n (click)=\"parent().addToCalendar(getSingleSelection())\">\r\n <mat-icon>alarm</mat-icon> Crea scadenza\r\n</button>\r\n}\r\n@if (canExportCalendar()) {\r\n@if(useSelections()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportResults(2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n} @else if (item()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\"\r\n (click)=\"parent().exportItems([item().documentId], null, 2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n}\r\n}\r\n@if (canSetAsUnread()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (canSetAsRead()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come già letto'\" (click)=\"setRead(true)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>flag</mat-icon>Segna come già letto\r\n</button>\r\n}\r\n\r\n\r\n@if (isLawInForce() && canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report'\" (click)=\"parent().report(getSingleSelection())\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n\r\n@if (canUseAIAssistant() && hasSingleSelection()) {\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item matTooltip=\"Assistente IA\" [attr.aria-label]=\"'Assistente IA'\"\r\n [matMenuTriggerFor]=\"aiAssistantMenu\" #aiAssistantMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(aiAssistantMenuTrigger)\" (mouseleave)=\"resetSubMenu(aiAssistantMenuTrigger)\">\r\n <mat-icon>borg</mat-icon>\r\n Assistente IA\r\n</button>\r\n<mat-menu #aiAssistantMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Mi riguarda?'\" (click)=\"parent().AI_concernMe(getSingleSelection())\">\r\n Mi riguarda?\r\n </button>\r\n <button mat-menu-item [attr.aria-label]=\"'Di che si tratta?'\" (click)=\"parent().AI_explain(getSingleSelection())\">\r\n Di che si tratta?\r\n </button>\r\n @if (canUseAIEditor) {\r\n <button mat-menu-item [attr.aria-label]=\"'Genera commento tecnico'\"\r\n (click)=\"parent().AI_comment(getSingleSelection())\">\r\n Genera commento tecnico\r\n </button>\r\n <button mat-menu-item [attr.aria-label]=\"'Genera news'\" (click)=\"parent().AI_news(getSingleSelection())\">\r\n Genera news\r\n </button>\r\n }\r\n</mat-menu>\r\n}\r\n\r\n@if (canAccessRS()) {\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"rsMenu\" #rsMenuTrigger=\"matMenuTrigger\" (mouseenter)=\"showSubMenu(rsMenuTrigger)\"\r\n (mouseleave)=\"resetSubMenu(rsMenuTrigger)\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n<mat-menu #rsMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw(getMultipleSelection())\">\r\n Nuova legge\r\n </button>\r\n @if (hasSingleSelection()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attività'\" (click)=\"parent().RS_newActivity(getSingleSelection())\">\r\n Nuova attività\r\n </button>\r\n }\r\n @if (hasSingleSelection()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\"\r\n (click)=\"parent().RS_usageReport(getSingleSelection())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>\r\n}","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n Renderer2,\r\n inject,\r\n signal,\r\n output,\r\n viewChild\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n ClipperDocumentAnchorInfo,\r\n ClipperDocumentInfo,\r\n ClipperDocumentRelevants,\r\n ClipperMessages,\r\n ClipperModel,\r\n ClipperModule,\r\n ClipperQueryReferencesMode,\r\n ClipperSearchParams,\r\n ClipperSelectionMode, ClipperUserInfo, ClipperUtils\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport {\r\n SafeUrlPipe,\r\n SystemUtils,\r\n ThemeType\r\n} from '@arsedizioni/ars-utils/core';\r\nimport { FilePreviewComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ClipperReferenceDialogResult, ClipperReferencesComponent } from '../references/references.component';\r\nimport { ClipperDocumentIndexComponent, ClipperDocumentIndexDialogResult } from '../document-index/document-index.component';\r\nimport { ClipperDocumentManager } from '../document-manager/document-manager';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { ClipperDocumentsUtils } from '../../documents';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\n\r\n\r\nexport interface ClipperDocumentDialogData {\r\n selectionMode?: ClipperSelectionMode;\r\n selectableModules?: ClipperModule[];\r\n id: string;\r\n query?: string;\r\n theme?: ThemeType;\r\n canUseArchive?: boolean;\r\n canHandleTooManyResults?: boolean;\r\n\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './document.component.html',\r\n styleUrls: ['./document.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FlexLayoutModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n MatProgressBarModule,\r\n MatDialogContent,\r\n MatSidenavModule,\r\n SafeUrlPipe,\r\n ClipperDocumentMenuComponent\r\n ],\r\n})\r\nexport class ClipperDocumentComponent extends ClipperDocumentManager\r\n implements OnInit, OnDestroy {\r\n readonly relevantsPane = viewChild.required<MatDrawer>('relevantsPane');\r\n readonly closing = output();\r\n readonly opening = output<string>();\r\n\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private breakpointObserver = inject(BreakpointObserver);\r\n private renderer = inject(Renderer2);\r\n private rendererListener1: any;\r\n private router = inject(Router);\r\n private dialogRef = inject(MatDialogRef<ClipperDocumentComponent>);\r\n protected dialogData: ClipperDocumentDialogData = inject(MAT_DIALOG_DATA) ?? { mode: ClipperQueryReferencesMode.ReferencesIn };\r\n protected url = signal<string>(null);\r\n protected title = signal<string>(null);\r\n protected busy = signal<boolean>(false);\r\n protected lastQuery?: string;\r\n protected lastAugmentedQuery?: string[] = [];\r\n protected lastDocument?: ClipperDocumentInfo = {};\r\n protected relevants: ClipperDocumentRelevants = {\r\n items: [],\r\n hits: 0,\r\n hit: 0,\r\n minimumScore: 100,\r\n };\r\n protected relevantsPaneHasBackdrop: boolean = false;\r\n protected relevantsPaneClosed: boolean = false;\r\n protected relevantsBusy = signal<boolean>(false);\r\n protected hasRelevants = signal<boolean>(false);\r\n protected user: ClipperUserInfo | undefined = this.clipperService.loginInfo?.context;\r\n\r\n\r\n ngOnInit(): void {\r\n if (this.dialogData) {\r\n if (this.dialogData.id) {\r\n const url =\r\n this.clipperService.serviceUri +\r\n \"/documents/render/?query=\" +\r\n (this.dialogData.query ?? '') +\r\n \"&theme=\" +\r\n this.dialogData.theme +\r\n \"&id=\" +\r\n this.dialogData.id\r\n this.navigateByUrl(url);\r\n\r\n }\r\n }\r\n\r\n // Listen to window messages\r\n this.rendererListener1 = this.renderer.listen(\r\n 'window',\r\n 'message',\r\n (e: Event) => {\r\n const event = e as MessageEvent;\r\n if (!event) return;\r\n if (event.data) {\r\n try {\r\n var data = JSON.parse(event.data);\r\n if (data) {\r\n switch (data.type) {\r\n case 'navigated':\r\n this.navigated(\r\n data.id,\r\n data.title1,\r\n data.title2,\r\n data.tags,\r\n data.model,\r\n data.module,\r\n data.moduleName,\r\n data.date,\r\n data.number,\r\n data.author,\r\n data.origin,\r\n data.originDescription,\r\n data.bag,\r\n data.validityInfo,\r\n data.expiringInfo,\r\n data.primaryId,\r\n data.primaryModel,\r\n data.secondaryId,\r\n data.isTrial\r\n );\r\n break;\r\n case 'navigate':\r\n this.navigate(data.url);\r\n break;\r\n case 'references':\r\n this.openReferences(\r\n data.id,\r\n data.mode,\r\n data.model,\r\n data.anchor,\r\n data.anchorTitle,\r\n data.update\r\n );\r\n break;\r\n case 'hits':\r\n this.relevants.hits = data.total;\r\n this.updateRelevants();\r\n break;\r\n }\r\n this.changeDetector.markForCheck();\r\n }\r\n } catch {\r\n }\r\n }\r\n }\r\n );\r\n\r\n // Observe layout changes\r\n this.breakpointObserver\r\n .observe([\r\n Breakpoints.XSmall,\r\n Breakpoints.Small,\r\n Breakpoints.Medium,\r\n Breakpoints.Large,\r\n Breakpoints.XLarge,\r\n ])\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(result => {\r\n for (const query of Object.keys(result.breakpoints)) {\r\n if (result.breakpoints[query]) {\r\n this.handleRelevantsPaneVisibility();\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n if (this.rendererListener1) {\r\n this.rendererListener1();\r\n }\r\n }\r\n\r\n /**\r\n * Show hide relevants pane manually\r\n */\r\n protected toggleRelevantsPane() {\r\n this.relevantsPaneClosed = !this.relevantsPaneClosed;\r\n this.relevantsPane()?.toggle();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle filter pane visibility\r\n */\r\n private handleRelevantsPaneVisibility() {\r\n const relevantsPane = this.relevantsPane();\r\n if (relevantsPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (relevantsPane.opened) {\r\n relevantsPane.close();\r\n }\r\n relevantsPane.mode = 'over';\r\n relevantsPane.disableClose = false;\r\n this.relevantsPaneHasBackdrop = true;\r\n } else {\r\n if (!relevantsPane.opened && !this.relevantsPaneClosed && this.hasRelevants()) {\r\n relevantsPane.open();\r\n } else if (relevantsPane.opened && this.relevantsPaneClosed) {\r\n relevantsPane.close();\r\n }\r\n relevantsPane.mode = 'side';\r\n relevantsPane.disableClose = true;\r\n this.relevantsPaneHasBackdrop = false;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Close dialog\r\n */\r\n\r\n protected close() {\r\n if (this.closing) {\r\n this.closing.emit();\r\n }\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n\r\n /**\r\n * Navigate to a new document\r\n * @param id : the document id\r\n */\r\n navigate(id: string) {\r\n if (!id || id.length == 0)\r\n return; // Nothing to do\r\n\r\n if (id.indexOf('?') !== -1) {\r\n if (id.startsWith('/api'))\r\n this.navigateByUrl(this.clipperService.serviceUri + id.substring(4));\r\n else if (!id.startsWith(this.clipperService.serviceUri))\r\n this.navigateByUrl(this.clipperService.serviceUri + id);\r\n else this.navigateByUrl(id);\r\n } else\r\n this.navigateByUrl(\r\n this.clipperService.serviceUri +\r\n \"/documents/render/?query=&id=\" + id);\r\n\r\n }\r\n\r\n /**\r\n * Navigate by url\r\n * @param url : the url to navigate to\r\n */\r\n navigateByUrl(url: string) {\r\n if (!url || url.length === 0 || url === 'about:blank')\r\n return; // Nothing to do\r\n // Clean url, take only the first anchor\r\n let parts = url.split('#');\r\n url = parts[0];\r\n if (parts.length > 1) {\r\n url += '#' + parts[1];\r\n }\r\n // Handle free text query\r\n let query = '';\r\n let p = url.indexOf('query=');\r\n if (p !== -1) {\r\n p += 6;\r\n while (url.length > p && url[p] !== '&' && url[p] !== '#') {\r\n query += url[p++];\r\n }\r\n if (query.length > 0) {\r\n // Reset\r\n this.relevants.hit = 0;\r\n try {\r\n query = decodeURIComponent(encodeURIComponent(query));\r\n } catch {\r\n }\r\n\r\n const queryParts = query.split('__TERM__');\r\n if (queryParts.length > 0) {\r\n this.lastQuery = queryParts[0];\r\n if (queryParts.length > 1) {\r\n this.lastAugmentedQuery = [];\r\n for (var i = 1; i < queryParts.length; i++) {\r\n this.lastAugmentedQuery.push(queryParts[i]);\r\n }\r\n }\r\n }\r\n\r\n\r\n }\r\n }\r\n // Theme\r\n if (url.indexOf('theme=') === -1) {\r\n p = url.indexOf('id=');\r\n if (p !== -1) {\r\n url = url.substring(0, p) + 'theme=' + this.dialogData.theme + '&' + url.substring(p);\r\n }\r\n }\r\n\r\n let navigateToFile = url.indexOf('&file=true') !== -1;\r\n if (navigateToFile === true) {\r\n // Preview\r\n this.previewFile(url);\r\n } else {\r\n this.clipperService.preRender().subscribe(() => {\r\n // Begin loading only if not downloading a file\r\n this.busy.set(url.indexOf('documents/render/item') === -1);\r\n // Navigate\r\n this.url.set(url);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Navigated callback \r\n */\r\n public navigated(\r\n id: string, // Documnent id\r\n title1: string, // Title 1\r\n title2: string, // Title 2\r\n tags: string, // Tag\r\n model: number, // Model\r\n moduleId: number, // Module\r\n moduleName: string, // Module name\r\n date: string, // Date\r\n number: string, // Number\r\n author: string, // Author\r\n origin: string, // Origin\r\n originDescription: string, // Origin description\r\n bag: string, // Flags\r\n validityInfo: string, // Info about validity\r\n expiringInfo: string, // Info about expiring date\r\n primaryId: string, // Primary document id\r\n primaryModel: number, // Primary document model\r\n secondaryId: string, // Secondary document id\r\n isTrial: boolean // True if is a trial request\r\n ) {\r\n // Check for session expiring\r\n if (title1 === 'Sessione non valida') {\r\n this.dialogService\r\n .error(title2, null, title1, 'Accedi di nuovo')\r\n .afterClosed()\r\n .subscribe(() => {\r\n this.router.navigate(['login']);\r\n });\r\n return;\r\n }\r\n\r\n // Store data\r\n if (!this.lastDocument) {\r\n this.lastDocument = {};\r\n }\r\n this.lastDocument.id = id;\r\n this.lastDocument.documentId = id;\r\n this.lastDocument.title1 = title1 ? SystemUtils.urlDecode(title1) : null;\r\n this.lastDocument.title2 = title2 ? SystemUtils.urlDecode(title2) : null;\r\n this.lastDocument.tags = tags;\r\n this.lastDocument.model = model;\r\n this.lastDocument.module = moduleId;\r\n this.lastDocument.moduleName = moduleName;\r\n this.lastDocument.date = new Date(date);\r\n this.lastDocument.number = number;\r\n this.lastDocument.author = author;\r\n this.lastDocument.origin = origin;\r\n this.lastDocument.originDescription = originDescription;\r\n this.lastDocument.bag = bag;\r\n this.lastDocument.validityInfo = validityInfo;\r\n this.lastDocument.primaryId = primaryId;\r\n this.lastDocument.primaryModel = primaryModel;\r\n this.lastDocument.hasPrimary =\r\n primaryId &&\r\n (model === ClipperModel.AggiornamentoNormativo ||\r\n model === ClipperModel.NormativaVigente);\r\n if (primaryId) {\r\n var description = '';\r\n switch (primaryModel ? primaryModel : model) {\r\n case ClipperModel.NormativaVigente:\r\n description = 'Testo vigente';\r\n break;\r\n case ClipperModel.AggiornamentoNormativo:\r\n description = 'Testo storico';\r\n break;\r\n case ClipperModel.Scadenze:\r\n description = 'Scadenza';\r\n break;\r\n case ClipperModel.Coordinamento:\r\n description = 'Modifica';\r\n break;\r\n default:\r\n description = 'Collegamento';\r\n break;\r\n }\r\n this.lastDocument.primaryDescription = description;\r\n }\r\n this.lastDocument.secondaryId = secondaryId;\r\n this.lastDocument.isTrial = isTrial;\r\n\r\n // Handle expiring info\r\n this.lastDocument.expiringDescription = undefined;\r\n if (expiringInfo) {\r\n let parts = expiringInfo.split('#');\r\n if (parts.length > 0) {\r\n let parts2 = parts[0].split('|');\r\n if (parts2.length > 0)\r\n this.lastDocument.expiringDate = new Date(parts2[0]);\r\n if (parts2.length > 1) this.lastDocument.expiringInfo = parts2[1];\r\n if (parts2.length > 2)\r\n this.lastDocument.expiringInfo += '|' + parts2[2];\r\n }\r\n if (parts.length > 1) this.lastDocument.expiringDescription = parts[1];\r\n }\r\n\r\n // Set title\r\n this.title.set(this.lastDocument.title1\r\n ? this.lastDocument.title1\r\n : this.lastDocument.title2);\r\n\r\n // Get last document update\r\n this.clipperService.lastUpdate(this.lastDocument.id).subscribe(r => {\r\n if (r.success) {\r\n this.lastDocument.lastUpdate = r.value;\r\n this.changeDetector.markForCheck();\r\n }\r\n });\r\n\r\n // Notify navigation has completed\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_NAVIGATED, {\r\n document: SystemUtils.clone(this.lastDocument),\r\n });\r\n\r\n this.busy.set(false);\r\n\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * goto previous document in history\r\n */\r\n protected back() {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"back\"}', '*');\r\n }\r\n\r\n /**\r\n * Goto next document in history\r\n */\r\n protected forward() {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"forward\"}', '*');\r\n }\r\n\r\n\r\n\r\n /**\r\n * Goto next relevant item\r\n */\r\n protected nextRelevant() {\r\n let i = this.relevants.hit + 1;\r\n if (i <= this.relevants.hits) {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"relevant\", \"value\": \"next\"}', '*');\r\n this.relevants.hit++;\r\n }\r\n }\r\n\r\n /**\r\n * Goto previous relevant item\r\n */\r\n protected previousRelevant() {\r\n let i = this.relevants.hit - 1;\r\n if (i > 0) {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage(\r\n '{\"type\": \"relevant\", \"value\": \"previous\"}',\r\n '*'\r\n );\r\n this.relevants.hit--;\r\n }\r\n }\r\n\r\n /**\r\n * Goto a relevant item\r\n * @param item : the item to go to\r\n */\r\n protected gotoRelevant(item: ClipperDocumentAnchorInfo) {\r\n if (item.type === 20) {\r\n window.open(\r\n this.clipperService.serviceUri +\r\n \"/documents/render/item/?theme=\" + this.dialogData.theme + \"&id=\" + item.documentId,\r\n '_blank'\r\n );\r\n } else {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage(\r\n '{\"type\": \"relevant\", \"value\": \"' + item.uri + '\"}',\r\n '*'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Update relevant items\r\n */\r\n private updateRelevants() {\r\n const query = this.lastAugmentedQuery.length > 0\r\n ? this.lastAugmentedQuery.join(\"__TERM__\")\r\n : this.lastQuery;\r\n if (\r\n !query ||\r\n query.length === 0 ||\r\n query === ' ') {\r\n this.handleRelevantsPaneVisibility();\r\n } else {\r\n let params = new ClipperSearchParams();\r\n params.id = this.lastDocument.documentId ?? this.lastDocument.id;\r\n params.text = query;\r\n params.count = 1;\r\n this.clipperService\r\n .query(params)\r\n .subscribe(r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n let minimumScore = 0;\r\n if (r.value?.items && r.value?.items.length > 0) {\r\n r.value.items[0].anchors.forEach(n => {\r\n let score = n.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n if (minimumScore > score) minimumScore = score;\r\n n.score = score;\r\n });\r\n this.relevants.minimumScore = minimumScore;\r\n this.relevants.items = r.value.items[0].anchors;\r\n this.hasRelevants.set(this.relevants.items?.length > 0);\r\n }\r\n this.handleRelevantsPaneVisibility();\r\n this.changeDetector.markForCheck();\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n /**\r\n * Display document structure\r\n */\r\n protected index(documentId: string) {\r\n let d = this.dialogService.open(ClipperDocumentIndexComponent, {\r\n ariaLabel: 'indice documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n closeOnNavigation: false,\r\n data: {\r\n documentId: documentId,\r\n excludedTypes: null,\r\n multiple: false\r\n },\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '100%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: ClipperDocumentIndexDialogResult) => {\r\n const item = r.data.length > 0 ? r.data[0] : null;\r\n if (item) {\r\n if (item.documentId === documentId) {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage(\r\n '{\"type\": \"goto\", \"value\":\"' + item.uri + '\"}',\r\n '*'\r\n );\r\n } else {\r\n this.openDocument(item.documentId + '#' + item.uri,);\r\n }\r\n }\r\n\r\n d.close();\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Get the id in a query string\r\n * @param url : the url to process\r\n * @param name : the optional id paramenter name. Default is 'id'\r\n * @returns : the id parame\r\n */\r\n private getId(url: string, name: string = 'id'): string {\r\n const start = url.lastIndexOf(name + '=') + 3;\r\n const end = url.indexOf('&', start);\r\n return url.substring(start, end);\r\n }\r\n\r\n /**\r\n * Preview a file if possible\r\n * @param url : the url to preview\r\n */\r\n private previewFile(url: string) {\r\n if (!url || url.length === 0)\r\n return; // Nothing to do\r\n // Get the id\r\n let id = this.getId(url);\r\n if (!id || id.length === 0)\r\n return; // Nothing to do\r\n // Create the url\r\n this.clipperService.newOTP(id).subscribe(\r\n r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else if (!r.value.canPreview)\r\n // Donload manually\r\n location.href = url;\r\n else {\r\n this.dialogService.open(FilePreviewComponent, {\r\n panelClass: 'preview-panel',\r\n ariaLabel: 'anteprima',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n data: {\r\n url: url,\r\n embed: r.value.canEmbed\r\n },\r\n minWidth: '375px',\r\n maxWidth: '900px',\r\n width: '100%',\r\n height: '100%'\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show document comment\r\n */\r\n protected showComment() {\r\n if (this.lastDocument?.bag[7] !== 'T') return;\r\n this.clipperService\r\n .comment(this.lastDocument?.documentId)\r\n .subscribe(r => {\r\n if (!r.success) {\r\n if (r.message === \"Il tuo abbonamento non consente di visualizzare i commenti alle norme.\")\r\n this.dialogService.error(\"Il servizio di <b>commenti alle norme</b> non è compreso nel tuo abbonamento, per maggiori informazioni rivolgersi all'agente commerciale di riferimento o inviare una mail a <a href='mailto:sales@arsedizioni.it' target='_blank'>sales@arsedizioni.it</a>.\", null, \"Attenzione\");\r\n else\r\n this.dialogService.error(r.message);\r\n } else {\r\n if (r.value && r.value.length > 1) {\r\n this.dialogService.info(\r\n r.value.replace(/<\\/p><br>\\r\\n/g, '</p>\\r\\n'),\r\n \"Commento\",\r\n \"Chiudi\",\r\n 700);\r\n } else\r\n this.dialogService.info(\"Commento non più disponibile o in fase di revisione.\");\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n override open(documentId: string, query?: string, newWindow?: boolean) {\r\n if (!newWindow) {\r\n if (this.opening) this.opening.emit(documentId);\r\n else this.openDocument(documentId, query);\r\n } else {\r\n window.open((this.clipperService.appUri ?? '') + '/documento/' + documentId, '_blank');\r\n }\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n */\r\n private openDocument(documentId: string, query?: string) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.dialogService.baseService,\r\n this.clipperService,\r\n documentId,\r\n query,\r\n this.dialogData.selectionMode,\r\n this.dialogData.selectableModules,\r\n this.dialogData.theme,\r\n this.dialogData.canUseArchive,\r\n this.dialogData.canHandleTooManyResults\r\n );\r\n }\r\n\r\n /**\r\n * Browse document references\r\n * @param documentId : the document id\r\n * @param mode : the mode\r\n */\r\n override openReferences(\r\n documentId: string,\r\n mode: ClipperQueryReferencesMode = ClipperQueryReferencesMode.ReferencesIn,\r\n model: number = null,\r\n anchor: string = null,\r\n anchorTitle: string = null,\r\n update: boolean = true\r\n ) {\r\n\r\n this.dialogService.open(ClipperReferencesComponent, {\r\n ariaLabel: 'riferimenti legati al documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n closeOnNavigation: false,\r\n data: {\r\n documentId: documentId ?? this.lastDocument?.documentId,\r\n mode: mode,\r\n model: model,\r\n anchor: anchor,\r\n anchorTitle: anchorTitle,\r\n update: update,\r\n canUseArchive: this.dialogData.canUseArchive,\r\n canHandleTooManyResults: this.dialogData.canHandleTooManyResults\r\n },\r\n minWidth: '375px',\r\n maxWidth: '1200px',\r\n width: '100%',\r\n height: '100%',\r\n }).afterClosed()\r\n .subscribe((r: ClipperReferenceDialogResult) => {\r\n if (r && r.documentId) {\r\n this.navigate(r.documentId);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Display a report\r\n * @param item\r\n */\r\n protected displayReport(item: ClipperDocumentInfo) {\r\n if (!item) return;\r\n if (item.model != ClipperModel.NormativaVigente && item.model != ClipperModel.Scadenze) {\r\n this.dialogService.info(\"Questa funzionalità non è disponibile per questo tipo di documento.\");\r\n return;\r\n }\r\n this.openReport(item.id, item.title1 ? item.title1 : item.title2);\r\n }\r\n\r\n /**\r\n * Checks if documents can be selected and returned as message\r\n */\r\n protected canSelect(): boolean {\r\n const a = this.dialogData.selectionMode ?? 0;\r\n const b = this.dialogData.selectableModules?.length ?? 0;\r\n const canSelect = this.lastDocument &&\r\n a > 0 &&\r\n (b === 0\r\n ? (this.lastDocument?.model === ClipperModel.NormativaVigente || this.lastDocument?.model === ClipperModel.AggiornamentoNormativo)\r\n : (this.dialogData.selectableModules?.findIndex(x => x === ClipperUtils.getClipperModuleFromModel(this.lastDocument)) !== -1));\r\n return canSelect;\r\n }\r\n\r\n /**\r\n * Send a message with current selection and close dialog\r\n */\r\n protected select() {\r\n if (this.lastDocument) {\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_SELECTED_INNER, this.lastDocument);\r\n this.changeDetector.markForCheck();\r\n this.close();\r\n }\r\n }\r\n\r\n}\r\n\r\n","<div class=\"clipper-document-fixed\">\r\n <div style=\"height:6px\">\r\n @if (busy()) {\r\n <mat-progress-bar style=\"z-index:11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start start\" fxFill>\r\n <div fxFlex=\"*\" class=\"title-container\">\r\n <div class=\"title bold\">{{title()}}</div>\r\n @if (lastDocument && lastDocument.tags) {\r\n <div style=\"padding-top: 5px;\">\r\n <div class=\"x-small bold uppercase\">\r\n TAG: <span class=\"accent\">{{lastDocument?.tags}}</span>\r\n </div>\r\n </div>\r\n }\r\n @if (lastDocument && lastDocument.lastUpdate) {\r\n <div style=\"padding-top: 5px;\">\r\n <div class=\"x-small bold uppercase\">\r\n AGGIORNATO A:\r\n <span class=\"accent\">{{lastDocument.lastUpdate}}</span>\r\n </div>\r\n </div>\r\n }\r\n @if (lastDocument && (lastDocument.expiringDescription || lastDocument.validityInfo)) {\r\n <div style=\"padding-top: 5px;\">\r\n @if (lastDocument.expiringDescription) {\r\n <div class=\"x-small error bold uppercase\">\r\n {{lastDocument.expiringDescription}}</div>\r\n }\r\n @if (lastDocument.validityInfo) {\r\n <div class=\"x-small error bold uppercase\"><b>Attenzione!</b>\r\n {{lastDocument.validityInfo}}</div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n @if (canSelect()) {\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\" style=\"margin-top: 8px;\">\r\n <span class=\"small\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"select()\"\r\n class=\"clipper-selection-icon-button\" matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\"\r\n style=\"margin-top: 4px;\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"48px\" fxLayoutAlign=\"end\">\r\n <div class=\"dialog-close\">\r\n <button fxHide.lt-md fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\"\r\n aria-label=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n <button fxHide.lt-md fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Avanti\" aria-label=\"Avanti\"\r\n (click)=\"forward()\">\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row wrap \" fxFill fxLayoutAlign=\"space-between center\" style=\"padding: 10px 10px 10px 15px;\">\r\n <div fxFlex.xs=\"100\">\r\n @if (lastDocument?.model === 9) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"index(lastDocument?.documentId)\">\r\n Indice\r\n </button>\r\n }\r\n @if (lastDocument?.bag && (lastDocument?.bag[1] ==='T' || lastDocument?.bag[3] ==='T')) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Collegamenti\"\r\n [attr.aria-label]=\"'Collegamenti al documento'\" [matMenuTriggerFor]=\"menuLinks\">\r\n Collegamenti\r\n </button>\r\n }\r\n <mat-menu #menuLinks=\"matMenu\">\r\n @if (lastDocument?.bag && lastDocument?.bag[1] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti richiamati'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[3] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti che richiamano'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[2] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra juris'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche subite'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] !=='T' && lastDocument?.bag[6] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche apportate'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n </mat-menu>\r\n @if (lastDocument?.hasPrimary) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra documento primario'\"\r\n (click)=\"navigate(lastDocument?.primaryId)\">\r\n {{lastDocument?.primaryDescription}}\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[2] ==='T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" fxHide.lt-md mat-button [attr.aria-label]=\"'Mostra juris'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] === 'T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" fxHide.lt-md mat-button [attr.aria-label]=\"'Mostra modifiche subite'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] !== 'T' && lastDocument?.bag[6] === 'T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra modifiche apportate'\" (click)=\"openReferences(lastDocument?.documentId, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n @if (lastDocument?.secondaryId) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra documento secondario'\"\r\n (click)=\"navigate(lastDocument?.secondaryId)\">\r\n Testo storico\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[7] === 'T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra commento'\"\r\n (click)=\"showComment()\">\r\n Commento\r\n </button>\r\n }\r\n </div>\r\n <div fxFlex.xs=\"100\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (hasRelevants() && relevants.hits) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n <div fxFlexAlign=\"center\" class=\"small item-greyed\" style=\"margin-left:20px; margin-right: 5px\"\r\n matTooltip=\"Parole evidenziate\">{{relevants.hit}}\r\n di {{relevants.hits}}</div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla parola precedente'\"\r\n (click)=\"previousRelevant()\" matTooltip=\"Parola precedente\" [disabled]=\"relevants.hit <= 1\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla prossima parola'\"\r\n (click)=\"nextRelevant()\" matTooltip=\"Prossima parola\" [disabled]=\"relevants.hit >= relevants.hits\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azioni sul documento\"\r\n [attr.aria-label]=\"'Azioni da eseguire sul documento'\" [matMenuTriggerFor]=\"menuActions\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menuActions=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"lastDocument\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"lastDocument\" [canOpenDocument]=\"false\" [canPrint]=\"true\"\r\n [canFind]=\"true\" [isReadable]=\"false\" [canUseArchive]=\"dialogData.canUseArchive ?? false\"\r\n [isLawInForce]=\"lastDocument?.model === 9\" selectionSource=\"none\"\r\n [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n @if (hasRelevants() && relevants.items && relevantsPane && (!relevantsPane.opened || relevantsPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Rilevanza\" aria-label=\"'Rilevanza'\"\r\n (click)=\"toggleRelevantsPane()\">\r\n <mat-icon>right_panel_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content id=\"clipper-document-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"[relevantsPaneHasBackdrop]\">\r\n <mat-drawer #relevantsPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (relevantsBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (relevantsBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"78px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"title\">Rilevanza</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-icon-button (click)=\"toggleRelevantsPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"relevants-container scroll-auto\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div>\r\n <p>Parti del documento più significative per la ricerca di <span class='word-hit'>{{lastQuery}}</span>\r\n @if((lastAugmentedQuery?.length ?? 0) > 0) {\r\n &nbsp; + &nbsp; <span class='word-hit-ai'\r\n [matTooltip]=\"'Assistente IA ha considerato anche: ' + lastAugmentedQuery?.join(', ')\"><mat-icon\r\n style=\"width:14px; height:14px; font-size:16px\">borg</mat-icon>&nbsp;Assistente&nbsp;IA</span>\r\n }\r\n </p>\r\n </div>\r\n <div fxFlex=\"*\">\r\n <nav class=\"relevants-items\">\r\n <ul>\r\n @for (item of relevants.items; track $index) {\r\n <li class=\"small\" (click)=\"gotoRelevant(item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\">\r\n {{item.title}}\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (item.score > 1.2) {\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px'\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div class=\"fill scroll-hidden\">\r\n <iframe id=\"clipper-document-iframe\" class=\"iframe\" [src]=\"url() | safeUrl\"></iframe>\r\n </div>\r\n </mat-drawer-container>\r\n</mat-dialog-content>","import { MatDialogRef } from '@angular/material/dialog';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport {\r\n ClipperModule,\r\n ClipperSelectionMode,\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperDocumentComponent } from './ui/document/document.component';\r\nimport { ThemeType } from '@arsedizioni/ars-utils/core';\r\n\r\nexport class ClipperDocumentsUtils {\r\n /**\r\n * Open a document\r\n * @param dialogService: the dialog service\r\n * @param clipperService: the clipper service\r\n * @param documentId : the document id \r\n * @param query : the query for highlight\r\n * @param selectionMode : the clipper selection mode\r\n * @param selectableModules : the clipper selectable modules\r\n * @param theme: the theme to use. Default is system\r\n * @param canUseArchive: ture if archive is available\r\n * @param canHandleTooManyResults: true if the component should handle too many results\r\n */\r\n static openDocument(\r\n dialogService: DialogService,\r\n clipperService: ClipperService,\r\n documentId: string,\r\n query?: string ,\r\n selectionMode?: ClipperSelectionMode,\r\n selectableModules?: ClipperModule[],\r\n theme?: ThemeType,\r\n canUseArchive?: boolean,\r\n canHandleTooManyResults?: boolean): MatDialogRef<ClipperDocumentComponent> | undefined {\r\n\r\n if (!clipperService.loggedIn()) {\r\n dialogService.error(\"Clipper non è disponibile in questo momento. Verifica la connessione.\");\r\n return undefined;\r\n }\r\n if (!documentId) {\r\n dialogService.error(\"Documento non valido.\");\r\n return undefined;\r\n }\r\n return dialogService.open(ClipperDocumentComponent, {\r\n ariaLabel: 'documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n data: {\r\n id: documentId,\r\n query: query,\r\n selectionMode: selectionMode,\r\n selectableModules: selectableModules,\r\n theme: theme,\r\n canUseArchive: canUseArchive,\r\n canHandleTooManyResults: canHandleTooManyResults\r\n },\r\n minWidth: '375px',\r\n maxWidth: '1400px',\r\n width: '100%',\r\n height: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Extract document title\r\n * @param title : the full document title\r\n */\r\n static parseDocumentTitle(title: string) {\r\n const p = title?.indexOf('[');\r\n if (p !== -1) {\r\n return title.substring(0, p);\r\n }\r\n return title;\r\n }\r\n\r\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, input, signal, output, viewChild } from '@angular/core';\r\nimport { DateInterval } from '@arsedizioni/ars-utils/core';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatCalendar, MatCalendarCellClassFunction } from '@angular/material/datepicker';\r\nimport { endOfDay, endOfMonth, startOfMonth, startOfToday, subDays } from 'date-fns';\r\nimport { CalendarEmptyHeader } from '@arsedizioni/ars-utils/ui.application';\r\nimport { ClipperSearchCalendarSnapshotMonth, ClipperSearchCalendarSnapshotResult } from '@arsedizioni/ars-utils/clipper.common';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'clipper-search-calendar',\r\n templateUrl: './search-calendar.component.html',\r\n styleUrls: ['./search-calendar.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FlexModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatCalendar,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatDividerModule,\r\n MatExpansionModule\r\n ],\r\n})\r\nexport class ClipperSearchCalendarComponent {\r\n readonly calendar = viewChild.required<MatCalendar<any>>('calendar');\r\n readonly changed = output<DateInterval | undefined>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n protected busy = signal<boolean>(false);\r\n protected months = signal<ClipperSearchCalendarSnapshotMonth[] | undefined>(undefined);\r\n protected calendarSpecialDays?: number[];\r\n protected calendarEmptyHeader = CalendarEmptyHeader;\r\n public calendarDate: Date = startOfToday();\r\n protected calendarDateClass: MatCalendarCellClassFunction<Date> = (cellDate) => {\r\n if (!this.calendarSpecialDays) return '';\r\n if (this.calendarSpecialDays[cellDate.getDate() - 1] > 0) {\r\n if (cellDate < startOfToday()) return 'special-date-expired';\r\n else if (subDays(cellDate, 15) <= startOfToday()) return 'special-date-expiring';\r\n else return 'special-date';\r\n }\r\n return '';\r\n };\r\n protected calendarDateFilter = (cellDate: Date): boolean => {\r\n return this.canFilter() && this.calendarSpecialDays != null && this.calendarSpecialDays[cellDate.getDate() - 1] > 0;\r\n }\r\n readonly canFilter = input<boolean>(false);\r\n\r\n\r\n /**\r\n * Update calendar\r\n * @param month : the month snapshot\r\n * @param months : the months snapshot\r\n * @param date : the new current date\r\n */\r\n update(month?: ClipperSearchCalendarSnapshotResult,\r\n months?: ClipperSearchCalendarSnapshotResult,\r\n date: Date = startOfToday()) {\r\n if (months?.months) {\r\n this.months.set(months.months);\r\n }\r\n if (month && month.months && month.months.length > 0) {\r\n this.calendarSpecialDays = month.months[0].days;\r\n }\r\n const calendar = this.calendar();\r\n if (calendar) {\r\n calendar.activeDate = date;\r\n calendar.selected = date;\r\n calendar.updateTodaysDate();\r\n }\r\n this.calendarDate = date;\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n /**\r\n * Filter by date\r\n * @param date : the date to filter to or \"month\" to filter by the whole month.\r\n */\r\n protected filterByDate(date?: Date | string) {\r\n if (date === 'month') {\r\n if (this.calendarDate) {\r\n const today = new Date();\r\n const start = endOfDay(startOfMonth(this.calendarDate));\r\n const end = endOfMonth(this.calendarDate);\r\n this.changed.emit(new DateInterval(start, end));\r\n if (start <= today && end >= today) {\r\n const calendar = this.calendar();\r\n calendar.selected = today;\r\n calendar.updateTodaysDate();\r\n }\r\n }\r\n } else if (date) {\r\n this.changed.emit(\r\n new DateInterval(\r\n endOfDay(date as Date),\r\n endOfDay(date as Date)));\r\n this.calendarDate = date as Date;\r\n const calendar = this.calendar();\r\n calendar.selected = date;\r\n calendar.updateTodaysDate();\r\n } else {\r\n this.changed.emit(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Filter by month\r\n * @param monthInfo: the month info\r\n */\r\n protected filterByMonth(monthInfo: ClipperSearchCalendarSnapshotMonth) {\r\n const newDate = new Date(monthInfo.year, monthInfo.month - 1, 1);\r\n const today = new Date();\r\n const start = endOfDay(startOfMonth(newDate));\r\n const end = endOfMonth(newDate);\r\n this.changed.emit(new DateInterval(start, end));\r\n this.calendarSpecialDays = monthInfo.days;\r\n const calendar = this.calendar();\r\n if (start <= today && end >= today) {\r\n calendar.selected = today;\r\n }\r\n calendar.activeDate = newDate;\r\n calendar.updateTodaysDate();\r\n this.calendarDate = newDate;\r\n }\r\n}\r\n","<div fxLayout=\"column\" fxFill class=\"calendar-container scroll-hidden\">\r\n <div class=\"calendar-months\">\r\n <div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"center\" fxLayoutGap=\"8px\" fxFill>\r\n @for (m of months(); track $index) {\r\n <button fxFlex=\"37px\" mat-button class=\"small uppercase\" (click)=\"filterByMonth(m)\" [disabled]=\"m.total === 0\">\r\n @if (m.expired) {\r\n <span class=\"expired\" [matTooltip]=\"m.expired + ' elementi in ritardo'\">{{m.monthShortName}}</span>\r\n } @else {\r\n <span [matTooltip]=\"m.total + ' elementi'\">{{m.monthShortName}}</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"separator\"></div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-auto\">\r\n @if (!busy()) {\r\n <mat-calendar #calendar [headerComponent]=\"calendarEmptyHeader\" [dateClass]=\"calendarDateClass\"\r\n [dateFilter]=\"calendarDateFilter\" (selectedChange)=\"filterByDate($event)\" class=\"calendar-month\">\r\n </mat-calendar>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around\" style=\"padding:0 15px\">\r\n <button type=\"button\" mat-stroked-button (click)=\"filterByDate('month')\">Tutto il\r\n mese</button>\r\n </div>\r\n }\r\n </div>\r\n</div>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperFacet,\r\n ClipperSearchFacet,\r\n ClipperSearchFacetGroup,\r\n ClipperSearchFacetsSnapshot\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\n\r\n@Component({\r\n selector: 'clipper-search-facets',\r\n templateUrl: './search-facets.component.html',\r\n styleUrls: ['./search-facets.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexModule, MatButtonModule, MatTooltipModule, MatChipsModule, MatIconModule, \r\n MatDividerModule, MatExpansionModule]\r\n})\r\nexport class ClipperSearchFacetsComponent {\r\n readonly changed = output<ClipperSearchFacetsSnapshot>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n protected snapshot: ClipperSearchFacetsSnapshot = new ClipperSearchFacetsSnapshot();\r\n\r\n public hasFacets = (): boolean => this.snapshot.hasFacets;\r\n\r\n public handleTooManyResults = input<boolean>(false);\r\n\r\n /**\r\n * Update facets\r\n * @param values : the facets values\r\n * @param interval : the date interval for YEAR facets\r\n */\r\n update(values?: ClipperSearchFacet[][], interval?: string) {\r\n this.snapshot.interval = interval;\r\n if (values) {\r\n this.snapshot.groups = [];\r\n values.forEach(n => {\r\n const name = n[0].typeName;\r\n const index = n[0].type;\r\n const i = this.snapshot.usedGroups.findIndex(n => n.index === index);\r\n const j = this.snapshot.groups.findIndex(n => n.index === index);\r\n if (i === -1 && j === -1) {\r\n this.snapshot.groups.push({\r\n name: name,\r\n selectedValue: null,\r\n selectedValueDescription: null,\r\n values: n,\r\n index: index,\r\n }); \r\n }\r\n });\r\n }\r\n this.snapshot.hasFacets = this.snapshot.groups.length > 0 || this.snapshot.usedGroups.length > 0; \r\n this.snapshot.hasMoreFacets = this.snapshot.hasFacets && this.snapshot.groups.length > this.snapshot.usedGroups.length; \r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Use a facet item as filter\r\n * @param group : the facet group\r\n * @param item : the facet item\r\n */\r\n protected use(group: ClipperSearchFacetGroup, item: ClipperSearchFacet) {\r\n group.selectedValue = item.value;\r\n group.selectedValueDescription = item.title;\r\n const j = this.snapshot.groups.findIndex(n => n.index === group.index);\r\n if (j !== -1) {\r\n this.snapshot.groups.splice(j, 1);\r\n let updated = false;\r\n this.snapshot.usedGroups.forEach((n, i) => {\r\n if (!updated && n.index > group.index) {\r\n this.snapshot.usedGroups.splice(i, 0, group);\r\n updated = true;\r\n }\r\n });\r\n if (!updated) {\r\n this.snapshot.usedGroups.push(group);\r\n }\r\n }\r\n this.apply();\r\n }\r\n\r\n /**\r\n * dismiss a facet group filter\r\n * @param group : the facet group\r\n * @param apply : true to emit changed event and generate a new search, false just for update\r\n */\r\n protected dismiss(group: ClipperSearchFacetGroup, apply: boolean = true) {\r\n group.selectedValue = undefined;\r\n group.selectedValueDescription = undefined;\r\n const i = this.snapshot.usedGroups.findIndex(n => n.index === group.index);\r\n if (i !== -1) {\r\n this.snapshot.usedGroups.splice(i, 1);\r\n let updated = false;\r\n this.snapshot.groups.forEach((n, j) => {\r\n if (!updated && n.index > group.index) {\r\n this.snapshot.groups.splice(j, 0, group);\r\n updated = true;\r\n }\r\n });\r\n if (!updated) {\r\n this.snapshot.groups.push(group);\r\n }\r\n }\r\n if (apply) {\r\n this.apply();\r\n }\r\n }\r\n\r\n /**\r\n * Apply filter\r\n */\r\n private apply() {\r\n if (this.snapshot.usedGroups.length > 0) {\r\n this.snapshot.usedGroups.forEach(n => {\r\n if (n.index === ClipperFacet.Year) {\r\n if (n.selectedValue) {\r\n this.snapshot.fromDate = new Date(parseInt(n.selectedValue), 0, 1, 12, 0, 0);\r\n this.snapshot.toDate = new Date(parseInt(n.selectedValue), 11, 31, 12, 0, 0);\r\n } else {\r\n this.snapshot.fromDate = undefined;\r\n this.snapshot.toDate = undefined;\r\n }\r\n } else if (n.index === ClipperFacet.Sector) {\r\n this.snapshot.sector = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.Author) {\r\n this.snapshot.author = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.DocumentType) {\r\n this.snapshot.type = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.Article) {\r\n this.snapshot.anchor = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.Reason) {\r\n this.snapshot.reason = n.selectedValue ?? null;\r\n }\r\n });\r\n }\r\n if (this.snapshot.groups.length > 0) {\r\n this.snapshot.groups.forEach(n => {\r\n if (n.index === ClipperFacet.Year) {\r\n this.snapshot.fromDate = undefined;\r\n this.snapshot.toDate = undefined;\r\n } else if (n.index === ClipperFacet.Sector) {\r\n this.snapshot.sector = undefined;\r\n } else if (n.index === ClipperFacet.Author) {\r\n this.snapshot.author = undefined;\r\n } else if (n.index === ClipperFacet.DocumentType) {\r\n this.snapshot.type = undefined;\r\n } else if (n.index === ClipperFacet.Article) {\r\n this.snapshot.anchor = undefined;\r\n } else if (n.index === ClipperFacet.Reason) {\r\n this.snapshot.reason = undefined;\r\n }\r\n });\r\n }\r\n this.changed.emit(this.snapshot);\r\n }\r\n\r\n /**\r\n * Clear facets by group index\r\n * @param index : the group index to clear. Use -1 to clear all groups at once\r\n * @returns : the number of groups dismissed\r\n */\r\n protected clear(index: number = -1): number {\r\n let dismissed = 0;\r\n this.snapshot.usedGroups.forEach(n => {\r\n if (index === -1 || index === n.index) {\r\n if (n.index === ClipperFacet.Year) {\r\n this.snapshot.fromDate = undefined;\r\n this.snapshot.toDate = undefined;\r\n } else if (n.index === ClipperFacet.Sector) {\r\n this.snapshot.sector = undefined;\r\n } else if (n.index === ClipperFacet.Author) {\r\n this.snapshot.author = undefined;\r\n } else if (n.index === ClipperFacet.DocumentType) {\r\n this.snapshot.type = undefined;\r\n } else if (n.index === ClipperFacet.Article) {\r\n this.snapshot.anchor = undefined;\r\n } else if (n.index === ClipperFacet.Reason) {\r\n this.snapshot.reason = undefined;\r\n }\r\n this.dismiss(n, false);\r\n dismissed++;\r\n }\r\n });\r\n if (dismissed) {\r\n this.changed.emit(this.snapshot);\r\n }\r\n return dismissed;\r\n }\r\n\r\n /**\r\n * Reset\r\n */\r\n reset() {\r\n this.snapshot.groups = [];\r\n this.snapshot.usedGroups = [];\r\n this.snapshot.hasFacets = false;\r\n this.snapshot.fromDate = undefined;\r\n this.snapshot.toDate = undefined;\r\n this.snapshot.sector = undefined;\r\n this.snapshot.author = undefined;\r\n this.snapshot.anchor = undefined;\r\n this.snapshot.type = undefined;\r\n this.snapshot.reason = undefined;\r\n }\r\n\r\n /**\r\n * Restore data\r\n * @param data : the data to restore\r\n */\r\n restore(data: ClipperSearchFacetsSnapshot) {\r\n if (data) {\r\n this.snapshot = data;\r\n this.changeDetector.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * Save data\r\n */\r\n save(): ClipperSearchFacetsSnapshot {\r\n return this.snapshot;\r\n }\r\n}\r\n","<div fxLayout=\"column\" fxFill class=\"facets-container scroll-hidden\">\r\n @if (snapshot.usedGroups.length > 0) {\r\n <div class=\"facets-selection\">\r\n <mat-chip-set aria-label=\"Selezione\">\r\n @for (ug of snapshot.usedGroups; track $index) {\r\n <mat-chip (removed)=\"dismiss(ug)\" [matTooltip]=\"ug.selectedValueDescription ?? ''\" matTooltipPosition=\"above\">\r\n {{ug.selectedValueDescription}}\r\n <button matChipRemove [attr.aria-label]=\"'Rimuovi ' + ug.name\" [matTooltip]=\"'Rimuovi ' + ug.name\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n }\r\n </mat-chip-set>\r\n <mat-divider class=\"divider\"></mat-divider>\r\n </div>\r\n }\r\n <div fxFlex=\"*\" class=\"scroll-auto facets-items-container\">\r\n @if (snapshot.groups.length > 0) {\r\n @for (group of snapshot.groups; track group.index; let i = $index) {\r\n <mat-accordion multi displayMode=\"flat\">\r\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0 \" [expanded]=\"i == 0\">\r\n <mat-expansion-panel-header class=\"accordion-header\" [attr.aria-label]=\"group.name\">\r\n <mat-panel-title>\r\n @if (group.index == 2 && snapshot.interval) {\r\n {{snapshot.interval}} ({{group.values.length}})\r\n } @else {\r\n {{group.name}} ({{group.values.length}})\r\n }\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <nav class=\"facets-items\">\r\n <ul>\r\n @for (item of group.values; track $index) {\r\n <li (click)=\"use(group, item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"truncated\">\r\n <div class=\"truncated\">{{item.title}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n {{!handleTooManyResults() && snapshot.hasTooManyResults ? '~' : ''}}{{item.count}}\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n }\r\n } @else if (snapshot.hasFacets && !snapshot.hasMoreFacets) {\r\n <div class=\"facets-message\">\r\n <p class=\"small\"><i>Tutte le opzioni sono state selezionate</i></p>\r\n </div>\r\n }\r\n </div>\r\n</div>","import { BreakpointObserver } from '@angular/cdk/layout';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component, OnDestroy, inject, signal,\r\n viewChild\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { ClipperDocumentInfo, ClipperMessages, ClipperModel, ClipperSearchParams, ClipperSearchResult, ClipperSelectionMode, ClipperSort, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';\r\nimport {\r\n DateFormat,\r\n NameValueItem, ScreenService, SelectableModel, SystemUtils,\r\n ThemeService\r\n} from '@arsedizioni/ars-utils/core';\r\nimport { startOfDay, startOfToday, subDays } from 'date-fns';\r\nimport { Subject } from 'rxjs';\r\nimport { ClipperDocumentsUtils } from '../../documents';\r\nimport { ClipperDocumentManager } from '../document-manager/document-manager';\r\nimport { ClipperSearchCalendarComponent } from '../search-calendar/search-calendar.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ApplicationDialogService } from '@arsedizioni/ars-utils/ui.application';\r\n\r\n\r\n\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ClipperDocumentManager, ClipperSearchFacetsComponent, ClipperSearchCalendarComponent],\r\n})\r\nexport class ClipperSearchResultManager\r\n extends ClipperDocumentManager\r\n implements OnDestroy {\r\n readonly paginator = viewChild<MatPaginator>('paginator');\r\n readonly facets = viewChild<ClipperSearchFacetsComponent>('facets');\r\n readonly calendar = viewChild<ClipperSearchCalendarComponent>('calendar');\r\n protected unsubscribe: Subject<void> = new Subject<void>();\r\n protected changeDetector = inject(ChangeDetectorRef);\r\n protected breakpointObserver = inject(BreakpointObserver);\r\n private themeService = inject(ThemeService);\r\n public screenService = inject(ScreenService);\r\n public dialogService = inject(ApplicationDialogService);\r\n public selection: SelectableModel<ClipperDocumentInfo, string> | undefined;\r\n public selectionMode = signal<ClipperSelectionMode>(ClipperSelectionMode.None);\r\n protected snapshot: ClipperSearchResult | undefined = new ClipperSearchResult();\r\n protected filterBusy = signal<boolean>(false);\r\n protected filterParams: ClipperSearchParams = new ClipperSearchParams();\r\n protected filterPaneHasBackdrop: boolean = false;\r\n protected filterPaneClosed: boolean = false;\r\n protected filterPane2HasBackdrop: boolean = false;\r\n protected filterPane2Closed: boolean = false;\r\n protected sortOptions: NameValueItem<ClipperSort>[] = [];\r\n protected sortMode: NameValueItem<ClipperSort> | undefined;\r\n protected scrollPos: number = 0;\r\n protected scrollerId: string = 'scroller_' + SystemUtils.generateUUID();\r\n protected restorableId: string | undefined;\r\n protected hasFacets = signal<boolean>(false);\r\n protected hasRegions = (): boolean => {\r\n return (this.filterParams.sectors?.filter(n => n.value === 'LR').length ?? 0) > 0;\r\n };\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n\r\n /**\r\n * Update menu buttons visibility when the menu is closed\r\n */\r\n updateMenuButtonsVisibility() {\r\n if (this.snapshot) {\r\n this.snapshot.items?.forEach(n => {\r\n n.isMenuOpen = false;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Scroll on top o list area\r\n * @param top: the top position\r\n */\r\n scroll(top: number = 0) {\r\n const elem = document.getElementById(this.scrollerId);\r\n if (elem) {\r\n elem.scrollTo({ top: top, left: 0, behavior: 'auto' });\r\n }\r\n }\r\n\r\n /**\r\n * Check if every element are selected\r\n */\r\n allSelected(): boolean {\r\n return this.selection?.current?.selected?.length === this.snapshot?.items?.length;\r\n }\r\n\r\n /**\r\n * Master selection toggle\r\n * @param select: true to select all elements false to deselect all elements\r\n */\r\n selectAll(select: boolean = true) {\r\n if (select) {\r\n this.snapshot?.items?.forEach(n => this.selection?.select(n, n.documentId));\r\n } else {\r\n this.snapshot?.items?.forEach(n => this.selection?.deselect(n, n.documentId));\r\n }\r\n }\r\n\r\n /**\r\n * Check if selections exists\r\n * @returns true if at least one element is selected\r\n */\r\n hasAnySelection(): boolean {\r\n return (this.selection?.all?.length ?? 0) > 0;\r\n }\r\n\r\n /**\r\n * Check if only one element is selected\r\n * @returns true if only one element is selected\r\n */\r\n hasSingleSelection(): boolean {\r\n return (this.selection?.all?.length ?? 0) === 1;\r\n }\r\n\r\n /**\r\n * Get the first selected item \r\n * @returns the selected item or null \r\n */\r\n getSingleSelection(): ClipperDocumentInfo | undefined {\r\n return this.hasAnySelection() ? this.selection?.all[0] : undefined;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Clear selection\r\n */\r\n clearSelection() {\r\n return this.selection?.clear();\r\n }\r\n\r\n /**\r\n * Return the number of selected items or null\r\n * @returns Return the number of selected items\r\n */\r\n countSelections(): number | undefined {\r\n return (this.selection && this.selection?.all?.length > 0) ? this.selection?.all?.length : undefined;\r\n }\r\n\r\n /**\r\n * Get the selected id\r\n */\r\n getSeletectId(): string | undefined {\r\n if (this.hasAnySelection()) {\r\n return this.selection?.all[0].documentId;\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Get all selected ids\r\n */\r\n getSeletectIds(): string[] | undefined {\r\n if ((this.selection?.all?.length ?? 0) > 100) {\r\n this.dialogService.error('La selezione non può contenere più di 100 elementi.');\r\n return undefined;\r\n }\r\n let ids: string[] = [];\r\n if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n ids.push(n.documentId);\r\n });\r\n }\r\n return ids;\r\n }\r\n\r\n /**\r\n * Get all selected ids\r\n * @returns a tuple list with id and data\r\n */\r\n getSeletectIdsAndData(): [string, ClipperDocumentInfo][] | undefined {\r\n if ((this.selection?.all?.length ?? 0) > 100) {\r\n this.dialogService.error('La selezione non può contenere più di 100 elementi.');\r\n return undefined;\r\n }\r\n let data: [string, ClipperDocumentInfo][] = [];\r\n if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n data.push([n.documentId, n]);\r\n });\r\n }\r\n return data;\r\n }\r\n\r\n\r\n /**\r\n * Prepare result items\r\n * @param items : the items to process\r\n * @param params : the current search params\r\n */\r\n prepareResultItems(items: ClipperDocumentInfo[], params: ClipperSearchParams) {\r\n const today = startOfToday();\r\n const groupByYear =\r\n !params.sortMode ||\r\n params.sortMode === ClipperSort.DateAsc ||\r\n params.sortMode === ClipperSort.DateDesc ||\r\n params.sortMode === ClipperSort.SourceDateAsc ||\r\n params.sortMode === ClipperSort.SourceDateDesc;\r\n const groupByRelevance = params.sortMode === ClipperSort.Relevance;\r\n const groupByPopularity = params.sortMode === ClipperSort.Popularity;\r\n let group = '';\r\n items?.forEach(n => {\r\n n.documentId = n.documentId ?? n.id;\r\n this.selection?.updateCurrent(n, n.documentId);\r\n if (n.model === ClipperModel.Quesiti) {\r\n n.info = \"Quesito n° \" + n.number + \" del \" + SystemUtils.formatDate(n.date, \"d MMM yyyy\");\r\n } else if (n.model === ClipperModel.Scadenze ||\r\n n.model === ClipperModel.Segnalazioni) {\r\n switch (n.model) {\r\n case ClipperModel.Scadenze:\r\n n.originDescription = 'Scadenza';\r\n break;\r\n case ClipperModel.Segnalazioni:\r\n n.originDescription = 'Segnalazione';\r\n break;\r\n }\r\n if (n.expiringInfo) {\r\n let parts = n.expiringInfo.split('|');\r\n if (parts.length === 3) {\r\n n.expiringDescription = parts[2];\r\n }\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n const d = startOfDay(subDays(n.date, 15));\r\n n.isExpiring = today <= n.date && today >= d;\r\n n.isExpired = n.date < today;\r\n\r\n }\r\n } else {\r\n if ((n.model === ClipperModel.Articoli ||\r\n n.model === ClipperModel.News) &&\r\n n.tags) {\r\n n.info = n.tags.toUpperCase();\r\n }\r\n if (n.model !== ClipperModel.AggiornamentoNormativo &&\r\n n.model !== ClipperModel.NormativaVigente &&\r\n n.model !== ClipperModel.GiurisprudenzaRecente &&\r\n n.model !== ClipperModel.Juris &&\r\n n.date) {\r\n n.date = startOfDay(new Date(n.date ?? n.publishingDate));\r\n const d = startOfDay(subDays(startOfToday(), 7))\r\n n.isNew = n.date > d;\r\n }\r\n if (n.anchors) {\r\n let anchorType: number | undefined;\r\n let anchors: any = [];\r\n n.anchors.forEach(a => {\r\n if (a.type === 20) return;\r\n if (a.type !== anchorType) {\r\n if (a.type >= 3)\r\n anchors.push({ text: a.typeDescription });\r\n anchorType = a.type;\r\n }\r\n let score = a.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n anchors.push({\r\n text: a.text,\r\n title: a.title,\r\n documentId: a.documentId,\r\n uri: a.uri,\r\n veryRelevant: score > 0.7\r\n });\r\n });\r\n n.anchors = anchors;\r\n }\r\n if (n.validityState > 0) {\r\n n.validityDescription = 'Non è più vigente';\r\n n.isExpired = true;\r\n if (n.validUntilDate) {\r\n const expiringDate = startOfDay(new Date(n.validUntilDate));\r\n if (expiringDate < today) {\r\n n.validityDescription =\r\n 'Non più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n } else {\r\n n.validityDescription =\r\n 'Non sarà più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n n.isExpired = false;\r\n }\r\n }\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n const d = startOfDay(subDays(n.date, 15));\r\n n.isExpiring = today <= n.date && today >= d;\r\n n.isExpired = n.date < today;\r\n }\r\n }\r\n if (groupByYear) {\r\n const d = this.filterParams.models?.length > 1\r\n ? n.publishingDate\r\n : n.date;\r\n const year = SystemUtils.formatDate(d, DateFormat.LongMonthAndYear)?.toLowerCase();\r\n if (group !== year) {\r\n n.group = year;\r\n group = year;\r\n }\r\n } else if (groupByRelevance) {\r\n if (group !== 'none') {\r\n n.group =\r\n 'Elementi più rilevanti per la ricerca: ' + params.text;\r\n group = 'none';\r\n }\r\n } else if (groupByPopularity) {\r\n if (group !== 'none') {\r\n n.group = 'Elementi più popolari in ordine decrescente';\r\n group = 'none';\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Prepare results\r\n * @param data : the result list to prepare\r\n * @param newSearch : true if is a new search\r\n */\r\n prepareResults(data: ClipperSearchResult, newSearch: boolean = false) {\r\n const currentTotal = this.snapshot?.total ?? 0;\r\n this.selection?.current.clear();\r\n if (!newSearch) {\r\n data.facets = this.snapshot?.facets;\r\n }\r\n this.snapshot = data;\r\n if (this.snapshot.total == -1) {\r\n this.snapshot.total = currentTotal;\r\n }\r\n if (this.snapshot.items) {\r\n this.prepareResultItems(this.snapshot.items, this.filterParams);\r\n }\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n /**\r\n * Save current document list or just the selected documents as a csv\r\n * @param format: the export format: 1) list, 2) deadlines\r\n */\r\n exportResults(format: number = 1) {\r\n if (this.snapshot?.total > 0 || this.hasAnySelection()) {\r\n this.exportItems(this.getSeletectIds(), this.filterParams, format);\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Return item state css class\r\n * @param item : the item to evaluate\r\n */\r\n getItemStateCssClass(item: ClipperDocumentInfo): string | undefined {\r\n if (item.isRead !== true && ClipperUtils.isClipperModelReadable(item.model)) return 'unread-bg';\r\n else if (item.isExpired) return 'expired-bg';\r\n //else if (item.popularity === 3) return 'popular-bg';\r\n //else if (item.popularity > 3) return 'very-popular-bg';\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Return the item state tooltip text\r\n * @param item : the item to evaluate\r\n */\r\n getItemStateTooltip(item: ClipperDocumentInfo): string {\r\n if (item.isRead !== true && ClipperUtils.isClipperModelReadable(item.model)) return 'Non letto';\r\n else if (item.isExpired) return 'Non più vigente';\r\n //else if (item.popularity === 3) return 'Documento con numero di citazioni alto';\r\n //else if (item.popularity > 3) return 'Documento con numero di citazioni molto alto';\r\n return '';\r\n }\r\n\r\n /**\r\n * Return the item icon\r\n * @param item : the item to evaluate\r\n */\r\n getItemIcon(item: ClipperDocumentInfo): string {\r\n switch (item.model) {\r\n case ClipperModel.NormativaVigente: return 'gavel';\r\n case ClipperModel.Articoli:\r\n case ClipperModel.Quesiti:\r\n case ClipperModel.MetodiDiAnalisi: return 'extension';\r\n default: return 'updated';\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the read flag\r\n * @param item : the item to update\r\n * @paran e: the optional click event\r\n */\r\n toggleRead(item: ClipperDocumentInfo, e?: Event) {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n this.setRead(!item?.isRead, item);\r\n\r\n }\r\n\r\n /**\r\n * Toggle the selection flag\r\n * @param item : the item to update\r\n * @paran e: the optional click event\r\n */\r\n toggleSelection(item: ClipperDocumentInfo, e?: Event) {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n this.selection?.toggle(item, item.documentId)\r\n\r\n\r\n }\r\n\r\n\r\n /**\r\n * Set read flag\r\n * @param value: the flag value\r\n * @param item: the item to set or null to use current selection\r\n */\r\n setRead(value: boolean, item?: ClipperDocumentInfo) {\r\n let documentIds: string[] = [];\r\n if (item) {\r\n documentIds = [item.documentId];\r\n } else if (this.hasAnySelection()) {\r\n documentIds = this.selection?.all?.map(n => n.documentId);\r\n }\r\n return this.clipperService.updateState({ documentIds: documentIds, isRead: value })\r\n .subscribe(r => {\r\n if (r.success) {\r\n if (item) {\r\n if (item.isRead !== value) {\r\n item.isRead = value;\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_READ, { document: item, value: value });\r\n this.clipperService.updateUnreadItems(\r\n ClipperUtils.getClipperModuleFromModel(item),\r\n item.model,\r\n value ? -1 : 1);\r\n this.changeDetector.markForCheck();\r\n }\r\n } else if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n if (n.isRead !== value) {\r\n n.isRead = value;\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_READ, { document: n, value: value });\r\n this.clipperService.updateUnreadItems(\r\n ClipperUtils.getClipperModuleFromModel(n),\r\n n.model,\r\n value ? -1 : 1);\r\n this.changeDetector.markForCheck();\r\n }\r\n })\r\n }\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_DASHBOARD_UPDATED);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n * @param newWindow: true if the document must be open into a new window\r\n * @param canUseArchive: true if archive is available\r\n */\r\n override open(documentId: string, query?: string, newWindow?: boolean) {\r\n if (!newWindow) this.openDocument(documentId, query);\r\n else {\r\n window.open((this.clipperService.appUri ?? '') + '/documento/' + documentId, '_blank');\r\n }\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n * @param query: the current query or null \r\n */\r\n openDocument(documentId: string, query?: string) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.dialogService.baseService,\r\n this.clipperService,\r\n documentId,\r\n query ?? this.filterParams.expandTextQueryUsingAI\r\n ? (this.filterParams.augmentedText ?? this.filterParams.text)\r\n : this.filterParams.text,\r\n this.selectionMode(),\r\n null,\r\n this.themeService.getTheme(),\r\n this.canUseArchive(),\r\n this.canHandleTooManyResults()\r\n );\r\n\r\n }\r\n\r\n ///\r\n // Restorable\r\n ///\r\n\r\n /**\r\n * Save restorable data\r\n * @param id : the restorable id\r\n * @param storage : the storage to use. Default si session storage.\r\n */\r\n save(id: string, storage: Storage = sessionStorage) {\r\n storage.setItem(\r\n id,\r\n JSON.stringify({\r\n paginator: {\r\n index: this.paginator()?.pageIndex ?? 0,\r\n total: this.snapshot?.total ?? 0,\r\n size: this.paginator()?.pageSize ?? this.filterParams?.count ?? 15\r\n },\r\n facets: this.facets()?.save(),\r\n filterParams: this.filterParams,\r\n scroll: this.scrollPos,\r\n sort: { mode: this.sortMode, options: this.sortOptions },\r\n data: this.snapshot\r\n ? { items: this.snapshot.items, total: this.snapshot.total }\r\n : null\r\n }));\r\n }\r\n\r\n /**\r\n * Restore data\r\n * @param id : the restorable id\r\n * @param storage : the storage to use. Default si session storage.\r\n */\r\n restore(id: string, storage: Storage = sessionStorage) {\r\n const value = storage.getItem(id);\r\n if (value) {\r\n const data = JSON.parse(value);\r\n if (data) {\r\n this.filterParams = data.filterParams;\r\n const modules = SystemUtils.clone(this.filterParams.modules);\r\n const sectors = SystemUtils.clone(this.filterParams.sectors);\r\n const authors = SystemUtils.clone(this.filterParams.authors);\r\n const tags = SystemUtils.clone(this.filterParams.tags);\r\n const topics = SystemUtils.clone(this.filterParams.topics);\r\n this.filterParams.modules = modules;\r\n this.filterParams.sectors = undefined;\r\n this.filterParams.authors = undefined;\r\n this.filterParams.tags = undefined;\r\n this.filterParams.topics = undefined;\r\n this.snapshot = data.data;\r\n this.sortMode = data.sort.mode;\r\n this.sortOptions = data.sort.options;\r\n setTimeout(() => {\r\n this.filterParams.sectors = sectors;\r\n this.filterParams.authors = authors;\r\n this.filterParams.tags = tags;\r\n this.filterParams.topics = topics;\r\n const facets = this.facets();\r\n if (facets && data.facets) {\r\n facets.restore(data.facets);\r\n this.hasFacets.set(data.facets.hasFacets === true ? true : false);\r\n }\r\n const paginator = this.paginator();\r\n if (paginator && data.paginator) {\r\n paginator.pageIndex = data.paginator.index;\r\n paginator.pageSize = data.paginator.size;\r\n paginator.length = data.paginator.total;\r\n }\r\n this.scroll(data.scroll ?? 0);\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_SEARCH_RESTORED, data.filterParams)\r\n this.changeDetector.detectChanges();\r\n }, 750);\r\n\r\n }\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, input, OnInit } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuModule } from '@angular/material/menu';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ClipperDocumentInfo, ClipperMessages, ClipperModel, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { BroadcastService, FormatPipe, ScreenService } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\n\r\n\r\nexport enum ClipperSearchResultItemDisplayMode {\r\n List = 1,\r\n Tile = 2,\r\n Stripe = 3\r\n}\r\n\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'clipper-search-result-item',\r\n templateUrl: './search-result-item.component.html',\r\n styleUrls: ['./search-result-item.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n FlexLayoutModule,\r\n FormatPipe\r\n ],\r\n})\r\nexport class ClipperSearchResultItemComponent implements OnInit {\r\n\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n protected screenService = inject(ScreenService);\r\n protected broadcastService = inject(BroadcastService);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n readonly parent = input.required<ClipperSearchResultManager>();\r\n readonly item = input.required<ClipperDocumentInfo>();\r\n readonly actions = input.required<MatMenu>();\r\n readonly tileNoPictureUrl = input<string>();\r\n readonly tilePictureUrl = input<string>();\r\n readonly isSelectable = input<boolean>(true);\r\n readonly isReadable = input<boolean>(true); \r\n readonly isReadableModel = input<ClipperModel | undefined>(undefined);\r\n readonly displayModifiedTitle = input<boolean>(false);\r\n readonly displayModelName = input<boolean>(false);\r\n readonly displayDate = input<boolean>(true);\r\n readonly displayMode = input<ClipperSearchResultItemDisplayMode>(ClipperSearchResultItemDisplayMode.List);\r\n protected readonly displayModesEnum: typeof ClipperSearchResultItemDisplayMode = ClipperSearchResultItemDisplayMode;\r\n protected readonly modelsEnum: typeof ClipperModel = ClipperModel;\r\n\r\n ngOnInit(): void {\r\n this.parent()?.selection?.changed\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(() => {\r\n this.changeDetector.markForCheck();\r\n });\r\n\r\n // React to message broadcasting\r\n this.broadcastService.getMessage()\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(message => {\r\n if (message.id === ClipperMessages.DOCUMENT_NAVIGATED) {\r\n if (this.isReadable() && this.item().documentId === message.data.document.documentId && !this.item().isRead) {\r\n this.parent()?.setRead(true, this.item());\r\n }\r\n } else if (message.id === ClipperMessages.DOCUMENT_READ) {\r\n if (this.isReadable() && this.item().documentId === message.data.document.documentId) {\r\n this.item().isRead = message.data.value;\r\n this.changeDetector.markForCheck();\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Checks if current item is selected\r\n * @returns true if current item is selected\r\n */\r\n protected isSelected(): boolean {\r\n return this.isSelectable() && this.parent()?.selection?.isSelected(this.item().documentId);\r\n };\r\n\r\n /**\r\n * Checks if current item is read\r\n * @returns true if current item is read\r\n */\r\n protected isRead(): boolean {\r\n return this.isReadable() && ClipperUtils.isClipperModelReadable(\r\n this.isReadableModel() ?? this.item().model) && this.item().isRead === true;\r\n };\r\n\r\n /**\r\n * Checks if current item can be read\r\n * @returns true if current item can be read\r\n */\r\n protected canBeRead(): boolean {\r\n return this.isReadable() && ClipperUtils.isClipperModelReadable(\r\n this.isReadableModel() ?? this.item().model) && this.item().isRead !== true;\r\n };\r\n \r\n\r\n}\r\n","<div>\r\n @if (displayMode() === displayModesEnum.List ) {\r\n <div class=\"item\" fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill\r\n [class.item-selected]=\"isSelected()\" [matContextMenuTriggerFor]=\"actions()\"\r\n [matContextMenuTriggerData]=\"{item: item()}\" (mouseenter)=\"item().isOver = true\"\r\n (mouseleave)=\"item().isOver = false\">\r\n <div fxFlex=\"6px\" fxFlexAlign=\"stretch\" [class]=\"parent().getItemStateCssClass(item())\"\r\n [matTooltip]=\"parent().getItemStateTooltip(item())\"><span></span>\r\n </div>\r\n <div [fxFlex]=\"isSelectable() ? '48px' : '16px'\" fxLayoutAlign=\"center\">\r\n @if (isSelectable() && (screenService.isTouchable || item().isOver || isSelected())) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? parent().selection?.toggle(item(), item().documentId) : null\" [checked]=\"isSelected()\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\">\r\n <div class=\"item-content\">\r\n @if (displayModelName() && item().modelName) {\r\n @if (item().origin === 'GC' || item().origin === 'GN') {\r\n <div class=\"info-2\">GIURISPRUDENZA</div>\r\n } @else {\r\n <div class=\"info-2\">{{item().modelName}}</div>\r\n }\r\n }\r\n @if (item().info && item().model === modelsEnum.Quesiti) {\r\n @if(item().info) {\r\n <div class=\"info-1\">{{item().info}}</div>\r\n }\r\n }@else if(item().model === modelsEnum.NormativaVigente ||\r\n item().model === modelsEnum.AggiornamentoNormativo ||\r\n item().model === modelsEnum.GiurisprudenzaRecente ||\r\n item().model === modelsEnum.Juris) {\r\n @if (item().author && (item().origin === 'LR' || item().origin === 'GC' || item().origin\r\n === 'GN')) {\r\n <div class=\"info-1\">{{item().author}}</div>\r\n }\r\n @if(item().model === modelsEnum.Juris && displayDate() && item().date) {\r\n <div class=\"info-1\">{{item().date | format:'D':'d MMM yyyy'}}</div>\r\n }\r\n }@else if (displayDate() && item().date) {\r\n <div class=\"info-1\">{{item().date | format:'D':'d MMM yyyy'}}</div>\r\n }\r\n <div>\r\n <a class=\"link\" (click)=\"parent().open(item().documentId)\"\r\n [attr.aria-label]=\"'Apri documento ' + item().title1\">{{item().title1 ?? item().title2}}</a>\r\n @if (item().part > 0) {\r\n <span class=\"badge\">PARTE {{item().part}}</span>\r\n }\r\n @if (item().isCommented) {\r\n <span class=\"badge\">COMMENTATA</span>\r\n }\r\n @if (item().validityState > 0) {\r\n <span class=\"badge-red\">{{item().validityDescription}}</span>\r\n }\r\n </div>\r\n @if(item().description && item().model === modelsEnum.Coordinamento) {\r\n <div class=\"title\">{{item().description}}</div>\r\n }\r\n @if (item().title2 &&\r\n item().model !== modelsEnum.Coordinamento &&\r\n item().model !== modelsEnum.News &&\r\n item().model !== modelsEnum.AllerteAlimentari &&\r\n item().model !== modelsEnum.Articoli &&\r\n item().model !== modelsEnum.Juris &&\r\n item().model !== modelsEnum.Quesiti &&\r\n item().model !== modelsEnum.Scadenze &&\r\n item().model !== modelsEnum.Segnalazioni) {\r\n <div class=\"title\">{{item().title2}}</div>\r\n }\r\n @if (item().originDescription &&\r\n item().model !== modelsEnum.Scadenze &&\r\n item().model !== modelsEnum.Segnalazioni &&\r\n item().model !== modelsEnum.News &&\r\n item().model !== modelsEnum.Articoli &&\r\n item().model !== modelsEnum.Juris) {\r\n <div class=\"info-1\" [class.info-3]=\"(item().model === modelsEnum.Coordinamento && (item().validFromDate || item().applicableFromDate))\">\r\n {{item().originDescription}}\r\n @if (item().model === modelsEnum.Coordinamento ) {\r\n @if (item().validFromDate) {\r\n in vigore da: <span class=\"bold\">{{item().validFromDate | format:'D':'d MMMM yyyy'}}</span>\r\n }\r\n @if (item().applicableFromDate) {\r\n applicabile da: <span class=\"bold\">{{item().applicableFromDate | format:'D':'d MMMM yyyy'}}</span>\r\n }\r\n }\r\n </div>\r\n }\r\n @if (item().anchors?.length > 0) {\r\n <div class=\"details\">\r\n <div>DETTAGLIO</div>\r\n <div class=\"links\">\r\n @for (a of item().anchors; track $index) {\r\n <span>\r\n @if (a.uri && a.text) {\r\n <a (click)=\"parent().open(a.documentId + '#' + a.uri)\" [matTooltip]=\"a.title\">{{a.text}} @if\r\n (a.veryRelevant) {\r\n <sup>\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' \r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n </sup>\r\n }</a>\r\n }\r\n @if (!a.uri && a.text) {\r\n <span>{{a.text}}</span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @if (item().taxonomy?.length > 0) {\r\n <div class=\"details\">\r\n <div>ARGOMENTI</div>\r\n <div class=\"links\">\r\n @for (n of item().taxonomy?.split('\\r\\n'); track $index) {\r\n <div class=\"link\">\r\n {{n}}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @if (item().model === modelsEnum.News ||\r\n item().model === modelsEnum.Articoli ||\r\n item().model === modelsEnum.Juris) {\r\n @if (item().info){\r\n <div class=\"details\">\r\n <div class=\"links\">\r\n <div>{{item().info}}</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n @if (item().model === modelsEnum.Coordinamento) {\r\n @if (item().title1 && displayModifiedTitle()) {\r\n <div class=\"details\">\r\n <div>TITOLO DOCUMENTO MODIFICATO</div>\r\n <div class=\"links\">\r\n <div>{{item().title1}}</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n @if (item().model === modelsEnum.Scadenze || item().model === modelsEnum.Segnalazioni) {\r\n @if (item().expiringDescription) {\r\n <div class=\"details\">\r\n <div>PROSSIMA SCADENZA</div>\r\n <div class=\"links\">\r\n <div>{{item().expiringDescription}}</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (canBeRead())\r\n {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Segna come già letta\" [attr.aria-label]=\"'Segna come già letta'\"\r\n (click)=\"parent().toggleRead(item(), $event)\" [hidden]=\"!(item().isOver || item().isMenuOpen)\">\r\n <mat-icon>flag</mat-icon>\r\n </button>\r\n }\r\n @if(item().model === modelsEnum.Scadenze || item().model === modelsEnum.Segnalazioni) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Aggiungi al tuo calendario\"\r\n [attr.aria-label]=\"'Aggiungi al tuo calendario'\" [hidden]=\"!(item().isOver || item().isMenuOpen)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\" [attr.aria-label]=\"'Menu opzioni'\"\r\n [matMenuTriggerFor]=\"actions()\" [matMenuTriggerData]=\"{item: item()}\" (click)=\"item().isMenuOpen = true\"\r\n [hidden]=\"!(item().isOver || item().isMenuOpen)\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n } @else if (displayMode() === displayModesEnum.Tile ) {\r\n <div class=\"tile\" [matContextMenuTriggerFor]=\"actions()\" [matContextMenuTriggerData]=\"{item: item()}\"\r\n (mouseenter)=\"item().isOver = true\" (mouseleave)=\"item().isOver = false\" [class.item-selected]=\"isSelected()\"\r\n [class.item-unread]=\"isRead()\" (click)=\"parent().open(item().documentId)\">\r\n <div class=\"image\">\r\n @if (canBeRead() || isSelectable()) {\r\n <div class=\"buttons\">\r\n @if (canBeRead()) {\r\n <button mat-icon-button class=\"unread-button\" matTooltip=\"Segna come già letto\"\r\n (click)=\"parent().toggleRead(item(), $event)\"><mat-icon>flag</mat-icon></button>\r\n }\r\n @if (isSelectable() && (isSelected() || item().isOver === true)) {\r\n <button mat-icon-button class=\"check\" [class.check-selected]=\"isSelected()\" matTooltip=\"Seleziona/Deseleziona\"\r\n (click)=\"parent().toggleSelection(item(), $event)\"><mat-icon>check</mat-icon></button>\r\n }\r\n </div>\r\n }\r\n <div class=\"info-1\">{{item().modelName}}</div>\r\n @if (item().info) {\r\n <div class=\"info-2\">{{item().info}}</div>\r\n }\r\n @if (item().pictureId && tilePictureUrl()) {\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tilePictureUrl() + '?id=' + item().pictureId\" [alt]=\"item().title2\" />\r\n } @else if (tileNoPictureUrl()) {\r\n <picture>\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tileNoPictureUrl()\"\r\n [alt]=\"item().title2 || 'immagine non trovata'\" />\r\n </picture>\r\n }\r\n </div>\r\n <div class=\"body\">\r\n <div class=\"date\">\r\n <span class=\"date-day\" [class.unread]=\"!item().isRead\">{{item().date | format:'D':'d\r\n MMMM'}}</span>\r\n <span class=\"date-divider\"></span>\r\n <span>{{item().date| format:'D':'yyyy'}}</span>\r\n </div>\r\n <div class=\"title\">{{item().title2}}</div>\r\n </div>\r\n </div>\r\n } @else if (displayMode() === displayModesEnum.Stripe ) {\r\n <div class=\"stripe\" [matContextMenuTriggerFor]=\"actions()\" [matContextMenuTriggerData]=\"{item: item()}\"\r\n (mouseenter)=\"item().isOver = true\" (mouseleave)=\"item().isOver = false\" [class.item-selected]=\"isSelected()\"\r\n [class.item-unread]=\"isRead()\" (click)=\"parent().open(item().documentId)\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div>\r\n <div fxLayout=\"row\">\r\n <div fxHide.xs class=\"image\">\r\n @if (canBeRead() || isSelectable()) {\r\n <div class=\"buttons\">\r\n @if (canBeRead()) {\r\n <button mat-icon-button class=\"unread-button\" matTooltip=\"Segna come già letto\"\r\n (click)=\"parent().toggleRead(item(), $event)\"><mat-icon>flag</mat-icon></button>\r\n }\r\n @if (isSelectable() && (isSelected() || item().isOver === true)) {\r\n <button mat-icon-button class=\"check\" [class.check-selected]=\"isSelected()\"\r\n matTooltip=\"Seleziona/Deseleziona\"\r\n (click)=\"parent().toggleSelection(item(), $event)\"><mat-icon>check</mat-icon></button>\r\n }\r\n </div>\r\n }\r\n @if (item().pictureId && tilePictureUrl()) {\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tilePictureUrl() + '?id=' + item().pictureId\"\r\n [alt]=\"item().title2\" />\r\n } @else if (tileNoPictureUrl()) {\r\n <picture>\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tileNoPictureUrl()\"\r\n [alt]=\"item().title2 || 'immagine non trovata'\" />\r\n </picture>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"body\">\r\n <div class=\"date\">\r\n <span class=\"date-day\" [class.unread]=\"!item().isRead\">{{item().date | format:'D':'d\r\n MMMM'}}</span>\r\n <span class=\"date-divider\"></span>\r\n <span>{{item().date| format:'D':'yyyy'}}</span>\r\n </div>\r\n <div class=\"title\">{{item().title2}}</div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n <div class=\"info-1\">{{item().modelName}}</div>\r\n @if (item().info) {\r\n <div class=\"info-2\">{{item().info}}</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>","import { Breakpoints } from '@angular/cdk/layout';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject, viewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperDocumentInfo,\r\n ClipperQueryReferencesMode, ClipperReferencesSearchParams, ClipperSearchFacetsResult, ClipperSearchFacetsSnapshot,\r\n ClipperSearchParams,\r\n ClipperUserInfo\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ApiResult, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { finalize, takeUntil } from 'rxjs/operators';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\r\n\r\n\r\nexport interface ClipperReferencesDialogData {\r\n mode?: ClipperQueryReferencesMode;\r\n anchor?: string;\r\n anchorTitle?: string;\r\n documentId: string;\r\n model: number;\r\n canUseArchive?: boolean;\r\n canHandleTooManyResults?: boolean;\r\n}\r\n\r\nexport interface ClipperReferenceDialogResult {\r\n documentId: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './references.component.html',\r\n styleUrls: ['./references.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FlexLayoutModule,\r\n MatDialogTitle,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatCheckboxModule,\r\n MatSlideToggleModule,\r\n FormsModule,\r\n MatMenuModule,\r\n MatBadgeModule,\r\n MatPaginatorModule,\r\n MatDialogContent,\r\n MatSidenavModule,\r\n MatProgressBarModule,\r\n ClipperDocumentMenuComponent,\r\n ClipperSearchFacetsComponent,\r\n ClipperSearchResultItemComponent,\r\n ],\r\n})\r\nexport class ClipperReferencesComponent extends ClipperSearchResultManager\r\n implements OnInit, OnDestroy, AfterViewInit {\r\n readonly filterPane = viewChild.required<MatDrawer>('filterPane');\r\n\r\n private dialogRef = inject(MatDialogRef<ClipperReferencesComponent>);\r\n protected dialogData: ClipperReferencesDialogData = inject(MAT_DIALOG_DATA) ?? { mode: ClipperQueryReferencesMode.ReferencesIn };\r\n protected title?: string;\r\n protected item?: ClipperDocumentInfo;\r\n protected user: ClipperUserInfo | undefined = this.clipperService.loginInfo?.context; \r\n \r\n ngOnInit() {\r\n if (this.dialogData) {\r\n switch (this.dialogData.mode) {\r\n case ClipperQueryReferencesMode.ReferencesIn:\r\n this.title = \"Documenti richiamati nelle note o nel testo\";\r\n break;\r\n case ClipperQueryReferencesMode.ReferencesOut:\r\n this.title = \"Documenti che richiamano quello in visione\";\r\n break;\r\n case ClipperQueryReferencesMode.ChangesIn:\r\n this.title = \"Modifiche subite\";\r\n break;\r\n case ClipperQueryReferencesMode.ChangesOut:\r\n this.title = \"Modifiche apportate\";\r\n break;\r\n case ClipperQueryReferencesMode.Juris:\r\n this.title = \"Giurisprudenza associata\";\r\n break;\r\n }\r\n if (this.dialogData.anchorTitle) {\r\n this.title += \" - \" + this.dialogData.anchorTitle;\r\n }\r\n // Use service snapshot\r\n this.snapshot = this.clipperService.referencesSnapshot() ?? { searchParams: new ClipperSearchParams(), interval: \"-1\" };\r\n if (\r\n this.filterParams.mode !== this.dialogData.mode ||\r\n this.filterParams.id !== this.dialogData.documentId ||\r\n this.filterParams.anchor !== this.dialogData.anchor\r\n ) {\r\n this.filterParams = new ClipperSearchParams();\r\n this.filterParams.mode = this.dialogData.mode;\r\n this.filterParams.model = this.dialogData.model;\r\n this.filterParams.anchor = this.dialogData.anchor;\r\n this.filterParams.id = this.dialogData.documentId;\r\n this.filterParams.useModifierInfo = this.dialogData.mode === ClipperQueryReferencesMode.ChangesOut;\r\n this.filterParams.returnModifierInfo = this.dialogData.mode !== ClipperQueryReferencesMode.ChangesOut;\r\n this.clipperService.referencesSnapshot.set(this.snapshot);\r\n }\r\n }\r\n\r\n // Initialize selection\r\n this.selection = new SelectableModel<ClipperDocumentInfo, string>(true, 'documentId');\r\n\r\n // Observe layout changes\r\n this.breakpointObserver\r\n .observe([\r\n Breakpoints.XSmall,\r\n Breakpoints.Small,\r\n Breakpoints.Medium,\r\n Breakpoints.Large,\r\n Breakpoints.XLarge,\r\n ])\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe((result: any) => {\r\n for (const query of Object.keys(result.breakpoints)) {\r\n if (result.breakpoints[query]) {\r\n this.handleFilterPaneVisibility();\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n // Handle filter pane \r\n this.handleFilterPaneVisibility();\r\n // Handle facets\r\n const facets = this.facets();\r\n if (facets) {\r\n facets.changed\r\n .subscribe((value: ClipperSearchFacetsSnapshot) => {\r\n this.snapshot.facets = value;\r\n this.fetch(true);\r\n });\r\n }\r\n }, 0);\r\n this.fetch(true);\r\n this.restoreFacets();\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n\r\n /**\r\n * Show hide filter pane manually\r\n */\r\n protected toggleFilterPane() {\r\n this.filterPaneClosed = !this.filterPaneClosed;\r\n this.filterPane()?.toggle();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle filter pane visibility\r\n */\r\n private handleFilterPaneVisibility() {\r\n const filterPane = this.filterPane();\r\n if (filterPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (filterPane.opened) {\r\n filterPane.close();\r\n }\r\n filterPane.mode = 'over';\r\n filterPane.disableClose = false;\r\n this.filterPaneHasBackdrop = true;\r\n } else {\r\n if (!this.hasFacets()) {\r\n filterPane.close();\r\n } else if (!filterPane.opened && !this.filterPaneClosed) {\r\n filterPane.open();\r\n } else if (filterPane.opened && this.filterPaneClosed) {\r\n filterPane.close();\r\n }\r\n filterPane.mode = 'side';\r\n filterPane.disableClose = true;\r\n this.filterPaneHasBackdrop = false;\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Close dialog\r\n */\r\n close() {\r\n this.dialogRef.close();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Send document links by email\r\n * @param item : the item to add\r\n */\r\n sendTo(item: ClipperDocumentInfo = null) {\r\n this.sendItemsTo(item ? [item] : this.selection?.all);\r\n }\r\n\r\n\r\n\r\n /**\r\n * Prepare the search params\r\n * @param newSearch : true if it is a new search\r\n * @return the new search params\r\n */\r\n private prepareFetch(newSearch: boolean = false): ClipperSearchParams {\r\n const newParams = SystemUtils.clone(this.filterParams) as ClipperSearchParams;\r\n newParams.count = 15;\r\n newParams.useModifierInfo =\r\n newParams.mode === ClipperQueryReferencesMode.ChangesOut;\r\n newParams.returnModifierInfo =\r\n newParams.mode !== ClipperQueryReferencesMode.ChangesOut;\r\n if (newSearch) {\r\n newParams.first = 0;\r\n } \r\n // Apply facets\r\n if (this.snapshot.facets?.fromDate) {\r\n newParams.fromDate = this.snapshot.facets?.fromDate;\r\n newParams.toDate = this.snapshot.facets?.toDate;\r\n newParams.year = this.snapshot.facets?.fromDate.getFullYear();\r\n } \r\n if (this.snapshot.facets?.sector) {\r\n newParams.sector = this.snapshot.facets?.sector;\r\n }\r\n if (this.snapshot.facets?.type) {\r\n newParams.type = this.snapshot.facets?.type;\r\n }\r\n if (this.snapshot.facets?.author) {\r\n newParams.author = this.snapshot.facets?.author;\r\n }\r\n return newParams;\r\n }\r\n\r\n /**\r\n * Get e refrences search params form clipper search params\r\n * @param params : the clipper search params\r\n * @returns : the references search params\r\n */\r\n private toReferencesSearchParams(params: ClipperSearchParams): ClipperReferencesSearchParams {\r\n return {\r\n documentId: params.id,\r\n year: params.year,\r\n sector: params.sector,\r\n author: params.author,\r\n anchor: params.anchor,\r\n model: params.model?.toString() ?? null,\r\n mode: params.mode,\r\n excludeTextReferences: params.excludeTextReferences,\r\n excludeNotesReferences: params.excludeNotesReferences,\r\n returnModifierInfo: params.returnModifierInfo,\r\n useModifierInfo: params.useModifierInfo,\r\n count: 15,\r\n first: params.first ?? 0\r\n }\r\n }\r\n\r\n /**\r\n * Perform a search\r\n * @param newSearch: true if is a new search\r\n */\r\n fetch(newSearch: boolean = false) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.dialogService.busy('Ricerca in corso...');\r\n const searchParams = this.prepareFetch(newSearch);\r\n if (searchParams) { \r\n this.clipperService.references(this.toReferencesSearchParams(searchParams))\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n this.prepareResults(r.value, newSearch);\r\n\r\n // Handle facets\r\n if (this.snapshot.total > 0) {\r\n if (newSearch)\r\n // Update facets\r\n this.fetchFacets(searchParams);\r\n } else {\r\n this.hideFacets();\r\n }\r\n\r\n if (newSearch) {\r\n const paginator = this.paginator();\r\n if (paginator) paginator.pageIndex = 0;\r\n }\r\n\r\n this.scroll(0);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Show a new page result\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n fetchMore(e: PageEvent) {\r\n let first = e.pageIndex * (this.filterParams.count ?? 15);\r\n this.filterParams.first = first;\r\n this.fetch();\r\n }\r\n\r\n /**\r\n * Get facets\r\n * @param params: the clipper search params\r\n */\r\n fetchFacets(params: ClipperSearchParams) {\r\n if (!this.clipperService.loggedIn() || !params) return;\r\n if (!this.snapshot.facets || this.snapshot.facets?.hasMoreFacets) {\r\n this.filterBusy.set(true);\r\n this.clipperService.referencesFacets(this.toReferencesSearchParams(params))\r\n .subscribe({\r\n next: (r: ApiResult<ClipperSearchFacetsResult>) => {\r\n if (r.success) {\r\n let hasFacets = (r.value.facets?.length ?? 0) > 0;\r\n if (r.value.facets) {\r\n const facets = this.facets();\r\n facets?.update(r.value.facets, r.value.interval);\r\n if (facets && this.snapshot) {\r\n hasFacets = facets.hasFacets();\r\n this.snapshot.facets = facets.save();\r\n this.snapshot.facets.hasTooManyResults = (this.snapshot?.total ?? 0) >= 1000;\r\n }\r\n }\r\n this.hasFacets.set(hasFacets);\r\n this.handleFilterPaneVisibility();\r\n }\r\n },\r\n complete: () => {\r\n this.filterBusy.set(false);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Hide facets\r\n */\r\n protected hideFacets() {\r\n this.hasFacets.set(false);\r\n this.facets()?.reset();\r\n this.filterPane().close();\r\n this.filterPaneClosed = false;\r\n }\r\n /**\r\n * Try to restore stored facets\r\n */\r\n restoreFacets() {\r\n if (this.snapshot.facets) {\r\n this.facets().restore(this.snapshot.facets);\r\n this.handleFilterPaneVisibility();\r\n }\r\n }\r\n\r\n /**\r\n * Close current dialog and return the id to navigate to\r\n * @param documentId : the document id\r\n */\r\n open(documentId: string) {\r\n this.dialogRef.close({ documentId: documentId });\r\n }\r\n\r\n /**\r\n* Return item state css class\r\n* @param item : the item to evaluate\r\n*/\r\n override getItemStateCssClass(item: ClipperDocumentInfo): string | undefined {\r\n if (item.isExpired) return 'expired-bg';\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Return the item state tooltip text\r\n * @param item : the item to evaluate\r\n */\r\n override getItemStateTooltip(item: ClipperDocumentInfo): string {\r\n if (item.isExpired) return 'Non più vigente';\r\n return '';\r\n }\r\n}\r\n","<div class=\"clipper-references-fixed\">\r\n <div class=\"dialog-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\r\n (!filterPane.opened || filterPaneClosed))) {\r\n <div style=\"padding: 0 5px 0 24px; height: 48px; min-height: 48px;\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData.mode === 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"filterParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n &nbsp; Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (dialogData.mode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"filterParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n &nbsp; Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\" [matBadge]=\"selection?.all.length\">\r\n <mat-icon>checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [useSelections]=\"true\"\r\n [canUseArchive]=\"dialogData.canUseArchive ?? false\"\r\n [isReadable]=\"false\" [isReference]=\"true\" [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>right_panel_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"78px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\" style=\"padding: 0 5px;\">\r\n <clipper-search-facets #facets [handleTooManyResults]=\"dialogData.canHandleTooManyResults\" ></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div class=\"message-container\">\r\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [class.group-spaced]=\"i > 0\">{{item.group}}</div>\r\n </div>\r\n }\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\" [isReadable]=\"false\"\r\n [actions]=\"contextMenu\"></clipper-search-result-item>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\"\r\n [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\" [canUseArchive]=\"dialogData.canUseArchive ?? false\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <!-- legend -->\r\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\r\n <div class=\"legend expired-bg \"></div>\r\n non più vigente\r\n </div>\r\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [class.wide]=\"filterPane?.opened\">\r\n <div fxLayout=\"row\">\r\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\r\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\"\r\n (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</mat-dialog-content>","import { ChangeDetectionStrategy, Component, inject, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\nexport interface SearchFreeTextQueryParams {\r\n query: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-free-text-query-builder.component.html',\r\n styleUrls: ['./search-free-text-query-builder.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatFormFieldModule, MatInputModule,\r\n MatButtonModule, MatIconModule, MatDialogActions, MatDialogClose]\r\n})\r\nexport class ClipperSearchFreeTextQueryBuilderComponent {\r\n readonly done = output<SearchFreeTextQueryParams>();\r\n\r\n private dialogService = inject(DialogService);\r\n\r\n protected queryAnd: string = '';\r\n protected queryOr: string = '';\r\n protected queryNot: string = '';\r\n protected queryPhrase: string = '';\r\n protected queryStart: string = '';\r\n\r\n /**\r\n * Clear\r\n */\r\n protected clear() {\r\n this.queryAnd = undefined;\r\n this.queryOr = undefined;\r\n this.queryNot = undefined;\r\n this.queryPhrase = undefined;\r\n this.queryStart = undefined;\r\n }\r\n\r\n /**\r\n * Submit\r\n */\r\n protected ok() {\r\n let query = '';\r\n // Phrase\r\n if (this.queryPhrase.length > 0) {\r\n query += ' \"';\r\n query += this.queryPhrase.replace('\"', '').trim();\r\n query += '\" ';\r\n }\r\n // Or\r\n if (this.queryOr.length > 0) {\r\n let parts = this.queryOr.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ' ';\r\n query += '\"';\r\n query += parts[i].replace('\"', '').trim();\r\n query += '\" ';\r\n }\r\n query += ' ';\r\n }\r\n // And\r\n if (this.queryAnd.length > 0) {\r\n let parts = this.queryAnd.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ' ';\r\n query += '+\"';\r\n query += parts[i].replace('\"', '').trim();\r\n query += '\" ';\r\n }\r\n query += ' ';\r\n }\r\n // Start with\r\n if (this.queryStart.length > 0) {\r\n if (query.length > 0) query += ' +\"';\r\n query += this.queryStart.replace('\"', '').trim();\r\n query += '*';\r\n query += '\" ';\r\n }\r\n // Not\r\n if (this.queryNot.length > 0) {\r\n if (query.length === 0) {\r\n // Invalid query\r\n this.dialogService.error(\r\n \"L'operatore di esclusione funziona solo se prima è stato inserito un valore in almeno uno degli altri quattro campi.\"\r\n );\r\n return;\r\n }\r\n let parts = this.queryNot.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ' ';\r\n query += '-\"';\r\n query += parts[i].replace('\"', '').trim();\r\n query += '\" ';\r\n }\r\n query += ' ';\r\n }\r\n\r\n\r\n // Notify\r\n if (query.length > 0) this.done.emit({ query: query.trim() });\r\n }\r\n}\r\n","<h2 mat-dialog-title>Trova gli elementi che contengono...</h2>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\" style=\"padding-bottom: 20px;\">\r\n <mat-form-field>\r\n <mat-label>Questa esatta parola o frase</mat-label>\r\n <input matInput name=\"queryPhrase\" [(ngModel)]=\"queryPhrase\" maxlength=\"200\" />\r\n @if (queryPhrase) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryPhrase=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tutte queste parole</mat-label>\r\n <input matInput name=\"queryAnd\" [(ngModel)]=\"queryAnd\" maxlength=\"200\" />\r\n @if (queryAnd) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryAnd=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n <mat-hint>Separate da virgola</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Una qualunque di queste parole</mat-label>\r\n <input matInput name=\"queryOr\" [(ngModel)]=\"queryOr\" maxlength=\"200\" />\r\n @if (queryOr) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryOr=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n <mat-hint>Separate da virgola</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Parole che iniziano con</mat-label>\r\n <input matInput name=\"queryStart\" [(ngModel)]=\"queryStart\" maxlength=\"200\" />\r\n @if (queryStart) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryStart=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Nessuna qualunque di queste parole</mat-label>\r\n <input matInput name=\"queryNot\" [(ngModel)]=\"queryNot\" maxlength=\"200\" />\r\n @if (queryNot) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryNot=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n <mat-hint>Separate da virgola. L'operatore di esclusione funziona solo se prima è stato inserito un valore in\r\n almeno uno degli altri quattro campi. </mat-hint>\r\n </mat-form-field>\r\n </div> \r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\" fxLayoutAlign=\"start\">\r\n <button type=\"button\" mat-stroked-button (click)=\"clear()\" >Pulisci</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button (click)=\"ok()\">Ok</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-free-text-help.component.html',\r\n styleUrls: ['./search-free-text-help.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, FlexModule, MatButtonModule, MatDialogClose]\r\n})\r\nexport class ClipperSearchFreeTextHelpComponent{\r\n}\r\n","<h2 mat-dialog-title>Come effettuare la ricerca in testo libero</h2>\r\n<mat-dialog-content>\r\n <p>Normalmente viene sempre effettuata una ricerca per frase: tutte le parole specificate debbono essere\r\n \"ragionevolmente vicine\" (entro 5 parole) l'una dall'altra.</p>\r\n <p>La ricerca per frase di solito produce i risultati più rilevanti.</p>\r\n <p>Tuttavia è possibile istruire Clipper per eseguire ricerche differenti e più complesse.</p>\r\n <p>Tutte gli elementi che compongono la stringa di ricerca devono essere separati da virgola.</p>\r\n <ul>\r\n <li>Se un elemento è composto da più parole è una frase, altrimenti una parola</li>\r\n <li>Aggiungendo un <b style=\"font-size: 20px\">+</b> davanti all'elemento, l'elemento <b>dovrà per forza</b> essere presente nel documento\r\n </li>\r\n <li>Aggiungendo un <b style=\"font-size: 20px\">-</b> davanti all'elemento, l'elemento <b>non dovrà</b> essere presente nel documento</li>\r\n </ul>\r\n <p>Ecco alcuni esempi:</p>\r\n <ul>\r\n <li><b>serbatoi interrati</b>: sarà effettuata una ricerca per la frase \"serbatoi interrati\"</li>\r\n <li><b>serbatoi, interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono una o l'altra parola.</li>\r\n <li><b>serbatoi, +interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono necessariamente \"interrati\" ed eventualmente \"serbatoi\".</li>\r\n <li><b>serbatoi, -interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono necessariamente \"interrati\" ma non \"serbatoi\".</li>\r\n <li><b>\"serbatoi interrati\", -gas</b>: sarà effettuata una ricerca per la frase \"serbatoi interrati\" e per la parola \"gas\"; il risultato sarà tutti i documenti che contengono la frase \"serbatoi interrati\" ma non la parola \"gas\".</li>\r\n </ul>\r\n <p>Saranno mostrati per primi (più rilevanti) i documenti che rispettano in pieno la condizione.</p>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill >\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n","import { Breakpoints } from '@angular/cdk/layout';\r\nimport { ScrollDispatcher, ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, computed, inject, input, OnDestroy, OnInit, Signal, signal, viewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatBadge } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule, MatExpansionPanel } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInput, MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ClipperAuthors, ClipperChannel, ClipperDocumentChangeReasons, ClipperDocumentInfo, ClipperMessages, ClipperModel, ClipperModule, ClipperRegions, ClipperSearchFacetsSnapshot, ClipperSearchParams, ClipperSearchUtils, ClipperSectors, ClipperSectorTypes, ClipperSort, ClipperSources, ClipperUserInfo, ClipperUserSearch, ClipperUtils, SectorInfo } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ArsCoreModule, DateInterval, INode, NameValueItem, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogResult } from '@arsedizioni/ars-utils/ui';\r\nimport { ButtonSelectorComponent, ButtonToggleComponent, ChipsSelectorComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { finalize, takeUntil } from 'rxjs';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\nimport { ClipperSearchFreeTextQueryBuilderComponent, SearchFreeTextQueryParams } from '../search-free-text-query-builder/search-free-text-query-builder.component';\r\nimport { ClipperSearchFreeTextHelpComponent } from '../search-free-text-help/search-free-text-help.component';\r\n\r\n\r\n\r\n\r\n@Component({\r\n selector: 'clipper-browser',\r\n standalone: true,\r\n imports: [FormsModule, FlexLayoutModule, MatIconModule, MatButtonModule, MatTooltipModule, MatSidenavModule,\r\n MatExpansionModule, MatDividerModule, MatMenuModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, MatBadge,\r\n ScrollingModule, MatSelectModule, MatChipsModule, MatSlideToggleModule, MatPaginator, MatCheckboxModule, MatButtonToggleModule, MatProgressBarModule,\r\n ArsCoreModule, ChipsSelectorComponent, ButtonSelectorComponent, ButtonToggleComponent,\r\n ClipperDocumentMenuComponent, ClipperSearchResultManager, ClipperSearchResultItemComponent, ClipperSearchFacetsComponent,\r\n ClipperSearchFreeTextHelpComponent, ClipperSearchFreeTextQueryBuilderComponent],\r\n templateUrl: './browser.component.html',\r\n styleUrl: './browser.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ClipperBrowserComponent extends ClipperSearchResultManager implements OnInit, OnDestroy, AfterViewInit {\r\n\r\n\r\n readonly filterByNumber = viewChild<MatInput>('filterByNumber');\r\n readonly filterByText = viewChild<MatInput>('filterByText');\r\n readonly filterByChangeNumber = viewChild<MatInput>('filterByChangeNumber');\r\n readonly filterPane = viewChild.required<MatDrawer>('filterPane');\r\n readonly filterPane2 = viewChild.required<MatDrawer>('filterPane2');\r\n readonly filterSelector = viewChild<ButtonSelectorComponent>('filterSelector');\r\n readonly moduleSelector = viewChild.required<ChipsSelectorComponent>('moduleSelector');\r\n readonly sourceExpansionPanel = viewChild<MatExpansionPanel>('sourceExpansionPanel');\r\n readonly otherOptionsExpansionPanel = viewChild<MatExpansionPanel>('otherOptionsExpansionPanel');\r\n readonly modifierExpansionPanel = viewChild<MatExpansionPanel>('modifierExpansionPanel');\r\n\r\n readonly showChannels = input<boolean>(true);\r\n readonly showRSOptions = input<boolean>(true);\r\n readonly showAIAssistantOptions = input<boolean>(false);\r\n readonly selectableModules = input<ClipperModule[]>([]);\r\n readonly initialModule = input<ClipperModule | undefined>(undefined);\r\n protected scrollDispatcher = inject(ScrollDispatcher);\r\n protected filterDescription = signal<string>('');\r\n protected filters = signal<NameValueItem<ClipperUserSearch>[]>([]);\r\n protected filter: Signal<NameValueItem<ClipperUserSearch> | undefined> = computed(() => {\r\n return this.hasFilters() && this.filterParams.searchId\r\n ? this.filters().find(x => x.value.id === this.filterParams.searchId)\r\n : null\r\n });\r\n protected hasAIAssistant: boolean = this.showAIAssistantOptions() && this.clipperService.loginInfo?.context.hasAIAssistant === true;\r\n protected hasFilters: Signal<boolean> = computed(() => {\r\n return this.filters().length > 0;\r\n });\r\n protected isLaws = (allowEmpty: boolean = true): boolean => {\r\n return (allowEmpty && this.filterParams.modules && this.filterParams.modules.length === 0) || (this.filterParams.modules?.findIndex(x =>\r\n x.value === ClipperModule.GazzetteBollettiniEFontiDiverse ||\r\n x.value === ClipperModule.NormativaVigente ||\r\n x.value === ClipperModule.GiurisprudenzaRecente) !== -1);\r\n }\r\n protected isReadable = (): boolean => {\r\n return ((this.canSearch() && this.filterParams.modules?.length === 0) ||\r\n (this.filterParams.modules && this.filterParams.modules.length > 0 &&\r\n this.filterParams.modules.findIndex(module => module.value === ClipperModule.NormativaVigente\r\n || module.value === ClipperModule.ScadenzeESegnalazioni) === -1)) ?? false;\r\n\r\n }\r\n\r\n protected isCoordination = (): boolean => {\r\n return (this.filterParams.modules && this.filterParams.modules.length > 0 && (this.filterParams.modules?.findIndex(x =>\r\n x.value === ClipperModule.ModificheAbrogazioniERinvii) !== -1)) === true;\r\n }\r\n\r\n protected isSortedByDate = (): boolean => {\r\n return (this.sortMode?.value === ClipperSort.DateAsc ||\r\n this.sortMode?.value === ClipperSort.DateDesc ||\r\n this.sortMode?.value === ClipperSort.SourceDateAsc ||\r\n this.sortMode?.value === ClipperSort.SourceDateDesc);\r\n }\r\n protected canSearch = (): boolean => {\r\n return this.isFiltering(this.filterParams);\r\n };\r\n protected sectors = signal<SectorInfo[]>([]);\r\n protected hasSectors = (): boolean => {\r\n return this.isLaws();\r\n };\r\n protected regions = signal<NameValueItem<string>[]>([]);\r\n protected override hasRegions = (): boolean => {\r\n return this.hasSectors() && (this.filterParams.sectors?.filter(n => n.value === 'LR').length ?? 0) > 0;\r\n };\r\n protected sources = signal<NameValueItem<string>[]>([...ClipperSources]);\r\n protected hasSource = (): boolean => this.isLaws();\r\n protected authors = signal<NameValueItem<string>[]>([]);\r\n protected types = signal<NameValueItem<string>[]>([]);\r\n protected topics: INode[] = [];\r\n protected hasTopics = (): boolean => this.isLaws();\r\n private allowTags: Signal<boolean> = computed(() => {\r\n return this.clipperService.allowTags();\r\n });\r\n protected tags = signal<NameValueItem<string>[]>([]);\r\n protected hasTags = (): boolean => {\r\n return (this.tags()?.length > 0 &&\r\n ((this.filterParams.modules?.length === 0 && (this.hasModule(ClipperModule.News) || this.hasModule(ClipperModule.Approfondimenti))) ||\r\n this.filterParams.modules?.findIndex(module => module.value === ClipperModule.News\r\n || module.value === ClipperModule.Approfondimenti) !== -1)) ?? false;\r\n };\r\n protected reasons = signal<NameValueItem<number>[]>([...ClipperDocumentChangeReasons]);\r\n protected modules = signal<NameValueItem<ClipperModule>[]>(this.getAllModules());\r\n protected interval: DateInterval = new DateInterval();\r\n protected sourceInterval: DateInterval = new DateInterval();\r\n protected user: ClipperUserInfo | undefined = this.clipperService.loginInfo?.context;\r\n ngOnInit(): void {\r\n // Initialize filter\r\n this.filterParams.version = 7;\r\n this.filterParams.modules = [{ name: \"Normativa vigente\", shortName: \"Normativa vigente\", value: ClipperModule.NormativaVigente }];\r\n this.initializeFilter();\r\n\r\n // Initialize selection\r\n this.selection = new SelectableModel<ClipperDocumentInfo, string>(true, 'documentId');\r\n\r\n // Observe layout changes\r\n this.breakpointObserver\r\n .observe([\r\n Breakpoints.XSmall,\r\n Breakpoints.Small,\r\n Breakpoints.Medium,\r\n Breakpoints.Large,\r\n Breakpoints.XLarge,\r\n ])\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(result => {\r\n for (const query of Object.keys(result.breakpoints)) {\r\n if (result.breakpoints[query]) {\r\n this.handleFilterPaneVisibility();\r\n }\r\n }\r\n });\r\n\r\n // React to message broadcasting\r\n this.broadcastService.getMessage()\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(message => {\r\n if (message.id === ClipperMessages.COMMAND_DASHBOARD_UPDATED) {\r\n this.updateModulesUnreadItems();\r\n } else if (message.id === ClipperMessages.COMMAND_SEARCH_RESTORED) {\r\n const filter = this.filter();\r\n if (filter) {\r\n this.selectFilter(filter);\r\n }\r\n this.handleFilterPaneVisibility();\r\n }\r\n });\r\n\r\n // Load tags\r\n if (this.allowTags()) {\r\n this.loadTags();\r\n }\r\n\r\n // Load topics\r\n this.loadTopics();\r\n\r\n // Load searches\r\n this.loadFilters();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n // Handle filter pane \r\n this.handleFilterPaneVisibility();\r\n this.filterPane().openedChange.subscribe(() => {\r\n this.updateFilterPaneFocus();\r\n });\r\n this.updateFilterPaneFocus();\r\n this.updateModulesUnreadItems();\r\n this.modulesChanged();\r\n // Handle facets\r\n if (this.facets()) {\r\n this.facets().changed\r\n .subscribe((value: ClipperSearchFacetsSnapshot) => {\r\n if (this.snapshot) {\r\n this.snapshot.facets = value;\r\n this.fetch(true);\r\n }\r\n });\r\n }\r\n\r\n // Handle initial module\r\n if (this.initialModule()) {\r\n this.moduleSelector()?.select(this.modules().find(x => x.value === this.initialModule()) ?? this.modules()[0]);\r\n } else {\r\n this.moduleSelector()?.select(this.modules()[0]);\r\n }\r\n\r\n }, 0);\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n\r\n override ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n\r\n /**\r\n * Get all available modules\r\n */\r\n private getAllModules(): NameValueItem<ClipperModule>[] {\r\n let modules: NameValueItem<ClipperModule>[] = [];\r\n modules.push({ name: \"News\", shortName: \"News\", value: ClipperModule.News });\r\n modules.push({ name: \"Gazzette, Bollettini e fonti diverse\", shortName: \"Gazzette, Bollettini e fonti diverse\", value: ClipperModule.GazzetteBollettiniEFontiDiverse });\r\n modules.push({ name: \"Modifiche, abrogazioni e rinvii\", shortName: \"Modifiche, abrogazioni e rinvii\", value: ClipperModule.ModificheAbrogazioniERinvii });\r\n modules.push({ name: \"Normativa vigente\", shortName: \"Normativa vigente\", value: ClipperModule.NormativaVigente });\r\n modules.push({ name: \"Giurisprudenza\", shortName: \"Giurisprudenza\", value: ClipperModule.GiurisprudenzaRecente });\r\n modules.push({ name: \"Articoli\", shortName: \"Articoli\", value: ClipperModule.Approfondimenti });\r\n modules.push({ name: \"Note a sentenza\", shortName: \"Note a sentenza\", value: ClipperModule.Giurisprudenza });\r\n modules.push({ name: \"Quesiti\", shortName: \"Quesiti\", value: ClipperModule.QuesitiECasiRisolti });\r\n modules.push({ name: \"Scadenze e segnalazioni\", shortName: \"Scadenze e segnalazioni\", value: ClipperModule.ScadenzeESegnalazioni });\r\n return modules;\r\n }\r\n\r\n /**\r\n * Return the snapshot document by id\r\n * @param id : the document id\r\n * @returns the document or null\r\n */\r\n public getSnapshotDocument(id: string): ClipperDocumentInfo | undefined {\r\n return this.snapshot.items.find(x => x.documentId === id || x.id === id);\r\n }\r\n\r\n\r\n /**\r\n * Load tags\r\n */\r\n protected loadTags() {\r\n this.clipperService.getTags()\r\n .subscribe(r => {\r\n if (r.success) {\r\n this.tags.set(r.value);\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Load topics\r\n */\r\n private loadTopics() {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.clipperService.getTopicsAsTree()\r\n .subscribe(r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n this.topics = SystemUtils.toNodes(r.value.children as INode[]);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show hide filter pane manually\r\n */\r\n protected toggleFilterPane() {\r\n this.filterPaneClosed = !this.filterPaneClosed;\r\n this.filterPane()?.toggle();\r\n }\r\n\r\n /**\r\n * Show hide filter pane manually\r\n */\r\n protected toggleFilterPane2() {\r\n this.filterPane2Closed = !this.filterPane2Closed;\r\n this.filterPane2()?.toggle();\r\n }\r\n\r\n\r\n /**\r\n * Handle filter pane visibility\r\n */\r\n protected handleFilterPaneVisibility() {\r\n const filterPane = this.filterPane();\r\n if (filterPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (filterPane.opened) {\r\n filterPane.close();\r\n }\r\n filterPane.mode = 'over';\r\n filterPane.disableClose = false;\r\n this.filterPaneHasBackdrop = true;\r\n } else {\r\n if (!filterPane.opened && !this.filterPaneClosed) {\r\n filterPane.open();\r\n } else if (filterPane.opened && this.filterPaneClosed) {\r\n filterPane.close();\r\n }\r\n filterPane.mode = 'side';\r\n filterPane.disableClose = true;\r\n this.filterPaneHasBackdrop = false;\r\n }\r\n }\r\n setTimeout(() => {\r\n const filterPane2 = this.filterPane2();\r\n if (filterPane2) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (filterPane2.opened) {\r\n filterPane2.close();\r\n }\r\n filterPane2.mode = 'over';\r\n filterPane2.disableClose = false;\r\n this.filterPane2HasBackdrop = true;\r\n } else {\r\n if (!this.hasFacets()) {\r\n filterPane2.close();\r\n } else if (!filterPane2.opened && !this.filterPane2Closed) {\r\n filterPane2.open();\r\n } else if (filterPane2.opened && this.filterPane2Closed) {\r\n filterPane2.close();\r\n }\r\n filterPane2.mode = 'side';\r\n filterPane2.disableClose = true;\r\n this.filterPane2HasBackdrop = false;\r\n }\r\n }\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Initialize filter\r\n */\r\n private initializeFilter() {\r\n this.filterParams.channels = this.clipperService.activeChannels();\r\n this.channelsChanged(false);\r\n }\r\n\r\n /**\r\n * Update filter when channels changes\r\n * @param updateChannels: true to update channels\r\n */\r\n protected channelsChanged(updateChannels: boolean = true) {\r\n if (updateChannels) {\r\n this.clipperService.updateChannels(this.filterParams.channels);\r\n }\r\n const sectors: SectorInfo[] = [];\r\n const regions: NameValueItem<string>[] = [];\r\n const modules = this.getAllModules();\r\n this.filterParams.channels?.forEach(channel => {\r\n if (channel.value == ClipperChannel.SostanzeAlimentari && this.hasModule(ClipperModule.AllerteAlimentari)) {\r\n modules.push({ name: \"Allerte alimentari\", shortName: \"Allerte alimentari\", value: ClipperModule.AllerteAlimentari });\r\n }\r\n const channelSettings = this.clipperService.loginInfo?.channels?.find(x => x.channelId === channel.value);\r\n if (channelSettings) {\r\n channelSettings.sectors.filter(x => x.checked).forEach(x => {\r\n if (sectors.findIndex(y => y.value === x.value) === -1) {\r\n ClipperSectors.filter(y => y.group === 'S' && y.value === x.value).forEach(y => {\r\n sectors.push(y);\r\n });\r\n }\r\n });\r\n channelSettings.regions.filter(x => x.checked).forEach(x => {\r\n if (regions.findIndex(y => y.value === x.value) === -1) {\r\n ClipperRegions.filter(y => y.value === x.value).forEach(y => {\r\n regions.push(y);\r\n });\r\n }\r\n });\r\n }\r\n });\r\n this.modules.set(modules);\r\n this.sectors.set(sectors);\r\n this.regions.set(regions);\r\n if (this.filterParams.modules) {\r\n this.filterParams.modules = this.filterParams.modules.filter(x => this.modules().findIndex(y => y.value === x.value) !== -1) ?? [];\r\n }\r\n if (this.filterParams.sectors) {\r\n this.filterParams.sectors = this.filterParams.sectors.filter(x => this.sectors().findIndex(y => y.value === x.value) !== -1) ?? [];\r\n }\r\n if (this.filterParams.authors) {\r\n this.filterParams.authors = this.filterParams.authors.filter(x => this.regions().findIndex(y => y.value === x.value) !== -1) ?? [];\r\n }\r\n this.sectorsChanged();\r\n this.updateModulesUnreadItems();\r\n }\r\n\r\n /**\r\n * Update filter pane focus\r\n */\r\n private updateFilterPaneFocus() {\r\n setTimeout(() => {\r\n let focusableElement = this.filterByText();\r\n if (this.isLaws()) {\r\n focusableElement = this.filterByNumber();\r\n }\r\n focusableElement?.focus();\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Load filters\r\n */\r\n protected loadFilters() {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.clipperService.loadSearches(ClipperModule.Ricerca)\r\n .subscribe(\r\n r => {\r\n if (r.success) {\r\n const items: NameValueItem<ClipperUserSearch>[] = [];\r\n r.value.forEach(n => {\r\n items.push({ name: n.name ?? '', value: n });\r\n });\r\n this.filters.set(items);\r\n this.handleFilterPaneVisibility();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Save a filter\r\n * @param newFilter: true to save a new filter. Default is false.\r\n */\r\n saveFilter(newFilter: boolean = false) {\r\n this.loadFilter();\r\n if (newFilter || !this.filterParams.searchId) {\r\n const d = this.dialogService.prompt(\r\n \"Crea un nuovo filtro\",\r\n 0,\r\n \"Nome filtro\");\r\n d.componentInstance.done.subscribe((data) => {\r\n if (data?.value) {\r\n this.clipperService.saveSearch({\r\n module: ClipperModule.Ricerca,\r\n name: data.value,\r\n data: JSON.stringify(this.filterParams)\r\n }).subscribe(r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n const newItem = { name: r.value.name ?? '', value: r.value };\r\n this.filters.update(items => [...items, newItem]);\r\n setTimeout(() => {\r\n this.filterSelector()?.select(newItem);\r\n }, 250);\r\n this.dialogService.toast(\"Operazione completata con successo.\");\r\n d.close();\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n this.clipperService.saveSearch({\r\n id: this.filterParams.searchId,\r\n data: JSON.stringify(this.filterParams)\r\n }).subscribe(r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.filters.update(items => {\r\n const item = items.find(n => n.value.id === r.value.id);\r\n if (item) {\r\n item.value.data = r.value.data;\r\n }\r\n return [...items];\r\n });\r\n this.dialogService.toast(\"Operazione completata con successo.\");\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Delete a filter\r\n */\r\n deleteFilter() {\r\n if (this.filterParams.searchId) {\r\n this.dialogService.confirm(\"Vuoi davvero eliminare il filtro in uso?\", \"Conferma\", \"Si, eliminalo\")\r\n .componentInstance.choosen\r\n .subscribe((data: DialogResult) => {\r\n if (data.result === 'ok') {\r\n if (this.filterParams.searchId) {\r\n this.clipperService.deleteSearch(this.filterParams.searchId)\r\n .subscribe(r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.filters.update(items => {\r\n const p = items.findIndex(x => x.value.id === this.filterParams.searchId);\r\n if (p !== -1) {\r\n items.splice(p, 1);\r\n }\r\n return [...items];\r\n });\r\n this.filterSelector()?.reset();\r\n this.filterParams.searchId = undefined;\r\n this.filterParams.searchName = undefined;\r\n this.dialogService.toast('Operazione completata con successo.');\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Select a filter\r\n */\r\n selectFilter(item: NameValueItem<ClipperUserSearch> | undefined) {\r\n if (item && item.value.data) {\r\n this.filterSelector().select(item, false);\r\n const filter = JSON.parse(item.value.data);\r\n this.filterParams.searchId = item.value.id;\r\n this.filterParams.searchName = item.value.name;\r\n this.filterParams.modules = filter.modules;\r\n setTimeout(() => {\r\n this.filterParams.sectors = filter.sectors;\r\n this.filterParams.authors = filter.authors;\r\n this.filterParams.number = filter.number;\r\n this.filterParams.tags = filter.tags;\r\n this.filterParams.year = filter.year;\r\n if (filter.fromDate && filter.toDate) {\r\n this.interval.from = filter.fromDate;\r\n this.interval.to = filter.toDate;\r\n }\r\n this.filterParams.text = filter.text;\r\n this.filterParams.titleOnly = filter.titleOnly;\r\n this.filterParams.showCommentedDocumentsOnly = filter.showCommentedDocumentsOnly;\r\n this.filterParams.showNotAbrogatedDocumentsOnly = filter.showNotAbrogatedDocumentsOnly;\r\n this.filterParams.expandTextQueryUsingAI = filter.expandTextQueryUsingAI;\r\n this.filterParams.sourceNumber = filter.sourceNumber;\r\n this.filterParams.sourceYear = filter.sourceYear;\r\n if (filter.sourceFromDate && filter.sourceToDate) {\r\n this.sourceInterval.from = filter.sourceFromDate;\r\n this.sourceInterval.to = filter.sourceToDate;\r\n }\r\n this.filterParams.source = filter.source;\r\n this.filterParams.type = filter.type;\r\n this.filterParams.topic = filter.topic;\r\n this.filterParams.topics = filter.topics;\r\n this.filterParams.changeReason = filter.changeReason;\r\n this.filterParams.changedNumber = filter.changedNumber;\r\n this.filterParams.changedTitle = filter.changedTitle;\r\n this.filterParams.changedYear = filter.changedYear;\r\n this.filterParams.modifierNumber = filter.modifierNumber;\r\n this.filterParams.modifierTitle = filter.modifierTitle;\r\n this.filterParams.modifierYear = filter.modifierYear;\r\n // Show expansion panels\r\n if (this.filterParams.sourceNumber != undefined ||\r\n this.filterParams.sourceYear != undefined ||\r\n this.filterParams.source != undefined ||\r\n this.sourceInterval.from != undefined) {\r\n this.sourceExpansionPanel()?.open();\r\n }\r\n if (!this.isCoordination() && this.filterParams.sourceNumber != undefined ||\r\n this.filterParams.author != undefined ||\r\n this.filterParams.type != undefined) {\r\n this.otherOptionsExpansionPanel()?.open();\r\n } else if (this.isCoordination() && this.filterParams.changeReason != undefined) {\r\n this.otherOptionsExpansionPanel()?.open();\r\n }\r\n if (this.isCoordination() &&\r\n this.filterParams.modifierNumber != undefined ||\r\n this.filterParams.modifierYear != undefined ||\r\n this.filterParams.modifierTitle != undefined) {\r\n this.modifierExpansionPanel()?.open();\r\n }\r\n }, 250);\r\n } else {\r\n this.clearFilter();\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Clear current filter params\r\n */\r\n protected clearFilter() {\r\n ClipperSearchUtils.clear(this.filterParams);\r\n const module = this.modules().find(x => x.value === ClipperModule.NormativaVigente);\r\n if (module) {\r\n this.filterParams.modules = [module];\r\n }\r\n this.filterSelector()?.reset();\r\n this.filterParams.searchId = undefined;\r\n this.filterParams.searchName = undefined;\r\n this.interval.clear();\r\n this.sourceInterval.clear();\r\n }\r\n\r\n /**\r\n * Load selected filter\r\n */\r\n private loadFilter() {\r\n if (this.filterParams.year && this.filterParams.year > 0) {\r\n const year = this.filterParams.year;\r\n this.filterParams.fromDate = new Date(year, 0, 1, 2);\r\n this.filterParams.toDate = new Date(year, 11, 31, 2);\r\n } else {\r\n this.filterParams.year = undefined;\r\n }\r\n if (this.interval) {\r\n this.filterParams.fromDate = this.interval.from;\r\n this.filterParams.toDate = this.interval.to;\r\n }\r\n if (this.filterParams.sourceYear && this.filterParams.sourceYear > 0) {\r\n const year = this.filterParams.sourceYear;\r\n this.filterParams.sourceFromDate = new Date(year, 0, 1, 2);\r\n this.filterParams.sourceToDate = new Date(year, 11, 31, 2);\r\n } else {\r\n this.filterParams.sourceYear = undefined;\r\n }\r\n if (this.sourceInterval) {\r\n this.filterParams.sourceFromDate = this.sourceInterval.from;\r\n this.filterParams.sourceToDate = this.sourceInterval.to;\r\n }\r\n if (this.filterParams.text) {\r\n this.filterParams.text = ClipperSearchUtils.normalizeTextQuery(this.filterParams.text);\r\n }\r\n }\r\n\r\n /**\r\n * Apply current filter params\r\n */\r\n protected applyFilter() {\r\n if (this.canSearch()) {\r\n this.facets()?.reset();\r\n this.fetch(true);\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Manage sectors selection changes\r\n */\r\n protected sectorsChanged() {\r\n // Reset authors and types\r\n this.filterParams.authors = [];\r\n this.filterParams.type = undefined;\r\n let authors: NameValueItem<string>[] = [];\r\n const sectors =\r\n (this.filterParams.sectors?.length ?? 0) > 0\r\n ? this.filterParams.sectors\r\n : this.sectors();\r\n ClipperAuthors.forEach(n => {\r\n if (sectors &&\r\n sectors.length > 0 &&\r\n sectors.findIndex(x => x.value === n.sectorId) !== -1) {\r\n authors.push(n);\r\n }\r\n });\r\n if (authors.length == 0) {\r\n ClipperAuthors.forEach(n => {\r\n if (!n.sectorId) {\r\n authors.push(n);\r\n }\r\n });\r\n }\r\n let types: NameValueItem<string>[] = [];\r\n ClipperSectorTypes.forEach(n => {\r\n if (sectors &&\r\n sectors.length > 0 &&\r\n sectors.findIndex(x => x.value === n.parentValue) !== -1) {\r\n types.push(n);\r\n }\r\n });\r\n if (types.length == 0) {\r\n types = [...ClipperSectorTypes];\r\n }\r\n this.authors.set(authors.sort((a, b) => a.name.localeCompare(b.name)));\r\n this.types.set(types);\r\n }\r\n\r\n /**\r\n * Check if any search parameter has been set\r\n * @param params : the search params to check\r\n * @returns true if at least one parameters has been set\r\n */\r\n private isFiltering(params: ClipperSearchParams): boolean {\r\n return (params.sector !== null\r\n || (params.sectors?.length ?? 0) > 0\r\n || params.author !== null\r\n || (params.authors?.length ?? 0) > 0\r\n || params.topic !== null\r\n || (params.topics?.length ?? 0) > 0\r\n || params.taxonomy !== null\r\n || params.taxonomyPath !== null\r\n || params.taxonomyNode !== null\r\n || params.number !== null\r\n || params.fromDate !== null\r\n || params.toDate !== null\r\n || params.year !== null\r\n || params.sourceNumber !== null\r\n || params.source !== null\r\n || params.sourceFromDate !== null\r\n || params.sourceToDate !== null\r\n || params.sourceYear !== null\r\n || params.tag !== null\r\n || (params.tags?.length ?? 0) > 0\r\n || params.text !== null\r\n || params.titleOnly === true\r\n || params.type !== null\r\n || params.showUnreadDocumentsOnly === true\r\n || params.showCommentedDocumentsOnly === true\r\n || params.changeReason !== null\r\n || params.changedNumber !== null\r\n || params.changedYear !== null\r\n || params.changedTitle !== null\r\n || params.modifierNumber !== null\r\n || params.modifierYear !== null\r\n || params.modifierTitle !== null\r\n || params.model !== null\r\n || (params.models?.length ?? 0) > 0\r\n || params.module !== null\r\n || (params.modules?.length ?? 0) > 0\r\n || this.interval.from != null\r\n || this.interval.to != null\r\n || this.sourceInterval.from != null\r\n || this.sourceInterval.to != null);\r\n }\r\n\r\n\r\n /**\r\n * Checkif a single module is selected\r\n * @param module : the module to check\r\n * @returns : true if the specified module is the only one selected\r\n */\r\n private isSingleModule(module: ClipperModule): boolean {\r\n return (this.filterParams.modules?.length === 1 && this.filterParams.modules?.findIndex(x => x.value === module) !== -1);\r\n }\r\n\r\n /**\r\n * Update modules unread items\r\n */\r\n private updateModulesUnreadItems() {\r\n this.modules().forEach(module => {\r\n let totalUnread = 0;\r\n if (module.value === ClipperModule.News) {\r\n totalUnread = this.clipperService.dashboard.getUnreadItems(module.value, ClipperModel.News);\r\n } else if (module.value === ClipperModule.Approfondimenti) {\r\n totalUnread = this.clipperService.dashboard.getUnreadItems(module.value, ClipperModel.Articoli);\r\n } else if (module.value === ClipperModule.Giurisprudenza) {\r\n totalUnread = this.clipperService.dashboard.getUnreadItems(module.value, ClipperModel.Juris);\r\n } else if (module.value === ClipperModule.GiurisprudenzaRecente) {\r\n totalUnread = this.clipperService.dashboard.getUnreadItems(ClipperModule.Giurisprudenza, null);\r\n } else {\r\n totalUnread = this.clipperService.dashboard.getUnreadItems(module.value, null);\r\n }\r\n if (totalUnread > 0) {\r\n module.bag = totalUnread.toString();\r\n module.bagInfo = totalUnread + ' non letti';\r\n } else {\r\n module.bag = undefined;\r\n module.bagInfo = undefined;\r\n }\r\n });\r\n this.modules.update(values => [...values]);\r\n }\r\n\r\n /**\r\n * Checks if a module is supported\r\n * @param module : the module to check\r\n * @returns true if the module is supported\r\n */\r\n private hasModule(module: ClipperModule) {\r\n return (this.selectableModules().length === 0 || this.selectableModules().findIndex(x => x === module) !== -1) &&\r\n this.modules().findIndex(x => x.value === module) !== -1;\r\n }\r\n\r\n /**\r\n * Manage module selection changes \r\n */\r\n protected modulesChanged() {\r\n const hasModules = (this.filterParams.modules?.length ?? 0) > 0;\r\n // Update models\r\n if (!hasModules) {\r\n this.filterParams.models = [];\r\n // Update sectors\r\n this.sectors.set(ClipperSectors.filter(n => n.group === 'S').map(n => {\r\n return { name: n.shortName ?? n.name, value: n.value };\r\n }));\r\n } else {\r\n this.filterParams.models = ClipperSearchUtils.getModulesModels(this.filterParams.modules);\r\n // Update sectors\r\n if (this.isSingleModule(ClipperModule.ScadenzeESegnalazioni)) {\r\n this.sectors.set([]);\r\n } else if (this.isSingleModule(ClipperModule.GiurisprudenzaRecente)) {\r\n this.sectors.set(ClipperSectors.filter(n => n.group === 'S' && n.value[0] === 'G').map(n => {\r\n return { name: n.shortName ?? n.name, value: n.value };\r\n }));\r\n } else if (this.isLaws()) {\r\n this.sectors.set(ClipperSectors.filter(n => n.group === 'S').map(n => {\r\n return { name: n.shortName ?? n.name, value: n.value };\r\n }));\r\n }\r\n }\r\n this.selection?.clear();\r\n this.sectorsChanged();\r\n this.updateFilterPaneFocus();\r\n }\r\n\r\n /**\r\n * Check modules against current selected in filter\r\n * @param modules : the modules to check for\r\n * @param mode : thc check mode: 1) exactly all elements 2) all elements 3) any of the elements specified\r\n * @returns true if the check is successfull\r\n */\r\n private checkModules(modules: ClipperModule[], mode: number = 1): boolean {\r\n const currentModules = this.filterParams.modules;\r\n let ok: boolean = false;\r\n if (mode === 1) {\r\n // All and only the elements specified\r\n currentModules?.forEach(n => {\r\n ok = (modules.findIndex(x => x === n.value) ?? -1) !== -1;\r\n if (!ok) {\r\n return;\r\n }\r\n });\r\n return ok && modules.length >= (currentModules?.length ?? 0);\r\n } else if (mode === 2) {\r\n // All the elements specified\r\n modules.forEach(n => {\r\n ok = (currentModules?.findIndex(x => x.value === n) ?? -1) !== -1;\r\n if (!ok) {\r\n return;\r\n }\r\n });\r\n } else if (mode === 3) {\r\n // Any of the specified elements \r\n modules.forEach(n => {\r\n ok = (currentModules?.findIndex(x => x.value === n) ?? -1) !== -1;\r\n if (ok) {\r\n return;\r\n }\r\n });\r\n }\r\n return ok;\r\n }\r\n\r\n /**\r\n * Prepare the module specific query\r\n * @param newSearch : true if is a new search\r\n * @returns the new search params\r\n */\r\n private prepareFetch(newSearch: boolean = false): ClipperSearchParams {\r\n if (this.interval) {\r\n this.filterParams.fromDate = this.interval.fromAsDate;\r\n this.filterParams.toDate = this.interval.toAsDate;\r\n }\r\n if (this.sourceInterval) {\r\n this.filterParams.sourceFromDate = this.sourceInterval.fromAsDate;\r\n this.filterParams.sourceToDate = this.sourceInterval.toAsDate;\r\n }\r\n if (newSearch) {\r\n this.filterParams.first = 0;\r\n }\r\n let newParams: ClipperSearchParams = new ClipperSearchParams();\r\n if ((this.filterParams.modules?.length ?? 0) > 0) {\r\n newParams.first = this.filterParams.first;\r\n newParams.channels = this.filterParams.channels\r\n newParams.count = this.filterParams.count;\r\n newParams.sortMode = this.filterParams.sortMode;\r\n if (this.isCoordination()) {\r\n newParams.models = [ClipperModel.Coordinamento];\r\n newParams.authors = this.filterParams.authors ?? [];\r\n newParams.sectors = this.filterParams.sectors ?? [];\r\n newParams.fromDate = this.filterParams.fromDate;\r\n newParams.toDate = this.filterParams.toDate;\r\n newParams.changeReason = this.filterParams.changeReason;\r\n newParams.changedNumber = this.filterParams.changedNumber;\r\n newParams.changedYear = this.filterParams.changedYear;\r\n newParams.changedTitle = this.filterParams.changedTitle;\r\n newParams.modifierNumber = this.filterParams.modifierNumber;\r\n newParams.modifierYear = this.filterParams.modifierYear;\r\n newParams.modifierTitle = this.filterParams.modifierTitle;\r\n } else {\r\n newParams.text = this.filterParams.text;\r\n newParams.titleOnly = this.filterParams.titleOnly;\r\n newParams.expandTextQueryUsingAI = this.filterParams.expandTextQueryUsingAI;\r\n newParams.fromDate = this.filterParams.fromDate;\r\n newParams.toDate = this.filterParams.toDate;\r\n newParams.models = ClipperSearchUtils.getModulesModels(this.filterParams.modules);\r\n if (this.checkModules([\r\n ClipperModule.News,\r\n ClipperModule.GazzetteBollettiniEFontiDiverse,\r\n ClipperModule.GiurisprudenzaRecente,\r\n ClipperModule.QuesitiECasiRisolti,\r\n ClipperModule.AllerteAlimentari], 1)) {\r\n newParams.showUnreadDocumentsOnly = this.filterParams.showUnreadDocumentsOnly;\r\n }\r\n if (this.checkModules([\r\n ClipperModule.NormativaVigente,\r\n ClipperModule.GazzetteBollettiniEFontiDiverse,\r\n ClipperModule.GiurisprudenzaRecente], 1)) {\r\n newParams.showCommentedDocumentsOnly = this.filterParams.showCommentedDocumentsOnly;\r\n newParams.showNotAbrogatedDocumentsOnly = this.filterParams.showNotAbrogatedDocumentsOnly;\r\n newParams.sectors = this.filterParams.sectors;\r\n newParams.number = this.filterParams.number;\r\n newParams.year = this.filterParams.year;\r\n newParams.topics = this.filterParams.topics;\r\n newParams.authors = this.filterParams.authors ?? [];\r\n if (newParams.authors.length == 0 && this.filterParams.author) {\r\n newParams.authors = [{ name: '?', value: this.filterParams.author }];\r\n }\r\n newParams.types = this.filterParams.types ?? [];\r\n if (newParams.types.length == 0 && this.filterParams.type) {\r\n newParams.types = [{ name: '?', value: this.filterParams.type }];\r\n }\r\n newParams.source = this.filterParams.source;\r\n newParams.sourceNumber = this.filterParams.sourceNumber;\r\n newParams.sourceYear = this.filterParams.sourceYear;\r\n newParams.sourceFromDate = this.filterParams.sourceFromDate;\r\n newParams.sourceToDate = this.filterParams.sourceToDate;\r\n }\r\n if (this.checkModules([ClipperModule.News], 1)) {\r\n newParams.tags = this.filterParams.tags;\r\n }\r\n }\r\n } else {\r\n newParams = SystemUtils.clone(this.filterParams);\r\n newParams.authors = this.filterParams.authors ?? [];\r\n if (newParams.authors.length == 0 && this.filterParams.author) {\r\n newParams.authors = [{ name: '?', value: this.filterParams.author }];\r\n }\r\n newParams.types = this.filterParams.types ?? [];\r\n if (newParams.types.length == 0 && this.filterParams.type) {\r\n newParams.types = [{ name: '?', value: this.filterParams.type }];\r\n }\r\n }\r\n // Setup sort options\r\n this.sortOptions = ClipperUtils.getClipperAvailableSortOptions(this.filterParams.modules, newParams);\r\n if (newParams.text && newSearch) {\r\n this.sortMode = this.sortOptions[0];\r\n this.changeDetector.markForCheck();\r\n }\r\n if (!this.sortMode || this.sortOptions.findIndex(x => x.value == this.sortMode?.value) === -1) {\r\n this.sortMode = this.sortOptions[0];\r\n }\r\n newParams.sortMode = this.sortMode.value;\r\n // Apply facets\r\n if (this.snapshot?.facets?.fromDate) {\r\n newParams.fromDate = this.snapshot.facets?.fromDate;\r\n newParams.toDate = this.snapshot.facets?.toDate;\r\n newParams.year = this.snapshot.facets?.fromDate.getFullYear();\r\n }\r\n if (this.snapshot?.facets?.sector) {\r\n if (this.snapshot?.facets?.sector) {\r\n const model: ClipperModel = parseInt(this.snapshot.facets?.sector) as ClipperModel;\r\n if (model > 0) {\r\n newParams.models = [model];\r\n } else\r\n newParams.sectors = [{ value: this.snapshot.facets?.sector ?? \"\", name: \"\" }];\r\n } else {\r\n if ((newParams.sectors?.length ?? 0) == 0)\r\n newParams.models = ClipperSearchUtils.getModulesModels(this.filterParams.modules);\r\n }\r\n }\r\n if (this.snapshot?.facets?.type) {\r\n newParams.types = [{ value: this.snapshot.facets.type ?? \"\", name: \"\" }];\r\n }\r\n if (this.snapshot?.facets?.author) {\r\n newParams.authors = [{ value: this.snapshot.facets?.author ?? \"\", name: \"\" }];\r\n }\r\n\r\n newParams.version = 7;\r\n newParams.count = 15;\r\n if (newSearch) {\r\n newParams.first = 0;\r\n }\r\n\r\n // Compute a filter description\r\n this.updateFilterDescription();\r\n\r\n return newParams;\r\n }\r\n\r\n /**\r\n * Update filter description\r\n */\r\n private updateFilterDescription() {\r\n let filterDescription = \"\";\r\n this.filterParams.modules?.forEach((n, i) => {\r\n if (i > 0) filterDescription += \", \";\r\n filterDescription += n.shortName;\r\n });\r\n if ((this.filterParams.sectors?.length ?? 0) > 0) {\r\n filterDescription += \" > \";\r\n this.filterParams.sectors?.forEach((n, i) => {\r\n if (i > 0) filterDescription += \", \";\r\n filterDescription += n.name;\r\n });\r\n }\r\n if ((this.filterParams.authors?.length ?? 0) > 0) {\r\n filterDescription += \" > \";\r\n this.filterParams.authors?.forEach((n, i) => {\r\n if (i > 0) filterDescription += \", \";\r\n filterDescription += n.name;\r\n });\r\n }\r\n this.filterDescription.set(filterDescription);\r\n }\r\n\r\n /**\r\n * Get facets\r\n * @param params: the clipper search params\r\n */\r\n protected fetchFacets(params: ClipperSearchParams) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.filterBusy.set(true);\r\n this.clipperService.queryFacets(params)\r\n .subscribe({\r\n next: r => {\r\n if (r.success) {\r\n let hasFacets = (r.value.facets?.length ?? 0) > 0;\r\n if (r.value.facets) {\r\n this.facets()?.update(r.value.facets, r.value.interval);\r\n if (this.facets && this.snapshot) {\r\n hasFacets = this.facets().hasFacets();\r\n this.snapshot.facets = this.facets().save();\r\n this.snapshot.facets.hasTooManyResults = (this.snapshot?.total ?? 0) >= 1000;\r\n }\r\n }\r\n this.hasFacets.set(hasFacets);\r\n this.handleFilterPaneVisibility();\r\n }\r\n },\r\n complete: () => {\r\n this.filterBusy.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Hide facets\r\n */\r\n protected hideFacets() {\r\n this.hasFacets.set(false);\r\n this.facets()?.reset();\r\n this.filterPane2().close();\r\n this.filterPane2Closed = false;\r\n }\r\n\r\n /**\r\n * Fetch data\r\n * @param newSearch true if is a new search\r\n */\r\n protected fetch(newSearch: boolean = false) {\r\n const searchParams = this.prepareFetch(newSearch);\r\n this.dialogService.busy('Ricerca in corso...');\r\n this.clipperService.query(searchParams)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n // Handle data\r\n this.prepareResults(r.value, newSearch);\r\n // Handle facets\r\n if (this.snapshot?.total ?? 0 > 0) {\r\n if (newSearch) {\r\n this.fetchFacets(searchParams);\r\n }\r\n } else {\r\n this.hideFacets();\r\n }\r\n\r\n if (newSearch) {\r\n if (this.paginator()) {\r\n this.paginator().pageIndex = 0;\r\n }\r\n this.filterParams.augmentedText = r.value.terms?.join(\"__TERM__\");\r\n }\r\n\r\n this.scroll(0);\r\n this.handleFilterPaneVisibility();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show a new page result\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n protected fetchMore(e: PageEvent) {\r\n let first = e.pageIndex * (this.filterParams.count ?? 15);\r\n this.filterParams.first = first;\r\n this.fetch();\r\n }\r\n\r\n\r\n /**\r\n * Change sort\r\n * @param new sort: the new sort value\r\n */\r\n protected sort(newSort?: NameValueItem<any>) {\r\n if (newSort) {\r\n this.sortMode = newSort;\r\n this.fetch();\r\n }\r\n }\r\n\r\n /**\r\n* Show free text help\r\n*/\r\n protected help() {\r\n this.dialogService.open(ClipperSearchFreeTextHelpComponent, {\r\n ariaLabel: 'informazioni ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '800px',\r\n width: '99%',\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Compose a free text search query\r\n */\r\n protected compose() {\r\n let d = this.dialogService.open(ClipperSearchFreeTextQueryBuilderComponent, {\r\n ariaLabel: 'costruisci ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '500px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done.subscribe((result: SearchFreeTextQueryParams) => {\r\n this.filterParams.text = result.query;\r\n this.changeDetector.markForCheck();\r\n d.close();\r\n });\r\n }\r\n\r\n /**\r\n * Add a topic\r\n */\r\n protected addTopic() {\r\n this.dialogService\r\n .selectTree(\r\n this.topics,\r\n 'Seleziona un argomento',\r\n undefined,\r\n (this.filterParams.topics && this.filterParams.topics.length > 0)\r\n ? this.filterParams.topics[this.filterParams.topics.length - 1].name\r\n : undefined\r\n )\r\n .componentInstance.done.subscribe(r => {\r\n if (!this.filterParams.topics) {\r\n this.filterParams.topics = [];\r\n }\r\n r.selectedItems.forEach(item => {\r\n this.filterParams.topics?.push({ name: item.bag.name, value: item.bag.id });\r\n this.changeDetector.markForCheck();\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Remove a topic\r\n */\r\n protected deleteTopic(item: NameValueItem<string>) {\r\n const p = this.filterParams.topics?.findIndex(x => x.value === item.value) ?? -1;\r\n if (p !== -1) {\r\n this.filterParams.topics?.splice(p, 1);\r\n this.changeDetector.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * Clear all topics\r\n */\r\n protected clearTopics() {\r\n this.filterParams.topics = []\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n}\r\n\r\n\r\n","<mat-drawer-container [hasBackdrop]=\"filterPaneHasBackdrop\" class=\"fill\">\r\n <mat-drawer #filterPane class=\"drawer\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"78px\" class=\"title-container\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"title\">Filtro</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"saveFilter(true)\"\r\n matTooltip=\"Crea una nuovo filtro con i parametri attuali \"><mat-icon>add</mat-icon></button>\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>left_panel_close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n @if(hasFilters()) {\r\n <div style=\"padding:10px 20px\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\">\r\n <button-selector #filterSelector [options]=\"filters()\" label=\"Seleziona un filtro salvato\"\r\n labelSelected=\"Filtro in uso:\" fxFlexAlign=\"center\" (selected)=\"selectFilter($event)\"\r\n [matTooltip]=\"filterParams.searchName ?? ''\"></button-selector>\r\n </div>\r\n @if(filterParams.searchId) {\r\n <div fxFlex=\"40px\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"deleteFilter()\"\r\n matTooltip=\"Elimina il filtro in uso\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <div fxFlex=\"*\" class=\"content scroll-hidden\" style=\"padding-bottom: 10px;\">\r\n <div class=\"scroll-auto\" style=\"padding: 0 10px;\">\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"applyFilter()\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Cerca in..\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n\r\n <chips-selector #moduleSelector [(ngModel)]=\"filterParams.modules\" [collapseAt]=\"599\" [multiple]=\"true\"\r\n label=\"Sezioni\" name=\"modules\" [options]=\"modules()\" (changed)=\"modulesChanged()\">\r\n </chips-selector>\r\n </mat-expansion-panel>\r\n\r\n @if((hasTags() || hasTopics()) && !isCoordination()) {\r\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Argomenti\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n @if(hasTags()) {\r\n <chips-selector [collapseAt]=\"599\" [(ngModel)]=\"filterParams.tags\" [multiple]=\"true\" name=\"tags\"\r\n label=\"Argomenti\" [options]=\"tags()\"></chips-selector>\r\n }\r\n @if(hasTopics()) {\r\n @if ((filterParams.topics?.length ?? 0) > 0) {\r\n <mat-chip-grid #topics [(ngModel)]=\"filterParams.topics\" name=\"topics\" style=\"padding-bottom: 5px;\">\r\n @for (o of filterParams.topics; track $index) {\r\n <mat-chip-row [value]=\"o\" (removed)=\"deleteTopic(o)\">\r\n {{o.name}}\r\n <button matChipRemove>\r\n <mat-icon>cancel</mat-icon>\r\n </button></mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input style=\"display: none;\" [matChipInputFor]=\"topics\" />\r\n }\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\">\r\n <button mat-button type=\"button\" (click)=\"addTopic()\"><mat-icon>add</mat-icon> Aggiungi\r\n argomento</button>\r\n @if ((filterParams.topics?.length ?? 0) > 0) {\r\n <button mat-button type=\"button\" (click)=\"clearTopics()\"><mat-icon>delete</mat-icon> Azzera</button>\r\n }\r\n </div>\r\n }\r\n </mat-expansion-panel>\r\n }\r\n @if(hasSectors()) {\r\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [collapseAt]=\"599\" [(ngModel)]=\"filterParams.sectors\" [multiple]=\"true\" name=\"sectors\"\r\n label=\"Settori\" [options]=\"sectors()\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector [(ngModel)]=\"filterParams.authors\" [multiple]=\"true\" name=\"authors\" mode=\"collapsed\"\r\n label=\"Tutte le regioni\" [options]=\"regions()\" />\r\n }\r\n </mat-expansion-panel>\r\n }\r\n @if(!isCoordination()) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"49\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"filterParams.number\" name=\"number\"\r\n #filterByNumber=\"matInput\" />\r\n @if (filterParams.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"39\" fxFlex.xs=\"49\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"filterParams.year\"\r\n name=\"year\" />\r\n @if (filterParams.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\"\r\n #rangeFrom1=\"ngModel\" name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"filterParams.text\" name=\"text\"\r\n #filterByText=\"matInput\" />\r\n @if (filterParams.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\"\r\n aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"filterPaneOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n @if(filterParams.text) {\r\n <div style=\"padding-bottom:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"filterParams.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(hasAIAssistant) {\r\n <div style=\"padding-bottom:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"filterParams.expandTextQueryUsingAI\" name=\"expandTextQueryUsingAI\">\r\n <div>Usa <mat-icon style=\"height:20px; width:20px; font-size:22px\">borg</mat-icon> Assistente IA\r\n per potenziare la ricerca</div>\r\n </mat-slide-toggle>\r\n </div>\r\n }\r\n }\r\n @if(isLaws(false)) {\r\n <div style=\"padding-bottom:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"filterParams.showNotAbrogatedDocumentsOnly\"\r\n name=\"showNotAbrogatedDocumentsOnly\">Mostra solo elementi non abrogati</mat-slide-toggle>\r\n </div>\r\n <div style=\"padding-bottom:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"filterParams.showCommentedDocumentsOnly\"\r\n name=\"showCommentedDocumentsOnly\">Mostra solo elementi con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n @if(isReadable()) {\r\n <div style=\"padding-bottom:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"filterParams.showUnreadDocumentsOnly\"\r\n name=\"showUnreadDocumentsOnly\">Mostra solo elementi non letti</mat-slide-toggle>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws(false)) {\r\n <mat-expansion-panel #sourceExpansionPanel class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"filterParams.sourceNumber\" name=\"sourceNumber\" />\r\n @if (filterParams.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"filterParams.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (filterParams.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\"\r\n [end]=\"true\" #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"filterParams.source\" name=\"source\">\r\n @for (s of sources(); track $index) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #otherOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(authors().length > 0 && !hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"filterParams.author\" name=\"author\">\r\n @for (a of authors(); track $index) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"filterParams.type\" name=\"type\">\r\n @for (t of types(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n </mat-expansion-panel>\r\n }\r\n } @else {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Periodo\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <mat-form-field style=\"width:100%\">\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\"\r\n #rangeFrom1=\"ngModel\" name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n @if(isReadable()) {\r\n <div style=\"padding-bottom:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"filterParams.showUnreadDocumentsOnly\"\r\n name=\"showUnreadDocumentsOnly\">Mostra solo elementi non letti</mat-slide-toggle>\r\n </div>\r\n }\r\n </mat-expansion-panel>\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"filterParams.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (filterParams.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"filterParams.changedYear\"\r\n name=\"changedYear\" />\r\n @if (filterParams.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"filterParams.changedTitle\" name=\"changedTitle\" />\r\n @if (filterParams.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #modifierOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"filterParams.modifierNumber\" name=\"modifierNumber\" />\r\n @if (filterParams.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"filterParams.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (filterParams.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"filterParams.modifierTitle\" name=\"modifierTitle\" />\r\n @if (filterParams.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #otherOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"filterParams.changeReason\" name=\"changeReason\">\r\n @for (r of reasons(); track $index) {\r\n <mat-option [value]=\"r.value\" [matTooltip]=\"r.name\">\r\n {{r.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n </div>\r\n </div>\r\n @if(showChannels()) {\r\n <div style=\"padding:10px\">\r\n <div fxLayout=\"column\">\r\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0\" style=\"margin-bottom: 10px;\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Canali\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n @for (c of clipperService.availableChannels(); track $index) {\r\n <div class=\"channel-box\" [class.channel-disabled]=\"!c.active || c.disabled\" [matTooltip]=\"c.name\">\r\n <span class=\"label\">{{c.header}}</span>\r\n </div>\r\n }\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <chips-selector [collapseAt]=\"599\" [(ngModel)]=\"filterParams.channels\" [multiple]=\"true\" name=\"channels\"\r\n label=\"Canali\" [options]=\"clipperService.availableChannels()\"\r\n (changed)=\"channelsChanged()\"></chips-selector>\r\n\r\n </mat-expansion-panel>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"end\">\r\n <button mat-stroked-button (click)=\"clearFilter()\">Pulisci</button>\r\n <button mat-stroked-button (click)=\"saveFilter()\" style=\"margin-left: 10px;\">Salva</button>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"end\" mat-flat-button (click)=\"applyFilter()\"\r\n [disabled]=\"!canSearch()\">Applica</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxLayoutGap=\"10px\" fxFill class=\"drawer-content scroll-hidden\">\r\n <div class=\"module-toolbar \">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <div fxFlex=\"49\" fxFlex.lt-md=\"100\" style=\"padding-left: 10px; padding-bottom: 5px;\">\r\n @if(!filterPane.opened) {\r\n <button-toggle cssClass=\"small\" cssClassSmall=\"x-small\" iconOn=\"left_panel_close\" iconOff=\"tune\"\r\n labelOn=\"Nascondi<br>filtri\" labelOff=\"Mostra<br>filtri\" [value]=\"filterPane.opened\"\r\n (changed)=\"toggleFilterPane()\"></button-toggle>\r\n }\r\n </div>\r\n <div fxFlex=\"49\" fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\">\r\n <div fxLayout=\"row\" style=\"height:48px; padding-bottom: 5px;\">\r\n @if((snapshot?.total ?? 0) > 0) {\r\n @if(sortOptions && sortOptions.length > 0) {\r\n <button-selector [options]=\"sortOptions\" label=\"Ordina per:\" style=\"margin-right: 5px;\" [border]=\"0\"\r\n fxFlexAlign=\"center\" [(ngModel)]=\"sortMode\" name=\"sortMode\" (selected)=\"sort($event)\"></button-selector>\r\n }\r\n <button fxFlexAlign=\"center\" mat-icon-button matSuffix matTooltip=\"Opzioni sulla selezione\"\r\n aria-label=\"Opzioni sulla selezione\" [matMenuTriggerFor]=\"selectionOptionsMenu\"\r\n [matBadge]=\"countSelections()\"><mat-icon>checklist</mat-icon></button>\r\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Salva elenco in Excel \"\r\n (click)=\"exportResults()\"><mat-icon>save_alt</mat-icon></button>\r\n @if (!filterPane2?.opened && hasFacets()){\r\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Affina ricerca\"\r\n (click)=\"toggleFilterPane2()\"><mat-icon>right_panel_open</mat-icon></button>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"module-content\">\r\n <mat-drawer-container [hasBackdrop]=\"filterPane2HasBackdrop\" class=\"fill\">\r\n <mat-drawer #filterPane2 class=\"drawer-small drawer-with-loader\" position=\"end\" opened=\"false\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"78px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-icon-button (click)=\"toggleFilterPane2()\"\r\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"content scroll-hidden\" style=\"padding: 0 5px;\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" cdkScrollable class=\"scroll-auto\" style=\"padding: 0 20px;\">\r\n @if (!snapshot?.total) {\r\n <div class=\"message-container\">\r\n @if(snapshot?.total === 0) {\r\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\r\n } @else {\r\n <div class=\"message\">\r\n <p fxHide.xs><b>Esegui una ricerca compilando i campi necessari nella maschera di ricarca qui a\r\n fianco.</b></p>\r\n <p fxHide.gt-xs><b>Fai click sul bottone <span class=\"accent\"><mat-icon>tune</mat-icon></span> ed esegui\r\n una\r\n ricerca compilando i campi necessari.</b></p>\r\n <p>E' possibile salvare i parametri delle le ricerche più utilizzate facendo clic su &nbsp;\r\n <mat-icon\r\n style=\"display: inline-flex; border-radius: 9999px; height: 25px; width: 25px; color: var(--ars-color-text-low); background-color: var(--ars-color-accent);\">add</mat-icon>.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n @if (snapshot && (snapshot.total ?? 0) > 0) {\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group && isSortedByDate()) {\r\n <div class=\"items-group-title\">\r\n <div [class.group-spaced]=\"i > 0\">{{item.group}}</div>\r\n </div>\r\n }\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\" [displayModelName]=\"true\" [actions]=\"contextMenu\"\r\n [isReadable]=\"true\"></clipper-search-result-item>\r\n }\r\n }\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <!-- legend -->\r\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\r\n <div class=\"legend unread-bg\"></div>\r\n non letto\r\n <!--<div class=\"legend next very-popular-bg\"></div>\r\n molto citato\r\n <div class=\"legend next popular-bg\"></div>\r\n citato-->\r\n <div class=\"legend next expired-bg \"></div>\r\n non più vigente\r\n </div>\r\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [class.wide]=\"filterPane2?.opened\">\r\n <div fxLayout=\"row\">\r\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\r\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count\" [showFirstLastButtons]=\"true\"\r\n (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n </div>\r\n </div>\r\n</mat-drawer-container>\r\n<mat-menu #filterPaneOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>\r\n<mat-menu #selectionOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"selectAll()\">\r\n <mat-icon>select_all</mat-icon>Seleziona tutti\r\n </button>\r\n <clipper-document-menu [parent]=\"this\" [useSelections]=\"true\" [isReadable]=\"true\" [canUseArchive]=\"false\"\r\n [canUseCalendar]=\"false\" [canUseAIAssistant]=\"hasAIAssistant\" [canUseRS]=\"showRSOptions()\">\r\n </clipper-document-menu>\r\n</mat-menu>\r\n<mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"true\" [canUseArchive]=\"false\"\r\n [canUseCalendar]=\"false\" [canUseAIAssistant]=\"hasAIAssistant\" [canUseRS]=\"showRSOptions()\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n</mat-menu>","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnInit, viewChild } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogClose, MatDialogContent, MatDialogRef } from '@angular/material/dialog';\r\nimport { ClipperMessages, ClipperModule, ClipperSelectionMode, ClipperService, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { BroadcastService, SystemUtils, ThemeType } from '@arsedizioni/ars-utils/core';\r\nimport { ClipperBrowserComponent } from '../browser.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\nexport interface ClipperBrowserDialogData {\r\n showChannels?: boolean;\r\n selectionMode?: ClipperSelectionMode;\r\n selectableModules?: ClipperModule[];\r\n selectionMessage?: string;\r\n initialModule?: number;\r\n theme?: ThemeType;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './browser-dialog.component.html',\r\n styleUrls: ['./browser-dialog.component.scss'],\r\n imports: [MatDialogClose, MatDialogContent, MatButtonModule, MatBadgeModule, MatIconModule, FlexLayoutModule, ClipperBrowserComponent],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ClipperBrowserDialogComponent implements OnInit, AfterViewInit {\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n readonly clipperBrowser = viewChild.required<ClipperBrowserComponent>('clipperBrowser');\r\n protected clipperService = inject(ClipperService);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n protected dialogData: ClipperBrowserDialogData = inject(MAT_DIALOG_DATA);\r\n private dialogRef = inject(MatDialogRef<ClipperBrowserDialogComponent>);\r\n private broadcastService = inject(BroadcastService);\r\n\r\n\r\n ngOnInit(): void {\r\n this.broadcastService.getMessage()\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(message => {\r\n if (message.id === ClipperMessages.DOCUMENT_SELECTED_INNER) {\r\n const document = this.clipperBrowser().getSnapshotDocument(message.data.documentId || message.data.id);\r\n if (document) {\r\n this.broadcastService.sendMessage(\r\n this.dialogData.selectionMessage ?? ClipperMessages.DOCUMENT_SELECTED, [document]);\r\n this.changeDetector.markForCheck();\r\n this.dialogRef.close();\r\n }\r\n }\r\n });\r\n }\r\n\r\nngAfterViewInit(): void {\r\n this.clipperBrowser().selectionMode.set(this.dialogData.selectionMode);\r\n}\r\n\r\n /**\r\n * Checks if documents can be selected and returned as message\r\n */\r\n protected canSelect(): boolean {\r\n const selection = this.clipperBrowser().selection;\r\n let allow =\r\n selection &&\r\n ((this.dialogData.selectionMode === ClipperSelectionMode.Single &&\r\n selection.all.length === 1) ||\r\n (this.dialogData.selectionMode === ClipperSelectionMode.TwoOrMore &&\r\n selection.all.length > 1) ||\r\n (this.dialogData.selectionMode === ClipperSelectionMode.Multi &&\r\n selection.all.length > 0));\r\n if (allow && (this.dialogData.selectableModules?.length ?? 0) > 0) {\r\n selection?.all.forEach(n => {\r\n const module = ClipperUtils.getClipperModuleFromModel(n);\r\n if (this.dialogData.selectableModules?.findIndex(x => x === module) === -1) {\r\n allow = false;\r\n return;\r\n }\r\n });\r\n }\r\n return allow === true;\r\n\r\n }\r\n\r\n /**\r\n * Send a message with current selection and close dialog\r\n */\r\n protected select() {\r\n const selection = this.clipperBrowser().selection;\r\n if (selection?.all && selection?.all.length > 0) {\r\n this.broadcastService.sendMessage(\r\n this.dialogData.selectionMessage ?? ClipperMessages.DOCUMENT_SELECTED,\r\n selection?.all\r\n );\r\n this.changeDetector.markForCheck();\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n}\r\n","<div style=\"padding:10px 0 10px 0\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"dialog-title\">\r\n <a href=\"https://clipper.arsedizioni.it\" matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">\r\n <div class=\"clipper-logo\"></div>\r\n </a>\r\n </div>\r\n <div fxFlex=\"*\"></div>\r\n @if ((dialogData.selectionMode ?? 0) > 0 && canSelect()) {\r\n <div fxFlexAlign=\"center\" fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\">\r\n <span class=\"small bold\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"select()\"\r\n matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\" class=\"clipper-selection-icon-button\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlexAlign=\"center\" class=\"dialog-close\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" fxLayoutGap=\"5px\">\r\n @if (clipperService.bag.length > 0) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Documenti di lavoro\"\r\n aria-label=\"'Documenti di lavoro'\" (click)=\"clipperBrowser.openBag()\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"clipperService.bag.length\"\r\n >work_outline</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" mat-icon-button matTooltip=\"Chiudi\" [mat-dialog-close]=\"true\" aria-label=\"Chiudi\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content style=\"padding: 0\">\r\n <clipper-browser #clipperBrowser class=\"wide fill\" [showChannels]=\"dialogData.showChannels ?? true\"\r\n [selectableModules]=\"dialogData.selectableModules ?? []\"\r\n [initialModule]=\"dialogData.initialModule\" [showRSOptions]=\"false\" [showAIAssistantOptions]=\"false\"></clipper-browser>\r\n</mat-dialog-content>","/*\r\n * Public API Surface of ars-utils\r\n */\r\n\r\n\r\nexport * from './ui/references/references.component';\r\nexport * from './ui/browser/browser.component';\r\nexport * from './ui/browser/browser-dialog/browser-dialog.component';\r\nexport * from './ui/search-facets/search-facets.component';\r\nexport * from './ui/search-free-text-help/search-free-text-help.component';\r\nexport * from './ui/search-free-text-query-builder/search-free-text-query-builder.component';\r\nexport * from './ui/search-result-item/search-result-item.component';\r\nexport * from './ui/search-calendar/search-calendar.component';\r\nexport * from './ui/search-result-manager/search-result-manager';\r\nexport * from './ui/document/document.component';\r\nexport * from './ui/document-index/document-index.component';\r\nexport * from './ui/document-menu/document-menu.component';\r\nexport * from './documents';\r\nexport * from './ui/document-manager/document-manager';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i4","i2","i3","i5","takeUntil","FlexModule","i6","finalize","i8","i9","i11","i1","i7","i10","i12","i13","i17","i18"],"mappings":"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"}