@arsedizioni/ars-utils 22.5.35 → 22.5.37

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.
@@ -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 } from '@arsedizioni/ars-utils/core.date';
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,7 +43,7 @@ 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
49
  import { ChipsSelectorComponent, ButtonSelectorComponent, ButtonToggleComponent, CalendarEmptyHeader } from '@arsedizioni/ars-utils/ui.controls';
@@ -1756,42 +1757,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImpor
1756
1757
  }], 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
1758
 
1758
1759
  /**
1759
- * Creates an empty filter model with every field at its default value.
1760
- * @returns A fresh, empty BrowserFilterModel.
1760
+ * Revives a range bound coming from a saved filter, whose data is stored as JSON and
1761
+ * therefore hands the dates back as ISO strings. The form model only ever holds `Date`.
1762
+ * @param value - The raw bound read from the search parameters.
1763
+ * @returns The bound as a `Date`, or `null` when it is absent or unparseable.
1761
1764
  */
1762
- function emptyFilterModel() {
1763
- return {
1764
- modules: null,
1765
- tags: null,
1766
- topics: null,
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
- };
1765
+ function toDate(value) {
1766
+ if (!value)
1767
+ return null;
1768
+ const date = value instanceof Date ? value : new Date(value);
1769
+ return isNaN(date.getTime()) ? null : date;
1794
1770
  }
1771
+ /** Neutral form model: it declares every field the form owns and its empty value. */
1772
+ const _EMPTY_ITEM$1 = {
1773
+ modules: null,
1774
+ tags: null,
1775
+ topics: null,
1776
+ sectors: null,
1777
+ authors: null,
1778
+ channels: null,
1779
+ number: '',
1780
+ year: null,
1781
+ from: null,
1782
+ to: null,
1783
+ text: '',
1784
+ titleOnly: false,
1785
+ showNotAbrogatedDocumentsOnly: false,
1786
+ showCommentedDocumentsOnly: false,
1787
+ showUnreadDocumentsOnly: false,
1788
+ sourceNumber: '',
1789
+ sourceYear: null,
1790
+ sourceFrom: null,
1791
+ sourceTo: null,
1792
+ source: null,
1793
+ author: null,
1794
+ type: null,
1795
+ changedNumber: '',
1796
+ changedYear: null,
1797
+ changedTitle: '',
1798
+ modifierNumber: '',
1799
+ modifierYear: null,
1800
+ modifierTitle: '',
1801
+ changeReason: null,
1802
+ };
1795
1803
  class ClipperBrowserComponent extends ClipperSearchResultManager {
1796
1804
  /**
1797
1805
  * Error text for a date range: whichever end is in error speaks for the pair.
@@ -2005,10 +2013,10 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
2005
2013
  /**
2006
2014
  * Model backing the filter-pane signal form. This is the single source of truth
2007
2015
  * for every filter value bound in the template; `filterParams` only carries the
2008
- * assembled query DTO (see syncParams/loadFilter). Empty values are '' / null /
2009
- * false / null-array — never undefined, so every child field exists.
2016
+ * assembled query DTO (see toForm/toPayload and loadFilter). Empty values are
2017
+ * '' / null / false / null-array — never undefined, so every child field exists.
2010
2018
  */
2011
- this.filterModel = signal(emptyFilterModel(), /* @ts-ignore */
2019
+ this.filterModel = signal(DtoUtils.toForm(_EMPTY_ITEM$1), /* @ts-ignore */
2012
2020
  ...(ngDevMode ? [{ debugName: "filterModel" }] : /* istanbul ignore next */ []));
2013
2021
  /**
2014
2022
  * Signal form for the filter pane. The four year fields accept values from 1750
@@ -2476,34 +2484,8 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
2476
2484
  this.patchFilter({ modules: filter.modules ?? null });
2477
2485
  setTimeout(() => {
2478
2486
  this.filterParams.topic = filter.topic;
2479
- this.patchFilter({
2480
- sectors: filter.sectors ?? null,
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
- });
2487
+ // The channels are a per-account preference, not part of the saved filter.
2488
+ this.filterModel.set({ ...this.toForm(filter), channels: this.filterModel().channels });
2507
2489
  // Show expansion panels
2508
2490
  const m = this.filterModel();
2509
2491
  if (m.sourceNumber !== '' ||
@@ -2540,7 +2522,7 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
2540
2522
  const module = this.modules().find(x => x.value === ClipperModule.NormativaVigente);
2541
2523
  const channels = this.filterModel().channels;
2542
2524
  this.filterModel.set({
2543
- ...emptyFilterModel(),
2525
+ ...DtoUtils.toForm(_EMPTY_ITEM$1),
2544
2526
  channels,
2545
2527
  modules: module ? [module] : null,
2546
2528
  });
@@ -2549,78 +2531,93 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
2549
2531
  this.filterParams.searchName = undefined;
2550
2532
  }
2551
2533
  /**
2552
- * Copies the filter model into `filterParams`, normalizing empty values back
2553
- * to the undefined-based convention of ClipperSearchParams.
2534
+ * Builds the filter form model from a set of search parameters.
2535
+ *
2536
+ * Ad-hoc because the two publication ranges do not map field-to-field: the DTO keeps
2537
+ * them as `fromDate`/`toDate`, and a range is only restored when both of its bounds
2538
+ * are set, exactly as the saved filters were written.
2539
+ *
2540
+ * @param dto - The search parameters to read: the live `filterParams` on a state
2541
+ * restore, or the deserialized data of a saved filter.
2542
+ * @returns A fresh form model; the caller decides what to keep of the current one.
2543
+ */
2544
+ toForm(dto) {
2545
+ const model = DtoUtils.toForm(_EMPTY_ITEM$1, dto);
2546
+ const from = toDate(dto.fromDate);
2547
+ const to = toDate(dto.toDate);
2548
+ const sourceFrom = toDate(dto.sourceFromDate);
2549
+ const sourceTo = toDate(dto.sourceToDate);
2550
+ model.from = from && to ? from : null;
2551
+ model.to = from && to ? to : null;
2552
+ model.sourceFrom = sourceFrom && sourceTo ? sourceFrom : null;
2553
+ model.sourceTo = sourceFrom && sourceTo ? sourceTo : null;
2554
+ return model;
2555
+ }
2556
+ /**
2557
+ * Builds the search payload out of the filter model, normalizing empty values back to
2558
+ * the undefined-based convention of {@link ClipperSearchParams}.
2559
+ *
2560
+ * Ad-hoc for two reasons. The two publication ranges are not payload fields: they
2561
+ * reach the DTO as `fromDate`/`toDate` through {@link loadFilter} and
2562
+ * {@link prepareFetch}. And every key has to be listed, `undefined` included, because
2563
+ * `filterParams` is a long-lived object — reused across searches and serialized into
2564
+ * saved filters — so a field the user has just emptied must be overwritten, not
2565
+ * merely left out of the copy the way {@link DtoUtils.toPayload} does.
2566
+ *
2567
+ * @returns The subset of the search parameters the filter pane owns.
2554
2568
  */
2555
- syncParams() {
2556
- const m = this.filterModel();
2557
- this.filterParams.modules = m.modules ?? undefined;
2558
- this.filterParams.tags = m.tags ?? undefined;
2559
- this.filterParams.topics = m.topics ?? undefined;
2560
- this.filterParams.sectors = m.sectors ?? undefined;
2561
- this.filterParams.authors = m.authors ?? undefined;
2562
- this.filterParams.channels = m.channels ?? undefined;
2563
- this.filterParams.number = m.number || undefined;
2564
- this.filterParams.year = m.year ?? undefined;
2565
- this.filterParams.text = m.text || undefined;
2566
- this.filterParams.titleOnly = m.titleOnly;
2567
- this.filterParams.showNotAbrogatedDocumentsOnly = m.showNotAbrogatedDocumentsOnly;
2568
- this.filterParams.showCommentedDocumentsOnly = m.showCommentedDocumentsOnly;
2569
- this.filterParams.showUnreadDocumentsOnly = m.showUnreadDocumentsOnly;
2570
- this.filterParams.sourceNumber = m.sourceNumber || undefined;
2571
- this.filterParams.sourceYear = m.sourceYear ?? undefined;
2572
- this.filterParams.source = m.source ?? undefined;
2573
- this.filterParams.author = m.author ?? undefined;
2574
- this.filterParams.type = m.type ?? undefined;
2575
- this.filterParams.changedNumber = m.changedNumber || undefined;
2576
- this.filterParams.changedYear = m.changedYear ?? undefined;
2577
- this.filterParams.changedTitle = m.changedTitle || undefined;
2578
- this.filterParams.modifierNumber = m.modifierNumber || undefined;
2579
- this.filterParams.modifierYear = m.modifierYear ?? undefined;
2580
- this.filterParams.modifierTitle = m.modifierTitle || undefined;
2581
- this.filterParams.changeReason = m.changeReason ?? undefined;
2569
+ toPayload() {
2570
+ const { from, to, sourceFrom, sourceTo, ...rest } = this.filterModel();
2571
+ const dto = DtoUtils.toPayload(rest);
2572
+ return {
2573
+ modules: dto.modules,
2574
+ tags: dto.tags,
2575
+ topics: dto.topics,
2576
+ sectors: dto.sectors,
2577
+ authors: dto.authors,
2578
+ channels: dto.channels,
2579
+ number: dto.number,
2580
+ year: dto.year,
2581
+ text: dto.text,
2582
+ titleOnly: dto.titleOnly,
2583
+ showNotAbrogatedDocumentsOnly: dto.showNotAbrogatedDocumentsOnly,
2584
+ showCommentedDocumentsOnly: dto.showCommentedDocumentsOnly,
2585
+ showUnreadDocumentsOnly: dto.showUnreadDocumentsOnly,
2586
+ sourceNumber: dto.sourceNumber,
2587
+ sourceYear: dto.sourceYear,
2588
+ source: dto.source,
2589
+ author: dto.author,
2590
+ type: dto.type,
2591
+ changedNumber: dto.changedNumber,
2592
+ changedYear: dto.changedYear,
2593
+ changedTitle: dto.changedTitle,
2594
+ modifierNumber: dto.modifierNumber,
2595
+ modifierYear: dto.modifierYear,
2596
+ modifierTitle: dto.modifierTitle,
2597
+ changeReason: dto.changeReason,
2598
+ };
2582
2599
  }
2583
2600
  /**
2584
2601
  * Commits the form model to filterParams before the component state is serialised.
2585
2602
  */
2586
2603
  onStateSaving() {
2587
- this.syncParams();
2604
+ Object.assign(this.filterParams, this.toPayload());
2588
2605
  }
2589
2606
  /**
2590
2607
  * Rebuilds the form model from filterParams after a state restore.
2591
- * The publication intervals are intentionally not rebuilt from fromDate/toDate,
2592
- * matching the historical behavior where the range inputs were not restored.
2608
+ * The publication intervals are intentionally not rebuilt here — filterParams carries
2609
+ * no fromDate/toDate at this point — matching the historical behavior where the range
2610
+ * inputs were not restored.
2593
2611
  */
2594
2612
  onStateRestored() {
2595
- const p = this.filterParams;
2596
- this.filterModel.update(m => ({
2597
- ...m,
2598
- modules: p.modules ?? null,
2599
- tags: p.tags ?? null,
2600
- topics: p.topics ?? null,
2601
- sectors: p.sectors ?? null,
2602
- authors: p.authors ?? null,
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
- }));
2613
+ const current = this.filterModel();
2614
+ this.filterModel.set({
2615
+ ...this.toForm(this.filterParams),
2616
+ from: current.from,
2617
+ to: current.to,
2618
+ sourceFrom: current.sourceFrom,
2619
+ sourceTo: current.sourceTo,
2620
+ });
2624
2621
  }
2625
2622
  /**
2626
2623
  * Builds a DateInterval for the publication range of the current model.
@@ -2637,7 +2634,7 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
2637
2634
  * Load selected filter
2638
2635
  */
2639
2636
  loadFilter() {
2640
- this.syncParams();
2637
+ Object.assign(this.filterParams, this.toPayload());
2641
2638
  if (this.filterParams.year && this.filterParams.year > 0) {
2642
2639
  const year = this.filterParams.year;
2643
2640
  this.filterParams.fromDate = new Date(year, 0, 1, 2);
@@ -2893,7 +2890,7 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
2893
2890
  * @returns The resolved {@link ClipperSearchParams} ready to be sent to the API.
2894
2891
  */
2895
2892
  prepareFetch(newSearch = false) {
2896
- this.syncParams();
2893
+ Object.assign(this.filterParams, this.toPayload());
2897
2894
  this.filterParams.fromDate = this.modelInterval().fromAsDate;
2898
2895
  this.filterParams.toDate = this.modelInterval().toAsDate;
2899
2896
  this.filterParams.sourceFromDate = this.modelInterval(true).fromAsDate;
@@ -3216,12 +3213,12 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
3216
3213
  this.patchFilter({ topics: [] });
3217
3214
  }
3218
3215
  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 &nbsp;\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 }); }
3216
+ 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 &nbsp;\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
3217
  }
3221
3218
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ClipperBrowserComponent, decorators: [{
3222
3219
  type: Component,
3223
3220
  args: [{ selector: 'clipper-browser', standalone: true, imports: [FormField, FormRoot, FlexLayoutModule, MatIconModule, MatButtonModule, MatTooltipModule, MatSidenavModule,
3224
- MatExpansionModule, MatDividerModule, MatMenuModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, MatBadge,
3221
+ MatExpansionModule, MatDividerModule, MatMenuModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, MatDatepickerParseErrorFixDirective, MatBadge,
3225
3222
  ScrollingModule, MatSelectModule, MatChipsModule, MatSlideToggleModule, MatPaginator, MatCheckboxModule, MatButtonToggleModule, MatProgressBarModule,
3226
3223
  ChipsSelectorComponent, ButtonSelectorComponent, ButtonToggleComponent,
3227
3224
  ClipperSearchResultItemComponent,
@@ -4654,18 +4651,20 @@ var searchFreeTextHelp_component = /*#__PURE__*/Object.freeze({
4654
4651
  ClipperSearchFreeTextHelpComponent: ClipperSearchFreeTextHelpComponent
4655
4652
  });
4656
4653
 
4654
+ /** Neutral form model: it declares every field the form owns and its empty value. */
4655
+ const _EMPTY_ITEM = {
4656
+ queryPhrase: '',
4657
+ queryAnd: '',
4658
+ queryOr: '',
4659
+ queryStart: '',
4660
+ queryNot: '',
4661
+ };
4657
4662
  class ClipperSearchFreeTextQueryBuilderComponent {
4658
4663
  constructor() {
4659
4664
  this.done = output();
4660
4665
  this.dialogService = inject(DialogService);
4661
4666
  /** 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 */
4667
+ this.model = signal(this.toForm(), /* @ts-ignore */
4669
4668
  ...(ngDevMode ? [{ debugName: "model" }] : /* istanbul ignore next */ []));
4670
4669
  /** Signal form for the query fields; every field is capped at 200 characters. */
4671
4670
  this.form = form(this.model, p => {
@@ -4677,17 +4676,23 @@ class ClipperSearchFreeTextQueryBuilderComponent {
4677
4676
  });
4678
4677
  }
4679
4678
  /**
4680
- * Resets all query fields to empty strings.
4679
+ * Builds the form model. The builder always opens empty, so the model is the neutral
4680
+ * one; it also serves as what the "clear" button restores.
4681
+ * @returns A fresh form model.
4681
4682
  */
4682
- clear() {
4683
- this.model.set({ queryPhrase: '', queryAnd: '', queryOr: '', queryStart: '', queryNot: '' });
4683
+ toForm() {
4684
+ return DtoUtils.toForm(_EMPTY_ITEM);
4684
4685
  }
4685
4686
  /**
4686
- * Builds the Lucene-style free-text query from the current field values and emits it via `done`.
4687
- * Shows an error dialog when only the NOT operator has been filled in, since it requires
4688
- * at least one positive term to produce a valid query.
4687
+ * Assembles the Lucene-style free-text query out of the five operator fields.
4688
+ *
4689
+ * Ad-hoc because the payload is not a projection of the model: every field
4690
+ * contributes a differently shaped fragment (a quoted phrase, `+` terms, a `*`
4691
+ * wildcard, `-` exclusions) to one single string.
4692
+ * @returns The query to emit, or `undefined` when only the exclusion operator was
4693
+ * filled in, which cannot produce a valid query on its own.
4689
4694
  */
4690
- ok() {
4695
+ toPayload() {
4691
4696
  let query = '';
4692
4697
  const m = this.model();
4693
4698
  const phrase = m.queryPhrase?.trim() ?? '';
@@ -4724,8 +4729,7 @@ class ClipperSearchFreeTextQueryBuilderComponent {
4724
4729
  // NOT — each comma-separated word is prefixed with - (requires at least one positive term)
4725
4730
  if (not.length > 0) {
4726
4731
  if (query.length === 0) {
4727
- this.dialogService.error("L'operatore di esclusione funziona solo se prima è stato inserito un valore in almeno uno degli altri quattro campi.");
4728
- return;
4732
+ return undefined;
4729
4733
  }
4730
4734
  for (const part of not.split(',')) {
4731
4735
  if (query.length > 0)
@@ -4733,8 +4737,28 @@ class ClipperSearchFreeTextQueryBuilderComponent {
4733
4737
  query += `-"${part.replaceAll('"', '').trim()}" `;
4734
4738
  }
4735
4739
  }
4736
- if (query.length > 0)
4737
- this.done.emit({ query: query.trim() });
4740
+ return { query: query.trim() };
4741
+ }
4742
+ /**
4743
+ * Resets all query fields to empty strings.
4744
+ */
4745
+ clear() {
4746
+ this.model.set(this.toForm());
4747
+ }
4748
+ /**
4749
+ * Emits the assembled free-text query via `done`.
4750
+ *
4751
+ * Shows an error dialog when only the NOT operator has been filled in, since it
4752
+ * requires at least one positive term to produce a valid query.
4753
+ */
4754
+ ok() {
4755
+ const payload = this.toPayload();
4756
+ if (!payload) {
4757
+ this.dialogService.error("L'operatore di esclusione funziona solo se prima è stato inserito un valore in almeno uno degli altri quattro campi.");
4758
+ return;
4759
+ }
4760
+ if (payload.query.length > 0)
4761
+ this.done.emit(payload);
4738
4762
  }
4739
4763
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ClipperSearchFreeTextQueryBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4740
4764
  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 }); }