@arsedizioni/ars-utils 22.5.36 → 22.5.38
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/README.md +179 -179
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +174 -151
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.date.mjs +16 -5
- package/fesm2022/arsedizioni-ars-utils-core.date.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.mjs +43 -7
- package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +0 -6
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +73 -3
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +91 -30
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +97 -42
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +24 -10
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.files.mjs.map +1 -1
- package/package.json +1 -1
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +79 -23
- package/types/arsedizioni-ars-utils-core.d.ts +46 -10
- package/types/arsedizioni-ars-utils-ui.controls.d.ts +34 -1
- package/types/arsedizioni-ars-utils-ui.dialogs.auth.d.ts +116 -6
- package/types/arsedizioni-ars-utils-ui.dialogs.prompt.d.ts +93 -11
- package/types/arsedizioni-ars-utils-ui.dialogs.select.d.ts +29 -1
|
@@ -17,6 +17,7 @@ import * as i14 from '@angular/material/chips';
|
|
|
17
17
|
import { MatChipsModule } from '@angular/material/chips';
|
|
18
18
|
import * as i12 from '@angular/material/datepicker';
|
|
19
19
|
import { MatDatepickerModule, MatCalendar } from '@angular/material/datepicker';
|
|
20
|
+
import { MatDatepickerParseErrorFixDirective, ChipsSelectorComponent, ButtonSelectorComponent, ButtonToggleComponent, CalendarEmptyHeader } from '@arsedizioni/ars-utils/ui.controls';
|
|
20
21
|
import * as i4$1 from '@angular/material/divider';
|
|
21
22
|
import { MatDividerModule } from '@angular/material/divider';
|
|
22
23
|
import * as i7 from '@angular/material/expansion';
|
|
@@ -42,10 +43,9 @@ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
|
42
43
|
import * as i3 from '@angular/material/tooltip';
|
|
43
44
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
44
45
|
import { ClipperService, ClipperModel, ClipperUtils, ClipperSearchFacetsSnapshot, ClipperFacet, ClipperMessages, ClipperQueryReferencesMode, ClipperModule, ClipperSelectionMode, ClipperSearchResult, ClipperSearchParams, ClipperSort, ClipperSearchUtils, ClipperQueryDocumentFlags, ClipperSources, ClipperDocumentChangeReasons, ClipperSectors, ClipperRegions, ClipperAuthors, ClipperSectorTypes } from '@arsedizioni/ars-utils/clipper.common';
|
|
45
|
-
import { BroadcastService, SystemUtils, ThemeService, ScreenService, DateFormat, FormatPipe, DateInterval, SelectableModel } from '@arsedizioni/ars-utils/core';
|
|
46
|
+
import { BroadcastService, SystemUtils, ThemeService, ScreenService, DateFormat, FormatPipe, DtoUtils, DateInterval, SelectableModel } from '@arsedizioni/ars-utils/core';
|
|
46
47
|
import * as i1 from '@arsedizioni/ars-utils/ui';
|
|
47
48
|
import { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';
|
|
48
|
-
import { ChipsSelectorComponent, ButtonSelectorComponent, ButtonToggleComponent, CalendarEmptyHeader } from '@arsedizioni/ars-utils/ui.controls';
|
|
49
49
|
import { switchMap, EMPTY, finalize, Subject } from 'rxjs';
|
|
50
50
|
import { debounceTime, finalize as finalize$1 } from 'rxjs/operators';
|
|
51
51
|
import { startOfToday, startOfDay, subDays, endOfDay, startOfMonth, endOfMonth } from 'date-fns';
|
|
@@ -1756,42 +1756,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImpor
|
|
|
1756
1756
|
}], ctorParameters: () => [], propDecorators: { parent: [{ type: i0.Input, args: [{ isSignal: true, alias: "parent", required: true }] }], item: [{ type: i0.Input, args: [{ isSignal: true, alias: "item", required: true }] }, { type: i0.Output, args: ["itemChange"] }], actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: true }] }], tileNoPictureUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "tileNoPictureUrl", required: false }] }], tilePictureUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "tilePictureUrl", required: false }] }], isSelectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSelectable", required: false }] }], isReadable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isReadable", required: false }] }], isReadableModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "isReadableModel", required: false }] }], displayModifiedTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayModifiedTitle", required: false }] }], displayModelName: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayModelName", required: false }] }], displayDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayDate", required: false }] }], displayMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayMode", required: false }] }] } });
|
|
1757
1757
|
|
|
1758
1758
|
/**
|
|
1759
|
-
*
|
|
1760
|
-
*
|
|
1759
|
+
* Revives a range bound coming from a saved filter, whose data is stored as JSON and
|
|
1760
|
+
* therefore hands the dates back as ISO strings. The form model only ever holds `Date`.
|
|
1761
|
+
* @param value - The raw bound read from the search parameters.
|
|
1762
|
+
* @returns The bound as a `Date`, or `null` when it is absent or unparseable.
|
|
1761
1763
|
*/
|
|
1762
|
-
function
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
sectors: null,
|
|
1768
|
-
authors: null,
|
|
1769
|
-
channels: null,
|
|
1770
|
-
number: '',
|
|
1771
|
-
year: null,
|
|
1772
|
-
from: null,
|
|
1773
|
-
to: null,
|
|
1774
|
-
text: '',
|
|
1775
|
-
titleOnly: false,
|
|
1776
|
-
showNotAbrogatedDocumentsOnly: false,
|
|
1777
|
-
showCommentedDocumentsOnly: false,
|
|
1778
|
-
showUnreadDocumentsOnly: false,
|
|
1779
|
-
sourceNumber: '',
|
|
1780
|
-
sourceYear: null,
|
|
1781
|
-
sourceFrom: null,
|
|
1782
|
-
sourceTo: null,
|
|
1783
|
-
source: null,
|
|
1784
|
-
author: null,
|
|
1785
|
-
type: null,
|
|
1786
|
-
changedNumber: '',
|
|
1787
|
-
changedYear: null,
|
|
1788
|
-
changedTitle: '',
|
|
1789
|
-
modifierNumber: '',
|
|
1790
|
-
modifierYear: null,
|
|
1791
|
-
modifierTitle: '',
|
|
1792
|
-
changeReason: null,
|
|
1793
|
-
};
|
|
1764
|
+
function toDate(value) {
|
|
1765
|
+
if (!value)
|
|
1766
|
+
return null;
|
|
1767
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
1768
|
+
return isNaN(date.getTime()) ? null : date;
|
|
1794
1769
|
}
|
|
1770
|
+
/** Neutral form model: it declares every field the form owns and its empty value. */
|
|
1771
|
+
const _EMPTY_ITEM$1 = {
|
|
1772
|
+
modules: null,
|
|
1773
|
+
tags: null,
|
|
1774
|
+
topics: null,
|
|
1775
|
+
sectors: null,
|
|
1776
|
+
authors: null,
|
|
1777
|
+
channels: null,
|
|
1778
|
+
number: '',
|
|
1779
|
+
year: null,
|
|
1780
|
+
from: null,
|
|
1781
|
+
to: null,
|
|
1782
|
+
text: '',
|
|
1783
|
+
titleOnly: false,
|
|
1784
|
+
showNotAbrogatedDocumentsOnly: false,
|
|
1785
|
+
showCommentedDocumentsOnly: false,
|
|
1786
|
+
showUnreadDocumentsOnly: false,
|
|
1787
|
+
sourceNumber: '',
|
|
1788
|
+
sourceYear: null,
|
|
1789
|
+
sourceFrom: null,
|
|
1790
|
+
sourceTo: null,
|
|
1791
|
+
source: null,
|
|
1792
|
+
author: null,
|
|
1793
|
+
type: null,
|
|
1794
|
+
changedNumber: '',
|
|
1795
|
+
changedYear: null,
|
|
1796
|
+
changedTitle: '',
|
|
1797
|
+
modifierNumber: '',
|
|
1798
|
+
modifierYear: null,
|
|
1799
|
+
modifierTitle: '',
|
|
1800
|
+
changeReason: null,
|
|
1801
|
+
};
|
|
1795
1802
|
class ClipperBrowserComponent extends ClipperSearchResultManager {
|
|
1796
1803
|
/**
|
|
1797
1804
|
* Error text for a date range: whichever end is in error speaks for the pair.
|
|
@@ -2005,10 +2012,10 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
|
|
|
2005
2012
|
/**
|
|
2006
2013
|
* Model backing the filter-pane signal form. This is the single source of truth
|
|
2007
2014
|
* for every filter value bound in the template; `filterParams` only carries the
|
|
2008
|
-
* assembled query DTO (see
|
|
2009
|
-
* false / null-array — never undefined, so every child field exists.
|
|
2015
|
+
* assembled query DTO (see toForm/toPayload and loadFilter). Empty values are
|
|
2016
|
+
* '' / null / false / null-array — never undefined, so every child field exists.
|
|
2010
2017
|
*/
|
|
2011
|
-
this.filterModel = signal(
|
|
2018
|
+
this.filterModel = signal(DtoUtils.toForm(_EMPTY_ITEM$1), /* @ts-ignore */
|
|
2012
2019
|
...(ngDevMode ? [{ debugName: "filterModel" }] : /* istanbul ignore next */ []));
|
|
2013
2020
|
/**
|
|
2014
2021
|
* Signal form for the filter pane. The four year fields accept values from 1750
|
|
@@ -2476,34 +2483,8 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
|
|
|
2476
2483
|
this.patchFilter({ modules: filter.modules ?? null });
|
|
2477
2484
|
setTimeout(() => {
|
|
2478
2485
|
this.filterParams.topic = filter.topic;
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
authors: filter.authors ?? null,
|
|
2482
|
-
number: filter.number ?? '',
|
|
2483
|
-
tags: filter.tags ?? null,
|
|
2484
|
-
year: filter.year ?? null,
|
|
2485
|
-
from: (filter.fromDate && filter.toDate) ? filter.fromDate : null,
|
|
2486
|
-
to: (filter.fromDate && filter.toDate) ? filter.toDate : null,
|
|
2487
|
-
text: filter.text ?? '',
|
|
2488
|
-
titleOnly: filter.titleOnly === true,
|
|
2489
|
-
showCommentedDocumentsOnly: filter.showCommentedDocumentsOnly === true,
|
|
2490
|
-
showNotAbrogatedDocumentsOnly: filter.showNotAbrogatedDocumentsOnly === true,
|
|
2491
|
-
showUnreadDocumentsOnly: filter.showUnreadDocumentsOnly === true,
|
|
2492
|
-
sourceNumber: filter.sourceNumber ?? '',
|
|
2493
|
-
sourceYear: filter.sourceYear ?? null,
|
|
2494
|
-
sourceFrom: (filter.sourceFromDate && filter.sourceToDate) ? filter.sourceFromDate : null,
|
|
2495
|
-
sourceTo: (filter.sourceFromDate && filter.sourceToDate) ? filter.sourceToDate : null,
|
|
2496
|
-
source: filter.source ?? null,
|
|
2497
|
-
type: filter.type ?? null,
|
|
2498
|
-
topics: filter.topics ?? null,
|
|
2499
|
-
changeReason: filter.changeReason ?? null,
|
|
2500
|
-
changedNumber: filter.changedNumber ?? '',
|
|
2501
|
-
changedTitle: filter.changedTitle ?? '',
|
|
2502
|
-
changedYear: filter.changedYear ?? null,
|
|
2503
|
-
modifierNumber: filter.modifierNumber ?? '',
|
|
2504
|
-
modifierTitle: filter.modifierTitle ?? '',
|
|
2505
|
-
modifierYear: filter.modifierYear ?? null,
|
|
2506
|
-
});
|
|
2486
|
+
// The channels are a per-account preference, not part of the saved filter.
|
|
2487
|
+
this.filterModel.set({ ...this.toForm(filter), channels: this.filterModel().channels });
|
|
2507
2488
|
// Show expansion panels
|
|
2508
2489
|
const m = this.filterModel();
|
|
2509
2490
|
if (m.sourceNumber !== '' ||
|
|
@@ -2540,7 +2521,7 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
|
|
|
2540
2521
|
const module = this.modules().find(x => x.value === ClipperModule.NormativaVigente);
|
|
2541
2522
|
const channels = this.filterModel().channels;
|
|
2542
2523
|
this.filterModel.set({
|
|
2543
|
-
...
|
|
2524
|
+
...DtoUtils.toForm(_EMPTY_ITEM$1),
|
|
2544
2525
|
channels,
|
|
2545
2526
|
modules: module ? [module] : null,
|
|
2546
2527
|
});
|
|
@@ -2549,78 +2530,93 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
|
|
|
2549
2530
|
this.filterParams.searchName = undefined;
|
|
2550
2531
|
}
|
|
2551
2532
|
/**
|
|
2552
|
-
*
|
|
2553
|
-
*
|
|
2533
|
+
* Builds the filter form model from a set of search parameters.
|
|
2534
|
+
*
|
|
2535
|
+
* Ad-hoc because the two publication ranges do not map field-to-field: the DTO keeps
|
|
2536
|
+
* them as `fromDate`/`toDate`, and a range is only restored when both of its bounds
|
|
2537
|
+
* are set, exactly as the saved filters were written.
|
|
2538
|
+
*
|
|
2539
|
+
* @param dto - The search parameters to read: the live `filterParams` on a state
|
|
2540
|
+
* restore, or the deserialized data of a saved filter.
|
|
2541
|
+
* @returns A fresh form model; the caller decides what to keep of the current one.
|
|
2542
|
+
*/
|
|
2543
|
+
toForm(dto) {
|
|
2544
|
+
const model = DtoUtils.toForm(_EMPTY_ITEM$1, dto);
|
|
2545
|
+
const from = toDate(dto.fromDate);
|
|
2546
|
+
const to = toDate(dto.toDate);
|
|
2547
|
+
const sourceFrom = toDate(dto.sourceFromDate);
|
|
2548
|
+
const sourceTo = toDate(dto.sourceToDate);
|
|
2549
|
+
model.from = from && to ? from : null;
|
|
2550
|
+
model.to = from && to ? to : null;
|
|
2551
|
+
model.sourceFrom = sourceFrom && sourceTo ? sourceFrom : null;
|
|
2552
|
+
model.sourceTo = sourceFrom && sourceTo ? sourceTo : null;
|
|
2553
|
+
return model;
|
|
2554
|
+
}
|
|
2555
|
+
/**
|
|
2556
|
+
* Builds the search payload out of the filter model, normalizing empty values back to
|
|
2557
|
+
* the undefined-based convention of {@link ClipperSearchParams}.
|
|
2558
|
+
*
|
|
2559
|
+
* Ad-hoc for two reasons. The two publication ranges are not payload fields: they
|
|
2560
|
+
* reach the DTO as `fromDate`/`toDate` through {@link loadFilter} and
|
|
2561
|
+
* {@link prepareFetch}. And every key has to be listed, `undefined` included, because
|
|
2562
|
+
* `filterParams` is a long-lived object — reused across searches and serialized into
|
|
2563
|
+
* saved filters — so a field the user has just emptied must be overwritten, not
|
|
2564
|
+
* merely left out of the copy the way {@link DtoUtils.toPayload} does.
|
|
2565
|
+
*
|
|
2566
|
+
* @returns The subset of the search parameters the filter pane owns.
|
|
2554
2567
|
*/
|
|
2555
|
-
|
|
2556
|
-
const
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2568
|
+
toPayload() {
|
|
2569
|
+
const { from, to, sourceFrom, sourceTo, ...rest } = this.filterModel();
|
|
2570
|
+
const dto = DtoUtils.toPayload(rest);
|
|
2571
|
+
return {
|
|
2572
|
+
modules: dto.modules,
|
|
2573
|
+
tags: dto.tags,
|
|
2574
|
+
topics: dto.topics,
|
|
2575
|
+
sectors: dto.sectors,
|
|
2576
|
+
authors: dto.authors,
|
|
2577
|
+
channels: dto.channels,
|
|
2578
|
+
number: dto.number,
|
|
2579
|
+
year: dto.year,
|
|
2580
|
+
text: dto.text,
|
|
2581
|
+
titleOnly: dto.titleOnly,
|
|
2582
|
+
showNotAbrogatedDocumentsOnly: dto.showNotAbrogatedDocumentsOnly,
|
|
2583
|
+
showCommentedDocumentsOnly: dto.showCommentedDocumentsOnly,
|
|
2584
|
+
showUnreadDocumentsOnly: dto.showUnreadDocumentsOnly,
|
|
2585
|
+
sourceNumber: dto.sourceNumber,
|
|
2586
|
+
sourceYear: dto.sourceYear,
|
|
2587
|
+
source: dto.source,
|
|
2588
|
+
author: dto.author,
|
|
2589
|
+
type: dto.type,
|
|
2590
|
+
changedNumber: dto.changedNumber,
|
|
2591
|
+
changedYear: dto.changedYear,
|
|
2592
|
+
changedTitle: dto.changedTitle,
|
|
2593
|
+
modifierNumber: dto.modifierNumber,
|
|
2594
|
+
modifierYear: dto.modifierYear,
|
|
2595
|
+
modifierTitle: dto.modifierTitle,
|
|
2596
|
+
changeReason: dto.changeReason,
|
|
2597
|
+
};
|
|
2582
2598
|
}
|
|
2583
2599
|
/**
|
|
2584
2600
|
* Commits the form model to filterParams before the component state is serialised.
|
|
2585
2601
|
*/
|
|
2586
2602
|
onStateSaving() {
|
|
2587
|
-
this.
|
|
2603
|
+
Object.assign(this.filterParams, this.toPayload());
|
|
2588
2604
|
}
|
|
2589
2605
|
/**
|
|
2590
2606
|
* Rebuilds the form model from filterParams after a state restore.
|
|
2591
|
-
* The publication intervals are intentionally not rebuilt
|
|
2592
|
-
* matching the historical behavior where the range
|
|
2607
|
+
* The publication intervals are intentionally not rebuilt here — filterParams carries
|
|
2608
|
+
* no fromDate/toDate at this point — matching the historical behavior where the range
|
|
2609
|
+
* inputs were not restored.
|
|
2593
2610
|
*/
|
|
2594
2611
|
onStateRestored() {
|
|
2595
|
-
const
|
|
2596
|
-
this.filterModel.
|
|
2597
|
-
...
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
channels: p.channels ?? null,
|
|
2604
|
-
number: p.number ?? '',
|
|
2605
|
-
year: p.year ?? null,
|
|
2606
|
-
text: p.text ?? '',
|
|
2607
|
-
titleOnly: p.titleOnly === true,
|
|
2608
|
-
showNotAbrogatedDocumentsOnly: p.showNotAbrogatedDocumentsOnly === true,
|
|
2609
|
-
showCommentedDocumentsOnly: p.showCommentedDocumentsOnly === true,
|
|
2610
|
-
showUnreadDocumentsOnly: p.showUnreadDocumentsOnly === true,
|
|
2611
|
-
sourceNumber: p.sourceNumber ?? '',
|
|
2612
|
-
sourceYear: p.sourceYear ?? null,
|
|
2613
|
-
source: p.source ?? null,
|
|
2614
|
-
author: p.author ?? null,
|
|
2615
|
-
type: p.type ?? null,
|
|
2616
|
-
changedNumber: p.changedNumber ?? '',
|
|
2617
|
-
changedYear: p.changedYear ?? null,
|
|
2618
|
-
changedTitle: p.changedTitle ?? '',
|
|
2619
|
-
modifierNumber: p.modifierNumber ?? '',
|
|
2620
|
-
modifierYear: p.modifierYear ?? null,
|
|
2621
|
-
modifierTitle: p.modifierTitle ?? '',
|
|
2622
|
-
changeReason: p.changeReason ?? null,
|
|
2623
|
-
}));
|
|
2612
|
+
const current = this.filterModel();
|
|
2613
|
+
this.filterModel.set({
|
|
2614
|
+
...this.toForm(this.filterParams),
|
|
2615
|
+
from: current.from,
|
|
2616
|
+
to: current.to,
|
|
2617
|
+
sourceFrom: current.sourceFrom,
|
|
2618
|
+
sourceTo: current.sourceTo,
|
|
2619
|
+
});
|
|
2624
2620
|
}
|
|
2625
2621
|
/**
|
|
2626
2622
|
* Builds a DateInterval for the publication range of the current model.
|
|
@@ -2637,7 +2633,7 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
|
|
|
2637
2633
|
* Load selected filter
|
|
2638
2634
|
*/
|
|
2639
2635
|
loadFilter() {
|
|
2640
|
-
this.
|
|
2636
|
+
Object.assign(this.filterParams, this.toPayload());
|
|
2641
2637
|
if (this.filterParams.year && this.filterParams.year > 0) {
|
|
2642
2638
|
const year = this.filterParams.year;
|
|
2643
2639
|
this.filterParams.fromDate = new Date(year, 0, 1, 2);
|
|
@@ -2893,7 +2889,7 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
|
|
|
2893
2889
|
* @returns The resolved {@link ClipperSearchParams} ready to be sent to the API.
|
|
2894
2890
|
*/
|
|
2895
2891
|
prepareFetch(newSearch = false) {
|
|
2896
|
-
this.
|
|
2892
|
+
Object.assign(this.filterParams, this.toPayload());
|
|
2897
2893
|
this.filterParams.fromDate = this.modelInterval().fromAsDate;
|
|
2898
2894
|
this.filterParams.toDate = this.modelInterval().toAsDate;
|
|
2899
2895
|
this.filterParams.sourceFromDate = this.modelInterval(true).fromAsDate;
|
|
@@ -3216,12 +3212,12 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
|
|
|
3216
3212
|
this.patchFilter({ topics: [] });
|
|
3217
3213
|
}
|
|
3218
3214
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ClipperBrowserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3219
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.3", type: ClipperBrowserComponent, isStandalone: true, selector: "clipper-browser", inputs: { showChannels: { classPropertyName: "showChannels", publicName: "showChannels", isSignal: true, isRequired: false, transformFunction: null }, showRSOptions: { classPropertyName: "showRSOptions", publicName: "showRSOptions", isSignal: true, isRequired: false, transformFunction: null }, showAIAssistantOptions: { classPropertyName: "showAIAssistantOptions", publicName: "showAIAssistantOptions", isSignal: true, isRequired: false, transformFunction: null }, selectableModules: { classPropertyName: "selectableModules", publicName: "selectableModules", isSignal: true, isRequired: false, transformFunction: null }, initialModule: { classPropertyName: "initialModule", publicName: "initialModule", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "filterByNumber", first: true, predicate: ["filterByNumber"], descendants: true, isSignal: true }, { propertyName: "filterByText", first: true, predicate: ["filterByText"], descendants: true, isSignal: true }, { propertyName: "filterByChangeNumber", first: true, predicate: ["filterByChangeNumber"], descendants: true, isSignal: true }, { propertyName: "filterPane", first: true, predicate: ["filterPane"], descendants: true, isSignal: true }, { propertyName: "filterPane2", first: true, predicate: ["filterPane2"], descendants: true, isSignal: true }, { propertyName: "filterSelector", first: true, predicate: ["filterSelector"], descendants: true, isSignal: true }, { propertyName: "moduleSelector", first: true, predicate: ["moduleSelector"], descendants: true, isSignal: true }, { propertyName: "sourceExpansionPanel", first: true, predicate: ["sourceExpansionPanel"], descendants: true, isSignal: true }, { propertyName: "otherOptionsExpansionPanel", first: true, predicate: ["otherOptionsExpansionPanel"], descendants: true, isSignal: true }, { propertyName: "modifierExpansionPanel", first: true, predicate: ["modifierExpansionPanel"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<mat-drawer-container [hasBackdrop]=\"filterPaneHasBackdrop()\" class=\"fill\">\n <mat-drawer #filterPane class=\"drawer\">\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"78px\" class=\"title-container\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\n <div class=\"title\">Filtro</div>\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"saveFilter(true)\"\n matTooltip=\"Crea una nuovo filtro con i parametri attuali \"><mat-icon>add</mat-icon></button>\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\n matTooltip=\"Nascondi\"><mat-icon>left_panel_close</mat-icon></button>\n </div>\n </div>\n </div>\n @if(hasFilters()) {\n <div style=\"padding:10px 20px\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex=\"*\">\n <button-selector #filterSelector [options]=\"filters()\" label=\"Seleziona un filtro salvato\"\n labelSelected=\"Filtro in uso:\" fxFlexAlign=\"center\" (selected)=\"selectFilter($event)\"\n [matTooltip]=\"filterParams.searchName ?? ''\"></button-selector>\n </div>\n @if(filterParams.searchId) {\n <div fxFlex=\"40px\">\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"deleteFilter()\"\n matTooltip=\"Elimina il filtro in uso\"><mat-icon>delete</mat-icon></button>\n </div>\n }\n </div>\n </div>\n }\n <div fxFlex=\"*\" class=\"content scroll-hidden\" style=\"padding-bottom: 10px;\">\n <div class=\"scroll-auto\" style=\"padding: 0 10px;\">\n <form [formRoot]=\"filterForm\" (keyup.enter)=\"applyFilter()\" novalidate>\n <mat-accordion multi displayMode=\"flat\">\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Cerca in..\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <chips-selector #moduleSelector [formField]=\"filterForm.modules\" [collapseAt]=\"599\" [multiple]=\"true\"\n label=\"Sezioni\" name=\"modules\" [options]=\"filteredModules()\" (changed)=\"modulesChanged()\">\n </chips-selector>\n </mat-expansion-panel>\n\n @if((hasTags() || hasTopics()) && !isCoordination()) {\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Argomenti\n </mat-panel-title>\n </mat-expansion-panel-header>\n @if(hasTags()) {\n <chips-selector [collapseAt]=\"599\" [formField]=\"filterForm.tags\" [multiple]=\"true\"\n label=\"Argomenti\" [options]=\"tags()\"></chips-selector>\n }\n @if(hasTopics()) {\n @if ((filterForm.topics().value()?.length ?? 0) > 0) {\n <mat-chip-grid #topics style=\"padding-bottom: 5px;\">\n @for (o of filterForm.topics().value(); track $index) {\n <mat-chip-row [value]=\"o\" (removed)=\"deleteTopic(o)\">\n {{o.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button></mat-chip-row>\n }\n </mat-chip-grid>\n <input style=\"display: none;\" [matChipInputFor]=\"topics\" />\n }\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button type=\"button\" (click)=\"addTopic()\"><mat-icon>add</mat-icon> Aggiungi\n argomento</button>\n @if ((filterForm.topics().value()?.length ?? 0) > 0) {\n <button mat-button type=\"button\" (click)=\"clearTopics()\"><mat-icon>delete</mat-icon> Azzera</button>\n }\n </div>\n }\n </mat-expansion-panel>\n }\n @if(hasSectors()) {\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Settori\n </mat-panel-title>\n </mat-expansion-panel-header>\n <chips-selector [collapseAt]=\"599\" [formField]=\"filterForm.sectors\" [multiple]=\"true\"\n label=\"Settori\" [options]=\"sectors()\" (changed)=\"sectorsChanged()\" />\n @if(hasRegions())\n {\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\n <chips-selector [formField]=\"filterForm.authors\" [multiple]=\"true\" mode=\"collapsed\"\n label=\"Tutte le regioni\" [options]=\"regions()\" />\n }\n </mat-expansion-panel>\n }\n @if(!isCoordination()) {\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Documento\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n @if(isLaws()) {\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"49\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.number\"\n #filterByNumber=\"matInput\" />\n @if (filterForm.number().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.number().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxFlex=\"39\" fxFlex.xs=\"49\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.year\" />\n @if (filterForm.year().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.year().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n }\n <mat-form-field>\n <mat-label>Intervallo di pubblicazione</mat-label>\n <mat-date-range-input [rangePicker]=\"picker1\">\n <input matStartDate [formField]=\"filterForm.from\" placeholder=\"Da data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, false)\">\n <input matEndDate [formField]=\"filterForm.to\" placeholder=\"A data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, true)\">\n </mat-date-range-input>\n @if (filterForm.from().value() || filterForm.to().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"clearInterval()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker1></mat-date-range-picker>\n @if (filterForm.from().invalid() || filterForm.to().invalid()) {\n <mat-error>{{ rangeErrorMessage(filterForm.from().errors(), filterForm.to().errors()) }}</mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label>Testo</mat-label>\n <input matInput [formField]=\"filterForm.text\"\n #filterByText=\"matInput\" />\n @if (filterForm.text().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.text().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\"\n aria-label=\"Opzioni\"\n [matMenuTriggerFor]=\"filterPaneOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\n </mat-form-field>\n <div>\n @if(filterForm.text().value()) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.titleOnly\">Cerca solo nel\n titolo</mat-slide-toggle>\n </div>\n }\n @if(isLaws(false)) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showNotAbrogatedDocumentsOnly\">Mostra solo elementi non abrogati</mat-slide-toggle>\n </div>\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showCommentedDocumentsOnly\">Mostra solo elementi con commenti</mat-slide-toggle>\n </div>\n }\n @if(isReadable()) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showUnreadDocumentsOnly\">Mostra solo elementi non letti</mat-slide-toggle>\n </div>\n }\n\n </div>\n </div>\n </mat-expansion-panel>\n @if(isLaws(false)) {\n <mat-expansion-panel #sourceExpansionPanel class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Fonte\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.sourceNumber\" />\n @if (filterForm.sourceNumber().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.sourceNumber().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.sourceYear\" />\n @if (filterForm.sourceYear().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.sourceYear().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>Intervallo di pubblicazione</mat-label>\n <mat-date-range-input [rangePicker]=\"picker2\">\n <input matStartDate [formField]=\"filterForm.sourceFrom\" placeholder=\"Da data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, true, false)\">\n <input matEndDate [formField]=\"filterForm.sourceTo\" placeholder=\"A data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, true, true)\">\n </mat-date-range-input>\n @if (filterForm.sourceFrom().value() || filterForm.sourceTo().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"clearInterval(true)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker2></mat-date-range-picker>\n @if (filterForm.sourceFrom().invalid() || filterForm.sourceTo().invalid()) {\n <mat-error>{{ rangeErrorMessage(filterForm.sourceFrom().errors(), filterForm.sourceTo().errors()) }}</mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label>Tipo</mat-label>\n <mat-select [formField]=\"filterForm.source\">\n @for (s of sources(); track $index) {\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\n {{s.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #otherOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Altre opzioni\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n @if(authors().length > 0 && !hasRegions()) {\n <mat-form-field>\n <mat-label>Autore</mat-label>\n <mat-select [formField]=\"filterForm.author\">\n @for (a of authors(); track $index) {\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\n {{a.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <mat-form-field>\n <mat-label>Tipo documento</mat-label>\n <mat-select [formField]=\"filterForm.type\">\n @for (t of types(); track $index) {\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\n {{t.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n </mat-expansion-panel>\n }\n } @else {\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Periodo\n </mat-panel-title>\n </mat-expansion-panel-header>\n <mat-form-field style=\"width:100%\">\n <mat-label>Intervallo di pubblicazione</mat-label>\n <mat-date-range-input [rangePicker]=\"picker1\">\n <input matStartDate [formField]=\"filterForm.from\" placeholder=\"Da data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, false)\">\n <input matEndDate [formField]=\"filterForm.to\" placeholder=\"A data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, true)\">\n </mat-date-range-input>\n @if (filterForm.from().value() || filterForm.to().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"clearInterval()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker1></mat-date-range-picker>\n @if (filterForm.from().invalid() || filterForm.to().invalid()) {\n <mat-error>{{ rangeErrorMessage(filterForm.from().errors(), filterForm.to().errors()) }}</mat-error>\n }\n </mat-form-field>\n @if(isReadable()) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showUnreadDocumentsOnly\">Mostra solo elementi non letti</mat-slide-toggle>\n </div>\n }\n </mat-expansion-panel>\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Documento modificato\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.changedNumber\"\n #filterByChangeNumber=\"matInput\" />\n @if (filterForm.changedNumber().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.changedNumber().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.changedYear\" />\n @if (filterForm.changedYear().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.changedYear().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>Titolo</mat-label>\n <input matInput [formField]=\"filterForm.changedTitle\" />\n @if (filterForm.changedTitle().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.changedTitle().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #modifierOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Documento modificante\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.modifierNumber\" />\n @if (filterForm.modifierNumber().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.modifierNumber().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.modifierYear\" />\n @if (filterForm.modifierYear().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.modifierYear().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>Titolo</mat-label>\n <input matInput [formField]=\"filterForm.modifierTitle\" />\n @if (filterForm.modifierTitle().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.modifierTitle().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #otherOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Altre opzioni\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <mat-form-field>\n <mat-label>Motivo</mat-label>\n <mat-select [formField]=\"filterForm.changeReason\">\n @for (r of reasons(); track $index) {\n <mat-option [value]=\"r.value\" [matTooltip]=\"r.name\">\n {{r.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n }\n </mat-accordion>\n </form>\n </div>\n </div>\n @if(showChannels()) {\n <div style=\"padding:10px\">\n <div fxLayout=\"column\">\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0\" style=\"margin-bottom: 10px;\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Canali\n </mat-panel-title>\n <mat-panel-description>\n @for (c of clipperService.availableChannels(); track $index) {\n <div class=\"channel-box\" [class.channel-disabled]=\"!c.active || c.disabled\" [matTooltip]=\"c.name\">\n <span class=\"label\">{{c.header}}</span>\n </div>\n }\n </mat-panel-description>\n </mat-expansion-panel-header>\n <chips-selector [collapseAt]=\"599\" [formField]=\"filterForm.channels\" [multiple]=\"true\"\n label=\"Canali\" [options]=\"clipperService.availableChannels()\"\n (changed)=\"channelsChanged()\"></chips-selector>\n\n </mat-expansion-panel>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex=\"*\" fxFlexAlign=\"end\">\n <button mat-stroked-button (click)=\"clearFilter()\">Pulisci</button>\n <button mat-stroked-button (click)=\"saveFilter()\" style=\"margin-left: 10px;\">Salva</button>\n </div>\n <div fxLayoutAlign=\"end\">\n <button fxFlexAlign=\"end\" mat-flat-button (click)=\"applyFilter()\"\n [disabled]=\"!canSearch()\">Applica</button>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </mat-drawer>\n <div fxLayout=\"column\" fxLayoutGap=\"10px\" fxFill class=\"drawer-content scroll-hidden\">\n <div class=\"module-toolbar \">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\n <div fxFlex=\"49\" fxFlex.lt-md=\"100\" style=\"padding-left: 10px; padding-bottom: 5px;\">\n @if(!filterPane.opened) {\n <button-toggle cssClass=\"small\" cssClassSmall=\"x-small\" iconOn=\"left_panel_close\" iconOff=\"tune\"\n labelOn=\"Nascondi<br>filtri\" labelOff=\"Mostra<br>filtri\" [value]=\"filterPane.opened\"\n (changed)=\"toggleFilterPane()\"></button-toggle>\n }\n </div>\n <div fxFlex=\"49\" fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\">\n <div fxLayout=\"row\" style=\"height:48px; padding-bottom: 5px;\">\n @if((snapshot?.total ?? 0) > 0) {\n @if(sortOptions().length > 0) {\n <button-selector [options]=\"sortOptions()\" label=\"Ordina per:\" style=\"margin-right: 5px;\" [border]=\"0\"\n fxFlexAlign=\"center\" [formField]=\"sortForm\" (selected)=\"sort($event)\"></button-selector>\n }\n <button fxFlexAlign=\"center\" mat-icon-button matSuffix matTooltip=\"Opzioni sulla selezione\"\n aria-label=\"Opzioni sulla selezione\" [matMenuTriggerFor]=\"selectionOptionsMenu\"\n [matBadge]=\"countSelections()\"><mat-icon>checklist</mat-icon></button>\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Salva elenco in Excel \"\n (click)=\"exportResults()\"><mat-icon>save_alt</mat-icon></button>\n @if (!filterPane2?.opened && hasFacets()){\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Affina ricerca\"\n (click)=\"toggleFilterPane2()\"><mat-icon>right_panel_open</mat-icon></button>\n }\n }\n </div>\n </div>\n </div>\n </div>\n <div fxFlex=\"*\" class=\"module-content\">\n <mat-drawer-container [hasBackdrop]=\"filterPane2HasBackdrop()\" class=\"fill\">\n <mat-drawer #filterPane2 class=\"drawer-small drawer-with-loader\" position=\"end\" 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)=\"toggleFilterPane2()\"\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\n </div>\n </div>\n </div>\n <div fxFlex=\"*\" class=\"content scroll-hidden\" style=\"padding: 0 5px;\">\n <clipper-search-facets #facets></clipper-search-facets>\n\n </div>\n </div>\n </mat-drawer>\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"*\" [id]=\"scrollerId\" cdkScrollable class=\"scroll-auto\" style=\"padding: 0 20px;\">\n @if (!snapshot?.total) {\n <div class=\"message-container\">\n @if(snapshot?.total === 0) {\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\n } @else {\n <div class=\"message\">\n <p fxHide.xs><b>Esegui una ricerca compilando i campi necessari nella maschera di ricarca qui a\n fianco.</b></p>\n <p fxHide.gt-xs><b>Fai click sul bottone <span class=\"accent\"><mat-icon>tune</mat-icon></span> ed esegui\n una\n ricerca compilando i campi necessari.</b></p>\n <p>E' possibile salvare i parametri delle le ricerche pi\u00F9 utilizzate facendo clic su \n <mat-icon\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>.\n </p>\n </div>\n }\n </div>\n } @else {\n @if (snapshot && (snapshot.total ?? 0) > 0) {\n @for (item of snapshot.items; track $index; let i = $index) {\n @if (item.group && isSortedByDate()) {\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\" [displayModelName]=\"true\" [actions]=\"contextMenu\"\n [isReadable]=\"true\"></clipper-search-result-item>\n }\n }\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 unread-bg\"></div>\n non letto\n <!--<div class=\"legend next very-popular-bg\"></div>\n molto citato\n <div class=\"legend next popular-bg\"></div>\n citato-->\n <div class=\"legend next expired-bg \"></div>\n non pi\u00F9 vigente\n </div>\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [class.wide]=\"filterPane2?.opened\">\n <div fxLayout=\"row\">\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count\" [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 </div>\n </div>\n</mat-drawer-container>\n<mat-menu #filterPaneOptionsMenu=\"matMenu\">\n <button mat-menu-item (click)=\"compose()\">\n <mat-icon>build</mat-icon>Componi\n </button>\n <button mat-menu-item (click)=\"help()\">\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\n </button>\n</mat-menu>\n<mat-menu #selectionOptionsMenu=\"matMenu\">\n <button mat-menu-item (click)=\"selectAll()\">\n <mat-icon>select_all</mat-icon>Seleziona tutti\n </button>\n <clipper-document-menu [parent]=\"this\" [useSelections]=\"true\" [isReadable]=\"true\"\n [canUseAIAssistant]=\"hasAIAssistant()\" [canUseRS]=\"showRSOptions()\">\n </clipper-document-menu>\n</mat-menu>\n<mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\n <ng-template matMenuContent let-item=\"item\">\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"true\"\n [canUseAIAssistant]=\"hasAIAssistant()\" [canUseRS]=\"showRSOptions()\">\n </clipper-document-menu>\n </ng-template>\n</mat-menu>", styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.fill{min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:1.2!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}.clipper-logo{background-size:110px 48px;width:110px;height:48px}.clipper-selection-button{width:150px;font-size:small;font-weight:600}.clipper-selection-icon-button{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.clipper-selection-icon-button:hover{background-color:var(--ars-color-primary-hi, #12c0ae)}.unread{color:var(--app-color-unread, #f7931c)!important}.unread-bg{background-color:var(--app-color-unread, #f7931c)!important}.expired{color:var(--app-color-expired, #ff5449)!important}.expired-bg{background-color:var(--app-color-expired, #ff5449)!important}.expiring{color:var(--app-color-expiring, #FFC107)!important}.expiring-bg{background-color:var(--app-color-expiring, #FFC107)!important}.closed{color:var(--app-color-closed, #388E3C)!important}.closed-bg{background-color:var(--app-color-closed, #388E3C)!important}.error-bg{background-color:var(--ars-color-error, #ff5449)!important}.popular-bg{background-color:var(--app-color-closed, #388E3C)!important}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-color-secondary, #4a635f);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .group-spaced{padding:10px 0 0!important}.items-footer{padding:10px}.item{border-radius:12px;padding:10px 10px 10px 0;min-height:68px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item:hover .item-content{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}@media screen and (min-width:0px)and (max-width:430px){.item:hover{background-color:var(--ars-item-hover-background-color)}.item:hover .item-content{-webkit-mask-image:linear-gradient(to right,black 55%,transparent 100%);mask-image:linear-gradient(to right,black 55%,transparent 100%)}}.item-content .item-info-1,.item-content .info-1{font-size:x-small!important;font-weight:700!important;line-height:18px;text-transform:uppercase!important;color:var(--ars-color-accent, #7894ae)}.item-content .item-info-2,.item-content .info-2{font-size:x-small!important;font-weight:700!important;line-height:18px;text-transform:uppercase!important;color:var(--ars-color-accent-low, #456179)}.item-content .item-info-3,.item-content .info-3{font-size:x-small!important;font-weight:700!important;line-height:18px;text-transform:uppercase!important;color:var(--ars-color-error, #ff5449)}.item-content .item-title,.item-content .title{font-size:small!important;line-height:18px;text-decoration:none!important;font-weight:400;min-height:unset;min-width:unset;white-space:initial!important}@supports (-webkit-line-clamp: 3){.item-content .item-title,.item-content .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.item-content .details{margin-top:4px;font-size:x-small!important;font-weight:700;line-height:15px;color:var(--ars-color-accent-low, #456179);text-transform:uppercase!important;border-left:4px solid var(--ars-color-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:500!important;font-size:11px!important;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-color-link, #03A9F4);font-size:11px!important;font-weight:500!important}.item-content a.link{color:var(--ars-color-link, #03A9F4);cursor:pointer!important;text-decoration:none!important}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer!important;padding:10px 13px!important;margin-bottom:20px!important}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--app-color-unread, #f7931c);margin:0 8px}.tile .tile-image,.tile .image{height:125px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .tile-image img,.tile .image img{object-fit:cover;width:100%;height:100%}.tile .tile-image .tile-info-1,.tile .tile-image .info-1,.tile .image .tile-info-1,.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .tile-image .tile-info-2,.tile .tile-image .info-2,.tile .image .tile-info-2,.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-accent, #7894ae);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .tile-image .buttons,.tile .image .buttons{position:absolute;left:0;top:0;height:42px}.tile .tile-image .buttons .check,.tile .tile-image .buttons .read-button,.tile .image .buttons .check,.tile .image .buttons .read-button{background-color:var(--ars-color-primary, #00a293)!important;color:var(--ars-color-text-low, #e0e2e5)!important}.tile .tile-image .buttons .unread-button,.tile .image .buttons .unread-button{background-color:var(--app-color-unread, #f7931c)!important;color:var(--ars-color-text-low, #e0e2e5)!important}.tile .tile-image .buttons .check-selected,.tile .image .buttons .check-selected{background-color:var(--ars-color-primary-hi, #12c0ae)!important}.tile .tile-date,.tile .date{padding:8px 0 6px!important;font-weight:700!important;text-transform:uppercase!important}.tile .tile-date .date-day,.tile .date .date-day{color:var(--ars-color-accent, #7894ae)}.tile .tile-date .date-divider,.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.tile .tile-time,.tile .time{font-size:small!important;font-weight:700!important}.tile .tile-title,.tile .title{text-decoration:none!important;font-size:16px!important;font-weight:600;min-height:50px!important;max-height:70px!important;min-width:100%;white-space:initial!important;overflow:hidden!important}@supports (-webkit-line-clamp: 3){.tile .tile-title,.tile .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.stripe:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.stripe{cursor:pointer!important;padding:5px 10px!important;margin-bottom:10px!important}.stripe .body{padding:5px 15px!important}.stripe .image-mark{min-height:100%!important;border-left:6px solid transparent;margin:8px 0}.stripe .image-mark-unread{min-height:100%!important;border-left-color:var(--ars-color-error, #ff5449)!important;margin:8px 0}.stripe .stripe-image,.stripe .image{width:150px!important;height:70px!important;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.stripe .stripe-image img,.stripe .image img{object-fit:cover;width:100%;height:100%}.stripe .stripe-info-1,.stripe .info-1{margin-top:8px;padding:4px 8px!important;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))!important;color:var(--ars-color-text, #191c1b)!important;font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.stripe .stripe-info-2,.stripe .info-2{margin-top:8px;padding:4px 8px!important;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))!important;color:var(--ars-color-accent, #7894ae)!important;font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.stripe .buttons{position:absolute;left:0;top:0;height:42px}.stripe .buttons .check,.stripe .buttons .read{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.stripe .buttons .check-selected{background-color:var(--ars-color-primary-hi, #12c0ae)}.stripe .stripe-date,.stripe .date{padding:0!important;font-weight:700!important;text-transform:uppercase!important}.stripe .stripe-date .date-day,.stripe .date .date-day{color:var(--ars-color-accent, #7894ae)}.stripe .stripe-date .date-divider,.stripe .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.stripe .stripe-time,.stripe .time{font-size:small!important;font-weight:700!important}.stripe .stripe-title,.stripe .title{text-decoration:none!important;font-size:16px!important;font-weight:600;min-width:100%;white-space:initial!important;overflow:hidden!important}@supports (-webkit-line-clamp: 3){.stripe .stripe-title,.stripe .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:#427505;text-transform:uppercase;white-space:nowrap;color:#e0e2e5}.badge-red{background-color:#a80710}.busy-backdrop{background-color:#0000006b!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .legend:not(:first-of-type){margin-left:10px}@media screen and (max-width:431px){.legend-container{font-size:9px!important}}.special-date,.special-date-expired,.special-date-expiring{border:2px var(--ars-color-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-color-error, #ff5449) solid!important}.special-date-expiring{border:2px var(--ars-color-warning, #FFC107) solid!important}.word-hit-chunk,.word-hit{display:inline-block;font-size:inherit;background-color:var(--ars-word-hit-background-color, #FFEB3B);color:var(--ars-word-hit-color, #191c1b);padding:0 4px;margin:0 4px;border-radius:4px}.word-hit-chunk{background-color:var(--ars-word-chunk-hit-background-color, #8AFF59);color:var(--ars-word-hit-chunk-color, #191c1b)}.message-container{font-size:large;display:flex;justify-content:center;align-items:center;height:50%}.message-container .message{color:var(--ars-color-secondary, #4a635f);text-align:center;padding:40px}.module-content{overflow-x:hidden!important}.module-toolbar{padding:0 5px 0 10px!important}.frame{height:100%!important;min-height:100%!important}.drawer,.drawer-small{background-color:var(--ars-drawer-background-color)!important}@media screen and (min-width:431px){.drawer-small{min-width:360px!important;max-width:360px!important}}.channel-box{border-radius:4px;border:2px solid var(--ars-color-primary);color:var(--ars-color-primary);text-align:center;min-width:28px;min-height:28px;margin-right:12px;display:flex;align-items:center;justify-content:center}.channel-box .label{font-size:15px;font-weight:700}.channel-disabled{opacity:.3}.command{line-height:16px;color:var(--ars-color-primary);font-weight:500;cursor:pointer!important;text-decoration:none}.command:hover{opacity:.8!important}.link{color:var(--ars-color-link);font-weight:500;cursor:pointer!important;text-decoration:none}.link:hover{opacity:.8}.no-spaced{padding-top:0!important;padding-bottom:0!important}.spaced{padding-top:20px!important;padding-bottom:20px!important}.spaced-bottom-20{padding-bottom:20px!important}.spaced-top-20{padding-top:20px!important}.section,.spaced-bottom-10{padding-bottom:10px!important}.spaced-top-10{padding-top:10px!important}.section-title{font-size:large;font-weight:500;padding-top:20px;padding-bottom:8px}.info-3{margin-top:6px;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.info-4{margin-top:6px;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-accent, #7894ae);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}\n"], dependencies: [{ kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: FormRoot, selector: "form[formRoot]", inputs: ["formRoot"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.FxLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg] ", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.FxFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg] ", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i1.FxShowHideDirective, selector: " [fxShow], [fxHide], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg] ", inputs: ["fxShow", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i1.FxLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg] ", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FxLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg] ", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.FxFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg] ", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.FxFlexFillDirective, selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ", inputs: ["fxFlexFill", "fxFill", "fxFlexFill.xs", "fxFlexFill.sm", "fxFlexFill.md", "fxFlexFill.lg", "fxFlexFill.xl", "fxFlexFill.lt-sm", "fxFlexFill.lt-md", "fxFlexFill.lt-lg", "fxFlexFill.lt-xl", "fxFlexFill.gt-xs", "fxFlexFill.gt-sm", "fxFlexFill.gt-md", "fxFlexFill.gt-lg"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i5$1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i6.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i6.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i7.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i7.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i7.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i7.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i7.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i4$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i12.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i12.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i12.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i12.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i12.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i13.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i13.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i14.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i14.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i14.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i14.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i15.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "fullWidth", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i16.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: ChipsSelectorComponent, selector: "chips-selector", inputs: ["options", "collapsedWidth", "collapsedDisplayMode", "collapseAt", "collapseAtContainer", "label", "multiple", "mustSelect", "mode", "stacked", "padAt", "required", "placeholder", "disabled"], outputs: ["changed"] }, { kind: "component", type: ButtonSelectorComponent, selector: "button-selector", inputs: ["disabled", "width", "border", "borderRadius", "label", "labelSelected", "options", "autoSelect"], outputs: ["changed", "selected"] }, { kind: "component", type: ButtonToggleComponent, selector: "button-toggle", inputs: ["value", "width", "border", "labelOn", "labelOff", "iconOn", "iconOff", "cssClass", "cssClassSmall"], outputs: ["changed"] }, { kind: "component", type: ClipperSearchResultItemComponent, selector: "clipper-search-result-item", inputs: ["parent", "item", "actions", "tileNoPictureUrl", "tilePictureUrl", "isSelectable", "isReadable", "isReadableModel", "displayModifiedTitle", "displayModelName", "displayDate", "displayMode"], outputs: ["itemChange"] }, { kind: "component", type: ClipperDocumentMenuComponent, selector: "clipper-document-menu", inputs: ["useSelections", "selectionSource", "parent", "item", "isReference", "isReadable", "isReadableModel", "isLawInForce", "canPrint", "canFind", "canUseAIAssistant", "canUseRS", "canOpenDocument"] }, { kind: "component", type: ClipperSearchFacetsComponent, selector: "clipper-search-facets", inputs: ["handleTooManyResults"], outputs: ["changed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3215
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.3", type: ClipperBrowserComponent, isStandalone: true, selector: "clipper-browser", inputs: { showChannels: { classPropertyName: "showChannels", publicName: "showChannels", isSignal: true, isRequired: false, transformFunction: null }, showRSOptions: { classPropertyName: "showRSOptions", publicName: "showRSOptions", isSignal: true, isRequired: false, transformFunction: null }, showAIAssistantOptions: { classPropertyName: "showAIAssistantOptions", publicName: "showAIAssistantOptions", isSignal: true, isRequired: false, transformFunction: null }, selectableModules: { classPropertyName: "selectableModules", publicName: "selectableModules", isSignal: true, isRequired: false, transformFunction: null }, initialModule: { classPropertyName: "initialModule", publicName: "initialModule", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "filterByNumber", first: true, predicate: ["filterByNumber"], descendants: true, isSignal: true }, { propertyName: "filterByText", first: true, predicate: ["filterByText"], descendants: true, isSignal: true }, { propertyName: "filterByChangeNumber", first: true, predicate: ["filterByChangeNumber"], descendants: true, isSignal: true }, { propertyName: "filterPane", first: true, predicate: ["filterPane"], descendants: true, isSignal: true }, { propertyName: "filterPane2", first: true, predicate: ["filterPane2"], descendants: true, isSignal: true }, { propertyName: "filterSelector", first: true, predicate: ["filterSelector"], descendants: true, isSignal: true }, { propertyName: "moduleSelector", first: true, predicate: ["moduleSelector"], descendants: true, isSignal: true }, { propertyName: "sourceExpansionPanel", first: true, predicate: ["sourceExpansionPanel"], descendants: true, isSignal: true }, { propertyName: "otherOptionsExpansionPanel", first: true, predicate: ["otherOptionsExpansionPanel"], descendants: true, isSignal: true }, { propertyName: "modifierExpansionPanel", first: true, predicate: ["modifierExpansionPanel"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<mat-drawer-container [hasBackdrop]=\"filterPaneHasBackdrop()\" class=\"fill\">\n <mat-drawer #filterPane class=\"drawer\">\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"78px\" class=\"title-container\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\n <div class=\"title\">Filtro</div>\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"saveFilter(true)\"\n matTooltip=\"Crea una nuovo filtro con i parametri attuali \"><mat-icon>add</mat-icon></button>\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\n matTooltip=\"Nascondi\"><mat-icon>left_panel_close</mat-icon></button>\n </div>\n </div>\n </div>\n @if(hasFilters()) {\n <div style=\"padding:10px 20px\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex=\"*\">\n <button-selector #filterSelector [options]=\"filters()\" label=\"Seleziona un filtro salvato\"\n labelSelected=\"Filtro in uso:\" fxFlexAlign=\"center\" (selected)=\"selectFilter($event)\"\n [matTooltip]=\"filterParams.searchName ?? ''\"></button-selector>\n </div>\n @if(filterParams.searchId) {\n <div fxFlex=\"40px\">\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"deleteFilter()\"\n matTooltip=\"Elimina il filtro in uso\"><mat-icon>delete</mat-icon></button>\n </div>\n }\n </div>\n </div>\n }\n <div fxFlex=\"*\" class=\"content scroll-hidden\" style=\"padding-bottom: 10px;\">\n <div class=\"scroll-auto\" style=\"padding: 0 10px;\">\n <form [formRoot]=\"filterForm\" (keyup.enter)=\"applyFilter()\" novalidate>\n <mat-accordion multi displayMode=\"flat\">\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Cerca in..\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <chips-selector #moduleSelector [formField]=\"filterForm.modules\" [collapseAt]=\"599\" [multiple]=\"true\"\n label=\"Sezioni\" name=\"modules\" [options]=\"filteredModules()\" (changed)=\"modulesChanged()\">\n </chips-selector>\n </mat-expansion-panel>\n\n @if((hasTags() || hasTopics()) && !isCoordination()) {\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Argomenti\n </mat-panel-title>\n </mat-expansion-panel-header>\n @if(hasTags()) {\n <chips-selector [collapseAt]=\"599\" [formField]=\"filterForm.tags\" [multiple]=\"true\"\n label=\"Argomenti\" [options]=\"tags()\"></chips-selector>\n }\n @if(hasTopics()) {\n @if ((filterForm.topics().value()?.length ?? 0) > 0) {\n <mat-chip-grid #topics style=\"padding-bottom: 5px;\">\n @for (o of filterForm.topics().value(); track $index) {\n <mat-chip-row [value]=\"o\" (removed)=\"deleteTopic(o)\">\n {{o.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button></mat-chip-row>\n }\n </mat-chip-grid>\n <input style=\"display: none;\" [matChipInputFor]=\"topics\" />\n }\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button type=\"button\" (click)=\"addTopic()\"><mat-icon>add</mat-icon> Aggiungi\n argomento</button>\n @if ((filterForm.topics().value()?.length ?? 0) > 0) {\n <button mat-button type=\"button\" (click)=\"clearTopics()\"><mat-icon>delete</mat-icon> Azzera</button>\n }\n </div>\n }\n </mat-expansion-panel>\n }\n @if(hasSectors()) {\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Settori\n </mat-panel-title>\n </mat-expansion-panel-header>\n <chips-selector [collapseAt]=\"599\" [formField]=\"filterForm.sectors\" [multiple]=\"true\"\n label=\"Settori\" [options]=\"sectors()\" (changed)=\"sectorsChanged()\" />\n @if(hasRegions())\n {\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\n <chips-selector [formField]=\"filterForm.authors\" [multiple]=\"true\" mode=\"collapsed\"\n label=\"Tutte le regioni\" [options]=\"regions()\" />\n }\n </mat-expansion-panel>\n }\n @if(!isCoordination()) {\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Documento\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n @if(isLaws()) {\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"49\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.number\"\n #filterByNumber=\"matInput\" />\n @if (filterForm.number().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.number().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxFlex=\"39\" fxFlex.xs=\"49\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.year\" />\n @if (filterForm.year().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.year().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n }\n <mat-form-field>\n <mat-label>Intervallo di pubblicazione</mat-label>\n <mat-date-range-input [rangePicker]=\"picker1\">\n <input matStartDate [formField]=\"filterForm.from\" placeholder=\"Da data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, false)\">\n <input matEndDate [formField]=\"filterForm.to\" placeholder=\"A data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, true)\">\n </mat-date-range-input>\n @if (filterForm.from().value() || filterForm.to().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"clearInterval()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker1></mat-date-range-picker>\n @if (filterForm.from().invalid() || filterForm.to().invalid()) {\n <mat-error>{{ rangeErrorMessage(filterForm.from().errors(), filterForm.to().errors()) }}</mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label>Testo</mat-label>\n <input matInput [formField]=\"filterForm.text\"\n #filterByText=\"matInput\" />\n @if (filterForm.text().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.text().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\"\n aria-label=\"Opzioni\"\n [matMenuTriggerFor]=\"filterPaneOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\n </mat-form-field>\n <div>\n @if(filterForm.text().value()) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.titleOnly\">Cerca solo nel\n titolo</mat-slide-toggle>\n </div>\n }\n @if(isLaws(false)) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showNotAbrogatedDocumentsOnly\">Mostra solo elementi non abrogati</mat-slide-toggle>\n </div>\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showCommentedDocumentsOnly\">Mostra solo elementi con commenti</mat-slide-toggle>\n </div>\n }\n @if(isReadable()) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showUnreadDocumentsOnly\">Mostra solo elementi non letti</mat-slide-toggle>\n </div>\n }\n\n </div>\n </div>\n </mat-expansion-panel>\n @if(isLaws(false)) {\n <mat-expansion-panel #sourceExpansionPanel class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Fonte\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.sourceNumber\" />\n @if (filterForm.sourceNumber().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.sourceNumber().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.sourceYear\" />\n @if (filterForm.sourceYear().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.sourceYear().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>Intervallo di pubblicazione</mat-label>\n <mat-date-range-input [rangePicker]=\"picker2\">\n <input matStartDate [formField]=\"filterForm.sourceFrom\" placeholder=\"Da data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, true, false)\">\n <input matEndDate [formField]=\"filterForm.sourceTo\" placeholder=\"A data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, true, true)\">\n </mat-date-range-input>\n @if (filterForm.sourceFrom().value() || filterForm.sourceTo().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"clearInterval(true)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker2></mat-date-range-picker>\n @if (filterForm.sourceFrom().invalid() || filterForm.sourceTo().invalid()) {\n <mat-error>{{ rangeErrorMessage(filterForm.sourceFrom().errors(), filterForm.sourceTo().errors()) }}</mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label>Tipo</mat-label>\n <mat-select [formField]=\"filterForm.source\">\n @for (s of sources(); track $index) {\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\n {{s.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #otherOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Altre opzioni\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n @if(authors().length > 0 && !hasRegions()) {\n <mat-form-field>\n <mat-label>Autore</mat-label>\n <mat-select [formField]=\"filterForm.author\">\n @for (a of authors(); track $index) {\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\n {{a.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <mat-form-field>\n <mat-label>Tipo documento</mat-label>\n <mat-select [formField]=\"filterForm.type\">\n @for (t of types(); track $index) {\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\n {{t.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n </mat-expansion-panel>\n }\n } @else {\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Periodo\n </mat-panel-title>\n </mat-expansion-panel-header>\n <mat-form-field style=\"width:100%\">\n <mat-label>Intervallo di pubblicazione</mat-label>\n <mat-date-range-input [rangePicker]=\"picker1\">\n <input matStartDate [formField]=\"filterForm.from\" placeholder=\"Da data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, false)\">\n <input matEndDate [formField]=\"filterForm.to\" placeholder=\"A data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, true)\">\n </mat-date-range-input>\n @if (filterForm.from().value() || filterForm.to().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"clearInterval()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker1></mat-date-range-picker>\n @if (filterForm.from().invalid() || filterForm.to().invalid()) {\n <mat-error>{{ rangeErrorMessage(filterForm.from().errors(), filterForm.to().errors()) }}</mat-error>\n }\n </mat-form-field>\n @if(isReadable()) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showUnreadDocumentsOnly\">Mostra solo elementi non letti</mat-slide-toggle>\n </div>\n }\n </mat-expansion-panel>\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Documento modificato\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.changedNumber\"\n #filterByChangeNumber=\"matInput\" />\n @if (filterForm.changedNumber().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.changedNumber().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.changedYear\" />\n @if (filterForm.changedYear().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.changedYear().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>Titolo</mat-label>\n <input matInput [formField]=\"filterForm.changedTitle\" />\n @if (filterForm.changedTitle().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.changedTitle().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #modifierOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Documento modificante\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.modifierNumber\" />\n @if (filterForm.modifierNumber().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.modifierNumber().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.modifierYear\" />\n @if (filterForm.modifierYear().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.modifierYear().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>Titolo</mat-label>\n <input matInput [formField]=\"filterForm.modifierTitle\" />\n @if (filterForm.modifierTitle().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.modifierTitle().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #otherOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Altre opzioni\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <mat-form-field>\n <mat-label>Motivo</mat-label>\n <mat-select [formField]=\"filterForm.changeReason\">\n @for (r of reasons(); track $index) {\n <mat-option [value]=\"r.value\" [matTooltip]=\"r.name\">\n {{r.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n }\n </mat-accordion>\n </form>\n </div>\n </div>\n @if(showChannels()) {\n <div style=\"padding:10px\">\n <div fxLayout=\"column\">\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0\" style=\"margin-bottom: 10px;\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Canali\n </mat-panel-title>\n <mat-panel-description>\n @for (c of clipperService.availableChannels(); track $index) {\n <div class=\"channel-box\" [class.channel-disabled]=\"!c.active || c.disabled\" [matTooltip]=\"c.name\">\n <span class=\"label\">{{c.header}}</span>\n </div>\n }\n </mat-panel-description>\n </mat-expansion-panel-header>\n <chips-selector [collapseAt]=\"599\" [formField]=\"filterForm.channels\" [multiple]=\"true\"\n label=\"Canali\" [options]=\"clipperService.availableChannels()\"\n (changed)=\"channelsChanged()\"></chips-selector>\n\n </mat-expansion-panel>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex=\"*\" fxFlexAlign=\"end\">\n <button mat-stroked-button (click)=\"clearFilter()\">Pulisci</button>\n <button mat-stroked-button (click)=\"saveFilter()\" style=\"margin-left: 10px;\">Salva</button>\n </div>\n <div fxLayoutAlign=\"end\">\n <button fxFlexAlign=\"end\" mat-flat-button (click)=\"applyFilter()\"\n [disabled]=\"!canSearch()\">Applica</button>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </mat-drawer>\n <div fxLayout=\"column\" fxLayoutGap=\"10px\" fxFill class=\"drawer-content scroll-hidden\">\n <div class=\"module-toolbar \">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\n <div fxFlex=\"49\" fxFlex.lt-md=\"100\" style=\"padding-left: 10px; padding-bottom: 5px;\">\n @if(!filterPane.opened) {\n <button-toggle cssClass=\"small\" cssClassSmall=\"x-small\" iconOn=\"left_panel_close\" iconOff=\"tune\"\n labelOn=\"Nascondi<br>filtri\" labelOff=\"Mostra<br>filtri\" [value]=\"filterPane.opened\"\n (changed)=\"toggleFilterPane()\"></button-toggle>\n }\n </div>\n <div fxFlex=\"49\" fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\">\n <div fxLayout=\"row\" style=\"height:48px; padding-bottom: 5px;\">\n @if((snapshot?.total ?? 0) > 0) {\n @if(sortOptions().length > 0) {\n <button-selector [options]=\"sortOptions()\" label=\"Ordina per:\" style=\"margin-right: 5px;\" [border]=\"0\"\n fxFlexAlign=\"center\" [formField]=\"sortForm\" (selected)=\"sort($event)\"></button-selector>\n }\n <button fxFlexAlign=\"center\" mat-icon-button matSuffix matTooltip=\"Opzioni sulla selezione\"\n aria-label=\"Opzioni sulla selezione\" [matMenuTriggerFor]=\"selectionOptionsMenu\"\n [matBadge]=\"countSelections()\"><mat-icon>checklist</mat-icon></button>\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Salva elenco in Excel \"\n (click)=\"exportResults()\"><mat-icon>save_alt</mat-icon></button>\n @if (!filterPane2?.opened && hasFacets()){\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Affina ricerca\"\n (click)=\"toggleFilterPane2()\"><mat-icon>right_panel_open</mat-icon></button>\n }\n }\n </div>\n </div>\n </div>\n </div>\n <div fxFlex=\"*\" class=\"module-content\">\n <mat-drawer-container [hasBackdrop]=\"filterPane2HasBackdrop()\" class=\"fill\">\n <mat-drawer #filterPane2 class=\"drawer-small drawer-with-loader\" position=\"end\" 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)=\"toggleFilterPane2()\"\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\n </div>\n </div>\n </div>\n <div fxFlex=\"*\" class=\"content scroll-hidden\" style=\"padding: 0 5px;\">\n <clipper-search-facets #facets></clipper-search-facets>\n\n </div>\n </div>\n </mat-drawer>\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"*\" [id]=\"scrollerId\" cdkScrollable class=\"scroll-auto\" style=\"padding: 0 20px;\">\n @if (!snapshot?.total) {\n <div class=\"message-container\">\n @if(snapshot?.total === 0) {\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\n } @else {\n <div class=\"message\">\n <p fxHide.xs><b>Esegui una ricerca compilando i campi necessari nella maschera di ricarca qui a\n fianco.</b></p>\n <p fxHide.gt-xs><b>Fai click sul bottone <span class=\"accent\"><mat-icon>tune</mat-icon></span> ed esegui\n una\n ricerca compilando i campi necessari.</b></p>\n <p>E' possibile salvare i parametri delle le ricerche pi\u00F9 utilizzate facendo clic su \n <mat-icon\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>.\n </p>\n </div>\n }\n </div>\n } @else {\n @if (snapshot && (snapshot.total ?? 0) > 0) {\n @for (item of snapshot.items; track $index; let i = $index) {\n @if (item.group && isSortedByDate()) {\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\" [displayModelName]=\"true\" [actions]=\"contextMenu\"\n [isReadable]=\"true\"></clipper-search-result-item>\n }\n }\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 unread-bg\"></div>\n non letto\n <!--<div class=\"legend next very-popular-bg\"></div>\n molto citato\n <div class=\"legend next popular-bg\"></div>\n citato-->\n <div class=\"legend next expired-bg \"></div>\n non pi\u00F9 vigente\n </div>\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [class.wide]=\"filterPane2?.opened\">\n <div fxLayout=\"row\">\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count\" [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 </div>\n </div>\n</mat-drawer-container>\n<mat-menu #filterPaneOptionsMenu=\"matMenu\">\n <button mat-menu-item (click)=\"compose()\">\n <mat-icon>build</mat-icon>Componi\n </button>\n <button mat-menu-item (click)=\"help()\">\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\n </button>\n</mat-menu>\n<mat-menu #selectionOptionsMenu=\"matMenu\">\n <button mat-menu-item (click)=\"selectAll()\">\n <mat-icon>select_all</mat-icon>Seleziona tutti\n </button>\n <clipper-document-menu [parent]=\"this\" [useSelections]=\"true\" [isReadable]=\"true\"\n [canUseAIAssistant]=\"hasAIAssistant()\" [canUseRS]=\"showRSOptions()\">\n </clipper-document-menu>\n</mat-menu>\n<mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\n <ng-template matMenuContent let-item=\"item\">\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"true\"\n [canUseAIAssistant]=\"hasAIAssistant()\" [canUseRS]=\"showRSOptions()\">\n </clipper-document-menu>\n </ng-template>\n</mat-menu>", styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.fill{min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:1.2!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}.clipper-logo{background-size:110px 48px;width:110px;height:48px}.clipper-selection-button{width:150px;font-size:small;font-weight:600}.clipper-selection-icon-button{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.clipper-selection-icon-button:hover{background-color:var(--ars-color-primary-hi, #12c0ae)}.unread{color:var(--app-color-unread, #f7931c)!important}.unread-bg{background-color:var(--app-color-unread, #f7931c)!important}.expired{color:var(--app-color-expired, #ff5449)!important}.expired-bg{background-color:var(--app-color-expired, #ff5449)!important}.expiring{color:var(--app-color-expiring, #FFC107)!important}.expiring-bg{background-color:var(--app-color-expiring, #FFC107)!important}.closed{color:var(--app-color-closed, #388E3C)!important}.closed-bg{background-color:var(--app-color-closed, #388E3C)!important}.error-bg{background-color:var(--ars-color-error, #ff5449)!important}.popular-bg{background-color:var(--app-color-closed, #388E3C)!important}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-color-secondary, #4a635f);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .group-spaced{padding:10px 0 0!important}.items-footer{padding:10px}.item{border-radius:12px;padding:10px 10px 10px 0;min-height:68px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item:hover .item-content{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}@media screen and (min-width:0px)and (max-width:430px){.item:hover{background-color:var(--ars-item-hover-background-color)}.item:hover .item-content{-webkit-mask-image:linear-gradient(to right,black 55%,transparent 100%);mask-image:linear-gradient(to right,black 55%,transparent 100%)}}.item-content .item-info-1,.item-content .info-1{font-size:x-small!important;font-weight:700!important;line-height:18px;text-transform:uppercase!important;color:var(--ars-color-accent, #7894ae)}.item-content .item-info-2,.item-content .info-2{font-size:x-small!important;font-weight:700!important;line-height:18px;text-transform:uppercase!important;color:var(--ars-color-accent-low, #456179)}.item-content .item-info-3,.item-content .info-3{font-size:x-small!important;font-weight:700!important;line-height:18px;text-transform:uppercase!important;color:var(--ars-color-error, #ff5449)}.item-content .item-title,.item-content .title{font-size:small!important;line-height:18px;text-decoration:none!important;font-weight:400;min-height:unset;min-width:unset;white-space:initial!important}@supports (-webkit-line-clamp: 3){.item-content .item-title,.item-content .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.item-content .details{margin-top:4px;font-size:x-small!important;font-weight:700;line-height:15px;color:var(--ars-color-accent-low, #456179);text-transform:uppercase!important;border-left:4px solid var(--ars-color-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:500!important;font-size:11px!important;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-color-link, #03A9F4);font-size:11px!important;font-weight:500!important}.item-content a.link{color:var(--ars-color-link, #03A9F4);cursor:pointer!important;text-decoration:none!important}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer!important;padding:10px 13px!important;margin-bottom:20px!important}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--app-color-unread, #f7931c);margin:0 8px}.tile .tile-image,.tile .image{height:125px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .tile-image img,.tile .image img{object-fit:cover;width:100%;height:100%}.tile .tile-image .tile-info-1,.tile .tile-image .info-1,.tile .image .tile-info-1,.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .tile-image .tile-info-2,.tile .tile-image .info-2,.tile .image .tile-info-2,.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-accent, #7894ae);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .tile-image .buttons,.tile .image .buttons{position:absolute;left:0;top:0;height:42px}.tile .tile-image .buttons .check,.tile .tile-image .buttons .read-button,.tile .image .buttons .check,.tile .image .buttons .read-button{background-color:var(--ars-color-primary, #00a293)!important;color:var(--ars-color-text-low, #e0e2e5)!important}.tile .tile-image .buttons .unread-button,.tile .image .buttons .unread-button{background-color:var(--app-color-unread, #f7931c)!important;color:var(--ars-color-text-low, #e0e2e5)!important}.tile .tile-image .buttons .check-selected,.tile .image .buttons .check-selected{background-color:var(--ars-color-primary-hi, #12c0ae)!important}.tile .tile-date,.tile .date{padding:8px 0 6px!important;font-weight:700!important;text-transform:uppercase!important}.tile .tile-date .date-day,.tile .date .date-day{color:var(--ars-color-accent, #7894ae)}.tile .tile-date .date-divider,.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.tile .tile-time,.tile .time{font-size:small!important;font-weight:700!important}.tile .tile-title,.tile .title{text-decoration:none!important;font-size:16px!important;font-weight:600;min-height:50px!important;max-height:70px!important;min-width:100%;white-space:initial!important;overflow:hidden!important}@supports (-webkit-line-clamp: 3){.tile .tile-title,.tile .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.stripe:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.stripe{cursor:pointer!important;padding:5px 10px!important;margin-bottom:10px!important}.stripe .body{padding:5px 15px!important}.stripe .image-mark{min-height:100%!important;border-left:6px solid transparent;margin:8px 0}.stripe .image-mark-unread{min-height:100%!important;border-left-color:var(--ars-color-error, #ff5449)!important;margin:8px 0}.stripe .stripe-image,.stripe .image{width:150px!important;height:70px!important;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.stripe .stripe-image img,.stripe .image img{object-fit:cover;width:100%;height:100%}.stripe .stripe-info-1,.stripe .info-1{margin-top:8px;padding:4px 8px!important;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))!important;color:var(--ars-color-text, #191c1b)!important;font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.stripe .stripe-info-2,.stripe .info-2{margin-top:8px;padding:4px 8px!important;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))!important;color:var(--ars-color-accent, #7894ae)!important;font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.stripe .buttons{position:absolute;left:0;top:0;height:42px}.stripe .buttons .check,.stripe .buttons .read{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.stripe .buttons .check-selected{background-color:var(--ars-color-primary-hi, #12c0ae)}.stripe .stripe-date,.stripe .date{padding:0!important;font-weight:700!important;text-transform:uppercase!important}.stripe .stripe-date .date-day,.stripe .date .date-day{color:var(--ars-color-accent, #7894ae)}.stripe .stripe-date .date-divider,.stripe .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.stripe .stripe-time,.stripe .time{font-size:small!important;font-weight:700!important}.stripe .stripe-title,.stripe .title{text-decoration:none!important;font-size:16px!important;font-weight:600;min-width:100%;white-space:initial!important;overflow:hidden!important}@supports (-webkit-line-clamp: 3){.stripe .stripe-title,.stripe .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:#427505;text-transform:uppercase;white-space:nowrap;color:#e0e2e5}.badge-red{background-color:#a80710}.busy-backdrop{background-color:#0000006b!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .legend:not(:first-of-type){margin-left:10px}@media screen and (max-width:431px){.legend-container{font-size:9px!important}}.special-date,.special-date-expired,.special-date-expiring{border:2px var(--ars-color-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-color-error, #ff5449) solid!important}.special-date-expiring{border:2px var(--ars-color-warning, #FFC107) solid!important}.word-hit-chunk,.word-hit{display:inline-block;font-size:inherit;background-color:var(--ars-word-hit-background-color, #FFEB3B);color:var(--ars-word-hit-color, #191c1b);padding:0 4px;margin:0 4px;border-radius:4px}.word-hit-chunk{background-color:var(--ars-word-chunk-hit-background-color, #8AFF59);color:var(--ars-word-hit-chunk-color, #191c1b)}.message-container{font-size:large;display:flex;justify-content:center;align-items:center;height:50%}.message-container .message{color:var(--ars-color-secondary, #4a635f);text-align:center;padding:40px}.module-content{overflow-x:hidden!important}.module-toolbar{padding:0 5px 0 10px!important}.frame{height:100%!important;min-height:100%!important}.drawer,.drawer-small{background-color:var(--ars-drawer-background-color)!important}@media screen and (min-width:431px){.drawer-small{min-width:360px!important;max-width:360px!important}}.channel-box{border-radius:4px;border:2px solid var(--ars-color-primary);color:var(--ars-color-primary);text-align:center;min-width:28px;min-height:28px;margin-right:12px;display:flex;align-items:center;justify-content:center}.channel-box .label{font-size:15px;font-weight:700}.channel-disabled{opacity:.3}.command{line-height:16px;color:var(--ars-color-primary);font-weight:500;cursor:pointer!important;text-decoration:none}.command:hover{opacity:.8!important}.link{color:var(--ars-color-link);font-weight:500;cursor:pointer!important;text-decoration:none}.link:hover{opacity:.8}.no-spaced{padding-top:0!important;padding-bottom:0!important}.spaced{padding-top:20px!important;padding-bottom:20px!important}.spaced-bottom-20{padding-bottom:20px!important}.spaced-top-20{padding-top:20px!important}.section,.spaced-bottom-10{padding-bottom:10px!important}.spaced-top-10{padding-top:10px!important}.section-title{font-size:large;font-weight:500;padding-top:20px;padding-bottom:8px}.info-3{margin-top:6px;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.info-4{margin-top:6px;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-accent, #7894ae);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}\n"], dependencies: [{ kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: FormRoot, selector: "form[formRoot]", inputs: ["formRoot"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.FxLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg] ", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.FxFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg] ", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i1.FxShowHideDirective, selector: " [fxShow], [fxHide], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg] ", inputs: ["fxShow", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i1.FxLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg] ", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FxLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg] ", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.FxFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg] ", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.FxFlexFillDirective, selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ", inputs: ["fxFlexFill", "fxFill", "fxFlexFill.xs", "fxFlexFill.sm", "fxFlexFill.md", "fxFlexFill.lg", "fxFlexFill.xl", "fxFlexFill.lt-sm", "fxFlexFill.lt-md", "fxFlexFill.lt-lg", "fxFlexFill.lt-xl", "fxFlexFill.gt-xs", "fxFlexFill.gt-sm", "fxFlexFill.gt-md", "fxFlexFill.gt-lg"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i5$1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i6.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i6.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i7.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i7.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i7.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i7.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i7.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i4$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i12.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i12.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i12.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i12.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i12.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: MatDatepickerParseErrorFixDirective, selector: "input[matDatepicker], input[matStartDate], input[matEndDate]" }, { kind: "directive", type: MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i13.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i13.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i14.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i14.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i14.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i14.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i15.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "fullWidth", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i16.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: ChipsSelectorComponent, selector: "chips-selector", inputs: ["options", "collapsedWidth", "collapsedDisplayMode", "collapseAt", "collapseAtContainer", "label", "multiple", "mustSelect", "mode", "stacked", "padAt", "required", "placeholder", "disabled"], outputs: ["changed"] }, { kind: "component", type: ButtonSelectorComponent, selector: "button-selector", inputs: ["disabled", "width", "border", "borderRadius", "label", "labelSelected", "options", "autoSelect"], outputs: ["changed", "selected"] }, { kind: "component", type: ButtonToggleComponent, selector: "button-toggle", inputs: ["value", "width", "border", "labelOn", "labelOff", "iconOn", "iconOff", "cssClass", "cssClassSmall"], outputs: ["changed"] }, { kind: "component", type: ClipperSearchResultItemComponent, selector: "clipper-search-result-item", inputs: ["parent", "item", "actions", "tileNoPictureUrl", "tilePictureUrl", "isSelectable", "isReadable", "isReadableModel", "displayModifiedTitle", "displayModelName", "displayDate", "displayMode"], outputs: ["itemChange"] }, { kind: "component", type: ClipperDocumentMenuComponent, selector: "clipper-document-menu", inputs: ["useSelections", "selectionSource", "parent", "item", "isReference", "isReadable", "isReadableModel", "isLawInForce", "canPrint", "canFind", "canUseAIAssistant", "canUseRS", "canOpenDocument"] }, { kind: "component", type: ClipperSearchFacetsComponent, selector: "clipper-search-facets", inputs: ["handleTooManyResults"], outputs: ["changed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3220
3216
|
}
|
|
3221
3217
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ClipperBrowserComponent, decorators: [{
|
|
3222
3218
|
type: Component,
|
|
3223
3219
|
args: [{ selector: 'clipper-browser', standalone: true, imports: [FormField, FormRoot, FlexLayoutModule, MatIconModule, MatButtonModule, MatTooltipModule, MatSidenavModule,
|
|
3224
|
-
MatExpansionModule, MatDividerModule, MatMenuModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, MatBadge,
|
|
3220
|
+
MatExpansionModule, MatDividerModule, MatMenuModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, MatDatepickerParseErrorFixDirective, MatBadge,
|
|
3225
3221
|
ScrollingModule, MatSelectModule, MatChipsModule, MatSlideToggleModule, MatPaginator, MatCheckboxModule, MatButtonToggleModule, MatProgressBarModule,
|
|
3226
3222
|
ChipsSelectorComponent, ButtonSelectorComponent, ButtonToggleComponent,
|
|
3227
3223
|
ClipperSearchResultItemComponent,
|
|
@@ -4654,18 +4650,20 @@ var searchFreeTextHelp_component = /*#__PURE__*/Object.freeze({
|
|
|
4654
4650
|
ClipperSearchFreeTextHelpComponent: ClipperSearchFreeTextHelpComponent
|
|
4655
4651
|
});
|
|
4656
4652
|
|
|
4653
|
+
/** Neutral form model: it declares every field the form owns and its empty value. */
|
|
4654
|
+
const _EMPTY_ITEM = {
|
|
4655
|
+
queryPhrase: '',
|
|
4656
|
+
queryAnd: '',
|
|
4657
|
+
queryOr: '',
|
|
4658
|
+
queryStart: '',
|
|
4659
|
+
queryNot: '',
|
|
4660
|
+
};
|
|
4657
4661
|
class ClipperSearchFreeTextQueryBuilderComponent {
|
|
4658
4662
|
constructor() {
|
|
4659
4663
|
this.done = output();
|
|
4660
4664
|
this.dialogService = inject(DialogService);
|
|
4661
4665
|
/** Model backing the signal form: one entry per query operator field. */
|
|
4662
|
-
this.model = signal(
|
|
4663
|
-
queryPhrase: '',
|
|
4664
|
-
queryAnd: '',
|
|
4665
|
-
queryOr: '',
|
|
4666
|
-
queryStart: '',
|
|
4667
|
-
queryNot: '',
|
|
4668
|
-
}, /* @ts-ignore */
|
|
4666
|
+
this.model = signal(this.toForm(), /* @ts-ignore */
|
|
4669
4667
|
...(ngDevMode ? [{ debugName: "model" }] : /* istanbul ignore next */ []));
|
|
4670
4668
|
/** Signal form for the query fields; every field is capped at 200 characters. */
|
|
4671
4669
|
this.form = form(this.model, p => {
|
|
@@ -4677,17 +4675,23 @@ class ClipperSearchFreeTextQueryBuilderComponent {
|
|
|
4677
4675
|
});
|
|
4678
4676
|
}
|
|
4679
4677
|
/**
|
|
4680
|
-
*
|
|
4678
|
+
* Builds the form model. The builder always opens empty, so the model is the neutral
|
|
4679
|
+
* one; it also serves as what the "clear" button restores.
|
|
4680
|
+
* @returns A fresh form model.
|
|
4681
4681
|
*/
|
|
4682
|
-
|
|
4683
|
-
|
|
4682
|
+
toForm() {
|
|
4683
|
+
return DtoUtils.toForm(_EMPTY_ITEM);
|
|
4684
4684
|
}
|
|
4685
4685
|
/**
|
|
4686
|
-
*
|
|
4687
|
-
*
|
|
4688
|
-
*
|
|
4686
|
+
* Assembles the Lucene-style free-text query out of the five operator fields.
|
|
4687
|
+
*
|
|
4688
|
+
* Ad-hoc because the payload is not a projection of the model: every field
|
|
4689
|
+
* contributes a differently shaped fragment (a quoted phrase, `+` terms, a `*`
|
|
4690
|
+
* wildcard, `-` exclusions) to one single string.
|
|
4691
|
+
* @returns The query to emit, or `undefined` when only the exclusion operator was
|
|
4692
|
+
* filled in, which cannot produce a valid query on its own.
|
|
4689
4693
|
*/
|
|
4690
|
-
|
|
4694
|
+
toPayload() {
|
|
4691
4695
|
let query = '';
|
|
4692
4696
|
const m = this.model();
|
|
4693
4697
|
const phrase = m.queryPhrase?.trim() ?? '';
|
|
@@ -4724,8 +4728,7 @@ class ClipperSearchFreeTextQueryBuilderComponent {
|
|
|
4724
4728
|
// NOT — each comma-separated word is prefixed with - (requires at least one positive term)
|
|
4725
4729
|
if (not.length > 0) {
|
|
4726
4730
|
if (query.length === 0) {
|
|
4727
|
-
|
|
4728
|
-
return;
|
|
4731
|
+
return undefined;
|
|
4729
4732
|
}
|
|
4730
4733
|
for (const part of not.split(',')) {
|
|
4731
4734
|
if (query.length > 0)
|
|
@@ -4733,8 +4736,28 @@ class ClipperSearchFreeTextQueryBuilderComponent {
|
|
|
4733
4736
|
query += `-"${part.replaceAll('"', '').trim()}" `;
|
|
4734
4737
|
}
|
|
4735
4738
|
}
|
|
4736
|
-
|
|
4737
|
-
|
|
4739
|
+
return { query: query.trim() };
|
|
4740
|
+
}
|
|
4741
|
+
/**
|
|
4742
|
+
* Resets all query fields to empty strings.
|
|
4743
|
+
*/
|
|
4744
|
+
clear() {
|
|
4745
|
+
this.model.set(this.toForm());
|
|
4746
|
+
}
|
|
4747
|
+
/**
|
|
4748
|
+
* Emits the assembled free-text query via `done`.
|
|
4749
|
+
*
|
|
4750
|
+
* Shows an error dialog when only the NOT operator has been filled in, since it
|
|
4751
|
+
* requires at least one positive term to produce a valid query.
|
|
4752
|
+
*/
|
|
4753
|
+
ok() {
|
|
4754
|
+
const payload = this.toPayload();
|
|
4755
|
+
if (!payload) {
|
|
4756
|
+
this.dialogService.error("L'operatore di esclusione funziona solo se prima è stato inserito un valore in almeno uno degli altri quattro campi.");
|
|
4757
|
+
return;
|
|
4758
|
+
}
|
|
4759
|
+
if (payload.query.length > 0)
|
|
4760
|
+
this.done.emit(payload);
|
|
4738
4761
|
}
|
|
4739
4762
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ClipperSearchFreeTextQueryBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4740
4763
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.3", type: ClipperSearchFreeTextQueryBuilderComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div mat-dialog-title>Trova gli elementi che contengono...</div>\n<mat-dialog-content>\n <form [formRoot]=\"form\" (keyup.enter)=\"!form().invalid() ? ok() : undefined\" novalidate>\n <div fxLayout=\"column\" style=\"padding-bottom: 20px;\">\n <mat-form-field>\n <mat-label>Questa esatta parola o frase</mat-label>\n <input matInput [formField]=\"form.queryPhrase\" />\n @if (form.queryPhrase().value()) {\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"form.queryPhrase().value.set('')\">\n <mat-icon>close</mat-icon>\n </a>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label>Tutte queste parole</mat-label>\n <input matInput [formField]=\"form.queryAnd\" />\n @if (form.queryAnd().value()) {\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"form.queryAnd().value.set('')\">\n <mat-icon>close</mat-icon>\n </a>\n }\n <mat-hint>Separate da virgola</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Una qualunque di queste parole</mat-label>\n <input matInput [formField]=\"form.queryOr\" />\n @if (form.queryOr().value()) {\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"form.queryOr().value.set('')\">\n <mat-icon>close</mat-icon>\n </a>\n }\n <mat-hint>Separate da virgola</mat-hint>\n </mat-form-field>\n <!--\n <mat-form-field>\n <mat-label>Parole che iniziano con</mat-label>\n <input matInput [formField]=\"form.queryStart\" />\n @if (form.queryStart().value()) {\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"form.queryStart().value.set('')\">\n <mat-icon>close</mat-icon>\n </a>\n }\n <mat-hint>Separate da virgola</mat-hint>\n </mat-form-field>\n -->\n <mat-form-field>\n <mat-label>Nessuna qualunque di queste parole</mat-label>\n <input matInput [formField]=\"form.queryNot\" />\n @if (form.queryNot().value()) {\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"form.queryNot().value.set('')\">\n <mat-icon>close</mat-icon>\n </a>\n }\n <mat-hint>Separate da virgola. L'operatore di esclusione funziona solo se prima \u00E8 stato inserito un valore in\n almeno uno degli altri quattro campi. </mat-hint>\n </mat-form-field>\n </div>\n </form>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex=\"30\" fxLayoutAlign=\"start\">\n <button type=\"button\" mat-stroked-button (click)=\"clear()\">Pulisci</button>\n </div>\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\n <button mat-flat-button (click)=\"ok()\">Ok</button>\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\n </div>\n </div>\n</mat-dialog-actions>", styles: [""], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: FormRoot, selector: "form[formRoot]", inputs: ["formRoot"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.FxLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg] ", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.FxFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg] ", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i1.FxLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg] ", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FxLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg] ", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.FxFlexFillDirective, selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ", inputs: ["fxFlexFill", "fxFill", "fxFlexFill.xs", "fxFlexFill.sm", "fxFlexFill.md", "fxFlexFill.lg", "fxFlexFill.xl", "fxFlexFill.lt-sm", "fxFlexFill.lt-md", "fxFlexFill.lt-lg", "fxFlexFill.lt-xl", "fxFlexFill.gt-xs", "fxFlexFill.gt-sm", "fxFlexFill.gt-md", "fxFlexFill.gt-lg"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|