@arsedizioni/ars-utils 22.7.5 → 22.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +18 -15
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/{arsedizioni-ars-utils-clipper.ui-document.component-BKjGXtXa.mjs → arsedizioni-ars-utils-clipper.ui-document.component-vI7C4i2r.mjs} +29 -14
- package/fesm2022/arsedizioni-ars-utils-clipper.ui-document.component-vI7C4i2r.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-clipper.ui-document.component-xjm4mdUv.mjs +1593 -0
- package/fesm2022/arsedizioni-ars-utils-clipper.ui-document.component-xjm4mdUv.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-clipper.ui-references.component-CBuJnNIf.mjs +806 -0
- package/fesm2022/arsedizioni-ars-utils-clipper.ui-references.component-CBuJnNIf.mjs.map +1 -0
- package/fesm2022/{arsedizioni-ars-utils-clipper.ui-references.component-CEA_wJTS.mjs → arsedizioni-ars-utils-clipper.ui-references.component-DYojmfsw.mjs} +4 -4
- package/fesm2022/{arsedizioni-ars-utils-clipper.ui-references.component-CEA_wJTS.mjs.map → arsedizioni-ars-utils-clipper.ui-references.component-DYojmfsw.mjs.map} +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +359 -77
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.date.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-core.mjs +48 -48
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +42 -42
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +15 -15
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +18 -18
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +15 -15
- package/fesm2022/arsedizioni-ars-utils-ui.files.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.help.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +61 -61
- package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs +9 -9
- package/package.json +1 -1
- package/types/arsedizioni-ars-utils-clipper.common.d.ts +34 -0
- package/types/arsedizioni-ars-utils-clipper.common.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +108 -3
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-core.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-core.date.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-core.markdown.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-core.validators.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-evolution.common.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-support.common.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.controls.d.ts +1 -1
- package/types/arsedizioni-ars-utils-ui.controls.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.controls.date.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.controls.tree.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.dialogs.auth.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.dialogs.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.dialogs.prompt.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.dialogs.select.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.files.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.filters.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.help.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.navigation.d.ts +1 -1
- package/types/arsedizioni-ars-utils-ui.navigation.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.notifications.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.oauth.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.paginator.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.shell.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils-ui.tinymce.d.ts.map +1 -0
- package/types/arsedizioni-ars-utils.d.ts.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-clipper.ui-document.component-BKjGXtXa.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-clipper.ui-references.component-CBuJnNIf.mjs","names":[],"sources":["../../../projects/ars-utils/clipper.ui/references/references.component.ts","../../../projects/ars-utils/clipper.ui/references/references.component.html"],"sourcesContent":["import { Breakpoints } from '@angular/cdk/layout';\nimport { ChangeDetectionStrategy, Component, afterNextRender, inject, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ClipperDocumentInfo, ClipperQueryReferencesMode, ClipperReferencesSearchParams, ClipperSearchFacetsResult, ClipperSearchFacetsSnapshot, ClipperSearchParams, ClipperUserInfo } from '@arsedizioni/ars-utils/clipper.common';\nimport { ApiResult, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { finalize } from 'rxjs/operators';\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\n\n\nexport interface ClipperReferencesDialogData {\n mode?: ClipperQueryReferencesMode;\n anchor?: string;\n anchorTitle?: string;\n documentId: string;\n model: number;\n canHandleTooManyResults?: boolean;\n}\n\nexport interface ClipperReferenceDialogResult {\n documentId: string;\n}\n\n@Component({\n host: { 'Bind': SystemUtils.generateUUID() },\n templateUrl: './references.component.html',\n styleUrls: ['./references.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FlexLayoutModule,\n MatDialogTitle,\n MatButtonModule,\n MatTooltipModule,\n MatIconModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n MatMenuModule,\n MatBadgeModule,\n MatPaginatorModule,\n MatDialogContent,\n MatSidenavModule,\n MatProgressBarModule,\n ClipperDocumentMenuComponent,\n ClipperSearchFacetsComponent,\n ClipperSearchResultItemComponent,\n ],\n})\nexport class ClipperReferencesComponent extends ClipperSearchResultManager {\n readonly filterPane = viewChild<MatDrawer>('filterPane');\n\n private readonly dialogRef = inject(MatDialogRef<ClipperReferencesComponent>);\n protected readonly dialogData: ClipperReferencesDialogData = inject(MAT_DIALOG_DATA) ?? { mode: ClipperQueryReferencesMode.ReferencesIn };\n protected title?: string;\n protected item?: ClipperDocumentInfo;\n protected readonly user: ClipperUserInfo | undefined = this.clipperService.user;\n private _viewReady = false;\n\n constructor() {\n super();\n if (this.dialogData) {\n switch (this.dialogData.mode) {\n case ClipperQueryReferencesMode.ReferencesIn:\n this.title = \"Documenti richiamati nelle note o nel testo\";\n break;\n case ClipperQueryReferencesMode.ReferencesOut:\n this.title = \"Documenti che richiamano quello in visione\";\n break;\n case ClipperQueryReferencesMode.ChangesIn:\n this.title = \"Modifiche subite\";\n break;\n case ClipperQueryReferencesMode.ChangesOut:\n this.title = \"Modifiche apportate\";\n break;\n case ClipperQueryReferencesMode.Juris:\n this.title = \"Giurisprudenza associata\";\n break;\n }\n if (this.dialogData.anchorTitle) {\n this.title += \" - \" + this.dialogData.anchorTitle;\n }\n // Use service snapshot\n this.snapshot = this.clipperService.referencesSnapshot() ?? { searchParams: new ClipperSearchParams(), interval: \"-1\" };\n if (\n this.filterParams.mode !== this.dialogData.mode ||\n this.filterParams.id !== this.dialogData.documentId ||\n this.filterParams.anchor !== this.dialogData.anchor\n ) {\n this.filterParams = new ClipperSearchParams();\n this.filterParams.mode = this.dialogData.mode;\n this.filterParams.model = this.dialogData.model;\n this.filterParams.anchor = this.dialogData.anchor;\n this.filterParams.id = this.dialogData.documentId;\n this.filterParams.useModifierInfo = this.dialogData.mode === ClipperQueryReferencesMode.ChangesOut;\n this.filterParams.returnModifierInfo = this.dialogData.mode !== ClipperQueryReferencesMode.ChangesOut;\n this.clipperService.referencesSnapshot.set(this.snapshot);\n }\n }\n\n // Initialize selection\n this.selection = new SelectableModel<ClipperDocumentInfo, string>(true, 'documentId');\n\n // Observe layout changes\n this.breakpointObserver\n .observe([\n Breakpoints.XSmall,\n Breakpoints.Small,\n Breakpoints.Medium,\n Breakpoints.Large,\n Breakpoints.XLarge,\n ])\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((result: any) => {\n if (!this._viewReady) return; // DOM not ready yet\n for (const query of Object.keys(result.breakpoints)) {\n if (result.breakpoints[query]) {\n this.handleFilterPaneVisibility();\n }\n }\n });\n\n // Run view-dependent initialization after the first render.\n afterNextRender(() => {\n this._viewReady = true;\n this.handleFilterPaneVisibility();\n const filterPane = this.filterPane();\n if (filterPane) {\n filterPane.openedChange\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(opened => {\n if (filterPane.mode === 'over') {\n this.filterPaneHasBackdrop.set(opened);\n }\n });\n }\n const facets = this.facets();\n if (facets) {\n facets.changed\n .subscribe((value: ClipperSearchFacetsSnapshot) => {\n this.snapshot.facets = value;\n this.fetch(true);\n });\n }\n this.fetch(true);\n this.restoreFacets();\n this.changeDetector.markForCheck();\n });\n }\n\n\n /**\n * Toggles the filter pane open/closed state.\n */\n protected toggleFilterPane(): void {\n this.filterPaneClosed.set(!this.filterPaneClosed());\n this.filterPane()?.toggle();\n }\n\n\n\n /**\n * Adjusts the filter pane mode (side vs. overlay) and backdrop based on the current breakpoint.\n */\n private handleFilterPaneVisibility(): void {\n const filterPane = this.filterPane();\n if (filterPane) {\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\n if (filterPane.opened) {\n filterPane.close();\n }\n filterPane.mode = 'over';\n filterPane.disableClose = false;\n this.filterPaneHasBackdrop.set(filterPane.opened);\n } else {\n if (!this.hasFacets()) {\n filterPane.close();\n } else if (!filterPane.opened && !this.filterPaneClosed()) {\n filterPane.open();\n } else if (filterPane.opened && this.filterPaneClosed()) {\n filterPane.close();\n }\n filterPane.mode = 'side';\n filterPane.disableClose = true;\n this.filterPaneHasBackdrop.set(false);\n }\n }\n }\n\n\n /**\n * Closes the references dialog without returning a result.\n */\n close(): void {\n this.dialogRef.close();\n }\n\n\n\n /**\n * Sends document links by email for the given item or, when omitted, for all selected items.\n * @param item - The specific document to send, or `undefined` to use the current selection.\n */\n sendTo(item?: ClipperDocumentInfo): void {\n this.sendItemsTo(item ? [item] : this.selection?.all);\n }\n\n\n\n /**\n * Builds the search parameters for the next fetch call.\n * @param newSearch - When `true`, resets the pagination offset to 0.\n * @returns A cloned and enriched `ClipperSearchParams` ready to be sent to the API.\n */\n private prepareFetch(newSearch: boolean = false): ClipperSearchParams {\n const newParams = SystemUtils.clone(this.filterParams) as ClipperSearchParams;\n newParams.count = 15;\n newParams.useModifierInfo =\n newParams.mode === ClipperQueryReferencesMode.ChangesOut;\n newParams.returnModifierInfo =\n newParams.mode !== ClipperQueryReferencesMode.ChangesOut;\n // New search, reset paging\n if (newSearch) {\n newParams.first = 0;\n this.filterParams.first = 0;\n }\n\n // Apply facets\n if (this.snapshot.facets?.fromDate) {\n newParams.fromDate = this.snapshot.facets?.fromDate;\n newParams.toDate = this.snapshot.facets?.toDate;\n newParams.year = this.snapshot.facets?.fromDate.getFullYear();\n }\n if (this.snapshot.facets?.sector) {\n newParams.sector = this.snapshot.facets?.sector;\n }\n if (this.snapshot.facets?.type) {\n newParams.type = this.snapshot.facets?.type;\n }\n if (this.snapshot.facets?.author) {\n newParams.author = this.snapshot.facets?.author;\n }\n return newParams;\n }\n\n /**\n * Maps a generic `ClipperSearchParams` to the references-specific API parameter shape.\n * @param params - The base search parameters to convert.\n * @returns A `ClipperReferencesSearchParams` object ready for the references endpoint.\n */\n private toReferencesSearchParams(params: ClipperSearchParams): ClipperReferencesSearchParams {\n return {\n documentId: params.id,\n year: params.year,\n sector: params.sector,\n author: params.author,\n anchor: params.anchor,\n model: params.model?.toString() ?? null,\n mode: params.mode,\n excludeTextReferences: params.excludeTextReferences,\n excludeNotesReferences: params.excludeNotesReferences,\n returnModifierInfo: params.returnModifierInfo,\n useModifierInfo: params.useModifierInfo,\n count: 15,\n first: params.first ?? 0\n }\n }\n\n /**\n * Executes the references search and updates the result snapshot.\n * @param newSearch - When `true`, resets pagination and reloads facets. Defaults to `false`.\n */\n fetch(newSearch: boolean = false): void {\n if (!this.clipperService.loggedIn()) return;\n this.dialogService.busy('Ricerca in corso...');\n const searchParams = this.prepareFetch(newSearch);\n if (searchParams) {\n this.clipperService.documents.references(this.toReferencesSearchParams(searchParams))\n .pipe(finalize(() => this.dialogService.clearBusy()))\n .subscribe(r => {\n if (!r.success) this.dialogService.error(r.message);\n else {\n this.prepareResults(r.value, newSearch);\n\n // Handle facets\n if (this.snapshot.total > 0) {\n if (newSearch)\n // Update facets\n this.fetchFacets(searchParams);\n } else {\n this.hideFacets();\n }\n\n if (newSearch) {\n const paginator = this.paginator();\n if (paginator) paginator.pageIndex = 0;\n }\n\n this.scroll(0);\n }\n });\n }\n }\n\n /**\n * Navigates to the next result page.\n * @param e - The `PageEvent` emitted by the paginator with the new page index and size.\n */\n fetchMore(e: PageEvent): void {\n const first = e.pageIndex * (this.filterParams.count ?? 15);\n this.filterParams.first = first;\n this.fetch();\n }\n\n /**\n * Loads available facets for the current search parameters and updates the filter pane.\n * @param params - The search parameters used to request facets from the API.\n */\n fetchFacets(params: ClipperSearchParams): void {\n if (!this.clipperService.loggedIn() || !params) return;\n if (!this.snapshot.facets || this.snapshot.facets?.hasMoreFacets) {\n this.filterBusy.set(true);\n this.clipperService.documents.referencesFacets(this.toReferencesSearchParams(params))\n .subscribe({\n next: (r: ApiResult<ClipperSearchFacetsResult>) => {\n if (r.success) {\n let hasFacets = (r.value.facets?.length ?? 0) > 0;\n if (r.value.facets) {\n const facets = this.facets();\n facets?.update(r.value.facets, r.value.interval);\n if (facets && this.snapshot) {\n hasFacets = facets.hasFacets();\n this.snapshot.facets = facets.save();\n this.snapshot.facets.hasTooManyResults = (this.snapshot?.total ?? 0) >= 1000;\n }\n }\n this.hasFacets.set(hasFacets);\n this.handleFilterPaneVisibility();\n }\n },\n complete: () => {\n this.filterBusy.set(false);\n }\n });\n }\n }\n\n /**\n * Hides the facet filter pane and resets all applied facet filters.\n */\n protected hideFacets(): void {\n this.hasFacets.set(false);\n this.facets()?.reset();\n this.filterPane().close();\n this.filterPaneClosed.set(false);\n }\n /**\n * Restores previously saved facets from the snapshot and adjusts the filter pane accordingly.\n */\n restoreFacets(): void {\n if (this.snapshot.facets) {\n this.facets().restore(this.snapshot.facets);\n this.handleFilterPaneVisibility();\n }\n }\n\n /**\n * Closes the dialog and navigates to the selected document.\n * @param documentId - The ID of the document to open.\n */\n override open(documentId?: string): void {\n if (documentId) this.dialogRef.close({ documentId });\n }\n\n /**\n * Returns the CSS class reflecting the item's validity state.\n * @param item - The document to evaluate.\n * @returns A CSS class name string, or `undefined` when no special state applies.\n */\n override getItemStateCssClass(item: ClipperDocumentInfo): string | undefined {\n if (item.isExpired) return 'expired-bg';\n return undefined;\n }\n\n /**\n * Returns the tooltip text explaining the item's current validity state.\n * @param item - The document to evaluate.\n * @returns A human-readable state description, or an empty string when no special state applies.\n */\n override getItemStateTooltip(item: ClipperDocumentInfo): string {\n if (item.isExpired) return 'Non più vigente';\n return '';\n }\n}\n","<div class=\"clipper-references-fixed\">\n <div class=\"dialog-header\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\n <div fxFlex=\"*\">\n <div mat-dialog-title>{{title}} </div>\n </div>\n <div fxLayoutAlign=\"end\">\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\n (click)=\"close()\" class=\"dialog-close\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\n (!filterPane.opened || filterPaneClosed()))) {\n <div class=\"dialog-toolbar\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <div fxFlex=\"*\">\n @if (dialogData.mode === 1) {\n <mat-slide-toggle [checked]=\"filterParams.excludeTextReferences === true\"\n (change)=\"filterParams.excludeTextReferences = $event.checked; fetch(true)\">\n Mostra solo se citati nelle note\n </mat-slide-toggle>\n } @else if (dialogData.mode == 2) {\n <mat-slide-toggle [checked]=\"filterParams.excludeNotesReferences === true\"\n (change)=\"filterParams.excludeNotesReferences = $event.checked; fetch(true)\">\n Mostra solo se citano nel testo il documento\n </mat-slide-toggle>\n }\n </div>\n <div fxLayoutAlign=\"end\">\n @if (selection?.hasValue()) {\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\n [disabled]=\"!snapshot.total\" [matBadge]=\"selection?.all?.length\">\n <mat-icon>checklist</mat-icon>\n </button>\n }\n <mat-menu #menuSelections=\"matMenu\">\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [useSelections]=\"true\"\n [isReadable]=\"false\" [isReference]=\"true\" [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\n </clipper-document-menu>\n </mat-menu>\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed())) {\n <div fxFlexAlign=\"center\">\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\n (click)=\"toggleFilterPane()\">\n <mat-icon>right_panel_open</mat-icon>\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n</div>\n<mat-dialog-content id=\"clipper-references-scrollable\">\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop()\">\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\n @if (filterBusy()) {\n <div class=\"overlay\"></div>\n }\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"6px\">\n @if (filterBusy()) {\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\n </mat-progress-bar>\n }\n </div>\n <div fxFlex=\"78px\" class=\"title-container-with-loader\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <div class=\"title\">Affina ricerca</div>\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\n <button mat-icon-button (click)=\"toggleFilterPane()\"\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\n </div>\n </div>\n </div>\n <div fxFlex=\"*\" class=\"scroll-hidden\" style=\"padding: 0 5px;\">\n <clipper-search-facets #facets [handleTooManyResults]=\"dialogData.canHandleTooManyResults\" ></clipper-search-facets>\n </div>\n </div>\n </mat-drawer>\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\n @if (!snapshot.total) {\n <div class=\"message-container\">\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\n </div>\n } @else {\n <div>\n @for (item of snapshot.items; track $index; let i = $index) {\n @if (item.group) {\n <div class=\"items-group-title\">\n <div [class.group-spaced]=\"i > 0\">{{item.group}}</div>\n </div>\n }\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\" [isReadable]=\"false\"\n [actions]=\"contextMenu\"></clipper-search-result-item>\n }\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\n <ng-template matMenuContent let-item=\"item\">\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\"\n [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\n </clipper-document-menu>\n </ng-template>\n </mat-menu>\n </div>\n }\n </div>\n <!-- footer -->\n @if ((snapshot?.total ?? 0) > 0) {\n <div class=\"items-footer\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between center\" fxFill>\n <!-- legend -->\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\n <div class=\"legend expired-bg \"></div>\n non più vigente\n </div>\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [class.wide]=\"filterPane?.opened\">\n <div fxLayout=\"row\">\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\"\n (page)=\"fetchMore($event)\">\n </mat-paginator>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </mat-drawer-container>\n</mat-dialog-content>"],"mappings":"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"}
|
|
@@ -236,7 +236,7 @@ var ClipperReferencesComponent = class ClipperReferencesComponent extends Clippe
|
|
|
236
236
|
static {
|
|
237
237
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
238
238
|
minVersion: "12.0.0",
|
|
239
|
-
version: "22.2.
|
|
239
|
+
version: "22.2.3",
|
|
240
240
|
ngImport: i0,
|
|
241
241
|
type: ClipperReferencesComponent,
|
|
242
242
|
deps: [],
|
|
@@ -246,7 +246,7 @@ var ClipperReferencesComponent = class ClipperReferencesComponent extends Clippe
|
|
|
246
246
|
static {
|
|
247
247
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
248
248
|
minVersion: "17.0.0",
|
|
249
|
-
version: "22.2.
|
|
249
|
+
version: "22.2.3",
|
|
250
250
|
type: ClipperReferencesComponent,
|
|
251
251
|
isStandalone: true,
|
|
252
252
|
selector: "ng-component",
|
|
@@ -676,7 +676,7 @@ var ClipperReferencesComponent = class ClipperReferencesComponent extends Clippe
|
|
|
676
676
|
};
|
|
677
677
|
i0.ɵɵngDeclareClassMetadata({
|
|
678
678
|
minVersion: "12.0.0",
|
|
679
|
-
version: "22.2.
|
|
679
|
+
version: "22.2.3",
|
|
680
680
|
ngImport: i0,
|
|
681
681
|
type: ClipperReferencesComponent,
|
|
682
682
|
decorators: [{
|
|
@@ -715,4 +715,4 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
715
715
|
});
|
|
716
716
|
export { ClipperReferencesComponent };
|
|
717
717
|
|
|
718
|
-
//# sourceMappingURL=arsedizioni-ars-utils-clipper.ui-references.component-
|
|
718
|
+
//# sourceMappingURL=arsedizioni-ars-utils-clipper.ui-references.component-DYojmfsw.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arsedizioni-ars-utils-clipper.ui-references.component-CEA_wJTS.mjs","names":[],"sources":["../../../projects/ars-utils/clipper.ui/references/references.component.ts","../../../projects/ars-utils/clipper.ui/references/references.component.html"],"sourcesContent":["import { Breakpoints } from '@angular/cdk/layout';\nimport { ChangeDetectionStrategy, Component, afterNextRender, inject, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ClipperDocumentInfo, ClipperQueryReferencesMode, ClipperReferencesSearchParams, ClipperSearchFacetsResult, ClipperSearchFacetsSnapshot, ClipperSearchParams, ClipperUserInfo } from '@arsedizioni/ars-utils/clipper.common';\nimport { ApiResult, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { finalize } from 'rxjs/operators';\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\n\n\nexport interface ClipperReferencesDialogData {\n mode?: ClipperQueryReferencesMode;\n anchor?: string;\n anchorTitle?: string;\n documentId: string;\n model: number;\n canHandleTooManyResults?: boolean;\n}\n\nexport interface ClipperReferenceDialogResult {\n documentId: string;\n}\n\n@Component({\n host: { 'Bind': SystemUtils.generateUUID() },\n templateUrl: './references.component.html',\n styleUrls: ['./references.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FlexLayoutModule,\n MatDialogTitle,\n MatButtonModule,\n MatTooltipModule,\n MatIconModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n MatMenuModule,\n MatBadgeModule,\n MatPaginatorModule,\n MatDialogContent,\n MatSidenavModule,\n MatProgressBarModule,\n ClipperDocumentMenuComponent,\n ClipperSearchFacetsComponent,\n ClipperSearchResultItemComponent,\n ],\n})\nexport class ClipperReferencesComponent extends ClipperSearchResultManager {\n readonly filterPane = viewChild<MatDrawer>('filterPane');\n\n private readonly dialogRef = inject(MatDialogRef<ClipperReferencesComponent>);\n protected readonly dialogData: ClipperReferencesDialogData = inject(MAT_DIALOG_DATA) ?? { mode: ClipperQueryReferencesMode.ReferencesIn };\n protected title?: string;\n protected item?: ClipperDocumentInfo;\n protected readonly user: ClipperUserInfo | undefined = this.clipperService.user;\n private _viewReady = false;\n\n constructor() {\n super();\n if (this.dialogData) {\n switch (this.dialogData.mode) {\n case ClipperQueryReferencesMode.ReferencesIn:\n this.title = \"Documenti richiamati nelle note o nel testo\";\n break;\n case ClipperQueryReferencesMode.ReferencesOut:\n this.title = \"Documenti che richiamano quello in visione\";\n break;\n case ClipperQueryReferencesMode.ChangesIn:\n this.title = \"Modifiche subite\";\n break;\n case ClipperQueryReferencesMode.ChangesOut:\n this.title = \"Modifiche apportate\";\n break;\n case ClipperQueryReferencesMode.Juris:\n this.title = \"Giurisprudenza associata\";\n break;\n }\n if (this.dialogData.anchorTitle) {\n this.title += \" - \" + this.dialogData.anchorTitle;\n }\n // Use service snapshot\n this.snapshot = this.clipperService.referencesSnapshot() ?? { searchParams: new ClipperSearchParams(), interval: \"-1\" };\n if (\n this.filterParams.mode !== this.dialogData.mode ||\n this.filterParams.id !== this.dialogData.documentId ||\n this.filterParams.anchor !== this.dialogData.anchor\n ) {\n this.filterParams = new ClipperSearchParams();\n this.filterParams.mode = this.dialogData.mode;\n this.filterParams.model = this.dialogData.model;\n this.filterParams.anchor = this.dialogData.anchor;\n this.filterParams.id = this.dialogData.documentId;\n this.filterParams.useModifierInfo = this.dialogData.mode === ClipperQueryReferencesMode.ChangesOut;\n this.filterParams.returnModifierInfo = this.dialogData.mode !== ClipperQueryReferencesMode.ChangesOut;\n this.clipperService.referencesSnapshot.set(this.snapshot);\n }\n }\n\n // Initialize selection\n this.selection = new SelectableModel<ClipperDocumentInfo, string>(true, 'documentId');\n\n // Observe layout changes\n this.breakpointObserver\n .observe([\n Breakpoints.XSmall,\n Breakpoints.Small,\n Breakpoints.Medium,\n Breakpoints.Large,\n Breakpoints.XLarge,\n ])\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((result: any) => {\n if (!this._viewReady) return; // DOM not ready yet\n for (const query of Object.keys(result.breakpoints)) {\n if (result.breakpoints[query]) {\n this.handleFilterPaneVisibility();\n }\n }\n });\n\n // Run view-dependent initialization after the first render.\n afterNextRender(() => {\n this._viewReady = true;\n this.handleFilterPaneVisibility();\n const filterPane = this.filterPane();\n if (filterPane) {\n filterPane.openedChange\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(opened => {\n if (filterPane.mode === 'over') {\n this.filterPaneHasBackdrop.set(opened);\n }\n });\n }\n const facets = this.facets();\n if (facets) {\n facets.changed\n .subscribe((value: ClipperSearchFacetsSnapshot) => {\n this.snapshot.facets = value;\n this.fetch(true);\n });\n }\n this.fetch(true);\n this.restoreFacets();\n this.changeDetector.markForCheck();\n });\n }\n\n\n /**\n * Toggles the filter pane open/closed state.\n */\n protected toggleFilterPane(): void {\n this.filterPaneClosed.set(!this.filterPaneClosed());\n this.filterPane()?.toggle();\n }\n\n\n\n /**\n * Adjusts the filter pane mode (side vs. overlay) and backdrop based on the current breakpoint.\n */\n private handleFilterPaneVisibility(): void {\n const filterPane = this.filterPane();\n if (filterPane) {\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\n if (filterPane.opened) {\n filterPane.close();\n }\n filterPane.mode = 'over';\n filterPane.disableClose = false;\n this.filterPaneHasBackdrop.set(filterPane.opened);\n } else {\n if (!this.hasFacets()) {\n filterPane.close();\n } else if (!filterPane.opened && !this.filterPaneClosed()) {\n filterPane.open();\n } else if (filterPane.opened && this.filterPaneClosed()) {\n filterPane.close();\n }\n filterPane.mode = 'side';\n filterPane.disableClose = true;\n this.filterPaneHasBackdrop.set(false);\n }\n }\n }\n\n\n /**\n * Closes the references dialog without returning a result.\n */\n close(): void {\n this.dialogRef.close();\n }\n\n\n\n /**\n * Sends document links by email for the given item or, when omitted, for all selected items.\n * @param item - The specific document to send, or `undefined` to use the current selection.\n */\n sendTo(item?: ClipperDocumentInfo): void {\n this.sendItemsTo(item ? [item] : this.selection?.all);\n }\n\n\n\n /**\n * Builds the search parameters for the next fetch call.\n * @param newSearch - When `true`, resets the pagination offset to 0.\n * @returns A cloned and enriched `ClipperSearchParams` ready to be sent to the API.\n */\n private prepareFetch(newSearch: boolean = false): ClipperSearchParams {\n const newParams = SystemUtils.clone(this.filterParams) as ClipperSearchParams;\n newParams.count = 15;\n newParams.useModifierInfo =\n newParams.mode === ClipperQueryReferencesMode.ChangesOut;\n newParams.returnModifierInfo =\n newParams.mode !== ClipperQueryReferencesMode.ChangesOut;\n // New search, reset paging\n if (newSearch) {\n newParams.first = 0;\n this.filterParams.first = 0;\n }\n\n // Apply facets\n if (this.snapshot.facets?.fromDate) {\n newParams.fromDate = this.snapshot.facets?.fromDate;\n newParams.toDate = this.snapshot.facets?.toDate;\n newParams.year = this.snapshot.facets?.fromDate.getFullYear();\n }\n if (this.snapshot.facets?.sector) {\n newParams.sector = this.snapshot.facets?.sector;\n }\n if (this.snapshot.facets?.type) {\n newParams.type = this.snapshot.facets?.type;\n }\n if (this.snapshot.facets?.author) {\n newParams.author = this.snapshot.facets?.author;\n }\n return newParams;\n }\n\n /**\n * Maps a generic `ClipperSearchParams` to the references-specific API parameter shape.\n * @param params - The base search parameters to convert.\n * @returns A `ClipperReferencesSearchParams` object ready for the references endpoint.\n */\n private toReferencesSearchParams(params: ClipperSearchParams): ClipperReferencesSearchParams {\n return {\n documentId: params.id,\n year: params.year,\n sector: params.sector,\n author: params.author,\n anchor: params.anchor,\n model: params.model?.toString() ?? null,\n mode: params.mode,\n excludeTextReferences: params.excludeTextReferences,\n excludeNotesReferences: params.excludeNotesReferences,\n returnModifierInfo: params.returnModifierInfo,\n useModifierInfo: params.useModifierInfo,\n count: 15,\n first: params.first ?? 0\n }\n }\n\n /**\n * Executes the references search and updates the result snapshot.\n * @param newSearch - When `true`, resets pagination and reloads facets. Defaults to `false`.\n */\n fetch(newSearch: boolean = false): void {\n if (!this.clipperService.loggedIn()) return;\n this.dialogService.busy('Ricerca in corso...');\n const searchParams = this.prepareFetch(newSearch);\n if (searchParams) {\n this.clipperService.documents.references(this.toReferencesSearchParams(searchParams))\n .pipe(finalize(() => this.dialogService.clearBusy()))\n .subscribe(r => {\n if (!r.success) this.dialogService.error(r.message);\n else {\n this.prepareResults(r.value, newSearch);\n\n // Handle facets\n if (this.snapshot.total > 0) {\n if (newSearch)\n // Update facets\n this.fetchFacets(searchParams);\n } else {\n this.hideFacets();\n }\n\n if (newSearch) {\n const paginator = this.paginator();\n if (paginator) paginator.pageIndex = 0;\n }\n\n this.scroll(0);\n }\n });\n }\n }\n\n /**\n * Navigates to the next result page.\n * @param e - The `PageEvent` emitted by the paginator with the new page index and size.\n */\n fetchMore(e: PageEvent): void {\n const first = e.pageIndex * (this.filterParams.count ?? 15);\n this.filterParams.first = first;\n this.fetch();\n }\n\n /**\n * Loads available facets for the current search parameters and updates the filter pane.\n * @param params - The search parameters used to request facets from the API.\n */\n fetchFacets(params: ClipperSearchParams): void {\n if (!this.clipperService.loggedIn() || !params) return;\n if (!this.snapshot.facets || this.snapshot.facets?.hasMoreFacets) {\n this.filterBusy.set(true);\n this.clipperService.documents.referencesFacets(this.toReferencesSearchParams(params))\n .subscribe({\n next: (r: ApiResult<ClipperSearchFacetsResult>) => {\n if (r.success) {\n let hasFacets = (r.value.facets?.length ?? 0) > 0;\n if (r.value.facets) {\n const facets = this.facets();\n facets?.update(r.value.facets, r.value.interval);\n if (facets && this.snapshot) {\n hasFacets = facets.hasFacets();\n this.snapshot.facets = facets.save();\n this.snapshot.facets.hasTooManyResults = (this.snapshot?.total ?? 0) >= 1000;\n }\n }\n this.hasFacets.set(hasFacets);\n this.handleFilterPaneVisibility();\n }\n },\n complete: () => {\n this.filterBusy.set(false);\n }\n });\n }\n }\n\n /**\n * Hides the facet filter pane and resets all applied facet filters.\n */\n protected hideFacets(): void {\n this.hasFacets.set(false);\n this.facets()?.reset();\n this.filterPane().close();\n this.filterPaneClosed.set(false);\n }\n /**\n * Restores previously saved facets from the snapshot and adjusts the filter pane accordingly.\n */\n restoreFacets(): void {\n if (this.snapshot.facets) {\n this.facets().restore(this.snapshot.facets);\n this.handleFilterPaneVisibility();\n }\n }\n\n /**\n * Closes the dialog and navigates to the selected document.\n * @param documentId - The ID of the document to open.\n */\n override open(documentId?: string): void {\n if (documentId) this.dialogRef.close({ documentId });\n }\n\n /**\n * Returns the CSS class reflecting the item's validity state.\n * @param item - The document to evaluate.\n * @returns A CSS class name string, or `undefined` when no special state applies.\n */\n override getItemStateCssClass(item: ClipperDocumentInfo): string | undefined {\n if (item.isExpired) return 'expired-bg';\n return undefined;\n }\n\n /**\n * Returns the tooltip text explaining the item's current validity state.\n * @param item - The document to evaluate.\n * @returns A human-readable state description, or an empty string when no special state applies.\n */\n override getItemStateTooltip(item: ClipperDocumentInfo): string {\n if (item.isExpired) return 'Non più vigente';\n return '';\n }\n}\n","<div class=\"clipper-references-fixed\">\n <div class=\"dialog-header\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\n <div fxFlex=\"*\">\n <div mat-dialog-title>{{title}} </div>\n </div>\n <div fxLayoutAlign=\"end\">\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\n (click)=\"close()\" class=\"dialog-close\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\n (!filterPane.opened || filterPaneClosed()))) {\n <div class=\"dialog-toolbar\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <div fxFlex=\"*\">\n @if (dialogData.mode === 1) {\n <mat-slide-toggle [checked]=\"filterParams.excludeTextReferences === true\"\n (change)=\"filterParams.excludeTextReferences = $event.checked; fetch(true)\">\n Mostra solo se citati nelle note\n </mat-slide-toggle>\n } @else if (dialogData.mode == 2) {\n <mat-slide-toggle [checked]=\"filterParams.excludeNotesReferences === true\"\n (change)=\"filterParams.excludeNotesReferences = $event.checked; fetch(true)\">\n Mostra solo se citano nel testo il documento\n </mat-slide-toggle>\n }\n </div>\n <div fxLayoutAlign=\"end\">\n @if (selection?.hasValue()) {\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\n [disabled]=\"!snapshot.total\" [matBadge]=\"selection?.all?.length\">\n <mat-icon>checklist</mat-icon>\n </button>\n }\n <mat-menu #menuSelections=\"matMenu\">\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [useSelections]=\"true\"\n [isReadable]=\"false\" [isReference]=\"true\" [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\n </clipper-document-menu>\n </mat-menu>\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed())) {\n <div fxFlexAlign=\"center\">\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\n (click)=\"toggleFilterPane()\">\n <mat-icon>right_panel_open</mat-icon>\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n</div>\n<mat-dialog-content id=\"clipper-references-scrollable\">\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop()\">\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\n @if (filterBusy()) {\n <div class=\"overlay\"></div>\n }\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"6px\">\n @if (filterBusy()) {\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\n </mat-progress-bar>\n }\n </div>\n <div fxFlex=\"78px\" class=\"title-container-with-loader\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <div class=\"title\">Affina ricerca</div>\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\n <button mat-icon-button (click)=\"toggleFilterPane()\"\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\n </div>\n </div>\n </div>\n <div fxFlex=\"*\" class=\"scroll-hidden\" style=\"padding: 0 5px;\">\n <clipper-search-facets #facets [handleTooManyResults]=\"dialogData.canHandleTooManyResults\" ></clipper-search-facets>\n </div>\n </div>\n </mat-drawer>\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\n @if (!snapshot.total) {\n <div class=\"message-container\">\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\n </div>\n } @else {\n <div>\n @for (item of snapshot.items; track $index; let i = $index) {\n @if (item.group) {\n <div class=\"items-group-title\">\n <div [class.group-spaced]=\"i > 0\">{{item.group}}</div>\n </div>\n }\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\" [isReadable]=\"false\"\n [actions]=\"contextMenu\"></clipper-search-result-item>\n }\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\n <ng-template matMenuContent let-item=\"item\">\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\"\n [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\n </clipper-document-menu>\n </ng-template>\n </mat-menu>\n </div>\n }\n </div>\n <!-- footer -->\n @if ((snapshot?.total ?? 0) > 0) {\n <div class=\"items-footer\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between center\" fxFill>\n <!-- legend -->\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\n <div class=\"legend expired-bg \"></div>\n non più vigente\n </div>\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [class.wide]=\"filterPane?.opened\">\n <div fxLayout=\"row\">\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\"\n (page)=\"fetchMore($event)\">\n </mat-paginator>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </mat-drawer-container>\n</mat-dialog-content>"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-clipper.ui-references.component-DYojmfsw.mjs","names":[],"sources":["../../../projects/ars-utils/clipper.ui/references/references.component.ts","../../../projects/ars-utils/clipper.ui/references/references.component.html"],"sourcesContent":["import { Breakpoints } from '@angular/cdk/layout';\nimport { ChangeDetectionStrategy, Component, afterNextRender, inject, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ClipperDocumentInfo, ClipperQueryReferencesMode, ClipperReferencesSearchParams, ClipperSearchFacetsResult, ClipperSearchFacetsSnapshot, ClipperSearchParams, ClipperUserInfo } from '@arsedizioni/ars-utils/clipper.common';\nimport { ApiResult, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { finalize } from 'rxjs/operators';\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\n\n\nexport interface ClipperReferencesDialogData {\n mode?: ClipperQueryReferencesMode;\n anchor?: string;\n anchorTitle?: string;\n documentId: string;\n model: number;\n canHandleTooManyResults?: boolean;\n}\n\nexport interface ClipperReferenceDialogResult {\n documentId: string;\n}\n\n@Component({\n host: { 'Bind': SystemUtils.generateUUID() },\n templateUrl: './references.component.html',\n styleUrls: ['./references.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FlexLayoutModule,\n MatDialogTitle,\n MatButtonModule,\n MatTooltipModule,\n MatIconModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n MatMenuModule,\n MatBadgeModule,\n MatPaginatorModule,\n MatDialogContent,\n MatSidenavModule,\n MatProgressBarModule,\n ClipperDocumentMenuComponent,\n ClipperSearchFacetsComponent,\n ClipperSearchResultItemComponent,\n ],\n})\nexport class ClipperReferencesComponent extends ClipperSearchResultManager {\n readonly filterPane = viewChild<MatDrawer>('filterPane');\n\n private readonly dialogRef = inject(MatDialogRef<ClipperReferencesComponent>);\n protected readonly dialogData: ClipperReferencesDialogData = inject(MAT_DIALOG_DATA) ?? { mode: ClipperQueryReferencesMode.ReferencesIn };\n protected title?: string;\n protected item?: ClipperDocumentInfo;\n protected readonly user: ClipperUserInfo | undefined = this.clipperService.user;\n private _viewReady = false;\n\n constructor() {\n super();\n if (this.dialogData) {\n switch (this.dialogData.mode) {\n case ClipperQueryReferencesMode.ReferencesIn:\n this.title = \"Documenti richiamati nelle note o nel testo\";\n break;\n case ClipperQueryReferencesMode.ReferencesOut:\n this.title = \"Documenti che richiamano quello in visione\";\n break;\n case ClipperQueryReferencesMode.ChangesIn:\n this.title = \"Modifiche subite\";\n break;\n case ClipperQueryReferencesMode.ChangesOut:\n this.title = \"Modifiche apportate\";\n break;\n case ClipperQueryReferencesMode.Juris:\n this.title = \"Giurisprudenza associata\";\n break;\n }\n if (this.dialogData.anchorTitle) {\n this.title += \" - \" + this.dialogData.anchorTitle;\n }\n // Use service snapshot\n this.snapshot = this.clipperService.referencesSnapshot() ?? { searchParams: new ClipperSearchParams(), interval: \"-1\" };\n if (\n this.filterParams.mode !== this.dialogData.mode ||\n this.filterParams.id !== this.dialogData.documentId ||\n this.filterParams.anchor !== this.dialogData.anchor\n ) {\n this.filterParams = new ClipperSearchParams();\n this.filterParams.mode = this.dialogData.mode;\n this.filterParams.model = this.dialogData.model;\n this.filterParams.anchor = this.dialogData.anchor;\n this.filterParams.id = this.dialogData.documentId;\n this.filterParams.useModifierInfo = this.dialogData.mode === ClipperQueryReferencesMode.ChangesOut;\n this.filterParams.returnModifierInfo = this.dialogData.mode !== ClipperQueryReferencesMode.ChangesOut;\n this.clipperService.referencesSnapshot.set(this.snapshot);\n }\n }\n\n // Initialize selection\n this.selection = new SelectableModel<ClipperDocumentInfo, string>(true, 'documentId');\n\n // Observe layout changes\n this.breakpointObserver\n .observe([\n Breakpoints.XSmall,\n Breakpoints.Small,\n Breakpoints.Medium,\n Breakpoints.Large,\n Breakpoints.XLarge,\n ])\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((result: any) => {\n if (!this._viewReady) return; // DOM not ready yet\n for (const query of Object.keys(result.breakpoints)) {\n if (result.breakpoints[query]) {\n this.handleFilterPaneVisibility();\n }\n }\n });\n\n // Run view-dependent initialization after the first render.\n afterNextRender(() => {\n this._viewReady = true;\n this.handleFilterPaneVisibility();\n const filterPane = this.filterPane();\n if (filterPane) {\n filterPane.openedChange\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(opened => {\n if (filterPane.mode === 'over') {\n this.filterPaneHasBackdrop.set(opened);\n }\n });\n }\n const facets = this.facets();\n if (facets) {\n facets.changed\n .subscribe((value: ClipperSearchFacetsSnapshot) => {\n this.snapshot.facets = value;\n this.fetch(true);\n });\n }\n this.fetch(true);\n this.restoreFacets();\n this.changeDetector.markForCheck();\n });\n }\n\n\n /**\n * Toggles the filter pane open/closed state.\n */\n protected toggleFilterPane(): void {\n this.filterPaneClosed.set(!this.filterPaneClosed());\n this.filterPane()?.toggle();\n }\n\n\n\n /**\n * Adjusts the filter pane mode (side vs. overlay) and backdrop based on the current breakpoint.\n */\n private handleFilterPaneVisibility(): void {\n const filterPane = this.filterPane();\n if (filterPane) {\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\n if (filterPane.opened) {\n filterPane.close();\n }\n filterPane.mode = 'over';\n filterPane.disableClose = false;\n this.filterPaneHasBackdrop.set(filterPane.opened);\n } else {\n if (!this.hasFacets()) {\n filterPane.close();\n } else if (!filterPane.opened && !this.filterPaneClosed()) {\n filterPane.open();\n } else if (filterPane.opened && this.filterPaneClosed()) {\n filterPane.close();\n }\n filterPane.mode = 'side';\n filterPane.disableClose = true;\n this.filterPaneHasBackdrop.set(false);\n }\n }\n }\n\n\n /**\n * Closes the references dialog without returning a result.\n */\n close(): void {\n this.dialogRef.close();\n }\n\n\n\n /**\n * Sends document links by email for the given item or, when omitted, for all selected items.\n * @param item - The specific document to send, or `undefined` to use the current selection.\n */\n sendTo(item?: ClipperDocumentInfo): void {\n this.sendItemsTo(item ? [item] : this.selection?.all);\n }\n\n\n\n /**\n * Builds the search parameters for the next fetch call.\n * @param newSearch - When `true`, resets the pagination offset to 0.\n * @returns A cloned and enriched `ClipperSearchParams` ready to be sent to the API.\n */\n private prepareFetch(newSearch: boolean = false): ClipperSearchParams {\n const newParams = SystemUtils.clone(this.filterParams) as ClipperSearchParams;\n newParams.count = 15;\n newParams.useModifierInfo =\n newParams.mode === ClipperQueryReferencesMode.ChangesOut;\n newParams.returnModifierInfo =\n newParams.mode !== ClipperQueryReferencesMode.ChangesOut;\n // New search, reset paging\n if (newSearch) {\n newParams.first = 0;\n this.filterParams.first = 0;\n }\n\n // Apply facets\n if (this.snapshot.facets?.fromDate) {\n newParams.fromDate = this.snapshot.facets?.fromDate;\n newParams.toDate = this.snapshot.facets?.toDate;\n newParams.year = this.snapshot.facets?.fromDate.getFullYear();\n }\n if (this.snapshot.facets?.sector) {\n newParams.sector = this.snapshot.facets?.sector;\n }\n if (this.snapshot.facets?.type) {\n newParams.type = this.snapshot.facets?.type;\n }\n if (this.snapshot.facets?.author) {\n newParams.author = this.snapshot.facets?.author;\n }\n return newParams;\n }\n\n /**\n * Maps a generic `ClipperSearchParams` to the references-specific API parameter shape.\n * @param params - The base search parameters to convert.\n * @returns A `ClipperReferencesSearchParams` object ready for the references endpoint.\n */\n private toReferencesSearchParams(params: ClipperSearchParams): ClipperReferencesSearchParams {\n return {\n documentId: params.id,\n year: params.year,\n sector: params.sector,\n author: params.author,\n anchor: params.anchor,\n model: params.model?.toString() ?? null,\n mode: params.mode,\n excludeTextReferences: params.excludeTextReferences,\n excludeNotesReferences: params.excludeNotesReferences,\n returnModifierInfo: params.returnModifierInfo,\n useModifierInfo: params.useModifierInfo,\n count: 15,\n first: params.first ?? 0\n }\n }\n\n /**\n * Executes the references search and updates the result snapshot.\n * @param newSearch - When `true`, resets pagination and reloads facets. Defaults to `false`.\n */\n fetch(newSearch: boolean = false): void {\n if (!this.clipperService.loggedIn()) return;\n this.dialogService.busy('Ricerca in corso...');\n const searchParams = this.prepareFetch(newSearch);\n if (searchParams) {\n this.clipperService.documents.references(this.toReferencesSearchParams(searchParams))\n .pipe(finalize(() => this.dialogService.clearBusy()))\n .subscribe(r => {\n if (!r.success) this.dialogService.error(r.message);\n else {\n this.prepareResults(r.value, newSearch);\n\n // Handle facets\n if (this.snapshot.total > 0) {\n if (newSearch)\n // Update facets\n this.fetchFacets(searchParams);\n } else {\n this.hideFacets();\n }\n\n if (newSearch) {\n const paginator = this.paginator();\n if (paginator) paginator.pageIndex = 0;\n }\n\n this.scroll(0);\n }\n });\n }\n }\n\n /**\n * Navigates to the next result page.\n * @param e - The `PageEvent` emitted by the paginator with the new page index and size.\n */\n fetchMore(e: PageEvent): void {\n const first = e.pageIndex * (this.filterParams.count ?? 15);\n this.filterParams.first = first;\n this.fetch();\n }\n\n /**\n * Loads available facets for the current search parameters and updates the filter pane.\n * @param params - The search parameters used to request facets from the API.\n */\n fetchFacets(params: ClipperSearchParams): void {\n if (!this.clipperService.loggedIn() || !params) return;\n if (!this.snapshot.facets || this.snapshot.facets?.hasMoreFacets) {\n this.filterBusy.set(true);\n this.clipperService.documents.referencesFacets(this.toReferencesSearchParams(params))\n .subscribe({\n next: (r: ApiResult<ClipperSearchFacetsResult>) => {\n if (r.success) {\n let hasFacets = (r.value.facets?.length ?? 0) > 0;\n if (r.value.facets) {\n const facets = this.facets();\n facets?.update(r.value.facets, r.value.interval);\n if (facets && this.snapshot) {\n hasFacets = facets.hasFacets();\n this.snapshot.facets = facets.save();\n this.snapshot.facets.hasTooManyResults = (this.snapshot?.total ?? 0) >= 1000;\n }\n }\n this.hasFacets.set(hasFacets);\n this.handleFilterPaneVisibility();\n }\n },\n complete: () => {\n this.filterBusy.set(false);\n }\n });\n }\n }\n\n /**\n * Hides the facet filter pane and resets all applied facet filters.\n */\n protected hideFacets(): void {\n this.hasFacets.set(false);\n this.facets()?.reset();\n this.filterPane().close();\n this.filterPaneClosed.set(false);\n }\n /**\n * Restores previously saved facets from the snapshot and adjusts the filter pane accordingly.\n */\n restoreFacets(): void {\n if (this.snapshot.facets) {\n this.facets().restore(this.snapshot.facets);\n this.handleFilterPaneVisibility();\n }\n }\n\n /**\n * Closes the dialog and navigates to the selected document.\n * @param documentId - The ID of the document to open.\n */\n override open(documentId?: string): void {\n if (documentId) this.dialogRef.close({ documentId });\n }\n\n /**\n * Returns the CSS class reflecting the item's validity state.\n * @param item - The document to evaluate.\n * @returns A CSS class name string, or `undefined` when no special state applies.\n */\n override getItemStateCssClass(item: ClipperDocumentInfo): string | undefined {\n if (item.isExpired) return 'expired-bg';\n return undefined;\n }\n\n /**\n * Returns the tooltip text explaining the item's current validity state.\n * @param item - The document to evaluate.\n * @returns A human-readable state description, or an empty string when no special state applies.\n */\n override getItemStateTooltip(item: ClipperDocumentInfo): string {\n if (item.isExpired) return 'Non più vigente';\n return '';\n }\n}\n","<div class=\"clipper-references-fixed\">\n <div class=\"dialog-header\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\n <div fxFlex=\"*\">\n <div mat-dialog-title>{{title}} </div>\n </div>\n <div fxLayoutAlign=\"end\">\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\n (click)=\"close()\" class=\"dialog-close\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\n (!filterPane.opened || filterPaneClosed()))) {\n <div class=\"dialog-toolbar\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <div fxFlex=\"*\">\n @if (dialogData.mode === 1) {\n <mat-slide-toggle [checked]=\"filterParams.excludeTextReferences === true\"\n (change)=\"filterParams.excludeTextReferences = $event.checked; fetch(true)\">\n Mostra solo se citati nelle note\n </mat-slide-toggle>\n } @else if (dialogData.mode == 2) {\n <mat-slide-toggle [checked]=\"filterParams.excludeNotesReferences === true\"\n (change)=\"filterParams.excludeNotesReferences = $event.checked; fetch(true)\">\n Mostra solo se citano nel testo il documento\n </mat-slide-toggle>\n }\n </div>\n <div fxLayoutAlign=\"end\">\n @if (selection?.hasValue()) {\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\n [disabled]=\"!snapshot.total\" [matBadge]=\"selection?.all?.length\">\n <mat-icon>checklist</mat-icon>\n </button>\n }\n <mat-menu #menuSelections=\"matMenu\">\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [useSelections]=\"true\"\n [isReadable]=\"false\" [isReference]=\"true\" [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\n </clipper-document-menu>\n </mat-menu>\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed())) {\n <div fxFlexAlign=\"center\">\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\n (click)=\"toggleFilterPane()\">\n <mat-icon>right_panel_open</mat-icon>\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n</div>\n<mat-dialog-content id=\"clipper-references-scrollable\">\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop()\">\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\n @if (filterBusy()) {\n <div class=\"overlay\"></div>\n }\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"6px\">\n @if (filterBusy()) {\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\n </mat-progress-bar>\n }\n </div>\n <div fxFlex=\"78px\" class=\"title-container-with-loader\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <div class=\"title\">Affina ricerca</div>\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\n <button mat-icon-button (click)=\"toggleFilterPane()\"\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\n </div>\n </div>\n </div>\n <div fxFlex=\"*\" class=\"scroll-hidden\" style=\"padding: 0 5px;\">\n <clipper-search-facets #facets [handleTooManyResults]=\"dialogData.canHandleTooManyResults\" ></clipper-search-facets>\n </div>\n </div>\n </mat-drawer>\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\n @if (!snapshot.total) {\n <div class=\"message-container\">\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\n </div>\n } @else {\n <div>\n @for (item of snapshot.items; track $index; let i = $index) {\n @if (item.group) {\n <div class=\"items-group-title\">\n <div [class.group-spaced]=\"i > 0\">{{item.group}}</div>\n </div>\n }\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\" [isReadable]=\"false\"\n [actions]=\"contextMenu\"></clipper-search-result-item>\n }\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\n <ng-template matMenuContent let-item=\"item\">\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\"\n [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\n </clipper-document-menu>\n </ng-template>\n </mat-menu>\n </div>\n }\n </div>\n <!-- footer -->\n @if ((snapshot?.total ?? 0) > 0) {\n <div class=\"items-footer\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between center\" fxFill>\n <!-- legend -->\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\n <div class=\"legend expired-bg \"></div>\n non più vigente\n </div>\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [class.wide]=\"filterPane?.opened\">\n <div fxLayout=\"row\">\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\"\n (page)=\"fetchMore($event)\">\n </mat-paginator>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </mat-drawer-container>\n</mat-dialog-content>"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DA,IAAa,6BAAb,MAAa,mCAAmC,2BAA0B;CAUxE,cAAA;EACE,MAAK;EAVE,KAAA,aAAa,UAAqB,cAAa,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;EAEvC,KAAA,YAAY,OAAO,YAAwC;EACzD,KAAA,aAA0C,OAAO,eAAe,KAAK,EAAE,MAAM,2BAA2B,aAAY;EAGpH,KAAA,OAAoC,KAAK,eAAe;EACnE,KAAA,aAAa;EAInB,IAAI,KAAK,YAAY;GACnB,QAAQ,KAAK,WAAW,MAAxB;IACE,KAAK,2BAA2B;KAC9B,KAAK,QAAQ;KACb;IACF,KAAK,2BAA2B;KAC9B,KAAK,QAAQ;KACb;IACF,KAAK,2BAA2B;KAC9B,KAAK,QAAQ;KACb;IACF,KAAK,2BAA2B;KAC9B,KAAK,QAAQ;KACb;IACF,KAAK,2BAA2B,OAC9B,KAAK,QAAQ;GAEjB;GACA,IAAI,KAAK,WAAW,aAClB,KAAK,SAAS,QAAQ,KAAK,WAAW;GAGxC,KAAK,WAAW,KAAK,eAAe,mBAAkB,KAAM;IAAE,cAAc,IAAI,oBAAmB;IAAI,UAAU;GAAI;GACrH,IACE,KAAK,aAAa,SAAS,KAAK,WAAW,QAC3C,KAAK,aAAa,OAAO,KAAK,WAAW,cACzC,KAAK,aAAa,WAAW,KAAK,WAAW,QAC7C;IACA,KAAK,eAAe,IAAI,oBAAmB;IAC3C,KAAK,aAAa,OAAO,KAAK,WAAW;IACzC,KAAK,aAAa,QAAQ,KAAK,WAAW;IAC1C,KAAK,aAAa,SAAS,KAAK,WAAW;IAC3C,KAAK,aAAa,KAAK,KAAK,WAAW;IACvC,KAAK,aAAa,kBAAkB,KAAK,WAAW,SAAS,2BAA2B;IACxF,KAAK,aAAa,qBAAqB,KAAK,WAAW,SAAS,2BAA2B;IAC3F,KAAK,eAAe,mBAAmB,IAAI,KAAK,QAAQ;GAC1D;EACF;EAGA,KAAK,YAAY,IAAI,gBAA6C,MAAM,YAAY;EAGpF,KAAK,mBACF,QAAQ;GACP,YAAY;GACZ,YAAY;GACZ,YAAY;GACZ,YAAY;GACZ,YAAY;EACb,CAAA,CAAC,CACD,KAAK,mBAAmB,KAAK,UAAU,CAAC,CAAC,CACzC,WAAW,WAAe;GACzB,IAAI,CAAC,KAAK,YAAY;GACtB,KAAK,MAAM,SAAS,OAAO,KAAK,OAAO,WAAW,GAChD,IAAI,OAAO,YAAY,QACrB,KAAK,2BAA0B;EAGrC,CAAC;EAGH,sBAAqB;GACnB,KAAK,aAAa;GAClB,KAAK,2BAA0B;GAC/B,MAAM,aAAa,KAAK,WAAU;GAClC,IAAI,YACF,WAAW,aACR,KAAK,mBAAmB,KAAK,UAAU,CAAC,CAAC,CACzC,WAAU,WAAS;IAClB,IAAI,WAAW,SAAS,QACtB,KAAK,sBAAsB,IAAI,MAAM;GAEzC,CAAC;GAEL,MAAM,SAAS,KAAK,OAAM;GAC1B,IAAI,QACF,OAAO,QACJ,WAAW,UAAsC;IAChD,KAAK,SAAS,SAAS;IACvB,KAAK,MAAM,IAAI;GACjB,CAAC;GAEL,KAAK,MAAM,IAAI;GACf,KAAK,cAAa;GAClB,KAAK,eAAe,aAAY;EAClC,CAAC;CACH;CAMU,mBAAgB;EACxB,KAAK,iBAAiB,IAAI,CAAC,KAAK,iBAAgB,CAAE;EAClD,KAAK,WAAU,CAAE,EAAE,OAAM;CAC3B;CAOQ,6BAA0B;EAChC,MAAM,aAAa,KAAK,WAAU;EAClC,IAAI,YAAY;GACd,IAAI,KAAK,mBAAmB,UAAU,YAAY,MAAM,KACtD,KAAK,mBAAmB,UAAU,YAAY,KAAK,KACnD,KAAK,mBAAmB,UAAU,YAAY,MAAM,GAAG;IACvD,IAAI,WAAW,QACb,WAAW,MAAK;IAElB,WAAW,OAAO;IAClB,WAAW,eAAe;IAC1B,KAAK,sBAAsB,IAAI,WAAW,MAAM;GAClD,OAAO;IACL,IAAI,CAAC,KAAK,UAAS,GACjB,WAAW,MAAK;SACX,IAAI,CAAC,WAAW,UAAU,CAAC,KAAK,iBAAgB,GACrD,WAAW,KAAI;SACV,IAAI,WAAW,UAAU,KAAK,iBAAgB,GACnD,WAAW,MAAK;IAElB,WAAW,OAAO;IAClB,WAAW,eAAe;IAC1B,KAAK,sBAAsB,IAAI,KAAK;GACtC;EACF;CACF;CAMA,QAAK;EACH,KAAK,UAAU,MAAK;CACtB;CAQA,OAAO,MAA0B;EAC/B,KAAK,YAAY,OAAO,CAAC,IAAI,IAAI,KAAK,WAAW,GAAG;CACtD;CASQ,aAAa,YAAqB,OAAK;EAC7C,MAAM,YAAY,YAAY,MAAM,KAAK,YAAY;EACrD,UAAU,QAAQ;EAClB,UAAU,kBACR,UAAU,SAAS,2BAA2B;EAChD,UAAU,qBACR,UAAU,SAAS,2BAA2B;EAEhD,IAAI,WAAW;GACb,UAAU,QAAQ;GAClB,KAAK,aAAa,QAAQ;EAC5B;EAGA,IAAI,KAAK,SAAS,QAAQ,UAAU;GAClC,UAAU,WAAW,KAAK,SAAS,QAAQ;GAC3C,UAAU,SAAS,KAAK,SAAS,QAAQ;GACzC,UAAU,OAAO,KAAK,SAAS,QAAQ,SAAS,YAAW;EAC7D;EACA,IAAI,KAAK,SAAS,QAAQ,QACxB,UAAU,SAAS,KAAK,SAAS,QAAQ;EAE3C,IAAI,KAAK,SAAS,QAAQ,MACxB,UAAU,OAAO,KAAK,SAAS,QAAQ;EAEzC,IAAI,KAAK,SAAS,QAAQ,QACxB,UAAU,SAAS,KAAK,SAAS,QAAQ;EAE3C,OAAO;CACT;CAOQ,yBAAyB,QAA2B;EAC1D,OAAO;GACL,YAAY,OAAO;GACnB,MAAM,OAAO;GACb,QAAQ,OAAO;GACf,QAAQ,OAAO;GACf,QAAQ,OAAO;GACf,OAAO,OAAO,OAAO,SAAQ,KAAM;GACnC,MAAM,OAAO;GACb,uBAAuB,OAAO;GAC9B,wBAAwB,OAAO;GAC/B,oBAAoB,OAAO;GAC3B,iBAAiB,OAAO;GACxB,OAAO;GACP,OAAO,OAAO,SAAS;EACxB;CACH;CAMA,MAAM,YAAqB,OAAK;EAC9B,IAAI,CAAC,KAAK,eAAe,SAAQ,GAAI;EACrC,KAAK,cAAc,KAAK,qBAAqB;EAC7C,MAAM,eAAe,KAAK,aAAa,SAAS;EAChD,IAAI,cACF,KAAK,eAAe,UAAU,WAAW,KAAK,yBAAyB,YAAY,CAAC,CAAC,CAClF,KAAK,eAAe,KAAK,cAAc,UAAS,CAAE,CAAC,CAAC,CACpD,WAAU,MAAI;GACb,IAAI,CAAC,EAAE,SAAS,KAAK,cAAc,MAAM,EAAE,OAAO;QAC7C;IACH,KAAK,eAAe,EAAE,OAAO,SAAS;IAGtC,IAAI,KAAK,SAAS,QAAQ,GACxB;SAAI,WAEF,KAAK,YAAY,YAAY;IAAA,OAE/B,KAAK,WAAU;IAGjB,IAAI,WAAW;KACb,MAAM,YAAY,KAAK,UAAS;KAChC,IAAI,WAAW,UAAU,YAAY;IACvC;IAEA,KAAK,OAAO,CAAC;GACf;EACF,CAAC;CAEP;CAMA,UAAU,GAAY;EACpB,MAAM,QAAQ,EAAE,aAAa,KAAK,aAAa,SAAS;EACxD,KAAK,aAAa,QAAQ;EAC1B,KAAK,MAAK;CACZ;CAMA,YAAY,QAA2B;EACrC,IAAI,CAAC,KAAK,eAAe,SAAQ,KAAM,CAAC,QAAQ;EAChD,IAAI,CAAC,KAAK,SAAS,UAAU,KAAK,SAAS,QAAQ,eAAe;GAChE,KAAK,WAAW,IAAI,IAAI;GACxB,KAAK,eAAe,UAAU,iBAAiB,KAAK,yBAAyB,MAAM,CAAC,CAAC,CAClF,UAAU;IACT,OAAO,MAA2C;KAChD,IAAI,EAAE,SAAS;MACb,IAAI,aAAa,EAAE,MAAM,QAAQ,UAAU,KAAK;MAChD,IAAI,EAAE,MAAM,QAAQ;OAClB,MAAM,SAAS,KAAK,OAAM;OAC1B,QAAQ,OAAO,EAAE,MAAM,QAAQ,EAAE,MAAM,QAAQ;OAC/C,IAAI,UAAU,KAAK,UAAU;QAC3B,YAAY,OAAO,UAAS;QAC5B,KAAK,SAAS,SAAS,OAAO,KAAI;QAClC,KAAK,SAAS,OAAO,qBAAqB,KAAK,UAAU,SAAS,MAAM;OAC1E;MACF;MACA,KAAK,UAAU,IAAI,SAAS;MAC5B,KAAK,2BAA0B;KACjC;IACF;IACA,gBAAe;KACb,KAAK,WAAW,IAAI,KAAK;IAC3B;GACD,CAAA;EACL;CACF;CAKU,aAAU;EAClB,KAAK,UAAU,IAAI,KAAK;EACxB,KAAK,OAAM,CAAE,EAAE,MAAK;EACpB,KAAK,WAAU,CAAE,CAAC,MAAK;EACvB,KAAK,iBAAiB,IAAI,KAAK;CACjC;CAIA,gBAAa;EACX,IAAI,KAAK,SAAS,QAAQ;GACxB,KAAK,OAAM,CAAE,CAAC,QAAQ,KAAK,SAAS,MAAM;GAC1C,KAAK,2BAA0B;EACjC;CACF;CAMS,KAAK,YAAmB;EAC/B,IAAI,YAAY,KAAK,UAAU,MAAM,EAAE,WAAU,CAAE;CACrD;CAOS,qBAAqB,MAAyB;EACrD,IAAI,KAAK,WAAW,OAAO;CAE7B;CAOS,oBAAoB,MAAyB;EACpD,IAAI,KAAK,WAAW,OAAO;EAC3B,OAAO;CACT;CAzVW;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAA0B,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAA1B;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAA0B,cAAA;GAAA,UAAA;GAAA,MAAA,EAAA,YAAA,EAAA,QAxBrB,YAAY,aAAY,EAAE,EAAA;GAAA,aAAA,CAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WAAA,CAAA,YAAA;IAAA,aAAA;IAAA,UAAA;GAAA,CAAA;GAAA,iBAAA;GAAA,UAAA;GAAA,UCtC5C;GAsIqB,QAAA,CAAA,w3dAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MD1FjB;IAAgB;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAChB;KAAc,UAAA;KAAA,QAAA,CAAA,IAAA;KAAA,UAAA,CAAA,gBAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACd;IAAe;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,UAAA,CAAA,aAAA,WAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACf;IAAgB;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,UAAA,CAAA,YAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAChB;IAAa;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,UAAA,CAAA,SAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACb;IAAiB;IAAA;KAAA,MAAA;KAAA,MACjB;IAAoB;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,UAAA,cAAA;KAAA,UAAA,CAAA,gBAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACpB;IAAa;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,UAAA,OAAA;KAAA,UAAA,CAAA,SAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,UAAA,CAAA,gBAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACb;IAAc;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACd;IAAkB;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,MAAA;KAAA,UAAA,CAAA,cAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAClB;KAAgB,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAChB;IAAgB;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,UAAA,CAAA,WAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA,CAAA,YAAA,aAAA;KAAA,SAAA,CAAA,eAAA;KAAA,UAAA,CAAA,oBAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAChB;IAAoB;IAAA;KAAA,MAAA;KAAA,MAAA,IAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,cAAA;KAAA,UAAA,CAAA,gBAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACpB;KAA4B,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAC5B;KAA4B,UAAA;KAAA,QAAA,CAAA,sBAAA;KAAA,SAAA,CAAA,SAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAC5B;KAAgC,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,YAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;EAAA,CAAA;CAAA;;AAGvB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA0B,YAAA,CAAA;EAzBtC,MAAA;EACO,MAAA,CAAA;GAAA,MAAA,EAAE,QAAQ,YAAY,aAAY,EAAE;GAAE,YAGhC;GAAI,iBACC,wBAAwB;GAAM,SACtC;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD;GAAA,UAAA;GAAA,QAAA,CAAA,w3dAAA;EAAA,CAAA;CAG0C,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA,EAAA,YAAA,CAAA;EAAA,MAAA,GAAA;EAAA,MAAA,CAAA,cAAY,EAAA,UAAA,KAAA,CAAA;CAAA,CAAA,EAAA;AAAA,CAAA"}
|