@sinequa/atomic-angular 0.3.8 → 0.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/features/auth/i18n/de.json +2 -0
- package/features/auth/i18n/en.json +2 -0
- package/features/auth/i18n/fr.json +2 -0
- package/features/labels/i18n/de.json +2 -1
- package/features/labels/i18n/en.json +2 -1
- package/features/labels/i18n/fr.json +2 -1
- package/features/user-profile/i18n/de.json +13 -0
- package/features/user-profile/i18n/en.json +13 -0
- package/features/user-profile/i18n/fr.json +13 -0
- package/fesm2022/sinequa-atomic-angular.mjs +958 -492
- package/fesm2022/sinequa-atomic-angular.mjs.map +1 -1
- package/index.d.ts +378 -211
- package/package.json +5 -1
|
@@ -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,
|
|
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.
|
|
34
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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.
|
|
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.
|
|
54
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
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.
|
|
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.
|
|
87
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
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.
|
|
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.
|
|
129
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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.
|
|
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()
|
|
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
|
|
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(
|
|
685
|
+
getAggregationCustomization(aggColumn, aggName) {
|
|
690
686
|
// Be careful, because the column might not be defined in the filters JSON configuration file.
|
|
691
|
-
|
|
692
|
-
const
|
|
693
|
-
|
|
694
|
-
if
|
|
695
|
-
|
|
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
|
-
//
|
|
710
|
-
|
|
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.
|
|
754
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
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.
|
|
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.
|
|
826
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
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.
|
|
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.
|
|
880
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
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.
|
|
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.
|
|
915
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
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.
|
|
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.
|
|
985
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
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.
|
|
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.
|
|
998
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
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.
|
|
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.
|
|
1059
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
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.
|
|
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.
|
|
1142
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.
|
|
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.
|
|
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.
|
|
1256
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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.
|
|
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'
|
|
@@ -1544,7 +1561,7 @@ class QueryService {
|
|
|
1544
1561
|
transloco = inject(TranslocoService);
|
|
1545
1562
|
API_URL = `${globalConfig.backendUrl}/api/v1`;
|
|
1546
1563
|
// Represents the last result of a search operation with getResult().
|
|
1547
|
-
result = {};
|
|
1564
|
+
result = signal({}, ...(ngDevMode ? [{ debugName: "result" }] : []));
|
|
1548
1565
|
audit;
|
|
1549
1566
|
/**
|
|
1550
1567
|
* Performs a search query.
|
|
@@ -1558,20 +1575,27 @@ class QueryService {
|
|
|
1558
1575
|
// if audit is set, always use it
|
|
1559
1576
|
// if this.audit is set and audit is not set use this.audit
|
|
1560
1577
|
// if this.audit is not set and audit is not set use default audit
|
|
1561
|
-
const newAudit = audit ?? this.audit ?? { type:
|
|
1578
|
+
const newAudit = audit ?? this.audit ?? { type: "Search_Text", detail: { querytext: q?.text } };
|
|
1562
1579
|
const $auditRecord = { auditEvents: [newAudit] };
|
|
1563
1580
|
this.audit = undefined; // reset this.audit after using it
|
|
1581
|
+
this.result.set({}); // reset results for new search
|
|
1564
1582
|
const { app } = globalConfig;
|
|
1565
1583
|
const currentQuery = q ?? this.queryParamsStore.getQuery();
|
|
1566
1584
|
const query = includeQueryParams ? { ...this.queryParamsStore.getQuery(), ...currentQuery } : currentQuery;
|
|
1567
1585
|
// Check if the search query is empty and if empty searches are allowed
|
|
1568
1586
|
// If not allowed, return an empty result
|
|
1569
|
-
//
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
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") {
|
|
1595
|
+
const allowEmptySearch = this.appStore.allowEmptySearch(query?.name || "");
|
|
1596
|
+
if (allowEmptySearch === false && query?.text === "") {
|
|
1597
|
+
warn("QueryService.search: Empty search query is not allowed. Returning empty result.");
|
|
1598
|
+
notify.warning(this.transloco.translate("searches.emptySearch"));
|
|
1575
1599
|
return of({ records: [] });
|
|
1576
1600
|
}
|
|
1577
1601
|
}
|
|
@@ -1580,8 +1604,8 @@ class QueryService {
|
|
|
1580
1604
|
query,
|
|
1581
1605
|
$auditRecord
|
|
1582
1606
|
};
|
|
1583
|
-
return this.http.post(this.API_URL
|
|
1584
|
-
error(
|
|
1607
|
+
return this.http.post(`${this.API_URL}/query`, body).pipe(catchError((err) => {
|
|
1608
|
+
error("queryService.getResults failure - error: ", err);
|
|
1585
1609
|
return of({});
|
|
1586
1610
|
}), map((result) => {
|
|
1587
1611
|
// update $hasMore flag
|
|
@@ -1599,19 +1623,21 @@ class QueryService {
|
|
|
1599
1623
|
}
|
|
1600
1624
|
});
|
|
1601
1625
|
return result;
|
|
1602
|
-
}), map(result => {
|
|
1603
|
-
result.records?.map((article) => Object.assign(article, { value: article.title, type:
|
|
1626
|
+
}), map((result) => {
|
|
1627
|
+
result.records?.map((article) => Object.assign(article, { value: article.title, type: "default" }));
|
|
1604
1628
|
return result;
|
|
1605
|
-
}), map(result => {
|
|
1629
|
+
}), map((result) => {
|
|
1606
1630
|
const r = {
|
|
1607
1631
|
...result,
|
|
1608
|
-
nextPage: result.page !== undefined && result.page < Math.ceil(result.rowCount / result.pageSize)
|
|
1632
|
+
nextPage: result.page !== undefined && result.page < Math.ceil(result.rowCount / result.pageSize)
|
|
1633
|
+
? result.page + 1
|
|
1634
|
+
: undefined,
|
|
1609
1635
|
previousPage: result.page !== undefined && result.page > 1 ? result.page - 1 : undefined
|
|
1610
1636
|
};
|
|
1611
1637
|
return r;
|
|
1612
|
-
}), tap(response => {
|
|
1613
|
-
this.result
|
|
1614
|
-
info(
|
|
1638
|
+
}), tap((response) => {
|
|
1639
|
+
this.result.set(response);
|
|
1640
|
+
info("queryService.getResults success - data: ", response);
|
|
1615
1641
|
}));
|
|
1616
1642
|
}
|
|
1617
1643
|
/**
|
|
@@ -1622,7 +1648,7 @@ class QueryService {
|
|
|
1622
1648
|
* @returns An Observable that emits an array of Result objects.
|
|
1623
1649
|
*/
|
|
1624
1650
|
bulkSearch(q, audit) {
|
|
1625
|
-
const { app =
|
|
1651
|
+
const { app = "" } = globalConfig;
|
|
1626
1652
|
const body = {
|
|
1627
1653
|
methods: [],
|
|
1628
1654
|
propagateErrors: true,
|
|
@@ -1630,15 +1656,15 @@ class QueryService {
|
|
|
1630
1656
|
};
|
|
1631
1657
|
for (const query of q) {
|
|
1632
1658
|
body.methods.push({
|
|
1633
|
-
method:
|
|
1659
|
+
method: "query",
|
|
1634
1660
|
app,
|
|
1635
1661
|
query
|
|
1636
1662
|
});
|
|
1637
1663
|
}
|
|
1638
|
-
return this.http.post(this.API_URL
|
|
1639
|
-
error(
|
|
1664
|
+
return this.http.post(`${this.API_URL}/multi`, body).pipe(catchError((err) => {
|
|
1665
|
+
error("queryService.bulkSearch failure - error: ", err);
|
|
1640
1666
|
return EMPTY;
|
|
1641
|
-
}), map(response => {
|
|
1667
|
+
}), map((response) => {
|
|
1642
1668
|
// update $hasMore flag
|
|
1643
1669
|
response.results.forEach((result) => {
|
|
1644
1670
|
result.aggregations.forEach((agg) => {
|
|
@@ -1656,11 +1682,13 @@ class QueryService {
|
|
|
1656
1682
|
});
|
|
1657
1683
|
});
|
|
1658
1684
|
return response.results;
|
|
1659
|
-
}), map(results => {
|
|
1660
|
-
results.forEach(result
|
|
1685
|
+
}), map((results) => {
|
|
1686
|
+
results.forEach((result) => {
|
|
1687
|
+
result.records?.map((article) => Object.assign(article, { value: article.title, type: "default" }));
|
|
1688
|
+
});
|
|
1661
1689
|
return results;
|
|
1662
|
-
}), map(results => {
|
|
1663
|
-
return results.map(result => {
|
|
1690
|
+
}), map((results) => {
|
|
1691
|
+
return results.map((result) => {
|
|
1664
1692
|
const r = {
|
|
1665
1693
|
...result,
|
|
1666
1694
|
nextPage: result.page < Math.ceil(result.rowCount / result.pageSize) ? result.page + 1 : undefined,
|
|
@@ -1670,8 +1698,8 @@ class QueryService {
|
|
|
1670
1698
|
});
|
|
1671
1699
|
}),
|
|
1672
1700
|
// map(response => ResultsSchema.parse(response) as T),
|
|
1673
|
-
tap(response => {
|
|
1674
|
-
info(
|
|
1701
|
+
tap((response) => {
|
|
1702
|
+
info("queryService.bulkSearch success - data: ", response);
|
|
1675
1703
|
}));
|
|
1676
1704
|
}
|
|
1677
1705
|
/**
|
|
@@ -1681,21 +1709,21 @@ class QueryService {
|
|
|
1681
1709
|
*/
|
|
1682
1710
|
gotoPage(page) {
|
|
1683
1711
|
const audit = {
|
|
1684
|
-
type:
|
|
1712
|
+
type: "Search_GotoPage",
|
|
1685
1713
|
detail: {
|
|
1686
1714
|
page: page,
|
|
1687
|
-
fromresultid: this.result
|
|
1715
|
+
fromresultid: this.result()?.id ?? null
|
|
1688
1716
|
}
|
|
1689
1717
|
};
|
|
1690
1718
|
this.queryParamsStore.patch({ page }, audit);
|
|
1691
1719
|
}
|
|
1692
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
1693
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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" });
|
|
1694
1722
|
}
|
|
1695
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
1723
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: QueryService, decorators: [{
|
|
1696
1724
|
type: Injectable,
|
|
1697
1725
|
args: [{
|
|
1698
|
-
providedIn:
|
|
1726
|
+
providedIn: "root"
|
|
1699
1727
|
}]
|
|
1700
1728
|
}] });
|
|
1701
1729
|
|
|
@@ -1749,6 +1777,7 @@ class AggregationsService {
|
|
|
1749
1777
|
const expression = `${aggregation.column}:${escapeExpr(value)}`;
|
|
1750
1778
|
const q = {
|
|
1751
1779
|
...query,
|
|
1780
|
+
text: "",
|
|
1752
1781
|
action: "open",
|
|
1753
1782
|
open: [{ expression, aggregation: aggregation.name }]
|
|
1754
1783
|
};
|
|
@@ -1957,34 +1986,34 @@ class AggregationsService {
|
|
|
1957
1986
|
return authorizedFilters;
|
|
1958
1987
|
}
|
|
1959
1988
|
getFilterCriteria = () => {
|
|
1960
|
-
//
|
|
1961
|
-
//
|
|
1962
|
-
return (
|
|
1963
|
-
return this.appStore.filters().some((
|
|
1964
|
-
// if
|
|
1965
|
-
if (
|
|
1966
|
-
return
|
|
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();
|
|
1967
1996
|
}
|
|
1968
1997
|
// fallback to column comparison
|
|
1969
1998
|
// column can be a column's name or an alias
|
|
1970
1999
|
// resolve ambiguity between column and alias
|
|
1971
2000
|
const { columnMap } = getState(this.appStore);
|
|
1972
2001
|
// get the actual column for both filter and f
|
|
1973
|
-
const
|
|
1974
|
-
const
|
|
2002
|
+
const aggColumn = columnMap?.[agg.column.toLocaleLowerCase()];
|
|
2003
|
+
const filterColumn = columnMap?.[filter?.column?.toLocaleLowerCase() || filter.name.toLocaleLowerCase()];
|
|
1975
2004
|
// if either column is not found, fallback to comparing the raw values
|
|
1976
|
-
if (!
|
|
1977
|
-
return
|
|
2005
|
+
if (!aggColumn || !filterColumn) {
|
|
2006
|
+
return filter?.column?.toLocaleLowerCase() === agg?.column?.toLocaleLowerCase();
|
|
1978
2007
|
}
|
|
1979
2008
|
// compare the actual column names coming from the column map
|
|
1980
|
-
return
|
|
2009
|
+
return aggColumn?.name === filterColumn?.name;
|
|
1981
2010
|
});
|
|
1982
2011
|
};
|
|
1983
2012
|
};
|
|
1984
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
1985
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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" });
|
|
1986
2015
|
}
|
|
1987
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
2016
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AggregationsService, decorators: [{
|
|
1988
2017
|
type: Injectable,
|
|
1989
2018
|
args: [{
|
|
1990
2019
|
providedIn: "root"
|
|
@@ -2034,7 +2063,7 @@ function AuthGuard() {
|
|
|
2034
2063
|
sessionStorage.setItem("passwordExpiredFlow", "true");
|
|
2035
2064
|
const username = (p.name || "").trim();
|
|
2036
2065
|
router.navigate(["/login"], {
|
|
2037
|
-
queryParams: { mode: "changepassword", username, returnUrl: state.url }
|
|
2066
|
+
queryParams: { mode: "changepassword", alert: "passwordExpired", username, returnUrl: state.url }
|
|
2038
2067
|
});
|
|
2039
2068
|
return false;
|
|
2040
2069
|
}
|
|
@@ -2084,7 +2113,7 @@ function PasswordExpiryGuard() {
|
|
|
2084
2113
|
sessionStorage.setItem("passwordExpiredFlow", "true");
|
|
2085
2114
|
const username = (p.name || "").trim();
|
|
2086
2115
|
router.navigate(["/login"], {
|
|
2087
|
-
queryParams: { mode: "changepassword", username, returnUrl: state.url }
|
|
2116
|
+
queryParams: { mode: "changepassword", alert: "passwordExpired", username, returnUrl: state.url }
|
|
2088
2117
|
});
|
|
2089
2118
|
return false;
|
|
2090
2119
|
}
|
|
@@ -2967,10 +2996,10 @@ class ApplicationService {
|
|
|
2967
2996
|
this.titleService.setTitle(title);
|
|
2968
2997
|
}
|
|
2969
2998
|
}
|
|
2970
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
2971
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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" });
|
|
2972
3001
|
}
|
|
2973
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3002
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationService, decorators: [{
|
|
2974
3003
|
type: Injectable,
|
|
2975
3004
|
args: [{
|
|
2976
3005
|
providedIn: "root"
|
|
@@ -3082,10 +3111,10 @@ class AuditService {
|
|
|
3082
3111
|
}
|
|
3083
3112
|
});
|
|
3084
3113
|
}
|
|
3085
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3086
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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' });
|
|
3087
3116
|
}
|
|
3088
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuditService, decorators: [{
|
|
3089
3118
|
type: Injectable,
|
|
3090
3119
|
args: [{
|
|
3091
3120
|
providedIn: 'root'
|
|
@@ -3153,10 +3182,10 @@ class AutocompleteService {
|
|
|
3153
3182
|
}
|
|
3154
3183
|
return items;
|
|
3155
3184
|
}
|
|
3156
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3157
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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' });
|
|
3158
3187
|
}
|
|
3159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3188
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AutocompleteService, decorators: [{
|
|
3160
3189
|
type: Injectable,
|
|
3161
3190
|
args: [{
|
|
3162
3191
|
providedIn: 'root'
|
|
@@ -3194,10 +3223,10 @@ class JsonMethodPluginService {
|
|
|
3194
3223
|
...options
|
|
3195
3224
|
});
|
|
3196
3225
|
}
|
|
3197
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3198
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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' });
|
|
3199
3228
|
}
|
|
3200
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3229
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: JsonMethodPluginService, decorators: [{
|
|
3201
3230
|
type: Injectable,
|
|
3202
3231
|
args: [{
|
|
3203
3232
|
providedIn: 'root'
|
|
@@ -3233,10 +3262,10 @@ class NavigationService {
|
|
|
3233
3262
|
this.urlAfterNavigation = event.url;
|
|
3234
3263
|
}
|
|
3235
3264
|
}), shareReplay(1));
|
|
3236
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3237
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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" });
|
|
3238
3267
|
}
|
|
3239
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3268
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NavigationService, decorators: [{
|
|
3240
3269
|
type: Injectable,
|
|
3241
3270
|
args: [{
|
|
3242
3271
|
providedIn: "root"
|
|
@@ -3416,6 +3445,8 @@ class PreviewService {
|
|
|
3416
3445
|
customHighlights,
|
|
3417
3446
|
$auditRecord
|
|
3418
3447
|
};
|
|
3448
|
+
// reset preview data
|
|
3449
|
+
this.previewData = undefined;
|
|
3419
3450
|
return this.http
|
|
3420
3451
|
.post(`${this.API_URL}/preview`, body)
|
|
3421
3452
|
.pipe(tap((data) => this.setPreviewData(data)));
|
|
@@ -3443,7 +3474,7 @@ class PreviewService {
|
|
|
3443
3474
|
const query = this.queryParamsStore.getQuery();
|
|
3444
3475
|
try {
|
|
3445
3476
|
const detail = this.getAuditPreviewDetail(article.id, query);
|
|
3446
|
-
const result = this.queryService.result;
|
|
3477
|
+
const result = this.queryService.result();
|
|
3447
3478
|
this.auditService.notifyDocument("Click_ResultLink", article, result || detail.resultid || "", {
|
|
3448
3479
|
querytext: detail.querytext,
|
|
3449
3480
|
querylang: detail.querylang,
|
|
@@ -3573,7 +3604,7 @@ class PreviewService {
|
|
|
3573
3604
|
this.sendMessage({ action: "highlight", highlights });
|
|
3574
3605
|
}
|
|
3575
3606
|
getAuditPreviewDetail(id, q) {
|
|
3576
|
-
const results = this.queryService.result;
|
|
3607
|
+
const results = this.queryService.result();
|
|
3577
3608
|
const queryLanguage = results?.queryAnalysis?.queryLanguage ||
|
|
3578
3609
|
q?.questionLanguage ||
|
|
3579
3610
|
(q.name && this.appStore.getQueryByName(q.name)?.questionLanguage) ||
|
|
@@ -3664,10 +3695,10 @@ class PreviewService {
|
|
|
3664
3695
|
this.currentPage.set(this.totalPages());
|
|
3665
3696
|
this.sendMessage({ action: "last-page" });
|
|
3666
3697
|
}
|
|
3667
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3668
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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" });
|
|
3669
3700
|
}
|
|
3670
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3701
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PreviewService, decorators: [{
|
|
3671
3702
|
type: Injectable,
|
|
3672
3703
|
args: [{
|
|
3673
3704
|
providedIn: "root"
|
|
@@ -3732,10 +3763,10 @@ class SavedSearchesService {
|
|
|
3732
3763
|
deleteSavedSearch(index) {
|
|
3733
3764
|
this.userSettingsStore.deleteSavedSearch(index);
|
|
3734
3765
|
}
|
|
3735
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3736
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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' });
|
|
3737
3768
|
}
|
|
3738
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3769
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedSearchesService, decorators: [{
|
|
3739
3770
|
type: Injectable,
|
|
3740
3771
|
args: [{
|
|
3741
3772
|
providedIn: 'root'
|
|
@@ -3828,10 +3859,10 @@ class SearchService {
|
|
|
3828
3859
|
}
|
|
3829
3860
|
});
|
|
3830
3861
|
}
|
|
3831
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3832
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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' });
|
|
3833
3864
|
}
|
|
3834
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
3865
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchService, decorators: [{
|
|
3835
3866
|
type: Injectable,
|
|
3836
3867
|
args: [{
|
|
3837
3868
|
providedIn: 'root'
|
|
@@ -3992,10 +4023,10 @@ class SelectionService {
|
|
|
3992
4023
|
const url = this.router.createUrlTree([], { relativeTo: this.route, queryParams }).toString();
|
|
3993
4024
|
this.location.replaceState(url);
|
|
3994
4025
|
}
|
|
3995
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
3996
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
4026
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4027
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectionService, providedIn: 'root' });
|
|
3997
4028
|
}
|
|
3998
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
4029
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectionService, decorators: [{
|
|
3999
4030
|
type: Injectable,
|
|
4000
4031
|
args: [{
|
|
4001
4032
|
providedIn: 'root'
|
|
@@ -4079,10 +4110,10 @@ class SelectionHistoryService {
|
|
|
4079
4110
|
this.selectionHistoryEvent.next('back');
|
|
4080
4111
|
return last;
|
|
4081
4112
|
}
|
|
4082
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
4083
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
4113
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectionHistoryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4114
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectionHistoryService, providedIn: 'root' });
|
|
4084
4115
|
}
|
|
4085
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
4116
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectionHistoryService, decorators: [{
|
|
4086
4117
|
type: Injectable,
|
|
4087
4118
|
args: [{
|
|
4088
4119
|
providedIn: 'root'
|
|
@@ -4117,16 +4148,41 @@ class TextChunkService {
|
|
|
4117
4148
|
return [];
|
|
4118
4149
|
}));
|
|
4119
4150
|
}
|
|
4120
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
4121
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
4151
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TextChunkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4152
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TextChunkService, providedIn: 'root' });
|
|
4122
4153
|
}
|
|
4123
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
4154
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TextChunkService, decorators: [{
|
|
4124
4155
|
type: Injectable,
|
|
4125
4156
|
args: [{
|
|
4126
4157
|
providedIn: 'root'
|
|
4127
4158
|
}]
|
|
4128
4159
|
}] });
|
|
4129
4160
|
|
|
4161
|
+
class UserProfileService {
|
|
4162
|
+
API_URL = `${globalConfig.backendUrl}/api/v2/user-profile`;
|
|
4163
|
+
/**
|
|
4164
|
+
* Retrieves the user profile by user ID.
|
|
4165
|
+
*
|
|
4166
|
+
* @param id - The ID of the user.
|
|
4167
|
+
* @returns An Observable that emits an the UserProfile object.
|
|
4168
|
+
*/
|
|
4169
|
+
getUserProfile(principal) {
|
|
4170
|
+
return httpResource(() => (principal()?.userId ? `${this.API_URL}/${principal()?.userId}` : undefined), {
|
|
4171
|
+
parse: (response) => {
|
|
4172
|
+
return response;
|
|
4173
|
+
}
|
|
4174
|
+
});
|
|
4175
|
+
}
|
|
4176
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4177
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileService, providedIn: "root" });
|
|
4178
|
+
}
|
|
4179
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileService, decorators: [{
|
|
4180
|
+
type: Injectable,
|
|
4181
|
+
args: [{
|
|
4182
|
+
providedIn: "root"
|
|
4183
|
+
}]
|
|
4184
|
+
}] });
|
|
4185
|
+
|
|
4130
4186
|
async function signIn() {
|
|
4131
4187
|
assertInInjectionContext(signIn);
|
|
4132
4188
|
const router = inject(Router);
|
|
@@ -4293,7 +4349,7 @@ function withQueryParamsFeatures() {
|
|
|
4293
4349
|
/**
|
|
4294
4350
|
* Sets the state from the given URL by extracting query parameters and updating the store.
|
|
4295
4351
|
*
|
|
4296
|
-
* @param
|
|
4352
|
+
* @param href - The URL containing query parameters to set the state from.
|
|
4297
4353
|
*
|
|
4298
4354
|
* The function performs the following steps:
|
|
4299
4355
|
* 1. Extracts the path from the URL.
|
|
@@ -4302,11 +4358,13 @@ function withQueryParamsFeatures() {
|
|
|
4302
4358
|
* 4. Converts the page parameter to a number if it exists.
|
|
4303
4359
|
* 5. Updates the store state with the extracted and parsed values.
|
|
4304
4360
|
*/
|
|
4305
|
-
setFromUrl(
|
|
4306
|
-
if (!
|
|
4361
|
+
setFromUrl(href) {
|
|
4362
|
+
if (!href)
|
|
4307
4363
|
return;
|
|
4308
|
-
|
|
4309
|
-
const
|
|
4364
|
+
// get the hash path without the query params and without the leading '#'
|
|
4365
|
+
const url = new URL(href, window.location.origin);
|
|
4366
|
+
const path = url.hash.split("?")[0].replace(/^#/, "");
|
|
4367
|
+
const { q: text, f, id, p, s: sort, c, t: tab, basket, n: name } = queryParamsFromUrl(href);
|
|
4310
4368
|
const filters = f ? JSON.parse(decodeURIComponent(f)) : [];
|
|
4311
4369
|
const spellingCorrectionMode = c;
|
|
4312
4370
|
let page;
|
|
@@ -4314,18 +4372,19 @@ function withQueryParamsFeatures() {
|
|
|
4314
4372
|
page = parseInt(p, 10);
|
|
4315
4373
|
}
|
|
4316
4374
|
patchState(store, (state) => {
|
|
4317
|
-
return { ...state, path, text, filters, id, page, sort, spellingCorrectionMode, tab, basket };
|
|
4375
|
+
return { ...state, path, text, filters, id, page, sort, spellingCorrectionMode, tab, basket, name };
|
|
4318
4376
|
});
|
|
4319
4377
|
},
|
|
4320
4378
|
_updateUrlQueryParams(state, audit) {
|
|
4321
|
-
const { filters, page, sort, tab, text, basket } = state;
|
|
4379
|
+
const { filters, page, sort, tab, text, basket, name } = state;
|
|
4322
4380
|
const queryParams = {
|
|
4323
4381
|
f: filters && filters.length > 0 ? JSON.stringify(filters) : undefined,
|
|
4324
4382
|
p: page,
|
|
4325
4383
|
s: sort,
|
|
4326
4384
|
t: tab,
|
|
4327
4385
|
q: text,
|
|
4328
|
-
b: basket
|
|
4386
|
+
b: basket,
|
|
4387
|
+
n: name
|
|
4329
4388
|
};
|
|
4330
4389
|
router.navigate([], { relativeTo: route, queryParamsHandling: "merge", queryParams, state: { audit } });
|
|
4331
4390
|
},
|
|
@@ -4337,7 +4396,8 @@ function withQueryParamsFeatures() {
|
|
|
4337
4396
|
s: state.sort,
|
|
4338
4397
|
t: state.tab,
|
|
4339
4398
|
q: state.text,
|
|
4340
|
-
b: state.basket
|
|
4399
|
+
b: state.basket,
|
|
4400
|
+
n: state.name
|
|
4341
4401
|
};
|
|
4342
4402
|
},
|
|
4343
4403
|
/**
|
|
@@ -4379,7 +4439,8 @@ function withQueryParamsFeatures() {
|
|
|
4379
4439
|
// cancel if a filter is found for the current field which contains the value we want to add
|
|
4380
4440
|
if (existingFilter &&
|
|
4381
4441
|
filter.value &&
|
|
4382
|
-
(existingFilter.value === filter.value
|
|
4442
|
+
(existingFilter.value?.toLowerCase() === filter.value?.toLowerCase() ||
|
|
4443
|
+
existingFilter.values?.some((v) => v?.toLowerCase() === filter.value?.toLowerCase())))
|
|
4383
4444
|
return state;
|
|
4384
4445
|
if (existingFilter) {
|
|
4385
4446
|
// if filter found for the field without the value we want to add, merge the filters and values
|
|
@@ -4503,7 +4564,9 @@ function withQueryParamsFeatures() {
|
|
|
4503
4564
|
*/
|
|
4504
4565
|
patch(params, audit) {
|
|
4505
4566
|
patchState(store, (state) => {
|
|
4506
|
-
|
|
4567
|
+
// get the hash path without the query params and without the leading '#'
|
|
4568
|
+
const path = window.location.hash.split("?")[0].replace(/^#/, "");
|
|
4569
|
+
const newState = { ...state, ...params, path };
|
|
4507
4570
|
this._updateUrlQueryParams(newState, audit);
|
|
4508
4571
|
return newState;
|
|
4509
4572
|
});
|
|
@@ -4570,7 +4633,14 @@ function withQueryParamsFeatures() {
|
|
|
4570
4633
|
* @returns Query The constructed query object.
|
|
4571
4634
|
*/
|
|
4572
4635
|
getQuery() {
|
|
4573
|
-
const { filters: allFilters = [], sort, tab, basket, text: queryText = "",
|
|
4636
|
+
const { filters: allFilters = [], sort, tab, basket, text: queryText = "", spellingCorrectionMode } = getState(store);
|
|
4637
|
+
// check if a query name is defined
|
|
4638
|
+
// if not, try to get it from the route data or from the default query in the app store
|
|
4639
|
+
let { name } = getState(store);
|
|
4640
|
+
if (!name) {
|
|
4641
|
+
const routeData = route.snapshot.firstChild?.children[0]?.data;
|
|
4642
|
+
name = routeData ? routeData["queryName"] : appStore.getDefaultQuery()?.name || "";
|
|
4643
|
+
}
|
|
4574
4644
|
let text = queryText;
|
|
4575
4645
|
// remove concepts filters from the query to add them in the query expression
|
|
4576
4646
|
const [conceptsFilters] = allFilters.filter((f) => f.field === "concepts");
|
|
@@ -4737,10 +4807,10 @@ class SourceComponent {
|
|
|
4737
4807
|
}
|
|
4738
4808
|
return { iconClass: defaultIconClass };
|
|
4739
4809
|
}, ...(ngDevMode ? [{ debugName: "iconDetails" }] : []));
|
|
4740
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
4741
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
4810
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SourceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4811
|
+
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" }] });
|
|
4742
4812
|
}
|
|
4743
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
4813
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SourceComponent, decorators: [{
|
|
4744
4814
|
type: Component,
|
|
4745
4815
|
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" }]
|
|
4746
4816
|
}], propDecorators: { collection: [{ type: i0.Input, args: [{ isSignal: true, alias: "collection", required: false }] }], connector: [{ type: i0.Input, args: [{ isSignal: true, alias: "connector", required: false }] }] } });
|
|
@@ -4825,8 +4895,8 @@ class DocumentLocatorComponent {
|
|
|
4825
4895
|
const { filters } = getState(this.queryParamStore);
|
|
4826
4896
|
this.router.navigate([], { queryParams: { f: JSON.stringify(filters) }, queryParamsHandling: "merge" });
|
|
4827
4897
|
}
|
|
4828
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
4829
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
4898
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentLocatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4899
|
+
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: `
|
|
4830
4900
|
<!-- Renders all segment hidden to user to compute width -->
|
|
4831
4901
|
<div #shadowRender class="pointer-events-none invisible absolute left-0 top-0 -z-10 flex gap-2">
|
|
4832
4902
|
@for (segment of locationSegments(); track $index) {
|
|
@@ -4875,7 +4945,7 @@ class DocumentLocatorComponent {
|
|
|
4875
4945
|
</div>
|
|
4876
4946
|
`, 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"] }] });
|
|
4877
4947
|
}
|
|
4878
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
4948
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentLocatorComponent, decorators: [{
|
|
4879
4949
|
type: Component,
|
|
4880
4950
|
args: [{
|
|
4881
4951
|
selector: "document-locator, DocumentLocator",
|
|
@@ -4948,8 +5018,8 @@ class ErrorComponent {
|
|
|
4948
5018
|
reload() {
|
|
4949
5019
|
this.router.navigate(['/']).then(() => window.location.reload());
|
|
4950
5020
|
}
|
|
4951
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
4952
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
5021
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5022
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ErrorComponent, isStandalone: true, selector: "error-component, ErrorComponent", ngImport: i0, template: `
|
|
4953
5023
|
<div class="bg-background text-foreground flex min-h-screen flex-col items-center justify-center">
|
|
4954
5024
|
<svg
|
|
4955
5025
|
class="mb-8 h-20 w-20 text-red-600"
|
|
@@ -4992,7 +5062,7 @@ class ErrorComponent {
|
|
|
4992
5062
|
</div>
|
|
4993
5063
|
`, isInline: true });
|
|
4994
5064
|
}
|
|
4995
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5065
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ErrorComponent, decorators: [{
|
|
4996
5066
|
type: Component,
|
|
4997
5067
|
args: [{
|
|
4998
5068
|
selector: 'error-component, ErrorComponent',
|
|
@@ -5089,8 +5159,8 @@ class LoadingComponent {
|
|
|
5089
5159
|
});
|
|
5090
5160
|
}
|
|
5091
5161
|
}
|
|
5092
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5093
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
5162
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoadingComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
5163
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: LoadingComponent, isStandalone: true, selector: "app-wait", ngImport: i0, template: `
|
|
5094
5164
|
<div class="flex h-[100dvh] w-full items-center justify-center">
|
|
5095
5165
|
<div class="flex flex-col items-center space-y-4">
|
|
5096
5166
|
<span class="loader"></span>
|
|
@@ -5098,7 +5168,7 @@ class LoadingComponent {
|
|
|
5098
5168
|
</div>
|
|
5099
5169
|
`, 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"] });
|
|
5100
5170
|
}
|
|
5101
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5171
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoadingComponent, decorators: [{
|
|
5102
5172
|
type: Component,
|
|
5103
5173
|
args: [{ selector: 'app-wait', standalone: true, imports: [], template: `
|
|
5104
5174
|
<div class="flex h-[100dvh] w-full items-center justify-center">
|
|
@@ -5122,8 +5192,8 @@ class MetadataComponent {
|
|
|
5122
5192
|
handleClick(event, item) {
|
|
5123
5193
|
this.click.emit({ filter: item, event });
|
|
5124
5194
|
}
|
|
5125
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5126
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
5195
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MetadataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5196
|
+
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: `
|
|
5127
5197
|
@for (item of items().slice(0, limit()); track $index) {
|
|
5128
5198
|
@if (item) {
|
|
5129
5199
|
<badge
|
|
@@ -5136,7 +5206,7 @@ class MetadataComponent {
|
|
|
5136
5206
|
}
|
|
5137
5207
|
`, 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" }] });
|
|
5138
5208
|
}
|
|
5139
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5209
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MetadataComponent, decorators: [{
|
|
5140
5210
|
type: Component,
|
|
5141
5211
|
args: [{ selector: "Metadata, metadata", exportAs: "metadata", standalone: true, imports: [SyslangPipe, BadgeComponent], template: `
|
|
5142
5212
|
@for (item of items().slice(0, limit()); track $index) {
|
|
@@ -5170,10 +5240,10 @@ class MissingTermsComponent {
|
|
|
5170
5240
|
};
|
|
5171
5241
|
});
|
|
5172
5242
|
}, ...(ngDevMode ? [{ debugName: "missingTerms" }] : []));
|
|
5173
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5174
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
5243
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MissingTermsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5244
|
+
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" }] });
|
|
5175
5245
|
}
|
|
5176
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5246
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MissingTermsComponent, decorators: [{
|
|
5177
5247
|
type: Component,
|
|
5178
5248
|
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"] }]
|
|
5179
5249
|
}], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: true }] }] } });
|
|
@@ -5277,8 +5347,8 @@ class CollectionsDialog {
|
|
|
5277
5347
|
this.newCollectionName.set("");
|
|
5278
5348
|
this.creating.set(false);
|
|
5279
5349
|
}
|
|
5280
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5281
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
5350
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CollectionsDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5351
|
+
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: `
|
|
5282
5352
|
<dialog #dialog (closed)="closeBtn.click()">
|
|
5283
5353
|
<DialogContent>
|
|
5284
5354
|
<DialogHeader>
|
|
@@ -5344,7 +5414,7 @@ class CollectionsDialog {
|
|
|
5344
5414
|
</dialog>
|
|
5345
5415
|
`, 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" }] });
|
|
5346
5416
|
}
|
|
5347
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5417
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CollectionsDialog, decorators: [{
|
|
5348
5418
|
type: Component,
|
|
5349
5419
|
args: [{
|
|
5350
5420
|
selector: "add-to-collection-dialog",
|
|
@@ -5523,10 +5593,10 @@ class ExportService {
|
|
|
5523
5593
|
responseType: 'blob'
|
|
5524
5594
|
});
|
|
5525
5595
|
}
|
|
5526
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5527
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
5596
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5597
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExportService, providedIn: 'root' });
|
|
5528
5598
|
}
|
|
5529
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5599
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExportService, decorators: [{
|
|
5530
5600
|
type: Injectable,
|
|
5531
5601
|
args: [{
|
|
5532
5602
|
providedIn: 'root'
|
|
@@ -5598,8 +5668,8 @@ class ExportDialog {
|
|
|
5598
5668
|
this.maxCount.set(1);
|
|
5599
5669
|
}
|
|
5600
5670
|
}
|
|
5601
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5602
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
5671
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExportDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5672
|
+
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: `
|
|
5603
5673
|
<dialog #dialog>
|
|
5604
5674
|
<DialogContent
|
|
5605
5675
|
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">
|
|
@@ -5670,7 +5740,7 @@ class ExportDialog {
|
|
|
5670
5740
|
</dialog>
|
|
5671
5741
|
`, 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" }] });
|
|
5672
5742
|
}
|
|
5673
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5743
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExportDialog, decorators: [{
|
|
5674
5744
|
type: Component,
|
|
5675
5745
|
args: [{
|
|
5676
5746
|
selector: "export-dialog",
|
|
@@ -5808,8 +5878,8 @@ class MultiSelectionToolbarComponent {
|
|
|
5808
5878
|
});
|
|
5809
5879
|
openExportDialog = () => this.dialog.open(ExportDialog, this.ids());
|
|
5810
5880
|
attachToAssistant = () => this.selection.update({ assistantIdsToAttach: this.ids() });
|
|
5811
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5812
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
5881
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MultiSelectionToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5882
|
+
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: `
|
|
5813
5883
|
<menu id="multi-select-toolbar" [class]="cn(variants(), class())">
|
|
5814
5884
|
<li class="ps-0!">
|
|
5815
5885
|
{{ 'multiSelectionToolbar.itemsSelected' | transloco: { count: count() } }}
|
|
@@ -5843,7 +5913,7 @@ class MultiSelectionToolbarComponent {
|
|
|
5843
5913
|
</menu>
|
|
5844
5914
|
`, isInline: true, dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
5845
5915
|
}
|
|
5846
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
5916
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MultiSelectionToolbarComponent, decorators: [{
|
|
5847
5917
|
type: Component,
|
|
5848
5918
|
args: [{
|
|
5849
5919
|
selector: "MultiSelectionToolbar, multi-selection-toolbar",
|
|
@@ -5924,10 +5994,10 @@ class InfinityScrollDirective {
|
|
|
5924
5994
|
ngOnDestroy() {
|
|
5925
5995
|
this.observer.disconnect();
|
|
5926
5996
|
}
|
|
5927
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
5928
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.
|
|
5997
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InfinityScrollDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
5998
|
+
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 });
|
|
5929
5999
|
}
|
|
5930
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6000
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InfinityScrollDirective, decorators: [{
|
|
5931
6001
|
type: Directive,
|
|
5932
6002
|
args: [{
|
|
5933
6003
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -6231,10 +6301,10 @@ class KeyboardNavigatorDirective {
|
|
|
6231
6301
|
this.renderer.setAttribute(this.listboxElement(), 'aria-hidden', 'true');
|
|
6232
6302
|
this.ariaExpanded.set(false);
|
|
6233
6303
|
}
|
|
6234
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6235
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.
|
|
6304
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KeyboardNavigatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
6305
|
+
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 });
|
|
6236
6306
|
}
|
|
6237
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6307
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KeyboardNavigatorDirective, decorators: [{
|
|
6238
6308
|
type: Directive,
|
|
6239
6309
|
args: [{
|
|
6240
6310
|
selector: 'input[role="combobox"]',
|
|
@@ -6269,10 +6339,10 @@ class OpenArticleOnCtrlEnterDirective {
|
|
|
6269
6339
|
return;
|
|
6270
6340
|
this.previewService.openExternal(this.article());
|
|
6271
6341
|
}
|
|
6272
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6273
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.
|
|
6342
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OpenArticleOnCtrlEnterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
6343
|
+
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 });
|
|
6274
6344
|
}
|
|
6275
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6345
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OpenArticleOnCtrlEnterDirective, decorators: [{
|
|
6276
6346
|
type: Directive,
|
|
6277
6347
|
args: [{
|
|
6278
6348
|
selector: '[appOpenArticleOnCtrlEnter],[openArticleOnCtrlEnter]',
|
|
@@ -6288,10 +6358,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
6288
6358
|
* overflow manager.
|
|
6289
6359
|
*/
|
|
6290
6360
|
class OverflowItemDirective {
|
|
6291
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6292
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.
|
|
6361
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverflowItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
6362
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: OverflowItemDirective, isStandalone: true, selector: "[overflowItem]", ngImport: i0 });
|
|
6293
6363
|
}
|
|
6294
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6364
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverflowItemDirective, decorators: [{
|
|
6295
6365
|
type: Directive,
|
|
6296
6366
|
args: [{
|
|
6297
6367
|
selector: '[overflowItem]',
|
|
@@ -6303,10 +6373,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
6303
6373
|
* for the overflow manager.
|
|
6304
6374
|
*/
|
|
6305
6375
|
class OverflowStopDirective {
|
|
6306
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6307
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.
|
|
6376
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverflowStopDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
6377
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: OverflowStopDirective, isStandalone: true, selector: "[overflowStop]", ngImport: i0 });
|
|
6308
6378
|
}
|
|
6309
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6379
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverflowStopDirective, decorators: [{
|
|
6310
6380
|
type: Directive,
|
|
6311
6381
|
args: [{
|
|
6312
6382
|
selector: '[overflowStop]',
|
|
@@ -6416,10 +6486,10 @@ class OverflowManagerDirective {
|
|
|
6416
6486
|
item.nativeElement.style.visibility = state;
|
|
6417
6487
|
});
|
|
6418
6488
|
}
|
|
6419
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6420
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.
|
|
6489
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverflowManagerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
6490
|
+
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 });
|
|
6421
6491
|
}
|
|
6422
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6492
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverflowManagerDirective, decorators: [{
|
|
6423
6493
|
type: Directive,
|
|
6424
6494
|
args: [{
|
|
6425
6495
|
selector: '[overflowManager]',
|
|
@@ -6558,10 +6628,10 @@ class DrawerStackService {
|
|
|
6558
6628
|
this.openAssistant();
|
|
6559
6629
|
this.askAI$.next(text);
|
|
6560
6630
|
}
|
|
6561
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6562
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
6631
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerStackService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6632
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerStackService, providedIn: 'root' });
|
|
6563
6633
|
}
|
|
6564
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6634
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerStackService, decorators: [{
|
|
6565
6635
|
type: Injectable,
|
|
6566
6636
|
args: [{
|
|
6567
6637
|
providedIn: 'root'
|
|
@@ -6603,10 +6673,10 @@ class SelectArticleOnClickDirective {
|
|
|
6603
6673
|
break;
|
|
6604
6674
|
}
|
|
6605
6675
|
}
|
|
6606
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6607
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.
|
|
6676
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectArticleOnClickDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
6677
|
+
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 } }, host: { listeners: { "keydown.enter": "onEnter($event)", "click": "onClick()" } }, ngImport: i0 });
|
|
6608
6678
|
}
|
|
6609
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6679
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectArticleOnClickDirective, decorators: [{
|
|
6610
6680
|
type: Directive,
|
|
6611
6681
|
args: [{
|
|
6612
6682
|
selector: '[selectArticleOnClick]',
|
|
@@ -6655,10 +6725,10 @@ class ShowBookmarkDirective {
|
|
|
6655
6725
|
this.showBookmark.emit(bookmarkHovered || isBookmarked);
|
|
6656
6726
|
});
|
|
6657
6727
|
}
|
|
6658
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6659
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.
|
|
6728
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ShowBookmarkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
6729
|
+
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 });
|
|
6660
6730
|
}
|
|
6661
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6731
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ShowBookmarkDirective, decorators: [{
|
|
6662
6732
|
type: Directive,
|
|
6663
6733
|
args: [{
|
|
6664
6734
|
selector: '[showBookmark]',
|
|
@@ -6689,10 +6759,10 @@ class ThemeProviderDirective {
|
|
|
6689
6759
|
applyThemeToNativeElement(this.host.nativeElement, vars);
|
|
6690
6760
|
});
|
|
6691
6761
|
}
|
|
6692
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6693
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.
|
|
6762
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThemeProviderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
6763
|
+
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 });
|
|
6694
6764
|
}
|
|
6695
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6765
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThemeProviderDirective, decorators: [{
|
|
6696
6766
|
type: Directive,
|
|
6697
6767
|
args: [{
|
|
6698
6768
|
selector: '[themeProvider]',
|
|
@@ -6716,10 +6786,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
6716
6786
|
*/
|
|
6717
6787
|
class ChildMarkerDirective {
|
|
6718
6788
|
template = inject((TemplateRef));
|
|
6719
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6720
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.
|
|
6789
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChildMarkerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
6790
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: ChildMarkerDirective, isStandalone: true, selector: "[childMarker]", ngImport: i0 });
|
|
6721
6791
|
}
|
|
6722
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6792
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChildMarkerDirective, decorators: [{
|
|
6723
6793
|
type: Directive,
|
|
6724
6794
|
args: [{
|
|
6725
6795
|
selector: '[childMarker]'
|
|
@@ -6742,6 +6812,15 @@ class NavbarTabsComponent {
|
|
|
6742
6812
|
* This works only if tabSearch is enabled in the administration panel.
|
|
6743
6813
|
*/
|
|
6744
6814
|
showCount = input(true, ...(ngDevMode ? [{ debugName: "showCount", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
6815
|
+
/**
|
|
6816
|
+
* The base path for the search routes.
|
|
6817
|
+
* This value is provided as an input property and defaults to "search".
|
|
6818
|
+
*
|
|
6819
|
+
* @remarks
|
|
6820
|
+
* This path is used to find the corresponding route configuration and its children
|
|
6821
|
+
* to populate the tabs in the navbar.
|
|
6822
|
+
*/
|
|
6823
|
+
path = input("search", ...(ngDevMode ? [{ debugName: "path" }] : []));
|
|
6745
6824
|
searchText = computed(() => {
|
|
6746
6825
|
const state = getState(this.queryParamsStore);
|
|
6747
6826
|
return state.text || "";
|
|
@@ -6762,8 +6841,9 @@ class NavbarTabsComponent {
|
|
|
6762
6841
|
}, ...(ngDevMode ? [{ debugName: "currentPath" }] : []));
|
|
6763
6842
|
// create tabs from the search routes
|
|
6764
6843
|
tabs = computed(() => {
|
|
6844
|
+
const result = this.queryService.result();
|
|
6765
6845
|
const r = this.router.config
|
|
6766
|
-
.find((item) => item.path ===
|
|
6846
|
+
.find((item) => item.path === this.path())
|
|
6767
6847
|
?.children?.filter((c) => c.path !== "**")
|
|
6768
6848
|
.map((child) => {
|
|
6769
6849
|
const data = child.data;
|
|
@@ -6771,11 +6851,14 @@ class NavbarTabsComponent {
|
|
|
6771
6851
|
display: data?.display || child.path || "",
|
|
6772
6852
|
wsQueryTab: data?.wsQueryTab || child.path || "",
|
|
6773
6853
|
path: child.path || "",
|
|
6774
|
-
routerLink:
|
|
6854
|
+
routerLink: `/${this.path()}/${child.path}`,
|
|
6775
6855
|
icon: data?.icon || "",
|
|
6776
6856
|
queryName: data?.queryName,
|
|
6857
|
+
// get the count from the last search result if showCount is true and queryName matches
|
|
6777
6858
|
count: this.showCount()
|
|
6778
|
-
?
|
|
6859
|
+
? result.queryName === data?.queryName
|
|
6860
|
+
? result.tabs?.find((tab) => tab.name === (data?.wsQueryTab || child.path))?.count
|
|
6861
|
+
: undefined
|
|
6779
6862
|
: undefined
|
|
6780
6863
|
};
|
|
6781
6864
|
}) ?? [];
|
|
@@ -6786,8 +6869,8 @@ class NavbarTabsComponent {
|
|
|
6786
6869
|
// we use the routerlink to navigate, so just close the drawer and remove the id parameter from the query params
|
|
6787
6870
|
this.drawerStack.closeAll();
|
|
6788
6871
|
}
|
|
6789
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6790
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
6872
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NavbarTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6873
|
+
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: `
|
|
6791
6874
|
<!-- do not display the tabs if there are no tabs -->
|
|
6792
6875
|
@if (tabs().length > 0) {
|
|
6793
6876
|
<div overflowManager class="relative col-span-2 col-start-2 row-start-2 flex" (count)="visibleTabCount.set($event)">
|
|
@@ -6848,7 +6931,7 @@ class NavbarTabsComponent {
|
|
|
6848
6931
|
}
|
|
6849
6932
|
`, 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" }] });
|
|
6850
6933
|
}
|
|
6851
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
6934
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NavbarTabsComponent, decorators: [{
|
|
6852
6935
|
type: Component,
|
|
6853
6936
|
args: [{
|
|
6854
6937
|
selector: "navbar-tabs",
|
|
@@ -6931,11 +7014,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
6931
7014
|
}
|
|
6932
7015
|
`
|
|
6933
7016
|
}]
|
|
6934
|
-
}], propDecorators: { showCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCount", required: false }] }] } });
|
|
7017
|
+
}], propDecorators: { showCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCount", required: false }] }], path: [{ type: i0.Input, args: [{ isSignal: true, alias: "path", required: false }] }] } });
|
|
6935
7018
|
|
|
6936
7019
|
class NoResultComponent {
|
|
6937
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6938
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
7020
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NoResultComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7021
|
+
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: `
|
|
6939
7022
|
<header class="flex items-center gap-2 text-xl font-semibold">
|
|
6940
7023
|
<i class="fa-fw far fa-face-sad-sweat text-3xl"></i>
|
|
6941
7024
|
<p>{{ 'noResult.noResult' | transloco }}</p>
|
|
@@ -6948,7 +7031,7 @@ class NoResultComponent {
|
|
|
6948
7031
|
<p>{{ 'noResult.noResultAssistance' | transloco }}</p>
|
|
6949
7032
|
`, isInline: true, dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
6950
7033
|
}
|
|
6951
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7034
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NoResultComponent, decorators: [{
|
|
6952
7035
|
type: Component,
|
|
6953
7036
|
args: [{
|
|
6954
7037
|
selector: 'NoResult',
|
|
@@ -6994,8 +7077,8 @@ class PagerComponent {
|
|
|
6994
7077
|
this.page.set(this.page() - 1);
|
|
6995
7078
|
this.queryService.gotoPage(this.page());
|
|
6996
7079
|
}
|
|
6997
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
6998
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
7080
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7081
|
+
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: `
|
|
6999
7082
|
<div class="flex gap-2">
|
|
7000
7083
|
@if ((hasPages() && page() > 1) || (!hasPages() && page() > 1)) {
|
|
7001
7084
|
<button variant="ghost" [attr.title]="'previousPage' | transloco" (click)="previousPage()">
|
|
@@ -7019,7 +7102,7 @@ class PagerComponent {
|
|
|
7019
7102
|
</div>
|
|
7020
7103
|
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button,a[role=\"button\"]", inputs: ["class", "variant", "decoration", "size"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
7021
7104
|
}
|
|
7022
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7105
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PagerComponent, decorators: [{
|
|
7023
7106
|
type: Component,
|
|
7024
7107
|
args: [{
|
|
7025
7108
|
selector: 'pager',
|
|
@@ -7063,12 +7146,12 @@ class PreviewNavigator {
|
|
|
7063
7146
|
n = Math.max(1, Math.min(n, t));
|
|
7064
7147
|
this.preview.gotoPage(n);
|
|
7065
7148
|
}
|
|
7066
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7067
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
7149
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PreviewNavigator, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7150
|
+
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: `
|
|
7068
7151
|
<button
|
|
7069
7152
|
variant="ghost"
|
|
7070
7153
|
size="icon"
|
|
7071
|
-
class="dark:text-
|
|
7154
|
+
class="dark:text-white dark:hover:bg-background/10"
|
|
7072
7155
|
aria-label="Page précédente"
|
|
7073
7156
|
(click)="preview.firstPage()"
|
|
7074
7157
|
[disabled]="isFirst()">
|
|
@@ -7077,19 +7160,19 @@ class PreviewNavigator {
|
|
|
7077
7160
|
<button
|
|
7078
7161
|
variant="ghost"
|
|
7079
7162
|
size="icon"
|
|
7080
|
-
class="dark:text-
|
|
7163
|
+
class="dark:text-white dark:hover:bg-background/10"
|
|
7081
7164
|
aria-label="Page précédente"
|
|
7082
7165
|
(click)="preview.prevPage()"
|
|
7083
7166
|
[disabled]="isFirst()">
|
|
7084
7167
|
<chevron-left />
|
|
7085
7168
|
</button>
|
|
7086
7169
|
|
|
7087
|
-
<div class="dark:text-
|
|
7170
|
+
<div class="dark:text-white inline-flex items-center gap-1 px-1 tabular-nums">
|
|
7088
7171
|
<input
|
|
7089
7172
|
#page
|
|
7090
7173
|
type="text"
|
|
7091
7174
|
decoration="outline"
|
|
7092
|
-
class="dark:hover:bg-background/10 dark:text-
|
|
7175
|
+
class="dark:hover:bg-background/10 dark:text-white dark:border-foreground w-14 py-0.5 text-center invalid:bg-red-200"
|
|
7093
7176
|
[min]="1"
|
|
7094
7177
|
[max]="total() || 1"
|
|
7095
7178
|
[value]="current()"
|
|
@@ -7104,7 +7187,7 @@ class PreviewNavigator {
|
|
|
7104
7187
|
<button
|
|
7105
7188
|
variant="ghost"
|
|
7106
7189
|
size="icon"
|
|
7107
|
-
class="dark:text-
|
|
7190
|
+
class="dark:text-white dark:hover:bg-background/10"
|
|
7108
7191
|
aria-label="Page suivante"
|
|
7109
7192
|
(click)="preview.nextPage()"
|
|
7110
7193
|
[disabled]="isLast()">
|
|
@@ -7113,7 +7196,7 @@ class PreviewNavigator {
|
|
|
7113
7196
|
<button
|
|
7114
7197
|
variant="ghost"
|
|
7115
7198
|
size="icon"
|
|
7116
|
-
class="dark:text-
|
|
7199
|
+
class="dark:text-white dark:hover:bg-background/10"
|
|
7117
7200
|
aria-label="Page suivante"
|
|
7118
7201
|
(click)="preview.lastPage()"
|
|
7119
7202
|
[disabled]="isLast()">
|
|
@@ -7121,7 +7204,7 @@ class PreviewNavigator {
|
|
|
7121
7204
|
</button>
|
|
7122
7205
|
`, 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"] }] });
|
|
7123
7206
|
}
|
|
7124
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7207
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PreviewNavigator, decorators: [{
|
|
7125
7208
|
type: Component,
|
|
7126
7209
|
args: [{
|
|
7127
7210
|
selector: "preview-navigator",
|
|
@@ -7137,7 +7220,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
7137
7220
|
<button
|
|
7138
7221
|
variant="ghost"
|
|
7139
7222
|
size="icon"
|
|
7140
|
-
class="dark:text-
|
|
7223
|
+
class="dark:text-white dark:hover:bg-background/10"
|
|
7141
7224
|
aria-label="Page précédente"
|
|
7142
7225
|
(click)="preview.firstPage()"
|
|
7143
7226
|
[disabled]="isFirst()">
|
|
@@ -7146,19 +7229,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
7146
7229
|
<button
|
|
7147
7230
|
variant="ghost"
|
|
7148
7231
|
size="icon"
|
|
7149
|
-
class="dark:text-
|
|
7232
|
+
class="dark:text-white dark:hover:bg-background/10"
|
|
7150
7233
|
aria-label="Page précédente"
|
|
7151
7234
|
(click)="preview.prevPage()"
|
|
7152
7235
|
[disabled]="isFirst()">
|
|
7153
7236
|
<chevron-left />
|
|
7154
7237
|
</button>
|
|
7155
7238
|
|
|
7156
|
-
<div class="dark:text-
|
|
7239
|
+
<div class="dark:text-white inline-flex items-center gap-1 px-1 tabular-nums">
|
|
7157
7240
|
<input
|
|
7158
7241
|
#page
|
|
7159
7242
|
type="text"
|
|
7160
7243
|
decoration="outline"
|
|
7161
|
-
class="dark:hover:bg-background/10 dark:text-
|
|
7244
|
+
class="dark:hover:bg-background/10 dark:text-white dark:border-foreground w-14 py-0.5 text-center invalid:bg-red-200"
|
|
7162
7245
|
[min]="1"
|
|
7163
7246
|
[max]="total() || 1"
|
|
7164
7247
|
[value]="current()"
|
|
@@ -7173,7 +7256,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
7173
7256
|
<button
|
|
7174
7257
|
variant="ghost"
|
|
7175
7258
|
size="icon"
|
|
7176
|
-
class="dark:text-
|
|
7259
|
+
class="dark:text-white dark:hover:bg-background/10"
|
|
7177
7260
|
aria-label="Page suivante"
|
|
7178
7261
|
(click)="preview.nextPage()"
|
|
7179
7262
|
[disabled]="isLast()">
|
|
@@ -7182,7 +7265,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
7182
7265
|
<button
|
|
7183
7266
|
variant="ghost"
|
|
7184
7267
|
size="icon"
|
|
7185
|
-
class="dark:text-
|
|
7268
|
+
class="dark:text-white dark:hover:bg-background/10"
|
|
7186
7269
|
aria-label="Page suivante"
|
|
7187
7270
|
(click)="preview.lastPage()"
|
|
7188
7271
|
[disabled]="isLast()">
|
|
@@ -7238,10 +7321,10 @@ class SortSelectorComponent {
|
|
|
7238
7321
|
this.onSort.emit(sort);
|
|
7239
7322
|
}
|
|
7240
7323
|
}
|
|
7241
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7242
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
7324
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SortSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7325
|
+
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" }] });
|
|
7243
7326
|
}
|
|
7244
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7327
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SortSelectorComponent, decorators: [{
|
|
7245
7328
|
type: Component,
|
|
7246
7329
|
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" }]
|
|
7247
7330
|
}], 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"] }] } });
|
|
@@ -7281,8 +7364,8 @@ class SponsoredResultsComponent {
|
|
|
7281
7364
|
}
|
|
7282
7365
|
});
|
|
7283
7366
|
}
|
|
7284
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7285
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
7367
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SponsoredResultsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7368
|
+
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) {
|
|
7286
7369
|
@for (link of sponsoredResults(); track $index) {
|
|
7287
7370
|
<li role="listitem" class="text-primary flex items-center gap-2 rounded px-3 py-2 font-bold">
|
|
7288
7371
|
<a href="{{ link.url }}" target="_blank" rel="noopener" title="{{ link.tooltip }}" class="result-link peer flex items-center gap-2 hover:underline">
|
|
@@ -7300,7 +7383,7 @@ class SponsoredResultsComponent {
|
|
|
7300
7383
|
}
|
|
7301
7384
|
}`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
7302
7385
|
}
|
|
7303
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7386
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SponsoredResultsComponent, decorators: [{
|
|
7304
7387
|
type: Component,
|
|
7305
7388
|
args: [{
|
|
7306
7389
|
selector: 'sponsored-results, SponsoredResults, sponsoredresults',
|
|
@@ -7348,8 +7431,8 @@ class ThemeSelectorComponent {
|
|
|
7348
7431
|
theme = theme.name;
|
|
7349
7432
|
this.themeStore.setCurrentTheme(this.scope(), theme);
|
|
7350
7433
|
}
|
|
7351
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7352
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
7434
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThemeSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7435
|
+
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: `
|
|
7353
7436
|
<Menu>
|
|
7354
7437
|
<ng-content></ng-content>
|
|
7355
7438
|
|
|
@@ -7368,7 +7451,7 @@ class ThemeSelectorComponent {
|
|
|
7368
7451
|
</Menu>
|
|
7369
7452
|
`, 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"] }] });
|
|
7370
7453
|
}
|
|
7371
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7454
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThemeSelectorComponent, decorators: [{
|
|
7372
7455
|
type: Component,
|
|
7373
7456
|
args: [{ selector: 'theme-selector', standalone: true, imports: [MenuComponent, NgStyle, MenuContentComponent], template: `
|
|
7374
7457
|
<Menu>
|
|
@@ -7408,8 +7491,8 @@ class ThemeToggleComponent {
|
|
|
7408
7491
|
return;
|
|
7409
7492
|
this.themeStore.setDarkMode(this.scope(), status);
|
|
7410
7493
|
}
|
|
7411
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7412
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
7494
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThemeToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7495
|
+
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: `
|
|
7413
7496
|
<label class="flex cursor-pointer select-none items-center gap-2">
|
|
7414
7497
|
@if (darkMode()) {
|
|
7415
7498
|
<i class="fa-fw far fa-toggle-large-on text-primary"></i>
|
|
@@ -7423,7 +7506,7 @@ class ThemeToggleComponent {
|
|
|
7423
7506
|
</label>
|
|
7424
7507
|
`, 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"] }] });
|
|
7425
7508
|
}
|
|
7426
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7509
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThemeToggleComponent, decorators: [{
|
|
7427
7510
|
type: Component,
|
|
7428
7511
|
args: [{ selector: 'theme-toggle', standalone: true, imports: [FormsModule], template: `
|
|
7429
7512
|
<label class="flex cursor-pointer select-none items-center gap-2">
|
|
@@ -7593,8 +7676,8 @@ class AlertDialog {
|
|
|
7593
7676
|
this.queryParamsStore.patch({ text: q.text, tab: q.tab, basket: q.basket, sort: q.sort, filters, name: q.name });
|
|
7594
7677
|
this.dialog()?.close();
|
|
7595
7678
|
}
|
|
7596
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7597
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
7679
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AlertDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7680
|
+
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: `
|
|
7598
7681
|
<dialog #dialog>
|
|
7599
7682
|
<DialogContent class="sm:max-w-[425px]">
|
|
7600
7683
|
<DialogHeader>
|
|
@@ -7708,7 +7791,7 @@ class AlertDialog {
|
|
|
7708
7791
|
</dialog>
|
|
7709
7792
|
`, 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" }] });
|
|
7710
7793
|
}
|
|
7711
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7794
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AlertDialog, decorators: [{
|
|
7712
7795
|
type: Component,
|
|
7713
7796
|
args: [{ selector: "alert-dialog, alertdialog, AlertDialog", standalone: true, imports: [
|
|
7714
7797
|
FormsModule,
|
|
@@ -7881,10 +7964,10 @@ class AlertsComponent {
|
|
|
7881
7964
|
}
|
|
7882
7965
|
this.tmpAlerts.splice(drop.currentIndex, 0, this.tmpAlerts.splice(drop.previousIndex, 1)[0]);
|
|
7883
7966
|
}
|
|
7884
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7885
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
7967
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AlertsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7968
|
+
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" }] });
|
|
7886
7969
|
}
|
|
7887
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
7970
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AlertsComponent, decorators: [{
|
|
7888
7971
|
type: Component,
|
|
7889
7972
|
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" }]
|
|
7890
7973
|
}], ctorParameters: () => [], propDecorators: { alertFormDialog: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AlertDialog), { isSignal: true }] }] } });
|
|
@@ -7893,6 +7976,8 @@ class ChangePasswordComponent {
|
|
|
7893
7976
|
success = output();
|
|
7894
7977
|
cancel = output();
|
|
7895
7978
|
username = input(null, ...(ngDevMode ? [{ debugName: "username" }] : []));
|
|
7979
|
+
alert = input(undefined, ...(ngDevMode ? [{ debugName: "alert" }] : []));
|
|
7980
|
+
redirectAfterSuccess = input(true, ...(ngDevMode ? [{ debugName: "redirectAfterSuccess" }] : []));
|
|
7896
7981
|
transloco = inject(TranslocoService);
|
|
7897
7982
|
router = inject(Router);
|
|
7898
7983
|
principalStore = inject(PrincipalStore);
|
|
@@ -7903,10 +7988,14 @@ class ChangePasswordComponent {
|
|
|
7903
7988
|
confirmPassword = model("", ...(ngDevMode ? [{ debugName: "confirmPassword" }] : []));
|
|
7904
7989
|
pending = signal(false, ...(ngDevMode ? [{ debugName: "pending" }] : []));
|
|
7905
7990
|
errorMsg = signal(null, ...(ngDevMode ? [{ debugName: "errorMsg" }] : []));
|
|
7991
|
+
currentPasswordType = "password";
|
|
7992
|
+
newPasswordType = "password";
|
|
7993
|
+
confirmPasswordType = "password";
|
|
7906
7994
|
valid = computed(() => this.currentPassword().length > 0 &&
|
|
7907
7995
|
this.newPassword().length > 0 &&
|
|
7908
7996
|
this.confirmPassword().length > 0 &&
|
|
7909
7997
|
this.newPassword() === this.confirmPassword(), ...(ngDevMode ? [{ debugName: "valid" }] : []));
|
|
7998
|
+
confirmInvalid = computed(() => !!this.newPassword() && !!this.confirmPassword() && this.newPassword() !== this.confirmPassword(), ...(ngDevMode ? [{ debugName: "confirmInvalid" }] : []));
|
|
7910
7999
|
effectiveUsername = computed(() => {
|
|
7911
8000
|
const fromInput = this.username();
|
|
7912
8001
|
if (fromInput?.trim())
|
|
@@ -7962,10 +8051,15 @@ class ChangePasswordComponent {
|
|
|
7962
8051
|
this.router.navigate(["/login"], { queryParams: { username } });
|
|
7963
8052
|
return;
|
|
7964
8053
|
}
|
|
7965
|
-
|
|
7966
|
-
|
|
7967
|
-
|
|
7968
|
-
|
|
8054
|
+
if (this.redirectAfterSuccess()) {
|
|
8055
|
+
const { createRoutes = true } = globalConfig;
|
|
8056
|
+
await this.applicationService.initialize(createRoutes);
|
|
8057
|
+
this.success.emit();
|
|
8058
|
+
this.router.navigateByUrl("/");
|
|
8059
|
+
}
|
|
8060
|
+
else {
|
|
8061
|
+
this.success.emit();
|
|
8062
|
+
}
|
|
7969
8063
|
}
|
|
7970
8064
|
catch (e) {
|
|
7971
8065
|
const maybeError = e;
|
|
@@ -7986,8 +8080,8 @@ class ChangePasswordComponent {
|
|
|
7986
8080
|
this.cancel.emit();
|
|
7987
8081
|
this.location.back();
|
|
7988
8082
|
}
|
|
7989
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
7990
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
8083
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChangePasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8084
|
+
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: `
|
|
7991
8085
|
<Card hover="no" cdkTrapFocus cdkTrapFocusAutoCapture="true" class="bg-card rounded-xl shadow-sm">
|
|
7992
8086
|
<CardHeader class="flex flex-col items-center gap-3">
|
|
7993
8087
|
<img class="h-12 content-(--logo-large)" alt="logo" />
|
|
@@ -7995,18 +8089,35 @@ class ChangePasswordComponent {
|
|
|
7995
8089
|
|
|
7996
8090
|
<CardContent class="grid gap-4">
|
|
7997
8091
|
|
|
8092
|
+
@if (alert()) {
|
|
8093
|
+
<div class="p-4 w-full bg-destructive/20 border-destructive">
|
|
8094
|
+
{{ alert() | transloco }}
|
|
8095
|
+
</div>
|
|
8096
|
+
}
|
|
8097
|
+
|
|
7998
8098
|
<!-- Current password -->
|
|
7999
8099
|
<div class="grid gap-2">
|
|
8000
8100
|
<label class="text-sm font-medium" for="auth-current-password">
|
|
8001
8101
|
{{ 'login.currentPassword' | transloco }}
|
|
8002
8102
|
</label>
|
|
8003
|
-
<
|
|
8004
|
-
|
|
8005
|
-
|
|
8006
|
-
|
|
8007
|
-
|
|
8008
|
-
|
|
8009
|
-
|
|
8103
|
+
<InputGroup class="group/item">
|
|
8104
|
+
<input
|
|
8105
|
+
input-group
|
|
8106
|
+
id="auth-current-password"
|
|
8107
|
+
[type]="currentPasswordType"
|
|
8108
|
+
required
|
|
8109
|
+
[(ngModel)]="currentPassword"
|
|
8110
|
+
(keydown.enter)="changePassword()"
|
|
8111
|
+
/>
|
|
8112
|
+
<InputGroupAddon align="inline-end"
|
|
8113
|
+
(click)="currentPasswordType = (currentPasswordType === 'password' ? 'text' : 'password')">
|
|
8114
|
+
@if(currentPasswordType === 'text') {
|
|
8115
|
+
<i class="fal fa-eye-slash }} cursor-pointer"></i>
|
|
8116
|
+
} @else {
|
|
8117
|
+
<i class="fal fa-eye }} cursor-pointer"></i>
|
|
8118
|
+
}
|
|
8119
|
+
</InputGroupAddon>
|
|
8120
|
+
</InputGroup>
|
|
8010
8121
|
</div>
|
|
8011
8122
|
|
|
8012
8123
|
<!-- New password -->
|
|
@@ -8014,13 +8125,24 @@ class ChangePasswordComponent {
|
|
|
8014
8125
|
<label class="text-sm font-medium" for="auth-new-password">
|
|
8015
8126
|
{{ 'login.newPassword' | transloco }}
|
|
8016
8127
|
</label>
|
|
8017
|
-
<
|
|
8018
|
-
|
|
8019
|
-
|
|
8020
|
-
|
|
8021
|
-
|
|
8022
|
-
|
|
8023
|
-
|
|
8128
|
+
<InputGroup class="group/item">
|
|
8129
|
+
<input
|
|
8130
|
+
input-group
|
|
8131
|
+
id="auth-new-password"
|
|
8132
|
+
[type]="newPasswordType"
|
|
8133
|
+
required
|
|
8134
|
+
[(ngModel)]="newPassword"
|
|
8135
|
+
(keydown.enter)="changePassword()"
|
|
8136
|
+
/>
|
|
8137
|
+
<InputGroupAddon align="inline-end"
|
|
8138
|
+
(click)="newPasswordType = (newPasswordType === 'password' ? 'text' : 'password')">
|
|
8139
|
+
@if(newPasswordType === 'text') {
|
|
8140
|
+
<i class="fal fa-eye-slash }} cursor-pointer"></i>
|
|
8141
|
+
} @else {
|
|
8142
|
+
<i class="fal fa-eye }} cursor-pointer"></i>
|
|
8143
|
+
}
|
|
8144
|
+
</InputGroupAddon>
|
|
8145
|
+
</InputGroup>
|
|
8024
8146
|
</div>
|
|
8025
8147
|
|
|
8026
8148
|
<!-- Confirm -->
|
|
@@ -8028,13 +8150,30 @@ class ChangePasswordComponent {
|
|
|
8028
8150
|
<label class="text-sm font-medium" for="auth-confirm-password">
|
|
8029
8151
|
{{ 'login.confirmPassword' | transloco }}
|
|
8030
8152
|
</label>
|
|
8031
|
-
<
|
|
8032
|
-
|
|
8033
|
-
|
|
8034
|
-
|
|
8035
|
-
|
|
8036
|
-
|
|
8037
|
-
|
|
8153
|
+
<InputGroup class="group/item">
|
|
8154
|
+
<input
|
|
8155
|
+
input-group
|
|
8156
|
+
id="auth-confirm-password"
|
|
8157
|
+
[ariaInvalid]="confirmInvalid()"
|
|
8158
|
+
[type]="confirmPasswordType"
|
|
8159
|
+
required
|
|
8160
|
+
[(ngModel)]="confirmPassword"
|
|
8161
|
+
(keydown.enter)="changePassword()"
|
|
8162
|
+
/>
|
|
8163
|
+
<InputGroupAddon align="inline-end"
|
|
8164
|
+
(click)="confirmPasswordType = (confirmPasswordType === 'password' ? 'text' : 'password')">
|
|
8165
|
+
@if(confirmPasswordType === 'text') {
|
|
8166
|
+
<i class="fal fa-eye-slash }} cursor-pointer"></i>
|
|
8167
|
+
} @else {
|
|
8168
|
+
<i class="fal fa-eye }} cursor-pointer"></i>
|
|
8169
|
+
}
|
|
8170
|
+
</InputGroupAddon>
|
|
8171
|
+
</InputGroup>
|
|
8172
|
+
@if (confirmInvalid()) {
|
|
8173
|
+
<p class="text-sm font-medium text-destructive" for="auth-confirm-password">
|
|
8174
|
+
{{ 'login.differentPasswords' | transloco }}
|
|
8175
|
+
</p>
|
|
8176
|
+
}
|
|
8038
8177
|
</div>
|
|
8039
8178
|
</CardContent>
|
|
8040
8179
|
|
|
@@ -8050,9 +8189,9 @@ class ChangePasswordComponent {
|
|
|
8050
8189
|
</button>
|
|
8051
8190
|
</CardFooter>
|
|
8052
8191
|
</Card>
|
|
8053
|
-
`, 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:
|
|
8192
|
+
`, 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" }] });
|
|
8054
8193
|
}
|
|
8055
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8194
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChangePasswordComponent, decorators: [{
|
|
8056
8195
|
type: Component,
|
|
8057
8196
|
args: [{
|
|
8058
8197
|
selector: "change-password, ChangePassword, changepassword",
|
|
@@ -8061,12 +8200,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
8061
8200
|
FormsModule,
|
|
8062
8201
|
A11yModule,
|
|
8063
8202
|
TranslocoPipe,
|
|
8064
|
-
InputComponent,
|
|
8065
8203
|
ButtonComponent,
|
|
8066
8204
|
CardComponent,
|
|
8067
8205
|
CardHeaderComponent,
|
|
8068
8206
|
CardContentComponent,
|
|
8069
|
-
CardFooterComponent
|
|
8207
|
+
CardFooterComponent,
|
|
8208
|
+
InputGroupInput,
|
|
8209
|
+
InputGroupComponent,
|
|
8210
|
+
InputGroupAddonComponent
|
|
8070
8211
|
],
|
|
8071
8212
|
template: `
|
|
8072
8213
|
<Card hover="no" cdkTrapFocus cdkTrapFocusAutoCapture="true" class="bg-card rounded-xl shadow-sm">
|
|
@@ -8076,18 +8217,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
8076
8217
|
|
|
8077
8218
|
<CardContent class="grid gap-4">
|
|
8078
8219
|
|
|
8220
|
+
@if (alert()) {
|
|
8221
|
+
<div class="p-4 w-full bg-destructive/20 border-destructive">
|
|
8222
|
+
{{ alert() | transloco }}
|
|
8223
|
+
</div>
|
|
8224
|
+
}
|
|
8225
|
+
|
|
8079
8226
|
<!-- Current password -->
|
|
8080
8227
|
<div class="grid gap-2">
|
|
8081
8228
|
<label class="text-sm font-medium" for="auth-current-password">
|
|
8082
8229
|
{{ 'login.currentPassword' | transloco }}
|
|
8083
8230
|
</label>
|
|
8084
|
-
<
|
|
8085
|
-
|
|
8086
|
-
|
|
8087
|
-
|
|
8088
|
-
|
|
8089
|
-
|
|
8090
|
-
|
|
8231
|
+
<InputGroup class="group/item">
|
|
8232
|
+
<input
|
|
8233
|
+
input-group
|
|
8234
|
+
id="auth-current-password"
|
|
8235
|
+
[type]="currentPasswordType"
|
|
8236
|
+
required
|
|
8237
|
+
[(ngModel)]="currentPassword"
|
|
8238
|
+
(keydown.enter)="changePassword()"
|
|
8239
|
+
/>
|
|
8240
|
+
<InputGroupAddon align="inline-end"
|
|
8241
|
+
(click)="currentPasswordType = (currentPasswordType === 'password' ? 'text' : 'password')">
|
|
8242
|
+
@if(currentPasswordType === 'text') {
|
|
8243
|
+
<i class="fal fa-eye-slash }} cursor-pointer"></i>
|
|
8244
|
+
} @else {
|
|
8245
|
+
<i class="fal fa-eye }} cursor-pointer"></i>
|
|
8246
|
+
}
|
|
8247
|
+
</InputGroupAddon>
|
|
8248
|
+
</InputGroup>
|
|
8091
8249
|
</div>
|
|
8092
8250
|
|
|
8093
8251
|
<!-- New password -->
|
|
@@ -8095,13 +8253,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
8095
8253
|
<label class="text-sm font-medium" for="auth-new-password">
|
|
8096
8254
|
{{ 'login.newPassword' | transloco }}
|
|
8097
8255
|
</label>
|
|
8098
|
-
<
|
|
8099
|
-
|
|
8100
|
-
|
|
8101
|
-
|
|
8102
|
-
|
|
8103
|
-
|
|
8104
|
-
|
|
8256
|
+
<InputGroup class="group/item">
|
|
8257
|
+
<input
|
|
8258
|
+
input-group
|
|
8259
|
+
id="auth-new-password"
|
|
8260
|
+
[type]="newPasswordType"
|
|
8261
|
+
required
|
|
8262
|
+
[(ngModel)]="newPassword"
|
|
8263
|
+
(keydown.enter)="changePassword()"
|
|
8264
|
+
/>
|
|
8265
|
+
<InputGroupAddon align="inline-end"
|
|
8266
|
+
(click)="newPasswordType = (newPasswordType === 'password' ? 'text' : 'password')">
|
|
8267
|
+
@if(newPasswordType === 'text') {
|
|
8268
|
+
<i class="fal fa-eye-slash }} cursor-pointer"></i>
|
|
8269
|
+
} @else {
|
|
8270
|
+
<i class="fal fa-eye }} cursor-pointer"></i>
|
|
8271
|
+
}
|
|
8272
|
+
</InputGroupAddon>
|
|
8273
|
+
</InputGroup>
|
|
8105
8274
|
</div>
|
|
8106
8275
|
|
|
8107
8276
|
<!-- Confirm -->
|
|
@@ -8109,13 +8278,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
8109
8278
|
<label class="text-sm font-medium" for="auth-confirm-password">
|
|
8110
8279
|
{{ 'login.confirmPassword' | transloco }}
|
|
8111
8280
|
</label>
|
|
8112
|
-
<
|
|
8113
|
-
|
|
8114
|
-
|
|
8115
|
-
|
|
8116
|
-
|
|
8117
|
-
|
|
8118
|
-
|
|
8281
|
+
<InputGroup class="group/item">
|
|
8282
|
+
<input
|
|
8283
|
+
input-group
|
|
8284
|
+
id="auth-confirm-password"
|
|
8285
|
+
[ariaInvalid]="confirmInvalid()"
|
|
8286
|
+
[type]="confirmPasswordType"
|
|
8287
|
+
required
|
|
8288
|
+
[(ngModel)]="confirmPassword"
|
|
8289
|
+
(keydown.enter)="changePassword()"
|
|
8290
|
+
/>
|
|
8291
|
+
<InputGroupAddon align="inline-end"
|
|
8292
|
+
(click)="confirmPasswordType = (confirmPasswordType === 'password' ? 'text' : 'password')">
|
|
8293
|
+
@if(confirmPasswordType === 'text') {
|
|
8294
|
+
<i class="fal fa-eye-slash }} cursor-pointer"></i>
|
|
8295
|
+
} @else {
|
|
8296
|
+
<i class="fal fa-eye }} cursor-pointer"></i>
|
|
8297
|
+
}
|
|
8298
|
+
</InputGroupAddon>
|
|
8299
|
+
</InputGroup>
|
|
8300
|
+
@if (confirmInvalid()) {
|
|
8301
|
+
<p class="text-sm font-medium text-destructive" for="auth-confirm-password">
|
|
8302
|
+
{{ 'login.differentPasswords' | transloco }}
|
|
8303
|
+
</p>
|
|
8304
|
+
}
|
|
8119
8305
|
</div>
|
|
8120
8306
|
</CardContent>
|
|
8121
8307
|
|
|
@@ -8133,7 +8319,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
8133
8319
|
</Card>
|
|
8134
8320
|
`
|
|
8135
8321
|
}]
|
|
8136
|
-
}], 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"] }] } });
|
|
8322
|
+
}], 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"] }] } });
|
|
8137
8323
|
|
|
8138
8324
|
class ForgotPasswordComponent {
|
|
8139
8325
|
cancel = output();
|
|
@@ -8166,8 +8352,8 @@ class ForgotPasswordComponent {
|
|
|
8166
8352
|
this.pending.set(false);
|
|
8167
8353
|
}
|
|
8168
8354
|
}
|
|
8169
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8170
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.
|
|
8355
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ForgotPasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8356
|
+
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: `
|
|
8171
8357
|
<Card hover="no" class="bg-card rounded-xl shadow-sm">
|
|
8172
8358
|
<CardHeader class="flex flex-col items-center gap-3">
|
|
8173
8359
|
<img class="h-12 content-(--logo-large)" alt="logo" />
|
|
@@ -8207,7 +8393,7 @@ class ForgotPasswordComponent {
|
|
|
8207
8393
|
</Card>
|
|
8208
8394
|
`, 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" }] });
|
|
8209
8395
|
}
|
|
8210
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8396
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ForgotPasswordComponent, decorators: [{
|
|
8211
8397
|
type: Component,
|
|
8212
8398
|
args: [{
|
|
8213
8399
|
selector: "forgot-password, ForgotPassword, forgotpassword",
|
|
@@ -8379,6 +8565,7 @@ class SignInComponent {
|
|
|
8379
8565
|
this.router.navigate(["/login"], {
|
|
8380
8566
|
queryParams: {
|
|
8381
8567
|
mode: "changepassword",
|
|
8568
|
+
alert: "passwordExpired",
|
|
8382
8569
|
username: this.username()
|
|
8383
8570
|
}
|
|
8384
8571
|
});
|
|
@@ -8393,8 +8580,8 @@ class SignInComponent {
|
|
|
8393
8580
|
this.returnUrl.set(null);
|
|
8394
8581
|
this.router.navigate(["/"]);
|
|
8395
8582
|
}
|
|
8396
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8397
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
8583
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignInComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
8584
|
+
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: `
|
|
8398
8585
|
<Card
|
|
8399
8586
|
hover="no"
|
|
8400
8587
|
cdkTrapFocus
|
|
@@ -8469,7 +8656,7 @@ class SignInComponent {
|
|
|
8469
8656
|
</Card>
|
|
8470
8657
|
`, 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" }] });
|
|
8471
8658
|
}
|
|
8472
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8659
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignInComponent, decorators: [{
|
|
8473
8660
|
type: Component,
|
|
8474
8661
|
args: [{
|
|
8475
8662
|
selector: "signIn, signin, sign-in",
|
|
@@ -8570,6 +8757,7 @@ class AuthPageComponent {
|
|
|
8570
8757
|
mode = input(...(ngDevMode ? [undefined, { debugName: "mode" }] : []));
|
|
8571
8758
|
view = linkedSignal(() => this.mode() ?? "signin", ...(ngDevMode ? [{ debugName: "view" }] : []));
|
|
8572
8759
|
username = signal("", ...(ngDevMode ? [{ debugName: "username" }] : []));
|
|
8760
|
+
alert = signal(undefined, ...(ngDevMode ? [{ debugName: "alert" }] : []));
|
|
8573
8761
|
route = inject(ActivatedRoute);
|
|
8574
8762
|
constructor() {
|
|
8575
8763
|
const params = this.route.snapshot.queryParams;
|
|
@@ -8579,13 +8767,15 @@ class AuthPageComponent {
|
|
|
8579
8767
|
if (modeFromQuery === "changepassword" || modeFromQuery === "forgotpassword") {
|
|
8580
8768
|
this.view.set(modeFromQuery);
|
|
8581
8769
|
}
|
|
8770
|
+
this.alert.set(`login.${params["alert"]}`);
|
|
8582
8771
|
}
|
|
8583
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8584
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
8772
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuthPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8773
|
+
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: `
|
|
8585
8774
|
<div class="w-full max-w-md">
|
|
8586
8775
|
@if (view() === 'changepassword') {
|
|
8587
8776
|
<change-password
|
|
8588
8777
|
[username]="username()"
|
|
8778
|
+
[alert]="alert()"
|
|
8589
8779
|
(cancel)="view.set('signin')"
|
|
8590
8780
|
/>
|
|
8591
8781
|
} @else if (view() === 'forgotpassword') {
|
|
@@ -8600,9 +8790,9 @@ class AuthPageComponent {
|
|
|
8600
8790
|
/>
|
|
8601
8791
|
}
|
|
8602
8792
|
</div>
|
|
8603
|
-
`, 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"] }] });
|
|
8793
|
+
`, 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"] }] });
|
|
8604
8794
|
}
|
|
8605
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8795
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuthPageComponent, decorators: [{
|
|
8606
8796
|
type: Component,
|
|
8607
8797
|
args: [{
|
|
8608
8798
|
selector: "auth-page, AuthPage, authpage",
|
|
@@ -8614,6 +8804,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
8614
8804
|
@if (view() === 'changepassword') {
|
|
8615
8805
|
<change-password
|
|
8616
8806
|
[username]="username()"
|
|
8807
|
+
[alert]="alert()"
|
|
8617
8808
|
(cancel)="view.set('signin')"
|
|
8618
8809
|
/>
|
|
8619
8810
|
} @else if (view() === 'forgotpassword') {
|
|
@@ -8658,14 +8849,14 @@ class BookmarkButtonComponent {
|
|
|
8658
8849
|
notify.success(this.transloco.translate('bookmarks.bookmarkAdded'), { duration: 2000 });
|
|
8659
8850
|
}
|
|
8660
8851
|
}
|
|
8661
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8662
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
8852
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BookmarkButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8853
|
+
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()) {
|
|
8663
8854
|
<i class="fa-fw fa-bookmark fa-solid"></i>
|
|
8664
8855
|
} @else {
|
|
8665
8856
|
<i class="fa-fw fa-bookmark fa-regular"></i>
|
|
8666
8857
|
}`, isInline: true });
|
|
8667
8858
|
}
|
|
8668
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8859
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BookmarkButtonComponent, decorators: [{
|
|
8669
8860
|
type: Component,
|
|
8670
8861
|
args: [{
|
|
8671
8862
|
selector: 'bookmark-button, bookmarkbutton, BookmarkButton',
|
|
@@ -8761,10 +8952,10 @@ class BookmarksComponent {
|
|
|
8761
8952
|
e.stopPropagation();
|
|
8762
8953
|
this.range.set(this.range() + (this.config.itemsPerPage ?? 10));
|
|
8763
8954
|
}
|
|
8764
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8765
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
8955
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BookmarksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8956
|
+
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" }] });
|
|
8766
8957
|
}
|
|
8767
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
8958
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BookmarksComponent, decorators: [{
|
|
8768
8959
|
type: Component,
|
|
8769
8960
|
args: [{ selector: "bookmarks, Bookmarks", standalone: true, imports: [
|
|
8770
8961
|
TranslocoPipe,
|
|
@@ -8800,8 +8991,8 @@ class DeleteCollectionDialog {
|
|
|
8800
8991
|
notify.success(message, { duration: 2000 });
|
|
8801
8992
|
}
|
|
8802
8993
|
}
|
|
8803
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8804
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.
|
|
8994
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DeleteCollectionDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8995
|
+
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: `
|
|
8805
8996
|
<dialog #dialog>
|
|
8806
8997
|
<DialogContent>
|
|
8807
8998
|
<DialogHeader>
|
|
@@ -8822,7 +9013,7 @@ class DeleteCollectionDialog {
|
|
|
8822
9013
|
</dialog>
|
|
8823
9014
|
`, 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" }] });
|
|
8824
9015
|
}
|
|
8825
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9016
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DeleteCollectionDialog, decorators: [{
|
|
8826
9017
|
type: Component,
|
|
8827
9018
|
args: [{
|
|
8828
9019
|
selector: "delete-collection-dialog",
|
|
@@ -8901,10 +9092,10 @@ class CollectionsComponent {
|
|
|
8901
9092
|
e.stopPropagation();
|
|
8902
9093
|
this.range.set(this.range() + (this.config.itemsPerPage ?? 10));
|
|
8903
9094
|
}
|
|
8904
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8905
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
9095
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CollectionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9096
|
+
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" }] });
|
|
8906
9097
|
}
|
|
8907
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9098
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CollectionsComponent, decorators: [{
|
|
8908
9099
|
type: Component,
|
|
8909
9100
|
args: [{ selector: "app-collections", standalone: true, imports: [
|
|
8910
9101
|
TranslocoPipe,
|
|
@@ -8977,8 +9168,8 @@ class OverrideUserDialogComponent {
|
|
|
8977
9168
|
});
|
|
8978
9169
|
}
|
|
8979
9170
|
}
|
|
8980
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
8981
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.
|
|
9171
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverrideUserDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9172
|
+
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: `
|
|
8982
9173
|
<dialog #dialog>
|
|
8983
9174
|
<DialogContent class="sm:max-w-[425px]">
|
|
8984
9175
|
<DialogHeader>
|
|
@@ -9026,7 +9217,7 @@ class OverrideUserDialogComponent {
|
|
|
9026
9217
|
</dialog>
|
|
9027
9218
|
`, 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" }] });
|
|
9028
9219
|
}
|
|
9029
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9220
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: OverrideUserDialogComponent, decorators: [{
|
|
9030
9221
|
type: Component,
|
|
9031
9222
|
args: [{
|
|
9032
9223
|
selector: "override-user-dialog",
|
|
@@ -9107,8 +9298,8 @@ class ResetUserSettingsDialogComponent {
|
|
|
9107
9298
|
notify.success(message, { duration: 2000 });
|
|
9108
9299
|
});
|
|
9109
9300
|
}
|
|
9110
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
9111
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.
|
|
9301
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ResetUserSettingsDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9302
|
+
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: `
|
|
9112
9303
|
<dialog #dialog>
|
|
9113
9304
|
<DialogContent>
|
|
9114
9305
|
<DialogHeader>
|
|
@@ -9130,7 +9321,7 @@ class ResetUserSettingsDialogComponent {
|
|
|
9130
9321
|
</dialog>
|
|
9131
9322
|
`, 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" }] });
|
|
9132
9323
|
}
|
|
9133
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9324
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ResetUserSettingsDialogComponent, decorators: [{
|
|
9134
9325
|
type: Component,
|
|
9135
9326
|
args: [{
|
|
9136
9327
|
selector: "reset-user-settings-dialog",
|
|
@@ -9184,8 +9375,8 @@ class DidYouMeanComponent {
|
|
|
9184
9375
|
this.queryParamsStore.patch({ spellingCorrectionMode: "dymonly" });
|
|
9185
9376
|
this.router.navigate([], { queryParamsHandling: "merge", queryParams: { c: "dymonly", q: this.original() } });
|
|
9186
9377
|
}
|
|
9187
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
9188
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
9378
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DidYouMeanComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9379
|
+
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: `
|
|
9189
9380
|
@switch (spellingCorrectionMode()?.toLowerCase()) {
|
|
9190
9381
|
@case ('dymonly') {
|
|
9191
9382
|
<p>
|
|
@@ -9215,7 +9406,7 @@ class DidYouMeanComponent {
|
|
|
9215
9406
|
}
|
|
9216
9407
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
9217
9408
|
}
|
|
9218
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9409
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DidYouMeanComponent, decorators: [{
|
|
9219
9410
|
type: Component,
|
|
9220
9411
|
args: [{
|
|
9221
9412
|
selector: "did-you-mean, DidYouMean, didyoumean",
|
|
@@ -9279,10 +9470,10 @@ class DrawerService {
|
|
|
9279
9470
|
toggleExtension() {
|
|
9280
9471
|
this.isExtended() ? this.collapse() : this.extend();
|
|
9281
9472
|
}
|
|
9282
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
9283
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
9473
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
9474
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerService });
|
|
9284
9475
|
}
|
|
9285
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9476
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerService, decorators: [{
|
|
9286
9477
|
type: Injectable
|
|
9287
9478
|
}] });
|
|
9288
9479
|
|
|
@@ -9343,10 +9534,10 @@ class DrawerComponent {
|
|
|
9343
9534
|
resetGridTemplateColumns() {
|
|
9344
9535
|
this.element.style.gridTemplateColumns = this.defaultDrawerGridTemplate;
|
|
9345
9536
|
}
|
|
9346
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
9347
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.
|
|
9537
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9538
|
+
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"] });
|
|
9348
9539
|
}
|
|
9349
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9540
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerComponent, decorators: [{
|
|
9350
9541
|
type: Component,
|
|
9351
9542
|
args: [{ selector: 'Drawer, drawer', standalone: true, providers: [DrawerService], template: ``, host: {
|
|
9352
9543
|
'[attr.drawer-opened]': 'drawerOpened()',
|
|
@@ -9370,8 +9561,8 @@ class DrawerNavbarComponent {
|
|
|
9370
9561
|
drawerStack = inject(DrawerStackService);
|
|
9371
9562
|
drawerService = inject(DrawerService);
|
|
9372
9563
|
isExtended = this.drawerService.isExtended();
|
|
9373
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
9374
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
9564
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerNavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9565
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DrawerNavbarComponent, isStandalone: true, selector: "DrawerNavbar, drawernavbar", ngImport: i0, template: `
|
|
9375
9566
|
<menu class="flex items-center gap-2 p-4 font-semibold">
|
|
9376
9567
|
<li>
|
|
9377
9568
|
<button variant="ghost" class="group" [attr.title]="'back' | transloco" (click)="drawerStack.close()">
|
|
@@ -9388,7 +9579,7 @@ class DrawerNavbarComponent {
|
|
|
9388
9579
|
</menu>
|
|
9389
9580
|
`, 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" }] });
|
|
9390
9581
|
}
|
|
9391
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9582
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerNavbarComponent, decorators: [{
|
|
9392
9583
|
type: Component,
|
|
9393
9584
|
args: [{
|
|
9394
9585
|
selector: 'DrawerNavbar, drawernavbar',
|
|
@@ -9724,10 +9915,10 @@ class DrawerAdvancedFiltersComponent extends DrawerComponent {
|
|
|
9724
9915
|
});
|
|
9725
9916
|
return res;
|
|
9726
9917
|
}
|
|
9727
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
9728
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
9918
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerAdvancedFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9919
|
+
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 }} "{{ currentTab() }}"</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" }] });
|
|
9729
9920
|
}
|
|
9730
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
9921
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerAdvancedFiltersComponent, decorators: [{
|
|
9731
9922
|
type: Component,
|
|
9732
9923
|
args: [{ selector: "advanced-filters", standalone: true, imports: [
|
|
9733
9924
|
ReactiveFormsModule,
|
|
@@ -9813,8 +10004,8 @@ class EntitiesPanel {
|
|
|
9813
10004
|
navigatePrev(entity, data) {
|
|
9814
10005
|
this.navigate(entity, data, "prev");
|
|
9815
10006
|
}
|
|
9816
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
9817
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
10007
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: EntitiesPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10008
|
+
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: `
|
|
9818
10009
|
<details class="group/parent" name="advanced-search-panels">
|
|
9819
10010
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
9820
10011
|
<p class="flex items-baseline gap-2 font-semibold capitalize">
|
|
@@ -9871,7 +10062,7 @@ class EntitiesPanel {
|
|
|
9871
10062
|
</ng-template>
|
|
9872
10063
|
`, 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" }] });
|
|
9873
10064
|
}
|
|
9874
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
10065
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: EntitiesPanel, decorators: [{
|
|
9875
10066
|
type: Component,
|
|
9876
10067
|
args: [{
|
|
9877
10068
|
selector: "entities-panel,EntitiesPanel,entitiesPanel",
|
|
@@ -9960,8 +10151,8 @@ class ExtractsPanel {
|
|
|
9960
10151
|
this.previewService.events.set("scrollTo");
|
|
9961
10152
|
this.previewService.sendMessage({ action: "select", id: `${category}_${index}`, usePassageHighlighter });
|
|
9962
10153
|
}
|
|
9963
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
9964
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
10154
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExtractsPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10155
|
+
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: `
|
|
9965
10156
|
<details class="group" name="advanced-search-panels" open>
|
|
9966
10157
|
<summary [class]="cn('sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3', '')">
|
|
9967
10158
|
<p class="flex items-baseline gap-2 font-semibold">
|
|
@@ -9990,7 +10181,7 @@ class ExtractsPanel {
|
|
|
9990
10181
|
</details>
|
|
9991
10182
|
`, isInline: true, dependencies: [{ kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
9992
10183
|
}
|
|
9993
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
10184
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExtractsPanel, decorators: [{
|
|
9994
10185
|
type: Component,
|
|
9995
10186
|
args: [{
|
|
9996
10187
|
selector: "extracts-panel, ExtractsPanel, extractspanel",
|
|
@@ -10036,8 +10227,8 @@ class LabelsPanel {
|
|
|
10036
10227
|
const privateLabels = articleRecord[this.labels.private];
|
|
10037
10228
|
return (publicLabels && publicLabels.length > 0) || (privateLabels && privateLabels.length > 0);
|
|
10038
10229
|
}, ...(ngDevMode ? [{ debugName: "hasLabels" }] : []));
|
|
10039
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
10040
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
10230
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelsPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10231
|
+
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: `
|
|
10041
10232
|
@if (hasLabels()) {
|
|
10042
10233
|
<details class="group" name="advanced-search-panels">
|
|
10043
10234
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
@@ -10064,7 +10255,7 @@ class LabelsPanel {
|
|
|
10064
10255
|
}
|
|
10065
10256
|
`, 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" }] });
|
|
10066
10257
|
}
|
|
10067
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
10258
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelsPanel, decorators: [{
|
|
10068
10259
|
type: Component,
|
|
10069
10260
|
args: [{
|
|
10070
10261
|
selector: "labels-panel, LabelsPanel, labelspanel",
|
|
@@ -10120,8 +10311,8 @@ class SimilarDocumentsPanel {
|
|
|
10120
10311
|
}
|
|
10121
10312
|
return [];
|
|
10122
10313
|
}, ...(ngDevMode ? [{ debugName: "similarDocuments" }] : []));
|
|
10123
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
10124
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
10314
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SimilarDocumentsPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10315
|
+
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 } }, ngImport: i0, template: `
|
|
10125
10316
|
@if (similarDocuments().length > 0) {
|
|
10126
10317
|
<details class="group" name="advanced-search-panels">
|
|
10127
10318
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
@@ -10150,7 +10341,7 @@ class SimilarDocumentsPanel {
|
|
|
10150
10341
|
}
|
|
10151
10342
|
`, 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" }] });
|
|
10152
10343
|
}
|
|
10153
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
10344
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SimilarDocumentsPanel, decorators: [{
|
|
10154
10345
|
type: Component,
|
|
10155
10346
|
args: [{
|
|
10156
10347
|
selector: "similar-documents-panel, SimilarDocumentsPanel, similardocumentspanel",
|
|
@@ -10216,10 +10407,10 @@ class AdvancedSearchComponent {
|
|
|
10216
10407
|
clearInput() {
|
|
10217
10408
|
this.queryText.set('');
|
|
10218
10409
|
}
|
|
10219
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
10220
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
10410
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AdvancedSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10411
|
+
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 } }, 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" }] });
|
|
10221
10412
|
}
|
|
10222
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
10413
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AdvancedSearchComponent, decorators: [{
|
|
10223
10414
|
type: Component,
|
|
10224
10415
|
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"] }]
|
|
10225
10416
|
}], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: true }] }], previewStrategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "previewStrategy", required: false }] }] } });
|
|
@@ -10268,10 +10459,10 @@ class DrawerPreviewComponent extends DrawerComponent {
|
|
|
10268
10459
|
}
|
|
10269
10460
|
});
|
|
10270
10461
|
}
|
|
10271
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
10272
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
10462
|
+
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 });
|
|
10463
|
+
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"] }] });
|
|
10273
10464
|
}
|
|
10274
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
10465
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerPreviewComponent, decorators: [{
|
|
10275
10466
|
type: Component,
|
|
10276
10467
|
args: [{ selector: 'DrawerPreview, drawerpreview', standalone: true, imports: [NgClass, NgComponentOutlet, AdvancedSearchComponent], providers: [DrawerService, PreviewService], host: {
|
|
10277
10468
|
class: 'bg-transparent text-foreground'
|
|
@@ -10378,10 +10569,10 @@ class DrawerStackComponent {
|
|
|
10378
10569
|
drawer?.destroy();
|
|
10379
10570
|
}, 250);
|
|
10380
10571
|
}
|
|
10381
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
10382
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
10572
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerStackComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
10573
|
+
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"] });
|
|
10383
10574
|
}
|
|
10384
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
10575
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DrawerStackComponent, decorators: [{
|
|
10385
10576
|
type: Component,
|
|
10386
10577
|
args: [{ selector: 'DrawerStack, drawerstack', template: ``, host: {
|
|
10387
10578
|
'[attr.drawer-opened]': 'drawerOpened()'
|
|
@@ -10414,8 +10605,8 @@ class FeedbackDialogComponent {
|
|
|
10414
10605
|
this.dialog()?.close();
|
|
10415
10606
|
notify.success(this.transloco.translate("feedback.feedbackSuccess"), { duration: 2000 });
|
|
10416
10607
|
}
|
|
10417
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
10418
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
10608
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FeedbackDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10609
|
+
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: `
|
|
10419
10610
|
<dialog #dialog>
|
|
10420
10611
|
<DialogContent>
|
|
10421
10612
|
<DialogHeader>
|
|
@@ -10444,7 +10635,7 @@ class FeedbackDialogComponent {
|
|
|
10444
10635
|
</dialog>
|
|
10445
10636
|
`, 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" }] });
|
|
10446
10637
|
}
|
|
10447
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
10638
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FeedbackDialogComponent, decorators: [{
|
|
10448
10639
|
type: Component,
|
|
10449
10640
|
args: [{
|
|
10450
10641
|
selector: "feedback-dialog, feedbackdialog, FeedbackDialog",
|
|
@@ -10549,10 +10740,10 @@ class SearchFeedbackComponent {
|
|
|
10549
10740
|
openFeedbackDialog(type) {
|
|
10550
10741
|
this.feedbackDialog()?.open(type);
|
|
10551
10742
|
}
|
|
10552
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
10553
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
10743
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchFeedbackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10744
|
+
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" }] });
|
|
10554
10745
|
}
|
|
10555
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
10746
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchFeedbackComponent, decorators: [{
|
|
10556
10747
|
type: Component,
|
|
10557
10748
|
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" }]
|
|
10558
10749
|
}], 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 }] }] } });
|
|
@@ -10653,10 +10844,10 @@ class AggregationItemComponent {
|
|
|
10653
10844
|
this.node().$selectedVisually = false;
|
|
10654
10845
|
}
|
|
10655
10846
|
}
|
|
10656
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
10657
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
10847
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AggregationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10848
|
+
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 <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" }] });
|
|
10658
10849
|
}
|
|
10659
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
10850
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AggregationItemComponent, decorators: [{
|
|
10660
10851
|
type: Component,
|
|
10661
10852
|
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"] }]
|
|
10662
10853
|
}], propDecorators: { disabled: [{
|
|
@@ -10666,6 +10857,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
10666
10857
|
|
|
10667
10858
|
class AggregationComponent {
|
|
10668
10859
|
cn = cn;
|
|
10860
|
+
searchInput = viewChild("searchInput", ...(ngDevMode ? [{ debugName: "searchInput" }] : []));
|
|
10669
10861
|
/* stores */
|
|
10670
10862
|
aggregationsStore = inject(AggregationsStore);
|
|
10671
10863
|
queryParamsStore = inject(QueryParamsStore);
|
|
@@ -10824,6 +11016,14 @@ class AggregationComponent {
|
|
|
10824
11016
|
effect(() => {
|
|
10825
11017
|
sessionStorage.removeItem(`agg-${this.column()}`);
|
|
10826
11018
|
});
|
|
11019
|
+
effect(() => {
|
|
11020
|
+
// focus the search input when expanded
|
|
11021
|
+
if (this.searchInput()?.nativeElement && this.expanded() !== null) {
|
|
11022
|
+
setTimeout(() => {
|
|
11023
|
+
this.searchInput()?.nativeElement.focus();
|
|
11024
|
+
}, 0);
|
|
11025
|
+
}
|
|
11026
|
+
});
|
|
10827
11027
|
effect(async () => {
|
|
10828
11028
|
if (this.debouncedSearchText() === "" || this.aggregation() === null) {
|
|
10829
11029
|
this.suggests.set([]);
|
|
@@ -10877,6 +11077,8 @@ class AggregationComponent {
|
|
|
10877
11077
|
this.items().forEach((item) => {
|
|
10878
11078
|
item.$selected = false;
|
|
10879
11079
|
});
|
|
11080
|
+
sessionStorage.setItem(`agg-${this.aggregation()?.column}`, JSON.stringify([...this.items()]));
|
|
11081
|
+
this.selection.set(false);
|
|
10880
11082
|
this.isAllSelected.set(false);
|
|
10881
11083
|
}
|
|
10882
11084
|
}
|
|
@@ -11192,26 +11394,36 @@ class AggregationComponent {
|
|
|
11192
11394
|
currentFilters.filters.forEach((filter) => {
|
|
11193
11395
|
// check if the filter is already present in the current items
|
|
11194
11396
|
// if not, add it to the current items
|
|
11195
|
-
const found = currentItems.find((item) => item.value === filter.value);
|
|
11397
|
+
const found = currentItems.find((item) => item.value.toLocaleLowerCase() === filter.value?.toLocaleLowerCase());
|
|
11196
11398
|
if (!found) {
|
|
11399
|
+
// add it to the current items
|
|
11197
11400
|
currentItems.unshift({
|
|
11198
11401
|
value: filter.value,
|
|
11199
11402
|
display: filter.display,
|
|
11200
11403
|
$selected: true
|
|
11201
11404
|
});
|
|
11202
11405
|
}
|
|
11406
|
+
else {
|
|
11407
|
+
// mark as selected the existing item
|
|
11408
|
+
found.$selected = true;
|
|
11409
|
+
}
|
|
11203
11410
|
});
|
|
11204
11411
|
}
|
|
11205
11412
|
else {
|
|
11206
11413
|
// single filter
|
|
11207
|
-
const found = currentItems.find((item) => item.value === currentFilters.value);
|
|
11414
|
+
const found = currentItems.find((item) => item.value.toLocaleLowerCase() === currentFilters.value?.toLocaleLowerCase());
|
|
11208
11415
|
if (!found) {
|
|
11416
|
+
// add it to the current items
|
|
11209
11417
|
currentItems.push({
|
|
11210
11418
|
value: currentFilters.value,
|
|
11211
11419
|
display: currentFilters.display,
|
|
11212
11420
|
$selected: true
|
|
11213
11421
|
});
|
|
11214
11422
|
}
|
|
11423
|
+
else {
|
|
11424
|
+
// mark as selected the existing item
|
|
11425
|
+
found.$selected = true;
|
|
11426
|
+
}
|
|
11215
11427
|
}
|
|
11216
11428
|
}
|
|
11217
11429
|
}
|
|
@@ -11267,10 +11479,10 @@ class AggregationComponent {
|
|
|
11267
11479
|
return item;
|
|
11268
11480
|
});
|
|
11269
11481
|
}
|
|
11270
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
11271
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
11482
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AggregationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11483
|
+
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" }] });
|
|
11272
11484
|
}
|
|
11273
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
11485
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AggregationComponent, decorators: [{
|
|
11274
11486
|
type: Component,
|
|
11275
11487
|
args: [{ selector: "Aggregation, aggregation", imports: [
|
|
11276
11488
|
FormsModule,
|
|
@@ -11289,8 +11501,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
11289
11501
|
FilterIcon
|
|
11290
11502
|
], standalone: true, host: {
|
|
11291
11503
|
"[class]": 'cn("block h-[inherit] max-h-[inherit]",class())'
|
|
11292
|
-
}, 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=\"
|
|
11293
|
-
}], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], column: [{ type: i0.Input, args: [{ isSignal: true, alias: "column", required: true }] }], onSelect: [{ type: i0.Output, args: ["onSelect"] }], collapsible: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsible", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], showFiltersCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFiltersCount", required: false }] }], searchText: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchText", required: false }] }, { type: i0.Output, args: ["searchTextChange"] }] } });
|
|
11504
|
+
}, 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"] }]
|
|
11505
|
+
}], ctorParameters: () => [], propDecorators: { searchInput: [{ type: i0.ViewChild, args: ["searchInput", { isSignal: true }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], column: [{ type: i0.Input, args: [{ isSignal: true, alias: "column", required: true }] }], onSelect: [{ type: i0.Output, args: ["onSelect"] }], collapsible: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsible", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], showFiltersCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFiltersCount", required: false }] }], searchText: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchText", required: false }] }, { type: i0.Output, args: ["searchTextChange"] }] } });
|
|
11294
11506
|
|
|
11295
11507
|
/**
|
|
11296
11508
|
* Injection token that indicates whether custom date ranges are allowed.
|
|
@@ -11506,10 +11718,10 @@ class DateComponent extends AggregationComponent {
|
|
|
11506
11718
|
});
|
|
11507
11719
|
}
|
|
11508
11720
|
}
|
|
11509
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
11510
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
11721
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DateComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
11722
|
+
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" }] });
|
|
11511
11723
|
}
|
|
11512
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
11724
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DateComponent, decorators: [{
|
|
11513
11725
|
type: Component,
|
|
11514
11726
|
args: [{ selector: "date-filter,DateFilter", standalone: true, providers: [provideTranslocoScope("filters")], imports: [
|
|
11515
11727
|
InputComponent,
|
|
@@ -11534,8 +11746,8 @@ class AsideFiltersComponent {
|
|
|
11534
11746
|
const asideFilters = this.appStore.filters().filter((f) => f.position === "left");
|
|
11535
11747
|
return this.appStore.getAuthorized(asideFilters);
|
|
11536
11748
|
}, ...(ngDevMode ? [{ debugName: "asideFilters" }] : []));
|
|
11537
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
11538
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
11749
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AsideFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11750
|
+
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: `
|
|
11539
11751
|
@for (agg of asideFilters(); track agg.name) {
|
|
11540
11752
|
<Card hover="no">
|
|
11541
11753
|
<Aggregation [name]="agg.name" [column]="agg.column" showFiltersCount />
|
|
@@ -11543,7 +11755,7 @@ class AsideFiltersComponent {
|
|
|
11543
11755
|
}
|
|
11544
11756
|
`, 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"] }] });
|
|
11545
11757
|
}
|
|
11546
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
11758
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AsideFiltersComponent, decorators: [{
|
|
11547
11759
|
type: Component,
|
|
11548
11760
|
args: [{
|
|
11549
11761
|
selector: "aside-filters, AsideFilters, asidefilters",
|
|
@@ -11620,14 +11832,15 @@ class FilterButtonComponent {
|
|
|
11620
11832
|
isDate(column) {
|
|
11621
11833
|
return this.appStore.isDateColumn(column);
|
|
11622
11834
|
}
|
|
11623
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
11624
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
11835
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FilterButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11836
|
+
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: `
|
|
11625
11837
|
<Popover [disabled]="filter().disabled" class="group">
|
|
11626
11838
|
<button
|
|
11627
11839
|
[variant]="variant()"
|
|
11628
11840
|
class="group-open:border-foreground/50 group-open:border"
|
|
11629
11841
|
[attr.data-disabled]="filter().disabled"
|
|
11630
|
-
[disabled]="filter().disabled || null"
|
|
11842
|
+
[disabled]="filter().disabled || null"
|
|
11843
|
+
>
|
|
11631
11844
|
<!-- display the filter icon if set -->
|
|
11632
11845
|
@if (filter().icon) {
|
|
11633
11846
|
<i class="fa-fw {{ filter().icon }} " aria-hidden="true"></i>
|
|
@@ -11651,11 +11864,12 @@ class FilterButtonComponent {
|
|
|
11651
11864
|
}
|
|
11652
11865
|
</button>
|
|
11653
11866
|
|
|
11654
|
-
<PopoverContent
|
|
11867
|
+
<PopoverContent #contentRef="popoverContent"
|
|
11655
11868
|
class="min-w-fit w-max max-w-[90vw]"
|
|
11656
11869
|
[position]="position()"
|
|
11657
11870
|
[offset]="offset()"
|
|
11658
11871
|
>
|
|
11872
|
+
@if(contentRef.isVisible) {
|
|
11659
11873
|
@if (isDate(filter().column)) {
|
|
11660
11874
|
<DateFilter
|
|
11661
11875
|
class="*:details-content:[--height:19lh] w-max max-w-80"
|
|
@@ -11671,11 +11885,12 @@ class FilterButtonComponent {
|
|
|
11671
11885
|
[column]="filter().column"
|
|
11672
11886
|
id="filter-{{ filter().column }}" />
|
|
11673
11887
|
}
|
|
11888
|
+
}
|
|
11674
11889
|
</PopoverContent>
|
|
11675
11890
|
</Popover>
|
|
11676
|
-
`, 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"] }, { 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" }] });
|
|
11891
|
+
`, 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" }] });
|
|
11677
11892
|
}
|
|
11678
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
11893
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FilterButtonComponent, decorators: [{
|
|
11679
11894
|
type: Component,
|
|
11680
11895
|
args: [{
|
|
11681
11896
|
selector: "filter-button, FilterButton",
|
|
@@ -11697,7 +11912,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
11697
11912
|
[variant]="variant()"
|
|
11698
11913
|
class="group-open:border-foreground/50 group-open:border"
|
|
11699
11914
|
[attr.data-disabled]="filter().disabled"
|
|
11700
|
-
[disabled]="filter().disabled || null"
|
|
11915
|
+
[disabled]="filter().disabled || null"
|
|
11916
|
+
>
|
|
11701
11917
|
<!-- display the filter icon if set -->
|
|
11702
11918
|
@if (filter().icon) {
|
|
11703
11919
|
<i class="fa-fw {{ filter().icon }} " aria-hidden="true"></i>
|
|
@@ -11721,11 +11937,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
11721
11937
|
}
|
|
11722
11938
|
</button>
|
|
11723
11939
|
|
|
11724
|
-
<PopoverContent
|
|
11940
|
+
<PopoverContent #contentRef="popoverContent"
|
|
11725
11941
|
class="min-w-fit w-max max-w-[90vw]"
|
|
11726
11942
|
[position]="position()"
|
|
11727
11943
|
[offset]="offset()"
|
|
11728
11944
|
>
|
|
11945
|
+
@if(contentRef.isVisible) {
|
|
11729
11946
|
@if (isDate(filter().column)) {
|
|
11730
11947
|
<DateFilter
|
|
11731
11948
|
class="*:details-content:[--height:19lh] w-max max-w-80"
|
|
@@ -11741,6 +11958,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
11741
11958
|
[column]="filter().column"
|
|
11742
11959
|
id="filter-{{ filter().column }}" />
|
|
11743
11960
|
}
|
|
11961
|
+
}
|
|
11744
11962
|
</PopoverContent>
|
|
11745
11963
|
</Popover>
|
|
11746
11964
|
`,
|
|
@@ -11847,8 +12065,8 @@ class MoreComponent {
|
|
|
11847
12065
|
const { count = 0 } = this.queryParamsStore.getFilter({ field: aggregation.column, name: aggregation.name }) || {};
|
|
11848
12066
|
return count > 0;
|
|
11849
12067
|
}
|
|
11850
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
11851
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
12068
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12069
|
+
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: `
|
|
11852
12070
|
@for (filter of visibleFilters(); track $index) {
|
|
11853
12071
|
@if (isDate(filter.column)) {
|
|
11854
12072
|
<DateFilter class="p-1" id="more-filters" [name]="filter.name" [column]="filter.column" collapsible collapsed />
|
|
@@ -11866,7 +12084,7 @@ class MoreComponent {
|
|
|
11866
12084
|
}
|
|
11867
12085
|
`, 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" }] });
|
|
11868
12086
|
}
|
|
11869
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
12087
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MoreComponent, decorators: [{
|
|
11870
12088
|
type: Component,
|
|
11871
12089
|
args: [{ selector: "more, More", standalone: true, imports: [AggregationComponent, DateComponent, TranslocoPipe], template: `
|
|
11872
12090
|
@for (filter of visibleFilters(); track $index) {
|
|
@@ -11911,8 +12129,8 @@ class MoreButtonComponent {
|
|
|
11911
12129
|
}, 0);
|
|
11912
12130
|
return total;
|
|
11913
12131
|
}, ...(ngDevMode ? [{ debugName: "totalFiltersCount" }] : []));
|
|
11914
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
11915
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
12132
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MoreButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12133
|
+
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: `
|
|
11916
12134
|
<Popover class="group/more">
|
|
11917
12135
|
<button
|
|
11918
12136
|
variant="ghost"
|
|
@@ -11928,13 +12146,15 @@ class MoreButtonComponent {
|
|
|
11928
12146
|
}
|
|
11929
12147
|
</button>
|
|
11930
12148
|
|
|
11931
|
-
<PopoverContent [position]="position()" class="min-w-max">
|
|
12149
|
+
<PopoverContent #contentRef="popoverContent" [position]="position()" class="min-w-max">
|
|
12150
|
+
@if(contentRef.isVisible) {
|
|
11932
12151
|
<More [count]="count()" [includedFilters]="includedFilters()" [excludedFilters]="excludedFilters()" [aggregations]="aggregations()" class="block h-full w-full max-w-80 [--height:55vh] min-w-40 overflow-hidden" />
|
|
12152
|
+
}
|
|
11933
12153
|
</PopoverContent>
|
|
11934
12154
|
</Popover>
|
|
11935
|
-
`, 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"] }, { 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" }] });
|
|
12155
|
+
`, 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" }] });
|
|
11936
12156
|
}
|
|
11937
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
12157
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MoreButtonComponent, decorators: [{
|
|
11938
12158
|
type: Component,
|
|
11939
12159
|
args: [{
|
|
11940
12160
|
selector: "more-button, MoreButton",
|
|
@@ -11956,8 +12176,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
11956
12176
|
}
|
|
11957
12177
|
</button>
|
|
11958
12178
|
|
|
11959
|
-
<PopoverContent [position]="position()" class="min-w-max">
|
|
12179
|
+
<PopoverContent #contentRef="popoverContent" [position]="position()" class="min-w-max">
|
|
12180
|
+
@if(contentRef.isVisible) {
|
|
11960
12181
|
<More [count]="count()" [includedFilters]="includedFilters()" [excludedFilters]="excludedFilters()" [aggregations]="aggregations()" class="block h-full w-full max-w-80 [--height:55vh] min-w-40 overflow-hidden" />
|
|
12182
|
+
}
|
|
11961
12183
|
</PopoverContent>
|
|
11962
12184
|
</Popover>
|
|
11963
12185
|
`
|
|
@@ -12135,8 +12357,8 @@ class FiltersBarComponent {
|
|
|
12135
12357
|
ref.popoverRef()?.onClick(event);
|
|
12136
12358
|
});
|
|
12137
12359
|
}
|
|
12138
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
12139
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
12360
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FiltersBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12361
|
+
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: `
|
|
12140
12362
|
<ng-container overflowManager [direction]="direction()" [target]="el.nativeElement" (count)="adjustFiltersCount($event)">
|
|
12141
12363
|
@if (hasFilters()) {
|
|
12142
12364
|
<button
|
|
@@ -12185,7 +12407,7 @@ class FiltersBarComponent {
|
|
|
12185
12407
|
</ng-container>
|
|
12186
12408
|
`, 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" }] });
|
|
12187
12409
|
}
|
|
12188
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
12410
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FiltersBarComponent, decorators: [{
|
|
12189
12411
|
type: Component,
|
|
12190
12412
|
args: [{
|
|
12191
12413
|
selector: "filters-bar, FiltersBar, filtersbar",
|
|
@@ -12393,10 +12615,10 @@ class LabelService {
|
|
|
12393
12615
|
return from(labels.bulkRemove(labelsToRemove, query, publicOnly));
|
|
12394
12616
|
}));
|
|
12395
12617
|
}
|
|
12396
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
12397
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
12618
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
12619
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelService, providedIn: 'root' });
|
|
12398
12620
|
}
|
|
12399
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
12621
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelService, decorators: [{
|
|
12400
12622
|
type: Injectable,
|
|
12401
12623
|
args: [{
|
|
12402
12624
|
providedIn: 'root'
|
|
@@ -12412,22 +12634,26 @@ class MultiSelectLabelsComponent {
|
|
|
12412
12634
|
labelsField = input(...(ngDevMode ? [undefined, { debugName: "labelsField" }] : []));
|
|
12413
12635
|
anchor = signal(`--${guid()}`, ...(ngDevMode ? [{ debugName: "anchor" }] : []));
|
|
12414
12636
|
suggestedLabels = signal([], ...(ngDevMode ? [{ debugName: "suggestedLabels" }] : []));
|
|
12415
|
-
labelInput = model(
|
|
12637
|
+
labelInput = model("", ...(ngDevMode ? [{ debugName: "labelInput" }] : []));
|
|
12416
12638
|
debouncedLabelInput = debouncedSignal(this.labelInput, DEBOUNCE_DELAY);
|
|
12417
|
-
popover = viewChild(
|
|
12639
|
+
popover = viewChild("LabelsPopover", ...(ngDevMode ? [{ debugName: "popover" }] : []));
|
|
12418
12640
|
popoverElement = computed(() => this.popover()?.nativeElement, ...(ngDevMode ? [{ debugName: "popoverElement" }] : []));
|
|
12419
12641
|
labels = signal([], ...(ngDevMode ? [{ debugName: "labels" }] : []));
|
|
12642
|
+
hasError = signal(false, ...(ngDevMode ? [{ debugName: "hasError" }] : []));
|
|
12420
12643
|
id = signal(`labels-form-${guid()}`, ...(ngDevMode ? [{ debugName: "id" }] : []));
|
|
12421
12644
|
constructor() {
|
|
12422
12645
|
afterEveryRender(() => {
|
|
12423
12646
|
this.popoverElement().style.positionAnchor = this.anchor();
|
|
12424
12647
|
});
|
|
12425
12648
|
effect(() => {
|
|
12426
|
-
|
|
12649
|
+
const article = this.article();
|
|
12650
|
+
const labelsField = this.labelsField();
|
|
12651
|
+
if (!article)
|
|
12427
12652
|
return;
|
|
12428
|
-
if (!
|
|
12653
|
+
if (!labelsField)
|
|
12429
12654
|
return;
|
|
12430
|
-
|
|
12655
|
+
const labels = article[labelsField];
|
|
12656
|
+
this.labels.set(labels || []);
|
|
12431
12657
|
});
|
|
12432
12658
|
effect(() => {
|
|
12433
12659
|
this.fetchLabels(this.debouncedLabelInput(), this.isPublic());
|
|
@@ -12445,14 +12671,14 @@ class MultiSelectLabelsComponent {
|
|
|
12445
12671
|
event.stopImmediatePropagation();
|
|
12446
12672
|
if (this.labelInput().length === 0)
|
|
12447
12673
|
return;
|
|
12448
|
-
if (event.key ===
|
|
12674
|
+
if (event.key === "Enter") {
|
|
12449
12675
|
this.addLabel(this.labelInput(), this.isPublic());
|
|
12450
|
-
this.labelInput.set(
|
|
12676
|
+
this.labelInput.set("");
|
|
12451
12677
|
}
|
|
12452
12678
|
}
|
|
12453
12679
|
async fetchLabels(text, isPublic) {
|
|
12454
12680
|
const labels = (await withFetch(() => fetchLabels(text, isPublic), this.injector)) || [];
|
|
12455
|
-
const unappliedLabels = labels.filter(label => !this.labels().some(l => l === label));
|
|
12681
|
+
const unappliedLabels = labels.filter((label) => !this.labels().some((l) => l === label));
|
|
12456
12682
|
this.suggestedLabels.set(unappliedLabels);
|
|
12457
12683
|
unappliedLabels.length ? this.popoverElement().showPopover() : this.popoverElement().hidePopover();
|
|
12458
12684
|
}
|
|
@@ -12470,12 +12696,21 @@ class MultiSelectLabelsComponent {
|
|
|
12470
12696
|
* @returns A promise that resolves once the label has been added and the article updated.
|
|
12471
12697
|
*/
|
|
12472
12698
|
async addLabel(label, isPublic) {
|
|
12473
|
-
|
|
12474
|
-
this.
|
|
12475
|
-
|
|
12476
|
-
|
|
12477
|
-
|
|
12478
|
-
|
|
12699
|
+
this.hasError.set(false);
|
|
12700
|
+
const article = this.article();
|
|
12701
|
+
if (!article)
|
|
12702
|
+
return;
|
|
12703
|
+
try {
|
|
12704
|
+
await labels.add([label], [article.id], isPublic);
|
|
12705
|
+
const currentLabels = this.labels();
|
|
12706
|
+
this.labels.set([...currentLabels, label]);
|
|
12707
|
+
this.updateArticleWithLabels();
|
|
12708
|
+
this.labelInput.set("");
|
|
12709
|
+
this.suggestedLabels.set([]);
|
|
12710
|
+
}
|
|
12711
|
+
catch {
|
|
12712
|
+
this.hasError.set(true);
|
|
12713
|
+
}
|
|
12479
12714
|
}
|
|
12480
12715
|
/**
|
|
12481
12716
|
* Removes a label from the current list of labels and updates the associated article.
|
|
@@ -12485,9 +12720,18 @@ class MultiSelectLabelsComponent {
|
|
|
12485
12720
|
* @returns A promise that resolves once the label is removed and the article is updated.
|
|
12486
12721
|
*/
|
|
12487
12722
|
async removeLabel(label, isPublic) {
|
|
12488
|
-
this.
|
|
12489
|
-
|
|
12490
|
-
|
|
12723
|
+
this.hasError.set(false);
|
|
12724
|
+
const article = this.article();
|
|
12725
|
+
if (!article)
|
|
12726
|
+
return;
|
|
12727
|
+
try {
|
|
12728
|
+
await labels.remove([label], [article.id], isPublic);
|
|
12729
|
+
this.labels.set(this.labels().filter((l) => l !== label));
|
|
12730
|
+
this.updateArticleWithLabels();
|
|
12731
|
+
}
|
|
12732
|
+
catch {
|
|
12733
|
+
this.hasError.set(true);
|
|
12734
|
+
}
|
|
12491
12735
|
}
|
|
12492
12736
|
/**
|
|
12493
12737
|
* Updates the article object by assigning the current labels to the specified labels field.
|
|
@@ -12499,13 +12743,18 @@ class MultiSelectLabelsComponent {
|
|
|
12499
12743
|
* Ensure that `this.article`, `this.labelsField`, and `this.labels` return valid values
|
|
12500
12744
|
* before invoking this method to avoid runtime errors.
|
|
12501
12745
|
*
|
|
12502
|
-
* @throws {TypeError} If `this.article` or `this.labelsField` returns `undefined`.
|
|
12503
12746
|
*/
|
|
12504
12747
|
updateArticleWithLabels() {
|
|
12505
|
-
|
|
12748
|
+
const article = this.article();
|
|
12749
|
+
const labelsField = this.labelsField();
|
|
12750
|
+
if (!article)
|
|
12751
|
+
return;
|
|
12752
|
+
if (!labelsField)
|
|
12753
|
+
return;
|
|
12754
|
+
article[labelsField] = this.labels();
|
|
12506
12755
|
}
|
|
12507
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
12508
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
12756
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MultiSelectLabelsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12757
|
+
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: `
|
|
12509
12758
|
<div class="anchor" [ngStyle]="{ 'anchor-name': anchor() }">
|
|
12510
12759
|
<label [htmlFor]="id()" class="font-semibold">{{ (isPublic() ? 'labels.publicLabels' : 'labels.privateLabels') | transloco }}</label>
|
|
12511
12760
|
<input
|
|
@@ -12542,11 +12791,16 @@ class MultiSelectLabelsComponent {
|
|
|
12542
12791
|
</Badge>
|
|
12543
12792
|
}
|
|
12544
12793
|
</div>
|
|
12794
|
+
@if (hasError()) {
|
|
12795
|
+
<div class="p-4 w-full bg-destructive/20 border-destructive">
|
|
12796
|
+
{{ 'labels.error' | transloco }}
|
|
12797
|
+
</div>
|
|
12798
|
+
}
|
|
12545
12799
|
`, 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" }] });
|
|
12546
12800
|
}
|
|
12547
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
12801
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MultiSelectLabelsComponent, decorators: [{
|
|
12548
12802
|
type: Component,
|
|
12549
|
-
args: [{ selector:
|
|
12803
|
+
args: [{ selector: "multiselect-labels, multiselectlabels, MultiSelectLabels", providers: [provideTranslocoScope("labels")], standalone: true, imports: [FormsModule, NgStyle, TranslocoPipe, InputComponent, BadgeComponent, ListItemComponent], template: `
|
|
12550
12804
|
<div class="anchor" [ngStyle]="{ 'anchor-name': anchor() }">
|
|
12551
12805
|
<label [htmlFor]="id()" class="font-semibold">{{ (isPublic() ? 'labels.publicLabels' : 'labels.privateLabels') | transloco }}</label>
|
|
12552
12806
|
<input
|
|
@@ -12583,8 +12837,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
12583
12837
|
</Badge>
|
|
12584
12838
|
}
|
|
12585
12839
|
</div>
|
|
12840
|
+
@if (hasError()) {
|
|
12841
|
+
<div class="p-4 w-full bg-destructive/20 border-destructive">
|
|
12842
|
+
{{ 'labels.error' | transloco }}
|
|
12843
|
+
</div>
|
|
12844
|
+
}
|
|
12586
12845
|
`, 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"] }]
|
|
12587
|
-
}], ctorParameters: () => [], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: false }] }, { type: i0.Output, args: ["articleChange"] }], isPublic: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPublic", required: false }] }], allowModification: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowModification", required: false }] }], labelsField: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelsField", required: false }] }], labelInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelInput", required: false }] }, { type: i0.Output, args: ["labelInputChange"] }], popover: [{ type: i0.ViewChild, args: [
|
|
12846
|
+
}], ctorParameters: () => [], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: false }] }, { type: i0.Output, args: ["articleChange"] }], isPublic: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPublic", required: false }] }], allowModification: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowModification", required: false }] }], labelsField: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelsField", required: false }] }], labelInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelInput", required: false }] }, { type: i0.Output, args: ["labelInputChange"] }], popover: [{ type: i0.ViewChild, args: ["LabelsPopover", { isSignal: true }] }] } });
|
|
12588
12847
|
|
|
12589
12848
|
class LabelsEditDialog {
|
|
12590
12849
|
destroyRef;
|
|
@@ -12607,8 +12866,8 @@ class LabelsEditDialog {
|
|
|
12607
12866
|
close(event) {
|
|
12608
12867
|
this.closed.emit({ type: event, article: this.article() });
|
|
12609
12868
|
}
|
|
12610
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
12611
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
12869
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelsEditDialog, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
12870
|
+
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: `
|
|
12612
12871
|
<dialog #dialog (closed)="close($event)">
|
|
12613
12872
|
<DialogContent>
|
|
12614
12873
|
<DialogHeader>
|
|
@@ -12638,7 +12897,7 @@ class LabelsEditDialog {
|
|
|
12638
12897
|
</dialog>
|
|
12639
12898
|
`, 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" }] });
|
|
12640
12899
|
}
|
|
12641
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
12900
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LabelsEditDialog, decorators: [{
|
|
12642
12901
|
type: Component,
|
|
12643
12902
|
args: [{
|
|
12644
12903
|
selector: "labels-edit-dialog, labelseditdialog, LabelsEditDialog",
|
|
@@ -12695,8 +12954,8 @@ class SearchFooterComponent {
|
|
|
12695
12954
|
event.stopPropagation();
|
|
12696
12955
|
this.loadMore.emit();
|
|
12697
12956
|
}
|
|
12698
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
12699
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
12957
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12958
|
+
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">
|
|
12700
12959
|
@if (hasMore() && config().showLoadMore) {
|
|
12701
12960
|
<button decoration="outline" class="w-full" tabindex="0" [attr.title]="'loadMore' | transloco" (click)="onLoadMore($event)">
|
|
12702
12961
|
{{ 'loadMore' | transloco }}
|
|
@@ -12707,7 +12966,7 @@ class SearchFooterComponent {
|
|
|
12707
12966
|
</button>
|
|
12708
12967
|
</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" }] });
|
|
12709
12968
|
}
|
|
12710
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
12969
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchFooterComponent, decorators: [{
|
|
12711
12970
|
type: Component,
|
|
12712
12971
|
args: [{
|
|
12713
12972
|
selector: 'search-footer, searchfooter, SearchFooter',
|
|
@@ -12728,8 +12987,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
12728
12987
|
class SearchHeaderComponent {
|
|
12729
12988
|
floating = inject(PopoverContentComponent, { skipSelf: true, optional: true });
|
|
12730
12989
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
12731
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
12732
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
12990
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12991
|
+
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: `
|
|
12733
12992
|
@if (floating) {
|
|
12734
12993
|
<div class="p-2">
|
|
12735
12994
|
<label class="text-xl font-bold">{{ label() }}</label>
|
|
@@ -12738,7 +12997,7 @@ class SearchHeaderComponent {
|
|
|
12738
12997
|
}
|
|
12739
12998
|
`, isInline: true, dependencies: [{ kind: "component", type: HorizontalDividerComponent, selector: "horizontal-divider, HorizontalDivider, horizontaldivider" }] });
|
|
12740
12999
|
}
|
|
12741
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
13000
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchHeaderComponent, decorators: [{
|
|
12742
13001
|
type: Component,
|
|
12743
13002
|
args: [{
|
|
12744
13003
|
selector: 'search-header, searchheader, SearchHeader',
|
|
@@ -12777,8 +13036,8 @@ class SearchListComponent {
|
|
|
12777
13036
|
e.stopPropagation();
|
|
12778
13037
|
this.delete.emit(index);
|
|
12779
13038
|
}
|
|
12780
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
12781
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
13039
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13040
|
+
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: `
|
|
12782
13041
|
@for (search of paginatedSearches(); track $index) {
|
|
12783
13042
|
<li
|
|
12784
13043
|
role="listitem"
|
|
@@ -12823,7 +13082,7 @@ class SearchListComponent {
|
|
|
12823
13082
|
}
|
|
12824
13083
|
`, 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" }] });
|
|
12825
13084
|
}
|
|
12826
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
13085
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchListComponent, decorators: [{
|
|
12827
13086
|
type: Component,
|
|
12828
13087
|
args: [{
|
|
12829
13088
|
selector: "search-list, searchlist, SearchList",
|
|
@@ -12929,8 +13188,8 @@ class RecentSearchesComponent {
|
|
|
12929
13188
|
loadMore() {
|
|
12930
13189
|
this.range.set(this.range() + (this.config.itemsPerPage ?? 10));
|
|
12931
13190
|
}
|
|
12932
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
12933
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.
|
|
13191
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RecentSearchesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13192
|
+
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: `
|
|
12934
13193
|
<SearchHeader [label]="'searches.recent.label' | transloco" />
|
|
12935
13194
|
|
|
12936
13195
|
<SearchList
|
|
@@ -12946,7 +13205,7 @@ class RecentSearchesComponent {
|
|
|
12946
13205
|
<SearchFooter [hasMore]="hasMore()" [config]="config" (loadMore)="loadMore()" />
|
|
12947
13206
|
`, 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" }] });
|
|
12948
13207
|
}
|
|
12949
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
13208
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RecentSearchesComponent, decorators: [{
|
|
12950
13209
|
type: Component,
|
|
12951
13210
|
args: [{ selector: 'RecentSearches, recent-searches', standalone: true, providers: [provideTranslocoScope('searches')], imports: [TranslocoPipe, ChildMarkerDirective, SearchHeaderComponent, SearchListComponent, SearchFooterComponent], template: `
|
|
12952
13211
|
<SearchHeader [label]="'searches.recent.label' | transloco" />
|
|
@@ -12984,8 +13243,8 @@ class SavedSearchDialog {
|
|
|
12984
13243
|
// emit closed event for the diaglog service
|
|
12985
13244
|
this.closed.emit("dialog-confirm");
|
|
12986
13245
|
}
|
|
12987
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
12988
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.
|
|
13246
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedSearchDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13247
|
+
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: `
|
|
12989
13248
|
<dialog #dialog>
|
|
12990
13249
|
<DialogContent>
|
|
12991
13250
|
<DialogHeader>
|
|
@@ -13013,7 +13272,7 @@ class SavedSearchDialog {
|
|
|
13013
13272
|
</dialog>
|
|
13014
13273
|
`, 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" }] });
|
|
13015
13274
|
}
|
|
13016
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
13275
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedSearchDialog, decorators: [{
|
|
13017
13276
|
type: Component,
|
|
13018
13277
|
args: [{
|
|
13019
13278
|
selector: "saved-search-dialog, savedsearchdialog, SavedSearchDialog",
|
|
@@ -13098,8 +13357,8 @@ class SavedSearchesComponent {
|
|
|
13098
13357
|
loadMore() {
|
|
13099
13358
|
this.range.set(this.range() + (this.config.itemsPerPage ?? 10));
|
|
13100
13359
|
}
|
|
13101
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
13102
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.
|
|
13360
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedSearchesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13361
|
+
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: `
|
|
13103
13362
|
<SearchHeader [label]="'searches.saved.label' | transloco" />
|
|
13104
13363
|
|
|
13105
13364
|
<SearchList [paginatedSearches]="paginatedSearches()" deleteButtonTitle="searches.saved.remove" (delete)="onDelete($event)">
|
|
@@ -13111,7 +13370,7 @@ class SavedSearchesComponent {
|
|
|
13111
13370
|
<SearchFooter [hasMore]="hasMore()" [config]="config" (loadMore)="loadMore()" />
|
|
13112
13371
|
`, 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" }] });
|
|
13113
13372
|
}
|
|
13114
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
13373
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedSearchesComponent, decorators: [{
|
|
13115
13374
|
type: Component,
|
|
13116
13375
|
args: [{ selector: 'saved-searches, SavedSearches', standalone: true, imports: [TranslocoPipe, ChildMarkerDirective, SearchHeaderComponent, SearchListComponent, SearchFooterComponent], providers: [provideTranslocoScope('searches')], template: `
|
|
13117
13376
|
<SearchHeader [label]="'searches.saved.label' | transloco" />
|
|
@@ -13126,6 +13385,206 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
13126
13385
|
`, styles: [":host ul{scrollbar-width:thin}\n"] }]
|
|
13127
13386
|
}], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }] } });
|
|
13128
13387
|
|
|
13388
|
+
const SUPPORTED_LANGUAGES = ["en", "fr"];
|
|
13389
|
+
class UserProfileFormComponent {
|
|
13390
|
+
principalStore = inject(PrincipalStore);
|
|
13391
|
+
userSettingsStore = inject(UserSettingsStore);
|
|
13392
|
+
userProfileService = inject(UserProfileService);
|
|
13393
|
+
transloco = inject(TranslocoService);
|
|
13394
|
+
createInputElement = viewChild("avatarInput", ...(ngDevMode ? [{ debugName: "createInputElement" }] : []));
|
|
13395
|
+
dataKeys = ["fullName", "mail", "jobTitle", "group", "organisation", "location"];
|
|
13396
|
+
initials = computed(() => {
|
|
13397
|
+
const fullName = this.userProfile()?.data?.fullName;
|
|
13398
|
+
if (!fullName)
|
|
13399
|
+
return undefined;
|
|
13400
|
+
return fullName
|
|
13401
|
+
.split(" ")
|
|
13402
|
+
.map((word) => word[0].toUpperCase())
|
|
13403
|
+
.join("");
|
|
13404
|
+
}, ...(ngDevMode ? [{ debugName: "initials" }] : []));
|
|
13405
|
+
propertyToEdit = signal(undefined, ...(ngDevMode ? [{ debugName: "propertyToEdit" }] : []));
|
|
13406
|
+
value = model(undefined, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
13407
|
+
currentLanguage = model(...(ngDevMode ? [undefined, { debugName: "currentLanguage" }] : []));
|
|
13408
|
+
AllLanguages = [
|
|
13409
|
+
{ code: "en", label: "English", icon: FlagEnglishIconComponent },
|
|
13410
|
+
{ code: "fr", label: "Français", icon: FlagFrenchIconComponent }
|
|
13411
|
+
];
|
|
13412
|
+
changingPassword = signal(false, ...(ngDevMode ? [{ debugName: "changingPassword" }] : []));
|
|
13413
|
+
principal = computed(() => this.principalStore.principal?.(), ...(ngDevMode ? [{ debugName: "principal" }] : []));
|
|
13414
|
+
constructor() {
|
|
13415
|
+
this.currentLanguage.set(this.transloco.getActiveLang());
|
|
13416
|
+
}
|
|
13417
|
+
userProfileResource = this.userProfileService.getUserProfile(this.principal);
|
|
13418
|
+
userProfile = linkedSignal(() => {
|
|
13419
|
+
if (this.userProfileResource.hasValue()) {
|
|
13420
|
+
return this.userProfileResource.value();
|
|
13421
|
+
}
|
|
13422
|
+
const { userId: id, email: mail, fullName } = this.principal() || {};
|
|
13423
|
+
if (!id || !mail || !fullName) {
|
|
13424
|
+
return undefined;
|
|
13425
|
+
}
|
|
13426
|
+
return { data: { id, mail, fullName } };
|
|
13427
|
+
}, ...(ngDevMode ? [{ debugName: "userProfile" }] : []));
|
|
13428
|
+
async createUserProfile() {
|
|
13429
|
+
const { userId: id, email: mail, fullName } = this.principal() || {};
|
|
13430
|
+
if (!id) {
|
|
13431
|
+
return;
|
|
13432
|
+
}
|
|
13433
|
+
const response = await createUserProfile({ data: { id, mail, fullName } });
|
|
13434
|
+
if (response) {
|
|
13435
|
+
info("Created user profile", response);
|
|
13436
|
+
this.userProfileResource.set(response);
|
|
13437
|
+
}
|
|
13438
|
+
}
|
|
13439
|
+
/**
|
|
13440
|
+
* On editing a value, we save its former value to set it back in case of error
|
|
13441
|
+
*
|
|
13442
|
+
* @param category data or customData
|
|
13443
|
+
* @param propertyName property name
|
|
13444
|
+
*/
|
|
13445
|
+
onEdit(propertyName) {
|
|
13446
|
+
const data = this.userProfile()?.data;
|
|
13447
|
+
const value = data?.[propertyName];
|
|
13448
|
+
this.value.set(value || "");
|
|
13449
|
+
this.propertyToEdit.set(`${propertyName}`);
|
|
13450
|
+
}
|
|
13451
|
+
/**
|
|
13452
|
+
* On data property deletion, for now we make the property an empty string
|
|
13453
|
+
*
|
|
13454
|
+
* @param propertyName property name
|
|
13455
|
+
*/
|
|
13456
|
+
onDeleteData(propertyName) {
|
|
13457
|
+
this.userProfile.update((profile) => {
|
|
13458
|
+
if (profile?.data) {
|
|
13459
|
+
profile.data[propertyName] = "";
|
|
13460
|
+
}
|
|
13461
|
+
return profile;
|
|
13462
|
+
});
|
|
13463
|
+
this.onSaveData(propertyName);
|
|
13464
|
+
}
|
|
13465
|
+
/**
|
|
13466
|
+
* Saving a data property
|
|
13467
|
+
*
|
|
13468
|
+
* @param propertyName property name
|
|
13469
|
+
*/
|
|
13470
|
+
async onSaveData(propertyName) {
|
|
13471
|
+
// cloning the user profile to avoid changing the signal value before confirming the update
|
|
13472
|
+
const userProfile = JSON.parse(JSON.stringify(this.userProfile()));
|
|
13473
|
+
userProfile.data[propertyName] = this.value();
|
|
13474
|
+
const response = await patchUserProfile(userProfile, "data", propertyName);
|
|
13475
|
+
if (response) {
|
|
13476
|
+
console.log("Updated user profile", response);
|
|
13477
|
+
const newUserProfile = this.userProfile();
|
|
13478
|
+
this.userProfileResource.set({
|
|
13479
|
+
...newUserProfile,
|
|
13480
|
+
...response,
|
|
13481
|
+
data: { ...newUserProfile?.data, ...(response.data || {}) }
|
|
13482
|
+
});
|
|
13483
|
+
}
|
|
13484
|
+
this.value.set(undefined);
|
|
13485
|
+
this.propertyToEdit.set(undefined);
|
|
13486
|
+
}
|
|
13487
|
+
/**
|
|
13488
|
+
* Get the value of a data key
|
|
13489
|
+
*
|
|
13490
|
+
* @param key property key
|
|
13491
|
+
* @returns the value
|
|
13492
|
+
*/
|
|
13493
|
+
getDataValue(key) {
|
|
13494
|
+
const data = this.userProfile()?.data;
|
|
13495
|
+
const value = data?.[key];
|
|
13496
|
+
return value;
|
|
13497
|
+
}
|
|
13498
|
+
/**
|
|
13499
|
+
* TODO: how do we save the picture?
|
|
13500
|
+
*
|
|
13501
|
+
* @param event
|
|
13502
|
+
*/
|
|
13503
|
+
uploadAvatar(event) {
|
|
13504
|
+
const element = event.currentTarget;
|
|
13505
|
+
const fileList = element.files;
|
|
13506
|
+
console.log("fileList", fileList);
|
|
13507
|
+
}
|
|
13508
|
+
/**
|
|
13509
|
+
* Change the app language
|
|
13510
|
+
*/
|
|
13511
|
+
changeLanguage() {
|
|
13512
|
+
const language = this.currentLanguage();
|
|
13513
|
+
if (!language)
|
|
13514
|
+
return;
|
|
13515
|
+
this.userSettingsStore.updateLanguage(language);
|
|
13516
|
+
if (this.transloco.getActiveLang() !== language) {
|
|
13517
|
+
this.transloco.setActiveLang(language);
|
|
13518
|
+
}
|
|
13519
|
+
}
|
|
13520
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13521
|
+
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" }] });
|
|
13522
|
+
}
|
|
13523
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileFormComponent, decorators: [{
|
|
13524
|
+
type: Component,
|
|
13525
|
+
args: [{ selector: "user-profile-form, UserProfileForm, userprofileform", standalone: true, imports: [
|
|
13526
|
+
FormsModule,
|
|
13527
|
+
RouterModule,
|
|
13528
|
+
TranslocoPipe,
|
|
13529
|
+
InputComponent,
|
|
13530
|
+
TrashIcon,
|
|
13531
|
+
EditIcon,
|
|
13532
|
+
UndoIcon,
|
|
13533
|
+
AvatarComponent,
|
|
13534
|
+
AvatarFallbackComponent,
|
|
13535
|
+
UserIcon,
|
|
13536
|
+
AvatarImageComponent,
|
|
13537
|
+
ButtonComponent,
|
|
13538
|
+
ChangePasswordComponent
|
|
13539
|
+
], 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)\" />" }]
|
|
13540
|
+
}], 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"] }] } });
|
|
13541
|
+
|
|
13542
|
+
class UserProfileDialog {
|
|
13543
|
+
dialog = viewChild(DialogComponent, ...(ngDevMode ? [{ debugName: "dialog" }] : []));
|
|
13544
|
+
open() {
|
|
13545
|
+
this.dialog()?.showModal();
|
|
13546
|
+
}
|
|
13547
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13548
|
+
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: `
|
|
13549
|
+
<dialog #dialog>
|
|
13550
|
+
<DialogContent class="max-h-11/12 overflow-auto">
|
|
13551
|
+
<DialogHeader>
|
|
13552
|
+
<DialogTitle>User Profile</DialogTitle>
|
|
13553
|
+
</DialogHeader>
|
|
13554
|
+
|
|
13555
|
+
<user-profile-form />
|
|
13556
|
+
|
|
13557
|
+
</DialogContent>
|
|
13558
|
+
</dialog>
|
|
13559
|
+
`, 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"] }] });
|
|
13560
|
+
}
|
|
13561
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileDialog, decorators: [{
|
|
13562
|
+
type: Component,
|
|
13563
|
+
args: [{
|
|
13564
|
+
selector: "user-profile-dialog, userprofiledialog, UserProfileDialog",
|
|
13565
|
+
standalone: true,
|
|
13566
|
+
imports: [
|
|
13567
|
+
DialogComponent,
|
|
13568
|
+
DialogHeaderComponent,
|
|
13569
|
+
DialogContentComponent,
|
|
13570
|
+
UserProfileFormComponent,
|
|
13571
|
+
DialogTitleComponent
|
|
13572
|
+
],
|
|
13573
|
+
template: `
|
|
13574
|
+
<dialog #dialog>
|
|
13575
|
+
<DialogContent class="max-h-11/12 overflow-auto">
|
|
13576
|
+
<DialogHeader>
|
|
13577
|
+
<DialogTitle>User Profile</DialogTitle>
|
|
13578
|
+
</DialogHeader>
|
|
13579
|
+
|
|
13580
|
+
<user-profile-form />
|
|
13581
|
+
|
|
13582
|
+
</DialogContent>
|
|
13583
|
+
</dialog>
|
|
13584
|
+
`
|
|
13585
|
+
}]
|
|
13586
|
+
}], propDecorators: { dialog: [{ type: i0.ViewChild, args: [i0.forwardRef(() => DialogComponent), { isSignal: true }] }] } });
|
|
13587
|
+
|
|
13129
13588
|
/**
|
|
13130
13589
|
* Intercepts HTTP requests to add audit information if the request URL includes the API path.
|
|
13131
13590
|
*
|
|
@@ -13268,16 +13727,23 @@ const errorInterceptorFn = (request, next) => {
|
|
|
13268
13727
|
* @returns An observable that either passes the request through or handles errors with toast notifications.
|
|
13269
13728
|
*/
|
|
13270
13729
|
const toastInterceptorFn = (request, next) => {
|
|
13271
|
-
if (request.url.includes(
|
|
13730
|
+
if (request.url.includes("api/v1/audit.notify")) {
|
|
13272
13731
|
return next(request);
|
|
13273
13732
|
}
|
|
13274
|
-
return next(request).pipe(catchError$1(err => {
|
|
13275
|
-
const { status, statusText, error } = err;
|
|
13733
|
+
return next(request).pipe(catchError$1((err) => {
|
|
13734
|
+
const { status, statusText, error, url } = err;
|
|
13276
13735
|
if ([400, 403, 500, 503].includes(status)) {
|
|
13277
|
-
|
|
13278
|
-
|
|
13736
|
+
// Avoid showing error toasts for preview requests
|
|
13737
|
+
if (url.includes("api/v1/preview") === false) {
|
|
13738
|
+
const { errorMessage = err.statusText, errorCodeText = `Error ${status}` } = error;
|
|
13739
|
+
notify.error(statusText, {
|
|
13740
|
+
description: `${errorCodeText}: ${errorMessage}`,
|
|
13741
|
+
closeButton: true,
|
|
13742
|
+
duration: 5000
|
|
13743
|
+
});
|
|
13744
|
+
}
|
|
13279
13745
|
}
|
|
13280
|
-
return
|
|
13746
|
+
return throwError(() => err);
|
|
13281
13747
|
}));
|
|
13282
13748
|
};
|
|
13283
13749
|
|
|
@@ -13301,5 +13767,5 @@ const queryNameResolver = () => {
|
|
|
13301
13767
|
* Generated bundle index. Do not edit.
|
|
13302
13768
|
*/
|
|
13303
13769
|
|
|
13304
|
-
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,
|
|
13770
|
+
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 };
|
|
13305
13771
|
//# sourceMappingURL=sinequa-atomic-angular.mjs.map
|