@sinequa/atomic-angular 0.3.15 → 0.3.25

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.
@@ -2,13 +2,13 @@ import * as i0 from '@angular/core';
2
2
  import { Injectable, inject, HostBinding, Component, Pipe, InjectionToken, computed, ChangeDetectorRef, DestroyRef, LOCALE_ID, Inject, Optional, input, output, Directive, signal, effect, assertInInjectionContext, runInInjectionContext, Injector, EventEmitter, viewChild, ElementRef, afterNextRender, untracked, linkedSignal, model, Renderer2, HostListener, contentChildren, contentChild, TemplateRef, booleanAttribute, resource, ViewContainerRef, numberAttribute, viewChildren, afterEveryRender } from '@angular/core';
3
3
  import { BehaviorSubject, Subscription, catchError, EMPTY, firstValueFrom, map, Subject, of, tap, throwError, filter, shareReplay, fromEvent, debounceTime, from, switchMap } from 'rxjs';
4
4
  import { TranslocoService, TranslocoPipe, provideTranslocoScope } from '@jsverse/transloco';
5
- import { DropdownComponent, DropdownContentComponent, InputComponent, cn, EllipsisIcon, ChevronRightIcon, ButtonComponent, MenuComponent, MenuContentComponent, MenuItemComponent, BadgeComponent, DialogComponent, DialogHeaderComponent, DialogTitleComponent, DialogContentComponent, DialogFooterComponent, ListItemComponent, SwitchComponent, SelectOptionDirective, DialogService, TabsComponent, TabsListComponent, TabComponent, ChevronLeftIconComponent, ChevronsLeftIconComponent, ChevronsRightIconComponent, LoadingCircleIconComponent, CircleCheckIconComponent, PopoverComponent, HorizontalDividerComponent, CardComponent, CardHeaderComponent, CardContentComponent, CardFooterComponent, PopoverContentComponent, Separator, BookmarkIcon, UserIcon, TrashIcon, FolderIcon, VerticalDividerComponent, ButtonGroup, InputGroupInput, InputGroupComponent, InputGroupAddonComponent, SearchIcon, FilterIcon, DateRangePickerDirective } from '@sinequa/ui';
5
+ import { DropdownComponent, DropdownContentComponent, InputComponent, cn, EllipsisIcon, ChevronRightIcon, ButtonComponent, MenuComponent, MenuContentComponent, MenuItemComponent, BadgeComponent, DialogComponent, DialogHeaderComponent, DialogTitleComponent, DialogContentComponent, DialogFooterComponent, ListItemComponent, SwitchComponent, SelectOptionDirective, DialogService, TabsComponent, TabsListComponent, TabComponent, ChevronLeftIconComponent, ChevronsLeftIconComponent, ChevronsRightIconComponent, LoadingCircleIconComponent, CircleCheckIconComponent, PopoverComponent, HorizontalDividerComponent, CardComponent, CardHeaderComponent, CardContentComponent, CardFooterComponent, InputGroupInput, InputGroupComponent, InputGroupAddonComponent, PopoverContentComponent, Separator, BookmarkIcon, UserIcon, TrashIcon, FolderIcon, VerticalDividerComponent, ButtonGroup, SearchIcon, FilterIcon, DateRangePickerDirective, FlagEnglishIconComponent, FlagFrenchIconComponent, EditIcon, UndoIcon, AvatarComponent, AvatarFallbackComponent, AvatarImageComponent } from '@sinequa/ui';
6
6
  import highlightWords from 'highlight-words';
7
7
  import { ActivatedRoute, Router, NavigationEnd, RouterLink, RouterModule } from '@angular/router';
8
8
  import { withDevtools } from '@angular-architects/ngrx-toolkit';
9
9
  import { signalStore, signalStoreFeature, withState, withMethods, patchState, getState, withComputed } from '@ngrx/signals';
10
- import { globalConfig, EngineType, extraColumns, sysLang, getQueryParamsFromUrl, warn, notify, error, buildPathsAndLevels, info, escapeExpr, isAuthenticated, isExpired, patchUserSettings, deleteUserSettings, fetchUserSettings, setGlobalConfig, fetchSuggest, isObject, Audit, logout, login, addConcepts, queryParamsFromUrl, getMetadata, bisect, isNotInputEvent, fetchSponsoredLinks, fetchChangePassword, fetchSendPasswordResetEmail, expiresSoon, fetchQuery, translateAggregationToDateOptions, aggItemRegex, parseValueAndOperatorFromItem, debug, fetchSimilarDocuments, suggestionsToTreeAggregationNodes, fetchSuggestField, labels, fetchLabels, guid, getRelativeDate, isJsonable, addAuditAdditionalInfo, getToken, setToken, createHeaders } from '@sinequa/atomic';
11
- import { HttpClient, HttpParams, HttpResponse, HttpHeaders } from '@angular/common/http';
10
+ import { globalConfig, EngineType, extraColumns, sysLang, getQueryParamsFromUrl, warn, notify, error, buildPathsAndLevels, info, escapeExpr, isAuthenticated, isExpired, patchUserSettings, deleteUserSettings, fetchUserSettings, setGlobalConfig, fetchSuggest, isObject, Audit, logout, login, addConcepts, queryParamsFromUrl, getMetadata, bisect, isNotInputEvent, fetchSponsoredLinks, fetchChangePassword, fetchSendPasswordResetEmail, expiresSoon, fetchQuery, translateAggregationToDateOptions, aggItemRegex, parseValueAndOperatorFromItem, debug, fetchSimilarDocuments, suggestionsToTreeAggregationNodes, fetchSuggestField, labels, fetchLabels, guid, getRelativeDate, createUserProfile, patchUserProfile, isJsonable, addAuditAdditionalInfo, getToken, setToken, createHeaders } from '@sinequa/atomic';
11
+ import { HttpClient, HttpParams, httpResource, HttpResponse, HttpHeaders } from '@angular/common/http';
12
12
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
13
13
  import { DatePipe, DATE_PIPE_DEFAULT_TIMEZONE, DATE_PIPE_DEFAULT_OPTIONS, Location, NgTemplateOutlet, NgStyle, NgClass, NgComponentOutlet } from '@angular/common';
14
14
  import { Title, DomSanitizer } from '@angular/platform-browser';
