@arsedizioni/ars-utils 22.5.36 → 22.5.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/README.md +179 -179
  2. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +174 -151
  3. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  4. package/fesm2022/arsedizioni-ars-utils-core.date.mjs +16 -5
  5. package/fesm2022/arsedizioni-ars-utils-core.date.mjs.map +1 -1
  6. package/fesm2022/arsedizioni-ars-utils-core.mjs +43 -7
  7. package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
  8. package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +0 -6
  9. package/fesm2022/arsedizioni-ars-utils-core.validators.mjs.map +1 -1
  10. package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +73 -3
  11. package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs.map +1 -1
  12. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +91 -30
  13. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs.map +1 -1
  14. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs.map +1 -1
  15. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +97 -42
  16. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
  17. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +24 -10
  18. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs.map +1 -1
  19. package/fesm2022/arsedizioni-ars-utils-ui.files.mjs.map +1 -1
  20. package/package.json +1 -1
  21. package/types/arsedizioni-ars-utils-clipper.ui.d.ts +79 -23
  22. package/types/arsedizioni-ars-utils-core.d.ts +46 -10
  23. package/types/arsedizioni-ars-utils-ui.controls.d.ts +34 -1
  24. package/types/arsedizioni-ars-utils-ui.dialogs.auth.d.ts +116 -6
  25. package/types/arsedizioni-ars-utils-ui.dialogs.prompt.d.ts +93 -11
  26. package/types/arsedizioni-ars-utils-ui.dialogs.select.d.ts +29 -1
@@ -17,6 +17,7 @@ import * as i14 from '@angular/material/chips';
17
17
  import { MatChipsModule } from '@angular/material/chips';
18
18
  import * as i12 from '@angular/material/datepicker';
19
19
  import { MatDatepickerModule, MatCalendar } from '@angular/material/datepicker';
20
+ import { MatDatepickerParseErrorFixDirective, ChipsSelectorComponent, ButtonSelectorComponent, ButtonToggleComponent, CalendarEmptyHeader } from '@arsedizioni/ars-utils/ui.controls';
20
21
  import * as i4$1 from '@angular/material/divider';
21
22
  import { MatDividerModule } from '@angular/material/divider';
22
23
  import * as i7 from '@angular/material/expansion';
@@ -42,10 +43,9 @@ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
42
43
  import * as i3 from '@angular/material/tooltip';
43
44
  import { MatTooltipModule } from '@angular/material/tooltip';
44
45
  import { ClipperService, ClipperModel, ClipperUtils, ClipperSearchFacetsSnapshot, ClipperFacet, ClipperMessages, ClipperQueryReferencesMode, ClipperModule, ClipperSelectionMode, ClipperSearchResult, ClipperSearchParams, ClipperSort, ClipperSearchUtils, ClipperQueryDocumentFlags, ClipperSources, ClipperDocumentChangeReasons, ClipperSectors, ClipperRegions, ClipperAuthors, ClipperSectorTypes } from '@arsedizioni/ars-utils/clipper.common';
45
- import { BroadcastService, SystemUtils, ThemeService, ScreenService, DateFormat, FormatPipe, DateInterval, SelectableModel } from '@arsedizioni/ars-utils/core';
46
+ import { BroadcastService, SystemUtils, ThemeService, ScreenService, DateFormat, FormatPipe, DtoUtils, DateInterval, SelectableModel } from '@arsedizioni/ars-utils/core';
46
47
  import * as i1 from '@arsedizioni/ars-utils/ui';
47
48
  import { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';
48
- import { ChipsSelectorComponent, ButtonSelectorComponent, ButtonToggleComponent, CalendarEmptyHeader } from '@arsedizioni/ars-utils/ui.controls';
49
49
  import { switchMap, EMPTY, finalize, Subject } from 'rxjs';
50
50
  import { debounceTime, finalize as finalize$1 } from 'rxjs/operators';
51
51
  import { startOfToday, startOfDay, subDays, endOfDay, startOfMonth, endOfMonth } from 'date-fns';
@@ -1756,42 +1756,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImpor
1756
1756
  }], ctorParameters: () => [], propDecorators: { parent: [{ type: i0.Input, args: [{ isSignal: true, alias: "parent", required: true }] }], item: [{ type: i0.Input, args: [{ isSignal: true, alias: "item", required: true }] }, { type: i0.Output, args: ["itemChange"] }], actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: true }] }], tileNoPictureUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "tileNoPictureUrl", required: false }] }], tilePictureUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "tilePictureUrl", required: false }] }], isSelectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSelectable", required: false }] }], isReadable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isReadable", required: false }] }], isReadableModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "isReadableModel", required: false }] }], displayModifiedTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayModifiedTitle", required: false }] }], displayModelName: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayModelName", required: false }] }], displayDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayDate", required: false }] }], displayMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayMode", required: false }] }] } });
1757
1757
 
1758
1758
  /**
1759
- * Creates an empty filter model with every field at its default value.
1760
- * @returns A fresh, empty BrowserFilterModel.
1759
+ * Revives a range bound coming from a saved filter, whose data is stored as JSON and
1760
+ * therefore hands the dates back as ISO strings. The form model only ever holds `Date`.
1761
+ * @param value - The raw bound read from the search parameters.
1762
+ * @returns The bound as a `Date`, or `null` when it is absent or unparseable.
1761
1763
  */
1762
- function 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
- };
1764
+ function toDate(value) {
1765
+ if (!value)
1766
+ return null;
1767
+ const date = value instanceof Date ? value : new Date(value);
1768
+ return isNaN(date.getTime()) ? null : date;
1794
1769
  }
