@quadrel-enterprise-ui/framework 19.6.1 → 19.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/fesm2022/quadrel-enterprise-ui-framework.mjs +741 -591
  2. package/fesm2022/quadrel-enterprise-ui-framework.mjs.map +1 -1
  3. package/lib/dialog/dialog.component.d.ts +15 -6
  4. package/lib/dialog/dialog.component.d.ts.map +1 -1
  5. package/lib/dialog/dialog.module.d.ts +3 -3
  6. package/lib/dialog/dialog.module.d.ts.map +1 -1
  7. package/lib/dialog/directives/pending-changes-guard.directive.d.ts +20 -19
  8. package/lib/dialog/directives/pending-changes-guard.directive.d.ts.map +1 -1
  9. package/lib/dialog/models/dialog-close.model.d.ts +51 -0
  10. package/lib/dialog/models/dialog-close.model.d.ts.map +1 -0
  11. package/lib/dialog/models/dialog-config.model.d.ts +2 -0
  12. package/lib/dialog/models/dialog-config.model.d.ts.map +1 -1
  13. package/lib/dialog/models/page-dialog-host.token.d.ts +10 -0
  14. package/lib/dialog/models/page-dialog-host.token.d.ts.map +1 -0
  15. package/lib/dialog/services/confirmation-dialog.service.d.ts.map +1 -1
  16. package/lib/dialog/services/dialog.service.d.ts +20 -4
  17. package/lib/dialog/services/dialog.service.d.ts.map +1 -1
  18. package/lib/file-collector/models/file-type.d.ts +1 -1
  19. package/lib/file-collector/models/file-type.d.ts.map +1 -1
  20. package/lib/file-collector/services/file-type.service.d.ts.map +1 -1
  21. package/lib/forms/input/input.component.d.ts.map +1 -1
  22. package/lib/helpers/html-plaintext.helper.d.ts +1 -1
  23. package/lib/helpers/html-plaintext.helper.d.ts.map +1 -1
  24. package/lib/page/model/page-config.interface.d.ts +14 -1
  25. package/lib/page/model/page-config.interface.d.ts.map +1 -1
  26. package/lib/page/page.component.d.ts +5 -2
  27. package/lib/page/page.component.d.ts.map +1 -1
  28. package/lib/page/shared/directives/connect-form-state-to-page.directive.d.ts +17 -4
  29. package/lib/page/shared/directives/connect-form-state-to-page.directive.d.ts.map +1 -1
  30. package/lib/shell/header/service-navigation/shell-service-navigation.component.d.ts +2 -2
  31. package/lib/shell/header/service-navigation/shell-service-navigation.component.d.ts.map +1 -1
  32. package/lib/table/services/resolver.service.d.ts +2 -0
  33. package/lib/table/services/resolver.service.d.ts.map +1 -1
  34. package/package.json +2 -2
  35. package/src/assets/i18n/de.json +2 -0
  36. package/src/assets/i18n/en.json +11 -1
  37. package/src/assets/i18n/fr.json +2 -0
  38. package/src/assets/i18n/it.json +2 -0
  39. package/src/assets/styles/settings/_settings.grid.scss +4 -1
@@ -1,16 +1,16 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Directive, InjectionToken, HostBinding, Input, ViewEncapsulation, Component, Injectable, HostListener, Optional, Host, Inject, ChangeDetectionStrategy, ViewChild, Pipe, NgModule, EventEmitter, Output, NO_ERRORS_SCHEMA, SecurityContext, Self, SkipSelf, ViewChildren, forwardRef, inject, DestroyRef, ContentChildren, ContentChild, QueryList, CUSTOM_ELEMENTS_SCHEMA, provideAppInitializer } from '@angular/core';
2
+ import { Directive, InjectionToken, HostBinding, Input, ViewEncapsulation, Component, Injectable, HostListener, Optional, Host, Inject, ChangeDetectionStrategy, ViewChild, NgModule, EventEmitter, Output, Pipe, NO_ERRORS_SCHEMA, SecurityContext, Self, SkipSelf, ViewChildren, forwardRef, inject, DestroyRef, ContentChildren, ContentChild, QueryList, CUSTOM_ELEMENTS_SCHEMA, provideAppInitializer } from '@angular/core';
3
3
  import * as i1$1 from '@angular/cdk/dialog';
4
4
  import { DialogModule } from '@angular/cdk/dialog';
5
5
  import * as i1 from '@angular/common';
6
6
  import { CommonModule, NgFor, NgIf, NgClass, NgTemplateOutlet, AsyncPipe } from '@angular/common';
7
7
  import * as i3 from 'rxjs';
8
- import { BehaviorSubject, pairwise, from, switchMap, map as map$1, Subject, ReplaySubject, throwError, of, merge, fromEvent, isObservable, NEVER, Observable, EMPTY, shareReplay, Subscription, distinctUntilChanged as distinctUntilChanged$1, debounce, timer, startWith as startWith$1, debounceTime as debounceTime$1, takeUntil as takeUntil$1, firstValueFrom, combineLatest, concat, take as take$1, delay, tap as tap$1, first, scan, combineLatestWith, iif, delayWhen, withLatestFrom, async, filter as filter$1 } from 'rxjs';
9
- import { map, takeUntil, filter, catchError, debounceTime, startWith, distinctUntilChanged, concatMap, take, tap, skip, pairwise as pairwise$1, switchMap as switchMap$1, mergeMap, delay as delay$1 } from 'rxjs/operators';
8
+ import { BehaviorSubject, pairwise, from, switchMap, map as map$1, Subject, throwError, of, ReplaySubject, merge, fromEvent, isObservable, NEVER, Observable, EMPTY, shareReplay, Subscription, distinctUntilChanged as distinctUntilChanged$1, debounce, timer, startWith as startWith$1, debounceTime as debounceTime$1, takeUntil as takeUntil$1, firstValueFrom, combineLatest, concat, take as take$1, delay, tap as tap$1, first, scan, combineLatestWith, iif, delayWhen, withLatestFrom, async, filter as filter$1 } from 'rxjs';
9
+ import { map, takeUntil, take, filter, catchError, debounceTime, startWith, distinctUntilChanged, concatMap, tap, skip, pairwise as pairwise$1, switchMap as switchMap$1, mergeMap, delay as delay$1 } from 'rxjs/operators';
10
10
  import { v4 } from 'uuid';
11
- import * as i1$2 from '@ngx-translate/core';
11
+ import * as i1$3 from '@ngx-translate/core';
12
12
  import { TranslateService, TranslateModule } from '@ngx-translate/core';
13
- import * as i1$3 from '@angular/router';
13
+ import * as i1$2 from '@angular/router';
14
14
  import { ActivationEnd, RouterModule, NavigationError, NavigationCancel, NavigationEnd, NavigationStart } from '@angular/router';
15
15
  import * as i3$1 from '@angular/common/http';
16
16
  import { HttpStatusCode, HttpEventType, HttpParams, HTTP_INTERCEPTORS } from '@angular/common/http';
@@ -1205,6 +1205,161 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
1205
1205
  }]
1206
1206
  }], ctorParameters: () => [{ type: i1$1.Dialog }] });
1207
1207
 
1208
+ /**
1209
+ * Injection token for the host component of page dialogs with breadcrumbs.
1210
+ *
1211
+ * Used to decouple {@link QdDialogService} from a concrete component
1212
+ * and avoid import cycles.
1213
+ */
1214
+ const QD_PAGE_DIALOG_WITH_BREADCRUMBS_HOST = new InjectionToken('QD_PAGE_DIALOG_WITH_BREADCRUMBS_HOST');
1215
+
1216
+ /**
1217
+ * **QdDialogService**: Service for managing dialogs in the application.
1218
+ * This service provides methods to open, close, and manage the handling of dialog data.
1219
+ */
1220
+ class QdDialogService {
1221
+ dialog;
1222
+ router;
1223
+ pageDialogHost;
1224
+ _currentRowSubject = new BehaviorSubject({});
1225
+ currentRow$ = this._currentRowSubject.asObservable();
1226
+ _currentIndexSubject = new Subject();
1227
+ currentIndex$ = this._currentIndexSubject.asObservable();
1228
+ _pageDialogCanClose$ = new BehaviorSubject(null);
1229
+ pageDialogCanClose$ = this._pageDialogCanClose$.asObservable();
1230
+ _confirmationStatus = 'info';
1231
+ _isConfirmationLoading = false;
1232
+ _dialogData = { navigation: false, initialPaginationIndex: 0, views: [] };
1233
+ get confirmationStatus() {
1234
+ return { confirmationStatus: this._confirmationStatus };
1235
+ }
1236
+ get isConfirmationLoading() {
1237
+ return this._isConfirmationLoading;
1238
+ }
1239
+ get isConfirmationInfo() {
1240
+ return this._confirmationStatus === 'info';
1241
+ }
1242
+ get isConfirmationSuccess() {
1243
+ return this._confirmationStatus === 'success';
1244
+ }
1245
+ get isConfirmationError() {
1246
+ return this._confirmationStatus === 'error';
1247
+ }
1248
+ set dialogData(data) {
1249
+ this._dialogData = data;
1250
+ }
1251
+ get dialogData() {
1252
+ return this._dialogData;
1253
+ }
1254
+ constructor(dialog, router, pageDialogHost) {
1255
+ this.dialog = dialog;
1256
+ this.router = router;
1257
+ this.pageDialogHost = pageDialogHost;
1258
+ }
1259
+ open(component, config) {
1260
+ config.panelClass = 'qd-custom-panel';
1261
+ config.width = config.dialogSize || QdDialogSize.Default;
1262
+ if (config.dialogSize === QdDialogSize.FullWidth) {
1263
+ config.disableClose = true;
1264
+ config.maxWidth = '100vw';
1265
+ config.width = '100vw';
1266
+ config.maxHeight = '100vh';
1267
+ config.height = '100vh';
1268
+ }
1269
+ return this.dialog.open(component, config);
1270
+ }
1271
+ openFullscreen(component, config) {
1272
+ this.updateDialogData(config);
1273
+ return this.dialog.open(component, config);
1274
+ }
1275
+ openPageDialogWithBreadcrumbs(routePath, data) {
1276
+ this.clearPageDialogCanCloseForce();
1277
+ this.updateDialogData(data);
1278
+ if (!this.pageDialogHost)
1279
+ throw new Error('QdDialogService | Page dialog host component is not provided.');
1280
+ this.open(this.pageDialogHost, { dialogSize: QdDialogSize.FullWidth });
1281
+ this.navigateInsideDialog(routePath || this.getFirstDialogOutletRoutePathOrThrow());
1282
+ }
1283
+ navigateInsideDialog(routePath) {
1284
+ this.router.navigate(['/', { outlets: { dialog: routePath } }]);
1285
+ }
1286
+ closeAll() {
1287
+ this.clearPageDialogCanCloseForce();
1288
+ this.dialog.closeAll();
1289
+ }
1290
+ startConfirmation() {
1291
+ this._isConfirmationLoading = true;
1292
+ }
1293
+ confirmationSuccess() {
1294
+ this._isConfirmationLoading = false;
1295
+ this._confirmationStatus = 'success';
1296
+ }
1297
+ confirmationError() {
1298
+ this._isConfirmationLoading = false;
1299
+ this._confirmationStatus = 'error';
1300
+ }
1301
+ resetConfirmation() {
1302
+ this._isConfirmationLoading = false;
1303
+ this._confirmationStatus = 'info';
1304
+ }
1305
+ updateStep(index) {
1306
+ this._currentRowSubject.next(this._dialogData.views?.[index]);
1307
+ this._currentIndexSubject.next(index);
1308
+ }
1309
+ setPageDialogCanClose(fn, owner) {
1310
+ this._pageDialogCanClose$.next({ owner, fn });
1311
+ }
1312
+ clearPageDialogCanClose(owner) {
1313
+ const entry = this._pageDialogCanClose$.value;
1314
+ if (!entry)
1315
+ return;
1316
+ if (entry.owner !== owner)
1317
+ return;
1318
+ this._pageDialogCanClose$.next(null);
1319
+ }
1320
+ clearPageDialogCanCloseForce() {
1321
+ this._pageDialogCanClose$.next(null);
1322
+ }
1323
+ updateDialogData(data) {
1324
+ if (!data || typeof data !== 'object')
1325
+ return;
1326
+ Object.entries(data).forEach(([key, value]) => {
1327
+ if (value === undefined || value === null)
1328
+ return;
1329
+ if (key === 'initialPaginationIndex') {
1330
+ this._dialogData[key] = data['views'] && value >= 0 ? Math.min(value, data['views'].length - 1) : 0;
1331
+ }
1332
+ else {
1333
+ this._dialogData[key] = value;
1334
+ }
1335
+ });
1336
+ }
1337
+ getFirstDialogOutletRoutePathOrThrow() {
1338
+ const firstDialogOutletRoutePath = this.router.config.find(route => route.outlet === 'dialog')?.path;
1339
+ if (!firstDialogOutletRoutePath || this.hasRoutePathParameters(firstDialogOutletRoutePath)) {
1340
+ throw new Error('QdDialogService | Please provide a route for the openPageDialogWithBreadcrumbs method. ' +
1341
+ 'The main dialog route could not be determined automatically.');
1342
+ }
1343
+ return firstDialogOutletRoutePath;
1344
+ }
1345
+ hasRoutePathParameters(routePath) {
1346
+ return routePath.includes(':');
1347
+ }
1348
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogService, deps: [{ token: i1$1.Dialog }, { token: i1$2.Router }, { token: QD_PAGE_DIALOG_WITH_BREADCRUMBS_HOST, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
1349
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogService, providedIn: 'root' });
1350
+ }
1351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogService, decorators: [{
1352
+ type: Injectable,
1353
+ args: [{
1354
+ providedIn: 'root'
1355
+ }]
1356
+ }], ctorParameters: () => [{ type: i1$1.Dialog }, { type: i1$2.Router }, { type: undefined, decorators: [{
1357
+ type: Optional
1358
+ }, {
1359
+ type: Inject,
1360
+ args: [QD_PAGE_DIALOG_WITH_BREADCRUMBS_HOST]
1361
+ }] }] });
1362
+
1208
1363
  /**
1209
1364
  * The **QdIconButton** can only display icons, in contrast to the **QdButton**. <br />
1210
1365
  * It is possible to bind it to either a `button` tag or to an `a` tag.
@@ -1254,7 +1409,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
1254
1409
  args: ['attr.data-test-id']
1255
1410
  }] } });
1256
1411
 
1257
- // @ts-strict-ignore
1258
1412
  /**
1259
1413
  * **QdDialog** creating resonsive dialogs. Three different sizes are available.
1260
1414
  *
@@ -1307,6 +1461,7 @@ class QdDialogComponent {
1307
1461
  dialog;
1308
1462
  changeDetectorRef;
1309
1463
  dialogChangeGuard;
1464
+ dialogService;
1310
1465
  body;
1311
1466
  infoBanners;
1312
1467
  get hasSectionsClass() {
@@ -1316,62 +1471,103 @@ class QdDialogComponent {
1316
1471
  hasSections;
1317
1472
  hasInfoBanner;
1318
1473
  _destroyed$ = new Subject();
1319
- constructor(dialogRef, dialog, changeDetectorRef, dialogChangeGuard) {
1474
+ _pageDialogCanCloseFn = null;
1475
+ get isFullWidth() {
1476
+ return this.config.dialogSize === QdDialogSize.FullWidth;
1477
+ }
1478
+ constructor(dialogRef, dialog, changeDetectorRef, dialogChangeGuard, dialogService) {
1320
1479
  this.dialogRef = dialogRef;
1321
1480
  this.dialog = dialog;
1322
1481
  this.changeDetectorRef = changeDetectorRef;
1323
1482
  this.dialogChangeGuard = dialogChangeGuard;
1483
+ this.dialogService = dialogService;
1324
1484
  }
1325
1485
  ngOnInit() {
1326
1486
  this.config = this.dialogRef.config;
1487
+ this.dialogService.pageDialogCanClose$.pipe(takeUntil(this._destroyed$)).subscribe(entry => {
1488
+ this._pageDialogCanCloseFn = entry?.owner === this.dialogRef ? entry.fn : null;
1489
+ });
1490
+ if (this.isFullWidth)
1491
+ this.bindEscToClose();
1327
1492
  }
1328
1493
  ngAfterContentChecked() {
1329
- const children = Array.from(this.body?.nativeElement?.childNodes || []);
1494
+ const children = Array.from(this.body?.nativeElement?.children ?? []);
1330
1495
  this.hasSections = children.length > 0 && children.every((node) => node.tagName === 'QD-SECTION');
1331
1496
  this.changeDetectorRef.detectChanges();
1332
1497
  }
1333
1498
  ngAfterViewInit() {
1334
- const bannerChildren = Array.from(this.infoBanners?.nativeElement?.childNodes || []);
1499
+ const bannerChildren = Array.from(this.infoBanners?.nativeElement?.childNodes ?? []);
1335
1500
  this.hasInfoBanner =
1336
1501
  bannerChildren.length > 0 && bannerChildren.some((node) => node.tagName === 'QD-PAGE-INFO-BANNER');
1337
1502
  this.changeDetectorRef.detectChanges();
1338
1503
  }
1504
+ ngOnDestroy() {
1505
+ this.dialogService.clearPageDialogCanClose(this.dialogRef);
1506
+ this._destroyed$.next();
1507
+ this._destroyed$.complete();
1508
+ }
1339
1509
  close() {
1340
- const hasPendingChanges = this.dialogChangeGuard.hasPendingChanges;
1341
- if (hasPendingChanges) {
1342
- this.dialog
1343
- .showCancelConfirmation(this.config)
1344
- .pipe(takeUntil(this._destroyed$))
1345
- .subscribe(confirmed => {
1346
- if (confirmed)
1347
- this.dialogRef.close();
1348
- });
1349
- }
1350
- else {
1351
- if (this.config.cancel?.handler)
1352
- this.config.cancel?.handler();
1353
- this.dialogRef.close();
1354
- }
1510
+ if (this.isFullWidth && this._pageDialogCanCloseFn)
1511
+ return this.handlePageDialogClose();
1512
+ this.handleLegacyDialogClose();
1355
1513
  }
1356
1514
  primaryActionClicked() {
1357
1515
  if (this.config.primary?.handler)
1358
1516
  this.config.primary?.handler();
1359
1517
  this.dialogRef.close();
1360
1518
  }
1361
- ngOnDestroy() {
1362
- this._destroyed$.next();
1363
- this._destroyed$.complete();
1519
+ finalizeClose() {
1520
+ this.dialogService.clearPageDialogCanClose(this.dialogRef);
1521
+ this.dialogRef.close();
1364
1522
  }
1365
- get isFullWidth() {
1366
- return this.config.dialogSize === QdDialogSize.FullWidth;
1523
+ confirmAndClose() {
1524
+ this.dialog
1525
+ .showCancelConfirmation(this.config)
1526
+ .pipe(take(1))
1527
+ .subscribe(confirmed => {
1528
+ if (!confirmed)
1529
+ return;
1530
+ this.config.cancel?.handler?.();
1531
+ this.finalizeClose();
1532
+ });
1533
+ }
1534
+ handlePageDialogClose() {
1535
+ this._pageDialogCanCloseFn()
1536
+ .pipe(take(1))
1537
+ .subscribe(result => {
1538
+ if (!result)
1539
+ return;
1540
+ if (result.canClose)
1541
+ return this.runCancelHandlerAndClose();
1542
+ if (!result.hasChanges)
1543
+ return;
1544
+ this.confirmAndClose();
1545
+ });
1546
+ }
1547
+ handleLegacyDialogClose() {
1548
+ if (!this.dialogChangeGuard.hasPendingChanges)
1549
+ return this.runCancelHandlerAndClose();
1550
+ this.confirmAndClose();
1551
+ }
1552
+ runCancelHandlerAndClose() {
1553
+ this.config.cancel?.handler?.();
1554
+ this.finalizeClose();
1367
1555
  }
1368
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogComponent, deps: [{ token: i1$1.DialogRef }, { token: QdConfirmationDialogOpenerService }, { token: i0.ChangeDetectorRef }, { token: QdDialogChangeGuardService }], target: i0.ɵɵFactoryTarget.Component });
1369
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDialogComponent, isStandalone: false, selector: "qd-dialog", host: { properties: { "class.full-width": "isFullWidth", "class.has-sections": "this.hasSectionsClass" } }, providers: [QdDialogComponent], viewQueries: [{ propertyName: "body", first: true, predicate: ["body"], descendants: true }, { propertyName: "infoBanners", first: true, predicate: ["banners"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"!isFullWidth\" class=\"dialog-header\">\n <div class=\"title-container\">\n {{ config?.title?.i18n | translate }}\n </div>\n <button\n *ngIf=\"!config?.hideCloseHeaderButton\"\n qdIconButton\n class=\"close\"\n color=\"secondary\"\n tabindex=\"-1\"\n (click)=\"close()\"\n >\n <qd-icon icon=\"timesLargeLight\"></qd-icon>\n </button>\n</div>\n\n<button\n *ngIf=\"!config?.hideCloseHeaderButton && isFullWidth\"\n qdIconButton\n class=\"close\"\n color=\"secondary\"\n tabindex=\"-1\"\n (click)=\"close()\"\n>\n <qd-icon icon=\"timesLargeLight\"></qd-icon>\n</button>\n\n<div class=\"wrapper-body\">\n <div [class.has-dialog-info-banners]=\"hasInfoBanner\" #banners>\n <ng-content select=\"qd-page-info-banner\"></ng-content>\n </div>\n <div class=\"body\" [class.full-width]=\"isFullWidth\" #body>\n <ng-content></ng-content>\n </div>\n</div>\n\n<div class=\"qd-dialog-actions\">\n <button *ngIf=\"config.cancel\" qdButton qdButtonGhost color=\"secondary\" (click)=\"close()\">Cancel</button>\n <button *ngIf=\"config.primary\" qdButton (click)=\"primaryActionClicked()\">Submit as</button>\n <ng-content select=\"qd-dialog-action\"></ng-content>\n</div>\n", styles: ["qd-dialog{display:flex;width:100%;height:100%;flex-direction:column;background:#efefef}qd-dialog.full-width{position:relative;width:calc(100% - 3rem)!important;height:calc(100% - 3rem)!important;margin:1.5rem}qd-dialog.full-width .close{position:absolute;z-index:9999;top:1.25rem;right:1rem;color:#454545;cursor:pointer}.dialog-header{display:flex;height:3.125rem;flex-direction:row;align-items:center;justify-content:space-between;padding:.5rem 1.5rem;border-bottom:2px solid rgb(213,213,213);background:#fff}.dialog-header .title-container{display:block;color:#171717;font-weight:500}.dialog-header .close{cursor:pointer}.wrapper-body{overflow:auto;flex:1;background:#efefef}.wrapper-body .has-dialog-info-banners{padding:1rem 1.25rem .5rem;border-bottom:rgb(213,213,213) solid .0625rem;background-color:#fff}.wrapper-body .has-dialog-info-banners qd-page-info-banner:last-child{margin-bottom:0}.wrapper-body .body.full-width{height:100%}.wrapper-body .body:not(.full-width){max-height:80vh;padding:1rem 1.5rem}.wrapper-body .body:not(.full-width) qd-section{padding-right:1.5rem;padding-left:1.5rem}.wrapper-body .body:not(.full-width) qd-text-section{margin-right:0;margin-left:0}qd-dialog.has-sections .wrapper-body .body:not(.full-width){padding:0}.qd-dialog-actions{display:flex;justify-content:flex-end;padding:.5rem 1.5rem;border-top:2px solid rgb(213,213,213);background:#efefef;column-gap:.625rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdIconButtonComponent, selector: "button[qdIconButton], a[qdIconButton], button[qd-icon-button]", inputs: ["color", "data-test-id"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
1556
+ bindEscToClose() {
1557
+ this.dialogRef.keydownEvents
1558
+ .pipe(takeUntil(this._destroyed$), filter((e) => e.key === 'Escape'))
1559
+ .subscribe(e => {
1560
+ e.preventDefault();
1561
+ this.close();
1562
+ });
1563
+ }
1564
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogComponent, deps: [{ token: i1$1.DialogRef }, { token: QdConfirmationDialogOpenerService }, { token: i0.ChangeDetectorRef }, { token: QdDialogChangeGuardService }, { token: QdDialogService }], target: i0.ɵɵFactoryTarget.Component });
1565
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDialogComponent, isStandalone: false, selector: "qd-dialog", host: { properties: { "class.full-width": "isFullWidth", "class.has-sections": "this.hasSectionsClass" } }, providers: [QdDialogComponent], viewQueries: [{ propertyName: "body", first: true, predicate: ["body"], descendants: true }, { propertyName: "infoBanners", first: true, predicate: ["banners"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"!isFullWidth\" class=\"dialog-header\">\n <div class=\"title-container\">\n {{ config?.title?.i18n | translate }}\n </div>\n <button\n *ngIf=\"!config?.hideCloseHeaderButton\"\n qdIconButton\n class=\"close\"\n color=\"secondary\"\n tabindex=\"-1\"\n (click)=\"close()\"\n >\n <qd-icon icon=\"timesLargeLight\"></qd-icon>\n </button>\n</div>\n\n<button\n *ngIf=\"!config?.hideCloseHeaderButton && isFullWidth\"\n qdIconButton\n class=\"close\"\n color=\"secondary\"\n tabindex=\"-1\"\n (click)=\"close()\"\n>\n <qd-icon icon=\"timesLargeLight\"></qd-icon>\n</button>\n\n<div class=\"wrapper-body\">\n <div [class.has-dialog-info-banners]=\"hasInfoBanner\" #banners>\n <ng-content select=\"qd-page-info-banner\"></ng-content>\n </div>\n <div class=\"body\" [class.full-width]=\"isFullWidth\" #body>\n <ng-content></ng-content>\n </div>\n</div>\n\n<div class=\"qd-dialog-actions\">\n <button *ngIf=\"config.cancel\" qdButton qdButtonGhost color=\"secondary\" (click)=\"close()\">\n {{ config?.cancel?.label?.i18n ?? \"i18n.qd.dialog.action.cancel\" | translate }}\n </button>\n <button *ngIf=\"config.primary\" qdButton (click)=\"primaryActionClicked()\">\n {{ config?.primary?.label?.i18n ?? \"i18n.qd.dialog.action.primary\" | translate }}\n </button>\n <ng-content select=\"qd-dialog-action\"></ng-content>\n</div>\n", styles: ["qd-dialog{display:flex;width:100%;height:100%;flex-direction:column;background:#efefef}qd-dialog.full-width{position:relative;width:calc(100% - 3rem)!important;height:calc(100% - 3rem)!important;margin:1.5rem}qd-dialog.full-width .close{position:absolute;z-index:9999;top:1.25rem;right:1rem;color:#454545;cursor:pointer}.dialog-header{display:flex;height:3.125rem;flex-direction:row;align-items:center;justify-content:space-between;padding:.5rem 1.5rem;border-bottom:2px solid rgb(213,213,213);background:#fff}.dialog-header .title-container{display:block;color:#171717;font-weight:500}.dialog-header .close{cursor:pointer}.wrapper-body{overflow:auto;flex:1;background:#efefef}.wrapper-body .has-dialog-info-banners{padding:1rem 1.25rem .5rem;border-bottom:rgb(213,213,213) solid .0625rem;background-color:#fff}.wrapper-body .has-dialog-info-banners qd-page-info-banner:last-child{margin-bottom:0}.wrapper-body .body.full-width{height:100%}.wrapper-body .body:not(.full-width){max-height:80vh;padding:1rem 1.5rem}.wrapper-body .body:not(.full-width) qd-section{padding-right:1.5rem;padding-left:1.5rem}.wrapper-body .body:not(.full-width) qd-text-section{margin-right:0;margin-left:0}qd-dialog.has-sections .wrapper-body .body:not(.full-width){padding:0}.qd-dialog-actions{display:flex;justify-content:flex-end;padding:.5rem 1.5rem;border-top:2px solid rgb(213,213,213);background:#efefef;column-gap:.625rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdIconButtonComponent, selector: "button[qdIconButton], a[qdIconButton], button[qd-icon-button]", inputs: ["color", "data-test-id"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
1370
1566
  }
1371
1567
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogComponent, decorators: [{
1372
1568
  type: Component,
1373
- args: [{ selector: 'qd-dialog', host: { '[class.full-width]': 'isFullWidth' }, encapsulation: ViewEncapsulation.None, providers: [QdDialogComponent], standalone: false, template: "<div *ngIf=\"!isFullWidth\" class=\"dialog-header\">\n <div class=\"title-container\">\n {{ config?.title?.i18n | translate }}\n </div>\n <button\n *ngIf=\"!config?.hideCloseHeaderButton\"\n qdIconButton\n class=\"close\"\n color=\"secondary\"\n tabindex=\"-1\"\n (click)=\"close()\"\n >\n <qd-icon icon=\"timesLargeLight\"></qd-icon>\n </button>\n</div>\n\n<button\n *ngIf=\"!config?.hideCloseHeaderButton && isFullWidth\"\n qdIconButton\n class=\"close\"\n color=\"secondary\"\n tabindex=\"-1\"\n (click)=\"close()\"\n>\n <qd-icon icon=\"timesLargeLight\"></qd-icon>\n</button>\n\n<div class=\"wrapper-body\">\n <div [class.has-dialog-info-banners]=\"hasInfoBanner\" #banners>\n <ng-content select=\"qd-page-info-banner\"></ng-content>\n </div>\n <div class=\"body\" [class.full-width]=\"isFullWidth\" #body>\n <ng-content></ng-content>\n </div>\n</div>\n\n<div class=\"qd-dialog-actions\">\n <button *ngIf=\"config.cancel\" qdButton qdButtonGhost color=\"secondary\" (click)=\"close()\">Cancel</button>\n <button *ngIf=\"config.primary\" qdButton (click)=\"primaryActionClicked()\">Submit as</button>\n <ng-content select=\"qd-dialog-action\"></ng-content>\n</div>\n", styles: ["qd-dialog{display:flex;width:100%;height:100%;flex-direction:column;background:#efefef}qd-dialog.full-width{position:relative;width:calc(100% - 3rem)!important;height:calc(100% - 3rem)!important;margin:1.5rem}qd-dialog.full-width .close{position:absolute;z-index:9999;top:1.25rem;right:1rem;color:#454545;cursor:pointer}.dialog-header{display:flex;height:3.125rem;flex-direction:row;align-items:center;justify-content:space-between;padding:.5rem 1.5rem;border-bottom:2px solid rgb(213,213,213);background:#fff}.dialog-header .title-container{display:block;color:#171717;font-weight:500}.dialog-header .close{cursor:pointer}.wrapper-body{overflow:auto;flex:1;background:#efefef}.wrapper-body .has-dialog-info-banners{padding:1rem 1.25rem .5rem;border-bottom:rgb(213,213,213) solid .0625rem;background-color:#fff}.wrapper-body .has-dialog-info-banners qd-page-info-banner:last-child{margin-bottom:0}.wrapper-body .body.full-width{height:100%}.wrapper-body .body:not(.full-width){max-height:80vh;padding:1rem 1.5rem}.wrapper-body .body:not(.full-width) qd-section{padding-right:1.5rem;padding-left:1.5rem}.wrapper-body .body:not(.full-width) qd-text-section{margin-right:0;margin-left:0}qd-dialog.has-sections .wrapper-body .body:not(.full-width){padding:0}.qd-dialog-actions{display:flex;justify-content:flex-end;padding:.5rem 1.5rem;border-top:2px solid rgb(213,213,213);background:#efefef;column-gap:.625rem}\n"] }]
1374
- }], ctorParameters: () => [{ type: i1$1.DialogRef }, { type: QdConfirmationDialogOpenerService }, { type: i0.ChangeDetectorRef }, { type: QdDialogChangeGuardService }], propDecorators: { body: [{
1569
+ args: [{ selector: 'qd-dialog', host: { '[class.full-width]': 'isFullWidth' }, encapsulation: ViewEncapsulation.None, providers: [QdDialogComponent], standalone: false, template: "<div *ngIf=\"!isFullWidth\" class=\"dialog-header\">\n <div class=\"title-container\">\n {{ config?.title?.i18n | translate }}\n </div>\n <button\n *ngIf=\"!config?.hideCloseHeaderButton\"\n qdIconButton\n class=\"close\"\n color=\"secondary\"\n tabindex=\"-1\"\n (click)=\"close()\"\n >\n <qd-icon icon=\"timesLargeLight\"></qd-icon>\n </button>\n</div>\n\n<button\n *ngIf=\"!config?.hideCloseHeaderButton && isFullWidth\"\n qdIconButton\n class=\"close\"\n color=\"secondary\"\n tabindex=\"-1\"\n (click)=\"close()\"\n>\n <qd-icon icon=\"timesLargeLight\"></qd-icon>\n</button>\n\n<div class=\"wrapper-body\">\n <div [class.has-dialog-info-banners]=\"hasInfoBanner\" #banners>\n <ng-content select=\"qd-page-info-banner\"></ng-content>\n </div>\n <div class=\"body\" [class.full-width]=\"isFullWidth\" #body>\n <ng-content></ng-content>\n </div>\n</div>\n\n<div class=\"qd-dialog-actions\">\n <button *ngIf=\"config.cancel\" qdButton qdButtonGhost color=\"secondary\" (click)=\"close()\">\n {{ config?.cancel?.label?.i18n ?? \"i18n.qd.dialog.action.cancel\" | translate }}\n </button>\n <button *ngIf=\"config.primary\" qdButton (click)=\"primaryActionClicked()\">\n {{ config?.primary?.label?.i18n ?? \"i18n.qd.dialog.action.primary\" | translate }}\n </button>\n <ng-content select=\"qd-dialog-action\"></ng-content>\n</div>\n", styles: ["qd-dialog{display:flex;width:100%;height:100%;flex-direction:column;background:#efefef}qd-dialog.full-width{position:relative;width:calc(100% - 3rem)!important;height:calc(100% - 3rem)!important;margin:1.5rem}qd-dialog.full-width .close{position:absolute;z-index:9999;top:1.25rem;right:1rem;color:#454545;cursor:pointer}.dialog-header{display:flex;height:3.125rem;flex-direction:row;align-items:center;justify-content:space-between;padding:.5rem 1.5rem;border-bottom:2px solid rgb(213,213,213);background:#fff}.dialog-header .title-container{display:block;color:#171717;font-weight:500}.dialog-header .close{cursor:pointer}.wrapper-body{overflow:auto;flex:1;background:#efefef}.wrapper-body .has-dialog-info-banners{padding:1rem 1.25rem .5rem;border-bottom:rgb(213,213,213) solid .0625rem;background-color:#fff}.wrapper-body .has-dialog-info-banners qd-page-info-banner:last-child{margin-bottom:0}.wrapper-body .body.full-width{height:100%}.wrapper-body .body:not(.full-width){max-height:80vh;padding:1rem 1.5rem}.wrapper-body .body:not(.full-width) qd-section{padding-right:1.5rem;padding-left:1.5rem}.wrapper-body .body:not(.full-width) qd-text-section{margin-right:0;margin-left:0}qd-dialog.has-sections .wrapper-body .body:not(.full-width){padding:0}.qd-dialog-actions{display:flex;justify-content:flex-end;padding:.5rem 1.5rem;border-top:2px solid rgb(213,213,213);background:#efefef;column-gap:.625rem}\n"] }]
1570
+ }], ctorParameters: () => [{ type: i1$1.DialogRef }, { type: QdConfirmationDialogOpenerService }, { type: i0.ChangeDetectorRef }, { type: QdDialogChangeGuardService }, { type: QdDialogService }], propDecorators: { body: [{
1375
1571
  type: ViewChild,
1376
1572
  args: ['body']
1377
1573
  }], infoBanners: [{
@@ -1398,371 +1594,13 @@ class QdDialogAuthSessionEndComponent {
1398
1594
  this.dialogRef.close({ doLogoutViaIdentityBroker: true });
1399
1595
  }
1400
1596
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogAuthSessionEndComponent, deps: [{ token: i1$1.DialogRef }], target: i0.ɵɵFactoryTarget.Component });
1401
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDialogAuthSessionEndComponent, isStandalone: false, selector: "qd-dialog-auth-session-end", ngImport: i0, template: "<qd-dialog>\n <qd-text-section>\n <qd-text-section-paragraph>\n {{ \"i18n.qd.authSupport.dialog.content\" | translate }}\n </qd-text-section-paragraph>\n </qd-text-section>\n\n <qd-dialog-action>\n <button qdButton color=\"secondary\" (click)=\"backToEPortal()\">\n {{ \"i18n.qd.authSupport.dialog.action.backToEPortal\" | translate }}\n </button>\n <button qdButton (click)=\"reAuthenticate()\">\n {{ \"i18n.qd.authSupport.dialog.action.reAuthenticate\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", dependencies: [{ kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "component", type: QdTextSectionComponent, selector: "qd-text-section" }, { kind: "component", type: QdTextSectionParagraphComponent, selector: "qd-text-section-paragraph" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
1597
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDialogAuthSessionEndComponent, isStandalone: false, selector: "qd-dialog-auth-session-end", ngImport: i0, template: "<qd-dialog>\n <qd-text-section>\n <qd-text-section-paragraph>\n {{ \"i18n.qd.authSupport.dialog.content\" | translate }}\n </qd-text-section-paragraph>\n </qd-text-section>\n\n <qd-dialog-action>\n <button qdButton color=\"secondary\" (click)=\"backToEPortal()\">\n {{ \"i18n.qd.authSupport.dialog.action.backToEPortal\" | translate }}\n </button>\n <button qdButton (click)=\"reAuthenticate()\">\n {{ \"i18n.qd.authSupport.dialog.action.reAuthenticate\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", dependencies: [{ kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "component", type: QdTextSectionComponent, selector: "qd-text-section" }, { kind: "component", type: QdTextSectionParagraphComponent, selector: "qd-text-section-paragraph" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
1402
1598
  }
1403
1599
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogAuthSessionEndComponent, decorators: [{
1404
1600
  type: Component,
1405
1601
  args: [{ selector: 'qd-dialog-auth-session-end', standalone: false, template: "<qd-dialog>\n <qd-text-section>\n <qd-text-section-paragraph>\n {{ \"i18n.qd.authSupport.dialog.content\" | translate }}\n </qd-text-section-paragraph>\n </qd-text-section>\n\n <qd-dialog-action>\n <button qdButton color=\"secondary\" (click)=\"backToEPortal()\">\n {{ \"i18n.qd.authSupport.dialog.action.backToEPortal\" | translate }}\n </button>\n <button qdButton (click)=\"reAuthenticate()\">\n {{ \"i18n.qd.authSupport.dialog.action.reAuthenticate\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n" }]
1406
1602
  }], ctorParameters: () => [{ type: i1$1.DialogRef }] });
1407
1603
 
1408
- class QdBreadcrumbsService {
1409
- router;
1410
- breadcrumbsSubject = new ReplaySubject(1);
1411
- destroyed$ = new Subject();
1412
- outlet = 'primary';
1413
- breadcrumbs$ = this.breadcrumbsSubject.asObservable();
1414
- url$ = this.breadcrumbsSubject.pipe(map(breadcrumbs => breadcrumbs[breadcrumbs.length - 1]?.url || ''));
1415
- constructor(router) {
1416
- this.router = router;
1417
- }
1418
- initialize() {
1419
- this.getOutletRouteSnapshot$()
1420
- .pipe(map(snapshot => this.getSnapshotPathHierarchy(snapshot)))
1421
- .subscribe(snapshotPathHierarchy => {
1422
- let urlParts = [];
1423
- this.breadcrumbsSubject.next(snapshotPathHierarchy.map(snapshot => {
1424
- urlParts = [...urlParts, ...snapshot.url.map(url => url.path)];
1425
- return {
1426
- i18n: snapshot.data['breadcrumb']?.i18n || '',
1427
- parameters: snapshot.params,
1428
- url: urlParts.join('/')
1429
- };
1430
- }));
1431
- });
1432
- }
1433
- ngOnDestroy() {
1434
- this.destroyed$.next();
1435
- this.destroyed$.complete();
1436
- }
1437
- getOutletRouteSnapshot$() {
1438
- return this.router.events.pipe(filter(event => event instanceof ActivationEnd), map(event => event.snapshot), filter(snapshot => snapshot.outlet === this.outlet));
1439
- }
1440
- getSnapshotPathHierarchy(rootSnapshot) {
1441
- const snapshots = [];
1442
- let shapshot = rootSnapshot;
1443
- while (shapshot) {
1444
- if (shapshot.routeConfig?.path === '') {
1445
- shapshot = shapshot.firstChild;
1446
- continue;
1447
- }
1448
- snapshots.push(shapshot);
1449
- shapshot = shapshot.firstChild;
1450
- }
1451
- return snapshots;
1452
- }
1453
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdBreadcrumbsService, deps: [{ token: i1$3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
1454
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdBreadcrumbsService, providedIn: 'root' });
1455
- }
1456
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdBreadcrumbsService, decorators: [{
1457
- type: Injectable,
1458
- args: [{
1459
- providedIn: 'root'
1460
- }]
1461
- }], ctorParameters: () => [{ type: i1$3.Router }] });
1462
-
1463
- class QdDialogBreadcrumbsService extends QdBreadcrumbsService {
1464
- outlet = 'dialog';
1465
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogBreadcrumbsService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
1466
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogBreadcrumbsService, providedIn: 'root' });
1467
- }
1468
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogBreadcrumbsService, decorators: [{
1469
- type: Injectable,
1470
- args: [{
1471
- providedIn: 'root'
1472
- }]
1473
- }] });
1474
-
1475
- class QdPlaceholdersPipe {
1476
- transform(value, parameters) {
1477
- if (!value)
1478
- return value;
1479
- Object.entries(parameters).forEach(([parameterKey, parameterValue]) => {
1480
- const strToReplace = '{{' + parameterKey + '}}';
1481
- value = value.replace(new RegExp(strToReplace, 'g'), parameterValue);
1482
- });
1483
- return value;
1484
- }
1485
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPlaceholdersPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1486
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: QdPlaceholdersPipe, isStandalone: false, name: "placeholders" });
1487
- }
1488
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPlaceholdersPipe, decorators: [{
1489
- type: Pipe,
1490
- args: [{
1491
- name: 'placeholders',
1492
- standalone: false
1493
- }]
1494
- }] });
1495
-
1496
- /**
1497
- * **Breadcrumbs for the QdPageDialog** display a user's location within a hierarchical navigation structure
1498
- * inside dialog-based page flows. This follows Quadrel's navigation principles: the first two levels are
1499
- * standard pages, and further levels use dialogs. Breadcrumbs are exclusively supported within the QdPageDialog.
1500
- *
1501
- * #### **Features**
1502
- *
1503
- * - **Dialog-Specific Support**: Integrates seamlessly with Quadrel's page-dialog structure.
1504
- * - **Routing Configuration-Based**: Derives breadcrumbs directly from route definitions.
1505
- * - **Back Navigation**: Dynamically generates links for returning to previous dialog levels.
1506
- * - **Parameter Support**: Integrates route parameters into localized breadcrumb labels using placeholders.
1507
- *
1508
- * #### **Hierarchy Structure**
1509
- *
1510
- * Quadrel follows a clear and consistent navigation structure:
1511
- * - **First Level**: Overview pages.
1512
- * - **Second Level**: Create or Inspect pages.
1513
- * - **Third Level and Beyond**: Managed in page dialogs.
1514
- *
1515
- * #### **Routing Configuration**
1516
- *
1517
- * Breadcrumbs are generated using the `data.breadcrumb` field in the route configuration. This field specifies
1518
- * the localized label (`i18n`) for each breadcrumb.
1519
- *
1520
- * #### **"outlet" Property**
1521
- *
1522
- * Dialog-based routes must include the `outlet` property to specify their named outlet. This ensures the route is rendered in the QdPageDialog correctly.
1523
- *
1524
- * #### **Usage**
1525
- *
1526
- * ```json
1527
- * // Multi Language Support & Params
1528
- * {
1529
- * "i18n.breadcrumb.registration": "Registration {{refNumber}}"
1530
- * }
1531
- * ```
1532
- *
1533
- * ```typescript
1534
- * // Route Configuration
1535
- * {
1536
- * path: ':refNumber',
1537
- * outlet: 'dialog',
1538
- * data: {
1539
- * breadcrumb: { i18n: 'i18n.breadcrumb.registration' }
1540
- * },
1541
- * children: [...]
1542
- * }
1543
- * ```
1544
- *
1545
- * ```typescript
1546
- * // Open Dialog with Route
1547
- * constructor(private dialogService: QdDialogService) {}
1548
- *
1549
- * this.dialogService.openPageDialogWithBreadcrumbs('549861')
1550
- * ```
1551
- *
1552
- * #### **Full Routes Configuration Example**
1553
- *
1554
- * ```typescript
1555
- * const routes: Routes = [
1556
- * {
1557
- * path: '',
1558
- * component: AppFirstLevelComponent
1559
- * },
1560
- * {
1561
- * path: 'second',
1562
- * component: AppSecondLevelComponent,
1563
- * data: {
1564
- * breadcrumb: { i18n: 'Second Level' }
1565
- * }
1566
- * },
1567
- * {
1568
- * path: 'third',
1569
- * outlet: 'dialog',
1570
- * data: {
1571
- * breadcrumb: { i18n: 'Dialog (Third Level)' }
1572
- * },
1573
- * children: [
1574
- * {
1575
- * path: '',
1576
- * component: AppThirdLevelComponent
1577
- * },
1578
- * {
1579
- * path: 'fourth',
1580
- * data: {
1581
- * breadcrumb: { i18n: 'Dialog (Fourth Level)' }
1582
- * },
1583
- * children: [
1584
- * {
1585
- * path: '',
1586
- * component: AppFourthLevelComponent
1587
- * },
1588
- * {
1589
- * path: 'fifth',
1590
- * data: {
1591
- * breadcrumb: { i18n: 'Dialog (Fifth Level)' }
1592
- * },
1593
- * component: AppFifthLevelComponent
1594
- * }
1595
- * ]
1596
- * }
1597
- * ]
1598
- * }
1599
- * ];
1600
- * ```
1601
- */
1602
- class QdBreadcrumbsComponent {
1603
- primaryBreadcrumbsService;
1604
- dialogBreadcrumbsService;
1605
- dialogComponent;
1606
- breadcrumbs$;
1607
- get breadcrumbsService() {
1608
- switch (this.outlet) {
1609
- case 'dialog':
1610
- return this.dialogBreadcrumbsService;
1611
- case 'primary':
1612
- default:
1613
- return this.primaryBreadcrumbsService;
1614
- }
1615
- }
1616
- get outlet() {
1617
- return this.dialogComponent ? 'dialog' : 'primary';
1618
- }
1619
- constructor(primaryBreadcrumbsService, dialogBreadcrumbsService, dialogComponent) {
1620
- this.primaryBreadcrumbsService = primaryBreadcrumbsService;
1621
- this.dialogBreadcrumbsService = dialogBreadcrumbsService;
1622
- this.dialogComponent = dialogComponent;
1623
- this.breadcrumbs$ = this.breadcrumbsService.breadcrumbs$;
1624
- }
1625
- getBreadcrumbRouterLink(breadcrumb) {
1626
- return ['/', { outlets: { [this.outlet]: breadcrumb.url } }];
1627
- }
1628
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdBreadcrumbsComponent, deps: [{ token: QdBreadcrumbsService }, { token: QdDialogBreadcrumbsService }, { token: QdDialogComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1629
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdBreadcrumbsComponent, isStandalone: false, selector: "qd-breadcrumbs", ngImport: i0, template: "<ng-container *ngIf=\"breadcrumbs$ | async as breadcrumbs\">\n <nav class=\"breadcrumbs\" *ngIf=\"breadcrumbs.length > 0\">\n <ng-container *ngFor=\"let breadcrumb of breadcrumbs; let index = index; let last = last\">\n <ng-container *ngIf=\"!last\">\n <a class=\"breadcrumb\" [routerLink]=\"getBreadcrumbRouterLink(breadcrumb)\">\n {{ breadcrumb.i18n | translate | placeholders : breadcrumb.parameters }}</a\n >\n /\n </ng-container>\n <ng-container *ngIf=\"last\">\n {{ breadcrumb.i18n | translate | placeholders : breadcrumb.parameters }}\n </ng-container>\n </ng-container>\n </nav>\n</ng-container>\n", styles: [":host{background:#fff}:host .breadcrumbs{position:relative;z-index:1;overflow:visible;align-items:center;padding-top:.375rem;padding-left:1.4375rem;margin-top:.75rem;line-height:1.375rem}:host .breadcrumbs .breadcrumb{margin-right:.25rem;color:#069}:host .breadcrumbs .breadcrumb:hover,:host .breadcrumbs .breadcrumb:active{color:#14516f}:host .breadcrumbs .breadcrumb:not(:first-child){margin-left:.25rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "pipe", type: QdPlaceholdersPipe, name: "placeholders" }] });
1630
- }
1631
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdBreadcrumbsComponent, decorators: [{
1632
- type: Component,
1633
- args: [{ selector: 'qd-breadcrumbs', standalone: false, template: "<ng-container *ngIf=\"breadcrumbs$ | async as breadcrumbs\">\n <nav class=\"breadcrumbs\" *ngIf=\"breadcrumbs.length > 0\">\n <ng-container *ngFor=\"let breadcrumb of breadcrumbs; let index = index; let last = last\">\n <ng-container *ngIf=\"!last\">\n <a class=\"breadcrumb\" [routerLink]=\"getBreadcrumbRouterLink(breadcrumb)\">\n {{ breadcrumb.i18n | translate | placeholders : breadcrumb.parameters }}</a\n >\n /\n </ng-container>\n <ng-container *ngIf=\"last\">\n {{ breadcrumb.i18n | translate | placeholders : breadcrumb.parameters }}\n </ng-container>\n </ng-container>\n </nav>\n</ng-container>\n", styles: [":host{background:#fff}:host .breadcrumbs{position:relative;z-index:1;overflow:visible;align-items:center;padding-top:.375rem;padding-left:1.4375rem;margin-top:.75rem;line-height:1.375rem}:host .breadcrumbs .breadcrumb{margin-right:.25rem;color:#069}:host .breadcrumbs .breadcrumb:hover,:host .breadcrumbs .breadcrumb:active{color:#14516f}:host .breadcrumbs .breadcrumb:not(:first-child){margin-left:.25rem}\n"] }]
1634
- }], ctorParameters: () => [{ type: QdBreadcrumbsService }, { type: QdDialogBreadcrumbsService }, { type: QdDialogComponent, decorators: [{
1635
- type: Optional
1636
- }] }] });
1637
-
1638
- class QdPageDialogWithBreadcrumbsComponent {
1639
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageDialogWithBreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1640
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageDialogWithBreadcrumbsComponent, isStandalone: false, selector: "ng-component", ngImport: i0, template: "<qd-dialog>\n <div class=\"wrapper\">\n <qd-breadcrumbs></qd-breadcrumbs>\n <div class=\"router-outlet-wrapper\">\n <router-outlet name=\"dialog\"></router-outlet>\n </div>\n </div>\n</qd-dialog>\n", styles: [".wrapper{display:flex;height:100%;flex-flow:column}qd-breadcrumbs{z-index:99;flex:0 1 auto;padding-right:2.25rem;padding-bottom:.75rem;margin-bottom:-.75rem}.router-outlet-wrapper{position:relative;height:100%;flex:1 1 auto}\n"], dependencies: [{ kind: "directive", type: i1$3.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: QdBreadcrumbsComponent, selector: "qd-breadcrumbs" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }] });
1641
- }
1642
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageDialogWithBreadcrumbsComponent, decorators: [{
1643
- type: Component,
1644
- args: [{ standalone: false, template: "<qd-dialog>\n <div class=\"wrapper\">\n <qd-breadcrumbs></qd-breadcrumbs>\n <div class=\"router-outlet-wrapper\">\n <router-outlet name=\"dialog\"></router-outlet>\n </div>\n </div>\n</qd-dialog>\n", styles: [".wrapper{display:flex;height:100%;flex-flow:column}qd-breadcrumbs{z-index:99;flex:0 1 auto;padding-right:2.25rem;padding-bottom:.75rem;margin-bottom:-.75rem}.router-outlet-wrapper{position:relative;height:100%;flex:1 1 auto}\n"] }]
1645
- }] });
1646
-
1647
- /**
1648
- * **QdDialogService**: Service for managing dialogs in the application.
1649
- * This service provides methods to open, close, and manage the handling of dialog data.
1650
- */
1651
- class QdDialogService {
1652
- dialog;
1653
- router;
1654
- _currentRowSubject = new BehaviorSubject({});
1655
- currentRow$ = this._currentRowSubject.asObservable();
1656
- _currentIndexSubject = new Subject();
1657
- currentIndex$ = this._currentIndexSubject.asObservable();
1658
- _confirmationStatus = 'info';
1659
- _isConfirmationLoading = false;
1660
- _dialogData = { navigation: false, initialPaginationIndex: 0, views: [] };
1661
- get confirmationStatus() {
1662
- return { confirmationStatus: this._confirmationStatus };
1663
- }
1664
- get isConfirmationLoading() {
1665
- return this._isConfirmationLoading;
1666
- }
1667
- get isConfirmationInfo() {
1668
- return this._confirmationStatus === 'info';
1669
- }
1670
- get isConfirmationSuccess() {
1671
- return this._confirmationStatus === 'success';
1672
- }
1673
- get isConfirmationError() {
1674
- return this._confirmationStatus === 'error';
1675
- }
1676
- set dialogData(data) {
1677
- this._dialogData = data;
1678
- }
1679
- get dialogData() {
1680
- return this._dialogData;
1681
- }
1682
- constructor(dialog, router) {
1683
- this.dialog = dialog;
1684
- this.router = router;
1685
- }
1686
- open(component, config) {
1687
- config.panelClass = 'qd-custom-panel';
1688
- config.width = config.dialogSize || QdDialogSize.Default;
1689
- if (config.dialogSize === QdDialogSize.FullWidth) {
1690
- config.maxWidth = '100vw';
1691
- config.width = '100vw';
1692
- config.maxHeight = '100vh';
1693
- config.height = '100vh';
1694
- }
1695
- return this.dialog.open(component, config);
1696
- }
1697
- openFullscreen(component, config) {
1698
- this.updateDialogData(config);
1699
- return this.dialog.open(component, config);
1700
- }
1701
- openPageDialogWithBreadcrumbs(routePath, data) {
1702
- this.updateDialogData(data);
1703
- this.open(QdPageDialogWithBreadcrumbsComponent, { dialogSize: QdDialogSize.FullWidth });
1704
- this.navigateInsideDialog(routePath || this.getFirstDialogOutletRoutePathOrThrow());
1705
- }
1706
- navigateInsideDialog(routePath) {
1707
- this.router.navigate(['/', { outlets: { dialog: routePath } }]);
1708
- }
1709
- closeAll() {
1710
- this.dialog.closeAll();
1711
- }
1712
- startConfirmation() {
1713
- this._isConfirmationLoading = true;
1714
- }
1715
- confirmationSuccess() {
1716
- this._isConfirmationLoading = false;
1717
- this._confirmationStatus = 'success';
1718
- }
1719
- confirmationError() {
1720
- this._isConfirmationLoading = false;
1721
- this._confirmationStatus = 'error';
1722
- }
1723
- resetConfirmation() {
1724
- this._isConfirmationLoading = false;
1725
- this._confirmationStatus = 'info';
1726
- }
1727
- updateStep(index) {
1728
- this._currentRowSubject.next(this._dialogData.views?.[index]);
1729
- this._currentIndexSubject.next(index);
1730
- }
1731
- updateDialogData(data) {
1732
- if (!data || typeof data !== 'object')
1733
- return;
1734
- Object.entries(data).forEach(([key, value]) => {
1735
- if (!value)
1736
- return;
1737
- if (key === 'initialPaginationIndex') {
1738
- this._dialogData[key] = data['views'] && value >= 0 ? Math.min(value, data['views'].length - 1) : 0;
1739
- }
1740
- else {
1741
- this._dialogData[key] = value;
1742
- }
1743
- });
1744
- }
1745
- getFirstDialogOutletRoutePathOrThrow() {
1746
- const firstDialogOutletRoutePath = this.router.config.find(route => route.outlet === 'dialog')?.path;
1747
- if (!firstDialogOutletRoutePath || this.hasRoutePathParameters(firstDialogOutletRoutePath)) {
1748
- throw new Error('QdDialogService | Please provide a route for the openPageDialogWithBreadcrumbs method. ' +
1749
- 'The main dialog route could not be determined automatically.');
1750
- }
1751
- return firstDialogOutletRoutePath;
1752
- }
1753
- hasRoutePathParameters(routePath) {
1754
- return routePath.includes(':');
1755
- }
1756
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogService, deps: [{ token: i1$1.Dialog }, { token: i1$3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
1757
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogService, providedIn: 'root' });
1758
- }
1759
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogService, decorators: [{
1760
- type: Injectable,
1761
- args: [{
1762
- providedIn: 'root'
1763
- }]
1764
- }], ctorParameters: () => [{ type: i1$1.Dialog }, { type: i1$3.Router }] });
1765
-
1766
1604
  /**
1767
1605
  * **QdDialogAuthSessionEndService**: Service for handling authentication support functionalities.
1768
1606
  * This service is responsible for providing a handler to manage the logout process by opening a dialog.
@@ -5608,6 +5446,236 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
5608
5446
  }]
5609
5447
  }] });
5610
5448
 
5449
+ class QdBreadcrumbsService {
5450
+ router;
5451
+ breadcrumbsSubject = new ReplaySubject(1);
5452
+ destroyed$ = new Subject();
5453
+ outlet = 'primary';
5454
+ breadcrumbs$ = this.breadcrumbsSubject.asObservable();
5455
+ url$ = this.breadcrumbsSubject.pipe(map(breadcrumbs => breadcrumbs[breadcrumbs.length - 1]?.url || ''));
5456
+ constructor(router) {
5457
+ this.router = router;
5458
+ }
5459
+ initialize() {
5460
+ this.getOutletRouteSnapshot$()
5461
+ .pipe(map(snapshot => this.getSnapshotPathHierarchy(snapshot)))
5462
+ .subscribe(snapshotPathHierarchy => {
5463
+ let urlParts = [];
5464
+ this.breadcrumbsSubject.next(snapshotPathHierarchy.map(snapshot => {
5465
+ urlParts = [...urlParts, ...snapshot.url.map(url => url.path)];
5466
+ return {
5467
+ i18n: snapshot.data['breadcrumb']?.i18n || '',
5468
+ parameters: snapshot.params,
5469
+ url: urlParts.join('/')
5470
+ };
5471
+ }));
5472
+ });
5473
+ }
5474
+ ngOnDestroy() {
5475
+ this.destroyed$.next();
5476
+ this.destroyed$.complete();
5477
+ }
5478
+ getOutletRouteSnapshot$() {
5479
+ return this.router.events.pipe(filter(event => event instanceof ActivationEnd), map(event => event.snapshot), filter(snapshot => snapshot.outlet === this.outlet));
5480
+ }
5481
+ getSnapshotPathHierarchy(rootSnapshot) {
5482
+ const snapshots = [];
5483
+ let shapshot = rootSnapshot;
5484
+ while (shapshot) {
5485
+ if (shapshot.routeConfig?.path === '') {
5486
+ shapshot = shapshot.firstChild;
5487
+ continue;
5488
+ }
5489
+ snapshots.push(shapshot);
5490
+ shapshot = shapshot.firstChild;
5491
+ }
5492
+ return snapshots;
5493
+ }
5494
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdBreadcrumbsService, deps: [{ token: i1$2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
5495
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdBreadcrumbsService, providedIn: 'root' });
5496
+ }
5497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdBreadcrumbsService, decorators: [{
5498
+ type: Injectable,
5499
+ args: [{
5500
+ providedIn: 'root'
5501
+ }]
5502
+ }], ctorParameters: () => [{ type: i1$2.Router }] });
5503
+
5504
+ class QdDialogBreadcrumbsService extends QdBreadcrumbsService {
5505
+ outlet = 'dialog';
5506
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogBreadcrumbsService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
5507
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogBreadcrumbsService, providedIn: 'root' });
5508
+ }
5509
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogBreadcrumbsService, decorators: [{
5510
+ type: Injectable,
5511
+ args: [{
5512
+ providedIn: 'root'
5513
+ }]
5514
+ }] });
5515
+
5516
+ class QdPlaceholdersPipe {
5517
+ transform(value, parameters) {
5518
+ if (!value)
5519
+ return value;
5520
+ Object.entries(parameters).forEach(([parameterKey, parameterValue]) => {
5521
+ const strToReplace = '{{' + parameterKey + '}}';
5522
+ value = value.replace(new RegExp(strToReplace, 'g'), parameterValue);
5523
+ });
5524
+ return value;
5525
+ }
5526
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPlaceholdersPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
5527
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: QdPlaceholdersPipe, isStandalone: false, name: "placeholders" });
5528
+ }
5529
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPlaceholdersPipe, decorators: [{
5530
+ type: Pipe,
5531
+ args: [{
5532
+ name: 'placeholders',
5533
+ standalone: false
5534
+ }]
5535
+ }] });
5536
+
5537
+ /**
5538
+ * **Breadcrumbs for the QdPageDialog** display a user's location within a hierarchical navigation structure
5539
+ * inside dialog-based page flows. This follows Quadrel's navigation principles: the first two levels are
5540
+ * standard pages, and further levels use dialogs. Breadcrumbs are exclusively supported within the QdPageDialog.
5541
+ *
5542
+ * #### **Features**
5543
+ *
5544
+ * - **Dialog-Specific Support**: Integrates seamlessly with Quadrel's page-dialog structure.
5545
+ * - **Routing Configuration-Based**: Derives breadcrumbs directly from route definitions.
5546
+ * - **Back Navigation**: Dynamically generates links for returning to previous dialog levels.
5547
+ * - **Parameter Support**: Integrates route parameters into localized breadcrumb labels using placeholders.
5548
+ *
5549
+ * #### **Hierarchy Structure**
5550
+ *
5551
+ * Quadrel follows a clear and consistent navigation structure:
5552
+ * - **First Level**: Overview pages.
5553
+ * - **Second Level**: Create or Inspect pages.
5554
+ * - **Third Level and Beyond**: Managed in page dialogs.
5555
+ *
5556
+ * #### **Routing Configuration**
5557
+ *
5558
+ * Breadcrumbs are generated using the `data.breadcrumb` field in the route configuration. This field specifies
5559
+ * the localized label (`i18n`) for each breadcrumb.
5560
+ *
5561
+ * #### **"outlet" Property**
5562
+ *
5563
+ * Dialog-based routes must include the `outlet` property to specify their named outlet. This ensures the route is rendered in the QdPageDialog correctly.
5564
+ *
5565
+ * #### **Usage**
5566
+ *
5567
+ * ```json
5568
+ * // Multi Language Support & Params
5569
+ * {
5570
+ * "i18n.breadcrumb.registration": "Registration {{refNumber}}"
5571
+ * }
5572
+ * ```
5573
+ *
5574
+ * ```typescript
5575
+ * // Route Configuration
5576
+ * {
5577
+ * path: ':refNumber',
5578
+ * outlet: 'dialog',
5579
+ * data: {
5580
+ * breadcrumb: { i18n: 'i18n.breadcrumb.registration' }
5581
+ * },
5582
+ * children: [...]
5583
+ * }
5584
+ * ```
5585
+ *
5586
+ * ```typescript
5587
+ * // Open Dialog with Route
5588
+ * constructor(private dialogService: QdDialogService) {}
5589
+ *
5590
+ * this.dialogService.openPageDialogWithBreadcrumbs('549861')
5591
+ * ```
5592
+ *
5593
+ * #### **Full Routes Configuration Example**
5594
+ *
5595
+ * ```typescript
5596
+ * const routes: Routes = [
5597
+ * {
5598
+ * path: '',
5599
+ * component: AppFirstLevelComponent
5600
+ * },
5601
+ * {
5602
+ * path: 'second',
5603
+ * component: AppSecondLevelComponent,
5604
+ * data: {
5605
+ * breadcrumb: { i18n: 'Second Level' }
5606
+ * }
5607
+ * },
5608
+ * {
5609
+ * path: 'third',
5610
+ * outlet: 'dialog',
5611
+ * data: {
5612
+ * breadcrumb: { i18n: 'Dialog (Third Level)' }
5613
+ * },
5614
+ * children: [
5615
+ * {
5616
+ * path: '',
5617
+ * component: AppThirdLevelComponent
5618
+ * },
5619
+ * {
5620
+ * path: 'fourth',
5621
+ * data: {
5622
+ * breadcrumb: { i18n: 'Dialog (Fourth Level)' }
5623
+ * },
5624
+ * children: [
5625
+ * {
5626
+ * path: '',
5627
+ * component: AppFourthLevelComponent
5628
+ * },
5629
+ * {
5630
+ * path: 'fifth',
5631
+ * data: {
5632
+ * breadcrumb: { i18n: 'Dialog (Fifth Level)' }
5633
+ * },
5634
+ * component: AppFifthLevelComponent
5635
+ * }
5636
+ * ]
5637
+ * }
5638
+ * ]
5639
+ * }
5640
+ * ];
5641
+ * ```
5642
+ */
5643
+ class QdBreadcrumbsComponent {
5644
+ primaryBreadcrumbsService;
5645
+ dialogBreadcrumbsService;
5646
+ dialogComponent;
5647
+ breadcrumbs$;
5648
+ get breadcrumbsService() {
5649
+ switch (this.outlet) {
5650
+ case 'dialog':
5651
+ return this.dialogBreadcrumbsService;
5652
+ case 'primary':
5653
+ default:
5654
+ return this.primaryBreadcrumbsService;
5655
+ }
5656
+ }
5657
+ get outlet() {
5658
+ return this.dialogComponent ? 'dialog' : 'primary';
5659
+ }
5660
+ constructor(primaryBreadcrumbsService, dialogBreadcrumbsService, dialogComponent) {
5661
+ this.primaryBreadcrumbsService = primaryBreadcrumbsService;
5662
+ this.dialogBreadcrumbsService = dialogBreadcrumbsService;
5663
+ this.dialogComponent = dialogComponent;
5664
+ this.breadcrumbs$ = this.breadcrumbsService.breadcrumbs$;
5665
+ }
5666
+ getBreadcrumbRouterLink(breadcrumb) {
5667
+ return ['/', { outlets: { [this.outlet]: breadcrumb.url } }];
5668
+ }
5669
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdBreadcrumbsComponent, deps: [{ token: QdBreadcrumbsService }, { token: QdDialogBreadcrumbsService }, { token: QdDialogComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
5670
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdBreadcrumbsComponent, isStandalone: false, selector: "qd-breadcrumbs", ngImport: i0, template: "<ng-container *ngIf=\"breadcrumbs$ | async as breadcrumbs\">\n <nav class=\"breadcrumbs\" *ngIf=\"breadcrumbs.length > 0\">\n <ng-container *ngFor=\"let breadcrumb of breadcrumbs; let index = index; let last = last\">\n <ng-container *ngIf=\"!last\">\n <a class=\"breadcrumb\" [routerLink]=\"getBreadcrumbRouterLink(breadcrumb)\">\n {{ breadcrumb.i18n | translate | placeholders : breadcrumb.parameters }}</a\n >\n /\n </ng-container>\n <ng-container *ngIf=\"last\">\n {{ breadcrumb.i18n | translate | placeholders : breadcrumb.parameters }}\n </ng-container>\n </ng-container>\n </nav>\n</ng-container>\n", styles: [":host{background:#fff}:host .breadcrumbs{position:relative;z-index:1;overflow:visible;align-items:center;padding-top:.375rem;padding-left:1.4375rem;margin-top:.75rem;line-height:1.375rem}:host .breadcrumbs .breadcrumb{margin-right:.25rem;color:#069}:host .breadcrumbs .breadcrumb:hover,:host .breadcrumbs .breadcrumb:active{color:#14516f}:host .breadcrumbs .breadcrumb:not(:first-child){margin-left:.25rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }, { kind: "pipe", type: QdPlaceholdersPipe, name: "placeholders" }] });
5671
+ }
5672
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdBreadcrumbsComponent, decorators: [{
5673
+ type: Component,
5674
+ args: [{ selector: 'qd-breadcrumbs', standalone: false, template: "<ng-container *ngIf=\"breadcrumbs$ | async as breadcrumbs\">\n <nav class=\"breadcrumbs\" *ngIf=\"breadcrumbs.length > 0\">\n <ng-container *ngFor=\"let breadcrumb of breadcrumbs; let index = index; let last = last\">\n <ng-container *ngIf=\"!last\">\n <a class=\"breadcrumb\" [routerLink]=\"getBreadcrumbRouterLink(breadcrumb)\">\n {{ breadcrumb.i18n | translate | placeholders : breadcrumb.parameters }}</a\n >\n /\n </ng-container>\n <ng-container *ngIf=\"last\">\n {{ breadcrumb.i18n | translate | placeholders : breadcrumb.parameters }}\n </ng-container>\n </ng-container>\n </nav>\n</ng-container>\n", styles: [":host{background:#fff}:host .breadcrumbs{position:relative;z-index:1;overflow:visible;align-items:center;padding-top:.375rem;padding-left:1.4375rem;margin-top:.75rem;line-height:1.375rem}:host .breadcrumbs .breadcrumb{margin-right:.25rem;color:#069}:host .breadcrumbs .breadcrumb:hover,:host .breadcrumbs .breadcrumb:active{color:#14516f}:host .breadcrumbs .breadcrumb:not(:first-child){margin-left:.25rem}\n"] }]
5675
+ }], ctorParameters: () => [{ type: QdBreadcrumbsService }, { type: QdDialogBreadcrumbsService }, { type: QdDialogComponent, decorators: [{
5676
+ type: Optional
5677
+ }] }] });
5678
+
5611
5679
  class QdBreadcrumbsModule {
5612
5680
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdBreadcrumbsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
5613
5681
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: QdBreadcrumbsModule, declarations: [QdBreadcrumbsComponent, QdPlaceholdersPipe], imports: [CommonModule, RouterModule, TranslateModule], exports: [QdBreadcrumbsComponent] });
@@ -5867,13 +5935,13 @@ class QdDataFacetsChipTruncatedTooltipComponent {
5867
5935
  const tooltipSize = tooltipRect.width * tooltipRect.height;
5868
5936
  return tooltipSize / viewPortSize > 0.5;
5869
5937
  }
5870
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDataFacetsChipTruncatedTooltipComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$2.TranslateService }, { token: QdElementService }], target: i0.ɵɵFactoryTarget.Component });
5871
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDataFacetsChipTruncatedTooltipComponent, isStandalone: false, selector: "qd-data-facets-chip-truncated-tooltip", inputs: { truncatedChips: "truncatedChips", i18n: "i18n", columnOptions: "columnOptions", overlayRef: "overlayRef" }, host: { properties: { "style.maxWidth": "this.styleMaxWidth", "style.visibility": "this.styleVisibility" } }, usesOnChanges: true, ngImport: i0, template: "<qd-chip *ngFor=\"let chip of truncatedChips\" [state]=\"chip.level\">\n {{ columnOptions?.isTranslated ? (i18n + \".\" + chip.label | translate) : chip.label }}\n</qd-chip>\n<qd-icon *ngIf=\"closable\" [icon]=\"'timesLarge'\" class=\"closer\" (click)=\"close()\"></qd-icon>\n", styles: [":host{box-shadow:0 0 .625rem #979797;position:relative;display:flex;overflow:auto;flex-wrap:wrap;padding:1rem;background-color:#fff;gap:.5625rem}:host .closer{position:absolute;top:.3125rem;right:.3125rem;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
5938
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDataFacetsChipTruncatedTooltipComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$3.TranslateService }, { token: QdElementService }], target: i0.ɵɵFactoryTarget.Component });
5939
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDataFacetsChipTruncatedTooltipComponent, isStandalone: false, selector: "qd-data-facets-chip-truncated-tooltip", inputs: { truncatedChips: "truncatedChips", i18n: "i18n", columnOptions: "columnOptions", overlayRef: "overlayRef" }, host: { properties: { "style.maxWidth": "this.styleMaxWidth", "style.visibility": "this.styleVisibility" } }, usesOnChanges: true, ngImport: i0, template: "<qd-chip *ngFor=\"let chip of truncatedChips\" [state]=\"chip.level\">\n {{ columnOptions?.isTranslated ? (i18n + \".\" + chip.label | translate) : chip.label }}\n</qd-chip>\n<qd-icon *ngIf=\"closable\" [icon]=\"'timesLarge'\" class=\"closer\" (click)=\"close()\"></qd-icon>\n", styles: [":host{box-shadow:0 0 .625rem #979797;position:relative;display:flex;overflow:auto;flex-wrap:wrap;padding:1rem;background-color:#fff;gap:.5625rem}:host .closer{position:absolute;top:.3125rem;right:.3125rem;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
5872
5940
  }
5873
5941
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDataFacetsChipTruncatedTooltipComponent, decorators: [{
5874
5942
  type: Component,
5875
5943
  args: [{ selector: 'qd-data-facets-chip-truncated-tooltip', standalone: false, template: "<qd-chip *ngFor=\"let chip of truncatedChips\" [state]=\"chip.level\">\n {{ columnOptions?.isTranslated ? (i18n + \".\" + chip.label | translate) : chip.label }}\n</qd-chip>\n<qd-icon *ngIf=\"closable\" [icon]=\"'timesLarge'\" class=\"closer\" (click)=\"close()\"></qd-icon>\n", styles: [":host{box-shadow:0 0 .625rem #979797;position:relative;display:flex;overflow:auto;flex-wrap:wrap;padding:1rem;background-color:#fff;gap:.5625rem}:host .closer{position:absolute;top:.3125rem;right:.3125rem;cursor:pointer}\n"] }]
5876
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$2.TranslateService }, { type: QdElementService }], propDecorators: { truncatedChips: [{
5944
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$3.TranslateService }, { type: QdElementService }], propDecorators: { truncatedChips: [{
5877
5945
  type: Input
5878
5946
  }], i18n: [{
5879
5947
  type: Input
@@ -6016,7 +6084,7 @@ class QdDataFacetsChipComponent {
6016
6084
  }));
6017
6085
  }
6018
6086
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDataFacetsChipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6019
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDataFacetsChipComponent, isStandalone: false, selector: "qd-data-facets-chip", inputs: { config: "config", data: "data", i18n: "i18n", testId: "testId" }, host: { properties: { "attr.data-test-id": "testId" }, classAttribute: "qd-data-facets" }, usesOnChanges: true, ngImport: i0, template: "<qd-chip *ngFor=\"let chip of chips$ | async\" [state]=\"chip.level\">\n {{ config?.isTranslated ? (i18n + \".\" + chip.label | translate) : chip.label }}\n</qd-chip>\n\n<ng-container *ngIf=\"truncatedChips$ | async as truncatedChips\">\n <qd-data-facets-chip-truncated-indicator\n *ngIf=\"truncatedChips.length > 0\"\n [truncatedChips]=\"truncatedChips\"\n ></qd-data-facets-chip-truncated-indicator>\n</ng-container>\n", styles: [":host{line-height:normal}qd-chip{margin-right:.5625rem;margin-bottom:.125rem}qd-truncated-chips-indicator,qd-chip:last-child{margin-right:0;margin-bottom:.5625rem}span:host{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5625rem}span:host qd-truncated-chips-indicator,span:host qd-chip{margin:0}span:host qd-truncated-chips-indicator:last-child,span:host qd-chip:last-child{margin-bottom:.5625rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: QdDataFacetsChipTruncatedIndicatorComponent, selector: "qd-data-facets-chip-truncated-indicator", inputs: ["truncatedChips", "i18n", "columnOptions"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6087
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDataFacetsChipComponent, isStandalone: false, selector: "qd-data-facets-chip", inputs: { config: "config", data: "data", i18n: "i18n", testId: "testId" }, host: { properties: { "attr.data-test-id": "testId" }, classAttribute: "qd-data-facets" }, usesOnChanges: true, ngImport: i0, template: "<qd-chip *ngFor=\"let chip of chips$ | async\" [state]=\"chip.level\">\n {{ config?.isTranslated ? (i18n + \".\" + chip.label | translate) : chip.label }}\n</qd-chip>\n\n<ng-container *ngIf=\"truncatedChips$ | async as truncatedChips\">\n <qd-data-facets-chip-truncated-indicator\n *ngIf=\"truncatedChips.length > 0\"\n [truncatedChips]=\"truncatedChips\"\n ></qd-data-facets-chip-truncated-indicator>\n</ng-container>\n", styles: [":host{line-height:normal}qd-chip{margin-right:.5625rem;margin-bottom:.125rem}qd-truncated-chips-indicator,qd-chip:last-child{margin-right:0;margin-bottom:.5625rem}span:host{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5625rem}span:host qd-truncated-chips-indicator,span:host qd-chip{margin:0}span:host qd-truncated-chips-indicator:last-child,span:host qd-chip:last-child{margin-bottom:.5625rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: QdDataFacetsChipTruncatedIndicatorComponent, selector: "qd-data-facets-chip-truncated-indicator", inputs: ["truncatedChips", "i18n", "columnOptions"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6020
6088
  }
6021
6089
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDataFacetsChipComponent, decorators: [{
6022
6090
  type: Component,
@@ -6079,13 +6147,13 @@ class QdDataFacetsCurrencyComponent {
6079
6147
  maximumFractionDigits: 2
6080
6148
  }).format(this.data);
6081
6149
  }
6082
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDataFacetsCurrencyComponent, deps: [{ token: i1$2.TranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
6150
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDataFacetsCurrencyComponent, deps: [{ token: i1$3.TranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
6083
6151
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDataFacetsCurrencyComponent, isStandalone: false, selector: "qd-data-facets-currency", inputs: { config: "config", data: "data", testId: "testId" }, host: { properties: { "attr.data-test-id": "testId" }, classAttribute: "qd-data-facets" }, usesOnChanges: true, ngImport: i0, template: "{{ currency$ | async }}\n", styles: [":host{text-align:right}\n"], dependencies: [{ kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6084
6152
  }
6085
6153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDataFacetsCurrencyComponent, decorators: [{
6086
6154
  type: Component,
6087
6155
  args: [{ selector: 'qd-data-facets-currency', host: { class: 'qd-data-facets', '[attr.data-test-id]': 'testId' }, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "{{ currency$ | async }}\n", styles: [":host{text-align:right}\n"] }]
6088
- }], ctorParameters: () => [{ type: i1$2.TranslateService, decorators: [{
6156
+ }], ctorParameters: () => [{ type: i1$3.TranslateService, decorators: [{
6089
6157
  type: Optional
6090
6158
  }] }], propDecorators: { config: [{
6091
6159
  type: Input
@@ -6191,13 +6259,13 @@ class QdDataFacetsDateComponent {
6191
6259
  ? new Date(value * 1000)
6192
6260
  : new Date(value);
6193
6261
  }
6194
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDataFacetsDateComponent, deps: [{ token: i1$2.TranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
6262
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDataFacetsDateComponent, deps: [{ token: i1$3.TranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
6195
6263
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDataFacetsDateComponent, isStandalone: false, selector: "qd-data-facets-date", inputs: { config: "config", data: "data", testId: "testId" }, host: { properties: { "attr.data-test-id": "testId" }, classAttribute: "qd-data-facets" }, usesOnChanges: true, ngImport: i0, template: "{{ displayedDate$ | async }}\n", styles: [""], dependencies: [{ kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6196
6264
  }
6197
6265
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDataFacetsDateComponent, decorators: [{
6198
6266
  type: Component,
6199
6267
  args: [{ selector: 'qd-data-facets-date', host: { class: 'qd-data-facets', '[attr.data-test-id]': 'testId' }, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "{{ displayedDate$ | async }}\n" }]
6200
- }], ctorParameters: () => [{ type: i1$2.TranslateService, decorators: [{
6268
+ }], ctorParameters: () => [{ type: i1$3.TranslateService, decorators: [{
6201
6269
  type: Optional
6202
6270
  }] }], propDecorators: { config: [{
6203
6271
  type: Input
@@ -6513,7 +6581,7 @@ class QdDataFacetsTextComponent {
6513
6581
  return this.i18n + '.' + text;
6514
6582
  }
6515
6583
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDataFacetsTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6516
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDataFacetsTextComponent, isStandalone: false, selector: "qd-data-facets-text", inputs: { config: "config", data: "data", i18n: "i18n", testId: "testId" }, host: { properties: { "class": "'qd-data-facets ' + textTransformClassName + (isList ? ' has-list' : '')", "attr.data-test-id": "testId" } }, ngImport: i0, template: "<ng-container *ngIf=\"isList\">\n <span *ngFor=\"let text of data\" class=\"text text-list\">\n {{ shouldTranslate ? (getI18n(text) | translate) : text }}\n </span>\n</ng-container>\n<span *ngIf=\"!isList\" class=\"text text-single\">\n {{ shouldTranslate ? (getI18n(\"\" + data) | translate) : data }}\n</span>\n", styles: [":host.has-list{display:flex;flex-flow:column;padding-top:.75rem}:host span.text-list{display:block;min-height:1.5625rem;margin-top:.8125rem;line-height:1rem}:host span.text-list:first-of-type{margin-top:0}:host.qd-data-facets-text-capitalize{text-transform:capitalize}:host.qd-data-facets-text-uppercase{text-transform:uppercase}:host.qd-data-facets-text-lowercase{text-transform:lowercase}:host.qd-data-facets-text-full-width{text-transform:full-width}:host.qd-data-facets-text-full-size-kana{text-transform:full-size-kana}:host.qd-data-facets-text-none{text-transform:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6584
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDataFacetsTextComponent, isStandalone: false, selector: "qd-data-facets-text", inputs: { config: "config", data: "data", i18n: "i18n", testId: "testId" }, host: { properties: { "class": "'qd-data-facets ' + textTransformClassName + (isList ? ' has-list' : '')", "attr.data-test-id": "testId" } }, ngImport: i0, template: "<ng-container *ngIf=\"isList\">\n <span *ngFor=\"let text of data\" class=\"text text-list\">\n {{ shouldTranslate ? (getI18n(text) | translate) : text }}\n </span>\n</ng-container>\n<span *ngIf=\"!isList\" class=\"text text-single\">\n {{ shouldTranslate ? (getI18n(\"\" + data) | translate) : data }}\n</span>\n", styles: [":host.has-list{display:flex;flex-flow:column;padding-top:.75rem}:host span.text-list{display:block;min-height:1.5625rem;margin-top:.8125rem;line-height:1rem}:host span.text-list:first-of-type{margin-top:0}:host.qd-data-facets-text-capitalize{text-transform:capitalize}:host.qd-data-facets-text-uppercase{text-transform:uppercase}:host.qd-data-facets-text-lowercase{text-transform:lowercase}:host.qd-data-facets-text-full-width{text-transform:full-width}:host.qd-data-facets-text-full-size-kana{text-transform:full-size-kana}:host.qd-data-facets-text-none{text-transform:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6517
6585
  }
6518
6586
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDataFacetsTextComponent, decorators: [{
6519
6587
  type: Component,
@@ -6673,7 +6741,7 @@ let QdFileSizePipe$1 = class QdFileSizePipe {
6673
6741
  }).format(size);
6674
6742
  return `${formatted}${units[unitIndex]}`;
6675
6743
  }
6676
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileSizePipe, deps: [{ token: i1$2.TranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
6744
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileSizePipe, deps: [{ token: i1$3.TranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
6677
6745
  static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: QdFileSizePipe, isStandalone: false, name: "qdFileSize" });
6678
6746
  };
6679
6747
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileSizePipe$1, decorators: [{
@@ -6683,7 +6751,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
6683
6751
  pure: true,
6684
6752
  standalone: false
6685
6753
  }]
6686
- }], ctorParameters: () => [{ type: i1$2.TranslateService, decorators: [{
6754
+ }], ctorParameters: () => [{ type: i1$3.TranslateService, decorators: [{
6687
6755
  type: Optional
6688
6756
  }] }] });
6689
6757
 
@@ -7892,7 +7960,7 @@ class QdTooltipOnClickDirective {
7892
7960
  translate(key) {
7893
7961
  return this.translateService.instant(key);
7894
7962
  }
7895
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTooltipOnClickDirective, deps: [{ token: i1$5.Overlay }, { token: i0.ElementRef }, { token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Directive });
7963
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTooltipOnClickDirective, deps: [{ token: i1$5.Overlay }, { token: i0.ElementRef }, { token: i1$3.TranslateService }], target: i0.ɵɵFactoryTarget.Directive });
7896
7964
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.17", type: QdTooltipOnClickDirective, isStandalone: false, selector: "[qdTooltipOnClick]", inputs: { qdTooltipContent: "qdTooltipContent" }, host: { listeners: { "click": "onClickToggle()", "document:click": "onOutsideClickClose($event.target)" } }, ngImport: i0 });
7897
7965
  }
7898
7966
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTooltipOnClickDirective, decorators: [{
@@ -7901,7 +7969,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
7901
7969
  selector: '[qdTooltipOnClick]',
7902
7970
  standalone: false
7903
7971
  }]
7904
- }], ctorParameters: () => [{ type: i1$5.Overlay }, { type: i0.ElementRef }, { type: i1$2.TranslateService }], propDecorators: { qdTooltipContent: [{
7972
+ }], ctorParameters: () => [{ type: i1$5.Overlay }, { type: i0.ElementRef }, { type: i1$3.TranslateService }], propDecorators: { qdTooltipContent: [{
7905
7973
  type: Input
7906
7974
  }], onClickToggle: [{
7907
7975
  type: HostListener,
@@ -8218,7 +8286,7 @@ class QdCheckboxChipsItemComponent {
8218
8286
  return this.data.disabled || false;
8219
8287
  }
8220
8288
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCheckboxChipsItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8221
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdCheckboxChipsItemComponent, isStandalone: false, selector: "qd-checkbox-chips-item", inputs: { data: "data", testId: ["data-test-id", "testId"] }, host: { properties: { "class.active": "this.active", "class.disabled": "this.disabled" } }, ngImport: i0, template: "<qd-icon\n class=\"indicator checked\"\n *ngIf=\"active\"\n [icon]=\"'checkmark'\"\n [attr.data-test-id]=\"testId + '-indicator-checked'\"\n></qd-icon>\n\n<qd-icon\n class=\"indicator unchecked\"\n *ngIf=\"!active\"\n [icon]=\"'circle'\"\n [attr.data-test-id]=\"testId + '-indicator-unchecked'\"\n></qd-icon>\n\n<span class=\"label\">\n {{ data.i18n | translate }}\n</span>\n", styles: [":host{position:relative;display:inline-flex;height:2.5rem;border:.0625rem solid rgb(213,213,213);border-radius:1.25rem;margin-right:.75rem;margin-bottom:.375rem;background:#fff;color:#171717;cursor:pointer}:host .indicator,:host .label{align-self:center}:host .indicator{margin-right:.375rem;margin-left:.625rem;color:#fff0;font-size:.9375rem;font-weight:900}:host .indicator:before{position:absolute;top:50%;width:1.25rem;height:1.25rem;border:.0625rem solid rgb(213,213,213);border-radius:50%;background:#fff;content:\"\";transform:translate(1px,-50%)}:host .indicator ::ng-deep div{position:relative;width:1.25rem;height:1.25rem;text-align:center;transform:translate(1px,2px)}:host .label{margin-right:1rem;margin-left:.25rem;font-size:.9375rem;transform:translateY(.0625rem)}:host.active{border-color:#fff0;background:#069}:host.active .indicator{color:#069}:host.active .indicator:before{border-color:#fff0}:host.active .label{color:#fff}:host.disabled{border-color:#d5d5d5;color:#d5d5d5;cursor:default;pointer-events:none}:host.disabled.active{background:#d5d5d5}:host.disabled .indicator.checked{color:#d5d5d5!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
8289
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdCheckboxChipsItemComponent, isStandalone: false, selector: "qd-checkbox-chips-item", inputs: { data: "data", testId: ["data-test-id", "testId"] }, host: { properties: { "class.active": "this.active", "class.disabled": "this.disabled" } }, ngImport: i0, template: "<qd-icon\n class=\"indicator checked\"\n *ngIf=\"active\"\n [icon]=\"'checkmark'\"\n [attr.data-test-id]=\"testId + '-indicator-checked'\"\n></qd-icon>\n\n<qd-icon\n class=\"indicator unchecked\"\n *ngIf=\"!active\"\n [icon]=\"'circle'\"\n [attr.data-test-id]=\"testId + '-indicator-unchecked'\"\n></qd-icon>\n\n<span class=\"label\">\n {{ data.i18n | translate }}\n</span>\n", styles: [":host{position:relative;display:inline-flex;height:2.5rem;border:.0625rem solid rgb(213,213,213);border-radius:1.25rem;margin-right:.75rem;margin-bottom:.375rem;background:#fff;color:#171717;cursor:pointer}:host .indicator,:host .label{align-self:center}:host .indicator{margin-right:.375rem;margin-left:.625rem;color:#fff0;font-size:.9375rem;font-weight:900}:host .indicator:before{position:absolute;top:50%;width:1.25rem;height:1.25rem;border:.0625rem solid rgb(213,213,213);border-radius:50%;background:#fff;content:\"\";transform:translate(1px,-50%)}:host .indicator ::ng-deep div{position:relative;width:1.25rem;height:1.25rem;text-align:center;transform:translate(1px,2px)}:host .label{margin-right:1rem;margin-left:.25rem;font-size:.9375rem;transform:translateY(.0625rem)}:host.active{border-color:#fff0;background:#069}:host.active .indicator{color:#069}:host.active .indicator:before{border-color:#fff0}:host.active .label{color:#fff}:host.disabled{border-color:#d5d5d5;color:#d5d5d5;cursor:default;pointer-events:none}:host.disabled.active{background:#d5d5d5}:host.disabled .indicator.checked{color:#d5d5d5!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
8222
8290
  }
8223
8291
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCheckboxChipsItemComponent, decorators: [{
8224
8292
  type: Component,
@@ -8270,7 +8338,7 @@ class QdFormErrorComponent {
8270
8338
  return [];
8271
8339
  }
8272
8340
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8273
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFormErrorComponent, isStandalone: false, selector: "qd-form-error", inputs: { control: "control" }, ngImport: i0, template: "<div *ngFor=\"let error of errorArr\">\n {{ error.key | translate : error.params }}\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
8341
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFormErrorComponent, isStandalone: false, selector: "qd-form-error", inputs: { control: "control" }, ngImport: i0, template: "<div *ngFor=\"let error of errorArr\">\n {{ error.key | translate : error.params }}\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
8274
8342
  }
8275
8343
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormErrorComponent, decorators: [{
8276
8344
  type: Component,
@@ -8294,7 +8362,7 @@ class QdFormHintComponent {
8294
8362
  this.actionEmitterService.hintEventEmitterSubject.next(null);
8295
8363
  }
8296
8364
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormHintComponent, deps: [{ token: QdFormsActionEmitterService }], target: i0.ɵɵFactoryTarget.Component });
8297
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFormHintComponent, isStandalone: false, selector: "qd-form-hint", inputs: { hint: "hint", control: "control", hasError: "hasError", hintAction: "hintAction", testId: ["data-test-id", "testId"] }, host: { classAttribute: "qd-form-hint" }, ngImport: i0, template: "<div class=\"qd-form-hint\" [attr.data-test-id]=\"testId + '-hint'\">\n <ng-container *ngIf=\"!hasError && !hintAction\">\n {{ hint | translate }}\n </ng-container>\n <ng-container *ngIf=\"!hasError && hintAction\">\n <div class=\"qd-form-hint--hint-action\" (click)=\"handleClick()\">\n {{ hint | translate }}\n </div>\n </ng-container>\n</div>\n\n<div class=\"qd-form-hint--error\" [attr.data-test-id]=\"testId + '-error'\">\n <ng-container *ngIf=\"hasError\">\n <qd-form-error [control]=\"control\"></qd-form-error>\n </ng-container>\n</div>\n", styles: [":host{display:block;height:.75rem;color:#757575;font-size:.75rem;font-weight:300;line-height:.75rem}:host .qd-form-hint--error{color:#c70023}.qd-form-disabled :host{color:#979797}:host .qd-form-hint--hint-action{color:#069;cursor:pointer}:host .qd-form-hint--hint-action:hover,:host .qd-form-hint--hint-action:active,:host .qd-form-hint--hint-action:focus{text-decoration:underline}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdFormErrorComponent, selector: "qd-form-error", inputs: ["control"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
8365
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFormHintComponent, isStandalone: false, selector: "qd-form-hint", inputs: { hint: "hint", control: "control", hasError: "hasError", hintAction: "hintAction", testId: ["data-test-id", "testId"] }, host: { classAttribute: "qd-form-hint" }, ngImport: i0, template: "<div class=\"qd-form-hint\" [attr.data-test-id]=\"testId + '-hint'\">\n <ng-container *ngIf=\"!hasError && !hintAction\">\n {{ hint | translate }}\n </ng-container>\n <ng-container *ngIf=\"!hasError && hintAction\">\n <div class=\"qd-form-hint--hint-action\" (click)=\"handleClick()\">\n {{ hint | translate }}\n </div>\n </ng-container>\n</div>\n\n<div class=\"qd-form-hint--error\" [attr.data-test-id]=\"testId + '-error'\">\n <ng-container *ngIf=\"hasError\">\n <qd-form-error [control]=\"control\"></qd-form-error>\n </ng-container>\n</div>\n", styles: [":host{display:block;height:.75rem;color:#757575;font-size:.75rem;font-weight:300;line-height:.75rem}:host .qd-form-hint--error{color:#c70023}.qd-form-disabled :host{color:#979797}:host .qd-form-hint--hint-action{color:#069;cursor:pointer}:host .qd-form-hint--hint-action:hover,:host .qd-form-hint--hint-action:active,:host .qd-form-hint--hint-action:focus{text-decoration:underline}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdFormErrorComponent, selector: "qd-form-error", inputs: ["control"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
8298
8366
  }
8299
8367
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormHintComponent, decorators: [{
8300
8368
  type: Component,
@@ -8342,7 +8410,7 @@ class QdFormLabelComponent {
8342
8410
  return this.tooltip && this.tooltip?.hidden !== true;
8343
8411
  }
8344
8412
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8345
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFormLabelComponent, isStandalone: false, selector: "qd-form-label", inputs: { label: "label", isDisabled: "isDisabled", readonly: "readonly", viewonly: "viewonly", control: "control", tooltip: "tooltip", testId: ["data-test-id", "testId"] }, host: { properties: { "class.disabled": "this.isDisabled", "class.viewonly": "this.viewonly", "attr.data-test-id": "this.testId" }, classAttribute: "qd-form-label" }, ngImport: i0, template: "<span class=\"label-text\">{{ label | translate }}</span>\n<span class=\"qd-form-label__required-indicator\" *ngIf=\"isIndicatorVisible\">*</span>\n<qd-icon\n *ngIf=\"isTooltipVisible\"\n icon=\"circleInfo\"\n class=\"additional-info\"\n qdTooltipOnClick\n [qdTooltipContent]=\"tooltip?.content\"\n></qd-icon>\n", styles: [":host{display:flex;height:.875rem;align-items:center;margin-bottom:.25rem;color:#171717;font-size:.75rem;font-weight:500;line-height:.875rem}@media (max-width: 959.98px){:host.disabled{display:none}}.qd-form-error :host{color:#c70023}.qd-form-disabled :host{color:#979797}:host.viewonly{color:#757575;font-size:.875rem;font-weight:500;line-height:1.3125rem;display:block;height:unset;margin-bottom:.25rem;line-height:1.25rem}:host .label-text{transform:translateY(.0625rem)}.additional-info{align-self:center;margin-left:.25rem;color:#069;cursor:pointer;font-size:1rem;transform:translateY(.0625rem)}.additional-info:hover,.additional-info:focus,.additional-info:active{color:#14516f}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdTooltipOnClickDirective, selector: "[qdTooltipOnClick]", inputs: ["qdTooltipContent"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
8413
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFormLabelComponent, isStandalone: false, selector: "qd-form-label", inputs: { label: "label", isDisabled: "isDisabled", readonly: "readonly", viewonly: "viewonly", control: "control", tooltip: "tooltip", testId: ["data-test-id", "testId"] }, host: { properties: { "class.disabled": "this.isDisabled", "class.viewonly": "this.viewonly", "attr.data-test-id": "this.testId" }, classAttribute: "qd-form-label" }, ngImport: i0, template: "<span class=\"label-text\">{{ label | translate }}</span>\n<span class=\"qd-form-label__required-indicator\" *ngIf=\"isIndicatorVisible\">*</span>\n<qd-icon\n *ngIf=\"isTooltipVisible\"\n icon=\"circleInfo\"\n class=\"additional-info\"\n qdTooltipOnClick\n [qdTooltipContent]=\"tooltip?.content\"\n></qd-icon>\n", styles: [":host{display:flex;height:.875rem;align-items:center;margin-bottom:.25rem;color:#171717;font-size:.75rem;font-weight:500;line-height:.875rem}@media (max-width: 959.98px){:host.disabled{display:none}}.qd-form-error :host{color:#c70023}.qd-form-disabled :host{color:#979797}:host.viewonly{color:#757575;font-size:.875rem;font-weight:500;line-height:1.3125rem;display:block;height:unset;margin-bottom:.25rem;line-height:1.25rem}:host .label-text{transform:translateY(.0625rem)}.additional-info{align-self:center;margin-left:.25rem;color:#069;cursor:pointer;font-size:1rem;transform:translateY(.0625rem)}.additional-info:hover,.additional-info:focus,.additional-info:active{color:#14516f}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdTooltipOnClickDirective, selector: "[qdTooltipOnClick]", inputs: ["qdTooltipContent"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
8346
8414
  }
8347
8415
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormLabelComponent, decorators: [{
8348
8416
  type: Component,
@@ -8398,7 +8466,7 @@ class QdFormReadonlyComponent {
8398
8466
  return value;
8399
8467
  }
8400
8468
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormReadonlyComponent, deps: [{ token: QdFormsActionEmitterService }], target: i0.ɵɵFactoryTarget.Component });
8401
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFormReadonlyComponent, isStandalone: false, selector: "qd-form-readonly", inputs: { values: "values", readonlyAction: "readonlyAction", testId: ["data-test-id", "testId"] }, host: { properties: { "attr.class": "classes" } }, ngImport: i0, template: "<div (click)=\"handleClick()\" *ngIf=\"values?.length > 0\">\n <span *ngFor=\"let value of values; let last = last\">\n {{ (getTranslationKey(value) | translate) + (last ? \"\" : \", \") }}\n </span>\n</div>\n\n<div *ngIf=\"!values?.length\">&nbsp;</div>\n", styles: [":host{color:#171717;font-size:.875rem;font-weight:400;line-height:2.25rem}:host.readonly-action{color:#069;cursor:pointer}:host.readonly-action:hover,:host.readonly-action:active,:host.readonly-action:focus{text-decoration:underline}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
8469
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFormReadonlyComponent, isStandalone: false, selector: "qd-form-readonly", inputs: { values: "values", readonlyAction: "readonlyAction", testId: ["data-test-id", "testId"] }, host: { properties: { "attr.class": "classes" } }, ngImport: i0, template: "<div (click)=\"handleClick()\" *ngIf=\"values?.length > 0\">\n <span *ngFor=\"let value of values; let last = last\">\n {{ (getTranslationKey(value) | translate) + (last ? \"\" : \", \") }}\n </span>\n</div>\n\n<div *ngIf=\"!values?.length\">&nbsp;</div>\n", styles: [":host{color:#171717;font-size:.875rem;font-weight:400;line-height:2.25rem}:host.readonly-action{color:#069;cursor:pointer}:host.readonly-action:hover,:host.readonly-action:active,:host.readonly-action:focus{text-decoration:underline}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
8402
8470
  }
8403
8471
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormReadonlyComponent, decorators: [{
8404
8472
  type: Component,
@@ -8442,7 +8510,7 @@ class QdFormViewonlyComponent {
8442
8510
  return value;
8443
8511
  }
8444
8512
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormViewonlyComponent, deps: [{ token: QdFormsActionEmitterService }], target: i0.ɵɵFactoryTarget.Component });
8445
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFormViewonlyComponent, isStandalone: false, selector: "qd-form-viewonly", inputs: { values: "values", viewonlyAction: "viewonlyAction", testId: ["data-test-id", "testId"] }, host: { properties: { "attr.class": "classes" } }, ngImport: i0, template: "<div (click)=\"handleClick()\" *ngIf=\"values?.length > 0\">\n <span *ngFor=\"let value of values; let last = last\">\n {{ (formatValue(value) | translate) + (last ? \"\" : \", \") }}\n </span>\n</div>\n\n<div *ngIf=\"!values?.length\">&nbsp;</div>\n", styles: [":host{color:#171717;font-size:.875rem;font-weight:400;line-height:1rem!important;display:block;margin-bottom:.5rem}:host.viewonly-action{color:#069;cursor:pointer}:host.viewonly-action:hover,:host.viewonly-action:active,:host.viewonly-action:focus{text-decoration:underline}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
8513
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFormViewonlyComponent, isStandalone: false, selector: "qd-form-viewonly", inputs: { values: "values", viewonlyAction: "viewonlyAction", testId: ["data-test-id", "testId"] }, host: { properties: { "attr.class": "classes" } }, ngImport: i0, template: "<div (click)=\"handleClick()\" *ngIf=\"values?.length > 0\">\n <span *ngFor=\"let value of values; let last = last\">\n {{ (formatValue(value) | translate) + (last ? \"\" : \", \") }}\n </span>\n</div>\n\n<div *ngIf=\"!values?.length\">&nbsp;</div>\n", styles: [":host{color:#171717;font-size:.875rem;font-weight:400;line-height:1rem!important;display:block;margin-bottom:.5rem}:host.viewonly-action{color:#069;cursor:pointer}:host.viewonly-action:hover,:host.viewonly-action:active,:host.viewonly-action:focus{text-decoration:underline}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
8446
8514
  }
8447
8515
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormViewonlyComponent, decorators: [{
8448
8516
  type: Component,
@@ -8739,7 +8807,7 @@ class QdCheckboxComponent {
8739
8807
  useExisting: QdCheckboxComponent,
8740
8808
  multi: true
8741
8809
  }
8742
- ], ngImport: i0, template: "<label\n [for]=\"inputData.value\"\n [attr.data-test-id]=\"testId + '-label'\"\n [ngClass]=\"\n 'qd-checkbox__label' +\n (inputData.disabled || disabled ? ' qd-checkbox__label--disabled' : '') +\n (checked ? ' qd-checkbox__label--checked' : '')\n \"\n>\n <input\n type=\"checkbox\"\n qdVisuallyHidden\n [id]=\"inputData.value\"\n [attr.data-test-id]=\"testId + '-input'\"\n [ngClass]=\"'qd-checkbox__checkbox'\"\n [name]=\"id\"\n [value]=\"inputData.value\"\n [disabled]=\"inputData.disabled || disabled\"\n (click)=\"handleClick(inputData.value, $event)\"\n [checked]=\"checked\"\n />\n\n <qd-icon\n [ngClass]=\"'qd-checkbox__indicator'\"\n *ngIf=\"checked\"\n [icon]=\"'timesSquareSolid'\"\n [attr.data-test-id]=\"testId + '-indicator-checked'\"\n ></qd-icon>\n <qd-icon\n [ngClass]=\"'qd-checkbox__indicator'\"\n *ngIf=\"!checked\"\n [icon]=\"'squareSolid'\"\n [attr.data-test-id]=\"testId + '-indicator-unchecked'\"\n ></qd-icon>\n\n <span [ngClass]=\"'qd-checkbox__caption qd-intersection-target'\">{{ inputData.i18n | translate }}</span>\n</label>\n", styles: [".qd-checkbox{display:flex;align-items:center;margin-right:1rem}@media (max-width: 959.98px){.qd-checkbox:not(.qd-rwd-disabled){border:.0625rem solid rgb(180,180,180);margin-right:0;margin-bottom:.75rem;background:#fff}.qd-checkbox:not(.qd-rwd-disabled) .qd-checkbox__label{width:100%;padding-left:.75rem;line-height:2.25rem}.qd-checkbox:not(.qd-rwd-disabled) .qd-checkbox__label .qd-checkbox__indicator.qd-icon{margin-right:.75rem}.qd-checkbox:not(.qd-rwd-disabled) .qd-checkbox__label--disabled .qd-checkbox__caption{color:#d5d5d5}.qd-checkbox:not(.qd-rwd-disabled) .qd-checkbox__caption{margin-right:.75rem;color:#171717;transform:translateY(.0625rem)}}@media (max-width: 959.98px) and (max-width: 959.98px){.qd-checkbox:not(.qd-rwd-disabled) .qd-checkbox__caption{padding:.375rem 0;line-height:1.25rem}}@media (max-width: 959.98px){.qd-checkbox:not(.qd-rwd-disabled):last-child{margin-bottom:0}}.qd-checkbox:last-child{margin-right:0}.qd-checkbox .qd-checkbox__label{position:relative;display:flex;max-width:100%;align-items:center;color:#454545;cursor:pointer;font-size:.875rem;font-weight:400}.qd-checkbox .qd-checkbox__label .qd-checkbox__indicator{margin-right:.375rem;color:#b4b4b4;font-size:1.25rem}.qd-checkbox .qd-checkbox__label:not(.qd-checkbox__label--checked,.qd-checkbox__label--disabled):hover,.qd-checkbox .qd-checkbox__label:not(.qd-checkbox__label--checked,.qd-checkbox__label--disabled):focus{color:#171717}.qd-checkbox .qd-checkbox__label:not(.qd-checkbox__label--checked,.qd-checkbox__label--disabled):hover .qd-checkbox__indicator,.qd-checkbox .qd-checkbox__label:not(.qd-checkbox__label--checked,.qd-checkbox__label--disabled):focus .qd-checkbox__indicator{color:#757575}.qd-checkbox .qd-checkbox__label--checked{color:#171717}.qd-checkbox .qd-checkbox__label--checked .qd-checkbox__indicator{color:#069}.qd-checkbox .qd-checkbox__label--disabled{color:#d5d5d5;cursor:default}.qd-checkbox .qd-checkbox__label--disabled .qd-checkbox__indicator{color:#d5d5d5}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: QdVisuallyHiddenDirective, selector: "[qdVisuallyHidden]" }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
8810
+ ], ngImport: i0, template: "<label\n [for]=\"inputData.value\"\n [attr.data-test-id]=\"testId + '-label'\"\n [ngClass]=\"\n 'qd-checkbox__label' +\n (inputData.disabled || disabled ? ' qd-checkbox__label--disabled' : '') +\n (checked ? ' qd-checkbox__label--checked' : '')\n \"\n>\n <input\n type=\"checkbox\"\n qdVisuallyHidden\n [id]=\"inputData.value\"\n [attr.data-test-id]=\"testId + '-input'\"\n [ngClass]=\"'qd-checkbox__checkbox'\"\n [name]=\"id\"\n [value]=\"inputData.value\"\n [disabled]=\"inputData.disabled || disabled\"\n (click)=\"handleClick(inputData.value, $event)\"\n [checked]=\"checked\"\n />\n\n <qd-icon\n [ngClass]=\"'qd-checkbox__indicator'\"\n *ngIf=\"checked\"\n [icon]=\"'timesSquareSolid'\"\n [attr.data-test-id]=\"testId + '-indicator-checked'\"\n ></qd-icon>\n <qd-icon\n [ngClass]=\"'qd-checkbox__indicator'\"\n *ngIf=\"!checked\"\n [icon]=\"'squareSolid'\"\n [attr.data-test-id]=\"testId + '-indicator-unchecked'\"\n ></qd-icon>\n\n <span [ngClass]=\"'qd-checkbox__caption qd-intersection-target'\">{{ inputData.i18n | translate }}</span>\n</label>\n", styles: [".qd-checkbox{display:flex;align-items:center;margin-right:1rem}@media (max-width: 959.98px){.qd-checkbox:not(.qd-rwd-disabled){border:.0625rem solid rgb(180,180,180);margin-right:0;margin-bottom:.75rem;background:#fff}.qd-checkbox:not(.qd-rwd-disabled) .qd-checkbox__label{width:100%;padding-left:.75rem;line-height:2.25rem}.qd-checkbox:not(.qd-rwd-disabled) .qd-checkbox__label .qd-checkbox__indicator.qd-icon{margin-right:.75rem}.qd-checkbox:not(.qd-rwd-disabled) .qd-checkbox__label--disabled .qd-checkbox__caption{color:#d5d5d5}.qd-checkbox:not(.qd-rwd-disabled) .qd-checkbox__caption{margin-right:.75rem;color:#171717;transform:translateY(.0625rem)}}@media (max-width: 959.98px) and (max-width: 959.98px){.qd-checkbox:not(.qd-rwd-disabled) .qd-checkbox__caption{padding:.375rem 0;line-height:1.25rem}}@media (max-width: 959.98px){.qd-checkbox:not(.qd-rwd-disabled):last-child{margin-bottom:0}}.qd-checkbox:last-child{margin-right:0}.qd-checkbox .qd-checkbox__label{position:relative;display:flex;max-width:100%;align-items:center;color:#454545;cursor:pointer;font-size:.875rem;font-weight:400}.qd-checkbox .qd-checkbox__label .qd-checkbox__indicator{margin-right:.375rem;color:#b4b4b4;font-size:1.25rem}.qd-checkbox .qd-checkbox__label:not(.qd-checkbox__label--checked,.qd-checkbox__label--disabled):hover,.qd-checkbox .qd-checkbox__label:not(.qd-checkbox__label--checked,.qd-checkbox__label--disabled):focus{color:#171717}.qd-checkbox .qd-checkbox__label:not(.qd-checkbox__label--checked,.qd-checkbox__label--disabled):hover .qd-checkbox__indicator,.qd-checkbox .qd-checkbox__label:not(.qd-checkbox__label--checked,.qd-checkbox__label--disabled):focus .qd-checkbox__indicator{color:#757575}.qd-checkbox .qd-checkbox__label--checked{color:#171717}.qd-checkbox .qd-checkbox__label--checked .qd-checkbox__indicator{color:#069}.qd-checkbox .qd-checkbox__label--disabled{color:#d5d5d5;cursor:default}.qd-checkbox .qd-checkbox__label--disabled .qd-checkbox__indicator{color:#d5d5d5}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: QdVisuallyHiddenDirective, selector: "[qdVisuallyHidden]" }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
8743
8811
  }
8744
8812
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCheckboxComponent, decorators: [{
8745
8813
  type: Component,
@@ -8867,12 +8935,12 @@ class QdCheckboxesService {
8867
8935
  }));
8868
8936
  this.checkboxesListForView = this.checkboxesList.filter((_checkbox, index) => checkboxesListWithTranslation[index].translation.toLowerCase().includes(value.toLowerCase()));
8869
8937
  }
8870
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCheckboxesService, deps: [{ token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
8938
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCheckboxesService, deps: [{ token: i1$3.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
8871
8939
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCheckboxesService });
8872
8940
  }
8873
8941
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCheckboxesService, decorators: [{
8874
8942
  type: Injectable
8875
- }], ctorParameters: () => [{ type: i1$2.TranslateService }] });
8943
+ }], ctorParameters: () => [{ type: i1$3.TranslateService }] });
8876
8944
 
8877
8945
  // @ts-strict-ignore
8878
8946
  class QdFilterFormItemsComponent {
@@ -9789,12 +9857,12 @@ class QdFormOptionsService {
9789
9857
  this._options.next(filtered);
9790
9858
  this._requestState.next(QdFormOptionsRequestState.SUCCESS);
9791
9859
  }
9792
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormOptionsService, deps: [{ token: QdFormOptionsResolverRegistry }, { token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
9860
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormOptionsService, deps: [{ token: QdFormOptionsResolverRegistry }, { token: i1$3.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
9793
9861
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormOptionsService });
9794
9862
  }
9795
9863
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormOptionsService, decorators: [{
9796
9864
  type: Injectable
9797
- }], ctorParameters: () => [{ type: QdFormOptionsResolverRegistry }, { type: i1$2.TranslateService }] });
9865
+ }], ctorParameters: () => [{ type: QdFormOptionsResolverRegistry }, { type: i1$3.TranslateService }] });
9798
9866
 
9799
9867
  class QdFormKeyboardService {
9800
9868
  _keyManager;
@@ -9868,13 +9936,13 @@ class QdFormInputComponent {
9868
9936
  getLabel() {
9869
9937
  return this.translateService.instant(this.option?.i18n ?? '');
9870
9938
  }
9871
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormInputComponent, deps: [{ token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
9939
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormInputComponent, deps: [{ token: i1$3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
9872
9940
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFormInputComponent, isStandalone: false, selector: "qd-form-input", inputs: { option: "option" }, host: { properties: { "class.active": "this.isActive" } }, viewQueries: [{ propertyName: "element", first: true, predicate: ["element"], descendants: true }], ngImport: i0, template: "<div #element>\n <ng-content></ng-content>\n</div>\n", styles: [""] });
9873
9941
  }
9874
9942
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFormInputComponent, decorators: [{
9875
9943
  type: Component,
9876
9944
  args: [{ selector: 'qd-form-input', standalone: false, template: "<div #element>\n <ng-content></ng-content>\n</div>\n" }]
9877
- }], ctorParameters: () => [{ type: i1$2.TranslateService }], propDecorators: { option: [{
9945
+ }], ctorParameters: () => [{ type: i1$3.TranslateService }], propDecorators: { option: [{
9878
9946
  type: Input
9879
9947
  }], isActive: [{
9880
9948
  type: HostBinding,
@@ -9934,7 +10002,7 @@ class QdDropdownOptionsComponent {
9934
10002
  this.filterChange.emit(trimmed);
9935
10003
  }
9936
10004
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDropdownOptionsComponent, deps: [{ token: QdFormKeyboardService }, { token: QdFormOptionsService }], target: i0.ɵɵFactoryTarget.Component });
9937
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDropdownOptionsComponent, isStandalone: false, selector: "qd-dropdown-options", inputs: { filter: "filter", filterText: "filterText", testId: "testId", id: "id" }, outputs: { filterChange: "filterChange", optionClick: "optionClick" }, host: { listeners: { "document:keydown": "onKeyDown($event)" } }, viewQueries: [{ propertyName: "filterElement", first: true, predicate: ["filter"], descendants: true }, { propertyName: "optionComponents", predicate: QdFormInputComponent, descendants: true }], ngImport: i0, template: "<div class=\"filter-wrapper\">\n <input\n *ngIf=\"filter\"\n #filter\n type=\"text\"\n class=\"qd-dropdown__filter\"\n [(ngModel)]=\"filterText\"\n (ngModelChange)=\"onFilterInputChange($event)\"\n [attr.data-test-id]=\"testId + '-filter'\"\n />\n\n <qd-icon *ngIf=\"filter\" [icon]=\"'filter'\" class=\"qd-dropdown__filter-magnifier\"></qd-icon>\n</div>\n\n<ng-container *ngIf=\"filteredOptions$ | async as options\">\n <div\n class=\"qd-dropdown__option\"\n *ngFor=\"let option of options\"\n [ngClass]=\"option.disabled ? 'qd-dropdown__option--disabled' : ''\"\n >\n <qd-form-input (click)=\"optionClick.emit(option)\" [option]=\"option\" class=\"qd-dropdown__form-input\">\n <input\n class=\"qd-dropdown__option-input\"\n name=\"dropdown\"\n type=\"radio\"\n [id]=\"option.value + '-' + id\"\n [disabled]=\"option.disabled\"\n [value]=\"option.value\"\n [attr.data-test-id]=\"testId + '-option-' + (option.value || '-')\"\n />\n\n <label class=\"qd-dropdown__option-label\" [for]=\"option.value + '-' + id\">\n {{ option.i18n | translate }}\n </label>\n </qd-form-input>\n </div>\n</ng-container>\n", styles: [".qd-dropdown__option{background:#fff}.qd-dropdown__option .qd-dropdown__form-input{display:block;height:2.25rem;padding-left:.75rem;color:#454545;cursor:pointer;font-size:.875rem;font-weight:400;line-height:2.25rem}.qd-dropdown__option .qd-dropdown__form-input:focus,.qd-dropdown__option .qd-dropdown__form-input:hover,.qd-dropdown__option .qd-dropdown__form-input.active{background:#f5f5f5;color:#171717}.qd-dropdown__option .qd-dropdown__option-input{display:none}.qd-dropdown__option .qd-dropdown__option-input:checked+label{background:#f5f5f5;color:#171717}.qd-dropdown__option .qd-dropdown__option-input:focus+.qd-dropdown__form-input{background:#f5f5f5;color:#171717}.qd-dropdown__option .qd-dropdown__option-label{padding-right:1.25rem;cursor:pointer;white-space:nowrap}.qd-dropdown__option.qd-dropdown__option--disabled>.qd-dropdown__form-input{color:#b4b4b4;cursor:default;pointer-events:none}.filter-wrapper{position:relative}.qd-dropdown__filter{width:100%;height:2.25rem;padding:0 .75rem 0 2.25rem;border:none;border-bottom:.0625rem solid rgb(213,213,213);background:#fff;color:#171717;overflow-y:auto;scroll-behavior:smooth}.qd-dropdown__filter:focus,.qd-dropdown__filter:hover,.qd-dropdown__filter:active{border:none;border-bottom:.125rem solid rgb(23,23,23);background:#f5f5f5;outline:none}.qd-dropdown-filter-focus .qd-dropdown__filter{border-bottom:.125rem solid rgb(0,102,153)}.qd-dropdown-filter-focus .qd-dropdown__filter:focus,.qd-dropdown-filter-focus .qd-dropdown__filter:hover,.qd-dropdown-filter-focus .qd-dropdown__filter:active{border-bottom:.125rem solid rgb(0,102,153)}.qd-dropdown__filter-magnifier{position:absolute;top:0;left:0;padding:.625rem 0 .625rem .75rem}.qd-dropdown__filter-magnifier .qd-icon{color:#757575}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.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$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFormInputComponent, selector: "qd-form-input", inputs: ["option"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
10005
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDropdownOptionsComponent, isStandalone: false, selector: "qd-dropdown-options", inputs: { filter: "filter", filterText: "filterText", testId: "testId", id: "id" }, outputs: { filterChange: "filterChange", optionClick: "optionClick" }, host: { listeners: { "document:keydown": "onKeyDown($event)" } }, viewQueries: [{ propertyName: "filterElement", first: true, predicate: ["filter"], descendants: true }, { propertyName: "optionComponents", predicate: QdFormInputComponent, descendants: true }], ngImport: i0, template: "<div class=\"filter-wrapper\">\n <input\n *ngIf=\"filter\"\n #filter\n type=\"text\"\n class=\"qd-dropdown__filter\"\n [(ngModel)]=\"filterText\"\n (ngModelChange)=\"onFilterInputChange($event)\"\n [attr.data-test-id]=\"testId + '-filter'\"\n />\n\n <qd-icon *ngIf=\"filter\" [icon]=\"'filter'\" class=\"qd-dropdown__filter-magnifier\"></qd-icon>\n</div>\n\n<ng-container *ngIf=\"filteredOptions$ | async as options\">\n <div\n class=\"qd-dropdown__option\"\n *ngFor=\"let option of options\"\n [ngClass]=\"option.disabled ? 'qd-dropdown__option--disabled' : ''\"\n >\n <qd-form-input (click)=\"optionClick.emit(option)\" [option]=\"option\" class=\"qd-dropdown__form-input\">\n <input\n class=\"qd-dropdown__option-input\"\n name=\"dropdown\"\n type=\"radio\"\n [id]=\"option.value + '-' + id\"\n [disabled]=\"option.disabled\"\n [value]=\"option.value\"\n [attr.data-test-id]=\"testId + '-option-' + (option.value || '-')\"\n />\n\n <label class=\"qd-dropdown__option-label\" [for]=\"option.value + '-' + id\">\n {{ option.i18n | translate }}\n </label>\n </qd-form-input>\n </div>\n</ng-container>\n", styles: [".qd-dropdown__option{background:#fff}.qd-dropdown__option .qd-dropdown__form-input{display:block;height:2.25rem;padding-left:.75rem;color:#454545;cursor:pointer;font-size:.875rem;font-weight:400;line-height:2.25rem}.qd-dropdown__option .qd-dropdown__form-input:focus,.qd-dropdown__option .qd-dropdown__form-input:hover,.qd-dropdown__option .qd-dropdown__form-input.active{background:#f5f5f5;color:#171717}.qd-dropdown__option .qd-dropdown__option-input{display:none}.qd-dropdown__option .qd-dropdown__option-input:checked+label{background:#f5f5f5;color:#171717}.qd-dropdown__option .qd-dropdown__option-input:focus+.qd-dropdown__form-input{background:#f5f5f5;color:#171717}.qd-dropdown__option .qd-dropdown__option-label{padding-right:1.25rem;cursor:pointer;white-space:nowrap}.qd-dropdown__option.qd-dropdown__option--disabled>.qd-dropdown__form-input{color:#b4b4b4;cursor:default;pointer-events:none}.filter-wrapper{position:relative}.qd-dropdown__filter{width:100%;height:2.25rem;padding:0 .75rem 0 2.25rem;border:none;border-bottom:.0625rem solid rgb(213,213,213);background:#fff;color:#171717;overflow-y:auto;scroll-behavior:smooth}.qd-dropdown__filter:focus,.qd-dropdown__filter:hover,.qd-dropdown__filter:active{border:none;border-bottom:.125rem solid rgb(23,23,23);background:#f5f5f5;outline:none}.qd-dropdown-filter-focus .qd-dropdown__filter{border-bottom:.125rem solid rgb(0,102,153)}.qd-dropdown-filter-focus .qd-dropdown__filter:focus,.qd-dropdown-filter-focus .qd-dropdown__filter:hover,.qd-dropdown-filter-focus .qd-dropdown__filter:active{border-bottom:.125rem solid rgb(0,102,153)}.qd-dropdown__filter-magnifier{position:absolute;top:0;left:0;padding:.625rem 0 .625rem .75rem}.qd-dropdown__filter-magnifier .qd-icon{color:#757575}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.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$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFormInputComponent, selector: "qd-form-input", inputs: ["option"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
9938
10006
  }
9939
10007
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDropdownOptionsComponent, decorators: [{
9940
10008
  type: Component,
@@ -10299,7 +10367,7 @@ class QdDropdownComponent {
10299
10367
  this.viewonly = getViewonly(this.config, topic.payload.isViewonly);
10300
10368
  });
10301
10369
  }
10302
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDropdownComponent, deps: [{ token: i1$2.TranslateService }, { token: i0.ChangeDetectorRef }, { token: QdFormsActionEmitterService }, { token: QdFormOptionsResolverRegistry }, { token: QdFormOptionsService }, { token: i0.Injector }, { token: i1$4.ControlContainer, host: true, optional: true, skipSelf: true }, { token: QdEventBrokerService, optional: true }, { token: QD_POPOVER_TOP_FIRST, optional: true }], target: i0.ɵɵFactoryTarget.Component });
10370
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDropdownComponent, deps: [{ token: i1$3.TranslateService }, { token: i0.ChangeDetectorRef }, { token: QdFormsActionEmitterService }, { token: QdFormOptionsResolverRegistry }, { token: QdFormOptionsService }, { token: i0.Injector }, { token: i1$4.ControlContainer, host: true, optional: true, skipSelf: true }, { token: QdEventBrokerService, optional: true }, { token: QD_POPOVER_TOP_FIRST, optional: true }], target: i0.ɵɵFactoryTarget.Component });
10303
10371
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDropdownComponent, isStandalone: false, selector: "qd-dropdown", inputs: { value: "value", id: "id", formControlName: "formControlName", config: "config", testId: ["data-test-id", "testId"], qdPopoverMaxHeight: "qdPopoverMaxHeight", dense: "dense" }, outputs: { valueChange: "valueChange", enterClick: "enterClick", clickHint: "clickHint", clickReadonly: "clickReadonly", clickViewonly: "clickViewonly" }, host: { properties: { "class.qd-dropdown-readonly": "this.readonly", "class.qd-dropdown--readonly-action": "this.readonlyAction", "class.qd-dropdown-viewonly": "this.viewonly", "class.qd-dropdown--viewonly-action": "this.viewonlyAction", "class.qd-form-hint-action": "this.hintAction", "class.qd-dropdown--hint-action": "this.hintAction", "class.qd-form-disabled": "this.disabled", "class.qd-dropdown-disabled": "this.disabled", "class.dense": "this.dense", "class.qd-dropdown-open": "this.isOpen", "class.qd-form-error": "this.hasError", "class.qd-dropdown-error": "this.hasError", "class.qd-dropdown-selected": "this.isSelected" }, classAttribute: "qd-dropdown" }, providers: [
10304
10372
  QdFormsActionEmitterService,
10305
10373
  QdFormOptionsResolverRegistry,
@@ -10314,7 +10382,7 @@ class QdDropdownComponent {
10314
10382
  provide: QD_FOCUSABLE_TOKEN,
10315
10383
  useExisting: QdDropdownComponent
10316
10384
  }
10317
- ], viewQueries: [{ propertyName: "dropdownOptions", first: true, predicate: QdDropdownOptionsComponent, descendants: true }, { propertyName: "dropdownDirective", first: true, predicate: QdPopoverOnClickDirective, descendants: true }, { propertyName: "box", first: true, predicate: ["box"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<div class=\"qd-dropdown__wrapper\">\n <div\n class=\"qd-dropdown__box\"\n tabindex=\"0\"\n *ngIf=\"!readonly && !viewonly && hasOptions\"\n [qdPopoverOnClick]=\"dropdownMenu\"\n [qdPopoverCloseStrategy]=\"'onOutsideClick'\"\n [qdPopoverStopPropagation]=\"true\"\n [qdPopoverDisabled]=\"disabled\"\n [qdPopoverMaxHeight]=\"qdPopoverMaxHeight\"\n [qdPopoverAutoSize]=\"{ width: true }\"\n [qdPopoverEnableKeyControl]=\"true\"\n (opened)=\"onOpenDropdown()\"\n (closed)=\"onDropdownClosed()\"\n (click)=\"enterClick.emit()\"\n [positionStrategy]=\"positionStrategy\"\n >\n {{ (selectedOption?.i18n | translate) || placeholder }}\n\n <div class=\"qd-dropdown-suffix\">\n <qd-icon *ngIf=\"hasError\" class=\"qd-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"!readonly && !viewonly\">\n <qd-form-hint\n [hint]=\"hasHint ? config.hint.i18n : ''\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[selectedOption]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[selectedOption]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n\n<ng-template #dropdownMenu>\n <qd-dropdown-options\n [filter]=\"filter\"\n [filterText]=\"filterText\"\n [testId]=\"testId\"\n [id]=\"id\"\n (filterChange)=\"handleFilterChange($event)\"\n (optionClick)=\"handleClick($event)\"\n ></qd-dropdown-options>\n</ng-template>\n", styles: [".qd-dropdown__wrapper{position:relative;margin-bottom:.375rem}.qd-dropdown__wrapper.dense{margin-bottom:0}.qd-dropdown__wrapper .qd-dropdown__box{display:flex;overflow:hidden;width:100%;height:2.25rem;justify-content:space-between;padding:0 .75rem;border:.0625rem solid rgb(180,180,180);margin-bottom:.25rem;background:#fff;color:#fff;font-size:.875rem;font-weight:400;line-height:2.25rem;text-overflow:ellipsis;white-space:nowrap}.qd-dropdown__wrapper .qd-dropdown__box.dense{margin-bottom:0}.qd-dropdown-selected .qd-dropdown__wrapper .qd-dropdown__box{color:#171717}.qd-dropdown__wrapper .qd-dropdown__box:focus,.qd-dropdown__wrapper .qd-dropdown__box:active,.qd-dropdown__wrapper .qd-dropdown__box:hover{padding:0 .6875rem;border-width:.125rem;border-color:#171717;line-height:2.125rem;outline:0}.qd-dropdown__wrapper .qd-dropdown__box:active{color:#b4b4b4}.qd-dropdown__wrapper .qd-dropdown__box:hover:after{border-top-color:#b4b4b4}.qd-dropdown__wrapper .qd-dropdown__box:after{position:absolute;z-index:5;top:1rem;right:.75rem;width:0;height:0;border-top:.3125rem solid rgb(180,180,180);border-right:.3125rem solid rgba(255,255,255,0);border-left:.3125rem solid rgba(255,255,255,0);content:\"\";pointer-events:none}.qd-dropdown__wrapper .qd-dropdown__box .qd-dropdown-suffix{position:relative;z-index:8;margin-right:1rem;background:#fff}.qd-dropdown-disabled .qd-dropdown__wrapper .qd-dropdown__box{background:#f5f5f5;color:#979797}.qd-dropdown-disabled .qd-dropdown__wrapper .qd-dropdown__box:focus,.qd-dropdown-disabled .qd-dropdown__wrapper .qd-dropdown__box:hover,.qd-dropdown-disabled .qd-dropdown__wrapper .qd-dropdown__box:active{padding:0 .75rem;border:.0625rem solid rgb(180,180,180);line-height:2.25rem}.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box{height:inherit;padding:0;border:none;line-height:2.25rem}.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box:focus,.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box:hover,.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box:active{color:inherit}.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box:after{display:none}.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box{height:inherit;padding:0;border:none;line-height:2.25rem}.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box:focus,.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box:hover,.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box:active{color:inherit}.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box:after{display:none}.qd-dropdown--readonly-action .qd-dropdown__box.qd-dropdown__box--readonly{color:#069;cursor:pointer}.qd-dropdown--readonly-action .qd-dropdown__box.qd-dropdown__box--readonly:hover,.qd-dropdown--readonly-action .qd-dropdown__box.qd-dropdown__box--readonly:active,.qd-dropdown--readonly-action .qd-dropdown__box.qd-dropdown__box--readonly:focus{color:#069;text-decoration:underline}.qd-dropdown--viewonly-action .qd-dropdown__box.qd-dropdown__box--viewonly{color:#069;cursor:pointer}.qd-dropdown--viewonly-action .qd-dropdown__box.qd-dropdown__box--viewonly:hover,.qd-dropdown--viewonly-action .qd-dropdown__box.qd-dropdown__box--viewonly:active,.qd-dropdown--viewonly-action .qd-dropdown__box.qd-dropdown__box--viewonly:focus{color:#069;text-decoration:underline}.qd-dropdown-error .qd-dropdown__box{padding:0 .75rem;border:.0625rem solid rgb(199,0,35);line-height:2.25rem}.qd-dropdown-error .qd-dropdown__box:focus,.qd-dropdown-error .qd-dropdown__box:hover,.qd-dropdown-error .qd-dropdown__box:active{padding:0 .6875rem;border:.125rem solid rgb(199,0,35);line-height:2.125rem}.qd-dropdown-error .qd-dropdown__box .qd-error-icon{color:#c70023}.qd-dropdown{display:block;height:4.5rem;margin-bottom:.75rem}.qd-dropdown.dense{width:100%;height:auto;margin-bottom:0}.qd-dropdown.dense .qd-dropdown__wrapper,.qd-dropdown.dense .qd-dropdown__box{margin-bottom:0}.qd-dropdown-open .qd-dropdown__wrapper .qd-dropdown__box{padding:0 .6875rem;border-width:.125rem;border-color:#069;line-height:2.125rem}.qd-dropdown-open .qd-dropdown__wrapper .qd-dropdown__box:after{border-top:none;border-bottom:.3125rem solid rgb(23,23,23)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "component", type: QdDropdownOptionsComponent, selector: "qd-dropdown-options", inputs: ["filter", "filterText", "testId", "id"], outputs: ["filterChange", "optionClick"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
10385
+ ], viewQueries: [{ propertyName: "dropdownOptions", first: true, predicate: QdDropdownOptionsComponent, descendants: true }, { propertyName: "dropdownDirective", first: true, predicate: QdPopoverOnClickDirective, descendants: true }, { propertyName: "box", first: true, predicate: ["box"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<div class=\"qd-dropdown__wrapper\">\n <div\n class=\"qd-dropdown__box\"\n tabindex=\"0\"\n *ngIf=\"!readonly && !viewonly && hasOptions\"\n [qdPopoverOnClick]=\"dropdownMenu\"\n [qdPopoverCloseStrategy]=\"'onOutsideClick'\"\n [qdPopoverStopPropagation]=\"true\"\n [qdPopoverDisabled]=\"disabled\"\n [qdPopoverMaxHeight]=\"qdPopoverMaxHeight\"\n [qdPopoverAutoSize]=\"{ width: true }\"\n [qdPopoverEnableKeyControl]=\"true\"\n (opened)=\"onOpenDropdown()\"\n (closed)=\"onDropdownClosed()\"\n (click)=\"enterClick.emit()\"\n [positionStrategy]=\"positionStrategy\"\n >\n {{ (selectedOption?.i18n | translate) || placeholder }}\n\n <div class=\"qd-dropdown-suffix\">\n <qd-icon *ngIf=\"hasError\" class=\"qd-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"!readonly && !viewonly\">\n <qd-form-hint\n [hint]=\"hasHint ? config.hint.i18n : ''\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[selectedOption]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[selectedOption]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n\n<ng-template #dropdownMenu>\n <qd-dropdown-options\n [filter]=\"filter\"\n [filterText]=\"filterText\"\n [testId]=\"testId\"\n [id]=\"id\"\n (filterChange)=\"handleFilterChange($event)\"\n (optionClick)=\"handleClick($event)\"\n ></qd-dropdown-options>\n</ng-template>\n", styles: [".qd-dropdown__wrapper{position:relative;margin-bottom:.375rem}.qd-dropdown__wrapper.dense{margin-bottom:0}.qd-dropdown__wrapper .qd-dropdown__box{display:flex;overflow:hidden;width:100%;height:2.25rem;justify-content:space-between;padding:0 .75rem;border:.0625rem solid rgb(180,180,180);margin-bottom:.25rem;background:#fff;color:#fff;font-size:.875rem;font-weight:400;line-height:2.25rem;text-overflow:ellipsis;white-space:nowrap}.qd-dropdown__wrapper .qd-dropdown__box.dense{margin-bottom:0}.qd-dropdown-selected .qd-dropdown__wrapper .qd-dropdown__box{color:#171717}.qd-dropdown__wrapper .qd-dropdown__box:focus,.qd-dropdown__wrapper .qd-dropdown__box:active,.qd-dropdown__wrapper .qd-dropdown__box:hover{padding:0 .6875rem;border-width:.125rem;border-color:#171717;line-height:2.125rem;outline:0}.qd-dropdown__wrapper .qd-dropdown__box:active{color:#b4b4b4}.qd-dropdown__wrapper .qd-dropdown__box:hover:after{border-top-color:#b4b4b4}.qd-dropdown__wrapper .qd-dropdown__box:after{position:absolute;z-index:5;top:1rem;right:.75rem;width:0;height:0;border-top:.3125rem solid rgb(180,180,180);border-right:.3125rem solid rgba(255,255,255,0);border-left:.3125rem solid rgba(255,255,255,0);content:\"\";pointer-events:none}.qd-dropdown__wrapper .qd-dropdown__box .qd-dropdown-suffix{position:relative;z-index:8;margin-right:1rem;background:#fff}.qd-dropdown-disabled .qd-dropdown__wrapper .qd-dropdown__box{background:#f5f5f5;color:#979797}.qd-dropdown-disabled .qd-dropdown__wrapper .qd-dropdown__box:focus,.qd-dropdown-disabled .qd-dropdown__wrapper .qd-dropdown__box:hover,.qd-dropdown-disabled .qd-dropdown__wrapper .qd-dropdown__box:active{padding:0 .75rem;border:.0625rem solid rgb(180,180,180);line-height:2.25rem}.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box{height:inherit;padding:0;border:none;line-height:2.25rem}.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box:focus,.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box:hover,.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box:active{color:inherit}.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box:after{display:none}.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box{height:inherit;padding:0;border:none;line-height:2.25rem}.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box:focus,.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box:hover,.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box:active{color:inherit}.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box:after{display:none}.qd-dropdown--readonly-action .qd-dropdown__box.qd-dropdown__box--readonly{color:#069;cursor:pointer}.qd-dropdown--readonly-action .qd-dropdown__box.qd-dropdown__box--readonly:hover,.qd-dropdown--readonly-action .qd-dropdown__box.qd-dropdown__box--readonly:active,.qd-dropdown--readonly-action .qd-dropdown__box.qd-dropdown__box--readonly:focus{color:#069;text-decoration:underline}.qd-dropdown--viewonly-action .qd-dropdown__box.qd-dropdown__box--viewonly{color:#069;cursor:pointer}.qd-dropdown--viewonly-action .qd-dropdown__box.qd-dropdown__box--viewonly:hover,.qd-dropdown--viewonly-action .qd-dropdown__box.qd-dropdown__box--viewonly:active,.qd-dropdown--viewonly-action .qd-dropdown__box.qd-dropdown__box--viewonly:focus{color:#069;text-decoration:underline}.qd-dropdown-error .qd-dropdown__box{padding:0 .75rem;border:.0625rem solid rgb(199,0,35);line-height:2.25rem}.qd-dropdown-error .qd-dropdown__box:focus,.qd-dropdown-error .qd-dropdown__box:hover,.qd-dropdown-error .qd-dropdown__box:active{padding:0 .6875rem;border:.125rem solid rgb(199,0,35);line-height:2.125rem}.qd-dropdown-error .qd-dropdown__box .qd-error-icon{color:#c70023}.qd-dropdown{display:block;height:4.5rem;margin-bottom:.75rem}.qd-dropdown.dense{width:100%;height:auto;margin-bottom:0}.qd-dropdown.dense .qd-dropdown__wrapper,.qd-dropdown.dense .qd-dropdown__box{margin-bottom:0}.qd-dropdown-open .qd-dropdown__wrapper .qd-dropdown__box{padding:0 .6875rem;border-width:.125rem;border-color:#069;line-height:2.125rem}.qd-dropdown-open .qd-dropdown__wrapper .qd-dropdown__box:after{border-top:none;border-bottom:.3125rem solid rgb(23,23,23)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "component", type: QdDropdownOptionsComponent, selector: "qd-dropdown-options", inputs: ["filter", "filterText", "testId", "id"], outputs: ["filterChange", "optionClick"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
10318
10386
  }
10319
10387
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDropdownComponent, decorators: [{
10320
10388
  type: Component,
@@ -10333,7 +10401,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
10333
10401
  useExisting: QdDropdownComponent
10334
10402
  }
10335
10403
  ], encapsulation: ViewEncapsulation.None, host: { class: 'qd-dropdown' }, standalone: false, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<div class=\"qd-dropdown__wrapper\">\n <div\n class=\"qd-dropdown__box\"\n tabindex=\"0\"\n *ngIf=\"!readonly && !viewonly && hasOptions\"\n [qdPopoverOnClick]=\"dropdownMenu\"\n [qdPopoverCloseStrategy]=\"'onOutsideClick'\"\n [qdPopoverStopPropagation]=\"true\"\n [qdPopoverDisabled]=\"disabled\"\n [qdPopoverMaxHeight]=\"qdPopoverMaxHeight\"\n [qdPopoverAutoSize]=\"{ width: true }\"\n [qdPopoverEnableKeyControl]=\"true\"\n (opened)=\"onOpenDropdown()\"\n (closed)=\"onDropdownClosed()\"\n (click)=\"enterClick.emit()\"\n [positionStrategy]=\"positionStrategy\"\n >\n {{ (selectedOption?.i18n | translate) || placeholder }}\n\n <div class=\"qd-dropdown-suffix\">\n <qd-icon *ngIf=\"hasError\" class=\"qd-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"!readonly && !viewonly\">\n <qd-form-hint\n [hint]=\"hasHint ? config.hint.i18n : ''\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[selectedOption]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[selectedOption]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n\n<ng-template #dropdownMenu>\n <qd-dropdown-options\n [filter]=\"filter\"\n [filterText]=\"filterText\"\n [testId]=\"testId\"\n [id]=\"id\"\n (filterChange)=\"handleFilterChange($event)\"\n (optionClick)=\"handleClick($event)\"\n ></qd-dropdown-options>\n</ng-template>\n", styles: [".qd-dropdown__wrapper{position:relative;margin-bottom:.375rem}.qd-dropdown__wrapper.dense{margin-bottom:0}.qd-dropdown__wrapper .qd-dropdown__box{display:flex;overflow:hidden;width:100%;height:2.25rem;justify-content:space-between;padding:0 .75rem;border:.0625rem solid rgb(180,180,180);margin-bottom:.25rem;background:#fff;color:#fff;font-size:.875rem;font-weight:400;line-height:2.25rem;text-overflow:ellipsis;white-space:nowrap}.qd-dropdown__wrapper .qd-dropdown__box.dense{margin-bottom:0}.qd-dropdown-selected .qd-dropdown__wrapper .qd-dropdown__box{color:#171717}.qd-dropdown__wrapper .qd-dropdown__box:focus,.qd-dropdown__wrapper .qd-dropdown__box:active,.qd-dropdown__wrapper .qd-dropdown__box:hover{padding:0 .6875rem;border-width:.125rem;border-color:#171717;line-height:2.125rem;outline:0}.qd-dropdown__wrapper .qd-dropdown__box:active{color:#b4b4b4}.qd-dropdown__wrapper .qd-dropdown__box:hover:after{border-top-color:#b4b4b4}.qd-dropdown__wrapper .qd-dropdown__box:after{position:absolute;z-index:5;top:1rem;right:.75rem;width:0;height:0;border-top:.3125rem solid rgb(180,180,180);border-right:.3125rem solid rgba(255,255,255,0);border-left:.3125rem solid rgba(255,255,255,0);content:\"\";pointer-events:none}.qd-dropdown__wrapper .qd-dropdown__box .qd-dropdown-suffix{position:relative;z-index:8;margin-right:1rem;background:#fff}.qd-dropdown-disabled .qd-dropdown__wrapper .qd-dropdown__box{background:#f5f5f5;color:#979797}.qd-dropdown-disabled .qd-dropdown__wrapper .qd-dropdown__box:focus,.qd-dropdown-disabled .qd-dropdown__wrapper .qd-dropdown__box:hover,.qd-dropdown-disabled .qd-dropdown__wrapper .qd-dropdown__box:active{padding:0 .75rem;border:.0625rem solid rgb(180,180,180);line-height:2.25rem}.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box{height:inherit;padding:0;border:none;line-height:2.25rem}.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box:focus,.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box:hover,.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box:active{color:inherit}.qd-dropdown-readonly .qd-dropdown__wrapper .qd-dropdown__box:after{display:none}.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box{height:inherit;padding:0;border:none;line-height:2.25rem}.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box:focus,.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box:hover,.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box:active{color:inherit}.qd-dropdown-viewonly .qd-dropdown__wrapper .qd-dropdown__box:after{display:none}.qd-dropdown--readonly-action .qd-dropdown__box.qd-dropdown__box--readonly{color:#069;cursor:pointer}.qd-dropdown--readonly-action .qd-dropdown__box.qd-dropdown__box--readonly:hover,.qd-dropdown--readonly-action .qd-dropdown__box.qd-dropdown__box--readonly:active,.qd-dropdown--readonly-action .qd-dropdown__box.qd-dropdown__box--readonly:focus{color:#069;text-decoration:underline}.qd-dropdown--viewonly-action .qd-dropdown__box.qd-dropdown__box--viewonly{color:#069;cursor:pointer}.qd-dropdown--viewonly-action .qd-dropdown__box.qd-dropdown__box--viewonly:hover,.qd-dropdown--viewonly-action .qd-dropdown__box.qd-dropdown__box--viewonly:active,.qd-dropdown--viewonly-action .qd-dropdown__box.qd-dropdown__box--viewonly:focus{color:#069;text-decoration:underline}.qd-dropdown-error .qd-dropdown__box{padding:0 .75rem;border:.0625rem solid rgb(199,0,35);line-height:2.25rem}.qd-dropdown-error .qd-dropdown__box:focus,.qd-dropdown-error .qd-dropdown__box:hover,.qd-dropdown-error .qd-dropdown__box:active{padding:0 .6875rem;border:.125rem solid rgb(199,0,35);line-height:2.125rem}.qd-dropdown-error .qd-dropdown__box .qd-error-icon{color:#c70023}.qd-dropdown{display:block;height:4.5rem;margin-bottom:.75rem}.qd-dropdown.dense{width:100%;height:auto;margin-bottom:0}.qd-dropdown.dense .qd-dropdown__wrapper,.qd-dropdown.dense .qd-dropdown__box{margin-bottom:0}.qd-dropdown-open .qd-dropdown__wrapper .qd-dropdown__box{padding:0 .6875rem;border-width:.125rem;border-color:#069;line-height:2.125rem}.qd-dropdown-open .qd-dropdown__wrapper .qd-dropdown__box:after{border-top:none;border-bottom:.3125rem solid rgb(23,23,23)}\n"] }]
10336
- }], ctorParameters: () => [{ type: i1$2.TranslateService }, { type: i0.ChangeDetectorRef }, { type: QdFormsActionEmitterService }, { type: QdFormOptionsResolverRegistry }, { type: QdFormOptionsService }, { type: i0.Injector }, { type: i1$4.ControlContainer, decorators: [{
10404
+ }], ctorParameters: () => [{ type: i1$3.TranslateService }, { type: i0.ChangeDetectorRef }, { type: QdFormsActionEmitterService }, { type: QdFormOptionsResolverRegistry }, { type: QdFormOptionsService }, { type: i0.Injector }, { type: i1$4.ControlContainer, decorators: [{
10337
10405
  type: Optional
10338
10406
  }, {
10339
10407
  type: Host
@@ -10481,7 +10549,7 @@ class QdInputUnitsComponent {
10481
10549
  this.closed.emit();
10482
10550
  }
10483
10551
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdInputUnitsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10484
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdInputUnitsComponent, isStandalone: false, selector: "qd-input-units", inputs: { config: "config", unitValue: ["unit", "unitValue"] }, outputs: { unitChange: "unitChange", opened: "opened", closed: "closed" }, usesOnChanges: true, ngImport: i0, template: "<button\n *ngIf=\"config.units.length > 1; else singleUnit\"\n [qdPopoverOnClick]=\"units\"\n (opened)=\"handleOpened()\"\n (closed)=\"handleClosed()\"\n [qdPopoverAutoSize]=\"{ width: true }\"\n [qdPopoverMaxHeight]=\"500\"\n class=\"qd-input-unit\"\n [ngClass]=\"{ 'qd-input-unit--selected': _unit }\"\n>\n <qd-icon icon=\"ctrlDown\" class=\"qd-input-unit-icon\"></qd-icon>\n {{ _unit ? (_unit.i18n | translate) : (unitsPlaceholder | translate) }}\n</button>\n\n<ng-template #singleUnit>\n <div *ngIf=\"!config.units[0].disabled\" class=\"qd-input-single-unit\">\n {{ config.units[0].i18n | translate }}\n </div>\n</ng-template>\n\n<ng-template #units>\n <button\n *ngFor=\"let unit of config.units\"\n class=\"qd-input-unit-option\"\n [ngClass]=\"{ 'qd-input-unit-option--disabled': unit.disabled }\"\n (click)=\"handleUnitSelection(unit)\"\n >\n {{ unit.i18n | translate }}\n </button>\n</ng-template>\n", styles: [".qd-input-unit{height:2.25rem;padding:0 .5625rem 0 .25rem;border-left:.0625rem solid rgb(180,180,180);margin:0;background-color:#fff;color:#171717;font-size:.875rem;line-height:1.875rem;white-space:nowrap}.qd-input-unit-icon{color:#171717;font-size:1.125rem;font-weight:700;vertical-align:bottom}.qd-input-single-unit{height:2.25rem;padding:0 .4375rem 0 .5rem;border-left:.0625rem solid rgb(180,180,180);background-color:#fff;font-size:.875rem;line-height:2.25rem;white-space:nowrap}.qd-input-unit-option{display:block;width:100%;height:2.25rem;padding:0 .6875rem;background-color:#fff;color:#171717;font-size:.875rem;line-height:1.875rem;text-align:left;white-space:nowrap}.qd-input-unit-option--disabled{color:#b4b4b4;cursor:auto}.qd-input-unit-option:focus,.qd-input-unit-option:hover,.qd-input-unit-option:active{background:#f5f5f5}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
10552
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdInputUnitsComponent, isStandalone: false, selector: "qd-input-units", inputs: { config: "config", unitValue: ["unit", "unitValue"] }, outputs: { unitChange: "unitChange", opened: "opened", closed: "closed" }, usesOnChanges: true, ngImport: i0, template: "<button\n *ngIf=\"config.units.length > 1; else singleUnit\"\n [qdPopoverOnClick]=\"units\"\n (opened)=\"handleOpened()\"\n (closed)=\"handleClosed()\"\n [qdPopoverAutoSize]=\"{ width: true }\"\n [qdPopoverMaxHeight]=\"500\"\n class=\"qd-input-unit\"\n [ngClass]=\"{ 'qd-input-unit--selected': _unit }\"\n>\n <qd-icon icon=\"ctrlDown\" class=\"qd-input-unit-icon\"></qd-icon>\n {{ _unit ? (_unit.i18n | translate) : (unitsPlaceholder | translate) }}\n</button>\n\n<ng-template #singleUnit>\n <div *ngIf=\"!config.units[0].disabled\" class=\"qd-input-single-unit\">\n {{ config.units[0].i18n | translate }}\n </div>\n</ng-template>\n\n<ng-template #units>\n <button\n *ngFor=\"let unit of config.units\"\n class=\"qd-input-unit-option\"\n [ngClass]=\"{ 'qd-input-unit-option--disabled': unit.disabled }\"\n (click)=\"handleUnitSelection(unit)\"\n >\n {{ unit.i18n | translate }}\n </button>\n</ng-template>\n", styles: [".qd-input-unit{height:2.25rem;padding:0 .5625rem 0 .25rem;border-left:.0625rem solid rgb(180,180,180);margin:0;background-color:#fff;color:#171717;font-size:.875rem;line-height:1.875rem;white-space:nowrap}.qd-input-unit-icon{color:#171717;font-size:1.125rem;font-weight:700;vertical-align:bottom}.qd-input-single-unit{height:2.25rem;padding:0 .4375rem 0 .5rem;border-left:.0625rem solid rgb(180,180,180);background-color:#fff;font-size:.875rem;line-height:2.25rem;white-space:nowrap}.qd-input-unit-option{display:block;width:100%;height:2.25rem;padding:0 .6875rem;background-color:#fff;color:#171717;font-size:.875rem;line-height:1.875rem;text-align:left;white-space:nowrap}.qd-input-unit-option--disabled{color:#b4b4b4;cursor:auto}.qd-input-unit-option:focus,.qd-input-unit-option:hover,.qd-input-unit-option:active{background:#f5f5f5}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
10485
10553
  }
10486
10554
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdInputUnitsComponent, decorators: [{
10487
10555
  type: Component,
@@ -10530,7 +10598,7 @@ class QdInputOptionsComponent {
10530
10598
  this.optionSelected.emit(option);
10531
10599
  }
10532
10600
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdInputOptionsComponent, deps: [{ token: QdFormOptionsResolverRegistry }], target: i0.ɵɵFactoryTarget.Component });
10533
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdInputOptionsComponent, isStandalone: false, selector: "qd-input-options", inputs: { filteredOptions$: "filteredOptions$", optionsRequestState$: "optionsRequestState$" }, outputs: { template: "template", formInputComponents: "formInputComponents", optionSelected: "optionSelected" }, viewQueries: [{ propertyName: "_template", first: true, predicate: ["options"], descendants: true }, { propertyName: "_formInputComponents", predicate: QdFormInputComponent, descendants: true }], ngImport: i0, template: "<ng-template #options>\n <ng-container [ngSwitch]=\"optionsRequestState$ | async\">\n <div *ngSwitchCase=\"QdFormOptionsRequestState.PENDING\" class=\"options-hint\">\n {{ requestLoadingHintI18n | translate }}\n </div>\n <div *ngSwitchCase=\"QdFormOptionsRequestState.ERROR\" class=\"options-hint error\">\n {{ requestErrorHintI18n | translate }}\n </div>\n <ng-container *ngSwitchDefault>\n <div\n class=\"qd-input__option\"\n *ngFor=\"let option of filteredOptions$ | async\"\n [ngClass]=\"option.disabled ? 'qd-input__option--disabled' : ''\"\n >\n <qd-form-input *ngIf=\"option\" (click)=\"selectOption(option)\" [option]=\"option\" class=\"qd-input__form-input\">\n <input\n class=\"qd-input__option-input\"\n name=\"dropdown\"\n type=\"radio\"\n [disabled]=\"option.disabled\"\n [value]=\"option.value\"\n />\n\n <label class=\"qd-input__option-label\">\n {{ option.i18n | translate }}\n </label>\n </qd-form-input>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: [".qd-input__option{background:#fff}.qd-input__option .qd-input__form-input{display:block;height:2.25rem;padding-left:.75rem;color:#454545;cursor:pointer;font-size:.875rem;font-weight:400;line-height:2.25rem}.qd-input__option .qd-input__form-input:focus,.qd-input__option .qd-input__form-input:hover,.qd-input__option .qd-input__form-input.active{background:#f5f5f5;color:#171717}.qd-input__option .qd-input__option-label{cursor:pointer}.qd-input__option .qd-input__option-input{display:none}.qd-input__option .qd-input__option-input:checked+label{background:#f5f5f5;color:#171717}.qd-input__option .qd-input__option-input:focus+.qd-input__form-input{background:#f5f5f5;color:#171717}.qd-input__option.qd-input__option--disabled>.qd-input__form-input{color:#b4b4b4;cursor:default;pointer-events:none}.options-hint{color:#757575;font-size:.75rem;font-weight:500;line-height:1.125rem;padding-right:.75rem;padding-left:.75rem;line-height:2.25rem}.options-hint.error{color:#c70023}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: QdFormInputComponent, selector: "qd-form-input", inputs: ["option"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
10601
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdInputOptionsComponent, isStandalone: false, selector: "qd-input-options", inputs: { filteredOptions$: "filteredOptions$", optionsRequestState$: "optionsRequestState$" }, outputs: { template: "template", formInputComponents: "formInputComponents", optionSelected: "optionSelected" }, viewQueries: [{ propertyName: "_template", first: true, predicate: ["options"], descendants: true }, { propertyName: "_formInputComponents", predicate: QdFormInputComponent, descendants: true }], ngImport: i0, template: "<ng-template #options>\n <ng-container [ngSwitch]=\"optionsRequestState$ | async\">\n <div *ngSwitchCase=\"QdFormOptionsRequestState.PENDING\" class=\"options-hint\">\n {{ requestLoadingHintI18n | translate }}\n </div>\n <div *ngSwitchCase=\"QdFormOptionsRequestState.ERROR\" class=\"options-hint error\">\n {{ requestErrorHintI18n | translate }}\n </div>\n <ng-container *ngSwitchDefault>\n <div\n class=\"qd-input__option\"\n *ngFor=\"let option of filteredOptions$ | async\"\n [ngClass]=\"option.disabled ? 'qd-input__option--disabled' : ''\"\n >\n <qd-form-input *ngIf=\"option\" (click)=\"selectOption(option)\" [option]=\"option\" class=\"qd-input__form-input\">\n <input\n class=\"qd-input__option-input\"\n name=\"dropdown\"\n type=\"radio\"\n [disabled]=\"option.disabled\"\n [value]=\"option.value\"\n />\n\n <label class=\"qd-input__option-label\">\n {{ option.i18n | translate }}\n </label>\n </qd-form-input>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: [".qd-input__option{background:#fff}.qd-input__option .qd-input__form-input{display:block;height:2.25rem;padding-left:.75rem;color:#454545;cursor:pointer;font-size:.875rem;font-weight:400;line-height:2.25rem}.qd-input__option .qd-input__form-input:focus,.qd-input__option .qd-input__form-input:hover,.qd-input__option .qd-input__form-input.active{background:#f5f5f5;color:#171717}.qd-input__option .qd-input__option-label{cursor:pointer}.qd-input__option .qd-input__option-input{display:none}.qd-input__option .qd-input__option-input:checked+label{background:#f5f5f5;color:#171717}.qd-input__option .qd-input__option-input:focus+.qd-input__form-input{background:#f5f5f5;color:#171717}.qd-input__option.qd-input__option--disabled>.qd-input__form-input{color:#b4b4b4;cursor:default;pointer-events:none}.options-hint{color:#757575;font-size:.75rem;font-weight:500;line-height:1.125rem;padding-right:.75rem;padding-left:.75rem;line-height:2.25rem}.options-hint.error{color:#c70023}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: QdFormInputComponent, selector: "qd-form-input", inputs: ["option"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
10534
10602
  }
10535
10603
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdInputOptionsComponent, decorators: [{
10536
10604
  type: Component,
@@ -10785,7 +10853,7 @@ class QdInputOptionsDirective extends QdPopoverOnClickDirective {
10785
10853
  this.closePopover();
10786
10854
  this._filteredOptionsSubject.next(filteredOptions);
10787
10855
  }
10788
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdInputOptionsDirective, deps: [{ token: i0.ElementRef }, { token: i1$5.OverlayPositionBuilder }, { token: i1$5.Overlay }, { token: QdPopoverService }, { token: QdPopoverSizingService }, { token: i1$2.TranslateService }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }, { token: QdFormOptionsResolverRegistry }, { token: QdPopoverParentService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
10856
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdInputOptionsDirective, deps: [{ token: i0.ElementRef }, { token: i1$5.OverlayPositionBuilder }, { token: i1$5.Overlay }, { token: QdPopoverService }, { token: QdPopoverSizingService }, { token: i1$3.TranslateService }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }, { token: QdFormOptionsResolverRegistry }, { token: QdPopoverParentService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
10789
10857
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.17", type: QdInputOptionsDirective, isStandalone: false, selector: "[qdInputOptions]", inputs: { value: "value", config: "config" }, outputs: { enterClick: "enterClick", optionSelected: "optionSelected" }, host: { listeners: { "keydown.Space": "onSpace()", "keydown.escape": "onEscape()", "keydown.tab": "onTab()" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
10790
10858
  }
10791
10859
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdInputOptionsDirective, decorators: [{
@@ -10794,7 +10862,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
10794
10862
  selector: '[qdInputOptions]',
10795
10863
  standalone: false
10796
10864
  }]
10797
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1$5.OverlayPositionBuilder }, { type: i1$5.Overlay }, { type: QdPopoverService }, { type: QdPopoverSizingService }, { type: i1$2.TranslateService }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: QdFormOptionsResolverRegistry }, { type: QdPopoverParentService, decorators: [{
10865
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1$5.OverlayPositionBuilder }, { type: i1$5.Overlay }, { type: QdPopoverService }, { type: QdPopoverSizingService }, { type: i1$3.TranslateService }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: QdFormOptionsResolverRegistry }, { type: QdPopoverParentService, decorators: [{
10798
10866
  type: Optional
10799
10867
  }] }], propDecorators: { value: [{
10800
10868
  type: Input
@@ -11154,7 +11222,7 @@ class QdInputComponent {
11154
11222
  console.warn('QD-UI | QdInputComponent - Please use the QdFormControl instead of the Angular FormControl');
11155
11223
  }
11156
11224
  }
11157
- this.writeValue(this.value || getValue(this.config));
11225
+ this.writeValue(this.value ?? getValue(this.config));
11158
11226
  this.normalizeInitialControlValueIfNeeded();
11159
11227
  this._subs.add(this.actionEmitterService.hintEventEmitter$.subscribe(() => this.clickHint.emit()));
11160
11228
  this._subs.add(this.actionEmitterService.readonlyEventEmitter$.subscribe(() => this.clickReadonly.emit()));
@@ -11286,6 +11354,8 @@ class QdInputComponent {
11286
11354
  if (!this.control)
11287
11355
  return;
11288
11356
  const modelValue = this.control.value;
11357
+ if (modelValue == null)
11358
+ return void (this._value = getValueWithUnit(modelValue, this.config));
11289
11359
  const normalized = getValueWithUnit(modelValue, this.config);
11290
11360
  const target = this.hasUnits ? normalized : normalized.value;
11291
11361
  if (!isEqual(modelValue, target))
@@ -11307,7 +11377,7 @@ class QdInputComponent {
11307
11377
  provide: QD_FOCUSABLE_TOKEN,
11308
11378
  useExisting: QdInputComponent
11309
11379
  }
11310
- ], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!readonly && !viewonly && !hasOptions\">\n <div class=\"qd-input-input\" (keydown.enter)=\"emitEnterClick()\">\n <ng-container *ngTemplateOutlet=\"inputBox\"></ng-container>\n </div>\n\n <span class=\"qd-input-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<div *ngIf=\"!readonly && !viewonly && hasOptions\">\n <div\n class=\"qd-input-input\"\n qdInputOptions\n [qdPopoverMinWidth]=\"200\"\n [config]=\"config\"\n [value]=\"_value.value\"\n (optionSelected)=\"handleOptionSelected($event)\"\n (enterClick)=\"emitEnterClick()\"\n >\n <!-- handle (enterClick) by options directive here because event has to be fired after selection -->\n <ng-container *ngTemplateOutlet=\"inputBox\"></ng-container>\n </div>\n\n <span class=\"qd-input-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</div>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"valueAsList\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"valueAsList\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n\n<ng-template #inputBox>\n <input\n #input\n [placeholder]=\"placeholder | translate\"\n [value]=\"hasOptions ? (_value.value.toString() | translate) : _value.value\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur()\"\n [disabled]=\"disabled || readonly\"\n [type]=\"inputType\"\n [attr.inputmode]=\"inputMode\"\n [qdAutofocus]=\"hasAutofocus\"\n [attr.data-test-id]=\"testId + '-input'\"\n [step]=\"config?.step\"\n required\n />\n <div class=\"qd-input-suffix\">\n <qd-icon *ngIf=\"hasError && !hasOnlyUnitsError\" class=\"qd-input-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n <qd-icon *ngIf=\"clearable\" class=\"qd-input-clearable-icon\" icon=\"timesLarge\" (click)=\"clearInput()\"></qd-icon>\n <ng-content select=\"[qdIconButton]\"></ng-content>\n </div>\n <qd-input-units\n *ngIf=\"hasUnits\"\n [unit]=\"_value.unit\"\n [config]=\"config\"\n (unitChange)=\"handleUnitChange($event)\"\n (opened)=\"handleUnitsOpened()\"\n (closed)=\"handleUnitsClosed()\"\n ></qd-input-units>\n <div class=\"qd-input-suffix\" *ngIf=\"hasError && hasOnlyUnitsError\">\n <qd-icon class=\"qd-input-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n </div>\n</ng-template>\n", styles: [":host{position:relative;display:block;width:100%;flex-direction:column;margin-bottom:.75rem}:host .qd-input-input{display:flex;overflow:hidden;height:2.25rem;align-items:center;padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(180,180,180);border-radius:0;margin-bottom:.375rem;background-color:#fff}:host .qd-input-input:hover,:host .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(23,23,23);border-radius:0}:host .qd-input-input input{overflow:hidden;width:100%;flex-grow:1;border:none;background-color:#fff;color:#171717;font-size:.875rem;line-height:1.875rem}:host .qd-input-input input:hover,:host .qd-input-input input:focus,:host .qd-input-input input:active{border:none;outline:none}:host .qd-input-input input::placeholder{color:#b4b4b4}:host .qd-input-input input:focus::placeholder{display:block;color:#b4b4b4}:host .qd-input-input .qd-input-suffix{display:flex;align-items:center;margin-left:.75rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-error-icon{padding-right:.5rem;color:#c70023}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-error-icon+.qd-input-clearable-icon{margin-left:-.25rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon{margin-right:.5625rem;color:#979797;cursor:pointer;font-size:1.25rem;line-height:2rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:hover,:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:focus,:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:active{color:#171717}:host .qd-input-input qd-input-units+.qd-input-suffix{margin:0 0 0 -.1875rem}:host .qd-input-character-counter{padding-left:.125rem;color:#757575;float:right;font-size:.75rem;font-weight:300;line-height:.75rem}:host:after{display:block;height:0;clear:both;content:\".\";visibility:hidden}:host.qd-input-focus .qd-input-input{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(0,102,153);border-radius:0;outline:none}:host.qd-input-readonly .qd-input-readonly{color:#171717;font-size:.875rem;line-height:2.25rem}:host.qd-input-viewonly .qd-input-viewonly{color:#171717;font-size:.875rem;line-height:2.25rem}:host.qd-input-disabled .qd-input-input{border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-input-disabled .qd-input-input input{background-color:#f5f5f5;color:#979797}:host.qd-input-disabled .qd-input-input input::placeholder{opacity:0}:host.qd-input-disabled .qd-input-input:hover,:host.qd-input-disabled .qd-input-input:active{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-input-disabled.qd-input-focus{border-color:#ff9b00}:host.qd-input--readonly-action .qd-input-readonly{color:#069;cursor:pointer}:host.qd-input--readonly-action .qd-input-readonly:hover,:host.qd-input--readonly-action .qd-input-readonly:active,:host.qd-input--readonly-action .qd-input-readonly:focus{text-decoration:underline}:host.qd-input--viewonly-action .qd-input-viewonly{color:#069;cursor:pointer}:host.qd-input--viewonly-action .qd-input-viewonly:hover,:host.qd-input--viewonly-action .qd-input-viewonly:active,:host.qd-input--viewonly-action .qd-input-viewonly:focus{text-decoration:underline}:host.qd-input-error .qd-input-input,:host.qd-input-error-from-outside .qd-input-input{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(199,0,35)}:host.qd-input-error .qd-input-input:hover,:host.qd-input-error .qd-input-input:active,:host.qd-input-error-from-outside .qd-input-input:hover,:host.qd-input-error-from-outside .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(199,0,35)}:host.qd-input-error.qd-input-focus,:host.qd-input-error-from-outside.qd-input-focus{border-color:#c70023}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: QdAutofocusDirective, selector: "[qdAutofocus]", inputs: ["qdAutofocus"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "component", type: QdInputUnitsComponent, selector: "qd-input-units", inputs: ["config", "unit"], outputs: ["unitChange", "opened", "closed"] }, { kind: "directive", type: QdInputOptionsDirective, selector: "[qdInputOptions]", inputs: ["value", "config"], outputs: ["enterClick", "optionSelected"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
11380
+ ], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!readonly && !viewonly && !hasOptions\">\n <div class=\"qd-input-input\" (keydown.enter)=\"emitEnterClick()\">\n <ng-container *ngTemplateOutlet=\"inputBox\"></ng-container>\n </div>\n\n <span class=\"qd-input-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<div *ngIf=\"!readonly && !viewonly && hasOptions\">\n <div\n class=\"qd-input-input\"\n qdInputOptions\n [qdPopoverMinWidth]=\"200\"\n [config]=\"config\"\n [value]=\"_value.value\"\n (optionSelected)=\"handleOptionSelected($event)\"\n (enterClick)=\"emitEnterClick()\"\n >\n <!-- handle (enterClick) by options directive here because event has to be fired after selection -->\n <ng-container *ngTemplateOutlet=\"inputBox\"></ng-container>\n </div>\n\n <span class=\"qd-input-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</div>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"valueAsList\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"valueAsList\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n\n<ng-template #inputBox>\n <input\n #input\n [placeholder]=\"placeholder | translate\"\n [value]=\"hasOptions ? (_value.value.toString() | translate) : _value.value\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur()\"\n [disabled]=\"disabled || readonly\"\n [type]=\"inputType\"\n [attr.inputmode]=\"inputMode\"\n [qdAutofocus]=\"hasAutofocus\"\n [attr.data-test-id]=\"testId + '-input'\"\n [step]=\"config?.step\"\n required\n />\n <div class=\"qd-input-suffix\">\n <qd-icon *ngIf=\"hasError && !hasOnlyUnitsError\" class=\"qd-input-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n <qd-icon *ngIf=\"clearable\" class=\"qd-input-clearable-icon\" icon=\"timesLarge\" (click)=\"clearInput()\"></qd-icon>\n <ng-content select=\"[qdIconButton]\"></ng-content>\n </div>\n <qd-input-units\n *ngIf=\"hasUnits\"\n [unit]=\"_value.unit\"\n [config]=\"config\"\n (unitChange)=\"handleUnitChange($event)\"\n (opened)=\"handleUnitsOpened()\"\n (closed)=\"handleUnitsClosed()\"\n ></qd-input-units>\n <div class=\"qd-input-suffix\" *ngIf=\"hasError && hasOnlyUnitsError\">\n <qd-icon class=\"qd-input-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n </div>\n</ng-template>\n", styles: [":host{position:relative;display:block;width:100%;flex-direction:column;margin-bottom:.75rem}:host .qd-input-input{display:flex;overflow:hidden;height:2.25rem;align-items:center;padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(180,180,180);border-radius:0;margin-bottom:.375rem;background-color:#fff}:host .qd-input-input:hover,:host .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(23,23,23);border-radius:0}:host .qd-input-input input{overflow:hidden;width:100%;flex-grow:1;border:none;background-color:#fff;color:#171717;font-size:.875rem;line-height:1.875rem}:host .qd-input-input input:hover,:host .qd-input-input input:focus,:host .qd-input-input input:active{border:none;outline:none}:host .qd-input-input input::placeholder{color:#b4b4b4}:host .qd-input-input input:focus::placeholder{display:block;color:#b4b4b4}:host .qd-input-input .qd-input-suffix{display:flex;align-items:center;margin-left:.75rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-error-icon{padding-right:.5rem;color:#c70023}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-error-icon+.qd-input-clearable-icon{margin-left:-.25rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon{margin-right:.5625rem;color:#979797;cursor:pointer;font-size:1.25rem;line-height:2rem}:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:hover,:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:focus,:host .qd-input-input .qd-input-suffix ::ng-deep .qd-input-clearable-icon:active{color:#171717}:host .qd-input-input qd-input-units+.qd-input-suffix{margin:0 0 0 -.1875rem}:host .qd-input-character-counter{padding-left:.125rem;color:#757575;float:right;font-size:.75rem;font-weight:300;line-height:.75rem}:host:after{display:block;height:0;clear:both;content:\".\";visibility:hidden}:host.qd-input-focus .qd-input-input{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(0,102,153);border-radius:0;outline:none}:host.qd-input-readonly .qd-input-readonly{color:#171717;font-size:.875rem;line-height:2.25rem}:host.qd-input-viewonly .qd-input-viewonly{color:#171717;font-size:.875rem;line-height:2.25rem}:host.qd-input-disabled .qd-input-input{border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-input-disabled .qd-input-input input{background-color:#f5f5f5;color:#979797}:host.qd-input-disabled .qd-input-input input::placeholder{opacity:0}:host.qd-input-disabled .qd-input-input:hover,:host.qd-input-disabled .qd-input-input:active{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-input-disabled.qd-input-focus{border-color:#ff9b00}:host.qd-input--readonly-action .qd-input-readonly{color:#069;cursor:pointer}:host.qd-input--readonly-action .qd-input-readonly:hover,:host.qd-input--readonly-action .qd-input-readonly:active,:host.qd-input--readonly-action .qd-input-readonly:focus{text-decoration:underline}:host.qd-input--viewonly-action .qd-input-viewonly{color:#069;cursor:pointer}:host.qd-input--viewonly-action .qd-input-viewonly:hover,:host.qd-input--viewonly-action .qd-input-viewonly:active,:host.qd-input--viewonly-action .qd-input-viewonly:focus{text-decoration:underline}:host.qd-input-error .qd-input-input,:host.qd-input-error-from-outside .qd-input-input{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(199,0,35)}:host.qd-input-error .qd-input-input:hover,:host.qd-input-error .qd-input-input:active,:host.qd-input-error-from-outside .qd-input-input:hover,:host.qd-input-error-from-outside .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(199,0,35)}:host.qd-input-error.qd-input-focus,:host.qd-input-error-from-outside.qd-input-focus{border-color:#c70023}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: QdAutofocusDirective, selector: "[qdAutofocus]", inputs: ["qdAutofocus"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "component", type: QdInputUnitsComponent, selector: "qd-input-units", inputs: ["config", "unit"], outputs: ["unitChange", "opened", "closed"] }, { kind: "directive", type: QdInputOptionsDirective, selector: "[qdInputOptions]", inputs: ["value", "config"], outputs: ["enterClick", "optionSelected"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
11311
11381
  }
11312
11382
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdInputComponent, decorators: [{
11313
11383
  type: Component,
@@ -11774,7 +11844,7 @@ class QdDatepickerComponent {
11774
11844
  return $rawValue.value != null ? String($rawValue.value) : '';
11775
11845
  return $rawValue != null ? String($rawValue) : '';
11776
11846
  }
11777
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDatepickerComponent, deps: [{ token: QdFormsActionEmitterService }, { token: TimePickerService }, { token: i1$2.TranslateService, optional: true }, { token: i1$4.ControlContainer, host: true, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }, { token: QdEventBrokerService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
11847
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDatepickerComponent, deps: [{ token: QdFormsActionEmitterService }, { token: TimePickerService }, { token: i1$3.TranslateService, optional: true }, { token: i1$4.ControlContainer, host: true, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }, { token: QdEventBrokerService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
11778
11848
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDatepickerComponent, isStandalone: false, selector: "qd-datepicker", inputs: { config: "config", formControlName: "formControlName", value: "value", hasCalendarOnly: "hasCalendarOnly", testId: ["data-test-id", "testId"] }, outputs: { valueChange: "valueChange", clickTimePlaceholder: "clickTimePlaceholder", clickHint: "clickHint", clickReadonly: "clickReadonly", clickViewonly: "clickViewonly" }, host: { properties: { "class.qd-datepicker-calendar-only": "this.hasCalendarOnly", "class.qd-datepicker-readonly": "this.readonly", "class.qd-datepicker-viewonly": "this.viewonly", "class.qd-form-hint-action": "this.hintAction", "class.qd-form-disabled": "this.disabled", "class.qd-form-error": "this.hasError", "class.qd-datepicker-error": "this.hasError" } }, providers: [
11779
11849
  {
11780
11850
  provide: NG_VALUE_ACCESSOR,
@@ -11802,7 +11872,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
11802
11872
  },
11803
11873
  QdFormsActionEmitterService
11804
11874
  ], standalone: false, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<qd-input\n *ngIf=\"!readonly && !viewonly\"\n [value]=\"config?.timePicker && displayedDateTime ? displayedDateTime : displayedDate\"\n (valueChange)=\"config?.timePicker ? handleUpdatedDateTime($event) : handleUpdatedDate($event)\"\n [config]=\"{ disabled, readonly, viewonly, placeholder: config?.placeholder }\"\n [isError]=\"hasError\"\n>\n <button\n type=\"button\"\n class=\"datepicker-toggle\"\n qdIconButton\n [qdPopoverOnClick]=\"disabled ? null : calendar\"\n [qdPopoverMaxWidth]=\"332\"\n qdPopoverCloseStrategy=\"onOutsideClick\"\n #qdPopoverOnClick=\"qdPopoverOnClick\"\n >\n <qd-icon [icon]=\"'calendar'\"></qd-icon>\n </button>\n</qd-input>\n\n<ng-template #calendar>\n <qd-calendar\n [selectedDate]=\"config?.timePicker && displayedDateTime ? displayedDateTime : displayedDate\"\n [language]=\"language\"\n [disabledDates]=\"config?.disabledDates\"\n (selectedChange)=\"handleUpdatedDate($event)\"\n ></qd-calendar>\n <qd-dropdown\n class=\"timepicker-dropdown\"\n *ngIf=\"timePicker\"\n [value]=\"displayedTime\"\n (valueChange)=\"handleUpdatedTime($event)\"\n [config]=\"timePicker\"\n [qdPopoverMaxHeight]=\"300\"\n ></qd-dropdown>\n</ng-template>\n\n<ng-container *ngIf=\"!readonly && !viewonly\">\n <qd-form-hint\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[displayedDate]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[displayedDate]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: ["qd-datepicker{position:relative;display:block;width:100%;margin-bottom:.75rem}qd-datepicker .calendar{padding:1rem}qd-datepicker .calendar mat-calendar{display:block}qd-datepicker .datepicker-toggle{background-color:unset}qd-datepicker:not(.qd-datepicker-calendar-only) qd-input{height:2.25rem;margin-bottom:.375rem!important}qd-datepicker:not(.qd-datepicker-calendar-only) qd-input .qd-form-label,qd-datepicker:not(.qd-datepicker-calendar-only) qd-input .qd-form-hint{display:none}qd-datepicker .qd-form-disabled .datepicker-toggle{color:#979797;cursor:default}qd-datepicker.qd-datepicker-calendar-only{margin-bottom:0}qd-datepicker.qd-datepicker-calendar-only qd-input{margin:0}qd-datepicker.qd-datepicker-calendar-only .qd-form-label,qd-datepicker.qd-datepicker-calendar-only .qd-form-hint,qd-datepicker.qd-datepicker-calendar-only .qd-input-input input{display:none}qd-datepicker.qd-datepicker-calendar-only .qd-input-input{height:initial!important;padding:0!important;border:none!important;margin:0!important}qd-datepicker.qd-datepicker-calendar-only .qd-input-suffix{margin-left:0!important}.timepicker-dropdown{margin:.75rem}\n"] }]
11805
- }], ctorParameters: () => [{ type: QdFormsActionEmitterService }, { type: TimePickerService }, { type: i1$2.TranslateService, decorators: [{
11875
+ }], ctorParameters: () => [{ type: QdFormsActionEmitterService }, { type: TimePickerService }, { type: i1$3.TranslateService, decorators: [{
11806
11876
  type: Optional
11807
11877
  }] }, { type: i1$4.ControlContainer, decorators: [{
11808
11878
  type: Optional
@@ -12224,7 +12294,7 @@ class QdFileUploadComponent {
12224
12294
  },
12225
12295
  QdFormsActionEmitterService,
12226
12296
  QdFileUploadService
12227
- ], ngImport: i0, template: "<qd-form-label\n [label]=\"config?.label?.i18n\"\n [readonly]=\"config.readonly\"\n [viewonly]=\"config.viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!isReadonly && !isViewonly\">\n <input #fileInput type=\"file\" hidden [disabled]=\"isDisabled\" (change)=\"onFileSelect($event)\" />\n\n <div class=\"upload-box\" (click)=\"fileInput.click()\">\n <div class=\"upload-content\">\n <ng-container *ngIf=\"!file\">\n <span class=\"placeholder\">\n {{ (config?.placeholder?.i18n | translate) || (\"i18n.qd.form.placeholder.selectFile\" | translate) }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"file\">\n <div class=\"file-row\">\n <span class=\"file-name\">{{ file.name }} </span>\n\n <ng-container *ngIf=\"isUploading\">\n <div class=\"progress-wrapper\">\n <div class=\"progress-bar\" [style.width.%]=\"uploadProgress$ | async\"></div>\n <span class=\"progress-label\">{{ uploadProgress$ | async }}%</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"hasError\">\n <span class=\"upload-error\">\n {{ \"i18n.qd.form.error.uploadFailed\" | translate }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"!isUploading\">\n <span class=\"file-size\">{{ file.size | qdFileSize }}</span>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"button-actions\">\n <button *ngIf=\"file && isUploading\" type=\"button\" (click)=\"cancelUpload()\">\n <qd-icon icon=\"timesCircleSolid\"></qd-icon>\n </button>\n\n <button *ngIf=\"(file && isUploaded) || (file && hasValidationError)\" type=\"button\" (click)=\"removeFile()\">\n <qd-icon icon=\"trash\"></qd-icon>\n </button>\n </div>\n\n <qd-form-hint\n *ngIf=\"config?.hint\"\n [hint]=\"config?.hint.i18n\"\n [hasError]=\"hasValidationError\"\n [control]=\"control\"\n [hintAction]=\"config.hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"isReadonly\"\n [values]=\"[file?.name]\"\n [readonlyAction]=\"config.readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"isViewonly\"\n [values]=\"[file?.name]\"\n [viewonlyAction]=\"config.viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{position:relative;display:block;width:100%;margin-bottom:.75rem}:host .upload-box{position:relative;display:block;padding:.5rem;margin-bottom:.375rem;background-color:#fff;box-shadow:inset 0 0 0 .0625rem #069;cursor:pointer;-webkit-user-select:none;user-select:none}:host .upload-box .file-name{color:#069!important}:host .upload-box .placeholder{color:#069!important}:host .upload-box .qd-icon{color:#069!important}:host .upload-box .upload-content{display:flex;flex-direction:column;padding-right:2rem;padding-left:.5rem}:host .upload-box .upload-content .placeholder{color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .upload-box .upload-content .file-row{display:flex;flex-wrap:nowrap;align-items:center;gap:.5rem}:host .upload-box .upload-content .file-row .file-name{color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .upload-box .upload-content .file-row .progress-wrapper{position:relative;display:flex;overflow:hidden;min-width:6.25rem;height:1.25rem;flex:1 1 auto;border-radius:.625rem}:host .upload-box .upload-content .file-row .progress-wrapper .progress-bar{height:100%;border-radius:inherit;background-color:#fee3b5}:host .upload-box .upload-content .file-row .progress-wrapper .progress-label{color:#e97e00;font-size:.875rem;font-weight:500;line-height:1.25rem;position:absolute;z-index:1000;left:.75rem}:host .upload-box .upload-content .file-row .file-size{margin-left:auto;color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem}:host .button-actions{position:absolute;top:1.625rem;right:.875rem;display:flex}:host .button-actions button{padding:0;border:none;background:none;cursor:pointer}:host .button-actions qd-icon{color:#069}:host.qd-form-disabled .upload-box{cursor:not-allowed;opacity:.6}:host.qd-form-readonly .upload-box,:host.qd-form-viewonly .upload-box{cursor:default}:host(.qd-form-error) .upload-box{box-shadow:inset 0 0 0 .0625rem #c70023!important}:host(.qd-form-error) .upload-box .file-name,:host(.qd-form-error) .upload-box .placeholder,:host(.qd-form-error) .upload-box .file-size,:host(.qd-form-error) .upload-box+.button-actions .qd-icon{color:#c70023!important}:host(.qd-form-error) .upload-box:hover{box-shadow:inset 0 0 0 .0625rem #069!important}:host(.qd-form-error) .upload-box:hover .file-name,:host(.qd-form-error) .upload-box:hover .placeholder,:host(.qd-form-error) .upload-box:hover .file-size,:host(.qd-form-error) .upload-box:hover+.button-actions .qd-icon{color:#069!important}:host(.qd-form-uploaded) .upload-box{box-shadow:inset 0 0 0 .0625rem #b4b4b4!important}:host(.qd-form-uploaded) .upload-box .file-name,:host(.qd-form-uploaded) .upload-box .placeholder,:host(.qd-form-uploaded) .upload-box .file-size{color:#171717!important;font-weight:400!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "pipe", type: QdFileSizePipe$1, name: "qdFileSize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12297
+ ], ngImport: i0, template: "<qd-form-label\n [label]=\"config?.label?.i18n\"\n [readonly]=\"config.readonly\"\n [viewonly]=\"config.viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!isReadonly && !isViewonly\">\n <input #fileInput type=\"file\" hidden [disabled]=\"isDisabled\" (change)=\"onFileSelect($event)\" />\n\n <div class=\"upload-box\" (click)=\"fileInput.click()\">\n <div class=\"upload-content\">\n <ng-container *ngIf=\"!file\">\n <span class=\"placeholder\">\n {{ (config?.placeholder?.i18n | translate) || (\"i18n.qd.form.placeholder.selectFile\" | translate) }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"file\">\n <div class=\"file-row\">\n <span class=\"file-name\">{{ file.name }} </span>\n\n <ng-container *ngIf=\"isUploading\">\n <div class=\"progress-wrapper\">\n <div class=\"progress-bar\" [style.width.%]=\"uploadProgress$ | async\"></div>\n <span class=\"progress-label\">{{ uploadProgress$ | async }}%</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"hasError\">\n <span class=\"upload-error\">\n {{ \"i18n.qd.form.error.uploadFailed\" | translate }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"!isUploading\">\n <span class=\"file-size\">{{ file.size | qdFileSize }}</span>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"button-actions\">\n <button *ngIf=\"file && isUploading\" type=\"button\" (click)=\"cancelUpload()\">\n <qd-icon icon=\"timesCircleSolid\"></qd-icon>\n </button>\n\n <button *ngIf=\"(file && isUploaded) || (file && hasValidationError)\" type=\"button\" (click)=\"removeFile()\">\n <qd-icon icon=\"trash\"></qd-icon>\n </button>\n </div>\n\n <qd-form-hint\n *ngIf=\"config?.hint\"\n [hint]=\"config?.hint.i18n\"\n [hasError]=\"hasValidationError\"\n [control]=\"control\"\n [hintAction]=\"config.hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"isReadonly\"\n [values]=\"[file?.name]\"\n [readonlyAction]=\"config.readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"isViewonly\"\n [values]=\"[file?.name]\"\n [viewonlyAction]=\"config.viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{position:relative;display:block;width:100%;margin-bottom:.75rem}:host .upload-box{position:relative;display:block;padding:.5rem;margin-bottom:.375rem;background-color:#fff;box-shadow:inset 0 0 0 .0625rem #069;cursor:pointer;-webkit-user-select:none;user-select:none}:host .upload-box .file-name{color:#069!important}:host .upload-box .placeholder{color:#069!important}:host .upload-box .qd-icon{color:#069!important}:host .upload-box .upload-content{display:flex;flex-direction:column;padding-right:2rem;padding-left:.5rem}:host .upload-box .upload-content .placeholder{color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .upload-box .upload-content .file-row{display:flex;flex-wrap:nowrap;align-items:center;gap:.5rem}:host .upload-box .upload-content .file-row .file-name{color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .upload-box .upload-content .file-row .progress-wrapper{position:relative;display:flex;overflow:hidden;min-width:6.25rem;height:1.25rem;flex:1 1 auto;border-radius:.625rem}:host .upload-box .upload-content .file-row .progress-wrapper .progress-bar{height:100%;border-radius:inherit;background-color:#fee3b5}:host .upload-box .upload-content .file-row .progress-wrapper .progress-label{color:#e97e00;font-size:.875rem;font-weight:500;line-height:1.25rem;position:absolute;z-index:1000;left:.75rem}:host .upload-box .upload-content .file-row .file-size{margin-left:auto;color:#171717;font-size:.875rem;font-weight:500;line-height:1.25rem}:host .button-actions{position:absolute;top:1.625rem;right:.875rem;display:flex}:host .button-actions button{padding:0;border:none;background:none;cursor:pointer}:host .button-actions qd-icon{color:#069}:host.qd-form-disabled .upload-box{cursor:not-allowed;opacity:.6}:host.qd-form-readonly .upload-box,:host.qd-form-viewonly .upload-box{cursor:default}:host(.qd-form-error) .upload-box{box-shadow:inset 0 0 0 .0625rem #c70023!important}:host(.qd-form-error) .upload-box .file-name,:host(.qd-form-error) .upload-box .placeholder,:host(.qd-form-error) .upload-box .file-size,:host(.qd-form-error) .upload-box+.button-actions .qd-icon{color:#c70023!important}:host(.qd-form-error) .upload-box:hover{box-shadow:inset 0 0 0 .0625rem #069!important}:host(.qd-form-error) .upload-box:hover .file-name,:host(.qd-form-error) .upload-box:hover .placeholder,:host(.qd-form-error) .upload-box:hover .file-size,:host(.qd-form-error) .upload-box:hover+.button-actions .qd-icon{color:#069!important}:host(.qd-form-uploaded) .upload-box{box-shadow:inset 0 0 0 .0625rem #b4b4b4!important}:host(.qd-form-uploaded) .upload-box .file-name,:host(.qd-form-uploaded) .upload-box .placeholder,:host(.qd-form-uploaded) .upload-box .file-size{color:#171717!important;font-weight:400!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }, { kind: "pipe", type: QdFileSizePipe$1, name: "qdFileSize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12228
12298
  }
12229
12299
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileUploadComponent, decorators: [{
12230
12300
  type: Component,
@@ -12308,7 +12378,7 @@ class QdTranslateService {
12308
12378
  get getTranslation() {
12309
12379
  return this.translateService.getTranslation;
12310
12380
  }
12311
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTranslateService, deps: [{ token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
12381
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTranslateService, deps: [{ token: i1$3.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
12312
12382
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTranslateService, providedIn: 'root' });
12313
12383
  }
12314
12384
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTranslateService, decorators: [{
@@ -12316,7 +12386,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
12316
12386
  args: [{
12317
12387
  providedIn: 'root'
12318
12388
  }]
12319
- }], ctorParameters: () => [{ type: i1$2.TranslateService }] });
12389
+ }], ctorParameters: () => [{ type: i1$3.TranslateService }] });
12320
12390
 
12321
12391
  // @ts-strict-ignore
12322
12392
  class QdMultiInputService {
@@ -12477,7 +12547,7 @@ class QdMultiInputChipComponent {
12477
12547
  return 0;
12478
12548
  }
12479
12549
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdMultiInputChipComponent, deps: [{ token: QdMultiInputService }], target: i0.ɵɵFactoryTarget.Component });
12480
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdMultiInputChipComponent, isStandalone: false, selector: "qd-multi-input-chip", inputs: { itemControl: "itemControl", value: "value", close: "close", testId: ["data-test-id", "testId"] }, outputs: { closeClickEmitter: "closeClickEmitter" }, host: { listeners: { "mouseover": "showTooltip($event)" }, properties: { "class": "this.themeClass" } }, viewQueries: [{ propertyName: "errorTooltip", first: true, predicate: ["errorTooltip"], descendants: true }], ngImport: i0, template: "<span [attr.data-test-id]=\"testId + '-caption'\" class=\"value qd-multi-input__chip-label\" [title]=\"title\">{{\n chipText\n}}</span>\n<qd-icon *ngIf=\"close\" [icon]=\"'times'\" (click)=\"clickClose($event)\" [attr.data-test-id]=\"testId + '-close'\"></qd-icon>\n<div *ngIf=\"itemControl && itemControl.errors\" #errorTooltip class=\"errorTooltip\">\n <div class=\"value\">{{ itemControl.value }}</div>\n <div *ngFor=\"let errorMessage of errorMessages\">{{ errorMessage | translate }}</div>\n</div>\n", styles: [":host{display:inline-flex;padding:0 .5rem;border:solid .0625rem;border-radius:.75rem;margin:.3125rem 0 0 .3125rem;cursor:default;font-size:.813rem;font-weight:400;line-height:1.5rem;white-space:nowrap}:host .qd-multi-input__chip-label{overflow:hidden;max-width:7.5rem;text-overflow:ellipsis;white-space:nowrap}:host .qd-icon{display:flex;height:1.25rem;border-radius:.75rem;margin:.12rem -.32rem 0 .22rem;aspect-ratio:1;background-color:#454545;color:#fff;cursor:pointer;font-size:1.25rem;line-height:1.27rem}:host.default{border-color:#979797;background:#fff;color:#000}:host.pending{border-color:#979797;background:#fff;color:#979797}:host.error{border-color:#c70023;background:#fff;color:#000}:host.error .qd-icon{background-color:#c70023}:host:hover{background:#e5e5e5}:host .errorTooltip{position:fixed;z-index:99999;padding:0 .3125rem;border:solid 1px;background-color:#fff;box-shadow:0 .3125rem .3125rem .3125rem #b4b4b440;color:#c70023;pointer-events:none;visibility:hidden}:host .errorTooltip .value{color:#000}:host:hover .errorTooltip{animation:show 0s both;animation-delay:.5s;visibility:visible}@keyframes show{0%{visibility:hidden}to{visibility:visible}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
12550
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdMultiInputChipComponent, isStandalone: false, selector: "qd-multi-input-chip", inputs: { itemControl: "itemControl", value: "value", close: "close", testId: ["data-test-id", "testId"] }, outputs: { closeClickEmitter: "closeClickEmitter" }, host: { listeners: { "mouseover": "showTooltip($event)" }, properties: { "class": "this.themeClass" } }, viewQueries: [{ propertyName: "errorTooltip", first: true, predicate: ["errorTooltip"], descendants: true }], ngImport: i0, template: "<span [attr.data-test-id]=\"testId + '-caption'\" class=\"value qd-multi-input__chip-label\" [title]=\"title\">{{\n chipText\n}}</span>\n<qd-icon *ngIf=\"close\" [icon]=\"'times'\" (click)=\"clickClose($event)\" [attr.data-test-id]=\"testId + '-close'\"></qd-icon>\n<div *ngIf=\"itemControl && itemControl.errors\" #errorTooltip class=\"errorTooltip\">\n <div class=\"value\">{{ itemControl.value }}</div>\n <div *ngFor=\"let errorMessage of errorMessages\">{{ errorMessage | translate }}</div>\n</div>\n", styles: [":host{display:inline-flex;padding:0 .5rem;border:solid .0625rem;border-radius:.75rem;margin:.3125rem 0 0 .3125rem;cursor:default;font-size:.813rem;font-weight:400;line-height:1.5rem;white-space:nowrap}:host .qd-multi-input__chip-label{overflow:hidden;max-width:7.5rem;text-overflow:ellipsis;white-space:nowrap}:host .qd-icon{display:flex;height:1.25rem;border-radius:.75rem;margin:.12rem -.32rem 0 .22rem;aspect-ratio:1;background-color:#454545;color:#fff;cursor:pointer;font-size:1.25rem;line-height:1.27rem}:host.default{border-color:#979797;background:#fff;color:#000}:host.pending{border-color:#979797;background:#fff;color:#979797}:host.error{border-color:#c70023;background:#fff;color:#000}:host.error .qd-icon{background-color:#c70023}:host:hover{background:#e5e5e5}:host .errorTooltip{position:fixed;z-index:99999;padding:0 .3125rem;border:solid 1px;background-color:#fff;box-shadow:0 .3125rem .3125rem .3125rem #b4b4b440;color:#c70023;pointer-events:none;visibility:hidden}:host .errorTooltip .value{color:#000}:host:hover .errorTooltip{animation:show 0s both;animation-delay:.5s;visibility:visible}@keyframes show{0%{visibility:hidden}to{visibility:visible}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
12481
12551
  }
12482
12552
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdMultiInputChipComponent, decorators: [{
12483
12553
  type: Component,
@@ -12553,7 +12623,7 @@ class QdMultiInputMenuComponent {
12553
12623
  return this.selectBox?.nativeElement.getBoundingClientRect().height;
12554
12624
  }
12555
12625
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdMultiInputMenuComponent, deps: [{ token: QdMultiInputService }], target: i0.ɵɵFactoryTarget.Component });
12556
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdMultiInputMenuComponent, isStandalone: false, selector: "qd-multi-input-menu", inputs: { id: "id", optionsListForView: "optionsListForView", testId: ["data-test-id", "testId"] }, outputs: { itemClick: "itemClick" }, viewQueries: [{ propertyName: "selectBox", first: true, predicate: ["selectBox"], descendants: true }, { propertyName: "dropdownOptions", predicate: ["dropdownOption"], descendants: true }, { propertyName: "optionComponents", predicate: QdFormInputComponent, descendants: true }], ngImport: i0, template: "<div #selectBox class=\"qd-multi-input__select\">\n <div\n class=\"qd-multi-input__option\"\n *ngFor=\"let option of optionsListForView\"\n [ngClass]=\"option.disabled ? 'qd-multi-input__option--disabled' : ''\"\n >\n <qd-form-input [option]=\"option\" class=\"qd-multi-input__form-input\">\n <input\n #dropdownOption\n class=\"qd-multi-input__option-input\"\n name=\"multi-input-dropdown\"\n type=\"radio\"\n [id]=\"option.value + '-' + id\"\n [value]=\"option.value\"\n (click)=\"$event.stopPropagation(); handleClick(option)\"\n />\n <label\n class=\"qd-multi-input__option-label\"\n [for]=\"option.value + '-' + id\"\n [title]=\"getTranslation(option)\"\n [attr.data-test-id]=\"testId + '-option-' + option.value\"\n >\n {{ getTranslation(option) }}\n </label>\n </qd-form-input>\n </div>\n <div *ngIf=\"optionsListForView?.length === 0\" class=\"qd-multi-input__no-results\">\n {{ \"i18n.qd.multiInput.noResults\" | translate }}\n </div>\n</div>\n", styles: [":host{display:block;margin-bottom:.75rem}.qd-multi-input__input-chip-box{margin-bottom:.5rem;background-color:#fff;outline:solid .0625rem rgb(180,180,180)}:host.qd-multi-input-readonly .qd-multi-input__input-chip-box{background:none!important;color:#979797;outline:none!important}:host.qd-multi-input-viewonly .qd-multi-input__input-chip-box{background:none!important;color:#979797;outline:none!important}:host.qd-multi-input-disabled .qd-multi-input__input-chip-box{background:#f5f5f5;color:#979797;outline:.0625rem solid rgb(180,180,180)}:host.qd-multi-input-focus .qd-multi-input__input-chip-box{outline:.125rem solid rgb(0,102,153)}:host.qd-multi-input-focus .qd-multi-input__input-chip-box:hover,:host.qd-multi-input-focus .qd-multi-input__input-chip-box:active{outline:.125rem solid rgb(0,102,153)}.qd-multi-input__input-chip-box:active,.qd-multi-input__input-chip-box:hover{outline:.125rem solid rgb(23,23,23)}.qd-multi-input__chip-margin{padding:0 .3125rem .3125rem 0}:host.qd-multi-input-readonly .qd-multi-input__chip-margin{padding:0 0 .3125rem}:host.qd-multi-input-viewonly .qd-multi-input__chip-margin{padding:0 0 .3125rem}.qd-multi-input__wrapper{position:relative}.qd-multi-input__wrapper .qd-multi-input__box{display:flex;overflow:hidden;width:100%;height:2.25rem;justify-content:space-between;padding:0 .75rem;border:.0625rem solid rgb(255,255,255);background:#fff;font-size:.875rem;font-weight:400;line-height:2.25rem;text-overflow:ellipsis;white-space:nowrap}.qd-multi-input__wrapper .qd-multi-input__box:focus,.qd-multi-input__wrapper .qd-multi-input__box:active,.qd-multi-input__wrapper .qd-multi-input__box.qd-multi-input__box--open{padding:0 .8125rem;border:none;color:#171717;line-height:2.125rem;outline:none}.qd-multi-input__wrapper .qd-multi-input__box:hover:after{border-top-color:#b4b4b4}.qd-multi-input__wrapper .qd-multi-input__box.qd-multi-input__box--open{border-color:#069}:host.qd-multi-input-disabled .qd-multi-input__wrapper .qd-multi-input__box{border:none;background:#f5f5f5;color:#979797}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box{height:inherit;padding:0;border:none;line-height:2.25rem}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:focus,:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:hover,:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:active{color:inherit}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:after{display:none}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box{height:inherit;padding:0;border:none;line-height:2.25rem}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:focus,:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:hover,:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:active{color:inherit}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:after{display:none}:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly{color:#069;cursor:pointer}:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:hover,:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:active,:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:focus{color:#069;text-decoration:underline}:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly{color:#069;cursor:pointer}:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:hover,:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:active,:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:focus{color:#069;text-decoration:underline}:host.qd-multi-input-error .qd-multi-input__input-chip-box{outline:.0625rem solid rgb(199,0,35)}:host.qd-multi-input-error .qd-multi-input__input-chip-box:focus,:host.qd-multi-input-error .qd-multi-input__input-chip-box:hover,:host.qd-multi-input-error .qd-multi-input__input-chip-box:active,:host.qd-multi-input-error .qd-multi-input__input-chip-box.qd-multi-input__box--open{outline:.125rem solid rgb(199,0,35)}:host.qd-multi-input-error .qd-multi-input__input-chip-box .qd-error-icon{color:#c70023}.qd-multi-input__select{position:absolute;top:.125rem;width:calc(100% + 4px);max-height:17.1875rem;border:.0625rem solid rgb(151,151,151);border-top:none;box-shadow:0 .3125rem .3125rem .3125rem #b4b4b440;overflow-y:auto}.qd-multi-input__select .qd-multi-input__option{background:#fff}.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-label{display:block;overflow:hidden;height:2.25rem;padding-left:.75rem;color:#454545;cursor:pointer;font-size:.875rem;font-weight:400;line-height:2.25rem;text-overflow:ellipsis;white-space:nowrap}.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-label:focus,.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-label:hover,.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-label:active{background:#f5f5f5;color:#171717}.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-input{display:none}.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-input:checked+.qd-multi-input__option-label,.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-input:focus+.qd-multi-input__option-label{background:#f5f5f5;color:#171717}.qd-multi-input__select .qd-multi-input__option.qd-multi-input__option--disabled .qd-multi-input__option-label{color:#b4b4b4;cursor:default}.qd-multi-input__select .qd-multi-input__option.qd-multi-input__option--disabled .qd-multi-input__option-input:checked+.qd-multi-input__option-label,.qd-multi-input__select .qd-multi-input__option.qd-multi-input__option--disabled .qd-multi-input__option-input:focus+.qd-multi-input__option-label{color:#b4b4b4}.qd-multi-input__select .qd-multi-input__form-input.active .qd-multi-input__option-label{background:#f5f5f5}:host-context(.up) .qd-multi-input__select{top:auto;bottom:.125rem;border-top:.0625rem solid rgb(151,151,151);border-bottom:none}.qd-multi-input__no-results{padding:.75rem;border-top:none;background:#fff;color:#454545;font-size:.875rem;font-style:italic;font-weight:400}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdFormInputComponent, selector: "qd-form-input", inputs: ["option"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
12626
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdMultiInputMenuComponent, isStandalone: false, selector: "qd-multi-input-menu", inputs: { id: "id", optionsListForView: "optionsListForView", testId: ["data-test-id", "testId"] }, outputs: { itemClick: "itemClick" }, viewQueries: [{ propertyName: "selectBox", first: true, predicate: ["selectBox"], descendants: true }, { propertyName: "dropdownOptions", predicate: ["dropdownOption"], descendants: true }, { propertyName: "optionComponents", predicate: QdFormInputComponent, descendants: true }], ngImport: i0, template: "<div #selectBox class=\"qd-multi-input__select\">\n <div\n class=\"qd-multi-input__option\"\n *ngFor=\"let option of optionsListForView\"\n [ngClass]=\"option.disabled ? 'qd-multi-input__option--disabled' : ''\"\n >\n <qd-form-input [option]=\"option\" class=\"qd-multi-input__form-input\">\n <input\n #dropdownOption\n class=\"qd-multi-input__option-input\"\n name=\"multi-input-dropdown\"\n type=\"radio\"\n [id]=\"option.value + '-' + id\"\n [value]=\"option.value\"\n (click)=\"$event.stopPropagation(); handleClick(option)\"\n />\n <label\n class=\"qd-multi-input__option-label\"\n [for]=\"option.value + '-' + id\"\n [title]=\"getTranslation(option)\"\n [attr.data-test-id]=\"testId + '-option-' + option.value\"\n >\n {{ getTranslation(option) }}\n </label>\n </qd-form-input>\n </div>\n <div *ngIf=\"optionsListForView?.length === 0\" class=\"qd-multi-input__no-results\">\n {{ \"i18n.qd.multiInput.noResults\" | translate }}\n </div>\n</div>\n", styles: [":host{display:block;margin-bottom:.75rem}.qd-multi-input__input-chip-box{margin-bottom:.5rem;background-color:#fff;outline:solid .0625rem rgb(180,180,180)}:host.qd-multi-input-readonly .qd-multi-input__input-chip-box{background:none!important;color:#979797;outline:none!important}:host.qd-multi-input-viewonly .qd-multi-input__input-chip-box{background:none!important;color:#979797;outline:none!important}:host.qd-multi-input-disabled .qd-multi-input__input-chip-box{background:#f5f5f5;color:#979797;outline:.0625rem solid rgb(180,180,180)}:host.qd-multi-input-focus .qd-multi-input__input-chip-box{outline:.125rem solid rgb(0,102,153)}:host.qd-multi-input-focus .qd-multi-input__input-chip-box:hover,:host.qd-multi-input-focus .qd-multi-input__input-chip-box:active{outline:.125rem solid rgb(0,102,153)}.qd-multi-input__input-chip-box:active,.qd-multi-input__input-chip-box:hover{outline:.125rem solid rgb(23,23,23)}.qd-multi-input__chip-margin{padding:0 .3125rem .3125rem 0}:host.qd-multi-input-readonly .qd-multi-input__chip-margin{padding:0 0 .3125rem}:host.qd-multi-input-viewonly .qd-multi-input__chip-margin{padding:0 0 .3125rem}.qd-multi-input__wrapper{position:relative}.qd-multi-input__wrapper .qd-multi-input__box{display:flex;overflow:hidden;width:100%;height:2.25rem;justify-content:space-between;padding:0 .75rem;border:.0625rem solid rgb(255,255,255);background:#fff;font-size:.875rem;font-weight:400;line-height:2.25rem;text-overflow:ellipsis;white-space:nowrap}.qd-multi-input__wrapper .qd-multi-input__box:focus,.qd-multi-input__wrapper .qd-multi-input__box:active,.qd-multi-input__wrapper .qd-multi-input__box.qd-multi-input__box--open{padding:0 .8125rem;border:none;color:#171717;line-height:2.125rem;outline:none}.qd-multi-input__wrapper .qd-multi-input__box:hover:after{border-top-color:#b4b4b4}.qd-multi-input__wrapper .qd-multi-input__box.qd-multi-input__box--open{border-color:#069}:host.qd-multi-input-disabled .qd-multi-input__wrapper .qd-multi-input__box{border:none;background:#f5f5f5;color:#979797}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box{height:inherit;padding:0;border:none;line-height:2.25rem}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:focus,:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:hover,:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:active{color:inherit}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:after{display:none}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box{height:inherit;padding:0;border:none;line-height:2.25rem}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:focus,:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:hover,:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:active{color:inherit}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:after{display:none}:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly{color:#069;cursor:pointer}:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:hover,:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:active,:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:focus{color:#069;text-decoration:underline}:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly{color:#069;cursor:pointer}:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:hover,:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:active,:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:focus{color:#069;text-decoration:underline}:host.qd-multi-input-error .qd-multi-input__input-chip-box{outline:.0625rem solid rgb(199,0,35)}:host.qd-multi-input-error .qd-multi-input__input-chip-box:focus,:host.qd-multi-input-error .qd-multi-input__input-chip-box:hover,:host.qd-multi-input-error .qd-multi-input__input-chip-box:active,:host.qd-multi-input-error .qd-multi-input__input-chip-box.qd-multi-input__box--open{outline:.125rem solid rgb(199,0,35)}:host.qd-multi-input-error .qd-multi-input__input-chip-box .qd-error-icon{color:#c70023}.qd-multi-input__select{position:absolute;top:.125rem;width:calc(100% + 4px);max-height:17.1875rem;border:.0625rem solid rgb(151,151,151);border-top:none;box-shadow:0 .3125rem .3125rem .3125rem #b4b4b440;overflow-y:auto}.qd-multi-input__select .qd-multi-input__option{background:#fff}.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-label{display:block;overflow:hidden;height:2.25rem;padding-left:.75rem;color:#454545;cursor:pointer;font-size:.875rem;font-weight:400;line-height:2.25rem;text-overflow:ellipsis;white-space:nowrap}.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-label:focus,.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-label:hover,.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-label:active{background:#f5f5f5;color:#171717}.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-input{display:none}.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-input:checked+.qd-multi-input__option-label,.qd-multi-input__select .qd-multi-input__option .qd-multi-input__option-input:focus+.qd-multi-input__option-label{background:#f5f5f5;color:#171717}.qd-multi-input__select .qd-multi-input__option.qd-multi-input__option--disabled .qd-multi-input__option-label{color:#b4b4b4;cursor:default}.qd-multi-input__select .qd-multi-input__option.qd-multi-input__option--disabled .qd-multi-input__option-input:checked+.qd-multi-input__option-label,.qd-multi-input__select .qd-multi-input__option.qd-multi-input__option--disabled .qd-multi-input__option-input:focus+.qd-multi-input__option-label{color:#b4b4b4}.qd-multi-input__select .qd-multi-input__form-input.active .qd-multi-input__option-label{background:#f5f5f5}:host-context(.up) .qd-multi-input__select{top:auto;bottom:.125rem;border-top:.0625rem solid rgb(151,151,151);border-bottom:none}.qd-multi-input__no-results{padding:.75rem;border-top:none;background:#fff;color:#454545;font-size:.875rem;font-style:italic;font-weight:400}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdFormInputComponent, selector: "qd-form-input", inputs: ["option"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
12557
12627
  }
12558
12628
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdMultiInputMenuComponent, decorators: [{
12559
12629
  type: Component,
@@ -14278,12 +14348,12 @@ class QdRadioButtonsService {
14278
14348
  }));
14279
14349
  this.radioButtonsListForView = this.radioButtonsList.filter((_radioButton, index) => radioButtonsListWithTranslation[index].translation.toLowerCase().includes(value.toLowerCase()));
14280
14350
  }
14281
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdRadioButtonsService, deps: [{ token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
14351
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdRadioButtonsService, deps: [{ token: i1$3.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
14282
14352
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdRadioButtonsService });
14283
14353
  }
14284
14354
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdRadioButtonsService, decorators: [{
14285
14355
  type: Injectable
14286
- }], ctorParameters: () => [{ type: i1$2.TranslateService }] });
14356
+ }], ctorParameters: () => [{ type: i1$3.TranslateService }] });
14287
14357
 
14288
14358
  // @ts-strict-ignore
14289
14359
  /**
@@ -14503,7 +14573,7 @@ class QdRadioButtonsComponent {
14503
14573
  },
14504
14574
  QdRadioButtonsService,
14505
14575
  QdFormsActionEmitterService
14506
- ], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n [isDisabled]=\"isLabelDisabled\"\n></qd-form-label>\n\n<qd-filter-form-items\n *ngIf=\"filter\"\n (filterValueChange)=\"changeValue($event)\"\n [data-test-id]=\"testId + '-filter-form'\"\n></qd-filter-form-items>\n\n<div class=\"qd-radio-buttons__button-section\" *ngIf=\"!readonly && !viewonly\">\n <label\n *ngFor=\"let option of radioButtonsListForView; trackBy: getOptionId\"\n [for]=\"option.value + id\"\n [ngClass]=\"\n 'qd-radio-buttons__label' +\n (option.disabled || disabled ? ' qd-radio-buttons__label--disabled' : '') +\n (option.value === value ? ' qd-radio-buttons__label--checked' : '')\n \"\n [attr.data-test-id]=\"testId + '-label'\"\n >\n <input\n type=\"radio\"\n qdVisuallyHidden\n [id]=\"option.value + id\"\n [ngClass]=\"'qd-radio-buttons__radio-button'\"\n [name]=\"id\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled || disabled\"\n (click)=\"handleClick(option.value)\"\n [checked]=\"option.value === value\"\n [attr.data-test-id]=\"testId + '-input-' + option.i18n\"\n />\n\n <qd-icon class=\"qd-radio-buttons__indicator\" *ngIf=\"option.value === value\" [icon]=\"'circleRadio'\"></qd-icon>\n <qd-icon class=\"qd-radio-buttons__indicator\" *ngIf=\"option.value !== value\" [icon]=\"'circleSolid'\"></qd-icon>\n\n <span [ngClass]=\"'qd-radio-buttons__caption qd-intersection-target'\">{{ option.i18n | translate }}</span>\n </label>\n</div>\n\n<ng-container *ngIf=\"!readonly && !viewonly\">\n <qd-form-hint\n [hint]=\"hasHint ? config.hint.i18n : ''\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"activeOptionAsList\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"activeOptionAsList\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [".qd-radio-buttons{display:block;flex-direction:column;margin-bottom:.75rem}.qd-radio-buttons.qd-radio-align--horizontal .qd-radio-buttons__button-section{display:flex;min-height:2.25rem;flex-wrap:wrap;align-items:center;margin-bottom:.375rem}.qd-radio-buttons.qd-radio-align--horizontal .qd-radio-buttons__label:not(:last-child) .qd-radio-buttons__caption{padding-right:1rem}.qd-radio-buttons.qd-radio-align--vertical .qd-radio-buttons__button-section{display:flex;flex-direction:column;margin-bottom:.375rem}.qd-radio-buttons.qd-radio-align--vertical .qd-radio-buttons__button-section .qd-radio-buttons__caption{flex:auto}.qd-radio-buttons .qd-radio-buttons__label{display:flex;max-width:100%;padding:.625rem 0;color:#454545;cursor:pointer;font-size:.875rem;font-weight:400;line-height:1rem}.qd-radio-buttons .qd-radio-buttons__label .qd-radio-buttons__indicator{padding:0 .375rem 0 0;color:#b4b4b4;font-size:1.25rem}.qd-radio-buttons .qd-radio-buttons__label:not(.qd-radio-buttons__label--checked,.qd-radio-buttons__label--disabled):hover,.qd-radio-buttons .qd-radio-buttons__label:not(.qd-radio-buttons__label--checked,.qd-radio-buttons__label--disabled):focus{color:#171717}.qd-radio-buttons .qd-radio-buttons__label:not(.qd-radio-buttons__label--checked,.qd-radio-buttons__label--disabled):hover .qd-radio-buttons__indicator,.qd-radio-buttons .qd-radio-buttons__label:not(.qd-radio-buttons__label--checked,.qd-radio-buttons__label--disabled):focus .qd-radio-buttons__indicator{color:#757575}.qd-radio-buttons .qd-radio-buttons__label--checked{color:#171717}.qd-radio-buttons .qd-radio-buttons__label--checked .qd-radio-buttons__indicator{color:#069}.qd-radio-buttons .qd-radio-buttons__label--disabled{color:#d5d5d5;cursor:default}.qd-radio-buttons .qd-radio-buttons__label--disabled .qd-radio-buttons__indicator{color:#d5d5d5}.qd-radio-buttons .qd-radio-buttons__label .qd-radio-buttons__caption{padding:0}.qd-radio-buttons__input-section{margin-bottom:.375rem}@media (max-width: 959.98px){.qd-radio-buttons:not(.qd-rwd-disabled) .qd-radio-buttons__button-section{flex-direction:column}.qd-radio-buttons:not(.qd-rwd-disabled) .qd-radio-buttons__label{width:100%;padding-top:.0625rem;padding-bottom:.0625rem;padding-left:.75rem;border:.0625rem solid rgb(180,180,180);margin-bottom:.75rem;background:#fff}.qd-radio-buttons:not(.qd-rwd-disabled) .qd-radio-buttons__label .qd-radio-buttons__caption{padding-right:.75rem!important;transform:translateY(.0625rem)}}@media (max-width: 959.98px) and (max-width: 959.98px){.qd-radio-buttons:not(.qd-rwd-disabled) .qd-radio-buttons__label .qd-radio-buttons__caption{padding:.375rem .375rem .375rem 0!important;line-height:1.25rem}}@media (max-width: 959.98px){.qd-radio-buttons:not(.qd-rwd-disabled) .qd-radio-buttons__label:last-child{margin-bottom:0}.qd-radio-buttons:not(.qd-rwd-disabled) .qd-radio-buttons__label .qd-radio-buttons__indicator{display:flex;align-items:center}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: QdVisuallyHiddenDirective, selector: "[qdVisuallyHidden]" }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFilterFormItemsComponent, selector: "qd-filter-form-items", inputs: ["inputFilterValue", "data-test-id"], outputs: ["filterValueChange"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
14576
+ ], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n [isDisabled]=\"isLabelDisabled\"\n></qd-form-label>\n\n<qd-filter-form-items\n *ngIf=\"filter\"\n (filterValueChange)=\"changeValue($event)\"\n [data-test-id]=\"testId + '-filter-form'\"\n></qd-filter-form-items>\n\n<div class=\"qd-radio-buttons__button-section\" *ngIf=\"!readonly && !viewonly\">\n <label\n *ngFor=\"let option of radioButtonsListForView; trackBy: getOptionId\"\n [for]=\"option.value + id\"\n [ngClass]=\"\n 'qd-radio-buttons__label' +\n (option.disabled || disabled ? ' qd-radio-buttons__label--disabled' : '') +\n (option.value === value ? ' qd-radio-buttons__label--checked' : '')\n \"\n [attr.data-test-id]=\"testId + '-label'\"\n >\n <input\n type=\"radio\"\n qdVisuallyHidden\n [id]=\"option.value + id\"\n [ngClass]=\"'qd-radio-buttons__radio-button'\"\n [name]=\"id\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled || disabled\"\n (click)=\"handleClick(option.value)\"\n [checked]=\"option.value === value\"\n [attr.data-test-id]=\"testId + '-input-' + option.i18n\"\n />\n\n <qd-icon class=\"qd-radio-buttons__indicator\" *ngIf=\"option.value === value\" [icon]=\"'circleRadio'\"></qd-icon>\n <qd-icon class=\"qd-radio-buttons__indicator\" *ngIf=\"option.value !== value\" [icon]=\"'circleSolid'\"></qd-icon>\n\n <span [ngClass]=\"'qd-radio-buttons__caption qd-intersection-target'\">{{ option.i18n | translate }}</span>\n </label>\n</div>\n\n<ng-container *ngIf=\"!readonly && !viewonly\">\n <qd-form-hint\n [hint]=\"hasHint ? config.hint.i18n : ''\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"activeOptionAsList\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"activeOptionAsList\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [".qd-radio-buttons{display:block;flex-direction:column;margin-bottom:.75rem}.qd-radio-buttons.qd-radio-align--horizontal .qd-radio-buttons__button-section{display:flex;min-height:2.25rem;flex-wrap:wrap;align-items:center;margin-bottom:.375rem}.qd-radio-buttons.qd-radio-align--horizontal .qd-radio-buttons__label:not(:last-child) .qd-radio-buttons__caption{padding-right:1rem}.qd-radio-buttons.qd-radio-align--vertical .qd-radio-buttons__button-section{display:flex;flex-direction:column;margin-bottom:.375rem}.qd-radio-buttons.qd-radio-align--vertical .qd-radio-buttons__button-section .qd-radio-buttons__caption{flex:auto}.qd-radio-buttons .qd-radio-buttons__label{display:flex;max-width:100%;padding:.625rem 0;color:#454545;cursor:pointer;font-size:.875rem;font-weight:400;line-height:1rem}.qd-radio-buttons .qd-radio-buttons__label .qd-radio-buttons__indicator{padding:0 .375rem 0 0;color:#b4b4b4;font-size:1.25rem}.qd-radio-buttons .qd-radio-buttons__label:not(.qd-radio-buttons__label--checked,.qd-radio-buttons__label--disabled):hover,.qd-radio-buttons .qd-radio-buttons__label:not(.qd-radio-buttons__label--checked,.qd-radio-buttons__label--disabled):focus{color:#171717}.qd-radio-buttons .qd-radio-buttons__label:not(.qd-radio-buttons__label--checked,.qd-radio-buttons__label--disabled):hover .qd-radio-buttons__indicator,.qd-radio-buttons .qd-radio-buttons__label:not(.qd-radio-buttons__label--checked,.qd-radio-buttons__label--disabled):focus .qd-radio-buttons__indicator{color:#757575}.qd-radio-buttons .qd-radio-buttons__label--checked{color:#171717}.qd-radio-buttons .qd-radio-buttons__label--checked .qd-radio-buttons__indicator{color:#069}.qd-radio-buttons .qd-radio-buttons__label--disabled{color:#d5d5d5;cursor:default}.qd-radio-buttons .qd-radio-buttons__label--disabled .qd-radio-buttons__indicator{color:#d5d5d5}.qd-radio-buttons .qd-radio-buttons__label .qd-radio-buttons__caption{padding:0}.qd-radio-buttons__input-section{margin-bottom:.375rem}@media (max-width: 959.98px){.qd-radio-buttons:not(.qd-rwd-disabled) .qd-radio-buttons__button-section{flex-direction:column}.qd-radio-buttons:not(.qd-rwd-disabled) .qd-radio-buttons__label{width:100%;padding-top:.0625rem;padding-bottom:.0625rem;padding-left:.75rem;border:.0625rem solid rgb(180,180,180);margin-bottom:.75rem;background:#fff}.qd-radio-buttons:not(.qd-rwd-disabled) .qd-radio-buttons__label .qd-radio-buttons__caption{padding-right:.75rem!important;transform:translateY(.0625rem)}}@media (max-width: 959.98px) and (max-width: 959.98px){.qd-radio-buttons:not(.qd-rwd-disabled) .qd-radio-buttons__label .qd-radio-buttons__caption{padding:.375rem .375rem .375rem 0!important;line-height:1.25rem}}@media (max-width: 959.98px){.qd-radio-buttons:not(.qd-rwd-disabled) .qd-radio-buttons__label:last-child{margin-bottom:0}.qd-radio-buttons:not(.qd-rwd-disabled) .qd-radio-buttons__label .qd-radio-buttons__indicator{display:flex;align-items:center}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: QdVisuallyHiddenDirective, selector: "[qdVisuallyHidden]" }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFilterFormItemsComponent, selector: "qd-filter-form-items", inputs: ["inputFilterValue", "data-test-id"], outputs: ["filterValueChange"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
14507
14577
  }
14508
14578
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdRadioButtonsComponent, decorators: [{
14509
14579
  type: Component,
@@ -14711,15 +14781,15 @@ const isQdFormGroup = (control) => control instanceof QdFormGroup;
14711
14781
  const isFormArray = (control) => control instanceof UntypedFormArray;
14712
14782
  const isQdFormArray = (control) => control instanceof QdFormArray;
14713
14783
 
14714
- const getPlainTextFromHtml = (input) => {
14784
+ const getPlainTextFromHtml = (input, parserFactory = () => new DOMParser()) => {
14715
14785
  if (input == null) {
14716
14786
  return input;
14717
14787
  }
14718
14788
  else if (typeof input !== 'string') {
14719
- throw new TypeError('Expected a string as input');
14789
+ throw new TypeError('Quadrel Framework | getPlainTextFromHtml - Expected a string as input');
14720
14790
  }
14721
- // Remove all HTML tags using regex
14722
- return input.replace(/<\/?[^>]+(>|$)/g, '');
14791
+ const doc = parserFactory().parseFromString(input, 'text/html');
14792
+ return doc.body?.textContent ?? '';
14723
14793
  };
14724
14794
 
14725
14795
  /**
@@ -14878,7 +14948,7 @@ class QdRichtextComponent {
14878
14948
  multi: true
14879
14949
  },
14880
14950
  QdFormsActionEmitterService
14881
- ], ngImport: i0, template: "<div class=\"label-counter-container\">\n <qd-form-label\n *ngIf=\"config?.label\"\n [label]=\"config?.label?.i18n\"\n [readonly]=\"config?.readonly\"\n [viewonly]=\"config?.viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n ></qd-form-label>\n\n <span class=\"character-counter\" *ngIf=\"hasMaxLength\">{{ plainTextValue.length }} / {{ maxLength }}</span>\n</div>\n\n<ng-container *ngIf=\"!config?.readonly && !config?.viewonly\">\n <div class=\"wrapper\">\n <ngx-editor-menu [editor]=\"editor\" [toolbar]=\"toolbar\"> </ngx-editor-menu>\n <ngx-editor\n [editor]=\"editor\"\n [ngModel]=\"value\"\n [disabled]=\"isDisabled\"\n [placeholder]=\"(config?.placeholder?.disabled ? '' : config?.placeholder?.i18n ?? '') | translate\"\n (ngModelChange)=\"change($event)\"\n [attr.data-test-id]=\"testId + '-input'\"\n ></ngx-editor>\n </div>\n\n <qd-form-hint\n *ngIf=\"config?.hint\"\n [data-test-id]=\"testId\"\n [hintAction]=\"config?.hintAction\"\n [hint]=\"config?.hint?.i18n\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n ></qd-form-hint>\n</ng-container>\n\n<ngx-editor\n *ngIf=\"config?.readonly\"\n class=\"richtext-readonly\"\n [class.readonly-action]=\"this.config?.readonlyAction\"\n [editor]=\"editor\"\n [ngModel]=\"value\"\n [disabled]=\"true\"\n [attr.data-test-id]=\"testId + '-input-readonly'\"\n (click)=\"handleReadonly()\"\n></ngx-editor>\n\n<ngx-editor\n *ngIf=\"config?.viewonly\"\n class=\"richtext-viewonly\"\n [class.viewonly-action]=\"this.config?.viewonlyAction\"\n [editor]=\"editor\"\n [ngModel]=\"value\"\n [disabled]=\"true\"\n [attr.data-test-id]=\"testId + '-input-viewonly'\"\n (click)=\"handleViewonly()\"\n></ngx-editor>\n", styles: ["qd-richtext{display:block}qd-richtext .wrapper{border:.0625rem solid rgb(180,180,180);margin-bottom:.375rem;background-color:#fff}qd-richtext .NgxEditor{min-height:8.75rem;border-radius:0;border-right:0;border-bottom:0;border-left:0}qd-richtext.qd-form-disabled .NgxEditor__MenuBar{background-color:#f5f5f5;color:#979797}qd-richtext.qd-form-disabled .NgxEditor__MenuBar .NgxEditor__MenuItem--Active{background-color:#efefef;color:#979797}qd-richtext.qd-form-disabled .NgxEditor{background-color:#f5f5f5;color:#979797}.richtext-readonly .NgxEditor{border-top:0}.richtext-readonly.readonly-action .NgxEditor{color:#069;cursor:pointer}.richtext-readonly.readonly-action .NgxEditor:hover,.richtext-readonly.readonly-action .NgxEditor:active,.richtext-readonly.readonly-action .NgxEditor:focus{text-decoration:underline}.richtext-viewonly .NgxEditor{border-top:0}.richtext-viewonly.viewonly-action .NgxEditor{color:#069;cursor:pointer}.richtext-viewonly.viewonly-action .NgxEditor:hover,.richtext-viewonly.viewonly-action .NgxEditor:active,.richtext-viewonly.viewonly-action .NgxEditor:focus{text-decoration:underline}.character-counter{padding-left:.125rem;color:#757575;font-size:.75rem;font-weight:300;line-height:.75rem}.label-counter-container{display:flex;align-items:center;justify-content:space-between;padding:.25rem .125rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.NgxEditorComponent, selector: "ngx-editor", inputs: ["editor", "outputFormat", "placeholder"], outputs: ["focusOut", "focusIn"] }, { kind: "component", type: i4.MenuComponent, selector: "ngx-editor-menu", inputs: ["toolbar", "colorPresets", "disabled", "editor", "customMenuRef", "dropdownPlacement"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
14951
+ ], ngImport: i0, template: "<div class=\"label-counter-container\">\n <qd-form-label\n *ngIf=\"config?.label\"\n [label]=\"config?.label?.i18n\"\n [readonly]=\"config?.readonly\"\n [viewonly]=\"config?.viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n ></qd-form-label>\n\n <span class=\"character-counter\" *ngIf=\"hasMaxLength\">{{ plainTextValue.length }} / {{ maxLength }}</span>\n</div>\n\n<ng-container *ngIf=\"!config?.readonly && !config?.viewonly\">\n <div class=\"wrapper\">\n <ngx-editor-menu [editor]=\"editor\" [toolbar]=\"toolbar\"> </ngx-editor-menu>\n <ngx-editor\n [editor]=\"editor\"\n [ngModel]=\"value\"\n [disabled]=\"isDisabled\"\n [placeholder]=\"(config?.placeholder?.disabled ? '' : config?.placeholder?.i18n ?? '') | translate\"\n (ngModelChange)=\"change($event)\"\n [attr.data-test-id]=\"testId + '-input'\"\n ></ngx-editor>\n </div>\n\n <qd-form-hint\n *ngIf=\"config?.hint\"\n [data-test-id]=\"testId\"\n [hintAction]=\"config?.hintAction\"\n [hint]=\"config?.hint?.i18n\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n ></qd-form-hint>\n</ng-container>\n\n<ngx-editor\n *ngIf=\"config?.readonly\"\n class=\"richtext-readonly\"\n [class.readonly-action]=\"this.config?.readonlyAction\"\n [editor]=\"editor\"\n [ngModel]=\"value\"\n [disabled]=\"true\"\n [attr.data-test-id]=\"testId + '-input-readonly'\"\n (click)=\"handleReadonly()\"\n></ngx-editor>\n\n<ngx-editor\n *ngIf=\"config?.viewonly\"\n class=\"richtext-viewonly\"\n [class.viewonly-action]=\"this.config?.viewonlyAction\"\n [editor]=\"editor\"\n [ngModel]=\"value\"\n [disabled]=\"true\"\n [attr.data-test-id]=\"testId + '-input-viewonly'\"\n (click)=\"handleViewonly()\"\n></ngx-editor>\n", styles: ["qd-richtext{display:block}qd-richtext .wrapper{border:.0625rem solid rgb(180,180,180);margin-bottom:.375rem;background-color:#fff}qd-richtext .NgxEditor{min-height:8.75rem;border-radius:0;border-right:0;border-bottom:0;border-left:0}qd-richtext.qd-form-disabled .NgxEditor__MenuBar{background-color:#f5f5f5;color:#979797}qd-richtext.qd-form-disabled .NgxEditor__MenuBar .NgxEditor__MenuItem--Active{background-color:#efefef;color:#979797}qd-richtext.qd-form-disabled .NgxEditor{background-color:#f5f5f5;color:#979797}.richtext-readonly .NgxEditor{border-top:0}.richtext-readonly.readonly-action .NgxEditor{color:#069;cursor:pointer}.richtext-readonly.readonly-action .NgxEditor:hover,.richtext-readonly.readonly-action .NgxEditor:active,.richtext-readonly.readonly-action .NgxEditor:focus{text-decoration:underline}.richtext-viewonly .NgxEditor{border-top:0}.richtext-viewonly.viewonly-action .NgxEditor{color:#069;cursor:pointer}.richtext-viewonly.viewonly-action .NgxEditor:hover,.richtext-viewonly.viewonly-action .NgxEditor:active,.richtext-viewonly.viewonly-action .NgxEditor:focus{text-decoration:underline}.character-counter{padding-left:.125rem;color:#757575;font-size:.75rem;font-weight:300;line-height:.75rem}.label-counter-container{display:flex;align-items:center;justify-content:space-between;padding:.25rem .125rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.NgxEditorComponent, selector: "ngx-editor", inputs: ["editor", "outputFormat", "placeholder"], outputs: ["focusOut", "focusIn"] }, { kind: "component", type: i4.MenuComponent, selector: "ngx-editor-menu", inputs: ["toolbar", "colorPresets", "disabled", "editor", "customMenuRef", "dropdownPlacement"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
14882
14952
  }
14883
14953
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdRichtextComponent, decorators: [{
14884
14954
  type: Component,
@@ -14950,7 +15020,7 @@ class QdSwitchComponent {
14950
15020
  }
14951
15021
  }
14952
15022
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSwitchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14953
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdSwitchComponent, isStandalone: false, selector: "qd-switch", inputs: { inputData: "inputData", id: "id", disabled: "disabled", testId: ["data-test-id", "testId"] }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.qd-switch-active": "this.active", "class.qd-switch-disabled": "this.isDisabled" }, classAttribute: "qd-switch" }, ngImport: i0, template: "<label [for]=\"toggleId\">\n <div class=\"switch-content\" *ngIf=\"labelPosition === 'left'\" [attr.data-test-id]=\"testId + '-label'\">\n {{ label | translate }}\n </div>\n <div class=\"switch-toggle-bar\">\n <div class=\"switch-toggle-button\"></div>\n </div>\n <div class=\"switch-content\" *ngIf=\"labelPosition === 'right'\" [attr.data-test-id]=\"testId + '-content'\">\n {{ label | translate }}\n </div>\n</label>\n", styles: [".qd-switch label{display:flex;width:max-content;align-items:center}.qd-switch label:hover{cursor:pointer}.qd-switch .switch-toggle-bar{position:relative;width:2.5rem;height:1.25rem;border-radius:1.25rem;background-color:#e5e5e5}.qd-switch .switch-toggle-bar .switch-toggle-button{position:absolute;top:0;width:1.25rem;height:1.25rem;border-radius:1.25rem;background-color:#b4b4b4;transition:all 80ms linear;transition-property:transform}.qd-switch .switch-content{margin-right:.75rem;margin-left:.75rem;color:#171717;font-size:.875rem;font-weight:400;line-height:.875rem}.qd-switch:hover .switch-toggle-bar{background-color:#d5d5d5}.qd-switch:hover .switch-toggle-bar .switch-toggle-button{background-color:#979797}.qd-switch.qd-switch-active .switch-toggle-bar{background-color:#c3e8cd}.qd-switch.qd-switch-active .switch-toggle-bar .switch-toggle-button{background-color:#00813a;transform:translate(1.25rem)}.qd-switch.qd-switch-active:hover .switch-toggle-bar .switch-toggle-button{background-color:#006226}.qd-switch.qd-switch-disabled label:hover{cursor:initial}.qd-switch.qd-switch-disabled .switch-toggle-bar{background-color:#efefef}.qd-switch.qd-switch-disabled .switch-toggle-bar .switch-toggle-button{background-color:#d5d5d5}.qd-switch.qd-switch-disabled .switch-content{color:#757575}.qd-switch.qd-switch-disabled:hover .switch-toggle-bar{background-color:#efefef}.qd-switch.qd-switch-disabled:hover .switch-toggle-bar .switch-toggle-button{background-color:#d5d5d5}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
15023
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdSwitchComponent, isStandalone: false, selector: "qd-switch", inputs: { inputData: "inputData", id: "id", disabled: "disabled", testId: ["data-test-id", "testId"] }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.qd-switch-active": "this.active", "class.qd-switch-disabled": "this.isDisabled" }, classAttribute: "qd-switch" }, ngImport: i0, template: "<label [for]=\"toggleId\">\n <div class=\"switch-content\" *ngIf=\"labelPosition === 'left'\" [attr.data-test-id]=\"testId + '-label'\">\n {{ label | translate }}\n </div>\n <div class=\"switch-toggle-bar\">\n <div class=\"switch-toggle-button\"></div>\n </div>\n <div class=\"switch-content\" *ngIf=\"labelPosition === 'right'\" [attr.data-test-id]=\"testId + '-content'\">\n {{ label | translate }}\n </div>\n</label>\n", styles: [".qd-switch label{display:flex;width:max-content;align-items:center}.qd-switch label:hover{cursor:pointer}.qd-switch .switch-toggle-bar{position:relative;width:2.5rem;height:1.25rem;border-radius:1.25rem;background-color:#e5e5e5}.qd-switch .switch-toggle-bar .switch-toggle-button{position:absolute;top:0;width:1.25rem;height:1.25rem;border-radius:1.25rem;background-color:#b4b4b4;transition:all 80ms linear;transition-property:transform}.qd-switch .switch-content{margin-right:.75rem;margin-left:.75rem;color:#171717;font-size:.875rem;font-weight:400;line-height:.875rem}.qd-switch:hover .switch-toggle-bar{background-color:#d5d5d5}.qd-switch:hover .switch-toggle-bar .switch-toggle-button{background-color:#979797}.qd-switch.qd-switch-active .switch-toggle-bar{background-color:#c3e8cd}.qd-switch.qd-switch-active .switch-toggle-bar .switch-toggle-button{background-color:#00813a;transform:translate(1.25rem)}.qd-switch.qd-switch-active:hover .switch-toggle-bar .switch-toggle-button{background-color:#006226}.qd-switch.qd-switch-disabled label:hover{cursor:initial}.qd-switch.qd-switch-disabled .switch-toggle-bar{background-color:#efefef}.qd-switch.qd-switch-disabled .switch-toggle-bar .switch-toggle-button{background-color:#d5d5d5}.qd-switch.qd-switch-disabled .switch-content{color:#757575}.qd-switch.qd-switch-disabled:hover .switch-toggle-bar{background-color:#efefef}.qd-switch.qd-switch-disabled:hover .switch-toggle-bar .switch-toggle-button{background-color:#d5d5d5}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
14954
15024
  }
14955
15025
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSwitchComponent, decorators: [{
14956
15026
  type: Component,
@@ -15524,7 +15594,7 @@ class QdTextareaComponent {
15524
15594
  multi: true
15525
15595
  },
15526
15596
  QdFormsActionEmitterService
15527
- ], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!readonly && !viewonly\">\n <div class=\"qd-textarea-input\">\n <textarea\n [placeholder]=\"placeholder | translate\"\n [value]=\"valueForView\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n [disabled]=\"disabled || readonly\"\n [attr.data-test-id]=\"testId + '-input'\"\n [rows]=\"rows\"\n ></textarea>\n <div class=\"qd-textarea-suffix\">\n <qd-icon *ngIf=\"hasError\" class=\"qd-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n </div>\n </div>\n\n <span class=\"qd-textarea-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[valueForView]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[valueForView]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{position:relative;display:block;overflow:hidden;width:100%;flex-direction:column;margin-bottom:.75rem}:host .qd-textarea-input{display:flex;align-items:center;padding:.5rem;border:.0625rem solid rgb(180,180,180);border-radius:0;margin-bottom:.375rem;background-color:#fff}:host .qd-textarea-input:hover,:host .qd-textarea-input:focus,:host .qd-textarea-input:active{padding:.4375rem;border:.125rem solid rgb(23,23,23)}:host .qd-textarea-input textarea{height:100%;flex-grow:1;border:none;background-color:#fff;color:#171717;font-size:.875rem;resize:none}:host .qd-textarea-input textarea:hover,:host .qd-textarea-input textarea:focus,:host .qd-textarea-input textarea:active{border:none;outline:none}:host .qd-textarea-input textarea::placeholder{color:#b4b4b4}:host .qd-textarea-input textarea:focus::placeholder{display:block;color:#b4b4b4}:host .qd-textarea-character-counter{padding-left:.125rem;color:#757575;float:right;font-size:.75rem;font-weight:300;line-height:.75rem}:host:after{display:block;height:0;clear:both;content:\".\";visibility:hidden}:host.qd-textarea-focus .qd-textarea-input{padding:.4375rem;border:.125rem solid rgb(0,102,153);border-radius:0;outline:none}:host.qd-textarea-readonly .qd-textarea-input-readonly{display:flex;min-height:2.25rem;align-items:center;margin-bottom:.375rem;color:#171717;font-size:.875rem}:host.qd-textarea--readonly-action .qd-textarea-input-readonly{color:#069;cursor:pointer}:host.qd-textarea--readonly-action .qd-textarea-input-readonly:hover,:host.qd-textarea--readonly-action .qd-textarea-input-readonly:active,:host.qd-textarea--readonly-action .qd-textarea-input-readonly:focus{text-decoration:underline}:host.qd-textarea-viewonly .qd-textarea-input-viewonly{display:flex;min-height:2.25rem;align-items:center;margin-bottom:.375rem;color:#171717;font-size:.875rem}:host.qd-textarea--viewonly-action .qd-textarea-input-viewonly{color:#069;cursor:pointer}:host.qd-textarea--viewonly-action .qd-textarea-input-viewonly:hover,:host.qd-textarea--viewonly-action .qd-textarea-input-viewonly:active,:host.qd-textarea--viewonly-action .qd-textarea-input-viewonly:focus{text-decoration:underline}:host.qd-textarea-disabled .qd-textarea-input{border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-textarea-disabled .qd-textarea-input textarea{background-color:#f5f5f5;color:#979797}:host.qd-textarea-disabled .qd-textarea-input textarea::placeholder{color:red;opacity:0}:host.qd-textarea-disabled .qd-textarea-input:hover,:host.qd-textarea-disabled .qd-textarea-input:focus,:host.qd-textarea-disabled .qd-textarea-input:active{padding:.5rem;border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-textarea-disabled.qd-textarea-focus{border-color:#ff9b00}:host.qd-textarea-error .qd-textarea-input{padding:.5rem;border:.0625rem solid rgb(199,0,35)}:host.qd-textarea-error .qd-textarea-input .qd-error-icon{color:#c70023}:host.qd-textarea-error .qd-textarea-input:hover,:host.qd-textarea-error .qd-textarea-input:focus,:host.qd-textarea-error .qd-textarea-input:active{padding:.4375rem;border:.125rem solid rgb(199,0,35)}:host.qd-textarea-error.qd-textarea-focus{border-color:#c70023}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
15597
+ ], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngIf=\"!readonly && !viewonly\">\n <div class=\"qd-textarea-input\">\n <textarea\n [placeholder]=\"placeholder | translate\"\n [value]=\"valueForView\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n [disabled]=\"disabled || readonly\"\n [attr.data-test-id]=\"testId + '-input'\"\n [rows]=\"rows\"\n ></textarea>\n <div class=\"qd-textarea-suffix\">\n <qd-icon *ngIf=\"hasError\" class=\"qd-error-icon\" icon=\"exclamationCircleSolid\"></qd-icon>\n </div>\n </div>\n\n <span class=\"qd-textarea-character-counter\" *ngIf=\"hasMaxLength\">{{ numberOfCharacters }} / {{ maxLength }}</span>\n\n <qd-form-hint\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[valueForView]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[valueForView]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{position:relative;display:block;overflow:hidden;width:100%;flex-direction:column;margin-bottom:.75rem}:host .qd-textarea-input{display:flex;align-items:center;padding:.5rem;border:.0625rem solid rgb(180,180,180);border-radius:0;margin-bottom:.375rem;background-color:#fff}:host .qd-textarea-input:hover,:host .qd-textarea-input:focus,:host .qd-textarea-input:active{padding:.4375rem;border:.125rem solid rgb(23,23,23)}:host .qd-textarea-input textarea{height:100%;flex-grow:1;border:none;background-color:#fff;color:#171717;font-size:.875rem;resize:none}:host .qd-textarea-input textarea:hover,:host .qd-textarea-input textarea:focus,:host .qd-textarea-input textarea:active{border:none;outline:none}:host .qd-textarea-input textarea::placeholder{color:#b4b4b4}:host .qd-textarea-input textarea:focus::placeholder{display:block;color:#b4b4b4}:host .qd-textarea-character-counter{padding-left:.125rem;color:#757575;float:right;font-size:.75rem;font-weight:300;line-height:.75rem}:host:after{display:block;height:0;clear:both;content:\".\";visibility:hidden}:host.qd-textarea-focus .qd-textarea-input{padding:.4375rem;border:.125rem solid rgb(0,102,153);border-radius:0;outline:none}:host.qd-textarea-readonly .qd-textarea-input-readonly{display:flex;min-height:2.25rem;align-items:center;margin-bottom:.375rem;color:#171717;font-size:.875rem}:host.qd-textarea--readonly-action .qd-textarea-input-readonly{color:#069;cursor:pointer}:host.qd-textarea--readonly-action .qd-textarea-input-readonly:hover,:host.qd-textarea--readonly-action .qd-textarea-input-readonly:active,:host.qd-textarea--readonly-action .qd-textarea-input-readonly:focus{text-decoration:underline}:host.qd-textarea-viewonly .qd-textarea-input-viewonly{display:flex;min-height:2.25rem;align-items:center;margin-bottom:.375rem;color:#171717;font-size:.875rem}:host.qd-textarea--viewonly-action .qd-textarea-input-viewonly{color:#069;cursor:pointer}:host.qd-textarea--viewonly-action .qd-textarea-input-viewonly:hover,:host.qd-textarea--viewonly-action .qd-textarea-input-viewonly:active,:host.qd-textarea--viewonly-action .qd-textarea-input-viewonly:focus{text-decoration:underline}:host.qd-textarea-disabled .qd-textarea-input{border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-textarea-disabled .qd-textarea-input textarea{background-color:#f5f5f5;color:#979797}:host.qd-textarea-disabled .qd-textarea-input textarea::placeholder{color:red;opacity:0}:host.qd-textarea-disabled .qd-textarea-input:hover,:host.qd-textarea-disabled .qd-textarea-input:focus,:host.qd-textarea-disabled .qd-textarea-input:active{padding:.5rem;border:.0625rem solid rgb(151,151,151);background-color:#f5f5f5}:host.qd-textarea-disabled.qd-textarea-focus{border-color:#ff9b00}:host.qd-textarea-error .qd-textarea-input{padding:.5rem;border:.0625rem solid rgb(199,0,35)}:host.qd-textarea-error .qd-textarea-input .qd-error-icon{color:#c70023}:host.qd-textarea-error .qd-textarea-input:hover,:host.qd-textarea-error .qd-textarea-input:focus,:host.qd-textarea-error .qd-textarea-input:active{padding:.4375rem;border:.125rem solid rgb(199,0,35)}:host.qd-textarea-error.qd-textarea-focus{border-color:#c70023}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
15528
15598
  }
15529
15599
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTextareaComponent, decorators: [{
15530
15600
  type: Component,
@@ -16254,7 +16324,7 @@ class QdNotificationComponent {
16254
16324
  return !!this.element.nativeElement.closest('qd-snackbar');
16255
16325
  }
16256
16326
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdNotificationComponent, deps: [{ token: QdNotificationsService }, { token: QdSnackbarService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
16257
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdNotificationComponent, isStandalone: false, selector: "qd-notification", inputs: { type: "type", notification: "notification" }, host: { properties: { "attr.class": "this.typeClassName" }, classAttribute: "qd-notification" }, ngImport: i0, template: "<qd-icon *ngIf=\"closeable\" [icon]=\"'timesLarge'\" class=\"closer\" (click)=\"remove()\"></qd-icon>\n<qd-icon [icon]=\"this.getIcon()\" class=\"icon\"></qd-icon>\n\n<ng-content select=\"qd-notification-content\"></ng-content>\n\n<div class=\"title\" *ngIf=\"notification?.title\">{{ notification.title.i18n | translate }}</div>\n<div class=\"message\">\n <span>{{ notification?.i18n | translate }}</span>\n <a class=\"link\" *ngIf=\"notification?.link\" (click)=\"handleLinkClick()\">{{ notification.link.i18n | translate }}</a>\n</div>\n", styles: [":host{position:relative;z-index:9999!important;display:block;width:100%;padding:1rem 2rem .5rem 2.75rem;border-width:.0625rem;border-style:solid;border-left-width:.25rem;margin-bottom:.5rem;background:#fff;box-shadow:0 0 .625rem #979797;font-size:.875rem;gap:.5rem;line-height:1rem}:host.qd-notification-info{border-color:#069}:host.qd-notification-info .icon,:host.qd-notification-info .title{color:#069}:host.qd-notification-warning{border-color:#ff9b00}:host.qd-notification-warning .icon,:host.qd-notification-warning .title{color:#ff9b00}:host.qd-notification-critical{border-color:#c70023}:host.qd-notification-critical .icon,:host.qd-notification-critical .title{color:#c70023}:host.qd-notification-success{border-color:#00813a}:host.qd-notification-success .icon,:host.qd-notification-success .title{color:#00813a}:host .icon{position:absolute;top:.9375rem;left:1rem;font-size:1.25rem}:host .closer{position:absolute;top:1rem;right:.75rem;color:#171717;cursor:pointer;font-size:.8125rem;font-weight:600}:host .title{margin-bottom:.375rem;font-weight:500}:host .message{margin-bottom:.25rem;white-space:pre-wrap}:host .link{margin-bottom:.375rem;margin-left:.375rem;color:#069;cursor:pointer}:host .link:hover{text-decoration:underline}:host:host-context(qd-snackbar) .link{display:block;margin-top:.375rem;margin-left:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
16327
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdNotificationComponent, isStandalone: false, selector: "qd-notification", inputs: { type: "type", notification: "notification" }, host: { properties: { "attr.class": "this.typeClassName" }, classAttribute: "qd-notification" }, ngImport: i0, template: "<qd-icon *ngIf=\"closeable\" [icon]=\"'timesLarge'\" class=\"closer\" (click)=\"remove()\"></qd-icon>\n<qd-icon [icon]=\"this.getIcon()\" class=\"icon\"></qd-icon>\n\n<ng-content select=\"qd-notification-content\"></ng-content>\n\n<div class=\"title\" *ngIf=\"notification?.title\">{{ notification.title.i18n | translate }}</div>\n<div class=\"message\">\n <span>{{ notification?.i18n | translate }}</span>\n <a class=\"link\" *ngIf=\"notification?.link\" (click)=\"handleLinkClick()\">{{ notification.link.i18n | translate }}</a>\n</div>\n", styles: [":host{position:relative;z-index:9999!important;display:block;width:100%;padding:1rem 2rem .5rem 2.75rem;border-width:.0625rem;border-style:solid;border-left-width:.25rem;margin-bottom:.5rem;background:#fff;box-shadow:0 0 .625rem #979797;font-size:.875rem;gap:.5rem;line-height:1rem}:host.qd-notification-info{border-color:#069}:host.qd-notification-info .icon,:host.qd-notification-info .title{color:#069}:host.qd-notification-warning{border-color:#ff9b00}:host.qd-notification-warning .icon,:host.qd-notification-warning .title{color:#ff9b00}:host.qd-notification-critical{border-color:#c70023}:host.qd-notification-critical .icon,:host.qd-notification-critical .title{color:#c70023}:host.qd-notification-success{border-color:#00813a}:host.qd-notification-success .icon,:host.qd-notification-success .title{color:#00813a}:host .icon{position:absolute;top:.9375rem;left:1rem;font-size:1.25rem}:host .closer{position:absolute;top:1rem;right:.75rem;color:#171717;cursor:pointer;font-size:.8125rem;font-weight:600}:host .title{margin-bottom:.375rem;font-weight:500}:host .message{margin-bottom:.25rem;white-space:pre-wrap}:host .link{margin-bottom:.375rem;margin-left:.375rem;color:#069;cursor:pointer}:host .link:hover{text-decoration:underline}:host:host-context(qd-snackbar) .link{display:block;margin-top:.375rem;margin-left:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
16258
16328
  }
16259
16329
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdNotificationComponent, decorators: [{
16260
16330
  type: Component,
@@ -16636,7 +16706,7 @@ class QdMenuButtonComponent {
16636
16706
  return this.config?.actions?.some(action => !action.isHidden) ?? false;
16637
16707
  }
16638
16708
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdMenuButtonComponent, deps: [{ token: QdButtonGhostDirective, host: true, optional: true }, { token: QD_VIEWPORT_ADAPTIVE_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
16639
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdMenuButtonComponent, isStandalone: false, selector: "button[qdMenuButton], a[qdMenuButton]", inputs: { config: ["qdMenuButton", "config"], dataTestId: ["data-test-id", "dataTestId"], autoSize: "autoSize" }, host: { properties: { "attr.class": "classes" } }, ngImport: i0, template: "<ng-container *ngIf=\"qdButtonGhost\">\n <button\n qdButton\n qdButtonGhost\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverAutoSize]=\"{ width: true }\"\n [qdPopoverMinWidth]=\"200\"\n [qdPopoverMaxWidth]=\"300\"\n [disabled]=\"config?.isDisabled || !hasUnhiddenActions()\"\n (opened)=\"isOpen = true\"\n (closed)=\"isOpen = false\"\n [class.open]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\n </button>\n</ng-container>\n\n<ng-container *ngIf=\"!qdButtonGhost\">\n <button\n qdButton\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverAutoSize]=\"{ width: autoSize }\"\n [qdPopoverMinWidth]=\"200\"\n [qdPopoverMaxWidth]=\"300\"\n [disabled]=\"config?.isDisabled || !hasUnhiddenActions()\"\n (opened)=\"isOpen = true\"\n (closed)=\"isOpen = false\"\n [class.open]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\n </button>\n</ng-container>\n\n<ng-template #menu>\n <ng-container *ngFor=\"let action of config?.actions\">\n <button\n class=\"entry\"\n *ngIf=\"!action.isHidden\"\n (click)=\"action.handler()\"\n [disabled]=\"action.isDisabled\"\n [attr.data-test-id]=\"dataTestId + 'menu-action'\"\n qdTruncatedText\n >\n {{ action.label.i18n | translate }}\n </button>\n </ng-container>\n</ng-template>\n\n<ng-template #buttonContent>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n <qd-icon class=\"open-indicator\" [icon]=\"'ctrlDown'\"></qd-icon>\n</ng-template>\n", styles: [":host{padding:0}@media (max-width: 959.98px){:host.only-icon-on-small-viewport button{padding:.875rem}:host.only-icon-on-small-viewport .qd-icon{margin:0;font-size:1.125rem}:host.only-icon-on-small-viewport .content{display:none}}button[qd-button].open{background-color:#14516f}button.entry{display:block;overflow:hidden;width:100%;min-height:2.25rem;padding:0 1rem;background:#fff0;text-align:left;text-overflow:ellipsis;white-space:nowrap;color:inherit;font-size:.875rem;font-weight:400;line-height:1.3125rem}button.entry:hover{background-color:#f2f7fa}button.entry:hover[disabled]{background:#fff0;cursor:default}button.entry[disabled]{color:#b4b4b4;cursor:default}button.entry[disabled]:hover{background-color:#fff0}.open-indicator{margin-left:.5rem}qd-icon{font-size:.875rem}.content{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
16709
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdMenuButtonComponent, isStandalone: false, selector: "button[qdMenuButton], a[qdMenuButton]", inputs: { config: ["qdMenuButton", "config"], dataTestId: ["data-test-id", "dataTestId"], autoSize: "autoSize" }, host: { properties: { "attr.class": "classes" } }, ngImport: i0, template: "<ng-container *ngIf=\"qdButtonGhost\">\n <button\n qdButton\n qdButtonGhost\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverAutoSize]=\"{ width: true }\"\n [qdPopoverMinWidth]=\"200\"\n [qdPopoverMaxWidth]=\"300\"\n [disabled]=\"config?.isDisabled || !hasUnhiddenActions()\"\n (opened)=\"isOpen = true\"\n (closed)=\"isOpen = false\"\n [class.open]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\n </button>\n</ng-container>\n\n<ng-container *ngIf=\"!qdButtonGhost\">\n <button\n qdButton\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverAutoSize]=\"{ width: autoSize }\"\n [qdPopoverMinWidth]=\"200\"\n [qdPopoverMaxWidth]=\"300\"\n [disabled]=\"config?.isDisabled || !hasUnhiddenActions()\"\n (opened)=\"isOpen = true\"\n (closed)=\"isOpen = false\"\n [class.open]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\n </button>\n</ng-container>\n\n<ng-template #menu>\n <ng-container *ngFor=\"let action of config?.actions\">\n <button\n class=\"entry\"\n *ngIf=\"!action.isHidden\"\n (click)=\"action.handler()\"\n [disabled]=\"action.isDisabled\"\n [attr.data-test-id]=\"dataTestId + 'menu-action'\"\n qdTruncatedText\n >\n {{ action.label.i18n | translate }}\n </button>\n </ng-container>\n</ng-template>\n\n<ng-template #buttonContent>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n <qd-icon class=\"open-indicator\" [icon]=\"'ctrlDown'\"></qd-icon>\n</ng-template>\n", styles: [":host{padding:0}@media (max-width: 959.98px){:host.only-icon-on-small-viewport button{padding:.875rem}:host.only-icon-on-small-viewport .qd-icon{margin:0;font-size:1.125rem}:host.only-icon-on-small-viewport .content{display:none}}button[qd-button].open{background-color:#14516f}button.entry{display:block;overflow:hidden;width:100%;min-height:2.25rem;padding:0 1rem;background:#fff0;text-align:left;text-overflow:ellipsis;white-space:nowrap;color:inherit;font-size:.875rem;font-weight:400;line-height:1.3125rem}button.entry:hover{background-color:#f2f7fa}button.entry:hover[disabled]{background:#fff0;cursor:default}button.entry[disabled]{color:#b4b4b4;cursor:default}button.entry[disabled]:hover{background-color:#fff0}.open-indicator{margin-left:.5rem}qd-icon{font-size:.875rem}.content{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
16640
16710
  }
16641
16711
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdMenuButtonComponent, decorators: [{
16642
16712
  type: Component,
@@ -17368,7 +17438,7 @@ class QdGridComponent {
17368
17438
  }
17369
17439
  }
17370
17440
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdGridComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
17371
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdGridComponent, isStandalone: false, selector: "qd-grid", inputs: { config: "config" }, hostDirectives: [{ directive: QdColumnsDirective, inputs: ["qdColumns", "qdColumns"] }], ngImport: i0, template: "<h4 *ngIf=\"config?.title\">{{ config.title.i18n | translate }}</h4>\n<ng-content></ng-content>\n", styles: [":host h4{margin:0 0 1rem;font-size:1rem;grid-column:1/-1}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
17441
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdGridComponent, isStandalone: false, selector: "qd-grid", inputs: { config: "config" }, hostDirectives: [{ directive: QdColumnsDirective, inputs: ["qdColumns", "qdColumns"] }], ngImport: i0, template: "<h4 *ngIf=\"config?.title\">{{ config.title.i18n | translate }}</h4>\n<ng-content></ng-content>\n", styles: [":host h4{margin:0 0 1rem;font-size:1rem;grid-column:1/-1}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
17372
17442
  }
17373
17443
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdGridComponent, decorators: [{
17374
17444
  type: Component,
@@ -17436,7 +17506,7 @@ class QdSubgridComponent {
17436
17506
  this.renderer.addClass(this.elementRef.nativeElement, className);
17437
17507
  }
17438
17508
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSubgridComponent, deps: [{ token: QdGridService }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
17439
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdSubgridComponent, isStandalone: false, selector: "qd-subgrid", inputs: { config: "config" }, hostDirectives: [{ directive: QdColumnDirective, inputs: ["qdColumn", "qdColumn"] }], ngImport: i0, template: "<h4 *ngIf=\"config?.title\">{{ config.title.i18n | translate }}</h4>\n<ng-content></ng-content>\n", styles: [":host{display:grid;align-content:baseline;margin-bottom:.75rem;grid-template-columns:subgrid}@media (max-width: 599.98px){:host{display:block}}:host h4{margin:0 0 1rem;font-size:.875rem;grid-column:1/-1}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
17509
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdSubgridComponent, isStandalone: false, selector: "qd-subgrid", inputs: { config: "config" }, hostDirectives: [{ directive: QdColumnDirective, inputs: ["qdColumn", "qdColumn"] }], ngImport: i0, template: "<h4 *ngIf=\"config?.title\">{{ config.title.i18n | translate }}</h4>\n<ng-content></ng-content>\n", styles: [":host{display:grid;align-content:baseline;margin-bottom:.75rem;grid-template-columns:subgrid}@media (max-width: 599.98px){:host{display:block}}:host h4{margin:0 0 1rem;font-size:.875rem;grid-column:1/-1}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
17440
17510
  }
17441
17511
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSubgridComponent, decorators: [{
17442
17512
  type: Component,
@@ -17827,7 +17897,7 @@ class QdContactCardMenuComponent {
17827
17897
  });
17828
17898
  }
17829
17899
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdContactCardMenuComponent, deps: [{ token: QdPageStoreService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
17830
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdContactCardMenuComponent, isStandalone: false, selector: "qd-contact-card-menu", inputs: { contactData: "contactData", actions: "actions", testId: ["data-test-id", "testId"] }, ngImport: i0, template: "<ng-container *ngIf=\"actions$ | async as actions\">\n <qd-icon\n *ngIf=\"actions.length > 0\"\n icon=\"overflowMenuVertical\"\n class=\"menu-opener\"\n [attr.data-test-id]=\"testId + '-opener'\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverAutoSize]=\"{ width: true }\"\n [qdPopoverMinWidth]=\"200\"\n [qdPopoverMaxWidth]=\"300\"\n ></qd-icon>\n\n <ng-template #menu>\n <ng-container *ngFor=\"let action of actions$ | async\">\n <button\n class=\"menu-entry\"\n (click)=\"action.handler(contactData)\"\n [disabled]=\"action.isDisabled\"\n [attr.data-test-id]=\"testId + '-action'\"\n >\n {{ action.label.i18n | translate }}\n </button>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [":host .menu-opener{position:absolute;top:1.5625rem;right:1.5rem;cursor:pointer;font-size:1.5rem;font-weight:700}button.menu-entry{display:block;overflow:hidden;width:100%;min-height:2.25rem;padding:0 1rem;background:#fff0;text-align:left;text-overflow:ellipsis;white-space:nowrap;color:inherit;font-size:.875rem;font-weight:400;line-height:1.3125rem}button.menu-entry:hover{background-color:#f2f7fa}button.menu-entry:hover[disabled]{background:#fff0;cursor:default}button.menu-entry[disabled]{color:#b4b4b4;cursor:default}button.menu-entry[disabled]:hover{background-color:#fff0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17900
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdContactCardMenuComponent, isStandalone: false, selector: "qd-contact-card-menu", inputs: { contactData: "contactData", actions: "actions", testId: ["data-test-id", "testId"] }, ngImport: i0, template: "<ng-container *ngIf=\"actions$ | async as actions\">\n <qd-icon\n *ngIf=\"actions.length > 0\"\n icon=\"overflowMenuVertical\"\n class=\"menu-opener\"\n [attr.data-test-id]=\"testId + '-opener'\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverAutoSize]=\"{ width: true }\"\n [qdPopoverMinWidth]=\"200\"\n [qdPopoverMaxWidth]=\"300\"\n ></qd-icon>\n\n <ng-template #menu>\n <ng-container *ngFor=\"let action of actions$ | async\">\n <button\n class=\"menu-entry\"\n (click)=\"action.handler(contactData)\"\n [disabled]=\"action.isDisabled\"\n [attr.data-test-id]=\"testId + '-action'\"\n >\n {{ action.label.i18n | translate }}\n </button>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [":host .menu-opener{position:absolute;top:1.5625rem;right:1.5rem;cursor:pointer;font-size:1.5rem;font-weight:700}button.menu-entry{display:block;overflow:hidden;width:100%;min-height:2.25rem;padding:0 1rem;background:#fff0;text-align:left;text-overflow:ellipsis;white-space:nowrap;color:inherit;font-size:.875rem;font-weight:400;line-height:1.3125rem}button.menu-entry:hover{background-color:#f2f7fa}button.menu-entry:hover[disabled]{background:#fff0;cursor:default}button.menu-entry[disabled]{color:#b4b4b4;cursor:default}button.menu-entry[disabled]:hover{background-color:#fff0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17831
17901
  }
17832
17902
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdContactCardMenuComponent, decorators: [{
17833
17903
  type: Component,
@@ -18103,13 +18173,13 @@ class QdContactCardComponent {
18103
18173
  hasEmailAddress() {
18104
18174
  return !!this.contactData.emailAddress;
18105
18175
  }
18106
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdContactCardComponent, deps: [{ token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
18107
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdContactCardComponent, isStandalone: false, selector: "qd-contact-card", inputs: { contactData: "contactData", actions: "actions", hasPlaceholders: "hasPlaceholders", testId: ["data-test-id", "testId"] }, outputs: { emailAddressClicked: "emailAddressClicked" }, ngImport: i0, template: "<qd-contact-card-menu\n *ngIf=\"actions && actions.length > 0\"\n [contactData]=\"contactData\"\n [actions]=\"actions\"\n [data-test-id]=\"testId + '-menu'\"\n></qd-contact-card-menu>\n<p class=\"contact-function\">\n {{ contactFunction | translate }} <span *ngIf=\"hasTag()\" class=\"tag\">{{ contactTag | translate }}</span>\n</p>\n<p>\n <span class=\"title\" [class.placeholder]=\"!hasCompanyName()\">{{ companyName }}</span>\n <span class=\"subtitle\" [class.placeholder]=\"!hasBusinessPartnerId()\">{{ businessPartnerId }}</span>\n</p>\n<p>\n <span [class.placeholder]=\"!hasContactPerson()\">{{ firstName }} {{ lastName }}</span>\n <span [class.placeholder]=\"!hasCareOf()\">{{ careOf }}</span>\n <span [class.placeholder]=\"!hasStreet()\">{{ street }}</span>\n <span [class.placeholder]=\"!hasAddress()\">{{ countryCode }}{{ postalCode }} {{ city }}</span>\n</p>\n<p>\n <span [class.placeholder]=\"!hasPhoneNumber()\">{{ phoneNumber }}</span>\n <a\n [class.placeholder]=\"!hasEmailAddress()\"\n [attr.href]=\"hasEmailAddress() ? 'mailto:' + emailAddress : null\"\n (click)=\"hasEmailAddress() ? emailAddressClicked.emit($event) : null\"\n >\n {{ emailAddress }}\n </a>\n</p>\n<p *ngIf=\"customFields && customFields.length > 0\">\n <span *ngFor=\"let customField of customFields\">\n <label *ngIf=\"customField.label\">\n <ng-container\n [ngTemplateOutlet]=\"translate\"\n [ngTemplateOutletContext]=\"{ translatableOrText: customField.label }\"\n ></ng-container>\n </label>\n\n <ng-container\n [ngTemplateOutlet]=\"translate\"\n [ngTemplateOutletContext]=\"{ translatableOrText: customField.value }\"\n ></ng-container>\n </span>\n</p>\n\n<ng-template #translate let-translatableOrText=\"translatableOrText\">\n <ng-container *ngIf=\"translatableOrText.i18n; else plainText\">{{ translatableOrText.i18n | translate }}</ng-container>\n <ng-template #plainText>{{ translatableOrText }}</ng-template>\n</ng-template>\n", styles: [":host{position:relative;display:inline-block;width:23rem;min-height:15.5625rem;padding:.5625rem 1.4375rem;border:solid .0625rem rgb(213,213,213);margin:0 1.0625rem 1.0625rem 0;background-color:#fff;color:#171717;font-size:.875rem;line-height:1.3125rem;vertical-align:top}:host p{margin:.75rem 0}:host span,:host a{display:block;height:auto}:host span>label{margin-right:.21875rem;color:#757575}:host .contact-function{display:flex;align-items:center;margin:.8125rem 0 .875rem;font-weight:500;line-height:1.125rem}:host .tag{display:inline;padding:.125rem .375rem;border-radius:.625rem;margin-left:.5rem;background-color:#454545;color:#fff;font-size:.625rem;line-height:.8125rem}:host .title{font-size:1.0625rem;font-weight:600}:host .subtitle{font-size:1rem}:host .placeholder{color:#979797;cursor:default;font-style:italic;text-decoration:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: QdContactCardMenuComponent, selector: "qd-contact-card-menu", inputs: ["contactData", "actions", "data-test-id"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
18176
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdContactCardComponent, deps: [{ token: i1$3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
18177
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdContactCardComponent, isStandalone: false, selector: "qd-contact-card", inputs: { contactData: "contactData", actions: "actions", hasPlaceholders: "hasPlaceholders", testId: ["data-test-id", "testId"] }, outputs: { emailAddressClicked: "emailAddressClicked" }, ngImport: i0, template: "<qd-contact-card-menu\n *ngIf=\"actions && actions.length > 0\"\n [contactData]=\"contactData\"\n [actions]=\"actions\"\n [data-test-id]=\"testId + '-menu'\"\n></qd-contact-card-menu>\n<p class=\"contact-function\">\n {{ contactFunction | translate }} <span *ngIf=\"hasTag()\" class=\"tag\">{{ contactTag | translate }}</span>\n</p>\n<p>\n <span class=\"title\" [class.placeholder]=\"!hasCompanyName()\">{{ companyName }}</span>\n <span class=\"subtitle\" [class.placeholder]=\"!hasBusinessPartnerId()\">{{ businessPartnerId }}</span>\n</p>\n<p>\n <span [class.placeholder]=\"!hasContactPerson()\">{{ firstName }} {{ lastName }}</span>\n <span [class.placeholder]=\"!hasCareOf()\">{{ careOf }}</span>\n <span [class.placeholder]=\"!hasStreet()\">{{ street }}</span>\n <span [class.placeholder]=\"!hasAddress()\">{{ countryCode }}{{ postalCode }} {{ city }}</span>\n</p>\n<p>\n <span [class.placeholder]=\"!hasPhoneNumber()\">{{ phoneNumber }}</span>\n <a\n [class.placeholder]=\"!hasEmailAddress()\"\n [attr.href]=\"hasEmailAddress() ? 'mailto:' + emailAddress : null\"\n (click)=\"hasEmailAddress() ? emailAddressClicked.emit($event) : null\"\n >\n {{ emailAddress }}\n </a>\n</p>\n<p *ngIf=\"customFields && customFields.length > 0\">\n <span *ngFor=\"let customField of customFields\">\n <label *ngIf=\"customField.label\">\n <ng-container\n [ngTemplateOutlet]=\"translate\"\n [ngTemplateOutletContext]=\"{ translatableOrText: customField.label }\"\n ></ng-container>\n </label>\n\n <ng-container\n [ngTemplateOutlet]=\"translate\"\n [ngTemplateOutletContext]=\"{ translatableOrText: customField.value }\"\n ></ng-container>\n </span>\n</p>\n\n<ng-template #translate let-translatableOrText=\"translatableOrText\">\n <ng-container *ngIf=\"translatableOrText.i18n; else plainText\">{{ translatableOrText.i18n | translate }}</ng-container>\n <ng-template #plainText>{{ translatableOrText }}</ng-template>\n</ng-template>\n", styles: [":host{position:relative;display:inline-block;width:23rem;min-height:15.5625rem;padding:.5625rem 1.4375rem;border:solid .0625rem rgb(213,213,213);margin:0 1.0625rem 1.0625rem 0;background-color:#fff;color:#171717;font-size:.875rem;line-height:1.3125rem;vertical-align:top}:host p{margin:.75rem 0}:host span,:host a{display:block;height:auto}:host span>label{margin-right:.21875rem;color:#757575}:host .contact-function{display:flex;align-items:center;margin:.8125rem 0 .875rem;font-weight:500;line-height:1.125rem}:host .tag{display:inline;padding:.125rem .375rem;border-radius:.625rem;margin-left:.5rem;background-color:#454545;color:#fff;font-size:.625rem;line-height:.8125rem}:host .title{font-size:1.0625rem;font-weight:600}:host .subtitle{font-size:1rem}:host .placeholder{color:#979797;cursor:default;font-style:italic;text-decoration:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: QdContactCardMenuComponent, selector: "qd-contact-card-menu", inputs: ["contactData", "actions", "data-test-id"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
18108
18178
  }
18109
18179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdContactCardComponent, decorators: [{
18110
18180
  type: Component,
18111
18181
  args: [{ selector: 'qd-contact-card', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<qd-contact-card-menu\n *ngIf=\"actions && actions.length > 0\"\n [contactData]=\"contactData\"\n [actions]=\"actions\"\n [data-test-id]=\"testId + '-menu'\"\n></qd-contact-card-menu>\n<p class=\"contact-function\">\n {{ contactFunction | translate }} <span *ngIf=\"hasTag()\" class=\"tag\">{{ contactTag | translate }}</span>\n</p>\n<p>\n <span class=\"title\" [class.placeholder]=\"!hasCompanyName()\">{{ companyName }}</span>\n <span class=\"subtitle\" [class.placeholder]=\"!hasBusinessPartnerId()\">{{ businessPartnerId }}</span>\n</p>\n<p>\n <span [class.placeholder]=\"!hasContactPerson()\">{{ firstName }} {{ lastName }}</span>\n <span [class.placeholder]=\"!hasCareOf()\">{{ careOf }}</span>\n <span [class.placeholder]=\"!hasStreet()\">{{ street }}</span>\n <span [class.placeholder]=\"!hasAddress()\">{{ countryCode }}{{ postalCode }} {{ city }}</span>\n</p>\n<p>\n <span [class.placeholder]=\"!hasPhoneNumber()\">{{ phoneNumber }}</span>\n <a\n [class.placeholder]=\"!hasEmailAddress()\"\n [attr.href]=\"hasEmailAddress() ? 'mailto:' + emailAddress : null\"\n (click)=\"hasEmailAddress() ? emailAddressClicked.emit($event) : null\"\n >\n {{ emailAddress }}\n </a>\n</p>\n<p *ngIf=\"customFields && customFields.length > 0\">\n <span *ngFor=\"let customField of customFields\">\n <label *ngIf=\"customField.label\">\n <ng-container\n [ngTemplateOutlet]=\"translate\"\n [ngTemplateOutletContext]=\"{ translatableOrText: customField.label }\"\n ></ng-container>\n </label>\n\n <ng-container\n [ngTemplateOutlet]=\"translate\"\n [ngTemplateOutletContext]=\"{ translatableOrText: customField.value }\"\n ></ng-container>\n </span>\n</p>\n\n<ng-template #translate let-translatableOrText=\"translatableOrText\">\n <ng-container *ngIf=\"translatableOrText.i18n; else plainText\">{{ translatableOrText.i18n | translate }}</ng-container>\n <ng-template #plainText>{{ translatableOrText }}</ng-template>\n</ng-template>\n", styles: [":host{position:relative;display:inline-block;width:23rem;min-height:15.5625rem;padding:.5625rem 1.4375rem;border:solid .0625rem rgb(213,213,213);margin:0 1.0625rem 1.0625rem 0;background-color:#fff;color:#171717;font-size:.875rem;line-height:1.3125rem;vertical-align:top}:host p{margin:.75rem 0}:host span,:host a{display:block;height:auto}:host span>label{margin-right:.21875rem;color:#757575}:host .contact-function{display:flex;align-items:center;margin:.8125rem 0 .875rem;font-weight:500;line-height:1.125rem}:host .tag{display:inline;padding:.125rem .375rem;border-radius:.625rem;margin-left:.5rem;background-color:#454545;color:#fff;font-size:.625rem;line-height:.8125rem}:host .title{font-size:1.0625rem;font-weight:600}:host .subtitle{font-size:1rem}:host .placeholder{color:#979797;cursor:default;font-style:italic;text-decoration:none}\n"] }]
18112
- }], ctorParameters: () => [{ type: i1$2.TranslateService }], propDecorators: { contactData: [{
18182
+ }], ctorParameters: () => [{ type: i1$3.TranslateService }], propDecorators: { contactData: [{
18113
18183
  type: Input
18114
18184
  }], actions: [{
18115
18185
  type: Input
@@ -18429,7 +18499,7 @@ class QdDialogConfirmationComponent {
18429
18499
  });
18430
18500
  }
18431
18501
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogConfirmationComponent, deps: [{ token: QD_DIALOG_CONFIRMATION_RESOLVER_TOKEN, optional: true }, { token: QdDialogService }, { token: QdNotificationsService }, { token: i1$1.DialogRef }, { token: QdSnackbarService }], target: i0.ɵɵFactoryTarget.Component });
18432
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDialogConfirmationComponent, isStandalone: false, selector: "qd-dialog-confirmation", inputs: { config: "config", testId: ["data-test-id", "testId"] }, ngImport: i0, template: "<qd-dialog [attr.data-test-id]=\"testId\">\n <div class=\"loading-overlay\" *ngIf=\"isLoading\">\n <qd-spinner></qd-spinner>\n </div>\n\n <div class=\"headline\" *ngIf=\"isInfoState\">{{ config.info.headline.i18n | translate }}</div>\n\n <div class=\"headline\" *ngIf=\"isSuccessState\">\n {{ (config.success.headline.i18n | translate) || (config.info.headline.i18n | translate) }}\n </div>\n\n <div class=\"headline\" *ngIf=\"isErrorState && config.error.headline.i18n\">\n {{ config.error.headline.i18n | translate }}\n </div>\n\n <div class=\"info\">\n <ng-container *ngIf=\"isInfoState\"> {{ config.info.info.i18n | translate }} </ng-container>\n\n <ng-container *ngIf=\"isSuccessState\">\n <qd-icon class=\"success\" [icon]=\"'checkCircleSolid'\"></qd-icon>\n <span>{{ (config.success.info.i18n | translate) || (config.info.info.i18n | translate) }} </span>\n </ng-container>\n\n <ng-container *ngIf=\"isErrorState && config.error?.info?.i18n\">\n <qd-icon class=\"error\" [icon]=\"'timesCircleSolid'\"></qd-icon>\n <span>{{ config.error?.info?.i18n | translate }}</span>\n </ng-container>\n </div>\n\n <div class=\"confirm-content\">\n <ng-container *ngIf=\"isInfoState\">\n <ng-content select=\"[qdDialogConfirmInfo]\"></ng-content>\n <qd-checkboxes\n [attr.data-test-id]=\"testId + '-checkbox'\"\n *ngIf=\"useCheckbox\"\n [config]=\"checkboxConfig\"\n [(values)]=\"confirmChecked\"\n ></qd-checkboxes>\n </ng-container>\n\n <ng-container *ngIf=\"isSuccessState\">\n <ng-content select=\"[qdDialogConfirmSuccess]\"></ng-content>\n </ng-container>\n\n <ng-container *ngIf=\"isErrorState\">\n <ng-content select=\"[qdDialogConfirmError]\"></ng-content>\n </ng-container>\n\n <qd-notifications [context]=\"notificationContext\"></qd-notifications>\n </div>\n\n <qd-dialog-action>\n <ng-container *ngIf=\"isInfoState\">\n <button qdButton qdButtonGhost (click)=\"close()\" [disabled]=\"isLoading\">\n {{ config.buttons.cancel.i18n | translate }}\n </button>\n\n <button qdButton color=\"primary\" (click)=\"confirm()\" [disabled]=\"(useCheckbox && !isConfirmed) || isLoading\">\n {{ config.buttons.next.i18n | translate }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"isSuccessState\">\n <button qdButton color=\"primary\" (click)=\"submit()\">\n {{ (config.buttons.success?.i18n | translate) || (config.buttons.next.i18n | translate) }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"isErrorState\">\n <button qdButton color=\"primary\" (click)=\"submit()\">\n {{ (config.buttons.error?.i18n | translate) || (config.buttons.next.i18n | translate) }}\n </button>\n </ng-container>\n </qd-dialog-action>\n</qd-dialog>\n", styles: [":host .headline{color:#171717;font-size:1rem;font-weight:700;line-height:1.5rem;margin-bottom:.75rem}:host .info{color:#171717;font-size:1rem;font-weight:400;line-height:1.5rem;display:flex}:host .info ::ng-deep .qd-icon{width:.875rem;margin-right:.75rem;font-size:1.25rem;font-weight:300}:host .info ::ng-deep .qd-icon.success{color:#00813a}:host .info ::ng-deep .qd-icon.error{color:#c70023}:host .loading-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background-color:#0003}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdCheckboxesComponent, selector: "qd-checkboxes", inputs: ["formControlName", "values", "config", "data-test-id"], outputs: ["valuesChange", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdNotificationsComponent, selector: "qd-notifications", inputs: ["context"] }, { kind: "component", type: QdSpinnerComponent, selector: "qd-spinner" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
18502
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdDialogConfirmationComponent, isStandalone: false, selector: "qd-dialog-confirmation", inputs: { config: "config", testId: ["data-test-id", "testId"] }, ngImport: i0, template: "<qd-dialog [attr.data-test-id]=\"testId\">\n <div class=\"loading-overlay\" *ngIf=\"isLoading\">\n <qd-spinner></qd-spinner>\n </div>\n\n <div class=\"headline\" *ngIf=\"isInfoState\">{{ config.info.headline.i18n | translate }}</div>\n\n <div class=\"headline\" *ngIf=\"isSuccessState\">\n {{ (config.success.headline.i18n | translate) || (config.info.headline.i18n | translate) }}\n </div>\n\n <div class=\"headline\" *ngIf=\"isErrorState && config.error.headline.i18n\">\n {{ config.error.headline.i18n | translate }}\n </div>\n\n <div class=\"info\">\n <ng-container *ngIf=\"isInfoState\"> {{ config.info.info.i18n | translate }} </ng-container>\n\n <ng-container *ngIf=\"isSuccessState\">\n <qd-icon class=\"success\" [icon]=\"'checkCircleSolid'\"></qd-icon>\n <span>{{ (config.success.info.i18n | translate) || (config.info.info.i18n | translate) }} </span>\n </ng-container>\n\n <ng-container *ngIf=\"isErrorState && config.error?.info?.i18n\">\n <qd-icon class=\"error\" [icon]=\"'timesCircleSolid'\"></qd-icon>\n <span>{{ config.error?.info?.i18n | translate }}</span>\n </ng-container>\n </div>\n\n <div class=\"confirm-content\">\n <ng-container *ngIf=\"isInfoState\">\n <ng-content select=\"[qdDialogConfirmInfo]\"></ng-content>\n <qd-checkboxes\n [attr.data-test-id]=\"testId + '-checkbox'\"\n *ngIf=\"useCheckbox\"\n [config]=\"checkboxConfig\"\n [(values)]=\"confirmChecked\"\n ></qd-checkboxes>\n </ng-container>\n\n <ng-container *ngIf=\"isSuccessState\">\n <ng-content select=\"[qdDialogConfirmSuccess]\"></ng-content>\n </ng-container>\n\n <ng-container *ngIf=\"isErrorState\">\n <ng-content select=\"[qdDialogConfirmError]\"></ng-content>\n </ng-container>\n\n <qd-notifications [context]=\"notificationContext\"></qd-notifications>\n </div>\n\n <qd-dialog-action>\n <ng-container *ngIf=\"isInfoState\">\n <button qdButton qdButtonGhost (click)=\"close()\" [disabled]=\"isLoading\">\n {{ config.buttons.cancel.i18n | translate }}\n </button>\n\n <button qdButton color=\"primary\" (click)=\"confirm()\" [disabled]=\"(useCheckbox && !isConfirmed) || isLoading\">\n {{ config.buttons.next.i18n | translate }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"isSuccessState\">\n <button qdButton color=\"primary\" (click)=\"submit()\">\n {{ (config.buttons.success?.i18n | translate) || (config.buttons.next.i18n | translate) }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"isErrorState\">\n <button qdButton color=\"primary\" (click)=\"submit()\">\n {{ (config.buttons.error?.i18n | translate) || (config.buttons.next.i18n | translate) }}\n </button>\n </ng-container>\n </qd-dialog-action>\n</qd-dialog>\n", styles: [":host .headline{color:#171717;font-size:1rem;font-weight:700;line-height:1.5rem;margin-bottom:.75rem}:host .info{color:#171717;font-size:1rem;font-weight:400;line-height:1.5rem;display:flex}:host .info ::ng-deep .qd-icon{width:.875rem;margin-right:.75rem;font-size:1.25rem;font-weight:300}:host .info ::ng-deep .qd-icon.success{color:#00813a}:host .info ::ng-deep .qd-icon.error{color:#c70023}:host .loading-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background-color:#0003}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdCheckboxesComponent, selector: "qd-checkboxes", inputs: ["formControlName", "values", "config", "data-test-id"], outputs: ["valuesChange", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdNotificationsComponent, selector: "qd-notifications", inputs: ["context"] }, { kind: "component", type: QdSpinnerComponent, selector: "qd-spinner" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
18433
18503
  }
18434
18504
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogConfirmationComponent, decorators: [{
18435
18505
  type: Component,
@@ -18447,24 +18517,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
18447
18517
  args: ['data-test-id']
18448
18518
  }] } });
18449
18519
 
18520
+ class QdPageDialogWithBreadcrumbsComponent {
18521
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageDialogWithBreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18522
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageDialogWithBreadcrumbsComponent, isStandalone: false, selector: "ng-component", ngImport: i0, template: "<qd-dialog>\n <div class=\"wrapper\">\n <qd-breadcrumbs></qd-breadcrumbs>\n <div class=\"router-outlet-wrapper\">\n <router-outlet name=\"dialog\"></router-outlet>\n </div>\n </div>\n</qd-dialog>\n", styles: [".wrapper{display:flex;height:100%;flex-flow:column}qd-breadcrumbs{z-index:99;flex:0 1 auto;padding-right:2.25rem;padding-bottom:.75rem;margin-bottom:-.75rem}.router-outlet-wrapper{position:relative;height:100%;flex:1 1 auto}\n"], dependencies: [{ kind: "directive", type: i1$2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: QdBreadcrumbsComponent, selector: "qd-breadcrumbs" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }] });
18523
+ }
18524
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageDialogWithBreadcrumbsComponent, decorators: [{
18525
+ type: Component,
18526
+ args: [{ standalone: false, template: "<qd-dialog>\n <div class=\"wrapper\">\n <qd-breadcrumbs></qd-breadcrumbs>\n <div class=\"router-outlet-wrapper\">\n <router-outlet name=\"dialog\"></router-outlet>\n </div>\n </div>\n</qd-dialog>\n", styles: [".wrapper{display:flex;height:100%;flex-flow:column}qd-breadcrumbs{z-index:99;flex:0 1 auto;padding-right:2.25rem;padding-bottom:.75rem;margin-bottom:-.75rem}.router-outlet-wrapper{position:relative;height:100%;flex:1 1 auto}\n"] }]
18527
+ }] });
18528
+
18450
18529
  /**
18451
- * @name PendingChangesGuardDirective
18452
- * @description
18453
- * Automatically monitors the status of form changes in QdDialogComponent (Reactive or Template-Driven Forms)
18454
- * by comparing the current form value with its initial value.
18455
- * * The directive automatically marks the form as `pristine` when all values
18456
- * match the initial state, even if the form has been modified in between.
18457
- * * @example
18458
- * // Usage in the Dialog Content Component (Reactive Form):
18459
- * // import { QdPendingChangesGuardDirective } from '...';
18460
- * // template:
18461
- * // <qd-dialog>
18462
- * // <form [formGroup]="myForm" qdPendingChangesGuard>
18463
- * // <input type="text" formControlName="name">
18464
- * // </form>
18465
- * // </qd-dialog>
18530
+ * Tracks pending changes inside a QdDialog by comparing the current form value with the initial value.
18531
+ * Supports both Reactive Forms (FormGroupDirective) and Template-Driven Forms (NgForm).
18532
+ *
18533
+ * Relevant when closing the dialog (X icon or Cancel button):
18534
+ * - if the current value equals the initial value, closing will not trigger a pending-changes warning
18535
+ * - the form is reset to pristine, so the dialog behaves like “unchanged”
18536
+ *
18537
+ * #### **Usage (Reactive Form)**
18538
+ *
18539
+ * ```html
18540
+ * <qd-dialog>
18541
+ * <form [formGroup]="myForm" qdPendingChangesGuard>
18542
+ * <input type="text" formControlName="name" />
18543
+ * </form>
18544
+ * </qd-dialog>
18545
+ * ```
18466
18546
  */
18467
- class PendingChangesGuardDirective {
18547
+ class QdPendingChangesGuardDirective {
18468
18548
  ngForm;
18469
18549
  formGroupDirective;
18470
18550
  changeGuard;
@@ -18503,10 +18583,10 @@ class PendingChangesGuardDirective {
18503
18583
  this.statusSubscription?.unsubscribe();
18504
18584
  this.changeGuard.setPendingChangesStatus(false);
18505
18585
  }
18506
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: PendingChangesGuardDirective, deps: [{ token: i1$4.NgForm, optional: true }, { token: i1$4.FormGroupDirective, optional: true }, { token: QdDialogChangeGuardService }], target: i0.ɵɵFactoryTarget.Directive });
18507
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.17", type: PendingChangesGuardDirective, isStandalone: false, selector: "[qdPendingChangesGuard]", ngImport: i0 });
18586
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPendingChangesGuardDirective, deps: [{ token: i1$4.NgForm, optional: true }, { token: i1$4.FormGroupDirective, optional: true }, { token: QdDialogChangeGuardService }], target: i0.ɵɵFactoryTarget.Directive });
18587
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.17", type: QdPendingChangesGuardDirective, isStandalone: false, selector: "[qdPendingChangesGuard]", ngImport: i0 });
18508
18588
  }
18509
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: PendingChangesGuardDirective, decorators: [{
18589
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPendingChangesGuardDirective, decorators: [{
18510
18590
  type: Directive,
18511
18591
  args: [{
18512
18592
  selector: '[qdPendingChangesGuard]',
@@ -18540,7 +18620,7 @@ class QdCancelDialogComponent {
18540
18620
  this.dialogRef.close(true);
18541
18621
  }
18542
18622
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCancelDialogComponent, deps: [{ token: i1$1.DialogRef }], target: i0.ɵɵFactoryTarget.Component });
18543
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdCancelDialogComponent, isStandalone: false, selector: "qd-cancel-dialog", ngImport: i0, template: "<qd-dialog>\n <qd-text-section>\n <qd-text-section-paragraph>\n {{ i18n | translate }}\n </qd-text-section-paragraph>\n </qd-text-section>\n\n <qd-dialog-action>\n <button\n qdButton\n qdButtonGhost\n color=\"secondary\"\n (click)=\"close()\"\n data-test-id=\"dialog-cancel-confirmation-dialog-close\"\n >\n {{ \"i18n.qd.page.cancel.confirmation.dialog.close\" | translate }}\n </button>\n\n <button qdButton color=\"error\" (click)=\"confirm()\" data-test-id=\"dialog-cancel-confirmation-dialog-proceed\">\n {{ \"i18n.qd.page.cancel.confirmation.dialog.proceed\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", dependencies: [{ kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdTextSectionComponent, selector: "qd-text-section" }, { kind: "component", type: QdTextSectionParagraphComponent, selector: "qd-text-section-paragraph" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
18623
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdCancelDialogComponent, isStandalone: false, selector: "qd-cancel-dialog", ngImport: i0, template: "<qd-dialog>\n <qd-text-section>\n <qd-text-section-paragraph>\n {{ i18n | translate }}\n </qd-text-section-paragraph>\n </qd-text-section>\n\n <qd-dialog-action>\n <button\n qdButton\n qdButtonGhost\n color=\"secondary\"\n (click)=\"close()\"\n data-test-id=\"dialog-cancel-confirmation-dialog-close\"\n >\n {{ \"i18n.qd.page.cancel.confirmation.dialog.close\" | translate }}\n </button>\n\n <button qdButton color=\"error\" (click)=\"confirm()\" data-test-id=\"dialog-cancel-confirmation-dialog-proceed\">\n {{ \"i18n.qd.page.cancel.confirmation.dialog.proceed\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", dependencies: [{ kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdTextSectionComponent, selector: "qd-text-section" }, { kind: "component", type: QdTextSectionParagraphComponent, selector: "qd-text-section-paragraph" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
18544
18624
  }
18545
18625
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCancelDialogComponent, decorators: [{
18546
18626
  type: Component,
@@ -18563,7 +18643,7 @@ class QdDialogModule {
18563
18643
  QdDialogConfirmationSuccessDirective,
18564
18644
  QdDialogRecordStepperComponent,
18565
18645
  QdPageDialogWithBreadcrumbsComponent,
18566
- PendingChangesGuardDirective,
18646
+ QdPendingChangesGuardDirective,
18567
18647
  QdCancelDialogComponent], imports: [CommonModule,
18568
18648
  TranslateModule,
18569
18649
  RouterModule,
@@ -18582,8 +18662,13 @@ class QdDialogModule {
18582
18662
  QdDialogConfirmationErrorDirective,
18583
18663
  QdDialogConfirmationSuccessDirective,
18584
18664
  QdDialogRecordStepperComponent,
18585
- PendingChangesGuardDirective] });
18586
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogModule, imports: [CommonModule,
18665
+ QdPendingChangesGuardDirective] });
18666
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdDialogModule, providers: [
18667
+ {
18668
+ provide: QD_PAGE_DIALOG_WITH_BREADCRUMBS_HOST,
18669
+ useValue: QdPageDialogWithBreadcrumbsComponent
18670
+ }
18671
+ ], imports: [CommonModule,
18587
18672
  TranslateModule,
18588
18673
  RouterModule,
18589
18674
  DialogModule,
@@ -18623,7 +18708,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
18623
18708
  QdDialogConfirmationSuccessDirective,
18624
18709
  QdDialogRecordStepperComponent,
18625
18710
  QdPageDialogWithBreadcrumbsComponent,
18626
- PendingChangesGuardDirective,
18711
+ QdPendingChangesGuardDirective,
18627
18712
  QdCancelDialogComponent
18628
18713
  ],
18629
18714
  exports: [
@@ -18634,7 +18719,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
18634
18719
  QdDialogConfirmationErrorDirective,
18635
18720
  QdDialogConfirmationSuccessDirective,
18636
18721
  QdDialogRecordStepperComponent,
18637
- PendingChangesGuardDirective
18722
+ QdPendingChangesGuardDirective
18723
+ ],
18724
+ providers: [
18725
+ {
18726
+ provide: QD_PAGE_DIALOG_WITH_BREADCRUMBS_HOST,
18727
+ useValue: QdPageDialogWithBreadcrumbsComponent
18728
+ }
18638
18729
  ]
18639
18730
  }]
18640
18731
  }] });
@@ -18895,11 +18986,11 @@ class QdFileCollectorAllowedFilesDescriptionComponent {
18895
18986
  this.fileCollectorService = fileCollectorService;
18896
18987
  }
18897
18988
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileCollectorAllowedFilesDescriptionComponent, deps: [{ token: QdFileCollectorService }], target: i0.ɵɵFactoryTarget.Component });
18898
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFileCollectorAllowedFilesDescriptionComponent, isStandalone: false, selector: "qd-file-collector-allowed-files-description", ngImport: i0, template: "<span *ngIf=\"allowedFilesDescriptionI18n\"\n >{{ allowedFilesDescriptionI18n | translate | placeholder : \"allowedFileTypes\" : allowedFileTypes.join(', ') |\n placeholder : \"maxFileSize\" : (maxFileSizeInBytes | filesize | async) }}</span\n>\n<ng-container *ngIf=\"allowedFilesDescriptionI18n === undefined\">\n <span *ngIf=\"allowedFileTypes.length > 0\"\n >{{ \"i18n.qd.fileCollector.allowedFilesDescription.allowedFileTypes\" | translate | placeholder : \"allowedFileTypes\"\n : allowedFileTypes.join(', ') }}</span\n >\n <span *ngIf=\"maxFileSizeInBytes\"\n >{{ \"i18n.qd.fileCollector.allowedFilesDescription.maxFileSize\" | translate | placeholder : \"maxFileSize\" :\n (maxFileSizeInBytes | filesize | async) }}</span\n >\n</ng-container>\n", styles: [":host span{color:#333;font-size:.875rem;font-weight:400;line-height:1.3125rem;display:block;white-space:pre-wrap}:host span:last-child{margin-bottom:1rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "pipe", type: QdPlaceholderPipe, name: "placeholder" }, { kind: "pipe", type: QdFileSizePipe, name: "filesize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
18989
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFileCollectorAllowedFilesDescriptionComponent, isStandalone: false, selector: "qd-file-collector-allowed-files-description", ngImport: i0, template: "<span *ngIf=\"allowedFilesDescriptionI18n\">{{\n allowedFilesDescriptionI18n\n | translate\n | placeholder : \"allowedFileTypes\" : allowedFileTypes.join(\", \")\n | placeholder : \"maxFileSize\" : (maxFileSizeInBytes | filesize | async)\n}}</span>\n<ng-container *ngIf=\"allowedFilesDescriptionI18n === undefined\">\n <span *ngIf=\"allowedFileTypes.length > 0\">{{\n \"i18n.qd.fileCollector.allowedFilesDescription.allowedFileTypes\"\n | translate\n | placeholder : \"allowedFileTypes\" : allowedFileTypes.join(\", \")\n }}</span>\n <span *ngIf=\"maxFileSizeInBytes\">{{\n \"i18n.qd.fileCollector.allowedFilesDescription.maxFileSize\"\n | translate\n | placeholder : \"maxFileSize\" : (maxFileSizeInBytes | filesize | async)\n }}</span>\n</ng-container>\n", styles: [":host span{color:#333;font-size:.875rem;font-weight:400;line-height:1.3125rem;display:block;white-space:pre-wrap}:host span:last-child{margin-bottom:1rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }, { kind: "pipe", type: QdPlaceholderPipe, name: "placeholder" }, { kind: "pipe", type: QdFileSizePipe, name: "filesize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
18899
18990
  }
18900
18991
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileCollectorAllowedFilesDescriptionComponent, decorators: [{
18901
18992
  type: Component,
18902
- args: [{ selector: 'qd-file-collector-allowed-files-description', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<span *ngIf=\"allowedFilesDescriptionI18n\"\n >{{ allowedFilesDescriptionI18n | translate | placeholder : \"allowedFileTypes\" : allowedFileTypes.join(', ') |\n placeholder : \"maxFileSize\" : (maxFileSizeInBytes | filesize | async) }}</span\n>\n<ng-container *ngIf=\"allowedFilesDescriptionI18n === undefined\">\n <span *ngIf=\"allowedFileTypes.length > 0\"\n >{{ \"i18n.qd.fileCollector.allowedFilesDescription.allowedFileTypes\" | translate | placeholder : \"allowedFileTypes\"\n : allowedFileTypes.join(', ') }}</span\n >\n <span *ngIf=\"maxFileSizeInBytes\"\n >{{ \"i18n.qd.fileCollector.allowedFilesDescription.maxFileSize\" | translate | placeholder : \"maxFileSize\" :\n (maxFileSizeInBytes | filesize | async) }}</span\n >\n</ng-container>\n", styles: [":host span{color:#333;font-size:.875rem;font-weight:400;line-height:1.3125rem;display:block;white-space:pre-wrap}:host span:last-child{margin-bottom:1rem}\n"] }]
18993
+ args: [{ selector: 'qd-file-collector-allowed-files-description', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<span *ngIf=\"allowedFilesDescriptionI18n\">{{\n allowedFilesDescriptionI18n\n | translate\n | placeholder : \"allowedFileTypes\" : allowedFileTypes.join(\", \")\n | placeholder : \"maxFileSize\" : (maxFileSizeInBytes | filesize | async)\n}}</span>\n<ng-container *ngIf=\"allowedFilesDescriptionI18n === undefined\">\n <span *ngIf=\"allowedFileTypes.length > 0\">{{\n \"i18n.qd.fileCollector.allowedFilesDescription.allowedFileTypes\"\n | translate\n | placeholder : \"allowedFileTypes\" : allowedFileTypes.join(\", \")\n }}</span>\n <span *ngIf=\"maxFileSizeInBytes\">{{\n \"i18n.qd.fileCollector.allowedFilesDescription.maxFileSize\"\n | translate\n | placeholder : \"maxFileSize\" : (maxFileSizeInBytes | filesize | async)\n }}</span>\n</ng-container>\n", styles: [":host span{color:#333;font-size:.875rem;font-weight:400;line-height:1.3125rem;display:block;white-space:pre-wrap}:host span:last-child{margin-bottom:1rem}\n"] }]
18903
18994
  }], ctorParameters: () => [{ type: QdFileCollectorService }] });
18904
18995
 
18905
18996
  /**
@@ -18960,7 +19051,7 @@ class QdFileCollectorDialogItemProgressComponent {
18960
19051
  }
18961
19052
  QdUploadState = QdUploadProgressState;
18962
19053
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileCollectorDialogItemProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18963
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFileCollectorDialogItemProgressComponent, isStandalone: false, selector: "qd-file-collector-dialog-item-progress", inputs: { progress: "progress", error: "error" }, host: { classAttribute: "qd-file-collector-dialog-item-progress" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"uploadState$ | async as uploadState\">\n <span\n [class]=\"'upload-progress-bar-container'\"\n *ngIf=\"\n [QdUploadState.STARTING, QdUploadState.IN_PROGRESS, QdUploadState.FINISHING].includes(uploadState);\n else completed\n \"\n >\n <span\n [ngClass]=\"{\n 'upload-progress-bar-progress': true,\n filled: [QdUploadState.IN_PROGRESS, QdUploadState.FINISHING].includes(uploadState),\n success: QdUploadState.FINISHING === uploadState\n }\"\n [class]=\"'upload-progress-bar-progress'\"\n [ngStyle]=\"{ minWidth: progress + '%' }\"\n >\n {{ progress ? progress : 0 }}%\n </span>\n </span>\n <ng-template #completed>\n <span [class]=\"'upload-state-chip ' + uploadState\">\n {{ \"i18n.qd.fileCollector.uploadState.\" + uploadState | translate }}\n </span>\n </ng-template>\n</ng-container>\n", styles: [":host{position:relative;display:flex;margin-top:.0625rem}:host .upload-progress-bar-container{width:12.5rem}:host .upload-progress-bar-progress,:host .upload-state-chip{color:#e97e00;font-size:.625rem;font-weight:500;line-height:1rem;display:inline-block;padding-right:.375rem;padding-left:.5rem;border:solid .0625rem rgb(233,126,0);border-radius:.5rem;background:#fff;transition:min-width 1s}:host .upload-progress-bar-progress.filled,:host .upload-state-chip.filled{border-color:#e97e00;background:#e97e00;color:#fff}:host .upload-progress-bar-progress.success,:host .upload-state-chip.success{border-color:#00813a;background:#fff;color:#00813a}:host .upload-progress-bar-progress.success.filled,:host .upload-state-chip.success.filled{border-color:#00813a;background:#00813a;color:#fff}:host .upload-progress-bar-progress.error,:host .upload-state-chip.error{border-color:#c70023;background:#fff;color:#c70023}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
19054
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFileCollectorDialogItemProgressComponent, isStandalone: false, selector: "qd-file-collector-dialog-item-progress", inputs: { progress: "progress", error: "error" }, host: { classAttribute: "qd-file-collector-dialog-item-progress" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"uploadState$ | async as uploadState\">\n <span\n [class]=\"'upload-progress-bar-container'\"\n *ngIf=\"\n [QdUploadState.STARTING, QdUploadState.IN_PROGRESS, QdUploadState.FINISHING].includes(uploadState);\n else completed\n \"\n >\n <span\n [ngClass]=\"{\n 'upload-progress-bar-progress': true,\n filled: [QdUploadState.IN_PROGRESS, QdUploadState.FINISHING].includes(uploadState),\n success: QdUploadState.FINISHING === uploadState\n }\"\n [class]=\"'upload-progress-bar-progress'\"\n [ngStyle]=\"{ minWidth: progress + '%' }\"\n >\n {{ progress ? progress : 0 }}%\n </span>\n </span>\n <ng-template #completed>\n <span [class]=\"'upload-state-chip ' + uploadState\">\n {{ \"i18n.qd.fileCollector.uploadState.\" + uploadState | translate }}\n </span>\n </ng-template>\n</ng-container>\n", styles: [":host{position:relative;display:flex;margin-top:.0625rem}:host .upload-progress-bar-container{width:12.5rem}:host .upload-progress-bar-progress,:host .upload-state-chip{color:#e97e00;font-size:.625rem;font-weight:500;line-height:1rem;display:inline-block;padding-right:.375rem;padding-left:.5rem;border:solid .0625rem rgb(233,126,0);border-radius:.5rem;background:#fff;transition:min-width 1s}:host .upload-progress-bar-progress.filled,:host .upload-state-chip.filled{border-color:#e97e00;background:#e97e00;color:#fff}:host .upload-progress-bar-progress.success,:host .upload-state-chip.success{border-color:#00813a;background:#fff;color:#00813a}:host .upload-progress-bar-progress.success.filled,:host .upload-state-chip.success.filled{border-color:#00813a;background:#00813a;color:#fff}:host .upload-progress-bar-progress.error,:host .upload-state-chip.error{border-color:#c70023;background:#fff;color:#c70023}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
18964
19055
  }
18965
19056
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileCollectorDialogItemProgressComponent, decorators: [{
18966
19057
  type: Component,
@@ -18992,11 +19083,11 @@ class QdFileCollectorDialogItemErrorComponent {
18992
19083
  this.fileCollectorService = fileCollectorService;
18993
19084
  }
18994
19085
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileCollectorDialogItemErrorComponent, deps: [{ token: QdFileCollectorService }], target: i0.ɵɵFactoryTarget.Component });
18995
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFileCollectorDialogItemErrorComponent, isStandalone: false, selector: "qd-file-collector-dialog-item-error", inputs: { error: "error" }, ngImport: i0, template: "<span *ngIf=\"error.message; else errorMessageNotGiven\">{{ error.message }}</span>\n<ng-template #errorMessageNotGiven [ngSwitch]=\"error.type\">\n <span *ngSwitchCase=\"QdUploadErrorType.INVALID_MIME_TYPE\">{{\n invalidMimeTypeErrorMessageI18n || \"i18n.qd.fileCollector.invalid.fileType\" | translate\n }}</span>\n <span *ngSwitchCase=\"QdUploadErrorType.INVALID_FILE_SIZE\">{{\n \"i18n.qd.fileCollector.invalid.fileSize\"\n | translate\n | placeholder: \"maxFileSize\" : (maxFileSizeInBytes | filesize | async)\n }}</span>\n <span *ngSwitchCase=\"QdUploadErrorType.INVALID_FILE_NAME\">{{\n invalidFileNameErrorMessageI18n || \"i18n.qd.fileCollector.invalid.fileName\" | translate\n }}</span>\n <span *ngSwitchCase=\"QdUploadErrorType.UNKNOWN_ERROR\">{{ \"i18n.qd.fileCollector.invalid.unknown\" | translate }}</span>\n</ng-template>\n", styles: [":host{display:flex;width:100%;align-items:center}:host span{color:#c70023}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "pipe", type: QdPlaceholderPipe, name: "placeholder" }, { kind: "pipe", type: QdFileSizePipe, name: "filesize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
19086
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFileCollectorDialogItemErrorComponent, isStandalone: false, selector: "qd-file-collector-dialog-item-error", inputs: { error: "error" }, ngImport: i0, template: "<span *ngIf=\"error.message; else errorMessageNotGiven\">{{ error.message }}</span>\n<ng-template #errorMessageNotGiven [ngSwitch]=\"error.type\">\n <span *ngSwitchCase=\"QdUploadErrorType.INVALID_MIME_TYPE\">{{\n invalidMimeTypeErrorMessageI18n || \"i18n.qd.fileCollector.invalid.fileType\" | translate\n }}</span>\n <span *ngSwitchCase=\"QdUploadErrorType.INVALID_FILE_SIZE\">{{\n \"i18n.qd.fileCollector.invalid.fileSize\"\n | translate\n | placeholder : \"maxFileSize\" : (maxFileSizeInBytes | filesize | async)\n }}</span>\n <span *ngSwitchCase=\"QdUploadErrorType.INVALID_FILE_NAME\">{{\n invalidFileNameErrorMessageI18n || \"i18n.qd.fileCollector.invalid.fileName\" | translate\n }}</span>\n <span *ngSwitchCase=\"QdUploadErrorType.UNKNOWN_ERROR\">{{ \"i18n.qd.fileCollector.invalid.unknown\" | translate }}</span>\n</ng-template>\n", styles: [":host{display:flex;width:100%;align-items:center}:host span{color:#c70023}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }, { kind: "pipe", type: QdPlaceholderPipe, name: "placeholder" }, { kind: "pipe", type: QdFileSizePipe, name: "filesize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
18996
19087
  }
18997
19088
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileCollectorDialogItemErrorComponent, decorators: [{
18998
19089
  type: Component,
18999
- args: [{ selector: 'qd-file-collector-dialog-item-error', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<span *ngIf=\"error.message; else errorMessageNotGiven\">{{ error.message }}</span>\n<ng-template #errorMessageNotGiven [ngSwitch]=\"error.type\">\n <span *ngSwitchCase=\"QdUploadErrorType.INVALID_MIME_TYPE\">{{\n invalidMimeTypeErrorMessageI18n || \"i18n.qd.fileCollector.invalid.fileType\" | translate\n }}</span>\n <span *ngSwitchCase=\"QdUploadErrorType.INVALID_FILE_SIZE\">{{\n \"i18n.qd.fileCollector.invalid.fileSize\"\n | translate\n | placeholder: \"maxFileSize\" : (maxFileSizeInBytes | filesize | async)\n }}</span>\n <span *ngSwitchCase=\"QdUploadErrorType.INVALID_FILE_NAME\">{{\n invalidFileNameErrorMessageI18n || \"i18n.qd.fileCollector.invalid.fileName\" | translate\n }}</span>\n <span *ngSwitchCase=\"QdUploadErrorType.UNKNOWN_ERROR\">{{ \"i18n.qd.fileCollector.invalid.unknown\" | translate }}</span>\n</ng-template>\n", styles: [":host{display:flex;width:100%;align-items:center}:host span{color:#c70023}\n"] }]
19090
+ args: [{ selector: 'qd-file-collector-dialog-item-error', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<span *ngIf=\"error.message; else errorMessageNotGiven\">{{ error.message }}</span>\n<ng-template #errorMessageNotGiven [ngSwitch]=\"error.type\">\n <span *ngSwitchCase=\"QdUploadErrorType.INVALID_MIME_TYPE\">{{\n invalidMimeTypeErrorMessageI18n || \"i18n.qd.fileCollector.invalid.fileType\" | translate\n }}</span>\n <span *ngSwitchCase=\"QdUploadErrorType.INVALID_FILE_SIZE\">{{\n \"i18n.qd.fileCollector.invalid.fileSize\"\n | translate\n | placeholder : \"maxFileSize\" : (maxFileSizeInBytes | filesize | async)\n }}</span>\n <span *ngSwitchCase=\"QdUploadErrorType.INVALID_FILE_NAME\">{{\n invalidFileNameErrorMessageI18n || \"i18n.qd.fileCollector.invalid.fileName\" | translate\n }}</span>\n <span *ngSwitchCase=\"QdUploadErrorType.UNKNOWN_ERROR\">{{ \"i18n.qd.fileCollector.invalid.unknown\" | translate }}</span>\n</ng-template>\n", styles: [":host{display:flex;width:100%;align-items:center}:host span{color:#c70023}\n"] }]
19000
19091
  }], ctorParameters: () => [{ type: QdFileCollectorService }], propDecorators: { error: [{
19001
19092
  type: Input
19002
19093
  }] } });
@@ -19061,7 +19152,7 @@ class QdFileCollectorDialogComponent {
19061
19152
  return !!fileUpload.error || fileUpload.progress === 100;
19062
19153
  }
19063
19154
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileCollectorDialogComponent, deps: [{ token: QdFileCollectorService, skipSelf: true }, { token: QdFileCollectorService }, { token: i1$1.DialogRef }], target: i0.ɵɵFactoryTarget.Component });
19064
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFileCollectorDialogComponent, isStandalone: false, selector: "qd-file-collector-dialog", providers: [QdFileCollectorService], ngImport: i0, template: "<qd-dialog>\n <qd-file-collector-dialog-item\n *ngFor=\"let fileUpload of this.fileUploads\"\n [progress]=\"fileUpload.progress\"\n [collectedFile]=\"fileUpload.collectedFile\"\n [error]=\"fileUpload.error\"\n ></qd-file-collector-dialog-item>\n <qd-dialog-action>\n <button qdButton (click)=\"close()\" [disabled]=\"isCloseButtonDisabled()\">\n {{ \"i18n.qd.fileCollector.button.finish\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "component", type: QdFileCollectorDialogItemComponent, selector: "qd-file-collector-dialog-item", inputs: ["progress", "collectedFile", "error"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
19155
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFileCollectorDialogComponent, isStandalone: false, selector: "qd-file-collector-dialog", providers: [QdFileCollectorService], ngImport: i0, template: "<qd-dialog>\n <qd-file-collector-dialog-item\n *ngFor=\"let fileUpload of this.fileUploads\"\n [progress]=\"fileUpload.progress\"\n [collectedFile]=\"fileUpload.collectedFile\"\n [error]=\"fileUpload.error\"\n ></qd-file-collector-dialog-item>\n <qd-dialog-action>\n <button qdButton (click)=\"close()\" [disabled]=\"isCloseButtonDisabled()\">\n {{ \"i18n.qd.fileCollector.button.finish\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "component", type: QdFileCollectorDialogItemComponent, selector: "qd-file-collector-dialog-item", inputs: ["progress", "collectedFile", "error"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
19065
19156
  }
19066
19157
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileCollectorDialogComponent, decorators: [{
19067
19158
  type: Component,
@@ -19129,6 +19220,7 @@ class QdFileTypeService {
19129
19220
  PPTX: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
19130
19221
  PPS: ['application/mspowerpoint', 'application/vnd.ms-powerpoint'],
19131
19222
  ODP: 'application/vnd.oasis.opendocument.presentation',
19223
+ MSG: 'application/vnd.ms-outlook',
19132
19224
  ZIP: [
19133
19225
  'application/x-compressed',
19134
19226
  'application/x-zip-compressed',
@@ -19245,13 +19337,13 @@ class QdFileDeleteDialogComponent {
19245
19337
  delete() {
19246
19338
  this.dialogRef.close(true);
19247
19339
  }
19248
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileDeleteDialogComponent, deps: [{ token: i1$1.DialogRef }, { token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
19249
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFileDeleteDialogComponent, isStandalone: false, selector: "qd-file-delete-dialog", ngImport: i0, template: "<qd-dialog>\n {{ deleteHint }}\n\n <qd-dialog-action>\n <button (click)=\"cancel()\" qdButton qdButtonGhost color=\"secondary\">\n {{ \"i18n.qd.fileCollector.deleteConfirmation.button.cancel\" | translate }}\n </button>\n\n <button (click)=\"delete()\" qdButton color=\"error\">\n {{ \"i18n.qd.fileCollector.deleteConfirmation.button.delete\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", styles: [":host{overflow-wrap:break-word}\n"], dependencies: [{ kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
19340
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileDeleteDialogComponent, deps: [{ token: i1$1.DialogRef }, { token: i1$3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
19341
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFileDeleteDialogComponent, isStandalone: false, selector: "qd-file-delete-dialog", ngImport: i0, template: "<qd-dialog>\n {{ deleteHint }}\n\n <qd-dialog-action>\n <button (click)=\"cancel()\" qdButton qdButtonGhost color=\"secondary\">\n {{ \"i18n.qd.fileCollector.deleteConfirmation.button.cancel\" | translate }}\n </button>\n\n <button (click)=\"delete()\" qdButton color=\"error\">\n {{ \"i18n.qd.fileCollector.deleteConfirmation.button.delete\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", styles: [":host{overflow-wrap:break-word}\n"], dependencies: [{ kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
19250
19342
  }
19251
19343
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileDeleteDialogComponent, decorators: [{
19252
19344
  type: Component,
19253
19345
  args: [{ selector: 'qd-file-delete-dialog', standalone: false, template: "<qd-dialog>\n {{ deleteHint }}\n\n <qd-dialog-action>\n <button (click)=\"cancel()\" qdButton qdButtonGhost color=\"secondary\">\n {{ \"i18n.qd.fileCollector.deleteConfirmation.button.cancel\" | translate }}\n </button>\n\n <button (click)=\"delete()\" qdButton color=\"error\">\n {{ \"i18n.qd.fileCollector.deleteConfirmation.button.delete\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", styles: [":host{overflow-wrap:break-word}\n"] }]
19254
- }], ctorParameters: () => [{ type: i1$1.DialogRef }, { type: i1$2.TranslateService }] });
19346
+ }], ctorParameters: () => [{ type: i1$1.DialogRef }, { type: i1$3.TranslateService }] });
19255
19347
 
19256
19348
  // @ts-strict-ignore
19257
19349
  class QdFileCollectorItemToolsComponent {
@@ -19334,7 +19426,7 @@ class QdUploadTimestampPipe {
19334
19426
  timeStyle: 'short'
19335
19427
  }).format(value);
19336
19428
  }
19337
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdUploadTimestampPipe, deps: [{ token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe });
19429
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdUploadTimestampPipe, deps: [{ token: i1$3.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe });
19338
19430
  static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: QdUploadTimestampPipe, isStandalone: false, name: "uploadTimestamp" });
19339
19431
  }
19340
19432
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdUploadTimestampPipe, decorators: [{
@@ -19343,7 +19435,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
19343
19435
  name: 'uploadTimestamp',
19344
19436
  standalone: false
19345
19437
  }]
19346
- }], ctorParameters: () => [{ type: i1$2.TranslateService }] });
19438
+ }], ctorParameters: () => [{ type: i1$3.TranslateService }] });
19347
19439
 
19348
19440
  // @ts-strict-ignore
19349
19441
  class QdFileCollectorUploadTimestampComponent {
@@ -19591,7 +19683,7 @@ class QdFileCollectorComponent {
19591
19683
  console.error(`QD-UI | QdFileCollector - ${message}`);
19592
19684
  }
19593
19685
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileCollectorComponent, deps: [{ token: QdSectionToolbarActionService, optional: true }, { token: QdEventBrokerService, optional: true }, { token: QdFileCollectorService }, { token: QdFileCollectorValidationService }, { token: QdFileTypeService }, { token: QdDialogService }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
19594
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFileCollectorComponent, isStandalone: false, selector: "qd-file-collector", inputs: { config: "config", testId: ["data-test-id", "testId"] }, providers: [QdFileCollectorService, QdFileCollectorValidationService], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<button\n qdButton\n qdButtonGhost\n icon=\"plus\"\n *ngIf=\"canShowAddButton\"\n (click)=\"clickFileInput()\"\n [data-test-id]=\"testId + '-button-add-new'\"\n>\n {{ config?.standaloneAddNewLabel?.i18n || \"i18n.qd.fileCollector.standalone.addNew\" | translate }}\n</button>\n\n<input\n [disabled]=\"config?.readonly || config?.viewonly\"\n type=\"file\"\n (change)=\"handleFiles($event)\"\n #fileInput\n hidden\n multiple=\"multiple\"\n/>\n\n<qd-file-collector-allowed-files-description\n *ngIf=\"!config?.readonly && !config?.viewonly\"\n></qd-file-collector-allowed-files-description>\n\n<ng-container *ngFor=\"let fileUpload of this.fileUploads\">\n <qd-file-collector-item\n *ngIf=\"!fileUpload.error && fileUpload.progress === 100\"\n [progress]=\"fileUpload.progress\"\n [newlyUploaded]=\"fileUpload.newlyUploaded\"\n [collectedFile]=\"fileUpload.collectedFile\"\n [error]=\"fileUpload.error\"\n [readonly]=\"config?.readonly\"\n [viewonly]=\"config?.viewonly\"\n [downloadFilesWithHttpClient]=\"config?.downloadFilesWithHttpClient\"\n ></qd-file-collector-item>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column}:host>.qd-button{align-self:end;margin-bottom:1.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdFileCollectorAllowedFilesDescriptionComponent, selector: "qd-file-collector-allowed-files-description" }, { kind: "component", type: QdFileCollectorItemComponent, selector: "qd-file-collector-item", inputs: ["progress", "newlyUploaded", "collectedFile", "error", "readonly", "viewonly", "downloadFilesWithHttpClient"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
19686
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFileCollectorComponent, isStandalone: false, selector: "qd-file-collector", inputs: { config: "config", testId: ["data-test-id", "testId"] }, providers: [QdFileCollectorService, QdFileCollectorValidationService], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<button\n qdButton\n qdButtonGhost\n icon=\"plus\"\n *ngIf=\"canShowAddButton\"\n (click)=\"clickFileInput()\"\n [data-test-id]=\"testId + '-button-add-new'\"\n>\n {{ config?.standaloneAddNewLabel?.i18n || \"i18n.qd.fileCollector.standalone.addNew\" | translate }}\n</button>\n\n<input\n [disabled]=\"config?.readonly || config?.viewonly\"\n type=\"file\"\n (change)=\"handleFiles($event)\"\n #fileInput\n hidden\n multiple=\"multiple\"\n/>\n\n<qd-file-collector-allowed-files-description\n *ngIf=\"!config?.readonly && !config?.viewonly\"\n></qd-file-collector-allowed-files-description>\n\n<ng-container *ngFor=\"let fileUpload of this.fileUploads\">\n <qd-file-collector-item\n *ngIf=\"!fileUpload.error && fileUpload.progress === 100\"\n [progress]=\"fileUpload.progress\"\n [newlyUploaded]=\"fileUpload.newlyUploaded\"\n [collectedFile]=\"fileUpload.collectedFile\"\n [error]=\"fileUpload.error\"\n [readonly]=\"config?.readonly\"\n [viewonly]=\"config?.viewonly\"\n [downloadFilesWithHttpClient]=\"config?.downloadFilesWithHttpClient\"\n ></qd-file-collector-item>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column}:host>.qd-button{align-self:end;margin-bottom:1.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdFileCollectorAllowedFilesDescriptionComponent, selector: "qd-file-collector-allowed-files-description" }, { kind: "component", type: QdFileCollectorItemComponent, selector: "qd-file-collector-item", inputs: ["progress", "newlyUploaded", "collectedFile", "error", "readonly", "viewonly", "downloadFilesWithHttpClient"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
19595
19687
  }
19596
19688
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFileCollectorComponent, decorators: [{
19597
19689
  type: Component,
@@ -19718,7 +19810,7 @@ class LocaleDatePipe {
19718
19810
  transform(timestamp, isDateTime, isTimePlaceholderSelected) {
19719
19811
  return this.currentLanguage.pipe(map(lang => this.formatDate(timestamp, lang, isDateTime, isTimePlaceholderSelected)));
19720
19812
  }
19721
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: LocaleDatePipe, deps: [{ token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe });
19813
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: LocaleDatePipe, deps: [{ token: i1$3.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe });
19722
19814
  static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: LocaleDatePipe, isStandalone: false, name: "localeDate", pure: false });
19723
19815
  }
19724
19816
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: LocaleDatePipe, decorators: [{
@@ -19728,7 +19820,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
19728
19820
  pure: false,
19729
19821
  standalone: false
19730
19822
  }]
19731
- }], ctorParameters: () => [{ type: i1$2.TranslateService }] });
19823
+ }], ctorParameters: () => [{ type: i1$3.TranslateService }] });
19732
19824
 
19733
19825
  const getFilter = (state, filterId) => get$1(state, filterId, {});
19734
19826
  const getNewFilter = (state, filterId) => cloneDeep(getFilter(state, filterId));
@@ -20361,7 +20453,7 @@ class QdFilterService {
20361
20453
  this.postBodySubjects[filterId] = new ReplaySubject(1);
20362
20454
  return this.postBodySubjects[filterId];
20363
20455
  }
20364
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterService, deps: [{ token: i1$7.Store }, { token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
20456
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterService, deps: [{ token: i1$7.Store }, { token: i1$3.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
20365
20457
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterService, providedIn: 'root' });
20366
20458
  }
20367
20459
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterService, decorators: [{
@@ -20369,7 +20461,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
20369
20461
  args: [{
20370
20462
  providedIn: 'root'
20371
20463
  }]
20372
- }], ctorParameters: () => [{ type: i1$7.Store }, { type: i1$2.TranslateService }] });
20464
+ }], ctorParameters: () => [{ type: i1$7.Store }, { type: i1$3.TranslateService }] });
20373
20465
 
20374
20466
  // @ts-strict-ignore
20375
20467
  class QdFilterItemBooleanComponent {
@@ -20682,7 +20774,7 @@ class QdFilterItemDateCategoryComponent {
20682
20774
  this.item$ = this.filterService.getItemById$(this.filterId, this.categoryIndex, this.itemIndex);
20683
20775
  }
20684
20776
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterItemDateCategoryComponent, deps: [{ token: QdFilterService }], target: i0.ɵɵFactoryTarget.Component });
20685
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFilterItemDateCategoryComponent, isStandalone: false, selector: "qd-filter-category-date", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", timePickerConfig: "timePickerConfig", testId: ["data-test-id", "testId"] }, host: { classAttribute: "qd-filter__category-date" }, ngImport: i0, template: "{{ this.i18n$ | async | translate }}\n{{ \"i18n.qd.filter.date.on\" | translate }}\n\n<qd-filter-item-date\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"itemIndex\"\n [data-test-id]=\"testId + '-item'\"\n [timePickerConfig]=\"timePickerConfig\"\n (clickTimePlaceholder)=\"handleClickTimePlaceholder($event)\"\n></qd-filter-item-date>\n\n<qd-chip\n *ngIf=\"(item$ | async)?.active && (item$ | async)?.item\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"removeItem($event)\"\n [data]=\"itemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + (item$ | async).item\"\n>\n {{ (item$ | async).item | localeDate : !!timePickerConfig : timePlaceholderSelected | async }}\n</qd-chip>\n", styles: [":host{display:flex;align-items:center;padding-right:.75rem;padding-left:.75rem;color:#757575;line-height:2.125rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: QdFilterItemDateComponent, selector: "qd-filter-item-date", inputs: ["filterId", "categoryIndex", "itemIndex", "timePickerConfig", "data-test-id"], outputs: ["clickTimePlaceholder"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "pipe", type: LocaleDatePipe, name: "localeDate" }] });
20777
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFilterItemDateCategoryComponent, isStandalone: false, selector: "qd-filter-category-date", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", timePickerConfig: "timePickerConfig", testId: ["data-test-id", "testId"] }, host: { classAttribute: "qd-filter__category-date" }, ngImport: i0, template: "{{ this.i18n$ | async | translate }}\n{{ \"i18n.qd.filter.date.on\" | translate }}\n\n<qd-filter-item-date\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"itemIndex\"\n [data-test-id]=\"testId + '-item'\"\n [timePickerConfig]=\"timePickerConfig\"\n (clickTimePlaceholder)=\"handleClickTimePlaceholder($event)\"\n></qd-filter-item-date>\n\n<qd-chip\n *ngIf=\"(item$ | async)?.active && (item$ | async)?.item\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"removeItem($event)\"\n [data]=\"itemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + (item$ | async).item\"\n>\n {{ (item$ | async).item | localeDate : !!timePickerConfig : timePlaceholderSelected | async }}\n</qd-chip>\n", styles: [":host{display:flex;align-items:center;padding-right:.75rem;padding-left:.75rem;color:#757575;line-height:2.125rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: QdFilterItemDateComponent, selector: "qd-filter-item-date", inputs: ["filterId", "categoryIndex", "itemIndex", "timePickerConfig", "data-test-id"], outputs: ["clickTimePlaceholder"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }, { kind: "pipe", type: LocaleDatePipe, name: "localeDate" }] });
20686
20778
  }
20687
20779
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterItemDateCategoryComponent, decorators: [{
20688
20780
  type: Component,
@@ -20847,7 +20939,7 @@ class QdFilterItemDateRangeCategoryComponent {
20847
20939
  this[targetMember] = this.filterService.getItemById$(this.filterId, this.categoryIndex, index);
20848
20940
  }
20849
20941
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterItemDateRangeCategoryComponent, deps: [{ token: QdFilterService }], target: i0.ɵɵFactoryTarget.Component });
20850
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFilterItemDateRangeCategoryComponent, isStandalone: false, selector: "qd-filter-category-date-range", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", testId: ["data-test-id", "testId"], timePickerConfig: "timePickerConfig" }, host: { classAttribute: "qd-filter__category-date-range" }, ngImport: i0, template: "{{ this.i18n$ | async | translate }}\n\n<span class=\"qd-filter__item-date-range__label\">{{ \"i18n.qd.filter.dateRange.from\" | translate }}</span>\n\n<qd-filter-item-date-range\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"fromItemIndex\"\n [data-test-id]=\"testId + '-item-date-from'\"\n [timePickerConfig]=\"fromItemTimePickerConfig\"\n (clickTimePlaceholder)=\"handleFromTimePlaceholderClicked($event)\"\n></qd-filter-item-date-range>\n\n<qd-chip\n *ngIf=\"(fromItem$ | async)?.active && (fromItem$ | async)?.item\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"removeItem($event)\"\n [data]=\"fromItemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + (fromItem$ | async).item\"\n>\n {{ (fromItem$ | async).item | localeDate : !!timePickerConfig : fromItemTimePlaceholderClicked | async }}\n</qd-chip>\n\n<span class=\"qd-filter__item-date-range__label\">{{ \"i18n.qd.filter.dateRange.until\" | translate }}</span>\n\n<qd-filter-item-date-range\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"untilItemIndex\"\n [data-test-id]=\"testId + '-item-date-until'\"\n [timePickerConfig]=\"untilItemTimePickerConfig\"\n (clickTimePlaceholder)=\"handleUntilTimePlaceholderClicked($event)\"\n></qd-filter-item-date-range>\n\n<qd-chip\n *ngIf=\"(untilItem$ | async)?.active && (untilItem$ | async)?.item\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"removeItem($event)\"\n [data]=\"untilItemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + (untilItem$ | async).item\"\n>\n {{ (untilItem$ | async).item | localeDate : !!timePickerConfig : untilItemTimePlaceholderClicked | async }}\n</qd-chip>\n", styles: [":host{display:flex;align-items:center;padding-right:.75rem;padding-left:.75rem;color:#757575;line-height:2.125rem}:host .qd-filter__item-date-range__label{margin-left:.25rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: QdFilterItemDateRangeComponent, selector: "qd-filter-item-date-range", inputs: ["filterId", "categoryIndex", "itemIndex", "timePickerConfig", "data-test-id"], outputs: ["clickTimePlaceholder"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "pipe", type: LocaleDatePipe, name: "localeDate" }] });
20942
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFilterItemDateRangeCategoryComponent, isStandalone: false, selector: "qd-filter-category-date-range", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", testId: ["data-test-id", "testId"], timePickerConfig: "timePickerConfig" }, host: { classAttribute: "qd-filter__category-date-range" }, ngImport: i0, template: "{{ this.i18n$ | async | translate }}\n\n<span class=\"qd-filter__item-date-range__label\">{{ \"i18n.qd.filter.dateRange.from\" | translate }}</span>\n\n<qd-filter-item-date-range\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"fromItemIndex\"\n [data-test-id]=\"testId + '-item-date-from'\"\n [timePickerConfig]=\"fromItemTimePickerConfig\"\n (clickTimePlaceholder)=\"handleFromTimePlaceholderClicked($event)\"\n></qd-filter-item-date-range>\n\n<qd-chip\n *ngIf=\"(fromItem$ | async)?.active && (fromItem$ | async)?.item\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"removeItem($event)\"\n [data]=\"fromItemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + (fromItem$ | async).item\"\n>\n {{ (fromItem$ | async).item | localeDate : !!timePickerConfig : fromItemTimePlaceholderClicked | async }}\n</qd-chip>\n\n<span class=\"qd-filter__item-date-range__label\">{{ \"i18n.qd.filter.dateRange.until\" | translate }}</span>\n\n<qd-filter-item-date-range\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"untilItemIndex\"\n [data-test-id]=\"testId + '-item-date-until'\"\n [timePickerConfig]=\"untilItemTimePickerConfig\"\n (clickTimePlaceholder)=\"handleUntilTimePlaceholderClicked($event)\"\n></qd-filter-item-date-range>\n\n<qd-chip\n *ngIf=\"(untilItem$ | async)?.active && (untilItem$ | async)?.item\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"removeItem($event)\"\n [data]=\"untilItemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + (untilItem$ | async).item\"\n>\n {{ (untilItem$ | async).item | localeDate : !!timePickerConfig : untilItemTimePlaceholderClicked | async }}\n</qd-chip>\n", styles: [":host{display:flex;align-items:center;padding-right:.75rem;padding-left:.75rem;color:#757575;line-height:2.125rem}:host .qd-filter__item-date-range__label{margin-left:.25rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: QdFilterItemDateRangeComponent, selector: "qd-filter-item-date-range", inputs: ["filterId", "categoryIndex", "itemIndex", "timePickerConfig", "data-test-id"], outputs: ["clickTimePlaceholder"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }, { kind: "pipe", type: LocaleDatePipe, name: "localeDate" }] });
20851
20943
  }
20852
20944
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterItemDateRangeCategoryComponent, decorators: [{
20853
20945
  type: Component,
@@ -21080,7 +21172,7 @@ class QdFilterItemSelectCategoryComponent {
21080
21172
  }));
21081
21173
  }
21082
21174
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterItemSelectCategoryComponent, deps: [{ token: QdFilterService }], target: i0.ɵɵFactoryTarget.Component });
21083
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFilterItemSelectCategoryComponent, isStandalone: false, selector: "qd-filter-category-select", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", testId: ["data-test-id", "testId"] }, host: { listeners: { "document:click": "handleClickClose($event)" }, classAttribute: "qd-filter__category-select" }, ngImport: i0, template: "<div\n *ngIf=\"showSelectButton$ | async\"\n (click)=\"toggleLayer()\"\n [class]=\"buttonClassName\"\n [attr.data-test-id]=\"testId + '-select-button'\"\n>\n <qd-icon\n *ngIf=\"!open\"\n [icon]=\"'ctrlDown'\"\n [class]=\"'qd-filter__category-icon qd-filter__category-icon--closed'\"\n [attr.data-test-id]=\"testId + '-closed'\"\n ></qd-icon>\n <qd-icon\n *ngIf=\"open\"\n [icon]=\"'ctrlTop'\"\n [class]=\"'qd-filter__category-icon qd-filter__category-icon--open'\"\n [attr.data-test-id]=\"testId + '-opened'\"\n ></qd-icon>\n\n <div class=\"qd-filter__category-button-caption\">\n <span>\n {{ i18n | translate }}\n </span>\n </div>\n\n <ng-container *ngTemplateOutlet=\"SelectedChip\"></ng-container>\n</div>\n\n<div *ngIf=\"open\" [class]=\"categoryClassName\">\n <qd-icon\n *ngIf=\"closeButton\"\n [class]=\"'qd-filter__category-layer-close'\"\n (click)=\"toggleLayer()\"\n [icon]=\"'timesLargeLight'\"\n [attr.data-test-id]=\"testId + '-layer-close'\"\n ></qd-icon>\n <div [class]=\"'qd-filter__category-layer-caption'\">{{ \"i18n.qd.filter.layer.caption\" | translate }}</div>\n\n <ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"'multiSelect'\">\n <qd-filter-form-items\n *ngIf=\"filter\"\n [inputFilterValue]=\"filterCategoryValue$ | async\"\n (filterValueChange)=\"changeValue($event)\"\n [data-test-id]=\"testId\"\n ></qd-filter-form-items>\n\n <ng-container *ngFor=\"let item of items; let itemIndex = index\">\n <qd-filter-item-multi-select\n *ngIf=\"!item.hidden\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"itemIndex\"\n [filterId]=\"filterId\"\n [data-test-id]=\"testId + '-item-' + itemIndex + '-' + item.item\"\n >\n </qd-filter-item-multi-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'singleSelect'\">\n <qd-filter-form-items\n *ngIf=\"filter\"\n [inputFilterValue]=\"filterCategoryValue$ | async\"\n (filterValueChange)=\"changeValue($event)\"\n [data-test-id]=\"testId\"\n ></qd-filter-form-items>\n\n <ng-container *ngFor=\"let item of items; let itemIndex = index\">\n <qd-filter-item-single-select\n *ngIf=\"!item.hidden\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"itemIndex\"\n (closeEventEmitter)=\"toggleLayer()\"\n [filterId]=\"filterId\"\n [data-test-id]=\"testId + '-item-' + itemIndex + '-' + item.item\"\n >\n </qd-filter-item-single-select>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #SelectedChip>\n <ng-container *ngFor=\"let item of items; let itemIndex = index\">\n <!-- TODO: Add tooltip-->\n <qd-chip\n *ngIf=\"item.active\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"close($event)\"\n [data]=\"itemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + item.item\"\n >{{ item.i18n | translate }}</qd-chip\n >\n </ng-container>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: QdFilterFormItemsComponent, selector: "qd-filter-form-items", inputs: ["inputFilterValue", "data-test-id"], outputs: ["filterValueChange"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFilterItemMultiSelectComponent, selector: "qd-filter-item-multi-select", inputs: ["filterId", "categoryIndex", "itemIndex", "data-test-id"] }, { kind: "component", type: QdFilterItemSingleSelectComponent, selector: "qd-filter-item-single-select", inputs: ["filterId", "categoryIndex", "itemIndex", "data-test-id"], outputs: ["closeEventEmitter"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
21175
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFilterItemSelectCategoryComponent, isStandalone: false, selector: "qd-filter-category-select", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", testId: ["data-test-id", "testId"] }, host: { listeners: { "document:click": "handleClickClose($event)" }, classAttribute: "qd-filter__category-select" }, ngImport: i0, template: "<div\n *ngIf=\"showSelectButton$ | async\"\n (click)=\"toggleLayer()\"\n [class]=\"buttonClassName\"\n [attr.data-test-id]=\"testId + '-select-button'\"\n>\n <qd-icon\n *ngIf=\"!open\"\n [icon]=\"'ctrlDown'\"\n [class]=\"'qd-filter__category-icon qd-filter__category-icon--closed'\"\n [attr.data-test-id]=\"testId + '-closed'\"\n ></qd-icon>\n <qd-icon\n *ngIf=\"open\"\n [icon]=\"'ctrlTop'\"\n [class]=\"'qd-filter__category-icon qd-filter__category-icon--open'\"\n [attr.data-test-id]=\"testId + '-opened'\"\n ></qd-icon>\n\n <div class=\"qd-filter__category-button-caption\">\n <span>\n {{ i18n | translate }}\n </span>\n </div>\n\n <ng-container *ngTemplateOutlet=\"SelectedChip\"></ng-container>\n</div>\n\n<div *ngIf=\"open\" [class]=\"categoryClassName\">\n <qd-icon\n *ngIf=\"closeButton\"\n [class]=\"'qd-filter__category-layer-close'\"\n (click)=\"toggleLayer()\"\n [icon]=\"'timesLargeLight'\"\n [attr.data-test-id]=\"testId + '-layer-close'\"\n ></qd-icon>\n <div [class]=\"'qd-filter__category-layer-caption'\">{{ \"i18n.qd.filter.layer.caption\" | translate }}</div>\n\n <ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"'multiSelect'\">\n <qd-filter-form-items\n *ngIf=\"filter\"\n [inputFilterValue]=\"filterCategoryValue$ | async\"\n (filterValueChange)=\"changeValue($event)\"\n [data-test-id]=\"testId\"\n ></qd-filter-form-items>\n\n <ng-container *ngFor=\"let item of items; let itemIndex = index\">\n <qd-filter-item-multi-select\n *ngIf=\"!item.hidden\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"itemIndex\"\n [filterId]=\"filterId\"\n [data-test-id]=\"testId + '-item-' + itemIndex + '-' + item.item\"\n >\n </qd-filter-item-multi-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'singleSelect'\">\n <qd-filter-form-items\n *ngIf=\"filter\"\n [inputFilterValue]=\"filterCategoryValue$ | async\"\n (filterValueChange)=\"changeValue($event)\"\n [data-test-id]=\"testId\"\n ></qd-filter-form-items>\n\n <ng-container *ngFor=\"let item of items; let itemIndex = index\">\n <qd-filter-item-single-select\n *ngIf=\"!item.hidden\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"itemIndex\"\n (closeEventEmitter)=\"toggleLayer()\"\n [filterId]=\"filterId\"\n [data-test-id]=\"testId + '-item-' + itemIndex + '-' + item.item\"\n >\n </qd-filter-item-single-select>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #SelectedChip>\n <ng-container *ngFor=\"let item of items; let itemIndex = index\">\n <!-- TODO: Add tooltip-->\n <qd-chip\n *ngIf=\"item.active\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"close($event)\"\n [data]=\"itemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + item.item\"\n >{{ item.i18n | translate }}</qd-chip\n >\n </ng-container>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: QdFilterFormItemsComponent, selector: "qd-filter-form-items", inputs: ["inputFilterValue", "data-test-id"], outputs: ["filterValueChange"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFilterItemMultiSelectComponent, selector: "qd-filter-item-multi-select", inputs: ["filterId", "categoryIndex", "itemIndex", "data-test-id"] }, { kind: "component", type: QdFilterItemSingleSelectComponent, selector: "qd-filter-item-single-select", inputs: ["filterId", "categoryIndex", "itemIndex", "data-test-id"], outputs: ["closeEventEmitter"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
21084
21176
  }
21085
21177
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterItemSelectCategoryComponent, decorators: [{
21086
21178
  type: Component,
@@ -21163,13 +21255,13 @@ class QdFilterCategoryComponent {
21163
21255
  this.itemFreeTextCategory.first.handleReset();
21164
21256
  }
21165
21257
  }
21166
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterCategoryComponent, deps: [{ token: QdFilterService }, { token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
21258
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterCategoryComponent, deps: [{ token: QdFilterService }, { token: i1$3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
21167
21259
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFilterCategoryComponent, isStandalone: false, selector: "qd-filter-category", inputs: { filterId: "filterId", isInstantFiltering: "isInstantFiltering", categoryIndex: "categoryIndex", lastCategory: "lastCategory", testId: ["data-test-id", "testId"] }, host: { properties: { "attr.data-category-index": "this.categoryIndexAttribute", "attr.class": "this.categoryNumberClassName", "attr.data-test-id": "this.dataTestId" } }, viewQueries: [{ propertyName: "itemFreeTextCategory", predicate: i0.forwardRef(() => QdFilterItemFreeTextCategoryComponent), descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"isBoolean\">\n <div [class]=\"buttonClassName\">\n <qd-filter-category-boolean\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId + '-boolean'\"\n >\n </qd-filter-category-boolean>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isDate\">\n <div [class]=\"buttonClassName\">\n <qd-filter-category-date\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId + '-date'\"\n ></qd-filter-category-date>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isDateTime\">\n <div [class]=\"buttonClassName\">\n <qd-filter-category-date\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId + '-date'\"\n [timePickerConfig]=\"timePickerConfig\"\n ></qd-filter-category-date>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isDateRange\">\n <div [class]=\"buttonClassName\">\n <qd-filter-category-date-range\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId + '-date-range-'\"\n ></qd-filter-category-date-range>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isDateTimeRange\">\n <div [class]=\"buttonClassName\">\n <qd-filter-category-date-range\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId + '-date-range-'\"\n [timePickerConfig]=\"timePickerConfig\"\n ></qd-filter-category-date-range>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isFreeText\">\n <div [class]=\"buttonClassName\">\n <qd-filter-category-free-text\n [filterId]=\"filterId\"\n [isInstantFiltering]=\"isInstantFiltering\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId + '-item'\"\n ></qd-filter-category-free-text>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isSelect\">\n <qd-filter-category-select\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId\"\n ></qd-filter-category-select>\n</ng-container>\n", styles: [":host{position:relative}:host ::ng-deep .qd-filter__category-button{position:relative;display:flex;align-items:center;justify-content:center;padding:0 .75rem 0 2rem;border:.0625rem solid rgb(213,213,213);margin:0 .75rem .75rem 0;background-color:#fff;color:#757575;cursor:pointer;font-size:.875rem;font-weight:400}:host ::ng-deep .qd-filter__category-button-caption{position:relative;display:flex;max-width:40ch;line-height:2.125rem}:host ::ng-deep .qd-filter__category-button-caption span{overflow:inherit;text-overflow:inherit;white-space:nowrap}:host ::ng-deep .qd-filter__category-button--type-boolean{padding:0}:host ::ng-deep .qd-filter__category-button--type-date,:host ::ng-deep .qd-filter__category-button--type-dateRange,:host ::ng-deep .qd-filter__category-button--type-freeText{display:flex;flex-direction:row;align-items:center;padding-right:0;padding-left:0}:host ::ng-deep .qd-filter__category-button--type-date qd-chip,:host ::ng-deep .qd-filter__category-button--type-dateRange qd-chip,:host ::ng-deep .qd-filter__category-button--type-freeText qd-chip{height:1.5rem}:host ::ng-deep .qd-filter__category-button--open,:host ::ng-deep .qd-filter__category-button:hover,:host ::ng-deep .qd-filter__category-button:focus{border-color:#979797!important;color:#171717}:host ::ng-deep .qd-filter__category-button .qd-filter__category-icon{position:absolute;left:0;display:inline-flex;padding:0 .4375rem 0 .3125rem;font-size:1.25rem;line-height:2.125rem;pointer-events:none}:host ::ng-deep .qd-filter__category-button .qd-chip.filter{display:inline-flex;margin-left:.5rem}:host ::ng-deep .qd-filter__category-button .qd-chip.filter ::ng-deep .qd-chip__label{overflow:hidden;max-width:10ch;text-overflow:ellipsis}:host ::ng-deep .qd-filter__category-button .qd-filter__item-date+.qd-chip.filter ::ng-deep .qd-chip__label,:host ::ng-deep .qd-filter__category-button .qd-filter__item-date-range+.qd-chip.filter ::ng-deep .qd-chip__label{max-width:20ch}:host ::ng-deep .qd-filter__category-button--open{z-index:20}:host ::ng-deep .qd-filter__category-layer{position:absolute;z-index:1;top:2.1875rem;min-width:16.25rem;max-width:56.25rem;padding:1rem 0 0;border:.0625rem solid rgb(151,151,151);background:#fff;box-shadow:#d5d5d5 .125rem .25rem .4375rem}:host ::ng-deep .qd-filter__category-layer ::ng-deep .qd-filter-form-items__filter{margin-bottom:0}:host ::ng-deep .qd-filter__category-layer ::ng-deep .qd-checkbox__label{display:flex;height:2.5rem}:host ::ng-deep .qd-filter__category-layer ::ng-deep .qd-checkbox__indicator,:host ::ng-deep .qd-filter__category-layer ::ng-deep .qd-radio-buttons__indicator{transform:translateY(-.0625rem)}:host ::ng-deep .qd-filter__category-layer-container{position:relative}:host ::ng-deep .qd-filter__category-layer-close{position:absolute;top:1rem;right:1rem;color:#757575;cursor:pointer}:host ::ng-deep .qd-filter__category-layer-close:hover,:host ::ng-deep .qd-filter__category-layer-close:focus{color:#171717}:host ::ng-deep .qd-filter__category-layer-caption{margin-bottom:.5rem;margin-left:1rem;color:#757575;font-weight:500}:host ::ng-deep .qd-filter__category--last{margin-right:1rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdFilterCategoryBooleanComponent, selector: "qd-filter-category-boolean", inputs: ["filterId", "categoryIndex", "data-test-id"] }, { kind: "component", type: QdFilterItemDateCategoryComponent, selector: "qd-filter-category-date", inputs: ["filterId", "categoryIndex", "timePickerConfig", "data-test-id"] }, { kind: "component", type: QdFilterItemDateRangeCategoryComponent, selector: "qd-filter-category-date-range", inputs: ["filterId", "categoryIndex", "data-test-id", "timePickerConfig"] }, { kind: "component", type: QdFilterItemFreeTextCategoryComponent, selector: "qd-filter-category-free-text", inputs: ["filterId", "isInstantFiltering", "categoryIndex", "data-test-id"] }, { kind: "component", type: QdFilterItemSelectCategoryComponent, selector: "qd-filter-category-select", inputs: ["filterId", "categoryIndex", "data-test-id"] }] });
21168
21260
  }
21169
21261
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterCategoryComponent, decorators: [{
21170
21262
  type: Component,
21171
21263
  args: [{ selector: 'qd-filter-category', standalone: false, template: "<ng-container *ngIf=\"isBoolean\">\n <div [class]=\"buttonClassName\">\n <qd-filter-category-boolean\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId + '-boolean'\"\n >\n </qd-filter-category-boolean>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isDate\">\n <div [class]=\"buttonClassName\">\n <qd-filter-category-date\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId + '-date'\"\n ></qd-filter-category-date>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isDateTime\">\n <div [class]=\"buttonClassName\">\n <qd-filter-category-date\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId + '-date'\"\n [timePickerConfig]=\"timePickerConfig\"\n ></qd-filter-category-date>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isDateRange\">\n <div [class]=\"buttonClassName\">\n <qd-filter-category-date-range\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId + '-date-range-'\"\n ></qd-filter-category-date-range>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isDateTimeRange\">\n <div [class]=\"buttonClassName\">\n <qd-filter-category-date-range\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId + '-date-range-'\"\n [timePickerConfig]=\"timePickerConfig\"\n ></qd-filter-category-date-range>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isFreeText\">\n <div [class]=\"buttonClassName\">\n <qd-filter-category-free-text\n [filterId]=\"filterId\"\n [isInstantFiltering]=\"isInstantFiltering\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId + '-item'\"\n ></qd-filter-category-free-text>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isSelect\">\n <qd-filter-category-select\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [data-test-id]=\"testId\"\n ></qd-filter-category-select>\n</ng-container>\n", styles: [":host{position:relative}:host ::ng-deep .qd-filter__category-button{position:relative;display:flex;align-items:center;justify-content:center;padding:0 .75rem 0 2rem;border:.0625rem solid rgb(213,213,213);margin:0 .75rem .75rem 0;background-color:#fff;color:#757575;cursor:pointer;font-size:.875rem;font-weight:400}:host ::ng-deep .qd-filter__category-button-caption{position:relative;display:flex;max-width:40ch;line-height:2.125rem}:host ::ng-deep .qd-filter__category-button-caption span{overflow:inherit;text-overflow:inherit;white-space:nowrap}:host ::ng-deep .qd-filter__category-button--type-boolean{padding:0}:host ::ng-deep .qd-filter__category-button--type-date,:host ::ng-deep .qd-filter__category-button--type-dateRange,:host ::ng-deep .qd-filter__category-button--type-freeText{display:flex;flex-direction:row;align-items:center;padding-right:0;padding-left:0}:host ::ng-deep .qd-filter__category-button--type-date qd-chip,:host ::ng-deep .qd-filter__category-button--type-dateRange qd-chip,:host ::ng-deep .qd-filter__category-button--type-freeText qd-chip{height:1.5rem}:host ::ng-deep .qd-filter__category-button--open,:host ::ng-deep .qd-filter__category-button:hover,:host ::ng-deep .qd-filter__category-button:focus{border-color:#979797!important;color:#171717}:host ::ng-deep .qd-filter__category-button .qd-filter__category-icon{position:absolute;left:0;display:inline-flex;padding:0 .4375rem 0 .3125rem;font-size:1.25rem;line-height:2.125rem;pointer-events:none}:host ::ng-deep .qd-filter__category-button .qd-chip.filter{display:inline-flex;margin-left:.5rem}:host ::ng-deep .qd-filter__category-button .qd-chip.filter ::ng-deep .qd-chip__label{overflow:hidden;max-width:10ch;text-overflow:ellipsis}:host ::ng-deep .qd-filter__category-button .qd-filter__item-date+.qd-chip.filter ::ng-deep .qd-chip__label,:host ::ng-deep .qd-filter__category-button .qd-filter__item-date-range+.qd-chip.filter ::ng-deep .qd-chip__label{max-width:20ch}:host ::ng-deep .qd-filter__category-button--open{z-index:20}:host ::ng-deep .qd-filter__category-layer{position:absolute;z-index:1;top:2.1875rem;min-width:16.25rem;max-width:56.25rem;padding:1rem 0 0;border:.0625rem solid rgb(151,151,151);background:#fff;box-shadow:#d5d5d5 .125rem .25rem .4375rem}:host ::ng-deep .qd-filter__category-layer ::ng-deep .qd-filter-form-items__filter{margin-bottom:0}:host ::ng-deep .qd-filter__category-layer ::ng-deep .qd-checkbox__label{display:flex;height:2.5rem}:host ::ng-deep .qd-filter__category-layer ::ng-deep .qd-checkbox__indicator,:host ::ng-deep .qd-filter__category-layer ::ng-deep .qd-radio-buttons__indicator{transform:translateY(-.0625rem)}:host ::ng-deep .qd-filter__category-layer-container{position:relative}:host ::ng-deep .qd-filter__category-layer-close{position:absolute;top:1rem;right:1rem;color:#757575;cursor:pointer}:host ::ng-deep .qd-filter__category-layer-close:hover,:host ::ng-deep .qd-filter__category-layer-close:focus{color:#171717}:host ::ng-deep .qd-filter__category-layer-caption{margin-bottom:.5rem;margin-left:1rem;color:#757575;font-weight:500}:host ::ng-deep .qd-filter__category--last{margin-right:1rem}\n"] }]
21172
- }], ctorParameters: () => [{ type: QdFilterService }, { type: i1$2.TranslateService }], propDecorators: { filterId: [{
21264
+ }], ctorParameters: () => [{ type: QdFilterService }, { type: i1$3.TranslateService }], propDecorators: { filterId: [{
21173
21265
  type: Input
21174
21266
  }], isInstantFiltering: [{
21175
21267
  type: Input
@@ -21308,7 +21400,7 @@ class QdFilterRouterConnectorService {
21308
21400
  this._activatedRouteSubscription?.unsubscribe();
21309
21401
  this._filterUrlParameterSubscription?.unsubscribe();
21310
21402
  }
21311
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterRouterConnectorService, deps: [{ token: QdFilterService }, { token: i1$3.Router, optional: true }, { token: i1$3.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
21403
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterRouterConnectorService, deps: [{ token: QdFilterService }, { token: i1$2.Router, optional: true }, { token: i1$2.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
21312
21404
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterRouterConnectorService, providedIn: 'root' });
21313
21405
  }
21314
21406
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterRouterConnectorService, decorators: [{
@@ -21316,9 +21408,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
21316
21408
  args: [{
21317
21409
  providedIn: 'root'
21318
21410
  }]
21319
- }], ctorParameters: () => [{ type: QdFilterService }, { type: i1$3.Router, decorators: [{
21411
+ }], ctorParameters: () => [{ type: QdFilterService }, { type: i1$2.Router, decorators: [{
21320
21412
  type: Optional
21321
- }] }, { type: i1$3.ActivatedRoute, decorators: [{
21413
+ }] }, { type: i1$2.ActivatedRoute, decorators: [{
21322
21414
  type: Optional
21323
21415
  }] }] });
21324
21416
 
@@ -21640,7 +21732,7 @@ class QdFilterComponent {
21640
21732
  });
21641
21733
  }
21642
21734
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterComponent, deps: [{ token: QdFilterService }, { token: QdFilterRouterConnectorService }, { token: QdDependentFiltersService }], target: i0.ɵɵFactoryTarget.Component });
21643
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFilterComponent, isStandalone: false, selector: "qd-filter", inputs: { filterData: "filterData", testId: ["data-test-id", "testId"] }, outputs: { queryStringOutput: "queryStringOutput", postBodyOutput: "postBodyOutput", valueChange: "valueChange" }, host: { properties: { "attr.data-test-id": "this.dataTestId" }, classAttribute: "qd-filter" }, providers: [QdDependentFiltersService], viewQueries: [{ propertyName: "filterCategory", predicate: i0.forwardRef(() => QdFilterCategoryComponent), descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"(categories$ | async)?.length > 0\">\n <ng-container\n *ngFor=\"let category of categories$ | async; let last = last; let length = count; let categoryIndex = index\"\n >\n <qd-filter-category\n [filterId]=\"filterId\"\n [isInstantFiltering]=\"isInstantFiltering\"\n [categoryIndex]=\"categoryIndex\"\n [lastCategory]=\"last\"\n [data-test-id]=\"testId + '-category-' + categoryIndex + '-' + category\"\n ></qd-filter-category>\n </ng-container>\n\n <div [class]=\"'qd-filter__action-buttons'\" *ngIf=\"!isInstantFiltering\">\n <button\n qdButton\n qdButtonLink\n [disabled]=\"disableFilterButton$ | async\"\n (click)=\"clickFilter()\"\n [color]=\"'primary'\"\n [data-test-id]=\"testId + '-submit-button'\"\n >\n {{ \"i18n.qd.container.toolbar.filter.filter\" | translate }}\n </button>\n\n <button\n qdButton\n qdButtonLink\n [disabled]=\"disableResetButton$ | async\"\n (click)=\"resetFilter()\"\n [color]=\"'secondary'\"\n [data-test-id]=\"testId + '-reset-button'\"\n >\n {{\n ((hasPreselection$ | async)\n ? \"i18n.qd.container.toolbar.filter.backToPreSelect\"\n : \"i18n.qd.container.toolbar.filter.reset\"\n ) | translate\n }}\n </button>\n </div>\n</ng-container>\n", styles: [":host{position:relative;display:flex;flex-wrap:wrap}:host .qd-filter__action-buttons{display:flex;flex-wrap:wrap-reverse}:host ::ng-deep .qd-button{position:relative;margin-bottom:1rem}:host ::ng-deep .qd-button:last-child{margin-left:1rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonLinkDirective, selector: "button[qdButtonLink], a[qdButtonLink], button[qd-button-link]" }, { kind: "component", type: QdFilterCategoryComponent, selector: "qd-filter-category", inputs: ["filterId", "isInstantFiltering", "categoryIndex", "lastCategory", "data-test-id"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
21735
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdFilterComponent, isStandalone: false, selector: "qd-filter", inputs: { filterData: "filterData", testId: ["data-test-id", "testId"] }, outputs: { queryStringOutput: "queryStringOutput", postBodyOutput: "postBodyOutput", valueChange: "valueChange" }, host: { properties: { "attr.data-test-id": "this.dataTestId" }, classAttribute: "qd-filter" }, providers: [QdDependentFiltersService], viewQueries: [{ propertyName: "filterCategory", predicate: i0.forwardRef(() => QdFilterCategoryComponent), descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"(categories$ | async)?.length > 0\">\n <ng-container\n *ngFor=\"let category of categories$ | async; let last = last; let length = count; let categoryIndex = index\"\n >\n <qd-filter-category\n [filterId]=\"filterId\"\n [isInstantFiltering]=\"isInstantFiltering\"\n [categoryIndex]=\"categoryIndex\"\n [lastCategory]=\"last\"\n [data-test-id]=\"testId + '-category-' + categoryIndex + '-' + category\"\n ></qd-filter-category>\n </ng-container>\n\n <div [class]=\"'qd-filter__action-buttons'\" *ngIf=\"!isInstantFiltering\">\n <button\n qdButton\n qdButtonLink\n [disabled]=\"disableFilterButton$ | async\"\n (click)=\"clickFilter()\"\n [color]=\"'primary'\"\n [data-test-id]=\"testId + '-submit-button'\"\n >\n {{ \"i18n.qd.container.toolbar.filter.filter\" | translate }}\n </button>\n\n <button\n qdButton\n qdButtonLink\n [disabled]=\"disableResetButton$ | async\"\n (click)=\"resetFilter()\"\n [color]=\"'secondary'\"\n [data-test-id]=\"testId + '-reset-button'\"\n >\n {{\n ((hasPreselection$ | async)\n ? \"i18n.qd.container.toolbar.filter.backToPreSelect\"\n : \"i18n.qd.container.toolbar.filter.reset\"\n ) | translate\n }}\n </button>\n </div>\n</ng-container>\n", styles: [":host{position:relative;display:flex;flex-wrap:wrap}:host .qd-filter__action-buttons{display:flex;flex-wrap:wrap-reverse}:host ::ng-deep .qd-button{position:relative;margin-bottom:1rem}:host ::ng-deep .qd-button:last-child{margin-left:1rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonLinkDirective, selector: "button[qdButtonLink], a[qdButtonLink], button[qd-button-link]" }, { kind: "component", type: QdFilterCategoryComponent, selector: "qd-filter-category", inputs: ["filterId", "isInstantFiltering", "categoryIndex", "lastCategory", "data-test-id"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
21644
21736
  }
21645
21737
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdFilterComponent, decorators: [{
21646
21738
  type: Component,
@@ -22251,7 +22343,7 @@ class NavigationTileComponent {
22251
22343
  console.error('QdUi | Navigation Tiles | You should provide an icon.');
22252
22344
  }
22253
22345
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: NavigationTileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
22254
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: NavigationTileComponent, isStandalone: false, selector: "a[qd-navigation-tile]", inputs: { title: "title", icon: "icon" }, ngImport: i0, template: "<qd-icon *ngIf=\"icon\" [icon]=\"icon\"></qd-icon>\n<small>{{ title | translate }}</small>\n", styles: ["@font-face{font-family:Roboto;font-style:normal;font-weight:300;src:local(\"Roboto Light\"),local(\"Roboto-Light\"),url(data:application/octet-stream;base64,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) format(\"woff2\")}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local(\"Roboto\"),local(\"Roboto-Regular\"),url(data:application/octet-stream;base64,d09GMgABAAAAAD14ABIAAAAAjkgAAD0SAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmWQcg3wGYACHbAhUCYM8EQwKgdo8gcJOC4NyABKCBAE2AiQDh2AEIAWCdAcgDIJJGzR/FeOYVcDGAcDIzhY+G2G7HZCkFLtzdCD2OJDUrhz8/y2BypB1FdMN8NcjLEq6h9Jin7h0CobCIBKfkpjgcFf4Hy1Ki2VzhLsO8QHfclaAnoJH0JjAmlwzwh7WH9zsaCdlCk9cMlt5NdnhP3qPEI2bedRmx193BraN/ElO3iGa2/2K0WND0B4omVIpFT2yx2DAyDSgZRLKhkqUolICgrRiIGaP5//dL/B3kps3BWBWFabLMytAx5o/WhYKSNEcv3c/v2QCD/s6TSlNKZ/wLrHab/RKuwrVKnTAxwOPVHs4rRxJI6tU17a+W++1tl8qYg9gYGgAC4CP4AH4AAbA+H5reYQlSiHzrhZInc5skZIiqQpTRaT0X7enXcsJ7h3g+61l8gMzC8csi0a1RsWIPa3m1ekKz5ISFkb2/nVaM7JkmJGsA6Ka2011QF//G7JroCRaYME0UtJJSdEcQX/VXk9Qynbgjl9////96ocF8NjgCBe/2CrwpD2+Agu8oFm331TAx7ffb7+4ICaJSoXUCYXWZi57Xm60AYACVv//dfZ+e7c8783Vi8LghB0uumQcpDJduhSVdCQ9WffKHhkCdmhwPWscsmdCYDvgcQiww4GQ8wJIVToALFMi/V/+7tdd1u+Ii7L6/n/7tfrf3J1F9IJHPP/QNhIHaWHF3w7ig2gyiXjbEImESKhb2cQhkQk00Ij/pWq2/4Ei50SKlnadi8puXXQLXpJGVzpVJfVFanGAkgk6UY4Kzqm6j71ALO88gugU6BBCm2PZXFHbbKmxoriVtRAySW7+Z2aqeUG3IoXC0DAFMRiGYyOtfa9sw1VGX2zt6sFKgARt55exme0jzSORGwzQvgACw2H9wjcHw0KABog+d5BEiSCZMkGyZYMQEUHy5YOQFYG06QQz6isIBAYANgBgQACAQBJBAGAhTQPinPNMbcHJuxMJoeDk/QS/EHDyEa+YcHASAgDgBank4XsJ4QDNmCQR6mEYlrok63IeL8MmWYql2OTbpTE1lsebsddMOweMe7zpJ/uFrtJNe3jPGB97Wa8p0d5fogNTor0tDI1hWtLDP86QUoqjyqADvxlTNOny2Gt+s2IfSxTSiuIfISCGEFBYscERIESYCFFSpMmRp0CREhWq1GnQZMSYKQtWrNmw58iZCzceqtWoU2/UmHETJk2ZNmPWPffNWbRk2WMrNux75rkDh9448tY7733x1Tff/QBRyjoEFdxUYanjsYEHBBc8aZjwwIaHQOxJrn/GlHDTzw6DHDEUGMEENrAb3D4vOeUN57zmFuZflCO14dGApvBY7I1jApOYwnT4aXZsYgvb2MFueC9H9vEMz3GANzjCW7zD+/CHvPERn/A5/CWvfS1AXDJOt/UqGEccMtMMSSmrVHJANW+pZ9sGXIQJqvvOwOJ9uwgNkXX2GeKSWWHrCKREWGbMEFMsP60Q2HHTxuUuPOMFB3CCDUeSw8QWX0CRzHvKV6xiDU+wPkdeKBislmYxlkFeMwSMYAI7KuEWcVANo0ZQh/rwXl7bxzM8x0H4G4zv+DFHVgZ5yxBGMIEdirCHfTzDcxw0hjPGyZEsF1xQbCz3DXCEt3iH93NEwiQHFrVoQJPeB0koYxVreIL1Ylam8CwAy8FtksEhJVyweqO5R8BbvMP76w53PpMc84FLdsGx5yXtfOVlBDDGeW8Hb0AyXQUOLHnWwLU4stBE19gT2GedI1PzbltYrkvJI5lpQcy4/IxpzGOQmlBpQmPsZOmtw6YlBID8xYrbaceBzjhYMzGe58BKBVxWYxzF67zI6mrSNzmM1Q3jAsE3gPGVCHOcz4ek53KcTQTSKY8AjM5SrZ+Y+EeIhPI7UWfvGDW89y5K58PKfYndi1u1/qfErr+TV/NNwWnyrv1E9b8k6n8WOqrVFSXnEpUVsdvfVNr3ZfZzmBdXdN8y1jPkGAWjeZ51umEbuZxbeZsWXLCZybN8xC4MDnFFwnIfeooBozEHKY/X3JoboWQYABiYFGbqSgcDOCMYC8eDAVZ22PF1xI4Gk3LvsHt0x9YtX+XJIyy0/UPDkWWlXf+8TM3baEcuHZ/G316FlrEKZi+MXF9Y0Zkw4vINJ6gqLS9H/f92XIbSjnfuuADI0TDhCtyZJWdu/Y7BBf7/c86I0hhWKcZ0FWom1yNlXkuhOg4tt2obLrzLanYpCofKyK07dXBehnbpfjL+ei9XWhQs5yBDtGu+abnn1t2+eZ362w8HMNxQl7IIACshGMJg/wMnQASCOHnMlGjA0mfgBKPA00zjZ1ixdZY9+TnHz3Pl7oKCuJBqDYQ1/VXSqANSDr1n54sfXMAoWgAveHFKTqVBGEGeIEQuwoSIEEmSLKTISpo85AiRJzclslMmCxWepMrj1IihTjYa5KRPlEtkYlA9VmMHtCDOrSHYgHC2VaZ6O+CEOQ1iuZGZOzkUKNMHwMCrFnrqg2Dg1QCe0sRTRuOQMdNgZn7HZdYcpEUrIKvWsdgIcTZP7ULZix+z7wDa4WOEN96Df0wks2/LvO0EF7gCNy4hDyy5CSgKAUYMhJEkLznCKBDmYpWjhR1YwIxjwIETrMBkm3duBGIiCrUNcCACnB0IcSAbpyqyhbOhgVb2LygBplAIU/QYUqkKT1PBBW5wgTtwuwvlAVAKaydgYAarMO0dgBpp4BlMfPAZEmjP9VVncQ3+t4iasQqFBkxn3qSPB85nW9tS73nW2iNql1qYjppepm3PqyzMeq+xNlFnBdQeAorFPIBDrmx9gMC+Z7rnsYgwIP7/8jwBso8EBXgBtQg6zc0fifAJBfaPxYYRgCsAIH2BCyIbBFZFxHmuhHQxIFuoCYwLDBEQUS0L9iDolUK9ozKIlGqRwPY4dHw0PTfTBkbvpKmn0UlL7WqpCuxvXChUPCkOyoXLTFgQ/wAAJNgFrZsFoMcQSOWGwqhhcV2vHn2obug3YJBGL3Hywb4pSbQYtwyjoRtxGwyE2xkAwIvYSiAB5GtTDoB2j7vgv+X/sI3uzJABCOEmVLxHzOByCwOgBTD+LeA/4L+q6wAPehsAAHHSpMLDgwMbebpGK2Ysv6NB70O0QgAY0oKEBgC7NC169Bo1Y8FLHzAgmWbTb/eZ/rRv7dHxG+I3xm+TU17lzbybL+Yb+S4+Bt+z52Ez/Gcw/oUBAADY4bVo1eu6MbMWvfKxyTRrxZm2zjEvVvhCvt645XsOnMkErowDDEbEr0bOUVmr/t77N/RvcI8iv3zCWdKlSZZgcs+fG8k//9jNurxu10HmEwAVXM8yGa78i/WJM41a+FL9yWfJtmrNE+s25Mj11KYt23bsIsr7sn0nSPJ98NEnn31R4Cs2AADYOcJipHDIaLNvwOGlQdTijlY9fOp113WjIow9HT8DmWZf4F+EUUuvSTyxLsuGbat27Mqx54WnvwSiVz7Y66M8n3x36IefSH7550P/FTjbEQz2VYOO5ICsQlexqzko1GDfkm4G9h04KNZgv+OAosH+wEGJhu8clGr4DTko0/Abc1Ch4rdm23BQqeJ3YDtxUK3id2G7cVCn4ffioFHD78dBk4o/ih3NwTcVfyI7iYNmDX9OErTCexwcXNbwH3NwRePbi4OrGv9WHFzT/oeDLo3x79cIdBPVKEOBBCt8mXOWx5M9+a7mtn7FpgDAvfYk7l4PP/iwlgruKoKZVNzLccdaG65lDMeyAQUAAAkgPgNmSw0h6N0iiHHntidkhu/tDgASZ/YXAshzADBxQKJuAHBxDgAXCJa1YvxcfKPjaSsBnx8cAyGwMRoGOXl2GmIAG72gzdqqg5bRUOmJWXUAiPFCCP/ZCavx5UihSyPN7ncAUnxmYLjgoi4pMoSgJXFjzrHHWC2PMSF36KkVZdXgta8vOkwzJh8lmjy0UmylxLRSF3B6LmDbKg4ZZQw9nze+hbGDjSCwWJBWG+ACfkhnLApiGTdBQb/rg290HkAGwCw+s6JeHrmzPIs4hH1krBB5xNjEQ6E4iZ9ttKYVK3AUocGj0hoQTr6+MsL5FQX+cbghlqJq29jFobVsnmObGorEhBxMJCbFfMPdIAcSjP8vOcpHJv7xKcLLe7z1Rk1+ZKQx4+foTMjeW/XMCK5FDAgppYuTIHjCVsMILFQGnMhhynR2sEY9NiRhsUmr5MXTMcHYiUJSy1XZAbFg57cy7zTDyZQT9dC28g4pU+r3iNQafzqg4nzAW++sx1lZnmXBKtTovWh2g1PpRKN14wSiaNXZSRakGq22erEYbRJ05o2qXFC7zEVulZYoBeKsg5miqWTVmQyV0w6nLNpoovF7lQpno26xbVAdDkOoEd+iUkMIg05CrBRaY7HeMTc6COdbHZltlPLq5sbIyaPWlVTRYGNXK5U2jZo9ZbwQeOEkVlif8ApbRKyF17vBobCiMDq30aeeKYgfy9ZOM9z0dzBsLyjlOP8vf7Of4k861OfRneQVlwJCr++WUdyZmIGSdMa8fMlJrwhzNsiwRCC9mAqADP8ZizJQQNgWY2njksWtUxLBCnWfijEU+IgvjRRLWuSB6LcvSGJ+qCXou4RRRjAEnlWzdbkCF5CugIr5qIzzF3X3STNv1gxgHuWJH+TpxASVdNTu9tKrVTg+z+RQ6XXqY27H2iz1SMZm1OPOJBh2Va+jxQPXopqLXo27+njZDKJnYVASMFx+QMKyK1RYD/cSl+o3VaeV5cClGp9aQ7zAt97UQqs6gfLFLTib+sKm3BOOYyZqmf05YrT3umoSBrKo1kbh2HOeGwx8aHf6mG5SqCDNyy2XQYV7TYAqUKs2t0bc20w2i1oCgH2Jc+dNeLMotUOxfXxFHA5zj0zDqLPxlrxsLiQFV2fB7nJIyGsel2ww3qXhOUhR4CZsPZu7jAnEuFjPrcYH46zZd2pOdKimH0xk0KS/EGlhLtisvDjIydotpoeq0n/U3JvBb5HOH/dP0n9L5+worjydu7P/S6hj7fwShRO67p1h8RBtpx3bG7v2mrHnqSFcqaa0v65hDpdfBbSio0cAMpVKILdxdhRAJn+rtMllQsxNS9v24Sa5GdqWr3n0zfgg2TWDxr2Np8M/blJTp+3dmou+FDl7Stj2Hfb4kuGmzz3mSC5S1qqSiK8mNNGTY0lcKXIGMaWnvxCTu2g6t0GLJROdXo5CHvSe0RFS2WTCrphf74ZsSu4yrfeeKjVS42p/+CCZyFW8TYHaBrr+U0QRN/oqJzMZY/8hctwQNyFx8VapV0t1qljrBteXNMLGBeGYUl4ERji50WhKq6nbISFvbdPOFoU7HIUc2+SkPLkZbkH+bBmEEgZXPERmL17iIktph0LepoRbfWjON7+nqbvugvkm86EQWJkHaiZpf0xJ9iEU2p3rW7UyVE8kxIWQi4p5RAhThvUOaMNBnqYe73BCCj2rRqlY++ae+185ySDb6TdWE1RXBSgfV8QNQk6mtfrqBmgXA9W/xw0LMtqUNtJQY8RWZF0fbNvkGHMZqk7CHrW4lyqlzd2mGOCXEG7L9HiQCyr1rpsFT7eJa23Bui6vNmgopy/01OHq1FpVri3dGrjUuQLIULELryUsHGET+Ojfim0fjUi7fU8pTkZu6DQ3+21J8X/rS0VOMQApyxKxGMgGS3chxr0cQq6J39octjP0iQ1u0oRdUp7pJ0tSYZ9Xo3odvpAhD6vnNW6UbEzK2XU9UNp4M1xaEWJeYZnjOnLDFJC5ZQZHfnbM2O7hxsYh94JZYgBZDUWWG54Ya1ovlSuly43HyzUOSEpxoDBZnLLaXMEQ89QGy3j1MYZB5nx1C/LXbFATcs8vua4HDrcFpQ38PJIZSx1C1UsdhTTDZdlEaBBVHo3xwIUe5eJ1oB3uNrjeIIflrZ2wPukcMhIbNOmw87tmJujdX573edWX8iWFCaFfYvKF5ZE6GFAPtGz8fKb/HCxOcs7+pbK9yTz9dzA7gtK1dvRRK2sVJuFpMGM2EnuWTBDXXW5vbh5ApEzWALanoXNkUaPG64n54TpAH910K615/W0Dkjb61wtTJAJC7yXDjk7lpD1q46Ip/ldD5EFn2kh5wuWs05dtqc47idj0WMdeIjuFDuKWLBLfoWLu5/W8ZHBSSHsPyRFawjBf2oTkKJywudVPO1kVVaeMum8uw5UPqZGKPqxABQW5qdfuNKMb1vWhfdpPvTP9xdzMFsF0pubTpkH1L2dW5Y1IxbhnO8689LwSleQhXrYPX6zNYk1f1yLp2t63dT1qeYHIYd8meTn+bFLKwvjERbIfqjDX0CCDYtkEanxF/4b3btBTKHWT+HaUowKyC0bar7JBH93luFb8yDdyLUyoS7Rexre1PkKVzHZUFDcLgZ7dzIe/1O3OPGz9DOMUtRZtKrgpucmanmNdy9Ng9vltQdv24zK2rnXGHzoHHIkyqFVViqhz1K0BaUXY50zSi57kcLklaLLP2+pGVfzgl3ldWi2DuqIbnpw/16jgGup8MTKocKW+ReGM5rhgmcGUFnOjJRDX4tS616iMq3+ykbRXDppF5QqkQz2LHO722ab5qTNH6GHvtDba5rwLHzvj2RKS1mJ9CMcJ9cL6Hsx5pIZbv5VavMeGK9NyKW5dkjhN8vsvV+kpFH/+z37fG64CCAh4k4FSBvIT3PPSz7vSiT0kqtDdUUCP2R0W+X/TrjAQELo65CnXnur3PXDVNvM87ggStX8vEXjN3qBTwFMZB7YabVHooh9l6sR+GsRfbZeJjhi65F7xA9lv+Z//LaTZ9udh9+gUznvS5QVccN+scc6w2QFZWTFGsPJkPvUdOF891Gab4DRu3t24/n8d/XdXoiuLGwlyg0c517WDlWMTbJU2EqGhKc5JocHSXHYJZ/wiwLtC9rzlxk/8rUVb1FLOA33IZ9bzgpHPWDVTAkOzkjUfkl/Vnv77+X8saksa+dF6XuhShcx414zUGtkVrYnF1qt3l9pwm5Vb7Tz0o0fDRbnXCPGpSeH+OQnS3l1xlo3BnXOPbmJHK0ZpmOWXMzRyaSUxuzI1CFVRk93WmZ17tYtkkNPWlpnV2UbOR5k7+Bob2HvZGZnb+VXY+VmfH5DKbutAtbeTDUQgpCrS4o8gQztvO2MLex8jA0dv25+fA7XFYwiB2im+xKCYvqsxnrHaFIO2yZGOqsnruY6OFeFWwea6WbqZze2MtH3h544nwUh7Ri9gFdpfMy5PjPDuYGpLyoqrKYKdf+EZS4m11pWSsdfQ9XE0tfYIz+NcLeWOyAQ7lZgc82cJzR9sMvQFEksj6A/Qp4FtVuEp284YD4HIHKOE3iMbZkW93Ziaj07ZhoKRtbH0j5AkftkhsOGMl4VgZLbhe7u4embuK08knCSqJCLQDrXMrsJhEtWyztMcyW60cwPHU5zxIs/Zq/qqHtIf0v+kO+mncvkCDdyy4AXtQ6V+3vePs519Xf0aS/GUphD6pCV7CUWnqSnNgiiJJpzW5TD9bdW3h7vycNkf2tsX3x1ti8OUh9mOstcoxZmr0LbwW9IeOT/nMey56gZ9KYbUwTVzRkWOnvtDKiLNtsmOkF8aXVDTUEi7D/ux8eBo5cYTLuHctk2L4z6y5CyoMpcAGHExKYrW+/dgcv5wY8Ij6UaQWLxAVl/6FONFHdi+SY+uzE8jFpGz0+vzyiByspLX4Vz1nDXdujpMePLTtNCX2ek5B+NHG0arb7rNxAqDNUizh6i9/c+wp+NfVjG3+zAplLS4zLK++rImak6injyTr/y3G438T+CMH/keIXv27jPWlf2v7PNLcK1/BmX2HdaIJYpHc9RZO73B1s3E1OJblVUlw1Y6doYCQ4YTApXHuWvW5TSm5MMInV5SUdI5I/F3/u8uLv/dux2XcSdK2lMqojN0+OjJ+NjbJ8zRHkl1tb+rqn+WFWVnlRdz+Z4MIxJjInJIOzmknXyyr9yzDGW9FhvPNHqy3x6pLPzwQTJp/acOr2KnBdEacaFB6AD+7SXXL7eGqPM2xjcbnycmldNrK4vHXDAYpuyov1NyfMllcnxJUzzqVyR1WnW0dFp0hGT6CypgdxW8ksoUvJLHeHxroTiZfFObLKKNe1hQWFyQf3KICw1qfTZz887y3I2+1s7QEEPLmjG1J/KfQDahrd9ZPz3hHRqRb1ewLbA2Li59hX3IcTUBdrc8yCpd1EJDTgT7sjyKvIscwOZcqja/f3FmIJ7lG+sPSqjg2JLzoFj/BcLaQ5mg3wF7/W2sJ1mx2zeT33/45bPbe01rP5K9yLLaUS3c77w7WuJ7ilZszbtQtaUUb1LyDP80tYN/lTrdf+LDjw7bToCkbr17PznmH93gIxqLJw1nTP3bfa3UwaZOrCtIYjqrWcufVpUamkAOpZx2NMucP/ny7O/3MMUoxcIHJXLMV/te88J4DsaP97bVVw0vcv4pejfN29/SVXJqwGCKAervnm9vUgD33OblWSp4bRJiV8DGzu18xzHsfr7GrkKqGrDWeMR2YyNAUsubHq/EW6lNZPtkjwEkldg089lHx2xs1CgIHUjtx7VVyUFz6UayQTwHx16fXR1TwPOPz3AA8Pe3XfxoaKuUoYFVAybUMgOMt+60jgEkdYywQxgPiB+6g2ekh6jjTEu/j5Y2Pm3fG0slkbPiyyoBUerk1RvDb8+9LYvEhddqWYJXJF7GBDX0N0YDJHVc5OQx6pmpq2fxC0Nf5PI5c1BffmalBut58WLhNG2PxIq393jW4yrxNSBg1NSyrHONosHUTu1h7ihTgh4FLZdqs3T19LF0ULRW70LwBe6Rm4vcsG8hf5bP0ugPOGB/VQOVVVQ/M0584PhyfwV98MO+wanuSkl+1pX6YpivhSW283GudIId/EFWguwXAy7LCdaksnTGrayOAughz90hdPxePBcz77G4a2pvZvCPmWff0btrpLL7WTJ2QWzzpYdClI7ylLwWSjUQ9LEjfb+0N1/Tg93bqnoTnfEgcTynvaq2uCklwqkqKdjvYZL3lYgbuJVXVXBC4Wz6eM5EzZWa1uS1yhhfo1jsCkBiRwES+7jJX8r4GnUHPALITU6+D6cgaH/v7tOm3uutV3p6mzbVC/6fRNxY5pumdvENUZeUns2dGhXuwcJ/XuYq/ynUd3aS4/zBOM8xah92SoAnnCccFyPQx4OkjjkJ62a5Sjx7sLS2feB3MeDi8yfbD5f2Q3xXkp8+PedTem7sHN2nWzJKDdqNF0pkDrK4mn4UXcIPvR4FKNJoTSJgGk68AMulUgVRElQcqMpIMrJJNeOuf2GNC528OnJnv0d0LV1krVtIOaO6orri9JmrT5shgd3zwgzmpYzcgZaHg+ROQD8ctPOKJkT55PoY0K0IVVMOcSOP6fArnysFHDBfCx3qnfgNdkptZx2ivVJ0YFw/n4uPPYooQad0ARSgqUcUFOyJwIcRd0of5d+y6Fyx7RzMLX/kr57lUx7P5NSHcI1tn/IJ30YIgnNN0d/W8ypuftxg6u1jCiwmBhXVzY2dH6m9b+Iu8OtIcvRueKY8DaBAFzo6PG/m9lu5n8Oo4eoFItWy8ZN1TQ+pesnfFLeFw3/mb036u1Wc+fjwGNxsG97cP1XgnWchqx3pkLeIjZ6LrL7MVXaWg6kwry70VXc3pTviOu1Ol9Yec+VrBWevQG/CK8qrbj8PgX+HouMz4WR0fCd++een5dhdHxV7j/C4sp68quoCt/D0sbtvZGifb1Uu5vVZNb23revKq14ictvcSqqadoBlPaA9BDGBERHOeR4CZnAaQAGasR1NhTZ7ViIsNNU5OTREk3tQ5ZbSKXWZih/yGlo6NiPYs+LhCorL3i4mtK/RCSnZw7d6x1n67F+dXI3diLUL3wtncFdVEPFx5LnnVr0KZj0ecb7IhFXaXEwQITUgL4klYJ4+/fbVTZ06HppKAm5QBZmXXH/P2P9gVWydBZtT/u3kU7YxMv/ZmxJ+75HLtjAyf2nowbaNwqJrW7P9HVuF+e0b+trPuH7sS4xPR6Yw0wDyaSc6PpJ8f/KZAGoYfqv+ManDpgJpXd6d27Ac6S7AOBSeHgvPYArtAsinNEREPH3qtfTfYSZ6w+Pca/alWIfiy8TGlTCR6IoqmZtadYCmMghLcS5pV7xjIM13ziTS+rjqVRvzaMvcvVt9wwd3KuimGWHeflEOBrpButzq3XbWCQ6lr67TsmZdIq960hCuBaGEoDRb3+OxWqg5ylyztoKWNj65yhCnn5JaWdA8TZlGeclmhISkLfUO3gNTY7SR7/dW9BtxNBWq7cffmEnNO8f1VIqO56jcUdJrYXhJVRpuUKUKEy2PgctX4a6qDLPbiHJOilZ6fr/+oWDdiyeUf+1Xxa+KJ6H8XjxrNu84OCfFZk7J7/uyb/HrsVXh3ANN+HyFw45fkJwzVq5KrHYhCdicMK2Vz74UH0aV6T+4PftlpXTl8yJ08/pev6wAYVHn5NzzNsc2pxfzMOwjbVld9kqAuluJw/6e00Ixb70atBm0OnxwclFHgECVubEHhpc/rJSufJm7Pbh/XUbW/AtzE3093zBdvqPc6LyouU2wewvUcusR2ZSs2dfya9zUPdpDr7O7A6xwT7BVmp4rgZ8SOaMs3/IEJsc+ZOr0PcqJQ9qbfr7ZU1vnV+6fpuKf0XYreUYfIyt18WlYd992LIxps07deRs0oBvNEmSyIA8009a1xhY0fPbru3t3tx/fGA1JS44IyqxNRcM1G9P1PkY2ZS8tNGXm5mUSCwoD6ufmIy6XVWXmlVU2xk9ONSVUVGeTqmrDLj+Y8msqpmTnqcCSkwmPJxOfTSZFLidf/wBOJURGTcYTHmvzDZyQq1oNX0Cm6l3TS9HTGdfRSNG4ppHKFL6wHlXGzkvnvUf/Tj9uUNp3h2arJ22Q59sBnzmIvHdRX6kg8hENyhqoaiBdi/F0KgpcVB+SGg13rYugDzloS1/K821jmd15Dd9/REttryMXtxC89S9aELXOWnQYRHoqZ5ztcuI1PmmBNfbVv6RgkaN9yopqhrPx1XcsCM1B2blAGmLs6r2iLP5/hbP6n+1qe1qaGm8v3wyn3l2ub+m+Ulnm427r4h6SnxyVEJLv7upq4/c/u6f5AvaaFte15gs9XY182LbWFtzVpvOEzjm6k/FMhtEM3WluesDBeHFm2nh+yKE2aOyGnYldRnxmckBEW3xPqHxeir65glwLa0B3Zn5ubTFRzeuEpUuSmIMQvTjSGjhqyLlHqO7H09G5rZqnnNZbTxNmRnNJLa24jga+nu4GPO75T6DRr9ZFVty1HVmpyelaiTKgVt0eiSl9TMNzehDgfekNBpCDtqKRmZpvQa/sC54WSssJ9IWxwIr64MCyuqDgssrAoMrK/8cUjS4pqxgZK140Ng81NpIRLrcPrQ5tam/KrM5sbOfm/qJbo2vYVecQKnYi1E9f5q+aySUT5UZCWzm6Ni08MDjYxryvhGKPqfC3NTZQk5Y4vKRsLCvS6H05KSW/PiHwor6z9vEKYUpwZwop51pqSJOEuaruJUNVuah6yLEQNwP2WAUqzx+TV0kEl/3rY2bVq/F0lXY0wZXYVW5puGrPbogVEW37Ev1vbZX5/0t2gKSKla0nJ89gqeuEYt4zAzUny7yaIymoYAt7OSnxX17oc7k67+sanZ4oZXjHYLWZrvo0jUzU1Y+MtRk308fl74xfu4z09YyytXEn+Jn7eEbZWHmEQZ46GAzGpB0ECad5xN4aY/HmDosmhPmmRLrQoJa9B7emVu8N9DZfD43UNisbU1OmpIR4vi+dYiNBNIen/EPPZxeR1Fs1A7g182rDY9hxO66Ee2e3kh0NjSwMzOOSDM0NSVd0VRff2PLSqgTCLrY7y8qzrpjy8s5ooA1eusFr5Sn+V4ua/pPokIC6ls9Xr8LzuiS/8DZQNqyMJfvNi1n8NlHOmonY7C/OQB4kVYC3fDMwbjxtgunlc6wyHSCptNv8x4qbqxKSm6vygJMezWFx/g19cKq/OTV9Tl/O2H2EYpdn2jx346bVoJiLaB0nUUwhJNLNWt7I43aZfb6VU8G8rXtAsONTgRDzPW5k3oCW3b5bUftIT3Xjs97tXbuQsKTAIHKY1S0s5dPgSHSftYy1hnmvfdDyK3AYvY7q671bWZFg8l4zrzFBM7LKsNHo2LuDGIgcZmMW5KoAl4+u6MIUnDyXk1s2J6d/7CdTrVtTzN8nFGLeZkbCLrE84vV8ZuaVhCipicLCjXJD79GsbOeb0kpN7xWuF9zOMPRBZbPzshUYupa23m0vbJvMSK3ZH7bXWXZ8OfzSQ1lBOnsJRbAdv4iS1wnFNs6CzUl/9woo4W4ihuUpfg8narWakv/tkkoC7fiNKlJ85h5WDCtOeIbbD+0aFrRv+A3etA+36QvUIbc9pfnpEELrOWVqoSlGZk883V5/O7oK/UxkCbC8wU24/K+SzAG6FHoKMP+qLqd04i6lDn/NNcYjtg20TkX5sReHcoT2jh9A88qPJ95UeQq2JPx7SirOvxej5qPlN0mIXDj8dxQzj+q8MkW8HR9ilErK/pb3MELDR917JpK4xST1fxh9q/kJOb95bf5my3pBXuuqzuKaT+XlY/kcJ1NJlbXSvu9Zais7Kzpr2b5xRsrzx2Y4JMe4uCbF9iQlDiclGttJ6ejKSOtqe+voychq64vKvdgKTcp1FRnwVO85LdIkk4wKSSC7nY/2UOY7J6akK6GFeYkLMnBNg5WRhmP8PWf5mCt4Ag1cM2GUkltZwMdzhq/wZKChcxqsNI7m6+d9/1yheKCBMwlWQ6NdDfVe3tLceS/Sr4Z4LsqgryAcwiNcXaJC3QQcwsLc3cLDHXnPCECFRYLZOMGcIgxH9NDdmLZcDBVBxZjLYQHki357SjPjFLBnMuATA0vXYvz4cM3xZxJ+nr6AZO1P6c/vT+1nRp4++yWYeBbXGsoffpU6hxxJT83IzyCrv+Aj58uTSfnOJyIpxZTiyBPOX2fL77ncq7DKCtfoJ+tW656ew5n3i+vQ/P07kV1qZ+tTZKLiA4ND3Lcp291GdBV6rhzSJxlnem85BHsK2lnvchzoGb11w09UDSDXae44tV/JlRmhKCjUfYey85lzo6S7jKZCaz67vIN+oH+6QmmoNtFa9cvC38dgckHr4yeVjYtGgi5E44y2qsqS5gIo7QG2XEw5Xd7DVdVZS9LF9L7zXNec8QACgQCiTbRfrLsteuKDA/2KWLFB73J1bxG5vhs0F1+p6yUXVXdDDQ2osYJc+MDABDkHPmiInrP+vwoxFqIhWSGdjZ3xSL8EZGvy4S4fq3FElkzpTo7bsU6t08YZxaTElOYSYmJbKtK3ntk7U9vAWE/DzNTYqMuXP/tsNhcrxPPUwJQQRyyJj2mqzSG3XauWW9x+/hCRWipnKsbJb2ttq6luZp5yycTqKt2V3uZaNp0VIlegExenWKCSHdycgDnng3WMPH/rG4sLqIpNTbteDmla3kxZQ9NYWV7BRDlNfkskf7h4IC35KvKV6/fUb5p6Wn5xhflpiZebM/Prr8LK1RsKcZ7pVdleSY3uIpfUbMwt1FRNbHS1jczccDgMDnMCN1s3Vj2WTi7MIFz799/9Ti7wM56Dvf2/QdynFC9vw3oq31H9iMa8QBBgv4PGBLCMHywaCK1stwhCAQwbOKZo/v0fBM2QHmOdWp2whR0ELVAwAB1BL+MEVhOHboWOAzTEBKiwNQD4PFrB25wsWmXsgR742Q6oeowKlwXgpz4gA6sHl8C1DWD6SAswFznA31+rPKvRYKwa0gWgvYZtrwbSZFuxiLEdYCFaJBrCHQFgTIAKAK1nuS41lmpv2H47YAfN0CgMBbjSogIGb/UgaUgxuLHQqFsM7s+UgGlI5XMw+CUZo0CWkHYkFMFYIrTM+AGRWz3wh3XgxkIFbjsqVtEfbAoSrl7a3VgKbnG0+oMT6WXt4o+Xq5PWTcnK1e+TW+xopsSrprYX3E5JvLLakVhTJDe20d1iU/3Bvnr1DJBq+nRmFaA8ln3xZQHFjy37Sh6qgm59U+4YxTes3qDd0LRGnAas0ZItmy2it+0LyigW8u0C9J4MOmN3zjd6QzBsHmqPmrVNc6e3KY4FawP3hI15oGaTm3JPf7Aa76SEWesE+4STucM7HVDi3eQ4BbfW4GvT1M4KqLUaHdLx4C4WgRNAHbWHgv8ns0YAMd9aWOkRWe9Adtsc/VUP3zHQqGYkjCF2APLZ2csy4EdEDPyXOeJKJ1fR4Fca1Hn/vgosmT6y4KgVTycuAFTkW81botjr+8iksuxFvXEO66iZsJeL2w7YB93zJhUb12DhNvsDo17aK+W9ItDPdXbYTacB5K4rxVkT/2rLH7x3SsWvRdfnlE4Acd5KB8VMjD0AekJnVB92JdQc4jys5m5bMYXXDHIDJn5xeTuZmZTQdGEK1D+FK6O6VopbWP7gBBDfRBZ2LMabBWDc+bZpetDFheta5G2Zc8Oh+LIA6H0DZAaA7p8M8BI47HiVsYBDMDLwOXNKIQD/83zLBcei5BeA0bIp5jSSOraqw0CYZ20iVBOG3hNQfP5Re93UQ/oiMzzaeep5cy+WW632g1JOIPNQElJjdRIKnB3FxHT1+j0I4BDaQaIvZOChSYRkH+v2e5sIubwo20/7lIwyDExDJ67s6Gu1Tt828SiU14sBWovWpUBCxFhSRoQdaRFFHHSmGhHQocsxtuNv50cjhgYz7d+CVbjQmCQRmVEDS1FkRvJkKIukJMX5VEWApEmsTPcMqqJwiA/TK7pZuocUy0oI4rXO9VTcpv52ODp4aZ4jHJtiWoyrBYVgFYYNG6MU6c5zNJzauep2N19Hm5fG1REPTdu8jsZoPK39toX+Pd7AB3MZGf4Bh8WAYf6GJm4crx4W61xX22fNNg91PFwvppOL+dLF9kNVg9GHaGDP2hi1rluMmvG0wI6y4/EbPYRfWIOBJXyYrAogSjEpXte8p4JwmEmXyZJtRk7y8gSgI2oPIBGBiAWPQcWaHDhvt0EvaxTBAvY2mp3q0Dk0gg/gCTmu7M1CmHlQUWMLEhAbxoJrIt4iMB4AXiyyVUck7yjltAkLV3Fo0a4BvVD+DODNH+DgN+iOhxH69QxXOY8nrtqMAr8+Gq/y3bCq1kMDtcbs5iAwRhM0qXSEwHQr53VANpC+qUm82h4GJCDWMYRRwkbLtOjxqIC7WcWLNbtCKTmj6BBptqAL0BgIwqRMRsnwJzJQAQTk6eLMgTCgDEqLI3tO79Xso3fwZ+dwUrG0t0XYG+egMb+Dkn0wD6ZikMe5Ls2GFWIpmJGlHDM324uMRsk5SrIAHjoOTpyZ3K4JJC5h4t9uUEJiNwgK+onFRRxZgyVY+vs2pWDOrxLkkDkVlT7jHTKRxbrZpMKF4j0VAC8HI2+W7E/k7Ui6m8dkT9xtouvqxa/hLQoRP+3h1tFNK/XNmoVSCt3NEUmQVKUtSCLXNKFdSSNLkK4VU22GVPbrCYEZ8yTKbgKBgXHLpdCkHZyxxmxjViwO30xWbVg2bICzBIk/KSzaWCdjwg7Idab57JPAbs/zu1akjdWjmaBz2A2j+5RvXz8hvk//ehExrBbP6sfq8/F4xEH2KABAIpQK6vfPK/C/ahH/qD+Xese/quSj2vVbDTH95b5KuqslODiry/NAumshxGDBc5jAKCD70+8t4+BccEkVwBN4BV+gDD4pvvUSh3X/7x3F/FPePu+fj8sTPfDMB1UEV4TU7ZJ1XmIpi4K9zM63s0B1Ec/QnInN+njdCBSENGfcLHs2oI6ghzrq49K+ouNGFKAsMvVRD9Zqk11pPodmM0wsn8FqubUlWW6RVlLIQGpWjvJpGeDCmV8+NI8j4idWlUC4wI3FBlEZpYxEuFKwt+/IH/t/RkfJuYPrQ7+H1ceU9xybYNKd9X1dW3UpAR2jGTUkFufHh10XBaG8Krfa5lm3JosMAuIgm6WUAi2yH7sJacNpS0s5ICSB8FVTLybPcK6WY2HcmQSxKMyD/sZ7idgDeAYfwAbJ1HnyPfbSZz2mXOX5Up4gwsJqsRvdVUdySKMCCYNvrVyStopI2b2gAStSxLU9FZEpT6Vzn0PiCqz0CTGtywspBMgtFbmI0WXNHkxA0ByxU5cwwrprDHRII1o3qA8Og//VrMXgUA+tk7AAAVTptINpsouY+4wED7WsITRnMqGt2V5Nky/LWExCkXCj3hQ2Jdbp8VKGoXUrfosw8nVvKq4Wh4LCfLJOlnkWohFLIkHgjddUzXzaVTNwJBbLyiAgO+LHmmnrpm2Qh5uS7EpaQXtFbxKG6ko6ieoQ37t/XQiclItRWan0Smd4apgMbG/I2TeH1JuOgyfgIdbccCxzlMeFe1OHnd2ODm51QOgFSSWBGTcjK5MtRgYLFaaVLPiUXh7FqugZ2Rs+KB06o6FEJA3CVZYDfJ/HHKyxed2iSnp9DhPPQiT8AgJYpkROIXHX0XE6pBiAW/VpJGBpj+V44l2UcHRYFVnIzGFDqWqJZ+yphNcrf1I9to9z3K9+zUNiwcY5BaXYIWyXKkvelwOK5WIr+qT3NdWySXiTFc6McaNqsRGys39AHmTO5cngrDhho+xixiLI5Wgk0+SlUROG28XcdVA+0AodKq+G6R357CJv7Z7bibhd1ZFpHSSkmFaW0zqCN4XdoC/wU/aQaWSswTnqUWuNdVGYTDJG5iWvgS3IV7gMNfAwyBsNXlppyF8Mud87PJBlco8ceSaF1KIMOTznWUZHmicxSuNMESNdMoClbNutm4iliJ7D4TjAXSg1TmPuZeC9/uVu8cCcgPG5NWgWeROa+xEdCIy3FymouySPEsvxlGfhgbXL8vbj0cN4Z5KyiUFKJMjb96k1rlPz2fhNDgLQe1/CXHA4MRdO5N5FFl8KvxoZanTaLJFiYGaKh9acnJrGkbVUFFkhk4BMigV+G4eikTAFKFBwPatCcym5ECY3t1CgyID+RSF4qaSpSNKNoCm6l2Lv0HZmIrPGPPK0D53Brxm68u9tquM9Hz3KvCiPJ5Ws2pCj+fjCMBQ9OmZvnNuDNUInChrwUJhKMbw/C0xjYmVZ2jKSgJXQzSGU5UxOk4p48CVBnNKEgaWYePlDJQkJkpvgWm7sdbazj35GNtYbXsYWb0enVVnZGa3YP9RZ0clbKln18kjgpB+3ivRofNh6vHreW7pLWUkwJQ4RzzTqYjOhFkObrnX2G09t0E5sjpbOM4/75Xv24Rycr2JXTinlr4vBHDII9OntHtJnQz0sK1/LMzilENRHo9a9qd90Zi/2aLov7tb5j+/udeTz+SKTziWXid0eR1dr1M4Sm7qdUTnNm9PTZjZ9MHIU7cTwTiIiyDLaEenznbf4bKq8UcpzW6jOLqZ68gKg0a+9NN+bCzjQhXQ4CzZ5vcVbXhf9rnt/02FOXeab7Z6ZqE/rm0csrAfBA6qT+W8UtCLW5otlM4HloG+1Igs1FwSRQa0SnfSwUK6SHd+LfEuVd7dG4za5dLVfaiV8xQN2weQZXFEhrNrNyffL78SXktaKSf3hZVj29luX9bBgMjHr/uOHvyA9Cpjgh+IuCeqgHpTUxcj3i3nWulvxp2FLRcrYMn/OXOhWCgJF7XMpftfRKgKsWzePCsNw8TqiCCk76CHuFEfARhbEIpNb83AmbVp3HnITovI5mtUN+5VYtthMyWugq/aH8myJae8ac3/JI+KiD6QLbbDzg7sMgnXcxdEGk91QF4Z8iYUim7rS8wzHYjtEQxWYRo7B7oYyFdbS2kVlPUlh2BZxGqUNgDeAzhHUlfgUWh9H74hDN4G/SeoJUThLGVbYy6r8YVoPmNtTMk9rNGqqjZRS1dU6aKrm1aTWmb4XF4Stj26DDo2HRzE6Wt4YdpT6m52A6jibsjU55FBP0TPmVOmC0Djy3E9Mh1bYAD+EZkVUwxmwtagaTgAy3xb28YoXhBrmcwk0UzOUHua28G5SDDW67stRYxtxzwma1O+8de5lY+An6g3jzDFl4qeULh2Ktm5xsiziu/1X7aGa/Inb07p0F+nPy4DPU5//VXfwqhzm5eLpq3MjcafnQY7js/C1OD4h8ZSTxBynN2P/q8OsUCNN0h0iN1Mk5olbr8dRB2Rjx1TWa/DsrVhbkkusykrculztYDmt7+2X+oFbQo8QhNy2bKW6lU1WlFlCe4pu5w1qi4uk3oMsoXnsE3yZf9lNUmR7h+djWCfLqqSXcxeZdpKXolT1Jf0Z4EJdjq8aK9+IZ8yY1S/fdo6y4X0UgowhrU6EAt9rUS+Sp+bT9ARdZuU3s4minn9o2xTj+hp3QuEflOlrYigOBQTcymlvJJ4tj4RBUmRAwSfMh5v6uA8XsytxZIgfrb0su0nWCzGSkFPlodhK0BhekvSEgGQUHO11agE9k1UN6ECWmrQi6+LDkcAANVRqgnsVlM2JNsGWvdm8u6xVIOaHeW+tdTfgCfZpI/uSUDighS3hikDXrKAyax0hA2vr2kmpuK0TUPmr5S16q+YjGwzhnyGkiQmsx6MtCRs0n2tGEtaLpy0yAbVSMXKkPF9ptdv/2iFbjxCvQkx9nO9BxT+aab8fClJXZpgYhe93NoqHuOQII2nOFHcwqQHU0wT10crOo/E3wcPO8VHL2yfhEdnQLGcPofyqF3+2rMIQbeas+AdUqBxTxVJZkCFzWA9cV65xVbnCtrxtxR7sxYXD3tteCoiwIu6H6RgZ1sqK0/gpFFcOafHxyuw1kGX3kMilpnSiy6STioPj+BV/6aCZvfnDwZSm9GDQhlM0YPreFboEwypzo0tacmmt5HVxNFbklNq8GjojXgpFhAalKsb1VwXrpkmTxMneuE6gho4wzzpgt1mPI0Tr8AfFZZMzI00vyTUptGjbSdrBn3z3mPwD9+Fpzo7KTlGpAdlkzB5U4+5Suq3jjcsUd0sH0vhu426rGS2FVzNzatCXI2zFGlRLWkqmFUT2AHpCtPft++lIdafWNnkjmdy78KOHn75A8t/FW///tkQSthfbs4cIVXMXR9NX1+2ndDuYKzvdslOZNlIhZVpDaq83Fnk07eceRVL7/hgPaQkFyfNQ5hYkiyF7xe/wKH5N0IWuRVFDC4k35UKL9VqQhjE5LayeiFbWDt+TP9iChwb9znVOn6XIAwVz4kZfgEvxgMCX2pbfg+B5peAy5bMEP4u3UYr2rStPu7xHI9+QbUGZ2p2fJfp8BitBFVrDxwFTWE1CjnwfpMcpafutMNts4RSHtSKiHqL4Jdks2w/qUW5KovGLEpmS1ZTkyPeh9jj51n7bHJy2Gaf88+kh+LoKUW+i6Gi37PEQfJJLYvZoPkMqsmYu6ISoSxTNLvfGvRuU1EKlpBYqJe2CBjM2yscZv9RABfdhrCjqFEVHm9m2925/6zoYZ9WNQ4S8onwfSg3W7I3VDZXGRlCCW79RlntIxET0o5QSARC35BBRA6DWmQCwCTW7bzYxCBu0Fm4m/dXUUBUpqwwyF4hp0pYkpNvIKTiftaTRlWHjgKimJG6GtIs7UGU10sHkyZpxcn0WcqaejzZTJWFSwGFAsy/QgGbbQBWCRvyWgEv7t7oXfwW1/1xbzEQBAACY+jvXoAIArDbrf3/R7yqz9AbRAGAGAwAAEMD0yLoEAPOF/6E/40oaBHP7OQr5ykD/3TymsM1BS6cg1TvxlSZ8bgmqX/yan4B+W26/R3AQnK585q3Mma5AoJ9SMkxh+9xooAtucIcC6pADM0Te177tI2K7QaS4GJavmpJEHLNMVlKCp5LT9UfnVBA/NXVWYXBD9RmiJc3BQbqEWxVMYSJsZj7V8ldnr5khbrLF921YvdNRoyxrhsyUVjh5nV6doD4RQLnmcdYc+35O2TAkHO4b5uFIazRA9ETK5SysUhWWNNfK5lHq3PosNauRZwUqbJ8UtcOMFgfG9knDCg7IFaywSrjkB4U8+hCAv66NmCsIaezhW+BAbPwgMu7jCfN37EO02hd9AW5GydYGI5enoGrjMgfxl6EcznakvF5zHo78FiMuo1z5GOdf4dIXY86jS3H/J6su8eof6PQPNHqW5CKpG4d0O4/y9kdM/yBpXJE0xvjPLXaLAstFWcS4T2+VlM+lx2lmiCu6tppAXsaZF1ValTIoEpdqUNl+q1+1Clzp8RpTOnuvxDEjubgB6D0AAgAAACDPcHnRVNJqebZa0q3ahb4isG9S6+Mu9H4F01lF9xfa/TmNK1T7B4qVxmNCIKDKdFS4c0Wmtqz0Sb8bfSzXWt0kgSU0oAgX2EMFFjCCZXUJeZ282zHdMHmuap88aPrPIYKfPXBUNYeJVe9VBPmuDATyVlUir5HPymiK9jszXJWahcSIxyqC/FUGAoGervQ0pmuQAj3ZY9SZeNhC3lUAOAAY2D5QIACg+YODihkA4A4sZ4GwcZ8FhkNwLTxdi8AsSIISZkE5rem2crBFpytCpEQEQQIEioEnS5rMJYxnIEKXCUP5zdFIOB+SrraB0FbrbBnNun4c+CGIK1lfkkY2gveKGBIVB4gVyssJ+zBBtCAZXhqSG8m5SNVI/4s69SRWVLw4RiQVUpdQfCDJS+Tg+riyfiSjSyiQygbxKQgnq4NLMWVElz5zNiQlbHRKg+usEiOYr4bUTcQ+J6a/YbpY69+SyHW4teXncztzVuiD3WqGJ0tujJ56fdEdL1ASnkcM67PlBSYR5X6pmtgsYioesgz+E5wRqCi3S7KnIphK411Vzkeg0wIslU9GMNvqKwpyR7DEeZoonulizfY1l0ewbfQX+KhFsHNj2JhRERxqskKnuSI4teRFznCvjbHUNrc10I9lZRKjgj8FVdqveRKK7ve4o6QzqYli+i2UCIWi9CkMdm6i2H5NxUNJz3Kehb5BUD6wcxPF9HsoFGVBYTDNiWL7I9qk8FC0ksND0QAAAA==) format(\"woff2\")}@font-face{font-family:Roboto;font-style:normal;font-weight:500;src:local(\"Roboto Medium\"),local(\"Roboto-Medium\"),url(data:application/octet-stream;base64,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) format(\"woff2\")}@font-face{font-family:Roboto;font-style:normal;font-weight:700;src:local(\"Roboto Bold\"),local(\"Roboto-Bold\"),url(data:application/octet-stream;base64,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) format(\"woff2\")}@font-face{font-family:Quadrel-Icon;src:url(data:application/octet-stream;base64,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)}:host{display:block;height:10rem;align-items:unset;padding:.75rem;border:1px solid rgb(213,213,213);background-color:#fff;color:unset;line-height:unset;text-align:unset;text-decoration:unset}qd-icon{display:block;margin-bottom:2.8125rem;font-size:2rem}small{color:#171717;font-size:14px;font-weight:500;line-height:20px;text-wrap:normal}@media (min-width: 1280px){small{font-size:1rem}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
22346
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: NavigationTileComponent, isStandalone: false, selector: "a[qd-navigation-tile]", inputs: { title: "title", icon: "icon" }, ngImport: i0, template: "<qd-icon *ngIf=\"icon\" [icon]=\"icon\"></qd-icon>\n<small>{{ title | translate }}</small>\n", styles: ["@font-face{font-family:Roboto;font-style:normal;font-weight:300;src:local(\"Roboto Light\"),local(\"Roboto-Light\"),url(data:application/octet-stream;base64,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) format(\"woff2\")}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local(\"Roboto\"),local(\"Roboto-Regular\"),url(data:application/octet-stream;base64,d09GMgABAAAAAD14ABIAAAAAjkgAAD0SAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmWQcg3wGYACHbAhUCYM8EQwKgdo8gcJOC4NyABKCBAE2AiQDh2AEIAWCdAcgDIJJGzR/FeOYVcDGAcDIzhY+G2G7HZCkFLtzdCD2OJDUrhz8/y2BypB1FdMN8NcjLEq6h9Jin7h0CobCIBKfkpjgcFf4Hy1Ki2VzhLsO8QHfclaAnoJH0JjAmlwzwh7WH9zsaCdlCk9cMlt5NdnhP3qPEI2bedRmx193BraN/ElO3iGa2/2K0WND0B4omVIpFT2yx2DAyDSgZRLKhkqUolICgrRiIGaP5//dL/B3kps3BWBWFabLMytAx5o/WhYKSNEcv3c/v2QCD/s6TSlNKZ/wLrHab/RKuwrVKnTAxwOPVHs4rRxJI6tU17a+W++1tl8qYg9gYGgAC4CP4AH4AAbA+H5reYQlSiHzrhZInc5skZIiqQpTRaT0X7enXcsJ7h3g+61l8gMzC8csi0a1RsWIPa3m1ekKz5ISFkb2/nVaM7JkmJGsA6Ka2011QF//G7JroCRaYME0UtJJSdEcQX/VXk9Qynbgjl9////96ocF8NjgCBe/2CrwpD2+Agu8oFm331TAx7ffb7+4ICaJSoXUCYXWZi57Xm60AYACVv//dfZ+e7c8783Vi8LghB0uumQcpDJduhSVdCQ9WffKHhkCdmhwPWscsmdCYDvgcQiww4GQ8wJIVToALFMi/V/+7tdd1u+Ii7L6/n/7tfrf3J1F9IJHPP/QNhIHaWHF3w7ig2gyiXjbEImESKhb2cQhkQk00Ij/pWq2/4Ei50SKlnadi8puXXQLXpJGVzpVJfVFanGAkgk6UY4Kzqm6j71ALO88gugU6BBCm2PZXFHbbKmxoriVtRAySW7+Z2aqeUG3IoXC0DAFMRiGYyOtfa9sw1VGX2zt6sFKgARt55exme0jzSORGwzQvgACw2H9wjcHw0KABog+d5BEiSCZMkGyZYMQEUHy5YOQFYG06QQz6isIBAYANgBgQACAQBJBAGAhTQPinPNMbcHJuxMJoeDk/QS/EHDyEa+YcHASAgDgBank4XsJ4QDNmCQR6mEYlrok63IeL8MmWYql2OTbpTE1lsebsddMOweMe7zpJ/uFrtJNe3jPGB97Wa8p0d5fogNTor0tDI1hWtLDP86QUoqjyqADvxlTNOny2Gt+s2IfSxTSiuIfISCGEFBYscERIESYCFFSpMmRp0CREhWq1GnQZMSYKQtWrNmw58iZCzceqtWoU2/UmHETJk2ZNmPWPffNWbRk2WMrNux75rkDh9448tY7733x1Tff/QBRyjoEFdxUYanjsYEHBBc8aZjwwIaHQOxJrn/GlHDTzw6DHDEUGMEENrAb3D4vOeUN57zmFuZflCO14dGApvBY7I1jApOYwnT4aXZsYgvb2MFueC9H9vEMz3GANzjCW7zD+/CHvPERn/A5/CWvfS1AXDJOt/UqGEccMtMMSSmrVHJANW+pZ9sGXIQJqvvOwOJ9uwgNkXX2GeKSWWHrCKREWGbMEFMsP60Q2HHTxuUuPOMFB3CCDUeSw8QWX0CRzHvKV6xiDU+wPkdeKBislmYxlkFeMwSMYAI7KuEWcVANo0ZQh/rwXl7bxzM8x0H4G4zv+DFHVgZ5yxBGMIEdirCHfTzDcxw0hjPGyZEsF1xQbCz3DXCEt3iH93NEwiQHFrVoQJPeB0koYxVreIL1Ylam8CwAy8FtksEhJVyweqO5R8BbvMP76w53PpMc84FLdsGx5yXtfOVlBDDGeW8Hb0AyXQUOLHnWwLU4stBE19gT2GedI1PzbltYrkvJI5lpQcy4/IxpzGOQmlBpQmPsZOmtw6YlBID8xYrbaceBzjhYMzGe58BKBVxWYxzF67zI6mrSNzmM1Q3jAsE3gPGVCHOcz4ek53KcTQTSKY8AjM5SrZ+Y+EeIhPI7UWfvGDW89y5K58PKfYndi1u1/qfErr+TV/NNwWnyrv1E9b8k6n8WOqrVFSXnEpUVsdvfVNr3ZfZzmBdXdN8y1jPkGAWjeZ51umEbuZxbeZsWXLCZybN8xC4MDnFFwnIfeooBozEHKY/X3JoboWQYABiYFGbqSgcDOCMYC8eDAVZ22PF1xI4Gk3LvsHt0x9YtX+XJIyy0/UPDkWWlXf+8TM3baEcuHZ/G316FlrEKZi+MXF9Y0Zkw4vINJ6gqLS9H/f92XIbSjnfuuADI0TDhCtyZJWdu/Y7BBf7/c86I0hhWKcZ0FWom1yNlXkuhOg4tt2obLrzLanYpCofKyK07dXBehnbpfjL+ei9XWhQs5yBDtGu+abnn1t2+eZ362w8HMNxQl7IIACshGMJg/wMnQASCOHnMlGjA0mfgBKPA00zjZ1ixdZY9+TnHz3Pl7oKCuJBqDYQ1/VXSqANSDr1n54sfXMAoWgAveHFKTqVBGEGeIEQuwoSIEEmSLKTISpo85AiRJzclslMmCxWepMrj1IihTjYa5KRPlEtkYlA9VmMHtCDOrSHYgHC2VaZ6O+CEOQ1iuZGZOzkUKNMHwMCrFnrqg2Dg1QCe0sRTRuOQMdNgZn7HZdYcpEUrIKvWsdgIcTZP7ULZix+z7wDa4WOEN96Df0wks2/LvO0EF7gCNy4hDyy5CSgKAUYMhJEkLznCKBDmYpWjhR1YwIxjwIETrMBkm3duBGIiCrUNcCACnB0IcSAbpyqyhbOhgVb2LygBplAIU/QYUqkKT1PBBW5wgTtwuwvlAVAKaydgYAarMO0dgBpp4BlMfPAZEmjP9VVncQ3+t4iasQqFBkxn3qSPB85nW9tS73nW2iNql1qYjppepm3PqyzMeq+xNlFnBdQeAorFPIBDrmx9gMC+Z7rnsYgwIP7/8jwBso8EBXgBtQg6zc0fifAJBfaPxYYRgCsAIH2BCyIbBFZFxHmuhHQxIFuoCYwLDBEQUS0L9iDolUK9ozKIlGqRwPY4dHw0PTfTBkbvpKmn0UlL7WqpCuxvXChUPCkOyoXLTFgQ/wAAJNgFrZsFoMcQSOWGwqhhcV2vHn2obug3YJBGL3Hywb4pSbQYtwyjoRtxGwyE2xkAwIvYSiAB5GtTDoB2j7vgv+X/sI3uzJABCOEmVLxHzOByCwOgBTD+LeA/4L+q6wAPehsAAHHSpMLDgwMbebpGK2Ysv6NB70O0QgAY0oKEBgC7NC169Bo1Y8FLHzAgmWbTb/eZ/rRv7dHxG+I3xm+TU17lzbybL+Yb+S4+Bt+z52Ez/Gcw/oUBAADY4bVo1eu6MbMWvfKxyTRrxZm2zjEvVvhCvt645XsOnMkErowDDEbEr0bOUVmr/t77N/RvcI8iv3zCWdKlSZZgcs+fG8k//9jNurxu10HmEwAVXM8yGa78i/WJM41a+FL9yWfJtmrNE+s25Mj11KYt23bsIsr7sn0nSPJ98NEnn31R4Cs2AADYOcJipHDIaLNvwOGlQdTijlY9fOp113WjIow9HT8DmWZf4F+EUUuvSTyxLsuGbat27Mqx54WnvwSiVz7Y66M8n3x36IefSH7550P/FTjbEQz2VYOO5ICsQlexqzko1GDfkm4G9h04KNZgv+OAosH+wEGJhu8clGr4DTko0/Abc1Ch4rdm23BQqeJ3YDtxUK3id2G7cVCn4ffioFHD78dBk4o/ih3NwTcVfyI7iYNmDX9OErTCexwcXNbwH3NwRePbi4OrGv9WHFzT/oeDLo3x79cIdBPVKEOBBCt8mXOWx5M9+a7mtn7FpgDAvfYk7l4PP/iwlgruKoKZVNzLccdaG65lDMeyAQUAAAkgPgNmSw0h6N0iiHHntidkhu/tDgASZ/YXAshzADBxQKJuAHBxDgAXCJa1YvxcfKPjaSsBnx8cAyGwMRoGOXl2GmIAG72gzdqqg5bRUOmJWXUAiPFCCP/ZCavx5UihSyPN7ncAUnxmYLjgoi4pMoSgJXFjzrHHWC2PMSF36KkVZdXgta8vOkwzJh8lmjy0UmylxLRSF3B6LmDbKg4ZZQw9nze+hbGDjSCwWJBWG+ACfkhnLApiGTdBQb/rg290HkAGwCw+s6JeHrmzPIs4hH1krBB5xNjEQ6E4iZ9ttKYVK3AUocGj0hoQTr6+MsL5FQX+cbghlqJq29jFobVsnmObGorEhBxMJCbFfMPdIAcSjP8vOcpHJv7xKcLLe7z1Rk1+ZKQx4+foTMjeW/XMCK5FDAgppYuTIHjCVsMILFQGnMhhynR2sEY9NiRhsUmr5MXTMcHYiUJSy1XZAbFg57cy7zTDyZQT9dC28g4pU+r3iNQafzqg4nzAW++sx1lZnmXBKtTovWh2g1PpRKN14wSiaNXZSRakGq22erEYbRJ05o2qXFC7zEVulZYoBeKsg5miqWTVmQyV0w6nLNpoovF7lQpno26xbVAdDkOoEd+iUkMIg05CrBRaY7HeMTc6COdbHZltlPLq5sbIyaPWlVTRYGNXK5U2jZo9ZbwQeOEkVlif8ApbRKyF17vBobCiMDq30aeeKYgfy9ZOM9z0dzBsLyjlOP8vf7Of4k861OfRneQVlwJCr++WUdyZmIGSdMa8fMlJrwhzNsiwRCC9mAqADP8ZizJQQNgWY2njksWtUxLBCnWfijEU+IgvjRRLWuSB6LcvSGJ+qCXou4RRRjAEnlWzdbkCF5CugIr5qIzzF3X3STNv1gxgHuWJH+TpxASVdNTu9tKrVTg+z+RQ6XXqY27H2iz1SMZm1OPOJBh2Va+jxQPXopqLXo27+njZDKJnYVASMFx+QMKyK1RYD/cSl+o3VaeV5cClGp9aQ7zAt97UQqs6gfLFLTib+sKm3BOOYyZqmf05YrT3umoSBrKo1kbh2HOeGwx8aHf6mG5SqCDNyy2XQYV7TYAqUKs2t0bc20w2i1oCgH2Jc+dNeLMotUOxfXxFHA5zj0zDqLPxlrxsLiQFV2fB7nJIyGsel2ww3qXhOUhR4CZsPZu7jAnEuFjPrcYH46zZd2pOdKimH0xk0KS/EGlhLtisvDjIydotpoeq0n/U3JvBb5HOH/dP0n9L5+worjydu7P/S6hj7fwShRO67p1h8RBtpx3bG7v2mrHnqSFcqaa0v65hDpdfBbSio0cAMpVKILdxdhRAJn+rtMllQsxNS9v24Sa5GdqWr3n0zfgg2TWDxr2Np8M/blJTp+3dmou+FDl7Stj2Hfb4kuGmzz3mSC5S1qqSiK8mNNGTY0lcKXIGMaWnvxCTu2g6t0GLJROdXo5CHvSe0RFS2WTCrphf74ZsSu4yrfeeKjVS42p/+CCZyFW8TYHaBrr+U0QRN/oqJzMZY/8hctwQNyFx8VapV0t1qljrBteXNMLGBeGYUl4ERji50WhKq6nbISFvbdPOFoU7HIUc2+SkPLkZbkH+bBmEEgZXPERmL17iIktph0LepoRbfWjON7+nqbvugvkm86EQWJkHaiZpf0xJ9iEU2p3rW7UyVE8kxIWQi4p5RAhThvUOaMNBnqYe73BCCj2rRqlY++ae+185ySDb6TdWE1RXBSgfV8QNQk6mtfrqBmgXA9W/xw0LMtqUNtJQY8RWZF0fbNvkGHMZqk7CHrW4lyqlzd2mGOCXEG7L9HiQCyr1rpsFT7eJa23Bui6vNmgopy/01OHq1FpVri3dGrjUuQLIULELryUsHGET+Ojfim0fjUi7fU8pTkZu6DQ3+21J8X/rS0VOMQApyxKxGMgGS3chxr0cQq6J39octjP0iQ1u0oRdUp7pJ0tSYZ9Xo3odvpAhD6vnNW6UbEzK2XU9UNp4M1xaEWJeYZnjOnLDFJC5ZQZHfnbM2O7hxsYh94JZYgBZDUWWG54Ya1ovlSuly43HyzUOSEpxoDBZnLLaXMEQ89QGy3j1MYZB5nx1C/LXbFATcs8vua4HDrcFpQ38PJIZSx1C1UsdhTTDZdlEaBBVHo3xwIUe5eJ1oB3uNrjeIIflrZ2wPukcMhIbNOmw87tmJujdX573edWX8iWFCaFfYvKF5ZE6GFAPtGz8fKb/HCxOcs7+pbK9yTz9dzA7gtK1dvRRK2sVJuFpMGM2EnuWTBDXXW5vbh5ApEzWALanoXNkUaPG64n54TpAH910K615/W0Dkjb61wtTJAJC7yXDjk7lpD1q46Ip/ldD5EFn2kh5wuWs05dtqc47idj0WMdeIjuFDuKWLBLfoWLu5/W8ZHBSSHsPyRFawjBf2oTkKJywudVPO1kVVaeMum8uw5UPqZGKPqxABQW5qdfuNKMb1vWhfdpPvTP9xdzMFsF0pubTpkH1L2dW5Y1IxbhnO8689LwSleQhXrYPX6zNYk1f1yLp2t63dT1qeYHIYd8meTn+bFLKwvjERbIfqjDX0CCDYtkEanxF/4b3btBTKHWT+HaUowKyC0bar7JBH93luFb8yDdyLUyoS7Rexre1PkKVzHZUFDcLgZ7dzIe/1O3OPGz9DOMUtRZtKrgpucmanmNdy9Ng9vltQdv24zK2rnXGHzoHHIkyqFVViqhz1K0BaUXY50zSi57kcLklaLLP2+pGVfzgl3ldWi2DuqIbnpw/16jgGup8MTKocKW+ReGM5rhgmcGUFnOjJRDX4tS616iMq3+ykbRXDppF5QqkQz2LHO722ab5qTNH6GHvtDba5rwLHzvj2RKS1mJ9CMcJ9cL6Hsx5pIZbv5VavMeGK9NyKW5dkjhN8vsvV+kpFH/+z37fG64CCAh4k4FSBvIT3PPSz7vSiT0kqtDdUUCP2R0W+X/TrjAQELo65CnXnur3PXDVNvM87ggStX8vEXjN3qBTwFMZB7YabVHooh9l6sR+GsRfbZeJjhi65F7xA9lv+Z//LaTZ9udh9+gUznvS5QVccN+scc6w2QFZWTFGsPJkPvUdOF891Gab4DRu3t24/n8d/XdXoiuLGwlyg0c517WDlWMTbJU2EqGhKc5JocHSXHYJZ/wiwLtC9rzlxk/8rUVb1FLOA33IZ9bzgpHPWDVTAkOzkjUfkl/Vnv77+X8saksa+dF6XuhShcx414zUGtkVrYnF1qt3l9pwm5Vb7Tz0o0fDRbnXCPGpSeH+OQnS3l1xlo3BnXOPbmJHK0ZpmOWXMzRyaSUxuzI1CFVRk93WmZ17tYtkkNPWlpnV2UbOR5k7+Bob2HvZGZnb+VXY+VmfH5DKbutAtbeTDUQgpCrS4o8gQztvO2MLex8jA0dv25+fA7XFYwiB2im+xKCYvqsxnrHaFIO2yZGOqsnruY6OFeFWwea6WbqZze2MtH3h544nwUh7Ri9gFdpfMy5PjPDuYGpLyoqrKYKdf+EZS4m11pWSsdfQ9XE0tfYIz+NcLeWOyAQ7lZgc82cJzR9sMvQFEksj6A/Qp4FtVuEp284YD4HIHKOE3iMbZkW93Ziaj07ZhoKRtbH0j5AkftkhsOGMl4VgZLbhe7u4embuK08knCSqJCLQDrXMrsJhEtWyztMcyW60cwPHU5zxIs/Zq/qqHtIf0v+kO+mncvkCDdyy4AXtQ6V+3vePs519Xf0aS/GUphD6pCV7CUWnqSnNgiiJJpzW5TD9bdW3h7vycNkf2tsX3x1ti8OUh9mOstcoxZmr0LbwW9IeOT/nMey56gZ9KYbUwTVzRkWOnvtDKiLNtsmOkF8aXVDTUEi7D/ux8eBo5cYTLuHctk2L4z6y5CyoMpcAGHExKYrW+/dgcv5wY8Ij6UaQWLxAVl/6FONFHdi+SY+uzE8jFpGz0+vzyiByspLX4Vz1nDXdujpMePLTtNCX2ek5B+NHG0arb7rNxAqDNUizh6i9/c+wp+NfVjG3+zAplLS4zLK++rImak6injyTr/y3G438T+CMH/keIXv27jPWlf2v7PNLcK1/BmX2HdaIJYpHc9RZO73B1s3E1OJblVUlw1Y6doYCQ4YTApXHuWvW5TSm5MMInV5SUdI5I/F3/u8uLv/dux2XcSdK2lMqojN0+OjJ+NjbJ8zRHkl1tb+rqn+WFWVnlRdz+Z4MIxJjInJIOzmknXyyr9yzDGW9FhvPNHqy3x6pLPzwQTJp/acOr2KnBdEacaFB6AD+7SXXL7eGqPM2xjcbnycmldNrK4vHXDAYpuyov1NyfMllcnxJUzzqVyR1WnW0dFp0hGT6CypgdxW8ksoUvJLHeHxroTiZfFObLKKNe1hQWFyQf3KICw1qfTZz887y3I2+1s7QEEPLmjG1J/KfQDahrd9ZPz3hHRqRb1ewLbA2Li59hX3IcTUBdrc8yCpd1EJDTgT7sjyKvIscwOZcqja/f3FmIJ7lG+sPSqjg2JLzoFj/BcLaQ5mg3wF7/W2sJ1mx2zeT33/45bPbe01rP5K9yLLaUS3c77w7WuJ7ilZszbtQtaUUb1LyDP80tYN/lTrdf+LDjw7bToCkbr17PznmH93gIxqLJw1nTP3bfa3UwaZOrCtIYjqrWcufVpUamkAOpZx2NMucP/ny7O/3MMUoxcIHJXLMV/te88J4DsaP97bVVw0vcv4pejfN29/SVXJqwGCKAervnm9vUgD33OblWSp4bRJiV8DGzu18xzHsfr7GrkKqGrDWeMR2YyNAUsubHq/EW6lNZPtkjwEkldg089lHx2xs1CgIHUjtx7VVyUFz6UayQTwHx16fXR1TwPOPz3AA8Pe3XfxoaKuUoYFVAybUMgOMt+60jgEkdYywQxgPiB+6g2ekh6jjTEu/j5Y2Pm3fG0slkbPiyyoBUerk1RvDb8+9LYvEhddqWYJXJF7GBDX0N0YDJHVc5OQx6pmpq2fxC0Nf5PI5c1BffmalBut58WLhNG2PxIq393jW4yrxNSBg1NSyrHONosHUTu1h7ihTgh4FLZdqs3T19LF0ULRW70LwBe6Rm4vcsG8hf5bP0ugPOGB/VQOVVVQ/M0584PhyfwV98MO+wanuSkl+1pX6YpivhSW283GudIId/EFWguwXAy7LCdaksnTGrayOAughz90hdPxePBcz77G4a2pvZvCPmWff0btrpLL7WTJ2QWzzpYdClI7ylLwWSjUQ9LEjfb+0N1/Tg93bqnoTnfEgcTynvaq2uCklwqkqKdjvYZL3lYgbuJVXVXBC4Wz6eM5EzZWa1uS1yhhfo1jsCkBiRwES+7jJX8r4GnUHPALITU6+D6cgaH/v7tOm3uutV3p6mzbVC/6fRNxY5pumdvENUZeUns2dGhXuwcJ/XuYq/ynUd3aS4/zBOM8xah92SoAnnCccFyPQx4OkjjkJ62a5Sjx7sLS2feB3MeDi8yfbD5f2Q3xXkp8+PedTem7sHN2nWzJKDdqNF0pkDrK4mn4UXcIPvR4FKNJoTSJgGk68AMulUgVRElQcqMpIMrJJNeOuf2GNC528OnJnv0d0LV1krVtIOaO6orri9JmrT5shgd3zwgzmpYzcgZaHg+ROQD8ctPOKJkT55PoY0K0IVVMOcSOP6fArnysFHDBfCx3qnfgNdkptZx2ivVJ0YFw/n4uPPYooQad0ARSgqUcUFOyJwIcRd0of5d+y6Fyx7RzMLX/kr57lUx7P5NSHcI1tn/IJ30YIgnNN0d/W8ypuftxg6u1jCiwmBhXVzY2dH6m9b+Iu8OtIcvRueKY8DaBAFzo6PG/m9lu5n8Oo4eoFItWy8ZN1TQ+pesnfFLeFw3/mb036u1Wc+fjwGNxsG97cP1XgnWchqx3pkLeIjZ6LrL7MVXaWg6kwry70VXc3pTviOu1Ol9Yec+VrBWevQG/CK8qrbj8PgX+HouMz4WR0fCd++een5dhdHxV7j/C4sp68quoCt/D0sbtvZGifb1Uu5vVZNb23revKq14ictvcSqqadoBlPaA9BDGBERHOeR4CZnAaQAGasR1NhTZ7ViIsNNU5OTREk3tQ5ZbSKXWZih/yGlo6NiPYs+LhCorL3i4mtK/RCSnZw7d6x1n67F+dXI3diLUL3wtncFdVEPFx5LnnVr0KZj0ecb7IhFXaXEwQITUgL4klYJ4+/fbVTZ06HppKAm5QBZmXXH/P2P9gVWydBZtT/u3kU7YxMv/ZmxJ+75HLtjAyf2nowbaNwqJrW7P9HVuF+e0b+trPuH7sS4xPR6Yw0wDyaSc6PpJ8f/KZAGoYfqv+ManDpgJpXd6d27Ac6S7AOBSeHgvPYArtAsinNEREPH3qtfTfYSZ6w+Pca/alWIfiy8TGlTCR6IoqmZtadYCmMghLcS5pV7xjIM13ziTS+rjqVRvzaMvcvVt9wwd3KuimGWHeflEOBrpButzq3XbWCQ6lr67TsmZdIq960hCuBaGEoDRb3+OxWqg5ylyztoKWNj65yhCnn5JaWdA8TZlGeclmhISkLfUO3gNTY7SR7/dW9BtxNBWq7cffmEnNO8f1VIqO56jcUdJrYXhJVRpuUKUKEy2PgctX4a6qDLPbiHJOilZ6fr/+oWDdiyeUf+1Xxa+KJ6H8XjxrNu84OCfFZk7J7/uyb/HrsVXh3ANN+HyFw45fkJwzVq5KrHYhCdicMK2Vz74UH0aV6T+4PftlpXTl8yJ08/pev6wAYVHn5NzzNsc2pxfzMOwjbVld9kqAuluJw/6e00Ixb70atBm0OnxwclFHgECVubEHhpc/rJSufJm7Pbh/XUbW/AtzE3093zBdvqPc6LyouU2wewvUcusR2ZSs2dfya9zUPdpDr7O7A6xwT7BVmp4rgZ8SOaMs3/IEJsc+ZOr0PcqJQ9qbfr7ZU1vnV+6fpuKf0XYreUYfIyt18WlYd992LIxps07deRs0oBvNEmSyIA8009a1xhY0fPbru3t3tx/fGA1JS44IyqxNRcM1G9P1PkY2ZS8tNGXm5mUSCwoD6ufmIy6XVWXmlVU2xk9ONSVUVGeTqmrDLj+Y8msqpmTnqcCSkwmPJxOfTSZFLidf/wBOJURGTcYTHmvzDZyQq1oNX0Cm6l3TS9HTGdfRSNG4ppHKFL6wHlXGzkvnvUf/Tj9uUNp3h2arJ22Q59sBnzmIvHdRX6kg8hENyhqoaiBdi/F0KgpcVB+SGg13rYugDzloS1/K821jmd15Dd9/REttryMXtxC89S9aELXOWnQYRHoqZ5ztcuI1PmmBNfbVv6RgkaN9yopqhrPx1XcsCM1B2blAGmLs6r2iLP5/hbP6n+1qe1qaGm8v3wyn3l2ub+m+Ulnm427r4h6SnxyVEJLv7upq4/c/u6f5AvaaFte15gs9XY182LbWFtzVpvOEzjm6k/FMhtEM3WluesDBeHFm2nh+yKE2aOyGnYldRnxmckBEW3xPqHxeir65glwLa0B3Zn5ubTFRzeuEpUuSmIMQvTjSGjhqyLlHqO7H09G5rZqnnNZbTxNmRnNJLa24jga+nu4GPO75T6DRr9ZFVty1HVmpyelaiTKgVt0eiSl9TMNzehDgfekNBpCDtqKRmZpvQa/sC54WSssJ9IWxwIr64MCyuqDgssrAoMrK/8cUjS4pqxgZK140Ng81NpIRLrcPrQ5tam/KrM5sbOfm/qJbo2vYVecQKnYi1E9f5q+aySUT5UZCWzm6Ni08MDjYxryvhGKPqfC3NTZQk5Y4vKRsLCvS6H05KSW/PiHwor6z9vEKYUpwZwop51pqSJOEuaruJUNVuah6yLEQNwP2WAUqzx+TV0kEl/3rY2bVq/F0lXY0wZXYVW5puGrPbogVEW37Ev1vbZX5/0t2gKSKla0nJ89gqeuEYt4zAzUny7yaIymoYAt7OSnxX17oc7k67+sanZ4oZXjHYLWZrvo0jUzU1Y+MtRk308fl74xfu4z09YyytXEn+Jn7eEbZWHmEQZ46GAzGpB0ECad5xN4aY/HmDosmhPmmRLrQoJa9B7emVu8N9DZfD43UNisbU1OmpIR4vi+dYiNBNIen/EPPZxeR1Fs1A7g182rDY9hxO66Ee2e3kh0NjSwMzOOSDM0NSVd0VRff2PLSqgTCLrY7y8qzrpjy8s5ooA1eusFr5Sn+V4ua/pPokIC6ls9Xr8LzuiS/8DZQNqyMJfvNi1n8NlHOmonY7C/OQB4kVYC3fDMwbjxtgunlc6wyHSCptNv8x4qbqxKSm6vygJMezWFx/g19cKq/OTV9Tl/O2H2EYpdn2jx346bVoJiLaB0nUUwhJNLNWt7I43aZfb6VU8G8rXtAsONTgRDzPW5k3oCW3b5bUftIT3Xjs97tXbuQsKTAIHKY1S0s5dPgSHSftYy1hnmvfdDyK3AYvY7q671bWZFg8l4zrzFBM7LKsNHo2LuDGIgcZmMW5KoAl4+u6MIUnDyXk1s2J6d/7CdTrVtTzN8nFGLeZkbCLrE84vV8ZuaVhCipicLCjXJD79GsbOeb0kpN7xWuF9zOMPRBZbPzshUYupa23m0vbJvMSK3ZH7bXWXZ8OfzSQ1lBOnsJRbAdv4iS1wnFNs6CzUl/9woo4W4ihuUpfg8narWakv/tkkoC7fiNKlJ85h5WDCtOeIbbD+0aFrRv+A3etA+36QvUIbc9pfnpEELrOWVqoSlGZk883V5/O7oK/UxkCbC8wU24/K+SzAG6FHoKMP+qLqd04i6lDn/NNcYjtg20TkX5sReHcoT2jh9A88qPJ95UeQq2JPx7SirOvxej5qPlN0mIXDj8dxQzj+q8MkW8HR9ilErK/pb3MELDR917JpK4xST1fxh9q/kJOb95bf5my3pBXuuqzuKaT+XlY/kcJ1NJlbXSvu9Zais7Kzpr2b5xRsrzx2Y4JMe4uCbF9iQlDiclGttJ6ejKSOtqe+voychq64vKvdgKTcp1FRnwVO85LdIkk4wKSSC7nY/2UOY7J6akK6GFeYkLMnBNg5WRhmP8PWf5mCt4Ag1cM2GUkltZwMdzhq/wZKChcxqsNI7m6+d9/1yheKCBMwlWQ6NdDfVe3tLceS/Sr4Z4LsqgryAcwiNcXaJC3QQcwsLc3cLDHXnPCECFRYLZOMGcIgxH9NDdmLZcDBVBxZjLYQHki357SjPjFLBnMuATA0vXYvz4cM3xZxJ+nr6AZO1P6c/vT+1nRp4++yWYeBbXGsoffpU6hxxJT83IzyCrv+Aj58uTSfnOJyIpxZTiyBPOX2fL77ncq7DKCtfoJ+tW656ew5n3i+vQ/P07kV1qZ+tTZKLiA4ND3Lcp291GdBV6rhzSJxlnem85BHsK2lnvchzoGb11w09UDSDXae44tV/JlRmhKCjUfYey85lzo6S7jKZCaz67vIN+oH+6QmmoNtFa9cvC38dgckHr4yeVjYtGgi5E44y2qsqS5gIo7QG2XEw5Xd7DVdVZS9LF9L7zXNec8QACgQCiTbRfrLsteuKDA/2KWLFB73J1bxG5vhs0F1+p6yUXVXdDDQ2osYJc+MDABDkHPmiInrP+vwoxFqIhWSGdjZ3xSL8EZGvy4S4fq3FElkzpTo7bsU6t08YZxaTElOYSYmJbKtK3ntk7U9vAWE/DzNTYqMuXP/tsNhcrxPPUwJQQRyyJj2mqzSG3XauWW9x+/hCRWipnKsbJb2ttq6luZp5yycTqKt2V3uZaNp0VIlegExenWKCSHdycgDnng3WMPH/rG4sLqIpNTbteDmla3kxZQ9NYWV7BRDlNfkskf7h4IC35KvKV6/fUb5p6Wn5xhflpiZebM/Prr8LK1RsKcZ7pVdleSY3uIpfUbMwt1FRNbHS1jczccDgMDnMCN1s3Vj2WTi7MIFz799/9Ti7wM56Dvf2/QdynFC9vw3oq31H9iMa8QBBgv4PGBLCMHywaCK1stwhCAQwbOKZo/v0fBM2QHmOdWp2whR0ELVAwAB1BL+MEVhOHboWOAzTEBKiwNQD4PFrB25wsWmXsgR742Q6oeowKlwXgpz4gA6sHl8C1DWD6SAswFznA31+rPKvRYKwa0gWgvYZtrwbSZFuxiLEdYCFaJBrCHQFgTIAKAK1nuS41lmpv2H47YAfN0CgMBbjSogIGb/UgaUgxuLHQqFsM7s+UgGlI5XMw+CUZo0CWkHYkFMFYIrTM+AGRWz3wh3XgxkIFbjsqVtEfbAoSrl7a3VgKbnG0+oMT6WXt4o+Xq5PWTcnK1e+TW+xopsSrprYX3E5JvLLakVhTJDe20d1iU/3Bvnr1DJBq+nRmFaA8ln3xZQHFjy37Sh6qgm59U+4YxTes3qDd0LRGnAas0ZItmy2it+0LyigW8u0C9J4MOmN3zjd6QzBsHmqPmrVNc6e3KY4FawP3hI15oGaTm3JPf7Aa76SEWesE+4STucM7HVDi3eQ4BbfW4GvT1M4KqLUaHdLx4C4WgRNAHbWHgv8ns0YAMd9aWOkRWe9Adtsc/VUP3zHQqGYkjCF2APLZ2csy4EdEDPyXOeJKJ1fR4Fca1Hn/vgosmT6y4KgVTycuAFTkW81botjr+8iksuxFvXEO66iZsJeL2w7YB93zJhUb12DhNvsDo17aK+W9ItDPdXbYTacB5K4rxVkT/2rLH7x3SsWvRdfnlE4Acd5KB8VMjD0AekJnVB92JdQc4jys5m5bMYXXDHIDJn5xeTuZmZTQdGEK1D+FK6O6VopbWP7gBBDfRBZ2LMabBWDc+bZpetDFheta5G2Zc8Oh+LIA6H0DZAaA7p8M8BI47HiVsYBDMDLwOXNKIQD/83zLBcei5BeA0bIp5jSSOraqw0CYZ20iVBOG3hNQfP5Re93UQ/oiMzzaeep5cy+WW632g1JOIPNQElJjdRIKnB3FxHT1+j0I4BDaQaIvZOChSYRkH+v2e5sIubwo20/7lIwyDExDJ67s6Gu1Tt828SiU14sBWovWpUBCxFhSRoQdaRFFHHSmGhHQocsxtuNv50cjhgYz7d+CVbjQmCQRmVEDS1FkRvJkKIukJMX5VEWApEmsTPcMqqJwiA/TK7pZuocUy0oI4rXO9VTcpv52ODp4aZ4jHJtiWoyrBYVgFYYNG6MU6c5zNJzauep2N19Hm5fG1REPTdu8jsZoPK39toX+Pd7AB3MZGf4Bh8WAYf6GJm4crx4W61xX22fNNg91PFwvppOL+dLF9kNVg9GHaGDP2hi1rluMmvG0wI6y4/EbPYRfWIOBJXyYrAogSjEpXte8p4JwmEmXyZJtRk7y8gSgI2oPIBGBiAWPQcWaHDhvt0EvaxTBAvY2mp3q0Dk0gg/gCTmu7M1CmHlQUWMLEhAbxoJrIt4iMB4AXiyyVUck7yjltAkLV3Fo0a4BvVD+DODNH+DgN+iOhxH69QxXOY8nrtqMAr8+Gq/y3bCq1kMDtcbs5iAwRhM0qXSEwHQr53VANpC+qUm82h4GJCDWMYRRwkbLtOjxqIC7WcWLNbtCKTmj6BBptqAL0BgIwqRMRsnwJzJQAQTk6eLMgTCgDEqLI3tO79Xso3fwZ+dwUrG0t0XYG+egMb+Dkn0wD6ZikMe5Ls2GFWIpmJGlHDM324uMRsk5SrIAHjoOTpyZ3K4JJC5h4t9uUEJiNwgK+onFRRxZgyVY+vs2pWDOrxLkkDkVlT7jHTKRxbrZpMKF4j0VAC8HI2+W7E/k7Ui6m8dkT9xtouvqxa/hLQoRP+3h1tFNK/XNmoVSCt3NEUmQVKUtSCLXNKFdSSNLkK4VU22GVPbrCYEZ8yTKbgKBgXHLpdCkHZyxxmxjViwO30xWbVg2bICzBIk/KSzaWCdjwg7Idab57JPAbs/zu1akjdWjmaBz2A2j+5RvXz8hvk//ehExrBbP6sfq8/F4xEH2KABAIpQK6vfPK/C/ahH/qD+Xese/quSj2vVbDTH95b5KuqslODiry/NAumshxGDBc5jAKCD70+8t4+BccEkVwBN4BV+gDD4pvvUSh3X/7x3F/FPePu+fj8sTPfDMB1UEV4TU7ZJ1XmIpi4K9zM63s0B1Ec/QnInN+njdCBSENGfcLHs2oI6ghzrq49K+ouNGFKAsMvVRD9Zqk11pPodmM0wsn8FqubUlWW6RVlLIQGpWjvJpGeDCmV8+NI8j4idWlUC4wI3FBlEZpYxEuFKwt+/IH/t/RkfJuYPrQ7+H1ceU9xybYNKd9X1dW3UpAR2jGTUkFufHh10XBaG8Krfa5lm3JosMAuIgm6WUAi2yH7sJacNpS0s5ICSB8FVTLybPcK6WY2HcmQSxKMyD/sZ7idgDeAYfwAbJ1HnyPfbSZz2mXOX5Up4gwsJqsRvdVUdySKMCCYNvrVyStopI2b2gAStSxLU9FZEpT6Vzn0PiCqz0CTGtywspBMgtFbmI0WXNHkxA0ByxU5cwwrprDHRII1o3qA8Og//VrMXgUA+tk7AAAVTptINpsouY+4wED7WsITRnMqGt2V5Nky/LWExCkXCj3hQ2Jdbp8VKGoXUrfosw8nVvKq4Wh4LCfLJOlnkWohFLIkHgjddUzXzaVTNwJBbLyiAgO+LHmmnrpm2Qh5uS7EpaQXtFbxKG6ko6ieoQ37t/XQiclItRWan0Smd4apgMbG/I2TeH1JuOgyfgIdbccCxzlMeFe1OHnd2ODm51QOgFSSWBGTcjK5MtRgYLFaaVLPiUXh7FqugZ2Rs+KB06o6FEJA3CVZYDfJ/HHKyxed2iSnp9DhPPQiT8AgJYpkROIXHX0XE6pBiAW/VpJGBpj+V44l2UcHRYFVnIzGFDqWqJZ+yphNcrf1I9to9z3K9+zUNiwcY5BaXYIWyXKkvelwOK5WIr+qT3NdWySXiTFc6McaNqsRGys39AHmTO5cngrDhho+xixiLI5Wgk0+SlUROG28XcdVA+0AodKq+G6R357CJv7Z7bibhd1ZFpHSSkmFaW0zqCN4XdoC/wU/aQaWSswTnqUWuNdVGYTDJG5iWvgS3IV7gMNfAwyBsNXlppyF8Mud87PJBlco8ceSaF1KIMOTznWUZHmicxSuNMESNdMoClbNutm4iliJ7D4TjAXSg1TmPuZeC9/uVu8cCcgPG5NWgWeROa+xEdCIy3FymouySPEsvxlGfhgbXL8vbj0cN4Z5KyiUFKJMjb96k1rlPz2fhNDgLQe1/CXHA4MRdO5N5FFl8KvxoZanTaLJFiYGaKh9acnJrGkbVUFFkhk4BMigV+G4eikTAFKFBwPatCcym5ECY3t1CgyID+RSF4qaSpSNKNoCm6l2Lv0HZmIrPGPPK0D53Brxm68u9tquM9Hz3KvCiPJ5Ws2pCj+fjCMBQ9OmZvnNuDNUInChrwUJhKMbw/C0xjYmVZ2jKSgJXQzSGU5UxOk4p48CVBnNKEgaWYePlDJQkJkpvgWm7sdbazj35GNtYbXsYWb0enVVnZGa3YP9RZ0clbKln18kjgpB+3ivRofNh6vHreW7pLWUkwJQ4RzzTqYjOhFkObrnX2G09t0E5sjpbOM4/75Xv24Rycr2JXTinlr4vBHDII9OntHtJnQz0sK1/LMzilENRHo9a9qd90Zi/2aLov7tb5j+/udeTz+SKTziWXid0eR1dr1M4Sm7qdUTnNm9PTZjZ9MHIU7cTwTiIiyDLaEenznbf4bKq8UcpzW6jOLqZ68gKg0a+9NN+bCzjQhXQ4CzZ5vcVbXhf9rnt/02FOXeab7Z6ZqE/rm0csrAfBA6qT+W8UtCLW5otlM4HloG+1Igs1FwSRQa0SnfSwUK6SHd+LfEuVd7dG4za5dLVfaiV8xQN2weQZXFEhrNrNyffL78SXktaKSf3hZVj29luX9bBgMjHr/uOHvyA9Cpjgh+IuCeqgHpTUxcj3i3nWulvxp2FLRcrYMn/OXOhWCgJF7XMpftfRKgKsWzePCsNw8TqiCCk76CHuFEfARhbEIpNb83AmbVp3HnITovI5mtUN+5VYtthMyWugq/aH8myJae8ac3/JI+KiD6QLbbDzg7sMgnXcxdEGk91QF4Z8iYUim7rS8wzHYjtEQxWYRo7B7oYyFdbS2kVlPUlh2BZxGqUNgDeAzhHUlfgUWh9H74hDN4G/SeoJUThLGVbYy6r8YVoPmNtTMk9rNGqqjZRS1dU6aKrm1aTWmb4XF4Stj26DDo2HRzE6Wt4YdpT6m52A6jibsjU55FBP0TPmVOmC0Djy3E9Mh1bYAD+EZkVUwxmwtagaTgAy3xb28YoXhBrmcwk0UzOUHua28G5SDDW67stRYxtxzwma1O+8de5lY+An6g3jzDFl4qeULh2Ktm5xsiziu/1X7aGa/Inb07p0F+nPy4DPU5//VXfwqhzm5eLpq3MjcafnQY7js/C1OD4h8ZSTxBynN2P/q8OsUCNN0h0iN1Mk5olbr8dRB2Rjx1TWa/DsrVhbkkusykrculztYDmt7+2X+oFbQo8QhNy2bKW6lU1WlFlCe4pu5w1qi4uk3oMsoXnsE3yZf9lNUmR7h+djWCfLqqSXcxeZdpKXolT1Jf0Z4EJdjq8aK9+IZ8yY1S/fdo6y4X0UgowhrU6EAt9rUS+Sp+bT9ARdZuU3s4minn9o2xTj+hp3QuEflOlrYigOBQTcymlvJJ4tj4RBUmRAwSfMh5v6uA8XsytxZIgfrb0su0nWCzGSkFPlodhK0BhekvSEgGQUHO11agE9k1UN6ECWmrQi6+LDkcAANVRqgnsVlM2JNsGWvdm8u6xVIOaHeW+tdTfgCfZpI/uSUDighS3hikDXrKAyax0hA2vr2kmpuK0TUPmr5S16q+YjGwzhnyGkiQmsx6MtCRs0n2tGEtaLpy0yAbVSMXKkPF9ptdv/2iFbjxCvQkx9nO9BxT+aab8fClJXZpgYhe93NoqHuOQII2nOFHcwqQHU0wT10crOo/E3wcPO8VHL2yfhEdnQLGcPofyqF3+2rMIQbeas+AdUqBxTxVJZkCFzWA9cV65xVbnCtrxtxR7sxYXD3tteCoiwIu6H6RgZ1sqK0/gpFFcOafHxyuw1kGX3kMilpnSiy6STioPj+BV/6aCZvfnDwZSm9GDQhlM0YPreFboEwypzo0tacmmt5HVxNFbklNq8GjojXgpFhAalKsb1VwXrpkmTxMneuE6gho4wzzpgt1mPI0Tr8AfFZZMzI00vyTUptGjbSdrBn3z3mPwD9+Fpzo7KTlGpAdlkzB5U4+5Suq3jjcsUd0sH0vhu426rGS2FVzNzatCXI2zFGlRLWkqmFUT2AHpCtPft++lIdafWNnkjmdy78KOHn75A8t/FW///tkQSthfbs4cIVXMXR9NX1+2ndDuYKzvdslOZNlIhZVpDaq83Fnk07eceRVL7/hgPaQkFyfNQ5hYkiyF7xe/wKH5N0IWuRVFDC4k35UKL9VqQhjE5LayeiFbWDt+TP9iChwb9znVOn6XIAwVz4kZfgEvxgMCX2pbfg+B5peAy5bMEP4u3UYr2rStPu7xHI9+QbUGZ2p2fJfp8BitBFVrDxwFTWE1CjnwfpMcpafutMNts4RSHtSKiHqL4Jdks2w/qUW5KovGLEpmS1ZTkyPeh9jj51n7bHJy2Gaf88+kh+LoKUW+i6Gi37PEQfJJLYvZoPkMqsmYu6ISoSxTNLvfGvRuU1EKlpBYqJe2CBjM2yscZv9RABfdhrCjqFEVHm9m2925/6zoYZ9WNQ4S8onwfSg3W7I3VDZXGRlCCW79RlntIxET0o5QSARC35BBRA6DWmQCwCTW7bzYxCBu0Fm4m/dXUUBUpqwwyF4hp0pYkpNvIKTiftaTRlWHjgKimJG6GtIs7UGU10sHkyZpxcn0WcqaejzZTJWFSwGFAsy/QgGbbQBWCRvyWgEv7t7oXfwW1/1xbzEQBAACY+jvXoAIArDbrf3/R7yqz9AbRAGAGAwAAEMD0yLoEAPOF/6E/40oaBHP7OQr5ykD/3TymsM1BS6cg1TvxlSZ8bgmqX/yan4B+W26/R3AQnK585q3Mma5AoJ9SMkxh+9xooAtucIcC6pADM0Te177tI2K7QaS4GJavmpJEHLNMVlKCp5LT9UfnVBA/NXVWYXBD9RmiJc3BQbqEWxVMYSJsZj7V8ldnr5khbrLF921YvdNRoyxrhsyUVjh5nV6doD4RQLnmcdYc+35O2TAkHO4b5uFIazRA9ETK5SysUhWWNNfK5lHq3PosNauRZwUqbJ8UtcOMFgfG9knDCg7IFaywSrjkB4U8+hCAv66NmCsIaezhW+BAbPwgMu7jCfN37EO02hd9AW5GydYGI5enoGrjMgfxl6EcznakvF5zHo78FiMuo1z5GOdf4dIXY86jS3H/J6su8eof6PQPNHqW5CKpG4d0O4/y9kdM/yBpXJE0xvjPLXaLAstFWcS4T2+VlM+lx2lmiCu6tppAXsaZF1ValTIoEpdqUNl+q1+1Clzp8RpTOnuvxDEjubgB6D0AAgAAACDPcHnRVNJqebZa0q3ahb4isG9S6+Mu9H4F01lF9xfa/TmNK1T7B4qVxmNCIKDKdFS4c0Wmtqz0Sb8bfSzXWt0kgSU0oAgX2EMFFjCCZXUJeZ282zHdMHmuap88aPrPIYKfPXBUNYeJVe9VBPmuDATyVlUir5HPymiK9jszXJWahcSIxyqC/FUGAoGervQ0pmuQAj3ZY9SZeNhC3lUAOAAY2D5QIACg+YODihkA4A4sZ4GwcZ8FhkNwLTxdi8AsSIISZkE5rem2crBFpytCpEQEQQIEioEnS5rMJYxnIEKXCUP5zdFIOB+SrraB0FbrbBnNun4c+CGIK1lfkkY2gveKGBIVB4gVyssJ+zBBtCAZXhqSG8m5SNVI/4s69SRWVLw4RiQVUpdQfCDJS+Tg+riyfiSjSyiQygbxKQgnq4NLMWVElz5zNiQlbHRKg+usEiOYr4bUTcQ+J6a/YbpY69+SyHW4teXncztzVuiD3WqGJ0tujJ56fdEdL1ASnkcM67PlBSYR5X6pmtgsYioesgz+E5wRqCi3S7KnIphK411Vzkeg0wIslU9GMNvqKwpyR7DEeZoonulizfY1l0ewbfQX+KhFsHNj2JhRERxqskKnuSI4teRFznCvjbHUNrc10I9lZRKjgj8FVdqveRKK7ve4o6QzqYli+i2UCIWi9CkMdm6i2H5NxUNJz3Kehb5BUD6wcxPF9HsoFGVBYTDNiWL7I9qk8FC0ksND0QAAAA==) format(\"woff2\")}@font-face{font-family:Roboto;font-style:normal;font-weight:500;src:local(\"Roboto Medium\"),local(\"Roboto-Medium\"),url(data:application/octet-stream;base64,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) format(\"woff2\")}@font-face{font-family:Roboto;font-style:normal;font-weight:700;src:local(\"Roboto Bold\"),local(\"Roboto-Bold\"),url(data:application/octet-stream;base64,d09GMgABAAAAAD3IABIAAAAAjYQAAD1lAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmh4cg3wGYACHbAhICYM8EQwKgdhcgcALC4NyABKCBAE2AiQDh2AEIAWCfgcgDIIpGwl+JarXzHFwHgCUd3u+2WxECxsHQxNj28hAsHEAEH1hiv//ksANEcHuEe12UWFUWFO1dYOlNfGJNpbeq3lZAyi5q9idaQVtNGtRlNjOaGPZsTii7GHBEFG8qyvqlwiLOJ/zVCu+H+vr8OhfEKz56IcunEEJj12OWtgXBMZVGmasFe+yQ9U+GnuPxs8Ad3JEI3weorUee11VPbM/jD8AqAhBxRGzJnTJIavLKYSd4fm59f42ogdDIjfQRhyMEaNiG1FjMDI2BowoQSRHSJWgVCgx0qSkjSRsQqUNzLvzFCzwTKFgViCcwIj+/L7ponok79VZYmkavRtqm6E2hTCoekdT+sflvLj71PnNSAjM7C6Cu9yFmKp7V123uyLZIhrb/JAFTCP5dxIumkuhDbGoYhLgUH37XX1/2az3NcF09wxrBDPSaOEknfqAdk0c+UcGrtxVQOldbNpz/DE3hoA5dmg4CEKn5oX/cpiupOvFrVVkQFIaoAkOBX/faM4N3m+m1sS5krbDjPCfNVsgC0KfESPrf3JtL81CxULniBCiTV4S6RNH1JYImZBcNseEB2pvzv6XujfZVJrNQjcu4+lO3X3qzp+llP7nFLVJlMPYAxVHUahuNB4hoyzeMfyfOa39f0HKWJpx7q4qZxWcK1/XoC+4DwwgeVdyCuCQqtgeMwN+7CwOrC7k2KXQhbJxfU1/BObJvWDoCeNWTmFcwOJuIDTc7f9smu38Ha3xaBXCQyo6BajDokuXopr9u/LO7mhlWZIdSeaVEY50OpIdkOUwV4AlkGSHfBcEqpJr6nt9XoomdZl31b1Ul6Itr4s/9jF9SFxW23YiInG2r/mxX7/voHGXzSKcEHHkcnEy2va/eu8Ym3XoUqWUqDtC5v5vP/X0r2Nbk9QZTJHh5i3hXg2MsOb3PwwMvyMMQMx5gSRKBEmTBpIhA4SNDZIrF+SCApA2nWDGfAeBwABLAZYDARpIIgiwBCwDiH32s3YCMmcnRjGBzPlRgaFA5hLfmHAgAwHwePTMxedGhQNegDoKwZ0Cf13b1ATcOqCpFuv87k2jWeTXAojVSrgdEsKxUkmFTBwOQlhHeKSWQpRGddGiP5EpUV7l8YA0S+diZIyazytWtvSwSiq/1qxlGYyvtlyhaDXTPmAMsf7hICQI3AQIQjnimONOOOkMLBwNeJq0EejSZ8AQmSVrdhw4onBG48adJ29VqtWoNWbchDsmTZk2Yxa458y767EnnnpmwQtr1r3z3rYdu/Z89Mk33/3w0y8Q7aYgEIjTdZQ+CS9IgKDihYXcJ2Lq8SMZUQ1LO/24eW8R20UCMisU1MHObXBth1tbPEsuQHtxn1yCujSekQl3TJoynV721iuvvfHWSlpt15p177y3Y9eejz6lz+34Yt/X9K0t3/sQ9ybML70PhkZY2pZx0W4Fofd026PfGy+QEZGH+aPv8fd9jBeiKc6Nce+JsJiSC5eWKXZdcmuEIEScMdFsf50vFIgQtNsIp/D4B9xU+0RHWbRk2fNNJXFDEtjNeLsYYltIQGaFWkfIBaatglRNatSm1basWffO+/QD0k+/BkOqqyaA2B5SQWaFqsCqNeveef9+BEviaNS5E43Z8qC0bk9L2al5t9rz0adNuSDLJOaiS+rqvO11YdGSZc83RSFWjYTMqqXEQq2PuyTFnYACJ6+SNeveeZ92Ytm156NPHw+nXC9an7m3Ak6oDcZ95+u3MJZ9CtsdkLRMXxh/62KfFe6R4Nky0Tr3HM3UQn9uWD2SeyCtBuwm5Dbucs/EbMbN4RzFs5aE6qT/CHabEADXJ8RBjpRmQszag3e9t7mijh/sWuevtmiv2Gl7P/t4xfuuHve9H9j0YZ/LiVEEdzlHeVEtfSDSyr7d+ALdEf3uNFkHHLL+0Yz7bH1SGwAQ5/Tv04N/DvL9CCeJB91X/m+0/6sfc7r5tIie05XmqPc8j220pvWH+Xyp4OC5v/AAroz1ruf0717EaKK9GogSa6b1vhDaXtkmmnRQDUlcAQftvVdV7N6f5USrBwBIyAabkhz4tQEiG+S+dHz2yeyt4ZLTG+r4R0LZ9Jo1btKjNWFhay9FuACewd9Fuac9Md1Fql/rF14npgNkxgGlKMj83APbfhBRWx70evLvKxyQei9bphvjxQio7zjIaivcttWhvz+gefpAPTqYznyi1m05Pdx00LLXwSuSvWTe0scWW5HboScOIuefooJNm3c1tiy9INCVp71vSA/yg6l6QoF/j9rzd84jTyAGcdwALAmCBCP2DnfECQgqNPDRZhDczRFJI4Mc6yrPgRMFzpS4VWUevByWV4+pcslxdX9VjXnvjG2fUH3zizsYzQRCMiRDdshOgDlK2jGijoOcwEUVvzMEYEnAgWgQp02IDn4EMnRJ0YOkT5ABEea4WeBB7EMZJt6BOI4QKADn1DzZJtTgmyDGEx8vwvIWzyvHLekiluwryC3pEsiqI2usQsZNg5n5JmrWXVweWwBZ9By/F6UKemkFt9V6yJr3eG0/EXZ8An99ic+PS1LMEA3RLU6UWkLSJL641YY5RWBUScKBwYPRamEBE38o5aOHKIqKUAGKROlaySBWJCDRKJwionBUKBAXRZCrxSXgwfFSXiH0ziYKk08KTEF/SIVKEpJSUSpORal4VNwohAQot4CJSWGUjwoAT+V7kIwUzjD1s6+4KK8t+h7pyF3yN/+klGW4kYNnz5PM0dz2dnTSk/ZzNN5Z71A7612sDzN2Vo6ys4ke42iV0cJpVSJwU7RXw3Et5EoBwG6Y55zLIsKAyv/ZkwTUL6EH+wI9k5qMbntJhD8TOF8WGxYFPAKRHRIQSAJMlKURBphIAONsANJhJFHYOJ66KxvehYAupr9YCuFojBTYYGEd4CzZaAPTr3gulBvunLXX3thzvmkZZ7hwBQp3htMaMZCgFuhgp8aHgTcNgTgeh9HDr0d3+K5eHH36DRis9mkyv3rYWdFiXHPdDTfdchsMRJw8IOuVuI0L6I93HNDWta7l9wRN2t5m/lpgE+FgnUVX9j/cjmh/9dQA/gLnjTUB0KBnAGr3zoGGBgeMvBYKpCv+v7T2KkS7E3AAI1x4AUtLIWSDLt3GzHhkw2cH0HaoE7djBr/Er0dMigxVYz+uxs14Ot4dL8f3Uwx1qc2m+P/Bwf87AAAgBK1Bo249xs16bNOXcxu1+daUYzcudn5nvFi89bP35LtDtAng4KD6dzG3CNNt7v9DDSpazZUlTl89L0WSBJPGk+rLXyvXvy2DruoBqWcAQTCzNcO9/o787TRjHr0bX/p0GRYtWfbcC5myvPTKa2+8tYIt+136J+fI9dkX+776Js93ggAAsOSAhWdARcgAh5YCMdpgRKMu/qPdRvUYE2G8TFtlBtLMlkdkeQxjnpQlD8ueS/fCG4veWpFp1Qcvywaw5f378kev8ie4xZ/9wx/807/c6t/l/4FlDrePTtXfYtsuuKPTjqqODu6M8UHNeiy+QnB3jJ8H98T4ZXBvXIzgvri4ENwfF5cMHuwsrlitFDzUWVwtr+F4xFrW8bj1re8pG9vY07a3g7/bze6esY99POdyl3vem96sXji23voIXozrrxC8FOdT8Hqc+j95w0nbWvxly6ep6TJtQbLTgJXmPsSjFjoxBGp34lUA2TnEBymHWhvRYZzw8BswgAv8U0hVoF5hB6GvuOg6SzrmKDKbpoEOROaggb6QBj4A7VQa5EA2yIndZkvoOT4/sn6ONu0Xa9ATq7cesHl+MkuADh/0w11WeLdEWu7ciOTToIMN0+6VLh2n4zDDxx5v9J8WO1Q+jJw2ucV4oiN4t5aIUmTwu8Uh/E4eUiJp8ER9n2qqzodwykQE+I59kod3hL+bG0Ce36LqLIUn0hx5TrLbl9+dr4vgfB/vrgM5MUfoSdPNn/RWpGIDOwIS6bLoNNSh0mGjZwVKWvQBG1OJgWkFe3DOvDn0TGX7e7ennO1KuFU7Dw5J/9ZJIpg6jPHnZyGPA3Otyw5493NF8gzZmTw6EhOLa9GeYztnYjp4XyP9M4z+dK8oyD4qqBuF5Ftya/PdCwQh8MXRb7rU0sOCsDISI4NG2EkNAjn2b4MwTMNOYTnWDJlaOiISlGvgIHtqNJBmmDTTW07eCq51aDYJgzSkMMIEQ6YQLbVBXnT8jVShwZUfT2oYW9Cjy5ylS2VYUcRWU0szJ/obQsc2FK01TSYoFTP9wEripVxabfXa0jzjXufOqtp5dS5zkVmlJZVXnuFggl163ch6ITk1mc7oqohs0N6403r58cr1jHaNUZtxkdSGHq02c+cXmnvXKGq0pd2JKY12InMzFYjtlHJytxO5tNTaWsqgaWdXViqrE2r9BDkh6JRJ2tD2zJzTGaW0E86cGLqofFFqWevgcqcvsD/hrZ21cdvfwXFlRDM1ySjEhFKWcK6TJ7qXAxdJx1uESrtFXRQDBWjDc4gT1nDcHDNAAYsFyIRRSiCmQNZ6DYQpruY9RMY54TpEYTQWEMM4jNgv47RDkchUbjll2bQyIoiFnjljoBsrU+wCI+1On1c/w5t3jdxvFsPgT86q5fFWhYk+CkwuHNiVRi/VoY1isa/tSrfwqrLBQh4Y7gXdpqj3Taehm3XLypEncYnijRzmlqRzcrGCfnAMepI9DbHgXWGTVdO9qvdkozd2SDu53k9Qk+UOnhXXV3G04lkS6WWp0wOf7QBO6Ymi8Udgv/YPHxOHWAA50q1YVhPlPRSGNajUt0Di8USWVu2WDHkj5fsYKCfa665/Lib6JGin5DGIvdfgieQKXs/j8jmvO8Vikprex79BMA5wzmGFJ5LtwMDup6Px9ZOoVTyJXXOOTzszZIerWCuohOiMO4WJO9pU/w9OUamcBq5b/LZBwtt6pIxzQdqyJxUNVjoZh2+0czFzHP1k+tjX+181y2Z+IzR/HbaO9AmqngeTjsHWtzd5tkpdsprKK2pDmLS9KXX0jqNOvRL1xEQtQZx/5Fwa9hX/Grm88Vyg/kHP7HkAEIt7cFakMTCRK44PVa6BYU55QWorn6/QoeU75N5zJYwSfZZen16q4HtKGXaIosWGMWwci7RzVt9gpC5NZZ8RS1pTWXq54YRm610clrOidFcoKY4FU8blB+B1Lug3Lkj2M7lDsvcQZVYGXlNtdO+7ycGIHnWtNW6DnLkThnbVsV0aPeXDb/wUv0y/fgRyTZYlXs/F+CPTny2pIvlR4tJFVhM5U9zD13uZsuCR2tqWmwM53lmTcaQgPW7r+3AdOmU/YJoK0JaYWpSjPBLiOo3FNk2rWGPaVP6nOVdBp80kYqvFWUA4Q0mPIqXglngRoUGktYwhIZzFB4FjobJVc1eh8hgx/xxeEwJEwkS3OPTUFF9Cqm9U0/XhjR2CQtOMQWVxdIMmJ7OUaIVLJkqEIowiUH/LSxgEUJFiVaDWAjZkgyeB8VTaJZ9MeOXuhQXpCYpWb1OyrDYpeoPEWgOetRB+72ZmuRk7YuREUKwcbEs3s4wQ2ugSmvb6Trwgy3yaGOOwCBWY8DUm/sx/7nEZyBTkWIfg7JvxLuwyYipdJeFE3w+0tbdA/iKH7LFWUtKCz2AoftFF0BHXsdc3FFkBcppHHqFwzw7b23qqEHM8NKzJi6FHqaijjTZhynooolZRs46DxGN6an86Wz0ZeNZ6qziWWIPzxzYmDmbYcYIm9/6RwMKAhRkSCxPkDl6aaB+2GAUWAlLDfodninchsHJo6mkLxVSy9tEMuiPpCc5SzqFnwHWhwIlMDByci/0rW0JhFeIYBSx2RNsAgQRrzX4Mlk5wDKFZzBhNgo/slhyqLQESFOSnsVGhRLGjGiVVLElPcWYYm03zF/ZNaR2DOrJAwFzHDvzaIc5EszBAgfLqy0o3Tse4es7QgkMINO4X+4k6pvSxvyuv7b2PZsDiBajq6M1UiIJYR4ct4MSw136HB5FyAnGP3ArWQgJDmXr7GYdKKtev9DON6a1A7/pm2Apw6yCuoF9MaE+ie7QtJTFlLUkUdAVutEcVHP2bgPY6ACUBxZat+O6Wv0AtahJY4pacWxCxGiirsFfzxLDNw6LM9x7GUbedahomXJBQ/zYqQZvNMiGIyNPYF6sMezWNnlPUnRPFJNeIcH1JV10EB3/O/CMva+dqU9bTzSNrKJANf6Y2WqPNYDgyg6HeHOQEdCJCWj7DDyLarUkMx1aLn07QFt8GdsQiHfYiR/LQcbDvJqtkWSusGbFZ/kLgQhr+azPeGUxTNBDwBnsJ244VzCTAoeCPbPC9augQZWhsTRgfhGs97DX0EEu/Z3dzsUxrFxs3iHwdXn+hxkovHNCxSpeS/Xhld5IYjrN/WzdB7U/gxICtfSsgolZyNc+EPldhWhLHTtMkw6XaDZkNIhvaPlMOkYaMNw5kNeFI8JxjQXz0ospTeoiw2Gr5rQ9KNjZdfONhITbgwfwQ27qZvS0a/YPpPM+IkIFtfMkZN2iT610OYUCtZmDZsExHjjP/2TzUi1Cs/mrFl/5zDRRIUFynpkOeaLREgTbJIZdQcRVriYuuKpbs0fK1ZhwqlQPPvz6VmS6zonELZUkWWZbVCJ1UBn5fdjqZTZPBrVSu0+KjM5NjIsgJGALR9jdnxonxI9rnh5y4qCbbQpdpO+sfZxmPIv5JXhRAQCjtSAwE3tJqKZD6V8vGrFjQgtMSNzCkRL8afNvraQliJ7mR1haNJfoRK0RihINAPZH+xrVbke2bu4x9ySDDyomEGV/ZrIhAhMCMmOYVpY0hOaJhUrPYl/S+73ifT9xhG7xSbfe1K/+70UnfRu8enjmQJ9y+fPQLTHlfg6+liEyjmpqoAjJprEyasx6yNe5YTdORu2a5Rxufl5aLE8SL1yTbuy5ITXarh4dUP1zIHXIt8qrnv0V0tetvKuJmPiFb1Hfq1HzPO7r5vHC4bM8KMSjw61xe7hddanjBkZr9PolJ8IujOLp6OFq7uH/yvuhEZ2jluF959uyG2Gz9zP1Dqz8fYOJZKQxaoEcU1/dqdndbQVF3SwEpu7u5oLCnJX+MS8+MxDImG1jqGZMJWqYkY8WMM9m9LfmFPU1FJPbVlqLi7tbcMbgW0UbzbLa1nimJZUoyhL7nW6nEROVbZVtkB7KuVoYYOZOrKVeWFoabH0+U9PRmRtj/p0yIzv8pl9774n+SJbWB/uQ5fH0bEeKho2BlS7MKdglnQqhYK5dIa/VWFWIAmUwwsLSLEcWHyZVdO7YgmWT3IfHyR4M8fa3aktDmSVXFM43TZRFa1dl6OxpJZfBXSB/t9bTGb4Z5ulrVBYzmERgGf6pptiTyays04Qs+sxb2GnmIckeHRhjUTEZ5TKH8Vc8Shg1pT/jqWEPKA9J1oehT/mfoXPRqVDWDi5GNkr3BrLRVNjJJhBJWv4NZEB62ptjwH24bJ3auwNyDakH0oJqbuTuRiO5OyvPJyxj26WWUaZSb6r+G+59+68AOC6r9r/v6tzbsMFp6yK+FHuRzCdbm1+/TFcrwbIWukDAYNxpj121ZkUDemFn64UP3uEz09Q1392Oxw5WyUl5tJpet/bM8zYxYyS639Ihylyqj1YTTw9xpIb4elAg3Mibq7ODrwKxNrtd3AhLb/VTOnkroTbgjs739UvzDCMbxbLBbcAzT7eWXiyW6TYdbt1t1MbpUwaEj38YOH8Xlm8DQlgX3KO+w+6bK2kGaMY93oa2CuLdvzlZlrjHSJ+BJCrxuzACaHz0/LTkxgxX840aYFn7sk9wk7NO0ZG90bN/oisjbwrMfVs8XbsgYCoR87GfYzrwG288tIklXaSWRTcGeUaWx8dElXmaHhJXxwmrKZjMLOwicceZpBr3ZA0tXT+pPvMOzOsO3NpGYNBCi5oENaWbc/PV6ceGfl0icuXdYpKdHGMvHMzTSx4sRJv+K6hrk6ODqT3NxpbfQ6KnYKAtWeNXEJu9aUfKnlcz84pWiJCHQHcqk11sJWYD9LwnIxlGLAGJpfFlEo5dLRF1CPLPah5ubRteZk8I/CdtTi0tJGPntpOylXM5y7DbT7K6EZmTYbnkHwiUl3EbzTVsHG3QDtDsvWdLcIDslaPTr8tOF7fu3qFaVXu721lYkfl89OXVTN+dCN+e7Ni/lf0E+YY5S/Acbh0nnZLKimf+FxtL6H6h50ZZ0MJsbUxRgvKNuzGerSdHzSFri6kZ6EOLwE6cnu0P4t0R8ddN1KUOHjRWOXJx9iKXzRi8M1wkoCqDeDeV8+vWbvjRQZJgWzZ9hmmOt5kKVsz/xnHkiOmUyRTdNRdj/lCHmA0dC6RDHEKPAHEYT0wEX5y+f6N2p0LAm3yMRsqmdSU8Fln9BfIm5ECMuwHXuIUzs2dt1eJ9/lHPy00q7kg/IHW0hIGWUQHZ9WmYodmX4f5yQ5DcV/nx2Sl5l+RK0Fr5X+KLmQk4KX+YYL/n4uGpXp8E903ttume6RwFfzMj9Es6ND9Cizdtr7/t0Ddbjjdgt+48BF+fhtyZ3I9q8nmJEUZG6wW85CfYdtEdft/c5xhgckWup0YGe+b8sNRDvuAlX/imzexiVnBOdcLH+A1j3/NC93dFJJP4WfaMf7YgFD7HILKb+KrZkWxWbic2zlVdZ5Kh8uXB2YSW6YBPaWVYNdQ30dQ6MDcOSibXtDZ6PoDxjMOptJIKNMT0RaN395dx+p+sZnUC3ciQD0JJm6DzAxTldKN8jVa7/UCpTT767sHeyqyMaPHQ4Y3SU6akdLhsfP2XtuH5tucpUpvfakGx3rQl4QlqusZDpYXZseAZLZ8B/zR+rq5p3wDpxpflHTVXjHlgndQOIZdONdss/8VmvC5YO/4RzfxWMT44ICT2XEQ6h7BzvXLufoRLjtj8y2oH/h6QzvHNJ/POh838weZjkh6cVqTPpBIKjsAkazvs1MikqMDgmNnHfX8shhRrvphXghv2V9S4u8/o/wbWXvrHYDzJUAs6FR4UnelgTC73zThxYb7+7MiK/9LUDdbZ4seD0Pjo03jnIumVkdERl5Pq3pjM2XJyxzycPwQ9OKdjuXZWJopz0xD9wvnn92hDxFqKt4hBHR7GCY6NtB7UImgmeEsdzVIWfPexM1clDPCXoxC+C4P/rc3zgJvKHa/uT/jeekn8e3NMwZwxXyrEMtGoRSf5dA1INqV9NstrYl7f7VM5phNCjb2ZdFkpZY4WAG1e4wgE8+5zDwOMcO8p9+jgKLOvospWiTLaiY3KIpu65jZNLT7seH47pgOMi/m9IRtnp7kcUXldiXTM3JKaj/vG1/K6/176ALAMra1cK2dFcH+MVXf/MLXNuZ254EVw8YSsqNmcUql1/k/lCqAJoWpknmq6jEG+UZjkhbMEoBOAGmGP+Mc0zq0q8aERLcGVwHo51VSPyQv6pXHHjIOyCvb8LRBIBYbHD9wOStwSOIlD/8Z3Yuvd9AxoTgSj+IY6BQaWtCu2BJTbGh/+sn5quC4o9rgSKgEsoKpR9ZWxDBf2zmt4YyNZkXcWzsp74+6A+nVT+Jtd8Dmzklb/9KwnF9QnR888z2z0TCuqM3N8E8WckODOihUNLJSFv/5C40aDGhUaP4cdzt/WcUbAVbY3miy7LC8tBgWaH/907M9/vlygQyC1RmPpkO+xy/JqXjuX53tCEmujzZyMJ/qzmyS/Y/9G8ZbFtwZnafrM6fmkhcZ0ZUmVTUbk9PojqIUy3px3N87y2L4QBRYCxbFAiKKlLGjtTrCxdKMYmNEopjWIoI06IHRiZGbAyRX7QPpZxIV7Cr6LSue5n9asvONhymK0WFC2iuJk7+05HnLV5gxIoAiV5yfcE3oSo/KknNi2RLc84V+8/HFDq9yA6uaerJYENTJ8XmeKapBn4B0NIkCwn8CZHF092tc9Dc7cwgx52jp5n9YJ/YwhOxkcbk35v5da8EhcQ+QCR/z2ksiBxCobmqYluYtJjG/qqYltDGdEt5qZPUf+tq0y0BET+xQDvpSAfPeRc59ybYwg0VxWjOShHPfiWBiPnEcv46MH62UxPUKYY6y/geqn0x5/VNPHhFPrfWmajf5YmfQwfmBkQ1him8u1U++kW9fApDEGUJ9W5vAZ7iXj9JD5EL1oyzf5X8afxiYc/J2oxBnb2VLKdMQ7rRlg+SZZ5T3lU/md4PuepT3yHnxjcmu7gSnEy8JSrMOO/sXBDTu+ZMdbilZO0G5ZLnVi3UMfv9DOMkTbSMzwLjU9jbnXWlGkG/lUiIJ3gPnPPVSUWCOLqXlS1jSdyCziSomaEr/c7xNwfH6Jkfu907xMf/p9DJnicqNExzXHKGEWLN9PqopoUWPVsg6asxnqCz7MVQyOxVxxHezU6hiY5qK9ldnNLdDud83/9px3/qxbk4OAA5uyz/kc98JmFGwPvBtS1GqxkbfKgs0/X+9363d8tILYrcafdhXoB92gvCjNdhYfvLqwPuwy7bD6Bb1VpazX0qw2sg2vL8JmeR/1PXvB4evudtqZI37yxWWaZot1aZ0Eg+tsuQTcH1yptz+s21ZjqWtKtcZ0p+zDUFxxq6IipOzXfncp+vg2rO9zvvnpIqHj8aY3cztz2TflniusSL59gbiuuzq01yV1/AzUhIap/kENQYDmox3QEFTvhDLnykvRJBfvK+x5E0UZEbdNeDff63Z/bjxb2V8cVqc6uDibOvj686/i9GFNkaF3K3XuXz6Vm5Bexc/xrp+8zG4pKnSwFxTVRE3dqYorKJEtZJaPu7oRvbV4+smhHJcWF3h2NiQhXzKwQFx86NxIdwQLD5k1XyT95BadjPP+yFx2N7kFLqEio96hHq/d+N5nXjTwvJIuQnUP8REiRJ9aGG2nswJu9YjNfIYXFe2jQOO91nhVtaWic6sAMuB7mVsEYbPTIDrpxVerJ518ia/MYl7OM0PB4GzNyODnS906YZ/WTKMsT/uaOlknH3pg4qHoauNnGHmNL4ql4G5K+gRU5xMoy2dryCU7TnkTQtSXjNciPioL5U6fqnkaj2wuDkT2jC3XNXS0Vl3zcHWkeAWzASooNZHu4utr7tWa2VciJXmmuRzbXKjrVKCLbjMQ6qxQdkO13b7pazqR2bPhL4e79ETfS9NgEafaWa4X7eE2ItUNyXPpZenh7QncQ7nyMMUkd2yUU0pOak11blKXnK23vnXaccrgjh2EFqLpqNJaeaNwcIumqqSz1OfcFOyDvHc3/Ll66OVQ5Sld156SwWPoPseEt3KaVyNqJBmtjE5vLWTmWXoYaFhYED1BQim/l6W/vl+Z5z4lqbAwPq2vYqLsUxmy+JMKLN7PAa5hZMYhWISSi2klKD2mfxPzDtNu3c/kjNo3w2fUxHqxh5imAc1iKpJO3eveZhzFXLmeXN6TGWxCjQ53LorzdRcUjHeNpyrlqJ3vkHwR1nM0ouRIXGs9WqzheRB9OKS+8mhn1UMkUq6FnpuyRCDzKxNqArjh+N1dmihCRYh/nX6EV8htDEOIypdFygogq1zHAe+mQx2u/wftnaZHv78ZJ4HFOXbhu7k4t9KDmeTpZkNycpWncnRUypeHD59u421gOJ00ULBEKhViRmvuHbx+vi01AGfME+DaM3tEcm2gj1d+6c7luZLK5B+HnEWZv6xYKfOx9PcLsbD2YQXjkxfQs/ea6Mm2iHFnlco2Nmytkj4HG9peeLu7evV1fXe3jIXfUF6Ipq90rXxLnmGKQJmQ92mZNUTvC+WfPWdjv596eSC7DBnLVktRJMopR1z57dLaf0cRqap1YGos/g9emOL60GrUl3dyp+Hbh/tSdEJ1XQY92uDfPgZx0K2u9f5pCSNXtwrJGv5P0Ql8QbVuXgKg6EnJt01zVs6ppD6xTZQI5AhuN4FP4+fvsu+LfPiO+KmKAx0F/G1yJTYudSomPgFw7MDavf31cH9uYucpkdNsc0bN1sanMKu/7MLXscFkxHv/eF5doRyEZqpo5OxhXxFf6hA3aWdAczeoRC242q+K/8koNze7bnLu52Nd4+dfVr6BDx9qeauPoZaGBFqtA3H78LDrsXMQstLDPvXX5En90XmKsTbqis4r1bZLWkqEGa0EtWsVvpMULhFP0te1N1NRb3JhRgswUOS/nwLf4Q9J/uUC2ZVem6MfKsuIPKamrOZs/+B/mhFphq2JYo4k2kVU+0cSyo24rH8/0ZVxhWkdefWnqWBYZVZ7Gii/0C04crHMzU9dFbCCaFc3cKCSih6O5qaujpZULZYf0ez5VvieBTnLmhY1BT2fLLf49pLLjbS9NLGsMevawBK2TftwGjtI/xYhuGa2KOuxwIA6O02MbQky/Pnmu6M/6owRKDUrKY9+mmZUjPGju9ZZXJj5wDB/CfhTUjiFg5GONQFwbKrEHVVrND+vQ765EildwktpQMd8a3Q13DdnNZB95r2DBvQghWmXzddCF57TdqnQ82pj432ZezeaF8qzKJWjpB7RXVyjCSk8OpmahHVRsb5J0XhjFb18ozy1/Kn4SjuapZTUxGZEN/Rejmxn0yGYCp8XGN1KEESHj6+FbohWzJbhxsfhi8TryGKpDhyf2tHNanKdHegyNej7a2/dcbJSjSl1AnYpqj1/PSc3A75EZ1d5HG4K1XssqQ6rtfBHptd4KtvE6r6SV0aomohtK2bbUbNiF9g+VXiELGEHlfTcrG1bUuVHr5v8EM4/le7U5Bysb+gRaAc3vAeqxWeGxcxas7nnPGeDj+fKARHtTy2Aly6/iXcg74IUi+09IxrkQZmoSFHAqOD2ZQc9MCpW0EfhceFMyCyWZdROJHKi1+a1F5+ci5BXmhyxPiQ+ltY6wQ5SWltXSnRSU95PkMnnUZXh+d1Z3Jqt39Cryt54ENz1dQfmrp6K7rAzaptou2a7MMPNruDcp3Mc3VaEuJuJcRIVC6l5fWm9hbw6zKtxQycl7z1ts6JXkK6MO3fv5ei17nHDik69cKNLg7oDK4sJiULYSQSlLwxxN5bOcaie/vrSUQv5AJ+jW5t2FKkdF4P1Q8nop6gsYtph9J4+pfuSWBwTZPwZKBKWJ3kkOYHTn7rNiV/4lgIem8lmNr4X3rTNmO+p+e3TppZ18ZPRln/BCi3zUnW2Z2lZZUVyfB6XcEys7pXNew9tD181I1d163u3ulbuWAwiJgpN1+qzQhh7K/ciHz01lmn34moa2sor6Vqi0u7a5s6S0+erFe7yVDH84e9pJ00g9EJZLQi4+7m+7VB9sTmun1T+odxNgB3x6GP6waWHR0jkZX/WryV6cvWOemZtxNqmz+kLaQCYU8BBuHhgSievSVz85H6XcfKSjNJUq7GpmFBqXWZgY03Up5+LVJli5/uNvO1u1N+ywR5NiThvrq/mH9DVaNj63Cu9oO4+rN4wK10rVTWU2JZQUtyUw09IJLB1WyOV4/rrYG7ccGMEOx/OxZ/LFQskuVLKNC7X4taoJzj7pQnpGQl9bRnFLG6jWff76+bZoM8NTHm9EuWTIZRNLVyGYa4XGoFBIFFIa1ZA+eG0w/uOBEUzTXpWU9N/YeWlW9yjPfBWA4jtDgqjaz2dafI5iPj4kcJcwxMBRYhNoY209SJxjhnzK1rghVwE2Vv87kDHW/FBFDV1paIW9N9E9vY1qGrmxKeJtI070ALsCPzSvVR9EHR5diXQWt/HJnLQG1tdLNWpZaP2W9ddG7LbrBZ1nFK+oauZUNW9UUfUy21U3eoHYOHkTYm2VjE5ygBTqgXjCQA88KnPkPrlfHpAHpaFdgpsoq+IIY7dZE2k7U4eObVOHLjQyrdhM0yDOzfDcY3JR824V9NjkxDY1TfREt5mlpoNDx7YL2xfK9DKLevhOB596YuPQsQjbF04aOoonO1s9Wbpl47Kk8jKOPpVx9J6Mowsyjm74dLiK/Svr0B5Zh7bbOhW9U6qfM8I2r5R0QDYv1aIuNSjcVm9fvNtEuBkHA13qnT3lPR6RGgOZDOVXAOC2Fgu4xxduhpzSPvYFkatj2qf4AP+mW9zaSm4dQp/yOSYoHWlTsqK1MoXauyjSgS6KdJSLIp1ju7LQKtmVWrtc7X0JDJTOsD19qZTP0022ZLpIAOUm1bshwaQistyw/SL4f36GmPuq6UebKg868zIc+Pqx2ziXDXkJVXL2Za1AoF/Wr3AC+pedwwsYlurvqw6nakkjYeHUn6YRVkkl17A+Uu7H+gDATdOPHttOwEdtjHcOYhREf78OH9Ux3ruZR0H09W4WURCTfQQuqqO/d3u3mkZ+9GBjCW+/ozHe4wH6KaPmmYyT+TeeIs7z2/W7T0kH6qhR56y30PQe0D51SUUgnkHh1AtvQHfstVGo+k309Ucc52mvq46aMLwm8YsprMeDQ8VkGFB/BLMLwT3A+D63f4hcJzKZ386fZYtULoTCAMC2skyvAu21vo+NgrircLoMj0Ft7kf6NDpQy/Y5E1wI0wFgfP+rLAg5EiIDNTUZPj+4IA1qnWyYLxpq8h75Kuwm7577LXH0d5mf8G1aOM467h6+tgEUgF0ViinvXcOuuASVHdLPsO2ubCQc5J4dqUF9ogkNozQGkDwCGnQup/xP+y/Lf5n9vnaSIDKM1wKyH4lgrSPURYnk4rVq1j2My2SwXRyweRaCP7QBHo8t9FZ/esrSqhv5r2WcchDJEBpfBnGTmEub6NLHMuOiIgWRoupMGg4QHW2tUlT2x8M0O+WSI4I1rB3wupYF0UtkiVxv287lFRqR4y/Pfsl10DZxHszXCY99n6PbPLy4cYqH6Qer5HSfrHvEZLofZ8NES8AJnKBeb0Qn6eg5ZnlpErzda51IxxqPIws9D3w1le4Ywrj97RPLT8KuvTMRqDwFTebGKrGgKn9Sir56jC9lZLFrFOe9K0sFPypAQczWHUZm6rXbiaLvZFH04L5IfXZAKU1I0xyIU1IWUTiIDaoLmXrwoIiR3UoLqm4Y5scREw6HIkEVYsN1FYIh4EGUo9uWGos4tXA+h2YaNigTCBAUFEKKBfNRibzAhmExXgjsiqLRidoVTCy230zez84e8ow5mdN4NzoInbXcJDeSp6tz3BZyaDQGO4kbO+DzPMyt+QzdyM+zoJi/FM4HGHKfUIS4yy/5M1XHNUJRLtDnivLBBUdbT2eR55lSnwWHYd4+h8yHbHQ1mJqBWvTWjZQhyANjuFkIKOJILkiIQ3GBOzXjMqA8BA4czs+TxASKuBCRvjjlZmLB3YZnEyubOZbbD4uR0m7XT6UWDn9BCH5gDBBCo6C0xPFeVg6ECFGGmCRN8BxdIeANqoL61G2cCodVULG2ScFyr4of38f8pd3Huxj55e7zlYe9ZyBIv3sBt59Bgf5RcKiUU7LBxLT2oWqCVOxggUWbRmVZABvDuK8tgpd7QXmWitE+0odJVBJWbZyET10RUST5PexADsQclIOeSABDtoZYBAhcsCGtaSTT5/BzAQLOa1QhtaMtNbTk5Xtf4XJkQjkuLc28Ij+xx4UQXF4ouVV8ou2jLjIeeLjzmjvRFyNoIOwqu5UyUXT2vevOhF53ikYe8ElFh6QUWYxQLy9FdsMSdBFO3Y3yFHMMdbKFcGMb88v68xhOZsdX7WWGNvSC7apvnUocZr80fnwMXDkfds9dSF9nCNAW0DxLNH4D1NrosagzvIDrxGwvGZ6IdScPMVYsiZWSzQO5nyOZNNT+fhPzpfnWYfBQoEYgAEfZo/HIXtPY/AlvKoT8xWpyFQY+Qlj5JHmwCrtecRVwSGqEvhys/qdDzC/Xnxdh4POLCAxD6AhD4wyPDVgPKZuSA6S5dYTar3Vtau+U0uSPfkzSXTjTEiscfIuAYLr5sGcqEZA5l7JRpsuAQROYHMTwXvcW28BBDoQknG/1HwtSsNFIAImA1kUvp6ksm9LCEOmWCQHBYvoTmBHh5R61BIVhCSueg11Uj62ggSbnehamHlE0pmZtCSJEbSxh/zpIdEiWROsSq0HiYG87WGlDIdRJBLLJgZpk3TQwbHqASMyCLB/mCMIAJfnDzUsozrcbElwFq0myuoDXq1ZksKKmjJkmUPl/LycRxhJk8IAHtWRcZ5iw/kwbu2ImW8gqy+Fy7FgCEFkKPgjLIhdrN4ybIcx0i1Lq5bQbvlGn67BCURcUA1rn95IAf0mKE2EUYcG0eJwx0IkBVP0jpsqkn92eUsyhdYjG2grjIUKtjmnE8pEKak1Mm7NlGreiNRZbCSTUSXQaLBsaZqC7IuPrqnW8hkeMumupBfATk7DdsK30jhCAxLQ+aVpLi9/LlUFQGxL/eGGoRoSCFKAMlMuHJimVKBfzkco1wfLqkcFq8MqZJLO21j1XSvN01W3GcmHd5KsgZ8ihcp6UsSy9C15pqHUozGaQ9vNNgsEr3JeMuFr3HGhhznp9tViNo2TC3sooopd0WX3Mgzo6EztA/718fgZ1bmXFkwhWmoBGpuTytED7Tq7Y25eIwRvmQwsZRgqylSwW2viplRgmtmdbq9riRWwyHshHOXbJTpuBm+TNQYJtinGuyVDneUD22qKGhtGMEFcTDIb23CEAMwpRj9ZbacMOBIKdJEIANZxAl3bPc86JSNJOARmpEJIQiOCMDYFIMKbY3kJ0z2tN7A2/6boIystRySNS+upMU890GQ4FCusymF1pH5ZY2i5XTAiJYb0MiVah1rnNS7BFnzsCgpkZOgK9VGqhID9QLG/QrCkPZFagdfZDnkO5NVTrJalc6UAvtgLfel2OXWMyFaLsEcrqLVdo783ED8q9pMtZHdxSrxccEtTFfaYU9+I4ZpJGYyh0CmVoDTE/3Uyx5uwGEs8r0sg5yBmvKHrO14mhAsyDiQfagFWLfcxXzV6y0BpKQJ8Saj/tIZmhtUj0cmHnCsHjanbsnlQYcgEzXiu6DbxC1dzVgpjdEpwtosqbvJnbhKpFVHk9r64yuBTnvddQD50Azw2tmYex3VTFlHt1y2TjJo/kllZ5vKIoUTLbTSNTi0FUHpOJamVuasjVYisruuBeXyQVhLCNUypLBjXn2LTajbNoWK0geFYCmhY1dgvy4whFDc9sVrFKVrZDOyTSONF1Ek3IRJ3/xM4K8Pp70hWLXMHzm674TBTFJTZ7MGlMYn9NMgmkH23FnWsu0RQHvEbB1/CdBT7sU4RnjGkrJkP3j8ELhOFzOZ/20U75u41t0iAhkHRQinszMaMEpWcteCbN9AUESo1sxe7BGI2al8ouPM/q8hbQtXSRjBlDQ+ziewITwj2lvAAuz9xWdcdN2RJbHlflyvEddfcis+MObjzPZrfufCTfHoI0s4eIyni1r/DoOlKp27i3d+ChcOjwnr63Gq/d2xOBfiZ7vI4K6IPSFT3fCTrUZKZVM0AKsmOzLWvRY3/Iew7BB53Dvb1OtXbbAsVCY6kU1lHd/asyfTo8DtDd5/oC63CCLiL0aRLtvaqDu0prub5evM+MuoTJStPIxtaZSMnmSyXmIqmxy0O9vqNcGX1tFRmJs/30GDOMnaUI7q6W9r/2bvRlvc2ny9Miwc2V/Si+fgz+Nh0JoIww4SU6YIXL56sW4VHJyzKcuR+Ccspy9GX4pGDOpks1BIJOoQlhHMKQNzaabEwST7EPKrKfT4I/WXnqYfvqZAOz0QxbbNugtgkjAf0tEkOYvIV+ir8L8G7y7mAffMZDPF3emG+hd4D1kuzBsVAZUyCvTD4aF9PiIObTmJpWz0prZTxMmqrCBCCGiPP/S5+WjZ6nXbqlX3JPoSkpXXBfdX/g/tL9fXqVdtPvDD8rLvbvrf+ObpOVgxFyB7kmEENnGPphp9bcYkS4HZvATSSeB4GscVpo8cGkACsNFhBqvqG2Rs5IXitCx9IKOoXAMpkHIFyEDAgC6tzYZIlpK7kwj/3B8QGHW7NX8uP1zSrZiIu6nxU41IY0qy6gu6OLEN+4sIqmfDPRtU3GrgcCfCrn4TxLvI8GnC7YzifMibm54LQs1U8pW1F2Uqs2lHgWWNcGT97EEoL6f6WkTJPtRCsPVfShEDMVQO/XPCkINKvqV7D10vNCGZoxhBGM4IddWSAwdOnpVIA6/+pRNFfYvUC323WhUG+FlC0MyxPGHjMkhrJIhYrnLPgovOMhupm6Gz1K5BfO9zWvOlQq4ZbApJ3bdRu5skyYGiZLu8asQf4CL+DiP8jDxeF17Pj8Nep8YGvUSZ7CIjBlR6vF5DFQOqP7KTGACpr4JAWlTKN4e6Cc2QX5WhmGJY4cRL+wmI8gdRMl4ZEsQvPSM29zK+J3FS5zWWOWEwtJTzaAQg80dYPK0dWcAWRLIznQSA+BLVClj9QWlyTZoBvIPiTjU/dAPW8XbbslgggcSykHgEZ6tGHbvcyTJedpMbT+WTKKOACDNQMlOZQlNSOFO6fRlLqpN83AsJNnDWlIclnrY+EGHSNXRxcvfmUcRBZyjrY+q6fXFlTPROFdCtva8JSxthhRxOzFuqwAo1XyCtNicUooGUAWhaAQ5DZuqR28GdsKALTwLsLwsM7X/6Cvp9i09JBx4uVaRysaVT9caTyERUnxkayk+UhtzL2AVP5uDX0bpmjW+uLfkAZUgqIKkMycwid10Qcds2fXIauqjobRS3kzBpLQtD6wk1hYR3g6CCCJoBFCx62xOrWM8ObFtMbpZfZEE7lpqu/fRAcR3+GhzCTYykajK8OQsxNfLuIR+wm8WSJ46AIadQ4lLCFsPKRtlhXn5b/WpZdCXRKg0AkIKr9GExINXCPDJviypJEz6AzubVykqLO6XC5AYtsDIY55Mqes7fsHj28XVPkcDkqsOlE59jwuocp+D38RjzAjVFkjkUuIWNjvJc6RGPR3TQDAVXNVhjfSb+gAN81Nhmf3eCYaeGo3AQRjtE7liD55DBZnex8yH//cappSA073NmXkI7r2JlhEKAgYbGKdmvDCOupkbhedRpDbTg6Y0jKuMw4BkaFEpLKYH88A31cyK8Si2SLPFnfLbH/E7IQbmIWKOe0kNCfrpo3P5itz1gygvYW0P06Z/cAeCRvjhchsJtES9T51gTqEDXWdsDBULNjW8lMFNsw+RW8V6fFHdF5Yvdz+WT42iz7xpe7P32cxICJPvEGLGMd58d7G1lk4ZYRQVtq6iquKJ3BIyVA8FW8dUfcYJ5loHAYdklstT81FGFdYWC0m7GF9pEDbtGmOCmbS9Mn5KX+riKHq7q2fVAi1xMwMu90IMWIqYvtpD+vAdFIX4R8IqH0iJsRbkM9iEskPaIrEKYB39bM9XzrWcW2/K9tpbjVC9VChboPr1eP6+jRk34Z7zDDuNeB6nTLjq09evQXXvxmHShF/9Sb+iYMxsXgR91GDcDLHqZ1q4W8JS1J67XG8w8Yh7dUm6emIQcqsEgS2Iz9fvckyHfBM9CnS+ZH4UgHqeJMiONrPKZl6IPLFwxZwoNmLFF+1bp/xc9nZswqjvtkU37h6pjY84BY6r8zjxgLiACOz0WopvGpOtllUXTRDdj1eMUmslHXVlCnHjc3M9SJ7kaiyAtY2xtsCYfKmNmpXhMNAaNZ/rOC/nzt3n+mBInH9U756ltMx9ZCfYaOPYSqt7UeVXxHiX9rO3xdhMRCw8K8q0JNUlitDoWOohimr0tpG2nuRHTOgAf63wFdARGTv49Ayq0dm9pHNpIyu1GxghglPEb1NA5nxvleVVTVJHhKOGYG8uGcvGPoOPYYay0GKpFlrXsJHMmfviKGvEwuzSqOl4R7jl1Rbjpk1tpq7vBm+VDiGF9AhPQaPDuHZq1uGDH8SYoMVjshP73y6iN7feaVnAOCLP3W3BvhRc/zxf0f/X1TZs2gQPjAADRgvmVsAFm7/T26OX8gGwXz/ynwBwm2+yhFbSY4SRjVVxq7i0bd4dyPEZsUwHiWezlPHs4FsedFp3ymnjPCgSIk/07ct05ugHSzACLSADgG2vtfL7RwmzoU0nRKjWeVySklC/nZ6PMGq++Hpa0rvepw7TnqlwvRz947m1dtzBFVFJTjexUNCDYwwKuxtJntLnLAsJ5ZvZe0yr2+OdzMxXRfPMNmgHyJRX8HqZ8ihIyF9gNiNUF5DJUtB8RKNsmRWaSJKhUmlMykKUrwlXyXM66yQUBQW4lNjWYgIRSnDRxGVhF5sJsEkqyx20VeedgziDxyzBAj135ErMYcKAW4Wt4wW2ODW/c4odSxGmEitGv41wb/ncShL/FFSOw+PvM1rsOCcBXLzwKFFl0KOWTAdKSulrLnGb1rqR4uNdoH10YXcZRV0+XGYX/yWnR3i8sCxfVTgIMlpiOeVv5mPWWC1B+OewbPeyuqCsocJJlXDqYoZViaTyhMZatjjGJ9RCyV/SYor4vOF2BIH2vNuY5+xvozqQVZYWxHSlhDa/0zSECvNkVKHSazK7ruyIgUzGOyzhEL8hq8qrl1ITEUpq7fEa5P8GIacALOdeMR/tApkAxGwgAdzsLBxzlbT+I0IwIM5WNg4h2Va6Fi4TneY9gpuUAMLUCs+QyGC082KUeHU6+8uvAGBRZcCBBbW4MqnUmQp2DnUpo4C7MLpsr+2wAYEFlcKEAi8t+K9GGcgCLqvJykiwRYXNRrLAAG2Pe7F/c0EgYNqAXAasJ0OEeRlwpIyYzqchKh0BKZzOSrH5Ibc83SFOZliKgJLoih0wULEQFOHpXZORiOKYKHCFDg7WTh/qqaxD8xSx1ARTUUDRatolDgdDaDqRyP4EcSACWdGqboUDeEcHI1GhwhPBFS7cbTopjVUiyHvNCahHq0sBGdOGt+qyhdLmf6ZxQOpihAlOMpED9oDhYtOecNnWCMzZc4WhbnT8eNYcM1RTRfgGSYruxfsDWTUzj7R7a3FUYvk/hO//+aw1LNLiWMO+v3ox800B/vmn4+L5Rz8ZHGqW28X773YLYTNIS8PV6ba1erBnppDf/rjZjc9m/nP1w1ffV/FsMbZCX6NKIFbjgd+GnryinvkCfly/cS7qsD6PKTHJLpHPip9SbqSfiJdk0ELkyYyIcp8d7nsS1NWemz9Q5HBPfJ56Ur6M1yzP4AuGvuwh6ogjiyIjWEA) format(\"woff2\")}@font-face{font-family:Quadrel-Icon;src:url(data:application/octet-stream;base64,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)}:host{display:block;height:10rem;align-items:unset;padding:.75rem;border:1px solid rgb(213,213,213);background-color:#fff;color:unset;line-height:unset;text-align:unset;text-decoration:unset}qd-icon{display:block;margin-bottom:2.8125rem;font-size:2rem}small{color:#171717;font-size:14px;font-weight:500;line-height:20px;text-wrap:normal}@media (min-width: 1280px){small{font-size:1rem}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
22255
22347
  }
22256
22348
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: NavigationTileComponent, decorators: [{
22257
22349
  type: Component,
@@ -22403,14 +22495,14 @@ class QdSearchRouterConnectorService {
22403
22495
  this._activatedRouteSubscription?.unsubscribe();
22404
22496
  this._searchUrlParameterSubscription?.unsubscribe();
22405
22497
  }
22406
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSearchRouterConnectorService, deps: [{ token: i1$3.Router, optional: true }, { token: i1$3.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
22498
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSearchRouterConnectorService, deps: [{ token: i1$2.Router, optional: true }, { token: i1$2.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
22407
22499
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSearchRouterConnectorService });
22408
22500
  }
22409
22501
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSearchRouterConnectorService, decorators: [{
22410
22502
  type: Injectable
22411
- }], ctorParameters: () => [{ type: i1$3.Router, decorators: [{
22503
+ }], ctorParameters: () => [{ type: i1$2.Router, decorators: [{
22412
22504
  type: Optional
22413
- }] }, { type: i1$3.ActivatedRoute, decorators: [{
22505
+ }] }, { type: i1$2.ActivatedRoute, decorators: [{
22414
22506
  type: Optional
22415
22507
  }] }] });
22416
22508
 
@@ -22727,7 +22819,7 @@ class QdSearchComponent {
22727
22819
  return this.configData.emitEmptySearch ?? !!this.configData.clearable;
22728
22820
  }
22729
22821
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSearchComponent, deps: [{ token: QdSearchStoreService }, { token: QdSearchRouterConnectorService }, { token: QdSearchService, self: true }, { token: QdSearchService, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
22730
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdSearchComponent, isStandalone: false, selector: "qd-search", inputs: { configData: "configData" }, host: { properties: { "class.hidden": "!hasConfig" }, classAttribute: "qd-search" }, providers: [QdSearchService, QdSearchRouterConnectorService], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"hasConfig\">\n <div class=\"search-field\">\n <qd-dropdown\n *ngIf=\"preSelectedEnabled\"\n class=\"preselect\"\n [(value)]=\"preSelect\"\n [config]=\"dropdownConfig\"\n ></qd-dropdown>\n\n <qd-input\n class=\"search-input\"\n [(value)]=\"search\"\n [config]=\"inputConfig\"\n (keydown.enter)=\"startSearch()\"\n (clickClear)=\"handleDelete()\"\n data-test-id=\"search-input\"\n ></qd-input>\n <button\n type=\"button\"\n qdIconButton\n qdStopPropagation\n data-test-id=\"search-button\"\n class=\"search-button\"\n (click)=\"startSearch()\"\n [attr.aria-label]=\"'i18n.qd.container.toolbar.search' | translate\"\n >\n <qd-icon [icon]=\"'magnifier'\"></qd-icon>\n </button>\n </div>\n\n <qd-icon\n *ngIf=\"hasAdditionalInfo\"\n icon=\"circleInfo\"\n class=\"additional-info\"\n qdTooltipOnClick\n [qdTooltipContent]=\"configData.additionalInfo.content\"\n ></qd-icon>\n</ng-container>\n", styles: [".qd-search{position:relative;display:flex;height:2.25rem}.qd-search.hidden{display:none}.qd-search .search-field{position:relative;display:flex;flex-wrap:nowrap}@media (max-width: 959.98px){.qd-search .search-field,.qd-search .search-field .search-input{width:100%}}.qd-search .preselect{display:flex;height:2.25rem}.qd-search .preselect .qd-dropdown__wrapper{height:2.25rem;margin-bottom:0}.qd-search .preselect .qd-dropdown__wrapper .qd-dropdown__box{background:#e5e5e5;color:#171717;font-size:.8125rem}.qd-search .search-input{display:flex;overflow:hidden;width:16.25rem;margin:0}.qd-search .search-input .qd-form-label,.qd-search .search-input .qd-form-hint{display:none;margin:0}.qd-search .search-input .qd-input-input{padding-right:1.25rem;margin:0!important}.qd-search .search-input .qd-input-input .qd-input-clearable-icon{margin-right:1.75rem!important}.qd-search .search-button{position:absolute;top:0;right:0;width:1.875rem;height:2.25rem;padding:0!important;padding-right:.375rem!important;padding-left:.375rem!important;margin:0!important;background:none}.qd-search .search-button:hover,.qd-search .search-button:focus,.qd-search .search-button:active{background:none}.qd-search .search-button .qd-icon{color:#979797!important;font-size:1.125rem!important;line-height:2.25rem;transform:translate(-.125rem,.0625rem)}.qd-search .search-button .qd-icon:hover,.qd-search .search-button .qd-icon:focus,.qd-search .search-button .qd-icon:active{color:#171717!important}.qd-search .additional-info{align-self:center;padding:0 .375rem 0 0;margin-right:-.375rem;margin-left:.5rem;color:#069;cursor:pointer;font-size:1.3125rem;line-height:2.25rem}.qd-search .additional-info:hover,.qd-search .additional-info:focus,.qd-search .additional-info:active{color:#14516f}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconButtonComponent, selector: "button[qdIconButton], a[qdIconButton], button[qd-icon-button]", inputs: ["color", "data-test-id"] }, { kind: "component", type: QdDropdownComponent, selector: "qd-dropdown", inputs: ["value", "id", "formControlName", "config", "data-test-id", "qdPopoverMaxHeight", "dense"], outputs: ["valueChange", "enterClick", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdInputComponent, selector: "qd-input", inputs: ["formControlName", "value", "config", "isError", "data-test-id"], outputs: ["valueChange", "enterClick", "clickClear", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdTooltipOnClickDirective, selector: "[qdTooltipOnClick]", inputs: ["qdTooltipContent"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
22822
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdSearchComponent, isStandalone: false, selector: "qd-search", inputs: { configData: "configData" }, host: { properties: { "class.hidden": "!hasConfig" }, classAttribute: "qd-search" }, providers: [QdSearchService, QdSearchRouterConnectorService], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"hasConfig\">\n <div class=\"search-field\">\n <qd-dropdown\n *ngIf=\"preSelectedEnabled\"\n class=\"preselect\"\n [(value)]=\"preSelect\"\n [config]=\"dropdownConfig\"\n ></qd-dropdown>\n\n <qd-input\n class=\"search-input\"\n [(value)]=\"search\"\n [config]=\"inputConfig\"\n (keydown.enter)=\"startSearch()\"\n (clickClear)=\"handleDelete()\"\n data-test-id=\"search-input\"\n ></qd-input>\n <button\n type=\"button\"\n qdIconButton\n qdStopPropagation\n data-test-id=\"search-button\"\n class=\"search-button\"\n (click)=\"startSearch()\"\n [attr.aria-label]=\"'i18n.qd.container.toolbar.search' | translate\"\n >\n <qd-icon [icon]=\"'magnifier'\"></qd-icon>\n </button>\n </div>\n\n <qd-icon\n *ngIf=\"hasAdditionalInfo\"\n icon=\"circleInfo\"\n class=\"additional-info\"\n qdTooltipOnClick\n [qdTooltipContent]=\"configData.additionalInfo.content\"\n ></qd-icon>\n</ng-container>\n", styles: [".qd-search{position:relative;display:flex;height:2.25rem}.qd-search.hidden{display:none}.qd-search .search-field{position:relative;display:flex;flex-wrap:nowrap}@media (max-width: 959.98px){.qd-search .search-field,.qd-search .search-field .search-input{width:100%}}.qd-search .preselect{display:flex;height:2.25rem}.qd-search .preselect .qd-dropdown__wrapper{height:2.25rem;margin-bottom:0}.qd-search .preselect .qd-dropdown__wrapper .qd-dropdown__box{background:#e5e5e5;color:#171717;font-size:.8125rem}.qd-search .search-input{display:flex;overflow:hidden;width:16.25rem;margin:0}.qd-search .search-input .qd-form-label,.qd-search .search-input .qd-form-hint{display:none;margin:0}.qd-search .search-input .qd-input-input{padding-right:1.25rem;margin:0!important}.qd-search .search-input .qd-input-input .qd-input-clearable-icon{margin-right:1.75rem!important}.qd-search .search-button{position:absolute;top:0;right:0;width:1.875rem;height:2.25rem;padding:0!important;padding-right:.375rem!important;padding-left:.375rem!important;margin:0!important;background:none}.qd-search .search-button:hover,.qd-search .search-button:focus,.qd-search .search-button:active{background:none}.qd-search .search-button .qd-icon{color:#979797!important;font-size:1.125rem!important;line-height:2.25rem;transform:translate(-.125rem,.0625rem)}.qd-search .search-button .qd-icon:hover,.qd-search .search-button .qd-icon:focus,.qd-search .search-button .qd-icon:active{color:#171717!important}.qd-search .additional-info{align-self:center;padding:0 .375rem 0 0;margin-right:-.375rem;margin-left:.5rem;color:#069;cursor:pointer;font-size:1.3125rem;line-height:2.25rem}.qd-search .additional-info:hover,.qd-search .additional-info:focus,.qd-search .additional-info:active{color:#14516f}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconButtonComponent, selector: "button[qdIconButton], a[qdIconButton], button[qd-icon-button]", inputs: ["color", "data-test-id"] }, { kind: "component", type: QdDropdownComponent, selector: "qd-dropdown", inputs: ["value", "id", "formControlName", "config", "data-test-id", "qdPopoverMaxHeight", "dense"], outputs: ["valueChange", "enterClick", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdInputComponent, selector: "qd-input", inputs: ["formControlName", "value", "config", "isError", "data-test-id"], outputs: ["valueChange", "enterClick", "clickClear", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdTooltipOnClickDirective, selector: "[qdTooltipOnClick]", inputs: ["qdTooltipContent"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
22731
22823
  }
22732
22824
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSearchComponent, decorators: [{
22733
22825
  type: Component,
@@ -23386,6 +23478,7 @@ class QdTableResolverService {
23386
23478
  _destroyed$ = new Subject();
23387
23479
  _refreshSubscription;
23388
23480
  _hasPagination = true;
23481
+ _isNavigatingToValidPage = false;
23389
23482
  constructor(tableDataResolver, tableStoreService, translateService, actionResultService) {
23390
23483
  this.tableDataResolver = tableDataResolver;
23391
23484
  this.tableStoreService = tableStoreService;
@@ -23410,9 +23503,10 @@ class QdTableResolverService {
23410
23503
  ...(this._hasPagination ? tableParams : {}),
23411
23504
  ...connectorParams
23412
23505
  };
23413
- }), tap(() => this.tableStoreService.setRequestState(QdTableRequestState.PENDING)), switchMap(resolutionParams => this.tableDataResolver.resolve(resolutionParams)), tap(({ data, size, page, totalElements }) => {
23414
- this.tableStoreService.setPage(page ?? 0, size, totalElements, data);
23415
- }), tap(() => this.tableStoreService.setRequestState(QdTableRequestState.SUCCESS)))
23506
+ }), tap(() => this.tableStoreService.setRequestState(QdTableRequestState.PENDING)), switchMap(resolutionParams => this.tableDataResolver.resolve(resolutionParams)), tap(result => this.handleResolverResult(result)), filter(() => !this._isNavigatingToValidPage), tap(() => this.tableStoreService.setRequestState(QdTableRequestState.SUCCESS)), catchError(() => {
23507
+ this._isNavigatingToValidPage = false;
23508
+ return EMPTY;
23509
+ }))
23416
23510
  .subscribe();
23417
23511
  }
23418
23512
  refresh(resolverOptions = {}) {
@@ -23427,7 +23521,10 @@ class QdTableResolverService {
23427
23521
  ...resolutionCriteria.tableParams,
23428
23522
  ...resolutionCriteria.connectorParams,
23429
23523
  ...(this._hasPagination && pageIndex !== undefined ? { page: pageIndex } : {})
23430
- })), tap(({ page, data, size, totalElements }) => this.tableStoreService.setPage(page, size, totalElements, data)), tap(() => this.tableStoreService.setRequestState(QdTableRequestState.SUCCESS)))
23524
+ })), tap(result => this.handleResolverResult(result)), filter(() => !this._isNavigatingToValidPage), tap(() => this.tableStoreService.setRequestState(QdTableRequestState.SUCCESS)), catchError(() => {
23525
+ this._isNavigatingToValidPage = false;
23526
+ return EMPTY;
23527
+ }))
23431
23528
  .subscribe();
23432
23529
  }
23433
23530
  subscribeToLangChanges() {
@@ -23445,7 +23542,25 @@ class QdTableResolverService {
23445
23542
  .pipe(takeUntil(this._destroyed$))
23446
23543
  .subscribe(pageIndex => this.refresh({ pageIndex }));
23447
23544
  }
23448
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTableResolverService, deps: [{ token: QD_TABLE_DATA_RESOLVER_TOKEN, optional: true }, { token: QdTableStoreService }, { token: i1$2.TranslateService }, { token: QdTableExternalActionResultService }], target: i0.ɵɵFactoryTarget.Injectable });
23545
+ handleResolverResult(result) {
23546
+ const { page, data, size, totalElements } = result;
23547
+ // Check if current page is empty but there are still entries (deleted last item on page)
23548
+ if (this._hasPagination &&
23549
+ !this._isNavigatingToValidPage &&
23550
+ data.length === 0 &&
23551
+ totalElements > 0 &&
23552
+ page !== undefined &&
23553
+ page > 0) {
23554
+ // Calculate last valid page index
23555
+ const lastValidPage = Math.ceil(totalElements / size) - 1;
23556
+ this._isNavigatingToValidPage = true;
23557
+ this.refresh({ pageIndex: lastValidPage });
23558
+ return;
23559
+ }
23560
+ this._isNavigatingToValidPage = false;
23561
+ this.tableStoreService.setPage(page ?? 0, size, totalElements, data);
23562
+ }
23563
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTableResolverService, deps: [{ token: QD_TABLE_DATA_RESOLVER_TOKEN, optional: true }, { token: QdTableStoreService }, { token: i1$3.TranslateService }, { token: QdTableExternalActionResultService }], target: i0.ɵɵFactoryTarget.Injectable });
23449
23564
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTableResolverService });
23450
23565
  }
23451
23566
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTableResolverService, decorators: [{
@@ -23455,7 +23570,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
23455
23570
  }, {
23456
23571
  type: Inject,
23457
23572
  args: [QD_TABLE_DATA_RESOLVER_TOKEN]
23458
- }] }, { type: QdTableStoreService }, { type: i1$2.TranslateService }, { type: QdTableExternalActionResultService }] });
23573
+ }] }, { type: QdTableStoreService }, { type: i1$3.TranslateService }, { type: QdTableExternalActionResultService }] });
23459
23574
 
23460
23575
  // @ts-strict-ignore
23461
23576
  class QdTableResponsiveRowService {
@@ -23864,7 +23979,7 @@ class QdTablePaginatorPageSizeComponent {
23864
23979
  this.closeSelection();
23865
23980
  }
23866
23981
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTablePaginatorPageSizeComponent, deps: [{ token: i0.ElementRef }, { token: QD_TABLE_DATA_RESOLVER_TOKEN, optional: true }, { token: QdTableStoreService }, { token: QdScrollingService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
23867
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTablePaginatorPageSizeComponent, isStandalone: false, selector: "qd-table-paginator-page-size", inputs: { pageSizes: "pageSizes" }, host: { listeners: { "document:click": "clickedOutside($event)" } }, viewQueries: [{ propertyName: "selection", first: true, predicate: ["selection"], descendants: true }, { propertyName: "selectionList", first: true, predicate: ["selectionList"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"hasActivePageSizes$ | async\">\n <label>\n {{ \"i18n.qd.table.pagination.pageSize\" | translate }}\n </label>\n <div [ngClass]=\"{ selection: true, opened: selectionOpened }\" #selection>\n <span (click)=\"toggleSelection()\" data-test-id=\"page-size-selection\">\n {{ pageSize$ | async }}\n </span>\n <ul\n [ngClass]=\"{ 'selection-list': true, opened: selectionOpened }\"\n [class]=\"selectionDirection\"\n #selectionList\n data-test-id=\"page-size-selection-list\"\n >\n <li\n *ngFor=\"let pageSize of pageSizes$ | async\"\n [ngClass]=\"{ disabled: pageSize.disabled }\"\n [attr.data-test-id]=\"'page-size-selection-option-' + pageSize.value\"\n [qdTablePaginatorPageSize]=\"pageSize\"\n >\n {{ pageSize.value }}\n </li>\n </ul>\n </div>\n</ng-container>\n", styles: [":host{position:relative;display:flex;height:2.75rem;align-items:center;text-align:right;-webkit-user-select:none;user-select:none;white-space:nowrap}:host label{margin:0 .4375rem 0 1rem}@media (max-width: 599.98px){:host label{display:none}}:host .selection{height:2.75rem;border-right:.0625rem solid rgb(229,229,229);cursor:pointer;white-space:nowrap}:host .selection span{display:inline-block;width:100%;padding:.75rem 1.625rem .6875rem .5625rem}:host .selection:hover,:host .selection.opened{border-right:.0625rem solid rgb(151,151,151);border-left:.0625rem solid rgb(151,151,151);color:#171717}:host .selection:hover span,:host .selection:hover li,:host .selection.opened span,:host .selection.opened li{padding-left:.5rem}:host .selection:after{position:absolute;top:50%;right:.4375rem;color:#454545;content:\"\\e042\";font-family:Quadrel-Icon,sans-serif;font-size:1rem;pointer-events:none;transform:translateY(-50%)}:host .selection:hover:after{color:#171717}:host .selection.opened:after{content:\"\\e040\"}:host .selection-list{position:relative;z-index:100;bottom:2.75rem;padding:0;border:.0625rem solid rgb(151,151,151);margin:0 -.0625rem;background-color:#fff;box-shadow:#d5d5d5 0 -.125rem .4375rem;list-style:none;transform:translateY(-100%);visibility:hidden}:host .selection-list.opened{visibility:visible}:host .selection-list.opened.down{bottom:0;box-shadow:#d5d5d5 .125rem .25rem .4375rem;transform:none}:host .selection-list li{width:100%;padding:.375rem 1.625rem .375rem .5625rem;white-space:nowrap}:host .selection-list li:hover{background-color:#f5f5f5}:host .selection-list li.disabled{background-color:#fff;color:#b4b4b4;cursor:default}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: QdTablePaginatorPageSizeDirective, selector: "[qdTablePaginatorPageSize]", inputs: ["qdTablePaginatorPageSize"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
23982
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTablePaginatorPageSizeComponent, isStandalone: false, selector: "qd-table-paginator-page-size", inputs: { pageSizes: "pageSizes" }, host: { listeners: { "document:click": "clickedOutside($event)" } }, viewQueries: [{ propertyName: "selection", first: true, predicate: ["selection"], descendants: true }, { propertyName: "selectionList", first: true, predicate: ["selectionList"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"hasActivePageSizes$ | async\">\n <label>\n {{ \"i18n.qd.table.pagination.pageSize\" | translate }}\n </label>\n <div [ngClass]=\"{ selection: true, opened: selectionOpened }\" #selection>\n <span (click)=\"toggleSelection()\" data-test-id=\"page-size-selection\">\n {{ pageSize$ | async }}\n </span>\n <ul\n [ngClass]=\"{ 'selection-list': true, opened: selectionOpened }\"\n [class]=\"selectionDirection\"\n #selectionList\n data-test-id=\"page-size-selection-list\"\n >\n <li\n *ngFor=\"let pageSize of pageSizes$ | async\"\n [ngClass]=\"{ disabled: pageSize.disabled }\"\n [attr.data-test-id]=\"'page-size-selection-option-' + pageSize.value\"\n [qdTablePaginatorPageSize]=\"pageSize\"\n >\n {{ pageSize.value }}\n </li>\n </ul>\n </div>\n</ng-container>\n", styles: [":host{position:relative;display:flex;height:2.75rem;align-items:center;text-align:right;-webkit-user-select:none;user-select:none;white-space:nowrap}:host label{margin:0 .4375rem 0 1rem}@media (max-width: 599.98px){:host label{display:none}}:host .selection{height:2.75rem;border-right:.0625rem solid rgb(229,229,229);cursor:pointer;white-space:nowrap}:host .selection span{display:inline-block;width:100%;padding:.75rem 1.625rem .6875rem .5625rem}:host .selection:hover,:host .selection.opened{border-right:.0625rem solid rgb(151,151,151);border-left:.0625rem solid rgb(151,151,151);color:#171717}:host .selection:hover span,:host .selection:hover li,:host .selection.opened span,:host .selection.opened li{padding-left:.5rem}:host .selection:after{position:absolute;top:50%;right:.4375rem;color:#454545;content:\"\\e042\";font-family:Quadrel-Icon,sans-serif;font-size:1rem;pointer-events:none;transform:translateY(-50%)}:host .selection:hover:after{color:#171717}:host .selection.opened:after{content:\"\\e040\"}:host .selection-list{position:relative;z-index:100;bottom:2.75rem;padding:0;border:.0625rem solid rgb(151,151,151);margin:0 -.0625rem;background-color:#fff;box-shadow:#d5d5d5 0 -.125rem .4375rem;list-style:none;transform:translateY(-100%);visibility:hidden}:host .selection-list.opened{visibility:visible}:host .selection-list.opened.down{bottom:0;box-shadow:#d5d5d5 .125rem .25rem .4375rem;transform:none}:host .selection-list li{width:100%;padding:.375rem 1.625rem .375rem .5625rem;white-space:nowrap}:host .selection-list li:hover{background-color:#f5f5f5}:host .selection-list li.disabled{background-color:#fff;color:#b4b4b4;cursor:default}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: QdTablePaginatorPageSizeDirective, selector: "[qdTablePaginatorPageSize]", inputs: ["qdTablePaginatorPageSize"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
23868
23983
  }
23869
23984
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTablePaginatorPageSizeComponent, decorators: [{
23870
23985
  type: Component,
@@ -23982,7 +24097,7 @@ class QdTablePaginatorComponent {
23982
24097
  }
23983
24098
  }
23984
24099
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTablePaginatorComponent, deps: [{ token: QD_TABLE_DATA_RESOLVER_TOKEN, optional: true }, { token: QdTableStoreService }], target: i0.ɵɵFactoryTarget.Component });
23985
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTablePaginatorComponent, isStandalone: false, selector: "qd-table-paginator", inputs: { config: "config", testId: ["data-test-id", "testId"] }, viewQueries: [{ propertyName: "paginatorButtons", first: true, predicate: ["paginatorButtons"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"hasData$ | async\">\n <qd-table-paginator-page-size [pageSizes]=\"pageSizes\" *ngIf=\"pageSizes.length > 0\"></qd-table-paginator-page-size>\n <span class=\"paginator-current-page\" *ngIf=\"currentPage$ | async as page\">\n {{ page.start }}\u2014{{ page.end }}\n {{ \"i18n.qd.table.pagination.of\" | translate }}\n {{ page.totalCount }}\n {{\n page.totalCount === 1\n ? (\"i18n.qd.table.pagination.entry\" | translate)\n : (\"i18n.qd.table.pagination.entries\" | translate)\n }}\n </span>\n <span class=\"paginator-buttons\" data-test=\"paginator-buttons\" #paginatorButtons qdScrollToPagination>\n <button\n *ngIf=\"config?.pagination['hasFirstLastPageNavigation']\"\n class=\"paginator-button\"\n [attr.data-test-id]=\"testId + '-paginator-first-page'\"\n (click)=\"navigateToPage(pageNav.FirstPage)\"\n [disabled]=\"(canPageBackward$ | async) === false\"\n >\n <qd-icon [icon]=\"'pageFirst1'\"></qd-icon>\n </button>\n <button\n class=\"paginator-button\"\n [attr.data-test-id]=\"testId + '-paginator-backward'\"\n (click)=\"navigateToPage(pageNav.PreviousPage)\"\n [disabled]=\"(canPageBackward$ | async) === false\"\n >\n <qd-icon [icon]=\"'triangleLeftSolid'\"></qd-icon>\n </button>\n <button\n class=\"paginator-button forward\"\n [attr.data-test-id]=\"testId + '-paginator-forward'\"\n (click)=\"navigateToPage(pageNav.NextPage)\"\n [disabled]=\"(canPageForward$ | async) === false\"\n >\n <qd-icon [icon]=\"'triangleRightSolid'\"></qd-icon>\n </button>\n <button\n *ngIf=\"config?.pagination['hasFirstLastPageNavigation']\"\n class=\"paginator-button\"\n [attr.data-test-id]=\"testId + '-paginator-last-page'\"\n (click)=\"navigateToPage(pageNav.LastPage)\"\n [disabled]=\"(canPageForward$ | async) === false\"\n >\n <qd-icon [icon]=\"'pageLast'\"></qd-icon>\n </button>\n </span>\n</ng-container>\n", styles: [":host{color:#454545;font-size:.875rem;font-weight:400;line-height:1.3125rem;display:flex;flex-direction:row;align-items:center;justify-content:space-between;background-color:#fff}.paginator-current-page{margin-left:1rem}.paginator-buttons{margin-left:auto;text-align:right;white-space:nowrap}button.paginator-button{width:2.75rem;height:2.75rem;border-left:.0625rem solid rgb(229,229,229);background-color:unset;color:#454545;font-size:1.5rem}button.paginator-button:disabled{color:#b4b4b4;cursor:default}button.paginator-button:not(:disabled):hover{background-color:#e5e5e5;color:#171717}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdScrollToPaginationDirective, selector: "[qdScrollToPagination]" }, { kind: "component", type: QdTablePaginatorPageSizeComponent, selector: "qd-table-paginator-page-size", inputs: ["pageSizes"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
24100
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTablePaginatorComponent, isStandalone: false, selector: "qd-table-paginator", inputs: { config: "config", testId: ["data-test-id", "testId"] }, viewQueries: [{ propertyName: "paginatorButtons", first: true, predicate: ["paginatorButtons"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"hasData$ | async\">\n <qd-table-paginator-page-size [pageSizes]=\"pageSizes\" *ngIf=\"pageSizes.length > 0\"></qd-table-paginator-page-size>\n <span class=\"paginator-current-page\" *ngIf=\"currentPage$ | async as page\">\n {{ page.start }}\u2014{{ page.end }}\n {{ \"i18n.qd.table.pagination.of\" | translate }}\n {{ page.totalCount }}\n {{\n page.totalCount === 1\n ? (\"i18n.qd.table.pagination.entry\" | translate)\n : (\"i18n.qd.table.pagination.entries\" | translate)\n }}\n </span>\n <span class=\"paginator-buttons\" data-test=\"paginator-buttons\" #paginatorButtons qdScrollToPagination>\n <button\n *ngIf=\"config?.pagination['hasFirstLastPageNavigation']\"\n class=\"paginator-button\"\n [attr.data-test-id]=\"testId + '-paginator-first-page'\"\n (click)=\"navigateToPage(pageNav.FirstPage)\"\n [disabled]=\"(canPageBackward$ | async) === false\"\n >\n <qd-icon [icon]=\"'pageFirst1'\"></qd-icon>\n </button>\n <button\n class=\"paginator-button\"\n [attr.data-test-id]=\"testId + '-paginator-backward'\"\n (click)=\"navigateToPage(pageNav.PreviousPage)\"\n [disabled]=\"(canPageBackward$ | async) === false\"\n >\n <qd-icon [icon]=\"'triangleLeftSolid'\"></qd-icon>\n </button>\n <button\n class=\"paginator-button forward\"\n [attr.data-test-id]=\"testId + '-paginator-forward'\"\n (click)=\"navigateToPage(pageNav.NextPage)\"\n [disabled]=\"(canPageForward$ | async) === false\"\n >\n <qd-icon [icon]=\"'triangleRightSolid'\"></qd-icon>\n </button>\n <button\n *ngIf=\"config?.pagination['hasFirstLastPageNavigation']\"\n class=\"paginator-button\"\n [attr.data-test-id]=\"testId + '-paginator-last-page'\"\n (click)=\"navigateToPage(pageNav.LastPage)\"\n [disabled]=\"(canPageForward$ | async) === false\"\n >\n <qd-icon [icon]=\"'pageLast'\"></qd-icon>\n </button>\n </span>\n</ng-container>\n", styles: [":host{color:#454545;font-size:.875rem;font-weight:400;line-height:1.3125rem;display:flex;flex-direction:row;align-items:center;justify-content:space-between;background-color:#fff}.paginator-current-page{margin-left:1rem}.paginator-buttons{margin-left:auto;text-align:right;white-space:nowrap}button.paginator-button{width:2.75rem;height:2.75rem;border-left:.0625rem solid rgb(229,229,229);background-color:unset;color:#454545;font-size:1.5rem}button.paginator-button:disabled{color:#b4b4b4;cursor:default}button.paginator-button:not(:disabled):hover{background-color:#e5e5e5;color:#171717}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdScrollToPaginationDirective, selector: "[qdScrollToPagination]" }, { kind: "component", type: QdTablePaginatorPageSizeComponent, selector: "qd-table-paginator-page-size", inputs: ["pageSizes"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
23986
24101
  }
23987
24102
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTablePaginatorComponent, decorators: [{
23988
24103
  type: Component,
@@ -24059,7 +24174,7 @@ class QdTableRowActionsSecondaryMenuComponent {
24059
24174
  };
24060
24175
  }
24061
24176
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTableRowActionsSecondaryMenuComponent, deps: [{ token: QdTableSecondaryActionsService }, { token: QdTableStoreService }, { token: QdEventBrokerService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
24062
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTableRowActionsSecondaryMenuComponent, isStandalone: false, selector: "[qd-table-row-actions-secondary-menu]", inputs: { rowIndex: "rowIndex", rowData: "rowData", i18ns: "i18ns", testId: "testId", viewonly: "viewonly" }, ngImport: i0, template: "<ng-container *ngIf=\"actions$ | async as actions\">\n <button\n *ngIf=\"actions.length > 0\"\n type=\"button\"\n class=\"menu-button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n [qdPopoverMinWidth]=\"160\"\n [attr.data-test-id]=\"testId + '-toggler'\"\n >\n <qd-icon icon=\"overflowMenuHorizontal\"></qd-icon>\n </button>\n\n <ng-template #menu>\n <button\n *ngFor=\"let action of actions; let i = index\"\n class=\"action-button\"\n type=\"button\"\n [disabled]=\"action.isDisabled\"\n (click)=\"onActionClick(action.type)\"\n [attr.data-test-id]=\"testId + '-' + i\"\n >\n {{ action.i18n | translate }}\n </button>\n </ng-template>\n</ng-container>\n", styles: [".menu-button{display:flex;padding:.1875rem .625rem 0 .375rem;background:unset;color:#454545;font-size:2rem}.menu-button:hover,.menu-button:focus{color:#000}.action-button{display:block;width:100%;min-height:2rem;padding:0 1rem;background:#fff0;font-size:.75rem;text-align:left}.action-button:hover{background-color:#f2f7fa}.action-button.disabled{color:#b4b4b4;cursor:not-allowed}.action-button.disabled:hover{background-color:#fff0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
24177
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTableRowActionsSecondaryMenuComponent, isStandalone: false, selector: "[qd-table-row-actions-secondary-menu]", inputs: { rowIndex: "rowIndex", rowData: "rowData", i18ns: "i18ns", testId: "testId", viewonly: "viewonly" }, ngImport: i0, template: "<ng-container *ngIf=\"actions$ | async as actions\">\n <button\n *ngIf=\"actions.length > 0\"\n type=\"button\"\n class=\"menu-button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n [qdPopoverMinWidth]=\"160\"\n [attr.data-test-id]=\"testId + '-toggler'\"\n >\n <qd-icon icon=\"overflowMenuHorizontal\"></qd-icon>\n </button>\n\n <ng-template #menu>\n <button\n *ngFor=\"let action of actions; let i = index\"\n class=\"action-button\"\n type=\"button\"\n [disabled]=\"action.isDisabled\"\n (click)=\"onActionClick(action.type)\"\n [attr.data-test-id]=\"testId + '-' + i\"\n >\n {{ action.i18n | translate }}\n </button>\n </ng-template>\n</ng-container>\n", styles: [".menu-button{display:flex;padding:.1875rem .625rem 0 .375rem;background:unset;color:#454545;font-size:2rem}.menu-button:hover,.menu-button:focus{color:#000}.action-button{display:block;width:100%;min-height:2rem;padding:0 1rem;background:#fff0;font-size:.75rem;text-align:left}.action-button:hover{background-color:#f2f7fa}.action-button.disabled{color:#b4b4b4;cursor:not-allowed}.action-button.disabled:hover{background-color:#fff0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
24063
24178
  }
24064
24179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTableRowActionsSecondaryMenuComponent, decorators: [{
24065
24180
  type: Component,
@@ -24204,7 +24319,7 @@ class QdTableRowComponent {
24204
24319
  return this.config.columns.find(column => column.column === item)?.type || 'blank';
24205
24320
  }
24206
24321
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTableRowComponent, deps: [{ token: QdTableResponsiveRowService }, { token: QdDataFacetsContextService }], target: i0.ɵɵFactoryTarget.Component });
24207
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTableRowComponent, isStandalone: false, selector: "[qd-table-row]", inputs: { config: "config", rowData: "rowData", rowIndex: "rowIndex", testId: ["data-test-id", "testId"] }, providers: [QdDataFacetsContextService], ngImport: i0, template: "<td\n qd-table-row-selection\n *ngIf=\"config.selection\"\n class=\"qd-table__body-cell--selection\"\n [rowIndex]=\"rowIndex\"\n [data-test-id]=\"testId + '-cell-selection'\"\n></td>\n\n<ng-container *ngFor=\"let item of columnsDefinitions$ | async\">\n <td\n *ngIf=\"hasMergedColumns(item)\"\n [class]=\"'qd-table__body-cell--merged ' + getCellClass(item)\"\n [attr.data-test-id]=\"testId + '-cell-merged'\"\n >\n <div *ngFor=\"let item of item; let first = first\">\n <ng-container *ngTemplateOutlet=\"headings; context: { item, translations, first }\"></ng-container>\n <span class=\"qd-table__body-cell\">\n <ng-container *ngComponentOutlet=\"getComponentType(item); inputs: getComponentInputs(item)\"></ng-container>\n </span>\n </div>\n </td>\n\n <td\n *ngIf=\"!hasMergedColumns(item)\"\n [class]=\"'qd-table__body-cell ' + getCellClass(item)\"\n [attr.data-test-id]=\"testId + '-cell'\"\n >\n <ng-container *ngComponentOutlet=\"getComponentType(item); inputs: getComponentInputs(item)\"></ng-container>\n </td>\n</ng-container>\n\n<td\n *ngIf=\"config.secondaryActions?.length > 0\"\n qd-table-row-actions-secondary-menu\n class=\"qd-table__body-cell--actions-secondary-actions-menu\"\n [rowIndex]=\"rowIndex\"\n [rowData]=\"rowData\"\n [i18ns]=\"config.i18ns\"\n [testId]=\"testId + '-secondary-actions'\"\n [viewonly]=\"config.viewonly\"\n [attr.data-test-id]=\"testId + '-cell-secondary-actions'\"\n></td>\n\n<ng-template #headings let-item=\"item\" let-translations=\"translations\" let-first=\"first\">\n <ng-container *ngIf=\"!first && findColumnType(item) !== 'blank'\">\n <span class=\"qd-table__body-cell--merged-headings\">\n {{ translations ? (getI18n(item) | translate) : capitalize(item) }}\n </span>\n </ng-container>\n</ng-template>\n", styles: ["[qd-table-row] .qd-table__body-cell--actions-secondary-actions-menu{vertical-align:top}[qd-table-row] .qd-data-facets{display:block}[qd-table-row] qd-data-facets-progress.qd-data-facets{transform:translateY(.1875rem)}[qd-table-row] qd-data-facets-chip.qd-data-facets{display:contents}[qd-table-row] .qd-table__body-cell--merged qd-data-facets-text{padding-top:0}\n"], dependencies: [{ kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: QdTableRowActionsSecondaryMenuComponent, selector: "[qd-table-row-actions-secondary-menu]", inputs: ["rowIndex", "rowData", "i18ns", "testId", "viewonly"] }, { kind: "component", type: QdTableRowSelectionComponent, selector: "[qd-table-row-selection]", inputs: ["rowIndex", "data-test-id"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
24322
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTableRowComponent, isStandalone: false, selector: "[qd-table-row]", inputs: { config: "config", rowData: "rowData", rowIndex: "rowIndex", testId: ["data-test-id", "testId"] }, providers: [QdDataFacetsContextService], ngImport: i0, template: "<td\n qd-table-row-selection\n *ngIf=\"config.selection\"\n class=\"qd-table__body-cell--selection\"\n [rowIndex]=\"rowIndex\"\n [data-test-id]=\"testId + '-cell-selection'\"\n></td>\n\n<ng-container *ngFor=\"let item of columnsDefinitions$ | async\">\n <td\n *ngIf=\"hasMergedColumns(item)\"\n [class]=\"'qd-table__body-cell--merged ' + getCellClass(item)\"\n [attr.data-test-id]=\"testId + '-cell-merged'\"\n >\n <div *ngFor=\"let item of item; let first = first\">\n <ng-container *ngTemplateOutlet=\"headings; context: { item, translations, first }\"></ng-container>\n <span class=\"qd-table__body-cell\">\n <ng-container *ngComponentOutlet=\"getComponentType(item); inputs: getComponentInputs(item)\"></ng-container>\n </span>\n </div>\n </td>\n\n <td\n *ngIf=\"!hasMergedColumns(item)\"\n [class]=\"'qd-table__body-cell ' + getCellClass(item)\"\n [attr.data-test-id]=\"testId + '-cell'\"\n >\n <ng-container *ngComponentOutlet=\"getComponentType(item); inputs: getComponentInputs(item)\"></ng-container>\n </td>\n</ng-container>\n\n<td\n *ngIf=\"config.secondaryActions?.length > 0\"\n qd-table-row-actions-secondary-menu\n class=\"qd-table__body-cell--actions-secondary-actions-menu\"\n [rowIndex]=\"rowIndex\"\n [rowData]=\"rowData\"\n [i18ns]=\"config.i18ns\"\n [testId]=\"testId + '-secondary-actions'\"\n [viewonly]=\"config.viewonly\"\n [attr.data-test-id]=\"testId + '-cell-secondary-actions'\"\n></td>\n\n<ng-template #headings let-item=\"item\" let-translations=\"translations\" let-first=\"first\">\n <ng-container *ngIf=\"!first && findColumnType(item) !== 'blank'\">\n <span class=\"qd-table__body-cell--merged-headings\">\n {{ translations ? (getI18n(item) | translate) : capitalize(item) }}\n </span>\n </ng-container>\n</ng-template>\n", styles: ["[qd-table-row] .qd-table__body-cell--actions-secondary-actions-menu{vertical-align:top}[qd-table-row] .qd-data-facets{display:block}[qd-table-row] qd-data-facets-progress.qd-data-facets{transform:translateY(.1875rem)}[qd-table-row] qd-data-facets-chip.qd-data-facets{display:contents}[qd-table-row] .qd-table__body-cell--merged qd-data-facets-text{padding-top:0}\n"], dependencies: [{ kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: QdTableRowActionsSecondaryMenuComponent, selector: "[qd-table-row-actions-secondary-menu]", inputs: ["rowIndex", "rowData", "i18ns", "testId", "viewonly"] }, { kind: "component", type: QdTableRowSelectionComponent, selector: "[qd-table-row-selection]", inputs: ["rowIndex", "data-test-id"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
24208
24323
  }
24209
24324
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTableRowComponent, decorators: [{
24210
24325
  type: Component,
@@ -24296,7 +24411,7 @@ class QdTableEmptyStateComponent {
24296
24411
  this.emptyStateService.emitAction();
24297
24412
  }
24298
24413
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTableEmptyStateComponent, deps: [{ token: QdTableEmptyStateService }], target: i0.ɵɵFactoryTarget.Component });
24299
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTableEmptyStateComponent, isStandalone: false, selector: "qd-table-empty-state", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: "<p>{{ getI18n() + \".empty.content\" | translate : translationParameter }}</p>\n<button *ngIf=\"config?.action\" qdButton qdButtonLink icon=\"plusCircle\" color=\"primary\" (click)=\"handleClick()\">\n {{ getI18n() + \".empty.action\" | translate }}\n</button>\n", styles: [":host{display:block;padding:1.5rem;background:#fff}:host p{margin:0 0 .5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonLinkDirective, selector: "button[qdButtonLink], a[qdButtonLink], button[qd-button-link]" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
24414
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTableEmptyStateComponent, isStandalone: false, selector: "qd-table-empty-state", inputs: { config: "config" }, usesOnChanges: true, ngImport: i0, template: "<p>{{ getI18n() + \".empty.content\" | translate : translationParameter }}</p>\n<button *ngIf=\"config?.action\" qdButton qdButtonLink icon=\"plusCircle\" color=\"primary\" (click)=\"handleClick()\">\n {{ getI18n() + \".empty.action\" | translate }}\n</button>\n", styles: [":host{display:block;padding:1.5rem;background:#fff}:host p{margin:0 0 .5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonLinkDirective, selector: "button[qdButtonLink], a[qdButtonLink], button[qd-button-link]" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
24300
24415
  }
24301
24416
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTableEmptyStateComponent, decorators: [{
24302
24417
  type: Component,
@@ -24464,7 +24579,7 @@ class QdTableHeadComponent {
24464
24579
  return this.config.columns.find(column => column.column === columnName).sort;
24465
24580
  }
24466
24581
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTableHeadComponent, deps: [{ token: QdTableResponsiveRowService }], target: i0.ɵɵFactoryTarget.Component });
24467
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTableHeadComponent, isStandalone: false, selector: "[qd-table-head]", inputs: { config: "config", testId: ["data-test-id", "testId"] }, host: { properties: { "attr.data-test-id": "this.dataTestId" }, classAttribute: "qd-table__head" }, ngImport: i0, template: "<th\n *ngIf=\"this.config.selection\"\n class=\"qd-table__head-cell qd-table__head-cell--selection\"\n scope=\"col\"\n [attr.data-test-id]=\"testId + '-header-selection'\"\n></th>\n\n<ng-container *ngFor=\"let head of headData; let i = index; let l = last\">\n <th\n *ngIf=\"isHeadRendered$(i) | async\"\n [ngClass]=\"{\n 'qd-table__head-cell': true,\n 'main-column': isMainColumn(head),\n 'last-column': isLastColumn(head)\n }\"\n scope=\"col\"\n [attr.data-test-id]=\"testId + '-header-' + head\"\n >\n <qd-table-sort\n [isSortable]=\"getSortableByColumn(head)\"\n [config]=\"getSortConfig(head)\"\n [column]=\"head\"\n [data-test-id]=\"testId + '-sort'\"\n >\n <ng-container *ngIf=\"translations\">\n {{ getI18n(head) | translate }}\n </ng-container>\n\n <ng-container *ngIf=\"!translations\">\n {{ capitalize(head) }}\n </ng-container>\n </qd-table-sort>\n </th>\n</ng-container>\n\n<th\n *ngIf=\"config.secondaryActions?.length > 0\"\n class=\"qd-table__head-cell qd-table__head-cell--secondaryActions\"\n scope=\"col\"\n [attr.data-test-id]=\"testId + '-header-secondary-actions'\"\n></th>\n", styles: [":host .qd-table__head-cell{white-space:nowrap}:host .qd-table__head-cell--filling-width{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdTableSortComponent, selector: "qd-table-sort", inputs: ["isSortable", "config", "column", "data-test-id"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
24582
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTableHeadComponent, isStandalone: false, selector: "[qd-table-head]", inputs: { config: "config", testId: ["data-test-id", "testId"] }, host: { properties: { "attr.data-test-id": "this.dataTestId" }, classAttribute: "qd-table__head" }, ngImport: i0, template: "<th\n *ngIf=\"this.config.selection\"\n class=\"qd-table__head-cell qd-table__head-cell--selection\"\n scope=\"col\"\n [attr.data-test-id]=\"testId + '-header-selection'\"\n></th>\n\n<ng-container *ngFor=\"let head of headData; let i = index; let l = last\">\n <th\n *ngIf=\"isHeadRendered$(i) | async\"\n [ngClass]=\"{\n 'qd-table__head-cell': true,\n 'main-column': isMainColumn(head),\n 'last-column': isLastColumn(head)\n }\"\n scope=\"col\"\n [attr.data-test-id]=\"testId + '-header-' + head\"\n >\n <qd-table-sort\n [isSortable]=\"getSortableByColumn(head)\"\n [config]=\"getSortConfig(head)\"\n [column]=\"head\"\n [data-test-id]=\"testId + '-sort'\"\n >\n <ng-container *ngIf=\"translations\">\n {{ getI18n(head) | translate }}\n </ng-container>\n\n <ng-container *ngIf=\"!translations\">\n {{ capitalize(head) }}\n </ng-container>\n </qd-table-sort>\n </th>\n</ng-container>\n\n<th\n *ngIf=\"config.secondaryActions?.length > 0\"\n class=\"qd-table__head-cell qd-table__head-cell--secondaryActions\"\n scope=\"col\"\n [attr.data-test-id]=\"testId + '-header-secondary-actions'\"\n></th>\n", styles: [":host .qd-table__head-cell{white-space:nowrap}:host .qd-table__head-cell--filling-width{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdTableSortComponent, selector: "qd-table-sort", inputs: ["isSortable", "config", "column", "data-test-id"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
24468
24583
  }
24469
24584
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTableHeadComponent, decorators: [{
24470
24585
  type: Component,
@@ -25464,7 +25579,7 @@ class QdSectionToolbarActionComponent {
25464
25579
  };
25465
25580
  }
25466
25581
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSectionToolbarActionComponent, deps: [{ token: QdSectionToolbarActionService }, { token: i0.ChangeDetectorRef }, { token: QdBreakpointService }, { token: QdEventBrokerService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
25467
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdSectionToolbarActionComponent, isStandalone: false, selector: "qd-section-toolbar-action", inputs: { config: "config" }, ngImport: i0, template: "<button\n *ngIf=\"singleAction$ | async as singleAction\"\n qdStopPropagation\n qdButton\n qdButtonGhost\n color=\"primary\"\n [icon]=\"singleAction.icon\"\n [disabled]=\"singleAction.isDisabled\"\n (click)=\"singleAction.handler()\"\n>\n {{ singleAction.label.i18n | translate }}\n</button>\n\n<button *ngIf=\"multipleActions$ | async as multipleActions\" qdButtonGhost [qdMenuButton]=\"multipleActions\">\n {{ \"i18n.qd.section.actions.menuButton.label\" | translate }}\n</button>\n", styles: [":host{margin-left:.75rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdMenuButtonComponent, selector: "button[qdMenuButton], a[qdMenuButton]", inputs: ["qdMenuButton", "data-test-id", "autoSize"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25582
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdSectionToolbarActionComponent, isStandalone: false, selector: "qd-section-toolbar-action", inputs: { config: "config" }, ngImport: i0, template: "<button\n *ngIf=\"singleAction$ | async as singleAction\"\n qdStopPropagation\n qdButton\n qdButtonGhost\n color=\"primary\"\n [icon]=\"singleAction.icon\"\n [disabled]=\"singleAction.isDisabled\"\n (click)=\"singleAction.handler()\"\n>\n {{ singleAction.label.i18n | translate }}\n</button>\n\n<button *ngIf=\"multipleActions$ | async as multipleActions\" qdButtonGhost [qdMenuButton]=\"multipleActions\">\n {{ \"i18n.qd.section.actions.menuButton.label\" | translate }}\n</button>\n", styles: [":host{margin-left:.75rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdMenuButtonComponent, selector: "button[qdMenuButton], a[qdMenuButton]", inputs: ["qdMenuButton", "data-test-id", "autoSize"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25468
25583
  }
25469
25584
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSectionToolbarActionComponent, decorators: [{
25470
25585
  type: Component,
@@ -25511,7 +25626,7 @@ class QdSectionToolbarComponent {
25511
25626
  this.isCollapsed = !this.isCollapsed;
25512
25627
  }
25513
25628
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSectionToolbarComponent, deps: [{ token: QdToolbarComponentsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
25514
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdSectionToolbarComponent, isStandalone: false, selector: "qd-section-toolbar", inputs: { config: "config" }, viewQueries: [{ propertyName: "toolbarComponents", predicate: ["filter, search"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"{ toolbarHeader: true, collapsible: config.collapse?.isEnabled }\" (click)=\"toggleCollapse()\">\n <qd-icon class=\"collapseIcon\" *ngIf=\"config.collapse?.isEnabled\" [icon]=\"isCollapsed ? 'ctrlRight' : 'ctrlDown'\">\n </qd-icon>\n\n <span class=\"toolbarTitle\" *ngIf=\"config.title\">{{ config.title.i18n | translate }}</span>\n</div>\n\n<ng-container *ngIf=\"!isCollapsed\">\n <div class=\"toolbarRight\">\n <qd-search #search [configData]=\"searchConfigData\"></qd-search>\n <qd-section-toolbar-action qdViewportAdaptive class=\"toolbarAction\" [config]=\"config\"></qd-section-toolbar-action>\n </div>\n\n <qd-filter class=\"toolbarFilter\" #filter [filterData]=\"filterData\"></qd-filter>\n</ng-container>\n", styles: [":host{position:relative;display:flex;flex-wrap:wrap;margin-bottom:.625rem}:host .toolbarHeader{color:#333;font-size:1rem;font-weight:700;line-height:1.5rem;margin-bottom:.625rem}@media (max-width: 599.98px){:host .toolbarHeader{margin-bottom:.3125rem}}:host .collapsible{cursor:pointer}:host .collapsible .toolbarTitle{margin-left:1.5rem}:host .collapseIcon{position:absolute;top:-.09375rem;font-size:1.375rem;font-weight:500}:host .toolbarRight{display:inline-flex;margin-bottom:.625rem;margin-left:auto}@media (max-width: 959.98px){:host .toolbarRight{display:flex;width:100%;flex-basis:100%;margin-left:auto}:host .toolbarRight qd-search{min-width:0;flex-basis:0;flex-grow:1;flex-shrink:1}:host .toolbarRight qd-section-toolbar-action{flex-basis:auto;flex-grow:0;flex-shrink:0}}:host .toolbarAction{display:flex;align-items:center}@media (max-width: 959.98px){:host .toolbarAction{gap:.75rem}}:host .toolbarFilter{flex-basis:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFilterComponent, selector: "qd-filter", inputs: ["filterData", "data-test-id"], outputs: ["queryStringOutput", "postBodyOutput", "valueChange"] }, { kind: "component", type: QdSearchComponent, selector: "qd-search", inputs: ["configData"] }, { kind: "directive", type: QdViewportAdaptiveDirective, selector: "[qdViewportAdaptive]" }, { kind: "component", type: QdSectionToolbarActionComponent, selector: "qd-section-toolbar-action", inputs: ["config"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25629
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdSectionToolbarComponent, isStandalone: false, selector: "qd-section-toolbar", inputs: { config: "config" }, viewQueries: [{ propertyName: "toolbarComponents", predicate: ["filter, search"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"{ toolbarHeader: true, collapsible: config.collapse?.isEnabled }\" (click)=\"toggleCollapse()\">\n <qd-icon class=\"collapseIcon\" *ngIf=\"config.collapse?.isEnabled\" [icon]=\"isCollapsed ? 'ctrlRight' : 'ctrlDown'\">\n </qd-icon>\n\n <span class=\"toolbarTitle\" *ngIf=\"config.title\">{{ config.title.i18n | translate }}</span>\n</div>\n\n<ng-container *ngIf=\"!isCollapsed\">\n <div class=\"toolbarRight\">\n <qd-search #search [configData]=\"searchConfigData\"></qd-search>\n <qd-section-toolbar-action qdViewportAdaptive class=\"toolbarAction\" [config]=\"config\"></qd-section-toolbar-action>\n </div>\n\n <qd-filter class=\"toolbarFilter\" #filter [filterData]=\"filterData\"></qd-filter>\n</ng-container>\n", styles: [":host{position:relative;display:flex;flex-wrap:wrap;margin-bottom:.625rem}:host .toolbarHeader{color:#333;font-size:1rem;font-weight:700;line-height:1.5rem;margin-bottom:.625rem}@media (max-width: 599.98px){:host .toolbarHeader{margin-bottom:.3125rem}}:host .collapsible{cursor:pointer}:host .collapsible .toolbarTitle{margin-left:1.5rem}:host .collapseIcon{position:absolute;top:-.09375rem;font-size:1.375rem;font-weight:500}:host .toolbarRight{display:inline-flex;margin-bottom:.625rem;margin-left:auto}@media (max-width: 959.98px){:host .toolbarRight{display:flex;width:100%;flex-basis:100%;margin-left:auto}:host .toolbarRight qd-search{min-width:0;flex-basis:0;flex-grow:1;flex-shrink:1}:host .toolbarRight qd-section-toolbar-action{flex-basis:auto;flex-grow:0;flex-shrink:0}}:host .toolbarAction{display:flex;align-items:center}@media (max-width: 959.98px){:host .toolbarAction{gap:.75rem}}:host .toolbarFilter{flex-basis:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdFilterComponent, selector: "qd-filter", inputs: ["filterData", "data-test-id"], outputs: ["queryStringOutput", "postBodyOutput", "valueChange"] }, { kind: "component", type: QdSearchComponent, selector: "qd-search", inputs: ["configData"] }, { kind: "directive", type: QdViewportAdaptiveDirective, selector: "[qdViewportAdaptive]" }, { kind: "component", type: QdSectionToolbarActionComponent, selector: "qd-section-toolbar-action", inputs: ["config"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25515
25630
  }
25516
25631
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdSectionToolbarComponent, decorators: [{
25517
25632
  type: Component,
@@ -26272,7 +26387,7 @@ class QdTreeRowActionsSecondaryMenuComponent {
26272
26387
  .subscribe(({ payload }) => this._viewonly$.next(payload.isViewonly));
26273
26388
  }
26274
26389
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTreeRowActionsSecondaryMenuComponent, deps: [{ token: QdTableStoreService }, { token: QdEventBrokerService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
26275
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTreeRowActionsSecondaryMenuComponent, isStandalone: false, selector: "[qd-tree-row-actions-secondary-menu]", inputs: { rowIndex: "rowIndex", rowData: "rowData", config: "config", testId: "testId" }, ngImport: i0, template: "<ng-container *ngIf=\"hasVisibleActions$ | async\">\n <button\n type=\"button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n [qdPopoverMinWidth]=\"200\"\n class=\"menu-button\"\n [attr.data-test-id]=\"testId + '-toggler'\"\n >\n <qd-icon icon=\"overflowMenuHorizontal\"></qd-icon>\n </button>\n\n <ng-template #menu>\n <ng-container *ngFor=\"let action of actions$ | async; let i = index\">\n <button\n *ngIf=\"!action.isHidden\"\n class=\"action-button\"\n (click)=\"handleSecondaryAction(action.type, rowIndex, action.isHidden)\"\n [attr.data-test-id]=\"testId + '-' + i\"\n >\n {{ action.i18n | translate }}\n </button>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [".menu-button{display:flex;padding:0 .625rem 0 .375rem;background:unset;color:#454545;font-size:2rem;vertical-align:middle}.menu-button:hover,.menu-button:focus{color:#000}.action-button{display:block;width:100%;min-height:2rem;padding:0 1rem;background:#fff0;font-size:.75rem;text-align:left}.action-button:hover{background-color:#f2f7fa}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26390
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTreeRowActionsSecondaryMenuComponent, isStandalone: false, selector: "[qd-tree-row-actions-secondary-menu]", inputs: { rowIndex: "rowIndex", rowData: "rowData", config: "config", testId: "testId" }, ngImport: i0, template: "<ng-container *ngIf=\"hasVisibleActions$ | async\">\n <button\n type=\"button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n [qdPopoverMinWidth]=\"200\"\n class=\"menu-button\"\n [attr.data-test-id]=\"testId + '-toggler'\"\n >\n <qd-icon icon=\"overflowMenuHorizontal\"></qd-icon>\n </button>\n\n <ng-template #menu>\n <ng-container *ngFor=\"let action of actions$ | async; let i = index\">\n <button\n *ngIf=\"!action.isHidden\"\n class=\"action-button\"\n (click)=\"handleSecondaryAction(action.type, rowIndex, action.isHidden)\"\n [attr.data-test-id]=\"testId + '-' + i\"\n >\n {{ action.i18n | translate }}\n </button>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [".menu-button{display:flex;padding:0 .625rem 0 .375rem;background:unset;color:#454545;font-size:2rem;vertical-align:middle}.menu-button:hover,.menu-button:focus{color:#000}.action-button{display:block;width:100%;min-height:2rem;padding:0 1rem;background:#fff0;font-size:.75rem;text-align:left}.action-button:hover{background-color:#f2f7fa}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26276
26391
  }
26277
26392
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTreeRowActionsSecondaryMenuComponent, decorators: [{
26278
26393
  type: Component,
@@ -26425,7 +26540,7 @@ class QdTreeEmptyStateComponent {
26425
26540
  this.emptyStateService.emitAction();
26426
26541
  }
26427
26542
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTreeEmptyStateComponent, deps: [{ token: QdTableEmptyStateService }], target: i0.ɵɵFactoryTarget.Component });
26428
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTreeEmptyStateComponent, isStandalone: false, selector: "qd-tree-empty-state", inputs: { config: "config" }, ngImport: i0, template: "<p>{{ getI18n() + \".empty.content\" | translate }}</p>\n<button *ngIf=\"config?.action\" qdButton qdButtonLink icon=\"plusCircle\" color=\"primary\" (click)=\"handleClick()\">\n {{ getI18n() + \".empty.action\" | translate }}\n</button>\n", styles: [":host{display:block;padding:1.5rem;background:#fff}:host p{margin:0 0 .5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonLinkDirective, selector: "button[qdButtonLink], a[qdButtonLink], button[qd-button-link]" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26543
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTreeEmptyStateComponent, isStandalone: false, selector: "qd-tree-empty-state", inputs: { config: "config" }, ngImport: i0, template: "<p>{{ getI18n() + \".empty.content\" | translate }}</p>\n<button *ngIf=\"config?.action\" qdButton qdButtonLink icon=\"plusCircle\" color=\"primary\" (click)=\"handleClick()\">\n {{ getI18n() + \".empty.action\" | translate }}\n</button>\n", styles: [":host{display:block;padding:1.5rem;background:#fff}:host p{margin:0 0 .5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonLinkDirective, selector: "button[qdButtonLink], a[qdButtonLink], button[qd-button-link]" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26429
26544
  }
26430
26545
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTreeEmptyStateComponent, decorators: [{
26431
26546
  type: Component,
@@ -26474,7 +26589,7 @@ class QdTreeHeadComponent {
26474
26589
  return head[0].toUpperCase() + head.slice(1);
26475
26590
  }
26476
26591
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTreeHeadComponent, deps: [{ token: QdTreeGroupService }, { token: QdTableResponsiveRowService }], target: i0.ɵɵFactoryTarget.Component });
26477
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTreeHeadComponent, isStandalone: false, selector: "[qd-tree-head]", inputs: { config: "config", testId: ["data-test-id", "testId"] }, host: { properties: { "attr.data-test-id": "this.dataTestId" }, classAttribute: "qd-tree-head" }, ngImport: i0, template: "<ng-container *ngFor=\"let head of headData; let i = index; let l = last\">\n <th\n *ngIf=\"isHeadRendered$(i) | async\"\n [ngClass]=\"{\n 'qd-tree-head-cell': true,\n 'main-column': isMainColumn(head),\n 'last-column': isLastColumn(head)\n }\"\n scope=\"col\"\n [attr.data-test-id]=\"testId + '-header-' + head\"\n >\n <ng-container *ngIf=\"translations\">\n {{ getI18n(head) | translate }}\n </ng-container>\n\n <ng-container *ngIf=\"!translations\">\n {{ capitalize(head) }}\n </ng-container>\n </th>\n</ng-container>\n\n<th\n *ngIf=\"config.secondaryActions?.length > 0\"\n class=\"qd-tree__head-cell qd-table__head-cell--secondaryActions\"\n scope=\"col\"\n [attr.data-test-id]=\"testId + '-header-secondary-actions'\"\n></th>\n", styles: [":host .qd-tree-head-cell{white-space:nowrap}:host .qd-tree-head-cell--filling-width{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26592
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdTreeHeadComponent, isStandalone: false, selector: "[qd-tree-head]", inputs: { config: "config", testId: ["data-test-id", "testId"] }, host: { properties: { "attr.data-test-id": "this.dataTestId" }, classAttribute: "qd-tree-head" }, ngImport: i0, template: "<ng-container *ngFor=\"let head of headData; let i = index; let l = last\">\n <th\n *ngIf=\"isHeadRendered$(i) | async\"\n [ngClass]=\"{\n 'qd-tree-head-cell': true,\n 'main-column': isMainColumn(head),\n 'last-column': isLastColumn(head)\n }\"\n scope=\"col\"\n [attr.data-test-id]=\"testId + '-header-' + head\"\n >\n <ng-container *ngIf=\"translations\">\n {{ getI18n(head) | translate }}\n </ng-container>\n\n <ng-container *ngIf=\"!translations\">\n {{ capitalize(head) }}\n </ng-container>\n </th>\n</ng-container>\n\n<th\n *ngIf=\"config.secondaryActions?.length > 0\"\n class=\"qd-tree__head-cell qd-table__head-cell--secondaryActions\"\n scope=\"col\"\n [attr.data-test-id]=\"testId + '-header-secondary-actions'\"\n></th>\n", styles: [":host .qd-tree-head-cell{white-space:nowrap}:host .qd-tree-head-cell--filling-width{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26478
26593
  }
26479
26594
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdTreeHeadComponent, decorators: [{
26480
26595
  type: Component,
@@ -26857,7 +26972,7 @@ class QdPageCancelConfirmationDialogComponent {
26857
26972
  this.handler();
26858
26973
  }
26859
26974
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageCancelConfirmationDialogComponent, deps: [{ token: i1$1.DialogRef }], target: i0.ɵɵFactoryTarget.Component });
26860
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageCancelConfirmationDialogComponent, isStandalone: false, selector: "qd-page-cancel-confirmation-dialog", ngImport: i0, template: "<qd-dialog>\n <qd-text-section>\n <qd-text-section-paragraph>\n {{ i18n | translate }}\n </qd-text-section-paragraph>\n </qd-text-section>\n\n <qd-dialog-action>\n <button\n qdButton\n qdButtonGhost\n color=\"secondary\"\n (click)=\"close()\"\n data-test-id=\"page-cancel-confirmation-dialog-close\"\n >\n {{ \"i18n.qd.page.cancel.confirmation.dialog.close\" | translate }}\n </button>\n\n <button qdButton color=\"error\" (click)=\"confirm()\" data-test-id=\"page-cancel-confirmation-dialog-proceed\">\n {{ \"i18n.qd.page.cancel.confirmation.dialog.proceed\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", styles: [""], dependencies: [{ kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "component", type: QdTextSectionComponent, selector: "qd-text-section" }, { kind: "component", type: QdTextSectionParagraphComponent, selector: "qd-text-section-paragraph" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
26975
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageCancelConfirmationDialogComponent, isStandalone: false, selector: "qd-page-cancel-confirmation-dialog", ngImport: i0, template: "<qd-dialog>\n <qd-text-section>\n <qd-text-section-paragraph>\n {{ i18n | translate }}\n </qd-text-section-paragraph>\n </qd-text-section>\n\n <qd-dialog-action>\n <button\n qdButton\n qdButtonGhost\n color=\"secondary\"\n (click)=\"close()\"\n data-test-id=\"page-cancel-confirmation-dialog-close\"\n >\n {{ \"i18n.qd.page.cancel.confirmation.dialog.close\" | translate }}\n </button>\n\n <button qdButton color=\"error\" (click)=\"confirm()\" data-test-id=\"page-cancel-confirmation-dialog-proceed\">\n {{ \"i18n.qd.page.cancel.confirmation.dialog.proceed\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", styles: [""], dependencies: [{ kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "component", type: QdTextSectionComponent, selector: "qd-text-section" }, { kind: "component", type: QdTextSectionParagraphComponent, selector: "qd-text-section-paragraph" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
26861
26976
  }
26862
26977
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageCancelConfirmationDialogComponent, decorators: [{
26863
26978
  type: Component,
@@ -26906,7 +27021,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
26906
27021
  class QdPageControlPanelComponent {
26907
27022
  config;
26908
27023
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageControlPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
26909
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageControlPanelComponent, isStandalone: false, selector: "qd-page-control-panel", inputs: { config: "config" }, ngImport: i0, template: "<header>\n {{ config.title.i18n | translate }}\n</header>\n\n<main>\n <ng-content select=\"qd-text-section\"></ng-content>\n <ng-content select=\"qd-panel-section\"></ng-content>\n <ng-content select=\"qd-section\"></ng-content>\n</main>\n", styles: ["qd-page-control-panel{position:relative;display:flex;height:100%;flex-direction:column;background:#fff}qd-page-control-panel header{padding:.75rem 1rem .5rem;border-bottom:.125rem solid rgb(213,213,213);color:#171717;font-size:.875rem;font-weight:700;line-height:1.25rem}qd-page-control-panel main{flex-grow:99;overflow-y:auto}qd-page-control-panel qd-panel-section:last-child{margin-bottom:.75rem}qd-page-control-panel qd-section{margin:0 1rem}qd-page-control-panel qd-section:first-child{margin-top:1rem}qd-page-control-panel qd-section:last-child{margin-bottom:1rem}\n"], dependencies: [{ kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
27024
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageControlPanelComponent, isStandalone: false, selector: "qd-page-control-panel", inputs: { config: "config" }, ngImport: i0, template: "<header>\n {{ config.title.i18n | translate }}\n</header>\n\n<main>\n <ng-content select=\"qd-text-section\"></ng-content>\n <ng-content select=\"qd-panel-section\"></ng-content>\n <ng-content select=\"qd-section\"></ng-content>\n</main>\n", styles: ["qd-page-control-panel{position:relative;display:flex;height:100%;flex-direction:column;background:#fff}qd-page-control-panel header{padding:.75rem 1rem .5rem;border-bottom:.125rem solid rgb(213,213,213);color:#171717;font-size:.875rem;font-weight:700;line-height:1.25rem}qd-page-control-panel main{flex-grow:99;overflow-y:auto}qd-page-control-panel qd-panel-section:last-child{margin-bottom:.75rem}qd-page-control-panel qd-section{margin:0 1rem}qd-page-control-panel qd-section:first-child{margin-top:1rem}qd-page-control-panel qd-section:last-child{margin-bottom:1rem}\n"], dependencies: [{ kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
26910
27025
  }
26911
27026
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageControlPanelComponent, decorators: [{
26912
27027
  type: Component,
@@ -27010,7 +27125,7 @@ class QdPageFooterComponent {
27010
27125
  this.actions$ = this.footerService?.pageFooterActions$.pipe(map(actionsMap => Array.from(actionsMap.entries()).map(([key, action]) => ({ ...action, key }))));
27011
27126
  }
27012
27127
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageFooterComponent, deps: [{ token: QdPageFooterService }], target: i0.ɵɵFactoryTarget.Component });
27013
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageFooterComponent, isStandalone: false, selector: "qd-page-footer", ngImport: i0, template: "<ng-content></ng-content>\n\n<div class=\"actions\">\n <ng-container *ngFor=\"let action of actions$ | async\">\n <button\n *ngIf=\"(action.isVisible !== undefined ? action.isVisible : true) && action.type === QdFooterActionType.Primary\"\n [disabled]=\"action.isDisabled\"\n (click)=\"action.handler()\"\n qdButton\n [data-test-id]=\"'footer-primary-button-' + action.key\"\n [additionalInfo]=\"action.additionalInfo\"\n >\n {{ action.titleI18n | translate }}\n </button>\n <button\n *ngIf=\"(action.isVisible !== undefined ? action.isVisible : true) && action.type === QdFooterActionType.Secondary\"\n (click)=\"action.handler()\"\n qdButton\n qdButtonGhost\n [data-test-id]=\"'footer-secondary-button-' + action.key\"\n [additionalInfo]=\"action.additionalInfo\"\n >\n {{ action.titleI18n | translate }}\n </button>\n </ng-container>\n</div>\n", styles: [":host{display:flex;min-height:4rem;align-items:center;justify-content:flex-end;padding:.8125rem 1.25rem;border-top:1px solid rgb(213,213,213);background:#fff}@media (max-width: 599.98px){:host{padding:.8125rem .9375rem}}.actions{display:flex}.actions button{margin-left:.875rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
27128
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageFooterComponent, isStandalone: false, selector: "qd-page-footer", ngImport: i0, template: "<ng-content></ng-content>\n\n<div class=\"actions\">\n <ng-container *ngFor=\"let action of actions$ | async\">\n <button\n *ngIf=\"(action.isVisible !== undefined ? action.isVisible : true) && action.type === QdFooterActionType.Primary\"\n [disabled]=\"action.isDisabled\"\n (click)=\"action.handler()\"\n qdButton\n [data-test-id]=\"'footer-primary-button-' + action.key\"\n [additionalInfo]=\"action.additionalInfo\"\n >\n {{ action.titleI18n | translate }}\n </button>\n <button\n *ngIf=\"(action.isVisible !== undefined ? action.isVisible : true) && action.type === QdFooterActionType.Secondary\"\n (click)=\"action.handler()\"\n qdButton\n qdButtonGhost\n [data-test-id]=\"'footer-secondary-button-' + action.key\"\n [additionalInfo]=\"action.additionalInfo\"\n >\n {{ action.titleI18n | translate }}\n </button>\n </ng-container>\n</div>\n", styles: [":host{display:flex;min-height:4rem;align-items:center;justify-content:flex-end;padding:.8125rem 1.25rem;border-top:1px solid rgb(213,213,213);background:#fff}@media (max-width: 599.98px){:host{padding:.8125rem .9375rem}}.actions{display:flex}.actions button{margin-left:.875rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
27014
27129
  }
27015
27130
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageFooterComponent, decorators: [{
27016
27131
  type: Component,
@@ -27123,7 +27238,7 @@ class QdPageInfoBannerComponent {
27123
27238
  this.config?.link?.handler();
27124
27239
  }
27125
27240
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageInfoBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
27126
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageInfoBannerComponent, isStandalone: false, selector: "qd-page-info-banner", inputs: { config: "config" }, host: { properties: { "attr.class": "this.typeClassName" } }, ngImport: i0, template: "<qd-icon [icon]=\"this.getIcon()\" class=\"icon\"></qd-icon>\n\n<div class=\"title\" *ngIf=\"config?.title\">{{ config.title.i18n | translate }}</div>\n<div class=\"message\">\n <span>{{ config?.i18n | translate }}</span>\n <a class=\"link\" *ngIf=\"config?.link\" (click)=\"handleLinkClick()\">{{ config.link.i18n | translate }}</a>\n</div>\n", styles: [":host{position:relative;display:block;width:100%;padding:1rem 2rem .5rem 2.75rem;border-width:.0625rem;border-style:solid;border-left-width:.25rem;margin-bottom:.5rem;background:#fff;box-shadow:0 0 .625rem #979797;font-size:.875rem;gap:.5rem;line-height:1rem}:host.qd-page-info-banner-info{border-color:#069}:host.qd-page-info-banner-info .icon,:host.qd-page-info-banner-info .title{color:#069}:host.qd-page-info-banner-warning{border-color:#ff9b00}:host.qd-page-info-banner-warning .icon,:host.qd-page-info-banner-warning .title{color:#ff9b00}:host.qd-page-info-banner-critical{border-color:#c70023}:host.qd-page-info-banner-critical .icon,:host.qd-page-info-banner-critical .title{color:#c70023}:host.qd-page-info-banner-positive{border-color:#00813a}:host.qd-page-info-banner-positive .icon,:host.qd-page-info-banner-positive .title{color:#00813a}:host .icon{position:absolute;top:.9375rem;left:1rem;font-size:1.25rem}:host .title{margin-bottom:.375rem;font-weight:500}:host .message{margin-bottom:.25rem;white-space:pre-wrap}:host .link{margin-bottom:.375rem;margin-left:.375rem;color:#069;cursor:pointer}:host .link:hover{text-decoration:underline}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
27241
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageInfoBannerComponent, isStandalone: false, selector: "qd-page-info-banner", inputs: { config: "config" }, host: { properties: { "attr.class": "this.typeClassName" } }, ngImport: i0, template: "<qd-icon [icon]=\"this.getIcon()\" class=\"icon\"></qd-icon>\n\n<div class=\"title\" *ngIf=\"config?.title\">{{ config.title.i18n | translate }}</div>\n<div class=\"message\">\n <span>{{ config?.i18n | translate }}</span>\n <a class=\"link\" *ngIf=\"config?.link\" (click)=\"handleLinkClick()\">{{ config.link.i18n | translate }}</a>\n</div>\n", styles: [":host{position:relative;display:block;width:100%;padding:1rem 2rem .5rem 2.75rem;border-width:.0625rem;border-style:solid;border-left-width:.25rem;margin-bottom:.5rem;background:#fff;box-shadow:0 0 .625rem #979797;font-size:.875rem;gap:.5rem;line-height:1rem}:host.qd-page-info-banner-info{border-color:#069}:host.qd-page-info-banner-info .icon,:host.qd-page-info-banner-info .title{color:#069}:host.qd-page-info-banner-warning{border-color:#ff9b00}:host.qd-page-info-banner-warning .icon,:host.qd-page-info-banner-warning .title{color:#ff9b00}:host.qd-page-info-banner-critical{border-color:#c70023}:host.qd-page-info-banner-critical .icon,:host.qd-page-info-banner-critical .title{color:#c70023}:host.qd-page-info-banner-positive{border-color:#00813a}:host.qd-page-info-banner-positive .icon,:host.qd-page-info-banner-positive .title{color:#00813a}:host .icon{position:absolute;top:.9375rem;left:1rem;font-size:1.25rem}:host .title{margin-bottom:.375rem;font-weight:500}:host .message{margin-bottom:.25rem;white-space:pre-wrap}:host .link{margin-bottom:.375rem;margin-left:.375rem;color:#069;cursor:pointer}:host .link:hover{text-decoration:underline}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
27127
27242
  }
27128
27243
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageInfoBannerComponent, decorators: [{
27129
27244
  type: Component,
@@ -27213,13 +27328,13 @@ class QdContextSelectDialogComponent {
27213
27328
  }));
27214
27329
  });
27215
27330
  }
27216
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdContextSelectDialogComponent, deps: [{ token: i1$1.DialogRef }, { token: i1$2.TranslateService }, { token: QdSearchService }], target: i0.ɵɵFactoryTarget.Component });
27217
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdContextSelectDialogComponent, isStandalone: false, selector: "qd-context-select-dialog", providers: [QdSearchService], ngImport: i0, template: "<qd-dialog>\n <div class=\"search\" *ngIf=\"data.config.hasSearch\">\n <qd-search [configData]=\"searchConfig\"></qd-search>\n </div>\n <qd-table\n [data]=\"tableData\"\n [config]=\"tableConfig\"\n (selectedRowsOutput)=\"select($event)\"\n data-test-id=\"context-select-dialog-table\"\n ></qd-table>\n <qd-dialog-action>\n <button qdButton qdButtonGhost color=\"secondary\" (click)=\"cancel()\">\n {{ \"i18n.qd.context.dialog.cancelButtonLabel\" | translate }}\n </button>\n <button qdButton (click)=\"confirm()\" data-test-id=\"context-select-dialog-submit\">\n {{ \"i18n.qd.context.dialog.confirmButtonLabel\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", styles: [".search{display:flex;justify-content:end;padding-bottom:.9375rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "component", type: QdTableComponent, selector: "qd-table", inputs: ["config", "data", "data-test-id"], outputs: ["secondaryActionOutput", "selectedRowsOutput", "emptyStateActionOutput"] }, { kind: "component", type: QdSearchComponent, selector: "qd-search", inputs: ["configData"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
27331
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdContextSelectDialogComponent, deps: [{ token: i1$1.DialogRef }, { token: i1$3.TranslateService }, { token: QdSearchService }], target: i0.ɵɵFactoryTarget.Component });
27332
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdContextSelectDialogComponent, isStandalone: false, selector: "qd-context-select-dialog", providers: [QdSearchService], ngImport: i0, template: "<qd-dialog>\n <div class=\"search\" *ngIf=\"data.config.hasSearch\">\n <qd-search [configData]=\"searchConfig\"></qd-search>\n </div>\n <qd-table\n [data]=\"tableData\"\n [config]=\"tableConfig\"\n (selectedRowsOutput)=\"select($event)\"\n data-test-id=\"context-select-dialog-table\"\n ></qd-table>\n <qd-dialog-action>\n <button qdButton qdButtonGhost color=\"secondary\" (click)=\"cancel()\">\n {{ \"i18n.qd.context.dialog.cancelButtonLabel\" | translate }}\n </button>\n <button qdButton (click)=\"confirm()\" data-test-id=\"context-select-dialog-submit\">\n {{ \"i18n.qd.context.dialog.confirmButtonLabel\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", styles: [".search{display:flex;justify-content:end;padding-bottom:.9375rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "component", type: QdTableComponent, selector: "qd-table", inputs: ["config", "data", "data-test-id"], outputs: ["secondaryActionOutput", "selectedRowsOutput", "emptyStateActionOutput"] }, { kind: "component", type: QdSearchComponent, selector: "qd-search", inputs: ["configData"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
27218
27333
  }
27219
27334
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdContextSelectDialogComponent, decorators: [{
27220
27335
  type: Component,
27221
27336
  args: [{ selector: 'qd-context-select-dialog', providers: [QdSearchService], standalone: false, template: "<qd-dialog>\n <div class=\"search\" *ngIf=\"data.config.hasSearch\">\n <qd-search [configData]=\"searchConfig\"></qd-search>\n </div>\n <qd-table\n [data]=\"tableData\"\n [config]=\"tableConfig\"\n (selectedRowsOutput)=\"select($event)\"\n data-test-id=\"context-select-dialog-table\"\n ></qd-table>\n <qd-dialog-action>\n <button qdButton qdButtonGhost color=\"secondary\" (click)=\"cancel()\">\n {{ \"i18n.qd.context.dialog.cancelButtonLabel\" | translate }}\n </button>\n <button qdButton (click)=\"confirm()\" data-test-id=\"context-select-dialog-submit\">\n {{ \"i18n.qd.context.dialog.confirmButtonLabel\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", styles: [".search{display:flex;justify-content:end;padding-bottom:.9375rem}\n"] }]
27222
- }], ctorParameters: () => [{ type: i1$1.DialogRef }, { type: i1$2.TranslateService }, { type: QdSearchService }] });
27337
+ }], ctorParameters: () => [{ type: i1$1.DialogRef }, { type: i1$3.TranslateService }, { type: QdSearchService }] });
27223
27338
 
27224
27339
  class QdCriticalityFacetComponent {
27225
27340
  facet;
@@ -27354,7 +27469,7 @@ class QdStatusFacetComponent {
27354
27469
  return this.facet.options;
27355
27470
  }
27356
27471
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdStatusFacetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
27357
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdStatusFacetComponent, isStandalone: false, selector: "qd-status-facet", inputs: { facet: "facet", data: "data" }, ngImport: i0, template: "<qd-chip [state]=\"options.state[stringData]\">\n {{ options.i18ns ? (options.i18ns + \".\" + data[facet.name] | translate) : data[facet.name] }}\n</qd-chip>\n", styles: [":host{display:block;margin-top:-.3125rem}\n"], dependencies: [{ kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
27472
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdStatusFacetComponent, isStandalone: false, selector: "qd-status-facet", inputs: { facet: "facet", data: "data" }, ngImport: i0, template: "<qd-chip [state]=\"options.state[stringData]\">\n {{ options.i18ns ? (options.i18ns + \".\" + data[facet.name] | translate) : data[facet.name] }}\n</qd-chip>\n", styles: [":host{display:block;margin-top:-.3125rem}\n"], dependencies: [{ kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
27358
27473
  }
27359
27474
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdStatusFacetComponent, decorators: [{
27360
27475
  type: Component,
@@ -27372,7 +27487,7 @@ class QdValueFacetComponent {
27372
27487
  return this.facet.options;
27373
27488
  }
27374
27489
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdValueFacetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
27375
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdValueFacetComponent, isStandalone: false, selector: "qd-value-facet", inputs: { facet: "facet", data: "data" }, ngImport: i0, template: "{{ options.i18ns ? (options.i18ns + \".\" + data[facet.name] | translate) : data[facet.name] }}\n", styles: [":host{display:block;margin-top:-.125rem;font-weight:500}\n"], dependencies: [{ kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
27490
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdValueFacetComponent, isStandalone: false, selector: "qd-value-facet", inputs: { facet: "facet", data: "data" }, ngImport: i0, template: "{{ options.i18ns ? (options.i18ns + \".\" + data[facet.name] | translate) : data[facet.name] }}\n", styles: [":host{display:block;margin-top:-.125rem;font-weight:500}\n"], dependencies: [{ kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
27376
27491
  }
27377
27492
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdValueFacetComponent, decorators: [{
27378
27493
  type: Component,
@@ -27690,12 +27805,12 @@ class QdResolverTriggerService {
27690
27805
  return false;
27691
27806
  return segments1.every((segment, index) => segment.path === segments2[index].path && this.shallowEqual(segment.parameters, segments2[index].parameters));
27692
27807
  }
27693
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdResolverTriggerService, deps: [{ token: i1$3.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
27808
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdResolverTriggerService, deps: [{ token: i1$2.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
27694
27809
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdResolverTriggerService });
27695
27810
  }
27696
27811
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdResolverTriggerService, decorators: [{
27697
27812
  type: Injectable
27698
- }], ctorParameters: () => [{ type: i1$3.ActivatedRoute, decorators: [{
27813
+ }], ctorParameters: () => [{ type: i1$2.ActivatedRoute, decorators: [{
27699
27814
  type: Optional
27700
27815
  }] }] });
27701
27816
 
@@ -27949,7 +28064,7 @@ class QdPageObjectHeaderComponent {
27949
28064
  });
27950
28065
  }
27951
28066
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageObjectHeaderComponent, deps: [{ token: QD_PAGE_OBJECT_RESOLVER_TOKEN, optional: true }, { token: QdFormGroupManagerService, optional: true }, { token: QdDialogComponent, optional: true }, { token: QdDialogService }, { token: QdContextService }, { token: QdResolverTriggerService }, { token: QdPageStoreService }], target: i0.ɵɵFactoryTarget.Component });
27952
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageObjectHeaderComponent, isStandalone: false, selector: "qd-page-object-header", inputs: { config: "config", hasNavigation: "hasNavigation", testId: ["data-test-id", "testId"] }, host: { listeners: { "click": "toggleFacets()" }, properties: { "style.borderBottom": "borderBottomStyle", "class.in-dialog": "this.isInDialog" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"loading-overlay\" *ngIf=\"isLoading$ | async\"><qd-spinner></qd-spinner></div>\n\n<div class=\"object-header-top\">\n <header class=\"object-header-title\">{{ config.title.i18n | translate }}</header>\n <div class=\"object-header-toolbar\">\n <button class=\"button-icon\" data-test-id=\"archive-button\">\n <qd-icon\n *ngIf=\"showArchive$ | async\"\n (click)=\"archiveButton?.handler()\"\n class=\"header-action-icon\"\n [icon]=\"'resultNew'\"\n ></qd-icon>\n </button>\n\n <button class=\"button-icon\" data-test-id=\"delete-button\">\n <qd-icon\n class=\"header-action-icon\"\n *ngIf=\"showDelete$ | async\"\n (click)=\"deleteButton?.handler()\"\n [icon]=\"'trash'\"\n ></qd-icon>\n </button>\n\n <button *ngIf=\"showEdit$ | async\" qdButton (click)=\"edit()\" data-test-id=\"edit-button\">\n {{ editButton?.label?.i18n || \"i18n.qd.page.header.edit\" | translate }}\n </button>\n\n <button *ngIf=\"showCancel$ | async\" qdButton qdButtonGhost (click)=\"cancel()\" data-test-id=\"cancel-button\">\n {{ cancelButton.label?.i18n || \"i18n.qd.page.header.cancel\" | translate }}\n </button>\n\n <button\n *ngIf=\"showSave$ | async\"\n qdButton\n (click)=\"save()\"\n data-test-id=\"save-button\"\n [disabled]=\"($canSave | async) === false\"\n >\n {{ saveButton.label?.i18n || \"i18n.qd.page.header.save\" | translate }}\n </button>\n\n <ng-container *ngIf=\"customActions$ | async as customActions\">\n <ng-container *ngIf=\"!adaptiveMode; else adaptive\">\n <button\n [qdMenuButton]=\"customActions\"\n [autoSize]=\"false\"\n [data-test-id]=\"'page-'\"\n *ngIf=\"customActions.actions.length > 1; else singleButton\"\n data-test-id=\"custom-button\"\n >\n {{ config?.customActionsLabel?.i18n || \"i18n.qd.page.header.actions\" | translate }}\n </button>\n\n <ng-template #singleButton>\n <ng-container *ngIf=\"(customActions$ | async).actions[0] as singleAction\">\n <button\n qdButton\n *ngIf=\"singleAction.handler && !singleAction.isHidden\"\n [disabled]=\"singleAction.isDisabled\"\n (click)=\"singleAction.handler()\"\n data-test-id=\"custom-button\"\n >\n {{ singleAction.label?.i18n | translate }}\n </button>\n </ng-container>\n </ng-template>\n </ng-container>\n\n <ng-template #adaptive>\n <button\n *ngIf=\"(customActions$ | async)?.actions.length >= 1\"\n type=\"button\"\n class=\"adaptive-menu-button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n [qdPopoverMinWidth]=\"160\"\n >\n <qd-icon icon=\"overflowMenuVertical\"></qd-icon>\n </button>\n\n <ng-template #menu>\n <button\n *ngFor=\"let action of customActions.actions; let i = index\"\n class=\"adaptive-menu-entry\"\n type=\"button\"\n [disabled]=\"action.isDisabled\"\n (click)=\"action.handler()\"\n >\n {{ action.label.i18n | translate }}\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n </div>\n</div>\n\n<div class=\"object-header-facets\" [ngClass]=\"{ amongThemselves: adaptiveMode && !facetsCollapsed }\">\n <ng-container *ngIf=\"pageObjectData$ | async as data\">\n <div\n class=\"object-header-facet\"\n *ngFor=\"let facet of headerFacets | slice : 0 : (adaptiveMode && facetsCollapsed ? 2 : headerFacets?.length ?? 0)\"\n [attr.data-test-id]=\"testId + '-facet-' + facet.name\"\n >\n <div class=\"facet-label\">{{ facet.label.i18n | translate }}</div>\n <qd-dynamic-facet class=\"dynamic-facet\" [facet]=\"facet\" [data]=\"data\"></qd-dynamic-facet>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!config.hideContexts && contexts$ | async as contexts\">\n <div\n class=\"object-header-facet\"\n *ngFor=\"\n let context of contexts\n | slice : 0 : (adaptiveMode && facetsCollapsed ? 2 - (headerFacets?.length ?? 0) : contexts.length);\n let index = index;\n let first = first\n \"\n [ngClass]=\"{ hasDivider: headerFacets && first }\"\n >\n <div class=\"facet-label\">{{ context.label | translate }}</div>\n\n <span *ngIf=\"context.value.length === 0\" class=\"no-selected-context\">{{\n \"i18n.qd.page.context.noSelectionPlaceholder\" | translate\n }}</span>\n\n <span *ngIf=\"context.value.length !== 0\">\n <qd-chip state=\"none\" [close]=\"isContextSelectable\" (closeClickEmitter)=\"clearContext(context.context)\">\n <ng-container *ngFor=\"let val of context.value; let last = last\">\n {{ val.label.i18n | translate }}<span *ngIf=\"!last\">, </span>\n </ng-container>\n </qd-chip>\n </span>\n\n <span *ngIf=\"isContextSelectable && (!facetsCollapsed || !adaptiveMode)\" class=\"select-button\">\n <button\n qdButton\n qdButtonLink\n type=\"button\"\n (click)=\"changeContext(context.context, context.selection, $event)\"\n [data-test-id]=\"'object-header-select-context-' + context.context.id\"\n >\n {{\n context.value.length !== 0\n ? (\"i18n.qd.page.context.button.change\" | translate)\n : (\"i18n.qd.page.context.button.select\" | translate)\n }}\n </button>\n </span>\n </div>\n </ng-container>\n\n <span class=\"facets-toggler\" *ngIf=\"adaptiveMode && headerFacets.length + (contexts$ | async).length > 2\">\n <span *ngIf=\"facetsCollapsed\">+{{ headerFacets.length + (contexts$ | async).length - 2 }}</span>\n <button qdIconButton>\n <qd-icon [icon]=\"facetsCollapsed ? 'ctrlDown' : 'ctrlTop'\"></qd-icon>\n </button>\n </span>\n</div>\n", styles: [":host{display:flex;flex-direction:column;justify-content:space-between;padding:1.25rem;border-bottom:.125rem solid rgb(213,213,213);background:#fff;gap:1.25rem}@media (max-width: 599.98px){:host{padding:1.25rem .9375rem}}:host .object-header-top{display:flex;align-items:flex-start;justify-content:space-between}:host .object-header-top .object-header-title{padding:2px;color:#171717;font-size:1.3125rem;font-weight:500}:host .object-header-top .object-header-toolbar{display:flex;align-items:center;column-gap:.5rem}:host .object-header-top .object-header-toolbar .button-icon{background:none}:host .object-header-top .object-header-toolbar .button-icon+.button-icon{margin-left:-.5rem}:host .object-header-top .object-header-toolbar .header-action-icon{color:#14516f;cursor:pointer;font-size:1.5rem}:host.in-dialog .object-header-toolbar{padding-right:2.5rem}:host .object-header-facets{position:relative;display:flex;flex-wrap:wrap;font-size:1.125rem;gap:1.25rem}:host .object-header-facets .object-header-facet{display:flex;min-width:3.75rem;flex-direction:column}:host .object-header-facets .object-header-facet.hasDivider{padding-left:1.25rem;border-left:.0625rem solid rgb(117,117,117)}:host .object-header-facets .object-header-facet .facet-label{display:block;margin-bottom:0;color:#757575;font-size:.875rem;padding-bottom:.375rem;font-weight:500}:host .object-header-facets .facets-toggler{position:absolute;top:0;right:0;display:flex;align-items:center;padding-right:.3125rem;font-size:.625rem;line-height:.625rem}:host .object-header-facets.amongThemselves{display:grid}:host .object-header-facets.amongThemselves .object-header-facet.hasDivider{padding-left:0;border-top:.0625rem solid rgb(117,117,117);border-left:none}.loading-overlay{position:absolute;z-index:10000;inset:0;display:flex;align-items:center;justify-content:center;background-color:#0003}.no-selected-context{height:1.625rem;color:#979797;font-size:.875rem;line-height:1.625rem}.select-button{margin-top:.25rem}.adaptive-menu-button{display:flex;background:unset;color:#454545;font-size:2rem}.adaptive-menu-button:hover,.adaptive-menu-button:focus{color:#000}.adaptive-menu-entry{display:block;overflow:hidden;width:100%;min-height:2.25rem;padding:0 1rem;background:#fff0;text-align:left;text-overflow:ellipsis;white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "directive", type: QdButtonLinkDirective, selector: "button[qdButtonLink], a[qdButtonLink], button[qd-button-link]" }, { kind: "component", type: QdIconButtonComponent, selector: "button[qdIconButton], a[qdIconButton], button[qd-icon-button]", inputs: ["color", "data-test-id"] }, { kind: "component", type: QdMenuButtonComponent, selector: "button[qdMenuButton], a[qdMenuButton]", inputs: ["qdMenuButton", "data-test-id", "autoSize"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdSpinnerComponent, selector: "qd-spinner" }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "component", type: QdDynamicFacetComponent, selector: "qd-dynamic-facet", inputs: ["facet", "data"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
28067
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageObjectHeaderComponent, isStandalone: false, selector: "qd-page-object-header", inputs: { config: "config", hasNavigation: "hasNavigation", testId: ["data-test-id", "testId"] }, host: { listeners: { "click": "toggleFacets()" }, properties: { "style.borderBottom": "borderBottomStyle", "class.in-dialog": "this.isInDialog" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"loading-overlay\" *ngIf=\"isLoading$ | async\"><qd-spinner></qd-spinner></div>\n\n<div class=\"object-header-top\">\n <header class=\"object-header-title\">{{ config.title.i18n | translate }}</header>\n <div class=\"object-header-toolbar\">\n <button class=\"button-icon\" data-test-id=\"archive-button\">\n <qd-icon\n *ngIf=\"showArchive$ | async\"\n (click)=\"archiveButton?.handler()\"\n class=\"header-action-icon\"\n [icon]=\"'resultNew'\"\n ></qd-icon>\n </button>\n\n <button class=\"button-icon\" data-test-id=\"delete-button\">\n <qd-icon\n class=\"header-action-icon\"\n *ngIf=\"showDelete$ | async\"\n (click)=\"deleteButton?.handler()\"\n [icon]=\"'trash'\"\n ></qd-icon>\n </button>\n\n <button *ngIf=\"showEdit$ | async\" qdButton (click)=\"edit()\" data-test-id=\"edit-button\">\n {{ editButton?.label?.i18n || \"i18n.qd.page.header.edit\" | translate }}\n </button>\n\n <button *ngIf=\"showCancel$ | async\" qdButton qdButtonGhost (click)=\"cancel()\" data-test-id=\"cancel-button\">\n {{ cancelButton.label?.i18n || \"i18n.qd.page.header.cancel\" | translate }}\n </button>\n\n <button\n *ngIf=\"showSave$ | async\"\n qdButton\n (click)=\"save()\"\n data-test-id=\"save-button\"\n [disabled]=\"($canSave | async) === false\"\n >\n {{ saveButton.label?.i18n || \"i18n.qd.page.header.save\" | translate }}\n </button>\n\n <ng-container *ngIf=\"customActions$ | async as customActions\">\n <ng-container *ngIf=\"!adaptiveMode; else adaptive\">\n <button\n [qdMenuButton]=\"customActions\"\n [autoSize]=\"false\"\n [data-test-id]=\"'page-'\"\n *ngIf=\"customActions.actions.length > 1; else singleButton\"\n data-test-id=\"custom-button\"\n >\n {{ config?.customActionsLabel?.i18n || \"i18n.qd.page.header.actions\" | translate }}\n </button>\n\n <ng-template #singleButton>\n <ng-container *ngIf=\"(customActions$ | async).actions[0] as singleAction\">\n <button\n qdButton\n *ngIf=\"singleAction.handler && !singleAction.isHidden\"\n [disabled]=\"singleAction.isDisabled\"\n (click)=\"singleAction.handler()\"\n data-test-id=\"custom-button\"\n >\n {{ singleAction.label?.i18n | translate }}\n </button>\n </ng-container>\n </ng-template>\n </ng-container>\n\n <ng-template #adaptive>\n <button\n *ngIf=\"(customActions$ | async)?.actions.length >= 1\"\n type=\"button\"\n class=\"adaptive-menu-button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n [qdPopoverMinWidth]=\"160\"\n >\n <qd-icon icon=\"overflowMenuVertical\"></qd-icon>\n </button>\n\n <ng-template #menu>\n <button\n *ngFor=\"let action of customActions.actions; let i = index\"\n class=\"adaptive-menu-entry\"\n type=\"button\"\n [disabled]=\"action.isDisabled\"\n (click)=\"action.handler()\"\n >\n {{ action.label.i18n | translate }}\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n </div>\n</div>\n\n<div class=\"object-header-facets\" [ngClass]=\"{ amongThemselves: adaptiveMode && !facetsCollapsed }\">\n <ng-container *ngIf=\"pageObjectData$ | async as data\">\n <div\n class=\"object-header-facet\"\n *ngFor=\"let facet of headerFacets | slice : 0 : (adaptiveMode && facetsCollapsed ? 2 : headerFacets?.length ?? 0)\"\n [attr.data-test-id]=\"testId + '-facet-' + facet.name\"\n >\n <div class=\"facet-label\">{{ facet.label.i18n | translate }}</div>\n <qd-dynamic-facet class=\"dynamic-facet\" [facet]=\"facet\" [data]=\"data\"></qd-dynamic-facet>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!config.hideContexts && contexts$ | async as contexts\">\n <div\n class=\"object-header-facet\"\n *ngFor=\"\n let context of contexts\n | slice : 0 : (adaptiveMode && facetsCollapsed ? 2 - (headerFacets?.length ?? 0) : contexts.length);\n let index = index;\n let first = first\n \"\n [ngClass]=\"{ hasDivider: headerFacets && first }\"\n >\n <div class=\"facet-label\">{{ context.label | translate }}</div>\n\n <span *ngIf=\"context.value.length === 0\" class=\"no-selected-context\">{{\n \"i18n.qd.page.context.noSelectionPlaceholder\" | translate\n }}</span>\n\n <span *ngIf=\"context.value.length !== 0\">\n <qd-chip state=\"none\" [close]=\"isContextSelectable\" (closeClickEmitter)=\"clearContext(context.context)\">\n <ng-container *ngFor=\"let val of context.value; let last = last\">\n {{ val.label.i18n | translate }}<span *ngIf=\"!last\">, </span>\n </ng-container>\n </qd-chip>\n </span>\n\n <span *ngIf=\"isContextSelectable && (!facetsCollapsed || !adaptiveMode)\" class=\"select-button\">\n <button\n qdButton\n qdButtonLink\n type=\"button\"\n (click)=\"changeContext(context.context, context.selection, $event)\"\n [data-test-id]=\"'object-header-select-context-' + context.context.id\"\n >\n {{\n context.value.length !== 0\n ? (\"i18n.qd.page.context.button.change\" | translate)\n : (\"i18n.qd.page.context.button.select\" | translate)\n }}\n </button>\n </span>\n </div>\n </ng-container>\n\n <span class=\"facets-toggler\" *ngIf=\"adaptiveMode && headerFacets.length + (contexts$ | async).length > 2\">\n <span *ngIf=\"facetsCollapsed\">+{{ headerFacets.length + (contexts$ | async).length - 2 }}</span>\n <button qdIconButton>\n <qd-icon [icon]=\"facetsCollapsed ? 'ctrlDown' : 'ctrlTop'\"></qd-icon>\n </button>\n </span>\n</div>\n", styles: [":host{display:flex;flex-direction:column;justify-content:space-between;padding:1.25rem;border-bottom:.125rem solid rgb(213,213,213);background:#fff;gap:1.25rem}@media (max-width: 599.98px){:host{padding:1.25rem .9375rem}}:host .object-header-top{display:flex;align-items:flex-start;justify-content:space-between}:host .object-header-top .object-header-title{padding:2px;color:#171717;font-size:1.3125rem;font-weight:500}:host .object-header-top .object-header-toolbar{display:flex;align-items:center;column-gap:.5rem}:host .object-header-top .object-header-toolbar .button-icon{background:none}:host .object-header-top .object-header-toolbar .button-icon+.button-icon{margin-left:-.5rem}:host .object-header-top .object-header-toolbar .header-action-icon{color:#14516f;cursor:pointer;font-size:1.5rem}:host.in-dialog .object-header-toolbar{padding-right:2.5rem}:host .object-header-facets{position:relative;display:flex;flex-wrap:wrap;font-size:1.125rem;gap:1.25rem}:host .object-header-facets .object-header-facet{display:flex;min-width:3.75rem;flex-direction:column}:host .object-header-facets .object-header-facet.hasDivider{padding-left:1.25rem;border-left:.0625rem solid rgb(117,117,117)}:host .object-header-facets .object-header-facet .facet-label{display:block;margin-bottom:0;color:#757575;font-size:.875rem;padding-bottom:.375rem;font-weight:500}:host .object-header-facets .facets-toggler{position:absolute;top:0;right:0;display:flex;align-items:center;padding-right:.3125rem;font-size:.625rem;line-height:.625rem}:host .object-header-facets.amongThemselves{display:grid}:host .object-header-facets.amongThemselves .object-header-facet.hasDivider{padding-left:0;border-top:.0625rem solid rgb(117,117,117);border-left:none}.loading-overlay{position:absolute;z-index:10000;inset:0;display:flex;align-items:center;justify-content:center;background-color:#0003}.no-selected-context{height:1.625rem;color:#979797;font-size:.875rem;line-height:1.625rem}.select-button{margin-top:.25rem}.adaptive-menu-button{display:flex;background:unset;color:#454545;font-size:2rem}.adaptive-menu-button:hover,.adaptive-menu-button:focus{color:#000}.adaptive-menu-entry{display:block;overflow:hidden;width:100%;min-height:2.25rem;padding:0 1rem;background:#fff0;text-align:left;text-overflow:ellipsis;white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "directive", type: QdButtonLinkDirective, selector: "button[qdButtonLink], a[qdButtonLink], button[qd-button-link]" }, { kind: "component", type: QdIconButtonComponent, selector: "button[qdIconButton], a[qdIconButton], button[qd-icon-button]", inputs: ["color", "data-test-id"] }, { kind: "component", type: QdMenuButtonComponent, selector: "button[qdMenuButton], a[qdMenuButton]", inputs: ["qdMenuButton", "data-test-id", "autoSize"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdSpinnerComponent, selector: "qd-spinner" }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "component", type: QdDynamicFacetComponent, selector: "qd-dynamic-facet", inputs: ["facet", "data"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
27953
28068
  }
27954
28069
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageObjectHeaderComponent, decorators: [{
27955
28070
  type: Component,
@@ -28064,7 +28179,7 @@ class QdPageStepperCancelDialogComponent {
28064
28179
  </button>
28065
28180
  <button qdButton (click)="close(true)">{{ 'i18n.qd.stepper.cancel.dialog.delete' | translate }}</button>
28066
28181
  </qd-dialog-action>
28067
- </qd-dialog> `, isInline: true, dependencies: [{ kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "component", type: QdTextSectionComponent, selector: "qd-text-section" }, { kind: "component", type: QdTextSectionParagraphComponent, selector: "qd-text-section-paragraph" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
28182
+ </qd-dialog> `, isInline: true, dependencies: [{ kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "component", type: QdTextSectionComponent, selector: "qd-text-section" }, { kind: "component", type: QdTextSectionParagraphComponent, selector: "qd-text-section-paragraph" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
28068
28183
  }
28069
28184
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageStepperCancelDialogComponent, decorators: [{
28070
28185
  type: Component,
@@ -28381,8 +28496,8 @@ class QdPageStepperComponent extends CdkStepper {
28381
28496
  blockCdkInput(inputName) {
28382
28497
  throw new Error(`QD-UI | QdPageStepperComponent - The ${inputName} attribute is not allowed. Please use QdPageStepperConfig instead.`);
28383
28498
  }
28384
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageStepperComponent, deps: [{ token: i1$8.Directionality, optional: true }, { token: QdPageFooterService, optional: true }, { token: QD_PAGE_STEP_RESOLVER_TOKEN, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$3.Router }, { token: QdDialogService }, { token: QdPageStoreService }], target: i0.ɵɵFactoryTarget.Component });
28385
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageStepperComponent, isStandalone: true, selector: "qd-page-stepper", inputs: { config: "config", testId: ["data-test-id", "testId"] }, outputs: { submitted: "submitted" }, host: { properties: { "class.standalone": "!footerService" }, classAttribute: "qd-stepper" }, providers: [{ provide: CdkStepper, useExisting: QdPageStepperComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"qd-stepper-items-container\" *ngIf=\"steps.length > 1\">\n <qd-page-step-header\n *ngFor=\"let step of steps; let i = index\"\n (click)=\"handleClickHeader(step, i)\"\n [id]=\"_getStepLabelId(i)\"\n [ngClass]=\"'qd-step'\"\n [index]=\"i\"\n [state]=\"_getIndicatorType(i, step.state)\"\n [label]=\"step.config.label.i18n | translate\"\n [selected]=\"selectedIndex === i\"\n [active]=\"step.completed || selectedIndex === i || !linear\"\n [optional]=\"step.optional\"\n [locked]=\"!step.editable && i < selectedIndex\"\n >\n </qd-page-step-header>\n</div>\n\n<div class=\"stepper-content\">\n <ng-container [ngTemplateOutlet]=\"selected?.content\"></ng-container>\n</div>\n\n<div class=\"qd-stepper-action-area\" *ngIf=\"!footerService\">\n <button qdButton qdButtonGhost (click)=\"cancel()\" [data-test-id]=\"testId + '-cancel'\">\n {{ config?.cancel?.i18n || \"i18n.qd.stepper.cancel\" | translate }}\n </button>\n\n <button\n *ngIf=\"showPreviousButton(selectedIndex)\"\n qdButton\n qdButtonGhost\n (click)=\"previousStep()\"\n [data-test-id]=\"testId + '-previous'\"\n >\n {{ config?.previous?.i18n || \"i18n.qd.stepper.previous\" | translate }}\n </button>\n\n <button\n *ngIf=\"showNextButton(selectedIndex)\"\n qdButton\n [disabled]=\"(selectedStepValid$ | async) === false\"\n (click)=\"nextStep()\"\n [data-test-id]=\"testId + '-next'\"\n >\n {{ config?.next?.i18n || \"i18n.qd.stepper.next\" | translate }}\n </button>\n\n <button\n *ngIf=\"showSubmitButton(selectedIndex)\"\n qdButton\n (click)=\"submit()\"\n [disabled]=\"(allStepsValid$ | async) === false\"\n [data-test-id]=\"testId + '-submit'\"\n >\n {{ config?.submit?.i18n || \"i18n.qd.stepper.submit\" | translate }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column}:host.standalone{height:calc(100% - 50px)}:host .qd-stepper-items-container{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;padding:0 1.25rem;border-bottom:.125rem solid rgb(213,213,213);background-color:#fff;gap:0 .625rem}@media (max-width: 599.98px){:host .qd-stepper-items-container{padding:0 .9375rem}}:host .stepper-content{flex:1 1 auto}:host .qd-stepper-action-area{display:flex;width:100%;height:3.125rem;justify-content:flex-end}:host .qd-stepper-action-area button{margin-right:1.25rem}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: QdPageStepHeaderComponent, selector: "qd-page-step-header", inputs: ["state", "label", "index", "selected", "active", "optional", "locked"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: QdButtonModule }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
28499
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageStepperComponent, deps: [{ token: i1$8.Directionality, optional: true }, { token: QdPageFooterService, optional: true }, { token: QD_PAGE_STEP_RESOLVER_TOKEN, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$2.Router }, { token: QdDialogService }, { token: QdPageStoreService }], target: i0.ɵɵFactoryTarget.Component });
28500
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageStepperComponent, isStandalone: true, selector: "qd-page-stepper", inputs: { config: "config", testId: ["data-test-id", "testId"] }, outputs: { submitted: "submitted" }, host: { properties: { "class.standalone": "!footerService" }, classAttribute: "qd-stepper" }, providers: [{ provide: CdkStepper, useExisting: QdPageStepperComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"qd-stepper-items-container\" *ngIf=\"steps.length > 1\">\n <qd-page-step-header\n *ngFor=\"let step of steps; let i = index\"\n (click)=\"handleClickHeader(step, i)\"\n [id]=\"_getStepLabelId(i)\"\n [ngClass]=\"'qd-step'\"\n [index]=\"i\"\n [state]=\"_getIndicatorType(i, step.state)\"\n [label]=\"step.config.label.i18n | translate\"\n [selected]=\"selectedIndex === i\"\n [active]=\"step.completed || selectedIndex === i || !linear\"\n [optional]=\"step.optional\"\n [locked]=\"!step.editable && i < selectedIndex\"\n >\n </qd-page-step-header>\n</div>\n\n<div class=\"stepper-content\">\n <ng-container [ngTemplateOutlet]=\"selected?.content\"></ng-container>\n</div>\n\n<div class=\"qd-stepper-action-area\" *ngIf=\"!footerService\">\n <button qdButton qdButtonGhost (click)=\"cancel()\" [data-test-id]=\"testId + '-cancel'\">\n {{ config?.cancel?.i18n || \"i18n.qd.stepper.cancel\" | translate }}\n </button>\n\n <button\n *ngIf=\"showPreviousButton(selectedIndex)\"\n qdButton\n qdButtonGhost\n (click)=\"previousStep()\"\n [data-test-id]=\"testId + '-previous'\"\n >\n {{ config?.previous?.i18n || \"i18n.qd.stepper.previous\" | translate }}\n </button>\n\n <button\n *ngIf=\"showNextButton(selectedIndex)\"\n qdButton\n [disabled]=\"(selectedStepValid$ | async) === false\"\n (click)=\"nextStep()\"\n [data-test-id]=\"testId + '-next'\"\n >\n {{ config?.next?.i18n || \"i18n.qd.stepper.next\" | translate }}\n </button>\n\n <button\n *ngIf=\"showSubmitButton(selectedIndex)\"\n qdButton\n (click)=\"submit()\"\n [disabled]=\"(allStepsValid$ | async) === false\"\n [data-test-id]=\"testId + '-submit'\"\n >\n {{ config?.submit?.i18n || \"i18n.qd.stepper.submit\" | translate }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column}:host.standalone{height:calc(100% - 50px)}:host .qd-stepper-items-container{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;padding:0 1.25rem;border-bottom:.125rem solid rgb(213,213,213);background-color:#fff;gap:0 .625rem}@media (max-width: 599.98px){:host .qd-stepper-items-container{padding:0 .9375rem}}:host .stepper-content{flex:1 1 auto}:host .qd-stepper-action-area{display:flex;width:100%;height:3.125rem;justify-content:flex-end}:host .qd-stepper-action-area button{margin-right:1.25rem}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: QdPageStepHeaderComponent, selector: "qd-page-step-header", inputs: ["state", "label", "index", "selected", "active", "optional", "locked"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: QdButtonModule }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
28386
28501
  }
28387
28502
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageStepperComponent, decorators: [{
28388
28503
  type: Component,
@@ -28405,7 +28520,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
28405
28520
  }, {
28406
28521
  type: Inject,
28407
28522
  args: [QD_PAGE_STEP_RESOLVER_TOKEN]
28408
- }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1$3.Router }, { type: QdDialogService }, { type: QdPageStoreService }], propDecorators: { config: [{
28523
+ }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1$2.Router }, { type: QdDialogService }, { type: QdPageStoreService }], propDecorators: { config: [{
28409
28524
  type: Input
28410
28525
  }], testId: [{
28411
28526
  type: Input,
@@ -28909,8 +29024,8 @@ class QdPageTabsComponent extends CdkStepper {
28909
29024
  });
28910
29025
  });
28911
29026
  }
28912
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageTabsComponent, deps: [{ token: QdPageFooterService, optional: true }, { token: i1$8.Directionality, optional: true }, { token: QdPageStoreService }, { token: i1$3.Router }, { token: i1$3.ActivatedRoute, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
28913
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageTabsComponent, isStandalone: true, selector: "qd-page-tabs", inputs: { config: "config", testId: ["data-test-id", "testId"] }, outputs: { tabSelection: "tabSelection" }, host: { properties: { "class.standalone": "!footerService" }, classAttribute: "qd-tabs" }, providers: [{ provide: CdkStepper, useExisting: QdPageTabsComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"qd-tabs-items-container\" [ngClass]=\"{ scrollable: config?.scrollabe }\">\n <qd-page-tab-header\n *ngFor=\"let tab of tabs; let i = index\"\n (click)=\"selectTab(tab)\"\n [id]=\"_getTabLabelId(i)\"\n [index]=\"i\"\n [state]=\"_getIndicatorType(i, tab.state)\"\n [label]=\"tab.config.label.i18n | translate\"\n [counters]=\"tab.config.counters\"\n [isSelected]=\"selectedIndex === i\"\n [isDisabled]=\"tab.config?.isDisabled\"\n [data-test-id]=\"testId + '-header' + '-' + i\"\n >\n </qd-page-tab-header>\n</div>\n\n<div class=\"tabs-content\">\n <ng-container *ngIf=\"!selected?.config?.isDisabled\" [ngTemplateOutlet]=\"selected?.content\"></ng-container>\n</div>\n\n<div class=\"qd-tabs-action-area\" *ngIf=\"isSubmitButtonShown()\">\n <button qdButton (click)=\"save()\" [disabled]=\"isSubmitButtonDisabled()\" [data-test-id]=\"testId + '-submit'\">\n {{ config?.submitButton?.i18n || \"i18n.qd.tabs.button.submit\" | translate }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column}:host.standalone{height:calc(100% - 50px)}:host .qd-tabs-items-container{display:flex;width:100%;flex-direction:row;flex-wrap:wrap;padding:0 1.25rem;border-bottom:.125rem solid rgb(213,213,213);background-color:#fff;gap:0 .9375rem}@media (max-width: 599.98px){:host .qd-tabs-items-container{padding:0 .9375rem}}@media (max-width: 1279.98px){:host .qd-tabs-items-container.scrollable{flex-wrap:nowrap;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none}}:host .tabs-content{flex:1 1 auto}:host .qd-tabs-action-area{display:flex;width:100%;height:50px;justify-content:flex-end}:host .qd-tabs-action-area button{margin-right:1.25rem}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: QdPageTabHeaderComponent, selector: "qd-page-tab-header", inputs: ["state", "label", "counters", "index", "isSelected", "isDisabled", "data-test-id"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: QdButtonModule }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
29027
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageTabsComponent, deps: [{ token: QdPageFooterService, optional: true }, { token: i1$8.Directionality, optional: true }, { token: QdPageStoreService }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
29028
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageTabsComponent, isStandalone: true, selector: "qd-page-tabs", inputs: { config: "config", testId: ["data-test-id", "testId"] }, outputs: { tabSelection: "tabSelection" }, host: { properties: { "class.standalone": "!footerService" }, classAttribute: "qd-tabs" }, providers: [{ provide: CdkStepper, useExisting: QdPageTabsComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"qd-tabs-items-container\" [ngClass]=\"{ scrollable: config?.scrollabe }\">\n <qd-page-tab-header\n *ngFor=\"let tab of tabs; let i = index\"\n (click)=\"selectTab(tab)\"\n [id]=\"_getTabLabelId(i)\"\n [index]=\"i\"\n [state]=\"_getIndicatorType(i, tab.state)\"\n [label]=\"tab.config.label.i18n | translate\"\n [counters]=\"tab.config.counters\"\n [isSelected]=\"selectedIndex === i\"\n [isDisabled]=\"tab.config?.isDisabled\"\n [data-test-id]=\"testId + '-header' + '-' + i\"\n >\n </qd-page-tab-header>\n</div>\n\n<div class=\"tabs-content\">\n <ng-container *ngIf=\"!selected?.config?.isDisabled\" [ngTemplateOutlet]=\"selected?.content\"></ng-container>\n</div>\n\n<div class=\"qd-tabs-action-area\" *ngIf=\"isSubmitButtonShown()\">\n <button qdButton (click)=\"save()\" [disabled]=\"isSubmitButtonDisabled()\" [data-test-id]=\"testId + '-submit'\">\n {{ config?.submitButton?.i18n || \"i18n.qd.tabs.button.submit\" | translate }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column}:host.standalone{height:calc(100% - 50px)}:host .qd-tabs-items-container{display:flex;width:100%;flex-direction:row;flex-wrap:wrap;padding:0 1.25rem;border-bottom:.125rem solid rgb(213,213,213);background-color:#fff;gap:0 .9375rem}@media (max-width: 599.98px){:host .qd-tabs-items-container{padding:0 .9375rem}}@media (max-width: 1279.98px){:host .qd-tabs-items-container.scrollable{flex-wrap:nowrap;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none}}:host .tabs-content{flex:1 1 auto}:host .qd-tabs-action-area{display:flex;width:100%;height:50px;justify-content:flex-end}:host .qd-tabs-action-area button{margin-right:1.25rem}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: QdPageTabHeaderComponent, selector: "qd-page-tab-header", inputs: ["state", "label", "counters", "index", "isSelected", "isDisabled", "data-test-id"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: QdButtonModule }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
28914
29029
  }
28915
29030
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageTabsComponent, decorators: [{
28916
29031
  type: Component,
@@ -28919,7 +29034,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
28919
29034
  type: Optional
28920
29035
  }] }, { type: i1$8.Directionality, decorators: [{
28921
29036
  type: Optional
28922
- }] }, { type: QdPageStoreService }, { type: i1$3.Router }, { type: i1$3.ActivatedRoute, decorators: [{
29037
+ }] }, { type: QdPageStoreService }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute, decorators: [{
28923
29038
  type: Optional
28924
29039
  }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { config: [{
28925
29040
  type: Input
@@ -29392,6 +29507,7 @@ class QdPageComponent {
29392
29507
  submitActionService;
29393
29508
  dialog;
29394
29509
  bottomOffset$;
29510
+ dialogRef;
29395
29511
  /**
29396
29512
  * This property defines the configuration for the QdPage component, including the page type,
29397
29513
  * title, and specific configurations for each type of page.
@@ -29433,13 +29549,14 @@ class QdPageComponent {
29433
29549
  get hasInfoBanners() {
29434
29550
  return this.infoBanners.length > 0;
29435
29551
  }
29436
- constructor(pageStoreService, footerService, formGroupManagerService, submitActionService, dialog, bottomOffset$) {
29552
+ constructor(pageStoreService, footerService, formGroupManagerService, submitActionService, dialog, bottomOffset$, dialogRef) {
29437
29553
  this.pageStoreService = pageStoreService;
29438
29554
  this.footerService = footerService;
29439
29555
  this.formGroupManagerService = formGroupManagerService;
29440
29556
  this.submitActionService = submitActionService;
29441
29557
  this.dialog = dialog;
29442
29558
  this.bottomOffset$ = bottomOffset$;
29559
+ this.dialogRef = dialogRef;
29443
29560
  this.footerHasContent$ = this.footerService.footerHasContent$;
29444
29561
  this.footerHasContent$.pipe(takeUntil(this._destroyed$)).subscribe(isVisible => {
29445
29562
  this.isFooterVisible = isVisible;
@@ -29474,9 +29591,11 @@ class QdPageComponent {
29474
29591
  this.pageStoreService.isViewonly$
29475
29592
  .pipe(takeUntil(this._destroyed$))
29476
29593
  .subscribe(isViewonly => this.updateInspectPageOperationMode(this.config.pageTypeConfig, isViewonly ? 'view' : 'edit'));
29594
+ this.setupPageDialogCloseContract();
29477
29595
  this._isInitialized = true;
29478
29596
  }
29479
29597
  ngOnDestroy() {
29598
+ this.dialogRef && this.dialog.clearPageDialogCanClose(this.dialogRef);
29480
29599
  this.bottomOffset$?.next(0);
29481
29600
  this._destroyed$.next();
29482
29601
  this._destroyed$.complete();
@@ -29566,20 +29685,36 @@ class QdPageComponent {
29566
29685
  this.formGroupManagerService
29567
29686
  .$areFormGroupsValid()
29568
29687
  .pipe(takeUntil(this._destroyed$), tap(isValid => {
29688
+ const submitDisabledInfoText = this.config.pageType === 'inspect' ? this.config.pageTypeConfig?.submit?.disabledInfo : undefined;
29569
29689
  this.footerService.updateActions([
29570
29690
  {
29571
29691
  actionKey: 'submit',
29572
29692
  partialAction: {
29573
29693
  additionalInfo: isValid
29574
29694
  ? undefined
29575
- : { infoType: 'warning', message: { i18n: 'i18n.qd.page.submit.invalidForm' } }
29695
+ : {
29696
+ infoType: 'warning',
29697
+ message: submitDisabledInfoText ?? { i18n: 'i18n.qd.page.submit.invalidForm' }
29698
+ }
29576
29699
  }
29577
29700
  }
29578
29701
  ]);
29579
29702
  }))
29580
29703
  .subscribe();
29581
29704
  }
29582
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageComponent, deps: [{ token: QdPageStoreService }, { token: QdPageFooterService }, { token: QdFormGroupManagerService }, { token: QdPageSubmitActionService }, { token: QdDialogService }, { token: QD_SAFE_BOTTOM_OFFSET, optional: true }], target: i0.ɵɵFactoryTarget.Component });
29705
+ setupPageDialogCloseContract() {
29706
+ if (!this.dialogRef)
29707
+ return;
29708
+ const dialogSize = this.dialogRef.config.dialogSize;
29709
+ if (dialogSize !== QdDialogSize.FullWidth)
29710
+ return;
29711
+ this.dialog.setPageDialogCanClose(() => this.formGroupManagerService.$hasValuesChanged().pipe(take(1), map$1(hasChanges => ({
29712
+ canClose: !hasChanges,
29713
+ hasChanges,
29714
+ cause: hasChanges ? 'UNSAVED_CHANGES' : undefined
29715
+ }))), this.dialogRef);
29716
+ }
29717
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageComponent, deps: [{ token: QdPageStoreService }, { token: QdPageFooterService }, { token: QdFormGroupManagerService }, { token: QdPageSubmitActionService }, { token: QdDialogService }, { token: QD_SAFE_BOTTOM_OFFSET, optional: true }, { token: i1$1.DialogRef, optional: true }], target: i0.ɵɵFactoryTarget.Component });
29583
29718
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageComponent, isStandalone: false, selector: "qd-page", inputs: { config: "config", testId: ["data-test-id", "testId"] }, outputs: { operationModeChanged: "operationModeChanged" }, host: { properties: { "class.has-control-panel": "isControlPanelVisible", "class.control-panel-broad": "isControlPanelBroad", "class.has-footer": "this.footerVisible", "class.has-info-banners": "this.hasInfoBanners" } }, providers: [QdPageFooterService, QdFormGroupManagerService, QdPageSubmitActionService, QdResolverTriggerService], queries: [{ propertyName: "controlPanel", first: true, predicate: QdPageControlPanelComponent, descendants: true }, { propertyName: "stepperComponent", first: true, predicate: QdPageStepperComponent, descendants: true }, { propertyName: "tabsComponent", first: true, predicate: QdPageTabsComponent, descendants: true }, { propertyName: "stepperAdapterDirective", first: true, predicate: QdPageStepperAdapterDirective, descendants: true }, { propertyName: "tabsAdapterDirective", first: true, predicate: QdPageTabsAdapterDirective, descendants: true }, { propertyName: "sections", predicate: QdSectionComponent }, { propertyName: "infoBanners", predicate: QdPageInfoBannerComponent }], usesOnChanges: true, ngImport: i0, template: "<main qdSnackbarListener>\n <qd-page-object-header\n [data-test-id]=\"testId\"\n [attr.data-test-id]=\"testId + 'object-header'\"\n [config]=\"config\"\n [hasNavigation]=\"hasNavigation\"\n ></qd-page-object-header>\n\n <div class=\"page-info-banners\">\n <ng-content select=\"qd-page-info-banner\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"config.pageType === 'create' || config.pageType === 'custom'\">\n <ng-content select=\"qd-page-stepper\"></ng-content>\n <ng-content select=\"[qdPageStepperAdapter]\"></ng-content>\n </ng-container>\n\n <ng-container *ngIf=\"config.pageType === 'overview' || config.pageType === 'inspect' || config.pageType === 'custom'\">\n <ng-content select=\"qd-page-tabs\"></ng-content>\n <ng-content select=\"[qdPageTabsAdapter]\"></ng-content>\n <ng-content select=\"qd-section\"></ng-content>\n <ng-content select=\"[qdSectionAdapter]\"></ng-content>\n </ng-container>\n\n <ng-container *ngIf=\"config.pageType === 'custom'\">\n <ng-container *ngTemplateOutlet=\"projectedContent\"></ng-container>\n </ng-container>\n</main>\n\n<footer *ngIf=\"footerHasContent$ | async\">\n <qd-page-footer [attr.data-test-id]=\"testId + '-footer'\">\n <ng-content select=\"[qdPageFooter]\"></ng-content>\n </qd-page-footer>\n</footer>\n\n<aside *ngIf=\"isControlPanelVisible\">\n <ng-content select=\"qd-page-control-panel\"></ng-content>\n</aside>\n\n<qd-projection-guard *ngIf=\"config.pageType !== 'custom'\" [warningMessage]=\"projectionGuardMessage\">\n <ng-container *ngTemplateOutlet=\"projectedContent\"></ng-container>\n</qd-projection-guard>\n\n<ng-template #projectedContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: [":host{position:absolute;display:grid;overflow:hidden;width:100%;height:100%;background:#efefef;grid-template-areas:\"main\";grid-template-columns:1fr;grid-template-rows:1fr}:host.has-control-panel{grid-template-areas:\"main aside\";grid-template-columns:1fr 18.75rem}:host.control-panel-broad{grid-template-columns:1fr 27rem}:host.has-info-banners .page-info-banners{padding:1rem 1.25rem .5rem;border-bottom:rgb(213,213,213) solid .0625rem;background-color:#fff}@media (max-width: 599.98px){:host.has-info-banners .page-info-banners{padding-right:.9375rem;padding-left:.9375rem}}:host.has-info-banners qd-page-info-banner:last-child{margin-bottom:0}:host.has-footer{grid-template-areas:\"main\" \"footer\";grid-template-rows:calc(100% - 4rem) 4rem}:host.has-control-panel.has-footer{grid-template-areas:\"main aside\" \"footer aside\"}:host main{position:relative;grid-area:main;overflow-y:auto}:host aside{border-left:rgb(213,213,213) solid .0625rem;background:#fff;grid-area:aside}:host footer{grid-area:footer}:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success{position:relative;top:-.5rem;padding-top:0rem;padding-bottom:0rem;border-top-width:0;margin-bottom:0rem}:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info .icon,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning .icon,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical .icon,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success .icon{display:none}:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info .title,:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info .message,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning .title,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning .message,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical .title,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical .message,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success .title,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success .message{position:relative;top:-.625rem}:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info:before,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning:before,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical:before,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success:before{position:relative;top:-.625rem;left:-2.75rem;display:block;width:calc(100% + 4.75rem);height:.625rem;background-color:#fff;content:\"\"}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: QdProjectionGuardComponent, selector: "qd-projection-guard", inputs: ["isDisabled", "warningMessage"] }, { kind: "component", type: QdPageFooterComponent, selector: "qd-page-footer" }, { kind: "component", type: QdPageObjectHeaderComponent, selector: "qd-page-object-header", inputs: ["config", "hasNavigation", "data-test-id"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
29584
29719
  }
29585
29720
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageComponent, decorators: [{
@@ -29590,6 +29725,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
29590
29725
  }, {
29591
29726
  type: Inject,
29592
29727
  args: [QD_SAFE_BOTTOM_OFFSET]
29728
+ }] }, { type: i1$1.DialogRef, decorators: [{
29729
+ type: Optional
29593
29730
  }] }], propDecorators: { config: [{
29594
29731
  type: Input,
29595
29732
  args: [{ required: true }]
@@ -29628,11 +29765,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
29628
29765
  }] } });
29629
29766
 
29630
29767
  /**
29631
- * The **QdConnectFormStateToPageDirective** connects a FormGroup to the **QdPage** and enables the management of form state within the page. It helps in controlling
29632
- * the behavior of the submit button by tracking the validity of the FormGroups.
29768
+ * The **QdConnectFormStateToPageDirective** registers a `FormGroup` with the surrounding **QdPage**, enabling page-level aggregation of validity, change tracking, and value access for actions and unsaved-changes protection.
29769
+ *
29770
+ * ### **What it enables in QdPage**
29771
+ * - Aggregated validity across all registered form groups: submit/save can be disabled or show an “invalid form” hint until all registered groups are valid.
29772
+ * - Aggregated change detection across all registered form groups: cancel/close can trigger an “unsaved changes” confirmation when any registered group differs from the snapshot.
29773
+ * - Bundled values for handlers: page actions (e.g. submit/save) receive a keyed object { [key]: formGroupValue } when at least one form group is registered.
29774
+ *
29775
+ * ### **Snapshots / restore (unsaved changes)**
29776
+ * - Snapshots store only raw values and are taken by the page/header workflow (e.g. on init, edit, save). The confirmation dialog may restore all registered form groups from the snapshot.
29777
+ * - FormArrays are restored with dynamic resizing (length is aligned to snapshot before values are reset).
29778
+ *
29779
+ * ### **Page-Dialog (FullWidth) – Unsaved-Changes Close Contract**
29780
+ * - When a QdPage is embedded in a full-width page dialog, the directive’s registered form groups are also used to guard dialog closing.
29781
+ * - The page dialog can only close (e.g. via ESC or backdrop) if no unsaved changes are detected ($hasValuesChanged() is false).
29782
+ * - If there are unsaved changes, closing is blocked and the same unsaved-changes confirmation flow applies as for cancel / view-edit switching.
29633
29783
  *
29634
- * It works with both `FormGroupDirective` and `QdQuickEditComponent` as the host.
29635
- * The directive requires a unique key to identify each form group instance within the `QdFormGroupManagerService`.
29784
+ * It works with both `FormGroupDirective` and `QdQuickEditComponent` as the host. The directive requires a host that provides a FormGroupDirective (i.e. an element with [formGroup]). Otherwise it will log an error and not register anything.
29785
+ * The directive requires a unique key to identify each form group instance within the `QdFormGroupManagerService`. The key must be unique within the same QdPage instance; duplicate keys are rejected.
29636
29786
  *
29637
29787
  * ### **Usage with regular FormGroup**
29638
29788
  * ```html
@@ -29860,7 +30010,7 @@ class QdPanelSectionTextParagraphComponent {
29860
30010
  */
29861
30011
  config = {};
29862
30012
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPanelSectionTextParagraphComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
29863
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPanelSectionTextParagraphComponent, isStandalone: false, selector: "qd-panel-section-text-paragraph", inputs: { config: "config" }, ngImport: i0, template: "<div class=\"paragraph-title\" *ngIf=\"config.title\">{{ config.title.i18n | translate }}</div>\n<div class=\"paragraph-content\"><ng-content></ng-content></div>\n", styles: [":host{display:block;color:#171717}:host .paragraph-title{font-weight:500}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
30013
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPanelSectionTextParagraphComponent, isStandalone: false, selector: "qd-panel-section-text-paragraph", inputs: { config: "config" }, ngImport: i0, template: "<div class=\"paragraph-title\" *ngIf=\"config.title\">{{ config.title.i18n | translate }}</div>\n<div class=\"paragraph-content\"><ng-content></ng-content></div>\n", styles: [":host{display:block;color:#171717}:host .paragraph-title{font-weight:500}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
29864
30014
  }
29865
30015
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPanelSectionTextParagraphComponent, decorators: [{
29866
30016
  type: Component,
@@ -29875,7 +30025,7 @@ class QdPanelSectionStatusComponent {
29875
30025
  return this.config.status;
29876
30026
  }
29877
30027
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPanelSectionStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
29878
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPanelSectionStatusComponent, isStandalone: false, selector: "qd-panel-section-status", inputs: { config: "config" }, host: { properties: { "attr.class": "this.getStatusClass" } }, ngImport: i0, template: "<qd-icon icon=\"circleSolid\"></qd-icon>\n<h3>{{ config.title.i18n | translate }}</h3>\n", styles: [":host{display:flex;width:100%;align-items:flex-start;padding:1rem .75rem;border:rgb(213,213,213) .125rem solid;margin-bottom:1rem;font-size:.875rem}:host:last-child{margin-bottom:0rem}:host qd-icon{margin-right:.3125rem;font-size:1.625rem}:host h3{margin:0!important;font-size:.875rem}:host.positive{border-left:rgb(0,129,58) .25rem solid;color:#00813a}:host.warning{border-left:rgb(255,155,0) .25rem solid;color:#ff9b00}:host.info{border-left:rgb(0,102,153) .25rem solid;color:#069}:host.critical{border-left:rgb(199,0,35) .25rem solid;color:#c70023}\n"], dependencies: [{ kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
30028
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPanelSectionStatusComponent, isStandalone: false, selector: "qd-panel-section-status", inputs: { config: "config" }, host: { properties: { "attr.class": "this.getStatusClass" } }, ngImport: i0, template: "<qd-icon icon=\"circleSolid\"></qd-icon>\n<h3>{{ config.title.i18n | translate }}</h3>\n", styles: [":host{display:flex;width:100%;align-items:flex-start;padding:1rem .75rem;border:rgb(213,213,213) .125rem solid;margin-bottom:1rem;font-size:.875rem}:host:last-child{margin-bottom:0rem}:host qd-icon{margin-right:.3125rem;font-size:1.625rem}:host h3{margin:0!important;font-size:.875rem}:host.positive{border-left:rgb(0,129,58) .25rem solid;color:#00813a}:host.warning{border-left:rgb(255,155,0) .25rem solid;color:#ff9b00}:host.info{border-left:rgb(0,102,153) .25rem solid;color:#069}:host.critical{border-left:rgb(199,0,35) .25rem solid;color:#c70023}\n"], dependencies: [{ kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
29879
30029
  }
29880
30030
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPanelSectionStatusComponent, decorators: [{
29881
30031
  type: Component,
@@ -29931,7 +30081,7 @@ class QdPanelSectionActionsComponent {
29931
30081
  this.actionService.emitAction(action.type);
29932
30082
  }
29933
30083
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPanelSectionActionsComponent, deps: [{ token: QdPanelSectionActionService }], target: i0.ɵɵFactoryTarget.Component });
29934
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPanelSectionActionsComponent, isStandalone: false, selector: "qd-panel-section-actions", inputs: { config: "config" }, ngImport: i0, template: "<button\n *ngIf=\"singleAction && !singleAction.isHidden\"\n qdStopPropagation\n qdButton\n qdButtonGhost\n color=\"primary\"\n [icon]=\"singleAction.icon\"\n (click)=\"singleAction.handler()\"\n [disabled]=\"singleAction.isDisabled\"\n>\n {{ singleAction.label.i18n | translate }}\n</button>\n\n<button *ngIf=\"multipleActions\" qdButtonGhost [qdMenuButton]=\"multipleActions\">\n {{ \"i18n.qd.section.actions.menuButton.label\" | translate }}\n</button>\n", styles: [":host button{background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdMenuButtonComponent, selector: "button[qdMenuButton], a[qdMenuButton]", inputs: ["qdMenuButton", "data-test-id", "autoSize"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
30084
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPanelSectionActionsComponent, isStandalone: false, selector: "qd-panel-section-actions", inputs: { config: "config" }, ngImport: i0, template: "<button\n *ngIf=\"singleAction && !singleAction.isHidden\"\n qdStopPropagation\n qdButton\n qdButtonGhost\n color=\"primary\"\n [icon]=\"singleAction.icon\"\n (click)=\"singleAction.handler()\"\n [disabled]=\"singleAction.isDisabled\"\n>\n {{ singleAction.label.i18n | translate }}\n</button>\n\n<button *ngIf=\"multipleActions\" qdButtonGhost [qdMenuButton]=\"multipleActions\">\n {{ \"i18n.qd.section.actions.menuButton.label\" | translate }}\n</button>\n", styles: [":host button{background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdMenuButtonComponent, selector: "button[qdMenuButton], a[qdMenuButton]", inputs: ["qdMenuButton", "data-test-id", "autoSize"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
29935
30085
  }
29936
30086
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPanelSectionActionsComponent, decorators: [{
29937
30087
  type: Component,
@@ -30004,7 +30154,7 @@ class QdPanelSectionComponent {
30004
30154
  });
30005
30155
  }
30006
30156
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPanelSectionComponent, deps: [{ token: QdPanelSectionActionService }], target: i0.ɵɵFactoryTarget.Component });
30007
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPanelSectionComponent, isStandalone: false, selector: "qd-panel-section", inputs: { config: "config" }, outputs: { actionOutput: "actionOutput" }, providers: [QdPanelSectionActionService], queries: [{ propertyName: "statusList", predicate: QdPanelSectionStatusComponent }, { propertyName: "statusPairsList", predicate: QdStatusPairsComponent }, { propertyName: "tableList", predicate: QdTableComponent }, { propertyName: "paragraphList", predicate: QdPanelSectionTextParagraphComponent }], ngImport: i0, template: "<section>\n <div class=\"toolbar\" *ngIf=\"config.title || hasActions()\">\n <div class=\"title\" *ngIf=\"config.title\">\n {{ config.title.i18n | translate }}\n </div>\n\n <qd-panel-section-actions *ngIf=\"hasActions()\" [config]=\"config\"></qd-panel-section-actions>\n </div>\n\n <div [ngClass]=\"{ content: true, empty: !hasContent() }\">\n <ng-content select=\"qd-panel-section-status\"></ng-content>\n <ng-content select=\"qd-status-pairs\"></ng-content>\n <ng-content select=\"qd-table\"></ng-content>\n <ng-content select=\"qd-panel-section-text-paragraph\"></ng-content>\n </div>\n</section>\n", styles: ["qd-panel-section{display:block;color:#171717;font-size:.875rem;font-weight:300;line-height:1.375rem}qd-panel-section+qd-panel-section{border-top:.0625rem solid rgb(213,213,213)}qd-panel-section section{display:flex;flex-wrap:wrap}qd-panel-section .toolbar{display:flex;width:100%}qd-panel-section .title,qd-panel-section .content{padding:1rem 1rem 0}qd-panel-section .title{flex-grow:99;font-weight:500}qd-panel-section .content{width:100%;margin-bottom:1.5rem}qd-panel-section .content.empty{padding:0;margin:0}qd-panel-section .toolbar+qd-panel-section-status{border-top:rgb(213,213,213) .125rem solid!important;margin-top:1rem}qd-panel-section qd-panel-section-actions{padding-top:.5rem;padding-right:1rem;margin-left:auto}qd-panel-section qd-panel-section-text-paragraph+qd-panel-section-text-paragraph{padding-top:1.5rem}qd-panel-section qd-status-pairs{display:flex;flex-wrap:wrap;column-gap:1rem}qd-panel-section qd-status-pairs qd-status-pairs-item{flex:1 1 0;margin-right:0!important;margin-bottom:.75rem!important}qd-panel-section qd-status-pairs+qd-panel-section-text-paragraph{margin-top:.5rem}qd-panel-section qd-table+qd-panel-section-text-paragraph{margin-top:1rem}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdPanelSectionActionsComponent, selector: "qd-panel-section-actions", inputs: ["config"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
30157
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPanelSectionComponent, isStandalone: false, selector: "qd-panel-section", inputs: { config: "config" }, outputs: { actionOutput: "actionOutput" }, providers: [QdPanelSectionActionService], queries: [{ propertyName: "statusList", predicate: QdPanelSectionStatusComponent }, { propertyName: "statusPairsList", predicate: QdStatusPairsComponent }, { propertyName: "tableList", predicate: QdTableComponent }, { propertyName: "paragraphList", predicate: QdPanelSectionTextParagraphComponent }], ngImport: i0, template: "<section>\n <div class=\"toolbar\" *ngIf=\"config.title || hasActions()\">\n <div class=\"title\" *ngIf=\"config.title\">\n {{ config.title.i18n | translate }}\n </div>\n\n <qd-panel-section-actions *ngIf=\"hasActions()\" [config]=\"config\"></qd-panel-section-actions>\n </div>\n\n <div [ngClass]=\"{ content: true, empty: !hasContent() }\">\n <ng-content select=\"qd-panel-section-status\"></ng-content>\n <ng-content select=\"qd-status-pairs\"></ng-content>\n <ng-content select=\"qd-table\"></ng-content>\n <ng-content select=\"qd-panel-section-text-paragraph\"></ng-content>\n </div>\n</section>\n", styles: ["qd-panel-section{display:block;color:#171717;font-size:.875rem;font-weight:300;line-height:1.375rem}qd-panel-section+qd-panel-section{border-top:.0625rem solid rgb(213,213,213)}qd-panel-section section{display:flex;flex-wrap:wrap}qd-panel-section .toolbar{display:flex;width:100%}qd-panel-section .title,qd-panel-section .content{padding:1rem 1rem 0}qd-panel-section .title{flex-grow:99;font-weight:500}qd-panel-section .content{width:100%;margin-bottom:1.5rem}qd-panel-section .content.empty{padding:0;margin:0}qd-panel-section .toolbar+qd-panel-section-status{border-top:rgb(213,213,213) .125rem solid!important;margin-top:1rem}qd-panel-section qd-panel-section-actions{padding-top:.5rem;padding-right:1rem;margin-left:auto}qd-panel-section qd-panel-section-text-paragraph+qd-panel-section-text-paragraph{padding-top:1.5rem}qd-panel-section qd-status-pairs{display:flex;flex-wrap:wrap;column-gap:1rem}qd-panel-section qd-status-pairs qd-status-pairs-item{flex:1 1 0;margin-right:0!important;margin-bottom:.75rem!important}qd-panel-section qd-status-pairs+qd-panel-section-text-paragraph{margin-top:.5rem}qd-panel-section qd-table+qd-panel-section-text-paragraph{margin-top:1rem}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdPanelSectionActionsComponent, selector: "qd-panel-section-actions", inputs: ["config"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
30008
30158
  }
30009
30159
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPanelSectionComponent, decorators: [{
30010
30160
  type: Component,
@@ -30098,7 +30248,7 @@ class QdShellFooterComponent {
30098
30248
  return this.copyrightInfo && this.copyrightInfo.showYear !== false;
30099
30249
  }
30100
30250
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
30101
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellFooterComponent, isStandalone: false, selector: "[qd-shell-footer]", inputs: { copyrightInfo: "copyrightInfo", isSticky: "isSticky" }, host: { properties: { "class.sticky": "isSticky" } }, ngImport: i0, template: "<ng-container *ngIf=\"copyrightInfo?.i18n\">\n &copy;<span *ngIf=\"shouldShowYear\">&nbsp;{{ currentYear }}</span\n >&nbsp;{{ copyrightInfo?.i18n | translate }}\n</ng-container>\n\n<ng-container *ngIf=\"!copyrightInfo?.i18n\"> &copy; Created with &#9749; by Quadrel </ng-container>\n", styles: [":host{color:#757575;font-size:.875rem;font-weight:400;line-height:1.3125rem;z-index:999;display:block;height:2.5rem;align-self:end;padding:.625rem 1.25rem;border-top:.0625rem solid rgb(213,213,213);border-bottom:.0625rem solid rgb(213,213,213);background-color:#fff;grid-area:footer}:host.sticky{position:sticky;bottom:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
30251
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellFooterComponent, isStandalone: false, selector: "[qd-shell-footer]", inputs: { copyrightInfo: "copyrightInfo", isSticky: "isSticky" }, host: { properties: { "class.sticky": "isSticky" } }, ngImport: i0, template: "<ng-container *ngIf=\"copyrightInfo?.i18n\">\n &copy;<span *ngIf=\"shouldShowYear\">&nbsp;{{ currentYear }}</span\n >&nbsp;{{ copyrightInfo?.i18n | translate }}\n</ng-container>\n\n<ng-container *ngIf=\"!copyrightInfo?.i18n\"> &copy; Created with &#9749; by Quadrel </ng-container>\n", styles: [":host{color:#757575;font-size:.875rem;font-weight:400;line-height:1.3125rem;z-index:999;display:block;height:2.5rem;align-self:end;padding:.625rem 1.25rem;border-top:.0625rem solid rgb(213,213,213);border-bottom:.0625rem solid rgb(213,213,213);background-color:#fff;grid-area:footer}:host.sticky{position:sticky;bottom:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
30102
30252
  }
30103
30253
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellFooterComponent, decorators: [{
30104
30254
  type: Component,
@@ -30256,12 +30406,12 @@ class QdNavigationService {
30256
30406
  getRouteComponentInstance$() {
30257
30407
  return this.routeComponentInstanceSubject.asObservable();
30258
30408
  }
30259
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdNavigationService, deps: [{ token: i1$3.Router }, { token: i1$3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
30409
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdNavigationService, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
30260
30410
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdNavigationService });
30261
30411
  }
30262
30412
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdNavigationService, decorators: [{
30263
30413
  type: Injectable
30264
- }], ctorParameters: () => [{ type: i1$3.Router }, { type: i1$3.ActivatedRoute }] });
30414
+ }], ctorParameters: () => [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }] });
30265
30415
 
30266
30416
  // @ts-strict-ignore
30267
30417
  class QdShellLeftService {
@@ -30409,7 +30559,7 @@ class QdLanguageFromUrlService {
30409
30559
  this.router.navigate([], { relativeTo: this.activatedRoute, queryParams: newQueryParams, replaceUrl: true });
30410
30560
  });
30411
30561
  }
30412
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdLanguageFromUrlService, deps: [{ token: i1$3.Router, optional: true }, { token: i1$3.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
30562
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdLanguageFromUrlService, deps: [{ token: i1$2.Router, optional: true }, { token: i1$2.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
30413
30563
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdLanguageFromUrlService, providedIn: 'root' });
30414
30564
  }
30415
30565
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdLanguageFromUrlService, decorators: [{
@@ -30417,9 +30567,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
30417
30567
  args: [{
30418
30568
  providedIn: 'root'
30419
30569
  }]
30420
- }], ctorParameters: () => [{ type: i1$3.Router, decorators: [{
30570
+ }], ctorParameters: () => [{ type: i1$2.Router, decorators: [{
30421
30571
  type: Optional
30422
- }] }, { type: i1$3.ActivatedRoute, decorators: [{
30572
+ }] }, { type: i1$2.ActivatedRoute, decorators: [{
30423
30573
  type: Optional
30424
30574
  }] }] });
30425
30575
 
@@ -30652,14 +30802,14 @@ class QdShellServiceNavigationService {
30652
30802
  getDefaultAttribute(configValue) {
30653
30803
  return typeof configValue === 'boolean' ? (configValue ? 'true' : 'false') : configValue;
30654
30804
  }
30655
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellServiceNavigationService, deps: [{ token: i1$2.TranslateService }, { token: QdShellEportalLanguageService }], target: i0.ɵɵFactoryTarget.Injectable });
30805
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellServiceNavigationService, deps: [{ token: i1$3.TranslateService }, { token: QdShellEportalLanguageService }], target: i0.ɵɵFactoryTarget.Injectable });
30656
30806
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellServiceNavigationService });
30657
30807
  }
30658
30808
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellServiceNavigationService, decorators: [{
30659
30809
  type: Injectable
30660
- }], ctorParameters: () => [{ type: i1$2.TranslateService }, { type: QdShellEportalLanguageService }] });
30810
+ }], ctorParameters: () => [{ type: i1$3.TranslateService }, { type: QdShellEportalLanguageService }] });
30661
30811
 
30662
- const DEFAULT_JAVASCRIPT_ASSET_PATH$1 = 'assets/service-navigation-web-component.js';
30812
+ const DEFAULT_JAVASCRIPT_ASSET_PATH$1 = 'assets/service-navigation-web-component.js?version=14.2.0';
30663
30813
  class QdShellServiceNavigationComponent {
30664
30814
  serviceNavigationService;
30665
30815
  translateService;
@@ -30782,13 +30932,13 @@ class QdShellServiceNavigationComponent {
30782
30932
  this.translateService.use(language);
30783
30933
  updateHtmlLang(language);
30784
30934
  }
30785
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellServiceNavigationComponent, deps: [{ token: QdShellServiceNavigationService }, { token: i1$2.TranslateService }, { token: QdLanguageFromUrlService }, { token: QdShellPamsEnvironmentService }, { token: 'QdAuthenticationService', optional: true }], target: i0.ɵɵFactoryTarget.Component });
30935
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellServiceNavigationComponent, deps: [{ token: QdShellServiceNavigationService }, { token: i1$3.TranslateService }, { token: QdLanguageFromUrlService }, { token: QdShellPamsEnvironmentService }, { token: 'QdAuthenticationService', optional: true }], target: i0.ɵɵFactoryTarget.Component });
30786
30936
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellServiceNavigationComponent, isStandalone: false, selector: "qd-shell-service-navigation", inputs: { config: "config" }, providers: [QdShellServiceNavigationService], viewQueries: [{ propertyName: "serviceNavigation", first: true, predicate: ["serviceNavigation"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ob-service-navigation-web-component\n *ngIf=\"pamsEnvironment\"\n #serviceNavigation\n [languageList]=\"languageListStringified\"\n [pamsAppId]=\"pamsAppId\"\n [environment]=\"pamsEnvironment\"\n (languageChange)=\"handleLanguageChange($event)\"\n (loginState)=\"handleLoginStatusChange($event)\"\n (logoutTriggered)=\"handleLogoutTriggered($event)\"\n></ob-service-navigation-web-component>\n", styles: [":host{display:flex;justify-content:end}:host.expanded{visibility:visible}@media (max-width: 599.98px){:host.expanded{visibility:collapse}}@media (max-width: 599.98px){:host{flex-basis:100%;margin-top:1rem}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
30787
30937
  }
30788
30938
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellServiceNavigationComponent, decorators: [{
30789
30939
  type: Component,
30790
30940
  args: [{ selector: 'qd-shell-service-navigation', providers: [QdShellServiceNavigationService], standalone: false, template: "<ob-service-navigation-web-component\n *ngIf=\"pamsEnvironment\"\n #serviceNavigation\n [languageList]=\"languageListStringified\"\n [pamsAppId]=\"pamsAppId\"\n [environment]=\"pamsEnvironment\"\n (languageChange)=\"handleLanguageChange($event)\"\n (loginState)=\"handleLoginStatusChange($event)\"\n (logoutTriggered)=\"handleLogoutTriggered($event)\"\n></ob-service-navigation-web-component>\n", styles: [":host{display:flex;justify-content:end}:host.expanded{visibility:visible}@media (max-width: 599.98px){:host.expanded{visibility:collapse}}@media (max-width: 599.98px){:host{flex-basis:100%;margin-top:1rem}}\n"] }]
30791
- }], ctorParameters: () => [{ type: QdShellServiceNavigationService }, { type: i1$2.TranslateService }, { type: QdLanguageFromUrlService }, { type: QdShellPamsEnvironmentService }, { type: undefined, decorators: [{
30941
+ }], ctorParameters: () => [{ type: QdShellServiceNavigationService }, { type: i1$3.TranslateService }, { type: QdLanguageFromUrlService }, { type: QdShellPamsEnvironmentService }, { type: undefined, decorators: [{
30792
30942
  type: Optional
30793
30943
  }, {
30794
30944
  type: Inject,
@@ -30963,12 +31113,12 @@ class QdShellHeaderWidgetService {
30963
31113
  getDefaultAttribute(configValue) {
30964
31114
  return typeof configValue === 'boolean' ? (configValue ? 'true' : 'false') : configValue;
30965
31115
  }
30966
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellHeaderWidgetService, deps: [{ token: i1$2.TranslateService }, { token: QdShellEportalLanguageService }], target: i0.ɵɵFactoryTarget.Injectable });
31116
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellHeaderWidgetService, deps: [{ token: i1$3.TranslateService }, { token: QdShellEportalLanguageService }], target: i0.ɵɵFactoryTarget.Injectable });
30967
31117
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellHeaderWidgetService });
30968
31118
  }
30969
31119
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellHeaderWidgetService, decorators: [{
30970
31120
  type: Injectable
30971
- }], ctorParameters: () => [{ type: i1$2.TranslateService }, { type: QdShellEportalLanguageService }] });
31121
+ }], ctorParameters: () => [{ type: i1$3.TranslateService }, { type: QdShellEportalLanguageService }] });
30972
31122
 
30973
31123
  // @ts-strict-ignore
30974
31124
  const DEFAULT_LANGUAGE_LIST = ['de', 'fr', 'it', 'en'];
@@ -31052,13 +31202,13 @@ class QdShellHeaderWidgetComponent {
31052
31202
  this.translateService.use(language);
31053
31203
  updateHtmlLang(language);
31054
31204
  }
31055
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellHeaderWidgetComponent, deps: [{ token: QdShellHeaderWidgetService }, { token: i1$2.TranslateService }, { token: QdLanguageFromUrlService }, { token: 'QdAuthenticationService', optional: true }], target: i0.ɵɵFactoryTarget.Component });
31205
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellHeaderWidgetComponent, deps: [{ token: QdShellHeaderWidgetService }, { token: i1$3.TranslateService }, { token: QdLanguageFromUrlService }, { token: 'QdAuthenticationService', optional: true }], target: i0.ɵɵFactoryTarget.Component });
31056
31206
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellHeaderWidgetComponent, isStandalone: false, selector: "qd-shell-header-widget", inputs: { config: "config" }, providers: [QdShellHeaderWidgetService], viewQueries: [{ propertyName: "headerWidgetDesktop", first: true, predicate: ["headerWidgetDesktop"], descendants: true }, { propertyName: "headerWidgetMobile", first: true, predicate: ["headerWidgetMobile"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<header-widget\n #headerWidgetDesktop\n [languageList]=\"config?.languageList\"\n (languageChange)=\"handleLanguageChange($event)\"\n (loginStatus)=\"handleLoginStatusChange($event)\"\n></header-widget>\n<header-widget-mobile\n #headerWidgetMobile\n [languageList]=\"config?.languageList\"\n (languageChange)=\"handleLanguageChange($event)\"\n (loginStatus)=\"handleLoginStatusChange($event)\"\n></header-widget-mobile>\n", styles: ["@media (max-width: 1279.98px){header-widget-mobile{display:block}header-widget{display:none}}@media (min-width: 960px){header-widget-mobile{display:none}header-widget{display:block}}\n"] });
31057
31207
  }
31058
31208
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellHeaderWidgetComponent, decorators: [{
31059
31209
  type: Component,
31060
31210
  args: [{ selector: 'qd-shell-header-widget', providers: [QdShellHeaderWidgetService], standalone: false, template: "<header-widget\n #headerWidgetDesktop\n [languageList]=\"config?.languageList\"\n (languageChange)=\"handleLanguageChange($event)\"\n (loginStatus)=\"handleLoginStatusChange($event)\"\n></header-widget>\n<header-widget-mobile\n #headerWidgetMobile\n [languageList]=\"config?.languageList\"\n (languageChange)=\"handleLanguageChange($event)\"\n (loginStatus)=\"handleLoginStatusChange($event)\"\n></header-widget-mobile>\n", styles: ["@media (max-width: 1279.98px){header-widget-mobile{display:block}header-widget{display:none}}@media (min-width: 960px){header-widget-mobile{display:none}header-widget{display:block}}\n"] }]
31061
- }], ctorParameters: () => [{ type: QdShellHeaderWidgetService }, { type: i1$2.TranslateService }, { type: QdLanguageFromUrlService }, { type: undefined, decorators: [{
31211
+ }], ctorParameters: () => [{ type: QdShellHeaderWidgetService }, { type: i1$3.TranslateService }, { type: QdLanguageFromUrlService }, { type: undefined, decorators: [{
31062
31212
  type: Optional
31063
31213
  }, {
31064
31214
  type: Inject,
@@ -31253,7 +31403,7 @@ class QdShellHeaderComponent {
31253
31403
  }
31254
31404
  async = async;
31255
31405
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellHeaderComponent, deps: [{ token: QdNavigationService }, { token: QdShellHeaderMinimizationService }, { token: QdShellLeftService }, { token: QdShellRightService }, { token: QdBreakpointService }], target: i0.ɵɵFactoryTarget.Component });
31256
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellHeaderComponent, isStandalone: false, selector: "[qd-shell-header]", inputs: { config: "config", isMinimized: "isMinimized", isCommentsUsed: "isCommentsUsed", hasComments: "hasComments" }, outputs: { menuIconChange: "menuIconChange" }, host: { properties: { "class.minimized": "this.minimized", "class.sticky": "this.sticky", "class.expanded": "this.expanded" }, classAttribute: "qd-shell-header" }, ngImport: i0, template: "<qd-shell-header-banner cdkDrag cdkDragLockAxis=\"x\" cdkDragBoundary=\"header\"></qd-shell-header-banner>\n\n<qd-icon\n *ngIf=\"hasNavigation$ | async\"\n [icon]=\"(isNavigationPinned$ | async) ? 'timesLarge' : 'menu'\"\n class=\"toggle-navigation\"\n data-test-id=\"navigation-toggle\"\n (click)=\"togglePinnedNavigation()\"\n></qd-icon>\n\n<button *ngIf=\"backLinkDisplayed$ | async\" class=\"back-link\" (click)=\"handleBackClick()\" tabindex=\"0\">\n <qd-icon class=\"back-link-icon\" icon=\"arrowLeft\"></qd-icon>\n</button>\n\n<qd-icon *ngIf=\"logoIconDisplayed$ | async\" class=\"logo-icon\" [icon]=\"isMinimized ? 'coatCh' : 'logo'\"></qd-icon>\n\n<span class=\"illustration\" *ngIf=\"config?.illustration\" [class.minimized]=\"isMinimized\">\n <img [src]=\"config.illustration.url\" />\n</span>\n\n<span class=\"title\" *ngIf=\"config.title\">\n {{ isPlainTitle(config.title) ? config.title : (extractI18nTitle(config.title) | translate) }}\n</span>\n\n<qd-shell-header-search *ngIf=\"config.hasSearch\"></qd-shell-header-search>\n\n<qd-shell-toolbar *ngIf=\"config.toolbar\" [config]=\"config.toolbar\"></qd-shell-toolbar>\n\n<qd-shell-header-widget\n *ngIf=\"config.headerWidget && !config.headerWidget.isDisabled\"\n [config]=\"config.headerWidget\"\n></qd-shell-header-widget>\n\n<qd-icon\n *ngIf=\"!config.serviceNavigation?.isDisabled && config.serviceNavigation\"\n [icon]=\"isServiceNavigationOpened ? 'timesLarge' : 'menu'\"\n data-test-id=\"service-navigation-toggle\"\n [ngClass]=\"{\n 'toggle-service-navigation': true,\n expanded: true\n }\"\n (click)=\"toggleServiceNavigation()\"\n></qd-icon>\n\n<qd-shell-service-navigation\n *ngIf=\"!config.serviceNavigation?.isDisabled && config.serviceNavigation\"\n [config]=\"config.serviceNavigation\"\n [ngClass]=\"{ expanded: !isServiceNavigationOpened }\"\n></qd-shell-service-navigation>\n\n<!-- TODO: Remove in v17! -->\n<qd-icon\n *ngIf=\"isCommentsUsed\"\n icon=\"chat\"\n data-test-id=\"comments-toggle\"\n [ngClass]=\"{\n 'toggle-comments': true,\n 'has-comments': hasComments,\n 'is-opened': isCommentsOpened$ | async\n }\"\n (click)=\"toggleComments()\"\n></qd-icon>\n\n<qd-icon\n *ngIf=\"hasNotificationsToggle$ | async\"\n icon=\"notification\"\n data-test-id=\"notification-toggle\"\n [ngClass]=\"{\n 'toggle-notification': true,\n 'has-notifications': hasNotifications$ | async,\n 'is-opened': isNotificationsOpened$ | async\n }\"\n (click)=\"toggleNotifications()\"\n></qd-icon>\n", styles: [":host{display:flex;flex-wrap:wrap;align-content:center;align-items:center;align-self:start;justify-content:space-between;padding:.5rem 1rem .5rem 0;border-bottom:.3125rem solid rgb(220,0,24);background-color:#fff;grid-area:header}:host.sticky{position:sticky;z-index:998;top:0}@media (max-width: 599.98px){:host{height:3.75rem;align-content:flex-start}:host.expanded{height:auto}}@media (min-width: 960px){:host{height:5.9375rem;padding:0 .75rem 0 0}:host.minimized{height:4.0625rem}}:host .toggle-navigation{padding:1.9375rem .625rem 1.9375rem .8125rem;margin-right:0;cursor:pointer;font-size:1.5rem}@media (min-width: 960px){:host .toggle-navigation{border-right:.0625rem solid rgb(213,213,213)}}:host.minimized .toggle-navigation{padding:1rem .625rem 1rem .8125rem}@media (min-width: 960px){:host .logo-icon{border-right:.0625rem solid rgb(213,213,213)}}:host .logo-icon.qd-icon-logo{padding-right:1.5rem;margin:1rem 1.5rem 1rem 0}@media (min-width: 960px){:host .logo-icon.qd-icon-logo{padding:.9375rem .8125rem;margin-right:1.5rem}}:host .logo-icon.qd-icon-logo svg{overflow:visible}:host .logo-icon.qd-icon-ch-logo{margin-left:1rem;font-size:2rem}@media (min-width: 960px){:host .logo-icon.qd-icon-ch-logo{padding:.75rem .8125rem;margin-right:1.5rem;margin-left:0}}:host .logo-icon:not(.qd-icon-logo) svg{display:none}:host .back-link{padding:0;border-right:.0625rem solid rgb(213,213,213);background-color:transparent;color:#979797;font-size:1.625rem}@media (min-width: 960px){:host .back-link{padding:.875rem .8125rem;margin-right:1.5rem}}:host .back-link-icon{width:2rem;opacity:.8}:host .back-link:hover{color:#757575;opacity:1}:host .back-link:hover .back-link-icon{opacity:1}:host .illustration{width:4rem;height:4rem;margin-right:.625rem}:host .illustration img{max-width:100%}:host .illustration.minimized{width:2rem;height:2rem;margin-right:.3125rem}:host .title{overflow:hidden;flex-grow:1;font-size:1.25rem;font-weight:500;text-align:center;text-overflow:ellipsis;white-space:nowrap}@media (min-width: 960px){:host .title{text-align:start}}:host .toggle-notification,:host .toggle-comments,:host .toggle-service-navigation{position:relative;margin-left:.625rem;cursor:pointer;font-size:1.25rem}:host .toggle-notification.has-notifications:after,:host .toggle-notification.has-comments:after,:host .toggle-comments.has-notifications:after,:host .toggle-comments.has-comments:after,:host .toggle-service-navigation.has-notifications:after,:host .toggle-service-navigation.has-comments:after{position:absolute;top:.125rem;right:0;display:inline-block;width:.5625rem;height:.5625rem;border:rgb(255,255,255) .125rem solid;border-radius:100%;background-color:red;content:\"\"}:host .toggle-notification.is-opened:before,:host .toggle-comments.is-opened:before,:host .toggle-service-navigation.is-opened:before{position:absolute;z-index:-10;display:block;width:2rem;height:2rem;border-radius:50%;background:#e5e5e5;content:\"\";transform:translate(-.4375rem,-.3125rem)}:host .toggle-notification.expanded,:host .toggle-comments.expanded,:host .toggle-service-navigation.expanded{visibility:collapse}@media (max-width: 599.98px){:host .toggle-notification.expanded,:host .toggle-comments.expanded,:host .toggle-service-navigation.expanded{visibility:visible}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.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: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdShellServiceNavigationComponent, selector: "qd-shell-service-navigation", inputs: ["config"] }, { kind: "component", type: QdShellHeaderBannerComponent, selector: "qd-shell-header-banner" }, { kind: "component", type: QdShellHeaderSearchComponent, selector: "qd-shell-header-search" }, { kind: "component", type: QdShellHeaderWidgetComponent, selector: "qd-shell-header-widget", inputs: ["config"] }, { kind: "component", type: QdShellToolbarComponent, selector: "qd-shell-toolbar", inputs: ["config"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
31406
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellHeaderComponent, isStandalone: false, selector: "[qd-shell-header]", inputs: { config: "config", isMinimized: "isMinimized", isCommentsUsed: "isCommentsUsed", hasComments: "hasComments" }, outputs: { menuIconChange: "menuIconChange" }, host: { properties: { "class.minimized": "this.minimized", "class.sticky": "this.sticky", "class.expanded": "this.expanded" }, classAttribute: "qd-shell-header" }, ngImport: i0, template: "<qd-shell-header-banner cdkDrag cdkDragLockAxis=\"x\" cdkDragBoundary=\"header\"></qd-shell-header-banner>\n\n<qd-icon\n *ngIf=\"hasNavigation$ | async\"\n [icon]=\"(isNavigationPinned$ | async) ? 'timesLarge' : 'menu'\"\n class=\"toggle-navigation\"\n data-test-id=\"navigation-toggle\"\n (click)=\"togglePinnedNavigation()\"\n></qd-icon>\n\n<button *ngIf=\"backLinkDisplayed$ | async\" class=\"back-link\" (click)=\"handleBackClick()\" tabindex=\"0\">\n <qd-icon class=\"back-link-icon\" icon=\"arrowLeft\"></qd-icon>\n</button>\n\n<qd-icon *ngIf=\"logoIconDisplayed$ | async\" class=\"logo-icon\" [icon]=\"isMinimized ? 'coatCh' : 'logo'\"></qd-icon>\n\n<span class=\"illustration\" *ngIf=\"config?.illustration\" [class.minimized]=\"isMinimized\">\n <img [src]=\"config.illustration.url\" />\n</span>\n\n<span class=\"title\" *ngIf=\"config.title\">\n {{ isPlainTitle(config.title) ? config.title : (extractI18nTitle(config.title) | translate) }}\n</span>\n\n<qd-shell-header-search *ngIf=\"config.hasSearch\"></qd-shell-header-search>\n\n<qd-shell-toolbar *ngIf=\"config.toolbar\" [config]=\"config.toolbar\"></qd-shell-toolbar>\n\n<qd-shell-header-widget\n *ngIf=\"config.headerWidget && !config.headerWidget.isDisabled\"\n [config]=\"config.headerWidget\"\n></qd-shell-header-widget>\n\n<qd-icon\n *ngIf=\"!config.serviceNavigation?.isDisabled && config.serviceNavigation\"\n [icon]=\"isServiceNavigationOpened ? 'timesLarge' : 'menu'\"\n data-test-id=\"service-navigation-toggle\"\n [ngClass]=\"{\n 'toggle-service-navigation': true,\n expanded: true\n }\"\n (click)=\"toggleServiceNavigation()\"\n></qd-icon>\n\n<qd-shell-service-navigation\n *ngIf=\"!config.serviceNavigation?.isDisabled && config.serviceNavigation\"\n [config]=\"config.serviceNavigation\"\n [ngClass]=\"{ expanded: !isServiceNavigationOpened }\"\n></qd-shell-service-navigation>\n\n<!-- TODO: Remove in v17! -->\n<qd-icon\n *ngIf=\"isCommentsUsed\"\n icon=\"chat\"\n data-test-id=\"comments-toggle\"\n [ngClass]=\"{\n 'toggle-comments': true,\n 'has-comments': hasComments,\n 'is-opened': isCommentsOpened$ | async\n }\"\n (click)=\"toggleComments()\"\n></qd-icon>\n\n<qd-icon\n *ngIf=\"hasNotificationsToggle$ | async\"\n icon=\"notification\"\n data-test-id=\"notification-toggle\"\n [ngClass]=\"{\n 'toggle-notification': true,\n 'has-notifications': hasNotifications$ | async,\n 'is-opened': isNotificationsOpened$ | async\n }\"\n (click)=\"toggleNotifications()\"\n></qd-icon>\n", styles: [":host{display:flex;flex-wrap:wrap;align-content:center;align-items:center;align-self:start;justify-content:space-between;padding:.5rem 1rem .5rem 0;border-bottom:.3125rem solid rgb(220,0,24);background-color:#fff;grid-area:header}:host.sticky{position:sticky;z-index:998;top:0}@media (max-width: 599.98px){:host{height:3.75rem;align-content:flex-start}:host.expanded{height:auto}}@media (min-width: 960px){:host{height:5.9375rem;padding:0 .75rem 0 0}:host.minimized{height:4.0625rem}}:host .toggle-navigation{padding:1.9375rem .625rem 1.9375rem .8125rem;margin-right:0;cursor:pointer;font-size:1.5rem}@media (min-width: 960px){:host .toggle-navigation{border-right:.0625rem solid rgb(213,213,213)}}:host.minimized .toggle-navigation{padding:1rem .625rem 1rem .8125rem}@media (min-width: 960px){:host .logo-icon{border-right:.0625rem solid rgb(213,213,213)}}:host .logo-icon.qd-icon-logo{padding-right:1.5rem;margin:1rem 1.5rem 1rem 0}@media (min-width: 960px){:host .logo-icon.qd-icon-logo{padding:.9375rem .8125rem;margin-right:1.5rem}}:host .logo-icon.qd-icon-logo svg{overflow:visible}:host .logo-icon.qd-icon-ch-logo{margin-left:1rem;font-size:2rem}@media (min-width: 960px){:host .logo-icon.qd-icon-ch-logo{padding:.75rem .8125rem;margin-right:1.5rem;margin-left:0}}:host .logo-icon:not(.qd-icon-logo) svg{display:none}:host .back-link{padding:0;border-right:.0625rem solid rgb(213,213,213);background-color:transparent;color:#979797;font-size:1.625rem}@media (min-width: 960px){:host .back-link{padding:.875rem .8125rem;margin-right:1.5rem}}:host .back-link-icon{width:2rem;opacity:.8}:host .back-link:hover{color:#757575;opacity:1}:host .back-link:hover .back-link-icon{opacity:1}:host .illustration{width:4rem;height:4rem;margin-right:.625rem}:host .illustration img{max-width:100%}:host .illustration.minimized{width:2rem;height:2rem;margin-right:.3125rem}:host .title{overflow:hidden;flex-grow:1;font-size:1.25rem;font-weight:500;text-align:center;text-overflow:ellipsis;white-space:nowrap}@media (min-width: 960px){:host .title{text-align:start}}:host .toggle-notification,:host .toggle-comments,:host .toggle-service-navigation{position:relative;margin-left:.625rem;cursor:pointer;font-size:1.25rem}:host .toggle-notification.has-notifications:after,:host .toggle-notification.has-comments:after,:host .toggle-comments.has-notifications:after,:host .toggle-comments.has-comments:after,:host .toggle-service-navigation.has-notifications:after,:host .toggle-service-navigation.has-comments:after{position:absolute;top:.125rem;right:0;display:inline-block;width:.5625rem;height:.5625rem;border:rgb(255,255,255) .125rem solid;border-radius:100%;background-color:red;content:\"\"}:host .toggle-notification.is-opened:before,:host .toggle-comments.is-opened:before,:host .toggle-service-navigation.is-opened:before{position:absolute;z-index:-10;display:block;width:2rem;height:2rem;border-radius:50%;background:#e5e5e5;content:\"\";transform:translate(-.4375rem,-.3125rem)}:host .toggle-notification.expanded,:host .toggle-comments.expanded,:host .toggle-service-navigation.expanded{visibility:collapse}@media (max-width: 599.98px){:host .toggle-notification.expanded,:host .toggle-comments.expanded,:host .toggle-service-navigation.expanded{visibility:visible}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.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: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdShellServiceNavigationComponent, selector: "qd-shell-service-navigation", inputs: ["config"] }, { kind: "component", type: QdShellHeaderBannerComponent, selector: "qd-shell-header-banner" }, { kind: "component", type: QdShellHeaderSearchComponent, selector: "qd-shell-header-search" }, { kind: "component", type: QdShellHeaderWidgetComponent, selector: "qd-shell-header-widget", inputs: ["config"] }, { kind: "component", type: QdShellToolbarComponent, selector: "qd-shell-toolbar", inputs: ["config"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
31257
31407
  }
31258
31408
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellHeaderComponent, decorators: [{
31259
31409
  type: Component,
@@ -31291,7 +31441,7 @@ class QdShellNavigationLinkComponent {
31291
31441
  this.config.handler();
31292
31442
  }
31293
31443
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellNavigationLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31294
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellNavigationLinkComponent, isStandalone: false, selector: "[qd-shell-navigation-link]", inputs: { config: "config" }, host: { properties: { "class.current": "config.isCurrent " } }, ngImport: i0, template: "<span (click)=\"handleClick()\">\n <qd-icon [icon]=\"config.icon ?? 'linkWeb'\"></qd-icon>\n {{ config.i18n | translate }}\n</span>\n", styles: [":host{cursor:pointer}:host.current{background:#e5e5e5;cursor:default}:host:hover{background:#efefef}:host qd-icon{padding:0 .8125rem 0 .875rem;font-size:1.25rem;line-height:2rem;text-align:center;vertical-align:middle}:host span{display:block}\n"], dependencies: [{ kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
31444
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellNavigationLinkComponent, isStandalone: false, selector: "[qd-shell-navigation-link]", inputs: { config: "config" }, host: { properties: { "class.current": "config.isCurrent " } }, ngImport: i0, template: "<span (click)=\"handleClick()\">\n <qd-icon [icon]=\"config.icon ?? 'linkWeb'\"></qd-icon>\n {{ config.i18n | translate }}\n</span>\n", styles: [":host{cursor:pointer}:host.current{background:#e5e5e5;cursor:default}:host:hover{background:#efefef}:host qd-icon{padding:0 .8125rem 0 .875rem;font-size:1.25rem;line-height:2rem;text-align:center;vertical-align:middle}:host span{display:block}\n"], dependencies: [{ kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
31295
31445
  }
31296
31446
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellNavigationLinkComponent, decorators: [{
31297
31447
  type: Component,
@@ -31410,13 +31560,13 @@ class QdShellNotificationComponent {
31410
31560
  remove() {
31411
31561
  this.notificationService.remove('shell', this.notification.uuid);
31412
31562
  }
31413
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellNotificationComponent, deps: [{ token: QdNotificationsService }, { token: i1$2.TranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
31414
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellNotificationComponent, isStandalone: false, selector: "qd-shell-notification", inputs: { notification: "notification" }, host: { properties: { "attr.class": "this.typeClassName" }, classAttribute: "qd-shell-notification" }, usesOnChanges: true, ngImport: i0, template: "<qd-icon *ngIf=\"closeable\" [icon]=\"'timesLarge'\" class=\"closer\" (click)=\"remove()\"></qd-icon>\n<qd-icon [icon]=\"this.getIcon()\" class=\"icon\"></qd-icon>\n\n<h3 class=\"title\" *ngIf=\"notification?.title\">{{ notification.title.i18n | translate }}</h3>\n<span class=\"message\">{{ notification?.i18n | translate }}</span>\n\n<span class=\"date\" *ngIf=\"displayedDate\">{{ displayedDate }}</span>\n", styles: [":host{position:relative;display:grid;width:100%;padding:.5rem 1.5rem .5rem .75rem;border:rgb(213,213,213) solid .0625rem;margin-bottom:.75rem;background:#fff;font-size:.875rem;gap:.125rem .625rem;grid-template-columns:23px 1fr;line-height:1rem}:host .icon{font-size:1.5rem;grid-row:1/span 3;line-height:1.5rem}:host .title{margin:0!important;color:#171717;font-size:.875rem}:host .message{margin-top:.1875rem;color:#333;font-size:.875rem;white-space:pre-wrap}:host .title+.message{margin-top:0}:host .date{margin-top:.875rem;color:#333;font-size:.875rem}:host.qd-notification-info{border-left:.25rem solid rgb(0,102,153)}:host.qd-notification-info .icon{color:#069}:host.qd-notification-warning{border-left:.25rem solid rgb(255,155,0)}:host.qd-notification-warning .icon{color:#ff9b00}:host.qd-notification-critical{border-left:.25rem solid rgb(199,0,35)}:host.qd-notification-critical .icon{color:#c70023}:host.qd-notification-success{border-left:.25rem solid rgb(0,129,58)}:host.qd-notification-success .icon{color:#00813a}:host .closer{position:absolute;top:.5rem;right:.75rem;color:#333;cursor:pointer;font-size:.75rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
31563
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellNotificationComponent, deps: [{ token: QdNotificationsService }, { token: i1$3.TranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
31564
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellNotificationComponent, isStandalone: false, selector: "qd-shell-notification", inputs: { notification: "notification" }, host: { properties: { "attr.class": "this.typeClassName" }, classAttribute: "qd-shell-notification" }, usesOnChanges: true, ngImport: i0, template: "<qd-icon *ngIf=\"closeable\" [icon]=\"'timesLarge'\" class=\"closer\" (click)=\"remove()\"></qd-icon>\n<qd-icon [icon]=\"this.getIcon()\" class=\"icon\"></qd-icon>\n\n<h3 class=\"title\" *ngIf=\"notification?.title\">{{ notification.title.i18n | translate }}</h3>\n<span class=\"message\">{{ notification?.i18n | translate }}</span>\n\n<span class=\"date\" *ngIf=\"displayedDate\">{{ displayedDate }}</span>\n", styles: [":host{position:relative;display:grid;width:100%;padding:.5rem 1.5rem .5rem .75rem;border:rgb(213,213,213) solid .0625rem;margin-bottom:.75rem;background:#fff;font-size:.875rem;gap:.125rem .625rem;grid-template-columns:23px 1fr;line-height:1rem}:host .icon{font-size:1.5rem;grid-row:1/span 3;line-height:1.5rem}:host .title{margin:0!important;color:#171717;font-size:.875rem}:host .message{margin-top:.1875rem;color:#333;font-size:.875rem;white-space:pre-wrap}:host .title+.message{margin-top:0}:host .date{margin-top:.875rem;color:#333;font-size:.875rem}:host.qd-notification-info{border-left:.25rem solid rgb(0,102,153)}:host.qd-notification-info .icon{color:#069}:host.qd-notification-warning{border-left:.25rem solid rgb(255,155,0)}:host.qd-notification-warning .icon{color:#ff9b00}:host.qd-notification-critical{border-left:.25rem solid rgb(199,0,35)}:host.qd-notification-critical .icon{color:#c70023}:host.qd-notification-success{border-left:.25rem solid rgb(0,129,58)}:host.qd-notification-success .icon{color:#00813a}:host .closer{position:absolute;top:.5rem;right:.75rem;color:#333;cursor:pointer;font-size:.75rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
31415
31565
  }
31416
31566
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellNotificationComponent, decorators: [{
31417
31567
  type: Component,
31418
31568
  args: [{ selector: 'qd-shell-notification', host: { class: 'qd-shell-notification' }, standalone: false, template: "<qd-icon *ngIf=\"closeable\" [icon]=\"'timesLarge'\" class=\"closer\" (click)=\"remove()\"></qd-icon>\n<qd-icon [icon]=\"this.getIcon()\" class=\"icon\"></qd-icon>\n\n<h3 class=\"title\" *ngIf=\"notification?.title\">{{ notification.title.i18n | translate }}</h3>\n<span class=\"message\">{{ notification?.i18n | translate }}</span>\n\n<span class=\"date\" *ngIf=\"displayedDate\">{{ displayedDate }}</span>\n", styles: [":host{position:relative;display:grid;width:100%;padding:.5rem 1.5rem .5rem .75rem;border:rgb(213,213,213) solid .0625rem;margin-bottom:.75rem;background:#fff;font-size:.875rem;gap:.125rem .625rem;grid-template-columns:23px 1fr;line-height:1rem}:host .icon{font-size:1.5rem;grid-row:1/span 3;line-height:1.5rem}:host .title{margin:0!important;color:#171717;font-size:.875rem}:host .message{margin-top:.1875rem;color:#333;font-size:.875rem;white-space:pre-wrap}:host .title+.message{margin-top:0}:host .date{margin-top:.875rem;color:#333;font-size:.875rem}:host.qd-notification-info{border-left:.25rem solid rgb(0,102,153)}:host.qd-notification-info .icon{color:#069}:host.qd-notification-warning{border-left:.25rem solid rgb(255,155,0)}:host.qd-notification-warning .icon{color:#ff9b00}:host.qd-notification-critical{border-left:.25rem solid rgb(199,0,35)}:host.qd-notification-critical .icon{color:#c70023}:host.qd-notification-success{border-left:.25rem solid rgb(0,129,58)}:host.qd-notification-success .icon{color:#00813a}:host .closer{position:absolute;top:.5rem;right:.75rem;color:#333;cursor:pointer;font-size:.75rem}\n"] }]
31419
- }], ctorParameters: () => [{ type: QdNotificationsService }, { type: i1$2.TranslateService, decorators: [{
31569
+ }], ctorParameters: () => [{ type: QdNotificationsService }, { type: i1$3.TranslateService, decorators: [{
31420
31570
  type: Optional
31421
31571
  }] }], propDecorators: { notification: [{
31422
31572
  type: Input
@@ -31436,7 +31586,7 @@ class QdShellNotificationsComponent {
31436
31586
  this.notifications$ = this.notificationService.getNotificationsForContext('shell');
31437
31587
  }
31438
31588
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellNotificationsComponent, deps: [{ token: QdNotificationsService }], target: i0.ɵɵFactoryTarget.Component });
31439
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellNotificationsComponent, isStandalone: false, selector: "qd-shell-notifications", ngImport: i0, template: "<qd-shell-notification\n *ngFor=\"let notification of notifications$ | async\"\n [notification]=\"notification\"\n></qd-shell-notification>\n<span *ngIf=\"(notifications$ | async).length === 0\" class=\"no-notifications-hint\">{{\n \"i18n.qd.notification.noNotificationsAvailable\" | translate\n}}</span>\n", styles: [":host .no-notifications-hint{display:block;color:#757575;font-size:.875rem;font-style:italic;text-align:center}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdShellNotificationComponent, selector: "qd-shell-notification", inputs: ["notification"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
31589
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellNotificationsComponent, isStandalone: false, selector: "qd-shell-notifications", ngImport: i0, template: "<qd-shell-notification\n *ngFor=\"let notification of notifications$ | async\"\n [notification]=\"notification\"\n></qd-shell-notification>\n<span *ngIf=\"(notifications$ | async).length === 0\" class=\"no-notifications-hint\">{{\n \"i18n.qd.notification.noNotificationsAvailable\" | translate\n}}</span>\n", styles: [":host .no-notifications-hint{display:block;color:#757575;font-size:.875rem;font-style:italic;text-align:center}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdShellNotificationComponent, selector: "qd-shell-notification", inputs: ["notification"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
31440
31590
  }
31441
31591
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellNotificationsComponent, decorators: [{
31442
31592
  type: Component,
@@ -31456,7 +31606,7 @@ class QdShellRightToolbarComponent {
31456
31606
  this.shellRightService.togglePinned();
31457
31607
  }
31458
31608
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellRightToolbarComponent, deps: [{ token: QdShellRightService }], target: i0.ɵɵFactoryTarget.Component });
31459
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellRightToolbarComponent, isStandalone: false, selector: "qd-shell-right-toolbar", inputs: { config: "config" }, ngImport: i0, template: "<span>{{ config?.shellRightTitle?.i18n | translate }}</span>\n<a class=\"pinner\" (click)=\"togglePinned()\"></a>\n<qd-icon class=\"closer\" icon=\"timesLarge\" (click)=\"close()\"></qd-icon>\n", styles: [":host{display:flex;align-items:flex-start;padding:.6875rem 1rem;border-bottom:.125rem solid rgb(213,213,213)}:host span{flex-grow:99;margin-right:.625rem;color:#171717;font-size:.875rem;font-weight:700;line-height:1.25rem}:host .pinner{display:inline-block;width:1rem;height:1rem;flex-shrink:0;margin-top:.125rem;background-image:url(data:image/svg+xml;base64,PHN2ZyBpZD0iaWNvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzIgMzIiPjxkZWZzPjxzdHlsZT5wYXRoe2ZpbGw6IzQ1NDU0NTt9LmNscy0xe2ZpbGw6bm9uZX08L3N0eWxlPjwvZGVmcz48dGl0bGU+cGluPC90aXRsZT48cGF0aCBkPSJNMjguNTksMTMuMzEsMzAsMTEuOSwyMCwyLDE4LjY5LDMuNDIsMTkuODcsNC42LDguMzgsMTQuMzIsNi42NiwxMi42MSw1LjI1LDE0bDUuNjYsNS42OEwyLDI4LjU4LDMuNDEsMzBsOC45MS04LjkxTDE4LDI2Ljc1bDEuMzktMS40Mi0xLjcxLTEuNzFMMjcuNCwxMi4xM1pNMTYuMjYsMjIuMiw5LjgsMTUuNzQsMjEuMjksNiwyNiwxMC43MVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDApIi8+PHJlY3QgaWQ9Il9UcmFuc3BhcmVudF9SZWN0YW5nbGVfIiBkYXRhLW5hbWU9IiZsdDtUcmFuc3BhcmVudCBSZWN0YW5nbGUmZ3Q7IiBjbGFzcz0iY2xzLTEiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIvPjwvc3ZnPg==);cursor:pointer}:host .pinner:hover{background-image:url(data:image/svg+xml;base64,PHN2ZyBpZD0iaWNvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzIgMzIiPjxkZWZzPjxzdHlsZT5wYXRoe2ZpbGw6IzE3MTcxNzt9LmNscy0xe2ZpbGw6bm9uZX08L3N0eWxlPjwvZGVmcz48dGl0bGU+cGluPC90aXRsZT48cGF0aCBkPSJNMjguNTksMTMuMzEsMzAsMTEuOSwyMCwyLDE4LjY5LDMuNDIsMTkuODcsNC42LDguMzgsMTQuMzIsNi42NiwxMi42MSw1LjI1LDE0bDUuNjYsNS42OEwyLDI4LjU4LDMuNDEsMzBsOC45MS04LjkxTDE4LDI2Ljc1bDEuMzktMS40Mi0xLjcxLTEuNzFMMjcuNCwxMi4xM1pNMTYuMjYsMjIuMiw5LjgsMTUuNzQsMjEuMjksNiwyNiwxMC43MVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDApIi8+PHJlY3QgaWQ9Il9UcmFuc3BhcmVudF9SZWN0YW5nbGVfIiBkYXRhLW5hbWU9IiZsdDtUcmFuc3BhcmVudCBSZWN0YW5nbGUmZ3Q7IiBjbGFzcz0iY2xzLTEiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIvPjwvc3ZnPg==)}:host .closer{margin-top:.125rem;margin-left:.5rem;color:#454545;cursor:pointer;font-size:.875rem}:host .closer:hover{color:#171717}\n"], dependencies: [{ kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] });
31609
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdShellRightToolbarComponent, isStandalone: false, selector: "qd-shell-right-toolbar", inputs: { config: "config" }, ngImport: i0, template: "<span>{{ config?.shellRightTitle?.i18n | translate }}</span>\n<a class=\"pinner\" (click)=\"togglePinned()\"></a>\n<qd-icon class=\"closer\" icon=\"timesLarge\" (click)=\"close()\"></qd-icon>\n", styles: [":host{display:flex;align-items:flex-start;padding:.6875rem 1rem;border-bottom:.125rem solid rgb(213,213,213)}:host span{flex-grow:99;margin-right:.625rem;color:#171717;font-size:.875rem;font-weight:700;line-height:1.25rem}:host .pinner{display:inline-block;width:1rem;height:1rem;flex-shrink:0;margin-top:.125rem;background-image:url(data:image/svg+xml;base64,PHN2ZyBpZD0iaWNvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzIgMzIiPjxkZWZzPjxzdHlsZT5wYXRoe2ZpbGw6IzQ1NDU0NTt9LmNscy0xe2ZpbGw6bm9uZX08L3N0eWxlPjwvZGVmcz48dGl0bGU+cGluPC90aXRsZT48cGF0aCBkPSJNMjguNTksMTMuMzEsMzAsMTEuOSwyMCwyLDE4LjY5LDMuNDIsMTkuODcsNC42LDguMzgsMTQuMzIsNi42NiwxMi42MSw1LjI1LDE0bDUuNjYsNS42OEwyLDI4LjU4LDMuNDEsMzBsOC45MS04LjkxTDE4LDI2Ljc1bDEuMzktMS40Mi0xLjcxLTEuNzFMMjcuNCwxMi4xM1pNMTYuMjYsMjIuMiw5LjgsMTUuNzQsMjEuMjksNiwyNiwxMC43MVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDApIi8+PHJlY3QgaWQ9Il9UcmFuc3BhcmVudF9SZWN0YW5nbGVfIiBkYXRhLW5hbWU9IiZsdDtUcmFuc3BhcmVudCBSZWN0YW5nbGUmZ3Q7IiBjbGFzcz0iY2xzLTEiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIvPjwvc3ZnPg==);cursor:pointer}:host .pinner:hover{background-image:url(data:image/svg+xml;base64,PHN2ZyBpZD0iaWNvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzIgMzIiPjxkZWZzPjxzdHlsZT5wYXRoe2ZpbGw6IzE3MTcxNzt9LmNscy0xe2ZpbGw6bm9uZX08L3N0eWxlPjwvZGVmcz48dGl0bGU+cGluPC90aXRsZT48cGF0aCBkPSJNMjguNTksMTMuMzEsMzAsMTEuOSwyMCwyLDE4LjY5LDMuNDIsMTkuODcsNC42LDguMzgsMTQuMzIsNi42NiwxMi42MSw1LjI1LDE0bDUuNjYsNS42OEwyLDI4LjU4LDMuNDEsMzBsOC45MS04LjkxTDE4LDI2Ljc1bDEuMzktMS40Mi0xLjcxLTEuNzFMMjcuNCwxMi4xM1pNMTYuMjYsMjIuMiw5LjgsMTUuNzQsMjEuMjksNiwyNiwxMC43MVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDApIi8+PHJlY3QgaWQ9Il9UcmFuc3BhcmVudF9SZWN0YW5nbGVfIiBkYXRhLW5hbWU9IiZsdDtUcmFuc3BhcmVudCBSZWN0YW5nbGUmZ3Q7IiBjbGFzcz0iY2xzLTEiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIvPjwvc3ZnPg==)}:host .closer{margin-top:.125rem;margin-left:.5rem;color:#454545;cursor:pointer;font-size:.875rem}:host .closer:hover{color:#171717}\n"], dependencies: [{ kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }] });
31460
31610
  }
31461
31611
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellRightToolbarComponent, decorators: [{
31462
31612
  type: Component,
@@ -31620,7 +31770,7 @@ class AddCommentDialogComponent {
31620
31770
  };
31621
31771
  }
31622
31772
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: AddCommentDialogComponent, deps: [{ token: i1$1.DialogRef }, { token: 'QdAuthenticationService', optional: true }], target: i0.ɵɵFactoryTarget.Component });
31623
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: AddCommentDialogComponent, isStandalone: false, selector: "qd-comment-dialog", ngImport: i0, template: "<qd-dialog>\n <form [formGroup]=\"form\">\n <qd-input [config]=\"authorInputConfig\"></qd-input>\n <qd-dropdown\n *ngIf=\"customInputConfig\"\n [config]=\"customInputConfig\"\n [formControlName]=\"'custom'\"\n [attr.data-test-id]=\"'comment-custom'\"\n ></qd-dropdown>\n\n <qd-richtext [config]=\"richtextConfig\" #commentText [formControlName]=\"'comment'\"> </qd-richtext>\n <div *ngIf=\"form.get('comment')?.touched && form.get('comment')?.errors as errors\">\n <div\n *ngFor=\"let errorKey of objectKeys(errors)\"\n [attr.data-test-id]=\"'comment-validation-' + errorKey\"\n class=\"validation-message\"\n >\n {{ errors[errorKey] | translate }}\n </div>\n </div>\n </form>\n <qd-dialog-action>\n <button qdButton qdButtonGhost color=\"secondary\" (click)=\"close()\" [data-test-id]=\"'button-cancel'\">\n {{ \"i18n.qd.comments.add.dialog.cancel\" | translate }}\n </button>\n <button\n [disabled]=\"!commentText.value || commentText.hasError\"\n qdButton\n (click)=\"close('Yes')\"\n [data-test-id]=\"'button-submit'\"\n >\n {{ \"i18n.qd.comments.add.dialog.submit\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", styles: [".validation-message{margin-top:4px;color:red;font-size:.875em}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdDropdownComponent, selector: "qd-dropdown", inputs: ["value", "id", "formControlName", "config", "data-test-id", "qdPopoverMaxHeight", "dense"], outputs: ["valueChange", "enterClick", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdInputComponent, selector: "qd-input", inputs: ["formControlName", "value", "config", "isError", "data-test-id"], outputs: ["valueChange", "enterClick", "clickClear", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdRichtextComponent, selector: "qd-richtext", inputs: ["formControlName", "value", "config", "data-test-id"], outputs: ["valueChange", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
31773
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: AddCommentDialogComponent, isStandalone: false, selector: "qd-comment-dialog", ngImport: i0, template: "<qd-dialog>\n <form [formGroup]=\"form\">\n <qd-input [config]=\"authorInputConfig\"></qd-input>\n <qd-dropdown\n *ngIf=\"customInputConfig\"\n [config]=\"customInputConfig\"\n [formControlName]=\"'custom'\"\n [attr.data-test-id]=\"'comment-custom'\"\n ></qd-dropdown>\n\n <qd-richtext [config]=\"richtextConfig\" #commentText [formControlName]=\"'comment'\"> </qd-richtext>\n <div *ngIf=\"form.get('comment')?.touched && form.get('comment')?.errors as errors\">\n <div\n *ngFor=\"let errorKey of objectKeys(errors)\"\n [attr.data-test-id]=\"'comment-validation-' + errorKey\"\n class=\"validation-message\"\n >\n {{ errors[errorKey] | translate }}\n </div>\n </div>\n </form>\n <qd-dialog-action>\n <button qdButton qdButtonGhost color=\"secondary\" (click)=\"close()\" [data-test-id]=\"'button-cancel'\">\n {{ \"i18n.qd.comments.add.dialog.cancel\" | translate }}\n </button>\n <button\n [disabled]=\"!commentText.value || commentText.hasError\"\n qdButton\n (click)=\"close('Yes')\"\n [data-test-id]=\"'button-submit'\"\n >\n {{ \"i18n.qd.comments.add.dialog.submit\" | translate }}\n </button>\n </qd-dialog-action>\n</qd-dialog>\n", styles: [".validation-message{margin-top:4px;color:red;font-size:.875em}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdDropdownComponent, selector: "qd-dropdown", inputs: ["value", "id", "formControlName", "config", "data-test-id", "qdPopoverMaxHeight", "dense"], outputs: ["valueChange", "enterClick", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdInputComponent, selector: "qd-input", inputs: ["formControlName", "value", "config", "isError", "data-test-id"], outputs: ["valueChange", "enterClick", "clickClear", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdRichtextComponent, selector: "qd-richtext", inputs: ["formControlName", "value", "config", "data-test-id"], outputs: ["valueChange", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdDialogActionComponent, selector: "qd-dialog-action" }, { kind: "component", type: QdDialogComponent, selector: "qd-dialog" }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
31624
31774
  }
31625
31775
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: AddCommentDialogComponent, decorators: [{
31626
31776
  type: Component,
@@ -31636,7 +31786,7 @@ class QdCommentMenuComponent {
31636
31786
  menuActions;
31637
31787
  comment;
31638
31788
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCommentMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31639
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdCommentMenuComponent, isStandalone: false, selector: "qd-comment-menu", inputs: { menuActions: "menuActions", comment: "comment" }, ngImport: i0, template: "<button *ngFor=\"let action of menuActions\" (click)=\"action.handler(comment)\">\n {{ action.i18n | translate }}\n</button>\n", styles: ["button{display:block;width:100%;min-height:2rem;padding:0 1rem;background:#fff0;font-size:.75rem;text-align:left}button:hover{background-color:#f2f7fa}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
31789
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdCommentMenuComponent, isStandalone: false, selector: "qd-comment-menu", inputs: { menuActions: "menuActions", comment: "comment" }, ngImport: i0, template: "<button *ngFor=\"let action of menuActions\" (click)=\"action.handler(comment)\">\n {{ action.i18n | translate }}\n</button>\n", styles: ["button{display:block;width:100%;min-height:2rem;padding:0 1rem;background:#fff0;font-size:.75rem;text-align:left}button:hover{background-color:#f2f7fa}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
31640
31790
  }
31641
31791
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCommentMenuComponent, decorators: [{
31642
31792
  type: Component,
@@ -31691,13 +31841,13 @@ class QdCommentsComponent {
31691
31841
  title: { i18n: 'i18n.qd.comments.add.dialog.title' }
31692
31842
  });
31693
31843
  }
31694
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCommentsComponent, deps: [{ token: i1$2.TranslateService }, { token: QdDialogService }], target: i0.ɵɵFactoryTarget.Component });
31695
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdCommentsComponent, isStandalone: false, selector: "qd-comments", inputs: { config: "config", comments: "comments" }, ngImport: i0, template: "<div class=\"comments-list\">\n <div class=\"add-button-area\">\n <button\n qdButton\n qdButtonGhost\n color=\"primary\"\n (click)=\"addNew()\"\n [disabled]=\"config.addConfig?.addButton?.disabled ?? false\"\n >\n <qd-icon icon=\"plusLarge\" class=\"plus-icon\"></qd-icon>\n {{ config.addConfig?.addButton?.i18n | translate }}\n </button>\n </div>\n\n <ng-container *ngFor=\"let comment of commentList\">\n <div\n class=\"comment\"\n (click)=\"clickComment(comment)\"\n [class.hasAction]=\"this.config.primaryActionHandler !== undefined\"\n >\n <div class=\"comment-header\">\n <div>\n <span class=\"comment-author\"><b> {{ comment.author }} </b></span>\n <span class=\"comment-custom\"> {{ comment.custom?.listDisplayName?.i18n ?\n ' - ' + (comment.custom.listDisplayName.i18n | translate) : '' }} </span>\n <span class=\"comment-date\"> {{ \" - \" + formatDate(comment.date) }} </span>\n </div>\n <button\n *ngIf=\"config.secondaryActions?.length > 0\"\n type=\"button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n class=\"menu-button\"\n >\n <qd-icon icon=\"overflowMenuVertical\"></qd-icon>\n </button>\n </div>\n <div class=\"deleted-meta\" *ngIf=\"comment?.deletedMeta\">\n <b>{{ comment.deletedMeta.deletedBy }}</b> -\n {{ (comment.deletedMeta.custom?.listDisplayName.i18n) ?\n (comment.deletedMeta.custom.listDisplayName.i18n | translate) + ' -': '' }}\n {{ \"i18n.qd.comments.delete.deleted\" | translate | placeholder : \"deleteDate\" :\n (formatDate(comment.deletedMeta.date)) }}\n\n </div>\n <div\n class=\"comment-content\"\n [style.text-decoration]=\"comment.deletedMeta ? 'line-through' : ''\"\n [style.-webkit-line-clamp]=\"config.numberOfDisplayedRows || 10\"\n >\n <span [innerHTML]=\"comment.comment\"></span>\n </div>\n </div>\n\n <ng-template #menu>\n <qd-comment-menu [menuActions]=\"config.secondaryActions\" [comment]=\"comment\"></qd-comment-menu>\n </ng-template>\n </ng-container>\n</div>\n", styles: [".comments-list{font-size:.875rem}.comments-list .add-button-area{display:flex;justify-content:flex-end;padding:.5rem 1rem;border-bottom:.0625rem solid rgb(213,213,213);margin-bottom:.5rem}.comments-list .add-button-area .qd-button-primary{padding:0 .5625rem;white-space:nowrap}.comments-list .add-button-area .qd-button-primary .plus-icon{padding-right:.5rem}.comments-list .comment{padding:.5rem .4375rem .5rem 1rem}.comments-list .comment.hasAction{cursor:pointer}.comments-list .comment.hasAction:hover{background-color:#f2f7fa}.comments-list .comment .comment-header{display:flex;justify-content:space-between;padding-bottom:.1875rem}.comments-list .comment .comment-header div{align-self:center}.comments-list .comment .comment-header .menu-button{background:unset;color:#454545;font-size:1rem}.comments-list .comment .comment-header .menu-button:hover,.comments-list .comment .comment-header .menu-button:focus{color:#000}.comments-list .comment .deleted-meta{margin-bottom:.5rem;color:#c70023}.comments-list .comment .comment-content{display:-webkit-box;overflow:hidden;padding-right:.5rem;-webkit-box-orient:vertical;color:#757575;-webkit-line-clamp:10}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdCommentMenuComponent, selector: "qd-comment-menu", inputs: ["menuActions", "comment"] }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "pipe", type: QdPlaceholderPipe, name: "placeholder" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
31844
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCommentsComponent, deps: [{ token: i1$3.TranslateService }, { token: QdDialogService }], target: i0.ɵɵFactoryTarget.Component });
31845
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdCommentsComponent, isStandalone: false, selector: "qd-comments", inputs: { config: "config", comments: "comments" }, ngImport: i0, template: "<div class=\"comments-list\">\n <div class=\"add-button-area\">\n <button\n qdButton\n qdButtonGhost\n color=\"primary\"\n (click)=\"addNew()\"\n [disabled]=\"config.addConfig?.addButton?.disabled ?? false\"\n >\n <qd-icon icon=\"plusLarge\" class=\"plus-icon\"></qd-icon>\n {{ config.addConfig?.addButton?.i18n | translate }}\n </button>\n </div>\n\n <ng-container *ngFor=\"let comment of commentList\">\n <div\n class=\"comment\"\n (click)=\"clickComment(comment)\"\n [class.hasAction]=\"this.config.primaryActionHandler !== undefined\"\n >\n <div class=\"comment-header\">\n <div>\n <span class=\"comment-author\"\n ><b> {{ comment.author }} </b></span\n >\n <span class=\"comment-custom\">\n {{ comment.custom?.listDisplayName?.i18n ? \" - \" + (comment.custom.listDisplayName.i18n | translate) : \"\" }}\n </span>\n <span class=\"comment-date\"> {{ \" - \" + formatDate(comment.date) }} </span>\n </div>\n <button\n *ngIf=\"config.secondaryActions?.length > 0\"\n type=\"button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n class=\"menu-button\"\n >\n <qd-icon icon=\"overflowMenuVertical\"></qd-icon>\n </button>\n </div>\n <div class=\"deleted-meta\" *ngIf=\"comment?.deletedMeta\">\n <b>{{ comment.deletedMeta.deletedBy }}</b> -\n {{\n comment.deletedMeta.custom?.listDisplayName.i18n\n ? (comment.deletedMeta.custom.listDisplayName.i18n | translate) + \" -\"\n : \"\"\n }}\n {{\n \"i18n.qd.comments.delete.deleted\"\n | translate\n | placeholder : \"deleteDate\" : formatDate(comment.deletedMeta.date)\n }}\n </div>\n <div\n class=\"comment-content\"\n [style.text-decoration]=\"comment.deletedMeta ? 'line-through' : ''\"\n [style.-webkit-line-clamp]=\"config.numberOfDisplayedRows || 10\"\n >\n <span [innerHTML]=\"comment.comment\"></span>\n </div>\n </div>\n\n <ng-template #menu>\n <qd-comment-menu [menuActions]=\"config.secondaryActions\" [comment]=\"comment\"></qd-comment-menu>\n </ng-template>\n </ng-container>\n</div>\n", styles: [".comments-list{font-size:.875rem}.comments-list .add-button-area{display:flex;justify-content:flex-end;padding:.5rem 1rem;border-bottom:.0625rem solid rgb(213,213,213);margin-bottom:.5rem}.comments-list .add-button-area .qd-button-primary{padding:0 .5625rem;white-space:nowrap}.comments-list .add-button-area .qd-button-primary .plus-icon{padding-right:.5rem}.comments-list .comment{padding:.5rem .4375rem .5rem 1rem}.comments-list .comment.hasAction{cursor:pointer}.comments-list .comment.hasAction:hover{background-color:#f2f7fa}.comments-list .comment .comment-header{display:flex;justify-content:space-between;padding-bottom:.1875rem}.comments-list .comment .comment-header div{align-self:center}.comments-list .comment .comment-header .menu-button{background:unset;color:#454545;font-size:1rem}.comments-list .comment .comment-header .menu-button:hover,.comments-list .comment .comment-header .menu-button:focus{color:#000}.comments-list .comment .deleted-meta{margin-bottom:.5rem;color:#c70023}.comments-list .comment .comment-content{display:-webkit-box;overflow:hidden;padding-right:.5rem;-webkit-box-orient:vertical;color:#757575;-webkit-line-clamp:10}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "component", type: QdCommentMenuComponent, selector: "qd-comment-menu", inputs: ["menuActions", "comment"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }, { kind: "pipe", type: QdPlaceholderPipe, name: "placeholder" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
31696
31846
  }
31697
31847
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdCommentsComponent, decorators: [{
31698
31848
  type: Component,
31699
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'qd-comments', standalone: false, template: "<div class=\"comments-list\">\n <div class=\"add-button-area\">\n <button\n qdButton\n qdButtonGhost\n color=\"primary\"\n (click)=\"addNew()\"\n [disabled]=\"config.addConfig?.addButton?.disabled ?? false\"\n >\n <qd-icon icon=\"plusLarge\" class=\"plus-icon\"></qd-icon>\n {{ config.addConfig?.addButton?.i18n | translate }}\n </button>\n </div>\n\n <ng-container *ngFor=\"let comment of commentList\">\n <div\n class=\"comment\"\n (click)=\"clickComment(comment)\"\n [class.hasAction]=\"this.config.primaryActionHandler !== undefined\"\n >\n <div class=\"comment-header\">\n <div>\n <span class=\"comment-author\"><b> {{ comment.author }} </b></span>\n <span class=\"comment-custom\"> {{ comment.custom?.listDisplayName?.i18n ?\n ' - ' + (comment.custom.listDisplayName.i18n | translate) : '' }} </span>\n <span class=\"comment-date\"> {{ \" - \" + formatDate(comment.date) }} </span>\n </div>\n <button\n *ngIf=\"config.secondaryActions?.length > 0\"\n type=\"button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n class=\"menu-button\"\n >\n <qd-icon icon=\"overflowMenuVertical\"></qd-icon>\n </button>\n </div>\n <div class=\"deleted-meta\" *ngIf=\"comment?.deletedMeta\">\n <b>{{ comment.deletedMeta.deletedBy }}</b> -\n {{ (comment.deletedMeta.custom?.listDisplayName.i18n) ?\n (comment.deletedMeta.custom.listDisplayName.i18n | translate) + ' -': '' }}\n {{ \"i18n.qd.comments.delete.deleted\" | translate | placeholder : \"deleteDate\" :\n (formatDate(comment.deletedMeta.date)) }}\n\n </div>\n <div\n class=\"comment-content\"\n [style.text-decoration]=\"comment.deletedMeta ? 'line-through' : ''\"\n [style.-webkit-line-clamp]=\"config.numberOfDisplayedRows || 10\"\n >\n <span [innerHTML]=\"comment.comment\"></span>\n </div>\n </div>\n\n <ng-template #menu>\n <qd-comment-menu [menuActions]=\"config.secondaryActions\" [comment]=\"comment\"></qd-comment-menu>\n </ng-template>\n </ng-container>\n</div>\n", styles: [".comments-list{font-size:.875rem}.comments-list .add-button-area{display:flex;justify-content:flex-end;padding:.5rem 1rem;border-bottom:.0625rem solid rgb(213,213,213);margin-bottom:.5rem}.comments-list .add-button-area .qd-button-primary{padding:0 .5625rem;white-space:nowrap}.comments-list .add-button-area .qd-button-primary .plus-icon{padding-right:.5rem}.comments-list .comment{padding:.5rem .4375rem .5rem 1rem}.comments-list .comment.hasAction{cursor:pointer}.comments-list .comment.hasAction:hover{background-color:#f2f7fa}.comments-list .comment .comment-header{display:flex;justify-content:space-between;padding-bottom:.1875rem}.comments-list .comment .comment-header div{align-self:center}.comments-list .comment .comment-header .menu-button{background:unset;color:#454545;font-size:1rem}.comments-list .comment .comment-header .menu-button:hover,.comments-list .comment .comment-header .menu-button:focus{color:#000}.comments-list .comment .deleted-meta{margin-bottom:.5rem;color:#c70023}.comments-list .comment .comment-content{display:-webkit-box;overflow:hidden;padding-right:.5rem;-webkit-box-orient:vertical;color:#757575;-webkit-line-clamp:10}\n"] }]
31700
- }], ctorParameters: () => [{ type: i1$2.TranslateService }, { type: QdDialogService }], propDecorators: { config: [{
31849
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'qd-comments', standalone: false, template: "<div class=\"comments-list\">\n <div class=\"add-button-area\">\n <button\n qdButton\n qdButtonGhost\n color=\"primary\"\n (click)=\"addNew()\"\n [disabled]=\"config.addConfig?.addButton?.disabled ?? false\"\n >\n <qd-icon icon=\"plusLarge\" class=\"plus-icon\"></qd-icon>\n {{ config.addConfig?.addButton?.i18n | translate }}\n </button>\n </div>\n\n <ng-container *ngFor=\"let comment of commentList\">\n <div\n class=\"comment\"\n (click)=\"clickComment(comment)\"\n [class.hasAction]=\"this.config.primaryActionHandler !== undefined\"\n >\n <div class=\"comment-header\">\n <div>\n <span class=\"comment-author\"\n ><b> {{ comment.author }} </b></span\n >\n <span class=\"comment-custom\">\n {{ comment.custom?.listDisplayName?.i18n ? \" - \" + (comment.custom.listDisplayName.i18n | translate) : \"\" }}\n </span>\n <span class=\"comment-date\"> {{ \" - \" + formatDate(comment.date) }} </span>\n </div>\n <button\n *ngIf=\"config.secondaryActions?.length > 0\"\n type=\"button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n class=\"menu-button\"\n >\n <qd-icon icon=\"overflowMenuVertical\"></qd-icon>\n </button>\n </div>\n <div class=\"deleted-meta\" *ngIf=\"comment?.deletedMeta\">\n <b>{{ comment.deletedMeta.deletedBy }}</b> -\n {{\n comment.deletedMeta.custom?.listDisplayName.i18n\n ? (comment.deletedMeta.custom.listDisplayName.i18n | translate) + \" -\"\n : \"\"\n }}\n {{\n \"i18n.qd.comments.delete.deleted\"\n | translate\n | placeholder : \"deleteDate\" : formatDate(comment.deletedMeta.date)\n }}\n </div>\n <div\n class=\"comment-content\"\n [style.text-decoration]=\"comment.deletedMeta ? 'line-through' : ''\"\n [style.-webkit-line-clamp]=\"config.numberOfDisplayedRows || 10\"\n >\n <span [innerHTML]=\"comment.comment\"></span>\n </div>\n </div>\n\n <ng-template #menu>\n <qd-comment-menu [menuActions]=\"config.secondaryActions\" [comment]=\"comment\"></qd-comment-menu>\n </ng-template>\n </ng-container>\n</div>\n", styles: [".comments-list{font-size:.875rem}.comments-list .add-button-area{display:flex;justify-content:flex-end;padding:.5rem 1rem;border-bottom:.0625rem solid rgb(213,213,213);margin-bottom:.5rem}.comments-list .add-button-area .qd-button-primary{padding:0 .5625rem;white-space:nowrap}.comments-list .add-button-area .qd-button-primary .plus-icon{padding-right:.5rem}.comments-list .comment{padding:.5rem .4375rem .5rem 1rem}.comments-list .comment.hasAction{cursor:pointer}.comments-list .comment.hasAction:hover{background-color:#f2f7fa}.comments-list .comment .comment-header{display:flex;justify-content:space-between;padding-bottom:.1875rem}.comments-list .comment .comment-header div{align-self:center}.comments-list .comment .comment-header .menu-button{background:unset;color:#454545;font-size:1rem}.comments-list .comment .comment-header .menu-button:hover,.comments-list .comment .comment-header .menu-button:focus{color:#000}.comments-list .comment .deleted-meta{margin-bottom:.5rem;color:#c70023}.comments-list .comment .comment-content{display:-webkit-box;overflow:hidden;padding-right:.5rem;-webkit-box-orient:vertical;color:#757575;-webkit-line-clamp:10}\n"] }]
31850
+ }], ctorParameters: () => [{ type: i1$3.TranslateService }, { type: QdDialogService }], propDecorators: { config: [{
31701
31851
  type: Input,
31702
31852
  args: [{ required: true }]
31703
31853
  }], comments: [{
@@ -31862,7 +32012,7 @@ class QdShellComponent {
31862
32012
  QdShellLeftService,
31863
32013
  QdShellRightService,
31864
32014
  { provide: 'rwdLayout', useValue: { hasLegacyLayout: false } }
31865
- ], queries: [{ propertyName: "commentsComponent", predicate: QdCommentsComponent }], viewQueries: [{ propertyName: "shellHeaderComponent", first: true, predicate: QdShellHeaderComponent, descendants: true }], ngImport: i0, template: "<div\n [ngClass]=\"{\n 'qd-shell': true,\n 'has-navigation': hasNavigation$ | async,\n 'left-pinned': isNavigationPinned$ | async,\n 'left-rolled-over': isNavigationRolledOver$ | async,\n 'shell-right-open': isShellRightOpen$ | async,\n 'shell-right-pinned': isShellRightPinned$ | async\n }\"\n>\n <header\n qd-shell-header\n [config]=\"config\"\n [isMinimized]=\"(isMinimized$ | async) ?? true\"\n [isCommentsUsed]=\"commentsComponent.length > 0\"\n [hasComments]=\"commentsComponent.get(0)?.hasComments$ | async\"\n ></header>\n\n <aside\n qd-shell-left\n *ngIf=\"hasNavigation$ | async\"\n [ngClass]=\"{ pinned: isNavigationPinned$ | async, 'rolled-over': isNavigationRolledOver$ | async }\"\n >\n <qd-shell-navigation [config]=\"config.navigation\"></qd-shell-navigation>\n </aside>\n\n <main [ngClass]=\"{ faded: isFaded$ | async }\">\n <router-outlet (activate)=\"handleRouterOutletActivation($event)\"></router-outlet>\n </main>\n\n <aside\n qd-shell-right\n *ngIf=\"isShellRightOpen$ | async\"\n [config]=\"config\"\n [ngClass]=\"{\n pinned: isShellRightPinned$ | async\n }\"\n >\n <!-- TODO: Remove in v17! -->\n <ng-container *ngIf=\"commentsComponent.length > 0 && shellHeaderComponent.isCommentsDisplayed\"\n ><ng-content select=\"qd-comments\"></ng-content\n ></ng-container>\n\n <qd-shell-notifications *ngIf=\"!shellHeaderComponent.isCommentsDisplayed\"></qd-shell-notifications>\n </aside>\n\n <footer\n qd-shell-footer\n [copyrightInfo]=\"config.copyrightInfo\"\n [isSticky]=\"config.isFooterSticky\"\n *ngIf=\"isHome$ | async\"\n ></footer>\n</div>\n", styles: [":host{display:block}:host .qd-shell{display:grid;min-height:100vh;background-color:#efefef;grid-template-areas:\"header\" \"main\" \"footer\";grid-template-rows:auto 1fr auto}:host .qd-shell.has-navigation{grid-template-areas:\"header header\" \"aside-left main\" \"footer footer\";grid-template-columns:3rem 1fr;transition:grid-template-columns .3s linear}:host .qd-shell.has-navigation.shell-right-open{grid-template-areas:\"header header header\" \"aside-left main aside-right\" \"footer footer footer\";grid-template-columns:3rem 1fr 0}:host .qd-shell.has-navigation.shell-right-open.shell-right-pinned{grid-template-columns:3rem 1fr 0}:host .qd-shell.has-navigation.shell-right-open.shell-right-pinned main{margin-right:18.75rem}:host .qd-shell.has-navigation.left-pinned{grid-template-columns:18.75rem 1fr}:host .qd-shell.has-navigation.left-pinned.shell-right-open{grid-template-columns:18.75rem 1fr 0}:host .qd-shell.has-navigation.left-pinned.shell-right-open.shell-right-pinned{grid-template-columns:18.75rem 1fr 0}:host .qd-shell.has-navigation.left-pinned.shell-right-open.shell-right-pinned main{margin-right:18.75rem}:host .qd-shell:not(.has-navigation).shell-right-open{grid-template-areas:\"header header\" \"main aside-right\" \"footer footer\";grid-template-columns:1fr 0}:host .qd-shell:not(.has-navigation).shell-right-open.shell-right-pinned{grid-template-columns:1fr 0}:host .qd-shell:not(.has-navigation).shell-right-open.shell-right-pinned main{margin-right:18.75rem}:host .qd-shell ::ng-deep qd-container:not(:last-of-type){border-bottom:rgb(213,213,213) solid .0625rem}:host main{position:relative}:host main.faded:after{position:absolute;z-index:1400;background:#000;content:\"\";inset:0;opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: QdShellFooterComponent, selector: "[qd-shell-footer]", inputs: ["copyrightInfo", "isSticky"] }, { kind: "component", type: QdShellHeaderComponent, selector: "[qd-shell-header]", inputs: ["config", "isMinimized", "isCommentsUsed", "hasComments"], outputs: ["menuIconChange"] }, { kind: "component", type: QdShellLeftComponent, selector: "[qd-shell-left]", inputs: ["navigationTemplateRef"] }, { kind: "component", type: QdShellRightComponent, selector: "[qd-shell-right]", inputs: ["config"] }, { kind: "component", type: QdShellNotificationsComponent, selector: "qd-shell-notifications" }, { kind: "component", type: QdShellNavigationComponent, selector: "qd-shell-navigation", inputs: ["config"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
32015
+ ], queries: [{ propertyName: "commentsComponent", predicate: QdCommentsComponent }], viewQueries: [{ propertyName: "shellHeaderComponent", first: true, predicate: QdShellHeaderComponent, descendants: true }], ngImport: i0, template: "<div\n [ngClass]=\"{\n 'qd-shell': true,\n 'has-navigation': hasNavigation$ | async,\n 'left-pinned': isNavigationPinned$ | async,\n 'left-rolled-over': isNavigationRolledOver$ | async,\n 'shell-right-open': isShellRightOpen$ | async,\n 'shell-right-pinned': isShellRightPinned$ | async\n }\"\n>\n <header\n qd-shell-header\n [config]=\"config\"\n [isMinimized]=\"(isMinimized$ | async) ?? true\"\n [isCommentsUsed]=\"commentsComponent.length > 0\"\n [hasComments]=\"commentsComponent.get(0)?.hasComments$ | async\"\n ></header>\n\n <aside\n qd-shell-left\n *ngIf=\"hasNavigation$ | async\"\n [ngClass]=\"{ pinned: isNavigationPinned$ | async, 'rolled-over': isNavigationRolledOver$ | async }\"\n >\n <qd-shell-navigation [config]=\"config.navigation\"></qd-shell-navigation>\n </aside>\n\n <main [ngClass]=\"{ faded: isFaded$ | async }\">\n <router-outlet (activate)=\"handleRouterOutletActivation($event)\"></router-outlet>\n </main>\n\n <aside\n qd-shell-right\n *ngIf=\"isShellRightOpen$ | async\"\n [config]=\"config\"\n [ngClass]=\"{\n pinned: isShellRightPinned$ | async\n }\"\n >\n <!-- TODO: Remove in v17! -->\n <ng-container *ngIf=\"commentsComponent.length > 0 && shellHeaderComponent.isCommentsDisplayed\"\n ><ng-content select=\"qd-comments\"></ng-content\n ></ng-container>\n\n <qd-shell-notifications *ngIf=\"!shellHeaderComponent.isCommentsDisplayed\"></qd-shell-notifications>\n </aside>\n\n <footer\n qd-shell-footer\n [copyrightInfo]=\"config.copyrightInfo\"\n [isSticky]=\"config.isFooterSticky\"\n *ngIf=\"isHome$ | async\"\n ></footer>\n</div>\n", styles: [":host{display:block}:host .qd-shell{display:grid;min-height:100vh;background-color:#efefef;grid-template-areas:\"header\" \"main\" \"footer\";grid-template-rows:auto 1fr auto}:host .qd-shell.has-navigation{grid-template-areas:\"header header\" \"aside-left main\" \"footer footer\";grid-template-columns:3rem 1fr;transition:grid-template-columns .3s linear}:host .qd-shell.has-navigation.shell-right-open{grid-template-areas:\"header header header\" \"aside-left main aside-right\" \"footer footer footer\";grid-template-columns:3rem 1fr 0}:host .qd-shell.has-navigation.shell-right-open.shell-right-pinned{grid-template-columns:3rem 1fr 0}:host .qd-shell.has-navigation.shell-right-open.shell-right-pinned main{margin-right:18.75rem}:host .qd-shell.has-navigation.left-pinned{grid-template-columns:18.75rem 1fr}:host .qd-shell.has-navigation.left-pinned.shell-right-open{grid-template-columns:18.75rem 1fr 0}:host .qd-shell.has-navigation.left-pinned.shell-right-open.shell-right-pinned{grid-template-columns:18.75rem 1fr 0}:host .qd-shell.has-navigation.left-pinned.shell-right-open.shell-right-pinned main{margin-right:18.75rem}:host .qd-shell:not(.has-navigation).shell-right-open{grid-template-areas:\"header header\" \"main aside-right\" \"footer footer\";grid-template-columns:1fr 0}:host .qd-shell:not(.has-navigation).shell-right-open.shell-right-pinned{grid-template-columns:1fr 0}:host .qd-shell:not(.has-navigation).shell-right-open.shell-right-pinned main{margin-right:18.75rem}:host .qd-shell ::ng-deep qd-container:not(:last-of-type){border-bottom:rgb(213,213,213) solid .0625rem}:host main{position:relative}:host main.faded:after{position:absolute;z-index:1400;background:#000;content:\"\";inset:0;opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: QdShellFooterComponent, selector: "[qd-shell-footer]", inputs: ["copyrightInfo", "isSticky"] }, { kind: "component", type: QdShellHeaderComponent, selector: "[qd-shell-header]", inputs: ["config", "isMinimized", "isCommentsUsed", "hasComments"], outputs: ["menuIconChange"] }, { kind: "component", type: QdShellLeftComponent, selector: "[qd-shell-left]", inputs: ["navigationTemplateRef"] }, { kind: "component", type: QdShellRightComponent, selector: "[qd-shell-right]", inputs: ["config"] }, { kind: "component", type: QdShellNotificationsComponent, selector: "qd-shell-notifications" }, { kind: "component", type: QdShellNavigationComponent, selector: "qd-shell-navigation", inputs: ["config"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
31866
32016
  }
31867
32017
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdShellComponent, decorators: [{
31868
32018
  type: Component,
@@ -32339,7 +32489,7 @@ class QdPageStepComponent extends CdkStep {
32339
32489
  if (!this.config?.label?.i18n)
32340
32490
  console.error('QD-UI | QdPageStepComponent - Please provide a label for the step.');
32341
32491
  }
32342
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageStepComponent, deps: [{ token: i1$2.TranslateService }, { token: forwardRef(() => QdPageStepperComponent) }, { token: STEPPER_GLOBAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
32492
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageStepComponent, deps: [{ token: i1$3.TranslateService }, { token: forwardRef(() => QdPageStepperComponent) }, { token: STEPPER_GLOBAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
32343
32493
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageStepComponent, isStandalone: true, selector: "qd-page-step", inputs: { config: "config", control: "control" }, host: { classAttribute: "qd-stepper" }, providers: [
32344
32494
  { provide: CdkStep, useExisting: QdPageStepComponent },
32345
32495
  { provide: STEPPER_GLOBAL_OPTIONS, useValue: { showError: true } }
@@ -32351,7 +32501,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
32351
32501
  { provide: CdkStep, useExisting: QdPageStepComponent },
32352
32502
  { provide: STEPPER_GLOBAL_OPTIONS, useValue: { showError: true } }
32353
32503
  ], host: { class: 'qd-stepper' }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template>\n <div [class.has-info-banners]=\"infoBanners.length > 0\">\n <ng-content select=\"qd-page-info-banner\"></ng-content>\n </div>\n\n <ng-content></ng-content>\n</ng-template>\n", styles: [".has-info-banners{padding:1rem 1.25rem .5rem;border-bottom:rgb(213,213,213) solid .0625rem;background-color:#fff}.has-info-banners qd-page-info-banner:last-child{margin-bottom:0}\n"] }]
32354
- }], ctorParameters: () => [{ type: i1$2.TranslateService }, { type: QdPageStepperComponent, decorators: [{
32504
+ }], ctorParameters: () => [{ type: i1$3.TranslateService }, { type: QdPageStepperComponent, decorators: [{
32355
32505
  type: Inject,
32356
32506
  args: [forwardRef(() => QdPageStepperComponent)]
32357
32507
  }] }, { type: undefined, decorators: [{
@@ -32456,7 +32606,7 @@ class QdPageTabComponent extends CdkStep {
32456
32606
  if (!this.config?.label?.i18n)
32457
32607
  console.error('QD-UI | QdPageTabComponent - Please provide a label for the tab.');
32458
32608
  }
32459
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageTabComponent, deps: [{ token: i1$2.TranslateService }, { token: forwardRef(() => QdPageTabsComponent) }, { token: STEPPER_GLOBAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
32609
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdPageTabComponent, deps: [{ token: i1$3.TranslateService }, { token: forwardRef(() => QdPageTabsComponent) }, { token: STEPPER_GLOBAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
32460
32610
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdPageTabComponent, isStandalone: true, selector: "qd-page-tab", inputs: { config: "config", tabControl: "tabControl" }, providers: [
32461
32611
  { provide: CdkStep, useExisting: QdPageTabComponent },
32462
32612
  { provide: STEPPER_GLOBAL_OPTIONS, useValue: { showError: true } }
@@ -32469,7 +32619,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
32469
32619
  { provide: STEPPER_GLOBAL_OPTIONS, useValue: { showError: true } }
32470
32620
  ], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true // inherited by CdkStep
32471
32621
  , template: "<ng-template>\n <div [class.has-info-banners]=\"infoBanners.length > 0\">\n <ng-content select=\"qd-page-info-banner\"></ng-content>\n </div>\n\n <ng-content></ng-content>\n</ng-template>\n", styles: [".has-info-banners{padding:1rem 1.25rem .5rem;border-bottom:rgb(213,213,213) solid .0625rem;background-color:#fff}.has-info-banners qd-page-info-banner:last-child{margin-bottom:0}\n"] }]
32472
- }], ctorParameters: () => [{ type: i1$2.TranslateService }, { type: QdPageTabsComponent, decorators: [{
32622
+ }], ctorParameters: () => [{ type: i1$3.TranslateService }, { type: QdPageTabsComponent, decorators: [{
32473
32623
  type: Inject,
32474
32624
  args: [forwardRef(() => QdPageTabsComponent)]
32475
32625
  }] }, { type: undefined, decorators: [{
@@ -32936,7 +33086,7 @@ class QdQuickEditComponent {
32936
33086
  .subscribe();
32937
33087
  }
32938
33088
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdQuickEditComponent, deps: [{ token: i1$4.FormBuilder }, { token: QdPageFooterService, optional: true }, { token: QdPageStoreService, optional: true }, { token: QdSectionToolbarActionService, optional: true }, { token: QdEventBrokerService, optional: true }, { token: i0.ChangeDetectorRef }, { token: i1$4.ControlContainer, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
32939
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdQuickEditComponent, isStandalone: false, selector: "qd-quick-edit", inputs: { config: "config", data: "data", testId: ["data-test-id", "testId"] }, outputs: { formGroupChange: "formGroupChange", addNewClicked: "addNewClicked" }, viewQueries: [{ propertyName: "customForDirective", first: true, predicate: QdCustomForDirective, descendants: true }, { propertyName: "focusables", predicate: QdFocusableDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"editable-actions\" *ngIf=\"showStandaloneCreate\">\n <button\n qdButton\n qdButtonGhost\n icon=\"plus\"\n (click)=\"createRow()\"\n [data-test-id]=\"testId + '-button-add-new'\"\n class=\"create-button-standalone\"\n >\n {{ config.standaloneCreateLabel?.i18n ?? \"i18n.qd.quick.edit.createButtonLabel\" | translate }}\n </button>\n</div>\n\n<div class=\"table\" [formGroup]=\"control\">\n <div class=\"table-header\" *ngIf=\"!config.canAdd || templateData.length > 0 || config.emptyStateView\">\n <div class=\"table-row\">\n <div class=\"table-cell\" *ngFor=\"let header of visibleColumns\">\n {{ header?.i18n | translate }}\n <qd-icon\n *ngIf=\"hasTooltip(header?.tooltip)\"\n icon=\"circleInfo\"\n class=\"additional-info\"\n qdTooltipOnClick\n [qdTooltipContent]=\"header?.tooltip?.content\"\n ></qd-icon>\n </div>\n <div class=\"table-cell actions-column\" *ngIf=\"hasVisibleActions$ | async\">\n <button class=\"menu-button\">\n <qd-icon icon=\"overflowMenuHorizontal\"></qd-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"table-body\">\n <div\n class=\"table-row\"\n *qdCustomFor=\"let row of templateData; let rowIndex = index; toggler: togglerDrawing\"\n [formGroupName]=\"rowIndex\"\n >\n <ng-container *ngFor=\"let column of visibleColumns\">\n <div class=\"table-cell\">\n <qd-dropdown\n [config]=\"{\n filter: column.filter,\n options: column.options,\n placeholder: column.placeholder,\n placeholderPrefix: column.placeholderPrefix,\n viewonly: (viewonly$ | async) === true || !column.isEditable(row, column.name)\n }\"\n [data-test-id]=\"column.name + rowIndex\"\n *ngIf=\"column.type === 'enum'; else otherTypes\"\n [dense]=\"true\"\n [formControl]=\"$any(control.controls[rowIndex])?.controls[column.name]\"\n qdFocusable\n class=\"dropdown\"\n >\n </qd-dropdown>\n\n <ng-template #otherTypes>\n <qd-input\n [data-test-id]=\"column.name + rowIndex\"\n [formControlName]=\"column.name\"\n *ngIf=\"column.type !== 'enum' && $any(control.controls[rowIndex])?.controls[column.name]\"\n [config]=\"{\n inputType: column.type === 'integer' ? 'number' : 'text',\n viewonly: (viewonly$ | async) === true || !column.isEditable(row, column.name)\n }\"\n qdFocusable\n ></qd-input>\n </ng-template>\n </div>\n </ng-container>\n <td\n *ngIf=\"hasVisibleActions$ | async\"\n class=\"table-cell actions\"\n [attr.data-test-id]=\"testId + '-cell-inline-actions'\"\n >\n <button\n type=\"button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n class=\"menu-button\"\n data-test=\"secondary-actions-toggler\"\n >\n <qd-icon icon=\"overflowMenuHorizontal\"></qd-icon>\n </button>\n\n <ng-template #menu>\n <button\n *ngFor=\"let secondaryAction of actions$ | async\"\n class=\"secondary-actions\"\n [ngClass]=\"{ disabled: secondaryAction.isDisabled }\"\n (click)=\"handleSecondaryAction(secondaryAction, rowIndex)\"\n >\n {{ secondaryAction.label.i18n | translate }}\n </button>\n <button\n *ngIf=\"canAdd && (viewonly$ | async) === false\"\n class=\"secondary-actions\"\n (click)=\"removeRow(rowIndex)\"\n >\n {{ \"i18n.qd.quick.edit.removeButtonLabel\" | translate }}\n </button>\n </ng-template>\n </td>\n </div>\n </div>\n <div class=\"empty-body\" *ngIf=\"config.emptyStateView && !config.emptyStateView.disabled && templateData.length === 0\">\n <p>{{ config.emptyStateView.i18n | translate }}</p>\n </div>\n</div>\n", styles: [".table{display:flex;width:100%;flex-direction:column;margin:1.25rem auto;background-color:#fff;font-size:.875rem}.table ::ng-deep .qd-input-input{margin-bottom:0!important}.table-header .table-row{padding-top:.125rem;padding-bottom:.125rem;background-color:#e5e5e5;font-weight:700}.table-header .table-row .actions-column{flex:0;border-right:none;visibility:hidden}.table-header,.table-body{display:flex;flex-direction:column}.table-row{display:flex;flex-direction:row;padding:.25rem 1rem;border-bottom:.0625rem solid rgb(213,213,213);gap:1rem}.table-row ::ng-deep qd-form-label,.table-row ::ng-deep qd-form-hint{display:none!important}.table-row ::ng-deep qd-input{margin-bottom:0!important}.table-cell{display:flex;height:37px;flex:1;align-items:center;text-align:left}.table-cell.actions{flex:0}.table-row:last-child{border-bottom:none}.table-cell:last-child{border-right:none}.editable-actions{display:flex;justify-content:flex-end;margin-right:.625rem;gap:.625rem}.menu-button{display:flex;padding:0 .625rem 0 .375rem;background:unset;color:#454545;font-size:2rem;vertical-align:middle}.menu-button:hover,.menu-button:focus{color:#000;outline:0!important}.secondary-actions{display:block;width:100%;min-height:2rem;padding:0 1rem;background:#fff0;font-size:.75rem;text-align:left}.secondary-actions:hover{background-color:#f2f7fa}.secondary-actions.disabled{color:#b4b4b4;cursor:not-allowed}.secondary-actions.disabled:hover{background-color:#fff0}.dropdown{min-width:160px}.empty-body{padding:1.5rem;background:#fff}.empty-body p{margin:0 0 .5rem}.additional-info{align-self:center;margin-left:.25rem;color:#069;cursor:pointer;font-size:1rem;font-weight:400;transform:translateY(.0625rem)}.additional-info:hover,.additional-info:focus,.additional-info:active{color:#14516f}\n"], dependencies: [{ kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdDropdownComponent, selector: "qd-dropdown", inputs: ["value", "id", "formControlName", "config", "data-test-id", "qdPopoverMaxHeight", "dense"], outputs: ["valueChange", "enterClick", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdInputComponent, selector: "qd-input", inputs: ["formControlName", "value", "config", "isError", "data-test-id"], outputs: ["valueChange", "enterClick", "clickClear", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "directive", type: QdFocusableDirective, selector: "[qdFocusable]" }, { kind: "directive", type: QdTooltipOnClickDirective, selector: "[qdTooltipOnClick]", inputs: ["qdTooltipContent"] }, { kind: "directive", type: QdCustomForDirective, selector: "[qdCustomFor]", inputs: ["qdCustomForOf", "qdCustomForToggler"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
33089
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: QdQuickEditComponent, isStandalone: false, selector: "qd-quick-edit", inputs: { config: "config", data: "data", testId: ["data-test-id", "testId"] }, outputs: { formGroupChange: "formGroupChange", addNewClicked: "addNewClicked" }, viewQueries: [{ propertyName: "customForDirective", first: true, predicate: QdCustomForDirective, descendants: true }, { propertyName: "focusables", predicate: QdFocusableDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"editable-actions\" *ngIf=\"showStandaloneCreate\">\n <button\n qdButton\n qdButtonGhost\n icon=\"plus\"\n (click)=\"createRow()\"\n [data-test-id]=\"testId + '-button-add-new'\"\n class=\"create-button-standalone\"\n >\n {{ config.standaloneCreateLabel?.i18n ?? \"i18n.qd.quick.edit.createButtonLabel\" | translate }}\n </button>\n</div>\n\n<div class=\"table\" [formGroup]=\"control\">\n <div class=\"table-header\" *ngIf=\"!config.canAdd || templateData.length > 0 || config.emptyStateView\">\n <div class=\"table-row\">\n <div class=\"table-cell\" *ngFor=\"let header of visibleColumns\">\n {{ header?.i18n | translate }}\n <qd-icon\n *ngIf=\"hasTooltip(header?.tooltip)\"\n icon=\"circleInfo\"\n class=\"additional-info\"\n qdTooltipOnClick\n [qdTooltipContent]=\"header?.tooltip?.content\"\n ></qd-icon>\n </div>\n <div class=\"table-cell actions-column\" *ngIf=\"hasVisibleActions$ | async\">\n <button class=\"menu-button\">\n <qd-icon icon=\"overflowMenuHorizontal\"></qd-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"table-body\">\n <div\n class=\"table-row\"\n *qdCustomFor=\"let row of templateData; let rowIndex = index; toggler: togglerDrawing\"\n [formGroupName]=\"rowIndex\"\n >\n <ng-container *ngFor=\"let column of visibleColumns\">\n <div class=\"table-cell\">\n <qd-dropdown\n [config]=\"{\n filter: column.filter,\n options: column.options,\n placeholder: column.placeholder,\n placeholderPrefix: column.placeholderPrefix,\n viewonly: (viewonly$ | async) === true || !column.isEditable(row, column.name)\n }\"\n [data-test-id]=\"column.name + rowIndex\"\n *ngIf=\"column.type === 'enum'; else otherTypes\"\n [dense]=\"true\"\n [formControl]=\"$any(control.controls[rowIndex])?.controls[column.name]\"\n qdFocusable\n class=\"dropdown\"\n >\n </qd-dropdown>\n\n <ng-template #otherTypes>\n <qd-input\n [data-test-id]=\"column.name + rowIndex\"\n [formControlName]=\"column.name\"\n *ngIf=\"column.type !== 'enum' && $any(control.controls[rowIndex])?.controls[column.name]\"\n [config]=\"{\n inputType: column.type === 'integer' ? 'number' : 'text',\n viewonly: (viewonly$ | async) === true || !column.isEditable(row, column.name)\n }\"\n qdFocusable\n ></qd-input>\n </ng-template>\n </div>\n </ng-container>\n <td\n *ngIf=\"hasVisibleActions$ | async\"\n class=\"table-cell actions\"\n [attr.data-test-id]=\"testId + '-cell-inline-actions'\"\n >\n <button\n type=\"button\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onEveryClick'\"\n [qdPopoverStopPropagation]=\"true\"\n class=\"menu-button\"\n data-test=\"secondary-actions-toggler\"\n >\n <qd-icon icon=\"overflowMenuHorizontal\"></qd-icon>\n </button>\n\n <ng-template #menu>\n <button\n *ngFor=\"let secondaryAction of actions$ | async\"\n class=\"secondary-actions\"\n [ngClass]=\"{ disabled: secondaryAction.isDisabled }\"\n (click)=\"handleSecondaryAction(secondaryAction, rowIndex)\"\n >\n {{ secondaryAction.label.i18n | translate }}\n </button>\n <button\n *ngIf=\"canAdd && (viewonly$ | async) === false\"\n class=\"secondary-actions\"\n (click)=\"removeRow(rowIndex)\"\n >\n {{ \"i18n.qd.quick.edit.removeButtonLabel\" | translate }}\n </button>\n </ng-template>\n </td>\n </div>\n </div>\n <div class=\"empty-body\" *ngIf=\"config.emptyStateView && !config.emptyStateView.disabled && templateData.length === 0\">\n <p>{{ config.emptyStateView.i18n | translate }}</p>\n </div>\n</div>\n", styles: [".table{display:flex;width:100%;flex-direction:column;margin:1.25rem auto;background-color:#fff;font-size:.875rem}.table ::ng-deep .qd-input-input{margin-bottom:0!important}.table-header .table-row{padding-top:.125rem;padding-bottom:.125rem;background-color:#e5e5e5;font-weight:700}.table-header .table-row .actions-column{flex:0;border-right:none;visibility:hidden}.table-header,.table-body{display:flex;flex-direction:column}.table-row{display:flex;flex-direction:row;padding:.25rem 1rem;border-bottom:.0625rem solid rgb(213,213,213);gap:1rem}.table-row ::ng-deep qd-form-label,.table-row ::ng-deep qd-form-hint{display:none!important}.table-row ::ng-deep qd-input{margin-bottom:0!important}.table-cell{display:flex;height:37px;flex:1;align-items:center;text-align:left}.table-cell.actions{flex:0}.table-row:last-child{border-bottom:none}.table-cell:last-child{border-right:none}.editable-actions{display:flex;justify-content:flex-end;margin-right:.625rem;gap:.625rem}.menu-button{display:flex;padding:0 .625rem 0 .375rem;background:unset;color:#454545;font-size:2rem;vertical-align:middle}.menu-button:hover,.menu-button:focus{color:#000;outline:0!important}.secondary-actions{display:block;width:100%;min-height:2rem;padding:0 1rem;background:#fff0;font-size:.75rem;text-align:left}.secondary-actions:hover{background-color:#f2f7fa}.secondary-actions.disabled{color:#b4b4b4;cursor:not-allowed}.secondary-actions.disabled:hover{background-color:#fff0}.dropdown{min-width:160px}.empty-body{padding:1.5rem;background:#fff}.empty-body p{margin:0 0 .5rem}.additional-info{align-self:center;margin-left:.25rem;color:#069;cursor:pointer;font-size:1rem;font-weight:400;transform:translateY(.0625rem)}.additional-info:hover,.additional-info:focus,.additional-info:active{color:#14516f}\n"], dependencies: [{ kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "directive", type: QdButtonGhostDirective, selector: "button[qdButtonGhost], a[qdButtonGhost]" }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdDropdownComponent, selector: "qd-dropdown", inputs: ["value", "id", "formControlName", "config", "data-test-id", "qdPopoverMaxHeight", "dense"], outputs: ["valueChange", "enterClick", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "component", type: QdInputComponent, selector: "qd-input", inputs: ["formControlName", "value", "config", "isError", "data-test-id"], outputs: ["valueChange", "enterClick", "clickClear", "clickHint", "clickReadonly", "clickViewonly"] }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "directive", type: QdFocusableDirective, selector: "[qdFocusable]" }, { kind: "directive", type: QdTooltipOnClickDirective, selector: "[qdTooltipOnClick]", inputs: ["qdTooltipContent"] }, { kind: "directive", type: QdCustomForDirective, selector: "[qdCustomFor]", inputs: ["qdCustomForOf", "qdCustomForToggler"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
32940
33090
  }
32941
33091
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: QdQuickEditComponent, decorators: [{
32942
33092
  type: Component,
@@ -33182,5 +33332,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
33182
33332
  * Generated bundle index. Do not edit.
33183
33333
  */
33184
33334
 
33185
- export { APP_ENVIRONMENT, AVAILABLE_ICONS, BACKEND_ERROR_CODES, MockLocaleDatePipe, NavigationTileComponent, NavigationTilesComponent, PendingChangesGuardDirective, QD_DIALOG_CONFIRMATION_RESOLVER_TOKEN, QD_FILE_MANAGER_TOKEN, QD_FILE_UPLOAD_MANAGER_TOKEN, QD_FORM_OPTIONS_RESOLVER, QD_PAGE_OBJECT_RESOLVER_TOKEN, QD_PAGE_STEP_RESOLVER_TOKEN, QD_POPOVER_TOP_FIRST, QD_SAFE_BOTTOM_OFFSET, QD_TABLE_DATA_RESOLVER_TOKEN, QD_UPLOAD_HTTP_OPTIONS, QdButtonComponent, QdButtonGhostDirective, QdButtonGridComponent, QdButtonLinkDirective, QdButtonModule, QdButtonStackButtonComponent, QdButtonStackComponent, QdCheckboxChipsComponent, QdCheckboxComponent, QdCheckboxesComponent, QdChipComponent, QdChipModule, QdColumnAutoFillDirective, QdColumnBreakBeforeDirective, QdColumnDirective, QdColumnDisableResponsiveColspansDirective, QdColumnFullGridWidthDirective, QdColumnNextInSameRowDirective, QdColumnsDirective, QdColumnsDisableAutoFillDirective, QdColumnsDisableResponsiveColspansDirective, QdColumnsMaxDirective, QdCommentsComponent, QdCommentsModule, QdConnectFormStateToPageDirective, QdConnectorTableContextDirective, QdConnectorTableFilterDirective, QdConnectorTableSearchDirective, QdContactCardComponent, QdContactCardModule, QdContainerPairsCaptionComponent, QdContainerPairsContainerComponent, QdContainerPairsHeaderComponent, QdContainerPairsItemComponent, QdContainerPairsValueComponent, QdContextService, QdCoreModule, QdDatepickerComponent, QdDialogActionComponent, QdDialogAuthSessionEndComponent, QdDialogAuthSessionEndService, QdDialogComponent, QdDialogConfirmationComponent, QdDialogConfirmationErrorDirective, QdDialogConfirmationInfoDirective, QdDialogConfirmationSuccessDirective, QdDialogModule, QdDialogRecordStepperComponent, QdDialogService, QdDialogSize, QdDisabledDirective, QdDropdownComponent, QdFileCollectorComponent, QdFileCollectorModule, QdFileSizePipe$1 as QdFileSizePipe, QdFileUploadComponent, QdFileUploadService, QdFilterComponent, QdFilterFormItemsComponent, QdFilterModule, QdFilterRestParamBuilder, QdFilterService, QdFormArray, QdFormBuilder, QdFormControl, QdFormGroup, QdFormModule, QdGridComponent, QdGridModule, QdHorizontalPairsCaptionComponent, QdHorizontalPairsComponent, QdHorizontalPairsItemComponent, QdHorizontalPairsValueComponent, QdIconButtonComponent, QdIconComponent, QdIconModule, QdImageComponent, QdImageModule, QdIndeterminateProgressBarComponent, QdInputComponent, QdListModule, QdMenuButtonComponent, QdMockBreakpointService, QdMockButtonComponent, QdMockButtonGhostDirective, QdMockButtonGridComponent, QdMockButtonLinkDirective, QdMockButtonModule, QdMockButtonStackButtonComponent, QdMockButtonStackComponent, QdMockCalendarComponent, QdMockCheckboxChipsComponent, QdMockCheckboxComponent, QdMockCheckboxesComponent, QdMockChipComponent, QdMockChipModule, QdMockColumnDirective, QdMockColumnsDirective, QdMockContactCardComponent, QdMockContactCardModule, QdMockContainerPairsCaptionComponent, QdMockContainerPairsContainerComponent, QdMockContainerPairsHeaderComponent, QdMockContainerPairsItemComponent, QdMockContainerPairsValueComponent, QdMockCoreModule, QdMockCounterBadgeComponent, QdMockDatepickerComponent, QdMockDisabledDirective, QdMockDropdownComponent, QdMockFileCollectorComponent, QdMockFileCollectorModule, QdMockFilterCategoryBooleanComponent, QdMockFilterCategoryComponent, QdMockFilterCategoryDateComponent, QdMockFilterCategoryDateRangeComponent, QdMockFilterCategoryFreeTextComponent, QdMockFilterCategorySelectComponent, QdMockFilterComponent, QdMockFilterFormItemsComponent, QdMockFilterItemBooleanComponent, QdMockFilterItemDateComponent, QdMockFilterItemDateRangeComponent, QdMockFilterItemFreeTextComponent, QdMockFilterItemMultiSelectComponent, QdMockFilterItemSingleSelectComponent, QdMockFilterModule, QdMockFilterService, QdMockFormErrorComponent, QdMockFormGroupErrorComponent, QdMockFormHintComponent, QdMockFormLabelComponent, QdMockFormReadonlyComponent, QdMockFormViewonlyComponent, QdMockFormsModule, QdMockGridModule, QdMockIconButtonComponent, QdMockIconComponent, QdMockIconModule, QdMockImageComponent, QdMockImageModule, QdMockIndeterminateProgressBarComponent, QdMockInputComponent, QdMockListModule, QdMockNavigationTileComponent, QdMockNavigationTilesComponent, QdMockNavigationTilesModule, QdMockNotificationComponent, QdMockNotificationContentComponent, QdMockNotificationsComponent, QdMockNotificationsModule, QdMockNotificationsService, QdMockPageComponent, QdMockPageModule, QdMockPercentageProgressBarComponent, QdMockPinCodeComponent, QdMockPlaceHolderModule, QdMockPopoverOnClickDirective, QdMockProgressBarModule, QdMockQdPlaceHolderComponent, QdMockRadioButtonsComponent, QdMockRwdDisabledDirective, QdMockSearchComponent, QdMockSearchModule, QdMockSectionComponent, QdMockSectionModule, QdMockShellComponent, QdMockShellFooterComponent, QdMockShellHeaderBannerComponent, QdMockShellHeaderComponent, QdMockShellHeaderSearchComponent, QdMockShellHeaderWidgetComponent, QdMockShellModule, QdMockShellToolbarComponent, QdMockShellToolbarItemComponent, QdMockStatusIndicatorCaptionComponent, QdMockStatusIndicatorComponent, QdMockStatusIndicatorItemComponent, QdMockStatusIndicatorModule, QdMockStatusPairsCaptionComponent, QdMockStatusPairsComponent, QdMockStatusPairsErrorComponent, QdMockStatusPairsItemComponent, QdMockStatusPairsValueComponent, QdMockSwitchComponent, QdMockSwitchesComponent, QdMockTableComponent, QdMockTableModule, QdMockTextSectionComponent, QdMockTextSectionHeadlineComponent, QdMockTextSectionModule, QdMockTextSectionParagraphComponent, QdMockTextareaComponent, QdMockTileButtonListComponent, QdMockTileComponent, QdMockTileTextListComponent, QdMockTileTextListItemComponent, QdMockTileTitleComponent, QdMockTilesContainerComponent, QdMockTilesContainerTitleComponent, QdMockTilesModule, QdMockTranslatePipe, QdMockVisuallyHiddenDirective, QdMultiInputComponent, QdNavigationTilesModule, QdNotificationComponent, QdNotificationContentComponent, QdNotificationsComponent, QdNotificationsHttpInterceptorService, QdNotificationsModule, QdNotificationsService, QdNotificationsSnackbarListenerDirective, QdPageComponent, QdPageControlPanelComponent, QdPageFooterComponent, QdPageFooterCustomContentDirective, QdPageInfoBannerComponent, QdPageModule, QdPageStepComponent, QdPageStepperAdapterDirective, QdPageStepperComponent, QdPageStepperModule, QdPageStoreService, QdPageTabComponent, QdPageTabsAdapterDirective, QdPageTabsComponent, QdPageTabsModule, QdPanelSectionActionsComponent, QdPanelSectionComponent, QdPanelSectionModule, QdPanelSectionStatusComponent, QdPanelSectionTextParagraphComponent, QdPercentageProgressBarComponent, QdPinCodeComponent, QdPlaceHolderComponent, QdPlaceHolderModule, QdPlaceholderPipe, QdProgressBarModule, QdProjectionGuardComponent, QdPushEventsService, QdQuickEditComponent, QdQuickEditModule, QdRadioButtonsComponent, QdRichtextComponent, QdRwdDisabledDirective, QdSearchComponent, QdSearchModule, QdSectionAdapterDirective, QdSectionComponent, QdSectionModule, QdSectionToolbarComponent, QdShellComponent, QdShellModule, QdSortDirection, QdSpinnerComponent, QdSpinnerModule, QdStatusIndicatorComponent, QdStatusIndicatorModule, QdStatusPairsCaptionComponent, QdStatusPairsComponent, QdStatusPairsErrorComponent, QdStatusPairsItemComponent, QdStatusPairsValueComponent, QdSubgridComponent, QdSwitchComponent, QdSwitchesComponent, QdTableComponent, QdTableModule, QdTableSpringTools, QdTextSectionComponent, QdTextSectionHeadlineComponent, QdTextSectionModule, QdTextSectionParagraphComponent, QdTextareaComponent, QdTileButtonListComponent, QdTileComponent, QdTileTextListComponent, QdTileTextListItemComponent, QdTileTitleComponent, QdTilesComponent, QdTilesModule, QdTilesTitleComponent, QdTooltipAtIntersectionDirective, QdTreeComponent, QdTreeModule, QdTreeRowExpanderService, QdUiMockModule, QdUiModule, QdUploadErrorType, QdValidators, QdViewportAdaptiveDirective, QdVisuallyHiddenDirective, chipColorDefault, updateHtmlLang };
33335
+ export { APP_ENVIRONMENT, AVAILABLE_ICONS, BACKEND_ERROR_CODES, MockLocaleDatePipe, NavigationTileComponent, NavigationTilesComponent, QD_DIALOG_CONFIRMATION_RESOLVER_TOKEN, QD_FILE_MANAGER_TOKEN, QD_FILE_UPLOAD_MANAGER_TOKEN, QD_FORM_OPTIONS_RESOLVER, QD_PAGE_OBJECT_RESOLVER_TOKEN, QD_PAGE_STEP_RESOLVER_TOKEN, QD_POPOVER_TOP_FIRST, QD_SAFE_BOTTOM_OFFSET, QD_TABLE_DATA_RESOLVER_TOKEN, QD_UPLOAD_HTTP_OPTIONS, QdButtonComponent, QdButtonGhostDirective, QdButtonGridComponent, QdButtonLinkDirective, QdButtonModule, QdButtonStackButtonComponent, QdButtonStackComponent, QdCheckboxChipsComponent, QdCheckboxComponent, QdCheckboxesComponent, QdChipComponent, QdChipModule, QdColumnAutoFillDirective, QdColumnBreakBeforeDirective, QdColumnDirective, QdColumnDisableResponsiveColspansDirective, QdColumnFullGridWidthDirective, QdColumnNextInSameRowDirective, QdColumnsDirective, QdColumnsDisableAutoFillDirective, QdColumnsDisableResponsiveColspansDirective, QdColumnsMaxDirective, QdCommentsComponent, QdCommentsModule, QdConnectFormStateToPageDirective, QdConnectorTableContextDirective, QdConnectorTableFilterDirective, QdConnectorTableSearchDirective, QdContactCardComponent, QdContactCardModule, QdContainerPairsCaptionComponent, QdContainerPairsContainerComponent, QdContainerPairsHeaderComponent, QdContainerPairsItemComponent, QdContainerPairsValueComponent, QdContextService, QdCoreModule, QdDatepickerComponent, QdDialogActionComponent, QdDialogAuthSessionEndComponent, QdDialogAuthSessionEndService, QdDialogComponent, QdDialogConfirmationComponent, QdDialogConfirmationErrorDirective, QdDialogConfirmationInfoDirective, QdDialogConfirmationSuccessDirective, QdDialogModule, QdDialogRecordStepperComponent, QdDialogService, QdDialogSize, QdDisabledDirective, QdDropdownComponent, QdFileCollectorComponent, QdFileCollectorModule, QdFileSizePipe$1 as QdFileSizePipe, QdFileUploadComponent, QdFileUploadService, QdFilterComponent, QdFilterFormItemsComponent, QdFilterModule, QdFilterRestParamBuilder, QdFilterService, QdFormArray, QdFormBuilder, QdFormControl, QdFormGroup, QdFormModule, QdGridComponent, QdGridModule, QdHorizontalPairsCaptionComponent, QdHorizontalPairsComponent, QdHorizontalPairsItemComponent, QdHorizontalPairsValueComponent, QdIconButtonComponent, QdIconComponent, QdIconModule, QdImageComponent, QdImageModule, QdIndeterminateProgressBarComponent, QdInputComponent, QdListModule, QdMenuButtonComponent, QdMockBreakpointService, QdMockButtonComponent, QdMockButtonGhostDirective, QdMockButtonGridComponent, QdMockButtonLinkDirective, QdMockButtonModule, QdMockButtonStackButtonComponent, QdMockButtonStackComponent, QdMockCalendarComponent, QdMockCheckboxChipsComponent, QdMockCheckboxComponent, QdMockCheckboxesComponent, QdMockChipComponent, QdMockChipModule, QdMockColumnDirective, QdMockColumnsDirective, QdMockContactCardComponent, QdMockContactCardModule, QdMockContainerPairsCaptionComponent, QdMockContainerPairsContainerComponent, QdMockContainerPairsHeaderComponent, QdMockContainerPairsItemComponent, QdMockContainerPairsValueComponent, QdMockCoreModule, QdMockCounterBadgeComponent, QdMockDatepickerComponent, QdMockDisabledDirective, QdMockDropdownComponent, QdMockFileCollectorComponent, QdMockFileCollectorModule, QdMockFilterCategoryBooleanComponent, QdMockFilterCategoryComponent, QdMockFilterCategoryDateComponent, QdMockFilterCategoryDateRangeComponent, QdMockFilterCategoryFreeTextComponent, QdMockFilterCategorySelectComponent, QdMockFilterComponent, QdMockFilterFormItemsComponent, QdMockFilterItemBooleanComponent, QdMockFilterItemDateComponent, QdMockFilterItemDateRangeComponent, QdMockFilterItemFreeTextComponent, QdMockFilterItemMultiSelectComponent, QdMockFilterItemSingleSelectComponent, QdMockFilterModule, QdMockFilterService, QdMockFormErrorComponent, QdMockFormGroupErrorComponent, QdMockFormHintComponent, QdMockFormLabelComponent, QdMockFormReadonlyComponent, QdMockFormViewonlyComponent, QdMockFormsModule, QdMockGridModule, QdMockIconButtonComponent, QdMockIconComponent, QdMockIconModule, QdMockImageComponent, QdMockImageModule, QdMockIndeterminateProgressBarComponent, QdMockInputComponent, QdMockListModule, QdMockNavigationTileComponent, QdMockNavigationTilesComponent, QdMockNavigationTilesModule, QdMockNotificationComponent, QdMockNotificationContentComponent, QdMockNotificationsComponent, QdMockNotificationsModule, QdMockNotificationsService, QdMockPageComponent, QdMockPageModule, QdMockPercentageProgressBarComponent, QdMockPinCodeComponent, QdMockPlaceHolderModule, QdMockPopoverOnClickDirective, QdMockProgressBarModule, QdMockQdPlaceHolderComponent, QdMockRadioButtonsComponent, QdMockRwdDisabledDirective, QdMockSearchComponent, QdMockSearchModule, QdMockSectionComponent, QdMockSectionModule, QdMockShellComponent, QdMockShellFooterComponent, QdMockShellHeaderBannerComponent, QdMockShellHeaderComponent, QdMockShellHeaderSearchComponent, QdMockShellHeaderWidgetComponent, QdMockShellModule, QdMockShellToolbarComponent, QdMockShellToolbarItemComponent, QdMockStatusIndicatorCaptionComponent, QdMockStatusIndicatorComponent, QdMockStatusIndicatorItemComponent, QdMockStatusIndicatorModule, QdMockStatusPairsCaptionComponent, QdMockStatusPairsComponent, QdMockStatusPairsErrorComponent, QdMockStatusPairsItemComponent, QdMockStatusPairsValueComponent, QdMockSwitchComponent, QdMockSwitchesComponent, QdMockTableComponent, QdMockTableModule, QdMockTextSectionComponent, QdMockTextSectionHeadlineComponent, QdMockTextSectionModule, QdMockTextSectionParagraphComponent, QdMockTextareaComponent, QdMockTileButtonListComponent, QdMockTileComponent, QdMockTileTextListComponent, QdMockTileTextListItemComponent, QdMockTileTitleComponent, QdMockTilesContainerComponent, QdMockTilesContainerTitleComponent, QdMockTilesModule, QdMockTranslatePipe, QdMockVisuallyHiddenDirective, QdMultiInputComponent, QdNavigationTilesModule, QdNotificationComponent, QdNotificationContentComponent, QdNotificationsComponent, QdNotificationsHttpInterceptorService, QdNotificationsModule, QdNotificationsService, QdNotificationsSnackbarListenerDirective, QdPageComponent, QdPageControlPanelComponent, QdPageFooterComponent, QdPageFooterCustomContentDirective, QdPageInfoBannerComponent, QdPageModule, QdPageStepComponent, QdPageStepperAdapterDirective, QdPageStepperComponent, QdPageStepperModule, QdPageStoreService, QdPageTabComponent, QdPageTabsAdapterDirective, QdPageTabsComponent, QdPageTabsModule, QdPanelSectionActionsComponent, QdPanelSectionComponent, QdPanelSectionModule, QdPanelSectionStatusComponent, QdPanelSectionTextParagraphComponent, QdPendingChangesGuardDirective, QdPercentageProgressBarComponent, QdPinCodeComponent, QdPlaceHolderComponent, QdPlaceHolderModule, QdPlaceholderPipe, QdProgressBarModule, QdProjectionGuardComponent, QdPushEventsService, QdQuickEditComponent, QdQuickEditModule, QdRadioButtonsComponent, QdRichtextComponent, QdRwdDisabledDirective, QdSearchComponent, QdSearchModule, QdSectionAdapterDirective, QdSectionComponent, QdSectionModule, QdSectionToolbarComponent, QdShellComponent, QdShellModule, QdSortDirection, QdSpinnerComponent, QdSpinnerModule, QdStatusIndicatorComponent, QdStatusIndicatorModule, QdStatusPairsCaptionComponent, QdStatusPairsComponent, QdStatusPairsErrorComponent, QdStatusPairsItemComponent, QdStatusPairsValueComponent, QdSubgridComponent, QdSwitchComponent, QdSwitchesComponent, QdTableComponent, QdTableModule, QdTableSpringTools, QdTextSectionComponent, QdTextSectionHeadlineComponent, QdTextSectionModule, QdTextSectionParagraphComponent, QdTextareaComponent, QdTileButtonListComponent, QdTileComponent, QdTileTextListComponent, QdTileTextListItemComponent, QdTileTitleComponent, QdTilesComponent, QdTilesModule, QdTilesTitleComponent, QdTooltipAtIntersectionDirective, QdTreeComponent, QdTreeModule, QdTreeRowExpanderService, QdUiMockModule, QdUiModule, QdUploadErrorType, QdValidators, QdViewportAdaptiveDirective, QdVisuallyHiddenDirective, chipColorDefault, updateHtmlLang };
33186
33336
  //# sourceMappingURL=quadrel-enterprise-ui-framework.mjs.map