@sinequa/atomic-angular 1.0.4 → 1.2.5
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/fesm2022/sinequa-atomic-angular.mjs +500 -419
- package/fesm2022/sinequa-atomic-angular.mjs.map +1 -1
- package/index.d.ts +139 -99
- package/package.json +1 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Injectable, inject, HostBinding, Component, Pipe, InjectionToken, computed, ChangeDetectorRef, DestroyRef, LOCALE_ID, Inject, Optional, input, output, signal, effect, assertInInjectionContext, runInInjectionContext, Injector, EventEmitter, Directive, viewChild, ElementRef, afterNextRender, untracked, linkedSignal, model, TemplateRef, HostListener, Renderer2, contentChildren, contentChild, booleanAttribute, ChangeDetectionStrategy, resource, ViewContainerRef, viewChildren, numberAttribute, afterEveryRender } from '@angular/core';
|
|
3
|
-
import { BehaviorSubject, Subscription,
|
|
3
|
+
import { BehaviorSubject, Subscription, firstValueFrom, catchError, map, Subject, of, tap, EMPTY, throwError, filter, shareReplay, fromEvent, debounceTime, from, switchMap } from 'rxjs';
|
|
4
4
|
import { TranslocoService, TranslocoPipe, provideTranslocoScope } from '@jsverse/transloco';
|
|
5
|
-
import { DropdownComponent, DropdownContentComponent, InputComponent, ButtonComponent, cn, FaIconComponent, EllipsisIcon, ChevronRightIcon, MenuComponent, MenuContentComponent, MenuItemComponent, BadgeComponent, DialogComponent, DialogHeaderComponent, DialogTitleComponent, DialogContentComponent, DialogFooterComponent, ListItemComponent, SwitchComponent, SelectOptionDirective, DialogService, TabsComponent, TabsListComponent, TabComponent,
|
|
5
|
+
import { DropdownComponent, DropdownContentComponent, InputComponent, ButtonComponent, cn, FaIconComponent, EllipsisIcon, ChevronRightIcon, MenuComponent, MenuContentComponent, MenuItemComponent, LinkComponent, BadgeComponent, DialogComponent, DialogHeaderComponent, DialogTitleComponent, DialogContentComponent, DialogFooterComponent, ListItemComponent, SquareCheckIcon, SquareMinusIcon, SquareIcon, SwitchComponent, SelectOptionDirective, DialogService, XMarkIcon, InboxIcon, SparklesIcon, FileOutputIcon, TabsComponent, TabsListComponent, TabComponent, FrownIcon, ChevronLeftIcon, ChevronsLeftIcon, ChevronsRightIcon, ArrowUpAzIcon, ArrowDownZaIcon, ArrowUpRightFromSquareIcon, ToggleRightIcon, ToggleLeftIcon, Separator, SheetCloseDirective, ArrowLeftIcon, SheetService, DateRangePickerDirective, DatepickerDirective, InputGroupInput, InputGroupComponent, InputGroupAddonComponent, SearchIcon, FilterIcon, TriangleAlertIcon, FilterXIcon, IconButtonComponent, HighlighterIcon, TagsIcon, SpinnerIcon, MagnifyingGlassIcon, LoadingCircleIcon, CircleCheckIcon, PopoverComponent, BellIcon, TrashIcon, BarsIcon, CardComponent, CardHeaderComponent, CardContentComponent, CardFooterComponent, EyeSlashIcon, EyeIcon, BookmarkIcon, PopoverContentComponent, UserIcon, FolderIcon, VerticalDividerComponent, CommentIcon, ThumbsUpIcon, ThumbsDownIcon, ListFilterIcon, BreakpointObserverService, TrashCanIcon, CircleXIcon, InfoCircleIcon, HorizontalDividerComponent, HistoryIcon, StarIcon, FlagEnglishIcon, FlagFrenchIcon, EditIcon, UndoIcon, SaveIcon, 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 {
|
|
11
|
-
import { HttpClient, HttpParams, httpResource, HttpResponse, HttpHeaders, HttpContextToken } from '@angular/common/http';
|
|
10
|
+
import { EngineType, fetchApp, extraColumns, sysLang, globalConfig, getQueryParamsFromUrl, clearSessionTokens, login, info, warn, error, setGlobalConfig, notify, addConcepts, queryParamsFromUrl, patchUserSettings, deleteUserSettings, fetchUserSettings, buildPathsAndLevels, escapeExpr, isAuthenticated, isExpired, debug, AuditEventType, fetchSuggest, isObject, Audit, getMetadata, bisect, isNotInputEvent, fetchSponsoredLinks, fetchQuery, translateAggregationToDateOptions, aggItemRegex, parseValueAndOperatorFromItem, fetchSuggestField, fetchSimilarDocuments, logout, fetchChangePassword, fetchSendPasswordResetEmail, expiresSoon, suggestionsToTreeAggregationNodes, labels, fetchLabels, guid, getRelativeDate, createUserProfile, deleteUserProfileProperty, patchUserProfile, isJsonable, addAuditAdditionalInfo, getToken, setToken, createHeaders } from '@sinequa/atomic';
|
|
12
11
|
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
13
12
|
import { DatePipe, DATE_PIPE_DEFAULT_TIMEZONE, DATE_PIPE_DEFAULT_OPTIONS, Location, NgTemplateOutlet, NgStyle, NgClass, NgComponentOutlet } from '@angular/common';
|
|
13
|
+
import { HttpClient, HttpParams, httpResource, HttpResponse, HttpHeaders, HttpContextToken } from '@angular/common/http';
|
|
14
14
|
import { Title, DomSanitizer } from '@angular/platform-browser';
|
|
15
15
|
import { cva } from 'class-variance-authority';
|
|
16
16
|
import * as i1 from '@angular/forms';
|
|
@@ -96,46 +96,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
96
96
|
}]
|
|
97
97
|
}] });
|
|
98
98
|
|
|
99
|
-
class AppService {
|
|
100
|
-
http = inject(HttpClient);
|
|
101
|
-
API_URL = `${globalConfig.backendUrl}/api/v1`;
|
|
102
|
-
/**
|
|
103
|
-
* Retrieves the application configuration from the server.
|
|
104
|
-
*
|
|
105
|
-
* @param appName - The name of the application to fetch the configuration for.
|
|
106
|
-
*
|
|
107
|
-
* @returns {Observable<CCApp>} An observable that emits the application configuration.
|
|
108
|
-
*
|
|
109
|
-
* @remarks
|
|
110
|
-
* This method constructs an HTTP GET request to fetch the application configuration
|
|
111
|
-
* using the `app` parameter from the global configuration. If the request fails,
|
|
112
|
-
* it logs the error to the console and returns an empty observable.
|
|
113
|
-
*
|
|
114
|
-
* @example
|
|
115
|
-
* ```typescript
|
|
116
|
-
* appService.getApp().subscribe(appConfig => {
|
|
117
|
-
* console.log(appConfig);
|
|
118
|
-
* });
|
|
119
|
-
* ```
|
|
120
|
-
*/
|
|
121
|
-
getApp(appName) {
|
|
122
|
-
const app = appName || globalConfig.app;
|
|
123
|
-
const params = new HttpParams().set('app', app || '');
|
|
124
|
-
return this.http.get(this.API_URL + '/app', { params }).pipe(catchError(error => {
|
|
125
|
-
console.error('AppService.getApp failure - error: ', error);
|
|
126
|
-
return EMPTY;
|
|
127
|
-
}));
|
|
128
|
-
}
|
|
129
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AppService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
130
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AppService, providedIn: 'root' });
|
|
131
|
-
}
|
|
132
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AppService, decorators: [{
|
|
133
|
-
type: Injectable,
|
|
134
|
-
args: [{
|
|
135
|
-
providedIn: 'root'
|
|
136
|
-
}]
|
|
137
|
-
}] });
|
|
138
|
-
|
|
139
99
|
const AggregationsStore = signalStore(
|
|
140
100
|
// providing store at the root level
|
|
141
101
|
{ providedIn: "root" }, withDevtools("Aggregations"), withAggregationsFeatures());
|
|
@@ -294,26 +254,43 @@ function withAppFeatures() {
|
|
|
294
254
|
*
|
|
295
255
|
* @returns The enhanced application store with additional features and methods.
|
|
296
256
|
*/
|
|
297
|
-
withMethods((store
|
|
257
|
+
withMethods((store) => ({
|
|
298
258
|
/**
|
|
299
|
-
* Initializes the application state by fetching the app data from the
|
|
259
|
+
* Initializes the application state by fetching the app data from the "App" API
|
|
300
260
|
* and updating the store with the retrieved data.
|
|
301
261
|
*
|
|
302
262
|
* @returns A promise that resolves when the app data has been fetched and the store has been updated.
|
|
303
263
|
*/
|
|
304
|
-
initialize() {
|
|
305
|
-
|
|
264
|
+
async initialize() {
|
|
265
|
+
let app;
|
|
266
|
+
try {
|
|
267
|
+
app = await fetchApp();
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
306
270
|
console.error("Error fetching app data:", error);
|
|
307
271
|
throw error;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
272
|
+
}
|
|
273
|
+
patchState(store, app);
|
|
274
|
+
// Build column map for easy access using column name or alias
|
|
275
|
+
const columnMap = {};
|
|
276
|
+
// set the extra columns
|
|
277
|
+
Object.values(extraColumns).forEach((col) => {
|
|
278
|
+
columnMap[col.name.toLocaleLowerCase()] = col;
|
|
279
|
+
// Add aliases to the map
|
|
280
|
+
if (col.aliases) {
|
|
281
|
+
col.aliases.forEach((alias) => {
|
|
282
|
+
columnMap[alias.toLocaleLowerCase()] = col;
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
// Also include columns from the default index "_"
|
|
287
|
+
const schema = app.indexes._?.columns;
|
|
288
|
+
if (schema) {
|
|
289
|
+
Object.keys(schema).forEach((schemaKey) => {
|
|
290
|
+
const col = schema[schemaKey.toLocaleLowerCase()];
|
|
291
|
+
if (!col)
|
|
292
|
+
return;
|
|
293
|
+
columnMap[schemaKey.toLocaleLowerCase()] = col;
|
|
317
294
|
// Add aliases to the map
|
|
318
295
|
if (col.aliases) {
|
|
319
296
|
col.aliases.forEach((alias) => {
|
|
@@ -321,45 +298,29 @@ function withAppFeatures() {
|
|
|
321
298
|
});
|
|
322
299
|
}
|
|
323
300
|
});
|
|
324
|
-
//
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
columnMap[c.name.toLocaleLowerCase()] = col;
|
|
348
|
-
// Add aliases to the map
|
|
349
|
-
if (c.aliases) {
|
|
350
|
-
c.aliases
|
|
351
|
-
.split(/[,;|]/)
|
|
352
|
-
.map((a) => a.trim())
|
|
353
|
-
.forEach((alias) => {
|
|
354
|
-
columnMap[alias.toLocaleLowerCase()] = col;
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
});
|
|
358
|
-
}
|
|
359
|
-
});
|
|
360
|
-
patchState(store, { columnMap });
|
|
361
|
-
}
|
|
362
|
-
})));
|
|
301
|
+
// Include columns from all queries
|
|
302
|
+
Object.keys(app.queries).forEach((queryKey) => {
|
|
303
|
+
const query = app.queries[queryKey];
|
|
304
|
+
if (query.columnsInfo?.columns) {
|
|
305
|
+
Object.values(query.columnsInfo.columns).forEach((c) => {
|
|
306
|
+
const col = schema[c.name.toLocaleLowerCase()];
|
|
307
|
+
if (!col)
|
|
308
|
+
return;
|
|
309
|
+
columnMap[c.name.toLocaleLowerCase()] = col;
|
|
310
|
+
// Add aliases to the map
|
|
311
|
+
if (c.aliases) {
|
|
312
|
+
c.aliases
|
|
313
|
+
.split(/[,;|]/)
|
|
314
|
+
.map((a) => a.trim())
|
|
315
|
+
.forEach((alias) => {
|
|
316
|
+
columnMap[alias.toLocaleLowerCase()] = col;
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
patchState(store, { columnMap });
|
|
323
|
+
}
|
|
363
324
|
},
|
|
364
325
|
/**
|
|
365
326
|
* Initializes the application state with the provided app name.
|
|
@@ -368,8 +329,9 @@ function withAppFeatures() {
|
|
|
368
329
|
*
|
|
369
330
|
* @returns A promise that resolves when the app data has been fetched and the store has been updated.
|
|
370
331
|
*/
|
|
371
|
-
initializeWithAppName(appName) {
|
|
372
|
-
|
|
332
|
+
async initializeWithAppName(appName) {
|
|
333
|
+
const app = await fetchApp(appName);
|
|
334
|
+
patchState(store, app);
|
|
373
335
|
},
|
|
374
336
|
/**
|
|
375
337
|
* Updates the application state with the provided CCApp object.
|
|
@@ -750,7 +712,7 @@ function withAppFeatures() {
|
|
|
750
712
|
}
|
|
751
713
|
|
|
752
714
|
/**
|
|
753
|
-
* Pipe that transforms a collection of strings into a corresponding icon class.
|
|
715
|
+
* Pipe that transforms a collection of strings into a corresponding Font Awesome icon class.
|
|
754
716
|
*
|
|
755
717
|
* This pipe uses the first element of the collection to determine the icon class
|
|
756
718
|
* based on the source name. If the collection is empty or undefined, it returns
|
|
@@ -1558,7 +1520,7 @@ async function signIn() {
|
|
|
1558
1520
|
const { useCredentials, loginPath, useSSO } = globalConfig;
|
|
1559
1521
|
// Always clear authentication tokens first to clear any existing session
|
|
1560
1522
|
clearSessionTokens();
|
|
1561
|
-
// If credentials are used
|
|
1523
|
+
// If credentials are used, redirect to the login page
|
|
1562
1524
|
if (useCredentials) {
|
|
1563
1525
|
router.navigate([loginPath], { queryParams: { returnUrl: lastUrlAfterNavigation } });
|
|
1564
1526
|
return; // prevent further execution
|
|
@@ -1573,9 +1535,11 @@ async function signIn() {
|
|
|
1573
1535
|
// Otherwise, perform a standard login
|
|
1574
1536
|
try {
|
|
1575
1537
|
const response = await login();
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1538
|
+
if (response) {
|
|
1539
|
+
info("Response from login", response);
|
|
1540
|
+
}
|
|
1541
|
+
else {
|
|
1542
|
+
warn("No response from login", response);
|
|
1579
1543
|
}
|
|
1580
1544
|
}
|
|
1581
1545
|
catch (err) {
|
|
@@ -3345,6 +3309,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
3345
3309
|
}]
|
|
3346
3310
|
}] });
|
|
3347
3311
|
|
|
3312
|
+
/**
|
|
3313
|
+
* @deprecated Use `fetchApp()` from `@sinequa/atomic` instead, which accepts an optional `appName` argument.
|
|
3314
|
+
* This service will be removed in a future version.
|
|
3315
|
+
*/
|
|
3316
|
+
class AppService {
|
|
3317
|
+
http = inject(HttpClient);
|
|
3318
|
+
API_URL = `${globalConfig.backendUrl}/api/v1`;
|
|
3319
|
+
/**
|
|
3320
|
+
* Retrieves the application configuration from the server.
|
|
3321
|
+
*
|
|
3322
|
+
* @param appName - The name of the application to fetch the configuration for.
|
|
3323
|
+
*
|
|
3324
|
+
* @returns {Observable<CCApp>} An observable that emits the application configuration.
|
|
3325
|
+
*
|
|
3326
|
+
* @remarks
|
|
3327
|
+
* This method constructs an HTTP GET request to fetch the application configuration
|
|
3328
|
+
* using the `app` parameter from the global configuration. If the request fails,
|
|
3329
|
+
* it logs the error to the console and returns an empty observable.
|
|
3330
|
+
*
|
|
3331
|
+
* @example
|
|
3332
|
+
* ```typescript
|
|
3333
|
+
* appService.getApp().subscribe(appConfig => {
|
|
3334
|
+
* console.log(appConfig);
|
|
3335
|
+
* });
|
|
3336
|
+
* ```
|
|
3337
|
+
*/
|
|
3338
|
+
getApp(appName) {
|
|
3339
|
+
const app = appName || globalConfig.app;
|
|
3340
|
+
const params = new HttpParams().set('app', app || '');
|
|
3341
|
+
return this.http.get(this.API_URL + '/app', { params }).pipe(catchError(error => {
|
|
3342
|
+
console.error('AppService.getApp failure - error: ', error);
|
|
3343
|
+
return EMPTY;
|
|
3344
|
+
}));
|
|
3345
|
+
}
|
|
3346
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AppService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3347
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AppService, providedIn: 'root' });
|
|
3348
|
+
}
|
|
3349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AppService, decorators: [{
|
|
3350
|
+
type: Injectable,
|
|
3351
|
+
args: [{
|
|
3352
|
+
providedIn: 'root'
|
|
3353
|
+
}]
|
|
3354
|
+
}] });
|
|
3355
|
+
|
|
3348
3356
|
/**
|
|
3349
3357
|
* Returns a guard function that checks if the user is authenticated.
|
|
3350
3358
|
* If the user is not authenticated, it navigates to the login page.
|
|
@@ -4922,7 +4930,7 @@ class PagerComponent {
|
|
|
4922
4930
|
</button>
|
|
4923
4931
|
}
|
|
4924
4932
|
</div>
|
|
4925
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
4933
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
4926
4934
|
}
|
|
4927
4935
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: PagerComponent, decorators: [{
|
|
4928
4936
|
type: Component,
|
|
@@ -4983,8 +4991,9 @@ class SourceComponent {
|
|
|
4983
4991
|
iconDetails = computed(() => {
|
|
4984
4992
|
const [collection] = this.collection() || [];
|
|
4985
4993
|
const connector = (this.connector() ?? "").toLocaleLowerCase();
|
|
4986
|
-
if (!collection)
|
|
4987
|
-
return undefined;
|
|
4994
|
+
if (!collection) {
|
|
4995
|
+
return { iconClass: "", iconPath: undefined };
|
|
4996
|
+
}
|
|
4988
4997
|
const src = this.appStore.sources();
|
|
4989
4998
|
const name = collection.split("/")[1].toLocaleLowerCase();
|
|
4990
4999
|
const defaultIconClass = "far fa-file";
|
|
@@ -5007,11 +5016,11 @@ class SourceComponent {
|
|
|
5007
5016
|
return { iconClass: defaultIconClass };
|
|
5008
5017
|
}, ...(ngDevMode ? [{ debugName: "iconDetails" }] : []));
|
|
5009
5018
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SourceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5010
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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()
|
|
5019
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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) {\r\n <img\r\n [src]=\"iconDetails().iconPath\"\r\n [alt]=\"collection()?.[0] || ('sources.sourceIcon' | transloco)\" />\r\n} @else {\r\n <FaIcon\r\n [faClass]=\"iconDetails().iconClass\"\r\n [attr.aria-label]=\"'sources.sourceIcon' | transloco\" />\r\n}\r\n", dependencies: [{ kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
5011
5020
|
}
|
|
5012
5021
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SourceComponent, decorators: [{
|
|
5013
5022
|
type: Component,
|
|
5014
|
-
args: [{ selector: "source, Source", standalone: true, imports: [TranslocoPipe, FaIconComponent], providers: [provideTranslocoScope("sources")], template: "@if (iconDetails()
|
|
5023
|
+
args: [{ selector: "source, Source", standalone: true, imports: [TranslocoPipe, FaIconComponent], providers: [provideTranslocoScope("sources")], template: "@if (iconDetails().iconPath) {\r\n <img\r\n [src]=\"iconDetails().iconPath\"\r\n [alt]=\"collection()?.[0] || ('sources.sourceIcon' | transloco)\" />\r\n} @else {\r\n <FaIcon\r\n [faClass]=\"iconDetails().iconClass\"\r\n [attr.aria-label]=\"'sources.sourceIcon' | transloco\" />\r\n}\r\n" }]
|
|
5015
5024
|
}], propDecorators: { collection: [{ type: i0.Input, args: [{ isSignal: true, alias: "collection", required: false }] }], connector: [{ type: i0.Input, args: [{ isSignal: true, alias: "connector", required: false }] }] } });
|
|
5016
5025
|
|
|
5017
5026
|
class DocumentLocatorComponent {
|
|
@@ -5098,28 +5107,26 @@ class DocumentLocatorComponent {
|
|
|
5098
5107
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DocumentLocatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5099
5108
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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: `
|
|
5100
5109
|
<!-- Renders all segment hidden to user to compute width -->
|
|
5101
|
-
<div #shadowRender class="pointer-events-none invisible absolute left-0 top-0 -z-10 flex gap-
|
|
5110
|
+
<div #shadowRender class="pointer-events-none invisible absolute left-0 top-0 -z-10 flex gap-1">
|
|
5102
5111
|
@for (segment of locationSegments(); track $index) {
|
|
5103
5112
|
<span class="whitespace-nowrap">{{ segment }}</span>
|
|
5104
5113
|
|
|
5105
5114
|
@if (!$last) {
|
|
5106
|
-
<
|
|
5115
|
+
<chevron-right-icon />
|
|
5107
5116
|
}
|
|
5108
5117
|
}
|
|
5109
5118
|
</div>
|
|
5110
5119
|
|
|
5111
5120
|
<Source class="flex" [collection]="article().collection" />
|
|
5112
5121
|
|
|
5113
|
-
<
|
|
5122
|
+
<chevron-right-icon />
|
|
5114
5123
|
|
|
5115
|
-
<div #documentLocator class="flex grow items-center gap-
|
|
5124
|
+
<div #documentLocator class="flex grow items-center gap-1">
|
|
5116
5125
|
@for (segment of visibleSegments(); track $index) {
|
|
5117
|
-
<
|
|
5118
|
-
{{ segment }}
|
|
5119
|
-
</button>
|
|
5126
|
+
<a link class="cursor-pointer" (click)="navigateToSegment($index)">{{segment }}</a>
|
|
5120
5127
|
|
|
5121
5128
|
@if (!$last) {
|
|
5122
|
-
<
|
|
5129
|
+
<chevron-right-icon />
|
|
5123
5130
|
}
|
|
5124
5131
|
}
|
|
5125
5132
|
|
|
@@ -5129,21 +5136,22 @@ class DocumentLocatorComponent {
|
|
|
5129
5136
|
|
|
5130
5137
|
@if (invisibleSegments().length > 0) {
|
|
5131
5138
|
<menu>
|
|
5132
|
-
<button class="h-0 w-full p-2" variant="ghost"
|
|
5139
|
+
<button class="h-0 w-full p-2" variant="ghost" [iconOnly]="true" aria-label="More segments">
|
|
5133
5140
|
<EllipsisIcon class="text-foreground" />
|
|
5134
5141
|
</button>
|
|
5135
5142
|
|
|
5136
5143
|
<MenuContent position="bottom">
|
|
5137
5144
|
@for (segment of invisibleSegments(); track $index) {
|
|
5138
5145
|
<MenuItem (click)="navigateToSegment($index, true)">
|
|
5139
|
-
<
|
|
5146
|
+
<chevron-right-icon />
|
|
5147
|
+
<span class="pe-2">{{ segment }}</span>
|
|
5140
5148
|
</MenuItem>
|
|
5141
5149
|
}
|
|
5142
5150
|
</MenuContent>
|
|
5143
5151
|
</menu>
|
|
5144
5152
|
}
|
|
5145
5153
|
</div>
|
|
5146
|
-
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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"] }] });
|
|
5154
|
+
`, 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, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: SourceComponent, selector: "source, Source", inputs: ["collection", "connector"] }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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: "directive", type: LinkComponent, selector: "a[link], Link", inputs: ["class", "variant", "size", "weight", "underline", "disabled", "withIcon", "block"] }] });
|
|
5147
5155
|
}
|
|
5148
5156
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DocumentLocatorComponent, decorators: [{
|
|
5149
5157
|
type: Component,
|
|
@@ -5157,32 +5165,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
5157
5165
|
ButtonComponent,
|
|
5158
5166
|
MenuComponent,
|
|
5159
5167
|
MenuContentComponent,
|
|
5160
|
-
MenuItemComponent
|
|
5168
|
+
MenuItemComponent,
|
|
5169
|
+
LinkComponent
|
|
5161
5170
|
],
|
|
5162
5171
|
template: `
|
|
5163
5172
|
<!-- Renders all segment hidden to user to compute width -->
|
|
5164
|
-
<div #shadowRender class="pointer-events-none invisible absolute left-0 top-0 -z-10 flex gap-
|
|
5173
|
+
<div #shadowRender class="pointer-events-none invisible absolute left-0 top-0 -z-10 flex gap-1">
|
|
5165
5174
|
@for (segment of locationSegments(); track $index) {
|
|
5166
5175
|
<span class="whitespace-nowrap">{{ segment }}</span>
|
|
5167
5176
|
|
|
5168
5177
|
@if (!$last) {
|
|
5169
|
-
<
|
|
5178
|
+
<chevron-right-icon />
|
|
5170
5179
|
}
|
|
5171
5180
|
}
|
|
5172
5181
|
</div>
|
|
5173
5182
|
|
|
5174
5183
|
<Source class="flex" [collection]="article().collection" />
|
|
5175
5184
|
|
|
5176
|
-
<
|
|
5185
|
+
<chevron-right-icon />
|
|
5177
5186
|
|
|
5178
|
-
<div #documentLocator class="flex grow items-center gap-
|
|
5187
|
+
<div #documentLocator class="flex grow items-center gap-1">
|
|
5179
5188
|
@for (segment of visibleSegments(); track $index) {
|
|
5180
|
-
<
|
|
5181
|
-
{{ segment }}
|
|
5182
|
-
</button>
|
|
5189
|
+
<a link class="cursor-pointer" (click)="navigateToSegment($index)">{{segment }}</a>
|
|
5183
5190
|
|
|
5184
5191
|
@if (!$last) {
|
|
5185
|
-
<
|
|
5192
|
+
<chevron-right-icon />
|
|
5186
5193
|
}
|
|
5187
5194
|
}
|
|
5188
5195
|
|
|
@@ -5192,14 +5199,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
5192
5199
|
|
|
5193
5200
|
@if (invisibleSegments().length > 0) {
|
|
5194
5201
|
<menu>
|
|
5195
|
-
<button class="h-0 w-full p-2" variant="ghost"
|
|
5202
|
+
<button class="h-0 w-full p-2" variant="ghost" [iconOnly]="true" aria-label="More segments">
|
|
5196
5203
|
<EllipsisIcon class="text-foreground" />
|
|
5197
5204
|
</button>
|
|
5198
5205
|
|
|
5199
5206
|
<MenuContent position="bottom">
|
|
5200
5207
|
@for (segment of invisibleSegments(); track $index) {
|
|
5201
5208
|
<MenuItem (click)="navigateToSegment($index, true)">
|
|
5202
|
-
<
|
|
5209
|
+
<chevron-right-icon />
|
|
5210
|
+
<span class="pe-2">{{ segment }}</span>
|
|
5203
5211
|
</MenuItem>
|
|
5204
5212
|
}
|
|
5205
5213
|
</MenuContent>
|
|
@@ -5382,7 +5390,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
5382
5390
|
class MetadataComponent {
|
|
5383
5391
|
click = output();
|
|
5384
5392
|
class = input(...(ngDevMode ? [undefined, { debugName: "class" }] : []));
|
|
5385
|
-
variant = input("
|
|
5393
|
+
variant = input("primary", ...(ngDevMode ? [{ debugName: "variant" }] : []));
|
|
5386
5394
|
metadata = input.required(...(ngDevMode ? [{ debugName: "metadata" }] : []));
|
|
5387
5395
|
article = input.required(...(ngDevMode ? [{ debugName: "article" }] : []));
|
|
5388
5396
|
limit = input(undefined, ...(ngDevMode ? [{ debugName: "limit", transform: (value) => (value ? Math.max(0, Number(value)) : undefined) }] : [{
|
|
@@ -5404,7 +5412,7 @@ class MetadataComponent {
|
|
|
5404
5412
|
</badge>
|
|
5405
5413
|
}
|
|
5406
5414
|
}
|
|
5407
|
-
`, isInline: true, styles: [":host{display:contents}:host,:host:hover{background-color:transparent}\n"], dependencies: [{ kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "size"] }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
|
|
5415
|
+
`, isInline: true, styles: [":host{display:contents}:host,:host:hover{background-color:transparent}\n"], dependencies: [{ kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "scheme", "size"] }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
|
|
5408
5416
|
}
|
|
5409
5417
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: MetadataComponent, decorators: [{
|
|
5410
5418
|
type: Component,
|
|
@@ -5562,11 +5570,11 @@ class CollectionsDialog {
|
|
|
5562
5570
|
@for (collection of collections(); track $index) {
|
|
5563
5571
|
<li role="listitem" (click)="addToCollection(collection, $index)">
|
|
5564
5572
|
@if (collectionsMap()[collection.name] === 'all') {
|
|
5565
|
-
<
|
|
5573
|
+
<square-check-icon />
|
|
5566
5574
|
} @else if (collectionsMap()[collection.name] === 'some') {
|
|
5567
|
-
<
|
|
5575
|
+
<square-minus-icon />
|
|
5568
5576
|
} @else {
|
|
5569
|
-
<
|
|
5577
|
+
<square-icon />
|
|
5570
5578
|
}
|
|
5571
5579
|
{{ collection.name }}
|
|
5572
5580
|
</li>
|
|
@@ -5615,7 +5623,7 @@ class CollectionsDialog {
|
|
|
5615
5623
|
</DialogFooter>
|
|
5616
5624
|
</DialogContent>
|
|
5617
5625
|
</dialog>
|
|
5618
|
-
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
5626
|
+
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: SquareCheckIcon, selector: "square-check-icon, SquareCheckIcon", inputs: ["class"] }, { kind: "component", type: SquareMinusIcon, selector: "square-minus-icon, SquareMinusIcon", inputs: ["class"] }, { kind: "component", type: SquareIcon, selector: "square-icon, SquareIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
5619
5627
|
}
|
|
5620
5628
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: CollectionsDialog, decorators: [{
|
|
5621
5629
|
type: Component,
|
|
@@ -5632,7 +5640,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
5632
5640
|
DialogContentComponent,
|
|
5633
5641
|
DialogFooterComponent,
|
|
5634
5642
|
ListItemComponent,
|
|
5635
|
-
InputComponent
|
|
5643
|
+
InputComponent,
|
|
5644
|
+
SquareCheckIcon,
|
|
5645
|
+
SquareMinusIcon,
|
|
5646
|
+
SquareIcon
|
|
5636
5647
|
],
|
|
5637
5648
|
providers: [provideTranslocoScope("collections")],
|
|
5638
5649
|
template: `
|
|
@@ -5646,11 +5657,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
5646
5657
|
@for (collection of collections(); track $index) {
|
|
5647
5658
|
<li role="listitem" (click)="addToCollection(collection, $index)">
|
|
5648
5659
|
@if (collectionsMap()[collection.name] === 'all') {
|
|
5649
|
-
<
|
|
5660
|
+
<square-check-icon />
|
|
5650
5661
|
} @else if (collectionsMap()[collection.name] === 'some') {
|
|
5651
|
-
<
|
|
5662
|
+
<square-minus-icon />
|
|
5652
5663
|
} @else {
|
|
5653
|
-
<
|
|
5664
|
+
<square-icon />
|
|
5654
5665
|
}
|
|
5655
5666
|
{{ collection.name }}
|
|
5656
5667
|
</li>
|
|
@@ -5941,7 +5952,7 @@ class ExportDialog {
|
|
|
5941
5952
|
</DialogFooter>
|
|
5942
5953
|
</DialogContent>
|
|
5943
5954
|
</dialog>
|
|
5944
|
-
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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" }] });
|
|
5955
|
+
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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" }] });
|
|
5945
5956
|
}
|
|
5946
5957
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ExportDialog, decorators: [{
|
|
5947
5958
|
type: Component,
|
|
@@ -6085,70 +6096,70 @@ class MultiSelectionToolbarComponent {
|
|
|
6085
6096
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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-24": "count() > 0" }, classAttribute: "fixed -bottom-20 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: `
|
|
6086
6097
|
<menu id="multi-select-toolbar" [class]="cn(variants(), class())">
|
|
6087
6098
|
<li class="ps-0!">
|
|
6088
|
-
|
|
6089
|
-
|
|
6090
|
-
<
|
|
6099
|
+
<button class="cursor-pointer inline-flex items-center gap-1" (click)="clearSelection()">
|
|
6100
|
+
{{ 'multiSelectionToolbar.itemsSelected' | transloco: { count: count() } }}
|
|
6101
|
+
<x-mark-icon />
|
|
6091
6102
|
</button>
|
|
6092
6103
|
</li>
|
|
6093
6104
|
|
|
6094
6105
|
<li>
|
|
6095
|
-
<button class="cursor-pointer" title="menu" [attr.aria-label]="'menu'" (click)="openCollectionDialog()">
|
|
6096
|
-
<
|
|
6106
|
+
<button class="cursor-pointer inline-flex items-center gap-1" title="menu" [attr.aria-label]="'menu'" (click)="openCollectionDialog()">
|
|
6107
|
+
<inbox-icon />
|
|
6097
6108
|
{{ 'collections.label' | transloco }}
|
|
6098
6109
|
</button>
|
|
6099
6110
|
</li>
|
|
6100
6111
|
|
|
6101
6112
|
<li>
|
|
6102
|
-
<button class="cursor-pointer" (click)="openExportDialog()">
|
|
6103
|
-
<
|
|
6113
|
+
<button class="cursor-pointer inline-flex items-center gap-1" (click)="openExportDialog()">
|
|
6114
|
+
<file-output-icon />
|
|
6104
6115
|
{{ 'export.title' | transloco }}
|
|
6105
6116
|
</button>
|
|
6106
6117
|
</li>
|
|
6107
6118
|
|
|
6108
6119
|
@if (enabledUserInput()) {
|
|
6109
6120
|
<li class="pe-0!">
|
|
6110
|
-
<button class="cursor-pointer" (click)="attachToAssistant()">
|
|
6111
|
-
<
|
|
6121
|
+
<button class="cursor-pointer inline-flex items-center gap-1" (click)="attachToAssistant()">
|
|
6122
|
+
<sparkles-icon />
|
|
6112
6123
|
{{ 'article.addToAIOverview' | transloco }}
|
|
6113
6124
|
</button>
|
|
6114
6125
|
</li>
|
|
6115
6126
|
}
|
|
6116
6127
|
</menu>
|
|
6117
|
-
`, isInline: true, dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
6128
|
+
`, isInline: true, dependencies: [{ kind: "component", type: XMarkIcon, selector: "XMarkIcon, xmark-icon, x-mark-icon", inputs: ["class"] }, { kind: "component", type: InboxIcon, selector: "inbox-icon, InboxIcon", inputs: ["class"] }, { kind: "component", type: SparklesIcon, selector: "sparkles-icon, SparklesIcon", inputs: ["class"] }, { kind: "component", type: FileOutputIcon, selector: "file-output-icon, FileOutputIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
6118
6129
|
}
|
|
6119
6130
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: MultiSelectionToolbarComponent, decorators: [{
|
|
6120
6131
|
type: Component,
|
|
6121
6132
|
args: [{
|
|
6122
6133
|
selector: "MultiSelectionToolbar, multi-selection-toolbar",
|
|
6123
|
-
imports: [TranslocoPipe],
|
|
6134
|
+
imports: [TranslocoPipe, XMarkIcon, InboxIcon, SparklesIcon, FileOutputIcon],
|
|
6124
6135
|
providers: [provideTranslocoScope("multi-selection-toolbar", "article", "collections", "export")],
|
|
6125
6136
|
template: `
|
|
6126
6137
|
<menu id="multi-select-toolbar" [class]="cn(variants(), class())">
|
|
6127
6138
|
<li class="ps-0!">
|
|
6128
|
-
|
|
6129
|
-
|
|
6130
|
-
<
|
|
6139
|
+
<button class="cursor-pointer inline-flex items-center gap-1" (click)="clearSelection()">
|
|
6140
|
+
{{ 'multiSelectionToolbar.itemsSelected' | transloco: { count: count() } }}
|
|
6141
|
+
<x-mark-icon />
|
|
6131
6142
|
</button>
|
|
6132
6143
|
</li>
|
|
6133
6144
|
|
|
6134
6145
|
<li>
|
|
6135
|
-
<button class="cursor-pointer" title="menu" [attr.aria-label]="'menu'" (click)="openCollectionDialog()">
|
|
6136
|
-
<
|
|
6146
|
+
<button class="cursor-pointer inline-flex items-center gap-1" title="menu" [attr.aria-label]="'menu'" (click)="openCollectionDialog()">
|
|
6147
|
+
<inbox-icon />
|
|
6137
6148
|
{{ 'collections.label' | transloco }}
|
|
6138
6149
|
</button>
|
|
6139
6150
|
</li>
|
|
6140
6151
|
|
|
6141
6152
|
<li>
|
|
6142
|
-
<button class="cursor-pointer" (click)="openExportDialog()">
|
|
6143
|
-
<
|
|
6153
|
+
<button class="cursor-pointer inline-flex items-center gap-1" (click)="openExportDialog()">
|
|
6154
|
+
<file-output-icon />
|
|
6144
6155
|
{{ 'export.title' | transloco }}
|
|
6145
6156
|
</button>
|
|
6146
6157
|
</li>
|
|
6147
6158
|
|
|
6148
6159
|
@if (enabledUserInput()) {
|
|
6149
6160
|
<li class="pe-0!">
|
|
6150
|
-
<button class="cursor-pointer" (click)="attachToAssistant()">
|
|
6151
|
-
<
|
|
6161
|
+
<button class="cursor-pointer inline-flex items-center gap-1" (click)="attachToAssistant()">
|
|
6162
|
+
<sparkles-icon />
|
|
6152
6163
|
{{ 'article.addToAIOverview' | transloco }}
|
|
6153
6164
|
</button>
|
|
6154
6165
|
</li>
|
|
@@ -7200,7 +7211,7 @@ class NavbarTabsComponent {
|
|
|
7200
7211
|
<span [class]="noTruncate() ? '' : 'truncate'">{{ tab.display | syslang | transloco }}</span>
|
|
7201
7212
|
<!-- Show count badge only if count is > 0 -->
|
|
7202
7213
|
@if((tab.count ?? 0) > 0) {
|
|
7203
|
-
<Badge
|
|
7214
|
+
<Badge size="sm">{{ tab.count }}</Badge>
|
|
7204
7215
|
}
|
|
7205
7216
|
</div>
|
|
7206
7217
|
</Tab>
|
|
@@ -7215,22 +7226,21 @@ class NavbarTabsComponent {
|
|
|
7215
7226
|
[class.invisible]="moreTabs().length === 0"
|
|
7216
7227
|
[class.pointer-events-none]="moreTabs().length === 0"
|
|
7217
7228
|
>
|
|
7218
|
-
<button variant="ghost"
|
|
7229
|
+
<button variant="ghost" [iconOnly]="true" class="mb-1 truncate me-1" aria-label="more tabs">
|
|
7219
7230
|
<EllipsisIcon orientation="vertical"></EllipsisIcon>
|
|
7220
7231
|
</button>
|
|
7221
7232
|
|
|
7222
7233
|
<MenuContent class="z-500 w-fit" position="bottom-end">
|
|
7223
7234
|
@for (tab of moreTabs(); track $index) {
|
|
7224
7235
|
<MenuItem>
|
|
7225
|
-
<a
|
|
7226
|
-
class="inline-block whitespace-nowrap first-letter:capitalize"
|
|
7236
|
+
<a class="inline-flex items-center gap-1 whitespace-nowrap first-letter:capitalize"
|
|
7227
7237
|
[routerLink]="[tab.routerLink]"
|
|
7228
7238
|
[queryParams]="{ n: tab.queryName, q: searchText(), t: tab.wsQueryTab, f: undefined, sort: undefined, id: undefined, page: undefined }"
|
|
7229
7239
|
[attr.aria-selected]="this.currentPath() === tab.path"
|
|
7230
7240
|
[attr.aria-label]="tab.display | syslang | transloco"
|
|
7231
7241
|
(click)="changeTab()">
|
|
7232
7242
|
@if (tab.icon) {
|
|
7233
|
-
<
|
|
7243
|
+
<FaIcon [faClass]="tab.icon"/>
|
|
7234
7244
|
}
|
|
7235
7245
|
{{ tab.display | syslang | transloco }}
|
|
7236
7246
|
</a>
|
|
@@ -7240,7 +7250,7 @@ class NavbarTabsComponent {
|
|
|
7240
7250
|
</Menu>
|
|
7241
7251
|
</div>
|
|
7242
7252
|
}
|
|
7243
|
-
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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: "directive", type: TabComponent, selector: "tab, Tab", inputs: ["class", "variant", "size", "noTruncate", "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", "size"] }, { kind: "component", type: EllipsisIcon, selector: "ellipsis-icon, EllipsisIcon, ellipsisicon", inputs: ["class", "orientation"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
|
|
7253
|
+
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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: "directive", type: TabComponent, selector: "tab, Tab", inputs: ["class", "variant", "size", "noTruncate", "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", "scheme", "size"] }, { kind: "component", type: EllipsisIcon, selector: "ellipsis-icon, EllipsisIcon, ellipsisicon", inputs: ["class", "orientation"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
|
|
7244
7254
|
}
|
|
7245
7255
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: NavbarTabsComponent, decorators: [{
|
|
7246
7256
|
type: Component,
|
|
@@ -7294,7 +7304,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
7294
7304
|
<span [class]="noTruncate() ? '' : 'truncate'">{{ tab.display | syslang | transloco }}</span>
|
|
7295
7305
|
<!-- Show count badge only if count is > 0 -->
|
|
7296
7306
|
@if((tab.count ?? 0) > 0) {
|
|
7297
|
-
<Badge
|
|
7307
|
+
<Badge size="sm">{{ tab.count }}</Badge>
|
|
7298
7308
|
}
|
|
7299
7309
|
</div>
|
|
7300
7310
|
</Tab>
|
|
@@ -7309,22 +7319,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
7309
7319
|
[class.invisible]="moreTabs().length === 0"
|
|
7310
7320
|
[class.pointer-events-none]="moreTabs().length === 0"
|
|
7311
7321
|
>
|
|
7312
|
-
<button variant="ghost"
|
|
7322
|
+
<button variant="ghost" [iconOnly]="true" class="mb-1 truncate me-1" aria-label="more tabs">
|
|
7313
7323
|
<EllipsisIcon orientation="vertical"></EllipsisIcon>
|
|
7314
7324
|
</button>
|
|
7315
7325
|
|
|
7316
7326
|
<MenuContent class="z-500 w-fit" position="bottom-end">
|
|
7317
7327
|
@for (tab of moreTabs(); track $index) {
|
|
7318
7328
|
<MenuItem>
|
|
7319
|
-
<a
|
|
7320
|
-
class="inline-block whitespace-nowrap first-letter:capitalize"
|
|
7329
|
+
<a class="inline-flex items-center gap-1 whitespace-nowrap first-letter:capitalize"
|
|
7321
7330
|
[routerLink]="[tab.routerLink]"
|
|
7322
7331
|
[queryParams]="{ n: tab.queryName, q: searchText(), t: tab.wsQueryTab, f: undefined, sort: undefined, id: undefined, page: undefined }"
|
|
7323
7332
|
[attr.aria-selected]="this.currentPath() === tab.path"
|
|
7324
7333
|
[attr.aria-label]="tab.display | syslang | transloco"
|
|
7325
7334
|
(click)="changeTab()">
|
|
7326
7335
|
@if (tab.icon) {
|
|
7327
|
-
<
|
|
7336
|
+
<FaIcon [faClass]="tab.icon"/>
|
|
7328
7337
|
}
|
|
7329
7338
|
{{ tab.display | syslang | transloco }}
|
|
7330
7339
|
</a>
|
|
@@ -7345,7 +7354,7 @@ class NoResultComponent {
|
|
|
7345
7354
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: NoResultComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7346
7355
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: NoResultComponent, isStandalone: true, selector: "NoResult", host: { classAttribute: "p-4 flex flex-col gap-2 rounded-md" }, providers: [provideTranslocoScope("no-result")], ngImport: i0, template: `
|
|
7347
7356
|
<header class="flex items-center gap-2 text-xl font-semibold">
|
|
7348
|
-
<
|
|
7357
|
+
<frown-icon class="text-3xl" />
|
|
7349
7358
|
<p>{{ 'noResult.noResult' | transloco }}</p>
|
|
7350
7359
|
</header>
|
|
7351
7360
|
|
|
@@ -7354,18 +7363,18 @@ class NoResultComponent {
|
|
|
7354
7363
|
<hr />
|
|
7355
7364
|
|
|
7356
7365
|
<p>{{ 'noResult.noResultAssistance' | transloco }}</p>
|
|
7357
|
-
`, isInline: true, dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
7366
|
+
`, isInline: true, dependencies: [{ kind: "component", type: FrownIcon, selector: "frown-icon, FrownIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
7358
7367
|
}
|
|
7359
7368
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: NoResultComponent, decorators: [{
|
|
7360
7369
|
type: Component,
|
|
7361
7370
|
args: [{
|
|
7362
7371
|
selector: "NoResult",
|
|
7363
7372
|
standalone: true,
|
|
7364
|
-
imports: [TranslocoPipe],
|
|
7373
|
+
imports: [TranslocoPipe, FrownIcon],
|
|
7365
7374
|
providers: [provideTranslocoScope("no-result")],
|
|
7366
7375
|
template: `
|
|
7367
7376
|
<header class="flex items-center gap-2 text-xl font-semibold">
|
|
7368
|
-
<
|
|
7377
|
+
<frown-icon class="text-3xl" />
|
|
7369
7378
|
<p>{{ 'noResult.noResult' | transloco }}</p>
|
|
7370
7379
|
</header>
|
|
7371
7380
|
|
|
@@ -7397,7 +7406,7 @@ class PreviewNavigator {
|
|
|
7397
7406
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: PreviewNavigator, isStandalone: true, selector: "preview-navigator", host: { properties: { "class.invisible": "!total() || total() <= 1" } }, ngImport: i0, template: `
|
|
7398
7407
|
<button
|
|
7399
7408
|
variant="ghost"
|
|
7400
|
-
|
|
7409
|
+
[iconOnly]="true"
|
|
7401
7410
|
class="dark:text-white dark:hover:bg-background/10"
|
|
7402
7411
|
aria-label="Page précédente"
|
|
7403
7412
|
(click)="preview.firstPage()"
|
|
@@ -7406,7 +7415,7 @@ class PreviewNavigator {
|
|
|
7406
7415
|
</button>
|
|
7407
7416
|
<button
|
|
7408
7417
|
variant="ghost"
|
|
7409
|
-
|
|
7418
|
+
[iconOnly]="true"
|
|
7410
7419
|
class="dark:text-white dark:hover:bg-background/10"
|
|
7411
7420
|
aria-label="Page précédente"
|
|
7412
7421
|
(click)="preview.prevPage()"
|
|
@@ -7433,7 +7442,7 @@ class PreviewNavigator {
|
|
|
7433
7442
|
</div>
|
|
7434
7443
|
<button
|
|
7435
7444
|
variant="ghost"
|
|
7436
|
-
|
|
7445
|
+
[iconOnly]="true"
|
|
7437
7446
|
class="dark:text-white dark:hover:bg-background/10"
|
|
7438
7447
|
aria-label="Page suivante"
|
|
7439
7448
|
(click)="preview.nextPage()"
|
|
@@ -7442,14 +7451,14 @@ class PreviewNavigator {
|
|
|
7442
7451
|
</button>
|
|
7443
7452
|
<button
|
|
7444
7453
|
variant="ghost"
|
|
7445
|
-
|
|
7454
|
+
[iconOnly]="true"
|
|
7446
7455
|
class="dark:text-white dark:hover:bg-background/10"
|
|
7447
7456
|
aria-label="Page suivante"
|
|
7448
7457
|
(click)="preview.lastPage()"
|
|
7449
7458
|
[disabled]="isLast()">
|
|
7450
7459
|
<chevrons-right />
|
|
7451
7460
|
</button>
|
|
7452
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type:
|
|
7461
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: ChevronLeftIcon, selector: "chevron-left, ChevronLeft, chevronleft, chevron-left-icon, ChevronLeftIcon, chevronlefticon", inputs: ["class"] }, { kind: "component", type: ChevronsLeftIcon, selector: "chevrons-left, ChevronsLeft, chevronsleft, chevrons-left-icon, ChevronsLeftIcon, chevronslefticon", inputs: ["class"] }, { kind: "component", type: ChevronsRightIcon, selector: "chevrons-right, ChevronsRight, chevronsright, chevrons-right-icon, ChevronsRightIcon, chevronsrighticon", inputs: ["class"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon, chevron-right-icon, chevronrighticon", inputs: ["class"] }] });
|
|
7453
7462
|
}
|
|
7454
7463
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: PreviewNavigator, decorators: [{
|
|
7455
7464
|
type: Component,
|
|
@@ -7458,15 +7467,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
7458
7467
|
imports: [
|
|
7459
7468
|
ButtonComponent,
|
|
7460
7469
|
InputComponent,
|
|
7461
|
-
|
|
7462
|
-
|
|
7463
|
-
|
|
7470
|
+
ChevronLeftIcon,
|
|
7471
|
+
ChevronsLeftIcon,
|
|
7472
|
+
ChevronsRightIcon,
|
|
7464
7473
|
ChevronRightIcon
|
|
7465
7474
|
],
|
|
7466
7475
|
template: `
|
|
7467
7476
|
<button
|
|
7468
7477
|
variant="ghost"
|
|
7469
|
-
|
|
7478
|
+
[iconOnly]="true"
|
|
7470
7479
|
class="dark:text-white dark:hover:bg-background/10"
|
|
7471
7480
|
aria-label="Page précédente"
|
|
7472
7481
|
(click)="preview.firstPage()"
|
|
@@ -7475,7 +7484,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
7475
7484
|
</button>
|
|
7476
7485
|
<button
|
|
7477
7486
|
variant="ghost"
|
|
7478
|
-
|
|
7487
|
+
[iconOnly]="true"
|
|
7479
7488
|
class="dark:text-white dark:hover:bg-background/10"
|
|
7480
7489
|
aria-label="Page précédente"
|
|
7481
7490
|
(click)="preview.prevPage()"
|
|
@@ -7502,7 +7511,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
7502
7511
|
</div>
|
|
7503
7512
|
<button
|
|
7504
7513
|
variant="ghost"
|
|
7505
|
-
|
|
7514
|
+
[iconOnly]="true"
|
|
7506
7515
|
class="dark:text-white dark:hover:bg-background/10"
|
|
7507
7516
|
aria-label="Page suivante"
|
|
7508
7517
|
(click)="preview.nextPage()"
|
|
@@ -7511,7 +7520,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
7511
7520
|
</button>
|
|
7512
7521
|
<button
|
|
7513
7522
|
variant="ghost"
|
|
7514
|
-
|
|
7523
|
+
[iconOnly]="true"
|
|
7515
7524
|
class="dark:text-white dark:hover:bg-background/10"
|
|
7516
7525
|
aria-label="Page suivante"
|
|
7517
7526
|
(click)="preview.lastPage()"
|
|
@@ -7569,11 +7578,11 @@ class SortSelectorComponent {
|
|
|
7569
7578
|
}
|
|
7570
7579
|
}
|
|
7571
7580
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SortSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7572
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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
|
|
7581
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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>\r\n <button\r\n tabindex=\"0\"\r\n variant=\"ghost\"\r\n [attr.title]=\"'sortSelector.selectSort' | transloco\">\r\n @let isSortDescending = sort()?.$isDesc ?? false;\r\n @if (isSortDescending) {\r\n <arrow-down-za-icon class=\"me-1\" />\r\n } @else {\r\n <arrow-up-az-icon class=\"me-1\" />\r\n }\r\n <span class=\"hidden min-w-10 truncate sm:inline\">{{\r\n sort()?.display | transloco\r\n }}</span>\r\n </button>\r\n\r\n <MenuContent [position]=\"position()\" class=\"min-w-max\">\r\n @if (sortOptions().length > 0) {\r\n @for (option of sortOptions(); track $index) {\r\n <menu-item\r\n (click)=\"onSortOptionClicked(option)\"\r\n class=\"justify-between\">\r\n <span>{{ option.display | transloco }}</span>\r\n @let isSortDescending = option.$isDesc ?? false;\r\n @if (isSortDescending) {\r\n <arrow-down-za-icon class=\"me-1\" />\r\n } @else {\r\n <arrow-up-az-icon class=\"me-1\" />\r\n }\r\n </menu-item>\r\n }\r\n }\r\n </MenuContent>\r\n</menu>\r\n", dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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: ArrowUpAzIcon, selector: "arrow-up-az-icon, ArrowUpAzIcon", inputs: ["class"] }, { kind: "component", type: ArrowDownZaIcon, selector: "arrow-down-za-icon, ArrowDownZaIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
7573
7582
|
}
|
|
7574
7583
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SortSelectorComponent, decorators: [{
|
|
7575
7584
|
type: Component,
|
|
7576
|
-
args: [{ selector: 'sort-selector, sortselector, SortSelector', standalone: true, imports: [TranslocoPipe, ButtonComponent, MenuComponent, MenuContentComponent, MenuItemComponent], providers: [provideTranslocoScope('sort-selector')], template: "<menu>\n <button
|
|
7585
|
+
args: [{ selector: 'sort-selector, sortselector, SortSelector', standalone: true, imports: [TranslocoPipe, ButtonComponent, MenuComponent, MenuContentComponent, MenuItemComponent, ArrowUpAzIcon, ArrowDownZaIcon], providers: [provideTranslocoScope('sort-selector')], template: "<menu>\r\n <button\r\n tabindex=\"0\"\r\n variant=\"ghost\"\r\n [attr.title]=\"'sortSelector.selectSort' | transloco\">\r\n @let isSortDescending = sort()?.$isDesc ?? false;\r\n @if (isSortDescending) {\r\n <arrow-down-za-icon class=\"me-1\" />\r\n } @else {\r\n <arrow-up-az-icon class=\"me-1\" />\r\n }\r\n <span class=\"hidden min-w-10 truncate sm:inline\">{{\r\n sort()?.display | transloco\r\n }}</span>\r\n </button>\r\n\r\n <MenuContent [position]=\"position()\" class=\"min-w-max\">\r\n @if (sortOptions().length > 0) {\r\n @for (option of sortOptions(); track $index) {\r\n <menu-item\r\n (click)=\"onSortOptionClicked(option)\"\r\n class=\"justify-between\">\r\n <span>{{ option.display | transloco }}</span>\r\n @let isSortDescending = option.$isDesc ?? false;\r\n @if (isSortDescending) {\r\n <arrow-down-za-icon class=\"me-1\" />\r\n } @else {\r\n <arrow-up-az-icon class=\"me-1\" />\r\n }\r\n </menu-item>\r\n }\r\n }\r\n </MenuContent>\r\n</menu>\r\n" }]
|
|
7577
7586
|
}], 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"] }] } });
|
|
7578
7587
|
|
|
7579
7588
|
class SponsoredResultsComponent {
|
|
@@ -7616,7 +7625,7 @@ class SponsoredResultsComponent {
|
|
|
7616
7625
|
@for (link of sponsoredResults(); track $index) {
|
|
7617
7626
|
<li role="listitem" class="text-primary flex items-center gap-2 rounded px-3 py-2 font-bold">
|
|
7618
7627
|
<a href="{{ link.url }}" target="_blank" rel="noopener" title="{{ link.tooltip }}" class="result-link peer flex items-center gap-2 hover:underline">
|
|
7619
|
-
<
|
|
7628
|
+
<arrow-up-right-from-square-icon />
|
|
7620
7629
|
<span>{{ link.title }}</span>
|
|
7621
7630
|
</a>
|
|
7622
7631
|
@if (displayPromoted()) {
|
|
@@ -7628,19 +7637,19 @@ class SponsoredResultsComponent {
|
|
|
7628
7637
|
}
|
|
7629
7638
|
</li>
|
|
7630
7639
|
}
|
|
7631
|
-
}`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
7640
|
+
}`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ArrowUpRightFromSquareIcon, selector: "arrow-up-right-from-square-icon, ArrowUpRightFromSquareIcon", inputs: ["class"] }] });
|
|
7632
7641
|
}
|
|
7633
7642
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SponsoredResultsComponent, decorators: [{
|
|
7634
7643
|
type: Component,
|
|
7635
7644
|
args: [{
|
|
7636
7645
|
selector: 'sponsored-results, SponsoredResults, sponsoredresults',
|
|
7637
|
-
imports: [NgTemplateOutlet],
|
|
7646
|
+
imports: [NgTemplateOutlet, ArrowUpRightFromSquareIcon],
|
|
7638
7647
|
standalone: true,
|
|
7639
7648
|
template: ` @if (sponsoredResults()?.length) {
|
|
7640
7649
|
@for (link of sponsoredResults(); track $index) {
|
|
7641
7650
|
<li role="listitem" class="text-primary flex items-center gap-2 rounded px-3 py-2 font-bold">
|
|
7642
7651
|
<a href="{{ link.url }}" target="_blank" rel="noopener" title="{{ link.tooltip }}" class="result-link peer flex items-center gap-2 hover:underline">
|
|
7643
|
-
<
|
|
7652
|
+
<arrow-up-right-from-square-icon />
|
|
7644
7653
|
<span>{{ link.title }}</span>
|
|
7645
7654
|
</a>
|
|
7646
7655
|
@if (displayPromoted()) {
|
|
@@ -7742,25 +7751,25 @@ class ThemeToggleComponent {
|
|
|
7742
7751
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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: `
|
|
7743
7752
|
<label class="flex cursor-pointer select-none items-center gap-2">
|
|
7744
7753
|
@if (darkMode()) {
|
|
7745
|
-
<
|
|
7754
|
+
<toggle-right-icon class="text-primary" />
|
|
7746
7755
|
} @else {
|
|
7747
|
-
<
|
|
7756
|
+
<toggle-left-icon />
|
|
7748
7757
|
}
|
|
7749
7758
|
|
|
7750
7759
|
<span>Dark mode</span>
|
|
7751
7760
|
|
|
7752
7761
|
<input type="checkbox" class="hidden" [(ngModel)]="darkMode" (ngModelChange)="toggleDarkMode($event)" />
|
|
7753
7762
|
</label>
|
|
7754
|
-
`, 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"] }] });
|
|
7763
|
+
`, 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"] }, { kind: "component", type: ToggleRightIcon, selector: "toggle-right-icon, ToggleRightIcon", inputs: ["class"] }, { kind: "component", type: ToggleLeftIcon, selector: "toggle-left-icon, ToggleLeftIcon", inputs: ["class"] }] });
|
|
7755
7764
|
}
|
|
7756
7765
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThemeToggleComponent, decorators: [{
|
|
7757
7766
|
type: Component,
|
|
7758
|
-
args: [{ selector: 'theme-toggle', standalone: true, imports: [FormsModule], template: `
|
|
7767
|
+
args: [{ selector: 'theme-toggle', standalone: true, imports: [FormsModule, ToggleRightIcon, ToggleLeftIcon], template: `
|
|
7759
7768
|
<label class="flex cursor-pointer select-none items-center gap-2">
|
|
7760
7769
|
@if (darkMode()) {
|
|
7761
|
-
<
|
|
7770
|
+
<toggle-right-icon class="text-primary" />
|
|
7762
7771
|
} @else {
|
|
7763
|
-
<
|
|
7772
|
+
<toggle-left-icon />
|
|
7764
7773
|
}
|
|
7765
7774
|
|
|
7766
7775
|
<span>Dark mode</span>
|
|
@@ -7786,7 +7795,7 @@ class SheetNavbarComponent {
|
|
|
7786
7795
|
<menu class="flex items-center gap-2 font-semibold">
|
|
7787
7796
|
<li>
|
|
7788
7797
|
<button variant="ghost" class="group" [attr.title]="'back' | transloco" sheetClose>
|
|
7789
|
-
<
|
|
7798
|
+
<arrow-left-icon class="-ms-1 transition-transform opacity-60 group-hover:-translate-x-0.5" />
|
|
7790
7799
|
{{ 'back' | transloco }}
|
|
7791
7800
|
</button>
|
|
7792
7801
|
</li>
|
|
@@ -7797,19 +7806,19 @@ class SheetNavbarComponent {
|
|
|
7797
7806
|
|
|
7798
7807
|
<ng-content></ng-content>
|
|
7799
7808
|
</menu>
|
|
7800
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size"] }, { kind: "directive", type: Separator, selector: "separator, Separator", inputs: ["class", "orientation"] }, { kind: "directive", type: SheetCloseDirective, selector: "[sheetClose]" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
7809
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "directive", type: Separator, selector: "separator, Separator", inputs: ["class", "orientation"] }, { kind: "directive", type: SheetCloseDirective, selector: "[sheetClose]" }, { kind: "component", type: ArrowLeftIcon, selector: "arrow-left-icon, ArrowLeftIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
7801
7810
|
}
|
|
7802
7811
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SheetNavbarComponent, decorators: [{
|
|
7803
7812
|
type: Component,
|
|
7804
7813
|
args: [{
|
|
7805
7814
|
selector: "SheetNavbar, sheetnavbar, sheet-navbar",
|
|
7806
7815
|
standalone: true,
|
|
7807
|
-
imports: [TranslocoPipe, ButtonComponent, Separator, SheetCloseDirective],
|
|
7816
|
+
imports: [TranslocoPipe, ButtonComponent, Separator, SheetCloseDirective, ArrowLeftIcon],
|
|
7808
7817
|
template: `
|
|
7809
7818
|
<menu class="flex items-center gap-2 font-semibold">
|
|
7810
7819
|
<li>
|
|
7811
7820
|
<button variant="ghost" class="group" [attr.title]="'back' | transloco" sheetClose>
|
|
7812
|
-
<
|
|
7821
|
+
<arrow-left-icon class="-ms-1 transition-transform opacity-60 group-hover:-translate-x-0.5" />
|
|
7813
7822
|
{{ 'back' | transloco }}
|
|
7814
7823
|
</button>
|
|
7815
7824
|
</li>
|
|
@@ -8133,7 +8142,7 @@ class AdvancedFiltersComponent {
|
|
|
8133
8142
|
return res;
|
|
8134
8143
|
}
|
|
8135
8144
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AdvancedFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8136
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AdvancedFiltersComponent, isStandalone: true, selector: "advanced-filters", host: { classAttribute: "contents" }, providers: [SyslangPipe, TranslocoPipe, provideTranslocoScope("drawers")], ngImport: i0, template: "<div class=\"flex h-full flex-col overflow-auto\">\n <sheet-navbar class=\"border-foreground/10 block border-b pb-2\">\n <button [attr.title]=\"'drawers.search' | transloco\" (click)=\"onSearch()\">\n {{ 'drawers.search' | transloco }}\n </button>\n </sheet-navbar>\n\n <div class=\"flex h-full grow flex-col overflow-auto p-4\">\n <section class=\"flex flex-col gap-4\" [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", 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: DropdownInputComponent, selector: "dropdown-input, DropdownInput", inputs: ["label", "placeholder", "noResultLabel", "suggestions", "selected"], outputs: ["onFocus", "onKeyUp", "removeItem", "addItem"] }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: TabsComponent, selector: "tabs, Tabs", inputs: ["class"] }, { kind: "directive", type: TabComponent, selector: "tab, Tab", inputs: ["class", "variant", "size", "noTruncate", "value", "active"], outputs: ["clicked"] }, { kind: "directive", type: TabsListComponent, selector: "tabs-list, TabsList", inputs: ["class", "variant", "size"] }, { kind: "component", type: SheetNavbarComponent, selector: "SheetNavbar, sheetnavbar, sheet-navbar" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
|
|
8145
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AdvancedFiltersComponent, isStandalone: true, selector: "advanced-filters", host: { classAttribute: "contents" }, providers: [SyslangPipe, TranslocoPipe, provideTranslocoScope("drawers")], ngImport: i0, template: "<div class=\"flex h-full flex-col overflow-auto\">\n <sheet-navbar class=\"border-foreground/10 block border-b pb-2\">\n <button [attr.title]=\"'drawers.search' | transloco\" (click)=\"onSearch()\">\n {{ 'drawers.search' | transloco }}\n </button>\n </sheet-navbar>\n\n <div class=\"flex h-full grow flex-col overflow-auto p-4\">\n <section class=\"flex flex-col gap-4\" [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", 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: DropdownInputComponent, selector: "dropdown-input, DropdownInput", inputs: ["label", "placeholder", "noResultLabel", "suggestions", "selected"], outputs: ["onFocus", "onKeyUp", "removeItem", "addItem"] }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: TabsComponent, selector: "tabs, Tabs", inputs: ["class"] }, { kind: "directive", type: TabComponent, selector: "tab, Tab", inputs: ["class", "variant", "size", "noTruncate", "value", "active"], outputs: ["clicked"] }, { kind: "directive", type: TabsListComponent, selector: "tabs-list, TabsList", inputs: ["class", "variant", "size"] }, { kind: "component", type: SheetNavbarComponent, selector: "SheetNavbar, sheetnavbar, sheet-navbar" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
|
|
8137
8146
|
}
|
|
8138
8147
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AdvancedFiltersComponent, decorators: [{
|
|
8139
8148
|
type: Component,
|
|
@@ -8388,7 +8397,7 @@ class AggregationDateRangeDialogComponent {
|
|
|
8388
8397
|
</DialogFooter>
|
|
8389
8398
|
</DialogContent>
|
|
8390
8399
|
</div>
|
|
8391
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size"] }, { kind: "component", type: DialogComponent, selector: "dialog, [dialog]", outputs: ["closed"], exportAs: ["dialog"] }, { kind: "directive", type: DialogContentComponent, selector: "DialogContent", inputs: ["class"] }, { kind: "component", type: DialogHeaderComponent, selector: "DialogHeader" }, { kind: "directive", type: DialogTitleComponent, selector: "DialogTitle", inputs: ["class"] }, { kind: "directive", type: DialogFooterComponent, selector: "DialogFooter", inputs: ["class"] }, { kind: "component", type: AggregationDateCustomRangeComponent, selector: "aggregation-date-custom-range", inputs: ["lang", "min", "max"], outputs: ["dateSelected"] }, { kind: "component", type: AggregationDateDualPickersComponent, selector: "aggregation-date-dual-pickers", inputs: ["lang", "min", "max"], outputs: ["dateSelected"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
8400
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: DialogComponent, selector: "dialog, [dialog]", outputs: ["closed"], exportAs: ["dialog"] }, { kind: "directive", type: DialogContentComponent, selector: "DialogContent", inputs: ["class"] }, { kind: "component", type: DialogHeaderComponent, selector: "DialogHeader" }, { kind: "directive", type: DialogTitleComponent, selector: "DialogTitle", inputs: ["class"] }, { kind: "directive", type: DialogFooterComponent, selector: "DialogFooter", inputs: ["class"] }, { kind: "component", type: AggregationDateCustomRangeComponent, selector: "aggregation-date-custom-range", inputs: ["lang", "min", "max"], outputs: ["dateSelected"] }, { kind: "component", type: AggregationDateDualPickersComponent, selector: "aggregation-date-dual-pickers", inputs: ["lang", "min", "max"], outputs: ["dateSelected"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
8392
8401
|
}
|
|
8393
8402
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AggregationDateRangeDialogComponent, decorators: [{
|
|
8394
8403
|
type: Component,
|
|
@@ -8499,11 +8508,11 @@ class AggregationListItemComponent {
|
|
|
8499
8508
|
}
|
|
8500
8509
|
}
|
|
8501
8510
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AggregationListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8502
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AggregationListItemComponent, isStandalone: true, selector: "aggregation-list-item, AggregationListItem, aggregationlistitem", inputs: { node: { classPropertyName: "node", publicName: "node", 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\r\n role=\"listitem\"\r\n [attr.aria-selected]=\"node().$selected\"\r\n [attr.aria-label]=\"name() | syslang\"\r\n [class]=\"\r\n cn(\r\n 'flex grow items-center gap-2 p-1 leading-7',\r\n node().count === 0 && 'disabled pointer-events-none
|
|
8511
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AggregationListItemComponent, isStandalone: true, selector: "aggregation-list-item, AggregationListItem, aggregationlistitem", inputs: { node: { classPropertyName: "node", publicName: "node", 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\r\n role=\"listitem\"\r\n [attr.aria-selected]=\"node().$selected\"\r\n [attr.aria-label]=\"name() | syslang\"\r\n [class]=\"\r\n cn(\r\n 'flex grow items-center gap-2 p-1 leading-7',\r\n node().count === 0 && 'disabled pointer-events-none',\r\n node().$selected && ''\r\n )\r\n \"\r\n (click)=\"select(node(), $event)\">\r\n <input\r\n type=\"checkbox\"\r\n role=\"checkbox\"\r\n value=\"{{ node().value }}\"\r\n [attr.disabled]=\"node().count === 0 ? true : null\"\r\n [attr.aria-disabled]=\"node().count === 0\"\r\n (keydown.enter)=\"select(node(), $event)\"\r\n [checked]=\"node().$selected\" />\r\n\r\n @let icon = node().icon;\r\n @if (icon) {\r\n <FaIcon [faClass]=\"icon\" class=\"self-center justify-self-center\" />\r\n }\r\n <span\r\n [class]=\"\r\n cn(\r\n 'line-clamp-1 break-all text-ellipsis',\r\n quickFilter() && 'hover:underline'\r\n )\r\n \"\r\n [title]=\"\r\n quickFilter()\r\n ? ((isFiltered() ? 'filters.removeFilter' : 'filters.addFilter')\r\n | transloco) +\r\n ': ' +\r\n (name() | syslang)\r\n : (name() | syslang)\r\n \"\r\n (click)=\"onTextClick($event)\">\r\n @for (\r\n chunk of (name() | syslang) ?? \"\" | highlightWord: searchText() : 10;\r\n track $index\r\n ) {\r\n <span [class]=\"{ 'font-bold': chunk.match }\" aria-hidden=\"true\">{{\r\n chunk.text\r\n }}</span>\r\n }\r\n </span>\r\n @if (showCount() && node().count > 0) {\r\n <span class=\"ml-auto px-1 text-xs empty:hidden\" aria-hidden=\"true\">{{\r\n node().count\r\n }}</span>\r\n }\r\n</a>\r\n", styles: [":host{display:block;-webkit-user-select:none;user-select:none}:host a{padding-left:var(--agg-tree-indent, .5rem)}a{line-height:var(--agg-item-height, inherit)}\n"], dependencies: [{ kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "pipe", type: HighlightWordPipe, name: "highlightWord" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
8503
8512
|
}
|
|
8504
8513
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AggregationListItemComponent, decorators: [{
|
|
8505
8514
|
type: Component,
|
|
8506
|
-
args: [{ selector: "aggregation-list-item, AggregationListItem, aggregationlistitem", standalone: true, imports: [HighlightWordPipe, ListItemComponent, SyslangPipe, TranslocoPipe], template: "<a\r\n role=\"listitem\"\r\n [attr.aria-selected]=\"node().$selected\"\r\n [attr.aria-label]=\"name() | syslang\"\r\n [class]=\"\r\n cn(\r\n 'flex grow items-center gap-2 p-1 leading-7',\r\n node().count === 0 && 'disabled pointer-events-none
|
|
8515
|
+
args: [{ selector: "aggregation-list-item, AggregationListItem, aggregationlistitem", standalone: true, imports: [HighlightWordPipe, ListItemComponent, SyslangPipe, TranslocoPipe, FaIconComponent], template: "<a\r\n role=\"listitem\"\r\n [attr.aria-selected]=\"node().$selected\"\r\n [attr.aria-label]=\"name() | syslang\"\r\n [class]=\"\r\n cn(\r\n 'flex grow items-center gap-2 p-1 leading-7',\r\n node().count === 0 && 'disabled pointer-events-none',\r\n node().$selected && ''\r\n )\r\n \"\r\n (click)=\"select(node(), $event)\">\r\n <input\r\n type=\"checkbox\"\r\n role=\"checkbox\"\r\n value=\"{{ node().value }}\"\r\n [attr.disabled]=\"node().count === 0 ? true : null\"\r\n [attr.aria-disabled]=\"node().count === 0\"\r\n (keydown.enter)=\"select(node(), $event)\"\r\n [checked]=\"node().$selected\" />\r\n\r\n @let icon = node().icon;\r\n @if (icon) {\r\n <FaIcon [faClass]=\"icon\" class=\"self-center justify-self-center\" />\r\n }\r\n <span\r\n [class]=\"\r\n cn(\r\n 'line-clamp-1 break-all text-ellipsis',\r\n quickFilter() && 'hover:underline'\r\n )\r\n \"\r\n [title]=\"\r\n quickFilter()\r\n ? ((isFiltered() ? 'filters.removeFilter' : 'filters.addFilter')\r\n | transloco) +\r\n ': ' +\r\n (name() | syslang)\r\n : (name() | syslang)\r\n \"\r\n (click)=\"onTextClick($event)\">\r\n @for (\r\n chunk of (name() | syslang) ?? \"\" | highlightWord: searchText() : 10;\r\n track $index\r\n ) {\r\n <span [class]=\"{ 'font-bold': chunk.match }\" aria-hidden=\"true\">{{\r\n chunk.text\r\n }}</span>\r\n }\r\n </span>\r\n @if (showCount() && node().count > 0) {\r\n <span class=\"ml-auto px-1 text-xs empty:hidden\" aria-hidden=\"true\">{{\r\n node().count\r\n }}</span>\r\n }\r\n</a>\r\n", styles: [":host{display:block;-webkit-user-select:none;user-select:none}:host a{padding-left:var(--agg-tree-indent, .5rem)}a{line-height:var(--agg-item-height, inherit)}\n"] }]
|
|
8507
8516
|
}], propDecorators: { disabled: [{
|
|
8508
8517
|
type: HostBinding,
|
|
8509
8518
|
args: ["attr.disabled"]
|
|
@@ -8738,7 +8747,7 @@ class AggregationListComponent {
|
|
|
8738
8747
|
unselectAll() {
|
|
8739
8748
|
if (this.items().length) {
|
|
8740
8749
|
this.selectItems(this.items(), false);
|
|
8741
|
-
this.
|
|
8750
|
+
this.select();
|
|
8742
8751
|
this.isAllSelected.set(false);
|
|
8743
8752
|
}
|
|
8744
8753
|
}
|
|
@@ -8909,8 +8918,12 @@ class AggregationListComponent {
|
|
|
8909
8918
|
const e = event;
|
|
8910
8919
|
this.isCollapsed.set(e.newState === "closed");
|
|
8911
8920
|
}
|
|
8921
|
+
clearSearch(e) {
|
|
8922
|
+
e.stopImmediatePropagation();
|
|
8923
|
+
this.searchText.set("");
|
|
8924
|
+
}
|
|
8912
8925
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AggregationListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8913
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AggregationListComponent, isStandalone: true, selector: "AggregationList, aggregation-list, aggregationlist", 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", onApply: "onApply", onClear: "onClear", searchText: "searchTextChange" }, host: { properties: { "class": "cn(\"block h-[inherit] max-h-[inherit]\",class())" } }, viewQueries: [{ propertyName: "scrollElement", first: true, predicate: ["scrollElement"], descendants: true, isSignal: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (aggregation()?.isTree) {\r\n <div class=\"p-2 text-sm text-red-500\">\r\n <i class=\"fa-fw fas fa-triangle-exclamation mr-1\"></i>\r\n The aggregation component no longer supports tree aggregations. Please use\r\n the <AggregationTree /> component instead.\r\n </div>\r\n}\r\n<details\r\n [attr.open]=\"expanded()\"\r\n [attr.name]=\"id()\"\r\n class=\"group space-y-2\"\r\n (toggle)=\"onToggle($event)\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible() && !isEmpty()\"\r\n [class.text-muted-foreground]=\"isEmpty()\"\r\n class=\"m-0 mt-1 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @if (aggregation()?.icon) {\r\n <i class=\"fa-fw {{ aggregation()?.icon }} mr-1\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"grow truncate\">{{\r\n aggregation()?.display | syslang | transloco\r\n }}</span>\r\n </ng-content>\r\n\r\n @if (showFiltersCount() && filtersCount() > 0) {\r\n <!-- count -->\r\n <Badge size=\"xs\" class=\"ml-1 pb-0.5\">\r\n {{ filtersCount() }}\r\n </Badge>\r\n }\r\n <!-- apply filter block -->\r\n @if (!isCollapsed()) {\r\n <ButtonGroup>\r\n @if (hasFilters()) {\r\n <button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n class=\"size-6\"\r\n [attr.title]=\"'filters.clearFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.clearFilters' | transloco\"\r\n (click)=\"$event.stopPropagation(); clear()\">\r\n <i class=\"fa-fw far fa-filter-circle-xmark\"></i>\r\n <span class=\"sr-only\">{{\r\n \"filters.clearFilters\" | transloco\r\n }}</span>\r\n </button>\r\n }\r\n @if (selection()) {\r\n <button\r\n variant=\"primary\"\r\n size=\"xs\"\r\n [attr.title]=\"'filters.applyFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.applyFilters' | transloco\"\r\n (click)=\"$event.stopPropagation(); apply()\"\r\n class=\"h-4 px-1\">\r\n <FilterIcon class=\"size-4\" />\r\n {{ \"filters.apply\" | transloco }}\r\n </button>\r\n }\r\n\r\n <!-- select / unselect all -->\r\n @if (isAllSelected()) {\r\n <button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n class=\"size-6\"\r\n [attr.title]=\"'filters.unselectAllFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.unselectAllFilters' | transloco\"\r\n (click)=\"$event.stopPropagation(); unselectAll()\">\r\n <i class=\"fa-fw far fa-check-square\"></i>\r\n <span class=\"sr-only\">{{\r\n \"filters.unselectAllFilters\" | transloco\r\n }}</span>\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n class=\"size-6\"\r\n [attr.title]=\"'filters.selectAllFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.selectAllFilters' | transloco\"\r\n (click)=\"$event.stopPropagation(); selectAll()\">\r\n <i class=\"fa-fw far fa-square\"></i>\r\n <span class=\"sr-only\">{{\r\n \"filters.selectAllFilters\" | transloco\r\n }}</span>\r\n </button>\r\n }\r\n </ButtonGroup>\r\n }\r\n\r\n @if (collapsible()) {\r\n <button\r\n variant=\"none\"\r\n title=\"Open/Close\"\r\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\r\n <chevronright />\r\n <span class=\"sr-only\">{{ \"filters.toggle\" | transloco }}</span>\r\n </button>\r\n }\r\n </summary>\r\n\r\n <!-- content wrapper -->\r\n @if (aggregation()?.searchable && items().length) {\r\n <InputGroup class=\"group/item mt-1\">\r\n <input\r\n #searchInput\r\n input-group\r\n id=\"aggregation-input-{{ column() }}\"\r\n type=\"text\"\r\n [attr.placeholder]=\"'search' | transloco\"\r\n [(ngModel)]=\"searchText\"\r\n class=\"mt-1\" />\r\n <InputGroupAddon>\r\n <SearchIcon\r\n class=\"text-foreground size-4 rotate-0 transition-[rotate] duration-500 group-focus-within/item:rotate-90\" />\r\n </InputGroupAddon>\r\n </InputGroup>\r\n }\r\n\r\n <div\r\n #scrollElement\r\n class=\"scrollbar-thin max-h-[calc(var(--height,100%)-100px)] w-full overflow-auto\">\r\n <div\r\n class=\"relative w-full\"\r\n [style.height]=\"virtualizer.getTotalSize() + 'px'\"\r\n role=\"list\"\r\n [attr.aria-label]=\"aggregation()?.display | syslang | transloco\">\r\n @for (vItem of virtualizer.getVirtualItems(); track vItem.index) {\r\n @let item = items()[vItem.index];\r\n <div\r\n class=\"absolute w-full\"\r\n [style.transform]=\"'translateY(' + vItem.start + 'px)'\"\r\n role=\"listitem\">\r\n <AggregationListItem\r\n [node]=\"item\"\r\n [field]=\"aggregation()?.column\"\r\n (onSelect)=\"select()\"\r\n (onFilter)=\"apply()\" />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if (aggregation()?.$hasMore && this.searchedItems().length === 0) {\r\n <button\r\n variant=\"link\"\r\n class=\"mt-1 flex w-full justify-center\"\r\n [attr.aria-label]=\"'loadMore' | transloco\"\r\n (click)=\"loadMore()\">\r\n {{ \"loadMore\" | transloco }}\r\n </button>\r\n }\r\n</details>\r\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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size"] }, { kind: "component", type: AggregationListItemComponent, selector: "aggregation-list-item, AggregationListItem, aggregationlistitem", inputs: ["node", "field"], outputs: ["onSelect", "onOpen", "onFilter"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "size"] }, { 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" }] });
|
|
8926
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AggregationListComponent, isStandalone: true, selector: "AggregationList, aggregation-list, aggregationlist", 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", onApply: "onApply", onClear: "onClear", searchText: "searchTextChange" }, host: { properties: { "class": "cn(\"block h-[inherit] max-h-[inherit]\",class())" } }, viewQueries: [{ propertyName: "scrollElement", first: true, predicate: ["scrollElement"], descendants: true, isSignal: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (aggregation()?.isTree) {\r\n <div class=\"p-2 text-sm text-red-500\">\r\n <triangle-alert-icon class=\"mr-1\" />\r\n The aggregation component no longer supports tree aggregations. Please use\r\n the <AggregationTree /> component instead.\r\n </div>\r\n}\r\n<details\r\n [attr.open]=\"expanded()\"\r\n [attr.name]=\"id()\"\r\n class=\"group space-y-2\"\r\n (toggle)=\"onToggle($event)\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible() && !isEmpty()\"\r\n [class.text-muted-foreground]=\"isEmpty()\"\r\n class=\"m-0 mt-1 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @let icon = aggregation()?.icon;\r\n @if (icon) {\r\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\r\n }\r\n <span class=\"grow truncate\">{{\r\n aggregation()?.display | syslang | transloco\r\n }}</span>\r\n </ng-content>\r\n\r\n @if (showFiltersCount() && filtersCount() > 0) {\r\n <!-- count -->\r\n <Badge size=\"xs\" class=\"ml-1\">\r\n {{ filtersCount() }}\r\n </Badge>\r\n }\r\n <!-- apply filter block -->\r\n @if (!isCollapsed()) {\r\n @if (hasFilters()) {\r\n @let label = \"filters.clearFilters\" | transloco;\r\n <button\r\n variant=\"none\"\r\n icon-button\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); clear()\">\r\n <filter-x-icon />\r\n </button>\r\n }\r\n @if (selection()) {\r\n @let label = \"filters.apply\" | transloco;\r\n <button\r\n variant=\"accent\"\r\n size=\"sm\"\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); apply()\">\r\n <FilterIcon />\r\n {{ label }}\r\n </button>\r\n }\r\n\r\n <!-- select / unselect all -->\r\n @if (isAllSelected()) {\r\n @let label = \"filters.unselectAllFilters\" | transloco;\r\n <button\r\n variant=\"none\"\r\n icon-button\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); unselectAll()\">\r\n <square-check-icon />\r\n </button>\r\n } @else {\r\n @let label = \"filters.selectAllFilters\" | transloco;\r\n <button\r\n variant=\"none\"\r\n icon-button\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); selectAll()\">\r\n <square-icon />\r\n </button>\r\n }\r\n }\r\n\r\n @if (collapsible()) {\r\n <icon-button\r\n title=\"Open/Close\"\r\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\r\n <chevronright />\r\n <span class=\"sr-only\">{{ \"filters.toggle\" | transloco }}</span>\r\n </icon-button>\r\n }\r\n </summary>\r\n\r\n <!-- content wrapper -->\r\n @if (aggregation()?.searchable && items().length) {\r\n <InputGroup class=\"group/item mt-1\">\r\n <input\r\n #searchInput\r\n input-group\r\n id=\"aggregation-input-{{ column() }}\"\r\n type=\"text\"\r\n [attr.placeholder]=\"'search' | transloco\"\r\n [(ngModel)]=\"searchText\"\r\n class=\"mt-1\" />\r\n <InputGroupAddon>\r\n <SearchIcon\r\n class=\"text-foreground size-4 rotate-0 transition-[rotate] duration-500 group-focus-within/item:rotate-90\" />\r\n </InputGroupAddon>\r\n <InputGroupAddon align=\"inline-end\" class=\"gap-0.5!\">\r\n <icon-button\r\n size=\"sm\"\r\n [class]=\"\r\n searchText().length > 0\r\n ? 'rotate-90 cursor-pointer opacity-100 transition-[rotate,opacity] duration-500'\r\n : 'pointer-events-none rotate-0 opacity-0 transition-[rotate,opacity] duration-500'\r\n \"\r\n aria-label=\"Clear search\"\r\n [tabindex]=\"searchText().length > 0 ? 0 : -1\"\r\n (keydown.enter)=\"clearSearch($event)\"\r\n (click)=\"clearSearch($event)\">\r\n <XMarkIcon />\r\n </icon-button>\r\n <ng-content />\r\n </InputGroupAddon>\r\n </InputGroup>\r\n }\r\n\r\n <div\r\n #scrollElement\r\n class=\"scrollbar-thin max-h-[calc(var(--height,100%)-100px)] w-full overflow-auto\">\r\n <div\r\n class=\"relative w-full\"\r\n [style.height]=\"virtualizer.getTotalSize() + 'px'\"\r\n role=\"list\"\r\n [attr.aria-label]=\"aggregation()?.display | syslang | transloco\">\r\n @for (vItem of virtualizer.getVirtualItems(); track vItem.index) {\r\n @let item = items()[vItem.index];\r\n <div\r\n class=\"absolute w-full\"\r\n [style.transform]=\"'translateY(' + vItem.start + 'px)'\"\r\n role=\"listitem\">\r\n <AggregationListItem\r\n [node]=\"item\"\r\n [field]=\"aggregation()?.column\"\r\n (onSelect)=\"select()\"\r\n (onFilter)=\"apply()\" />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if (aggregation()?.$hasMore && this.searchedItems().length === 0) {\r\n <button\r\n class=\"mt-1 flex w-full justify-center\"\r\n [attr.aria-label]=\"'loadMore' | transloco\"\r\n (click)=\"loadMore()\">\r\n {{ \"loadMore\" | transloco }}\r\n </button>\r\n }\r\n</details>\r\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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: AggregationListItemComponent, selector: "aggregation-list-item, AggregationListItem, aggregationlistitem", inputs: ["node", "field"], outputs: ["onSelect", "onOpen", "onFilter"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "scheme", "size"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon, chevron-right-icon, chevronrighticon", 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: "component", type: SearchIcon, selector: "SearchIcon", inputs: ["class"] }, { kind: "component", type: FilterIcon, selector: "filter-icon, FilterIcon", inputs: ["class"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "component", type: TriangleAlertIcon, selector: "triangle-alert-icon, TriangleAlertIcon", inputs: ["class"] }, { kind: "component", type: FilterXIcon, selector: "filter-x-icon, FilterXIcon", inputs: ["class"] }, { kind: "component", type: SquareCheckIcon, selector: "square-check-icon, SquareCheckIcon", inputs: ["class"] }, { kind: "component", type: SquareIcon, selector: "square-icon, SquareIcon", inputs: ["class"] }, { kind: "directive", type: IconButtonComponent, selector: "button[icon-button], icon-button, IconButton", inputs: ["class", "size"] }, { kind: "component", type: XMarkIcon, selector: "XMarkIcon, xmark-icon, x-mark-icon", inputs: ["class"] }, { kind: "pipe", type: SyslangPipe, name: "syslang" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
8914
8927
|
}
|
|
8915
8928
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AggregationListComponent, decorators: [{
|
|
8916
8929
|
type: Component,
|
|
@@ -8923,16 +8936,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
8923
8936
|
TranslocoPipe,
|
|
8924
8937
|
BadgeComponent,
|
|
8925
8938
|
ChevronRightIcon,
|
|
8926
|
-
ButtonGroup,
|
|
8927
8939
|
InputGroupInput,
|
|
8928
8940
|
InputGroupComponent,
|
|
8929
8941
|
InputGroupAddonComponent,
|
|
8930
8942
|
SearchIcon,
|
|
8931
8943
|
FilterIcon,
|
|
8932
|
-
AggregationListItemComponent
|
|
8944
|
+
AggregationListItemComponent,
|
|
8945
|
+
FaIconComponent,
|
|
8946
|
+
TriangleAlertIcon,
|
|
8947
|
+
FilterIcon,
|
|
8948
|
+
FilterXIcon,
|
|
8949
|
+
SquareCheckIcon,
|
|
8950
|
+
SquareIcon,
|
|
8951
|
+
IconButtonComponent,
|
|
8952
|
+
XMarkIcon
|
|
8933
8953
|
], standalone: true, host: {
|
|
8934
8954
|
"[class]": 'cn("block h-[inherit] max-h-[inherit]",class())'
|
|
8935
|
-
}, template: "@if (aggregation()?.isTree) {\r\n <div class=\"p-2 text-sm text-red-500\">\r\n <
|
|
8955
|
+
}, template: "@if (aggregation()?.isTree) {\r\n <div class=\"p-2 text-sm text-red-500\">\r\n <triangle-alert-icon class=\"mr-1\" />\r\n The aggregation component no longer supports tree aggregations. Please use\r\n the <AggregationTree /> component instead.\r\n </div>\r\n}\r\n<details\r\n [attr.open]=\"expanded()\"\r\n [attr.name]=\"id()\"\r\n class=\"group space-y-2\"\r\n (toggle)=\"onToggle($event)\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible() && !isEmpty()\"\r\n [class.text-muted-foreground]=\"isEmpty()\"\r\n class=\"m-0 mt-1 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @let icon = aggregation()?.icon;\r\n @if (icon) {\r\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\r\n }\r\n <span class=\"grow truncate\">{{\r\n aggregation()?.display | syslang | transloco\r\n }}</span>\r\n </ng-content>\r\n\r\n @if (showFiltersCount() && filtersCount() > 0) {\r\n <!-- count -->\r\n <Badge size=\"xs\" class=\"ml-1\">\r\n {{ filtersCount() }}\r\n </Badge>\r\n }\r\n <!-- apply filter block -->\r\n @if (!isCollapsed()) {\r\n @if (hasFilters()) {\r\n @let label = \"filters.clearFilters\" | transloco;\r\n <button\r\n variant=\"none\"\r\n icon-button\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); clear()\">\r\n <filter-x-icon />\r\n </button>\r\n }\r\n @if (selection()) {\r\n @let label = \"filters.apply\" | transloco;\r\n <button\r\n variant=\"accent\"\r\n size=\"sm\"\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); apply()\">\r\n <FilterIcon />\r\n {{ label }}\r\n </button>\r\n }\r\n\r\n <!-- select / unselect all -->\r\n @if (isAllSelected()) {\r\n @let label = \"filters.unselectAllFilters\" | transloco;\r\n <button\r\n variant=\"none\"\r\n icon-button\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); unselectAll()\">\r\n <square-check-icon />\r\n </button>\r\n } @else {\r\n @let label = \"filters.selectAllFilters\" | transloco;\r\n <button\r\n variant=\"none\"\r\n icon-button\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); selectAll()\">\r\n <square-icon />\r\n </button>\r\n }\r\n }\r\n\r\n @if (collapsible()) {\r\n <icon-button\r\n title=\"Open/Close\"\r\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\r\n <chevronright />\r\n <span class=\"sr-only\">{{ \"filters.toggle\" | transloco }}</span>\r\n </icon-button>\r\n }\r\n </summary>\r\n\r\n <!-- content wrapper -->\r\n @if (aggregation()?.searchable && items().length) {\r\n <InputGroup class=\"group/item mt-1\">\r\n <input\r\n #searchInput\r\n input-group\r\n id=\"aggregation-input-{{ column() }}\"\r\n type=\"text\"\r\n [attr.placeholder]=\"'search' | transloco\"\r\n [(ngModel)]=\"searchText\"\r\n class=\"mt-1\" />\r\n <InputGroupAddon>\r\n <SearchIcon\r\n class=\"text-foreground size-4 rotate-0 transition-[rotate] duration-500 group-focus-within/item:rotate-90\" />\r\n </InputGroupAddon>\r\n <InputGroupAddon align=\"inline-end\" class=\"gap-0.5!\">\r\n <icon-button\r\n size=\"sm\"\r\n [class]=\"\r\n searchText().length > 0\r\n ? 'rotate-90 cursor-pointer opacity-100 transition-[rotate,opacity] duration-500'\r\n : 'pointer-events-none rotate-0 opacity-0 transition-[rotate,opacity] duration-500'\r\n \"\r\n aria-label=\"Clear search\"\r\n [tabindex]=\"searchText().length > 0 ? 0 : -1\"\r\n (keydown.enter)=\"clearSearch($event)\"\r\n (click)=\"clearSearch($event)\">\r\n <XMarkIcon />\r\n </icon-button>\r\n <ng-content />\r\n </InputGroupAddon>\r\n </InputGroup>\r\n }\r\n\r\n <div\r\n #scrollElement\r\n class=\"scrollbar-thin max-h-[calc(var(--height,100%)-100px)] w-full overflow-auto\">\r\n <div\r\n class=\"relative w-full\"\r\n [style.height]=\"virtualizer.getTotalSize() + 'px'\"\r\n role=\"list\"\r\n [attr.aria-label]=\"aggregation()?.display | syslang | transloco\">\r\n @for (vItem of virtualizer.getVirtualItems(); track vItem.index) {\r\n @let item = items()[vItem.index];\r\n <div\r\n class=\"absolute w-full\"\r\n [style.transform]=\"'translateY(' + vItem.start + 'px)'\"\r\n role=\"listitem\">\r\n <AggregationListItem\r\n [node]=\"item\"\r\n [field]=\"aggregation()?.column\"\r\n (onSelect)=\"select()\"\r\n (onFilter)=\"apply()\" />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if (aggregation()?.$hasMore && this.searchedItems().length === 0) {\r\n <button\r\n class=\"mt-1 flex w-full justify-center\"\r\n [attr.aria-label]=\"'loadMore' | transloco\"\r\n (click)=\"loadMore()\">\r\n {{ \"loadMore\" | transloco }}\r\n </button>\r\n }\r\n</details>\r\n", styles: ["AggregationItem:has(+AggregationItem){margin-bottom:var(--agg-item-gap, 0)}\n"] }]
|
|
8936
8956
|
}], ctorParameters: () => [], propDecorators: { scrollElement: [{ type: i0.ViewChild, args: ["scrollElement", { isSignal: true }] }], 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"] }], onApply: [{ type: i0.Output, args: ["onApply"] }], onClear: [{ type: i0.Output, args: ["onClear"] }], 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"] }] } });
|
|
8937
8957
|
|
|
8938
8958
|
const options = {
|
|
@@ -9154,22 +9174,25 @@ class AggregationDateComponent extends AggregationListComponent {
|
|
|
9154
9174
|
throw new Error("filters.filterInvalid");
|
|
9155
9175
|
}
|
|
9156
9176
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AggregationDateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9157
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AggregationDateComponent, isStandalone: true, selector: "aggregation-date, AggregationDate, aggregationdate", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, displayEmptyDistributionIntervals: { classPropertyName: "displayEmptyDistributionIntervals", publicName: "displayEmptyDistributionIntervals", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "@container" }, providers: [provideTranslocoScope("filters")], viewQueries: [{ propertyName: "dateRangeDialog", first: true, predicate: AggregationDateRangeDialogComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible()\"\r\n class=\"m-0 flex h-8 w-full items-center pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @
|
|
9177
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AggregationDateComponent, isStandalone: true, selector: "aggregation-date, AggregationDate, aggregationdate", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, displayEmptyDistributionIntervals: { classPropertyName: "displayEmptyDistributionIntervals", publicName: "displayEmptyDistributionIntervals", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "@container" }, providers: [provideTranslocoScope("filters")], viewQueries: [{ propertyName: "dateRangeDialog", first: true, predicate: AggregationDateRangeDialogComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible()\"\r\n class=\"m-0 flex h-8 w-full items-center pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @let icon = aggregation()?.icon;\r\n @if (icon) {\r\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\r\n }\r\n <span class=\"grow\">{{\r\n aggregation()?.display | syslang | transloco\r\n }}</span>\r\n </ng-content>\r\n\r\n @if (hasFilters()) {\r\n <icon-button\r\n [attr.title]=\"'filters.clearFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.clearFilters' | transloco\"\r\n (click)=\"clear()\"\r\n (keydown.enter)=\"clear()\">\r\n <filter-x-icon />\r\n <span class=\"sr-only\">{{ \"filters.clearFilters\" | transloco }}</span>\r\n </icon-button>\r\n }\r\n\r\n @if (selection() && validSelection()) {\r\n <icon-button\r\n [attr.title]=\"'filters.applyFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.applyFilters' | transloco\"\r\n (click)=\"apply()\"\r\n (keydown.enter)=\"apply()\">\r\n <filter-icon />\r\n <span class=\"sr-only\">{{ \"filters.applyFilters\" | transloco }}</span>\r\n </icon-button>\r\n }\r\n @if (collapsible()) {\r\n <icon-button\r\n title=\"Open/Close\"\r\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\r\n <chevronright />\r\n </icon-button>\r\n }\r\n </summary>\r\n\r\n <!-- content wrapper -->\r\n <form [formGroup]=\"form\">\r\n <ul\r\n class=\"scrollbar-thin flex max-h-[calc(var(--height,100%)-100px)] snap-y snap-start flex-col gap-1 overflow-auto pt-2\"\r\n role=\"list\">\r\n @for (option of dateOptions(); track $index) {\r\n <li\r\n role=\"listitem\"\r\n tabindex=\"0\"\r\n (click)=\"radio.click()\"\r\n [attr.aria-label]=\"option.display | syslang | transloco\"\r\n [class]=\"\r\n cn(\r\n 'flex p-0 px-2 leading-7',\r\n form.get('option')?.value === option.display && 'bg-accent',\r\n option.hidden && 'hidden',\r\n option.disabled && 'disabled pointer-events-none text-neutral-300'\r\n )\r\n \"\r\n [attr.aria-hidden]=\"option.disabled\">\r\n <input\r\n #radio\r\n type=\"radio\"\r\n formControlName=\"option\"\r\n id=\"date-filter-{{ option.display }}\"\r\n [attr.disabled]=\"option.disabled ? true : null\"\r\n [attr.aria-disabled]=\"option.disabled\"\r\n (click)=\"select()\"\r\n value=\"{{ option.display }}\" />\r\n\r\n <label\r\n for=\"date-filter-{{ option.display }}\"\r\n class=\"grow cursor-pointer p-1\">\r\n {{ option.display | syslang | transloco }}\r\n </label>\r\n </li>\r\n }\r\n\r\n @if (allowCustomRange) {\r\n <li\r\n role=\"listitem\"\r\n aria-label=\"open date range picker\"\r\n class=\"flex px-2 leading-7\"\r\n [class.select]=\"form.get('option')?.value === 'custom-range'\">\r\n <input\r\n type=\"radio\"\r\n formControlName=\"option\"\r\n id=\"date-filter-range-dialog\"\r\n value=\"custom-range\"\r\n (click)=\"select()\" />\r\n <div\r\n class=\"@container flex grow justify-end gap-1 p-1 @max-[340px]:flex-wrap\">\r\n <div class=\"flex gap-1\">\r\n <label for=\"datepicker-range-start\" class=\"min-w-10 truncate\">{{\r\n \"filters.from\" | transloco\r\n }}</label>\r\n <input\r\n id=\"datepicker-range-start\"\r\n name=\"start\"\r\n type=\"text\"\r\n readonly\r\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\r\n [value]=\"customRangeFrom()\"\r\n (click)=\"selectAndOpenDialog()\" />\r\n </div>\r\n <div class=\"flex gap-1\">\r\n <label\r\n for=\"datepicker-range-end\"\r\n class=\"min-w-10 truncate text-right\"\r\n >{{ \"filters.to\" | transloco }}</label\r\n >\r\n <input\r\n id=\"datepicker-range-end\"\r\n name=\"end\"\r\n type=\"text\"\r\n readonly\r\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\r\n [value]=\"customRangeTo()\"\r\n (click)=\"selectAndOpenDialog()\" />\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </form>\r\n</details>\r\n\r\n<aggregation-date-range-dialog\r\n [lang]=\"lang()\"\r\n [useDateRange]=\"false\"\r\n [min]=\"form.get('customRange.from')?.value || undefined\"\r\n [max]=\"form.get('customRange.to')?.value || undefined\"\r\n (rangeSelected)=\"onRangeSelected($event)\" />\r\n", styles: [":host{display:block;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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { 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: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: AggregationDateRangeDialogComponent, selector: "aggregation-date-range-dialog", inputs: ["min", "max", "lang", "useDateRange"], outputs: ["rangeSelected"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "component", type: FilterIcon, selector: "filter-icon, FilterIcon", inputs: ["class"] }, { kind: "component", type: FilterXIcon, selector: "filter-x-icon, FilterXIcon", inputs: ["class"] }, { kind: "directive", type: IconButtonComponent, selector: "button[icon-button], icon-button, IconButton", inputs: ["class", "size"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
|
|
9158
9178
|
}
|
|
9159
9179
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AggregationDateComponent, decorators: [{
|
|
9160
9180
|
type: Component,
|
|
9161
9181
|
args: [{ selector: "aggregation-date, AggregationDate, aggregationdate", standalone: true, providers: [provideTranslocoScope("filters")], imports: [
|
|
9162
9182
|
InputComponent,
|
|
9163
|
-
ButtonComponent,
|
|
9164
9183
|
ListItemComponent,
|
|
9165
9184
|
ReactiveFormsModule,
|
|
9166
9185
|
TranslocoPipe,
|
|
9167
9186
|
SyslangPipe,
|
|
9168
9187
|
ChevronRightIcon,
|
|
9169
|
-
AggregationDateRangeDialogComponent
|
|
9188
|
+
AggregationDateRangeDialogComponent,
|
|
9189
|
+
FaIconComponent,
|
|
9190
|
+
FilterIcon,
|
|
9191
|
+
FilterXIcon,
|
|
9192
|
+
IconButtonComponent
|
|
9170
9193
|
], host: {
|
|
9171
9194
|
class: "@container"
|
|
9172
|
-
}, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible()\"\r\n class=\"m-0 flex h-8 w-full items-center pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @
|
|
9195
|
+
}, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible()\"\r\n class=\"m-0 flex h-8 w-full items-center pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @let icon = aggregation()?.icon;\r\n @if (icon) {\r\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\r\n }\r\n <span class=\"grow\">{{\r\n aggregation()?.display | syslang | transloco\r\n }}</span>\r\n </ng-content>\r\n\r\n @if (hasFilters()) {\r\n <icon-button\r\n [attr.title]=\"'filters.clearFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.clearFilters' | transloco\"\r\n (click)=\"clear()\"\r\n (keydown.enter)=\"clear()\">\r\n <filter-x-icon />\r\n <span class=\"sr-only\">{{ \"filters.clearFilters\" | transloco }}</span>\r\n </icon-button>\r\n }\r\n\r\n @if (selection() && validSelection()) {\r\n <icon-button\r\n [attr.title]=\"'filters.applyFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.applyFilters' | transloco\"\r\n (click)=\"apply()\"\r\n (keydown.enter)=\"apply()\">\r\n <filter-icon />\r\n <span class=\"sr-only\">{{ \"filters.applyFilters\" | transloco }}</span>\r\n </icon-button>\r\n }\r\n @if (collapsible()) {\r\n <icon-button\r\n title=\"Open/Close\"\r\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\r\n <chevronright />\r\n </icon-button>\r\n }\r\n </summary>\r\n\r\n <!-- content wrapper -->\r\n <form [formGroup]=\"form\">\r\n <ul\r\n class=\"scrollbar-thin flex max-h-[calc(var(--height,100%)-100px)] snap-y snap-start flex-col gap-1 overflow-auto pt-2\"\r\n role=\"list\">\r\n @for (option of dateOptions(); track $index) {\r\n <li\r\n role=\"listitem\"\r\n tabindex=\"0\"\r\n (click)=\"radio.click()\"\r\n [attr.aria-label]=\"option.display | syslang | transloco\"\r\n [class]=\"\r\n cn(\r\n 'flex p-0 px-2 leading-7',\r\n form.get('option')?.value === option.display && 'bg-accent',\r\n option.hidden && 'hidden',\r\n option.disabled && 'disabled pointer-events-none text-neutral-300'\r\n )\r\n \"\r\n [attr.aria-hidden]=\"option.disabled\">\r\n <input\r\n #radio\r\n type=\"radio\"\r\n formControlName=\"option\"\r\n id=\"date-filter-{{ option.display }}\"\r\n [attr.disabled]=\"option.disabled ? true : null\"\r\n [attr.aria-disabled]=\"option.disabled\"\r\n (click)=\"select()\"\r\n value=\"{{ option.display }}\" />\r\n\r\n <label\r\n for=\"date-filter-{{ option.display }}\"\r\n class=\"grow cursor-pointer p-1\">\r\n {{ option.display | syslang | transloco }}\r\n </label>\r\n </li>\r\n }\r\n\r\n @if (allowCustomRange) {\r\n <li\r\n role=\"listitem\"\r\n aria-label=\"open date range picker\"\r\n class=\"flex px-2 leading-7\"\r\n [class.select]=\"form.get('option')?.value === 'custom-range'\">\r\n <input\r\n type=\"radio\"\r\n formControlName=\"option\"\r\n id=\"date-filter-range-dialog\"\r\n value=\"custom-range\"\r\n (click)=\"select()\" />\r\n <div\r\n class=\"@container flex grow justify-end gap-1 p-1 @max-[340px]:flex-wrap\">\r\n <div class=\"flex gap-1\">\r\n <label for=\"datepicker-range-start\" class=\"min-w-10 truncate\">{{\r\n \"filters.from\" | transloco\r\n }}</label>\r\n <input\r\n id=\"datepicker-range-start\"\r\n name=\"start\"\r\n type=\"text\"\r\n readonly\r\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\r\n [value]=\"customRangeFrom()\"\r\n (click)=\"selectAndOpenDialog()\" />\r\n </div>\r\n <div class=\"flex gap-1\">\r\n <label\r\n for=\"datepicker-range-end\"\r\n class=\"min-w-10 truncate text-right\"\r\n >{{ \"filters.to\" | transloco }}</label\r\n >\r\n <input\r\n id=\"datepicker-range-end\"\r\n name=\"end\"\r\n type=\"text\"\r\n readonly\r\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\r\n [value]=\"customRangeTo()\"\r\n (click)=\"selectAndOpenDialog()\" />\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </form>\r\n</details>\r\n\r\n<aggregation-date-range-dialog\r\n [lang]=\"lang()\"\r\n [useDateRange]=\"false\"\r\n [min]=\"form.get('customRange.from')?.value || undefined\"\r\n [max]=\"form.get('customRange.to')?.value || undefined\"\r\n (rangeSelected)=\"onRangeSelected($event)\" />\r\n", styles: [":host{display:block;min-width:200px}ul[role=list]{scrollbar-width:thin}\n"] }]
|
|
9173
9196
|
}], ctorParameters: () => [], propDecorators: { dateRangeDialog: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AggregationDateRangeDialogComponent), { isSignal: true }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], displayEmptyDistributionIntervals: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayEmptyDistributionIntervals", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }] } });
|
|
9174
9197
|
|
|
9175
9198
|
/**
|
|
@@ -9179,21 +9202,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
9179
9202
|
*/
|
|
9180
9203
|
class DateComponent extends AggregationDateComponent {
|
|
9181
9204
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DateComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
9182
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: DateComponent, isStandalone: true, selector: "date-filter,DateFilter", host: { classAttribute: "@container" }, providers: [provideTranslocoScope("filters")], usesInheritance: true, ngImport: i0, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible()\"\r\n class=\"m-0 flex h-8 w-full items-center pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @
|
|
9205
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: DateComponent, isStandalone: true, selector: "date-filter,DateFilter", host: { classAttribute: "@container" }, providers: [provideTranslocoScope("filters")], usesInheritance: true, ngImport: i0, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible()\"\r\n class=\"m-0 flex h-8 w-full items-center pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @let icon = aggregation()?.icon;\r\n @if (icon) {\r\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\r\n }\r\n <span class=\"grow\">{{\r\n aggregation()?.display | syslang | transloco\r\n }}</span>\r\n </ng-content>\r\n\r\n @if (hasFilters()) {\r\n <icon-button\r\n [attr.title]=\"'filters.clearFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.clearFilters' | transloco\"\r\n (click)=\"clear()\"\r\n (keydown.enter)=\"clear()\">\r\n <filter-x-icon />\r\n <span class=\"sr-only\">{{ \"filters.clearFilters\" | transloco }}</span>\r\n </icon-button>\r\n }\r\n\r\n @if (selection() && validSelection()) {\r\n <icon-button\r\n [attr.title]=\"'filters.applyFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.applyFilters' | transloco\"\r\n (click)=\"apply()\"\r\n (keydown.enter)=\"apply()\">\r\n <filter-icon />\r\n <span class=\"sr-only\">{{ \"filters.applyFilters\" | transloco }}</span>\r\n </icon-button>\r\n }\r\n @if (collapsible()) {\r\n <icon-button\r\n title=\"Open/Close\"\r\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\r\n <chevronright />\r\n </icon-button>\r\n }\r\n </summary>\r\n\r\n <!-- content wrapper -->\r\n <form [formGroup]=\"form\">\r\n <ul\r\n class=\"scrollbar-thin flex max-h-[calc(var(--height,100%)-100px)] snap-y snap-start flex-col gap-1 overflow-auto pt-2\"\r\n role=\"list\">\r\n @for (option of dateOptions(); track $index) {\r\n <li\r\n role=\"listitem\"\r\n tabindex=\"0\"\r\n (click)=\"radio.click()\"\r\n [attr.aria-label]=\"option.display | syslang | transloco\"\r\n [class]=\"\r\n cn(\r\n 'flex p-0 px-2 leading-7',\r\n form.get('option')?.value === option.display && 'bg-accent',\r\n option.hidden && 'hidden',\r\n option.disabled && 'disabled pointer-events-none text-neutral-300'\r\n )\r\n \"\r\n [attr.aria-hidden]=\"option.disabled\">\r\n <input\r\n #radio\r\n type=\"radio\"\r\n formControlName=\"option\"\r\n id=\"date-filter-{{ option.display }}\"\r\n [attr.disabled]=\"option.disabled ? true : null\"\r\n [attr.aria-disabled]=\"option.disabled\"\r\n (click)=\"select()\"\r\n value=\"{{ option.display }}\" />\r\n\r\n <label\r\n for=\"date-filter-{{ option.display }}\"\r\n class=\"grow cursor-pointer p-1\">\r\n {{ option.display | syslang | transloco }}\r\n </label>\r\n </li>\r\n }\r\n\r\n @if (allowCustomRange) {\r\n <li\r\n role=\"listitem\"\r\n aria-label=\"open date range picker\"\r\n class=\"flex px-2 leading-7\"\r\n [class.select]=\"form.get('option')?.value === 'custom-range'\">\r\n <input\r\n type=\"radio\"\r\n formControlName=\"option\"\r\n id=\"date-filter-range-dialog\"\r\n value=\"custom-range\"\r\n (click)=\"select()\" />\r\n <div\r\n class=\"@container flex grow justify-end gap-1 p-1 @max-[340px]:flex-wrap\">\r\n <div class=\"flex gap-1\">\r\n <label for=\"datepicker-range-start\" class=\"min-w-10 truncate\">{{\r\n \"filters.from\" | transloco\r\n }}</label>\r\n <input\r\n id=\"datepicker-range-start\"\r\n name=\"start\"\r\n type=\"text\"\r\n readonly\r\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\r\n [value]=\"customRangeFrom()\"\r\n (click)=\"selectAndOpenDialog()\" />\r\n </div>\r\n <div class=\"flex gap-1\">\r\n <label\r\n for=\"datepicker-range-end\"\r\n class=\"min-w-10 truncate text-right\"\r\n >{{ \"filters.to\" | transloco }}</label\r\n >\r\n <input\r\n id=\"datepicker-range-end\"\r\n name=\"end\"\r\n type=\"text\"\r\n readonly\r\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\r\n [value]=\"customRangeTo()\"\r\n (click)=\"selectAndOpenDialog()\" />\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </form>\r\n</details>\r\n\r\n<aggregation-date-range-dialog\r\n [lang]=\"lang()\"\r\n [useDateRange]=\"false\"\r\n [min]=\"form.get('customRange.from')?.value || undefined\"\r\n [max]=\"form.get('customRange.to')?.value || undefined\"\r\n (rangeSelected)=\"onRangeSelected($event)\" />\r\n", styles: [":host{display:block;min-width:200px}ul[role=list]{scrollbar-width:thin}\n"], dependencies: [{ kind: "directive", type: IconButtonComponent, selector: "button[icon-button], icon-button, IconButton", inputs: ["class", "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: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: AggregationDateRangeDialogComponent, selector: "aggregation-date-range-dialog", inputs: ["min", "max", "lang", "useDateRange"], outputs: ["rangeSelected"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "component", type: FilterIcon, selector: "filter-icon, FilterIcon", inputs: ["class"] }, { kind: "component", type: FilterXIcon, selector: "filter-x-icon, FilterXIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
|
|
9183
9206
|
}
|
|
9184
9207
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DateComponent, decorators: [{
|
|
9185
9208
|
type: Component,
|
|
9186
9209
|
args: [{ selector: "date-filter,DateFilter", standalone: true, providers: [provideTranslocoScope("filters")], imports: [
|
|
9187
|
-
|
|
9210
|
+
IconButtonComponent,
|
|
9188
9211
|
ListItemComponent,
|
|
9189
9212
|
ReactiveFormsModule,
|
|
9190
9213
|
TranslocoPipe,
|
|
9191
9214
|
SyslangPipe,
|
|
9192
9215
|
ChevronRightIcon,
|
|
9193
|
-
AggregationDateRangeDialogComponent
|
|
9216
|
+
AggregationDateRangeDialogComponent,
|
|
9217
|
+
FaIconComponent,
|
|
9218
|
+
FilterIcon,
|
|
9219
|
+
FilterXIcon
|
|
9194
9220
|
], host: {
|
|
9195
9221
|
class: "@container"
|
|
9196
|
-
}, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible()\"\r\n class=\"m-0 flex h-8 w-full items-center pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @
|
|
9222
|
+
}, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible()\"\r\n class=\"m-0 flex h-8 w-full items-center pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @let icon = aggregation()?.icon;\r\n @if (icon) {\r\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\r\n }\r\n <span class=\"grow\">{{\r\n aggregation()?.display | syslang | transloco\r\n }}</span>\r\n </ng-content>\r\n\r\n @if (hasFilters()) {\r\n <icon-button\r\n [attr.title]=\"'filters.clearFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.clearFilters' | transloco\"\r\n (click)=\"clear()\"\r\n (keydown.enter)=\"clear()\">\r\n <filter-x-icon />\r\n <span class=\"sr-only\">{{ \"filters.clearFilters\" | transloco }}</span>\r\n </icon-button>\r\n }\r\n\r\n @if (selection() && validSelection()) {\r\n <icon-button\r\n [attr.title]=\"'filters.applyFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.applyFilters' | transloco\"\r\n (click)=\"apply()\"\r\n (keydown.enter)=\"apply()\">\r\n <filter-icon />\r\n <span class=\"sr-only\">{{ \"filters.applyFilters\" | transloco }}</span>\r\n </icon-button>\r\n }\r\n @if (collapsible()) {\r\n <icon-button\r\n title=\"Open/Close\"\r\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\r\n <chevronright />\r\n </icon-button>\r\n }\r\n </summary>\r\n\r\n <!-- content wrapper -->\r\n <form [formGroup]=\"form\">\r\n <ul\r\n class=\"scrollbar-thin flex max-h-[calc(var(--height,100%)-100px)] snap-y snap-start flex-col gap-1 overflow-auto pt-2\"\r\n role=\"list\">\r\n @for (option of dateOptions(); track $index) {\r\n <li\r\n role=\"listitem\"\r\n tabindex=\"0\"\r\n (click)=\"radio.click()\"\r\n [attr.aria-label]=\"option.display | syslang | transloco\"\r\n [class]=\"\r\n cn(\r\n 'flex p-0 px-2 leading-7',\r\n form.get('option')?.value === option.display && 'bg-accent',\r\n option.hidden && 'hidden',\r\n option.disabled && 'disabled pointer-events-none text-neutral-300'\r\n )\r\n \"\r\n [attr.aria-hidden]=\"option.disabled\">\r\n <input\r\n #radio\r\n type=\"radio\"\r\n formControlName=\"option\"\r\n id=\"date-filter-{{ option.display }}\"\r\n [attr.disabled]=\"option.disabled ? true : null\"\r\n [attr.aria-disabled]=\"option.disabled\"\r\n (click)=\"select()\"\r\n value=\"{{ option.display }}\" />\r\n\r\n <label\r\n for=\"date-filter-{{ option.display }}\"\r\n class=\"grow cursor-pointer p-1\">\r\n {{ option.display | syslang | transloco }}\r\n </label>\r\n </li>\r\n }\r\n\r\n @if (allowCustomRange) {\r\n <li\r\n role=\"listitem\"\r\n aria-label=\"open date range picker\"\r\n class=\"flex px-2 leading-7\"\r\n [class.select]=\"form.get('option')?.value === 'custom-range'\">\r\n <input\r\n type=\"radio\"\r\n formControlName=\"option\"\r\n id=\"date-filter-range-dialog\"\r\n value=\"custom-range\"\r\n (click)=\"select()\" />\r\n <div\r\n class=\"@container flex grow justify-end gap-1 p-1 @max-[340px]:flex-wrap\">\r\n <div class=\"flex gap-1\">\r\n <label for=\"datepicker-range-start\" class=\"min-w-10 truncate\">{{\r\n \"filters.from\" | transloco\r\n }}</label>\r\n <input\r\n id=\"datepicker-range-start\"\r\n name=\"start\"\r\n type=\"text\"\r\n readonly\r\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\r\n [value]=\"customRangeFrom()\"\r\n (click)=\"selectAndOpenDialog()\" />\r\n </div>\r\n <div class=\"flex gap-1\">\r\n <label\r\n for=\"datepicker-range-end\"\r\n class=\"min-w-10 truncate text-right\"\r\n >{{ \"filters.to\" | transloco }}</label\r\n >\r\n <input\r\n id=\"datepicker-range-end\"\r\n name=\"end\"\r\n type=\"text\"\r\n readonly\r\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\r\n [value]=\"customRangeTo()\"\r\n (click)=\"selectAndOpenDialog()\" />\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </form>\r\n</details>\r\n\r\n<aggregation-date-range-dialog\r\n [lang]=\"lang()\"\r\n [useDateRange]=\"false\"\r\n [min]=\"form.get('customRange.from')?.value || undefined\"\r\n [max]=\"form.get('customRange.to')?.value || undefined\"\r\n (rangeSelected)=\"onRangeSelected($event)\" />\r\n", styles: [":host{display:block;min-width:200px}ul[role=list]{scrollbar-width:thin}\n"] }]
|
|
9197
9223
|
}] });
|
|
9198
9224
|
|
|
9199
9225
|
class ArticleEntities {
|
|
@@ -9269,7 +9295,7 @@ class ArticleEntities {
|
|
|
9269
9295
|
<details class="group/parent" name="advanced-search-panels">
|
|
9270
9296
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
9271
9297
|
<p class="flex items-baseline gap-2 font-semibold capitalize">
|
|
9272
|
-
<
|
|
9298
|
+
<highlighter-icon />
|
|
9273
9299
|
{{ 'entities' | transloco }}
|
|
9274
9300
|
</p>
|
|
9275
9301
|
|
|
@@ -9287,7 +9313,7 @@ class ArticleEntities {
|
|
|
9287
9313
|
<details class="group/entities p-3 first:pt-0" name="advanced-search-entities">
|
|
9288
9314
|
<summary class="sticky top-8 flex cursor-pointer select-none items-baseline justify-between">
|
|
9289
9315
|
<p class="flex items-baseline gap-2 font-semibold capitalize">
|
|
9290
|
-
<
|
|
9316
|
+
<FaIcon [faClass]="iconClass || 'far fa-list'" />
|
|
9291
9317
|
{{ name | transloco }}
|
|
9292
9318
|
</p>
|
|
9293
9319
|
|
|
@@ -9320,18 +9346,18 @@ class ArticleEntities {
|
|
|
9320
9346
|
</ul>
|
|
9321
9347
|
</details>
|
|
9322
9348
|
</ng-template>
|
|
9323
|
-
`, 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:
|
|
9349
|
+
`, 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, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: ChevronLeftIcon, selector: "chevron-left, ChevronLeft, chevronleft, chevron-left-icon, ChevronLeftIcon, chevronlefticon", inputs: ["class"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "component", type: HighlighterIcon, selector: "highlighter-icon, HighlighterIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
9324
9350
|
}
|
|
9325
9351
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ArticleEntities, decorators: [{
|
|
9326
9352
|
type: Component,
|
|
9327
9353
|
args: [{
|
|
9328
9354
|
selector: "article-entities,ArticleEntities,articleentities",
|
|
9329
|
-
imports: [TranslocoPipe, NgTemplateOutlet, ListItemComponent, ChevronRightIcon,
|
|
9355
|
+
imports: [TranslocoPipe, NgTemplateOutlet, ListItemComponent, ChevronRightIcon, ChevronLeftIcon, FaIconComponent, HighlighterIcon],
|
|
9330
9356
|
template: `
|
|
9331
9357
|
<details class="group/parent" name="advanced-search-panels">
|
|
9332
9358
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
9333
9359
|
<p class="flex items-baseline gap-2 font-semibold capitalize">
|
|
9334
|
-
<
|
|
9360
|
+
<highlighter-icon />
|
|
9335
9361
|
{{ 'entities' | transloco }}
|
|
9336
9362
|
</p>
|
|
9337
9363
|
|
|
@@ -9349,7 +9375,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
9349
9375
|
<details class="group/entities p-3 first:pt-0" name="advanced-search-entities">
|
|
9350
9376
|
<summary class="sticky top-8 flex cursor-pointer select-none items-baseline justify-between">
|
|
9351
9377
|
<p class="flex items-baseline gap-2 font-semibold capitalize">
|
|
9352
|
-
<
|
|
9378
|
+
<FaIcon [faClass]="iconClass || 'far fa-list'" />
|
|
9353
9379
|
{{ name | transloco }}
|
|
9354
9380
|
</p>
|
|
9355
9381
|
|
|
@@ -9416,7 +9442,7 @@ class ArticleExtracts {
|
|
|
9416
9442
|
<details class="group" name="advanced-search-panels" open>
|
|
9417
9443
|
<summary [class]="cn('sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3', '')">
|
|
9418
9444
|
<p class="flex items-baseline gap-2 font-semibold">
|
|
9419
|
-
<
|
|
9445
|
+
<tags-icon />
|
|
9420
9446
|
{{ 'extracts' | transloco }}
|
|
9421
9447
|
</p>
|
|
9422
9448
|
|
|
@@ -9425,7 +9451,7 @@ class ArticleExtracts {
|
|
|
9425
9451
|
|
|
9426
9452
|
@if (loading()) {
|
|
9427
9453
|
<div class="flex h-32 items-center justify-center">
|
|
9428
|
-
<
|
|
9454
|
+
<spinner-icon class="animate-spin text-primary" />
|
|
9429
9455
|
</div>
|
|
9430
9456
|
} @else {
|
|
9431
9457
|
<ul class="space-y-2">
|
|
@@ -9439,18 +9465,18 @@ class ArticleExtracts {
|
|
|
9439
9465
|
</ul>
|
|
9440
9466
|
}
|
|
9441
9467
|
</details>
|
|
9442
|
-
`, isInline: true, dependencies: [{ kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
9468
|
+
`, isInline: true, dependencies: [{ kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: TagsIcon, selector: "tags-icon, TagsIcon", inputs: ["class"] }, { kind: "component", type: SpinnerIcon, selector: "spinner-icon, SpinnerIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
9443
9469
|
}
|
|
9444
9470
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ArticleExtracts, decorators: [{
|
|
9445
9471
|
type: Component,
|
|
9446
9472
|
args: [{
|
|
9447
9473
|
selector: "article-extracts, ArticleExtracts, articleextracts",
|
|
9448
|
-
imports: [TranslocoPipe, ChevronRightIcon, ListItemComponent],
|
|
9474
|
+
imports: [TranslocoPipe, ChevronRightIcon, ListItemComponent, TagsIcon, SpinnerIcon],
|
|
9449
9475
|
template: `
|
|
9450
9476
|
<details class="group" name="advanced-search-panels" open>
|
|
9451
9477
|
<summary [class]="cn('sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3', '')">
|
|
9452
9478
|
<p class="flex items-baseline gap-2 font-semibold">
|
|
9453
|
-
<
|
|
9479
|
+
<tags-icon />
|
|
9454
9480
|
{{ 'extracts' | transloco }}
|
|
9455
9481
|
</p>
|
|
9456
9482
|
|
|
@@ -9459,7 +9485,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
9459
9485
|
|
|
9460
9486
|
@if (loading()) {
|
|
9461
9487
|
<div class="flex h-32 items-center justify-center">
|
|
9462
|
-
<
|
|
9488
|
+
<spinner-icon class="animate-spin text-primary" />
|
|
9463
9489
|
</div>
|
|
9464
9490
|
} @else {
|
|
9465
9491
|
<ul class="space-y-2">
|
|
@@ -9493,7 +9519,7 @@ class ArticleLabels {
|
|
|
9493
9519
|
<details class="group" name="advanced-search-panels">
|
|
9494
9520
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
9495
9521
|
<p class="flex items-baseline gap-2 font-semibold">
|
|
9496
|
-
<
|
|
9522
|
+
<tags-icon />
|
|
9497
9523
|
{{ 'labels' | transloco }}
|
|
9498
9524
|
</p>
|
|
9499
9525
|
|
|
@@ -9503,29 +9529,29 @@ class ArticleLabels {
|
|
|
9503
9529
|
<div>
|
|
9504
9530
|
<ul class="mt-4 flex flex-col flex-wrap gap-2">
|
|
9505
9531
|
<li>
|
|
9506
|
-
<Metadata
|
|
9532
|
+
<Metadata [article]="article()!" [metadata]="labels.public" />
|
|
9507
9533
|
</li>
|
|
9508
9534
|
|
|
9509
9535
|
<li>
|
|
9510
|
-
<Metadata
|
|
9536
|
+
<Metadata [article]="article()!" [metadata]="labels.private" />
|
|
9511
9537
|
</li>
|
|
9512
9538
|
</ul>
|
|
9513
9539
|
</div>
|
|
9514
9540
|
</details>
|
|
9515
9541
|
}
|
|
9516
|
-
`, 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" }] });
|
|
9542
|
+
`, 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, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: TagsIcon, selector: "tags-icon, TagsIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
9517
9543
|
}
|
|
9518
9544
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ArticleLabels, decorators: [{
|
|
9519
9545
|
type: Component,
|
|
9520
9546
|
args: [{
|
|
9521
9547
|
selector: "article-labels, ArticleLabels, articlelabels",
|
|
9522
|
-
imports: [TranslocoPipe, MetadataComponent, ChevronRightIcon],
|
|
9548
|
+
imports: [TranslocoPipe, MetadataComponent, ChevronRightIcon, TagsIcon],
|
|
9523
9549
|
template: `
|
|
9524
9550
|
@if (hasLabels()) {
|
|
9525
9551
|
<details class="group" name="advanced-search-panels">
|
|
9526
9552
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
9527
9553
|
<p class="flex items-baseline gap-2 font-semibold">
|
|
9528
|
-
<
|
|
9554
|
+
<tags-icon />
|
|
9529
9555
|
{{ 'labels' | transloco }}
|
|
9530
9556
|
</p>
|
|
9531
9557
|
|
|
@@ -9535,11 +9561,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
9535
9561
|
<div>
|
|
9536
9562
|
<ul class="mt-4 flex flex-col flex-wrap gap-2">
|
|
9537
9563
|
<li>
|
|
9538
|
-
<Metadata
|
|
9564
|
+
<Metadata [article]="article()!" [metadata]="labels.public" />
|
|
9539
9565
|
</li>
|
|
9540
9566
|
|
|
9541
9567
|
<li>
|
|
9542
|
-
<Metadata
|
|
9568
|
+
<Metadata [article]="article()!" [metadata]="labels.private" />
|
|
9543
9569
|
</li>
|
|
9544
9570
|
</ul>
|
|
9545
9571
|
</div>
|
|
@@ -9578,7 +9604,7 @@ class ArticleSimilarDocuments {
|
|
|
9578
9604
|
<details class="group" name="advanced-search-panels">
|
|
9579
9605
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
9580
9606
|
<p class="flex items-baseline gap-2 font-semibold">
|
|
9581
|
-
<
|
|
9607
|
+
<tags-icon />
|
|
9582
9608
|
{{ 'drawers.similarDocuments' | transloco }}
|
|
9583
9609
|
</p>
|
|
9584
9610
|
|
|
@@ -9600,19 +9626,19 @@ class ArticleSimilarDocuments {
|
|
|
9600
9626
|
</div>
|
|
9601
9627
|
</details>
|
|
9602
9628
|
}
|
|
9603
|
-
`, isInline: true, dependencies: [{ 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: "directive", type: SelectArticleDirective, selector: "[selectArticle]", inputs: ["article", "strategy", "redirectUrl"], outputs: ["selected"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
9629
|
+
`, isInline: true, dependencies: [{ 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, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "directive", type: SelectArticleDirective, selector: "[selectArticle]", inputs: ["article", "strategy", "redirectUrl"], outputs: ["selected"] }, { kind: "component", type: TagsIcon, selector: "tags-icon, TagsIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
9604
9630
|
}
|
|
9605
9631
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ArticleSimilarDocuments, decorators: [{
|
|
9606
9632
|
type: Component,
|
|
9607
9633
|
args: [{
|
|
9608
9634
|
selector: "article-similar-documents, ArticleSimilarDocuments, articlesimilardocuments",
|
|
9609
|
-
imports: [TranslocoPipe, SourceComponent, ListItemComponent, ChevronRightIcon, SelectArticleDirective],
|
|
9635
|
+
imports: [TranslocoPipe, SourceComponent, ListItemComponent, ChevronRightIcon, SelectArticleDirective, TagsIcon],
|
|
9610
9636
|
template: `
|
|
9611
9637
|
@if (similarDocuments().length > 0) {
|
|
9612
9638
|
<details class="group" name="advanced-search-panels">
|
|
9613
9639
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
9614
9640
|
<p class="flex items-baseline gap-2 font-semibold">
|
|
9615
|
-
<
|
|
9641
|
+
<tags-icon />
|
|
9616
9642
|
{{ 'drawers.similarDocuments' | transloco }}
|
|
9617
9643
|
</p>
|
|
9618
9644
|
|
|
@@ -9670,7 +9696,7 @@ class AdvancedSearch {
|
|
|
9670
9696
|
this.queryText.set("");
|
|
9671
9697
|
}
|
|
9672
9698
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AdvancedSearch, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9673
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AdvancedSearch, isStandalone: true, selector: "advanced-search", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, previewStrategy: { classPropertyName: "previewStrategy", publicName: "previewStrategy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, providers: [provideTranslocoScope("drawers")], ngImport: i0, template: "@if (article()) {\n <div\n [class]=\"\n cn(\n 'scroll-stable flex flex-col overflow-x-hidden overflow-y-auto pr-3 pb-6 pl-6',\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=\"mt-6 mb-4 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\n class=\"
|
|
9699
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AdvancedSearch, isStandalone: true, selector: "advanced-search", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, previewStrategy: { classPropertyName: "previewStrategy", publicName: "previewStrategy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, providers: [provideTranslocoScope("drawers")], ngImport: i0, template: "@if (article()) {\r\n <div\r\n [class]=\"\r\n cn(\r\n 'scroll-stable flex flex-col overflow-x-hidden overflow-y-auto pr-3 pb-6 pl-6',\r\n '[&_details]:border-muted-foreground/18 [&_details]:border-b',\r\n '[&_details>summary]:bg-menu [&_details_details]:last:border-b-0',\r\n '[&_details>summary>i>svg]:transition-transform [&_details>summary>i>svg]:duration-300',\r\n '[&>details>summary>i>svg]:group-open/parent:rotate-180'\r\n )\r\n \">\r\n <section class=\"mt-6 mb-4 flex w-full flex-col gap-6\">\r\n <header\r\n id=\"panel-control\"\r\n class=\"focus-within:outline-primary not-focus-within:hover:outline-muted-foreground group flex rounded-2xl focus-within:outline hover:outline\">\r\n <div\r\n class=\"inline-flex grow items-center rounded-s-lg rounded-e-none ps-3\">\r\n <input\r\n id=\"advanced-search-input\"\r\n type=\"search\"\r\n class=\"w-2/3 grow focus:outline-none\"\r\n autocomplete=\"off\"\r\n spellcheck=\"false\"\r\n [attr.placeholder]=\"'drawers.inputPlaceholder' | transloco\"\r\n [attr.aria-label]=\"'drawers.inputPlaceholder' | transloco\"\r\n [ngModel]=\"queryText()\"\r\n (ngModelChange)=\"queryText.set($event)\"\r\n (keydown.enter)=\"executeSearch()\" />\r\n\r\n @if (queryText() !== \"\") {\r\n <button\r\n variant=\"icon\"\r\n size=\"xs\"\r\n [attr.title]=\"'clear' | transloco\"\r\n [attr.aria-label]=\"'clear' | transloco\"\r\n (click)=\"clearInput()\"\r\n (keydown.enter)=\"clearInput()\">\r\n <xmark-icon />\r\n <span class=\"sr-only\">{{ \"clear\" | transloco }}</span>\r\n </button>\r\n }\r\n </div>\r\n\r\n <button\r\n class=\"size-8 rounded-s-none rounded-e-lg\"\r\n [disabled]=\"queryText() === '' || null\"\r\n [attr.title]=\"'search' | transloco\"\r\n [attr.aria-label]=\"'search' | transloco\"\r\n (click)=\"executeSearch()\">\r\n <magnifying-glass-icon />\r\n <span class=\"sr-only\">{{ \"search\" | transloco }}</span>\r\n </button>\r\n </header>\r\n </section>\r\n\r\n <!-- the same name is used everywhere to simulate an accordion -->\r\n <!-- extracts -->\r\n <article-extracts [article]=\"article()\" />\r\n\r\n <!-- labels -->\r\n <article-labels [article]=\"article()\" />\r\n\r\n <!-- entities -->\r\n <article-entities [article]=\"article()\" />\r\n\r\n <!-- similar documents -->\r\n <article-similar-documents\r\n [article]=\"article()\"\r\n [strategy]=\"previewStrategy()\"\r\n (selected)=\"selected.emit($event)\" />\r\n </div>\r\n}\r\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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: ArticleExtracts, selector: "article-extracts, ArticleExtracts, articleextracts", inputs: ["article"] }, { kind: "component", type: ArticleEntities, selector: "article-entities,ArticleEntities,articleentities", inputs: ["article"] }, { kind: "component", type: ArticleLabels, selector: "article-labels, ArticleLabels, articlelabels", inputs: ["article"] }, { kind: "component", type: ArticleSimilarDocuments, selector: "article-similar-documents, ArticleSimilarDocuments, articlesimilardocuments", inputs: ["article", "strategy"], outputs: ["selected"] }, { kind: "component", type: XMarkIcon, selector: "XMarkIcon, xmark-icon, x-mark-icon", inputs: ["class"] }, { kind: "component", type: MagnifyingGlassIcon, selector: "magnifying-glass-icon, MagnifyingGlassIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
9674
9700
|
}
|
|
9675
9701
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AdvancedSearch, decorators: [{
|
|
9676
9702
|
type: Component,
|
|
@@ -9681,8 +9707,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
9681
9707
|
ArticleExtracts,
|
|
9682
9708
|
ArticleEntities,
|
|
9683
9709
|
ArticleLabels,
|
|
9684
|
-
ArticleSimilarDocuments
|
|
9685
|
-
|
|
9710
|
+
ArticleSimilarDocuments,
|
|
9711
|
+
XMarkIcon,
|
|
9712
|
+
MagnifyingGlassIcon
|
|
9713
|
+
], template: "@if (article()) {\r\n <div\r\n [class]=\"\r\n cn(\r\n 'scroll-stable flex flex-col overflow-x-hidden overflow-y-auto pr-3 pb-6 pl-6',\r\n '[&_details]:border-muted-foreground/18 [&_details]:border-b',\r\n '[&_details>summary]:bg-menu [&_details_details]:last:border-b-0',\r\n '[&_details>summary>i>svg]:transition-transform [&_details>summary>i>svg]:duration-300',\r\n '[&>details>summary>i>svg]:group-open/parent:rotate-180'\r\n )\r\n \">\r\n <section class=\"mt-6 mb-4 flex w-full flex-col gap-6\">\r\n <header\r\n id=\"panel-control\"\r\n class=\"focus-within:outline-primary not-focus-within:hover:outline-muted-foreground group flex rounded-2xl focus-within:outline hover:outline\">\r\n <div\r\n class=\"inline-flex grow items-center rounded-s-lg rounded-e-none ps-3\">\r\n <input\r\n id=\"advanced-search-input\"\r\n type=\"search\"\r\n class=\"w-2/3 grow focus:outline-none\"\r\n autocomplete=\"off\"\r\n spellcheck=\"false\"\r\n [attr.placeholder]=\"'drawers.inputPlaceholder' | transloco\"\r\n [attr.aria-label]=\"'drawers.inputPlaceholder' | transloco\"\r\n [ngModel]=\"queryText()\"\r\n (ngModelChange)=\"queryText.set($event)\"\r\n (keydown.enter)=\"executeSearch()\" />\r\n\r\n @if (queryText() !== \"\") {\r\n <button\r\n variant=\"icon\"\r\n size=\"xs\"\r\n [attr.title]=\"'clear' | transloco\"\r\n [attr.aria-label]=\"'clear' | transloco\"\r\n (click)=\"clearInput()\"\r\n (keydown.enter)=\"clearInput()\">\r\n <xmark-icon />\r\n <span class=\"sr-only\">{{ \"clear\" | transloco }}</span>\r\n </button>\r\n }\r\n </div>\r\n\r\n <button\r\n class=\"size-8 rounded-s-none rounded-e-lg\"\r\n [disabled]=\"queryText() === '' || null\"\r\n [attr.title]=\"'search' | transloco\"\r\n [attr.aria-label]=\"'search' | transloco\"\r\n (click)=\"executeSearch()\">\r\n <magnifying-glass-icon />\r\n <span class=\"sr-only\">{{ \"search\" | transloco }}</span>\r\n </button>\r\n </header>\r\n </section>\r\n\r\n <!-- the same name is used everywhere to simulate an accordion -->\r\n <!-- extracts -->\r\n <article-extracts [article]=\"article()\" />\r\n\r\n <!-- labels -->\r\n <article-labels [article]=\"article()\" />\r\n\r\n <!-- entities -->\r\n <article-entities [article]=\"article()\" />\r\n\r\n <!-- similar documents -->\r\n <article-similar-documents\r\n [article]=\"article()\"\r\n [strategy]=\"previewStrategy()\"\r\n (selected)=\"selected.emit($event)\" />\r\n </div>\r\n}\r\n", styles: [":host{--panel-max-height: none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}\n"] }]
|
|
9686
9714
|
}], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: true }] }], previewStrategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "previewStrategy", required: false }] }], selected: [{ type: i0.Output, args: ["selected"] }] } });
|
|
9687
9715
|
|
|
9688
9716
|
var Alert;
|
|
@@ -9951,7 +9979,7 @@ class AlertDialog {
|
|
|
9951
9979
|
</DialogFooter>
|
|
9952
9980
|
</DialogContent>
|
|
9953
9981
|
</dialog>
|
|
9954
|
-
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "component", type:
|
|
9982
|
+
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: LoadingCircleIcon, selector: "loading-circle, LoadingCircle, loadingcircle, loading-circle-icon, LoadingCircleIcon, loadingcircleicon", inputs: ["class"] }, { kind: "component", type: CircleCheckIcon, selector: "circle-check, CircleCheck, circlecheck, circle-check-icon, CircleCheckIcon, circlecheckicon", inputs: ["class"] }, { kind: "directive", type: SelectOptionDirective, selector: "option", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
9955
9983
|
}
|
|
9956
9984
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AlertDialog, decorators: [{
|
|
9957
9985
|
type: Component,
|
|
@@ -9966,8 +9994,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
9966
9994
|
DialogFooterComponent,
|
|
9967
9995
|
InputComponent,
|
|
9968
9996
|
ChevronRightIcon,
|
|
9969
|
-
|
|
9970
|
-
|
|
9997
|
+
LoadingCircleIcon,
|
|
9998
|
+
CircleCheckIcon,
|
|
9971
9999
|
SelectOptionDirective
|
|
9972
10000
|
], providers: [provideTranslocoScope("alerts")], template: `
|
|
9973
10001
|
<dialog #dialog>
|
|
@@ -10127,11 +10155,11 @@ class AlertsComponent {
|
|
|
10127
10155
|
this.tmpAlerts.splice(drop.currentIndex, 0, this.tmpAlerts.splice(drop.previousIndex, 1)[0]);
|
|
10128
10156
|
}
|
|
10129
10157
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AlertsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10130
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AlertsComponent, isStandalone: true, selector: "Alerts", providers: [provideTranslocoScope('alerts')], viewQueries: [{ propertyName: "alertFormDialog", first: true, predicate: AlertDialog, descendants: true, isSignal: true }], ngImport: i0, template: "<ul\r\n role=\"list\"\r\n class=\"flex min-w-80 flex-col p-2\"\r\n cdkDropList\r\n [cdkDropListData]=\"tmpAlerts\"\r\n [cdkDropListDisabled]=\"!reordering()\"\r\n (cdkDropListDropped)=\"dropped($event)\">\r\n @if (floating) {\r\n <label class=\"text-xl font-bold\">{{ \"alerts.label\" | transloco }}</label>\r\n <Separator />\r\n }\r\n @for (alert of tmpAlerts; track $index) {\r\n <li\r\n role=\"listitem\"\r\n class=\"group h-10\"\r\n tabindex=\"0\"\r\n cdkDrag\r\n (click)=\"onClick($index)\"\r\n (keydown.enter)=\"onClick($index)\">\r\n <
|
|
10158
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AlertsComponent, isStandalone: true, selector: "Alerts", providers: [provideTranslocoScope('alerts')], viewQueries: [{ propertyName: "alertFormDialog", first: true, predicate: AlertDialog, descendants: true, isSignal: true }], ngImport: i0, template: "<ul\r\n role=\"list\"\r\n class=\"flex min-w-80 flex-col p-2\"\r\n cdkDropList\r\n [cdkDropListData]=\"tmpAlerts\"\r\n [cdkDropListDisabled]=\"!reordering()\"\r\n (cdkDropListDropped)=\"dropped($event)\">\r\n @if (floating) {\r\n <label class=\"text-xl font-bold\">{{ \"alerts.label\" | transloco }}</label>\r\n <Separator />\r\n }\r\n @for (alert of tmpAlerts; track $index) {\r\n <li\r\n role=\"listitem\"\r\n class=\"group h-10\"\r\n tabindex=\"0\"\r\n cdkDrag\r\n (click)=\"onClick($index)\"\r\n (keydown.enter)=\"onClick($index)\">\r\n <bell-icon class=\"shrink-0\" />\r\n <p class=\"line-clamp-1\">{{ alert.name }}</p>\r\n @if (!reordering()) {\r\n @let openBookmark = \"bookmarks.openBookmark\" | transloco;\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n title=\"{{ openBookmark }}\"\r\n class=\"text-destructive ms-auto group-hover:visible\"\r\n [attr.title]=\"openBookmark\"\r\n [attr.aria-label]=\"openBookmark\"\r\n (click)=\"deleteAlert($event, $index)\">\r\n <TrashIcon />\r\n </button>\r\n } @else {\r\n <bars-icon class=\"ms-auto\" />\r\n }\r\n </li>\r\n } @empty {\r\n <span class=\"py-4 text-center text-neutral-500\">\r\n {{ \"alerts.noAlerts\" | transloco }}\r\n </span>\r\n }\r\n</ul>\r\n<div class=\"flex flex-col gap-2 p-2\">\r\n <button\r\n variant=\"outline\"\r\n class=\"w-full\"\r\n tabindex=\"0\"\r\n [attr.title]=\"'alerts.manageAlerts' | transloco\"\r\n [disabled]=\"!alerts().length\"\r\n (click)=\"reorder()\">\r\n {{ (reordering() ? \"save\" : \"alerts.manageAlerts\") | transloco }}\r\n </button>\r\n <button\r\n class=\"w-full\"\r\n [attr.title]=\"'alerts.createAlert' | transloco\"\r\n (click)=\"createAlert()\">\r\n {{ \"alerts.createAlert\" | transloco }}\r\n </button>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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: "directive", type: Separator, selector: "separator, Separator", inputs: ["class", "orientation"] }, { kind: "component", type: BellIcon, selector: "bell-icon, BellIcon", inputs: ["class"] }, { kind: "component", type: TrashIcon, selector: "trash-icon, TrashIcon", inputs: ["class"] }, { kind: "component", type: BarsIcon, selector: "bars-icon, BarsIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
10131
10159
|
}
|
|
10132
10160
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AlertsComponent, decorators: [{
|
|
10133
10161
|
type: Component,
|
|
10134
|
-
args: [{ selector: 'Alerts', standalone: true, imports: [TranslocoPipe, ButtonComponent, ListItemComponent, DragDropModule, Separator], providers: [provideTranslocoScope('alerts')], template: "<ul\r\n role=\"list\"\r\n class=\"flex min-w-80 flex-col p-2\"\r\n cdkDropList\r\n [cdkDropListData]=\"tmpAlerts\"\r\n [cdkDropListDisabled]=\"!reordering()\"\r\n (cdkDropListDropped)=\"dropped($event)\">\r\n @if (floating) {\r\n <label class=\"text-xl font-bold\">{{ \"alerts.label\" | transloco }}</label>\r\n <Separator />\r\n }\r\n @for (alert of tmpAlerts; track $index) {\r\n <li\r\n role=\"listitem\"\r\n class=\"group h-10\"\r\n tabindex=\"0\"\r\n cdkDrag\r\n (click)=\"onClick($index)\"\r\n (keydown.enter)=\"onClick($index)\">\r\n <
|
|
10162
|
+
args: [{ selector: 'Alerts', standalone: true, imports: [TranslocoPipe, ButtonComponent, ListItemComponent, DragDropModule, Separator, BellIcon, TrashIcon, BarsIcon], providers: [provideTranslocoScope('alerts')], template: "<ul\r\n role=\"list\"\r\n class=\"flex min-w-80 flex-col p-2\"\r\n cdkDropList\r\n [cdkDropListData]=\"tmpAlerts\"\r\n [cdkDropListDisabled]=\"!reordering()\"\r\n (cdkDropListDropped)=\"dropped($event)\">\r\n @if (floating) {\r\n <label class=\"text-xl font-bold\">{{ \"alerts.label\" | transloco }}</label>\r\n <Separator />\r\n }\r\n @for (alert of tmpAlerts; track $index) {\r\n <li\r\n role=\"listitem\"\r\n class=\"group h-10\"\r\n tabindex=\"0\"\r\n cdkDrag\r\n (click)=\"onClick($index)\"\r\n (keydown.enter)=\"onClick($index)\">\r\n <bell-icon class=\"shrink-0\" />\r\n <p class=\"line-clamp-1\">{{ alert.name }}</p>\r\n @if (!reordering()) {\r\n @let openBookmark = \"bookmarks.openBookmark\" | transloco;\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n title=\"{{ openBookmark }}\"\r\n class=\"text-destructive ms-auto group-hover:visible\"\r\n [attr.title]=\"openBookmark\"\r\n [attr.aria-label]=\"openBookmark\"\r\n (click)=\"deleteAlert($event, $index)\">\r\n <TrashIcon />\r\n </button>\r\n } @else {\r\n <bars-icon class=\"ms-auto\" />\r\n }\r\n </li>\r\n } @empty {\r\n <span class=\"py-4 text-center text-neutral-500\">\r\n {{ \"alerts.noAlerts\" | transloco }}\r\n </span>\r\n }\r\n</ul>\r\n<div class=\"flex flex-col gap-2 p-2\">\r\n <button\r\n variant=\"outline\"\r\n class=\"w-full\"\r\n tabindex=\"0\"\r\n [attr.title]=\"'alerts.manageAlerts' | transloco\"\r\n [disabled]=\"!alerts().length\"\r\n (click)=\"reorder()\">\r\n {{ (reordering() ? \"save\" : \"alerts.manageAlerts\") | transloco }}\r\n </button>\r\n <button\r\n class=\"w-full\"\r\n [attr.title]=\"'alerts.createAlert' | transloco\"\r\n (click)=\"createAlert()\">\r\n {{ \"alerts.createAlert\" | transloco }}\r\n </button>\r\n</div>\r\n" }]
|
|
10135
10163
|
}], ctorParameters: () => [], propDecorators: { alertFormDialog: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AlertDialog), { isSignal: true }] }] } });
|
|
10136
10164
|
|
|
10137
10165
|
class ChangePasswordComponent {
|
|
@@ -10279,9 +10307,9 @@ class ChangePasswordComponent {
|
|
|
10279
10307
|
<InputGroupAddon align="inline-end"
|
|
10280
10308
|
(click)="currentPasswordType = (currentPasswordType === 'password' ? 'text' : 'password')">
|
|
10281
10309
|
@if(currentPasswordType === 'text') {
|
|
10282
|
-
<
|
|
10310
|
+
<eye-slash-icon class="cursor-pointer" />
|
|
10283
10311
|
} @else {
|
|
10284
|
-
<
|
|
10312
|
+
<eye-icon class="cursor-pointer" />
|
|
10285
10313
|
}
|
|
10286
10314
|
</InputGroupAddon>
|
|
10287
10315
|
</InputGroup>
|
|
@@ -10304,9 +10332,9 @@ class ChangePasswordComponent {
|
|
|
10304
10332
|
<InputGroupAddon align="inline-end"
|
|
10305
10333
|
(click)="newPasswordType = (newPasswordType === 'password' ? 'text' : 'password')">
|
|
10306
10334
|
@if(newPasswordType === 'text') {
|
|
10307
|
-
<
|
|
10335
|
+
<eye-slash-icon class="cursor-pointer" />
|
|
10308
10336
|
} @else {
|
|
10309
|
-
<
|
|
10337
|
+
<eye-icon class="cursor-pointer" />
|
|
10310
10338
|
}
|
|
10311
10339
|
</InputGroupAddon>
|
|
10312
10340
|
</InputGroup>
|
|
@@ -10330,9 +10358,9 @@ class ChangePasswordComponent {
|
|
|
10330
10358
|
<InputGroupAddon align="inline-end"
|
|
10331
10359
|
(click)="confirmPasswordType = (confirmPasswordType === 'password' ? 'text' : 'password')">
|
|
10332
10360
|
@if(confirmPasswordType === 'text') {
|
|
10333
|
-
<
|
|
10361
|
+
<eye-slash-icon class="cursor-pointer" />
|
|
10334
10362
|
} @else {
|
|
10335
|
-
<
|
|
10363
|
+
<eye-icon class="cursor-pointer" />
|
|
10336
10364
|
}
|
|
10337
10365
|
</InputGroupAddon>
|
|
10338
10366
|
</InputGroup>
|
|
@@ -10345,7 +10373,7 @@ class ChangePasswordComponent {
|
|
|
10345
10373
|
</CardContent>
|
|
10346
10374
|
|
|
10347
10375
|
<CardFooter class="mt-8 flex justify-end gap-3">
|
|
10348
|
-
<button variant="ghost"
|
|
10376
|
+
<button variant="ghost" (click)="onCancel()">
|
|
10349
10377
|
{{ 'cancel' | transloco }}
|
|
10350
10378
|
</button>
|
|
10351
10379
|
<button
|
|
@@ -10356,7 +10384,7 @@ class ChangePasswordComponent {
|
|
|
10356
10384
|
</button>
|
|
10357
10385
|
</CardFooter>
|
|
10358
10386
|
</Card>
|
|
10359
|
-
`, isInline: true, styles: ["input::-ms-reveal{display: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.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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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" }] });
|
|
10387
|
+
`, isInline: true, styles: ["input::-ms-reveal{display: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.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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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: "component", type: EyeSlashIcon, selector: "eye-slash-icon, EyeSlashIcon", inputs: ["class"] }, { kind: "component", type: EyeIcon, selector: "eye-icon, EyeIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
10360
10388
|
}
|
|
10361
10389
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ChangePasswordComponent, decorators: [{
|
|
10362
10390
|
type: Component,
|
|
@@ -10371,7 +10399,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
10371
10399
|
CardFooterComponent,
|
|
10372
10400
|
InputGroupInput,
|
|
10373
10401
|
InputGroupComponent,
|
|
10374
|
-
InputGroupAddonComponent
|
|
10402
|
+
InputGroupAddonComponent,
|
|
10403
|
+
EyeSlashIcon,
|
|
10404
|
+
EyeIcon
|
|
10375
10405
|
], template: `
|
|
10376
10406
|
<Card hover="no" cdkTrapFocus cdkTrapFocusAutoCapture="true" class="bg-card rounded-xl shadow-sm">
|
|
10377
10407
|
<CardHeader class="flex flex-col items-center gap-3">
|
|
@@ -10403,9 +10433,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
10403
10433
|
<InputGroupAddon align="inline-end"
|
|
10404
10434
|
(click)="currentPasswordType = (currentPasswordType === 'password' ? 'text' : 'password')">
|
|
10405
10435
|
@if(currentPasswordType === 'text') {
|
|
10406
|
-
<
|
|
10436
|
+
<eye-slash-icon class="cursor-pointer" />
|
|
10407
10437
|
} @else {
|
|
10408
|
-
<
|
|
10438
|
+
<eye-icon class="cursor-pointer" />
|
|
10409
10439
|
}
|
|
10410
10440
|
</InputGroupAddon>
|
|
10411
10441
|
</InputGroup>
|
|
@@ -10428,9 +10458,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
10428
10458
|
<InputGroupAddon align="inline-end"
|
|
10429
10459
|
(click)="newPasswordType = (newPasswordType === 'password' ? 'text' : 'password')">
|
|
10430
10460
|
@if(newPasswordType === 'text') {
|
|
10431
|
-
<
|
|
10461
|
+
<eye-slash-icon class="cursor-pointer" />
|
|
10432
10462
|
} @else {
|
|
10433
|
-
<
|
|
10463
|
+
<eye-icon class="cursor-pointer" />
|
|
10434
10464
|
}
|
|
10435
10465
|
</InputGroupAddon>
|
|
10436
10466
|
</InputGroup>
|
|
@@ -10454,9 +10484,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
10454
10484
|
<InputGroupAddon align="inline-end"
|
|
10455
10485
|
(click)="confirmPasswordType = (confirmPasswordType === 'password' ? 'text' : 'password')">
|
|
10456
10486
|
@if(confirmPasswordType === 'text') {
|
|
10457
|
-
<
|
|
10487
|
+
<eye-slash-icon class="cursor-pointer" />
|
|
10458
10488
|
} @else {
|
|
10459
|
-
<
|
|
10489
|
+
<eye-icon class="cursor-pointer" />
|
|
10460
10490
|
}
|
|
10461
10491
|
</InputGroupAddon>
|
|
10462
10492
|
</InputGroup>
|
|
@@ -10469,7 +10499,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
10469
10499
|
</CardContent>
|
|
10470
10500
|
|
|
10471
10501
|
<CardFooter class="mt-8 flex justify-end gap-3">
|
|
10472
|
-
<button variant="ghost"
|
|
10502
|
+
<button variant="ghost" (click)="onCancel()">
|
|
10473
10503
|
{{ 'cancel' | transloco }}
|
|
10474
10504
|
</button>
|
|
10475
10505
|
<button
|
|
@@ -10557,7 +10587,7 @@ class ForgotPasswordComponent {
|
|
|
10557
10587
|
|
|
10558
10588
|
</CardFooter>
|
|
10559
10589
|
</Card>
|
|
10560
|
-
`, 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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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" }] });
|
|
10590
|
+
`, 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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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" }] });
|
|
10561
10591
|
}
|
|
10562
10592
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ForgotPasswordComponent, decorators: [{
|
|
10563
10593
|
type: Component,
|
|
@@ -10804,7 +10834,7 @@ class SignInComponent {
|
|
|
10804
10834
|
} @else {
|
|
10805
10835
|
<app-wait />
|
|
10806
10836
|
}
|
|
10807
|
-
`, isInline: true, styles: ["input{background-color:var(--background)}\n"], 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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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: "component", type: LoadingComponent, selector: "app-wait" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
10837
|
+
`, isInline: true, styles: ["input{background-color:var(--background)}\n"], 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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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: "component", type: LoadingComponent, selector: "app-wait" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
10808
10838
|
}
|
|
10809
10839
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SignInComponent, decorators: [{
|
|
10810
10840
|
type: Component,
|
|
@@ -10962,6 +10992,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
10962
10992
|
}], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }] } });
|
|
10963
10993
|
|
|
10964
10994
|
class BookmarkButtonComponent {
|
|
10995
|
+
variant = input("ghost", ...(ngDevMode ? [{ debugName: "variant" }] : []));
|
|
10996
|
+
size = input("md", ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
10965
10997
|
article = input.required(...(ngDevMode ? [{ debugName: "article" }] : []));
|
|
10966
10998
|
userSettingsStore = inject(UserSettingsStore);
|
|
10967
10999
|
route = inject(ActivatedRoute);
|
|
@@ -10991,35 +11023,40 @@ class BookmarkButtonComponent {
|
|
|
10991
11023
|
}
|
|
10992
11024
|
}
|
|
10993
11025
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: BookmarkButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10994
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: BookmarkButtonComponent, isStandalone: true, selector: "bookmark-button, bookmarkbutton, BookmarkButton", inputs: {
|
|
11026
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: BookmarkButtonComponent, isStandalone: true, selector: "bookmark-button, bookmarkbutton, BookmarkButton", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.visible": "isBookmarked()", "title": "title()" }, classAttribute: "cursor-pointer" }, providers: [provideTranslocoScope("bookmark")], ngImport: i0, template: `
|
|
11027
|
+
<button [variant]="variant()" [size]="size()" [iconOnly]="true" (click)="bookmark($event)">
|
|
10995
11028
|
@if (isBookmarked()) {
|
|
10996
11029
|
<bookmark-icon solid />
|
|
10997
11030
|
}
|
|
10998
11031
|
@else {
|
|
10999
11032
|
<bookmark-icon />
|
|
11000
|
-
}
|
|
11033
|
+
}
|
|
11034
|
+
</button>
|
|
11035
|
+
`, isInline: true, dependencies: [{ kind: "component", type: BookmarkIcon, selector: "bookmark-icon, BookmarkIcon", inputs: ["class", "solid"] }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }] });
|
|
11001
11036
|
}
|
|
11002
11037
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: BookmarkButtonComponent, decorators: [{
|
|
11003
11038
|
type: Component,
|
|
11004
11039
|
args: [{
|
|
11005
11040
|
selector: "bookmark-button, bookmarkbutton, BookmarkButton",
|
|
11006
|
-
imports: [BookmarkIcon],
|
|
11041
|
+
imports: [BookmarkIcon, ButtonComponent],
|
|
11007
11042
|
providers: [provideTranslocoScope("bookmark")],
|
|
11008
11043
|
template: `
|
|
11044
|
+
<button [variant]="variant()" [size]="size()" [iconOnly]="true" (click)="bookmark($event)">
|
|
11009
11045
|
@if (isBookmarked()) {
|
|
11010
11046
|
<bookmark-icon solid />
|
|
11011
11047
|
}
|
|
11012
11048
|
@else {
|
|
11013
11049
|
<bookmark-icon />
|
|
11014
|
-
}
|
|
11050
|
+
}
|
|
11051
|
+
</button>
|
|
11052
|
+
`,
|
|
11015
11053
|
host: {
|
|
11016
11054
|
class: "cursor-pointer",
|
|
11017
11055
|
"[class.visible]": "isBookmarked()",
|
|
11018
|
-
"[title]": "title()"
|
|
11019
|
-
"(click)": "bookmark($event)"
|
|
11056
|
+
"[title]": "title()"
|
|
11020
11057
|
}
|
|
11021
11058
|
}]
|
|
11022
|
-
}], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: true }] }] } });
|
|
11059
|
+
}], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: true }] }] } });
|
|
11023
11060
|
|
|
11024
11061
|
const BOOKMARKS_OPTIONS = {
|
|
11025
11062
|
itemsPerPage: 10,
|
|
@@ -11100,7 +11137,7 @@ class BookmarksComponent {
|
|
|
11100
11137
|
this.range.set(this.range() + (this.config.itemsPerPage ?? 10));
|
|
11101
11138
|
}
|
|
11102
11139
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: BookmarksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11103
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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) {\r\n <div class=\"p-2\">\r\n <label class=\"text-xl font-bold\">{{ \"bookmarks.label\" | transloco }}</label>\r\n <Separator />\r\n </div>\r\n}\r\n\r\n<ul class=\"flex max-h-[460px] flex-col overflow-auto\" role=\"list\">\r\n @for (bookmark of paginatedBookmarks(); track $index) {\r\n <li\r\n role=\"listitem\"\r\n class=\"group h-10\"\r\n tabindex=\"0\"\r\n (click)=\"onClick(bookmark)\"\r\n (keydown.enter)=\"onClick(bookmark)\">\r\n <BookmarkIcon solid class=\"shrink-0\" />\r\n\r\n <p class=\"line-clamp-1\">{{ bookmark.label }}</p>\r\n\r\n @if (bookmark.author) {\r\n <Badge
|
|
11140
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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) {\r\n <div class=\"p-2\">\r\n <label class=\"text-xl font-bold\">{{ \"bookmarks.label\" | transloco }}</label>\r\n <Separator />\r\n </div>\r\n}\r\n\r\n<ul class=\"flex max-h-[460px] flex-col overflow-auto\" role=\"list\">\r\n @for (bookmark of paginatedBookmarks(); track $index) {\r\n <li\r\n role=\"listitem\"\r\n class=\"group h-10\"\r\n tabindex=\"0\"\r\n (click)=\"onClick(bookmark)\"\r\n (keydown.enter)=\"onClick(bookmark)\">\r\n <BookmarkIcon solid class=\"shrink-0\" />\r\n\r\n <p class=\"line-clamp-1\">{{ bookmark.label }}</p>\r\n\r\n @if (bookmark.author) {\r\n <Badge class=\"text-grey-500 text-xs\">\r\n <UserIcon class=\"size-3\" />\r\n <span class=\"line-clamp-1\">{{ bookmark.author }}</span>\r\n </Badge>\r\n }\r\n @if (bookmark.parentFolder) {\r\n <Badge class=\"text-grey-500 text-xs\">\r\n <FolderIcon class=\"size-3\" />\r\n <span class=\"line-clamp-1\">{{ bookmark.parentFolder }}</span>\r\n </Badge>\r\n }\r\n\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n title=\"{{ 'bookmarks.openBookmark' | transloco }}\"\r\n class=\"text-destructive ms-auto group-hover:visible\"\r\n [attr.title]=\"'bookmarks.removeBookmark' | transloco\"\r\n [attr.aria-label]=\"'bookmarks.removeBookmark' | transloco\"\r\n (click)=\"onDelete(bookmark, $event)\">\r\n <TrashIcon />\r\n </button>\r\n </li>\r\n } @empty {\r\n <span class=\"py-4 text-center text-neutral-500\">\r\n {{ \"bookmarks.noBookmarks\" | transloco }}\r\n </span>\r\n }\r\n</ul>\r\n\r\n@if (paginatedBookmarks().length > 0) {\r\n <div class=\"flex flex-col px-2\">\r\n @if (hasMore() && config.showLoadMore) {\r\n @let loadMoreLabel = \"loadMore\" | transloco;\r\n <button\r\n variant=\"ghost\"\r\n class=\"w-full\"\r\n tabindex=\"0\"\r\n [attr.title]=\"loadMoreLabel\"\r\n (click)=\"loadMore($event)\">\r\n {{ loadMoreLabel }}\r\n </button>\r\n }\r\n @let seeMoreLabel = \"seeMore\" | transloco;\r\n <button\r\n variant=\"link\"\r\n class=\"ml-auto\"\r\n [attr.title]=\"seeMoreLabel\"\r\n [routerLink]=\"[config.routerLink]\">\r\n {{ seeMoreLabel }}\r\n </button>\r\n </div>\r\n}\r\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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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", "scheme", "size"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
11104
11141
|
}
|
|
11105
11142
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: BookmarksComponent, decorators: [{
|
|
11106
11143
|
type: Component,
|
|
@@ -11115,7 +11152,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
11115
11152
|
TrashIcon,
|
|
11116
11153
|
FolderIcon,
|
|
11117
11154
|
BadgeComponent
|
|
11118
|
-
], providers: [provideTranslocoScope("bookmarks")], template: "@if (floating) {\r\n <div class=\"p-2\">\r\n <label class=\"text-xl font-bold\">{{ \"bookmarks.label\" | transloco }}</label>\r\n <Separator />\r\n </div>\r\n}\r\n\r\n<ul class=\"flex max-h-[460px] flex-col overflow-auto\" role=\"list\">\r\n @for (bookmark of paginatedBookmarks(); track $index) {\r\n <li\r\n role=\"listitem\"\r\n class=\"group h-10\"\r\n tabindex=\"0\"\r\n (click)=\"onClick(bookmark)\"\r\n (keydown.enter)=\"onClick(bookmark)\">\r\n <BookmarkIcon solid class=\"shrink-0\" />\r\n\r\n <p class=\"line-clamp-1\">{{ bookmark.label }}</p>\r\n\r\n @if (bookmark.author) {\r\n <Badge
|
|
11155
|
+
], providers: [provideTranslocoScope("bookmarks")], template: "@if (floating) {\r\n <div class=\"p-2\">\r\n <label class=\"text-xl font-bold\">{{ \"bookmarks.label\" | transloco }}</label>\r\n <Separator />\r\n </div>\r\n}\r\n\r\n<ul class=\"flex max-h-[460px] flex-col overflow-auto\" role=\"list\">\r\n @for (bookmark of paginatedBookmarks(); track $index) {\r\n <li\r\n role=\"listitem\"\r\n class=\"group h-10\"\r\n tabindex=\"0\"\r\n (click)=\"onClick(bookmark)\"\r\n (keydown.enter)=\"onClick(bookmark)\">\r\n <BookmarkIcon solid class=\"shrink-0\" />\r\n\r\n <p class=\"line-clamp-1\">{{ bookmark.label }}</p>\r\n\r\n @if (bookmark.author) {\r\n <Badge class=\"text-grey-500 text-xs\">\r\n <UserIcon class=\"size-3\" />\r\n <span class=\"line-clamp-1\">{{ bookmark.author }}</span>\r\n </Badge>\r\n }\r\n @if (bookmark.parentFolder) {\r\n <Badge class=\"text-grey-500 text-xs\">\r\n <FolderIcon class=\"size-3\" />\r\n <span class=\"line-clamp-1\">{{ bookmark.parentFolder }}</span>\r\n </Badge>\r\n }\r\n\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n title=\"{{ 'bookmarks.openBookmark' | transloco }}\"\r\n class=\"text-destructive ms-auto group-hover:visible\"\r\n [attr.title]=\"'bookmarks.removeBookmark' | transloco\"\r\n [attr.aria-label]=\"'bookmarks.removeBookmark' | transloco\"\r\n (click)=\"onDelete(bookmark, $event)\">\r\n <TrashIcon />\r\n </button>\r\n </li>\r\n } @empty {\r\n <span class=\"py-4 text-center text-neutral-500\">\r\n {{ \"bookmarks.noBookmarks\" | transloco }}\r\n </span>\r\n }\r\n</ul>\r\n\r\n@if (paginatedBookmarks().length > 0) {\r\n <div class=\"flex flex-col px-2\">\r\n @if (hasMore() && config.showLoadMore) {\r\n @let loadMoreLabel = \"loadMore\" | transloco;\r\n <button\r\n variant=\"ghost\"\r\n class=\"w-full\"\r\n tabindex=\"0\"\r\n [attr.title]=\"loadMoreLabel\"\r\n (click)=\"loadMore($event)\">\r\n {{ loadMoreLabel }}\r\n </button>\r\n }\r\n @let seeMoreLabel = \"seeMore\" | transloco;\r\n <button\r\n variant=\"link\"\r\n class=\"ml-auto\"\r\n [attr.title]=\"seeMoreLabel\"\r\n [routerLink]=\"[config.routerLink]\">\r\n {{ seeMoreLabel }}\r\n </button>\r\n </div>\r\n}\r\n", styles: [":host ul{scrollbar-width:thin}\n"] }]
|
|
11119
11156
|
}], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }] } });
|
|
11120
11157
|
|
|
11121
11158
|
class DeleteCollectionDialog {
|
|
@@ -11158,7 +11195,7 @@ class DeleteCollectionDialog {
|
|
|
11158
11195
|
</DialogFooter>
|
|
11159
11196
|
</DialogContent>
|
|
11160
11197
|
</dialog>
|
|
11161
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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" }] });
|
|
11198
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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" }] });
|
|
11162
11199
|
}
|
|
11163
11200
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DeleteCollectionDialog, decorators: [{
|
|
11164
11201
|
type: Component,
|
|
@@ -11240,7 +11277,7 @@ class CollectionsComponent {
|
|
|
11240
11277
|
this.range.set(this.range() + (this.config.itemsPerPage ?? 10));
|
|
11241
11278
|
}
|
|
11242
11279
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: CollectionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11243
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: CollectionsComponent, isStandalone: true, selector: "app-collections, 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) {\r\n <div class=\"p-2\">\r\n <label class=\"text-xl font-bold\">{{\r\n \"collections.label\" | transloco\r\n }}</label>\r\n <Separator />\r\n </div>\r\n}\r\n\r\n<ul class=\"flex max-h-[460px] flex-col overflow-auto\">\r\n @for (collection of paginatedCollections(); track $index) {\r\n <li\r\n role=\"listitem\"\r\n class=\"group grid grid-cols-[min-content_auto_min-content] items-center\"\r\n tabindex=\"0\"\r\n (click)=\"onClick(collection)\"\r\n (keydown.enter)=\"onClick(collection)\">\r\n <
|
|
11280
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: CollectionsComponent, isStandalone: true, selector: "app-collections, 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) {\r\n <div class=\"p-2\">\r\n <label class=\"text-xl font-bold\">{{\r\n \"collections.label\" | transloco\r\n }}</label>\r\n <Separator />\r\n </div>\r\n}\r\n\r\n<ul class=\"flex max-h-[460px] flex-col overflow-auto\">\r\n @for (collection of paginatedCollections(); track $index) {\r\n <li\r\n role=\"listitem\"\r\n class=\"group grid grid-cols-[min-content_auto_min-content] items-center\"\r\n tabindex=\"0\"\r\n (click)=\"onClick(collection)\"\r\n (keydown.enter)=\"onClick(collection)\">\r\n <inbox-icon />\r\n\r\n <p class=\"line-clamp-1\">{{ collection.name }}</p>\r\n\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive invisible group-hover:visible\"\r\n title=\"{{ 'collections.deleteCollection' | transloco }}\"\r\n [attr.aria-label]=\"'collections.deleteCollection' | transloco\"\r\n (click)=\"onDelete(collection, $index, $event)\">\r\n <TrashIcon />\r\n </button>\r\n </li>\r\n } @empty {\r\n <span class=\"py-4 text-center text-neutral-500\">\r\n {{ \"collections.noCollections\" | transloco }}\r\n </span>\r\n }\r\n</ul>\r\n\r\n@if (paginatedCollections().length > 0) {\r\n <div class=\"flex flex-col px-2\">\r\n @if (hasMore() && config.showLoadMore) {\r\n <button\r\n variant=\"outline\"\r\n class=\"w-full\"\r\n tabindex=\"0\"\r\n [attr.title]=\"'loadMore' | transloco\"\r\n (click)=\"loadMore($event)\">\r\n {{ \"loadMore\" | transloco }}\r\n </button>\r\n }\r\n <button\r\n class=\"ml-auto\"\r\n [attr.title]=\"'seeMore' | transloco\"\r\n [routerLink]=\"[config.routerLink]\">\r\n {{ \"seeMore\" | transloco }}\r\n </button>\r\n </div>\r\n\r\n <delete-collection-dialog />\r\n}\r\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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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: "component", type: InboxIcon, selector: "inbox-icon, InboxIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
11244
11281
|
}
|
|
11245
11282
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: CollectionsComponent, decorators: [{
|
|
11246
11283
|
type: Component,
|
|
@@ -11251,8 +11288,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
11251
11288
|
ButtonComponent,
|
|
11252
11289
|
ListItemComponent,
|
|
11253
11290
|
Separator,
|
|
11254
|
-
TrashIcon
|
|
11255
|
-
|
|
11291
|
+
TrashIcon,
|
|
11292
|
+
InboxIcon
|
|
11293
|
+
], providers: [provideTranslocoScope("collections")], template: "@if (floating) {\r\n <div class=\"p-2\">\r\n <label class=\"text-xl font-bold\">{{\r\n \"collections.label\" | transloco\r\n }}</label>\r\n <Separator />\r\n </div>\r\n}\r\n\r\n<ul class=\"flex max-h-[460px] flex-col overflow-auto\">\r\n @for (collection of paginatedCollections(); track $index) {\r\n <li\r\n role=\"listitem\"\r\n class=\"group grid grid-cols-[min-content_auto_min-content] items-center\"\r\n tabindex=\"0\"\r\n (click)=\"onClick(collection)\"\r\n (keydown.enter)=\"onClick(collection)\">\r\n <inbox-icon />\r\n\r\n <p class=\"line-clamp-1\">{{ collection.name }}</p>\r\n\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive invisible group-hover:visible\"\r\n title=\"{{ 'collections.deleteCollection' | transloco }}\"\r\n [attr.aria-label]=\"'collections.deleteCollection' | transloco\"\r\n (click)=\"onDelete(collection, $index, $event)\">\r\n <TrashIcon />\r\n </button>\r\n </li>\r\n } @empty {\r\n <span class=\"py-4 text-center text-neutral-500\">\r\n {{ \"collections.noCollections\" | transloco }}\r\n </span>\r\n }\r\n</ul>\r\n\r\n@if (paginatedCollections().length > 0) {\r\n <div class=\"flex flex-col px-2\">\r\n @if (hasMore() && config.showLoadMore) {\r\n <button\r\n variant=\"outline\"\r\n class=\"w-full\"\r\n tabindex=\"0\"\r\n [attr.title]=\"'loadMore' | transloco\"\r\n (click)=\"loadMore($event)\">\r\n {{ \"loadMore\" | transloco }}\r\n </button>\r\n }\r\n <button\r\n class=\"ml-auto\"\r\n [attr.title]=\"'seeMore' | transloco\"\r\n [routerLink]=\"[config.routerLink]\">\r\n {{ \"seeMore\" | transloco }}\r\n </button>\r\n </div>\r\n\r\n <delete-collection-dialog />\r\n}\r\n" }]
|
|
11256
11294
|
}], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], deleteCollectionDialog: [{ type: i0.ViewChild, args: [i0.forwardRef(() => DeleteCollectionDialog), { isSignal: true }] }] } });
|
|
11257
11295
|
|
|
11258
11296
|
class OverrideUserDialogComponent {
|
|
@@ -11361,7 +11399,7 @@ class OverrideUserDialogComponent {
|
|
|
11361
11399
|
</DialogFooter>
|
|
11362
11400
|
</DialogContent>
|
|
11363
11401
|
</dialog>
|
|
11364
|
-
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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\"], input[type=\"file\"]", 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" }] });
|
|
11402
|
+
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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\"], input[type=\"file\"]", 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" }] });
|
|
11365
11403
|
}
|
|
11366
11404
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: OverrideUserDialogComponent, decorators: [{
|
|
11367
11405
|
type: Component,
|
|
@@ -11465,7 +11503,7 @@ class ResetUserSettingsDialogComponent {
|
|
|
11465
11503
|
</DialogFooter>
|
|
11466
11504
|
</DialogContent>
|
|
11467
11505
|
</dialog>
|
|
11468
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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" }] });
|
|
11506
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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" }] });
|
|
11469
11507
|
}
|
|
11470
11508
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ResetUserSettingsDialogComponent, decorators: [{
|
|
11471
11509
|
type: Component,
|
|
@@ -11737,7 +11775,7 @@ class DrawerNavbarComponent {
|
|
|
11737
11775
|
<menu class="flex items-center gap-2 p-4 font-semibold">
|
|
11738
11776
|
<li>
|
|
11739
11777
|
<button variant="ghost" class="group" [attr.title]="'back' | transloco" (click)="drawerStack.close()">
|
|
11740
|
-
<
|
|
11778
|
+
<arrow-left-icon class="-ms-1 transition-transform opacity-60 group-hover:-translate-x-0.5" />
|
|
11741
11779
|
{{ 'back' | transloco }}
|
|
11742
11780
|
</button>
|
|
11743
11781
|
</li>
|
|
@@ -11748,19 +11786,19 @@ class DrawerNavbarComponent {
|
|
|
11748
11786
|
|
|
11749
11787
|
<ng-content></ng-content>
|
|
11750
11788
|
</menu>
|
|
11751
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size"] }, { kind: "component", type: VerticalDividerComponent, selector: "vertical-divider, VerticalDivider, verticaldivider" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
11789
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: VerticalDividerComponent, selector: "vertical-divider, VerticalDivider, verticaldivider" }, { kind: "component", type: ArrowLeftIcon, selector: "arrow-left-icon, ArrowLeftIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
11752
11790
|
}
|
|
11753
11791
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DrawerNavbarComponent, decorators: [{
|
|
11754
11792
|
type: Component,
|
|
11755
11793
|
args: [{
|
|
11756
11794
|
selector: "DrawerNavbar, drawernavbar",
|
|
11757
11795
|
standalone: true,
|
|
11758
|
-
imports: [TranslocoPipe, ButtonComponent, VerticalDividerComponent],
|
|
11796
|
+
imports: [TranslocoPipe, ButtonComponent, VerticalDividerComponent, ArrowLeftIcon],
|
|
11759
11797
|
template: `
|
|
11760
11798
|
<menu class="flex items-center gap-2 p-4 font-semibold">
|
|
11761
11799
|
<li>
|
|
11762
11800
|
<button variant="ghost" class="group" [attr.title]="'back' | transloco" (click)="drawerStack.close()">
|
|
11763
|
-
<
|
|
11801
|
+
<arrow-left-icon class="-ms-1 transition-transform opacity-60 group-hover:-translate-x-0.5" />
|
|
11764
11802
|
{{ 'back' | transloco }}
|
|
11765
11803
|
</button>
|
|
11766
11804
|
</li>
|
|
@@ -12097,7 +12135,7 @@ class DrawerAdvancedFiltersComponent extends DrawerComponent {
|
|
|
12097
12135
|
return res;
|
|
12098
12136
|
}
|
|
12099
12137
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DrawerAdvancedFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12100
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: TabsComponent, selector: "tabs, Tabs", inputs: ["class"] }, { kind: "directive", type: TabComponent, selector: "tab, Tab", inputs: ["class", "variant", "size", "noTruncate", "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" }] });
|
|
12138
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: TabsComponent, selector: "tabs, Tabs", inputs: ["class"] }, { kind: "directive", type: TabComponent, selector: "tab, Tab", inputs: ["class", "variant", "size", "noTruncate", "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" }] });
|
|
12101
12139
|
}
|
|
12102
12140
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DrawerAdvancedFiltersComponent, decorators: [{
|
|
12103
12141
|
type: Component,
|
|
@@ -12197,7 +12235,7 @@ class EntitiesPanel {
|
|
|
12197
12235
|
<details class="group/parent" name="advanced-search-panels">
|
|
12198
12236
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
12199
12237
|
<p class="flex items-baseline gap-2 font-semibold capitalize">
|
|
12200
|
-
<
|
|
12238
|
+
<highlighter-icon />
|
|
12201
12239
|
{{ 'entities' | transloco }}
|
|
12202
12240
|
</p>
|
|
12203
12241
|
|
|
@@ -12215,7 +12253,7 @@ class EntitiesPanel {
|
|
|
12215
12253
|
<details class="group/entities p-3 first:pt-0" name="advanced-search-entities">
|
|
12216
12254
|
<summary class="sticky top-8 flex cursor-pointer select-none items-baseline justify-between">
|
|
12217
12255
|
<p class="flex items-baseline gap-2 font-semibold capitalize">
|
|
12218
|
-
<
|
|
12256
|
+
<FaIcon [faClass]="iconClass || 'far fa-list'" />
|
|
12219
12257
|
{{ name | transloco }}
|
|
12220
12258
|
</p>
|
|
12221
12259
|
|
|
@@ -12248,18 +12286,18 @@ class EntitiesPanel {
|
|
|
12248
12286
|
</ul>
|
|
12249
12287
|
</details>
|
|
12250
12288
|
</ng-template>
|
|
12251
|
-
`, 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:
|
|
12289
|
+
`, 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, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: ChevronLeftIcon, selector: "chevron-left, ChevronLeft, chevronleft, chevron-left-icon, ChevronLeftIcon, chevronlefticon", inputs: ["class"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "component", type: HighlighterIcon, selector: "highlighter-icon, HighlighterIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
12252
12290
|
}
|
|
12253
12291
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: EntitiesPanel, decorators: [{
|
|
12254
12292
|
type: Component,
|
|
12255
12293
|
args: [{
|
|
12256
12294
|
selector: "entities-panel,EntitiesPanel,entitiesPanel",
|
|
12257
|
-
imports: [TranslocoPipe, NgTemplateOutlet, ListItemComponent, ChevronRightIcon,
|
|
12295
|
+
imports: [TranslocoPipe, NgTemplateOutlet, ListItemComponent, ChevronRightIcon, ChevronLeftIcon, FaIconComponent, HighlighterIcon],
|
|
12258
12296
|
template: `
|
|
12259
12297
|
<details class="group/parent" name="advanced-search-panels">
|
|
12260
12298
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
12261
12299
|
<p class="flex items-baseline gap-2 font-semibold capitalize">
|
|
12262
|
-
<
|
|
12300
|
+
<highlighter-icon />
|
|
12263
12301
|
{{ 'entities' | transloco }}
|
|
12264
12302
|
</p>
|
|
12265
12303
|
|
|
@@ -12277,7 +12315,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
12277
12315
|
<details class="group/entities p-3 first:pt-0" name="advanced-search-entities">
|
|
12278
12316
|
<summary class="sticky top-8 flex cursor-pointer select-none items-baseline justify-between">
|
|
12279
12317
|
<p class="flex items-baseline gap-2 font-semibold capitalize">
|
|
12280
|
-
<
|
|
12318
|
+
<FaIcon [faClass]="iconClass || 'far fa-list'" />
|
|
12281
12319
|
{{ name | transloco }}
|
|
12282
12320
|
</p>
|
|
12283
12321
|
|
|
@@ -12351,7 +12389,7 @@ class ExtractsPanel {
|
|
|
12351
12389
|
<details class="group" name="advanced-search-panels" open>
|
|
12352
12390
|
<summary [class]="cn('sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3', '')">
|
|
12353
12391
|
<p class="flex items-baseline gap-2 font-semibold">
|
|
12354
|
-
<
|
|
12392
|
+
<tags-icon />
|
|
12355
12393
|
{{ 'extracts' | transloco }}
|
|
12356
12394
|
</p>
|
|
12357
12395
|
|
|
@@ -12360,7 +12398,7 @@ class ExtractsPanel {
|
|
|
12360
12398
|
|
|
12361
12399
|
@if (loading()) {
|
|
12362
12400
|
<div class="flex h-32 items-center justify-center">
|
|
12363
|
-
<
|
|
12401
|
+
<spinner-icon class="animate-spin text-primary" />
|
|
12364
12402
|
</div>
|
|
12365
12403
|
} @else {
|
|
12366
12404
|
<ul>
|
|
@@ -12374,18 +12412,18 @@ class ExtractsPanel {
|
|
|
12374
12412
|
</ul>
|
|
12375
12413
|
}
|
|
12376
12414
|
</details>
|
|
12377
|
-
`, isInline: true, dependencies: [{ kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
12415
|
+
`, isInline: true, dependencies: [{ kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: TagsIcon, selector: "tags-icon, TagsIcon", inputs: ["class"] }, { kind: "component", type: SpinnerIcon, selector: "spinner-icon, SpinnerIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
12378
12416
|
}
|
|
12379
12417
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ExtractsPanel, decorators: [{
|
|
12380
12418
|
type: Component,
|
|
12381
12419
|
args: [{
|
|
12382
12420
|
selector: "extracts-panel, ExtractsPanel, extractspanel",
|
|
12383
|
-
imports: [TranslocoPipe, ChevronRightIcon],
|
|
12421
|
+
imports: [TranslocoPipe, ChevronRightIcon, TagsIcon, SpinnerIcon],
|
|
12384
12422
|
template: `
|
|
12385
12423
|
<details class="group" name="advanced-search-panels" open>
|
|
12386
12424
|
<summary [class]="cn('sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3', '')">
|
|
12387
12425
|
<p class="flex items-baseline gap-2 font-semibold">
|
|
12388
|
-
<
|
|
12426
|
+
<tags-icon />
|
|
12389
12427
|
{{ 'extracts' | transloco }}
|
|
12390
12428
|
</p>
|
|
12391
12429
|
|
|
@@ -12394,7 +12432,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
12394
12432
|
|
|
12395
12433
|
@if (loading()) {
|
|
12396
12434
|
<div class="flex h-32 items-center justify-center">
|
|
12397
|
-
<
|
|
12435
|
+
<spinner-icon class="animate-spin text-primary" />
|
|
12398
12436
|
</div>
|
|
12399
12437
|
} @else {
|
|
12400
12438
|
<ul>
|
|
@@ -12434,7 +12472,7 @@ class LabelsPanel {
|
|
|
12434
12472
|
<details class="group" name="advanced-search-panels">
|
|
12435
12473
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
12436
12474
|
<p class="flex items-baseline gap-2 font-semibold">
|
|
12437
|
-
<
|
|
12475
|
+
<tags-icon />
|
|
12438
12476
|
{{ 'labels' | transloco }}
|
|
12439
12477
|
</p>
|
|
12440
12478
|
|
|
@@ -12444,29 +12482,29 @@ class LabelsPanel {
|
|
|
12444
12482
|
<div>
|
|
12445
12483
|
<ul class="mt-4 flex flex-col flex-wrap gap-2">
|
|
12446
12484
|
<li>
|
|
12447
|
-
<Metadata
|
|
12485
|
+
<Metadata [article]="article()!" [metadata]="labels.public" />
|
|
12448
12486
|
</li>
|
|
12449
12487
|
|
|
12450
12488
|
<li>
|
|
12451
|
-
<Metadata
|
|
12489
|
+
<Metadata [article]="article()!" [metadata]="labels.private" />
|
|
12452
12490
|
</li>
|
|
12453
12491
|
</ul>
|
|
12454
12492
|
</div>
|
|
12455
12493
|
</details>
|
|
12456
12494
|
}
|
|
12457
|
-
`, 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" }] });
|
|
12495
|
+
`, 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, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: TagsIcon, selector: "tags-icon, TagsIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
12458
12496
|
}
|
|
12459
12497
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: LabelsPanel, decorators: [{
|
|
12460
12498
|
type: Component,
|
|
12461
12499
|
args: [{
|
|
12462
12500
|
selector: "labels-panel, LabelsPanel, labelspanel",
|
|
12463
|
-
imports: [TranslocoPipe, MetadataComponent, ChevronRightIcon],
|
|
12501
|
+
imports: [TranslocoPipe, MetadataComponent, ChevronRightIcon, TagsIcon],
|
|
12464
12502
|
template: `
|
|
12465
12503
|
@if (hasLabels()) {
|
|
12466
12504
|
<details class="group" name="advanced-search-panels">
|
|
12467
12505
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
12468
12506
|
<p class="flex items-baseline gap-2 font-semibold">
|
|
12469
|
-
<
|
|
12507
|
+
<tags-icon />
|
|
12470
12508
|
{{ 'labels' | transloco }}
|
|
12471
12509
|
</p>
|
|
12472
12510
|
|
|
@@ -12476,11 +12514,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
12476
12514
|
<div>
|
|
12477
12515
|
<ul class="mt-4 flex flex-col flex-wrap gap-2">
|
|
12478
12516
|
<li>
|
|
12479
|
-
<Metadata
|
|
12517
|
+
<Metadata [article]="article()!" [metadata]="labels.public" />
|
|
12480
12518
|
</li>
|
|
12481
12519
|
|
|
12482
12520
|
<li>
|
|
12483
|
-
<Metadata
|
|
12521
|
+
<Metadata [article]="article()!" [metadata]="labels.private" />
|
|
12484
12522
|
</li>
|
|
12485
12523
|
</ul>
|
|
12486
12524
|
</div>
|
|
@@ -12528,7 +12566,7 @@ class SimilarDocumentsPanel {
|
|
|
12528
12566
|
<details class="group" name="advanced-search-panels">
|
|
12529
12567
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
12530
12568
|
<p class="flex items-baseline gap-2 font-semibold">
|
|
12531
|
-
<
|
|
12569
|
+
<tags-icon />
|
|
12532
12570
|
{{ 'drawers.similarDocuments' | transloco }}
|
|
12533
12571
|
</p>
|
|
12534
12572
|
|
|
@@ -12550,19 +12588,19 @@ class SimilarDocumentsPanel {
|
|
|
12550
12588
|
</div>
|
|
12551
12589
|
</details>
|
|
12552
12590
|
}
|
|
12553
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: SelectArticleOnClickDirective, selector: "[selectArticleOnClick]", inputs: ["article", "strategy", "redirectUrl"], outputs: ["selected"] }, { kind: "component", type: SourceComponent, selector: "source, Source", inputs: ["collection", "connector"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
12591
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: SelectArticleOnClickDirective, selector: "[selectArticleOnClick]", inputs: ["article", "strategy", "redirectUrl"], outputs: ["selected"] }, { kind: "component", type: SourceComponent, selector: "source, Source", inputs: ["collection", "connector"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: TagsIcon, selector: "tags-icon, TagsIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
12554
12592
|
}
|
|
12555
12593
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SimilarDocumentsPanel, decorators: [{
|
|
12556
12594
|
type: Component,
|
|
12557
12595
|
args: [{
|
|
12558
12596
|
selector: "similar-documents-panel, SimilarDocumentsPanel, similardocumentspanel",
|
|
12559
|
-
imports: [TranslocoPipe, SelectArticleOnClickDirective, SourceComponent, ListItemComponent, ChevronRightIcon],
|
|
12597
|
+
imports: [TranslocoPipe, SelectArticleOnClickDirective, SourceComponent, ListItemComponent, ChevronRightIcon, TagsIcon],
|
|
12560
12598
|
template: `
|
|
12561
12599
|
@if (similarDocuments().length > 0) {
|
|
12562
12600
|
<details class="group" name="advanced-search-panels">
|
|
12563
12601
|
<summary class="sticky top-0 flex cursor-pointer select-none items-baseline justify-between p-3">
|
|
12564
12602
|
<p class="flex items-baseline gap-2 font-semibold">
|
|
12565
|
-
<
|
|
12603
|
+
<tags-icon />
|
|
12566
12604
|
{{ 'drawers.similarDocuments' | transloco }}
|
|
12567
12605
|
</p>
|
|
12568
12606
|
|
|
@@ -12626,7 +12664,7 @@ class AdvancedSearchComponent {
|
|
|
12626
12664
|
this.queryText.set("");
|
|
12627
12665
|
}
|
|
12628
12666
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AdvancedSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12629
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AdvancedSearchComponent, isStandalone: true, selector: "advanced-search", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, previewStrategy: { classPropertyName: "previewStrategy", publicName: "previewStrategy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, providers: [provideTranslocoScope("drawers")], ngImport: i0, template: "@if (article()) {\n <div\n [class]=\"\n cn(\n 'scroll-stable flex flex-col overflow-y-auto pb-6 pl-6
|
|
12667
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AdvancedSearchComponent, isStandalone: true, selector: "advanced-search", inputs: { article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, previewStrategy: { classPropertyName: "previewStrategy", publicName: "previewStrategy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, providers: [provideTranslocoScope("drawers")], ngImport: i0, template: "@if (article()) {\r\n <div\r\n [class]=\"\r\n cn(\r\n 'scroll-stable flex flex-col overflow-y-auto pr-3 pb-6 pl-6',\r\n '[&_details]:border-muted-foreground/18 [&_details]:border-b',\r\n '[&_details>summary]:bg-menu [&_details_details]:last:border-b-0',\r\n '[&_details>summary>i>svg]:transition-transform [&_details>summary>i>svg]:duration-300',\r\n '[&>details>summary>i>svg]:group-open/parent:rotate-180'\r\n )\r\n \">\r\n <section class=\"mt-6 mb-4 flex w-full flex-col gap-6\">\r\n <header\r\n id=\"panel-control\"\r\n class=\"focus-within:outline-primary not-focus-within:hover:outline-muted-foreground group flex rounded focus-within:outline hover:outline\">\r\n <div\r\n class=\"bg-muted flex grow items-center gap-2 rounded-s rounded-e-none px-3\">\r\n <input\r\n id=\"advanced-search-input\"\r\n type=\"search\"\r\n class=\"grow focus:outline-none\"\r\n autocomplete=\"off\"\r\n spellcheck=\"false\"\r\n [attr.placeholder]=\"'drawers.inputPlaceholder' | transloco\"\r\n [attr.aria-label]=\"'drawers.inputPlaceholder' | transloco\"\r\n [ngModel]=\"queryText()\"\r\n (ngModelChange)=\"queryText.set($event)\"\r\n (keydown.enter)=\"executeSearch()\" />\r\n\r\n @if (queryText() !== \"\") {\r\n <button\r\n [iconOnly]=\"true\"\r\n size=\"sm\"\r\n [attr.title]=\"'clear' | transloco\"\r\n [attr.aria-label]=\"'clear' | transloco\"\r\n (click)=\"clearInput()\"\r\n (keydown.enter)=\"clearInput()\">\r\n <xmark-icon />\r\n </button>\r\n }\r\n </div>\r\n\r\n <button\r\n class=\"size-8 rounded-s-none rounded-e-lg\"\r\n [disabled]=\"queryText() === '' || null\"\r\n [attr.title]=\"'search' | transloco\"\r\n [attr.aria-label]=\"'search' | transloco\"\r\n (click)=\"executeSearch()\">\r\n <magnifying-glass-icon />\r\n </button>\r\n </header>\r\n </section>\r\n\r\n <!-- the same name is used everywhere to simulate an accordion -->\r\n <!-- extracts -->\r\n <ExtractsPanel [article]=\"article()\" />\r\n\r\n <!-- labels -->\r\n <LabelsPanel [article]=\"article()\" />\r\n\r\n <!-- entities -->\r\n <EntitiesPanel [article]=\"article()\" />\r\n\r\n <!-- similar documents -->\r\n <SimilarDocumentsPanel\r\n [article]=\"article()\"\r\n [strategy]=\"previewStrategy()\"\r\n (selected)=\"selected.emit($event)\" />\r\n </div>\r\n}\r\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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: SimilarDocumentsPanel, selector: "similar-documents-panel, SimilarDocumentsPanel, similardocumentspanel", inputs: ["article", "strategy"], outputs: ["selected"] }, { kind: "component", type: EntitiesPanel, selector: "entities-panel,EntitiesPanel,entitiesPanel", inputs: ["article"] }, { kind: "component", type: LabelsPanel, selector: "labels-panel, LabelsPanel, labelspanel", inputs: ["article"] }, { kind: "component", type: ExtractsPanel, selector: "extracts-panel, ExtractsPanel, extractspanel", inputs: ["article"] }, { kind: "component", type: XMarkIcon, selector: "XMarkIcon, xmark-icon, x-mark-icon", inputs: ["class"] }, { kind: "component", type: MagnifyingGlassIcon, selector: "magnifying-glass-icon, MagnifyingGlassIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
12630
12668
|
}
|
|
12631
12669
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AdvancedSearchComponent, decorators: [{
|
|
12632
12670
|
type: Component,
|
|
@@ -12637,8 +12675,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
12637
12675
|
SimilarDocumentsPanel,
|
|
12638
12676
|
EntitiesPanel,
|
|
12639
12677
|
LabelsPanel,
|
|
12640
|
-
ExtractsPanel
|
|
12641
|
-
|
|
12678
|
+
ExtractsPanel,
|
|
12679
|
+
XMarkIcon,
|
|
12680
|
+
MagnifyingGlassIcon
|
|
12681
|
+
], template: "@if (article()) {\r\n <div\r\n [class]=\"\r\n cn(\r\n 'scroll-stable flex flex-col overflow-y-auto pr-3 pb-6 pl-6',\r\n '[&_details]:border-muted-foreground/18 [&_details]:border-b',\r\n '[&_details>summary]:bg-menu [&_details_details]:last:border-b-0',\r\n '[&_details>summary>i>svg]:transition-transform [&_details>summary>i>svg]:duration-300',\r\n '[&>details>summary>i>svg]:group-open/parent:rotate-180'\r\n )\r\n \">\r\n <section class=\"mt-6 mb-4 flex w-full flex-col gap-6\">\r\n <header\r\n id=\"panel-control\"\r\n class=\"focus-within:outline-primary not-focus-within:hover:outline-muted-foreground group flex rounded focus-within:outline hover:outline\">\r\n <div\r\n class=\"bg-muted flex grow items-center gap-2 rounded-s rounded-e-none px-3\">\r\n <input\r\n id=\"advanced-search-input\"\r\n type=\"search\"\r\n class=\"grow focus:outline-none\"\r\n autocomplete=\"off\"\r\n spellcheck=\"false\"\r\n [attr.placeholder]=\"'drawers.inputPlaceholder' | transloco\"\r\n [attr.aria-label]=\"'drawers.inputPlaceholder' | transloco\"\r\n [ngModel]=\"queryText()\"\r\n (ngModelChange)=\"queryText.set($event)\"\r\n (keydown.enter)=\"executeSearch()\" />\r\n\r\n @if (queryText() !== \"\") {\r\n <button\r\n [iconOnly]=\"true\"\r\n size=\"sm\"\r\n [attr.title]=\"'clear' | transloco\"\r\n [attr.aria-label]=\"'clear' | transloco\"\r\n (click)=\"clearInput()\"\r\n (keydown.enter)=\"clearInput()\">\r\n <xmark-icon />\r\n </button>\r\n }\r\n </div>\r\n\r\n <button\r\n class=\"size-8 rounded-s-none rounded-e-lg\"\r\n [disabled]=\"queryText() === '' || null\"\r\n [attr.title]=\"'search' | transloco\"\r\n [attr.aria-label]=\"'search' | transloco\"\r\n (click)=\"executeSearch()\">\r\n <magnifying-glass-icon />\r\n </button>\r\n </header>\r\n </section>\r\n\r\n <!-- the same name is used everywhere to simulate an accordion -->\r\n <!-- extracts -->\r\n <ExtractsPanel [article]=\"article()\" />\r\n\r\n <!-- labels -->\r\n <LabelsPanel [article]=\"article()\" />\r\n\r\n <!-- entities -->\r\n <EntitiesPanel [article]=\"article()\" />\r\n\r\n <!-- similar documents -->\r\n <SimilarDocumentsPanel\r\n [article]=\"article()\"\r\n [strategy]=\"previewStrategy()\"\r\n (selected)=\"selected.emit($event)\" />\r\n </div>\r\n}\r\n", styles: [":host{--panel-max-height: none}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}\n"] }]
|
|
12642
12682
|
}], propDecorators: { article: [{ type: i0.Input, args: [{ isSignal: true, alias: "article", required: true }] }], previewStrategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "previewStrategy", required: false }] }], selected: [{ type: i0.Output, args: ["selected"] }] } });
|
|
12643
12683
|
|
|
12644
12684
|
const COMPONENTS_FOR_DOCUMENT_TYPE = new InjectionToken("COMPONENTS_FOR_DOCUMENT_TYPE");
|
|
@@ -12880,7 +12920,7 @@ class FeedbackDialogComponent {
|
|
|
12880
12920
|
</DialogFooter>
|
|
12881
12921
|
</DialogContent>
|
|
12882
12922
|
</dialog>
|
|
12883
|
-
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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" }] });
|
|
12923
|
+
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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" }] });
|
|
12884
12924
|
}
|
|
12885
12925
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: FeedbackDialogComponent, decorators: [{
|
|
12886
12926
|
type: Component,
|
|
@@ -12933,6 +12973,8 @@ class SearchFeedbackComponent {
|
|
|
12933
12973
|
onClose = output();
|
|
12934
12974
|
feedbackDialog = viewChild(FeedbackDialogComponent, ...(ngDevMode ? [{ debugName: "feedbackDialog" }] : []));
|
|
12935
12975
|
pages = input.required(...(ngDevMode ? [{ debugName: "pages" }] : []));
|
|
12976
|
+
variant = input("secondary", ...(ngDevMode ? [{ debugName: "variant" }] : []));
|
|
12977
|
+
solid = input(false, ...(ngDevMode ? [{ debugName: "solid" }] : []));
|
|
12936
12978
|
auditService = inject(AuditService);
|
|
12937
12979
|
queryParamsStore = inject(QueryParamsStore);
|
|
12938
12980
|
transloco = inject(TranslocoService);
|
|
@@ -12988,12 +13030,12 @@ class SearchFeedbackComponent {
|
|
|
12988
13030
|
this.feedbackDialog()?.open(type);
|
|
12989
13031
|
}
|
|
12990
13032
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SearchFeedbackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12991
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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
|
|
13033
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: SearchFeedbackComponent, isStandalone: true, selector: "feedback, Feedback", inputs: { pages: { classPropertyName: "pages", publicName: "pages", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, solid: { classPropertyName: "solid", publicName: "solid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClose: "onClose" }, providers: [provideTranslocoScope('feedback')], viewQueries: [{ propertyName: "feedbackDialog", first: true, predicate: FeedbackDialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<menu>\r\n @let feedback = \"feedback.label\" | transloco;\r\n <button [variant]=\"variant()\" [solid]=\"solid()\" [aria-label]=\"feedback\">\r\n <comment-icon />\r\n <span>{{ feedback }}</span>\r\n <x-mark-icon class=\"ms-2\" (click)=\"close($event)\" />\r\n </button>\r\n\r\n <MenuContent>\r\n @if (!disliked()) {\r\n @let feedbackLike = \"feedback.like\" | transloco;\r\n @let feedbackLiked = \"feedback.liked\" | transloco;\r\n <menuitem (click)=\"like()\" aria-label=\"feedback\">\r\n @if (liked()) {\r\n <thumbs-up-icon [fill]=\"true\" />\r\n {{ feedbackLiked }}\r\n } @else {\r\n <thumbs-up-icon />\r\n {{ feedbackLike }}\r\n }\r\n </menuitem>\r\n }\r\n @if (!liked()) {\r\n <menuitem\r\n (click)=\"dislike()\"\r\n [aria-label]=\"'feedback.dislike' | transloco\">\r\n @if (disliked()) {\r\n <thumbs-down-icon [fill]=\"true\" />\r\n {{ \"feedback.disliked\" | transloco }}\r\n } @else {\r\n <thumbs-down-icon />\r\n {{ \"feedback.dislike\" | transloco }}\r\n }\r\n </menuitem>\r\n }\r\n @for (menu of menus; track $index) {\r\n @let feedbackTitle = \"feedback.\" + menu.type + \".title\" | transloco;\r\n <menuitem\r\n (click)=\"openFeedbackDialog(menu.type)\"\r\n [aria-label]=\"feedbackTitle\">\r\n <fa-icon [faClass]=\"menu.icon\" />\r\n {{ feedbackTitle }}\r\n </menuitem>\r\n }\r\n </MenuContent>\r\n</menu>\r\n\r\n<feedback-dialog />\r\n", dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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: "component", type: CommentIcon, selector: "comment-icon, CommentIcon", inputs: ["class"] }, { kind: "component", type: XMarkIcon, selector: "XMarkIcon, xmark-icon, x-mark-icon", inputs: ["class"] }, { kind: "component", type: ThumbsUpIcon, selector: "thumbs-up-icon, ThumbsUpIcon, thumbsupicon", inputs: ["class", "fill", "solid"] }, { kind: "component", type: ThumbsDownIcon, selector: "thumbs-down-icon, ThumbsDownIcon", inputs: ["class", "fill", "solid"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
12992
13034
|
}
|
|
12993
13035
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SearchFeedbackComponent, decorators: [{
|
|
12994
13036
|
type: Component,
|
|
12995
|
-
args: [{ selector: 'feedback, Feedback', standalone: true, imports: [ButtonComponent, MenuComponent, MenuContentComponent, MenuItemComponent, TranslocoPipe, FeedbackDialogComponent], providers: [provideTranslocoScope('feedback')], template: "<menu>\n
|
|
12996
|
-
}], 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 }] }] } });
|
|
13037
|
+
args: [{ selector: 'feedback, Feedback', standalone: true, imports: [ButtonComponent, MenuComponent, MenuContentComponent, MenuItemComponent, TranslocoPipe, FeedbackDialogComponent, CommentIcon, XMarkIcon, ThumbsUpIcon, ThumbsDownIcon, FaIconComponent], providers: [provideTranslocoScope('feedback')], template: "<menu>\r\n @let feedback = \"feedback.label\" | transloco;\r\n <button [variant]=\"variant()\" [solid]=\"solid()\" [aria-label]=\"feedback\">\r\n <comment-icon />\r\n <span>{{ feedback }}</span>\r\n <x-mark-icon class=\"ms-2\" (click)=\"close($event)\" />\r\n </button>\r\n\r\n <MenuContent>\r\n @if (!disliked()) {\r\n @let feedbackLike = \"feedback.like\" | transloco;\r\n @let feedbackLiked = \"feedback.liked\" | transloco;\r\n <menuitem (click)=\"like()\" aria-label=\"feedback\">\r\n @if (liked()) {\r\n <thumbs-up-icon [fill]=\"true\" />\r\n {{ feedbackLiked }}\r\n } @else {\r\n <thumbs-up-icon />\r\n {{ feedbackLike }}\r\n }\r\n </menuitem>\r\n }\r\n @if (!liked()) {\r\n <menuitem\r\n (click)=\"dislike()\"\r\n [aria-label]=\"'feedback.dislike' | transloco\">\r\n @if (disliked()) {\r\n <thumbs-down-icon [fill]=\"true\" />\r\n {{ \"feedback.disliked\" | transloco }}\r\n } @else {\r\n <thumbs-down-icon />\r\n {{ \"feedback.dislike\" | transloco }}\r\n }\r\n </menuitem>\r\n }\r\n @for (menu of menus; track $index) {\r\n @let feedbackTitle = \"feedback.\" + menu.type + \".title\" | transloco;\r\n <menuitem\r\n (click)=\"openFeedbackDialog(menu.type)\"\r\n [aria-label]=\"feedbackTitle\">\r\n <fa-icon [faClass]=\"menu.icon\" />\r\n {{ feedbackTitle }}\r\n </menuitem>\r\n }\r\n </MenuContent>\r\n</menu>\r\n\r\n<feedback-dialog />\r\n" }]
|
|
13038
|
+
}], 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 }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], solid: [{ type: i0.Input, args: [{ isSignal: true, alias: "solid", required: false }] }] } });
|
|
12997
13039
|
|
|
12998
13040
|
class AggregationTreeItemComponent {
|
|
12999
13041
|
cn = cn;
|
|
@@ -13095,11 +13137,11 @@ class AggregationTreeItemComponent {
|
|
|
13095
13137
|
this.onSelect.emit(this.node());
|
|
13096
13138
|
}
|
|
13097
13139
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AggregationTreeItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13098
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AggregationTreeItemComponent, isStandalone: true, selector: "aggregation-tree-item, AggregationTreeItem, aggregationtreeitem", 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\r\n role=\"listitem\"\r\n [attr.aria-selected]=\"node().$selected || node().$selectedVisually\"\r\n [attr.aria-label]=\"name() | syslang\"\r\n [style.--level]=\"level()\"\r\n [class]=\"\r\n cn(\r\n 'flex grow items-center gap-2 p-1 leading-7',\r\n node().count === 0 && 'disabled pointer-events-none
|
|
13140
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AggregationTreeItemComponent, isStandalone: true, selector: "aggregation-tree-item, AggregationTreeItem, aggregationtreeitem", 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\r\n role=\"listitem\"\r\n [attr.aria-selected]=\"node().$selected || node().$selectedVisually\"\r\n [attr.aria-label]=\"name() | syslang\"\r\n [style.--level]=\"level()\"\r\n [class]=\"\r\n cn(\r\n 'flex grow items-center gap-2 p-1 leading-7',\r\n node().count === 0 && 'disabled pointer-events-none',\r\n (node().$selected || node().$selectedVisually) && ''\r\n )\r\n \"\r\n (click)=\"select(node(), $event, true)\">\r\n <!-- chrevron is visible only if the node has children -->\r\n <button\r\n (click)=\"open($event, node())\"\r\n class=\"transition-transform ease-in hover:scale-125\"\r\n aria-label=\"Open\">\r\n <ChevronRight\r\n [class]=\"\r\n cn(\r\n 'size-4 translate-x-1',\r\n node().$opened && 'rotate-90',\r\n !node().hasChildren && 'hidden'\r\n )\r\n \"\r\n width=\"16\"\r\n height=\"16\" />\r\n </button>\r\n\r\n <input\r\n type=\"checkbox\"\r\n role=\"checkbox\"\r\n value=\"{{ node().value }}\"\r\n [attr.disabled]=\"node().count === 0 ? true : null\"\r\n [attr.aria-disabled]=\"node().count === 0\"\r\n (keydown.enter)=\"select(node(), $event)\"\r\n [checked]=\"node().$selected || node().$selectedVisually\" />\r\n\r\n @let icon = node().icon;\r\n @if (icon) {\r\n <FaIcon [faClass]=\"icon\" class=\"self-center justify-self-center\" />\r\n }\r\n <span\r\n [class]=\"\r\n cn(\r\n 'line-clamp-1 break-all text-ellipsis',\r\n quickFilter() && 'hover:underline'\r\n )\r\n \"\r\n [title]=\"\r\n quickFilter()\r\n ? ((isFiltered() ? 'filters.removeFilter' : 'filters.addFilter')\r\n | transloco) +\r\n ': ' +\r\n (name() | syslang)\r\n : (name() | syslang)\r\n \"\r\n (click)=\"onTextClick($event)\">\r\n @for (\r\n chunk of (name() | syslang) ?? \"\" | highlightWord: searchText() : 10;\r\n track $index\r\n ) {\r\n <span [class]=\"{ 'font-bold': chunk.match }\" aria-hidden=\"true\">{{\r\n chunk.text\r\n }}</span>\r\n }\r\n </span>\r\n @if (showCount() && node().count > 0) {\r\n <span class=\"ml-auto px-1 text-xs empty:hidden\" aria-hidden=\"true\">{{\r\n node().count\r\n }}</span>\r\n }\r\n</a>\r\n\r\n@if (node().hasChildren && node().$opened) {\r\n @for (item of node().items; track $index) {\r\n <AggregationTreeItem\r\n [node]=\"item\"\r\n [path]=\"childrenPath()\"\r\n [field]=\"field()\"\r\n (onOpen)=\"onOpen.emit($event)\"\r\n (onFilter)=\"onFilter.emit()\"\r\n (onSelect)=\"onChildSelect($event)\" />\r\n }\r\n}\r\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: AggregationTreeItemComponent, selector: "aggregation-tree-item, AggregationTreeItem, aggregationtreeitem", 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, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "pipe", type: HighlightWordPipe, name: "highlightWord" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
13099
13141
|
}
|
|
13100
13142
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AggregationTreeItemComponent, decorators: [{
|
|
13101
13143
|
type: Component,
|
|
13102
|
-
args: [{ selector: "aggregation-tree-item, AggregationTreeItem, aggregationtreeitem", standalone: true, imports: [HighlightWordPipe, ListItemComponent, SyslangPipe, ChevronRightIcon, TranslocoPipe], template: "<a\r\n role=\"listitem\"\r\n [attr.aria-selected]=\"node().$selected || node().$selectedVisually\"\r\n [attr.aria-label]=\"name() | syslang\"\r\n [style.--level]=\"level()\"\r\n [class]=\"\r\n cn(\r\n 'flex grow items-center gap-2 p-1 leading-7',\r\n node().count === 0 && 'disabled pointer-events-none
|
|
13144
|
+
args: [{ selector: "aggregation-tree-item, AggregationTreeItem, aggregationtreeitem", standalone: true, imports: [HighlightWordPipe, ListItemComponent, SyslangPipe, ChevronRightIcon, TranslocoPipe, FaIconComponent], template: "<a\r\n role=\"listitem\"\r\n [attr.aria-selected]=\"node().$selected || node().$selectedVisually\"\r\n [attr.aria-label]=\"name() | syslang\"\r\n [style.--level]=\"level()\"\r\n [class]=\"\r\n cn(\r\n 'flex grow items-center gap-2 p-1 leading-7',\r\n node().count === 0 && 'disabled pointer-events-none',\r\n (node().$selected || node().$selectedVisually) && ''\r\n )\r\n \"\r\n (click)=\"select(node(), $event, true)\">\r\n <!-- chrevron is visible only if the node has children -->\r\n <button\r\n (click)=\"open($event, node())\"\r\n class=\"transition-transform ease-in hover:scale-125\"\r\n aria-label=\"Open\">\r\n <ChevronRight\r\n [class]=\"\r\n cn(\r\n 'size-4 translate-x-1',\r\n node().$opened && 'rotate-90',\r\n !node().hasChildren && 'hidden'\r\n )\r\n \"\r\n width=\"16\"\r\n height=\"16\" />\r\n </button>\r\n\r\n <input\r\n type=\"checkbox\"\r\n role=\"checkbox\"\r\n value=\"{{ node().value }}\"\r\n [attr.disabled]=\"node().count === 0 ? true : null\"\r\n [attr.aria-disabled]=\"node().count === 0\"\r\n (keydown.enter)=\"select(node(), $event)\"\r\n [checked]=\"node().$selected || node().$selectedVisually\" />\r\n\r\n @let icon = node().icon;\r\n @if (icon) {\r\n <FaIcon [faClass]=\"icon\" class=\"self-center justify-self-center\" />\r\n }\r\n <span\r\n [class]=\"\r\n cn(\r\n 'line-clamp-1 break-all text-ellipsis',\r\n quickFilter() && 'hover:underline'\r\n )\r\n \"\r\n [title]=\"\r\n quickFilter()\r\n ? ((isFiltered() ? 'filters.removeFilter' : 'filters.addFilter')\r\n | transloco) +\r\n ': ' +\r\n (name() | syslang)\r\n : (name() | syslang)\r\n \"\r\n (click)=\"onTextClick($event)\">\r\n @for (\r\n chunk of (name() | syslang) ?? \"\" | highlightWord: searchText() : 10;\r\n track $index\r\n ) {\r\n <span [class]=\"{ 'font-bold': chunk.match }\" aria-hidden=\"true\">{{\r\n chunk.text\r\n }}</span>\r\n }\r\n </span>\r\n @if (showCount() && node().count > 0) {\r\n <span class=\"ml-auto px-1 text-xs empty:hidden\" aria-hidden=\"true\">{{\r\n node().count\r\n }}</span>\r\n }\r\n</a>\r\n\r\n@if (node().hasChildren && node().$opened) {\r\n @for (item of node().items; track $index) {\r\n <AggregationTreeItem\r\n [node]=\"item\"\r\n [path]=\"childrenPath()\"\r\n [field]=\"field()\"\r\n (onOpen)=\"onOpen.emit($event)\"\r\n (onFilter)=\"onFilter.emit()\"\r\n (onSelect)=\"onChildSelect($event)\" />\r\n }\r\n}\r\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"] }]
|
|
13103
13145
|
}], propDecorators: { disabled: [{
|
|
13104
13146
|
type: HostBinding,
|
|
13105
13147
|
args: ["attr.disabled"]
|
|
@@ -13400,7 +13442,7 @@ class AggregationTreeComponent {
|
|
|
13400
13442
|
unselectAll() {
|
|
13401
13443
|
if (this.items().length) {
|
|
13402
13444
|
this.selectItems(this.items(), false);
|
|
13403
|
-
this.
|
|
13445
|
+
this.select();
|
|
13404
13446
|
this.isAllSelected.set(false);
|
|
13405
13447
|
}
|
|
13406
13448
|
}
|
|
@@ -13754,8 +13796,12 @@ class AggregationTreeComponent {
|
|
|
13754
13796
|
}
|
|
13755
13797
|
return false;
|
|
13756
13798
|
}
|
|
13799
|
+
clearSearch(e) {
|
|
13800
|
+
e.stopImmediatePropagation();
|
|
13801
|
+
this.searchText.set("");
|
|
13802
|
+
}
|
|
13757
13803
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AggregationTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13758
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AggregationTreeComponent, isStandalone: true, selector: "AggregationTree, aggregation-tree, aggregationtree", 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 }, expandedLevel: { classPropertyName: "expandedLevel", publicName: "expandedLevel", isSignal: true, isRequired: false, 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", onApply: "onApply", onClear: "onClear", searchText: "searchTextChange" }, host: { properties: { "class": "cn(\"block h-[inherit] max-h-[inherit] w-[inherit]\",class())" } }, viewQueries: [{ propertyName: "virtualItems", predicate: ["virtualItem"], descendants: true, isSignal: true }, { propertyName: "scrollElement", first: true, predicate: ["scrollElement"], descendants: true, isSignal: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (!aggregation()?.isTree) {\r\n <div class=\"p-2 text-sm text-red-500\">\r\n <i class=\"fa-fw fas fa-triangle-exclamation mr-1\"></i>\r\n The aggregationTree component does not support list aggregations. Please use\r\n the <Aggregation /> component instead.\r\n </div>\r\n}\r\n<details\r\n [attr.open]=\"expanded()\"\r\n [attr.name]=\"id()\"\r\n class=\"group space-y-2\"\r\n (toggle)=\"onToggle($event)\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible() && !isEmpty()\"\r\n [class.text-muted-foreground]=\"isEmpty()\"\r\n class=\"m-0 mt-1 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @if (aggregation()?.icon) {\r\n <i class=\"fa-fw {{ aggregation()?.icon }} mr-1\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"grow truncate\">{{\r\n aggregation()?.display | syslang | transloco\r\n }}</span>\r\n </ng-content>\r\n\r\n @if (showFiltersCount() && filtersCount() > 0) {\r\n <!-- count -->\r\n <Badge size=\"xs\" class=\"ml-1 pb-0.5\">\r\n {{ filtersCount() }}\r\n </Badge>\r\n }\r\n <!-- apply filter block -->\r\n @if (!isCollapsed()) {\r\n <ButtonGroup>\r\n @if (hasFilters()) {\r\n <button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n class=\"size-6\"\r\n [attr.title]=\"'filters.clearFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.clearFilters' | transloco\"\r\n (click)=\"$event.stopPropagation(); clear()\">\r\n <i class=\"fa-fw far fa-filter-circle-xmark\"></i>\r\n <span class=\"sr-only\">{{\r\n \"filters.clearFilters\" | transloco\r\n }}</span>\r\n </button>\r\n }\r\n @if (selection()) {\r\n <button\r\n variant=\"primary\"\r\n size=\"xs\"\r\n [attr.title]=\"'filters.applyFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.applyFilters' | transloco\"\r\n (click)=\"$event.stopPropagation(); apply()\"\r\n class=\"h-4 px-1\">\r\n <FilterIcon class=\"size-4\" />\r\n <span class=\"sr-only\">{{ \"filters.apply\" | transloco }}</span>\r\n </button>\r\n }\r\n\r\n <!-- select / unselect all -->\r\n @if (isAllSelected()) {\r\n <button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n class=\"size-6\"\r\n [attr.title]=\"'filters.unselectAllFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.unselectAllFilters' | transloco\"\r\n (click)=\"$event.stopPropagation(); unselectAll()\">\r\n <i class=\"fa-fw far fa-check-square\"></i>\r\n <span class=\"sr-only\">{{\r\n \"filters.unselectAllFilters\" | transloco\r\n }}</span>\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n class=\"size-6\"\r\n [attr.title]=\"'filters.selectAllFilters' | transloco\"\r\n [attr.aria-label]=\"'filters.selectAllFilters' | transloco\"\r\n (click)=\"$event.stopPropagation(); selectAll()\">\r\n <i class=\"fa-fw far fa-square\"></i>\r\n <span class=\"sr-only\">{{\r\n \"filters.selectAllFilters\" | transloco\r\n }}</span>\r\n </button>\r\n }\r\n </ButtonGroup>\r\n }\r\n\r\n @if (collapsible()) {\r\n <button\r\n variant=\"none\"\r\n title=\"Open/Close\"\r\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\r\n <chevronright />\r\n <span class=\"sr-only\">{{ \"filters.toggle\" | transloco }}</span>\r\n </button>\r\n }\r\n </summary>\r\n\r\n <!-- content wrapper -->\r\n @if (aggregation()?.searchable && items().length) {\r\n <InputGroup class=\"group/item mt-1\">\r\n <input\r\n #searchInput\r\n input-group\r\n id=\"aggregation-input-{{ column() }}\"\r\n type=\"text\"\r\n [attr.placeholder]=\"'search' | transloco\"\r\n [(ngModel)]=\"searchText\"\r\n class=\"mt-1\" />\r\n <InputGroupAddon>\r\n <SearchIcon\r\n class=\"text-foreground size-4 rotate-0 transition-[rotate] duration-500 group-focus-within/item:rotate-90\" />\r\n </InputGroupAddon>\r\n </InputGroup>\r\n }\r\n\r\n <div\r\n #scrollElement\r\n class=\"scrollbar-thin max-h-[calc(var(--height,100%)-100px)] w-full overflow-auto\">\r\n <div\r\n class=\"relative w-full\"\r\n [style.height]=\"virtualizer.getTotalSize() + 'px'\"\r\n role=\"list\"\r\n [attr.aria-label]=\"aggregation()?.display | syslang | transloco\">\r\n <div\r\n class=\"absolute top-0 left-0 w-full\"\r\n [style.transform]=\"\r\n 'translateY(' +\r\n (virtualizer.getVirtualItems()[0]\r\n ? virtualizer.getVirtualItems()[0].start\r\n : 0) +\r\n 'px)'\r\n \"\r\n role=\"listitem\">\r\n @for (vItem of virtualizer.getVirtualItems(); track vItem.index) {\r\n @let item = items()[vItem.index];\r\n <div #virtualItem [attr.data-index]=\"vItem.index\">\r\n <AggregationTreeItem\r\n [node]=\"item\"\r\n [path]=\"[]\"\r\n [field]=\"aggregation()?.column\"\r\n (onSelect)=\"select()\"\r\n (onOpen)=\"open($event)\"\r\n (onFilter)=\"apply()\" />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n @if (aggregation()?.$hasMore && this.searchedItems().length === 0) {\r\n <button\r\n variant=\"link\"\r\n class=\"mt-1 flex w-full justify-center\"\r\n [attr.aria-label]=\"'loadMore' | transloco\"\r\n (click)=\"loadMore()\">\r\n {{ \"loadMore\" | transloco }}\r\n </button>\r\n }\r\n</details>\r\n", styles: ["AggregationTreeItem:has(+AggregationTreeItem){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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size"] }, { kind: "component", type: AggregationTreeItemComponent, selector: "aggregation-tree-item, AggregationTreeItem, aggregationtreeitem", inputs: ["node", "path", "field"], outputs: ["onSelect", "onOpen", "onFilter"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "size"] }, { 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" }] });
|
|
13804
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: AggregationTreeComponent, isStandalone: true, selector: "AggregationTree, aggregation-tree, aggregationtree", 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 }, expandedLevel: { classPropertyName: "expandedLevel", publicName: "expandedLevel", isSignal: true, isRequired: false, 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", onApply: "onApply", onClear: "onClear", searchText: "searchTextChange" }, host: { properties: { "class": "cn(\"block h-[inherit] max-h-[inherit] w-[inherit]\",class())" } }, viewQueries: [{ propertyName: "virtualItems", predicate: ["virtualItem"], descendants: true, isSignal: true }, { propertyName: "scrollElement", first: true, predicate: ["scrollElement"], descendants: true, isSignal: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (!aggregation()?.isTree) {\r\n <div class=\"p-2 text-sm text-red-500\">\r\n <triangle-alert-icon class=\"mr-1\" />\r\n The aggregationTree component does not support list aggregations. Please use\r\n the <Aggregation /> component instead.\r\n </div>\r\n}\r\n<details\r\n [attr.open]=\"expanded()\"\r\n [attr.name]=\"id()\"\r\n class=\"group space-y-2\"\r\n (toggle)=\"onToggle($event)\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible() && !isEmpty()\"\r\n [class.text-muted-foreground]=\"isEmpty()\"\r\n class=\"m-0 mt-1 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @let icon = aggregation()?.icon;\r\n @if (icon) {\r\n <fa-icon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\r\n }\r\n <span class=\"grow truncate\">{{\r\n aggregation()?.display | syslang | transloco\r\n }}</span>\r\n </ng-content>\r\n\r\n @if (showFiltersCount() && filtersCount() > 0) {\r\n <!-- count -->\r\n <Badge size=\"xs\" class=\"ml-1\">\r\n {{ filtersCount() }}\r\n </Badge>\r\n }\r\n <!-- apply filter block -->\r\n @if (!isCollapsed()) {\r\n @if (hasFilters()) {\r\n @let label = \"filters.clearFilters\" | transloco;\r\n <button\r\n variant=\"none\"\r\n icon-button\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); clear()\">\r\n <filter-x-icon />\r\n </button>\r\n }\r\n @if (selection()) {\r\n @let label = \"filters.apply\" | transloco;\r\n <button\r\n variant=\"accent\"\r\n size=\"sm\"\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); apply()\">\r\n <FilterIcon />\r\n {{ label }}\r\n </button>\r\n }\r\n\r\n <!-- select / unselect all -->\r\n @if (isAllSelected()) {\r\n @let label = \"filters.unselectAllFilters\" | transloco;\r\n <button\r\n variant=\"none\"\r\n icon-button\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); unselectAll()\">\r\n <square-check-icon />\r\n </button>\r\n } @else {\r\n @let label = \"filters.selectAllFilters\" | transloco;\r\n <button\r\n variant=\"none\"\r\n icon-button\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); selectAll()\">\r\n <square-icon />\r\n </button>\r\n }\r\n }\r\n\r\n @if (collapsible()) {\r\n <icon-button\r\n title=\"Open/Close\"\r\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\r\n <chevronright />\r\n <span class=\"sr-only\">{{ \"filters.toggle\" | transloco }}</span>\r\n </icon-button>\r\n }\r\n </summary>\r\n\r\n <!-- content wrapper -->\r\n @if (aggregation()?.searchable && items().length) {\r\n <InputGroup class=\"group/item mt-1\">\r\n <input\r\n #searchInput\r\n input-group\r\n id=\"aggregation-input-{{ column() }}\"\r\n type=\"text\"\r\n [attr.placeholder]=\"'search' | transloco\"\r\n [(ngModel)]=\"searchText\"\r\n class=\"mt-1\" />\r\n <InputGroupAddon>\r\n <SearchIcon\r\n class=\"text-foreground size-4 rotate-0 transition-[rotate] duration-500 group-focus-within/item:rotate-90\" />\r\n </InputGroupAddon>\r\n <InputGroupAddon align=\"inline-end\" class=\"gap-0.5!\">\r\n <icon-button\r\n size=\"sm\"\r\n [class]=\"\r\n searchText().length > 0\r\n ? 'rotate-90 cursor-pointer opacity-100 transition-[rotate,opacity] duration-500'\r\n : 'pointer-events-none rotate-0 opacity-0 transition-[rotate,opacity] duration-500'\r\n \"\r\n aria-label=\"Clear search\"\r\n [tabindex]=\"searchText().length > 0 ? 0 : -1\"\r\n (keydown.enter)=\"clearSearch($event)\"\r\n (click)=\"clearSearch($event)\">\r\n <XMarkIcon />\r\n </icon-button>\r\n <ng-content />\r\n </InputGroupAddon>\r\n </InputGroup>\r\n }\r\n\r\n <div\r\n #scrollElement\r\n class=\"scrollbar-thin max-h-[calc(var(--height,100%)-100px)] w-full overflow-auto\">\r\n <div\r\n class=\"relative w-full\"\r\n [style.height]=\"virtualizer.getTotalSize() + 'px'\"\r\n role=\"list\"\r\n [attr.aria-label]=\"aggregation()?.display | syslang | transloco\">\r\n <div\r\n class=\"absolute top-0 left-0 w-full\"\r\n [style.transform]=\"\r\n 'translateY(' +\r\n (virtualizer.getVirtualItems()[0]\r\n ? virtualizer.getVirtualItems()[0].start\r\n : 0) +\r\n 'px)'\r\n \"\r\n role=\"listitem\">\r\n @for (vItem of virtualizer.getVirtualItems(); track vItem.index) {\r\n @let item = items()[vItem.index];\r\n <div #virtualItem [attr.data-index]=\"vItem.index\">\r\n <AggregationTreeItem\r\n [node]=\"item\"\r\n [path]=\"[]\"\r\n [field]=\"aggregation()?.column\"\r\n (onSelect)=\"select()\"\r\n (onOpen)=\"open($event)\"\r\n (onFilter)=\"apply()\" />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n @if (aggregation()?.$hasMore && this.searchedItems().length === 0) {\r\n <button\r\n class=\"mt-1 flex w-full justify-center\"\r\n [attr.aria-label]=\"'loadMore' | transloco\"\r\n (click)=\"loadMore()\">\r\n {{ \"loadMore\" | transloco }}\r\n </button>\r\n }\r\n</details>\r\n", styles: ["AggregationTreeItem:has(+AggregationTreeItem){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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: AggregationTreeItemComponent, selector: "aggregation-tree-item, AggregationTreeItem, aggregationtreeitem", inputs: ["node", "path", "field"], outputs: ["onSelect", "onOpen", "onFilter"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "scheme", "size"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon, chevron-right-icon, chevronrighticon", 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: "component", type: SearchIcon, selector: "SearchIcon", inputs: ["class"] }, { kind: "component", type: FilterIcon, selector: "filter-icon, FilterIcon", inputs: ["class"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "component", type: TriangleAlertIcon, selector: "triangle-alert-icon, TriangleAlertIcon", inputs: ["class"] }, { kind: "component", type: FilterXIcon, selector: "filter-x-icon, FilterXIcon", inputs: ["class"] }, { kind: "component", type: SquareCheckIcon, selector: "square-check-icon, SquareCheckIcon", inputs: ["class"] }, { kind: "component", type: SquareIcon, selector: "square-icon, SquareIcon", inputs: ["class"] }, { kind: "component", type: XMarkIcon, selector: "XMarkIcon, xmark-icon, x-mark-icon", inputs: ["class"] }, { kind: "directive", type: IconButtonComponent, selector: "button[icon-button], icon-button, IconButton", inputs: ["class", "size"] }, { kind: "pipe", type: SyslangPipe, name: "syslang" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
13759
13805
|
}
|
|
13760
13806
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AggregationTreeComponent, decorators: [{
|
|
13761
13807
|
type: Component,
|
|
@@ -13768,15 +13814,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
13768
13814
|
TranslocoPipe,
|
|
13769
13815
|
BadgeComponent,
|
|
13770
13816
|
ChevronRightIcon,
|
|
13771
|
-
ButtonGroup,
|
|
13772
13817
|
InputGroupInput,
|
|
13773
13818
|
InputGroupComponent,
|
|
13774
13819
|
InputGroupAddonComponent,
|
|
13775
13820
|
SearchIcon,
|
|
13776
|
-
FilterIcon
|
|
13821
|
+
FilterIcon,
|
|
13822
|
+
FaIconComponent,
|
|
13823
|
+
TriangleAlertIcon,
|
|
13824
|
+
FilterXIcon,
|
|
13825
|
+
SquareCheckIcon,
|
|
13826
|
+
SquareIcon,
|
|
13827
|
+
XMarkIcon,
|
|
13828
|
+
IconButtonComponent
|
|
13777
13829
|
], standalone: true, host: {
|
|
13778
13830
|
"[class]": 'cn("block h-[inherit] max-h-[inherit] w-[inherit]",class())'
|
|
13779
|
-
}, template: "@if (!aggregation()?.isTree) {\r\n <div class=\"p-2 text-sm text-red-500\">\r\n <
|
|
13831
|
+
}, template: "@if (!aggregation()?.isTree) {\r\n <div class=\"p-2 text-sm text-red-500\">\r\n <triangle-alert-icon class=\"mr-1\" />\r\n The aggregationTree component does not support list aggregations. Please use\r\n the <Aggregation /> component instead.\r\n </div>\r\n}\r\n<details\r\n [attr.open]=\"expanded()\"\r\n [attr.name]=\"id()\"\r\n class=\"group space-y-2\"\r\n (toggle)=\"onToggle($event)\">\r\n <summary\r\n [class.cursor-pointer]=\"collapsible() && !isEmpty()\"\r\n [class.text-muted-foreground]=\"isEmpty()\"\r\n class=\"m-0 mt-1 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\r\n (click)=\"onHeaderClick($event)\">\r\n <ng-content select=\"label\">\r\n @let icon = aggregation()?.icon;\r\n @if (icon) {\r\n <fa-icon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\r\n }\r\n <span class=\"grow truncate\">{{\r\n aggregation()?.display | syslang | transloco\r\n }}</span>\r\n </ng-content>\r\n\r\n @if (showFiltersCount() && filtersCount() > 0) {\r\n <!-- count -->\r\n <Badge size=\"xs\" class=\"ml-1\">\r\n {{ filtersCount() }}\r\n </Badge>\r\n }\r\n <!-- apply filter block -->\r\n @if (!isCollapsed()) {\r\n @if (hasFilters()) {\r\n @let label = \"filters.clearFilters\" | transloco;\r\n <button\r\n variant=\"none\"\r\n icon-button\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); clear()\">\r\n <filter-x-icon />\r\n </button>\r\n }\r\n @if (selection()) {\r\n @let label = \"filters.apply\" | transloco;\r\n <button\r\n variant=\"accent\"\r\n size=\"sm\"\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); apply()\">\r\n <FilterIcon />\r\n {{ label }}\r\n </button>\r\n }\r\n\r\n <!-- select / unselect all -->\r\n @if (isAllSelected()) {\r\n @let label = \"filters.unselectAllFilters\" | transloco;\r\n <button\r\n variant=\"none\"\r\n icon-button\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); unselectAll()\">\r\n <square-check-icon />\r\n </button>\r\n } @else {\r\n @let label = \"filters.selectAllFilters\" | transloco;\r\n <button\r\n variant=\"none\"\r\n icon-button\r\n [aria-label]=\"label\"\r\n (click)=\"$event.stopPropagation(); selectAll()\">\r\n <square-icon />\r\n </button>\r\n }\r\n }\r\n\r\n @if (collapsible()) {\r\n <icon-button\r\n title=\"Open/Close\"\r\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\r\n <chevronright />\r\n <span class=\"sr-only\">{{ \"filters.toggle\" | transloco }}</span>\r\n </icon-button>\r\n }\r\n </summary>\r\n\r\n <!-- content wrapper -->\r\n @if (aggregation()?.searchable && items().length) {\r\n <InputGroup class=\"group/item mt-1\">\r\n <input\r\n #searchInput\r\n input-group\r\n id=\"aggregation-input-{{ column() }}\"\r\n type=\"text\"\r\n [attr.placeholder]=\"'search' | transloco\"\r\n [(ngModel)]=\"searchText\"\r\n class=\"mt-1\" />\r\n <InputGroupAddon>\r\n <SearchIcon\r\n class=\"text-foreground size-4 rotate-0 transition-[rotate] duration-500 group-focus-within/item:rotate-90\" />\r\n </InputGroupAddon>\r\n <InputGroupAddon align=\"inline-end\" class=\"gap-0.5!\">\r\n <icon-button\r\n size=\"sm\"\r\n [class]=\"\r\n searchText().length > 0\r\n ? 'rotate-90 cursor-pointer opacity-100 transition-[rotate,opacity] duration-500'\r\n : 'pointer-events-none rotate-0 opacity-0 transition-[rotate,opacity] duration-500'\r\n \"\r\n aria-label=\"Clear search\"\r\n [tabindex]=\"searchText().length > 0 ? 0 : -1\"\r\n (keydown.enter)=\"clearSearch($event)\"\r\n (click)=\"clearSearch($event)\">\r\n <XMarkIcon />\r\n </icon-button>\r\n <ng-content />\r\n </InputGroupAddon>\r\n </InputGroup>\r\n }\r\n\r\n <div\r\n #scrollElement\r\n class=\"scrollbar-thin max-h-[calc(var(--height,100%)-100px)] w-full overflow-auto\">\r\n <div\r\n class=\"relative w-full\"\r\n [style.height]=\"virtualizer.getTotalSize() + 'px'\"\r\n role=\"list\"\r\n [attr.aria-label]=\"aggregation()?.display | syslang | transloco\">\r\n <div\r\n class=\"absolute top-0 left-0 w-full\"\r\n [style.transform]=\"\r\n 'translateY(' +\r\n (virtualizer.getVirtualItems()[0]\r\n ? virtualizer.getVirtualItems()[0].start\r\n : 0) +\r\n 'px)'\r\n \"\r\n role=\"listitem\">\r\n @for (vItem of virtualizer.getVirtualItems(); track vItem.index) {\r\n @let item = items()[vItem.index];\r\n <div #virtualItem [attr.data-index]=\"vItem.index\">\r\n <AggregationTreeItem\r\n [node]=\"item\"\r\n [path]=\"[]\"\r\n [field]=\"aggregation()?.column\"\r\n (onSelect)=\"select()\"\r\n (onOpen)=\"open($event)\"\r\n (onFilter)=\"apply()\" />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n @if (aggregation()?.$hasMore && this.searchedItems().length === 0) {\r\n <button\r\n class=\"mt-1 flex w-full justify-center\"\r\n [attr.aria-label]=\"'loadMore' | transloco\"\r\n (click)=\"loadMore()\">\r\n {{ \"loadMore\" | transloco }}\r\n </button>\r\n }\r\n</details>\r\n", styles: ["AggregationTreeItem:has(+AggregationTreeItem){margin-bottom:var(--agg-item-gap, 0)}\n"] }]
|
|
13780
13832
|
}], ctorParameters: () => [], propDecorators: { virtualItems: [{ type: i0.ViewChildren, args: ['virtualItem', { isSignal: true }] }], scrollElement: [{ type: i0.ViewChild, args: ["scrollElement", { isSignal: true }] }], 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 }] }], expandedLevel: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedLevel", required: false }] }], onSelect: [{ type: i0.Output, args: ["onSelect"] }], onApply: [{ type: i0.Output, args: ["onApply"] }], onClear: [{ type: i0.Output, args: ["onClear"] }], 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"] }] } });
|
|
13781
13833
|
|
|
13782
13834
|
/**
|
|
@@ -13894,7 +13946,6 @@ class AggregationComponent {
|
|
|
13894
13946
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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 }, showFiltersCount: { classPropertyName: "showFiltersCount", publicName: "showFiltersCount", isSignal: true, isRequired: false, 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 }, expandedLevel: { classPropertyName: "expandedLevel", publicName: "expandedLevel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect", onApply: "onApply", onClear: "onClear" }, host: { properties: { "class": "cn(\"block h-[inherit] max-h-[inherit]\",class())" } }, viewQueries: [{ propertyName: "aggregationDate", first: true, predicate: AggregationDateComponent, descendants: true, isSignal: true }, { propertyName: "aggregationTree", first: true, predicate: AggregationTreeComponent, descendants: true, isSignal: true }, { propertyName: "aggregationList", first: true, predicate: AggregationListComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
13895
13947
|
@if (isDate(aggregation()?.column)) {
|
|
13896
13948
|
<AggregationDate
|
|
13897
|
-
class="max-w-80"
|
|
13898
13949
|
[id]="id()"
|
|
13899
13950
|
[name]="name()"
|
|
13900
13951
|
[column]="column()"
|
|
@@ -13908,7 +13959,6 @@ class AggregationComponent {
|
|
|
13908
13959
|
/>
|
|
13909
13960
|
} @else if (aggregation()?.isTree) {
|
|
13910
13961
|
<AggregationTree
|
|
13911
|
-
class="max-w-80"
|
|
13912
13962
|
[id]="id()"
|
|
13913
13963
|
[name]="name()"
|
|
13914
13964
|
[column]="column()"
|
|
@@ -13924,7 +13974,6 @@ class AggregationComponent {
|
|
|
13924
13974
|
}
|
|
13925
13975
|
@else {
|
|
13926
13976
|
<AggregationList
|
|
13927
|
-
class="w-60"
|
|
13928
13977
|
[id]="id()"
|
|
13929
13978
|
[name]="name()"
|
|
13930
13979
|
[column]="column()"
|
|
@@ -13947,7 +13996,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
13947
13996
|
template: `
|
|
13948
13997
|
@if (isDate(aggregation()?.column)) {
|
|
13949
13998
|
<AggregationDate
|
|
13950
|
-
class="max-w-80"
|
|
13951
13999
|
[id]="id()"
|
|
13952
14000
|
[name]="name()"
|
|
13953
14001
|
[column]="column()"
|
|
@@ -13961,7 +14009,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
13961
14009
|
/>
|
|
13962
14010
|
} @else if (aggregation()?.isTree) {
|
|
13963
14011
|
<AggregationTree
|
|
13964
|
-
class="max-w-80"
|
|
13965
14012
|
[id]="id()"
|
|
13966
14013
|
[name]="name()"
|
|
13967
14014
|
[column]="column()"
|
|
@@ -13977,7 +14024,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
13977
14024
|
}
|
|
13978
14025
|
@else {
|
|
13979
14026
|
<AggregationList
|
|
13980
|
-
class="w-60"
|
|
13981
14027
|
[id]="id()"
|
|
13982
14028
|
[name]="name()"
|
|
13983
14029
|
[column]="column()"
|
|
@@ -14099,7 +14145,7 @@ class FilterButtonComponent {
|
|
|
14099
14145
|
});
|
|
14100
14146
|
effect(() => {
|
|
14101
14147
|
const f = this.filter();
|
|
14102
|
-
this.variant.update(() => (f.count ? "
|
|
14148
|
+
this.variant.update(() => (f.count ? "primary" : "ghost"));
|
|
14103
14149
|
});
|
|
14104
14150
|
}
|
|
14105
14151
|
/**
|
|
@@ -14121,8 +14167,9 @@ class FilterButtonComponent {
|
|
|
14121
14167
|
[disabled]="filter().disabled || null"
|
|
14122
14168
|
>
|
|
14123
14169
|
<!-- display the filter icon if set -->
|
|
14124
|
-
@
|
|
14125
|
-
|
|
14170
|
+
@let icon = filter().icon;
|
|
14171
|
+
@if (icon) {
|
|
14172
|
+
<fa-icon [faClass]="icon" />
|
|
14126
14173
|
}
|
|
14127
14174
|
|
|
14128
14175
|
@if (filter().legacyFilter && filter().display === 'custom-range') {
|
|
@@ -14136,7 +14183,7 @@ class FilterButtonComponent {
|
|
|
14136
14183
|
|
|
14137
14184
|
<!-- show the count of selected items -->
|
|
14138
14185
|
@if (filter().count > 1) {
|
|
14139
|
-
<Badge size="
|
|
14186
|
+
<Badge size="sm">+{{ filter().count - 1 }}</Badge>
|
|
14140
14187
|
}
|
|
14141
14188
|
</button>
|
|
14142
14189
|
|
|
@@ -14166,7 +14213,7 @@ class FilterButtonComponent {
|
|
|
14166
14213
|
}
|
|
14167
14214
|
</PopoverContent>
|
|
14168
14215
|
</Popover>
|
|
14169
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size"] }, { kind: "component", type: PopoverComponent, selector: "popover, Popover", inputs: ["disabled", "closeOnScroll"], outputs: ["closed"] }, { kind: "directive", type: PopoverContentComponent, selector: "popover-content, PopoverContent, popovercontent", inputs: ["class", "position", "keepOpen", "offset", "strategy"], exportAs: ["popoverContent"] }, { kind: "component", type: AggregationComponent, selector: "Aggregation, aggregation", inputs: ["class", "id", "name", "column", "showFiltersCount", "collapsible", "collapsed", "searchable", "expandedLevel"], outputs: ["onSelect", "onApply", "onClear"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "size"] }, { kind: "pipe", type: OperatorPipe, name: "operator" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
|
|
14216
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: PopoverComponent, selector: "popover, Popover", inputs: ["disabled", "closeOnScroll"], outputs: ["closed"] }, { kind: "directive", type: PopoverContentComponent, selector: "popover-content, PopoverContent, popovercontent", inputs: ["class", "position", "keepOpen", "offset", "strategy"], exportAs: ["popoverContent"] }, { kind: "component", type: AggregationComponent, selector: "Aggregation, aggregation", inputs: ["class", "id", "name", "column", "showFiltersCount", "collapsible", "collapsed", "searchable", "expandedLevel"], outputs: ["onSelect", "onApply", "onClear"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "scheme", "size"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "pipe", type: OperatorPipe, name: "operator" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
|
|
14170
14217
|
}
|
|
14171
14218
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: FilterButtonComponent, decorators: [{
|
|
14172
14219
|
type: Component,
|
|
@@ -14181,7 +14228,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
14181
14228
|
TranslocoPipe,
|
|
14182
14229
|
AggregationComponent,
|
|
14183
14230
|
SyslangPipe,
|
|
14184
|
-
BadgeComponent
|
|
14231
|
+
BadgeComponent,
|
|
14232
|
+
FaIconComponent
|
|
14185
14233
|
],
|
|
14186
14234
|
template: `
|
|
14187
14235
|
<Popover [disabled]="filter().disabled" class="group">
|
|
@@ -14192,8 +14240,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
14192
14240
|
[disabled]="filter().disabled || null"
|
|
14193
14241
|
>
|
|
14194
14242
|
<!-- display the filter icon if set -->
|
|
14195
|
-
@
|
|
14196
|
-
|
|
14243
|
+
@let icon = filter().icon;
|
|
14244
|
+
@if (icon) {
|
|
14245
|
+
<fa-icon [faClass]="icon" />
|
|
14197
14246
|
}
|
|
14198
14247
|
|
|
14199
14248
|
@if (filter().legacyFilter && filter().display === 'custom-range') {
|
|
@@ -14207,7 +14256,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
14207
14256
|
|
|
14208
14257
|
<!-- show the count of selected items -->
|
|
14209
14258
|
@if (filter().count > 1) {
|
|
14210
|
-
<Badge size="
|
|
14259
|
+
<Badge size="sm">+{{ filter().count - 1 }}</Badge>
|
|
14211
14260
|
}
|
|
14212
14261
|
</button>
|
|
14213
14262
|
|
|
@@ -14334,7 +14383,7 @@ class MoreComponent {
|
|
|
14334
14383
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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: `
|
|
14335
14384
|
@for (filter of visibleFilters(); track $index) {
|
|
14336
14385
|
<Aggregation
|
|
14337
|
-
class="w-60 max-w-80 [--height:15lh]"
|
|
14386
|
+
class="w-60 max-w-80 px-1 [--height:15lh]"
|
|
14338
14387
|
id="more-filters"
|
|
14339
14388
|
[attr.title]="'filters.openFilter' | transloco: { filter: filter.display || filter.name }"
|
|
14340
14389
|
showFiltersCount
|
|
@@ -14350,7 +14399,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
14350
14399
|
args: [{ selector: "more, More", standalone: true, imports: [AggregationComponent, TranslocoPipe], template: `
|
|
14351
14400
|
@for (filter of visibleFilters(); track $index) {
|
|
14352
14401
|
<Aggregation
|
|
14353
|
-
class="w-60 max-w-80 [--height:15lh]"
|
|
14402
|
+
class="w-60 max-w-80 px-1 [--height:15lh]"
|
|
14354
14403
|
id="more-filters"
|
|
14355
14404
|
[attr.title]="'filters.openFilter' | transloco: { filter: filter.display || filter.name }"
|
|
14356
14405
|
showFiltersCount
|
|
@@ -14393,11 +14442,11 @@ class MoreButtonComponent {
|
|
|
14393
14442
|
variant="ghost"
|
|
14394
14443
|
class="group-open/more:border-foreground/18 gap-1 truncate font-semibold group-open/more:border"
|
|
14395
14444
|
aria-label="more filters">
|
|
14396
|
-
<
|
|
14445
|
+
<list-filter-icon aria-hidden="true" />
|
|
14397
14446
|
<span sr-only class="hidden sm:inline">{{ 'filters.moreFilters' | transloco }}</span>
|
|
14398
14447
|
|
|
14399
14448
|
@if (totalFiltersCount() > 0) {
|
|
14400
|
-
<Badge size="xs"
|
|
14449
|
+
<Badge size="xs">
|
|
14401
14450
|
{{ totalFiltersCount() }}
|
|
14402
14451
|
</Badge>
|
|
14403
14452
|
}
|
|
@@ -14409,25 +14458,25 @@ class MoreButtonComponent {
|
|
|
14409
14458
|
}
|
|
14410
14459
|
</PopoverContent>
|
|
14411
14460
|
</Popover>
|
|
14412
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size"] }, { kind: "component", type: PopoverComponent, selector: "popover, Popover", inputs: ["disabled", "closeOnScroll"], outputs: ["closed"] }, { kind: "directive", type: PopoverContentComponent, selector: "popover-content, PopoverContent, popovercontent", inputs: ["class", "position", "keepOpen", "offset", "strategy"], exportAs: ["popoverContent"] }, { kind: "component", type: MoreComponent, selector: "more, More", inputs: ["count", "includedFilters", "excludedFilters", "aggregations"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "size"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
14461
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: PopoverComponent, selector: "popover, Popover", inputs: ["disabled", "closeOnScroll"], outputs: ["closed"] }, { kind: "directive", type: PopoverContentComponent, selector: "popover-content, PopoverContent, popovercontent", inputs: ["class", "position", "keepOpen", "offset", "strategy"], exportAs: ["popoverContent"] }, { kind: "component", type: MoreComponent, selector: "more, More", inputs: ["count", "includedFilters", "excludedFilters", "aggregations"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "scheme", "size"] }, { kind: "component", type: ListFilterIcon, selector: "list-filter-icon, ListFilterIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
14413
14462
|
}
|
|
14414
14463
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: MoreButtonComponent, decorators: [{
|
|
14415
14464
|
type: Component,
|
|
14416
14465
|
args: [{
|
|
14417
14466
|
selector: "more-button, MoreButton",
|
|
14418
14467
|
standalone: true,
|
|
14419
|
-
imports: [ButtonComponent, PopoverComponent, PopoverContentComponent, TranslocoPipe, MoreComponent, BadgeComponent],
|
|
14468
|
+
imports: [ButtonComponent, PopoverComponent, PopoverContentComponent, TranslocoPipe, MoreComponent, BadgeComponent, ListFilterIcon],
|
|
14420
14469
|
template: `
|
|
14421
14470
|
<Popover class="group/more">
|
|
14422
14471
|
<button
|
|
14423
14472
|
variant="ghost"
|
|
14424
14473
|
class="group-open/more:border-foreground/18 gap-1 truncate font-semibold group-open/more:border"
|
|
14425
14474
|
aria-label="more filters">
|
|
14426
|
-
<
|
|
14475
|
+
<list-filter-icon aria-hidden="true" />
|
|
14427
14476
|
<span sr-only class="hidden sm:inline">{{ 'filters.moreFilters' | transloco }}</span>
|
|
14428
14477
|
|
|
14429
14478
|
@if (totalFiltersCount() > 0) {
|
|
14430
|
-
<Badge size="xs"
|
|
14479
|
+
<Badge size="xs">
|
|
14431
14480
|
{{ totalFiltersCount() }}
|
|
14432
14481
|
</Badge>
|
|
14433
14482
|
}
|
|
@@ -14625,13 +14674,13 @@ class FiltersBarComponent {
|
|
|
14625
14674
|
@if (hasFilters()) {
|
|
14626
14675
|
<button
|
|
14627
14676
|
variant="destructive"
|
|
14628
|
-
|
|
14677
|
+
[iconOnly]="true"
|
|
14629
14678
|
class="shrink-0 size-9"
|
|
14630
14679
|
role="listitem"
|
|
14631
14680
|
[title]="'filters.clearAllFilters' | transloco"
|
|
14632
14681
|
(click)="clearFilters()"
|
|
14633
14682
|
(keydown.enter)="clearFilters()">
|
|
14634
|
-
<
|
|
14683
|
+
<trash-can-icon />
|
|
14635
14684
|
</button>
|
|
14636
14685
|
}
|
|
14637
14686
|
|
|
@@ -14643,14 +14692,14 @@ class FiltersBarComponent {
|
|
|
14643
14692
|
[title]="'filters.clearBasket' | transloco"
|
|
14644
14693
|
(click)="clearBasket()"
|
|
14645
14694
|
(keydown.enter)="clearBasket()">
|
|
14646
|
-
<
|
|
14695
|
+
<inbox-icon />
|
|
14647
14696
|
<p class="truncate">{{ currentBasket() }}</p>
|
|
14648
14697
|
</button>
|
|
14649
14698
|
}
|
|
14650
14699
|
|
|
14651
14700
|
@if (hasAggregations()) {
|
|
14652
14701
|
<div
|
|
14653
|
-
[class]="cn('flex gap-1
|
|
14702
|
+
[class]="cn('flex gap-1 z-filter flex-1 min-w-0', direction() === 'vertical' ? 'flex-col items-start' : 'flex-row')"
|
|
14654
14703
|
role="list"
|
|
14655
14704
|
aria-label="Filters list">
|
|
14656
14705
|
@for (filter of authorizedFilters(); track filter.name) {
|
|
@@ -14672,7 +14721,7 @@ class FiltersBarComponent {
|
|
|
14672
14721
|
}
|
|
14673
14722
|
}
|
|
14674
14723
|
</div>
|
|
14675
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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", "expandedLevel"] }, { 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" }] });
|
|
14724
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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", "expandedLevel"] }, { 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: "component", type: TrashCanIcon, selector: "trash-can-icon, TrashCanIcon", inputs: ["class"] }, { kind: "component", type: InboxIcon, selector: "inbox-icon, InboxIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
14676
14725
|
}
|
|
14677
14726
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: FiltersBarComponent, decorators: [{
|
|
14678
14727
|
type: Component,
|
|
@@ -14686,7 +14735,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
14686
14735
|
OverflowManagerDirective,
|
|
14687
14736
|
OverflowItemDirective,
|
|
14688
14737
|
OverflowStopDirective,
|
|
14689
|
-
TranslocoPipe
|
|
14738
|
+
TranslocoPipe,
|
|
14739
|
+
TrashCanIcon,
|
|
14740
|
+
InboxIcon
|
|
14690
14741
|
],
|
|
14691
14742
|
providers: [provideTranslocoScope("filters")],
|
|
14692
14743
|
template: `
|
|
@@ -14694,13 +14745,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
14694
14745
|
@if (hasFilters()) {
|
|
14695
14746
|
<button
|
|
14696
14747
|
variant="destructive"
|
|
14697
|
-
|
|
14748
|
+
[iconOnly]="true"
|
|
14698
14749
|
class="shrink-0 size-9"
|
|
14699
14750
|
role="listitem"
|
|
14700
14751
|
[title]="'filters.clearAllFilters' | transloco"
|
|
14701
14752
|
(click)="clearFilters()"
|
|
14702
14753
|
(keydown.enter)="clearFilters()">
|
|
14703
|
-
<
|
|
14754
|
+
<trash-can-icon />
|
|
14704
14755
|
</button>
|
|
14705
14756
|
}
|
|
14706
14757
|
|
|
@@ -14712,14 +14763,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
14712
14763
|
[title]="'filters.clearBasket' | transloco"
|
|
14713
14764
|
(click)="clearBasket()"
|
|
14714
14765
|
(keydown.enter)="clearBasket()">
|
|
14715
|
-
<
|
|
14766
|
+
<inbox-icon />
|
|
14716
14767
|
<p class="truncate">{{ currentBasket() }}</p>
|
|
14717
14768
|
</button>
|
|
14718
14769
|
}
|
|
14719
14770
|
|
|
14720
14771
|
@if (hasAggregations()) {
|
|
14721
14772
|
<div
|
|
14722
|
-
[class]="cn('flex gap-1
|
|
14773
|
+
[class]="cn('flex gap-1 z-filter flex-1 min-w-0', direction() === 'vertical' ? 'flex-col items-start' : 'flex-row')"
|
|
14723
14774
|
role="list"
|
|
14724
14775
|
aria-label="Filters list">
|
|
14725
14776
|
@for (filter of authorizedFilters(); track filter.name) {
|
|
@@ -15061,7 +15112,7 @@ class MultiSelectLabelsComponent {
|
|
|
15061
15112
|
<Badge>
|
|
15062
15113
|
{{ label }}
|
|
15063
15114
|
@if (allowModification()) {
|
|
15064
|
-
<
|
|
15115
|
+
<circle-x-icon class="ms-1 cursor-pointer" (click)="removeLabel(label, isPublic())" />
|
|
15065
15116
|
}
|
|
15066
15117
|
</Badge>
|
|
15067
15118
|
}
|
|
@@ -15071,11 +15122,11 @@ class MultiSelectLabelsComponent {
|
|
|
15071
15122
|
{{ 'labels.error' | transloco }}
|
|
15072
15123
|
</div>
|
|
15073
15124
|
}
|
|
15074
|
-
`, 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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "size"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
15125
|
+
`, 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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "scheme", "size"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "component", type: CircleXIcon, selector: "circle-x, CircleX, circlex, circle-x-icon, CircleXIcon, circlexicon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
15075
15126
|
}
|
|
15076
15127
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: MultiSelectLabelsComponent, decorators: [{
|
|
15077
15128
|
type: Component,
|
|
15078
|
-
args: [{ selector: "multiselect-labels, multiselectlabels, MultiSelectLabels", providers: [provideTranslocoScope("labels")], standalone: true, imports: [FormsModule, NgStyle, TranslocoPipe, InputComponent, BadgeComponent, ListItemComponent], template: `
|
|
15129
|
+
args: [{ selector: "multiselect-labels, multiselectlabels, MultiSelectLabels", providers: [provideTranslocoScope("labels")], standalone: true, imports: [FormsModule, NgStyle, TranslocoPipe, InputComponent, BadgeComponent, ListItemComponent, CircleXIcon], template: `
|
|
15079
15130
|
<div class="anchor" [ngStyle]="{ 'anchor-name': anchor() }">
|
|
15080
15131
|
<label [htmlFor]="id()" class="font-semibold">{{ (isPublic() ? 'labels.publicLabels' : 'labels.privateLabels') | transloco }}</label>
|
|
15081
15132
|
<input
|
|
@@ -15107,7 +15158,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
15107
15158
|
<Badge>
|
|
15108
15159
|
{{ label }}
|
|
15109
15160
|
@if (allowModification()) {
|
|
15110
|
-
<
|
|
15161
|
+
<circle-x-icon class="ms-1 cursor-pointer" (click)="removeLabel(label, isPublic())" />
|
|
15111
15162
|
}
|
|
15112
15163
|
</Badge>
|
|
15113
15164
|
}
|
|
@@ -15148,7 +15199,7 @@ class LabelsEditDialog {
|
|
|
15148
15199
|
<DialogHeader>
|
|
15149
15200
|
<DialogTitle>{{ 'labels.title' | transloco }}</DialogTitle>
|
|
15150
15201
|
<p class="text-muted-foreground">
|
|
15151
|
-
<
|
|
15202
|
+
<info-circle-icon /><span class="ps-1">{{ 'labels.info' | transloco }}</span>
|
|
15152
15203
|
</p>
|
|
15153
15204
|
</DialogHeader>
|
|
15154
15205
|
|
|
@@ -15170,7 +15221,7 @@ class LabelsEditDialog {
|
|
|
15170
15221
|
</DialogFooter>
|
|
15171
15222
|
</DialogContent>
|
|
15172
15223
|
</dialog>
|
|
15173
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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" }] });
|
|
15224
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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: "component", type: InfoCircleIcon, selector: "info-circle-icon, InfoCircleIcon, infocircleicon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
15174
15225
|
}
|
|
15175
15226
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: LabelsEditDialog, decorators: [{
|
|
15176
15227
|
type: Component,
|
|
@@ -15186,7 +15237,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
15186
15237
|
DialogFooterComponent,
|
|
15187
15238
|
DialogTitleComponent,
|
|
15188
15239
|
DialogContentComponent,
|
|
15189
|
-
MultiSelectLabelsComponent
|
|
15240
|
+
MultiSelectLabelsComponent,
|
|
15241
|
+
InfoCircleIcon
|
|
15190
15242
|
],
|
|
15191
15243
|
providers: [provideTranslocoScope("labels")],
|
|
15192
15244
|
template: `
|
|
@@ -15195,7 +15247,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
15195
15247
|
<DialogHeader>
|
|
15196
15248
|
<DialogTitle>{{ 'labels.title' | transloco }}</DialogTitle>
|
|
15197
15249
|
<p class="text-muted-foreground">
|
|
15198
|
-
<
|
|
15250
|
+
<info-circle-icon /><span class="ps-1">{{ 'labels.info' | transloco }}</span>
|
|
15199
15251
|
</p>
|
|
15200
15252
|
</DialogHeader>
|
|
15201
15253
|
|
|
@@ -15232,14 +15284,16 @@ class SearchFooterComponent {
|
|
|
15232
15284
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SearchFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15233
15285
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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">
|
|
15234
15286
|
@if (hasMore() && config().showLoadMore) {
|
|
15235
|
-
|
|
15236
|
-
|
|
15287
|
+
@let loadMore = 'loadMore' | transloco;
|
|
15288
|
+
<button variant="outline" class="w-full" tabindex="0" [attr.title]="loadMore" (click)="onLoadMore($event)">
|
|
15289
|
+
{{ loadMore }}
|
|
15237
15290
|
</button>
|
|
15238
15291
|
}
|
|
15292
|
+
@let seeMore = 'seeMore' | transloco;
|
|
15239
15293
|
<button variant="link" class="ml-auto" [attr.title]="'seeMore' | transloco" [routerLink]="[config().routerLink]">
|
|
15240
|
-
{{
|
|
15294
|
+
{{ seeMore }}
|
|
15241
15295
|
</button>
|
|
15242
|
-
</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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
15296
|
+
</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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
15243
15297
|
}
|
|
15244
15298
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SearchFooterComponent, decorators: [{
|
|
15245
15299
|
type: Component,
|
|
@@ -15248,12 +15302,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
15248
15302
|
imports: [TranslocoPipe, RouterLink, ButtonComponent],
|
|
15249
15303
|
template: ` <div class="flex flex-col px-2">
|
|
15250
15304
|
@if (hasMore() && config().showLoadMore) {
|
|
15251
|
-
|
|
15252
|
-
|
|
15305
|
+
@let loadMore = 'loadMore' | transloco;
|
|
15306
|
+
<button variant="outline" class="w-full" tabindex="0" [attr.title]="loadMore" (click)="onLoadMore($event)">
|
|
15307
|
+
{{ loadMore }}
|
|
15253
15308
|
</button>
|
|
15254
15309
|
}
|
|
15310
|
+
@let seeMore = 'seeMore' | transloco;
|
|
15255
15311
|
<button variant="link" class="ml-auto" [attr.title]="'seeMore' | transloco" [routerLink]="[config().routerLink]">
|
|
15256
|
-
{{
|
|
15312
|
+
{{ seeMore }}
|
|
15257
15313
|
</button>
|
|
15258
15314
|
</div>`
|
|
15259
15315
|
}]
|
|
@@ -15329,7 +15385,7 @@ class SearchListComponent {
|
|
|
15329
15385
|
|
|
15330
15386
|
@let filterCount = search.filterCount || 0;
|
|
15331
15387
|
@if (filterCount > 0) {
|
|
15332
|
-
<Badge
|
|
15388
|
+
<Badge class="flex items-center text-xs text-grey-500" aria-hidden="true">
|
|
15333
15389
|
<FilterIcon />
|
|
15334
15390
|
{{ 'searches.filterCount' | transloco: { count: filterCount } }}
|
|
15335
15391
|
</Badge>
|
|
@@ -15337,12 +15393,12 @@ class SearchListComponent {
|
|
|
15337
15393
|
|
|
15338
15394
|
@let date = search.date;
|
|
15339
15395
|
@if (date) {
|
|
15340
|
-
<Badge
|
|
15396
|
+
<Badge class="ms-auto text-xs text-grey-500 first-letter:capitalize">{{ getRelativeDate(transloco.getActiveLang(), date) }}</Badge>
|
|
15341
15397
|
}
|
|
15342
15398
|
|
|
15343
15399
|
<button
|
|
15344
15400
|
variant="ghost"
|
|
15345
|
-
|
|
15401
|
+
[iconOnly]="true"
|
|
15346
15402
|
class="text-destructive group-hover:visible"
|
|
15347
15403
|
[title]="deleteButtonTitle() | transloco"
|
|
15348
15404
|
[attr.aria-label]="deleteButtonTitle() | transloco"
|
|
@@ -15351,11 +15407,11 @@ class SearchListComponent {
|
|
|
15351
15407
|
</button>
|
|
15352
15408
|
</li>
|
|
15353
15409
|
} @empty {
|
|
15354
|
-
<
|
|
15410
|
+
<span class="py-4 text-center text-neutral-500">
|
|
15355
15411
|
<ng-content />
|
|
15356
|
-
</
|
|
15412
|
+
</span>
|
|
15357
15413
|
}
|
|
15358
|
-
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size"] }, { kind: "component", type: TrashIcon, selector: "trash-icon, TrashIcon", inputs: ["class"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "size"] }, { kind: "component", type: FilterIcon, selector: "filter-icon, FilterIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
15414
|
+
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: TrashIcon, selector: "trash-icon, TrashIcon", inputs: ["class"] }, { kind: "directive", type: BadgeComponent, selector: "badge, Badge", inputs: ["class", "variant", "scheme", "size"] }, { kind: "component", type: FilterIcon, selector: "filter-icon, FilterIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
15359
15415
|
}
|
|
15360
15416
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SearchListComponent, decorators: [{
|
|
15361
15417
|
type: Component,
|
|
@@ -15380,7 +15436,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
15380
15436
|
|
|
15381
15437
|
@let filterCount = search.filterCount || 0;
|
|
15382
15438
|
@if (filterCount > 0) {
|
|
15383
|
-
<Badge
|
|
15439
|
+
<Badge class="flex items-center text-xs text-grey-500" aria-hidden="true">
|
|
15384
15440
|
<FilterIcon />
|
|
15385
15441
|
{{ 'searches.filterCount' | transloco: { count: filterCount } }}
|
|
15386
15442
|
</Badge>
|
|
@@ -15388,12 +15444,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
15388
15444
|
|
|
15389
15445
|
@let date = search.date;
|
|
15390
15446
|
@if (date) {
|
|
15391
|
-
<Badge
|
|
15447
|
+
<Badge class="ms-auto text-xs text-grey-500 first-letter:capitalize">{{ getRelativeDate(transloco.getActiveLang(), date) }}</Badge>
|
|
15392
15448
|
}
|
|
15393
15449
|
|
|
15394
15450
|
<button
|
|
15395
15451
|
variant="ghost"
|
|
15396
|
-
|
|
15452
|
+
[iconOnly]="true"
|
|
15397
15453
|
class="text-destructive group-hover:visible"
|
|
15398
15454
|
[title]="deleteButtonTitle() | transloco"
|
|
15399
15455
|
[attr.aria-label]="deleteButtonTitle() | transloco"
|
|
@@ -15402,9 +15458,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
15402
15458
|
</button>
|
|
15403
15459
|
</li>
|
|
15404
15460
|
} @empty {
|
|
15405
|
-
<
|
|
15461
|
+
<span class="py-4 text-center text-neutral-500">
|
|
15406
15462
|
<ng-content />
|
|
15407
|
-
</
|
|
15463
|
+
</span>
|
|
15408
15464
|
}
|
|
15409
15465
|
`,
|
|
15410
15466
|
host: {
|
|
@@ -15417,9 +15473,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
15417
15473
|
const RECENT_SEARCHES_OPTIONS = {
|
|
15418
15474
|
itemsPerPage: 10,
|
|
15419
15475
|
showLoadMore: true,
|
|
15420
|
-
routerLink:
|
|
15476
|
+
routerLink: "/recent-searches"
|
|
15421
15477
|
};
|
|
15422
|
-
const RECENT_SEARCHES_CONFIG = new InjectionToken(
|
|
15478
|
+
const RECENT_SEARCHES_CONFIG = new InjectionToken("recent searches options", {
|
|
15423
15479
|
factory: () => RECENT_SEARCHES_OPTIONS
|
|
15424
15480
|
});
|
|
15425
15481
|
class RecentSearchesComponent {
|
|
@@ -15435,14 +15491,15 @@ class RecentSearchesComponent {
|
|
|
15435
15491
|
recentSearches = computed(() => (this.userSettingsStore.recentSearches() || []).reduce((acc, item) => {
|
|
15436
15492
|
const queryParams = getQueryParamsFromUrl(item.url);
|
|
15437
15493
|
acc.push(Object.assign(item, {
|
|
15438
|
-
label: queryParams?.text ||
|
|
15494
|
+
label: queryParams?.text || "",
|
|
15439
15495
|
filterCount: queryParams?.filters?.length || 0,
|
|
15440
15496
|
queryParams
|
|
15441
15497
|
}));
|
|
15442
15498
|
return acc;
|
|
15443
15499
|
}, []), ...(ngDevMode ? [{ debugName: "recentSearches" }] : []));
|
|
15444
15500
|
paginatedRecentSearches = computed(() => this.recentSearches().slice(0, this.range()), ...(ngDevMode ? [{ debugName: "paginatedRecentSearches" }] : []));
|
|
15445
|
-
hasMore = computed(() => this.recentSearches().length > 0 &&
|
|
15501
|
+
hasMore = computed(() => this.recentSearches().length > 0 &&
|
|
15502
|
+
this.range() < this.recentSearches().length, ...(ngDevMode ? [{ debugName: "hasMore" }] : []));
|
|
15446
15503
|
constructor() {
|
|
15447
15504
|
effect(() => {
|
|
15448
15505
|
if (this.options()) {
|
|
@@ -15458,13 +15515,15 @@ class RecentSearchesComponent {
|
|
|
15458
15515
|
*/
|
|
15459
15516
|
async onDelete(index) {
|
|
15460
15517
|
await this.userSettingsStore.deleteRecentSearch(index);
|
|
15461
|
-
notify.success(this.transloco.translate(
|
|
15518
|
+
notify.success(this.transloco.translate("searches.recent.deleted"), {
|
|
15519
|
+
duration: 2000
|
|
15520
|
+
});
|
|
15462
15521
|
}
|
|
15463
15522
|
loadMore() {
|
|
15464
15523
|
this.range.set(this.range() + (this.config.itemsPerPage ?? 10));
|
|
15465
15524
|
}
|
|
15466
15525
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: RecentSearchesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15467
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
15526
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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: `
|
|
15468
15527
|
<SearchHeader [label]="'searches.recent.label' | transloco" />
|
|
15469
15528
|
|
|
15470
15529
|
<SearchList
|
|
@@ -15472,17 +15531,29 @@ class RecentSearchesComponent {
|
|
|
15472
15531
|
deleteButtonTitle="searches.recent.remove"
|
|
15473
15532
|
(delete)="onDelete($event)"
|
|
15474
15533
|
aria-label="recents searches">
|
|
15475
|
-
<
|
|
15534
|
+
<history-icon *childMarker />
|
|
15476
15535
|
<!-- empty content -->
|
|
15477
|
-
{{
|
|
15536
|
+
{{ "searches.recent.noRecentSearches" | transloco }}
|
|
15478
15537
|
</SearchList>
|
|
15479
15538
|
|
|
15480
|
-
|
|
15481
|
-
|
|
15539
|
+
@if (paginatedRecentSearches().length > 0) {
|
|
15540
|
+
<SearchFooter
|
|
15541
|
+
[hasMore]="hasMore()"
|
|
15542
|
+
[config]="config"
|
|
15543
|
+
(loadMore)="loadMore()" />
|
|
15544
|
+
}
|
|
15545
|
+
`, 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: "component", type: HistoryIcon, selector: "history-icon, HistoryIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
15482
15546
|
}
|
|
15483
15547
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: RecentSearchesComponent, decorators: [{
|
|
15484
15548
|
type: Component,
|
|
15485
|
-
args: [{ selector:
|
|
15549
|
+
args: [{ selector: "RecentSearches, recent-searches", standalone: true, providers: [provideTranslocoScope("searches")], imports: [
|
|
15550
|
+
TranslocoPipe,
|
|
15551
|
+
ChildMarkerDirective,
|
|
15552
|
+
SearchHeaderComponent,
|
|
15553
|
+
SearchListComponent,
|
|
15554
|
+
SearchFooterComponent,
|
|
15555
|
+
HistoryIcon
|
|
15556
|
+
], template: `
|
|
15486
15557
|
<SearchHeader [label]="'searches.recent.label' | transloco" />
|
|
15487
15558
|
|
|
15488
15559
|
<SearchList
|
|
@@ -15490,12 +15561,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
15490
15561
|
deleteButtonTitle="searches.recent.remove"
|
|
15491
15562
|
(delete)="onDelete($event)"
|
|
15492
15563
|
aria-label="recents searches">
|
|
15493
|
-
<
|
|
15564
|
+
<history-icon *childMarker />
|
|
15494
15565
|
<!-- empty content -->
|
|
15495
|
-
{{
|
|
15566
|
+
{{ "searches.recent.noRecentSearches" | transloco }}
|
|
15496
15567
|
</SearchList>
|
|
15497
15568
|
|
|
15498
|
-
|
|
15569
|
+
@if (paginatedRecentSearches().length > 0) {
|
|
15570
|
+
<SearchFooter
|
|
15571
|
+
[hasMore]="hasMore()"
|
|
15572
|
+
[config]="config"
|
|
15573
|
+
(loadMore)="loadMore()" />
|
|
15574
|
+
}
|
|
15499
15575
|
`, styles: [":host ul{scrollbar-width:thin}\n"] }]
|
|
15500
15576
|
}], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }] } });
|
|
15501
15577
|
|
|
@@ -15545,7 +15621,7 @@ class SavedSearchDialog {
|
|
|
15545
15621
|
</DialogFooter>
|
|
15546
15622
|
</DialogContent>
|
|
15547
15623
|
</dialog>
|
|
15548
|
-
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
15624
|
+
`, 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { 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\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
15549
15625
|
}
|
|
15550
15626
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SavedSearchDialog, decorators: [{
|
|
15551
15627
|
type: Component,
|
|
@@ -15633,30 +15709,34 @@ class SavedSearchesComponent {
|
|
|
15633
15709
|
this.range.set(this.range() + (this.config.itemsPerPage ?? 10));
|
|
15634
15710
|
}
|
|
15635
15711
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SavedSearchesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15636
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
15712
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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: `
|
|
15637
15713
|
<SearchHeader [label]="'searches.saved.label' | transloco" />
|
|
15638
15714
|
|
|
15639
15715
|
<SearchList [paginatedSearches]="paginatedSearches()" deleteButtonTitle="searches.saved.remove" (delete)="onDelete($event)">
|
|
15640
|
-
<
|
|
15716
|
+
<star-icon *childMarker [solid]="true" />
|
|
15641
15717
|
<!-- empty content -->
|
|
15642
15718
|
{{ 'searches.saved.noSavedSearches' | transloco }}
|
|
15643
15719
|
</SearchList>
|
|
15644
15720
|
|
|
15645
|
-
|
|
15646
|
-
|
|
15721
|
+
@if(paginatedSearches().length > 0) {
|
|
15722
|
+
<SearchFooter [hasMore]="hasMore()" [config]="config" (loadMore)="loadMore()" />
|
|
15723
|
+
}
|
|
15724
|
+
`, 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: "component", type: StarIcon, selector: "star-icon, StarIcon, staricon", inputs: ["class", "solid"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
15647
15725
|
}
|
|
15648
15726
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SavedSearchesComponent, decorators: [{
|
|
15649
15727
|
type: Component,
|
|
15650
|
-
args: [{ selector: 'saved-searches, SavedSearches', standalone: true, imports: [TranslocoPipe, ChildMarkerDirective, SearchHeaderComponent, SearchListComponent, SearchFooterComponent], providers: [provideTranslocoScope('searches')], template: `
|
|
15728
|
+
args: [{ selector: 'saved-searches, SavedSearches', standalone: true, imports: [TranslocoPipe, ChildMarkerDirective, SearchHeaderComponent, SearchListComponent, SearchFooterComponent, StarIcon], providers: [provideTranslocoScope('searches')], template: `
|
|
15651
15729
|
<SearchHeader [label]="'searches.saved.label' | transloco" />
|
|
15652
15730
|
|
|
15653
15731
|
<SearchList [paginatedSearches]="paginatedSearches()" deleteButtonTitle="searches.saved.remove" (delete)="onDelete($event)">
|
|
15654
|
-
<
|
|
15732
|
+
<star-icon *childMarker [solid]="true" />
|
|
15655
15733
|
<!-- empty content -->
|
|
15656
15734
|
{{ 'searches.saved.noSavedSearches' | transloco }}
|
|
15657
15735
|
</SearchList>
|
|
15658
15736
|
|
|
15659
|
-
|
|
15737
|
+
@if(paginatedSearches().length > 0) {
|
|
15738
|
+
<SearchFooter [hasMore]="hasMore()" [config]="config" (loadMore)="loadMore()" />
|
|
15739
|
+
}
|
|
15660
15740
|
`, styles: [":host ul{scrollbar-width:thin}\n"] }]
|
|
15661
15741
|
}], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }] } });
|
|
15662
15742
|
|
|
@@ -15681,8 +15761,8 @@ class UserProfileFormComponent {
|
|
|
15681
15761
|
value = model(undefined, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
15682
15762
|
currentLanguage = model(...(ngDevMode ? [undefined, { debugName: "currentLanguage" }] : []));
|
|
15683
15763
|
AllLanguages = [
|
|
15684
|
-
{ code: "en", label: "English", icon:
|
|
15685
|
-
{ code: "fr", label: "Français", icon:
|
|
15764
|
+
{ code: "en", label: "English", icon: FlagEnglishIcon },
|
|
15765
|
+
{ code: "fr", label: "Français", icon: FlagFrenchIcon }
|
|
15686
15766
|
];
|
|
15687
15767
|
changingPassword = signal(false, ...(ngDevMode ? [{ debugName: "changingPassword" }] : []));
|
|
15688
15768
|
customData = computed(() => (this.appStore.general()?.features?.userProfile?.customData || [])
|
|
@@ -15836,24 +15916,25 @@ class UserProfileFormComponent {
|
|
|
15836
15916
|
}
|
|
15837
15917
|
}
|
|
15838
15918
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: UserProfileFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15839
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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=\"mb-4 flex\">\n @if (allowProfilePhoto()) {\n <!-- AVATAR -->\n <Avatar\n class=\"bg-accent text-accent-foreground hover:bg-accent/80 hover:text-accent-foreground/80 size-14 cursor-pointer\"\n (click)=\"avatarInput.click()\">\n @if (profile?.data?.profilePhoto) {\n <AvatarImage\n [src]=\"profile?.data?.profilePhoto!\"\n width=\"44\"\n height=\"44\"\n alt=\"avatar\" />\n }\n <AvatarFallback class=\"text-lg\">\n @if (initials()) {\n <span>{{ initials() }}</span>\n } @else {\n <UserIcon class=\"size-7 p-1\" />\n }\n </AvatarFallback>\n </Avatar>\n @if (profile?.data?.profilePhoto) {\n <button\n variant=\"ghost\"\n size=\"icon\"\n class=\"text-destructive cursor-pointer\"\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\n (click)=\"onDeleteData('data', 'profilePhoto')\">\n <TrashIcon />\n </button>\n }\n }\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\"\n (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 (allowChangePassword()) {\n <button\n [disabled]=\"changingPassword()\"\n (click)=\"changingPassword.set(true)\">\n {{ \"login.changePassword\" | transloco }}\n </button>\n }\n </div>\n </div>\n @if (changingPassword()) {\n <ChangePassword\n [username]=\"username()\"\n [redirectAfterSuccess]=\"false\"\n [redirectAfterCancel]=\"false\"\n (cancel)=\"changingPassword.set(false)\"\n (success)=\"changingPassword.set(false)\" />\n } @else {\n @for (key of formKeys(); track key) {\n <div>\n <p>{{ `userProfile.data.${key}` | transloco }}</p>\n <div class=\"group flex flex-row\">\n <div\n class=\"grow whitespace-pre-line\"\n [class.text-muted-foreground]=\"!getDataValue('data', key)\">\n @if (propertyToEdit() === \"data.\" + key) {\n <textarea\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\n id=\"user-profile-{{ key }}\"\n [(ngModel)]=\"value\"></textarea>\n } @else {\n {{\n getDataValue(\"data\", key) ||\n (\"userProfile.notDefined\" | transloco)\n }}\n }\n </div>\n @if (propertyToEdit() === \"data.\" + key) {\n <button\n variant=\"ghost\"\n size=\"icon\"\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\n (click)=\"onSaveData('data', key)\">\n <i class=\"fa-fw fas fa-save ml-2\"></i>\n </button>\n <button\n variant=\"ghost\"\n size=\"icon\"\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\n (click)=\"propertyToEdit.set(undefined)\">\n <UndoIcon />\n </button>\n } @else {\n <button\n variant=\"ghost\"\n size=\"icon\"\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\n (click)=\"onEdit('data', key)\">\n <EditIcon />\n </button>\n <button\n variant=\"ghost\"\n size=\"icon\"\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\n (click)=\"onDeleteData('data', key)\">\n <TrashIcon />\n </button>\n }\n </div>\n </div>\n }\n @for (key of customData(); track key) {\n <div>\n <p>{{ key }}</p>\n <div class=\"group flex flex-row\">\n <div\n class=\"grow whitespace-pre-line\"\n [class.text-muted-foreground]=\"!getDataValue('customData', key)\">\n @if (propertyToEdit() === \"customData.\" + key) {\n <textarea\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\n id=\"user-profile-{{ key }}\"\n [(ngModel)]=\"value\"></textarea>\n } @else {\n {{\n getDataValue(\"customData\", key) ||\n (\"userProfile.notDefined\" | transloco)\n }}\n }\n </div>\n @if (propertyToEdit() === \"customData.\" + key) {\n <button\n variant=\"ghost\"\n size=\"icon\"\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\n (click)=\"onSaveData('customData', key)\">\n <i class=\"fa-fw fas fa-save ml-2\"></i>\n </button>\n <button\n variant=\"ghost\"\n size=\"icon\"\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\n (click)=\"propertyToEdit.set(undefined)\">\n <UndoIcon />\n </button>\n } @else {\n <button\n variant=\"ghost\"\n size=\"icon\"\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\n (click)=\"onEdit('customData', key)\">\n <EditIcon />\n </button>\n <button\n variant=\"ghost\"\n size=\"icon\"\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\n (click)=\"onDeleteData('customData', key)\">\n <TrashIcon />\n </button>\n }\n </div>\n </div>\n }\n }\n </div>\n} @else if (userProfileResource.isLoading()) {\n <span>Loading...</span>\n} @else if (userProfileResource.error()) {\n <p>Please contact an administrator to create your user profile.</p>\n}\n\n<!-- AVATAR UPLOAD -->\n<input\n #avatarInput\n class=\"hidden\"\n type=\"file\"\n accept=\"image/*\"\n (change)=\"uploadAvatar($event)\" />\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: "ngmodule", type: RouterModule }, { 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size"] }, { kind: "component", type: ChangePasswordComponent, selector: "change-password, ChangePassword, changepassword", inputs: ["username", "alert", "redirectAfterSuccess", "redirectAfterCancel", "currentPassword", "newPassword", "confirmPassword"], outputs: ["success", "cancel", "currentPasswordChange", "newPasswordChange", "confirmPasswordChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
15919
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", 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" }, host: { classAttribute: "flex flex-col h-full overflow-hidden" }, providers: [provideTranslocoScope("user-profile", "login")], viewQueries: [{ propertyName: "createInputElement", first: true, predicate: ["avatarInput"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (userProfileResource.hasValue()) {\r\n @let profile = userProfile();\r\n <div class=\"flex min-h-0 flex-1 flex-col gap-2 p-4\">\r\n <div class=\"mb-4 flex\">\r\n @if (allowProfilePhoto()) {\r\n <!-- AVATAR -->\r\n <Avatar class=\"size-14 cursor-pointer\" (click)=\"avatarInput.click()\">\r\n @if (profile?.data?.profilePhoto) {\r\n <AvatarImage\r\n [src]=\"profile?.data?.profilePhoto!\"\r\n width=\"44\"\r\n height=\"44\"\r\n alt=\"avatar\" />\r\n }\r\n <AvatarFallback class=\"text-lg\">\r\n @if (initials()) {\r\n <span>{{ initials() }}</span>\r\n } @else {\r\n <UserIcon class=\"size-7\" />\r\n }\r\n </AvatarFallback>\r\n </Avatar>\r\n @if (profile?.data?.profilePhoto) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive cursor-pointer\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('data', 'profilePhoto')\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n }\r\n <div class=\"grow\"></div>\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- LANGUAGE -->\r\n <select\r\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\"\r\n [(ngModel)]=\"currentLanguage\"\r\n (change)=\"changeLanguage()\">\r\n @for (lang of AllLanguages; track lang.code) {\r\n <option [value]=\"lang.code\">\r\n {{ lang.label }}\r\n </option>\r\n }\r\n </select>\r\n <!-- CHANGE PASSWORD -->\r\n @if (allowChangePassword()) {\r\n <button\r\n [disabled]=\"changingPassword()\"\r\n (click)=\"changingPassword.set(true)\">\r\n {{ \"login.changePassword\" | transloco }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n @if (changingPassword()) {\r\n <ChangePassword\r\n [username]=\"username()\"\r\n [redirectAfterSuccess]=\"false\"\r\n [redirectAfterCancel]=\"false\"\r\n (cancel)=\"changingPassword.set(false)\"\r\n (success)=\"changingPassword.set(false)\" />\r\n } @else {\r\n <div class=\"min-h-0 flex-1 overflow-auto\">\r\n <div>\r\n @for (key of formKeys(); track key) {\r\n <div>\r\n <p>{{ `userProfile.data.${key}` | transloco }}</p>\r\n <div class=\"group flex flex-row\">\r\n <div\r\n class=\"grow whitespace-pre-line\"\r\n [class.text-muted-foreground]=\"!getDataValue('data', key)\">\r\n @if (propertyToEdit() === \"data.\" + key) {\r\n <textarea\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\r\n id=\"user-profile-{{ key }}\"\r\n [(ngModel)]=\"value\"></textarea>\r\n } @else {\r\n {{\r\n getDataValue(\"data\", key) ||\r\n (\"userProfile.notDefined\" | transloco)\r\n }}\r\n }\r\n </div>\r\n @if (propertyToEdit() === \"data.\" + key) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onSaveData('data', key)\">\r\n <save-icon class=\"ml-2\" />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"propertyToEdit.set(undefined)\">\r\n <UndoIcon />\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onEdit('data', key)\">\r\n <EditIcon />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('data', key)\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @for (key of customData(); track key) {\r\n <div>\r\n <p>{{ key }}</p>\r\n <div class=\"group flex flex-row\">\r\n <div\r\n class=\"grow whitespace-pre-line\"\r\n [class.text-muted-foreground]=\"\r\n !getDataValue('customData', key)\r\n \">\r\n @if (propertyToEdit() === \"customData.\" + key) {\r\n <textarea\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\r\n id=\"user-profile-{{ key }}\"\r\n [(ngModel)]=\"value\"></textarea>\r\n } @else {\r\n {{\r\n getDataValue(\"customData\", key) ||\r\n (\"userProfile.notDefined\" | transloco)\r\n }}\r\n }\r\n </div>\r\n @if (propertyToEdit() === \"customData.\" + key) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onSaveData('customData', key)\">\r\n <save-icon class=\"ml-2\" />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"propertyToEdit.set(undefined)\">\r\n <UndoIcon />\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onEdit('customData', key)\">\r\n <EditIcon />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('customData', key)\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n} @else if (userProfileResource.isLoading()) {\r\n <span>Loading...</span>\r\n} @else if (userProfileResource.error()) {\r\n <p>Please contact an administrator to create your user profile.</p>\r\n}\r\n\r\n<!-- AVATAR UPLOAD -->\r\n<input\r\n #avatarInput\r\n class=\"hidden\"\r\n type=\"file\"\r\n accept=\"image/*\"\r\n (change)=\"uploadAvatar($event)\" />\r\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: "ngmodule", type: RouterModule }, { 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: SaveIcon, selector: "save-icon, SaveIcon", inputs: ["class"] }, { kind: "component", type: AvatarComponent, selector: "avatar, Avatar", inputs: ["class", "size"] }, { kind: "component", type: AvatarFallbackComponent, selector: "avatar-fallback, avatarfallback, AvatarFallback", inputs: ["class", "size"] }, { 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", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: ChangePasswordComponent, selector: "change-password, ChangePassword, changepassword", inputs: ["username", "alert", "redirectAfterSuccess", "redirectAfterCancel", "currentPassword", "newPassword", "confirmPassword"], outputs: ["success", "cancel", "currentPasswordChange", "newPasswordChange", "confirmPasswordChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
15840
15920
|
}
|
|
15841
15921
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: UserProfileFormComponent, decorators: [{
|
|
15842
15922
|
type: Component,
|
|
15843
|
-
args: [{ selector: "user-profile-form, UserProfileForm, userprofileform", standalone: true, imports: [
|
|
15923
|
+
args: [{ selector: "user-profile-form, UserProfileForm, userprofileform", standalone: true, host: { class: "flex flex-col h-full overflow-hidden" }, imports: [
|
|
15844
15924
|
FormsModule,
|
|
15845
15925
|
RouterModule,
|
|
15846
15926
|
TranslocoPipe,
|
|
15847
15927
|
TrashIcon,
|
|
15848
15928
|
EditIcon,
|
|
15849
15929
|
UndoIcon,
|
|
15930
|
+
SaveIcon,
|
|
15850
15931
|
AvatarComponent,
|
|
15851
15932
|
AvatarFallbackComponent,
|
|
15852
15933
|
UserIcon,
|
|
15853
15934
|
AvatarImageComponent,
|
|
15854
15935
|
ButtonComponent,
|
|
15855
15936
|
ChangePasswordComponent
|
|
15856
|
-
], 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=\"mb-4 flex\">\n @if (allowProfilePhoto()) {\n <!-- AVATAR -->\n <Avatar
|
|
15937
|
+
], providers: [provideTranslocoScope("user-profile", "login")], template: "@if (userProfileResource.hasValue()) {\r\n @let profile = userProfile();\r\n <div class=\"flex min-h-0 flex-1 flex-col gap-2 p-4\">\r\n <div class=\"mb-4 flex\">\r\n @if (allowProfilePhoto()) {\r\n <!-- AVATAR -->\r\n <Avatar class=\"size-14 cursor-pointer\" (click)=\"avatarInput.click()\">\r\n @if (profile?.data?.profilePhoto) {\r\n <AvatarImage\r\n [src]=\"profile?.data?.profilePhoto!\"\r\n width=\"44\"\r\n height=\"44\"\r\n alt=\"avatar\" />\r\n }\r\n <AvatarFallback class=\"text-lg\">\r\n @if (initials()) {\r\n <span>{{ initials() }}</span>\r\n } @else {\r\n <UserIcon class=\"size-7\" />\r\n }\r\n </AvatarFallback>\r\n </Avatar>\r\n @if (profile?.data?.profilePhoto) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive cursor-pointer\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('data', 'profilePhoto')\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n }\r\n <div class=\"grow\"></div>\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- LANGUAGE -->\r\n <select\r\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\"\r\n [(ngModel)]=\"currentLanguage\"\r\n (change)=\"changeLanguage()\">\r\n @for (lang of AllLanguages; track lang.code) {\r\n <option [value]=\"lang.code\">\r\n {{ lang.label }}\r\n </option>\r\n }\r\n </select>\r\n <!-- CHANGE PASSWORD -->\r\n @if (allowChangePassword()) {\r\n <button\r\n [disabled]=\"changingPassword()\"\r\n (click)=\"changingPassword.set(true)\">\r\n {{ \"login.changePassword\" | transloco }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n @if (changingPassword()) {\r\n <ChangePassword\r\n [username]=\"username()\"\r\n [redirectAfterSuccess]=\"false\"\r\n [redirectAfterCancel]=\"false\"\r\n (cancel)=\"changingPassword.set(false)\"\r\n (success)=\"changingPassword.set(false)\" />\r\n } @else {\r\n <div class=\"min-h-0 flex-1 overflow-auto\">\r\n <div>\r\n @for (key of formKeys(); track key) {\r\n <div>\r\n <p>{{ `userProfile.data.${key}` | transloco }}</p>\r\n <div class=\"group flex flex-row\">\r\n <div\r\n class=\"grow whitespace-pre-line\"\r\n [class.text-muted-foreground]=\"!getDataValue('data', key)\">\r\n @if (propertyToEdit() === \"data.\" + key) {\r\n <textarea\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\r\n id=\"user-profile-{{ key }}\"\r\n [(ngModel)]=\"value\"></textarea>\r\n } @else {\r\n {{\r\n getDataValue(\"data\", key) ||\r\n (\"userProfile.notDefined\" | transloco)\r\n }}\r\n }\r\n </div>\r\n @if (propertyToEdit() === \"data.\" + key) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onSaveData('data', key)\">\r\n <save-icon class=\"ml-2\" />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"propertyToEdit.set(undefined)\">\r\n <UndoIcon />\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onEdit('data', key)\">\r\n <EditIcon />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('data', key)\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @for (key of customData(); track key) {\r\n <div>\r\n <p>{{ key }}</p>\r\n <div class=\"group flex flex-row\">\r\n <div\r\n class=\"grow whitespace-pre-line\"\r\n [class.text-muted-foreground]=\"\r\n !getDataValue('customData', key)\r\n \">\r\n @if (propertyToEdit() === \"customData.\" + key) {\r\n <textarea\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\r\n id=\"user-profile-{{ key }}\"\r\n [(ngModel)]=\"value\"></textarea>\r\n } @else {\r\n {{\r\n getDataValue(\"customData\", key) ||\r\n (\"userProfile.notDefined\" | transloco)\r\n }}\r\n }\r\n </div>\r\n @if (propertyToEdit() === \"customData.\" + key) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onSaveData('customData', key)\">\r\n <save-icon class=\"ml-2\" />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"propertyToEdit.set(undefined)\">\r\n <UndoIcon />\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onEdit('customData', key)\">\r\n <EditIcon />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('customData', key)\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n} @else if (userProfileResource.isLoading()) {\r\n <span>Loading...</span>\r\n} @else if (userProfileResource.error()) {\r\n <p>Please contact an administrator to create your user profile.</p>\r\n}\r\n\r\n<!-- AVATAR UPLOAD -->\r\n<input\r\n #avatarInput\r\n class=\"hidden\"\r\n type=\"file\"\r\n accept=\"image/*\"\r\n (change)=\"uploadAvatar($event)\" />\r\n" }]
|
|
15857
15938
|
}], 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"] }] } });
|
|
15858
15939
|
|
|
15859
15940
|
class UserProfileDialog {
|
|
@@ -15866,13 +15947,13 @@ class UserProfileDialog {
|
|
|
15866
15947
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: UserProfileDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15867
15948
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: UserProfileDialog, isStandalone: true, selector: "user-profile-dialog, userprofiledialog, UserProfileDialog", providers: [provideTranslocoScope("user-profile")], viewQueries: [{ propertyName: "dialog", first: true, predicate: DialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
15868
15949
|
<div dialog #dialog="dialog">
|
|
15869
|
-
<DialogContent class="max-h-11/12 overflow-
|
|
15950
|
+
<DialogContent class="flex flex-col max-h-11/12 overflow-hidden">
|
|
15870
15951
|
<DialogHeader>
|
|
15871
15952
|
<DialogTitle>{{ 'userProfile.title' | transloco }}</DialogTitle>
|
|
15872
15953
|
</DialogHeader>
|
|
15873
15954
|
|
|
15874
15955
|
@if (opened()) {
|
|
15875
|
-
<user-profile-form />
|
|
15956
|
+
<user-profile-form class="flex flex-1 flex-col min-h-0" />
|
|
15876
15957
|
}
|
|
15877
15958
|
</DialogContent>
|
|
15878
15959
|
</div>
|
|
@@ -15894,13 +15975,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
15894
15975
|
providers: [provideTranslocoScope("user-profile")],
|
|
15895
15976
|
template: `
|
|
15896
15977
|
<div dialog #dialog="dialog">
|
|
15897
|
-
<DialogContent class="max-h-11/12 overflow-
|
|
15978
|
+
<DialogContent class="flex flex-col max-h-11/12 overflow-hidden">
|
|
15898
15979
|
<DialogHeader>
|
|
15899
15980
|
<DialogTitle>{{ 'userProfile.title' | transloco }}</DialogTitle>
|
|
15900
15981
|
</DialogHeader>
|
|
15901
15982
|
|
|
15902
15983
|
@if (opened()) {
|
|
15903
|
-
<user-profile-form />
|
|
15984
|
+
<user-profile-form class="flex flex-1 flex-col min-h-0" />
|
|
15904
15985
|
}
|
|
15905
15986
|
</DialogContent>
|
|
15906
15987
|
</div>
|