1770
+ /** Neutral form model: it declares every field the form owns and its empty value. */
1771
+ const _EMPTY_ITEM$1 = {
1772
+ modules: null,
1773
+ tags: null,
1774
+ topics: null,
1775
+ sectors: null,
1776
+ authors: null,
1777
+ channels: null,
1778
+ number: '',
1779
+ year: null,
1780
+ from: null,
1781
+ to: null,
1782
+ text: '',
1783
+ titleOnly: false,
1784
+ showNotAbrogatedDocumentsOnly: false,
1785
+ showCommentedDocumentsOnly: false,
1786
+ showUnreadDocumentsOnly: false,
1787
+ sourceNumber: '',
1788
+ sourceYear: null,
1789
+ sourceFrom: null,
1790
+ sourceTo: null,
1791
+ source: null,
1792
+ author: null,
1793
+ type: null,
1794
+ changedNumber: '',
1795
+ changedYear: null,
1796
+ changedTitle: '',
1797
+ modifierNumber: '',
1798
+ modifierYear: null,
1799
+ modifierTitle: '',
1800
+ changeReason: null,
1801
+ };
1795
1802
  class ClipperBrowserComponent extends ClipperSearchResultManager {
1796
1803
  /**
1797
1804
  * Error text for a date range: whichever end is in error speaks for the pair.
@@ -2005,10 +2012,10 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
2005
2012
  /**
2006
2013
  * Model backing the filter-pane signal form. This is the single source of truth
2007
2014
  * for every filter value bound in the template; `filterParams` only carries the
2008
- * assembled query DTO (see syncParams/loadFilter). Empty values are '' / null /
2009
- * false / null-array — never undefined, so every child field exists.
2015
+ * assembled query DTO (see toForm/toPayload and loadFilter). Empty values are
2016
+ * '' / null / false / null-array — never undefined, so every child field exists.
2010
2017
  */
2011
- this.filterModel = signal(emptyFilterModel(), /* @ts-ignore */
2018
+ this.filterModel = signal(DtoUtils.toForm(_EMPTY_ITEM$1), /* @ts-ignore */
2012
2019
  ...(ngDevMode ? [{ debugName: "filterModel" }] : /* istanbul ignore next */ []));
2013
2020
  /**
2014
2021
  * Signal form for the filter pane. The four year fields accept values from 1750
@@ -2476,34 +2483,8 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
2476
2483
  this.patchFilter({ modules: filter.modules ?? null });
2477
2484
  setTimeout(() => {
2478
2485
  this.filterParams.topic = filter.topic;
2479
- 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
- });
2486
+ // The channels are a per-account preference, not part of the saved filter.
2487
+ this.filterModel.set({ ...this.toForm(filter), channels: this.filterModel().channels });
2507
2488
  // Show expansion panels
2508
2489
  const m = this.filterModel();
2509
2490
  if (m.sourceNumber !== '' ||
@@ -2540,7 +2521,7 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
2540
2521
  const module = this.modules().find(x => x.value === ClipperModule.NormativaVigente);
2541
2522
  const channels = this.filterModel().channels;
2542
2523
  this.filterModel.set({
2543
- ...emptyFilterModel(),
2524
+ ...DtoUtils.toForm(_EMPTY_ITEM$1),
2544
2525
  channels,
2545
2526
  modules: module ? [module] : null,
2546
2527
  });
@@ -2549,78 +2530,93 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
2549
2530
  this.filterParams.searchName = undefined;
2550
2531
  }
2551
2532
  /**
2552
- * Copies the filter model into `filterParams`, normalizing empty values back
2553
- * to the undefined-based convention of ClipperSearchParams.
2533
+ * Builds the filter form model from a set of search parameters.
2534
+ *
2535
+ * Ad-hoc because the two publication ranges do not map field-to-field: the DTO keeps
2536
+ * them as `fromDate`/`toDate`, and a range is only restored when both of its bounds
2537
+ * are set, exactly as the saved filters were written.
2538
+ *
2539
+ * @param dto - The search parameters to read: the live `filterParams` on a state
2540
+ * restore, or the deserialized data of a saved filter.
2541
+ * @returns A fresh form model; the caller decides what to keep of the current one.
2542
+ */
2543
+ toForm(dto) {
2544
+ const model = DtoUtils.toForm(_EMPTY_ITEM$1, dto);
2545
+ const from = toDate(dto.fromDate);
2546
+ const to = toDate(dto.toDate);
2547
+ const sourceFrom = toDate(dto.sourceFromDate);
2548
+ const sourceTo = toDate(dto.sourceToDate);
2549
+ model.from = from && to ? from : null;
2550
+ model.to = from && to ? to : null;
2551
+ model.sourceFrom = sourceFrom && sourceTo ? sourceFrom : null;
2552
+ model.sourceTo = sourceFrom && sourceTo ? sourceTo : null;
2553
+ return model;
2554
+ }
2555
+ /**
2556
+ * Builds the search payload out of the filter model, normalizing empty values back to
2557
+ * the undefined-based convention of {@link ClipperSearchParams}.
2558
+ *
2559
+ * Ad-hoc for two reasons. The two publication ranges are not payload fields: they
2560
+ * reach the DTO as `fromDate`/`toDate` through {@link loadFilter} and
2561
+ * {@link prepareFetch}. And every key has to be listed, `undefined` included, because
2562
+ * `filterParams` is a long-lived object — reused across searches and serialized into
2563
+ * saved filters — so a field the user has just emptied must be overwritten, not
2564
+ * merely left out of the copy the way {@link DtoUtils.toPayload} does.
2565
+ *
2566
+ * @returns The subset of the search parameters the filter pane owns.
2554
2567
  */
2555
- 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;
2568
+ toPayload() {
2569
+ const { from, to, sourceFrom, sourceTo, ...rest } = this.filterModel();
2570
+ const dto = DtoUtils.toPayload(rest);
2571
+ return {
2572
+ modules: dto.modules,
2573
+ tags: dto.tags,
2574
+ topics: dto.topics,
2575
+ sectors: dto.sectors,
2576
+ authors: dto.authors,
2577
+ channels: dto.channels,
2578
+ number: dto.number,
2579
+ year: dto.year,
2580
+ text: dto.text,
2581
+ titleOnly: dto.titleOnly,
2582
+ showNotAbrogatedDocumentsOnly: dto.showNotAbrogatedDocumentsOnly,
2583
+ showCommentedDocumentsOnly: dto.showCommentedDocumentsOnly,
2584
+ showUnreadDocumentsOnly: dto.showUnreadDocumentsOnly,
2585
+ sourceNumber: dto.sourceNumber,
2586
+ sourceYear: dto.sourceYear,
2587
+ source: dto.source,
2588
+ author: dto.author,
2589
+ type: dto.type,
2590
+ changedNumber: dto.changedNumber,
2591
+ changedYear: dto.changedYear,
2592
+ changedTitle: dto.changedTitle,
2593
+ modifierNumber: dto.modifierNumber,
2594
+ modifierYear: dto.modifierYear,
2595
+ modifierTitle: dto.modifierTitle,
2596
+ changeReason: dto.changeReason,
2597
+ };
2582
2598
  }
2583
2599
  /**
2584
2600
  * Commits the form model to filterParams before the component state is serialised.
2585
2601
  */
2586
2602
  onStateSaving() {
2587
- this.syncParams();
2603
+ Object.assign(this.filterParams, this.toPayload());
2588
2604
  }
2589
2605
  /**
2590
2606
  * Rebuilds the form model from filterParams after a state restore.
2591
- * The publication intervals are intentionally not rebuilt from fromDate/toDate,
2592
- * matching the historical behavior where the range inputs were not restored.
2607
+ * The publication intervals are intentionally not rebuilt here — filterParams carries
2608
+ * no fromDate/toDate at this point — matching the historical behavior where the range
2609
+ * inputs were not restored.
2593
2610
  */
2594
2611
  onStateRestored() {
2595
- const 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
- }));
2612
+ const current = this.filterModel();
2613
+ this.filterModel.set({
2614
+ ...this.toForm(this.filterParams),
2615
+ from: current.from,
2616
+ to: current.to,
2617
+ sourceFrom: current.sourceFrom,
2618
+ sourceTo: current.sourceTo,
2619
+ });
2624
2620
  }
2625
2621
  /**
2626
2622
  * Builds a DateInterval for the publication range of the current model.
@@ -2637,7 +2633,7 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
2637
2633
  * Load selected filter
2638
2634
  */