@@ -30,10 +30,10 @@ class BackdropService {
30
30
  hide() {
31
31
  this.isVisible.next(false);
32
32
  }
33
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BackdropService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
34
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BackdropService, providedIn: 'root' });
33
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BackdropService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
34
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BackdropService, providedIn: 'root' });
35
35
  }
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BackdropService, decorators: [{
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BackdropService, decorators: [{
37
37
  type: Injectable,
38
38
  args: [{
39
39
  providedIn: 'root'
@@ -50,10 +50,10 @@ class BackdropComponent {
50
50
  ngOnDestroy() {
51
51
  this.sub.unsubscribe();
52
52
  }
53
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BackdropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
54
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: BackdropComponent, isStandalone: true, selector: "Backdrop, backdrop", host: { properties: { "attr.backdrop-visible": "this.backdropVisible" }, classAttribute: "z-[var(--z-backdrop)] bg-backdrop fixed bottom-0 left-0 right-0 top-0 hidden select-none" }, ngImport: i0, template: ``, isInline: true, styles: [":host{--backdrop-animation-duration: .25s;animation:hide-backdrop var(--backdrop-animation-duration, .25s) ease-out;@keyframes show-backdrop{0%{display:none;opacity:0}1%{display:block}to{opacity:1}}@keyframes hide-backdrop{0%{display:block;opacity:1}99%{opacity:0}to{display:none}}}:host[backdrop-visible=true]{display:block;animation:show-backdrop var(--backdrop-animation-duration, .25s) ease-out}\n"] });
53
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BackdropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
54
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: BackdropComponent, isStandalone: true, selector: "Backdrop, backdrop", host: { properties: { "attr.backdrop-visible": "this.backdropVisible" }, classAttribute: "z-[var(--z-backdrop)] bg-backdrop fixed bottom-0 left-0 right-0 top-0 hidden select-none" }, ngImport: i0, template: ``, isInline: true, styles: [":host{--backdrop-animation-duration: .25s;animation:hide-backdrop var(--backdrop-animation-duration, .25s) ease-out;@keyframes show-backdrop{0%{display:none;opacity:0}1%{display:block}to{opacity:1}}@keyframes hide-backdrop{0%{display:block;opacity:1}99%{opacity:0}to{display:none}}}:host[backdrop-visible=true]{display:block;animation:show-backdrop var(--backdrop-animation-duration, .25s) ease-out}\n"] });
55
55
  }
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BackdropComponent, decorators: [{
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BackdropComponent, decorators: [{
57
57
  type: Component,
58
58
  args: [{ selector: 'Backdrop, backdrop', standalone: true, imports: [], template: ``, host: {
59
59
  class: 'z-[var(--z-backdrop)] bg-backdrop fixed bottom-0 left-0 right-0 top-0 hidden select-none'
@@ -83,10 +83,10 @@ class HighlightWordPipe {
83
83
  const wordNormalized = word.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
84
84
  return highlightWords({ text: valueNormalized, query: wordNormalized, clipBy });
85
85
  }
86
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: HighlightWordPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
87
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: HighlightWordPipe, isStandalone: true, name: "highlightWord" });
86
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HighlightWordPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
87
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: HighlightWordPipe, isStandalone: true, name: "highlightWord" });
88
88
  }
89
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: HighlightWordPipe, decorators: [{
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HighlightWordPipe, decorators: [{
90
90
  type: Pipe,
91
91
  args: [{
92
92
  name: 'highlightWord',
@@ -125,10 +125,10 @@ class AppService {
125
125
  return EMPTY;
126
126
  }));
127
127
  }
128
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AppService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
129
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AppService, providedIn: 'root' });
128
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
129
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppService, providedIn: 'root' });
130
130
  }
131
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AppService, decorators: [{
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppService, decorators: [{
132
132
  type: Injectable,
133
133
  args: [{
134
134
  providedIn: 'root'
@@ -244,7 +244,7 @@ const AGGREGATIONS_NAMES_PRESET_DEFAULT = [
244
244
  const AGGREGATIONS_NAMES = new InjectionToken("Facets list to display", {
245
245
  factory: () => AGGREGATIONS_NAMES_PRESET_DEFAULT
246
246
  });
247
- const AppStore = signalStore({ providedIn: "root" }, withDevtools("App"), withAppFeatures(), withAppCustomizationFeatures());
247
+ const AppStore = signalStore({ providedIn: "root" }, withDevtools("App"), withAppFeatures());
248
248
  /**
249
249
  * Basic app management features
250
250
  */
@@ -273,7 +273,9 @@ function withAppFeatures() {
273
273
  revision: 0,
274
274
  runnableModels: "",
275
275
  authorizationLevel: "",
276
- columnMap: {}
276
+ columnMap: {},
277
+ customJSONs: [],
278
+ data: {}
277
279
  }),
278
280
  /**
279
281
  * Enhances the application store with various features and methods.
@@ -592,13 +594,7 @@ function withAppFeatures() {
592
594
  }
593
595
  return [];
594
596
  }
595
- })));
596
- }
597
- /**
598
- * Management of customization JSONs features for the app
599
- */
600
- function withAppCustomizationFeatures() {
601
- return signalStoreFeature(withState({ customJSONs: [], data: {} }), withComputed(({ customJSONs, data }) => {
597
+ })), withComputed(({ customJSONs, data }) => {
602
598
  // Helper function to parse JSON data with common error handling and fallback to default customJSONs
603
599
  const parseCustomJson = (jsonName, defaultValue) => {
604
600
  // Check if customJSONs is defined and is an array
@@ -683,31 +679,52 @@ function withAppCustomizationFeatures() {
683
679
  },
684
680
  /**
685
681
  * Retrieves the customization for a specific aggregation column.
686
- * @param column - The column name for which to retrieve the customization.
682
+ * @param aggColumn - The column name for which to retrieve the customization.
687
683
  * @returns The customization object for the specified column, or undefined if not found.
688
684
  */
689
- getAggregationCustomization(column, name) {
685
+ getAggregationCustomization(aggColumn, aggName) {
690
686
  // Be careful, because the column might not be defined in the filters JSON configuration file.
691
- const predicateByColumn = (filter) => filter?.column?.toLocaleLowerCase() === column.toLocaleLowerCase();
692
- const predicateByName = (filter) => filter?.name?.toLocaleLowerCase() === name?.toLocaleLowerCase();
693
- // Check if the filters custom JSON file is available in the store
694
- if (store.filters().length > 0) {
695
- // is column present in filters?
696
- const column = store.filters().find(predicateByColumn);
697
- if (column) {
698
- return column;
699
- }
700
- // is name present in filters?
701
- if (name) {
702
- const byName = store.filters().find(predicateByName);
703
- if (byName) {
704
- return byName;
705
- }
706
- }
687
+ // aggColumn can be an alias and in the custom json filters, the column can also be an alias
688
+ const predicateByColumn = (filter) => filter?.column?.toLocaleLowerCase() === aggColumn.toLocaleLowerCase();
689
+ const predicateByName = (filter) => filter?.name?.toLocaleLowerCase() === aggName?.toLocaleLowerCase();
690
+ // Check if the custom JSON configuration for the filters is available in the store
691
+ if (store.filters().length === 0)
707
692
  return undefined;
693
+ // try to return the customization
694
+ //
695
+ // The name takes priority in the custom JSON file.
696
+ // is the name exists in the json filters file?
697
+ if (aggName) {
698
+ const filter = store.filters().find(predicateByName);
699
+ // both name matches
700
+ if (filter) {
701
+ return filter;
702
+ }
708
703
  }
709
- // fallback to customizationJson
710
- return store.customizationJson().filters?.find(predicateByColumn);
704
+ // otherwise search by column's name
705
+ // both columns's values can be aliases
706
+ // is the column exists in the custom json filters file?
707
+ const filter = store.filters().find(predicateByColumn);
708
+ // if the aggName and the filter column's name matches
709
+ if (filter) {
710
+ return filter;
711
+ }
712
+ // check for aliases use cases
713
+ // is aggregation column name an alias, so we need to find the real name of the column
714
+ const aggCColumn = store.getColumn(aggColumn);
715
+ // case of an alias (we use the real name of the column)
716
+ if (aggCColumn?.name !== aggColumn) {
717
+ return store.filters().find((filter) => {
718
+ // filter column can also be an alias, so we need to get the real name
719
+ const filterCColumn = store.getColumn(filter?.column);
720
+ if (!filterCColumn)
721
+ return false;
722
+ // compare the real names
723
+ return filterCColumn?.name.toLocaleLowerCase() === aggCColumn?.name.toLocaleLowerCase();
724
+ });
725
+ }
726
+ // no customization found for the aggregation's column
727
+ return undefined;
711
728
  },
712
729
  /**
713
730
  * Determines whether a specific assistant is allowed based on its presence and configuration in the store.
@@ -750,10 +767,10 @@ class SourceIconPipe {
750
767
  }
751
768
  return 'far fa-file';
752
769
  }
753
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SourceIconPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
754
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: SourceIconPipe, isStandalone: true, name: "sourceIcon" });
770
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SourceIconPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
771
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: SourceIconPipe, isStandalone: true, name: "sourceIcon" });
755
772
  }
756
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SourceIconPipe, decorators: [{
773
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SourceIconPipe, decorators: [{
757
774
  type: Pipe,
758
775
  args: [{
759
776
  name: 'sourceIcon',
@@ -822,10 +839,10 @@ class OperatorPipe {
822
839
  return '';
823
840
  }
824
841
  }
825
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: OperatorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
826
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: OperatorPipe, isStandalone: true, name: "operator", pure: false });
842
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OperatorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
843
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: OperatorPipe, isStandalone: true, name: "operator", pure: false });
827
844
  }
828
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: OperatorPipe, decorators: [{
845
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OperatorPipe, decorators: [{
829
846
  type: Pipe,
830
847
  args: [{
831
848
  name: 'operator',
@@ -876,10 +893,10 @@ class SyslangPipe {
876
893
  }
877
894
  return this.lastValue;
878
895
  }
879
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SyslangPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
880
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: SyslangPipe, isStandalone: true, name: "syslang", pure: false });
896
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SyslangPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
897
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: SyslangPipe, isStandalone: true, name: "syslang", pure: false });
881
898
  }
882
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SyslangPipe, decorators: [{
899
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SyslangPipe, decorators: [{
883
900
  type: Pipe,
884
901
  args: [{
885
902
  name: 'syslang',
@@ -911,10 +928,10 @@ class TranslocoDateImpurePipe extends DatePipe {
911
928
  });
912
929
  return this.lastTransformedValue;
913
930
  }
914
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TranslocoDateImpurePipe, deps: [{ token: LOCALE_ID }, { token: DATE_PIPE_DEFAULT_TIMEZONE, optional: true }, { token: DATE_PIPE_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
915
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: TranslocoDateImpurePipe, isStandalone: true, name: "translocoDate", pure: false });
931
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TranslocoDateImpurePipe, deps: [{ token: LOCALE_ID }, { token: DATE_PIPE_DEFAULT_TIMEZONE, optional: true }, { token: DATE_PIPE_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
932
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: TranslocoDateImpurePipe, isStandalone: true, name: "translocoDate", pure: false });
916
933
  }
917
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TranslocoDateImpurePipe, decorators: [{
934
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TranslocoDateImpurePipe, decorators: [{
918
935
  type: Pipe,
919
936
  args: [{
920
937
  name: 'translocoDate',
@@ -981,10 +998,10 @@ class FileSizePipe {
981
998
  }
982
999
  return obj;
983
1000
  }
984
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FileSizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
985
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: FileSizePipe, isStandalone: true, name: "fileSize" });
1001
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FileSizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1002
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: FileSizePipe, isStandalone: true, name: "fileSize" });
986
1003
  }
987
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FileSizePipe, decorators: [{
1004
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FileSizePipe, decorators: [{
988
1005
  type: Pipe,
989
1006
  args: [{
990
1007
  name: 'fileSize'
@@ -994,8 +1011,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
994
1011
  class DropdownListComponent {
995
1012
  items = input.required(...(ngDevMode ? [{ debugName: "items" }] : []));
996
1013
  onClick = output();
997
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
998
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DropdownListComponent, isStandalone: true, selector: "dropdown-list, DropdownList", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
1014
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DropdownListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1015
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DropdownListComponent, isStandalone: true, selector: "dropdown-list, DropdownList", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
999
1016
  @for (item of items(); track $index) {
1000
1017
  <span class="bg-primary text-primary-foreground m-1 inline-flex cursor-default select-none items-center rounded-full px-2 py-1 font-semibold">
1001
1018
  {{ item.display || item.value | syslang | transloco }}
@@ -1016,7 +1033,7 @@ class DropdownListComponent {
1016
1033
  }
1017
1034
  `, isInline: true, dependencies: [{ kind: "pipe", type: SyslangPipe, name: "syslang" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
1018
1035
  }
1019
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownListComponent, decorators: [{
1036
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DropdownListComponent, decorators: [{
1020
1037
  type: Component,
1021
1038
  args: [{
1022
1039
  selector: "dropdown-list, DropdownList",
@@ -1055,8 +1072,8 @@ class DropdownInputComponent {
1055
1072
  onKeyUp = output(); // emits the input value
1056
1073
  removeItem = output();
1057
1074
  addItem = output();
1058
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1059
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DropdownInputComponent, isStandalone: true, selector: "dropdown-input, DropdownInput", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, noResultLabel: { classPropertyName: "noResultLabel", publicName: "noResultLabel", isSignal: true, isRequired: false, transformFunction: null }, suggestions: { classPropertyName: "suggestions", publicName: "suggestions", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onFocus: "onFocus", onKeyUp: "onKeyUp", removeItem: "removeItem", addItem: "addItem" }, ngImport: i0, template: `
1075
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DropdownInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1076
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DropdownInputComponent, isStandalone: true, selector: "dropdown-input, DropdownInput", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, noResultLabel: { classPropertyName: "noResultLabel", publicName: "noResultLabel", isSignal: true, isRequired: false, transformFunction: null }, suggestions: { classPropertyName: "suggestions", publicName: "suggestions", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onFocus: "onFocus", onKeyUp: "onKeyUp", removeItem: "removeItem", addItem: "addItem" }, ngImport: i0, template: `
1060
1077
  @if (label()) {
1061
1078
  <p class="font-semibold">{{ label() }}</p>
1062
1079
  }
@@ -1090,7 +1107,7 @@ class DropdownInputComponent {
1090
1107
  </Dropdown>
1091
1108
  `, isInline: true, dependencies: [{ kind: "component", type: DropdownComponent, selector: "dropdown, Dropdown", inputs: ["disabled"] }, { kind: "component", type: DropdownListComponent, selector: "dropdown-list, DropdownList", inputs: ["items"], outputs: ["onClick"] }, { kind: "directive", type: DropdownContentComponent, selector: "dropdown-content, dropdowncontent, DropdownContent", inputs: ["class", "position"] }, { kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "pipe", type: SyslangPipe, name: "syslang" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
1092
1109
  }
1093
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownInputComponent, decorators: [{
1110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DropdownInputComponent, decorators: [{
1094
1111
  type: Component,
1095
1112
  args: [{
1096
1113
  selector: 'dropdown-input, DropdownInput',
@@ -1138,10 +1155,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
1138
1155
  class SearchInputFooter {
1139
1156
  class = input(...(ngDevMode ? [undefined, { debugName: "class" }] : []));
1140
1157
  variants = computed(() => cn("pt-2", this.class()), ...(ngDevMode ? [{ debugName: "variants" }] : []));
1141
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SearchInputFooter, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1142
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: SearchInputFooter, isStandalone: true, selector: ".search-input-footer, search-input-footer, SearchInputFooter, searchinputfooter", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "variants()" } }, ngImport: i0 });
1158
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchInputFooter, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1159
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: SearchInputFooter, isStandalone: true, selector: ".search-input-footer, search-input-footer, SearchInputFooter, searchinputfooter", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "variants()" } }, ngImport: i0 });
1143
1160
  }
1144
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SearchInputFooter, decorators: [{
1161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchInputFooter, decorators: [{
1145
1162
  type: Directive,
1146
1163
  args: [{
1147
1164
  selector: ".search-input-footer, search-input-footer, SearchInputFooter, searchinputfooter",
@@ -1252,10 +1269,10 @@ class PrincipalService {
1252
1269
  return EMPTY;
1253
1270
  }));
1254
1271
  }
1255
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PrincipalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1256
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PrincipalService, providedIn: 'root' });
1272
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PrincipalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1273
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PrincipalService, providedIn: 'root' });
1257
1274
  }
1258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PrincipalService, decorators: [{
1275
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PrincipalService, decorators: [{
1259
1276
  type: Injectable,
1260
1277
  args: [{
1261
1278
  providedIn: 'root'
@@ -1567,8 +1584,14 @@ class QueryService {
1567
1584
  const query = includeQueryParams ? { ...this.queryParamsStore.getQuery(), ...currentQuery } : currentQuery;
1568
1585
  // Check if the search query is empty and if empty searches are allowed
1569
1586
  // If not allowed, return an empty result
1570
- // basket overrides this rule
1571
- if (!query.basket && query.action !== "open") {
1587
+ //
1588
+ // note:
1589
+ // basket overrides this rule,
1590
+ // open action (to open aggregations's children) also overrides this rule
1591
+ // determine if there are any filters applied
1592
+ const currentFilters = this.queryParamsStore.filters || [];
1593
+ const hasFilters = currentFilters.length > 0;
1594
+ if (!hasFilters && !query.basket && query.action !== "open") {
1572
1595
  const allowEmptySearch = this.appStore.allowEmptySearch(query?.name || "");
1573
1596
  if (allowEmptySearch === false && query?.text === "") {
1574
1597
  warn("QueryService.search: Empty search query is not allowed. Returning empty result.");
@@ -1581,7 +1604,7 @@ class QueryService {
1581
1604
  query,
1582
1605
  $auditRecord
1583
1606
  };
1584
- return this.http.post(this.API_URL + "/query", body).pipe(catchError((err) => {
1607
+ return this.http.post(`${this.API_URL}/query`, body).pipe(catchError((err) => {
1585
1608
  error("queryService.getResults failure - error: ", err);
1586
1609
  return of({});
1587
1610
  }), map((result) => {
@@ -1638,7 +1661,7 @@ class QueryService {
1638
1661
  query
1639
1662
  });
1640
1663
  }
1641
- return this.http.post(this.API_URL + "/multi", body).pipe(catchError((err) => {
1664
+ return this.http.post(`${this.API_URL}/multi`, body).pipe(catchError((err) => {
1642
1665
  error("queryService.bulkSearch failure - error: ", err);
1643
1666
  return EMPTY;
1644
1667
  }), map((response) => {
@@ -1694,10 +1717,10 @@ class QueryService {
1694
1717
  };
1695
1718
  this.queryParamsStore.patch({ page }, audit);
1696
1719
  }
1697
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: QueryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1698
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: QueryService, providedIn: "root" });
1720
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: QueryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1721
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: QueryService, providedIn: "root" });
1699
1722
  }
1700
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: QueryService, decorators: [{
1723
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: QueryService, decorators: [{
1701
1724
  type: Injectable,
1702
1725
  args: [{
1703
1726
  providedIn: "root"
@@ -1754,6 +1777,7 @@ class AggregationsService {
1754
1777
  const expression = `${aggregation.column}:${escapeExpr(value)}`;
1755
1778
  const q = {
1756
1779
  ...query,
1780
+ text: "",
1757
1781
  action: "open",
1758
1782
  open: [{ expression, aggregation: aggregation.name }]
1759
1783
  };
@@ -1962,34 +1986,34 @@ class AggregationsService {
1962
1986
  return authorizedFilters;
1963
1987
  }
1964
1988
  getFilterCriteria = () => {
1965
- // f.column can be a column name or a column alias
1966
- // filter.column can be a column name or a column alias
1967
- return (filter) => {
1968
- return this.appStore.filters().some((f) => {
1969
- // if f.name is defined, use it to compare
1970
- if (f.name) {
1971
- return f.name.toLocaleLowerCase() === filter.name.toLocaleLowerCase();
1989
+ // filter: object filter from the custom JSON
1990
+ // agg: object aggregation returned by the backend
1991
+ return (agg) => {
1992
+ return this.appStore.filters().some((filter) => {
1993
+ // if filter.name is defined, use it to compare
1994
+ if (filter.name) {
1995
+ return filter.name.toLocaleLowerCase() === agg.name.toLocaleLowerCase();
1972
1996
  }
1973
1997
  // fallback to column comparison
1974
1998
  // column can be a column's name or an alias
1975
1999
  // resolve ambiguity between column and alias
1976
2000
  const { columnMap } = getState(this.appStore);
1977
2001
  // get the actual column for both filter and f
1978
- const filterColumn = columnMap?.[filter.column.toLocaleLowerCase()];
1979
- const fColumn = columnMap?.[f?.column?.toLocaleLowerCase() || f.name.toLocaleLowerCase()];
2002
+ const aggColumn = columnMap?.[agg.column.toLocaleLowerCase()];
2003
+ const filterColumn = columnMap?.[filter?.column?.toLocaleLowerCase() || filter.name.toLocaleLowerCase()];
1980
2004
  // if either column is not found, fallback to comparing the raw values
1981
- if (!filterColumn || !fColumn) {
1982
- return f?.column?.toLocaleLowerCase() === filter?.column?.toLocaleLowerCase();
2005
+ if (!aggColumn || !filterColumn) {
2006
+ return filter?.column?.toLocaleLowerCase() === agg?.column?.toLocaleLowerCase();
1983
2007
  }
1984
2008
  // compare the actual column names coming from the column map
1985
- return filterColumn?.name === fColumn?.name;
2009
+ return aggColumn?.name === filterColumn?.name;
1986
2010
  });
1987
2011
  };
1988
2012
  };
1989
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AggregationsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1990
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AggregationsService, providedIn: "root" });
2013
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AggregationsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2014
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AggregationsService, providedIn: "root" });
1991
2015
  }
1992
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AggregationsService, decorators: [{
2016
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AggregationsService, decorators: [{
1993
2017
  type: Injectable,
1994
2018
  args: [{
1995
2019
  providedIn: "root"
@@ -2039,7 +2063,7 @@ function AuthGuard() {
2039
2063
  sessionStorage.setItem("passwordExpiredFlow", "true");
2040
2064
  const username = (p.name || "").trim();
2041
2065
  router.navigate(["/login"], {
2042
- queryParams: { mode: "changepassword", username, returnUrl: state.url }
2066
+ queryParams: { mode: "changepassword", alert: "passwordExpired", username, returnUrl: state.url }
2043
2067
  });
2044
2068
  return false;
2045
2069
  }
@@ -2089,7 +2113,7 @@ function PasswordExpiryGuard() {
2089
2113
  sessionStorage.setItem("passwordExpiredFlow", "true");
2090
2114
  const username = (p.name || "").trim();
2091
2115
  router.navigate(["/login"], {
2092
- queryParams: { mode: "changepassword", username, returnUrl: state.url }
2116
+ queryParams: { mode: "changepassword", alert: "passwordExpired", username, returnUrl: state.url }
2093
2117
  });
2094
2118
  return false;
2095
2119
  }
@@ -2972,10 +2996,10 @@ class ApplicationService {
2972
2996
  this.titleService.setTitle(title);
2973
2997
  }
2974
2998
  }
2975
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ApplicationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2976
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ApplicationService, providedIn: "root" });
2999
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3000
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationService, providedIn: "root" });
2977
3001
  }
2978
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ApplicationService, decorators: [{
3002
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationService, decorators: [{
2979
3003
  type: Injectable,
2980
3004
  args: [{
2981
3005
  providedIn: "root"
@@ -3087,10 +3111,10 @@ class AuditService {
3087
3111
  }
3088
3112
  });
3089
3113
  }
3090
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AuditService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3091
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AuditService, providedIn: 'root' });
3114
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuditService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3115
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuditService, providedIn: 'root' });
3092
3116
  }
3093
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AuditService, decorators: [{
3117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuditService, decorators: [{
3094
3118
  type: Injectable,
3095
3119
  args: [{
3096
3120
  providedIn: 'root'
@@ -3158,10 +3182,10 @@ class AutocompleteService {
3158
3182
  }
3159
3183
  return items;
3160
3184
  }
3161
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AutocompleteService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3162
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AutocompleteService, providedIn: 'root' });
3185
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AutocompleteService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3186
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AutocompleteService, providedIn: 'root' });
3163
3187
  }
3164
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AutocompleteService, decorators: [{
3188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AutocompleteService, decorators: [{
3165
3189
  type: Injectable,
3166
3190
  args: [{
3167
3191
  providedIn: 'root'
@@ -3199,10 +3223,10 @@ class JsonMethodPluginService {
3199
3223
  ...options
3200
3224
  });
3201
3225
  }
3202
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: JsonMethodPluginService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3203
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: JsonMethodPluginService, providedIn: 'root' });
3226
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: JsonMethodPluginService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3227
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: JsonMethodPluginService, providedIn: 'root' });
3204
3228
  }
3205
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: JsonMethodPluginService, decorators: [{
3229
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: JsonMethodPluginService, decorators: [{
3206
3230
  type: Injectable,
3207
3231
  args: [{
3208
3232
  providedIn: 'root'
@@ -3238,10 +3262,10 @@ class NavigationService {
3238
3262
  this.urlAfterNavigation = event.url;
3239
3263
  }
3240
3264
  }), shareReplay(1));
3241
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3242
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NavigationService, providedIn: "root" });
3265
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3266
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NavigationService, providedIn: "root" });
3243
3267
  }
3244
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NavigationService, decorators: [{
3268
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NavigationService, decorators: [{
3245
3269
  type: Injectable,
3246
3270
  args: [{
3247
3271
  providedIn: "root"
@@ -3421,6 +3445,8 @@ class PreviewService {
3421
3445
  customHighlights,
3422
3446
  $auditRecord
3423
3447
  };
3448
+ // reset preview data
3449
+ this.previewData = undefined;
3424
3450
  return this.http
3425
3451
  .post(`${this.API_URL}/preview`, body)
3426
3452
  .pipe(tap((data) => this.setPreviewData(data)));
@@ -3669,10 +3695,10 @@ class PreviewService {
3669
3695
  this.currentPage.set(this.totalPages());
3670
3696
  this.sendMessage({ action: "last-page" });
3671
3697
  }
3672
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PreviewService, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Injectable });
3673
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PreviewService, providedIn: "root" });
3698
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PreviewService, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Injectable });
3699
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PreviewService, providedIn: "root" });
3674
3700
  }
3675
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PreviewService, decorators: [{
3701
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PreviewService, decorators: [{
3676
3702
  type: Injectable,
3677
3703
  args: [{
3678
3704
  providedIn: "root"
@@ -3737,10 +3763,10 @@ class SavedSearchesService {
3737
3763
  deleteSavedSearch(index) {
3738
3764
  this.userSettingsStore.deleteSavedSearch(index);
3739
3765
  }
3740
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SavedSearchesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3741
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SavedSearchesService, providedIn: 'root' });
3766
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedSearchesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3767
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedSearchesService, providedIn: 'root' });
3742
3768
  }
3743
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SavedSearchesService, decorators: [{
3769
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedSearchesService, decorators: [{
3744
3770
  type: Injectable,
3745
3771
  args: [{
3746
3772
  providedIn: 'root'
@@ -3833,10 +3859,10 @@ class SearchService {
3833
3859
  }
3834
3860
  });
3835
3861
  }
3836
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3837
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SearchService, providedIn: 'root' });
3862
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3863
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchService, providedIn: 'root' });
3838
3864
  }
3839
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SearchService, decorators: [{
3865
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchService, decorators: [{
3840
3866
  type: Injectable,
3841
3867
  args: [{
3842
3868
  providedIn: 'root'
@@ -3852,7 +3878,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
3852
3878
  * - `article`: The selected article.
3853
3879
  * - `id`: The ID of the selected article.
3854
3880
  * - `queryText`: The query text associated with the selection.
3855
- *
3881
+ * - `queryName`: The query name associated with the selection.
3856
3882
  * @methods
3857
3883
  * - `update(article: Article, queryText?: string)`: Updates the store with a new article and optional query text.
3858
3884
  * - `updateQueryText(queryText: string)`: Updates the query text in the store.
@@ -3864,6 +3890,7 @@ function withSelectionFeatures() {
3864
3890
  article: undefined,
3865
3891
  id: undefined,
3866
3892
  queryText: undefined,
3893
+ queryName: undefined,
3867
3894
  previewHighlights: undefined,
3868
3895
  assistantIdsToAttach: []
3869
3896
  }), withMethods((store) => ({
@@ -3889,6 +3916,7 @@ function withSelectionFeatures() {
3889
3916
  article: undefined,
3890
3917
  id: undefined,
3891
3918
  queryText: undefined,
3919
+ queryName: undefined,
3892
3920
  previewHighlights: undefined,
3893
3921
  assistantIdsToAttach: undefined
3894
3922
  };
@@ -3997,10 +4025,10 @@ class SelectionService {
3997
4025
  const url = this.router.createUrlTree([], { relativeTo: this.route, queryParams }).toString();
3998
4026
  this.location.replaceState(url);
3999
4027
  }
4000
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4001
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SelectionService, providedIn: 'root' });
4028
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4029
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectionService, providedIn: 'root' });
4002
4030
  }
4003
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SelectionService, decorators: [{
4031
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectionService, decorators: [{
4004
4032
  type: Injectable,
4005
4033
  args: [{
4006
4034
  providedIn: 'root'
@@ -4084,10 +4112,10 @@ class SelectionHistoryService {
4084
4112
  this.selectionHistoryEvent.next('back');
4085
4113
  return last;
4086
4114
  }
4087
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SelectionHistoryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4088
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SelectionHistoryService, providedIn: 'root' });
4115
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectionHistoryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4116
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectionHistoryService, providedIn: 'root' });
4089
4117
  }
4090
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SelectionHistoryService, decorators: [{
4118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectionHistoryService, decorators: [{
4091
4119
  type: Injectable,
4092
4120
  args: [{
4093
4121
  providedIn: 'root'
@@ -4122,16 +4150,41 @@ class TextChunkService {
4122
4150
  return [];
4123
4151
  }));
4124
4152
  }
4125
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TextChunkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4126
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TextChunkService, providedIn: 'root' });
4153
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TextChunkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4154
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TextChunkService, providedIn: 'root' });
4127
4155
  }
4128
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TextChunkService, decorators: [{
4156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TextChunkService, decorators: [{
4129
4157
  type: Injectable,
4130
4158
  args: [{
4131
4159
  providedIn: 'root'
4132
4160
  }]
4133
4161
  }] });
4134
4162
 
4163
+ class UserProfileService {
4164
+ API_URL = `${globalConfig.backendUrl}/api/v2/user-profile`;
4165
+ /**
4166
+ * Retrieves the user profile by user ID.
4167
+ *
4168
+ * @param id - The ID of the user.
4169
+ * @returns An Observable that emits an the UserProfile object.
4170
+ */
4171
+ getUserProfile(principal) {
4172
+ return httpResource(() => (principal()?.userId ? `${this.API_URL}/${principal()?.userId}` : undefined), {
4173
+ parse: (response) => {
4174
+ return response;
4175
+ }
4176
+ });
4177
+ }
4178
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4179
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileService, providedIn: "root" });
4180
+ }
4181
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileService, decorators: [{
4182
+ type: Injectable,
4183
+ args: [{
4184
+ providedIn: "root"
4185
+ }]
4186
+ }] });
4187
+
4135
4188
  async function signIn() {
4136
4189
  assertInInjectionContext(signIn);
4137
4190
  const router = inject(Router);
@@ -4298,7 +4351,7 @@ function withQueryParamsFeatures() {
4298
4351
  /**
4299
4352
  * Sets the state from the given URL by extracting query parameters and updating the store.
4300
4353
  *
4301
- * @param url - The URL containing query parameters to set the state from.
4354
+ * @param href - The URL containing query parameters to set the state from.
4302
4355
  *
4303
4356
  * The function performs the following steps:
4304
4357
  * 1. Extracts the path from the URL.
@@ -4307,11 +4360,13 @@ function withQueryParamsFeatures() {
4307
4360
  * 4. Converts the page parameter to a number if it exists.
4308
4361
  * 5. Updates the store state with the extracted and parsed values.
4309
4362
  */
4310
- setFromUrl(url) {
4311
- if (!url)
4363
+ setFromUrl(href) {
4364
+ if (!href)
4312
4365
  return;
4313
- const path = url.split("?")[0];
4314
- const { q: text, f, id, p, s: sort, c, t: tab, basket } = queryParamsFromUrl(url);
4366
+ // get the hash path without the query params and without the leading '#'
4367
+ const url = new URL(href, window.location.origin);
4368
+ const path = url.hash.split("?")[0].replace(/^#/, "");
4369
+ const { q: text, f, id, p, s: sort, c, t: tab, basket, n: name } = queryParamsFromUrl(href);
4315
4370
  const filters = f ? JSON.parse(decodeURIComponent(f)) : [];
4316
4371
  const spellingCorrectionMode = c;
4317
4372
  let page;
@@ -4319,18 +4374,19 @@ function withQueryParamsFeatures() {
4319
4374
  page = parseInt(p, 10);
4320
4375
  }
4321
4376
  patchState(store, (state) => {
4322
- return { ...state, path, text, filters, id, page, sort, spellingCorrectionMode, tab, basket };
4377
+ return { ...state, path, text, filters, id, page, sort, spellingCorrectionMode, tab, basket, name };
4323
4378
  });
4324
4379
  },
4325
4380
  _updateUrlQueryParams(state, audit) {
4326
- const { filters, page, sort, tab, text, basket } = state;
4381
+ const { filters, page, sort, tab, text, basket, name } = state;
4327
4382
  const queryParams = {
4328
4383
  f: filters && filters.length > 0 ? JSON.stringify(filters) : undefined,
4329
4384
  p: page,
4330
4385
  s: sort,
4331
4386
  t: tab,
4332
4387
  q: text,
4333
- b: basket
4388
+ b: basket,
4389
+ n: name
4334
4390
  };
4335
4391
  router.navigate([], { relativeTo: route, queryParamsHandling: "merge", queryParams, state: { audit } });
4336
4392
  },
@@ -4342,7 +4398,8 @@ function withQueryParamsFeatures() {
4342
4398
  s: state.sort,
4343
4399
  t: state.tab,
4344
4400
  q: state.text,
4345
- b: state.basket
4401
+ b: state.basket,
4402
+ n: state.name
4346
4403
  };
4347
4404
  },
4348
4405
  /**
@@ -4384,7 +4441,8 @@ function withQueryParamsFeatures() {
4384
4441
  // cancel if a filter is found for the current field which contains the value we want to add
4385
4442
  if (existingFilter &&
4386
4443
  filter.value &&
4387
- (existingFilter.value === filter.value || existingFilter.values?.some((v) => v === filter.value)))
4444
+ (existingFilter.value?.toLowerCase() === filter.value?.toLowerCase() ||
4445
+ existingFilter.values?.some((v) => v?.toLowerCase() === filter.value?.toLowerCase())))
4388
4446
  return state;
4389
4447
  if (existingFilter) {
4390
4448
  // if filter found for the field without the value we want to add, merge the filters and values
@@ -4508,7 +4566,9 @@ function withQueryParamsFeatures() {
4508
4566
  */
4509
4567
  patch(params, audit) {
4510
4568
  patchState(store, (state) => {
4511
- const newState = { ...state, ...params };
4569
+ // get the hash path without the query params and without the leading '#'
4570
+ const path = window.location.hash.split("?")[0].replace(/^#/, "");
4571
+ const newState = { ...state, ...params, path };
4512
4572
  this._updateUrlQueryParams(newState, audit);
4513
4573
  return newState;
4514
4574
  });
@@ -4749,10 +4809,10 @@ class SourceComponent {
4749
4809
  }
4750
4810
  return { iconClass: defaultIconClass };
4751
4811
  }, ...(ngDevMode ? [{ debugName: "iconDetails" }] : []));
4752
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SourceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4753
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: SourceComponent, isStandalone: true, selector: "source, Source", inputs: { collection: { classPropertyName: "collection", publicName: "collection", isSignal: true, isRequired: false, transformFunction: null }, connector: { classPropertyName: "connector", publicName: "connector", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslocoScope('sources')], ngImport: i0, template: "@if (iconDetails()?.iconPath) {\n <img [src]=\"iconDetails()?.iconPath\" [alt]=\"collection()?.[0] || ('sources.sourceIcon' | transloco)\" />\n} @else {\n <i class=\"{{ iconDetails()?.iconClass }}\" [attr.aria-label]=\"'sources.sourceIcon' | transloco\"></i>\n}\n", dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
4812
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SourceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4813
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: SourceComponent, isStandalone: true, selector: "source, Source", inputs: { collection: { classPropertyName: "collection", publicName: "collection", isSignal: true, isRequired: false, transformFunction: null }, connector: { classPropertyName: "connector", publicName: "connector", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslocoScope('sources')], ngImport: i0, template: "@if (iconDetails()?.iconPath) {\n <img [src]=\"iconDetails()?.iconPath\" [alt]=\"collection()?.[0] || ('sources.sourceIcon' | transloco)\" />\n} @else {\n <i class=\"{{ iconDetails()?.iconClass }}\" [attr.aria-label]=\"'sources.sourceIcon' | transloco\"></i>\n}\n", dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
4754
4814
  }
4755
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SourceComponent, decorators: [{
4815
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SourceComponent, decorators: [{
4756
4816
  type: Component,
4757
4817
  args: [{ selector: 'source, Source', standalone: true, imports: [TranslocoPipe], providers: [provideTranslocoScope('sources')], template: "@if (iconDetails()?.iconPath) {\n <img [src]=\"iconDetails()?.iconPath\" [alt]=\"collection()?.[0] || ('sources.sourceIcon' | transloco)\" />\n} @else {\n <i class=\"{{ iconDetails()?.iconClass }}\" [attr.aria-label]=\"'sources.sourceIcon' | transloco\"></i>\n}\n" }]
4758
4818
  }], propDecorators: { collection: [{ type: i0.Input, args: [{ isSignal: true, alias: "collection", required: false }] }], connector: [{ type: i0.Input, args: [{ isSignal: true, alias: "connector", required: false }] }] } });
@@ -4837,8 +4897,8 @@ class DocumentLocatorComponent {
4837
4897
  const { filters } = getState(this.queryParamStore);
4838
4898
  this.router.navigate([], { queryParams: { f: JSON.stringify(filters) }, queryParamsHandling: "merge" });
4839
4899
  }
4840
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DocumentLocatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4841
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DocumentLocatorComponent, isStandalone: true, selector: "document-locator, DocumentLocator", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, aggregation: { classPropertyName: "aggregation", publicName: "aggregation", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "flex items-center grow gap-2 overflow-hidden" }, viewQueries: [{ propertyName: "shadow", first: true, predicate: ["shadowRender"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "client", first: true, predicate: ["documentLocator"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `
4900
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentLocatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4901
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DocumentLocatorComponent, isStandalone: true, selector: "document-locator, DocumentLocator", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, aggregation: { classPropertyName: "aggregation", publicName: "aggregation", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "flex items-center grow gap-2 overflow-hidden" }, viewQueries: [{ propertyName: "shadow", first: true, predicate: ["shadowRender"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "client", first: true, predicate: ["documentLocator"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `
4842
4902
  <!-- Renders all segment hidden to user to compute width -->
4843
4903
  <div #shadowRender class="pointer-events-none invisible absolute left-0 top-0 -z-10 flex gap-2">
4844
4904
  @for (segment of locationSegments(); track $index) {
@@ -4887,7 +4947,7 @@ class DocumentLocatorComponent {
4887
4947
  </div>
4888
4948
  `, isInline: true, dependencies: [{ kind: "component", type: EllipsisIcon, selector: "ellipsis-icon, EllipsisIcon, ellipsisicon", inputs: ["class", "orientation"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "component", type: SourceComponent, selector: "source, Source", inputs: ["collection", "connector"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: MenuComponent, selector: "menu, Menu", inputs: ["disabled"] }, { kind: "directive", type: MenuContentComponent, selector: "MenuContent, menucontent, menu-content", inputs: ["class", "position"] }, { kind: "directive", type: MenuItemComponent, selector: "menu-item, menuitem, MenuItem", inputs: ["class", "variant", "decoration"] }] });
4889
4949
  }
4890
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DocumentLocatorComponent, decorators: [{
4950
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentLocatorComponent, decorators: [{
4891
4951
  type: Component,
4892
4952
  args: [{
4893
4953
  selector: "document-locator, DocumentLocator",
@@ -4960,8 +5020,8 @@ class ErrorComponent {
4960
5020
  reload() {
4961
5021
  this.router.navigate(['/']).then(() => window.location.reload());
4962
5022
  }
4963
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4964
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: ErrorComponent, isStandalone: true, selector: "error-component, ErrorComponent", ngImport: i0, template: `
5023
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5024
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ErrorComponent, isStandalone: true, selector: "error-component, ErrorComponent", ngImport: i0, template: `
4965
5025
  <div class="bg-background text-foreground flex min-h-screen flex-col items-center justify-center">
4966
5026
  <svg
4967
5027
  class="mb-8 h-20 w-20 text-red-600"
@@ -5004,7 +5064,7 @@ class ErrorComponent {
5004
5064
  </div>
5005
5065
  `, isInline: true });
5006
5066
  }
5007
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ErrorComponent, decorators: [{
5067
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ErrorComponent, decorators: [{
5008
5068
  type: Component,
5009
5069
  args: [{
5010
5070
  selector: 'error-component, ErrorComponent',
@@ -5101,8 +5161,8 @@ class LoadingComponent {
5101
5161
  });
5102
5162
  }
5103
5163
  }
5104
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: LoadingComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
5105
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: LoadingComponent, isStandalone: true, selector: "app-wait", ngImport: i0, template: `
5164
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoadingComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
5165
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: LoadingComponent, isStandalone: true, selector: "app-wait", ngImport: i0, template: `
5106
5166
  <div class="flex h-[100dvh] w-full items-center justify-center">
5107
5167
  <div class="flex flex-col items-center space-y-4">
5108
5168
  <span class="loader"></span>
@@ -5110,7 +5170,7 @@ class LoadingComponent {
5110
5170
  </div>
5111
5171
  `, isInline: true, styles: [".loader{--w: 96px;--h: 96px;transform:rotate(45deg);perspective:1000px;border-radius:50%;width:var(--w);height:var(--h);color:#0040bf}.loader:before,.loader:after{content:\"\";display:block;position:absolute;top:0;left:0;width:inherit;height:inherit;border-radius:50%;transform:rotateX(70deg);animation:1s spin linear infinite}.loader:after{color:#ff854a;transform:rotateY(70deg);animation-delay:.4s}@keyframes rotate{0%{transform:translate(-50%,-50%) rotate(0)}to{transform:translate(-50%,-50%) rotate(360deg)}}@keyframes rotateccw{0%{transform:translate(-50%,-50%) rotate(0)}to{transform:translate(-50%,-50%) rotate(-360deg)}}@keyframes spin{0%,to{box-shadow:.4em 0 0 0 currentcolor}12%{box-shadow:.4em .4em 0 0 currentcolor}25%{box-shadow:0 .4em 0 0 currentcolor}37%{box-shadow:-.4em .4em 0 0 currentcolor}50%{box-shadow:-.4em 0 0 0 currentcolor}62%{box-shadow:-.4em -.4em 0 0 currentcolor}75%{box-shadow:0 -.4em 0 0 currentcolor}87%{box-shadow:.4em -.4em 0 0 currentcolor}}\n"] });
5112
5172
  }
5113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: LoadingComponent, decorators: [{
5173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoadingComponent, decorators: [{
5114
5174
  type: Component,
5115
5175
  args: [{ selector: 'app-wait', standalone: true, imports: [], template: `
5116
5176
  <div class="flex h-[100dvh] w-full items-center justify-center">
@@ -5134,8 +5194,8 @@ class MetadataComponent {
5134
5194
  handleClick(event, item) {
5135
5195
  this.click.emit({ filter: item, event });
5136
5196
  }
5137
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MetadataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5138
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: MetadataComponent, isStandalone: true, selector: "Metadata, metadata", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, metadata: { classPropertyName: "metadata", publicName: "metadata", isSignal: true, isRequired: true, transformFunction: null }, article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, limit: { classPropertyName: "limit", publicName: "limit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { click: "click" }, host: { properties: { "class.hidden": "items().length === 0" } }, exportAs: ["metadata"], ngImport: i0, template: `
5197
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MetadataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5198
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MetadataComponent, isStandalone: true, selector: "Metadata, metadata", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, metadata: { classPropertyName: "metadata", publicName: "metadata", isSignal: true, isRequired: true, transformFunction: null }, article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, limit: { classPropertyName: "limit", publicName: "limit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { click: "click" }, host: { properties: { "class.hidden": "items().length === 0" } }, exportAs: ["metadata"], ngImport: i0, template: `
5139
5199
  @for (item of items().slice(0, limit()); track $index) {
5140
5200
  @if (item) {
5141
5201
  <badge
@@ -5148,7 +5208,7 @@ class MetadataComponent {
5148
5208
  }
5149
5209
  `, isInline: true, styles: [":host{display:contents}:host,:host:hover{background-color:transparent}\n"], dependencies: [{ kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant"] }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
5150
5210
  }
5151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MetadataComponent, decorators: [{
5211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MetadataComponent, decorators: [{
5152
5212
  type: Component,
5153
5213
  args: [{ selector: "Metadata, metadata", exportAs: "metadata", standalone: true, imports: [SyslangPipe, BadgeComponent], template: `
5154
5214
  @for (item of items().slice(0, limit()); track $index) {
@@ -5182,10 +5242,10 @@ class MissingTermsComponent {
5182
5242
  };
5183
5243
  });
5184
5244
  }, ...(ngDevMode ? [{ debugName: "missingTerms" }] : []));
5185
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MissingTermsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5186
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: MissingTermsComponent, isStandalone: true, selector: "missing-terms, MissingTerms, missingterms", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, providers: [provideTranslocoScope('article')], ngImport: i0, template: "@if ((missingTerms() || []).length > 0) {\n <span class=\"terms-label\">{{ 'article.missingTerms' | transloco }}</span>\n <span class=\"terms\">\n @for (term of missingTerms(); track $index) {\n <span class=\"term ms-1\">{{ term.value }}</span>\n }\n </span>\n <span class=\"mx-1\">|</span>\n <span class=\"terms-label ms-1\">{{ 'article.mustInclude' | transloco }}</span>\n <span class=\"terms\">\n @for (term of missingTerms(); track $index) {\n <a role=\"button\" class=\"ms-1\" routerLink=\"search\" [queryParams]=\"term.queryParams\" (click)=\"$event.stopPropagation()\">{{ term.value }}</a>\n }\n </span>\n}\n", styles: [".term{text-decoration-line:line-through}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
5245
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MissingTermsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5246
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MissingTermsComponent, isStandalone: true, selector: "missing-terms, MissingTerms, missingterms", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, providers: [provideTranslocoScope('article')], ngImport: i0, template: "@if ((missingTerms() || []).length > 0) {\n <span class=\"terms-label\">{{ 'article.missingTerms' | transloco }}</span>\n <span class=\"terms\">\n @for (term of missingTerms(); track $index) {\n <span class=\"term ms-1\">{{ term.value }}</span>\n }\n </span>\n <span class=\"mx-1\">|</span>\n <span class=\"terms-label ms-1\">{{ 'article.mustInclude' | transloco }}</span>\n <span class=\"terms\">\n @for (term of missingTerms(); track $index) {\n <a role=\"button\" class=\"ms-1\" routerLink=\"search\" [queryParams]=\"term.queryParams\" (click)=\"$event.stopPropagation()\">{{ term.value }}</a>\n }\n </span>\n}\n", styles: [".term{text-decoration-line:line-through}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
5187
5247
  }
5188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MissingTermsComponent, decorators: [{
5248
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MissingTermsComponent, decorators: [{
5189
5249
  type: Component,
5190
5250
  args: [{ selector: 'missing-terms, MissingTerms, missingterms', standalone: true, imports: [TranslocoPipe, RouterLink], providers: [provideTranslocoScope('article')], template: "@if ((missingTerms() || []).length > 0) {\n <span class=\"terms-label\">{{ 'article.missingTerms' | transloco }}</span>\n <span class=\"terms\">\n @for (term of missingTerms(); track $index) {\n <span class=\"term ms-1\">{{ term.value }}</span>\n }\n </span>\n <span class=\"mx-1\">|</span>\n <span class=\"terms-label ms-1\">{{ 'article.mustInclude' | transloco }}</span>\n <span class=\"terms\">\n @for (term of missingTerms(); track $index) {\n <a role=\"button\" class=\"ms-1\" routerLink=\"search\" [queryParams]=\"term.queryParams\" (click)=\"$event.stopPropagation()\">{{ term.value }}</a>\n }\n </span>\n}\n", styles: [".term{text-decoration-line:line-through}\n"] }]
5191
5251
  }], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: true }] }] } });
@@ -5289,8 +5349,8 @@ class CollectionsDialog {
5289
5349
  this.newCollectionName.set("");
5290
5350
  this.creating.set(false);
5291
5351
  }
5292
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CollectionsDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
5293
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CollectionsDialog, isStandalone: true, selector: "add-to-collection-dialog", outputs: { closed: "closed" }, providers: [provideTranslocoScope("collections")], viewQueries: [{ propertyName: "createInputElement", first: true, predicate: ["createInput"], descendants: true, isSignal: true }, { propertyName: "dialogElement", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
5352
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CollectionsDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
5353
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: CollectionsDialog, isStandalone: true, selector: "add-to-collection-dialog", outputs: { closed: "closed" }, providers: [provideTranslocoScope("collections")], viewQueries: [{ propertyName: "createInputElement", first: true, predicate: ["createInput"], descendants: true, isSignal: true }, { propertyName: "dialogElement", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
5294
5354
  <dialog #dialog (closed)="closeBtn.click()">
5295
5355
  <DialogContent>
5296
5356
  <DialogHeader>
@@ -5356,7 +5416,7 @@ class CollectionsDialog {
5356
5416
  </dialog>
5357
5417
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: DialogComponent, selector: "dialog, [dialog]", outputs: ["closed"], exportAs: ["dialog"] }, { kind: "component", type: DialogHeaderComponent, selector: "DialogHeader" }, { kind: "directive", type: DialogTitleComponent, selector: "DialogTitle", inputs: ["class"] }, { kind: "directive", type: DialogContentComponent, selector: "DialogContent", inputs: ["class"] }, { kind: "directive", type: DialogFooterComponent, selector: "DialogFooter", inputs: ["class"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
5358
5418
  }
5359
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CollectionsDialog, decorators: [{
5419
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CollectionsDialog, decorators: [{
5360
5420
  type: Component,
5361
5421
  args: [{
5362
5422
  selector: "add-to-collection-dialog",
@@ -5535,10 +5595,10 @@ class ExportService {
5535
5595
  responseType: 'blob'
5536
5596
  });
5537
5597
  }
5538
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ExportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5539
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ExportService, providedIn: 'root' });
5598
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5599
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExportService, providedIn: 'root' });
5540
5600
  }
5541
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ExportService, decorators: [{
5601
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExportService, decorators: [{
5542
5602
  type: Injectable,
5543
5603
  args: [{
5544
5604
  providedIn: 'root'
@@ -5610,8 +5670,8 @@ class ExportDialog {
5610
5670
  this.maxCount.set(1);
5611
5671
  }
5612
5672
  }
5613
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ExportDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
5614
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ExportDialog, isStandalone: true, selector: "export-dialog", inputs: { format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, maxCount: { classPropertyName: "maxCount", publicName: "maxCount", isSignal: true, isRequired: false, transformFunction: null }, columnsToExport: { classPropertyName: "columnsToExport", publicName: "columnsToExport", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onExport: "onExport", format: "formatChange", maxCount: "maxCountChange", columnsToExport: "columnsToExportChange" }, providers: [provideTranslocoScope("export")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
5673
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExportDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
5674
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ExportDialog, isStandalone: true, selector: "export-dialog", inputs: { format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, maxCount: { classPropertyName: "maxCount", publicName: "maxCount", isSignal: true, isRequired: false, transformFunction: null }, columnsToExport: { classPropertyName: "columnsToExport", publicName: "columnsToExport", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onExport: "onExport", format: "formatChange", maxCount: "maxCountChange", columnsToExport: "columnsToExportChange" }, providers: [provideTranslocoScope("export")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
5615
5675
  <dialog #dialog>
5616
5676
  <DialogContent
5617
5677
  class="[&_section>h1]:text-muted-foreground flex flex-col gap-4 [&_section>h1]:text-sm [&_section>h1]:font-semibold [&_section]:flex [&_section]:flex-col [&_section]:gap-2">
@@ -5682,7 +5742,7 @@ class ExportDialog {
5682
5742
  </dialog>
5683
5743
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: DialogComponent, selector: "dialog, [dialog]", outputs: ["closed"], exportAs: ["dialog"] }, { kind: "component", type: DialogHeaderComponent, selector: "DialogHeader" }, { kind: "directive", type: DialogTitleComponent, selector: "DialogTitle", inputs: ["class"] }, { kind: "directive", type: DialogContentComponent, selector: "DialogContent", inputs: ["class"] }, { kind: "directive", type: DialogFooterComponent, selector: "DialogFooter", inputs: ["class"] }, { kind: "component", type: SwitchComponent, selector: "switch, Switch", inputs: ["toggled", "disabled", "class", "variant", "size"], outputs: ["toggledChange"] }, { kind: "directive", type: SelectOptionDirective, selector: "option", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
5684
5744
  }
5685
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ExportDialog, decorators: [{
5745
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExportDialog, decorators: [{
5686
5746
  type: Component,
5687
5747
  args: [{
5688
5748
  selector: "export-dialog",
@@ -5820,8 +5880,8 @@ class MultiSelectionToolbarComponent {
5820
5880
  });
5821
5881
  openExportDialog = () => this.dialog.open(ExportDialog, this.ids());
5822
5882
  attachToAssistant = () => this.selection.update({ assistantIdsToAttach: this.ids() });
5823
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MultiSelectionToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5824
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: MultiSelectionToolbarComponent, isStandalone: true, selector: "MultiSelectionToolbar, multi-selection-toolbar", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { updatedCollections: "updatedCollections" }, host: { properties: { "class.opacity-100": "count() > 0", "class.-translate-y-14": "count() > 0" }, classAttribute: "fixed -bottom-10 left-[50%] translate-x-[-50%] z-50 transition-[translate,opacity,discrete] duration-300 opacity-0" }, providers: [provideTranslocoScope("multi-selection-toolbar", "article", "collections", "export")], ngImport: i0, template: `
5883
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MultiSelectionToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5884
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MultiSelectionToolbarComponent, isStandalone: true, selector: "MultiSelectionToolbar, multi-selection-toolbar", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { updatedCollections: "updatedCollections" }, host: { properties: { "class.opacity-100": "count() > 0", "class.-translate-y-14": "count() > 0" }, classAttribute: "fixed -bottom-10 left-[50%] translate-x-[-50%] z-50 transition-[translate,opacity,discrete] duration-300 opacity-0" }, providers: [provideTranslocoScope("multi-selection-toolbar", "article", "collections", "export")], ngImport: i0, template: `
5825
5885
  <menu id="multi-select-toolbar" [class]="cn(variants(), class())">
5826
5886
  <li class="ps-0!">
5827
5887
  {{ 'multiSelectionToolbar.itemsSelected' | transloco: { count: count() } }}
@@ -5855,7 +5915,7 @@ class MultiSelectionToolbarComponent {
5855
5915
  </menu>
5856
5916
  `, isInline: true, dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
5857
5917
  }
5858
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MultiSelectionToolbarComponent, decorators: [{
5918
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MultiSelectionToolbarComponent, decorators: [{
5859
5919
  type: Component,
5860
5920
  args: [{
5861
5921
  selector: "MultiSelectionToolbar, multi-selection-toolbar",
@@ -5936,10 +5996,10 @@ class InfinityScrollDirective {
5936
5996
  ngOnDestroy() {
5937
5997
  this.observer.disconnect();
5938
5998
  }
5939
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: InfinityScrollDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
5940
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: InfinityScrollDirective, isStandalone: true, selector: "[infinity-scroll]", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onScroll: "onScroll" }, ngImport: i0 });
5999
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InfinityScrollDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
6000
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: InfinityScrollDirective, isStandalone: true, selector: "[infinity-scroll]", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onScroll: "onScroll" }, ngImport: i0 });
5941
6001
  }
5942
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: InfinityScrollDirective, decorators: [{
6002
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InfinityScrollDirective, decorators: [{
5943
6003
  type: Directive,
5944
6004
  args: [{
5945
6005
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -6243,10 +6303,10 @@ class KeyboardNavigatorDirective {
6243
6303
  this.renderer.setAttribute(this.listboxElement(), 'aria-hidden', 'true');
6244
6304
  this.ariaExpanded.set(false);
6245
6305
  }
6246
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KeyboardNavigatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6247
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: KeyboardNavigatorDirective, isStandalone: true, selector: "input[role=\"combobox\"]", inputs: { keyboardNavigator: { classPropertyName: "keyboardNavigator", publicName: "keyboardNavigator", isSignal: true, isRequired: false, transformFunction: null }, listboxId: { classPropertyName: "listboxId", publicName: "aria-controls", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onFocus: "onFocus", onBlur: "onBlur", onSelected: "onSelected" }, host: { listeners: { "focus": "focus()", "blur": "blur()", "keydown.arrowup": "up()", "keydown.arrowdown": "down()", "keydown.arrowleft": "left()", "keydown.arrowright": "right()", "keydown.home": "home()", "keydown.end": "end()", "keydown.pageup": "pageUp()", "keydown.pagedown": "pageDown()", "keydown.enter": "enter()", "keydown.escape": "escape()" }, properties: { "attr.aria-expanded": "ariaExpanded()", "attr.aria-activedescendant": "activeDescendant()" } }, ngImport: i0 });
6306
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KeyboardNavigatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6307
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: KeyboardNavigatorDirective, isStandalone: true, selector: "input[role=\"combobox\"]", inputs: { keyboardNavigator: { classPropertyName: "keyboardNavigator", publicName: "keyboardNavigator", isSignal: true, isRequired: false, transformFunction: null }, listboxId: { classPropertyName: "listboxId", publicName: "aria-controls", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onFocus: "onFocus", onBlur: "onBlur", onSelected: "onSelected" }, host: { listeners: { "focus": "focus()", "blur": "blur()", "keydown.arrowup": "up()", "keydown.arrowdown": "down()", "keydown.arrowleft": "left()", "keydown.arrowright": "right()", "keydown.home": "home()", "keydown.end": "end()", "keydown.pageup": "pageUp()", "keydown.pagedown": "pageDown()", "keydown.enter": "enter()", "keydown.escape": "escape()" }, properties: { "attr.aria-expanded": "ariaExpanded()", "attr.aria-activedescendant": "activeDescendant()" } }, ngImport: i0 });
6248
6308
  }
6249
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KeyboardNavigatorDirective, decorators: [{
6309
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KeyboardNavigatorDirective, decorators: [{
6250
6310
  type: Directive,
6251
6311
  args: [{
6252
6312
  selector: 'input[role="combobox"]',
@@ -6281,10 +6341,10 @@ class OpenArticleOnCtrlEnterDirective {
6281
6341
  return;
6282
6342
  this.previewService.openExternal(this.article());
6283
6343
  }
6284
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: OpenArticleOnCtrlEnterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6285
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: OpenArticleOnCtrlEnterDirective, isStandalone: true, selector: "[appOpenArticleOnCtrlEnter],[openArticleOnCtrlEnter]", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "keydown.control.Enter": "onCtrlEnter()" } }, ngImport: i0 });
6344
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OpenArticleOnCtrlEnterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6345
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: OpenArticleOnCtrlEnterDirective, isStandalone: true, selector: "[appOpenArticleOnCtrlEnter],[openArticleOnCtrlEnter]", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "keydown.control.Enter": "onCtrlEnter()" } }, ngImport: i0 });
6286
6346
  }
6287
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: OpenArticleOnCtrlEnterDirective, decorators: [{
6347
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OpenArticleOnCtrlEnterDirective, decorators: [{
6288
6348
  type: Directive,
6289
6349
  args: [{
6290
6350
  selector: '[appOpenArticleOnCtrlEnter],[openArticleOnCtrlEnter]',
@@ -6300,10 +6360,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
6300
6360
  * overflow manager.
6301
6361
  */
6302
6362
  class OverflowItemDirective {
6303
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: OverflowItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6304
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: OverflowItemDirective, isStandalone: true, selector: "[overflowItem]", ngImport: i0 });
6363
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverflowItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6364
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: OverflowItemDirective, isStandalone: true, selector: "[overflowItem]", ngImport: i0 });
6305
6365
  }
6306
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: OverflowItemDirective, decorators: [{
6366
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverflowItemDirective, decorators: [{
6307
6367
  type: Directive,
6308
6368
  args: [{
6309
6369
  selector: '[overflowItem]',
@@ -6315,10 +6375,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
6315
6375
  * for the overflow manager.
6316
6376
  */
6317
6377
  class OverflowStopDirective {
6318
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: OverflowStopDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6319
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: OverflowStopDirective, isStandalone: true, selector: "[overflowStop]", ngImport: i0 });
6378
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverflowStopDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6379
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: OverflowStopDirective, isStandalone: true, selector: "[overflowStop]", ngImport: i0 });
6320
6380
  }
6321
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: OverflowStopDirective, decorators: [{
6381
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverflowStopDirective, decorators: [{
6322
6382
  type: Directive,
6323
6383
  args: [{
6324
6384
  selector: '[overflowStop]',
@@ -6428,10 +6488,10 @@ class OverflowManagerDirective {
6428
6488
  item.nativeElement.style.visibility = state;
6429
6489
  });
6430
6490
  }
6431
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: OverflowManagerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6432
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.15", type: OverflowManagerDirective, isStandalone: true, selector: "[overflowManager]", inputs: { target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null }, margin: { classPropertyName: "margin", publicName: "margin", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { count: "count" }, queries: [{ propertyName: "items", predicate: OverflowItemDirective, descendants: true, read: ElementRef, isSignal: true }, { propertyName: "stop", first: true, predicate: OverflowStopDirective, descendants: true, read: ElementRef, isSignal: true }], ngImport: i0 });
6491
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverflowManagerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6492
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.16", type: OverflowManagerDirective, isStandalone: true, selector: "[overflowManager]", inputs: { target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null }, margin: { classPropertyName: "margin", publicName: "margin", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { count: "count" }, queries: [{ propertyName: "items", predicate: OverflowItemDirective, descendants: true, read: ElementRef, isSignal: true }, { propertyName: "stop", first: true, predicate: OverflowStopDirective, descendants: true, read: ElementRef, isSignal: true }], ngImport: i0 });
6433
6493
  }
6434
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: OverflowManagerDirective, decorators: [{
6494
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverflowManagerDirective, decorators: [{
6435
6495
  type: Directive,
6436
6496
  args: [{
6437
6497
  selector: '[overflowManager]',
@@ -6570,10 +6630,10 @@ class DrawerStackService {
6570
6630
  this.openAssistant();
6571
6631
  this.askAI$.next(text);
6572
6632
  }
6573
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerStackService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6574
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerStackService, providedIn: 'root' });
6633
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerStackService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6634
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerStackService, providedIn: 'root' });
6575
6635
  }
6576
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerStackService, decorators: [{
6636
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerStackService, decorators: [{
6577
6637
  type: Injectable,
6578
6638
  args: [{
6579
6639
  providedIn: 'root'
@@ -6587,8 +6647,9 @@ class SelectArticleOnClickDirective {
6587
6647
  drawerStack = inject(DrawerStackService);
6588
6648
  router = inject(Router);
6589
6649
  article = input.required(...(ngDevMode ? [{ debugName: "article" }] : []));
6590
- strategy = input('stack', ...(ngDevMode ? [{ debugName: "strategy" }] : []));
6591
- redirectUrl = input('/preview', ...(ngDevMode ? [{ debugName: "redirectUrl" }] : []));
6650
+ strategy = input("stack", ...(ngDevMode ? [{ debugName: "strategy" }] : []));
6651
+ redirectUrl = input("/preview", ...(ngDevMode ? [{ debugName: "redirectUrl" }] : []));
6652
+ selected = output();
6592
6653
  onEnter(e) {
6593
6654
  if (e && isNotInputEvent(e)) {
6594
6655
  this.onClick();
@@ -6598,10 +6659,10 @@ class SelectArticleOnClickDirective {
6598
6659
  if (!this.article())
6599
6660
  return;
6600
6661
  switch (this.strategy()) {
6601
- case 'replace':
6662
+ case "replace":
6602
6663
  this.drawerStack.replace(this.article());
6603
6664
  break;
6604
- case 'redirect':
6665
+ case "redirect":
6605
6666
  if (this.article()?.id) {
6606
6667
  this.router.navigate([this.redirectUrl(), this.article().id]);
6607
6668
  }
@@ -6609,27 +6670,30 @@ class SelectArticleOnClickDirective {
6609
6670
  this.drawerStack.stack(this.article());
6610
6671
  }
6611
6672
  break;
6612
- case 'stack':
6673
+ case "emit":
6674
+ this.selected.emit();
6675
+ break;
6676
+ case "stack":
6613
6677
  default:
6614
6678
  this.drawerStack.stack(this.article());
6615
6679
  break;
6616
6680
  }
6617
6681
  }
6618
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SelectArticleOnClickDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6619
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: SelectArticleOnClickDirective, isStandalone: true, selector: "[selectArticleOnClick]", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, strategy: { classPropertyName: "strategy", publicName: "strategy", isSignal: true, isRequired: false, transformFunction: null }, redirectUrl: { classPropertyName: "redirectUrl", publicName: "redirectUrl", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown.enter": "onEnter($event)", "click": "onClick()" } }, ngImport: i0 });
6682
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectArticleOnClickDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6683
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: SelectArticleOnClickDirective, isStandalone: true, selector: "[selectArticleOnClick]", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, strategy: { classPropertyName: "strategy", publicName: "strategy", isSignal: true, isRequired: false, transformFunction: null }, redirectUrl: { classPropertyName: "redirectUrl", publicName: "redirectUrl", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, host: { listeners: { "keydown.enter": "onEnter($event)", "click": "onClick()" } }, ngImport: i0 });
6620
6684
  }
6621
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SelectArticleOnClickDirective, decorators: [{
6685
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectArticleOnClickDirective, decorators: [{
6622
6686
  type: Directive,
6623
6687
  args: [{
6624
- selector: '[selectArticleOnClick]',
6688
+ selector: "[selectArticleOnClick]",
6625
6689
  standalone: true,
6626
6690
  host: {
6627
- '(keydown.enter)': 'onEnter($event)'
6691
+ "(keydown.enter)": "onEnter($event)"
6628
6692
  }
6629
6693
  }]
6630
- }], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: true }] }], strategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "strategy", required: false }] }], redirectUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "redirectUrl", required: false }] }], onClick: [{
6694
+ }], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: true }] }], strategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "strategy", required: false }] }], redirectUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "redirectUrl", required: false }] }], selected: [{ type: i0.Output, args: ["selected"] }], onClick: [{
6631
6695
  type: HostListener,
6632
- args: ['click']
6696
+ args: ["click"]
6633
6697
  }] } });
6634
6698
 
6635
6699
  /**
@@ -6667,10 +6731,10 @@ class ShowBookmarkDirective {
6667
6731
  this.showBookmark.emit(bookmarkHovered || isBookmarked);
6668
6732
  });
6669
6733
  }
6670
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ShowBookmarkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6671
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: ShowBookmarkDirective, isStandalone: true, selector: "[showBookmark]", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { showBookmark: "showBookmark" }, host: { listeners: { "mouseenter": "mouseEnter()", "mouseleave": "mouseLeave()" } }, ngImport: i0 });
6734
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ShowBookmarkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6735
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: ShowBookmarkDirective, isStandalone: true, selector: "[showBookmark]", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { showBookmark: "showBookmark" }, host: { listeners: { "mouseenter": "mouseEnter()", "mouseleave": "mouseLeave()" } }, ngImport: i0 });
6672
6736
  }
6673
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ShowBookmarkDirective, decorators: [{
6737
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ShowBookmarkDirective, decorators: [{
6674
6738
  type: Directive,
6675
6739
  args: [{
6676
6740
  selector: '[showBookmark]',
@@ -6701,10 +6765,10 @@ class ThemeProviderDirective {
6701
6765
  applyThemeToNativeElement(this.host.nativeElement, vars);
6702
6766
  });
6703
6767
  }
6704
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ThemeProviderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6705
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: ThemeProviderDirective, isStandalone: true, selector: "[themeProvider]", inputs: { themeProvider: { classPropertyName: "themeProvider", publicName: "themeProvider", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
6768
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThemeProviderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6769
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: ThemeProviderDirective, isStandalone: true, selector: "[themeProvider]", inputs: { themeProvider: { classPropertyName: "themeProvider", publicName: "themeProvider", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
6706
6770
  }
6707
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ThemeProviderDirective, decorators: [{
6771
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThemeProviderDirective, decorators: [{
6708
6772
  type: Directive,
6709
6773
  args: [{
6710
6774
  selector: '[themeProvider]',
@@ -6728,10 +6792,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
6728
6792
  */
6729
6793
  class ChildMarkerDirective {
6730
6794
  template = inject((TemplateRef));
6731
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChildMarkerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6732
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: ChildMarkerDirective, isStandalone: true, selector: "[childMarker]", ngImport: i0 });
6795
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChildMarkerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6796
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: ChildMarkerDirective, isStandalone: true, selector: "[childMarker]", ngImport: i0 });
6733
6797
  }
6734
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChildMarkerDirective, decorators: [{
6798
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChildMarkerDirective, decorators: [{
6735
6799
  type: Directive,
6736
6800
  args: [{
6737
6801
  selector: '[childMarker]'
@@ -6811,8 +6875,8 @@ class NavbarTabsComponent {
6811
6875
  // we use the routerlink to navigate, so just close the drawer and remove the id parameter from the query params
6812
6876
  this.drawerStack.closeAll();
6813
6877
  }
6814
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NavbarTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6815
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: NavbarTabsComponent, isStandalone: true, selector: "navbar-tabs", inputs: { showCount: { classPropertyName: "showCount", publicName: "showCount", isSignal: true, isRequired: false, transformFunction: null }, path: { classPropertyName: "path", publicName: "path", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
6878
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NavbarTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6879
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: NavbarTabsComponent, isStandalone: true, selector: "navbar-tabs", inputs: { showCount: { classPropertyName: "showCount", publicName: "showCount", isSignal: true, isRequired: false, transformFunction: null }, path: { classPropertyName: "path", publicName: "path", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
6816
6880
  <!-- do not display the tabs if there are no tabs -->
6817
6881
  @if (tabs().length > 0) {
6818
6882
  <div overflowManager class="relative col-span-2 col-start-2 row-start-2 flex" (count)="visibleTabCount.set($event)">
@@ -6873,7 +6937,7 @@ class NavbarTabsComponent {
6873
6937
  }
6874
6938
  `, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: MenuComponent, selector: "menu, Menu", inputs: ["disabled"] }, { kind: "directive", type: MenuItemComponent, selector: "menu-item, menuitem, MenuItem", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: MenuContentComponent, selector: "MenuContent, menucontent, menu-content", inputs: ["class", "position"] }, { kind: "directive", type: TabsComponent, selector: "tabs, Tabs", inputs: ["class"] }, { kind: "directive", type: TabsListComponent, selector: "tabs-list, TabsList", inputs: ["class", "variant", "size"] }, { kind: "component", type: TabComponent, selector: "tab, Tab", inputs: ["class", "variant", "shadow", "size", "decoration", "value", "active"], outputs: ["clicked"] }, { kind: "directive", type: OverflowManagerDirective, selector: "[overflowManager]", inputs: ["target", "margin", "direction"], outputs: ["count"] }, { kind: "directive", type: OverflowItemDirective, selector: "[overflowItem]" }, { kind: "directive", type: OverflowStopDirective, selector: "[overflowStop]" }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant"] }, { kind: "component", type: EllipsisIcon, selector: "ellipsis-icon, EllipsisIcon, ellipsisicon", inputs: ["class", "orientation"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
6875
6939
  }
6876
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NavbarTabsComponent, decorators: [{
6940
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NavbarTabsComponent, decorators: [{
6877
6941
  type: Component,
6878
6942
  args: [{
6879
6943
  selector: "navbar-tabs",
@@ -6959,8 +7023,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
6959
7023
  }], propDecorators: { showCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCount", required: false }] }], path: [{ type: i0.Input, args: [{ isSignal: true, alias: "path", required: false }] }] } });
6960
7024
 
6961
7025
  class NoResultComponent {
6962
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NoResultComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6963
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: NoResultComponent, isStandalone: true, selector: "NoResult", host: { classAttribute: "p-4 flex flex-col gap-2 bg-neutral-100 dark:bg-menu rounded-md" }, providers: [provideTranslocoScope('no-result')], ngImport: i0, template: `
7026
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NoResultComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7027
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: NoResultComponent, isStandalone: true, selector: "NoResult", host: { classAttribute: "p-4 flex flex-col gap-2 bg-neutral-100 dark:bg-menu rounded-md" }, providers: [provideTranslocoScope('no-result')], ngImport: i0, template: `
6964
7028
  <header class="flex items-center gap-2 text-xl font-semibold">
6965
7029
  <i class="fa-fw far fa-face-sad-sweat text-3xl"></i>
6966
7030
  <p>{{ 'noResult.noResult' | transloco }}</p>
@@ -6973,7 +7037,7 @@ class NoResultComponent {
6973
7037
  <p>{{ 'noResult.noResultAssistance' | transloco }}</p>
6974
7038
  `, isInline: true, dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
6975
7039
  }
6976
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NoResultComponent, decorators: [{
7040
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NoResultComponent, decorators: [{
6977
7041
  type: Component,
6978
7042
  args: [{
6979
7043
  selector: 'NoResult',
@@ -7019,8 +7083,8 @@ class PagerComponent {
7019
7083
  this.page.set(this.page() - 1);
7020
7084
  this.queryService.gotoPage(this.page());
7021
7085
  }
7022
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7023
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PagerComponent, isStandalone: true, selector: "pager", inputs: { configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
7086
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7087
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: PagerComponent, isStandalone: true, selector: "pager", inputs: { configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
7024
7088
  <div class="flex gap-2">
7025
7089
  @if ((hasPages() && page() > 1) || (!hasPages() && page() > 1)) {
7026
7090
  <button variant="ghost" [attr.title]="'previousPage' | transloco" (click)="previousPage()">
@@ -7044,7 +7108,7 @@ class PagerComponent {
7044
7108
  </div>
7045
7109
  `, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
7046
7110
  }
7047
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PagerComponent, decorators: [{
7111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PagerComponent, decorators: [{
7048
7112
  type: Component,
7049
7113
  args: [{
7050
7114
  selector: 'pager',
@@ -7088,8 +7152,8 @@ class PreviewNavigator {
7088
7152
  n = Math.max(1, Math.min(n, t));
7089
7153
  this.preview.gotoPage(n);
7090
7154
  }
7091
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PreviewNavigator, deps: [], target: i0.ɵɵFactoryTarget.Component });
7092
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: PreviewNavigator, isStandalone: true, selector: "preview-navigator", host: { properties: { "class.invisible": "!total() || total() <= 1" } }, ngImport: i0, template: `
7155
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PreviewNavigator, deps: [], target: i0.ɵɵFactoryTarget.Component });
7156
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: PreviewNavigator, isStandalone: true, selector: "preview-navigator", host: { properties: { "class.invisible": "!total() || total() <= 1" } }, ngImport: i0, template: `
7093
7157
  <button
7094
7158
  variant="ghost"
7095
7159
  size="icon"
@@ -7146,7 +7210,7 @@ class PreviewNavigator {
7146
7210
  </button>
7147
7211
  `, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: ChevronLeftIconComponent, selector: "chevron-left, ChevronLeft, chevronleft", inputs: ["class"] }, { kind: "component", type: ChevronsLeftIconComponent, selector: "chevrons-left, ChevronsLeft, chevronsleft", inputs: ["class"] }, { kind: "component", type: ChevronsRightIconComponent, selector: "chevrons-right, ChevronsRight, chevronsright", inputs: ["class"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }] });
7148
7212
  }
7149
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PreviewNavigator, decorators: [{
7213
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PreviewNavigator, decorators: [{
7150
7214
  type: Component,
7151
7215
  args: [{
7152
7216
  selector: "preview-navigator",
@@ -7263,10 +7327,10 @@ class SortSelectorComponent {
7263
7327
  this.onSort.emit(sort);
7264
7328
  }
7265
7329
  }
7266
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SortSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7267
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: SortSelectorComponent, isStandalone: true, selector: "sort-selector, sortselector, SortSelector", inputs: { result: { classPropertyName: "result", publicName: "result", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSort: "onSort" }, providers: [provideTranslocoScope('sort-selector')], viewQueries: [{ propertyName: "dropdown", first: true, predicate: DropdownComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<menu>\n <button tabindex=\"0\" variant=\"ghost\" [attr.title]=\"'sortSelector.selectSort' | transloco\">\n <i class=\"fa-fw fa-regular fa-arrow-{{ sort()?.$isDesc ? 'down' : 'up' }}-big-small me-1\"></i>\n <span>{{ sort()?.display | transloco }}</span>\n </button>\n\n <MenuContent [position]=\"position()\" class=\"min-w-max\">\n @if (sortOptions().length > 0) {\n @for (option of sortOptions(); track $index) {\n <menuitem (click)=\"onSortOptionClicked(option)\" class=\"justify-between\">\n <span>{{ option.display | transloco }}</span>\n <i class=\"fa-fw fa-regular fa-arrow-{{ option.$isDesc ? 'down' : 'up' }}-big-small\"></i>\n </menuitem>\n }\n }\n </MenuContent>\n</menu>\n", dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: MenuComponent, selector: "menu, Menu", inputs: ["disabled"] }, { kind: "directive", type: MenuContentComponent, selector: "MenuContent, menucontent, menu-content", inputs: ["class", "position"] }, { kind: "directive", type: MenuItemComponent, selector: "menu-item, menuitem, MenuItem", inputs: ["class", "variant", "decoration"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
7330
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SortSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7331
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: SortSelectorComponent, isStandalone: true, selector: "sort-selector, sortselector, SortSelector", inputs: { result: { classPropertyName: "result", publicName: "result", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSort: "onSort" }, providers: [provideTranslocoScope('sort-selector')], viewQueries: [{ propertyName: "dropdown", first: true, predicate: DropdownComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<menu>\n <button tabindex=\"0\" variant=\"ghost\" [attr.title]=\"'sortSelector.selectSort' | transloco\">\n <i class=\"fa-fw fa-regular fa-arrow-{{ sort()?.$isDesc ? 'down' : 'up' }}-big-small me-1\"></i>\n <span>{{ sort()?.display | transloco }}</span>\n </button>\n\n <MenuContent [position]=\"position()\" class=\"min-w-max\">\n @if (sortOptions().length > 0) {\n @for (option of sortOptions(); track $index) {\n <menuitem (click)=\"onSortOptionClicked(option)\" class=\"justify-between\">\n <span>{{ option.display | transloco }}</span>\n <i class=\"fa-fw fa-regular fa-arrow-{{ option.$isDesc ? 'down' : 'up' }}-big-small\"></i>\n </menuitem>\n }\n }\n </MenuContent>\n</menu>\n", dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: MenuComponent, selector: "menu, Menu", inputs: ["disabled"] }, { kind: "directive", type: MenuContentComponent, selector: "MenuContent, menucontent, menu-content", inputs: ["class", "position"] }, { kind: "directive", type: MenuItemComponent, selector: "menu-item, menuitem, MenuItem", inputs: ["class", "variant", "decoration"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
7268
7332
  }
7269
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SortSelectorComponent, decorators: [{
7333
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SortSelectorComponent, decorators: [{
7270
7334
  type: Component,
7271
7335
  args: [{ selector: 'sort-selector, sortselector, SortSelector', standalone: true, imports: [TranslocoPipe, ButtonComponent, MenuComponent, MenuContentComponent, MenuItemComponent], providers: [provideTranslocoScope('sort-selector')], template: "<menu>\n <button tabindex=\"0\" variant=\"ghost\" [attr.title]=\"'sortSelector.selectSort' | transloco\">\n <i class=\"fa-fw fa-regular fa-arrow-{{ sort()?.$isDesc ? 'down' : 'up' }}-big-small me-1\"></i>\n <span>{{ sort()?.display | transloco }}</span>\n </button>\n\n <MenuContent [position]=\"position()\" class=\"min-w-max\">\n @if (sortOptions().length > 0) {\n @for (option of sortOptions(); track $index) {\n <menuitem (click)=\"onSortOptionClicked(option)\" class=\"justify-between\">\n <span>{{ option.display | transloco }}</span>\n <i class=\"fa-fw fa-regular fa-arrow-{{ option.$isDesc ? 'down' : 'up' }}-big-small\"></i>\n </menuitem>\n }\n }\n </MenuContent>\n</menu>\n" }]
7272
7336
  }], propDecorators: { dropdown: [{ type: i0.ViewChild, args: [i0.forwardRef(() => DropdownComponent), { isSignal: true }] }], result: [{ type: i0.Input, args: [{ isSignal: true, alias: "result", required: true }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], onSort: [{ type: i0.Output, args: ["onSort"] }] } });
@@ -7306,8 +7370,8 @@ class SponsoredResultsComponent {
7306
7370
  }
7307
7371
  });
7308
7372
  }
7309
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SponsoredResultsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7310
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: SponsoredResultsComponent, isStandalone: true, selector: "sponsored-results, SponsoredResults, sponsoredresults", inputs: { slice: { classPropertyName: "slice", publicName: "slice", isSignal: true, isRequired: false, transformFunction: null }, displayPromoted: { classPropertyName: "displayPromoted", publicName: "displayPromoted", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "list" } }, queries: [{ propertyName: "childElement", first: true, predicate: ChildMarkerDirective, descendants: true, isSignal: true }], ngImport: i0, template: ` @if (sponsoredResults()?.length) {
7373
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SponsoredResultsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7374
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: SponsoredResultsComponent, isStandalone: true, selector: "sponsored-results, SponsoredResults, sponsoredresults", inputs: { slice: { classPropertyName: "slice", publicName: "slice", isSignal: true, isRequired: false, transformFunction: null }, displayPromoted: { classPropertyName: "displayPromoted", publicName: "displayPromoted", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "list" } }, queries: [{ propertyName: "childElement", first: true, predicate: ChildMarkerDirective, descendants: true, isSignal: true }], ngImport: i0, template: ` @if (sponsoredResults()?.length) {
7311
7375
  @for (link of sponsoredResults(); track $index) {
7312
7376
  <li role="listitem" class="text-primary flex items-center gap-2 rounded px-3 py-2 font-bold">
7313
7377
  <a href="{{ link.url }}" target="_blank" rel="noopener" title="{{ link.tooltip }}" class="result-link peer flex items-center gap-2 hover:underline">
@@ -7325,7 +7389,7 @@ class SponsoredResultsComponent {
7325
7389
  }
7326
7390
  }`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
7327
7391
  }
7328
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SponsoredResultsComponent, decorators: [{
7392
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SponsoredResultsComponent, decorators: [{
7329
7393
  type: Component,
7330
7394
  args: [{
7331
7395
  selector: 'sponsored-results, SponsoredResults, sponsoredresults',
@@ -7373,8 +7437,8 @@ class ThemeSelectorComponent {
7373
7437
  theme = theme.name;
7374
7438
  this.themeStore.setCurrentTheme(this.scope(), theme);
7375
7439
  }
7376
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ThemeSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7377
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ThemeSelectorComponent, isStandalone: true, selector: "theme-selector", inputs: { scope: { classPropertyName: "scope", publicName: "scope", isSignal: true, isRequired: true, transformFunction: null }, showPrivate: { classPropertyName: "showPrivate", publicName: "showPrivate", isSignal: true, isRequired: false, transformFunction: null }, selectedTheme: { classPropertyName: "selectedTheme", publicName: "selectedTheme", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedTheme: "selectedThemeChange" }, ngImport: i0, template: `
7440
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThemeSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7441
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ThemeSelectorComponent, isStandalone: true, selector: "theme-selector", inputs: { scope: { classPropertyName: "scope", publicName: "scope", isSignal: true, isRequired: true, transformFunction: null }, showPrivate: { classPropertyName: "showPrivate", publicName: "showPrivate", isSignal: true, isRequired: false, transformFunction: null }, selectedTheme: { classPropertyName: "selectedTheme", publicName: "selectedTheme", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedTheme: "selectedThemeChange" }, ngImport: i0, template: `
7378
7442
  <Menu>
7379
7443
  <ng-content></ng-content>
7380
7444
 
@@ -7393,7 +7457,7 @@ class ThemeSelectorComponent {
7393
7457
  </Menu>
7394
7458
  `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: MenuComponent, selector: "menu, Menu", inputs: ["disabled"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: MenuContentComponent, selector: "MenuContent, menucontent, menu-content", inputs: ["class", "position"] }] });
7395
7459
  }
7396
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ThemeSelectorComponent, decorators: [{
7460
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThemeSelectorComponent, decorators: [{
7397
7461
  type: Component,
7398
7462
  args: [{ selector: 'theme-selector', standalone: true, imports: [MenuComponent, NgStyle, MenuContentComponent], template: `
7399
7463
  <Menu>
@@ -7433,8 +7497,8 @@ class ThemeToggleComponent {
7433
7497
  return;
7434
7498
  this.themeStore.setDarkMode(this.scope(), status);
7435
7499
  }
7436
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ThemeToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7437
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ThemeToggleComponent, isStandalone: true, selector: "theme-toggle", inputs: { scope: { classPropertyName: "scope", publicName: "scope", isSignal: true, isRequired: true, transformFunction: null }, darkMode: { classPropertyName: "darkMode", publicName: "darkMode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { darkMode: "darkModeChange" }, ngImport: i0, template: `
7500
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThemeToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7501
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ThemeToggleComponent, isStandalone: true, selector: "theme-toggle", inputs: { scope: { classPropertyName: "scope", publicName: "scope", isSignal: true, isRequired: true, transformFunction: null }, darkMode: { classPropertyName: "darkMode", publicName: "darkMode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { darkMode: "darkModeChange" }, ngImport: i0, template: `
7438
7502
  <label class="flex cursor-pointer select-none items-center gap-2">
7439
7503
  @if (darkMode()) {
7440
7504
  <i class="fa-fw far fa-toggle-large-on text-primary"></i>
@@ -7448,7 +7512,7 @@ class ThemeToggleComponent {
7448
7512
  </label>
7449
7513
  `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
7450
7514
  }
7451
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ThemeToggleComponent, decorators: [{
7515
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThemeToggleComponent, decorators: [{
7452
7516
  type: Component,
7453
7517
  args: [{ selector: 'theme-toggle', standalone: true, imports: [FormsModule], template: `
7454
7518
  <label class="flex cursor-pointer select-none items-center gap-2">
@@ -7618,8 +7682,8 @@ class AlertDialog {
7618
7682
  this.queryParamsStore.patch({ text: q.text, tab: q.tab, basket: q.basket, sort: q.sort, filters, name: q.name });
7619
7683
  this.dialog()?.close();
7620
7684
  }
7621
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AlertDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
7622
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AlertDialog, isStandalone: true, selector: "alert-dialog, alertdialog, AlertDialog", outputs: { closed: "closed" }, providers: [provideTranslocoScope("alerts")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
7685
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AlertDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
7686
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AlertDialog, isStandalone: true, selector: "alert-dialog, alertdialog, AlertDialog", outputs: { closed: "closed" }, providers: [provideTranslocoScope("alerts")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
7623
7687
  <dialog #dialog>
7624
7688
  <DialogContent class="sm:max-w-[425px]">
7625
7689
  <DialogHeader>
@@ -7733,7 +7797,7 @@ class AlertDialog {
7733
7797
  </dialog>
7734
7798
  `, isInline: true, styles: [".weekdays-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr))}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: DialogComponent, selector: "dialog, [dialog]", outputs: ["closed"], exportAs: ["dialog"] }, { kind: "component", type: DialogHeaderComponent, selector: "DialogHeader" }, { kind: "directive", type: DialogTitleComponent, selector: "DialogTitle", inputs: ["class"] }, { kind: "directive", type: DialogContentComponent, selector: "DialogContent", inputs: ["class"] }, { kind: "directive", type: DialogFooterComponent, selector: "DialogFooter", inputs: ["class"] }, { kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "component", type: LoadingCircleIconComponent, selector: "loading-circle, LoadingCircle, loadingcircle", inputs: ["class"] }, { kind: "component", type: CircleCheckIconComponent, selector: "circle-check, CircleCheck, circlecheck", inputs: ["class"] }, { kind: "directive", type: SelectOptionDirective, selector: "option", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
7735
7799
  }
7736
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AlertDialog, decorators: [{
7800
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AlertDialog, decorators: [{
7737
7801
  type: Component,
7738
7802
  args: [{ selector: "alert-dialog, alertdialog, AlertDialog", standalone: true, imports: [
7739
7803
  FormsModule,
@@ -7906,10 +7970,10 @@ class AlertsComponent {
7906
7970
  }
7907
7971
  this.tmpAlerts.splice(drop.currentIndex, 0, this.tmpAlerts.splice(drop.previousIndex, 1)[0]);
7908
7972
  }
7909
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AlertsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7910
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AlertsComponent, isStandalone: true, selector: "Alerts", providers: [provideTranslocoScope('alerts')], viewQueries: [{ propertyName: "alertFormDialog", first: true, predicate: AlertDialog, descendants: true, isSignal: true }], ngImport: i0, template: "<ul\n role=\"list\"\n class=\"flex min-w-80 flex-col p-2\"\n cdkDropList\n [cdkDropListData]=\"tmpAlerts\"\n [cdkDropListDisabled]=\"!reordering()\"\n (cdkDropListDropped)=\"dropped($event)\">\n @if (floating) {\n <label class=\"text-xl font-bold\">{{ 'alerts.label' | transloco }}</label>\n <HorizontalDivider />\n }\n @for (alert of tmpAlerts; track $index) {\n <li role=\"listitem\" class=\"group h-10\" tabindex=\"0\" cdkDrag (click)=\"onClick($index)\" (keydown.enter)=\"onClick($index)\">\n <i class=\"fa-fw fas fa-bell shrink-0\" aria-hidden=\"true\"></i>\n <p class=\"line-clamp-1\">{{ alert.name }}</p>\n @if (!reordering()) {\n <button\n class=\"text-destructive hover:text-destructive invisible ms-auto transition-transform hover:scale-125 group-hover:visible\"\n title=\"{{ 'alerts.deleteAlert' | transloco }}\"\n [attr.aria-label]=\"'alerts.deleteAlert' | transloco\"\n (click)=\"deleteAlert($event, $index)\">\n <i class=\"fa-fw fa-regular fa-trash-can\" aria-hidden=\"true\"></i>\n </button>\n } @else {\n <i class=\"fa-fw fa-regular fa-bars\"></i>\n }\n </li>\n } @empty {\n <li role=\"listitem\" class=\"py-4 text-center text-neutral-500\">{{ 'alerts.noAlerts' | transloco }}</li>\n }\n</ul>\n<div class=\"flex flex-col gap-2 p-2\">\n <button decoration=\"outline\" class=\"w-full\" tabindex=\"0\" [attr.title]=\"'alerts.manageAlerts' | transloco\" [disabled]=\"!alerts().length\" (click)=\"reorder()\">\n {{ (reordering() ? 'save' : 'alerts.manageAlerts') | transloco }}\n </button>\n <button class=\"w-full\" [attr.title]=\"'alerts.createAlert' | transloco\" (click)=\"createAlert()\">\n {{ 'alerts.createAlert' | transloco }}\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: HorizontalDividerComponent, selector: "horizontal-divider, HorizontalDivider, horizontaldivider" }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1$1.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i1$1.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
7973
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AlertsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7974
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AlertsComponent, isStandalone: true, selector: "Alerts", providers: [provideTranslocoScope('alerts')], viewQueries: [{ propertyName: "alertFormDialog", first: true, predicate: AlertDialog, descendants: true, isSignal: true }], ngImport: i0, template: "<ul\n role=\"list\"\n class=\"flex min-w-80 flex-col p-2\"\n cdkDropList\n [cdkDropListData]=\"tmpAlerts\"\n [cdkDropListDisabled]=\"!reordering()\"\n (cdkDropListDropped)=\"dropped($event)\">\n @if (floating) {\n <label class=\"text-xl font-bold\">{{ 'alerts.label' | transloco }}</label>\n <HorizontalDivider />\n }\n @for (alert of tmpAlerts; track $index) {\n <li role=\"listitem\" class=\"group h-10\" tabindex=\"0\" cdkDrag (click)=\"onClick($index)\" (keydown.enter)=\"onClick($index)\">\n <i class=\"fa-fw fas fa-bell shrink-0\" aria-hidden=\"true\"></i>\n <p class=\"line-clamp-1\">{{ alert.name }}</p>\n @if (!reordering()) {\n <button\n class=\"text-destructive hover:text-destructive invisible ms-auto transition-transform hover:scale-125 group-hover:visible\"\n title=\"{{ 'alerts.deleteAlert' | transloco }}\"\n [attr.aria-label]=\"'alerts.deleteAlert' | transloco\"\n (click)=\"deleteAlert($event, $index)\">\n <i class=\"fa-fw fa-regular fa-trash-can\" aria-hidden=\"true\"></i>\n </button>\n } @else {\n <i class=\"fa-fw fa-regular fa-bars\"></i>\n }\n </li>\n } @empty {\n <li role=\"listitem\" class=\"py-4 text-center text-neutral-500\">{{ 'alerts.noAlerts' | transloco }}</li>\n }\n</ul>\n<div class=\"flex flex-col gap-2 p-2\">\n <button decoration=\"outline\" class=\"w-full\" tabindex=\"0\" [attr.title]=\"'alerts.manageAlerts' | transloco\" [disabled]=\"!alerts().length\" (click)=\"reorder()\">\n {{ (reordering() ? 'save' : 'alerts.manageAlerts') | transloco }}\n </button>\n <button class=\"w-full\" [attr.title]=\"'alerts.createAlert' | transloco\" (click)=\"createAlert()\">\n {{ 'alerts.createAlert' | transloco }}\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: HorizontalDividerComponent, selector: "horizontal-divider, HorizontalDivider, horizontaldivider" }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1$1.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i1$1.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
7911
7975
  }
7912
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AlertsComponent, decorators: [{
7976
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AlertsComponent, decorators: [{
7913
7977
  type: Component,
7914
7978
  args: [{ selector: 'Alerts', standalone: true, imports: [TranslocoPipe, ButtonComponent, HorizontalDividerComponent, ListItemComponent, DragDropModule], providers: [provideTranslocoScope('alerts')], template: "<ul\n role=\"list\"\n class=\"flex min-w-80 flex-col p-2\"\n cdkDropList\n [cdkDropListData]=\"tmpAlerts\"\n [cdkDropListDisabled]=\"!reordering()\"\n (cdkDropListDropped)=\"dropped($event)\">\n @if (floating) {\n <label class=\"text-xl font-bold\">{{ 'alerts.label' | transloco }}</label>\n <HorizontalDivider />\n }\n @for (alert of tmpAlerts; track $index) {\n <li role=\"listitem\" class=\"group h-10\" tabindex=\"0\" cdkDrag (click)=\"onClick($index)\" (keydown.enter)=\"onClick($index)\">\n <i class=\"fa-fw fas fa-bell shrink-0\" aria-hidden=\"true\"></i>\n <p class=\"line-clamp-1\">{{ alert.name }}</p>\n @if (!reordering()) {\n <button\n class=\"text-destructive hover:text-destructive invisible ms-auto transition-transform hover:scale-125 group-hover:visible\"\n title=\"{{ 'alerts.deleteAlert' | transloco }}\"\n [attr.aria-label]=\"'alerts.deleteAlert' | transloco\"\n (click)=\"deleteAlert($event, $index)\">\n <i class=\"fa-fw fa-regular fa-trash-can\" aria-hidden=\"true\"></i>\n </button>\n } @else {\n <i class=\"fa-fw fa-regular fa-bars\"></i>\n }\n </li>\n } @empty {\n <li role=\"listitem\" class=\"py-4 text-center text-neutral-500\">{{ 'alerts.noAlerts' | transloco }}</li>\n }\n</ul>\n<div class=\"flex flex-col gap-2 p-2\">\n <button decoration=\"outline\" class=\"w-full\" tabindex=\"0\" [attr.title]=\"'alerts.manageAlerts' | transloco\" [disabled]=\"!alerts().length\" (click)=\"reorder()\">\n {{ (reordering() ? 'save' : 'alerts.manageAlerts') | transloco }}\n </button>\n <button class=\"w-full\" [attr.title]=\"'alerts.createAlert' | transloco\" (click)=\"createAlert()\">\n {{ 'alerts.createAlert' | transloco }}\n </button>\n</div>\n" }]
7915
7979
  }], ctorParameters: () => [], propDecorators: { alertFormDialog: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AlertDialog), { isSignal: true }] }] } });
@@ -7918,6 +7982,8 @@ class ChangePasswordComponent {
7918
7982
  success = output();
7919
7983
  cancel = output();
7920
7984
  username = input(null, ...(ngDevMode ? [{ debugName: "username" }] : []));
7985
+ alert = input(undefined, ...(ngDevMode ? [{ debugName: "alert" }] : []));
7986
+ redirectAfterSuccess = input(true, ...(ngDevMode ? [{ debugName: "redirectAfterSuccess" }] : []));
7921
7987
  transloco = inject(TranslocoService);
7922
7988
  router = inject(Router);
7923
7989
  principalStore = inject(PrincipalStore);
@@ -7928,10 +7994,14 @@ class ChangePasswordComponent {
7928
7994
  confirmPassword = model("", ...(ngDevMode ? [{ debugName: "confirmPassword" }] : []));
7929
7995
  pending = signal(false, ...(ngDevMode ? [{ debugName: "pending" }] : []));
7930
7996
  errorMsg = signal(null, ...(ngDevMode ? [{ debugName: "errorMsg" }] : []));
7997
+ currentPasswordType = "password";
7998
+ newPasswordType = "password";
7999
+ confirmPasswordType = "password";
7931
8000
  valid = computed(() => this.currentPassword().length > 0 &&
7932
8001
  this.newPassword().length > 0 &&
7933
8002
  this.confirmPassword().length > 0 &&
7934
8003
  this.newPassword() === this.confirmPassword(), ...(ngDevMode ? [{ debugName: "valid" }] : []));
8004
+ confirmInvalid = computed(() => !!this.newPassword() && !!this.confirmPassword() && this.newPassword() !== this.confirmPassword(), ...(ngDevMode ? [{ debugName: "confirmInvalid" }] : []));
7935
8005
  effectiveUsername = computed(() => {
7936
8006
  const fromInput = this.username();
7937
8007
  if (fromInput?.trim())
@@ -7987,10 +8057,15 @@ class ChangePasswordComponent {
7987
8057
  this.router.navigate(["/login"], { queryParams: { username } });
7988
8058
  return;
7989
8059
  }
7990
- const { createRoutes = true } = globalConfig;
7991
- await this.applicationService.initialize(createRoutes);
7992
- this.success.emit();
7993
- this.router.navigateByUrl("/");
8060
+ if (this.redirectAfterSuccess()) {
8061
+ const { createRoutes = true } = globalConfig;
8062
+ await this.applicationService.initialize(createRoutes);
8063
+ this.success.emit();
8064
+ this.router.navigateByUrl("/");
8065
+ }
8066
+ else {
8067
+ this.success.emit();
8068
+ }
7994
8069
  }
7995
8070
  catch (e) {
7996
8071
  const maybeError = e;
@@ -8011,8 +8086,8 @@ class ChangePasswordComponent {
8011
8086
  this.cancel.emit();
8012
8087
  this.location.back();
8013
8088
  }
8014
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChangePasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8015
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.15", type: ChangePasswordComponent, isStandalone: true, selector: "change-password, ChangePassword, changepassword", inputs: { username: { classPropertyName: "username", publicName: "username", isSignal: true, isRequired: false, transformFunction: null }, currentPassword: { classPropertyName: "currentPassword", publicName: "currentPassword", isSignal: true, isRequired: false, transformFunction: null }, newPassword: { classPropertyName: "newPassword", publicName: "newPassword", isSignal: true, isRequired: false, transformFunction: null }, confirmPassword: { classPropertyName: "confirmPassword", publicName: "confirmPassword", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { success: "success", cancel: "cancel", currentPassword: "currentPasswordChange", newPassword: "newPasswordChange", confirmPassword: "confirmPasswordChange" }, providers: [provideTranslocoScope("login")], ngImport: i0, template: `
8089
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChangePasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8090
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ChangePasswordComponent, isStandalone: true, selector: "change-password, ChangePassword, changepassword", inputs: { username: { classPropertyName: "username", publicName: "username", isSignal: true, isRequired: false, transformFunction: null }, alert: { classPropertyName: "alert", publicName: "alert", isSignal: true, isRequired: false, transformFunction: null }, redirectAfterSuccess: { classPropertyName: "redirectAfterSuccess", publicName: "redirectAfterSuccess", isSignal: true, isRequired: false, transformFunction: null }, currentPassword: { classPropertyName: "currentPassword", publicName: "currentPassword", isSignal: true, isRequired: false, transformFunction: null }, newPassword: { classPropertyName: "newPassword", publicName: "newPassword", isSignal: true, isRequired: false, transformFunction: null }, confirmPassword: { classPropertyName: "confirmPassword", publicName: "confirmPassword", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { success: "success", cancel: "cancel", currentPassword: "currentPasswordChange", newPassword: "newPasswordChange", confirmPassword: "confirmPasswordChange" }, providers: [provideTranslocoScope("login")], ngImport: i0, template: `
8016
8091
  <Card hover="no" cdkTrapFocus cdkTrapFocusAutoCapture="true" class="bg-card rounded-xl shadow-sm">
8017
8092
  <CardHeader class="flex flex-col items-center gap-3">
8018
8093
  <img class="h-12 content-(--logo-large)" alt="logo" />
@@ -8020,18 +8095,35 @@ class ChangePasswordComponent {
8020
8095
 
8021
8096
  <CardContent class="grid gap-4">
8022
8097
 
8098
+ @if (alert()) {
8099
+ <div class="p-4 w-full bg-destructive/20 border-destructive">
8100
+ {{ alert() | transloco }}
8101
+ </div>
8102
+ }
8103
+
8023
8104
  <!-- Current password -->
8024
8105
  <div class="grid gap-2">
8025
8106
  <label class="text-sm font-medium" for="auth-current-password">
8026
8107
  {{ 'login.currentPassword' | transloco }}
8027
8108
  </label>
8028
- <input
8029
- id="auth-current-password"
8030
- type="password"
8031
- required
8032
- [(ngModel)]="currentPassword"
8033
- (keydown.enter)="changePassword()"
8034
- />
8109
+ <InputGroup class="group/item">
8110
+ <input
8111
+ input-group
8112
+ id="auth-current-password"
8113
+ [type]="currentPasswordType"
8114
+ required
8115
+ [(ngModel)]="currentPassword"
8116
+ (keydown.enter)="changePassword()"
8117
+ />
8118
+ <InputGroupAddon align="inline-end"
8119
+ (click)="currentPasswordType = (currentPasswordType === 'password' ? 'text' : 'password')">
8120
+ @if(currentPasswordType === 'text') {
8121
+ <i class="fal fa-eye-slash }} cursor-pointer"></i>
8122
+ } @else {
8123
+ <i class="fal fa-eye }} cursor-pointer"></i>
8124
+ }
8125
+ </InputGroupAddon>
8126
+ </InputGroup>
8035
8127
  </div>
8036
8128
 
8037
8129
  <!-- New password -->
@@ -8039,13 +8131,24 @@ class ChangePasswordComponent {
8039
8131
  <label class="text-sm font-medium" for="auth-new-password">
8040
8132
  {{ 'login.newPassword' | transloco }}
8041
8133
  </label>
8042
- <input
8043
- id="auth-new-password"
8044
- type="password"
8045
- required
8046
- [(ngModel)]="newPassword"
8047
- (keydown.enter)="changePassword()"
8048
- />
8134
+ <InputGroup class="group/item">
8135
+ <input
8136
+ input-group
8137
+ id="auth-new-password"
8138
+ [type]="newPasswordType"
8139
+ required
8140
+ [(ngModel)]="newPassword"
8141
+ (keydown.enter)="changePassword()"
8142
+ />
8143
+ <InputGroupAddon align="inline-end"
8144
+ (click)="newPasswordType = (newPasswordType === 'password' ? 'text' : 'password')">
8145
+ @if(newPasswordType === 'text') {
8146
+ <i class="fal fa-eye-slash }} cursor-pointer"></i>
8147
+ } @else {
8148
+ <i class="fal fa-eye }} cursor-pointer"></i>
8149
+ }
8150
+ </InputGroupAddon>
8151
+ </InputGroup>
8049
8152
  </div>
8050
8153
 
8051
8154
  <!-- Confirm -->
@@ -8053,13 +8156,30 @@ class ChangePasswordComponent {
8053
8156
  <label class="text-sm font-medium" for="auth-confirm-password">
8054
8157
  {{ 'login.confirmPassword' | transloco }}
8055
8158
  </label>
8056
- <input
8057
- id="auth-confirm-password"
8058
- type="password"
8059
- required
8060
- [(ngModel)]="confirmPassword"
8061
- (keydown.enter)="changePassword()"
8062
- />
8159
+ <InputGroup class="group/item">
8160
+ <input
8161
+ input-group
8162
+ id="auth-confirm-password"
8163
+ [ariaInvalid]="confirmInvalid()"
8164
+ [type]="confirmPasswordType"
8165
+ required
8166
+ [(ngModel)]="confirmPassword"
8167
+ (keydown.enter)="changePassword()"
8168
+ />
8169
+ <InputGroupAddon align="inline-end"
8170
+ (click)="confirmPasswordType = (confirmPasswordType === 'password' ? 'text' : 'password')">
8171
+ @if(confirmPasswordType === 'text') {
8172
+ <i class="fal fa-eye-slash }} cursor-pointer"></i>
8173
+ } @else {
8174
+ <i class="fal fa-eye }} cursor-pointer"></i>
8175
+ }
8176
+ </InputGroupAddon>
8177
+ </InputGroup>
8178
+ @if (confirmInvalid()) {
8179
+ <p class="text-sm font-medium text-destructive" for="auth-confirm-password">
8180
+ {{ 'login.differentPasswords' | transloco }}
8181
+ </p>
8182
+ }
8063
8183
  </div>
8064
8184
  </CardContent>
8065
8185
 
@@ -8075,9 +8195,9 @@ class ChangePasswordComponent {
8075
8195
  </button>
8076
8196
  </CardFooter>
8077
8197
  </Card>
8078
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: CardComponent, selector: ".card, card, Card", inputs: ["class", "variant", "hover"] }, { kind: "directive", type: CardHeaderComponent, selector: ".card-header, card-header, CardHeader, cardheader", inputs: ["class"] }, { kind: "directive", type: CardContentComponent, selector: ".card-content, card-content, CardContent, cardcontent", inputs: ["class"] }, { kind: "directive", type: CardFooterComponent, selector: ".card-footer, card-footer, CardFooter, cardfooter", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
8198
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: CardComponent, selector: ".card, card, Card", inputs: ["class", "variant", "hover"] }, { kind: "directive", type: CardHeaderComponent, selector: ".card-header, card-header, CardHeader, cardheader", inputs: ["class"] }, { kind: "directive", type: CardContentComponent, selector: ".card-content, card-content, CardContent, cardcontent", inputs: ["class"] }, { kind: "directive", type: CardFooterComponent, selector: ".card-footer, card-footer, CardFooter, cardfooter", inputs: ["class"] }, { kind: "directive", type: InputGroupInput, selector: "input[input-group]", inputs: ["class", "type", "placeholder", "disabled"] }, { kind: "directive", type: InputGroupComponent, selector: "input-group, inputgroup, InputGroup", inputs: ["class"] }, { kind: "directive", type: InputGroupAddonComponent, selector: "input-group-addon, inputgroupaddon, InputGroupAddon", inputs: ["class", "align"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
8079
8199
  }
8080
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChangePasswordComponent, decorators: [{
8200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChangePasswordComponent, decorators: [{
8081
8201
  type: Component,
8082
8202
  args: [{
8083
8203
  selector: "change-password, ChangePassword, changepassword",
@@ -8086,12 +8206,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
8086
8206
  FormsModule,
8087
8207
  A11yModule,
8088
8208
  TranslocoPipe,
8089
- InputComponent,
8090
8209
  ButtonComponent,
8091
8210
  CardComponent,
8092
8211
  CardHeaderComponent,
8093
8212
  CardContentComponent,
8094
- CardFooterComponent
8213
+ CardFooterComponent,
8214
+ InputGroupInput,
8215
+ InputGroupComponent,
8216
+ InputGroupAddonComponent
8095
8217
  ],
8096
8218
  template: `
8097
8219
  <Card hover="no" cdkTrapFocus cdkTrapFocusAutoCapture="true" class="bg-card rounded-xl shadow-sm">
@@ -8101,18 +8223,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
8101
8223
 
8102
8224
  <CardContent class="grid gap-4">
8103
8225
 
8226
+ @if (alert()) {
8227
+ <div class="p-4 w-full bg-destructive/20 border-destructive">
8228
+ {{ alert() | transloco }}
8229
+ </div>
8230
+ }
8231
+
8104
8232
  <!-- Current password -->
8105
8233
  <div class="grid gap-2">
8106
8234
  <label class="text-sm font-medium" for="auth-current-password">
8107
8235
  {{ 'login.currentPassword' | transloco }}
8108
8236
  </label>
8109
- <input
8110
- id="auth-current-password"
8111
- type="password"
8112
- required
8113
- [(ngModel)]="currentPassword"
8114
- (keydown.enter)="changePassword()"
8115
- />
8237
+ <InputGroup class="group/item">
8238
+ <input
8239
+ input-group
8240
+ id="auth-current-password"
8241
+ [type]="currentPasswordType"
8242
+ required
8243
+ [(ngModel)]="currentPassword"
8244
+ (keydown.enter)="changePassword()"
8245
+ />
8246
+ <InputGroupAddon align="inline-end"
8247
+ (click)="currentPasswordType = (currentPasswordType === 'password' ? 'text' : 'password')">
8248
+ @if(currentPasswordType === 'text') {
8249
+ <i class="fal fa-eye-slash }} cursor-pointer"></i>
8250
+ } @else {
8251
+ <i class="fal fa-eye }} cursor-pointer"></i>
8252
+ }
8253
+ </InputGroupAddon>
8254
+ </InputGroup>
8116
8255
  </div>
8117
8256
 
8118
8257
  <!-- New password -->
@@ -8120,13 +8259,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
8120
8259
  <label class="text-sm font-medium" for="auth-new-password">
8121
8260
  {{ 'login.newPassword' | transloco }}
8122
8261
  </label>
8123
- <input
8124
- id="auth-new-password"
8125
- type="password"
8126
- required
8127
- [(ngModel)]="newPassword"
8128
- (keydown.enter)="changePassword()"
8129
- />
8262
+ <InputGroup class="group/item">
8263
+ <input
8264
+ input-group
8265
+ id="auth-new-password"
8266
+ [type]="newPasswordType"
8267
+ required
8268
+ [(ngModel)]="newPassword"
8269
+ (keydown.enter)="changePassword()"
8270
+ />
8271
+ <InputGroupAddon align="inline-end"
8272
+ (click)="newPasswordType = (newPasswordType === 'password' ? 'text' : 'password')">
8273
+ @if(newPasswordType === 'text') {
8274
+ <i class="fal fa-eye-slash }} cursor-pointer"></i>
8275
+ } @else {
8276
+ <i class="fal fa-eye }} cursor-pointer"></i>
8277
+ }
8278
+ </InputGroupAddon>
8279
+ </InputGroup>
8130
8280
  </div>
8131
8281
 
8132
8282
  <!-- Confirm -->
@@ -8134,13 +8284,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
8134
8284
  <label class="text-sm font-medium" for="auth-confirm-password">
8135
8285
  {{ 'login.confirmPassword' | transloco }}
8136
8286
  </label>
8137
- <input
8138
- id="auth-confirm-password"
8139
- type="password"
8140
- required
8141
- [(ngModel)]="confirmPassword"
8142
- (keydown.enter)="changePassword()"
8143
- />
8287
+ <InputGroup class="group/item">
8288
+ <input
8289
+ input-group
8290
+ id="auth-confirm-password"
8291
+ [ariaInvalid]="confirmInvalid()"
8292
+ [type]="confirmPasswordType"
8293
+ required
8294
+ [(ngModel)]="confirmPassword"
8295
+ (keydown.enter)="changePassword()"
8296
+ />
8297
+ <InputGroupAddon align="inline-end"
8298
+ (click)="confirmPasswordType = (confirmPasswordType === 'password' ? 'text' : 'password')">
8299
+ @if(confirmPasswordType === 'text') {
8300
+ <i class="fal fa-eye-slash }} cursor-pointer"></i>
8301
+ } @else {
8302
+ <i class="fal fa-eye }} cursor-pointer"></i>
8303
+ }
8304
+ </InputGroupAddon>
8305
+ </InputGroup>
8306
+ @if (confirmInvalid()) {
8307
+ <p class="text-sm font-medium text-destructive" for="auth-confirm-password">
8308
+ {{ 'login.differentPasswords' | transloco }}
8309
+ </p>
8310
+ }
8144
8311
  </div>
8145
8312
  </CardContent>
8146
8313
 
@@ -8158,7 +8325,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
8158
8325
  </Card>
8159
8326
  `
8160
8327
  }]
8161
- }], propDecorators: { success: [{ type: i0.Output, args: ["success"] }], cancel: [{ type: i0.Output, args: ["cancel"] }], username: [{ type: i0.Input, args: [{ isSignal: true, alias: "username", required: false }] }], currentPassword: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentPassword", required: false }] }, { type: i0.Output, args: ["currentPasswordChange"] }], newPassword: [{ type: i0.Input, args: [{ isSignal: true, alias: "newPassword", required: false }] }, { type: i0.Output, args: ["newPasswordChange"] }], confirmPassword: [{ type: i0.Input, args: [{ isSignal: true, alias: "confirmPassword", required: false }] }, { type: i0.Output, args: ["confirmPasswordChange"] }] } });
8328
+ }], propDecorators: { success: [{ type: i0.Output, args: ["success"] }], cancel: [{ type: i0.Output, args: ["cancel"] }], username: [{ type: i0.Input, args: [{ isSignal: true, alias: "username", required: false }] }], alert: [{ type: i0.Input, args: [{ isSignal: true, alias: "alert", required: false }] }], redirectAfterSuccess: [{ type: i0.Input, args: [{ isSignal: true, alias: "redirectAfterSuccess", required: false }] }], currentPassword: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentPassword", required: false }] }, { type: i0.Output, args: ["currentPasswordChange"] }], newPassword: [{ type: i0.Input, args: [{ isSignal: true, alias: "newPassword", required: false }] }, { type: i0.Output, args: ["newPasswordChange"] }], confirmPassword: [{ type: i0.Input, args: [{ isSignal: true, alias: "confirmPassword", required: false }] }, { type: i0.Output, args: ["confirmPasswordChange"] }] } });
8162
8329
 
8163
8330
  class ForgotPasswordComponent {
8164
8331
  cancel = output();
@@ -8191,8 +8358,8 @@ class ForgotPasswordComponent {
8191
8358
  this.pending.set(false);
8192
8359
  }
8193
8360
  }
8194
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ForgotPasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8195
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.15", type: ForgotPasswordComponent, isStandalone: true, selector: "forgot-password, ForgotPassword, forgotpassword", inputs: { userName: { classPropertyName: "userName", publicName: "userName", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cancel: "cancel", success: "success", userName: "userNameChange" }, providers: [provideTranslocoScope("login")], ngImport: i0, template: `
8361
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ForgotPasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8362
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: ForgotPasswordComponent, isStandalone: true, selector: "forgot-password, ForgotPassword, forgotpassword", inputs: { userName: { classPropertyName: "userName", publicName: "userName", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cancel: "cancel", success: "success", userName: "userNameChange" }, providers: [provideTranslocoScope("login")], ngImport: i0, template: `
8196
8363
  <Card hover="no" class="bg-card rounded-xl shadow-sm">
8197
8364
  <CardHeader class="flex flex-col items-center gap-3">
8198
8365
  <img class="h-12 content-(--logo-large)" alt="logo" />
@@ -8232,7 +8399,7 @@ class ForgotPasswordComponent {
8232
8399
  </Card>
8233
8400
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: CardComponent, selector: ".card, card, Card", inputs: ["class", "variant", "hover"] }, { kind: "directive", type: CardHeaderComponent, selector: ".card-header, card-header, CardHeader, cardheader", inputs: ["class"] }, { kind: "directive", type: CardContentComponent, selector: ".card-content, card-content, CardContent, cardcontent", inputs: ["class"] }, { kind: "directive", type: CardFooterComponent, selector: ".card-footer, card-footer, CardFooter, cardfooter", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
8234
8401
  }
8235
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ForgotPasswordComponent, decorators: [{
8402
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ForgotPasswordComponent, decorators: [{
8236
8403
  type: Component,
8237
8404
  args: [{
8238
8405
  selector: "forgot-password, ForgotPassword, forgotpassword",
@@ -8404,6 +8571,7 @@ class SignInComponent {
8404
8571
  this.router.navigate(["/login"], {
8405
8572
  queryParams: {
8406
8573
  mode: "changepassword",
8574
+ alert: "passwordExpired",
8407
8575
  username: this.username()
8408
8576
  }
8409
8577
  });
@@ -8418,8 +8586,8 @@ class SignInComponent {
8418
8586
  this.returnUrl.set(null);
8419
8587
  this.router.navigate(["/"]);
8420
8588
  }
8421
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SignInComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
8422
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: SignInComponent, isStandalone: true, selector: "signIn, signin, sign-in", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, username: { classPropertyName: "username", publicName: "username", isSignal: true, isRequired: false, transformFunction: null }, password: { classPropertyName: "password", publicName: "password", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { forgotPassword: "forgotPassword", username: "usernameChange", password: "passwordChange" }, host: { properties: { "class": "cn('grid h-dvh w-full place-content-center', class())" } }, providers: [provideTranslocoScope("login")], ngImport: i0, template: `
8589
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignInComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
8590
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: SignInComponent, isStandalone: true, selector: "signIn, signin, sign-in", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, username: { classPropertyName: "username", publicName: "username", isSignal: true, isRequired: false, transformFunction: null }, password: { classPropertyName: "password", publicName: "password", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { forgotPassword: "forgotPassword", username: "usernameChange", password: "passwordChange" }, host: { properties: { "class": "cn('grid h-dvh w-full place-content-center', class())" } }, providers: [provideTranslocoScope("login")], ngImport: i0, template: `
8423
8591
  <Card
8424
8592
  hover="no"
8425
8593
  cdkTrapFocus
@@ -8494,7 +8662,7 @@ class SignInComponent {
8494
8662
  </Card>
8495
8663
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: CardComponent, selector: ".card, card, Card", inputs: ["class", "variant", "hover"] }, { kind: "directive", type: CardHeaderComponent, selector: ".card-header, card-header, CardHeader, cardheader", inputs: ["class"] }, { kind: "directive", type: CardContentComponent, selector: ".card-content, card-content, CardContent, cardcontent", inputs: ["class"] }, { kind: "directive", type: CardFooterComponent, selector: ".card-footer, card-footer, CardFooter, cardfooter", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
8496
8664
  }
8497
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SignInComponent, decorators: [{
8665
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignInComponent, decorators: [{
8498
8666
  type: Component,
8499
8667
  args: [{
8500
8668
  selector: "signIn, signin, sign-in",
@@ -8595,6 +8763,7 @@ class AuthPageComponent {
8595
8763
  mode = input(...(ngDevMode ? [undefined, { debugName: "mode" }] : []));
8596
8764
  view = linkedSignal(() => this.mode() ?? "signin", ...(ngDevMode ? [{ debugName: "view" }] : []));
8597
8765
  username = signal("", ...(ngDevMode ? [{ debugName: "username" }] : []));
8766
+ alert = signal(undefined, ...(ngDevMode ? [{ debugName: "alert" }] : []));
8598
8767
  route = inject(ActivatedRoute);
8599
8768
  constructor() {
8600
8769
  const params = this.route.snapshot.queryParams;
@@ -8604,13 +8773,15 @@ class AuthPageComponent {
8604
8773
  if (modeFromQuery === "changepassword" || modeFromQuery === "forgotpassword") {
8605
8774
  this.view.set(modeFromQuery);
8606
8775
  }
8776
+ this.alert.set(`login.${params["alert"]}`);
8607
8777
  }
8608
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AuthPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8609
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AuthPageComponent, isStandalone: true, selector: "auth-page, AuthPage, authpage", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "min-h-screen grid place-items-center p-6 bg-background" }, providers: [provideTranslocoScope("login")], ngImport: i0, template: `
8778
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuthPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8779
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AuthPageComponent, isStandalone: true, selector: "auth-page, AuthPage, authpage", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "min-h-screen grid place-items-center p-6 bg-background" }, providers: [provideTranslocoScope("login")], ngImport: i0, template: `
8610
8780
  <div class="w-full max-w-md">
8611
8781
  @if (view() === 'changepassword') {
8612
8782
  <change-password
8613
8783
  [username]="username()"
8784
+ [alert]="alert()"
8614
8785
  (cancel)="view.set('signin')"
8615
8786
  />
8616
8787
  } @else if (view() === 'forgotpassword') {
@@ -8625,9 +8796,9 @@ class AuthPageComponent {
8625
8796
  />
8626
8797
  }
8627
8798
  </div>
8628
- `, isInline: true, dependencies: [{ kind: "component", type: SignInComponent, selector: "signIn, signin, sign-in", inputs: ["class", "username", "password"], outputs: ["forgotPassword", "usernameChange", "passwordChange"] }, { kind: "component", type: ChangePasswordComponent, selector: "change-password, ChangePassword, changepassword", inputs: ["username", "currentPassword", "newPassword", "confirmPassword"], outputs: ["success", "cancel", "currentPasswordChange", "newPasswordChange", "confirmPasswordChange"] }, { kind: "component", type: ForgotPasswordComponent, selector: "forgot-password, ForgotPassword, forgotpassword", inputs: ["userName"], outputs: ["cancel", "success", "userNameChange"] }] });
8799
+ `, isInline: true, dependencies: [{ kind: "component", type: SignInComponent, selector: "signIn, signin, sign-in", inputs: ["class", "username", "password"], outputs: ["forgotPassword", "usernameChange", "passwordChange"] }, { kind: "component", type: ChangePasswordComponent, selector: "change-password, ChangePassword, changepassword", inputs: ["username", "alert", "redirectAfterSuccess", "currentPassword", "newPassword", "confirmPassword"], outputs: ["success", "cancel", "currentPasswordChange", "newPasswordChange", "confirmPasswordChange"] }, { kind: "component", type: ForgotPasswordComponent, selector: "forgot-password, ForgotPassword, forgotpassword", inputs: ["userName"], outputs: ["cancel", "success", "userNameChange"] }] });
8629
8800
  }
8630
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AuthPageComponent, decorators: [{
8801
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuthPageComponent, decorators: [{
8631
8802
  type: Component,
8632
8803
  args: [{
8633
8804
  selector: "auth-page, AuthPage, authpage",
@@ -8639,6 +8810,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
8639
8810
  @if (view() === 'changepassword') {
8640
8811
  <change-password
8641
8812
  [username]="username()"
8813
+ [alert]="alert()"
8642
8814
  (cancel)="view.set('signin')"
8643
8815
  />
8644
8816
  } @else if (view() === 'forgotpassword') {
@@ -8683,14 +8855,14 @@ class BookmarkButtonComponent {
8683
8855
  notify.success(this.transloco.translate('bookmarks.bookmarkAdded'), { duration: 2000 });
8684
8856
  }
8685
8857
  }
8686
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BookmarkButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8687
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: BookmarkButtonComponent, isStandalone: true, selector: "bookmark-button, bookmarkbutton, BookmarkButton", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "bookmark($event)" }, properties: { "title": "title()" }, classAttribute: "cursor-pointer" }, providers: [provideTranslocoScope('bookmark')], ngImport: i0, template: ` @if (isBookmarked()) {
8858
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BookmarkButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8859
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: BookmarkButtonComponent, isStandalone: true, selector: "bookmark-button, bookmarkbutton, BookmarkButton", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "bookmark($event)" }, properties: { "title": "title()" }, classAttribute: "cursor-pointer" }, providers: [provideTranslocoScope('bookmark')], ngImport: i0, template: ` @if (isBookmarked()) {
8688
8860
  <i class="fa-fw fa-bookmark fa-solid"></i>
8689
8861
  } @else {
8690
8862
  <i class="fa-fw fa-bookmark fa-regular"></i>
8691
8863
  }`, isInline: true });
8692
8864
  }
8693
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BookmarkButtonComponent, decorators: [{
8865
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BookmarkButtonComponent, decorators: [{
8694
8866
  type: Component,
8695
8867
  args: [{
8696
8868
  selector: 'bookmark-button, bookmarkbutton, BookmarkButton',
@@ -8786,10 +8958,10 @@ class BookmarksComponent {
8786
8958
  e.stopPropagation();
8787
8959
  this.range.set(this.range() + (this.config.itemsPerPage ?? 10));
8788
8960
  }
8789
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BookmarksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8790
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: BookmarksComponent, isStandalone: true, selector: "bookmarks, Bookmarks", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslocoScope("bookmarks")], ngImport: i0, template: "@if (floating) {\n <div class=\"p-2\">\n <label class=\"text-xl font-bold\">{{ 'bookmarks.label' | transloco }}</label>\n <Separator />\n </div>\n}\n\n<ul class=\"flex max-h-[460px] flex-col overflow-auto\" role=\"list\">\n @for (bookmark of paginatedBookmarks(); track $index) {\n <li role=\"listitem\" class=\"group h-10\" tabindex=\"0\" (click)=\"onClick(bookmark)\" (keydown.enter)=\"onClick(bookmark)\">\n <BookmarkIcon solid class=\"shrink-0\" />\n\n <p class=\"line-clamp-1\">{{ bookmark.label }}</p>\n\n @if (bookmark.author) {\n <Badge variant=\"ghost\" class=\"text-grey-500 text-xs\">\n <UserIcon class=\"size-3\"/>\n <span class=\"line-clamp-1\">{{ bookmark.author }}</span>\n </Badge>\n }\n @if (bookmark.parentFolder) {\n <Badge variant=\"ghost\" class=\"text-grey-500 text-xs\">\n <FolderIcon class=\"size-3\"/>\n <span class=\"line-clamp-1\">{{ bookmark.parentFolder }}</span>\n </Badge>\n }\n\n <button\n variant=\"ghost\"\n size=\"icon\"\n title=\"{{ 'bookmarks.openBookmark' | transloco }}\"\n class=\"text-destructive ms-auto group-hover:visible\"\n [attr.title]=\"'bookmarks.removeBookmark' | transloco\"\n [attr.aria-label]=\"'bookmarks.removeBookmark' | transloco\"\n (click)=\"onDelete(bookmark, $event)\">\n <TrashIcon />\n </button>\n </li>\n } @empty {\n <li class=\"py-4 text-center text-neutral-500\">{{ 'bookmarks.noBookmarks' | transloco }}</li>\n }\n</ul>\n\n<div class=\"flex flex-col px-2\">\n @if (hasMore() && config.showLoadMore) {\n <button variant=\"ghost\" class=\"w-full\" tabindex=\"0\" [attr.title]=\"'loadMore' | transloco\" (click)=\"loadMore($event)\">\n {{ 'loadMore' | transloco }}\n </button>\n }\n <button decoration=\"underline\" class=\"ml-auto\" [attr.title]=\"'seeMore' | transloco\" [routerLink]=\"[config.routerLink]\">{{ 'seeMore' | transloco }}</button>\n</div>\n", styles: [":host ul{scrollbar-width:thin}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: Separator, selector: "separator, Separator", inputs: ["class", "orientation"] }, { kind: "component", type: BookmarkIcon, selector: "bookmark-icon, BookmarkIcon", inputs: ["class", "solid"] }, { kind: "component", type: UserIcon, selector: "user-icon, UserIcon", inputs: ["class"] }, { kind: "component", type: TrashIcon, selector: "trash-icon, TrashIcon", inputs: ["class"] }, { kind: "component", type: FolderIcon, selector: "folder-icon, FolderIcon", inputs: ["class"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
8961
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BookmarksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8962
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: BookmarksComponent, isStandalone: true, selector: "bookmarks, Bookmarks", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslocoScope("bookmarks")], ngImport: i0, template: "@if (floating) {\n <div class=\"p-2\">\n <label class=\"text-xl font-bold\">{{ 'bookmarks.label' | transloco }}</label>\n <Separator />\n </div>\n}\n\n<ul class=\"flex max-h-[460px] flex-col overflow-auto\" role=\"list\">\n @for (bookmark of paginatedBookmarks(); track $index) {\n <li role=\"listitem\" class=\"group h-10\" tabindex=\"0\" (click)=\"onClick(bookmark)\" (keydown.enter)=\"onClick(bookmark)\">\n <BookmarkIcon solid class=\"shrink-0\" />\n\n <p class=\"line-clamp-1\">{{ bookmark.label }}</p>\n\n @if (bookmark.author) {\n <Badge variant=\"ghost\" class=\"text-grey-500 text-xs\">\n <UserIcon class=\"size-3\"/>\n <span class=\"line-clamp-1\">{{ bookmark.author }}</span>\n </Badge>\n }\n @if (bookmark.parentFolder) {\n <Badge variant=\"ghost\" class=\"text-grey-500 text-xs\">\n <FolderIcon class=\"size-3\"/>\n <span class=\"line-clamp-1\">{{ bookmark.parentFolder }}</span>\n </Badge>\n }\n\n <button\n variant=\"ghost\"\n size=\"icon\"\n title=\"{{ 'bookmarks.openBookmark' | transloco }}\"\n class=\"text-destructive ms-auto group-hover:visible\"\n [attr.title]=\"'bookmarks.removeBookmark' | transloco\"\n [attr.aria-label]=\"'bookmarks.removeBookmark' | transloco\"\n (click)=\"onDelete(bookmark, $event)\">\n <TrashIcon />\n </button>\n </li>\n } @empty {\n <li class=\"py-4 text-center text-neutral-500\">{{ 'bookmarks.noBookmarks' | transloco }}</li>\n }\n</ul>\n\n<div class=\"flex flex-col px-2\">\n @if (hasMore() && config.showLoadMore) {\n <button variant=\"ghost\" class=\"w-full\" tabindex=\"0\" [attr.title]=\"'loadMore' | transloco\" (click)=\"loadMore($event)\">\n {{ 'loadMore' | transloco }}\n </button>\n }\n <button decoration=\"underline\" class=\"ml-auto\" [attr.title]=\"'seeMore' | transloco\" [routerLink]=\"[config.routerLink]\">{{ 'seeMore' | transloco }}</button>\n</div>\n", styles: [":host ul{scrollbar-width:thin}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: Separator, selector: "separator, Separator", inputs: ["class", "orientation"] }, { kind: "component", type: BookmarkIcon, selector: "bookmark-icon, BookmarkIcon", inputs: ["class", "solid"] }, { kind: "component", type: UserIcon, selector: "user-icon, UserIcon", inputs: ["class"] }, { kind: "component", type: TrashIcon, selector: "trash-icon, TrashIcon", inputs: ["class"] }, { kind: "component", type: FolderIcon, selector: "folder-icon, FolderIcon", inputs: ["class"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
8791
8963
  }
8792
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BookmarksComponent, decorators: [{
8964
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BookmarksComponent, decorators: [{
8793
8965
  type: Component,
8794
8966
  args: [{ selector: "bookmarks, Bookmarks", standalone: true, imports: [
8795
8967
  TranslocoPipe,
@@ -8825,8 +8997,8 @@ class DeleteCollectionDialog {
8825
8997
  notify.success(message, { duration: 2000 });
8826
8998
  }
8827
8999
  }
8828
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DeleteCollectionDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
8829
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.15", type: DeleteCollectionDialog, isStandalone: true, selector: "delete-collection-dialog", providers: [provideTranslocoScope("collections")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
9000
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DeleteCollectionDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
9001
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.16", type: DeleteCollectionDialog, isStandalone: true, selector: "delete-collection-dialog", providers: [provideTranslocoScope("collections")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
8830
9002
  <dialog #dialog>
8831
9003
  <DialogContent>
8832
9004
  <DialogHeader>
@@ -8847,7 +9019,7 @@ class DeleteCollectionDialog {
8847
9019
  </dialog>
8848
9020
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: DialogComponent, selector: "dialog, [dialog]", outputs: ["closed"], exportAs: ["dialog"] }, { kind: "component", type: DialogHeaderComponent, selector: "DialogHeader" }, { kind: "directive", type: DialogTitleComponent, selector: "DialogTitle", inputs: ["class"] }, { kind: "directive", type: DialogContentComponent, selector: "DialogContent", inputs: ["class"] }, { kind: "directive", type: DialogFooterComponent, selector: "DialogFooter", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
8849
9021
  }
8850
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DeleteCollectionDialog, decorators: [{
9022
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DeleteCollectionDialog, decorators: [{
8851
9023
  type: Component,
8852
9024
  args: [{
8853
9025
  selector: "delete-collection-dialog",
@@ -8926,10 +9098,10 @@ class CollectionsComponent {
8926
9098
  e.stopPropagation();
8927
9099
  this.range.set(this.range() + (this.config.itemsPerPage ?? 10));
8928
9100
  }
8929
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CollectionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8930
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CollectionsComponent, isStandalone: true, selector: "app-collections", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslocoScope("collections")], viewQueries: [{ propertyName: "deleteCollectionDialog", first: true, predicate: DeleteCollectionDialog, descendants: true, isSignal: true }], ngImport: i0, template: "@if (floating) {\n <div class=\"p-2\">\n <label class=\"text-xl font-bold\">{{ 'collections.label' | transloco }}</label>\n <Separator />\n </div>\n}\n\n<ul class=\"flex max-h-[460px] flex-col overflow-auto\">\n @for (collection of paginatedCollections(); track $index) {\n <li\n role=\"listitem\"\n class=\"group grid grid-cols-[min-content_auto_min-content] items-center\"\n tabindex=\"0\"\n (click)=\"onClick(collection)\"\n (keydown.enter)=\"onClick(collection)\">\n <i class=\"fas fa-inbox ps-2\"></i>\n\n <p class=\"mx-2 line-clamp-1\">{{ collection.name }}</p>\n\n <button\n variant=\"ghost\"\n size=\"icon\"\n class=\"text-destructive invisible group-hover:visible\"\n title=\"{{ 'collections.deleteCollection' | transloco }}\"\n [attr.aria-label]=\"'collections.deleteCollection' | transloco\"\n (click)=\"onDelete(collection, $index, $event)\">\n <TrashIcon />\n </button>\n </li>\n } @empty {\n <li class=\"list-none py-4 text-center text-neutral-500\">{{ 'collections.noCollections' | transloco }}</li>\n }\n</ul>\n\n<div class=\"flex flex-col px-2\">\n @if (hasMore() && config.showLoadMore) {\n <button decoration=\"outline\" class=\"w-full\" tabindex=\"0\" [attr.title]=\"'loadMore' | transloco\" (click)=\"loadMore($event)\">\n {{ 'loadMore' | transloco }}\n </button>\n }\n <button decoration=\"underline\" class=\"ml-auto\" [attr.title]=\"'seeMore' | transloco\" [routerLink]=\"[config.routerLink]\">{{ 'seeMore' | transloco }}</button>\n</div>\n\n<delete-collection-dialog />\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: DeleteCollectionDialog, selector: "delete-collection-dialog" }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: Separator, selector: "separator, Separator", inputs: ["class", "orientation"] }, { kind: "component", type: TrashIcon, selector: "trash-icon, TrashIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
9101
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CollectionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9102
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: CollectionsComponent, isStandalone: true, selector: "app-collections", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslocoScope("collections")], viewQueries: [{ propertyName: "deleteCollectionDialog", first: true, predicate: DeleteCollectionDialog, descendants: true, isSignal: true }], ngImport: i0, template: "@if (floating) {\n <div class=\"p-2\">\n <label class=\"text-xl font-bold\">{{ 'collections.label' | transloco }}</label>\n <Separator />\n </div>\n}\n\n<ul class=\"flex max-h-[460px] flex-col overflow-auto\">\n @for (collection of paginatedCollections(); track $index) {\n <li\n role=\"listitem\"\n class=\"group grid grid-cols-[min-content_auto_min-content] items-center\"\n tabindex=\"0\"\n (click)=\"onClick(collection)\"\n (keydown.enter)=\"onClick(collection)\">\n <i class=\"fas fa-inbox ps-2\"></i>\n\n <p class=\"mx-2 line-clamp-1\">{{ collection.name }}</p>\n\n <button\n variant=\"ghost\"\n size=\"icon\"\n class=\"text-destructive invisible group-hover:visible\"\n title=\"{{ 'collections.deleteCollection' | transloco }}\"\n [attr.aria-label]=\"'collections.deleteCollection' | transloco\"\n (click)=\"onDelete(collection, $index, $event)\">\n <TrashIcon />\n </button>\n </li>\n } @empty {\n <li class=\"list-none py-4 text-center text-neutral-500\">{{ 'collections.noCollections' | transloco }}</li>\n }\n</ul>\n\n<div class=\"flex flex-col px-2\">\n @if (hasMore() && config.showLoadMore) {\n <button decoration=\"outline\" class=\"w-full\" tabindex=\"0\" [attr.title]=\"'loadMore' | transloco\" (click)=\"loadMore($event)\">\n {{ 'loadMore' | transloco }}\n </button>\n }\n <button decoration=\"underline\" class=\"ml-auto\" [attr.title]=\"'seeMore' | transloco\" [routerLink]=\"[config.routerLink]\">{{ 'seeMore' | transloco }}</button>\n</div>\n\n<delete-collection-dialog />\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: DeleteCollectionDialog, selector: "delete-collection-dialog" }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: Separator, selector: "separator, Separator", inputs: ["class", "orientation"] }, { kind: "component", type: TrashIcon, selector: "trash-icon, TrashIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
8931
9103
  }
8932
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CollectionsComponent, decorators: [{
9104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CollectionsComponent, decorators: [{
8933
9105
  type: Component,
8934
9106
  args: [{ selector: "app-collections", standalone: true, imports: [
8935
9107
  TranslocoPipe,
@@ -9002,8 +9174,8 @@ class OverrideUserDialogComponent {
9002
9174
  });
9003
9175
  }
9004
9176
  }
9005
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: OverrideUserDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9006
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.15", type: OverrideUserDialogComponent, isStandalone: true, selector: "override-user-dialog", inputs: { overrideUser: { classPropertyName: "overrideUser", publicName: "overrideUser", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { overrideUser: "overrideUserChange" }, providers: [provideTranslocoScope("dialogs")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
9177
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverrideUserDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9178
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.16", type: OverrideUserDialogComponent, isStandalone: true, selector: "override-user-dialog", inputs: { overrideUser: { classPropertyName: "overrideUser", publicName: "overrideUser", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { overrideUser: "overrideUserChange" }, providers: [provideTranslocoScope("dialogs")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
9007
9179
  <dialog #dialog>
9008
9180
  <DialogContent class="sm:max-w-[425px]">
9009
9181
  <DialogHeader>
@@ -9051,7 +9223,7 @@ class OverrideUserDialogComponent {
9051
9223
  </dialog>
9052
9224
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: DialogComponent, selector: "dialog, [dialog]", outputs: ["closed"], exportAs: ["dialog"] }, { kind: "directive", type: DialogContentComponent, selector: "DialogContent", inputs: ["class"] }, { kind: "directive", type: DialogTitleComponent, selector: "DialogTitle", inputs: ["class"] }, { kind: "component", type: DialogHeaderComponent, selector: "DialogHeader" }, { kind: "directive", type: DialogFooterComponent, selector: "DialogFooter", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
9053
9225
  }
9054
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: OverrideUserDialogComponent, decorators: [{
9226
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverrideUserDialogComponent, decorators: [{
9055
9227
  type: Component,
9056
9228
  args: [{
9057
9229
  selector: "override-user-dialog",
@@ -9132,8 +9304,8 @@ class ResetUserSettingsDialogComponent {
9132
9304
  notify.success(message, { duration: 2000 });
9133
9305
  });
9134
9306
  }
9135
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ResetUserSettingsDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9136
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.15", type: ResetUserSettingsDialogComponent, isStandalone: true, selector: "reset-user-settings-dialog", providers: [provideTranslocoScope("dialogs")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
9307
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ResetUserSettingsDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9308
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.16", type: ResetUserSettingsDialogComponent, isStandalone: true, selector: "reset-user-settings-dialog", providers: [provideTranslocoScope("dialogs")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
9137
9309
  <dialog #dialog>
9138
9310
  <DialogContent>
9139
9311
  <DialogHeader>
@@ -9155,7 +9327,7 @@ class ResetUserSettingsDialogComponent {
9155
9327
  </dialog>
9156
9328
  `, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: DialogComponent, selector: "dialog, [dialog]", outputs: ["closed"], exportAs: ["dialog"] }, { kind: "directive", type: DialogTitleComponent, selector: "DialogTitle", inputs: ["class"] }, { kind: "directive", type: DialogContentComponent, selector: "DialogContent", inputs: ["class"] }, { kind: "directive", type: DialogFooterComponent, selector: "DialogFooter", inputs: ["class"] }, { kind: "component", type: DialogHeaderComponent, selector: "DialogHeader" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
9157
9329
  }
9158
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ResetUserSettingsDialogComponent, decorators: [{
9330
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ResetUserSettingsDialogComponent, decorators: [{
9159
9331
  type: Component,
9160
9332
  args: [{
9161
9333
  selector: "reset-user-settings-dialog",
@@ -9209,8 +9381,8 @@ class DidYouMeanComponent {
9209
9381
  this.queryParamsStore.patch({ spellingCorrectionMode: "dymonly" });
9210
9382
  this.router.navigate([], { queryParamsHandling: "merge", queryParams: { c: "dymonly", q: this.original() } });
9211
9383
  }
9212
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DidYouMeanComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9213
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DidYouMeanComponent, isStandalone: true, selector: "did-you-mean, DidYouMean, didyoumean", inputs: { result: { classPropertyName: "result", publicName: "result", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslocoScope("did-you-mean")], ngImport: i0, template: `
9384
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DidYouMeanComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9385
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DidYouMeanComponent, isStandalone: true, selector: "did-you-mean, DidYouMean, didyoumean", inputs: { result: { classPropertyName: "result", publicName: "result", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslocoScope("did-you-mean")], ngImport: i0, template: `
9214
9386
  @switch (spellingCorrectionMode()?.toLowerCase()) {
9215
9387
  @case ('dymonly') {
9216
9388
  <p>
@@ -9240,7 +9412,7 @@ class DidYouMeanComponent {
9240
9412
  }
9241
9413
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
9242
9414
  }
9243
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DidYouMeanComponent, decorators: [{
9415
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DidYouMeanComponent, decorators: [{
9244
9416
  type: Component,
9245
9417
  args: [{
9246
9418
  selector: "did-you-mean, DidYouMean, didyoumean",
@@ -9304,10 +9476,10 @@ class DrawerService {
9304
9476
  toggleExtension() {
9305
9477
  this.isExtended() ? this.collapse() : this.extend();
9306
9478
  }
9307
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9308
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerService });
9479
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9480
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerService });
9309
9481
  }
9310
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerService, decorators: [{
9482
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerService, decorators: [{
9311
9483
  type: Injectable
9312
9484
  }] });
9313
9485
 
@@ -9368,10 +9540,10 @@ class DrawerComponent {
9368
9540
  resetGridTemplateColumns() {
9369
9541
  this.element.style.gridTemplateColumns = this.defaultDrawerGridTemplate;
9370
9542
  }
9371
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9372
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.15", type: DrawerComponent, isStandalone: true, selector: "Drawer, drawer", host: { listeners: { "mousemove": "mouseMove($event)", "mousedown": "mouseDown($event)", "mouseup": "mouseUp()" }, properties: { "attr.drawer-opened": "drawerOpened()", "attr.drawer-extended": "drawerExtended()", "style.grid-template-columns": "this.drawerGridTemplateColumns" } }, providers: [DrawerService], viewQueries: [{ propertyName: "drawerHandle", first: true, predicate: ["drawerHandle"], descendants: true, isSignal: true }], ngImport: i0, template: ``, isInline: true, styles: [":host{--drawer-width: 46;--drawer-subdrawer-width: 400px;display:grid;position:absolute;height:100%;top:0;right:-100%;justify-content:flex-end;width:calc(100vw / 100 * var(--drawer-width) + var(--drawer-subdrawer-width));z-index:var(--z-drawer);grid-template-columns:0 1fr var(--drawer-subdrawer-width);transition:right .3s ease-in-out,transform .3s ease-in-out}:host[drawer-opened=true]{right:calc(var(--drawer-subdrawer-width) * -1);box-shadow:var(--drawer-box-shadow)}:host[drawer-extended=true]{right:0;width:100vw;grid-template-columns:1fr calc(var(--drawer-width) * 1%) var(--drawer-subdrawer-width);box-shadow:unset}\n"] });
9543
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9544
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.16", type: DrawerComponent, isStandalone: true, selector: "Drawer, drawer", host: { listeners: { "mousemove": "mouseMove($event)", "mousedown": "mouseDown($event)", "mouseup": "mouseUp()" }, properties: { "attr.drawer-opened": "drawerOpened()", "attr.drawer-extended": "drawerExtended()", "style.grid-template-columns": "this.drawerGridTemplateColumns" } }, providers: [DrawerService], viewQueries: [{ propertyName: "drawerHandle", first: true, predicate: ["drawerHandle"], descendants: true, isSignal: true }], ngImport: i0, template: ``, isInline: true, styles: [":host{--drawer-width: 46;--drawer-subdrawer-width: 400px;display:grid;position:absolute;height:100%;top:0;right:-100%;justify-content:flex-end;width:calc(100vw / 100 * var(--drawer-width) + var(--drawer-subdrawer-width));z-index:var(--z-drawer);grid-template-columns:0 1fr var(--drawer-subdrawer-width);transition:right .3s ease-in-out,transform .3s ease-in-out}:host[drawer-opened=true]{right:calc(var(--drawer-subdrawer-width) * -1);box-shadow:var(--drawer-box-shadow)}:host[drawer-extended=true]{right:0;width:100vw;grid-template-columns:1fr calc(var(--drawer-width) * 1%) var(--drawer-subdrawer-width);box-shadow:unset}\n"] });
9373
9545
  }
9374
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerComponent, decorators: [{
9546
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerComponent, decorators: [{
9375
9547
  type: Component,
9376
9548
  args: [{ selector: 'Drawer, drawer', standalone: true, providers: [DrawerService], template: ``, host: {
9377
9549
  '[attr.drawer-opened]': 'drawerOpened()',
@@ -9395,8 +9567,8 @@ class DrawerNavbarComponent {
9395
9567
  drawerStack = inject(DrawerStackService);
9396
9568
  drawerService = inject(DrawerService);
9397
9569
  isExtended = this.drawerService.isExtended();
9398
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerNavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9399
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DrawerNavbarComponent, isStandalone: true, selector: "DrawerNavbar, drawernavbar", ngImport: i0, template: `
9570
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerNavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9571
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DrawerNavbarComponent, isStandalone: true, selector: "DrawerNavbar, drawernavbar", ngImport: i0, template: `
9400
9572
  <menu class="flex items-center gap-2 p-4 font-semibold">
9401
9573
  <li>
9402
9574
  <button variant="ghost" class="group" [attr.title]="'back' | transloco" (click)="drawerStack.close()">
@@ -9413,7 +9585,7 @@ class DrawerNavbarComponent {
9413
9585
  </menu>
9414
9586
  `, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: VerticalDividerComponent, selector: "vertical-divider, VerticalDivider, verticaldivider" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
9415
9587
  }
9416
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerNavbarComponent, decorators: [{
9588
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerNavbarComponent, decorators: [{
9417
9589
  type: Component,
9418
9590
  args: [{
9419
9591
  selector: 'DrawerNavbar, drawernavbar',
@@ -9749,10 +9921,10 @@ class DrawerAdvancedFiltersComponent extends DrawerComponent {
9749
9921
  });
9750
9922
  return res;
9751
9923
  }
9752
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerAdvancedFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9753
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DrawerAdvancedFiltersComponent, isStandalone: true, selector: "advanced-filters", host: { classAttribute: "fixed bg-background grid h-full top-0 -right-full justify-end" }, providers: [DrawerService, SyslangPipe, TranslocoPipe, provideTranslocoScope("drawers")], usesInheritance: true, ngImport: i0, template: "<div (click)=\"drawer.toggleExtension()\" (keydown.escape)=\"drawer.toggleExtension()\" [attr.aria-hidden]=\"true\"></div>\n\n<div class=\"flex h-full flex-col overflow-auto\">\n <DrawerNavbar class=\"border-foreground/10 block border-b\">\n <button [attr.title]=\"'drawers.search' | transloco\" (click)=\"onSearch()\">\n {{ 'drawers.search' | transloco }}\n </button>\n </DrawerNavbar>\n\n <div class=\"flex h-full grow flex-col overflow-auto\">\n <section class=\"flex flex-col gap-4 p-6\" [formGroup]=\"form\">\n <!-- FIND IN -->\n <h1 class=\"text-xl font-bold\">{{ 'drawers.findInContent' | transloco }}</h1>\n <div class=\"flex items-center gap-4\" formGroupName=\"content\">\n <span class=\"w-1/3 font-semibold\">{{ 'drawers.findInContent' | transloco }}</span>\n <select\n id=\"content-operator\"\n class=\"hover:outline-primary focus:outline-primary border-foreground/10 bg-background hover:bg-muted focus:bg-muted h-8 w-full rounded-md border px-2 hover:outline focus:outline\"\n formControlName=\"operator\">\n @for (data of selectData; track $index) {\n <option [value]=\"data.operator\">{{ 'drawers.' + data.display | transloco }}</option>\n }\n </select>\n <input\n [variant]=\"inputVariant()\"\n id=\"content-value\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [placeholder]=\"getPlaceholder('content.operator')\"\n formControlName=\"value\" />\n </div>\n @if (enableFieldedSearch()) {\n <div class=\"flex items-center gap-4\" formGroupName=\"title\">\n <span class=\"w-1/3 font-semibold\">{{ 'drawers.findInTitle' | transloco }}</span>\n <select\n id=\"title-operator\"\n class=\"hover:outline-primary focus:outline-primary border-foreground/10 bg-background hover:bg-muted focus:bg-muted h-8 w-full rounded-md border px-2 hover:outline focus:outline\"\n formControlName=\"operator\">\n @for (data of selectData; track $index) {\n <option [value]=\"data.operator\">{{ 'drawers.' + data.display | transloco }}</option>\n }\n </select>\n <input id=\"title-value\" type=\"text\" autocomplete=\"off\" spellcheck=\"false\" [placeholder]=\"getPlaceholder('title.operator')\" formControlName=\"value\" />\n </div>\n }\n\n <!-- TABS -->\n <h1 class=\"mt-4 text-xl font-bold\">{{ 'drawers.inScope' | transloco }}&nbsp;&quot;{{ currentTab() }}&quot;</h1>\n\n <Tabs>\n <TabsList variant=\"ghost\">\n @for (tab of tabs(); track $index) {\n <Tab class=\"w-fit\" [value]=\"tab.path\" [active]=\"tab.path === currentTab()\" (click)=\"onTabChange(tab.path)\">\n {{ tab.display | syslang | transloco }}\n </Tab>\n }\n </TabsList>\n </Tabs>\n\n <!-- FILTERS -->\n <h1 class=\"mt-4 text-xl font-bold\">{{ 'drawers.applyFilters' | transloco }}</h1>\n @for (filter of filters(); track $index) {\n <DropdownInput\n [suggestions]=\"suggestions()\"\n [selected]=\"getItems(filter.column)\"\n [label]=\"filter.display || filter.alias | syslang | transloco\"\n [placeholder]=\"'drawers.startTyping' | transloco\"\n [noResultLabel]=\"'drawers.noResult' | transloco\"\n (onFocus)=\"setFilterFocus($event, filter)\"\n (onKeyUp)=\"onInputTyping($event)\"\n (removeItem)=\"removeItem($event, filter)\"\n (addItem)=\"addItem($event, filter)\" />\n } @empty {\n {{ 'drawers.noFilters' | transloco }}\n }\n </section>\n </div>\n</div>\n", styles: [":host{--drawer-width: 46;--drawer-subdrawer-width: 400px;width:calc(100vw / 100 * var(--drawer-width) + var(--drawer-subdrawer-width));z-index:var(--z-drawer);grid-template-columns:0 1fr var(--drawer-subdrawer-width);transition:right .3s ease-in-out,transform .3s ease-in-out}:host[drawer-opened=true]{right:calc(var(--drawer-subdrawer-width) * -1);box-shadow:var(--drawer-box-shadow)}:host[drawer-extended=true]{width:100vw;right:calc(var(--spacing) * 0);grid-template-columns:1fr calc(var(--drawer-width) * 1%) var(--drawer-subdrawer-width);box-shadow:unset}:is() .dropdown{width:100%}:is() .dropdown-content{width:50%}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: DrawerNavbarComponent, selector: "DrawerNavbar, drawernavbar" }, { kind: "component", type: DropdownInputComponent, selector: "dropdown-input, DropdownInput", inputs: ["label", "placeholder", "noResultLabel", "suggestions", "selected"], outputs: ["onFocus", "onKeyUp", "removeItem", "addItem"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: TabsComponent, selector: "tabs, Tabs", inputs: ["class"] }, { kind: "component", type: TabComponent, selector: "tab, Tab", inputs: ["class", "variant", "shadow", "size", "decoration", "value", "active"], outputs: ["clicked"] }, { kind: "directive", type: TabsListComponent, selector: "tabs-list, TabsList", inputs: ["class", "variant", "size"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
9924
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerAdvancedFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9925
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DrawerAdvancedFiltersComponent, isStandalone: true, selector: "advanced-filters", host: { classAttribute: "fixed bg-background grid h-full top-0 -right-full justify-end" }, providers: [DrawerService, SyslangPipe, TranslocoPipe, provideTranslocoScope("drawers")], usesInheritance: true, ngImport: i0, template: "<div (click)=\"drawer.toggleExtension()\" (keydown.escape)=\"drawer.toggleExtension()\" [attr.aria-hidden]=\"true\"></div>\n\n<div class=\"flex h-full flex-col overflow-auto\">\n <DrawerNavbar class=\"border-foreground/10 block border-b\">\n <button [attr.title]=\"'drawers.search' | transloco\" (click)=\"onSearch()\">\n {{ 'drawers.search' | transloco }}\n </button>\n </DrawerNavbar>\n\n <div class=\"flex h-full grow flex-col overflow-auto\">\n <section class=\"flex flex-col gap-4 p-6\" [formGroup]=\"form\">\n <!-- FIND IN -->\n <h1 class=\"text-xl font-bold\">{{ 'drawers.findInContent' | transloco }}</h1>\n <div class=\"flex items-center gap-4\" formGroupName=\"content\">\n <span class=\"w-1/3 font-semibold\">{{ 'drawers.findInContent' | transloco }}</span>\n <select\n id=\"content-operator\"\n class=\"hover:outline-primary focus:outline-primary border-foreground/10 bg-background hover:bg-muted focus:bg-muted h-8 w-full rounded-md border px-2 hover:outline focus:outline\"\n formControlName=\"operator\">\n @for (data of selectData; track $index) {\n <option [value]=\"data.operator\">{{ 'drawers.' + data.display | transloco }}</option>\n }\n </select>\n <input\n [variant]=\"inputVariant()\"\n id=\"content-value\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [placeholder]=\"getPlaceholder('content.operator')\"\n formControlName=\"value\" />\n </div>\n @if (enableFieldedSearch()) {\n <div class=\"flex items-center gap-4\" formGroupName=\"title\">\n <span class=\"w-1/3 font-semibold\">{{ 'drawers.findInTitle' | transloco }}</span>\n <select\n id=\"title-operator\"\n class=\"hover:outline-primary focus:outline-primary border-foreground/10 bg-background hover:bg-muted focus:bg-muted h-8 w-full rounded-md border px-2 hover:outline focus:outline\"\n formControlName=\"operator\">\n @for (data of selectData; track $index) {\n <option [value]=\"data.operator\">{{ 'drawers.' + data.display | transloco }}</option>\n }\n </select>\n <input id=\"title-value\" type=\"text\" autocomplete=\"off\" spellcheck=\"false\" [placeholder]=\"getPlaceholder('title.operator')\" formControlName=\"value\" />\n </div>\n }\n\n <!-- TABS -->\n <h1 class=\"mt-4 text-xl font-bold\">{{ 'drawers.inScope' | transloco }}&nbsp;&quot;{{ currentTab() }}&quot;</h1>\n\n <Tabs>\n <TabsList variant=\"ghost\">\n @for (tab of tabs(); track $index) {\n <Tab class=\"w-fit\" [value]=\"tab.path\" [active]=\"tab.path === currentTab()\" (click)=\"onTabChange(tab.path)\">\n {{ tab.display | syslang | transloco }}\n </Tab>\n }\n </TabsList>\n </Tabs>\n\n <!-- FILTERS -->\n <h1 class=\"mt-4 text-xl font-bold\">{{ 'drawers.applyFilters' | transloco }}</h1>\n @for (filter of filters(); track $index) {\n <DropdownInput\n [suggestions]=\"suggestions()\"\n [selected]=\"getItems(filter.column)\"\n [label]=\"filter.display || filter.alias | syslang | transloco\"\n [placeholder]=\"'drawers.startTyping' | transloco\"\n [noResultLabel]=\"'drawers.noResult' | transloco\"\n (onFocus)=\"setFilterFocus($event, filter)\"\n (onKeyUp)=\"onInputTyping($event)\"\n (removeItem)=\"removeItem($event, filter)\"\n (addItem)=\"addItem($event, filter)\" />\n } @empty {\n {{ 'drawers.noFilters' | transloco }}\n }\n </section>\n </div>\n</div>\n", styles: [":host{--drawer-width: 46;--drawer-subdrawer-width: 400px;width:calc(100vw / 100 * var(--drawer-width) + var(--drawer-subdrawer-width));z-index:var(--z-drawer);grid-template-columns:0 1fr var(--drawer-subdrawer-width);transition:right .3s ease-in-out,transform .3s ease-in-out}:host[drawer-opened=true]{right:calc(var(--drawer-subdrawer-width) * -1);box-shadow:var(--drawer-box-shadow)}:host[drawer-extended=true]{width:100vw;right:calc(var(--spacing) * 0);grid-template-columns:1fr calc(var(--drawer-width) * 1%) var(--drawer-subdrawer-width);box-shadow:unset}:is() .dropdown{width:100%}:is() .dropdown-content{width:50%}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: DrawerNavbarComponent, selector: "DrawerNavbar, drawernavbar" }, { kind: "component", type: DropdownInputComponent, selector: "dropdown-input, DropdownInput", inputs: ["label", "placeholder", "noResultLabel", "suggestions", "selected"], outputs: ["onFocus", "onKeyUp", "removeItem", "addItem"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: TabsComponent, selector: "tabs, Tabs", inputs: ["class"] }, { kind: "component", type: TabComponent, selector: "tab, Tab", inputs: ["class", "variant", "shadow", "size", "decoration", "value", "active"], outputs: ["clicked"] }, { kind: "directive", type: TabsListComponent, selector: "tabs-list, TabsList", inputs: ["class", "variant", "size"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
9754
9926
  }
9755
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerAdvancedFiltersComponent, decorators: [{
9927
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerAdvancedFiltersComponent, decorators: [{
9756
9928
  type: Component,
9757
9929
  args: [{ selector: "advanced-filters", standalone: true, imports: [
9758
9930
  ReactiveFormsModule,
@@ -9838,8 +10010,8 @@ class EntitiesPanel {
9838
10010
  navigatePrev(entity, data) {
9839
10011
  this.navigate(entity, data, "prev");
9840
10012
  }
9841
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EntitiesPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
9842
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: EntitiesPanel, isStandalone: true, selector: "entities-panel,EntitiesPanel,entitiesPanel", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
10013
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: EntitiesPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
10014
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: EntitiesPanel, isStandalone: true, selector: "entities-panel,EntitiesPanel,entitiesPanel", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
9843
10015
  <details class="group/parent" name="advanced-search-panels">
9844
10016
  <summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
9845
10017
  <p class="flex items-baseline gap-2 font-semibold capitalize">
@@ -9896,7 +10068,7 @@ class EntitiesPanel {
9896
10068
  </ng-template>
9897
10069
  `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "component", type: ChevronLeftIconComponent, selector: "chevron-left, ChevronLeft, chevronleft", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
9898
10070
  }
9899
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EntitiesPanel, decorators: [{
10071
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: EntitiesPanel, decorators: [{
9900
10072
  type: Component,
9901
10073
  args: [{
9902
10074
  selector: "entities-panel,EntitiesPanel,entitiesPanel",
@@ -9985,8 +10157,8 @@ class ExtractsPanel {
9985
10157
  this.previewService.events.set("scrollTo");
9986
10158
  this.previewService.sendMessage({ action: "select", id: `${category}_${index}`, usePassageHighlighter });
9987
10159
  }
9988
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ExtractsPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
9989
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ExtractsPanel, isStandalone: true, selector: "extracts-panel, ExtractsPanel, extractspanel", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
10160
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExtractsPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
10161
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ExtractsPanel, isStandalone: true, selector: "extracts-panel, ExtractsPanel, extractspanel", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
9990
10162
  <details class="group" name="advanced-search-panels" open>
9991
10163
  <summary [class]="cn('sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3', '')">
9992
10164
  <p class="flex items-baseline gap-2 font-semibold">
@@ -10015,7 +10187,7 @@ class ExtractsPanel {
10015
10187
  </details>
10016
10188
  `, isInline: true, dependencies: [{ kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
10017
10189
  }
10018
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ExtractsPanel, decorators: [{
10190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExtractsPanel, decorators: [{
10019
10191
  type: Component,
10020
10192
  args: [{
10021
10193
  selector: "extracts-panel, ExtractsPanel, extractspanel",
@@ -10061,8 +10233,8 @@ class LabelsPanel {
10061
10233
  const privateLabels = articleRecord[this.labels.private];
10062
10234
  return (publicLabels && publicLabels.length > 0) || (privateLabels && privateLabels.length > 0);
10063
10235
  }, ...(ngDevMode ? [{ debugName: "hasLabels" }] : []));
10064
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: LabelsPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
10065
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: LabelsPanel, isStandalone: true, selector: "labels-panel, LabelsPanel, labelspanel", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
10236
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelsPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
10237
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: LabelsPanel, isStandalone: true, selector: "labels-panel, LabelsPanel, labelspanel", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
10066
10238
  @if (hasLabels()) {
10067
10239
  <details class="group" name="advanced-search-panels">
10068
10240
  <summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
@@ -10089,7 +10261,7 @@ class LabelsPanel {
10089
10261
  }
10090
10262
  `, isInline: true, dependencies: [{ kind: "component", type: MetadataComponent, selector: "Metadata, metadata", inputs: ["class", "variant", "metadata", "article", "limit"], outputs: ["click"], exportAs: ["metadata"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
10091
10263
  }
10092
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: LabelsPanel, decorators: [{
10264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelsPanel, decorators: [{
10093
10265
  type: Component,
10094
10266
  args: [{
10095
10267
  selector: "labels-panel, LabelsPanel, labelspanel",
@@ -10127,6 +10299,7 @@ class SimilarDocumentsPanel {
10127
10299
  queryParamsStore = inject(QueryParamsStore);
10128
10300
  article = input.required(...(ngDevMode ? [{ debugName: "article" }] : []));
10129
10301
  strategy = input("stack", ...(ngDevMode ? [{ debugName: "strategy" }] : []));
10302
+ selected = output();
10130
10303
  queryName = computed(() => this.queryParamsStore.getQuery().name, ...(ngDevMode ? [{ debugName: "queryName" }] : []));
10131
10304
  similarDocumentsResource = resource({
10132
10305
  params: () => {
@@ -10145,8 +10318,8 @@ class SimilarDocumentsPanel {
10145
10318
  }
10146
10319
  return [];
10147
10320
  }, ...(ngDevMode ? [{ debugName: "similarDocuments" }] : []));
10148
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SimilarDocumentsPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
10149
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: SimilarDocumentsPanel, isStandalone: true, selector: "similar-documents-panel, SimilarDocumentsPanel, similardocumentspanel", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, strategy: { classPropertyName: "strategy", publicName: "strategy", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
10321
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SimilarDocumentsPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
10322
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: SimilarDocumentsPanel, isStandalone: true, selector: "similar-documents-panel, SimilarDocumentsPanel, similardocumentspanel", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, strategy: { classPropertyName: "strategy", publicName: "strategy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, ngImport: i0, template: `
10150
10323
  @if (similarDocuments().length > 0) {
10151
10324
  <details class="group" name="advanced-search-panels">
10152
10325
  <summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
@@ -10161,7 +10334,7 @@ class SimilarDocumentsPanel {
10161
10334
  <div>
10162
10335
  <ul class="mb-2 mt-4 flex flex-col flex-wrap px-2" role="list">
10163
10336
  @for (document of similarDocuments(); track $index) {
10164
- <li role="listitem" selectArticleOnClick [article]="document" [strategy]="strategy() || 'stack'">
10337
+ <li role="listitem" selectArticleOnClick [article]="document" [strategy]="strategy() || 'stack'" (selected)="selected.emit(document)">
10165
10338
  <div class="text-primary flex size-5 items-center justify-center rounded-full">
10166
10339
  <source [collection]="article().collection" [connector]="article().connector" class="text-xs" />
10167
10340
  </div>
@@ -10173,9 +10346,9 @@ class SimilarDocumentsPanel {
10173
10346
  </div>
10174
10347
  </details>
10175
10348
  }
10176
- `, isInline: true, dependencies: [{ kind: "directive", type: SelectArticleOnClickDirective, selector: "[selectArticleOnClick]", inputs: ["article", "strategy", "redirectUrl"] }, { kind: "component", type: SourceComponent, selector: "source, Source", inputs: ["collection", "connector"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
10349
+ `, isInline: true, dependencies: [{ kind: "directive", type: SelectArticleOnClickDirective, selector: "[selectArticleOnClick]", inputs: ["article", "strategy", "redirectUrl"], outputs: ["selected"] }, { kind: "component", type: SourceComponent, selector: "source, Source", inputs: ["collection", "connector"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
10177
10350
  }
10178
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SimilarDocumentsPanel, decorators: [{
10351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SimilarDocumentsPanel, decorators: [{
10179
10352
  type: Component,
10180
10353
  args: [{
10181
10354
  selector: "similar-documents-panel, SimilarDocumentsPanel, similardocumentspanel",
@@ -10195,7 +10368,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
10195
10368
  <div>
10196
10369
  <ul class="mb-2 mt-4 flex flex-col flex-wrap px-2" role="list">
10197
10370
  @for (document of similarDocuments(); track $index) {
10198
- <li role="listitem" selectArticleOnClick [article]="document" [strategy]="strategy() || 'stack'">
10371
+ <li role="listitem" selectArticleOnClick [article]="document" [strategy]="strategy() || 'stack'" (selected)="selected.emit(document)">
10199
10372
  <div class="text-primary flex size-5 items-center justify-center rounded-full">
10200
10373
  <source [collection]="article().collection" [connector]="article().connector" class="text-xs" />
10201
10374
  </div>
@@ -10209,29 +10382,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
10209
10382
  }
10210
10383
  `
10211
10384
  }]
10212
- }], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: true }] }], strategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "strategy", required: false }] }] } });
10385
+ }], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: true }] }], strategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "strategy", required: false }] }], selected: [{ type: i0.Output, args: ["selected"] }] } });
10213
10386
 
10214
10387
  class AdvancedSearchComponent {
10215
10388
  cn = cn;
10216
10389
  article = input.required(...(ngDevMode ? [{ debugName: "article" }] : []));
10217
10390
  previewStrategy = input(undefined, ...(ngDevMode ? [{ debugName: "previewStrategy" }] : []));
10391
+ selected = output();
10218
10392
  selectionStore = inject(SelectionStore);
10219
10393
  queryParamsStore = inject(QueryParamsStore);
10220
10394
  queryText = linkedSignal(...(ngDevMode ? [{ debugName: "queryText", source: () => {
10221
10395
  const { queryText } = getState(this.selectionStore);
10222
10396
  return queryText;
10223
10397
  },
10224
- computation: queryText => {
10225
- const text = queryText || '';
10226
- return text ? text.trim() : '';
10398
+ computation: (queryText) => {
10399
+ const text = queryText || "";
10400
+ return text ? text.trim() : "";
10227
10401
  } }] : [{
10228
10402
  source: () => {
10229
10403
  const { queryText } = getState(this.selectionStore);
10230
10404
  return queryText;
10231
10405
  },
10232
- computation: queryText => {
10233
- const text = queryText || '';
10234
- return text ? text.trim() : '';
10406
+ computation: (queryText) => {
10407
+ const text = queryText || "";
10408
+ return text ? text.trim() : "";
10235
10409
  }
10236
10410
  }]));
10237
10411
  queryName = computed(() => this.queryParamsStore.getQuery().name, ...(ngDevMode ? [{ debugName: "queryName" }] : []));
@@ -10239,15 +10413,23 @@ class AdvancedSearchComponent {
10239
10413
  this.selectionStore.update({ queryText: this.queryText() });
10240
10414
  }
10241
10415
  clearInput() {
10242
- this.queryText.set('');
10416
+ this.queryText.set("");
10243
10417
  }
10244
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AdvancedSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10245
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AdvancedSearchComponent, isStandalone: true, selector: "advanced-search", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, previewStrategy: { classPropertyName: "previewStrategy", publicName: "previewStrategy", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslocoScope('drawers')], ngImport: i0, template: "@if (article()) {\n <div\n [class]=\"\n cn(\n 'scroll-stable flex flex-col overflow-y-auto pb-6 pl-6 pr-3',\n '[&_details]:border-muted-foreground/18 [&_details]:border-b',\n '[&_details>summary]:bg-menu [&_details_details]:last:border-b-0',\n '[&_details>summary>i>svg]:transition-transform [&_details>summary>i>svg]:duration-300',\n '[&>details>summary>i>svg]:group-open/parent:rotate-180'\n )\n \">\n <section class=\"mb-4 mt-6 flex w-full flex-col gap-6\">\n <header\n id=\"panel-control\"\n class=\"focus-within:outline-primary not-focus-within:hover:outline-muted-foreground group flex rounded focus-within:outline hover:outline\">\n <div class=\"bg-muted flex grow items-center gap-2 rounded-e-none rounded-s px-3\">\n <input\n id=\"advanced-search-input\"\n type=\"search\"\n class=\"grow focus:outline-none\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [attr.placeholder]=\"'drawers.inputPlaceholder' | transloco\"\n [attr.aria-label]=\"'drawers.inputPlaceholder' | transloco\"\n [ngModel]=\"queryText()\"\n (ngModelChange)=\"queryText.set($event)\"\n (keydown.enter)=\"executeSearch()\" />\n\n @if (queryText() !== '') {\n <button\n variant=\"icon\"\n size=\"xs\"\n [attr.title]=\"'clear' | transloco\"\n [attr.aria-label]=\"'clear' | transloco\"\n (click)=\"clearInput()\"\n (keydown.enter)=\"clearInput()\">\n <i class=\"fa-fw far fa-xmark\"></i>\n </button>\n }\n </div>\n\n <button\n size=\"default\"\n class=\"size-8 rounded-e rounded-s-none\"\n [disabled]=\"queryText() === '' || null\"\n [attr.title]=\"'search' | transloco\"\n [attr.aria-label]=\"'search' | transloco\"\n (click)=\"executeSearch()\">\n <i class=\"fa-fw far fa-magnifying-glass\"></i>\n </button>\n </header>\n </section>\n\n <!-- the same name is used everywhere to simulate an accordion -->\n <!-- extracts -->\n <ExtractsPanel [article]=\"article()\" />\n\n <!-- labels -->\n <LabelsPanel [article]=\"article()\" />\n\n <!-- entities -->\n <EntitiesPanel [article]=\"article()\" />\n\n <!-- similar documents -->\n <SimilarDocumentsPanel [article]=\"article()\" [strategy]=\"previewStrategy()\" />\n </div>\n}\n", styles: [":host{--panel-max-height: none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: SimilarDocumentsPanel, selector: "similar-documents-panel, SimilarDocumentsPanel, similardocumentspanel", inputs: ["article", "strategy"] }, { kind: "component", type: EntitiesPanel, selector: "entities-panel,EntitiesPanel,entitiesPanel", inputs: ["article"] }, { kind: "component", type: LabelsPanel, selector: "labels-panel, LabelsPanel, labelspanel", inputs: ["article"] }, { kind: "component", type: ExtractsPanel, selector: "extracts-panel, ExtractsPanel, extractspanel", inputs: ["article"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
10418
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AdvancedSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10419
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AdvancedSearchComponent, isStandalone: true, selector: "advanced-search", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, previewStrategy: { classPropertyName: "previewStrategy", publicName: "previewStrategy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, providers: [provideTranslocoScope("drawers")], ngImport: i0, template: "@if (article()) {\n <div\n [class]=\"\n cn(\n 'scroll-stable flex flex-col overflow-y-auto pb-6 pl-6 pr-3',\n '[&_details]:border-muted-foreground/18 [&_details]:border-b',\n '[&_details>summary]:bg-menu [&_details_details]:last:border-b-0',\n '[&_details>summary>i>svg]:transition-transform [&_details>summary>i>svg]:duration-300',\n '[&>details>summary>i>svg]:group-open/parent:rotate-180'\n )\n \">\n <section class=\"mb-4 mt-6 flex w-full flex-col gap-6\">\n <header\n id=\"panel-control\"\n class=\"focus-within:outline-primary not-focus-within:hover:outline-muted-foreground group flex rounded focus-within:outline hover:outline\">\n <div class=\"bg-muted flex grow items-center gap-2 rounded-e-none rounded-s px-3\">\n <input\n id=\"advanced-search-input\"\n type=\"search\"\n class=\"grow focus:outline-none\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [attr.placeholder]=\"'drawers.inputPlaceholder' | transloco\"\n [attr.aria-label]=\"'drawers.inputPlaceholder' | transloco\"\n [ngModel]=\"queryText()\"\n (ngModelChange)=\"queryText.set($event)\"\n (keydown.enter)=\"executeSearch()\" />\n\n @if (queryText() !== '') {\n <button\n variant=\"icon\"\n size=\"xs\"\n [attr.title]=\"'clear' | transloco\"\n [attr.aria-label]=\"'clear' | transloco\"\n (click)=\"clearInput()\"\n (keydown.enter)=\"clearInput()\">\n <i class=\"fa-fw far fa-xmark\"></i>\n </button>\n }\n </div>\n\n <button\n size=\"default\"\n class=\"size-8 rounded-e rounded-s-none\"\n [disabled]=\"queryText() === '' || null\"\n [attr.title]=\"'search' | transloco\"\n [attr.aria-label]=\"'search' | transloco\"\n (click)=\"executeSearch()\">\n <i class=\"fa-fw far fa-magnifying-glass\"></i>\n </button>\n </header>\n </section>\n\n <!-- the same name is used everywhere to simulate an accordion -->\n <!-- extracts -->\n <ExtractsPanel [article]=\"article()\" />\n\n <!-- labels -->\n <LabelsPanel [article]=\"article()\" />\n\n <!-- entities -->\n <EntitiesPanel [article]=\"article()\" />\n\n <!-- similar documents -->\n <SimilarDocumentsPanel [article]=\"article()\" [strategy]=\"previewStrategy()\" (selected)=\"selected.emit($event)\" />\n </div>\n}\n", styles: [":host{--panel-max-height: none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: SimilarDocumentsPanel, selector: "similar-documents-panel, SimilarDocumentsPanel, similardocumentspanel", inputs: ["article", "strategy"], outputs: ["selected"] }, { kind: "component", type: EntitiesPanel, selector: "entities-panel,EntitiesPanel,entitiesPanel", inputs: ["article"] }, { kind: "component", type: LabelsPanel, selector: "labels-panel, LabelsPanel, labelspanel", inputs: ["article"] }, { kind: "component", type: ExtractsPanel, selector: "extracts-panel, ExtractsPanel, extractspanel", inputs: ["article"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
10246
10420
  }
10247
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AdvancedSearchComponent, decorators: [{
10421
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AdvancedSearchComponent, decorators: [{
10248
10422
  type: Component,
10249
- args: [{ selector: 'advanced-search', standalone: true, providers: [provideTranslocoScope('drawers')], imports: [FormsModule, ButtonComponent, TranslocoPipe, SimilarDocumentsPanel, EntitiesPanel, LabelsPanel, ExtractsPanel], template: "@if (article()) {\n <div\n [class]=\"\n cn(\n 'scroll-stable flex flex-col overflow-y-auto pb-6 pl-6 pr-3',\n '[&_details]:border-muted-foreground/18 [&_details]:border-b',\n '[&_details>summary]:bg-menu [&_details_details]:last:border-b-0',\n '[&_details>summary>i>svg]:transition-transform [&_details>summary>i>svg]:duration-300',\n '[&>details>summary>i>svg]:group-open/parent:rotate-180'\n )\n \">\n <section class=\"mb-4 mt-6 flex w-full flex-col gap-6\">\n <header\n id=\"panel-control\"\n class=\"focus-within:outline-primary not-focus-within:hover:outline-muted-foreground group flex rounded focus-within:outline hover:outline\">\n <div class=\"bg-muted flex grow items-center gap-2 rounded-e-none rounded-s px-3\">\n <input\n id=\"advanced-search-input\"\n type=\"search\"\n class=\"grow focus:outline-none\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [attr.placeholder]=\"'drawers.inputPlaceholder' | transloco\"\n [attr.aria-label]=\"'drawers.inputPlaceholder' | transloco\"\n [ngModel]=\"queryText()\"\n (ngModelChange)=\"queryText.set($event)\"\n (keydown.enter)=\"executeSearch()\" />\n\n @if (queryText() !== '') {\n <button\n variant=\"icon\"\n size=\"xs\"\n [attr.title]=\"'clear' | transloco\"\n [attr.aria-label]=\"'clear' | transloco\"\n (click)=\"clearInput()\"\n (keydown.enter)=\"clearInput()\">\n <i class=\"fa-fw far fa-xmark\"></i>\n </button>\n }\n </div>\n\n <button\n size=\"default\"\n class=\"size-8 rounded-e rounded-s-none\"\n [disabled]=\"queryText() === '' || null\"\n [attr.title]=\"'search' | transloco\"\n [attr.aria-label]=\"'search' | transloco\"\n (click)=\"executeSearch()\">\n <i class=\"fa-fw far fa-magnifying-glass\"></i>\n </button>\n </header>\n </section>\n\n <!-- the same name is used everywhere to simulate an accordion -->\n <!-- extracts -->\n <ExtractsPanel [article]=\"article()\" />\n\n <!-- labels -->\n <LabelsPanel [article]=\"article()\" />\n\n <!-- entities -->\n <EntitiesPanel [article]=\"article()\" />\n\n <!-- similar documents -->\n <SimilarDocumentsPanel [article]=\"article()\" [strategy]=\"previewStrategy()\" />\n </div>\n}\n", styles: [":host{--panel-max-height: none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}\n"] }]
10250
- }], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: true }] }], previewStrategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "previewStrategy", required: false }] }] } });
10423
+ args: [{ selector: "advanced-search", standalone: true, providers: [provideTranslocoScope("drawers")], imports: [
10424
+ FormsModule,
10425
+ ButtonComponent,
10426
+ TranslocoPipe,
10427
+ SimilarDocumentsPanel,
10428
+ EntitiesPanel,
10429
+ LabelsPanel,
10430
+ ExtractsPanel
10431
+ ], template: "@if (article()) {\n <div\n [class]=\"\n cn(\n 'scroll-stable flex flex-col overflow-y-auto pb-6 pl-6 pr-3',\n '[&_details]:border-muted-foreground/18 [&_details]:border-b',\n '[&_details>summary]:bg-menu [&_details_details]:last:border-b-0',\n '[&_details>summary>i>svg]:transition-transform [&_details>summary>i>svg]:duration-300',\n '[&>details>summary>i>svg]:group-open/parent:rotate-180'\n )\n \">\n <section class=\"mb-4 mt-6 flex w-full flex-col gap-6\">\n <header\n id=\"panel-control\"\n class=\"focus-within:outline-primary not-focus-within:hover:outline-muted-foreground group flex rounded focus-within:outline hover:outline\">\n <div class=\"bg-muted flex grow items-center gap-2 rounded-e-none rounded-s px-3\">\n <input\n id=\"advanced-search-input\"\n type=\"search\"\n class=\"grow focus:outline-none\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [attr.placeholder]=\"'drawers.inputPlaceholder' | transloco\"\n [attr.aria-label]=\"'drawers.inputPlaceholder' | transloco\"\n [ngModel]=\"queryText()\"\n (ngModelChange)=\"queryText.set($event)\"\n (keydown.enter)=\"executeSearch()\" />\n\n @if (queryText() !== '') {\n <button\n variant=\"icon\"\n size=\"xs\"\n [attr.title]=\"'clear' | transloco\"\n [attr.aria-label]=\"'clear' | transloco\"\n (click)=\"clearInput()\"\n (keydown.enter)=\"clearInput()\">\n <i class=\"fa-fw far fa-xmark\"></i>\n </button>\n }\n </div>\n\n <button\n size=\"default\"\n class=\"size-8 rounded-e rounded-s-none\"\n [disabled]=\"queryText() === '' || null\"\n [attr.title]=\"'search' | transloco\"\n [attr.aria-label]=\"'search' | transloco\"\n (click)=\"executeSearch()\">\n <i class=\"fa-fw far fa-magnifying-glass\"></i>\n </button>\n </header>\n </section>\n\n <!-- the same name is used everywhere to simulate an accordion -->\n <!-- extracts -->\n <ExtractsPanel [article]=\"article()\" />\n\n <!-- labels -->\n <LabelsPanel [article]=\"article()\" />\n\n <!-- entities -->\n <EntitiesPanel [article]=\"article()\" />\n\n <!-- similar documents -->\n <SimilarDocumentsPanel [article]=\"article()\" [strategy]=\"previewStrategy()\" (selected)=\"selected.emit($event)\" />\n </div>\n}\n", styles: [":host{--panel-max-height: none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}\n"] }]
10432
+ }], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: true }] }], previewStrategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "previewStrategy", required: false }] }], selected: [{ type: i0.Output, args: ["selected"] }] } });
10251
10433
 
10252
10434
  const COMPONENTS_FOR_DOCUMENT_TYPE = new InjectionToken('COMPONENTS_FOR_DOCUMENT_TYPE');
10253
10435
  const GLOBAL_QUERY_NAME = new InjectionToken('GLOBAL_QUERY_NAME', {
@@ -10293,10 +10475,10 @@ class DrawerPreviewComponent extends DrawerComponent {
10293
10475
  }
10294
10476
  });
10295
10477
  }
10296
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerPreviewComponent, deps: [{ token: GLOBAL_QUERY_NAME }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
10297
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DrawerPreviewComponent, isStandalone: true, selector: "DrawerPreview, drawerpreview", inputs: { articleId: { classPropertyName: "articleId", publicName: "articleId", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "bg-transparent text-foreground" }, providers: [DrawerService, PreviewService], usesInheritance: true, ngImport: i0, template: "<!-- when the extended panel is open clicking in the backdrop panel close it -->\n<div (click)=\"drawer.toggleExtension()\" (keydown.escape)=\"drawer.toggleExtension()\" [attr.aria-hidden]=\"true\"></div>\n\n<div class=\"bg-menu flex overflow-auto\">\n <!-- Drawer handle when extended -->\n <div\n #drawerHandle\n class=\"fixed h-full w-[5px] select-none hover:cursor-ew-resize hover:bg-orange-300\"\n [ngClass]=\"{ hidden: drawer.isExtended() === false }\"></div>\n\n @if (previewType()) {\n <ng-container *ngComponentOutlet=\"previewType()\" />\n }\n</div>\n\n<!-- this is the extended panel -->\n@if (article()) {\n <div [class.invisible]=\"!drawer.isExtended()\" class=\"bg-menu border-foreground/18 flex flex-col border-l\">\n <div class=\"relative flex grow flex-col\">\n <advanced-search class=\"absolute h-full w-full overflow-y-auto\" [article]=\"article()!\" (close)=\"drawer.collapse()\" />\n </div>\n </div>\n}\n", styles: [":host{--drawer-width: 46;--drawer-subdrawer-width: 400px;display:grid;height:100%;top:0;right:-100%;justify-content:flex-end;width:calc(100vw / 100 * var(--drawer-width) + var(--drawer-subdrawer-width));z-index:var(--z-drawer);grid-template-columns:0 1fr var(--drawer-subdrawer-width);transition:right .3s ease-in-out,transform .3s ease-in-out}:host[drawer-opened=true]{right:calc(var(--drawer-subdrawer-width) * -1);box-shadow:var(--drawer-box-shadow)}:host[drawer-extended=true]{right:0;width:100vw;grid-template-columns:1fr calc(var(--drawer-width) * 1%) var(--drawer-subdrawer-width);box-shadow:unset}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: AdvancedSearchComponent, selector: "advanced-search", inputs: ["article", "previewStrategy"] }] });
10478
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerPreviewComponent, deps: [{ token: GLOBAL_QUERY_NAME }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
10479
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DrawerPreviewComponent, isStandalone: true, selector: "DrawerPreview, drawerpreview", inputs: { articleId: { classPropertyName: "articleId", publicName: "articleId", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "bg-transparent text-foreground" }, providers: [DrawerService, PreviewService], usesInheritance: true, ngImport: i0, template: "<!-- when the extended panel is open clicking in the backdrop panel close it -->\n<div (click)=\"drawer.toggleExtension()\" (keydown.escape)=\"drawer.toggleExtension()\" [attr.aria-hidden]=\"true\"></div>\n\n<div class=\"bg-menu flex overflow-auto\">\n <!-- Drawer handle when extended -->\n <div\n #drawerHandle\n class=\"fixed h-full w-[5px] select-none hover:cursor-ew-resize hover:bg-orange-300\"\n [ngClass]=\"{ hidden: drawer.isExtended() === false }\"></div>\n\n @if (previewType()) {\n <ng-container *ngComponentOutlet=\"previewType()\" />\n }\n</div>\n\n<!-- this is the extended panel -->\n@if (article()) {\n <div [class.invisible]=\"!drawer.isExtended()\" class=\"bg-menu border-foreground/18 flex flex-col border-l\">\n <div class=\"relative flex grow flex-col\">\n <advanced-search class=\"absolute h-full w-full overflow-y-auto\" [article]=\"article()!\" (close)=\"drawer.collapse()\" />\n </div>\n </div>\n}\n", styles: [":host{--drawer-width: 46;--drawer-subdrawer-width: 400px;display:grid;height:100%;top:0;right:-100%;justify-content:flex-end;width:calc(100vw / 100 * var(--drawer-width) + var(--drawer-subdrawer-width));z-index:var(--z-drawer);grid-template-columns:0 1fr var(--drawer-subdrawer-width);transition:right .3s ease-in-out,transform .3s ease-in-out}:host[drawer-opened=true]{right:calc(var(--drawer-subdrawer-width) * -1);box-shadow:var(--drawer-box-shadow)}:host[drawer-extended=true]{right:0;width:100vw;grid-template-columns:1fr calc(var(--drawer-width) * 1%) var(--drawer-subdrawer-width);box-shadow:unset}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: AdvancedSearchComponent, selector: "advanced-search", inputs: ["article", "previewStrategy"], outputs: ["selected"] }] });
10298
10480
  }
10299
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerPreviewComponent, decorators: [{
10481
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerPreviewComponent, decorators: [{
10300
10482
  type: Component,
10301
10483
  args: [{ selector: 'DrawerPreview, drawerpreview', standalone: true, imports: [NgClass, NgComponentOutlet, AdvancedSearchComponent], providers: [DrawerService, PreviewService], host: {
10302
10484
  class: 'bg-transparent text-foreground'
@@ -10403,10 +10585,10 @@ class DrawerStackComponent {
10403
10585
  drawer?.destroy();
10404
10586
  }, 250);
10405
10587
  }
10406
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerStackComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
10407
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DrawerStackComponent, isStandalone: true, selector: "DrawerStack, drawerstack", host: { properties: { "attr.drawer-opened": "drawerOpened()" } }, ngImport: i0, template: ``, isInline: true, styles: [":host{position:absolute;top:50%;right:0;--drawer-width: 46;--drawer-subdrawer-width: 400px;z-index:var(--z-drawer);transition:right .3s linear}:host[drawer-opened=true]{right:calc(1% * var(--drawer-width))}\n"] });
10588
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerStackComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
10589
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DrawerStackComponent, isStandalone: true, selector: "DrawerStack, drawerstack", host: { properties: { "attr.drawer-opened": "drawerOpened()" } }, ngImport: i0, template: ``, isInline: true, styles: [":host{position:absolute;top:50%;right:0;--drawer-width: 46;--drawer-subdrawer-width: 400px;z-index:var(--z-drawer);transition:right .3s linear}:host[drawer-opened=true]{right:calc(1% * var(--drawer-width))}\n"] });
10408
10590
  }
10409
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DrawerStackComponent, decorators: [{
10591
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerStackComponent, decorators: [{
10410
10592
  type: Component,
10411
10593
  args: [{ selector: 'DrawerStack, drawerstack', template: ``, host: {
10412
10594
  '[attr.drawer-opened]': 'drawerOpened()'
@@ -10439,8 +10621,8 @@ class FeedbackDialogComponent {
10439
10621
  this.dialog()?.close();
10440
10622
  notify.success(this.transloco.translate("feedback.feedbackSuccess"), { duration: 2000 });
10441
10623
  }
10442
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FeedbackDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10443
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: FeedbackDialogComponent, isStandalone: true, selector: "feedback-dialog, feedbackdialog, FeedbackDialog", inputs: { comment: { classPropertyName: "comment", publicName: "comment", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { comment: "commentChange" }, providers: [provideTranslocoScope("feedback")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
10624
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FeedbackDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10625
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: FeedbackDialogComponent, isStandalone: true, selector: "feedback-dialog, feedbackdialog, FeedbackDialog", inputs: { comment: { classPropertyName: "comment", publicName: "comment", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { comment: "commentChange" }, providers: [provideTranslocoScope("feedback")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
10444
10626
  <dialog #dialog>
10445
10627
  <DialogContent>
10446
10628
  <DialogHeader>
@@ -10469,7 +10651,7 @@ class FeedbackDialogComponent {
10469
10651
  </dialog>
10470
10652
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: DialogComponent, selector: "dialog, [dialog]", outputs: ["closed"], exportAs: ["dialog"] }, { kind: "component", type: DialogHeaderComponent, selector: "DialogHeader" }, { kind: "directive", type: DialogFooterComponent, selector: "DialogFooter", inputs: ["class"] }, { kind: "directive", type: DialogTitleComponent, selector: "DialogTitle", inputs: ["class"] }, { kind: "directive", type: DialogContentComponent, selector: "DialogContent", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
10471
10653
  }
10472
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FeedbackDialogComponent, decorators: [{
10654
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FeedbackDialogComponent, decorators: [{
10473
10655
  type: Component,
10474
10656
  args: [{
10475
10657
  selector: "feedback-dialog, feedbackdialog, FeedbackDialog",
@@ -10574,10 +10756,10 @@ class SearchFeedbackComponent {
10574
10756
  openFeedbackDialog(type) {
10575
10757
  this.feedbackDialog()?.open(type);
10576
10758
  }
10577
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SearchFeedbackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10578
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: SearchFeedbackComponent, isStandalone: true, selector: "feedback, Feedback", inputs: { pages: { classPropertyName: "pages", publicName: "pages", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onClose: "onClose" }, providers: [provideTranslocoScope('feedback')], viewQueries: [{ propertyName: "feedbackDialog", first: true, predicate: FeedbackDialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<menu>\n <button class=\"border border-foreground/18\" variant=\"outline\" title=\"{{ 'feedback.button' | transloco }}\">\n <i class=\"fa-fw far fa-commenting\" aria-hidden=\"true\"></i>\n {{ 'feedback.label' | transloco }}\n <i class=\"fa-fw fas fa-xmark ms-2\" (click)=\"close($event)\" aria-hidden=\"true\"></i>\n </button>\n\n <MenuContent>\n @if (!disliked()) {\n <menuitem (click)=\"like()\" [attr.aria-label]=\"'feedback.like' | transloco\">\n @if (liked()) {\n <i class=\"fa-fw fas fa-thumbs-up\"></i> {{ 'feedback.liked' | transloco }}\n } @else {\n <i class=\"fa-fw far fa-thumbs-up\"></i> {{ 'feedback.like' | transloco }}\n }\n </menuitem>\n }\n @if (!liked()) {\n <menuitem (click)=\"dislike()\" [attr.aria-label]=\"'feedback.dislike' | transloco\">\n @if (disliked()) {\n <i class=\"fa-fw fas fa-thumbs-down\"></i> {{ 'feedback.disliked' | transloco }}\n } @else {\n <i class=\"fa-fw far fa-thumbs-down\"></i> {{ 'feedback.dislike' | transloco }}\n }\n </menuitem>\n }\n @for (menu of menus; track $index) {\n <menuitem (click)=\"openFeedbackDialog(menu.type)\" [attr.aria-label]=\"'feedback.' + menu.type + '.title' | transloco\">\n <i class=\"fa-fw {{ menu.icon }}\"></i> {{ 'feedback.' + menu.type + '.title' | transloco }}\n </menuitem>\n }\n </MenuContent>\n</menu>\n\n<feedback-dialog />\n", dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: MenuComponent, selector: "menu, Menu", inputs: ["disabled"] }, { kind: "directive", type: MenuContentComponent, selector: "MenuContent, menucontent, menu-content", inputs: ["class", "position"] }, { kind: "directive", type: MenuItemComponent, selector: "menu-item, menuitem, MenuItem", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: FeedbackDialogComponent, selector: "feedback-dialog, feedbackdialog, FeedbackDialog", inputs: ["comment"], outputs: ["commentChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
10759
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchFeedbackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10760
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: SearchFeedbackComponent, isStandalone: true, selector: "feedback, Feedback", inputs: { pages: { classPropertyName: "pages", publicName: "pages", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onClose: "onClose" }, providers: [provideTranslocoScope('feedback')], viewQueries: [{ propertyName: "feedbackDialog", first: true, predicate: FeedbackDialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<menu>\n <button class=\"border border-foreground/18\" variant=\"outline\" title=\"{{ 'feedback.button' | transloco }}\">\n <i class=\"fa-fw far fa-commenting\" aria-hidden=\"true\"></i>\n {{ 'feedback.label' | transloco }}\n <i class=\"fa-fw fas fa-xmark ms-2\" (click)=\"close($event)\" aria-hidden=\"true\"></i>\n </button>\n\n <MenuContent>\n @if (!disliked()) {\n <menuitem (click)=\"like()\" [attr.aria-label]=\"'feedback.like' | transloco\">\n @if (liked()) {\n <i class=\"fa-fw fas fa-thumbs-up\"></i> {{ 'feedback.liked' | transloco }}\n } @else {\n <i class=\"fa-fw far fa-thumbs-up\"></i> {{ 'feedback.like' | transloco }}\n }\n </menuitem>\n }\n @if (!liked()) {\n <menuitem (click)=\"dislike()\" [attr.aria-label]=\"'feedback.dislike' | transloco\">\n @if (disliked()) {\n <i class=\"fa-fw fas fa-thumbs-down\"></i> {{ 'feedback.disliked' | transloco }}\n } @else {\n <i class=\"fa-fw far fa-thumbs-down\"></i> {{ 'feedback.dislike' | transloco }}\n }\n </menuitem>\n }\n @for (menu of menus; track $index) {\n <menuitem (click)=\"openFeedbackDialog(menu.type)\" [attr.aria-label]=\"'feedback.' + menu.type + '.title' | transloco\">\n <i class=\"fa-fw {{ menu.icon }}\"></i> {{ 'feedback.' + menu.type + '.title' | transloco }}\n </menuitem>\n }\n </MenuContent>\n</menu>\n\n<feedback-dialog />\n", dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: MenuComponent, selector: "menu, Menu", inputs: ["disabled"] }, { kind: "directive", type: MenuContentComponent, selector: "MenuContent, menucontent, menu-content", inputs: ["class", "position"] }, { kind: "directive", type: MenuItemComponent, selector: "menu-item, menuitem, MenuItem", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: FeedbackDialogComponent, selector: "feedback-dialog, feedbackdialog, FeedbackDialog", inputs: ["comment"], outputs: ["commentChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
10579
10761
  }
10580
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SearchFeedbackComponent, decorators: [{
10762
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchFeedbackComponent, decorators: [{
10581
10763
  type: Component,
10582
10764
  args: [{ selector: 'feedback, Feedback', standalone: true, imports: [ButtonComponent, MenuComponent, MenuContentComponent, MenuItemComponent, TranslocoPipe, FeedbackDialogComponent], providers: [provideTranslocoScope('feedback')], template: "<menu>\n <button class=\"border border-foreground/18\" variant=\"outline\" title=\"{{ 'feedback.button' | transloco }}\">\n <i class=\"fa-fw far fa-commenting\" aria-hidden=\"true\"></i>\n {{ 'feedback.label' | transloco }}\n <i class=\"fa-fw fas fa-xmark ms-2\" (click)=\"close($event)\" aria-hidden=\"true\"></i>\n </button>\n\n <MenuContent>\n @if (!disliked()) {\n <menuitem (click)=\"like()\" [attr.aria-label]=\"'feedback.like' | transloco\">\n @if (liked()) {\n <i class=\"fa-fw fas fa-thumbs-up\"></i> {{ 'feedback.liked' | transloco }}\n } @else {\n <i class=\"fa-fw far fa-thumbs-up\"></i> {{ 'feedback.like' | transloco }}\n }\n </menuitem>\n }\n @if (!liked()) {\n <menuitem (click)=\"dislike()\" [attr.aria-label]=\"'feedback.dislike' | transloco\">\n @if (disliked()) {\n <i class=\"fa-fw fas fa-thumbs-down\"></i> {{ 'feedback.disliked' | transloco }}\n } @else {\n <i class=\"fa-fw far fa-thumbs-down\"></i> {{ 'feedback.dislike' | transloco }}\n }\n </menuitem>\n }\n @for (menu of menus; track $index) {\n <menuitem (click)=\"openFeedbackDialog(menu.type)\" [attr.aria-label]=\"'feedback.' + menu.type + '.title' | transloco\">\n <i class=\"fa-fw {{ menu.icon }}\"></i> {{ 'feedback.' + menu.type + '.title' | transloco }}\n </menuitem>\n }\n </MenuContent>\n</menu>\n\n<feedback-dialog />\n" }]
10583
10765
  }], propDecorators: { onClose: [{ type: i0.Output, args: ["onClose"] }], feedbackDialog: [{ type: i0.ViewChild, args: [i0.forwardRef(() => FeedbackDialogComponent), { isSignal: true }] }], pages: [{ type: i0.Input, args: [{ isSignal: true, alias: "pages", required: true }] }] } });
@@ -10596,6 +10778,8 @@ class AggregationItemComponent {
10596
10778
  appStore = inject(AppStore);
10597
10779
  queryParamsStore = inject(QueryParamsStore);
10598
10780
  searchText = inject(AggregationComponent).searchText;
10781
+ // is the count of items displayed, default to false
10782
+ showCount = computed(() => this.appStore.general()?.features?.showAggregationItemCount ?? false, ...(ngDevMode ? [{ debugName: "showCount" }] : []));
10599
10783
  quickFilter = computed(() => this.appStore.general()?.features?.quickFilter, ...(ngDevMode ? [{ debugName: "quickFilter" }] : []));
10600
10784
  linkChildren = computed(() => this.appStore.general()?.features?.filterLinkChildren, ...(ngDevMode ? [{ debugName: "linkChildren" }] : []));
10601
10785
  isFiltered = computed(() => {
@@ -10678,12 +10862,12 @@ class AggregationItemComponent {
10678
10862
  this.node().$selectedVisually = false;
10679
10863
  }
10680
10864
  }
10681
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AggregationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10682
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AggregationItemComponent, isStandalone: true, selector: "aggregation-item, AggregationItem, aggregationitem", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, path: { classPropertyName: "path", publicName: "path", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect", onOpen: "onOpen", onFilter: "onFilter" }, host: { properties: { "attr.disabled": "this.disabled" } }, ngImport: i0, template: "<a\n role=\"listitem\"\n [attr.aria-selected]=\"node().$selected || node().$selectedVisually\"\n [attr.aria-label]=\"name() | syslang\"\n [style.--level]=\"level()\"\n [class]=\"\n cn(\n 'flex grow items-center gap-2 p-1 leading-7',\n node().count === 0 && 'disabled pointer-events-none text-neutral-300',\n (node().$selected || node().$selectedVisually) && 'bg-primary-100 text-primary'\n )\n \"\n (click)=\"select(node(), $event, true)\">\n <!-- chrevron is visible only if the node has children -->\n <button (click)=\"open($event, node())\" class=\"transition-transform ease-in hover:scale-125\" aria-label=\"Open\">\n <ChevronRight [class]=\"cn('size-4 translate-x-1', node().$opened && 'rotate-90', !node().hasChildren && 'hidden')\" width=\"16\" height=\"16\" />\n </button>\n\n <input\n type=\"checkbox\"\n role=\"checkbox\"\n value=\"{{ node().value }}\"\n [attr.disabled]=\"node().count === 0 ? true : null\"\n [attr.aria-disabled]=\"node().count === 0\"\n (keydown.enter)=\"select(node(), $event)\"\n [checked]=\"node().$selected || node().$selectedVisually\" />\n\n @if (node().icon) {\n <i class=\"fa-fw {{ node().icon }} self-center justify-self-center\" aria-hidden=\"true\"></i>\n }\n <p\n [class]=\"cn('line-clamp-1 text-ellipsis break-all', quickFilter() && 'hover:underline')\"\n [title]=\"quickFilter() ? ((isFiltered() ? 'filters.removeFilter' : 'filters.filter') | transloco) : (name() | syslang)\"\n (click)=\"onTextClick($event)\">\n @for (chunk of (name() | syslang) ?? '' | highlightWord: searchText() : 10; track $index) {\n <span [class]=\"{ 'font-bold': chunk.match }\" aria-hidden=\"true\">{{ chunk.text }}</span>\n }\n </p>\n</a>\n\n@if (node().hasChildren && node().$opened) {\n @for (item of node().items; track $index) {\n <AggregationItem\n [node]=\"item\"\n [path]=\"childrenPath()\"\n [field]=\"field()\"\n (onOpen)=\"onOpen.emit($event)\"\n (onFilter)=\"onFilter.emit($event)\"\n (onSelect)=\"onChildSelect($event)\" />\n }\n}\n", styles: [":host{display:block;-webkit-user-select:none;user-select:none}:host a{padding-left:calc((var(--agg-tree-indent, .5rem) * var(--level)))}a{line-height:var(--agg-item-height, inherit)}\n"], dependencies: [{ kind: "component", type: AggregationItemComponent, selector: "aggregation-item, AggregationItem, aggregationitem", inputs: ["node", "path", "field"], outputs: ["onSelect", "onOpen", "onFilter"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "pipe", type: HighlightWordPipe, name: "highlightWord" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
10865
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AggregationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10866
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AggregationItemComponent, isStandalone: true, selector: "aggregation-item, AggregationItem, aggregationitem", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, path: { classPropertyName: "path", publicName: "path", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect", onOpen: "onOpen", onFilter: "onFilter" }, host: { properties: { "attr.disabled": "this.disabled" } }, ngImport: i0, template: "<a\n role=\"listitem\"\n [attr.aria-selected]=\"node().$selected || node().$selectedVisually\"\n [attr.aria-label]=\"name() | syslang\"\n [style.--level]=\"level()\"\n [class]=\"\n cn(\n 'flex grow items-center gap-2 p-1 leading-7',\n node().count === 0 && 'disabled pointer-events-none text-neutral-300',\n (node().$selected || node().$selectedVisually) && 'bg-primary-100 text-primary'\n )\n \"\n (click)=\"select(node(), $event, true)\">\n <!-- chrevron is visible only if the node has children -->\n <button (click)=\"open($event, node())\" class=\"transition-transform ease-in hover:scale-125\" aria-label=\"Open\">\n <ChevronRight [class]=\"cn('size-4 translate-x-1', node().$opened && 'rotate-90', !node().hasChildren && 'hidden')\" width=\"16\" height=\"16\" />\n </button>\n\n <input\n type=\"checkbox\"\n role=\"checkbox\"\n value=\"{{ node().value }}\"\n [attr.disabled]=\"node().count === 0 ? true : null\"\n [attr.aria-disabled]=\"node().count === 0\"\n (keydown.enter)=\"select(node(), $event)\"\n [checked]=\"node().$selected || node().$selectedVisually\" />\n\n @if (node().icon) {\n <i class=\"fa-fw {{ node().icon }} self-center justify-self-center\" aria-hidden=\"true\"></i>\n }\n <span\n [class]=\"cn('line-clamp-1 text-ellipsis break-all', quickFilter() && 'hover:underline')\"\n [title]=\"quickFilter() ? ((isFiltered() ? 'filters.removeFilter' : 'filters.filter') | transloco) : (name() | syslang)\"\n (click)=\"onTextClick($event)\">\n @for (chunk of (name() | syslang) ?? '' | highlightWord: searchText() : 10; track $index) {\n <span [class]=\"{ 'font-bold': chunk.match }\" aria-hidden=\"true\">{{ chunk.text }}</span>\n }\n </span>\n @if(showCount() && node().count > 0) {\n <span class=\"ml-auto empty:hidden px-1 text-xs\" aria-hidden=\"true\">{{ node().count }}</span>\n }\n</a>\n\n@if (node().hasChildren && node().$opened) {\n @for (item of node().items; track $index) {\n <AggregationItem\n [node]=\"item\"\n [path]=\"childrenPath()\"\n [field]=\"field()\"\n (onOpen)=\"onOpen.emit($event)\"\n (onFilter)=\"onFilter.emit($event)\"\n (onSelect)=\"onChildSelect($event)\" />\n }\n}\n", styles: [":host{display:block;-webkit-user-select:none;user-select:none}:host a{padding-left:calc((var(--agg-tree-indent, .5rem) * var(--level)))}a{line-height:var(--agg-item-height, inherit)}\n"], dependencies: [{ kind: "component", type: AggregationItemComponent, selector: "aggregation-item, AggregationItem, aggregationitem", inputs: ["node", "path", "field"], outputs: ["onSelect", "onOpen", "onFilter"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "pipe", type: HighlightWordPipe, name: "highlightWord" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
10683
10867
  }
10684
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AggregationItemComponent, decorators: [{
10868
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AggregationItemComponent, decorators: [{
10685
10869
  type: Component,
10686
- args: [{ selector: "aggregation-item, AggregationItem, aggregationitem", standalone: true, imports: [HighlightWordPipe, ListItemComponent, SyslangPipe, ChevronRightIcon, TranslocoPipe], template: "<a\n role=\"listitem\"\n [attr.aria-selected]=\"node().$selected || node().$selectedVisually\"\n [attr.aria-label]=\"name() | syslang\"\n [style.--level]=\"level()\"\n [class]=\"\n cn(\n 'flex grow items-center gap-2 p-1 leading-7',\n node().count === 0 && 'disabled pointer-events-none text-neutral-300',\n (node().$selected || node().$selectedVisually) && 'bg-primary-100 text-primary'\n )\n \"\n (click)=\"select(node(), $event, true)\">\n <!-- chrevron is visible only if the node has children -->\n <button (click)=\"open($event, node())\" class=\"transition-transform ease-in hover:scale-125\" aria-label=\"Open\">\n <ChevronRight [class]=\"cn('size-4 translate-x-1', node().$opened && 'rotate-90', !node().hasChildren && 'hidden')\" width=\"16\" height=\"16\" />\n </button>\n\n <input\n type=\"checkbox\"\n role=\"checkbox\"\n value=\"{{ node().value }}\"\n [attr.disabled]=\"node().count === 0 ? true : null\"\n [attr.aria-disabled]=\"node().count === 0\"\n (keydown.enter)=\"select(node(), $event)\"\n [checked]=\"node().$selected || node().$selectedVisually\" />\n\n @if (node().icon) {\n <i class=\"fa-fw {{ node().icon }} self-center justify-self-center\" aria-hidden=\"true\"></i>\n }\n <p\n [class]=\"cn('line-clamp-1 text-ellipsis break-all', quickFilter() && 'hover:underline')\"\n [title]=\"quickFilter() ? ((isFiltered() ? 'filters.removeFilter' : 'filters.filter') | transloco) : (name() | syslang)\"\n (click)=\"onTextClick($event)\">\n @for (chunk of (name() | syslang) ?? '' | highlightWord: searchText() : 10; track $index) {\n <span [class]=\"{ 'font-bold': chunk.match }\" aria-hidden=\"true\">{{ chunk.text }}</span>\n }\n </p>\n</a>\n\n@if (node().hasChildren && node().$opened) {\n @for (item of node().items; track $index) {\n <AggregationItem\n [node]=\"item\"\n [path]=\"childrenPath()\"\n [field]=\"field()\"\n (onOpen)=\"onOpen.emit($event)\"\n (onFilter)=\"onFilter.emit($event)\"\n (onSelect)=\"onChildSelect($event)\" />\n }\n}\n", styles: [":host{display:block;-webkit-user-select:none;user-select:none}:host a{padding-left:calc((var(--agg-tree-indent, .5rem) * var(--level)))}a{line-height:var(--agg-item-height, inherit)}\n"] }]
10870
+ args: [{ selector: "aggregation-item, AggregationItem, aggregationitem", standalone: true, imports: [HighlightWordPipe, ListItemComponent, SyslangPipe, ChevronRightIcon, TranslocoPipe], template: "<a\n role=\"listitem\"\n [attr.aria-selected]=\"node().$selected || node().$selectedVisually\"\n [attr.aria-label]=\"name() | syslang\"\n [style.--level]=\"level()\"\n [class]=\"\n cn(\n 'flex grow items-center gap-2 p-1 leading-7',\n node().count === 0 && 'disabled pointer-events-none text-neutral-300',\n (node().$selected || node().$selectedVisually) && 'bg-primary-100 text-primary'\n )\n \"\n (click)=\"select(node(), $event, true)\">\n <!-- chrevron is visible only if the node has children -->\n <button (click)=\"open($event, node())\" class=\"transition-transform ease-in hover:scale-125\" aria-label=\"Open\">\n <ChevronRight [class]=\"cn('size-4 translate-x-1', node().$opened && 'rotate-90', !node().hasChildren && 'hidden')\" width=\"16\" height=\"16\" />\n </button>\n\n <input\n type=\"checkbox\"\n role=\"checkbox\"\n value=\"{{ node().value }}\"\n [attr.disabled]=\"node().count === 0 ? true : null\"\n [attr.aria-disabled]=\"node().count === 0\"\n (keydown.enter)=\"select(node(), $event)\"\n [checked]=\"node().$selected || node().$selectedVisually\" />\n\n @if (node().icon) {\n <i class=\"fa-fw {{ node().icon }} self-center justify-self-center\" aria-hidden=\"true\"></i>\n }\n <span\n [class]=\"cn('line-clamp-1 text-ellipsis break-all', quickFilter() && 'hover:underline')\"\n [title]=\"quickFilter() ? ((isFiltered() ? 'filters.removeFilter' : 'filters.filter') | transloco) : (name() | syslang)\"\n (click)=\"onTextClick($event)\">\n @for (chunk of (name() | syslang) ?? '' | highlightWord: searchText() : 10; track $index) {\n <span [class]=\"{ 'font-bold': chunk.match }\" aria-hidden=\"true\">{{ chunk.text }}</span>\n }\n </span>\n @if(showCount() && node().count > 0) {\n <span class=\"ml-auto empty:hidden px-1 text-xs\" aria-hidden=\"true\">{{ node().count }}</span>\n }\n</a>\n\n@if (node().hasChildren && node().$opened) {\n @for (item of node().items; track $index) {\n <AggregationItem\n [node]=\"item\"\n [path]=\"childrenPath()\"\n [field]=\"field()\"\n (onOpen)=\"onOpen.emit($event)\"\n (onFilter)=\"onFilter.emit($event)\"\n (onSelect)=\"onChildSelect($event)\" />\n }\n}\n", styles: [":host{display:block;-webkit-user-select:none;user-select:none}:host a{padding-left:calc((var(--agg-tree-indent, .5rem) * var(--level)))}a{line-height:var(--agg-item-height, inherit)}\n"] }]
10687
10871
  }], propDecorators: { disabled: [{
10688
10872
  type: HostBinding,
10689
10873
  args: ["attr.disabled"]
@@ -10911,6 +11095,8 @@ class AggregationComponent {
10911
11095
  this.items().forEach((item) => {
10912
11096
  item.$selected = false;
10913
11097
  });
11098
+ sessionStorage.setItem(`agg-${this.aggregation()?.column}`, JSON.stringify([...this.items()]));
11099
+ this.selection.set(false);
10914
11100
  this.isAllSelected.set(false);
10915
11101
  }
10916
11102
  }
@@ -11226,26 +11412,36 @@ class AggregationComponent {
11226
11412
  currentFilters.filters.forEach((filter) => {
11227
11413
  // check if the filter is already present in the current items
11228
11414
  // if not, add it to the current items
11229
- const found = currentItems.find((item) => item.value === filter.value);
11415
+ const found = currentItems.find((item) => item.value.toLocaleLowerCase() === filter.value?.toLocaleLowerCase());
11230
11416
  if (!found) {
11417
+ // add it to the current items
11231
11418
  currentItems.unshift({
11232
11419
  value: filter.value,
11233
11420
  display: filter.display,
11234
11421
  $selected: true
11235
11422
  });
11236
11423
  }
11424
+ else {
11425
+ // mark as selected the existing item
11426
+ found.$selected = true;
11427
+ }
11237
11428
  });
11238
11429
  }
11239
11430
  else {
11240
11431
  // single filter
11241
- const found = currentItems.find((item) => item.value === currentFilters.value);
11432
+ const found = currentItems.find((item) => item.value.toLocaleLowerCase() === currentFilters.value?.toLocaleLowerCase());
11242
11433
  if (!found) {
11434
+ // add it to the current items
11243
11435
  currentItems.push({
11244
11436
  value: currentFilters.value,
11245
11437
  display: currentFilters.display,
11246
11438
  $selected: true
11247
11439
  });
11248
11440
  }
11441
+ else {
11442
+ // mark as selected the existing item
11443
+ found.$selected = true;
11444
+ }
11249
11445
  }
11250
11446
  }
11251
11447
  }
@@ -11301,10 +11497,10 @@ class AggregationComponent {
11301
11497
  return item;
11302
11498
  });
11303
11499
  }
11304
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AggregationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11305
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AggregationComponent, isStandalone: true, selector: "Aggregation, aggregation", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, column: { classPropertyName: "column", publicName: "column", isSignal: true, isRequired: true, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, showFiltersCount: { classPropertyName: "showFiltersCount", publicName: "showFiltersCount", isSignal: true, isRequired: false, transformFunction: null }, searchText: { classPropertyName: "searchText", publicName: "searchText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect", searchText: "searchTextChange" }, host: { properties: { "class": "cn(\"block h-[inherit] max-h-[inherit]\",class())" } }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<details (toggle)=\"onToggle($event)\" [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\n <summary [class.cursor-pointer]=\"collapsible() && !isEmpty()\" [class.text-muted-foreground]=\"isEmpty()\"\n class=\"m-0 mt-1 flex gap-1 h-8 w-full select-none items-center pl-1 font-semibold\" (click)=\"onHeaderClick($event)\">\n <ng-content select=\"label\">\n @if (aggregation()?.icon) {\n <i class=\"fa-fw {{ aggregation()?.icon }} mr-1\" aria-hidden=\"true\"></i>\n }\n <span class=\"grow\">{{ aggregation()?.display | syslang | transloco }}</span>\n </ng-content>\n\n @if (showFiltersCount() && filtersCount() > 0) {\n <!-- count -->\n <Badge size=\"xs\" class=\"ml-1 pb-0.5\">\n {{ filtersCount() }}\n </Badge>\n }\n <!-- apply filter block -->\n @if (!isCollapsed()) {\n <ButtonGroup>\n @if (hasFilters()) {\n <button variant=\"outline\" size=\"icon\" class=\"size-6\" [attr.title]=\"'filters.clearFilters' | transloco\"\n [attr.aria-label]=\"'filters.clearFilters' | transloco\" (click)=\"$event.stopPropagation(); clear()\">\n <i class=\"fa-fw far fa-filter-circle-xmark\"></i>\n </button>\n }\n @if (selection()) {\n <button variant=\"primary\" size=\"xs\" [attr.title]=\"'filters.applyFilters' | transloco\"\n [attr.aria-label]=\"'filters.applyFilters' | transloco\" (click)=\"$event.stopPropagation(); apply()\" class=\"px-1 h-4\">\n <FilterIcon class=\"size-4\"/>\n {{ 'filters.apply' | transloco }}\n </button>\n }\n\n <!-- select / unselect all -->\n @if (isAllSelected()) {\n <button variant=\"outline\" size=\"icon\" class=\"size-6\" [attr.title]=\"'filters.unselectAllFilters' | transloco\"\n [attr.aria-label]=\"'filters.unselectAllFilters' | transloco\" (click)=\"$event.stopPropagation(); unselectAll()\">\n <i class=\"fa-fw far fa-check-square\"></i>\n </button>\n } @else {\n <button variant=\"outline\" size=\"icon\" class=\"size-6\" [attr.title]=\"'filters.selectAllFilters' | transloco\"\n [attr.aria-label]=\"'filters.selectAllFilters' | transloco\" (click)=\"$event.stopPropagation(); selectAll()\">\n <i class=\"fa-fw far fa-square\"></i>\n </button>\n }\n </ButtonGroup>\n }\n\n @if (collapsible()) {\n <button variant=\"none\" title=\"Open/Close\"\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\n <chevronright />\n </button>\n }\n </summary>\n\n <!-- content wrapper -->\n @if (aggregation()?.searchable && items().length) {\n <InputGroup class=\"group/item mt-1\">\n <input #searchInput input-group id=\"aggregation-input-{{column()}}\" type=\"text\" [attr.placeholder]=\"'search' | transloco\" [(ngModel)]=\"searchText\" class=\"mt-1\"/>\n <InputGroupAddon>\n <SearchIcon class=\"text-foreground size-4 rotate-0 transition-[rotate] duration-500 group-focus-within/item:rotate-90\" />\n </InputGroupAddon>\n </InputGroup>\n }\n\n <ul class=\"scrollbar-thin max-h-[calc(var(--height,100%)-100px)] snap-y snap-start overflow-auto\" role=\"list\"\n [attr.aria-label]=\"aggregation()?.display | syslang | transloco\">\n @for (item of items(); track $index) {\n <AggregationItem [node]=\"item\" [path]=\"[]\" [field]=\"aggregation()?.column\" (onSelect)=\"select()\"\n (onOpen)=\"open($event)\" (onFilter)=\"quickFilter($event)\" />\n }\n </ul>\n @if (aggregation()?.$hasMore && this.searchedItems().length === 0) {\n <button decoration=\"underline\" class=\"mt-1 flex w-full justify-center\" [attr.aria-label]=\"'loadMore' | transloco\"\n (click)=\"loadMore()\">\n {{ 'loadMore' | transloco }}\n </button>\n }\n</details>\n", styles: ["AggregationItem:has(+AggregationItem){margin-bottom:var(--agg-item-gap, 0)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: AggregationItemComponent, selector: "aggregation-item, AggregationItem, aggregationitem", inputs: ["node", "path", "field"], outputs: ["onSelect", "onOpen", "onFilter"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "directive", type: ButtonGroup, selector: "button-group, ButtonGroup", inputs: ["class", "orientation"] }, { kind: "directive", type: InputGroupInput, selector: "input[input-group]", inputs: ["class", "type", "placeholder", "disabled"] }, { kind: "directive", type: InputGroupComponent, selector: "input-group, inputgroup, InputGroup", inputs: ["class"] }, { kind: "directive", type: InputGroupAddonComponent, selector: "input-group-addon, inputgroupaddon, InputGroupAddon", inputs: ["class", "align"] }, { kind: "component", type: SearchIcon, selector: "SearchIcon", inputs: ["class"] }, { kind: "component", type: FilterIcon, selector: "filter-icon, FilterIcon", inputs: ["class"] }, { kind: "pipe", type: SyslangPipe, name: "syslang" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
11500
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AggregationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11501
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AggregationComponent, isStandalone: true, selector: "Aggregation, aggregation", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, column: { classPropertyName: "column", publicName: "column", isSignal: true, isRequired: true, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, showFiltersCount: { classPropertyName: "showFiltersCount", publicName: "showFiltersCount", isSignal: true, isRequired: false, transformFunction: null }, searchText: { classPropertyName: "searchText", publicName: "searchText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect", searchText: "searchTextChange" }, host: { properties: { "class": "cn(\"block h-[inherit] max-h-[inherit]\",class())" } }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<details (toggle)=\"onToggle($event)\" [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\n <summary [class.cursor-pointer]=\"collapsible() && !isEmpty()\" [class.text-muted-foreground]=\"isEmpty()\"\n class=\"m-0 mt-1 flex gap-1 h-8 w-full select-none items-center pl-1 font-semibold\" (click)=\"onHeaderClick($event)\">\n <ng-content select=\"label\">\n @if (aggregation()?.icon) {\n <i class=\"fa-fw {{ aggregation()?.icon }} mr-1\" aria-hidden=\"true\"></i>\n }\n <span class=\"grow\">{{ aggregation()?.display | syslang | transloco }}</span>\n </ng-content>\n\n @if (showFiltersCount() && filtersCount() > 0) {\n <!-- count -->\n <Badge size=\"xs\" class=\"ml-1 pb-0.5\">\n {{ filtersCount() }}\n </Badge>\n }\n <!-- apply filter block -->\n @if (!isCollapsed()) {\n <ButtonGroup>\n @if (hasFilters()) {\n <button variant=\"outline\" size=\"icon\" class=\"size-6\" [attr.title]=\"'filters.clearFilters' | transloco\"\n [attr.aria-label]=\"'filters.clearFilters' | transloco\" (click)=\"$event.stopPropagation(); clear()\">\n <i class=\"fa-fw far fa-filter-circle-xmark\"></i>\n </button>\n }\n @if (selection()) {\n <button variant=\"primary\" size=\"xs\" [attr.title]=\"'filters.applyFilters' | transloco\"\n [attr.aria-label]=\"'filters.applyFilters' | transloco\" (click)=\"$event.stopPropagation(); apply()\" class=\"px-1 h-4\">\n <FilterIcon class=\"size-4\"/>\n {{ 'filters.apply' | transloco }}\n </button>\n }\n\n <!-- select / unselect all -->\n @if (isAllSelected()) {\n <button variant=\"outline\" size=\"icon\" class=\"size-6\" [attr.title]=\"'filters.unselectAllFilters' | transloco\"\n [attr.aria-label]=\"'filters.unselectAllFilters' | transloco\" (click)=\"$event.stopPropagation(); unselectAll()\">\n <i class=\"fa-fw far fa-check-square\"></i>\n </button>\n } @else {\n <button variant=\"outline\" size=\"icon\" class=\"size-6\" [attr.title]=\"'filters.selectAllFilters' | transloco\"\n [attr.aria-label]=\"'filters.selectAllFilters' | transloco\" (click)=\"$event.stopPropagation(); selectAll()\">\n <i class=\"fa-fw far fa-square\"></i>\n </button>\n }\n </ButtonGroup>\n }\n\n @if (collapsible()) {\n <button variant=\"none\" title=\"Open/Close\"\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\n <chevronright />\n </button>\n }\n </summary>\n\n <!-- content wrapper -->\n @if (aggregation()?.searchable && items().length) {\n <InputGroup class=\"group/item mt-1\">\n <input #searchInput input-group id=\"aggregation-input-{{column()}}\" type=\"text\" [attr.placeholder]=\"'search' | transloco\" [(ngModel)]=\"searchText\" class=\"mt-1\"/>\n <InputGroupAddon>\n <SearchIcon class=\"text-foreground size-4 rotate-0 transition-[rotate] duration-500 group-focus-within/item:rotate-90\" />\n </InputGroupAddon>\n </InputGroup>\n }\n\n <ul class=\"scrollbar-thin max-h-[calc(var(--height,100%)-100px)] snap-y snap-start overflow-auto\" role=\"list\"\n [attr.aria-label]=\"aggregation()?.display | syslang | transloco\">\n @for (item of items(); track $index) {\n <AggregationItem [node]=\"item\" [path]=\"[]\" [field]=\"aggregation()?.column\" (onSelect)=\"select()\"\n (onOpen)=\"open($event)\" (onFilter)=\"quickFilter($event)\" />\n }\n </ul>\n @if (aggregation()?.$hasMore && this.searchedItems().length === 0) {\n <button decoration=\"underline\" class=\"mt-1 flex w-full justify-center\" [attr.aria-label]=\"'loadMore' | transloco\"\n (click)=\"loadMore()\">\n {{ 'loadMore' | transloco }}\n </button>\n }\n</details>\n", styles: ["AggregationItem:has(+AggregationItem){margin-bottom:var(--agg-item-gap, 0)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: AggregationItemComponent, selector: "aggregation-item, AggregationItem, aggregationitem", inputs: ["node", "path", "field"], outputs: ["onSelect", "onOpen", "onFilter"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "directive", type: ButtonGroup, selector: "button-group, ButtonGroup", inputs: ["class", "orientation"] }, { kind: "directive", type: InputGroupInput, selector: "input[input-group]", inputs: ["class", "type", "placeholder", "disabled"] }, { kind: "directive", type: InputGroupComponent, selector: "input-group, inputgroup, InputGroup", inputs: ["class"] }, { kind: "directive", type: InputGroupAddonComponent, selector: "input-group-addon, inputgroupaddon, InputGroupAddon", inputs: ["class", "align"] }, { kind: "component", type: SearchIcon, selector: "SearchIcon", inputs: ["class"] }, { kind: "component", type: FilterIcon, selector: "filter-icon, FilterIcon", inputs: ["class"] }, { kind: "pipe", type: SyslangPipe, name: "syslang" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
11306
11502
  }
11307
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AggregationComponent, decorators: [{
11503
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AggregationComponent, decorators: [{
11308
11504
  type: Component,
11309
11505
  args: [{ selector: "Aggregation, aggregation", imports: [
11310
11506
  FormsModule,
@@ -11540,10 +11736,10 @@ class DateComponent extends AggregationComponent {
11540
11736
  });
11541
11737
  }
11542
11738
  }
11543
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DateComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
11544
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DateComponent, isStandalone: true, selector: "date-filter,DateFilter", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, displayEmptyDistributionIntervals: { classPropertyName: "displayEmptyDistributionIntervals", publicName: "displayEmptyDistributionIntervals", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "@container" }, providers: [provideTranslocoScope("filters")], viewQueries: [{ propertyName: "datepicker", first: true, predicate: DateRangePickerDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<details (toggle)=\"onToggle($event)\" [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\n <summary\n [class.cursor-pointer]=\"collapsible()\"\n class=\"m-0 flex h-8 w-full select-none items-center pl-1 font-semibold\"\n (click)=\"onHeaderClick($event)\">\n <ng-content select=\"label\">\n @if (aggregation()?.icon) {\n <i class=\"fa-fw {{ aggregation()?.icon }} mr-1\" aria-hidden=\"true\"></i>\n }\n <span class=\"grow\">{{ aggregation()?.display | syslang | transloco }}</span>\n </ng-content>\n\n @if (hasFilters()) {\n <button\n variant=\"ghost\"\n size=\"icon\"\n [attr.title]=\"'filters.clearFilters' | transloco\"\n [attr.aria-label]=\"'filters.clearFilters' | transloco\"\n (click)=\"clear()\"\n (keydown.enter)=\"clear()\">\n <i class=\"fa-fw far fa-filter-circle-xmark\" aria-hidden=\"true\"></i>\n </button>\n }\n\n @if (selection() && validSelection()) {\n <button\n variant=\"ghost\"\n size=\"icon\"\n [attr.title]=\"'filters.applyFilters' | transloco\"\n [attr.aria-label]=\"'filters.applyFilters' | transloco\"\n (click)=\"apply()\"\n (keydown.enter)=\"apply()\">\n <i class=\"fa-fw far fa-filter\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (collapsible()) {\n <button variant=\"none\" title=\"Open/Close\" class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\n <chevronright />\n </button>\n }\n </summary>\n\n <!-- content wrapper -->\n <form [formGroup]=\"form\">\n <ul class=\"flex flex-col gap-1 pt-2 scrollbar-thin max-h-[calc(var(--height,100%)-100px)] snap-y snap-start overflow-auto\" role=\"list\">\n @for (option of dateOptions(); track $index) {\n <li\n role=\"listitem\"\n tabindex=\"0\"\n (click)=\"radio.click()\"\n [attr.aria-label]=\"option.display | syslang | transloco\"\n [class]=\"\n cn(\n 'flex p-0 px-2 leading-7',\n form.get('option')?.value === option.display && 'bg-accent',\n option.hidden && 'hidden',\n option.disabled && 'disabled pointer-events-none text-neutral-300'\n )\n \"\n [attr.aria-hidden]=\"option.disabled\">\n <input\n #radio\n type=\"radio\"\n formControlName=\"option\"\n id=\"date-filter-{{ option.display }}\"\n [attr.disabled]=\"option.disabled ? true : null\"\n [attr.aria-disabled]=\"option.disabled\"\n (click)=\"select()\"\n value=\"{{ option.display }}\" />\n\n <label for=\"date-filter-{{ option.display }}\" class=\"grow cursor-pointer p-1\">\n {{ option.display | syslang | transloco }}\n </label>\n </li>\n }\n\n @if (allowCustomRange) {\n <li role=\"listitem\" aria-label=\"custom range\" class=\"flex px-2 leading-7\" [class.select]=\"form.get('option')?.value === 'custom-range'\">\n <input #radiorange type=\"radio\" formControlName=\"option\" id=\"date-filter-custom-range\" value=\"custom-range\" (click)=\"select()\" />\n\n <div\n class=\"flex @max-[340px]:flex-wrap grow gap-1 p-1 @container\"\n daterangepicker\n datepicker-buttons\n [datepicker-language]=\"lang()\"\n [datepicker-min]=\"form.get('customRange.from')?.value || undefined\"\n [datepicker-max]=\"form.get('customRange.to')?.value ?? today.toISOString()\"\n (click)=\"radiorange.click()\">\n <div class=\"flex gap-1\">\n <label for=\"datepicker-range-start\" class=\"min-w-10\">{{ 'from' | transloco }}</label>\n <input id=\"datepicker-range-start\" name=\"start\" type=\"text\" class=\"h-8 min-w-[13ch]\" />\n </div>\n <div class=\"flex gap-1\">\n <label for=\"datepicker-range-end\" class=\"text-right min-w-10\">{{ 'to' | transloco }}</label>\n <input id=\"datepicker-range-end\" name=\"end\" type=\"text\" class=\"h-8 min-w-[13ch]\" />\n </div>\n </div>\n </li>\n }\n </ul>\n </form>\n</details>\n", styles: [":host{display:block;width:340px;min-width:200px}ul[role=list]{scrollbar-width:thin}\n"], dependencies: [{ kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: DateRangePickerDirective, selector: "[daterangepicker]", inputs: ["datepicker-title", "datepicker-autohide", "datepicker-clear", "datepicker-today", "datepicker-buttons", "datepicker-today-highlight", "datepicker-language", "datepicker-format", "datepicker-max", "datepicker-min", "datepicker-orientation"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
11739
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DateComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
11740
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DateComponent, isStandalone: true, selector: "date-filter,DateFilter", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, displayEmptyDistributionIntervals: { classPropertyName: "displayEmptyDistributionIntervals", publicName: "displayEmptyDistributionIntervals", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "@container" }, providers: [provideTranslocoScope("filters")], viewQueries: [{ propertyName: "datepicker", first: true, predicate: DateRangePickerDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<details (toggle)=\"onToggle($event)\" [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\n <summary\n [class.cursor-pointer]=\"collapsible()\"\n class=\"m-0 flex h-8 w-full select-none items-center pl-1 font-semibold\"\n (click)=\"onHeaderClick($event)\">\n <ng-content select=\"label\">\n @if (aggregation()?.icon) {\n <i class=\"fa-fw {{ aggregation()?.icon }} mr-1\" aria-hidden=\"true\"></i>\n }\n <span class=\"grow\">{{ aggregation()?.display | syslang | transloco }}</span>\n </ng-content>\n\n @if (hasFilters()) {\n <button\n variant=\"ghost\"\n size=\"icon\"\n [attr.title]=\"'filters.clearFilters' | transloco\"\n [attr.aria-label]=\"'filters.clearFilters' | transloco\"\n (click)=\"clear()\"\n (keydown.enter)=\"clear()\">\n <i class=\"fa-fw far fa-filter-circle-xmark\" aria-hidden=\"true\"></i>\n </button>\n }\n\n @if (selection() && validSelection()) {\n <button\n variant=\"ghost\"\n size=\"icon\"\n [attr.title]=\"'filters.applyFilters' | transloco\"\n [attr.aria-label]=\"'filters.applyFilters' | transloco\"\n (click)=\"apply()\"\n (keydown.enter)=\"apply()\">\n <i class=\"fa-fw far fa-filter\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (collapsible()) {\n <button variant=\"none\" title=\"Open/Close\" class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\n <chevronright />\n </button>\n }\n </summary>\n\n <!-- content wrapper -->\n <form [formGroup]=\"form\">\n <ul class=\"flex flex-col gap-1 pt-2 scrollbar-thin max-h-[calc(var(--height,100%)-100px)] snap-y snap-start overflow-auto\" role=\"list\">\n @for (option of dateOptions(); track $index) {\n <li\n role=\"listitem\"\n tabindex=\"0\"\n (click)=\"radio.click()\"\n [attr.aria-label]=\"option.display | syslang | transloco\"\n [class]=\"\n cn(\n 'flex p-0 px-2 leading-7',\n form.get('option')?.value === option.display && 'bg-accent',\n option.hidden && 'hidden',\n option.disabled && 'disabled pointer-events-none text-neutral-300'\n )\n \"\n [attr.aria-hidden]=\"option.disabled\">\n <input\n #radio\n type=\"radio\"\n formControlName=\"option\"\n id=\"date-filter-{{ option.display }}\"\n [attr.disabled]=\"option.disabled ? true : null\"\n [attr.aria-disabled]=\"option.disabled\"\n (click)=\"select()\"\n value=\"{{ option.display }}\" />\n\n <label for=\"date-filter-{{ option.display }}\" class=\"grow cursor-pointer p-1\">\n {{ option.display | syslang | transloco }}\n </label>\n </li>\n }\n\n @if (allowCustomRange) {\n <li role=\"listitem\" aria-label=\"custom range\" class=\"flex px-2 leading-7\" [class.select]=\"form.get('option')?.value === 'custom-range'\">\n <input #radiorange type=\"radio\" formControlName=\"option\" id=\"date-filter-custom-range\" value=\"custom-range\" (click)=\"select()\" />\n\n <div\n class=\"flex @max-[340px]:flex-wrap grow gap-1 p-1 @container\"\n daterangepicker\n datepicker-buttons\n [datepicker-language]=\"lang()\"\n [datepicker-min]=\"form.get('customRange.from')?.value || undefined\"\n [datepicker-max]=\"form.get('customRange.to')?.value ?? today.toISOString()\"\n (click)=\"radiorange.click()\">\n <div class=\"flex gap-1\">\n <label for=\"datepicker-range-start\" class=\"min-w-10\">{{ 'from' | transloco }}</label>\n <input id=\"datepicker-range-start\" name=\"start\" type=\"text\" class=\"h-8 min-w-[13ch]\" />\n </div>\n <div class=\"flex gap-1\">\n <label for=\"datepicker-range-end\" class=\"text-right min-w-10\">{{ 'to' | transloco }}</label>\n <input id=\"datepicker-range-end\" name=\"end\" type=\"text\" class=\"h-8 min-w-[13ch]\" />\n </div>\n </div>\n </li>\n }\n </ul>\n </form>\n</details>\n", styles: [":host{display:block;width:340px;min-width:200px}ul[role=list]{scrollbar-width:thin}\n"], dependencies: [{ kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: DateRangePickerDirective, selector: "[daterangepicker]", inputs: ["datepicker-title", "datepicker-autohide", "datepicker-clear", "datepicker-today", "datepicker-buttons", "datepicker-today-highlight", "datepicker-language", "datepicker-format", "datepicker-max", "datepicker-min", "datepicker-orientation"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
11545
11741
  }
11546
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DateComponent, decorators: [{
11742
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DateComponent, decorators: [{
11547
11743
  type: Component,
11548
11744
  args: [{ selector: "date-filter,DateFilter", standalone: true, providers: [provideTranslocoScope("filters")], imports: [
11549
11745
  InputComponent,
@@ -11568,8 +11764,8 @@ class AsideFiltersComponent {
11568
11764
  const asideFilters = this.appStore.filters().filter((f) => f.position === "left");
11569
11765
  return this.appStore.getAuthorized(asideFilters);
11570
11766
  }, ...(ngDevMode ? [{ debugName: "asideFilters" }] : []));
11571
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AsideFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11572
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AsideFiltersComponent, isStandalone: true, selector: "aside-filters, AsideFilters, asidefilters", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "cn('flex flex-col gap-2 overflow-auto', class())" } }, ngImport: i0, template: `
11767
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AsideFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11768
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AsideFiltersComponent, isStandalone: true, selector: "aside-filters, AsideFilters, asidefilters", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "cn('flex flex-col gap-2 overflow-auto', class())" } }, ngImport: i0, template: `
11573
11769
  @for (agg of asideFilters(); track agg.name) {
11574
11770
  <Card hover="no">
11575
11771
  <Aggregation [name]="agg.name" [column]="agg.column" showFiltersCount />
@@ -11577,7 +11773,7 @@ class AsideFiltersComponent {
11577
11773
  }
11578
11774
  `, isInline: true, dependencies: [{ kind: "directive", type: CardComponent, selector: ".card, card, Card", inputs: ["class", "variant", "hover"] }, { kind: "component", type: AggregationComponent, selector: "Aggregation, aggregation", inputs: ["class", "id", "name", "column", "collapsible", "collapsed", "searchable", "showFiltersCount", "searchText"], outputs: ["onSelect", "searchTextChange"] }] });
11579
11775
  }
11580
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AsideFiltersComponent, decorators: [{
11776
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AsideFiltersComponent, decorators: [{
11581
11777
  type: Component,
11582
11778
  args: [{
11583
11779
  selector: "aside-filters, AsideFilters, asidefilters",
@@ -11654,8 +11850,8 @@ class FilterButtonComponent {
11654
11850
  isDate(column) {
11655
11851
  return this.appStore.isDateColumn(column);
11656
11852
  }
11657
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FilterButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11658
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: FilterButtonComponent, isStandalone: true, selector: "filter-button, FilterButton", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, column: { classPropertyName: "column", publicName: "column", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "listitem" }, properties: { "class.hidden": "filter().hidden" } }, viewQueries: [{ propertyName: "popoverRef", first: true, predicate: PopoverComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
11853
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FilterButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11854
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: FilterButtonComponent, isStandalone: true, selector: "filter-button, FilterButton", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, column: { classPropertyName: "column", publicName: "column", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "listitem" }, properties: { "class.hidden": "filter().hidden" } }, viewQueries: [{ propertyName: "popoverRef", first: true, predicate: PopoverComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
11659
11855
  <Popover [disabled]="filter().disabled" class="group">
11660
11856
  <button
11661
11857
  [variant]="variant()"
@@ -11712,7 +11908,7 @@ class FilterButtonComponent {
11712
11908
  </Popover>
11713
11909
  `, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: PopoverComponent, selector: "popover, Popover", inputs: ["disabled", "closeOnScroll"], outputs: ["closed"] }, { kind: "directive", type: PopoverContentComponent, selector: "popover-content, PopoverContent, popovercontent", inputs: ["position", "keepOpen", "class", "offset"], exportAs: ["popoverContent"] }, { kind: "component", type: AggregationComponent, selector: "Aggregation, aggregation", inputs: ["class", "id", "name", "column", "collapsible", "collapsed", "searchable", "showFiltersCount", "searchText"], outputs: ["onSelect", "searchTextChange"] }, { kind: "component", type: DateComponent, selector: "date-filter,DateFilter", inputs: ["title", "displayEmptyDistributionIntervals"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant"] }, { kind: "pipe", type: OperatorPipe, name: "operator" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
11714
11910
  }
11715
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FilterButtonComponent, decorators: [{
11911
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FilterButtonComponent, decorators: [{
11716
11912
  type: Component,
11717
11913
  args: [{
11718
11914
  selector: "filter-button, FilterButton",
@@ -11887,8 +12083,8 @@ class MoreComponent {
11887
12083
  const { count = 0 } = this.queryParamsStore.getFilter({ field: aggregation.column, name: aggregation.name }) || {};
11888
12084
  return count > 0;
11889
12085
  }
11890
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11891
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: MoreComponent, isStandalone: true, selector: "more, More", inputs: { count: { classPropertyName: "count", publicName: "count", isSignal: true, isRequired: false, transformFunction: null }, includedFilters: { classPropertyName: "includedFilters", publicName: "includedFilters", isSignal: true, isRequired: false, transformFunction: null }, excludedFilters: { classPropertyName: "excludedFilters", publicName: "excludedFilters", isSignal: true, isRequired: false, transformFunction: null }, aggregations: { classPropertyName: "aggregations", publicName: "aggregations", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "divide-y divide-muted-foreground/18" }, ngImport: i0, template: `
12086
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12087
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MoreComponent, isStandalone: true, selector: "more, More", inputs: { count: { classPropertyName: "count", publicName: "count", isSignal: true, isRequired: false, transformFunction: null }, includedFilters: { classPropertyName: "includedFilters", publicName: "includedFilters", isSignal: true, isRequired: false, transformFunction: null }, excludedFilters: { classPropertyName: "excludedFilters", publicName: "excludedFilters", isSignal: true, isRequired: false, transformFunction: null }, aggregations: { classPropertyName: "aggregations", publicName: "aggregations", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "divide-y divide-muted-foreground/18" }, ngImport: i0, template: `
11892
12088
  @for (filter of visibleFilters(); track $index) {
11893
12089
  @if (isDate(filter.column)) {
11894
12090
  <DateFilter class="p-1" id="more-filters" [name]="filter.name" [column]="filter.column" collapsible collapsed />
@@ -11906,7 +12102,7 @@ class MoreComponent {
11906
12102
  }
11907
12103
  `, isInline: true, styles: [":host{scrollbar-width:none}\n"], dependencies: [{ kind: "component", type: AggregationComponent, selector: "Aggregation, aggregation", inputs: ["class", "id", "name", "column", "collapsible", "collapsed", "searchable", "showFiltersCount", "searchText"], outputs: ["onSelect", "searchTextChange"] }, { kind: "component", type: DateComponent, selector: "date-filter,DateFilter", inputs: ["title", "displayEmptyDistributionIntervals"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
11908
12104
  }
11909
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MoreComponent, decorators: [{
12105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MoreComponent, decorators: [{
11910
12106
  type: Component,
11911
12107
  args: [{ selector: "more, More", standalone: true, imports: [AggregationComponent, DateComponent, TranslocoPipe], template: `
11912
12108
  @for (filter of visibleFilters(); track $index) {
@@ -11951,8 +12147,8 @@ class MoreButtonComponent {
11951
12147
  }, 0);
11952
12148
  return total;
11953
12149
  }, ...(ngDevMode ? [{ debugName: "totalFiltersCount" }] : []));
11954
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MoreButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11955
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: MoreButtonComponent, isStandalone: true, selector: "more-button, MoreButton", inputs: { count: { classPropertyName: "count", publicName: "count", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, includedFilters: { classPropertyName: "includedFilters", publicName: "includedFilters", isSignal: true, isRequired: false, transformFunction: null }, excludedFilters: { classPropertyName: "excludedFilters", publicName: "excludedFilters", isSignal: true, isRequired: false, transformFunction: null }, aggregations: { classPropertyName: "aggregations", publicName: "aggregations", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
12150
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MoreButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12151
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MoreButtonComponent, isStandalone: true, selector: "more-button, MoreButton", inputs: { count: { classPropertyName: "count", publicName: "count", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, includedFilters: { classPropertyName: "includedFilters", publicName: "includedFilters", isSignal: true, isRequired: false, transformFunction: null }, excludedFilters: { classPropertyName: "excludedFilters", publicName: "excludedFilters", isSignal: true, isRequired: false, transformFunction: null }, aggregations: { classPropertyName: "aggregations", publicName: "aggregations", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
11956
12152
  <Popover class="group/more">
11957
12153
  <button
11958
12154
  variant="ghost"
@@ -11976,7 +12172,7 @@ class MoreButtonComponent {
11976
12172
  </Popover>
11977
12173
  `, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: PopoverComponent, selector: "popover, Popover", inputs: ["disabled", "closeOnScroll"], outputs: ["closed"] }, { kind: "directive", type: PopoverContentComponent, selector: "popover-content, PopoverContent, popovercontent", inputs: ["position", "keepOpen", "class", "offset"], exportAs: ["popoverContent"] }, { kind: "component", type: MoreComponent, selector: "more, More", inputs: ["count", "includedFilters", "excludedFilters", "aggregations"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
11978
12174
  }
11979
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MoreButtonComponent, decorators: [{
12175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MoreButtonComponent, decorators: [{
11980
12176
  type: Component,
11981
12177
  args: [{
11982
12178
  selector: "more-button, MoreButton",
@@ -12179,8 +12375,8 @@ class FiltersBarComponent {
12179
12375
  ref.popoverRef()?.onClick(event);
12180
12376
  });
12181
12377
  }
12182
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FiltersBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12183
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: FiltersBarComponent, isStandalone: true, selector: "filters-bar, FiltersBar, filtersbar", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, morePosition: { classPropertyName: "morePosition", publicName: "morePosition", isSignal: true, isRequired: false, transformFunction: null }, aggregations: { classPropertyName: "aggregations", publicName: "aggregations", isSignal: true, isRequired: false, transformFunction: null }, includeFilters: { classPropertyName: "includeFilters", publicName: "includeFilters", isSignal: true, isRequired: false, transformFunction: null }, excludeFilters: { classPropertyName: "excludeFilters", publicName: "excludeFilters", isSignal: true, isRequired: false, transformFunction: null }, filtersCount: { classPropertyName: "filtersCount", publicName: "filtersCount", isSignal: true, isRequired: false, transformFunction: null }, showMoreFiltersButton: { classPropertyName: "showMoreFiltersButton", publicName: "showMoreFiltersButton", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClearFilters: "onClearFilters", onClearBasket: "onClearBasket" }, host: { attributes: { "role": "list", "aria-label": "Filters list" }, listeners: { "click": "handleClick($event)" }, properties: { "class": "cn(\"flex relative z-filter gap-2 cursor-default\", direction() === \"vertical\" ? \"flex-col items-start\" : \"flex-row\", class())" } }, providers: [provideTranslocoScope("filters")], viewQueries: [{ propertyName: "moreButtonRef", first: true, predicate: MoreButtonComponent, descendants: true, isSignal: true }, { propertyName: "filterButtonRefs", predicate: FilterButtonComponent, descendants: true, isSignal: true }, { propertyName: "overflowManagerRef", first: true, predicate: OverflowManagerDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
12378
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FiltersBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12379
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: FiltersBarComponent, isStandalone: true, selector: "filters-bar, FiltersBar, filtersbar", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, morePosition: { classPropertyName: "morePosition", publicName: "morePosition", isSignal: true, isRequired: false, transformFunction: null }, aggregations: { classPropertyName: "aggregations", publicName: "aggregations", isSignal: true, isRequired: false, transformFunction: null }, includeFilters: { classPropertyName: "includeFilters", publicName: "includeFilters", isSignal: true, isRequired: false, transformFunction: null }, excludeFilters: { classPropertyName: "excludeFilters", publicName: "excludeFilters", isSignal: true, isRequired: false, transformFunction: null }, filtersCount: { classPropertyName: "filtersCount", publicName: "filtersCount", isSignal: true, isRequired: false, transformFunction: null }, showMoreFiltersButton: { classPropertyName: "showMoreFiltersButton", publicName: "showMoreFiltersButton", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClearFilters: "onClearFilters", onClearBasket: "onClearBasket" }, host: { attributes: { "role": "list", "aria-label": "Filters list" }, listeners: { "click": "handleClick($event)" }, properties: { "class": "cn(\"flex relative z-filter gap-2 cursor-default\", direction() === \"vertical\" ? \"flex-col items-start\" : \"flex-row\", class())" } }, providers: [provideTranslocoScope("filters")], viewQueries: [{ propertyName: "moreButtonRef", first: true, predicate: MoreButtonComponent, descendants: true, isSignal: true }, { propertyName: "filterButtonRefs", predicate: FilterButtonComponent, descendants: true, isSignal: true }, { propertyName: "overflowManagerRef", first: true, predicate: OverflowManagerDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
12184
12380
  <ng-container overflowManager [direction]="direction()" [target]="el.nativeElement" (count)="adjustFiltersCount($event)">
12185
12381
  @if (hasFilters()) {
12186
12382
  <button
@@ -12229,7 +12425,7 @@ class FiltersBarComponent {
12229
12425
  </ng-container>
12230
12426
  `, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: MoreButtonComponent, selector: "more-button, MoreButton", inputs: ["count", "position", "includedFilters", "excludedFilters", "aggregations"] }, { kind: "component", type: FilterButtonComponent, selector: "filter-button, FilterButton", inputs: ["name", "column", "position", "offset"] }, { kind: "directive", type: OverflowManagerDirective, selector: "[overflowManager]", inputs: ["target", "margin", "direction"], outputs: ["count"] }, { kind: "directive", type: OverflowItemDirective, selector: "[overflowItem]" }, { kind: "directive", type: OverflowStopDirective, selector: "[overflowStop]" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
12231
12427
  }
12232
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FiltersBarComponent, decorators: [{
12428
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FiltersBarComponent, decorators: [{
12233
12429
  type: Component,
12234
12430
  args: [{
12235
12431
  selector: "filters-bar, FiltersBar, filtersbar",
@@ -12437,10 +12633,10 @@ class LabelService {
12437
12633
  return from(labels.bulkRemove(labelsToRemove, query, publicOnly));
12438
12634
  }));
12439
12635
  }
12440
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: LabelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12441
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: LabelService, providedIn: 'root' });
12636
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12637
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelService, providedIn: 'root' });
12442
12638
  }
12443
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: LabelService, decorators: [{
12639
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelService, decorators: [{
12444
12640
  type: Injectable,
12445
12641
  args: [{
12446
12642
  providedIn: 'root'
@@ -12575,8 +12771,8 @@ class MultiSelectLabelsComponent {
12575
12771
  return;
12576
12772
  article[labelsField] = this.labels();
12577
12773
  }
12578
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MultiSelectLabelsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12579
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: MultiSelectLabelsComponent, isStandalone: true, selector: "multiselect-labels, multiselectlabels, MultiSelectLabels", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: false, transformFunction: null }, isPublic: { classPropertyName: "isPublic", publicName: "isPublic", isSignal: true, isRequired: false, transformFunction: null }, allowModification: { classPropertyName: "allowModification", publicName: "allowModification", isSignal: true, isRequired: false, transformFunction: null }, labelsField: { classPropertyName: "labelsField", publicName: "labelsField", isSignal: true, isRequired: false, transformFunction: null }, labelInput: { classPropertyName: "labelInput", publicName: "labelInput", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { article: "articleChange", labelInput: "labelInputChange" }, providers: [provideTranslocoScope("labels")], viewQueries: [{ propertyName: "popover", first: true, predicate: ["LabelsPopover"], descendants: true, isSignal: true }], ngImport: i0, template: `
12774
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MultiSelectLabelsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12775
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MultiSelectLabelsComponent, isStandalone: true, selector: "multiselect-labels, multiselectlabels, MultiSelectLabels", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: false, transformFunction: null }, isPublic: { classPropertyName: "isPublic", publicName: "isPublic", isSignal: true, isRequired: false, transformFunction: null }, allowModification: { classPropertyName: "allowModification", publicName: "allowModification", isSignal: true, isRequired: false, transformFunction: null }, labelsField: { classPropertyName: "labelsField", publicName: "labelsField", isSignal: true, isRequired: false, transformFunction: null }, labelInput: { classPropertyName: "labelInput", publicName: "labelInput", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { article: "articleChange", labelInput: "labelInputChange" }, providers: [provideTranslocoScope("labels")], viewQueries: [{ propertyName: "popover", first: true, predicate: ["LabelsPopover"], descendants: true, isSignal: true }], ngImport: i0, template: `
12580
12776
  <div class="anchor" [ngStyle]="{ 'anchor-name': anchor() }">
12581
12777
  <label [htmlFor]="id()" class="font-semibold">{{ (isPublic() ? 'labels.publicLabels' : 'labels.privateLabels') | transloco }}</label>
12582
12778
  <input
@@ -12620,7 +12816,7 @@ class MultiSelectLabelsComponent {
12620
12816
  }
12621
12817
  `, isInline: true, styles: [".anchor:has(.popover:popover-open){z-index:var(--z-menu, 1000);border-radius:var(--radius) var(--radius) 0 0}.anchor .popover::backdrop{background-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}.popover{width:anchor-size(width);top:anchor(bottom);left:anchor(left)}@supports (-moz-appearance: none){.popover{margin:calc(33.3333333333vh + 30px) 25vw;width:50vw}}@supports (background: -webkit-named-image(i)){.popover{margin:calc(33.3333333333vh + 30px) 25vw;width:50vw}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
12622
12818
  }
12623
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MultiSelectLabelsComponent, decorators: [{
12819
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MultiSelectLabelsComponent, decorators: [{
12624
12820
  type: Component,
12625
12821
  args: [{ selector: "multiselect-labels, multiselectlabels, MultiSelectLabels", providers: [provideTranslocoScope("labels")], standalone: true, imports: [FormsModule, NgStyle, TranslocoPipe, InputComponent, BadgeComponent, ListItemComponent], template: `
12626
12822
  <div class="anchor" [ngStyle]="{ 'anchor-name': anchor() }">
@@ -12688,8 +12884,8 @@ class LabelsEditDialog {
12688
12884
  close(event) {
12689
12885
  this.closed.emit({ type: event, article: this.article() });
12690
12886
  }
12691
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: LabelsEditDialog, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
12692
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: LabelsEditDialog, isStandalone: true, selector: "labels-edit-dialog, labelseditdialog, LabelsEditDialog", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", article: "articleChange" }, providers: [provideTranslocoScope("labels")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
12887
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelsEditDialog, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
12888
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: LabelsEditDialog, isStandalone: true, selector: "labels-edit-dialog, labelseditdialog, LabelsEditDialog", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", article: "articleChange" }, providers: [provideTranslocoScope("labels")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
12693
12889
  <dialog #dialog (closed)="close($event)">
12694
12890
  <DialogContent>
12695
12891
  <DialogHeader>
@@ -12719,7 +12915,7 @@ class LabelsEditDialog {
12719
12915
  </dialog>
12720
12916
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: DialogComponent, selector: "dialog, [dialog]", outputs: ["closed"], exportAs: ["dialog"] }, { kind: "component", type: DialogHeaderComponent, selector: "DialogHeader" }, { kind: "directive", type: DialogFooterComponent, selector: "DialogFooter", inputs: ["class"] }, { kind: "directive", type: DialogTitleComponent, selector: "DialogTitle", inputs: ["class"] }, { kind: "directive", type: DialogContentComponent, selector: "DialogContent", inputs: ["class"] }, { kind: "component", type: MultiSelectLabelsComponent, selector: "multiselect-labels, multiselectlabels, MultiSelectLabels", inputs: ["article", "isPublic", "allowModification", "labelsField", "labelInput"], outputs: ["articleChange", "labelInputChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
12721
12917
  }
12722
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: LabelsEditDialog, decorators: [{
12918
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelsEditDialog, decorators: [{
12723
12919
  type: Component,
12724
12920
  args: [{
12725
12921
  selector: "labels-edit-dialog, labelseditdialog, LabelsEditDialog",
@@ -12776,8 +12972,8 @@ class SearchFooterComponent {
12776
12972
  event.stopPropagation();
12777
12973
  this.loadMore.emit();
12778
12974
  }
12779
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SearchFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12780
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: SearchFooterComponent, isStandalone: true, selector: "search-footer, searchfooter, SearchFooter", inputs: { hasMore: { classPropertyName: "hasMore", publicName: "hasMore", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { loadMore: "loadMore" }, ngImport: i0, template: ` <div class="flex flex-col px-2">
12975
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12976
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: SearchFooterComponent, isStandalone: true, selector: "search-footer, searchfooter, SearchFooter", inputs: { hasMore: { classPropertyName: "hasMore", publicName: "hasMore", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { loadMore: "loadMore" }, ngImport: i0, template: ` <div class="flex flex-col px-2">
12781
12977
  @if (hasMore() && config().showLoadMore) {
12782
12978
  <button decoration="outline" class="w-full" tabindex="0" [attr.title]="'loadMore' | transloco" (click)="onLoadMore($event)">
12783
12979
  {{ 'loadMore' | transloco }}
@@ -12788,7 +12984,7 @@ class SearchFooterComponent {
12788
12984
  </button>
12789
12985
  </div>`, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
12790
12986
  }
12791
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SearchFooterComponent, decorators: [{
12987
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchFooterComponent, decorators: [{
12792
12988
  type: Component,
12793
12989
  args: [{
12794
12990
  selector: 'search-footer, searchfooter, SearchFooter',
@@ -12809,8 +13005,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
12809
13005
  class SearchHeaderComponent {
12810
13006
  floating = inject(PopoverContentComponent, { skipSelf: true, optional: true });
12811
13007
  label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
12812
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SearchHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12813
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: SearchHeaderComponent, isStandalone: true, selector: "search-header, searchheader, SearchHeader", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
13008
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13009
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: SearchHeaderComponent, isStandalone: true, selector: "search-header, searchheader, SearchHeader", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
12814
13010
  @if (floating) {
12815
13011
  <div class="p-2">
12816
13012
  <label class="text-xl font-bold">{{ label() }}</label>
@@ -12819,7 +13015,7 @@ class SearchHeaderComponent {
12819
13015
  }
12820
13016
  `, isInline: true, dependencies: [{ kind: "component", type: HorizontalDividerComponent, selector: "horizontal-divider, HorizontalDivider, horizontaldivider" }] });
12821
13017
  }
12822
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SearchHeaderComponent, decorators: [{
13018
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchHeaderComponent, decorators: [{
12823
13019
  type: Component,
12824
13020
  args: [{
12825
13021
  selector: 'search-header, searchheader, SearchHeader',
@@ -12858,8 +13054,8 @@ class SearchListComponent {
12858
13054
  e.stopPropagation();
12859
13055
  this.delete.emit(index);
12860
13056
  }
12861
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SearchListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12862
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: SearchListComponent, isStandalone: true, selector: "search-list, searchlist, SearchList", inputs: { paginatedSearches: { classPropertyName: "paginatedSearches", publicName: "paginatedSearches", isSignal: true, isRequired: true, transformFunction: null }, deleteButtonTitle: { classPropertyName: "deleteButtonTitle", publicName: "deleteButtonTitle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { delete: "delete" }, host: { attributes: { "role": "list" }, classAttribute: "flex max-h-[460px] flex-col overflow-auto" }, providers: [provideTranslocoScope("searches")], queries: [{ propertyName: "iconTemplate", first: true, predicate: ChildMarkerDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
13057
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13058
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: SearchListComponent, isStandalone: true, selector: "search-list, searchlist, SearchList", inputs: { paginatedSearches: { classPropertyName: "paginatedSearches", publicName: "paginatedSearches", isSignal: true, isRequired: true, transformFunction: null }, deleteButtonTitle: { classPropertyName: "deleteButtonTitle", publicName: "deleteButtonTitle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { delete: "delete" }, host: { attributes: { "role": "list" }, classAttribute: "flex max-h-[460px] flex-col overflow-auto" }, providers: [provideTranslocoScope("searches")], queries: [{ propertyName: "iconTemplate", first: true, predicate: ChildMarkerDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
12863
13059
  @for (search of paginatedSearches(); track $index) {
12864
13060
  <li
12865
13061
  role="listitem"
@@ -12904,7 +13100,7 @@ class SearchListComponent {
12904
13100
  }
12905
13101
  `, isInline: true, dependencies: [{ kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: TrashIcon, selector: "trash-icon, TrashIcon", inputs: ["class"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant"] }, { kind: "component", type: FilterIcon, selector: "filter-icon, FilterIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
12906
13102
  }
12907
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SearchListComponent, decorators: [{
13103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchListComponent, decorators: [{
12908
13104
  type: Component,
12909
13105
  args: [{
12910
13106
  selector: "search-list, searchlist, SearchList",
@@ -13010,8 +13206,8 @@ class RecentSearchesComponent {
13010
13206
  loadMore() {
13011
13207
  this.range.set(this.range() + (this.config.itemsPerPage ?? 10));
13012
13208
  }
13013
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: RecentSearchesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13014
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.15", type: RecentSearchesComponent, isStandalone: true, selector: "RecentSearches, recent-searches", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslocoScope('searches')], ngImport: i0, template: `
13209
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RecentSearchesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13210
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: RecentSearchesComponent, isStandalone: true, selector: "RecentSearches, recent-searches", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslocoScope('searches')], ngImport: i0, template: `
13015
13211
  <SearchHeader [label]="'searches.recent.label' | transloco" />
13016
13212
 
13017
13213
  <SearchList
@@ -13027,7 +13223,7 @@ class RecentSearchesComponent {
13027
13223
  <SearchFooter [hasMore]="hasMore()" [config]="config" (loadMore)="loadMore()" />
13028
13224
  `, isInline: true, styles: [":host ul{scrollbar-width:thin}\n"], dependencies: [{ kind: "directive", type: ChildMarkerDirective, selector: "[childMarker]" }, { kind: "component", type: SearchHeaderComponent, selector: "search-header, searchheader, SearchHeader", inputs: ["label"] }, { kind: "component", type: SearchListComponent, selector: "search-list, searchlist, SearchList", inputs: ["paginatedSearches", "deleteButtonTitle"], outputs: ["delete"] }, { kind: "component", type: SearchFooterComponent, selector: "search-footer, searchfooter, SearchFooter", inputs: ["hasMore", "config"], outputs: ["loadMore"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
13029
13225
  }
13030
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: RecentSearchesComponent, decorators: [{
13226
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RecentSearchesComponent, decorators: [{
13031
13227
  type: Component,
13032
13228
  args: [{ selector: 'RecentSearches, recent-searches', standalone: true, providers: [provideTranslocoScope('searches')], imports: [TranslocoPipe, ChildMarkerDirective, SearchHeaderComponent, SearchListComponent, SearchFooterComponent], template: `
13033
13229
  <SearchHeader [label]="'searches.recent.label' | transloco" />
@@ -13065,8 +13261,8 @@ class SavedSearchDialog {
13065
13261
  // emit closed event for the diaglog service
13066
13262
  this.closed.emit("dialog-confirm");
13067
13263
  }
13068
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SavedSearchDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
13069
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.15", type: SavedSearchDialog, isStandalone: true, selector: "saved-search-dialog, savedsearchdialog, SavedSearchDialog", outputs: { closed: "closed" }, providers: [provideTranslocoScope("searches")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
13264
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedSearchDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
13265
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.16", type: SavedSearchDialog, isStandalone: true, selector: "saved-search-dialog, savedsearchdialog, SavedSearchDialog", outputs: { closed: "closed" }, providers: [provideTranslocoScope("searches")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
13070
13266
  <dialog #dialog>
13071
13267
  <DialogContent>
13072
13268
  <DialogHeader>
@@ -13094,7 +13290,7 @@ class SavedSearchDialog {
13094
13290
  </dialog>
13095
13291
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: DialogComponent, selector: "dialog, [dialog]", outputs: ["closed"], exportAs: ["dialog"] }, { kind: "component", type: DialogHeaderComponent, selector: "DialogHeader" }, { kind: "directive", type: DialogTitleComponent, selector: "DialogTitle", inputs: ["class"] }, { kind: "directive", type: DialogContentComponent, selector: "DialogContent", inputs: ["class"] }, { kind: "directive", type: DialogFooterComponent, selector: "DialogFooter", inputs: ["class"] }, { kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
13096
13292
  }
13097
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SavedSearchDialog, decorators: [{
13293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedSearchDialog, decorators: [{
13098
13294
  type: Component,
13099
13295
  args: [{
13100
13296
  selector: "saved-search-dialog, savedsearchdialog, SavedSearchDialog",
@@ -13179,8 +13375,8 @@ class SavedSearchesComponent {
13179
13375
  loadMore() {
13180
13376
  this.range.set(this.range() + (this.config.itemsPerPage ?? 10));
13181
13377
  }
13182
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SavedSearchesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13183
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.15", type: SavedSearchesComponent, isStandalone: true, selector: "saved-searches, SavedSearches", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslocoScope('searches')], ngImport: i0, template: `
13378
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedSearchesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13379
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: SavedSearchesComponent, isStandalone: true, selector: "saved-searches, SavedSearches", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslocoScope('searches')], ngImport: i0, template: `
13184
13380
  <SearchHeader [label]="'searches.saved.label' | transloco" />
13185
13381
 
13186
13382
  <SearchList [paginatedSearches]="paginatedSearches()" deleteButtonTitle="searches.saved.remove" (delete)="onDelete($event)">
@@ -13192,7 +13388,7 @@ class SavedSearchesComponent {
13192
13388
  <SearchFooter [hasMore]="hasMore()" [config]="config" (loadMore)="loadMore()" />
13193
13389
  `, isInline: true, styles: [":host ul{scrollbar-width:thin}\n"], dependencies: [{ kind: "directive", type: ChildMarkerDirective, selector: "[childMarker]" }, { kind: "component", type: SearchHeaderComponent, selector: "search-header, searchheader, SearchHeader", inputs: ["label"] }, { kind: "component", type: SearchListComponent, selector: "search-list, searchlist, SearchList", inputs: ["paginatedSearches", "deleteButtonTitle"], outputs: ["delete"] }, { kind: "component", type: SearchFooterComponent, selector: "search-footer, searchfooter, SearchFooter", inputs: ["hasMore", "config"], outputs: ["loadMore"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
13194
13390
  }
13195
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SavedSearchesComponent, decorators: [{
13391
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedSearchesComponent, decorators: [{
13196
13392
  type: Component,
13197
13393
  args: [{ selector: 'saved-searches, SavedSearches', standalone: true, imports: [TranslocoPipe, ChildMarkerDirective, SearchHeaderComponent, SearchListComponent, SearchFooterComponent], providers: [provideTranslocoScope('searches')], template: `
13198
13394
  <SearchHeader [label]="'searches.saved.label' | transloco" />
@@ -13207,6 +13403,206 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
13207
13403
  `, styles: [":host ul{scrollbar-width:thin}\n"] }]
13208
13404
  }], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }] } });
13209
13405
 
13406
+ const SUPPORTED_LANGUAGES = ["en", "fr"];
13407
+ class UserProfileFormComponent {
13408
+ principalStore = inject(PrincipalStore);
13409
+ userSettingsStore = inject(UserSettingsStore);
13410
+ userProfileService = inject(UserProfileService);
13411
+ transloco = inject(TranslocoService);
13412
+ createInputElement = viewChild("avatarInput", ...(ngDevMode ? [{ debugName: "createInputElement" }] : []));
13413
+ dataKeys = ["fullName", "mail", "jobTitle", "group", "organisation", "location"];
13414
+ initials = computed(() => {
13415
+ const fullName = this.userProfile()?.data?.fullName;
13416
+ if (!fullName)
13417
+ return undefined;
13418
+ return fullName
13419
+ .split(" ")
13420
+ .map((word) => word[0].toUpperCase())
13421
+ .join("");
13422
+ }, ...(ngDevMode ? [{ debugName: "initials" }] : []));
13423
+ propertyToEdit = signal(undefined, ...(ngDevMode ? [{ debugName: "propertyToEdit" }] : []));
13424
+ value = model(undefined, ...(ngDevMode ? [{ debugName: "value" }] : []));
13425
+ currentLanguage = model(...(ngDevMode ? [undefined, { debugName: "currentLanguage" }] : []));
13426
+ AllLanguages = [
13427
+ { code: "en", label: "English", icon: FlagEnglishIconComponent },
13428
+ { code: "fr", label: "Français", icon: FlagFrenchIconComponent }
13429
+ ];
13430
+ changingPassword = signal(false, ...(ngDevMode ? [{ debugName: "changingPassword" }] : []));
13431
+ principal = computed(() => this.principalStore.principal?.(), ...(ngDevMode ? [{ debugName: "principal" }] : []));
13432
+ constructor() {
13433
+ this.currentLanguage.set(this.transloco.getActiveLang());
13434
+ }
13435
+ userProfileResource = this.userProfileService.getUserProfile(this.principal);
13436
+ userProfile = linkedSignal(() => {
13437
+ if (this.userProfileResource.hasValue()) {
13438
+ return this.userProfileResource.value();
13439
+ }
13440
+ const { userId: id, email: mail, fullName } = this.principal() || {};
13441
+ if (!id || !mail || !fullName) {
13442
+ return undefined;
13443
+ }
13444
+ return { data: { id, mail, fullName } };
13445
+ }, ...(ngDevMode ? [{ debugName: "userProfile" }] : []));
13446
+ async createUserProfile() {
13447
+ const { userId: id, email: mail, fullName } = this.principal() || {};
13448
+ if (!id) {
13449
+ return;
13450
+ }
13451
+ const response = await createUserProfile({ data: { id, mail, fullName } });
13452
+ if (response) {
13453
+ info("Created user profile", response);
13454
+ this.userProfileResource.set(response);
13455
+ }
13456
+ }
13457
+ /**
13458
+ * On editing a value, we save its former value to set it back in case of error
13459
+ *
13460
+ * @param category data or customData
13461
+ * @param propertyName property name
13462
+ */
13463
+ onEdit(propertyName) {
13464
+ const data = this.userProfile()?.data;
13465
+ const value = data?.[propertyName];
13466
+ this.value.set(value || "");
13467
+ this.propertyToEdit.set(`${propertyName}`);
13468
+ }
13469
+ /**
13470
+ * On data property deletion, for now we make the property an empty string
13471
+ *
13472
+ * @param propertyName property name
13473
+ */
13474
+ onDeleteData(propertyName) {
13475
+ this.userProfile.update((profile) => {
13476
+ if (profile?.data) {
13477
+ profile.data[propertyName] = "";
13478
+ }
13479
+ return profile;
13480
+ });
13481
+ this.onSaveData(propertyName);
13482
+ }
13483
+ /**
13484
+ * Saving a data property
13485
+ *
13486
+ * @param propertyName property name
13487
+ */
13488
+ async onSaveData(propertyName) {
13489
+ // cloning the user profile to avoid changing the signal value before confirming the update
13490
+ const userProfile = JSON.parse(JSON.stringify(this.userProfile()));
13491
+ userProfile.data[propertyName] = this.value();
13492
+ const response = await patchUserProfile(userProfile, "data", propertyName);
13493
+ if (response) {
13494
+ console.log("Updated user profile", response);
13495
+ const newUserProfile = this.userProfile();
13496
+ this.userProfileResource.set({
13497
+ ...newUserProfile,
13498
+ ...response,
13499
+ data: { ...newUserProfile?.data, ...(response.data || {}) }
13500
+ });
13501
+ }
13502
+ this.value.set(undefined);
13503
+ this.propertyToEdit.set(undefined);
13504
+ }
13505
+ /**
13506
+ * Get the value of a data key
13507
+ *
13508
+ * @param key property key
13509
+ * @returns the value
13510
+ */
13511
+ getDataValue(key) {
13512
+ const data = this.userProfile()?.data;
13513
+ const value = data?.[key];
13514
+ return value;
13515
+ }
13516
+ /**
13517
+ * TODO: how do we save the picture?
13518
+ *
13519
+ * @param event
13520
+ */
13521
+ uploadAvatar(event) {
13522
+ const element = event.currentTarget;
13523
+ const fileList = element.files;
13524
+ console.log("fileList", fileList);
13525
+ }
13526
+ /**
13527
+ * Change the app language
13528
+ */
13529
+ changeLanguage() {
13530
+ const language = this.currentLanguage();
13531
+ if (!language)
13532
+ return;
13533
+ this.userSettingsStore.updateLanguage(language);
13534
+ if (this.transloco.getActiveLang() !== language) {
13535
+ this.transloco.setActiveLang(language);
13536
+ }
13537
+ }
13538
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13539
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: UserProfileFormComponent, isStandalone: true, selector: "user-profile-form, UserProfileForm, userprofileform", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, currentLanguage: { classPropertyName: "currentLanguage", publicName: "currentLanguage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", currentLanguage: "currentLanguageChange" }, providers: [provideTranslocoScope("user-profile", "login")], viewQueries: [{ propertyName: "createInputElement", first: true, predicate: ["avatarInput"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (userProfileResource.hasValue()) {\n @let profile = userProfile();\n <div class=\"flex flex-col gap-2 p-4\">\n <div class=\"flex mb-4\">\n <!-- AVATAR -->\n <Avatar\n class=\"bg-accent text-accent-foreground hover:bg-accent/80 hover:text-accent-foreground/80 cursor-pointer size-14\"\n (click)=\"avatarInput.click()\">\n @if (profile?.data?.profilePhoto) {\n <AvatarImage [src]=\"profile?.data?.profilePhoto!\" width=\"44\" height=\"44\" alt=\"avatar\" />\n }\n <AvatarFallback class=\"text-lg\">\n @if (initials()) {\n <span>{{ initials() }}</span>\n }\n @else {\n <UserIcon class=\"size-7 p-1\" />\n }\n </AvatarFallback>\n </Avatar>\n <div class=\"grow\"></div>\n <div class=\"flex flex-col gap-4\">\n <!-- LANGUAGE -->\n <select\n class=\"hover:outline-primary focus:outline-primary border-foreground/10 bg-background hover:bg-muted focus:bg-muted h-8 rounded-md border px-2 hover:outline focus:outline\"\n [(ngModel)]=\"currentLanguage\" (change)=\"changeLanguage()\">\n @for (lang of AllLanguages; track lang.code) {\n <option [value]=\"lang.code\">\n {{ lang.label }}\n </option>\n }\n </select>\n <!-- CHANGE PASSWORD -->\n @if (principal().editablePartition) {\n <button [disabled]=\"changingPassword()\" (click)=\"changingPassword.set(true)\">\n {{ \"login.changePassword\" | transloco }}\n </button>\n }\n </div>\n </div>\n @if (changingPassword()) {\n <ChangePassword\n [redirectAfterSuccess]=\"false\"\n (cancel)=\"changingPassword.set(false)\"\n (success)=\"changingPassword.set(false)\" />\n }\n @else {\n @for (key of dataKeys; track key) {\n <div>\n <p>{{ `userProfile.data.${key}` | transloco}}</p>\n <div class=\"flex flex-row group\">\n <div class=\"grow\" [class.text-muted-foreground]=\"!getDataValue(key)\">\n @if (propertyToEdit() === key) {\n <input id=\"user-profile-{{key}}\" type=\"text\" [(ngModel)]=\"value\" (keydown.enter)=\"onSaveData(key)\" />\n } @else {\n {{ getDataValue(key) || ('userProfile.notDefined' | transloco) }}\n }\n </div>\n @if (propertyToEdit() === key) {\n <button variant=\"ghost\" size=\"icon\" class=\"mx-2 cursor-pointer\"\n title=\"{{ 'userProfile.editProperty' | transloco }}\" [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\n (click)=\"onSaveData(key)\">\n <i class=\"fa-fw fas fa-save\"></i>\n </button>\n <button variant=\"ghost\" size=\"icon\" class=\"cursor-pointer\" title=\"{{ 'userProfile.editProperty' | transloco }}\"\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\" (click)=\"propertyToEdit.set(undefined)\">\n <UndoIcon />\n </button>\n } @else {\n <button variant=\"ghost\" size=\"icon\" class=\"invisible group-hover:visible mx-2 cursor-pointer\"\n title=\"{{ 'userProfile.editProperty' | transloco }}\" [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\n (click)=\"onEdit(key)\">\n <EditIcon />\n </button>\n <button variant=\"ghost\" size=\"icon\" class=\"text-destructive invisible group-hover:visible cursor-pointer\"\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\" (click)=\"onDeleteData(key)\">\n <TrashIcon />\n </button>\n }\n </div>\n </div>\n }\n }\n </div>\n}\n@else if (userProfileResource.isLoading()) {\n <span>Loading...</span>\n}\n@else if (userProfileResource.error()) {\n @if(principal().isAdministrator) {\n <div class=\"p-4\">\n <p>Could not load user profile: </p>\n <p>{{ userProfileResource.error()?.message }}</p>\n </div>\n <button (click)=\"createUserProfile()\">Create Profile</button>\n }\n @else {\n <p>Please contact an administrator to create your user profile.</p>\n }\n}\n\n<!-- AVATAR UPLOAD -->\n<input #avatarInput class=\"hidden\" type=\"file\" accept=\"image/*\" (change)=\"uploadAvatar($event)\" />", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: TrashIcon, selector: "trash-icon, TrashIcon", inputs: ["class"] }, { kind: "component", type: EditIcon, selector: "edit-icon, EditIcon, editicon", inputs: ["class"] }, { kind: "component", type: UndoIcon, selector: "UndoIcon, undoicon, undo-icon", inputs: ["class"] }, { kind: "component", type: AvatarComponent, selector: "avatar, Avatar", inputs: ["class"] }, { kind: "component", type: AvatarFallbackComponent, selector: "avatar-fallback, avatarfallback, AvatarFallback", inputs: ["class"] }, { kind: "component", type: UserIcon, selector: "user-icon, UserIcon", inputs: ["class"] }, { kind: "component", type: AvatarImageComponent, selector: "avatar-image, AvatarImage, avatarimage", inputs: ["class", "src", "alt", "width", "height", "referrerPolicy", "crossOrigin"] }, { kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "component", type: ChangePasswordComponent, selector: "change-password, ChangePassword, changepassword", inputs: ["username", "alert", "redirectAfterSuccess", "currentPassword", "newPassword", "confirmPassword"], outputs: ["success", "cancel", "currentPasswordChange", "newPasswordChange", "confirmPasswordChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
13540
+ }
13541
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileFormComponent, decorators: [{
13542
+ type: Component,
13543
+ args: [{ selector: "user-profile-form, UserProfileForm, userprofileform", standalone: true, imports: [
13544
+ FormsModule,
13545
+ RouterModule,
13546
+ TranslocoPipe,
13547
+ InputComponent,
13548
+ TrashIcon,
13549
+ EditIcon,
13550
+ UndoIcon,
13551
+ AvatarComponent,
13552
+ AvatarFallbackComponent,
13553
+ UserIcon,
13554
+ AvatarImageComponent,
13555
+ ButtonComponent,
13556
+ ChangePasswordComponent
13557
+ ], providers: [provideTranslocoScope("user-profile", "login")], template: "@if (userProfileResource.hasValue()) {\n @let profile = userProfile();\n <div class=\"flex flex-col gap-2 p-4\">\n <div class=\"flex mb-4\">\n <!-- AVATAR -->\n <Avatar\n class=\"bg-accent text-accent-foreground hover:bg-accent/80 hover:text-accent-foreground/80 cursor-pointer size-14\"\n (click)=\"avatarInput.click()\">\n @if (profile?.data?.profilePhoto) {\n <AvatarImage [src]=\"profile?.data?.profilePhoto!\" width=\"44\" height=\"44\" alt=\"avatar\" />\n }\n <AvatarFallback class=\"text-lg\">\n @if (initials()) {\n <span>{{ initials() }}</span>\n }\n @else {\n <UserIcon class=\"size-7 p-1\" />\n }\n </AvatarFallback>\n </Avatar>\n <div class=\"grow\"></div>\n <div class=\"flex flex-col gap-4\">\n <!-- LANGUAGE -->\n <select\n class=\"hover:outline-primary focus:outline-primary border-foreground/10 bg-background hover:bg-muted focus:bg-muted h-8 rounded-md border px-2 hover:outline focus:outline\"\n [(ngModel)]=\"currentLanguage\" (change)=\"changeLanguage()\">\n @for (lang of AllLanguages; track lang.code) {\n <option [value]=\"lang.code\">\n {{ lang.label }}\n </option>\n }\n </select>\n <!-- CHANGE PASSWORD -->\n @if (principal().editablePartition) {\n <button [disabled]=\"changingPassword()\" (click)=\"changingPassword.set(true)\">\n {{ \"login.changePassword\" | transloco }}\n </button>\n }\n </div>\n </div>\n @if (changingPassword()) {\n <ChangePassword\n [redirectAfterSuccess]=\"false\"\n (cancel)=\"changingPassword.set(false)\"\n (success)=\"changingPassword.set(false)\" />\n }\n @else {\n @for (key of dataKeys; track key) {\n <div>\n <p>{{ `userProfile.data.${key}` | transloco}}</p>\n <div class=\"flex flex-row group\">\n <div class=\"grow\" [class.text-muted-foreground]=\"!getDataValue(key)\">\n @if (propertyToEdit() === key) {\n <input id=\"user-profile-{{key}}\" type=\"text\" [(ngModel)]=\"value\" (keydown.enter)=\"onSaveData(key)\" />\n } @else {\n {{ getDataValue(key) || ('userProfile.notDefined' | transloco) }}\n }\n </div>\n @if (propertyToEdit() === key) {\n <button variant=\"ghost\" size=\"icon\" class=\"mx-2 cursor-pointer\"\n title=\"{{ 'userProfile.editProperty' | transloco }}\" [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\n (click)=\"onSaveData(key)\">\n <i class=\"fa-fw fas fa-save\"></i>\n </button>\n <button variant=\"ghost\" size=\"icon\" class=\"cursor-pointer\" title=\"{{ 'userProfile.editProperty' | transloco }}\"\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\" (click)=\"propertyToEdit.set(undefined)\">\n <UndoIcon />\n </button>\n } @else {\n <button variant=\"ghost\" size=\"icon\" class=\"invisible group-hover:visible mx-2 cursor-pointer\"\n title=\"{{ 'userProfile.editProperty' | transloco }}\" [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\n (click)=\"onEdit(key)\">\n <EditIcon />\n </button>\n <button variant=\"ghost\" size=\"icon\" class=\"text-destructive invisible group-hover:visible cursor-pointer\"\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\" (click)=\"onDeleteData(key)\">\n <TrashIcon />\n </button>\n }\n </div>\n </div>\n }\n }\n </div>\n}\n@else if (userProfileResource.isLoading()) {\n <span>Loading...</span>\n}\n@else if (userProfileResource.error()) {\n @if(principal().isAdministrator) {\n <div class=\"p-4\">\n <p>Could not load user profile: </p>\n <p>{{ userProfileResource.error()?.message }}</p>\n </div>\n <button (click)=\"createUserProfile()\">Create Profile</button>\n }\n @else {\n <p>Please contact an administrator to create your user profile.</p>\n }\n}\n\n<!-- AVATAR UPLOAD -->\n<input #avatarInput class=\"hidden\" type=\"file\" accept=\"image/*\" (change)=\"uploadAvatar($event)\" />" }]
13558
+ }], ctorParameters: () => [], propDecorators: { createInputElement: [{ type: i0.ViewChild, args: ["avatarInput", { isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], currentLanguage: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentLanguage", required: false }] }, { type: i0.Output, args: ["currentLanguageChange"] }] } });
13559
+
13560
+ class UserProfileDialog {
13561
+ dialog = viewChild(DialogComponent, ...(ngDevMode ? [{ debugName: "dialog" }] : []));
13562
+ open() {
13563
+ this.dialog()?.showModal();
13564
+ }
13565
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
13566
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.16", type: UserProfileDialog, isStandalone: true, selector: "user-profile-dialog, userprofiledialog, UserProfileDialog", viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
13567
+ <dialog #dialog>
13568
+ <DialogContent class="max-h-11/12 overflow-auto">
13569
+ <DialogHeader>
13570
+ <DialogTitle>User Profile</DialogTitle>
13571
+ </DialogHeader>
13572
+
13573
+ <user-profile-form />
13574
+
13575
+ </DialogContent>
13576
+ </dialog>
13577
+ `, isInline: true, dependencies: [{ kind: "component", type: DialogComponent, selector: "dialog, [dialog]", outputs: ["closed"], exportAs: ["dialog"] }, { kind: "component", type: DialogHeaderComponent, selector: "DialogHeader" }, { kind: "directive", type: DialogContentComponent, selector: "DialogContent", inputs: ["class"] }, { kind: "component", type: UserProfileFormComponent, selector: "user-profile-form, UserProfileForm, userprofileform", inputs: ["value", "currentLanguage"], outputs: ["valueChange", "currentLanguageChange"] }, { kind: "directive", type: DialogTitleComponent, selector: "DialogTitle", inputs: ["class"] }] });
13578
+ }
13579
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileDialog, decorators: [{
13580
+ type: Component,
13581
+ args: [{
13582
+ selector: "user-profile-dialog, userprofiledialog, UserProfileDialog",
13583
+ standalone: true,
13584
+ imports: [
13585
+ DialogComponent,
13586
+ DialogHeaderComponent,
13587
+ DialogContentComponent,
13588
+ UserProfileFormComponent,
13589
+ DialogTitleComponent
13590
+ ],
13591
+ template: `
13592
+ <dialog #dialog>
13593
+ <DialogContent class="max-h-11/12 overflow-auto">
13594
+ <DialogHeader>
13595
+ <DialogTitle>User Profile</DialogTitle>
13596
+ </DialogHeader>
13597
+
13598
+ <user-profile-form />
13599
+
13600
+ </DialogContent>
13601
+ </dialog>
13602
+ `
13603
+ }]
13604
+ }], propDecorators: { dialog: [{ type: i0.ViewChild, args: [i0.forwardRef(() => DialogComponent), { isSignal: true }] }] } });
13605
+
13210
13606
  /**
13211
13607
  * Intercepts HTTP requests to add audit information if the request URL includes the API path.
13212
13608
  *
@@ -13349,16 +13745,23 @@ const errorInterceptorFn = (request, next) => {
13349
13745
  * @returns An observable that either passes the request through or handles errors with toast notifications.
13350
13746
  */
13351
13747
  const toastInterceptorFn = (request, next) => {
13352
- if (request.url.includes('api/v1/audit.notify')) {
13748
+ if (request.url.includes("api/v1/audit.notify")) {
13353
13749
  return next(request);
13354
13750
  }
13355
- return next(request).pipe(catchError$1(err => {
13356
- const { status, statusText, error } = err;
13751
+ return next(request).pipe(catchError$1((err) => {
13752
+ const { status, statusText, error, url } = err;
13357
13753
  if ([400, 403, 500, 503].includes(status)) {
13358
- const { errorMessage = err.statusText, errorCodeText = `Error ${status}` } = error;
13359
- notify.error(statusText, { description: `${errorCodeText}: ${errorMessage}`, closeButton: true, duration: 5000 });
13754
+ // Avoid showing error toasts for preview requests
13755
+ if (url.includes("api/v1/preview") === false) {
13756
+ const { errorMessage = err.statusText, errorCodeText = `Error ${status}` } = error;
13757
+ notify.error(statusText, {
13758
+ description: `${errorCodeText}: ${errorMessage}`,
13759
+ closeButton: true,
13760
+ duration: 5000
13761
+ });
13762
+ }
13360
13763
  }
13361
- return Promise.reject(err);
13764
+ return throwError(() => err);
13362
13765
  }));
13363
13766
  };
13364
13767
 
@@ -13382,5 +13785,5 @@ const queryNameResolver = () => {
13382
13785
  * Generated bundle index. Do not edit.
13383
13786
  */
13384
13787
 
13385
- export { AGGREGATIONS_NAMES, AGGREGATIONS_NAMES_PRESET_DEFAULT, APP_FEATURES, AdvancedSearchComponent, AggregationComponent, AggregationsService, AggregationsStore, Alert, AlertDialog, AlertsComponent, AppService, AppStore, ApplicationService, ApplicationStore, AsideFiltersComponent, AuditFeedbackType, AuditService, AuthGuard, AuthPageComponent, AutocompleteService, BOOKMARKS_CONFIG, BOOKMARKS_OPTIONS, BackdropComponent, BackdropService, BookmarkButtonComponent, BookmarksComponent, COLLECTIONS_CONFIG, COLLECTIONS_OPTIONS, COMPONENTS_FOR_DOCUMENT_TYPE, ChangePasswordComponent, ChildMarkerDirective, CollectionsComponent, CollectionsDialog, DRAWER_COMPONENT, DRAWER_STACK_MAX_COUNT, DateComponent, DeleteCollectionDialog, DidYouMeanComponent, DocumentLocatorComponent, DrawerAdvancedFiltersComponent, DrawerComponent, DrawerNavbarComponent, DrawerPreviewComponent, DrawerService, DrawerStackComponent, DrawerStackService, DropdownInputComponent, DropdownListComponent, ErrorComponent, ExportDialog, ExportService, FILTERS_BREAKPOINT, FILTER_DATE_ALLOW_CUSTOM_RANGE, FeedbackDialogComponent, FileSizePipe, FilterButtonComponent, FiltersBarComponent, HIGHLIGHTS, HighlightWordPipe, InfinityScrollDirective, InlineWorker, JsonMethodPluginService, KeyboardNavigatorDirective, LabelService, LabelsEditDialog, LoadingComponent, MetadataComponent, MissingTermsComponent, MoreButtonComponent, MoreComponent, MultiSelectLabelsComponent, MultiSelectionToolbarComponent, NON_SEARCHABLE_COLUMNS, NON_SEARCHABLE_DEFAULTS, NavbarTabsComponent, NavigationService, NoResultComponent, OpenArticleOnCtrlEnterDirective, OperatorPipe, OverflowItemDirective, OverflowManagerDirective, OverflowStopDirective, OverrideUserDialogComponent, PREVIEW_CONFIG, PagerComponent, PasswordExpiryGuard, PreviewNavigator, PreviewService, PrincipalService, PrincipalStore, QueryParamsStore, QueryService, RECENT_SEARCHES_CONFIG, RECENT_SEARCHES_OPTIONS, ROUTE_COMPONENTS, RecentSearchesComponent, ResetUserSettingsDialogComponent, SAVED_SEARCHES_CONFIG, SAVED_SEARCHES_OPTIONS, SavedSearchDialog, SavedSearchesComponent, SavedSearchesService, SearchFeedbackComponent, SearchInputFooter, SearchService, SelectArticleOnClickDirective, SelectionHistoryService, SelectionService, SelectionStore, ShowBookmarkDirective, SignInComponent, SortSelectorComponent, SourceComponent, SourceIconPipe, SponsoredResultsComponent, SyslangPipe, THEMES, TextChunkService, ThemeProviderDirective, ThemeSelectorComponent, ThemeStore, ThemeToggleComponent, TranslocoDateImpurePipe, UserSettingsStore, applyThemeToNativeElement, auditInterceptorFn, authInterceptorFn, bodyInterceptorFn, buildQuery, debouncedSignal, errorInterceptorFn, getCurrentPath, getCurrentQueryName, getQueryNameFromRoute, processCssVars, queryNameResolver, signIn, themeColorNameToCssVariable, themeColorsToCssVariables, toastInterceptorFn, withAggregationsFeatures, withAlertsFeatures, withAppCustomizationFeatures, withAppFeatures, withApplicationFeatures, withAssistantFeatures, withBasketsFeatures, withBookmarkFeatures, withBootstrapApp, withExtractsFeatures, withFetch, withMultiSelectionFeatures, withPrincipalFeatures, withQueryParamsFeatures, withRecentSearchesFeatures, withSavedSearchesFeatures, withSelectionFeatures, withThemeBodyHook, withThemes, withThemesFeatures, withUserSettingsFeatures };
13788
+ export { AGGREGATIONS_NAMES, AGGREGATIONS_NAMES_PRESET_DEFAULT, APP_FEATURES, AdvancedSearchComponent, AggregationComponent, AggregationsService, AggregationsStore, Alert, AlertDialog, AlertsComponent, AppService, AppStore, ApplicationService, ApplicationStore, AsideFiltersComponent, AuditFeedbackType, AuditService, AuthGuard, AuthPageComponent, AutocompleteService, BOOKMARKS_CONFIG, BOOKMARKS_OPTIONS, BackdropComponent, BackdropService, BookmarkButtonComponent, BookmarksComponent, COLLECTIONS_CONFIG, COLLECTIONS_OPTIONS, COMPONENTS_FOR_DOCUMENT_TYPE, ChangePasswordComponent, ChildMarkerDirective, CollectionsComponent, CollectionsDialog, DRAWER_COMPONENT, DRAWER_STACK_MAX_COUNT, DateComponent, DeleteCollectionDialog, DidYouMeanComponent, DocumentLocatorComponent, DrawerAdvancedFiltersComponent, DrawerComponent, DrawerNavbarComponent, DrawerPreviewComponent, DrawerService, DrawerStackComponent, DrawerStackService, DropdownInputComponent, DropdownListComponent, ErrorComponent, ExportDialog, ExportService, FILTERS_BREAKPOINT, FILTER_DATE_ALLOW_CUSTOM_RANGE, FeedbackDialogComponent, FileSizePipe, FilterButtonComponent, FiltersBarComponent, HIGHLIGHTS, HighlightWordPipe, InfinityScrollDirective, InlineWorker, JsonMethodPluginService, KeyboardNavigatorDirective, LabelService, LabelsEditDialog, LoadingComponent, MetadataComponent, MissingTermsComponent, MoreButtonComponent, MoreComponent, MultiSelectLabelsComponent, MultiSelectionToolbarComponent, NON_SEARCHABLE_COLUMNS, NON_SEARCHABLE_DEFAULTS, NavbarTabsComponent, NavigationService, NoResultComponent, OpenArticleOnCtrlEnterDirective, OperatorPipe, OverflowItemDirective, OverflowManagerDirective, OverflowStopDirective, OverrideUserDialogComponent, PREVIEW_CONFIG, PagerComponent, PasswordExpiryGuard, PreviewNavigator, PreviewService, PrincipalService, PrincipalStore, QueryParamsStore, QueryService, RECENT_SEARCHES_CONFIG, RECENT_SEARCHES_OPTIONS, ROUTE_COMPONENTS, RecentSearchesComponent, ResetUserSettingsDialogComponent, SAVED_SEARCHES_CONFIG, SAVED_SEARCHES_OPTIONS, SavedSearchDialog, SavedSearchesComponent, SavedSearchesService, SearchFeedbackComponent, SearchInputFooter, SearchService, SelectArticleOnClickDirective, SelectionHistoryService, SelectionService, SelectionStore, ShowBookmarkDirective, SignInComponent, SortSelectorComponent, SourceComponent, SourceIconPipe, SponsoredResultsComponent, SyslangPipe, THEMES, TextChunkService, ThemeProviderDirective, ThemeSelectorComponent, ThemeStore, ThemeToggleComponent, TranslocoDateImpurePipe, UserProfileDialog, UserProfileFormComponent, UserProfileService, UserSettingsStore, applyThemeToNativeElement, auditInterceptorFn, authInterceptorFn, bodyInterceptorFn, buildQuery, debouncedSignal, errorInterceptorFn, getCurrentPath, getCurrentQueryName, getQueryNameFromRoute, processCssVars, queryNameResolver, signIn, themeColorNameToCssVariable, themeColorsToCssVariables, toastInterceptorFn, withAggregationsFeatures, withAlertsFeatures, withAppFeatures, withApplicationFeatures, withAssistantFeatures, withBasketsFeatures, withBookmarkFeatures, withBootstrapApp, withExtractsFeatures, withFetch, withMultiSelectionFeatures, withPrincipalFeatures, withQueryParamsFeatures, withRecentSearchesFeatures, withSavedSearchesFeatures, withSelectionFeatures, withThemeBodyHook, withThemes, withThemesFeatures, withUserSettingsFeatures };
13386
13789
  //# sourceMappingURL=sinequa-atomic-angular.mjs.map