2639
2635
  loadFilter() {
2640
- this.syncParams();
2636
+ Object.assign(this.filterParams, this.toPayload());
2641
2637
  if (this.filterParams.year && this.filterParams.year > 0) {
2642
2638
  const year = this.filterParams.year;
2643
2639
  this.filterParams.fromDate = new Date(year, 0, 1, 2);
@@ -2893,7 +2889,7 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
2893
2889
  * @returns The resolved {@link ClipperSearchParams} ready to be sent to the API.
2894
2890
  */
2895
2891
  prepareFetch(newSearch = false) {
2896
- this.syncParams();
2892
+ Object.assign(this.filterParams, this.toPayload());
2897
2893
  this.filterParams.fromDate = this.modelInterval().fromAsDate;
2898
2894
  this.filterParams.toDate = this.modelInterval().toAsDate;
2899
2895
  this.filterParams.sourceFromDate = this.modelInterval(true).fromAsDate;
@@ -3216,12 +3212,12 @@ class ClipperBrowserComponent extends ClipperSearchResultManager {
3216
3212
  this.patchFilter({ topics: [] });
3217
3213
  }
3218
3214
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ClipperBrowserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3219
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.3", type: ClipperBrowserComponent, isStandalone: true, selector: "clipper-browser", inputs: { showChannels: { classPropertyName: "showChannels", publicName: "showChannels", isSignal: true, isRequired: false, transformFunction: null }, showRSOptions: { classPropertyName: "showRSOptions", publicName: "showRSOptions", isSignal: true, isRequired: false, transformFunction: null }, showAIAssistantOptions: { classPropertyName: "showAIAssistantOptions", publicName: "showAIAssistantOptions", isSignal: true, isRequired: false, transformFunction: null }, selectableModules: { classPropertyName: "selectableModules", publicName: "selectableModules", isSignal: true, isRequired: false, transformFunction: null }, initialModule: { classPropertyName: "initialModule", publicName: "initialModule", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "filterByNumber", first: true, predicate: ["filterByNumber"], descendants: true, isSignal: true }, { propertyName: "filterByText", first: true, predicate: ["filterByText"], descendants: true, isSignal: true }, { propertyName: "filterByChangeNumber", first: true, predicate: ["filterByChangeNumber"], descendants: true, isSignal: true }, { propertyName: "filterPane", first: true, predicate: ["filterPane"], descendants: true, isSignal: true }, { propertyName: "filterPane2", first: true, predicate: ["filterPane2"], descendants: true, isSignal: true }, { propertyName: "filterSelector", first: true, predicate: ["filterSelector"], descendants: true, isSignal: true }, { propertyName: "moduleSelector", first: true, predicate: ["moduleSelector"], descendants: true, isSignal: true }, { propertyName: "sourceExpansionPanel", first: true, predicate: ["sourceExpansionPanel"], descendants: true, isSignal: true }, { propertyName: "otherOptionsExpansionPanel", first: true, predicate: ["otherOptionsExpansionPanel"], descendants: true, isSignal: true }, { propertyName: "modifierExpansionPanel", first: true, predicate: ["modifierExpansionPanel"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<mat-drawer-container [hasBackdrop]=\"filterPaneHasBackdrop()\" class=\"fill\">\n <mat-drawer #filterPane class=\"drawer\">\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"78px\" class=\"title-container\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\n <div class=\"title\">Filtro</div>\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"saveFilter(true)\"\n matTooltip=\"Crea una nuovo filtro con i parametri attuali \"><mat-icon>add</mat-icon></button>\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\n matTooltip=\"Nascondi\"><mat-icon>left_panel_close</mat-icon></button>\n </div>\n </div>\n </div>\n @if(hasFilters()) {\n <div style=\"padding:10px 20px\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex=\"*\">\n <button-selector #filterSelector [options]=\"filters()\" label=\"Seleziona un filtro salvato\"\n labelSelected=\"Filtro in uso:\" fxFlexAlign=\"center\" (selected)=\"selectFilter($event)\"\n [matTooltip]=\"filterParams.searchName ?? ''\"></button-selector>\n </div>\n @if(filterParams.searchId) {\n <div fxFlex=\"40px\">\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"deleteFilter()\"\n matTooltip=\"Elimina il filtro in uso\"><mat-icon>delete</mat-icon></button>\n </div>\n }\n </div>\n </div>\n }\n <div fxFlex=\"*\" class=\"content scroll-hidden\" style=\"padding-bottom: 10px;\">\n <div class=\"scroll-auto\" style=\"padding: 0 10px;\">\n <form [formRoot]=\"filterForm\" (keyup.enter)=\"applyFilter()\" novalidate>\n <mat-accordion multi displayMode=\"flat\">\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Cerca in..\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <chips-selector #moduleSelector [formField]=\"filterForm.modules\" [collapseAt]=\"599\" [multiple]=\"true\"\n label=\"Sezioni\" name=\"modules\" [options]=\"filteredModules()\" (changed)=\"modulesChanged()\">\n </chips-selector>\n </mat-expansion-panel>\n\n @if((hasTags() || hasTopics()) && !isCoordination()) {\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Argomenti\n </mat-panel-title>\n </mat-expansion-panel-header>\n @if(hasTags()) {\n <chips-selector [collapseAt]=\"599\" [formField]=\"filterForm.tags\" [multiple]=\"true\"\n label=\"Argomenti\" [options]=\"tags()\"></chips-selector>\n }\n @if(hasTopics()) {\n @if ((filterForm.topics().value()?.length ?? 0) > 0) {\n <mat-chip-grid #topics style=\"padding-bottom: 5px;\">\n @for (o of filterForm.topics().value(); track $index) {\n <mat-chip-row [value]=\"o\" (removed)=\"deleteTopic(o)\">\n {{o.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button></mat-chip-row>\n }\n </mat-chip-grid>\n <input style=\"display: none;\" [matChipInputFor]=\"topics\" />\n }\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button type=\"button\" (click)=\"addTopic()\"><mat-icon>add</mat-icon> Aggiungi\n argomento</button>\n @if ((filterForm.topics().value()?.length ?? 0) > 0) {\n <button mat-button type=\"button\" (click)=\"clearTopics()\"><mat-icon>delete</mat-icon> Azzera</button>\n }\n </div>\n }\n </mat-expansion-panel>\n }\n @if(hasSectors()) {\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Settori\n </mat-panel-title>\n </mat-expansion-panel-header>\n <chips-selector [collapseAt]=\"599\" [formField]=\"filterForm.sectors\" [multiple]=\"true\"\n label=\"Settori\" [options]=\"sectors()\" (changed)=\"sectorsChanged()\" />\n @if(hasRegions())\n {\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\n <chips-selector [formField]=\"filterForm.authors\" [multiple]=\"true\" mode=\"collapsed\"\n label=\"Tutte le regioni\" [options]=\"regions()\" />\n }\n </mat-expansion-panel>\n }\n @if(!isCoordination()) {\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Documento\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n @if(isLaws()) {\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"49\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.number\"\n #filterByNumber=\"matInput\" />\n @if (filterForm.number().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.number().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxFlex=\"39\" fxFlex.xs=\"49\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.year\" />\n @if (filterForm.year().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.year().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n }\n <mat-form-field>\n <mat-label>Intervallo di pubblicazione</mat-label>\n <mat-date-range-input [rangePicker]=\"picker1\">\n <input matStartDate [formField]=\"filterForm.from\" placeholder=\"Da data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, false)\">\n <input matEndDate [formField]=\"filterForm.to\" placeholder=\"A data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, true)\">\n </mat-date-range-input>\n @if (filterForm.from().value() || filterForm.to().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"clearInterval()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker1></mat-date-range-picker>\n @if (filterForm.from().invalid() || filterForm.to().invalid()) {\n <mat-error>{{ rangeErrorMessage(filterForm.from().errors(), filterForm.to().errors()) }}</mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label>Testo</mat-label>\n <input matInput [formField]=\"filterForm.text\"\n #filterByText=\"matInput\" />\n @if (filterForm.text().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.text().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\"\n aria-label=\"Opzioni\"\n [matMenuTriggerFor]=\"filterPaneOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\n </mat-form-field>\n <div>\n @if(filterForm.text().value()) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.titleOnly\">Cerca solo nel\n titolo</mat-slide-toggle>\n </div>\n }\n @if(isLaws(false)) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showNotAbrogatedDocumentsOnly\">Mostra solo elementi non abrogati</mat-slide-toggle>\n </div>\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showCommentedDocumentsOnly\">Mostra solo elementi con commenti</mat-slide-toggle>\n </div>\n }\n @if(isReadable()) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showUnreadDocumentsOnly\">Mostra solo elementi non letti</mat-slide-toggle>\n </div>\n }\n\n </div>\n </div>\n </mat-expansion-panel>\n @if(isLaws(false)) {\n <mat-expansion-panel #sourceExpansionPanel class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Fonte\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.sourceNumber\" />\n @if (filterForm.sourceNumber().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.sourceNumber().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.sourceYear\" />\n @if (filterForm.sourceYear().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.sourceYear().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>Intervallo di pubblicazione</mat-label>\n <mat-date-range-input [rangePicker]=\"picker2\">\n <input matStartDate [formField]=\"filterForm.sourceFrom\" placeholder=\"Da data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, true, false)\">\n <input matEndDate [formField]=\"filterForm.sourceTo\" placeholder=\"A data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, true, true)\">\n </mat-date-range-input>\n @if (filterForm.sourceFrom().value() || filterForm.sourceTo().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"clearInterval(true)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker2></mat-date-range-picker>\n @if (filterForm.sourceFrom().invalid() || filterForm.sourceTo().invalid()) {\n <mat-error>{{ rangeErrorMessage(filterForm.sourceFrom().errors(), filterForm.sourceTo().errors()) }}</mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label>Tipo</mat-label>\n <mat-select [formField]=\"filterForm.source\">\n @for (s of sources(); track $index) {\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\n {{s.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #otherOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Altre opzioni\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n @if(authors().length > 0 && !hasRegions()) {\n <mat-form-field>\n <mat-label>Autore</mat-label>\n <mat-select [formField]=\"filterForm.author\">\n @for (a of authors(); track $index) {\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\n {{a.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <mat-form-field>\n <mat-label>Tipo documento</mat-label>\n <mat-select [formField]=\"filterForm.type\">\n @for (t of types(); track $index) {\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\n {{t.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n </mat-expansion-panel>\n }\n } @else {\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Periodo\n </mat-panel-title>\n </mat-expansion-panel-header>\n <mat-form-field style=\"width:100%\">\n <mat-label>Intervallo di pubblicazione</mat-label>\n <mat-date-range-input [rangePicker]=\"picker1\">\n <input matStartDate [formField]=\"filterForm.from\" placeholder=\"Da data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, false)\">\n <input matEndDate [formField]=\"filterForm.to\" placeholder=\"A data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, true)\">\n </mat-date-range-input>\n @if (filterForm.from().value() || filterForm.to().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"clearInterval()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker1></mat-date-range-picker>\n @if (filterForm.from().invalid() || filterForm.to().invalid()) {\n <mat-error>{{ rangeErrorMessage(filterForm.from().errors(), filterForm.to().errors()) }}</mat-error>\n }\n </mat-form-field>\n @if(isReadable()) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showUnreadDocumentsOnly\">Mostra solo elementi non letti</mat-slide-toggle>\n </div>\n }\n </mat-expansion-panel>\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Documento modificato\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.changedNumber\"\n #filterByChangeNumber=\"matInput\" />\n @if (filterForm.changedNumber().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.changedNumber().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.changedYear\" />\n @if (filterForm.changedYear().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.changedYear().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>Titolo</mat-label>\n <input matInput [formField]=\"filterForm.changedTitle\" />\n @if (filterForm.changedTitle().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.changedTitle().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #modifierOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Documento modificante\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.modifierNumber\" />\n @if (filterForm.modifierNumber().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.modifierNumber().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.modifierYear\" />\n @if (filterForm.modifierYear().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.modifierYear().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>Titolo</mat-label>\n <input matInput [formField]=\"filterForm.modifierTitle\" />\n @if (filterForm.modifierTitle().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.modifierTitle().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #otherOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Altre opzioni\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <mat-form-field>\n <mat-label>Motivo</mat-label>\n <mat-select [formField]=\"filterForm.changeReason\">\n @for (r of reasons(); track $index) {\n <mat-option [value]=\"r.value\" [matTooltip]=\"r.name\">\n {{r.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n }\n </mat-accordion>\n </form>\n </div>\n </div>\n @if(showChannels()) {\n <div style=\"padding:10px\">\n <div fxLayout=\"column\">\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0\" style=\"margin-bottom: 10px;\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Canali\n </mat-panel-title>\n <mat-panel-description>\n @for (c of clipperService.availableChannels(); track $index) {\n <div class=\"channel-box\" [class.channel-disabled]=\"!c.active || c.disabled\" [matTooltip]=\"c.name\">\n <span class=\"label\">{{c.header}}</span>\n </div>\n }\n </mat-panel-description>\n </mat-expansion-panel-header>\n <chips-selector [collapseAt]=\"599\" [formField]=\"filterForm.channels\" [multiple]=\"true\"\n label=\"Canali\" [options]=\"clipperService.availableChannels()\"\n (changed)=\"channelsChanged()\"></chips-selector>\n\n </mat-expansion-panel>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex=\"*\" fxFlexAlign=\"end\">\n <button mat-stroked-button (click)=\"clearFilter()\">Pulisci</button>\n <button mat-stroked-button (click)=\"saveFilter()\" style=\"margin-left: 10px;\">Salva</button>\n </div>\n <div fxLayoutAlign=\"end\">\n <button fxFlexAlign=\"end\" mat-flat-button (click)=\"applyFilter()\"\n [disabled]=\"!canSearch()\">Applica</button>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </mat-drawer>\n <div fxLayout=\"column\" fxLayoutGap=\"10px\" fxFill class=\"drawer-content scroll-hidden\">\n <div class=\"module-toolbar \">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\n <div fxFlex=\"49\" fxFlex.lt-md=\"100\" style=\"padding-left: 10px; padding-bottom: 5px;\">\n @if(!filterPane.opened) {\n <button-toggle cssClass=\"small\" cssClassSmall=\"x-small\" iconOn=\"left_panel_close\" iconOff=\"tune\"\n labelOn=\"Nascondi<br>filtri\" labelOff=\"Mostra<br>filtri\" [value]=\"filterPane.opened\"\n (changed)=\"toggleFilterPane()\"></button-toggle>\n }\n </div>\n <div fxFlex=\"49\" fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\">\n <div fxLayout=\"row\" style=\"height:48px; padding-bottom: 5px;\">\n @if((snapshot?.total ?? 0) > 0) {\n @if(sortOptions().length > 0) {\n <button-selector [options]=\"sortOptions()\" label=\"Ordina per:\" style=\"margin-right: 5px;\" [border]=\"0\"\n fxFlexAlign=\"center\" [formField]=\"sortForm\" (selected)=\"sort($event)\"></button-selector>\n }\n <button fxFlexAlign=\"center\" mat-icon-button matSuffix matTooltip=\"Opzioni sulla selezione\"\n aria-label=\"Opzioni sulla selezione\" [matMenuTriggerFor]=\"selectionOptionsMenu\"\n [matBadge]=\"countSelections()\"><mat-icon>checklist</mat-icon></button>\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Salva elenco in Excel \"\n (click)=\"exportResults()\"><mat-icon>save_alt</mat-icon></button>\n @if (!filterPane2?.opened && hasFacets()){\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Affina ricerca\"\n (click)=\"toggleFilterPane2()\"><mat-icon>right_panel_open</mat-icon></button>\n }\n }\n </div>\n </div>\n </div>\n </div>\n <div fxFlex=\"*\" class=\"module-content\">\n <mat-drawer-container [hasBackdrop]=\"filterPane2HasBackdrop()\" class=\"fill\">\n <mat-drawer #filterPane2 class=\"drawer-small drawer-with-loader\" position=\"end\" opened=\"false\">\n @if (filterBusy()) {\n <div class=\"overlay\"></div>\n }\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"6px\">\n @if (filterBusy()) {\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\n </mat-progress-bar>\n }\n </div>\n <div fxFlex=\"78px\" class=\"title-container-with-loader\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <div class=\"title\">Affina ricerca</div>\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\n <button mat-icon-button (click)=\"toggleFilterPane2()\"\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\n </div>\n </div>\n </div>\n <div fxFlex=\"*\" class=\"content scroll-hidden\" style=\"padding: 0 5px;\">\n <clipper-search-facets #facets></clipper-search-facets>\n\n </div>\n </div>\n </mat-drawer>\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"*\" [id]=\"scrollerId\" cdkScrollable class=\"scroll-auto\" style=\"padding: 0 20px;\">\n @if (!snapshot?.total) {\n <div class=\"message-container\">\n @if(snapshot?.total === 0) {\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\n } @else {\n <div class=\"message\">\n <p fxHide.xs><b>Esegui una ricerca compilando i campi necessari nella maschera di ricarca qui a\n fianco.</b></p>\n <p fxHide.gt-xs><b>Fai click sul bottone <span class=\"accent\"><mat-icon>tune</mat-icon></span> ed esegui\n una\n ricerca compilando i campi necessari.</b></p>\n <p>E' possibile salvare i parametri delle le ricerche pi\u00F9 utilizzate facendo clic su &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 }); }
3215
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.3", type: ClipperBrowserComponent, isStandalone: true, selector: "clipper-browser", inputs: { showChannels: { classPropertyName: "showChannels", publicName: "showChannels", isSignal: true, isRequired: false, transformFunction: null }, showRSOptions: { classPropertyName: "showRSOptions", publicName: "showRSOptions", isSignal: true, isRequired: false, transformFunction: null }, showAIAssistantOptions: { classPropertyName: "showAIAssistantOptions", publicName: "showAIAssistantOptions", isSignal: true, isRequired: false, transformFunction: null }, selectableModules: { classPropertyName: "selectableModules", publicName: "selectableModules", isSignal: true, isRequired: false, transformFunction: null }, initialModule: { classPropertyName: "initialModule", publicName: "initialModule", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "filterByNumber", first: true, predicate: ["filterByNumber"], descendants: true, isSignal: true }, { propertyName: "filterByText", first: true, predicate: ["filterByText"], descendants: true, isSignal: true }, { propertyName: "filterByChangeNumber", first: true, predicate: ["filterByChangeNumber"], descendants: true, isSignal: true }, { propertyName: "filterPane", first: true, predicate: ["filterPane"], descendants: true, isSignal: true }, { propertyName: "filterPane2", first: true, predicate: ["filterPane2"], descendants: true, isSignal: true }, { propertyName: "filterSelector", first: true, predicate: ["filterSelector"], descendants: true, isSignal: true }, { propertyName: "moduleSelector", first: true, predicate: ["moduleSelector"], descendants: true, isSignal: true }, { propertyName: "sourceExpansionPanel", first: true, predicate: ["sourceExpansionPanel"], descendants: true, isSignal: true }, { propertyName: "otherOptionsExpansionPanel", first: true, predicate: ["otherOptionsExpansionPanel"], descendants: true, isSignal: true }, { propertyName: "modifierExpansionPanel", first: true, predicate: ["modifierExpansionPanel"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<mat-drawer-container [hasBackdrop]=\"filterPaneHasBackdrop()\" class=\"fill\">\n <mat-drawer #filterPane class=\"drawer\">\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"78px\" class=\"title-container\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\n <div class=\"title\">Filtro</div>\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"saveFilter(true)\"\n matTooltip=\"Crea una nuovo filtro con i parametri attuali \"><mat-icon>add</mat-icon></button>\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\n matTooltip=\"Nascondi\"><mat-icon>left_panel_close</mat-icon></button>\n </div>\n </div>\n </div>\n @if(hasFilters()) {\n <div style=\"padding:10px 20px\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex=\"*\">\n <button-selector #filterSelector [options]=\"filters()\" label=\"Seleziona un filtro salvato\"\n labelSelected=\"Filtro in uso:\" fxFlexAlign=\"center\" (selected)=\"selectFilter($event)\"\n [matTooltip]=\"filterParams.searchName ?? ''\"></button-selector>\n </div>\n @if(filterParams.searchId) {\n <div fxFlex=\"40px\">\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"deleteFilter()\"\n matTooltip=\"Elimina il filtro in uso\"><mat-icon>delete</mat-icon></button>\n </div>\n }\n </div>\n </div>\n }\n <div fxFlex=\"*\" class=\"content scroll-hidden\" style=\"padding-bottom: 10px;\">\n <div class=\"scroll-auto\" style=\"padding: 0 10px;\">\n <form [formRoot]=\"filterForm\" (keyup.enter)=\"applyFilter()\" novalidate>\n <mat-accordion multi displayMode=\"flat\">\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Cerca in..\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <chips-selector #moduleSelector [formField]=\"filterForm.modules\" [collapseAt]=\"599\" [multiple]=\"true\"\n label=\"Sezioni\" name=\"modules\" [options]=\"filteredModules()\" (changed)=\"modulesChanged()\">\n </chips-selector>\n </mat-expansion-panel>\n\n @if((hasTags() || hasTopics()) && !isCoordination()) {\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Argomenti\n </mat-panel-title>\n </mat-expansion-panel-header>\n @if(hasTags()) {\n <chips-selector [collapseAt]=\"599\" [formField]=\"filterForm.tags\" [multiple]=\"true\"\n label=\"Argomenti\" [options]=\"tags()\"></chips-selector>\n }\n @if(hasTopics()) {\n @if ((filterForm.topics().value()?.length ?? 0) > 0) {\n <mat-chip-grid #topics style=\"padding-bottom: 5px;\">\n @for (o of filterForm.topics().value(); track $index) {\n <mat-chip-row [value]=\"o\" (removed)=\"deleteTopic(o)\">\n {{o.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button></mat-chip-row>\n }\n </mat-chip-grid>\n <input style=\"display: none;\" [matChipInputFor]=\"topics\" />\n }\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button type=\"button\" (click)=\"addTopic()\"><mat-icon>add</mat-icon> Aggiungi\n argomento</button>\n @if ((filterForm.topics().value()?.length ?? 0) > 0) {\n <button mat-button type=\"button\" (click)=\"clearTopics()\"><mat-icon>delete</mat-icon> Azzera</button>\n }\n </div>\n }\n </mat-expansion-panel>\n }\n @if(hasSectors()) {\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Settori\n </mat-panel-title>\n </mat-expansion-panel-header>\n <chips-selector [collapseAt]=\"599\" [formField]=\"filterForm.sectors\" [multiple]=\"true\"\n label=\"Settori\" [options]=\"sectors()\" (changed)=\"sectorsChanged()\" />\n @if(hasRegions())\n {\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\n <chips-selector [formField]=\"filterForm.authors\" [multiple]=\"true\" mode=\"collapsed\"\n label=\"Tutte le regioni\" [options]=\"regions()\" />\n }\n </mat-expansion-panel>\n }\n @if(!isCoordination()) {\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Documento\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n @if(isLaws()) {\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"49\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.number\"\n #filterByNumber=\"matInput\" />\n @if (filterForm.number().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.number().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxFlex=\"39\" fxFlex.xs=\"49\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.year\" />\n @if (filterForm.year().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.year().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n }\n <mat-form-field>\n <mat-label>Intervallo di pubblicazione</mat-label>\n <mat-date-range-input [rangePicker]=\"picker1\">\n <input matStartDate [formField]=\"filterForm.from\" placeholder=\"Da data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, false)\">\n <input matEndDate [formField]=\"filterForm.to\" placeholder=\"A data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, true)\">\n </mat-date-range-input>\n @if (filterForm.from().value() || filterForm.to().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"clearInterval()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker1></mat-date-range-picker>\n @if (filterForm.from().invalid() || filterForm.to().invalid()) {\n <mat-error>{{ rangeErrorMessage(filterForm.from().errors(), filterForm.to().errors()) }}</mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label>Testo</mat-label>\n <input matInput [formField]=\"filterForm.text\"\n #filterByText=\"matInput\" />\n @if (filterForm.text().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.text().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\"\n aria-label=\"Opzioni\"\n [matMenuTriggerFor]=\"filterPaneOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\n </mat-form-field>\n <div>\n @if(filterForm.text().value()) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.titleOnly\">Cerca solo nel\n titolo</mat-slide-toggle>\n </div>\n }\n @if(isLaws(false)) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showNotAbrogatedDocumentsOnly\">Mostra solo elementi non abrogati</mat-slide-toggle>\n </div>\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showCommentedDocumentsOnly\">Mostra solo elementi con commenti</mat-slide-toggle>\n </div>\n }\n @if(isReadable()) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showUnreadDocumentsOnly\">Mostra solo elementi non letti</mat-slide-toggle>\n </div>\n }\n\n </div>\n </div>\n </mat-expansion-panel>\n @if(isLaws(false)) {\n <mat-expansion-panel #sourceExpansionPanel class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Fonte\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.sourceNumber\" />\n @if (filterForm.sourceNumber().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.sourceNumber().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.sourceYear\" />\n @if (filterForm.sourceYear().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.sourceYear().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>Intervallo di pubblicazione</mat-label>\n <mat-date-range-input [rangePicker]=\"picker2\">\n <input matStartDate [formField]=\"filterForm.sourceFrom\" placeholder=\"Da data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, true, false)\">\n <input matEndDate [formField]=\"filterForm.sourceTo\" placeholder=\"A data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, true, true)\">\n </mat-date-range-input>\n @if (filterForm.sourceFrom().value() || filterForm.sourceTo().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"clearInterval(true)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker2></mat-date-range-picker>\n @if (filterForm.sourceFrom().invalid() || filterForm.sourceTo().invalid()) {\n <mat-error>{{ rangeErrorMessage(filterForm.sourceFrom().errors(), filterForm.sourceTo().errors()) }}</mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label>Tipo</mat-label>\n <mat-select [formField]=\"filterForm.source\">\n @for (s of sources(); track $index) {\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\n {{s.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #otherOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Altre opzioni\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n @if(authors().length > 0 && !hasRegions()) {\n <mat-form-field>\n <mat-label>Autore</mat-label>\n <mat-select [formField]=\"filterForm.author\">\n @for (a of authors(); track $index) {\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\n {{a.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <mat-form-field>\n <mat-label>Tipo documento</mat-label>\n <mat-select [formField]=\"filterForm.type\">\n @for (t of types(); track $index) {\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\n {{t.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n </mat-expansion-panel>\n }\n } @else {\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Periodo\n </mat-panel-title>\n </mat-expansion-panel-header>\n <mat-form-field style=\"width:100%\">\n <mat-label>Intervallo di pubblicazione</mat-label>\n <mat-date-range-input [rangePicker]=\"picker1\">\n <input matStartDate [formField]=\"filterForm.from\" placeholder=\"Da data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, false)\">\n <input matEndDate [formField]=\"filterForm.to\" placeholder=\"A data\"\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false, true)\">\n </mat-date-range-input>\n @if (filterForm.from().value() || filterForm.to().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"clearInterval()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker1></mat-date-range-picker>\n @if (filterForm.from().invalid() || filterForm.to().invalid()) {\n <mat-error>{{ rangeErrorMessage(filterForm.from().errors(), filterForm.to().errors()) }}</mat-error>\n }\n </mat-form-field>\n @if(isReadable()) {\n <div style=\"padding-bottom:10px\">\n <mat-slide-toggle [formField]=\"filterForm.showUnreadDocumentsOnly\">Mostra solo elementi non letti</mat-slide-toggle>\n </div>\n }\n </mat-expansion-panel>\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Documento modificato\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.changedNumber\"\n #filterByChangeNumber=\"matInput\" />\n @if (filterForm.changedNumber().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.changedNumber().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.changedYear\" />\n @if (filterForm.changedYear().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.changedYear().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>Titolo</mat-label>\n <input matInput [formField]=\"filterForm.changedTitle\" />\n @if (filterForm.changedTitle().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.changedTitle().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #modifierOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0 \">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Documento modificante\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\n <mat-label>Numero</mat-label>\n <input matInput [formField]=\"filterForm.modifierNumber\" />\n @if (filterForm.modifierNumber().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.modifierNumber().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\n <mat-label>Anno</mat-label>\n <input type=\"number\" matInput [formField]=\"filterForm.modifierYear\" />\n @if (filterForm.modifierYear().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.modifierYear().value.set(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>Titolo</mat-label>\n <input matInput [formField]=\"filterForm.modifierTitle\" />\n @if (filterForm.modifierTitle().value()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\n (click)=\"filterForm.modifierTitle().value.set('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #otherOptionsExpansionPanel class=\"accordion-panel mat-elevation-z0\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Altre opzioni\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div fxLayout=\"column\">\n <mat-form-field>\n <mat-label>Motivo</mat-label>\n <mat-select [formField]=\"filterForm.changeReason\">\n @for (r of reasons(); track $index) {\n <mat-option [value]=\"r.value\" [matTooltip]=\"r.name\">\n {{r.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n }\n </mat-accordion>\n </form>\n </div>\n </div>\n @if(showChannels()) {\n <div style=\"padding:10px\">\n <div fxLayout=\"column\">\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0\" style=\"margin-bottom: 10px;\">\n <mat-expansion-panel-header class=\"accordion-header\">\n <mat-panel-title>\n Canali\n </mat-panel-title>\n <mat-panel-description>\n @for (c of clipperService.availableChannels(); track $index) {\n <div class=\"channel-box\" [class.channel-disabled]=\"!c.active || c.disabled\" [matTooltip]=\"c.name\">\n <span class=\"label\">{{c.header}}</span>\n </div>\n }\n </mat-panel-description>\n </mat-expansion-panel-header>\n <chips-selector [collapseAt]=\"599\" [formField]=\"filterForm.channels\" [multiple]=\"true\"\n label=\"Canali\" [options]=\"clipperService.availableChannels()\"\n (changed)=\"channelsChanged()\"></chips-selector>\n\n </mat-expansion-panel>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex=\"*\" fxFlexAlign=\"end\">\n <button mat-stroked-button (click)=\"clearFilter()\">Pulisci</button>\n <button mat-stroked-button (click)=\"saveFilter()\" style=\"margin-left: 10px;\">Salva</button>\n </div>\n <div fxLayoutAlign=\"end\">\n <button fxFlexAlign=\"end\" mat-flat-button (click)=\"applyFilter()\"\n [disabled]=\"!canSearch()\">Applica</button>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </mat-drawer>\n <div fxLayout=\"column\" fxLayoutGap=\"10px\" fxFill class=\"drawer-content scroll-hidden\">\n <div class=\"module-toolbar \">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\n <div fxFlex=\"49\" fxFlex.lt-md=\"100\" style=\"padding-left: 10px; padding-bottom: 5px;\">\n @if(!filterPane.opened) {\n <button-toggle cssClass=\"small\" cssClassSmall=\"x-small\" iconOn=\"left_panel_close\" iconOff=\"tune\"\n labelOn=\"Nascondi<br>filtri\" labelOff=\"Mostra<br>filtri\" [value]=\"filterPane.opened\"\n (changed)=\"toggleFilterPane()\"></button-toggle>\n }\n </div>\n <div fxFlex=\"49\" fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\">\n <div fxLayout=\"row\" style=\"height:48px; padding-bottom: 5px;\">\n @if((snapshot?.total ?? 0) > 0) {\n @if(sortOptions().length > 0) {\n <button-selector [options]=\"sortOptions()\" label=\"Ordina per:\" style=\"margin-right: 5px;\" [border]=\"0\"\n fxFlexAlign=\"center\" [formField]=\"sortForm\" (selected)=\"sort($event)\"></button-selector>\n }\n <button fxFlexAlign=\"center\" mat-icon-button matSuffix matTooltip=\"Opzioni sulla selezione\"\n aria-label=\"Opzioni sulla selezione\" [matMenuTriggerFor]=\"selectionOptionsMenu\"\n [matBadge]=\"countSelections()\"><mat-icon>checklist</mat-icon></button>\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Salva elenco in Excel \"\n (click)=\"exportResults()\"><mat-icon>save_alt</mat-icon></button>\n @if (!filterPane2?.opened && hasFacets()){\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Affina ricerca\"\n (click)=\"toggleFilterPane2()\"><mat-icon>right_panel_open</mat-icon></button>\n }\n }\n </div>\n </div>\n </div>\n </div>\n <div fxFlex=\"*\" class=\"module-content\">\n <mat-drawer-container [hasBackdrop]=\"filterPane2HasBackdrop()\" class=\"fill\">\n <mat-drawer #filterPane2 class=\"drawer-small drawer-with-loader\" position=\"end\" opened=\"false\">\n @if (filterBusy()) {\n <div class=\"overlay\"></div>\n }\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"6px\">\n @if (filterBusy()) {\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\n </mat-progress-bar>\n }\n </div>\n <div fxFlex=\"78px\" class=\"title-container-with-loader\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <div class=\"title\">Affina ricerca</div>\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\n <button mat-icon-button (click)=\"toggleFilterPane2()\"\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\n </div>\n </div>\n </div>\n <div fxFlex=\"*\" class=\"content scroll-hidden\" style=\"padding: 0 5px;\">\n <clipper-search-facets #facets></clipper-search-facets>\n\n </div>\n </div>\n </mat-drawer>\n <div fxLayout=\"column\" fxFill>\n <div fxFlex=\"*\" [id]=\"scrollerId\" cdkScrollable class=\"scroll-auto\" style=\"padding: 0 20px;\">\n @if (!snapshot?.total) {\n <div class=\"message-container\">\n @if(snapshot?.total === 0) {\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\n } @else {\n <div class=\"message\">\n <p fxHide.xs><b>Esegui una ricerca compilando i campi necessari nella maschera di ricarca qui a\n fianco.</b></p>\n <p fxHide.gt-xs><b>Fai click sul bottone <span class=\"accent\"><mat-icon>tune</mat-icon></span> ed esegui\n una\n ricerca compilando i campi necessari.</b></p>\n <p>E' possibile salvare i parametri delle le ricerche pi\u00F9 utilizzate facendo clic su &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
3216
  }
3221
3217
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ClipperBrowserComponent, decorators: [{
3222
3218
  type: Component,
3223
3219
  args: [{ selector: 'clipper-browser', standalone: true, imports: [FormField, FormRoot, FlexLayoutModule, MatIconModule, MatButtonModule, MatTooltipModule, MatSidenavModule,
3224
- MatExpansionModule, MatDividerModule, MatMenuModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, MatBadge,
3220
+ MatExpansionModule, MatDividerModule, MatMenuModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, MatDatepickerParseErrorFixDirective, MatBadge,
3225
3221
  ScrollingModule, MatSelectModule, MatChipsModule, MatSlideToggleModule, MatPaginator, MatCheckboxModule, MatButtonToggleModule, MatProgressBarModule,
3226
3222
  ChipsSelectorComponent, ButtonSelectorComponent, ButtonToggleComponent,
3227
3223
  ClipperSearchResultItemComponent,
@@ -4654,18 +4650,20 @@ var searchFreeTextHelp_component = /*#__PURE__*/Object.freeze({
4654
4650
  ClipperSearchFreeTextHelpComponent: ClipperSearchFreeTextHelpComponent
4655
4651
  });
4656
4652
 
4653
+ /** Neutral form model: it declares every field the form owns and its empty value. */
4654
+ const _EMPTY_ITEM = {
4655
+ queryPhrase: '',
4656
+ queryAnd: '',
4657
+ queryOr: '',
4658
+ queryStart: '',
4659
+ queryNot: '',
4660
+ };
4657
4661
  class ClipperSearchFreeTextQueryBuilderComponent {
4658
4662
  constructor() {
4659
4663
  this.done = output();
4660
4664
  this.dialogService = inject(DialogService);
4661
4665
  /** Model backing the signal form: one entry per query operator field. */
4662
- this.model = signal({
4663
- queryPhrase: '',
4664
- queryAnd: '',
4665
- queryOr: '',
4666
- queryStart: '',
4667
- queryNot: '',
4668
- }, /* @ts-ignore */
4666
+ this.model = signal(this.toForm(), /* @ts-ignore */
4669
4667
  ...(ngDevMode ? [{ debugName: "model" }] : /* istanbul ignore next */ []));
4670
4668
  /** Signal form for the query fields; every field is capped at 200 characters. */
4671
4669
  this.form = form(this.model, p => {
@@ -4677,17 +4675,23 @@ class ClipperSearchFreeTextQueryBuilderComponent {
4677
4675
  });
4678
4676
  }
4679
4677
  /**
4680
- * Resets all query fields to empty strings.
4678
+ * Builds the form model. The builder always opens empty, so the model is the neutral
4679
+ * one; it also serves as what the "clear" button restores.
4680
+ * @returns A fresh form model.
4681
4681
  */
4682
- clear() {
4683
- this.model.set({ queryPhrase: '', queryAnd: '', queryOr: '', queryStart: '', queryNot: '' });
4682
+ toForm() {
4683
+ return DtoUtils.toForm(_EMPTY_ITEM);
4684
4684
  }
4685
4685
  /**
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.
4686
+ * Assembles the Lucene-style free-text query out of the five operator fields.
4687
+ *
4688
+ * Ad-hoc because the payload is not a projection of the model: every field
4689
+ * contributes a differently shaped fragment (a quoted phrase, `+` terms, a `*`
4690
+ * wildcard, `-` exclusions) to one single string.
4691
+ * @returns The query to emit, or `undefined` when only the exclusion operator was
4692
+ * filled in, which cannot produce a valid query on its own.
4689
4693
  */
4690
- ok() {
4694
+ toPayload() {
4691
4695
  let query = '';
4692
4696
  const m = this.model();
4693
4697
  const phrase = m.queryPhrase?.trim() ?? '';
@@ -4724,8 +4728,7 @@ class ClipperSearchFreeTextQueryBuilderComponent {
4724
4728
  // NOT — each comma-separated word is prefixed with - (requires at least one positive term)
4725
4729
  if (not.length > 0) {
4726
4730
  if (query.length === 0) {
4727
- this.dialogService.error("L'operatore di esclusione funziona solo se prima è stato inserito un valore in almeno uno degli altri quattro campi.");
4728
- return;
4731
+ return undefined;
4729
4732
  }
4730
4733
  for (const part of not.split(',')) {
4731
4734
  if (query.length > 0)
@@ -4733,8 +4736,28 @@ class ClipperSearchFreeTextQueryBuilderComponent {
4733
4736
  query += `-"${part.replaceAll('"', '').trim()}" `;
4734
4737
  }
4735
4738
  }
4736
- if (query.length > 0)
4737
- this.done.emit({ query: query.trim() });
4739
+ return { query: query.trim() };
4740
+ }
4741
+ /**
4742
+ * Resets all query fields to empty strings.
4743
+ */
4744
+ clear() {
4745
+ this.model.set(this.toForm());
4746
+ }
4747
+ /**
4748
+ * Emits the assembled free-text query via `done`.
4749
+ *
4750
+ * Shows an error dialog when only the NOT operator has been filled in, since it
4751
+ * requires at least one positive term to produce a valid query.
4752
+ */
4753
+ ok() {
4754
+ const payload = this.toPayload();
4755
+ if (!payload) {
4756
+ this.dialogService.error("L'operatore di esclusione funziona solo se prima è stato inserito un valore in almeno uno degli altri quattro campi.");
4757
+ return;
4758
+ }
4759
+ if (payload.query.length > 0)
4760
+ this.done.emit(payload);
4738
4761
  }
4739
4762
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ClipperSearchFreeTextQueryBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4740
4763
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.3", type: ClipperSearchFreeTextQueryBuilderComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div mat-dialog-title>Trova gli elementi che contengono...</div>\n<mat-dialog-content>\n <form [formRoot]=\"form\" (keyup.enter)=\"!form().invalid() ? ok() : undefined\" novalidate>\n <div fxLayout=\"column\" style=\"padding-bottom: 20px;\">\n <mat-form-field>\n <mat-label>Questa esatta parola o frase</mat-label>\n <input matInput [formField]=\"form.queryPhrase\" />\n @if (form.queryPhrase().value()) {\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"form.queryPhrase().value.set('')\">\n <mat-icon>close</mat-icon>\n </a>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label>Tutte queste parole</mat-label>\n <input matInput [formField]=\"form.queryAnd\" />\n @if (form.queryAnd().value()) {\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"form.queryAnd().value.set('')\">\n <mat-icon>close</mat-icon>\n </a>\n }\n <mat-hint>Separate da virgola</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Una qualunque di queste parole</mat-label>\n <input matInput [formField]=\"form.queryOr\" />\n @if (form.queryOr().value()) {\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"form.queryOr().value.set('')\">\n <mat-icon>close</mat-icon>\n </a>\n }\n <mat-hint>Separate da virgola</mat-hint>\n </mat-form-field>\n <!--\n <mat-form-field>\n <mat-label>Parole che iniziano con</mat-label>\n <input matInput [formField]=\"form.queryStart\" />\n @if (form.queryStart().value()) {\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"form.queryStart().value.set('')\">\n <mat-icon>close</mat-icon>\n </a>\n }\n <mat-hint>Separate da virgola</mat-hint>\n </mat-form-field>\n -->\n <mat-form-field>\n <mat-label>Nessuna qualunque di queste parole</mat-label>\n <input matInput [formField]=\"form.queryNot\" />\n @if (form.queryNot().value()) {\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"form.queryNot().value.set('')\">\n <mat-icon>close</mat-icon>\n </a>\n }\n <mat-hint>Separate da virgola. L'operatore di esclusione funziona solo se prima \u00E8 stato inserito un valore in\n almeno uno degli altri quattro campi. </mat-hint>\n </mat-form-field>\n </div>\n </form>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex=\"30\" fxLayoutAlign=\"start\">\n <button type=\"button\" mat-stroked-button (click)=\"clear()\">Pulisci</button>\n </div>\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\n <button mat-flat-button (click)=\"ok()\">Ok</button>\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\n </div>\n </div>\n</mat-dialog-actions>", styles: [""], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: FormRoot, selector: "form[formRoot]", inputs: ["formRoot"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.FxLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg] ", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.FxFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg] ", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i1.FxLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg] ", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FxLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg] ", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.FxFlexFillDirective, selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ", inputs: ["fxFlexFill", "fxFill", "fxFlexFill.xs", "fxFlexFill.sm", "fxFlexFill.md", "fxFlexFill.lg", "fxFlexFill.xl", "fxFlexFill.lt-sm", "fxFlexFill.lt-md", "fxFlexFill.lt-lg", "fxFlexFill.lt-xl", "fxFlexFill.gt-xs", "fxFlexFill.gt-sm", "fxFlexFill.gt-md", "fxFlexFill.gt-lg"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }